Limpieza del mundo automática

Ver el tema anterior Ver el tema siguiente Ir abajo

Limpieza del mundo automática

Mensaje por Metrosersuah el 22/4/2017, 4:00 pm

Servidor


Agregan este modúlo

mLimpieza:

Código:
Option Explicit

Const MAXITEMS As Integer = 1000
Private ArrayLimpieza(MAXITEMS) As WorldPos

'//Desde acá establecemos el ultimo slot que se uso
Public UltimoSlotLimpieza As Integer


Public Sub AgregarObjetoLimpieza(pos As WorldPos)

    '//Primera pos almacenada
    If UltimoSlotLimpieza = -1 Then
        ArrayLimpieza(0) = pos
        UltimoSlotLimpieza = 0
        Exit Sub
    End If
   
    '//En caso de no ser cero, significa que ya hay objetos, seguimos sumando +1
    UltimoSlotLimpieza = UltimoSlotLimpieza + 1
   
    ArrayLimpieza(UltimoSlotLimpieza) = pos
   
    '¿Alcanzamos los slots que permite almacenar?
    '//Reservamos 100 slots por si cuando empieza a limpiar el mundo, siguen tirando objetos.
    If UltimoSlotLimpieza = MAXITEMS - 100 Then
        counterSV.Limpieza = 30
    End If
End Sub

Public Sub BorrarObjetosLimpieza()
Dim i As Long

    For i = 0 To MAXITEMS
        With ArrayLimpieza(i)
            Call EraseObj(10000, .map, .X, .Y)
        End With
    Next i
End Sub

Declarar
Código:
Private Type tCountersServidor
    Limpieza As Integer
End Type

Public counterSV As tCountersServidor

Buscar en el modúlo general.
Código:
 Call LoadMotd

Abajo ponemos

UltimoSlotLimpieza = -1

En el sub pasarsegundo ponemos

Código:
    'Limpieza del mundo
    If counterSV.Limpieza > 0 Then
        counterSV.Limpieza = counterSV.Limpieza - 1
       
        If counterSV.Limpieza < 6 Then Call SendData(SendTarget.toAll, 0, PrepareMessageConsoleMsg("Limpieza del mundo en " & counterSV.Limpieza & " segundos. ¡¡Atentos!!", FontTypeNames.FONTTYPE_SERVER))
       
        If counterSV.Limpieza = 0 Then
            Call BorrarObjetosLimpieza
            Call SendData(SendTarget.toAll, 0, PrepareMessageConsoleMsg("Limpieza del mundo finalizada.", FontTypeNames.FONTTYPE_SERVER))
            UltimoSlotLimpieza = -1
        End If
    End If

Remplazar este sub

