[Aportes indexados] NPC Drops

Estado
Cerrado para nuevas respuestas.

Lagalot

Newbie Lvl 6
Objetivo del codigo: Probabilidad de un npc de dropear X objeto.

Aclaraciones: Los objetos con mayor probabilidad van arriba y la suma de todos los porcentajes NO PUEDE SER MAYOR A 100 y solo se puede tirar 1 objeto.

Version: 0.11.5

Procedimientos en el Servidor

Ejemplo: Los objetos que tira un npc quedarian masomenos asi:
Código:
NumDrops=3  'Numero de objetos
Prob1=5     'Probabilidad
Drop1=512   'ObjIndex
Prob2=10    'Probabilidad
Drop2=491   'ObjIndex
Prob3=1     'Probabilidad
Drop3=784   'ObjIndex

En el modulo declaraciones, abajo de:
Código:
GiveGLD As Long
ponemos:
Código:
Drops As NpcDrop
y arriba del type:
Código:
Type tHechizo
creamos este otro:
Código:
Public Type NpcDrop
    NumDrop As Integer
    DropIndex(1 To 10) As Integer
    Porcentaje(1 To 10) As Integer
End Type

Con esto declaramos todo lo que vamos a utilizar.

Luego, en el sub:
Código:
OpenNPC
Abajo de:
Código:
Npclist(NpcIndex).GiveEXP = val(Leer.GetValue("NPC" & NpcNumber, "GiveEXP"))
ponen:
Código:
Dim LagaNDrop
Npclist(NpcIndex).Drops.NumDrop = val(Leer.GetValue("NPC" & NpcNumber, "NumDrops"))
For LagaNDrop = 1 To NumDrop
    Npclist(NpcIndex).Drops.DropIndex(LagaNDrop) = val(Leer.GetValue("NPC" & NpcNumber, "Drop" & LagaNDrop & ""))
    Npclist(NpcIndex).Drops.Porcentaje(LagaNDrop) = val(Leer.GetValue("NPC" & NpcNumber, "Prob" & LagaNDrop & ""))
Next LagaNDrop

Con esto estamos cargando los drops del npcs-hostiles.dat.

Finalmente, reemplazamos TODO el sub:
Código:
Sub Npc_Tirar_Items
por este:
Código:
Public Sub NPC_TIRAR_ITEMS(ByRef npc As npc)
'TIRA TODOS LOS ITEMS DEL NPC
On Error Resume Next
 
If npc.Drops.NumDrop > 0 Then
    
    Dim LagaRLDrop
    Dim LagaI
    Dim MyObj As Obj
    LagaRLDrop = RandomNumber(1, 100)
    
    For LagaI = 1 To npc.Drops.NumDrop
        If LagaRLDrop < npc.Drops.Porcentaje(LagaI) Then
            MyObj.ObjIndex = npc.Drops.DropIndex(LagaI)
            MyObj.Amount = 1
            Call TirarItemAlPiso(npc.Pos, MiObj)
            Exit Sub
        End If
    Next LagaI
 
End If
 
End Sub

Aca tira randoms y arroja el objeto.

Espero que les haya servido, suerte.
 
Estado
Cerrado para nuevas respuestas.
Arriba