[Aportes indexados] Random NPC Respawn

Estado
Cerrado para nuevas respuestas.

Lagalot

Newbie Lvl 6
Objetivo del codigo: Al iniciarse el servidor, se revisa si X npc se encuentra en algun mapa del mundo, si no es asi, automaticamente respawnea en un mapa inseguro ALEATORIO.

Aclaraciones: Al morir el npc, respawnea en otro lugar aleatorio, las posiciones son SIEMPRE diferentes.

Version: 0.11.5, Facilmente adaptable a 0.11.2

IMPORTANTE: Todas las X deben ser reemplazadas con el numero del NPC.

Procedimientos en el Servidor

En el sub:
Código:
Sub MuereNPC
abajo de:
Código:
'Quitamos el npc
   Call QuitarNPC(NpcIndex)
ponemos:
Código:
If Npclist(NpcIndex).Numero = X Then
        Dim LagaRp As WorldPos
        LagaRp.Map = RandomNumber(1, NumMaps)
        If MapInfo(LagaRp.Map).Pk = True Then
            LagaRp.Map = RandomNumber(1, NumMaps)
            If MapInfo(LagaRp.Map).Pk = True Then
                LagaRp.Map = RandomNumber(1, NumMaps)
            End If
        End If
        LagaRp.X = RandomNumber(20, 80)
        LagaRp.Y = RandomNumber(20, 80)
        Dim LagaNRP As WorldPos
        Call ClosestStablePos(LagaRp, LagaNRP)
        Call SpawnNpc(X, LagaNRP, True, False)
        Call SendData(SendTarget.ToAll, 0, 0, "||Diablo camina entre nosotros!" & FONTTYPE_FIGHT)
    End If

Con esto, si el npc cuyo index se declaro en la variable X muere, respawnea en otro mapa y se le avisa a todos de su existencia.

En la frmmain agregamos un timer llamado:
Código:
CheckTimer
cuyo intervalo sera "60000" y estara disabled.

Su codigo interno sera:
Código:
Private Sub CheckTimer_Timer()
CheckTimer.Enabled = False
Dim A
Dim B
Dim C
Dim D As Boolean
For A = 1 To NumMaps
    For B = MinXBorder To MaxXBorder
        For C = MinYBorder To MaxYBorder
            If MapData(A, B, C).NpcIndex = X Then
                D = True
            End If
        Next C
    Next B
Next A
 
If Not D = True Then
    Dim LagaRp As WorldPos
    LagaRp.Map = RandomNumber(1, NumMaps)
    If MapInfo(LagaRp.Map).Pk = True Then
        LagaRp.Map = RandomNumber(1, NumMaps)
        If MapInfo(LagaRp.Map).Pk = True Then
            LagaRp.Map = RandomNumber(1, NumMaps)
        End If
    End If
    LagaRp.X = RandomNumber(20, 80)
    LagaRp.Y = RandomNumber(20, 80)
    Dim LagaNRP As WorldPos
    Call ClosestStablePos(LagaRp, LagaNRP)
    Call SpawnNpc(X, LagaNRP, True, False)
    Call SendData(SendTarget.ToAll, 0, 0, "||Diablo camina entre nosotros!" & FONTTYPE_FIGHT)
End If
 
End Sub

Con esto nos sercioramos de que cuando inicie el servidor (si el mounstruo no fue guardado), que respawnee al minuto de haber sido abierto.

Por ultimo, en el sub:
Código:
Sub Main
abajo de:
Código:
.tLluvia.Enabled = True
ponemos:
Código:
.CheckTimer.Enabled = True

Con esto activamos el timer.

Espero que les haya servido, suerte.
 

skay

Newbie Lvl 2
bueee....

hola:

quiero preguntar si alguien hizo andar este code en la version 0.11.2
porq no lo puedo hacer andar, va lo q no anda creo yo es el timmer ya q suando habro el server no inicia solo y al la otra parte anda pero mal
por ejemplo yo hago el bicho y lo mato, pero se regenera en mapas seguros y en el maldito "mapa 0"


si alguien puede decir como hacerlo andar en la v0.11.2 se lo agradeceria mucho
 

skay

Newbie Lvl 2
si...

ya los borre....

pero me hace eso

no se como llamar al bicho en el respawn del timmer, solo con el numero no anda por eso creo q no anda el timmer....


y a parte queria ver si se puede hacer q aparezca cada 2 horas o hora y 1/2
 
Estado
Cerrado para nuevas respuestas.
Arriba