[Aportes indexados] NPC's con atributos

Estado
Cerrado para nuevas respuestas.

Lagalot

Newbie Lvl 6
[SERVIDOR] NPC's con atributos

Objetivos del codigo: Para darle mas rol al juego, un npc puede ser inmune a la magia, inmune al daño fisico, ver a la gente invisible o pegar mas.

Aclaraciones: Solo 1 atributo por npc, mas no, aveces el npc puede quedar normal.

Version: 0.11.5, adaptable facilmente a 0.11.2

Procedimientos en el Servidor

Buscamos lo siguente:
Código:
Sub SendUserStats
y arriba creamos este sub:
Código:
Sub PonerAtributos(NpcIndex As Integer)
 
    'Tiramos un random
    Dim RnDN
    RnDN = RandomNumber(0, 20)
 
    'Limpiamos los atributos
    Npclist(NpcIndex).Atributos.Clairovayant = False
    Npclist(NpcIndex).Atributos.AntiFis = False
    Npclist(NpcIndex).Atributos.AntiMag = False
    Npclist(NpcIndex).Atributos.DestAmp = False
    Npclist(NpcIndex).Atributos.Berserk = False
    
    'Vemos si queda con atributos o si es un npc normal
    If RnDN = 0 Then
        Npclist(NpcIndex).Atributos.Clairovayant = True
    ElseIf RnDN = 5 Then
        Npclist(NpcIndex).Atributos.AntiFis = True
    ElseIf RnDN = 10 Then
        Npclist(NpcIndex).Atributos.AntiMag = True
    ElseIf RnDN = 15 Then
        Npclist(NpcIndex).Atributos.DestAmp = True
    ElseIf RnDN = 20 Then
        Npclist(NpcIndex).Atributos.Berserk = True
    End If
 
End Sub

Aca le otorgamos un atributo a X npc.

Ahora vamos a la funcion:
Código:
Function OpenNPC
y abajo de donde dice:
Código:
Npclist(NpcIndex).Numero = NpcNumber
ponemos:
Código:
Call PonerAtributos(NpcIndex)

Con esto, cada vez que se carguen los datos de un NPC, se le otorgaran atributos al mismo.

En el sub:
Código:
Sub UserDañoNpc
abajo de:
Código:
daño = daño - Npclist(NpcIndex).Stats.def
ponemos:
Código:
If Npclist(NpcIndex).Atributos.AntiFis = True Then
    daño = daño - Porcentaje(daño, 33)
end if

Si el npc el inmune a daño fisico, entonces le restamos 33% al daño total.

En el sub:
Código:
Sub HechizoPropNPC
arriba de:
Código:
Npclist(NpcIndex).Stats.MinHP = Npclist(NpcIndex).Stats.MinHP - daño
ponemos:
Código:
If Npclist(NpcIndex).Atributos.AntiMag = True Then
        daño = daño - Porcentaje(daño, 33)
    end if

Si el npc el inmune a daño magico, entonces le restamos 33% al daño total.

En el sub:
Código:
Sub IrUsuarioCercano
reemplazamos esto:
Código:
If UserList(UI).flags.Muerto = 0 And UserList(UI).flags.Invisible = 0 And UserList(UI).flags.Oculto = 0 Then
por:
Código:
If UserList(UI).flags.Muerto = 0 And UserList(UI).flags.Invisible = 0 And UserList(UI).flags.Oculto = 0 Or UserList(UI).flags.Muerto = 0 And Npclist(NpcIndex).Atributos.Clairovayant = True Then

Lo mismo con el sub:
Código:
Sub PathFindingAI
reemplazamos esto:
Código:
If UserList(tmpUserIndex).flags.Muerto = 0 And UserList(tmpUserIndex).flags.Invisible = 0 And UserList(tmpUserIndex).flags.Oculto = 0 Then
por:
Código:
If UserList(tmpUserIndex).flags.Muerto = 0 And UserList(tmpUserIndex).flags.Invisible = 0 And UserList(tmpUserIndex).flags.Oculto = 0 or UserList(tmpUserIndex).flags.Muerto = 0 And Npclist(NpcIndex).Atributos.Clairovayant = True Then

Con esto hacemos que el npc te siga aunque estes invisible (solo si es clairovayant).

Ahora nos faltan las declaraciones, para eso buscamos:
Código:
GiveGLD As Long
y abajo ponemos:
Código:
Atributos As NpcAtributos

despues arriba del type:
Código:
Type tHechizo
creamos este type:
Código:
Public Type NpcAtributos
    Clairovayant As Boolean
    AntiMag As Boolean
    AntiFis As Boolean
    Berserk As Boolean
End Type

Estas son las declaraciones que nesesitamos para que funcione todo.

Por ultimo en el sub:
Código:
Sub NPCDaño
Arriba de:
Código:
Call SendData(SendTarget.ToIndex, UserIndex, 0, "N2" & Lugar & "," & daño)
ponemos:
Código:
If Npclist(NpcIndex).Atributos.Berserk = True Then
    daño = daño + Porcentaje(daño, 20)
end if

Con esto hacemos que un npc berserked pegue mas.

Codigo EDITADO

Espero que les halla servidor, suerte.
 

Tavo

[color=#BF0000]Lucha por tus ideales![/color]
Muy buen codigo, lo dejo un poco mas y despues lo muevo ;)
 

Lagalot

Newbie Lvl 6
No, lo hice yo a la mañana, estaba jugando hb y me gusto la idea, asi que lo pase al ao.

El codigo deberia funcionar, si no es asi, alguien aviseme que lo arreglo.
 

Amraphen

Aprendiz Lvl 6
Muy groso el codigo che! Usando este código puede haber más combinaciones de NPCs y es muy rolero.

Me encantó xD.
 
Estado
Cerrado para nuevas respuestas.
Arriba