Código:
Sub MakeObj(ByRef obj As obj, ByVal map As Integer, ByVal X As Integer, ByVal Y As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************
   
    If obj.ObjIndex > 0 And obj.ObjIndex <= UBound(ObjData) Then
   
        With MapData(map, X, Y)
            If .ObjInfo.ObjIndex = obj.ObjIndex Then
                .ObjInfo.Amount = .ObjInfo.Amount + obj.Amount
            Else
                .ObjInfo = obj
               
                Call modSendData.SendToAreaByPos(map, X, Y, PrepareMessageObjectCreate(ObjData(obj.ObjIndex).GrhIndex, X, Y))
            End If
           
           
            '//Agregamos las pos de los objetos
            If ObjData(obj.ObjIndex).OBJType <> otFogata And _
                Not EsObjetoFijo(ObjData(obj.ObjIndex).OBJType) Then
                Dim xPos As WorldPos
                xPos.map = map
                xPos.X = X
                xPos.Y = Y
                AgregarObjetoLimpieza xPos
            End If
        End With
    End If
End Sub





avatar
Metrosersuah
Nivel 5
Nivel 5

¿BANEADO? : No.
Premios : Ninguno.
Cantidad de envíos : 216
Localización : 4 Paredes
Fecha de inscripción : 13/02/2016

Ver perfil de usuario http://www.argentumonline.com.ar

Volver arriba Ir abajo

Re: Limpieza del mundo automática

Mensaje por Sativa el 9/8/2017, 4:18 am

Cada cuánto sería esta limpieza ? no seria mas práctico hacerlo desde un timer?
avatar
Sativa
Retirado
Retirado

¿BANEADO? : No.
Premios : Ninguno.
Cantidad de envíos : 2871
Fecha de inscripción : 26/05/2010

Ver perfil de usuario

Volver arriba Ir abajo

Re: Limpieza del mundo automática

Mensaje por Metrosersuah el 29/8/2017, 12:45 am

Sativa escribió:Cada cuánto sería esta limpieza ? no seria mas práctico hacerlo desde un timer?

Cuándo hay 1000 objetos tirados en el mundo automáticamente se limpia todo Smile
avatar
Metrosersuah
Nivel 5
Nivel 5

¿BANEADO? : No.
Premios : Ninguno.
Cantidad de envíos : 216
Localización : 4 Paredes
Fecha de inscripción : 13/02/2016

Ver perfil de usuario http://www.argentumonline.com.ar

Volver arriba Ir abajo

Re: Limpieza del mundo automática

Mensaje por Toyz el 30/8/2017, 1:35 am

En el título debería aclarar que es una limpieza del mundo mucho mejor que la que está actualmente en un servidor virgen. La actual lo que hace es recorrer todos los mapas y hacer una limpieza tile x tile, lo que llega a hacer (en caso de tener 290 mapas, como un 13.x): un bucle de 2900000 vueltas mientras que con esto solo 1000 (el límite). Para que esto se logre lo que hace es crear una lista con todos los objetos que llegan al suelo guardando en que coordenada está y a la hora de borrar los objetos en el piso ya tiene la coordenada de cada uno y sólo limpia ese tile Razz

Está bueno, aunque ya se ha visto ¿de dónde lo sacaste?.


_______________

Como saben yo aporto bastante en Servers-Argentum y les quiero decir que todos tienen derecho de usar y de aportar en otra comunidad mis aportes pero sólo con un requisito y es tan simple que dejar los créditos. Gracias.
Si conocen otra comunidad y en esa misma mis aportes no están aportados, si tenés tiempo y ganas, aportalo! A mucha gente le puede servir. No te olvides del requisito Razz

MIS MEJORES APORTES:

Compra/venta de personajes:
https://goo.gl/A44Av0

Juegos del Hambre:
https://goo.gl/u6aNUG

Deathmatch automático:
https://goo.gl/GQF4fK

Sistema de retos vía MMR con búsqueda, emparejamiento, etc:
https://goo.gl/40uP0f

Sistemas de eventos automáticos de 1vs1 hasta 10vs10:
https://goo.gl/XYKygc

1VS1 - AIM - MELEE - Gana Sigue (Se liberan cupos)
https://goo.gl/qq83wx

Retos 3vs3 - [Items, 2 rounds, múltiples arenas, oro]
https://goo.gl/x8SMnV

Eliminar sistema de Skill (COMPLETO)
https://goo.gl/mKxHzC
avatar
Toyz
Administrador
Administrador

¿BANEADO? : No.
Premios :
[1er puesto] Usuario del año 2016
Cantidad de envíos : 5022
Edad : 16
Localización : Global.
Fecha de inscripción : 28/09/2014

Ver perfil de usuario

Volver arriba Ir abajo

Re: Limpieza del mundo automática

Mensaje por Metrosersuah el 30/8/2017, 2:50 am

Toyz escribió:En el título debería aclarar que es una limpieza del mundo mucho mejor que la que está actualmente en un servidor virgen. La actual lo que hace es recorrer todos los mapas y hacer una limpieza tile x tile, lo que llega a hacer (en caso de tener 290 mapas, como un 13.x): un bucle de 2900000 vueltas mientras que con esto solo 1000 (el límite). Para que esto se logre lo que hace es crear una lista con todos los objetos que llegan al suelo guardando en que coordenada está y a la hora de borrar los objetos en el piso ya tiene la coordenada de cada uno y sólo limpia ese tile Razz

Está bueno, aunque ya se ha visto ¿de dónde lo sacaste?.

Esta extraido de Cui AO :p
avatar
Metrosersuah
Nivel 5
Nivel 5

¿BANEADO? : No.
Premios : Ninguno.
Cantidad de envíos : 216
Localización : 4 Paredes
Fecha de inscripción : 13/02/2016

Ver perfil de usuario http://www.argentumonline.com.ar

Volver arriba Ir abajo

Re: Limpieza del mundo automática

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.