Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- estrutura do NPC
- Type NpcRec
- Name As String
- Sprite As Long
- Grande As Byte
- Range As Byte
- Acao As Byte
- Ataque As Long
- Armadura As Long
- HPLevel As Long
- HPArmadura As Long
- ExpLevel As Long
- LevelMin As Long
- LevelMax As Long
- LevelRaro As Long
- SpawnSecs As Long
- Map_min As Long
- Map_max As Long
- Map_x As Byte
- Map_y As Byte
- ReacaoNPC(0 To MAX_CLASSES) As NPCReacaoRec
- ItemNPC(1 To MAX_NPC_DROPS) As NPCEditorRec
- MissaoNPC(1 To MAX_NPC_MISSAO) As NPCMissaoRec
- End Type
- Estrutura do MapNPC
- Type MapNpcRec
- ID As Long
- Morto As Byte
- Sprite As Long
- Sexo As Byte
- Mapa As Long
- Level As Long
- Ataque As Long
- Armadura As Long
- AtualHP As Long
- TotalHP As Long
- ' For server and cliente only
- Target As Long
- TargetType As Byte
- X As Byte
- Y As Byte
- Dir As Integer
- SpawnWait As Long
- AttackTimer As Long
- End Type
- Public MapNpc(1 To MAX_MAP_NPCS) As MapNpcRec
- QUANDO CARREGAVA O MAPNPC
- MapNpc(1).ID = 1 ' hollow fantasma
- MapNpc(2).ID = 1 ' hollow fantasma
- MapNpc(3).ID = 1 ' hollow fantasma
- OS ATRIBUTOS DO NPC
- With Npc(1)
- .Name = "Hollow"
- .Sprite = 3
- .Grande = YES
- .Range = 5
- .Acao = YES_MOVIMENTO
- .Ataque = 6
- .Armadura = 2
- .HPLevel = 12
- .HPArmadura = 7
- .ExpLevel = 15
- .LevelMin = 1
- .LevelMax = 3
- .LevelRaro = 5
- .SpawnSecs = 30
- .Map_min = 1
- .Map_max = 2
- .Map_x = 0
- .Map_y = 0
- .ReacaoNPC(SHINIGAMI).Tipo = INIMIGO
- .ReacaoNPC(HOLLOW).Tipo = ALIADO
- .ReacaoNPC(FULLBRINGER).Tipo = INIMIGO
- .ReacaoNPC(QUINCY).Tipo = INIMIGO
- .ItemNPC(1).ItemNum = 0
- .ItemNPC(1).ItemValue = 0
- .ItemNPC(1).Chance = 0
- .MissaoNPC(1).ID = 0
- .MissaoNPC(1).LevelReq = 0
- End With
- NO SERVIDOR
- Sub SpawnMapNpc(ByVal MapNpcNum As Long)
- Dim i As Long, X As Long, Y As Long
- Dim NpcNum As Long, MapNum As Long
- Dim Packet As String
- Dim Spawned As Boolean
- ' Check for subscript out of range
- If MapNpcNum < 1 Or MapNpcNum > MAX_MAP_NPCS Then Exit Sub
- Spawned = False
- NpcNum = MapNpc(MapNpcNum).ID
- If NpcNum > 0 Then
- MapNpc(MapNpcNum).Morto = NO
- MapNpc(MapNpcNum).Sprite = SelectSprite(NpcNum)
- MapNpc(MapNpcNum).Sexo = Rand(SEX_MALE, SEX_FEMALE)
- MapNpc(MapNpcNum).Mapa = Rand(Npc(NpcNum).Map_min, Npc(NpcNum).Map_max)
- ' Randomiza o level do monstro do mapa
- If Not Int(Rnd * 5) = 1 Then
- MapNpc(MapNpcNum).Level = Rand(Npc(NpcNum).LevelMin, Npc(NpcNum).LevelMax)
- Else
- MapNpc(MapNpcNum).Level = Rand(Npc(NpcNum).LevelMax, Npc(NpcNum).LevelRaro)
- End If
- MapNpc(MapNpcNum).Ataque = Npc(NpcNum).Ataque
- MapNpc(MapNpcNum).Armadura = Npc(NpcNum).Armadura
- MapNpc(MapNpcNum).AtualHP = GetNpcMaxhp(NpcNum, MapNpc(MapNpcNum).Level)
- MapNpc(MapNpcNum).TotalHP = GetNpcMaxhp(NpcNum, MapNpc(MapNpcNum).Level)
- MapNpc(MapNpcNum).Target = 0
- MapNpc(MapNpcNum).TargetType = TARGET_TYPE_NONE
- MapNpc(MapNpcNum).Dir = Int(Rnd * 4)
- ' For server spawn npc on map position
- If Npc(NpcNum).Map_x = 0 And Npc(NpcNum).Map_y = 0 Then
- ' Well try 100 times to randomly place the sprite
- For i = 1 To 100
- X = Int(Rnd * MAX_MAPX)
- Y = Int(Rnd * MAX_MAPY)
- ' Check if the tile is walkable
- If map(MapNpc(MapNpcNum).Mapa).Tile(X, Y).Type = TILE_TYPE_WALKABLE Then
- MapNpc(MapNpcNum).X = X
- MapNpc(MapNpcNum).Y = Y
- Spawned = True
- Exit For
- End If
- Next i
- ' Didn't spawn, so now we'll just try to find a free tile
- If Not Spawned Then
- For X = 0 To MAX_MAPX
- For Y = 0 To MAX_MAPY
- If map(MapNpc(MapNpcNum).Mapa).Tile(X, Y).Type = TILE_TYPE_WALKABLE Then
- MapNpc(MapNpcNum).X = X
- MapNpc(MapNpcNum).Y = Y
- Spawned = True
- End If
- Next Y
- Next X
- End If
- Else
- MapNpc(MapNpcNum).X = Npc(NpcNum).Map_x - 1
- MapNpc(MapNpcNum).Y = Npc(NpcNum).Map_y - 1
- Spawned = True
- End If
- ' If we suceeded in spawning then send it to everyone
- If Spawned Then
- Packet = "SPAWNNPC" & SEP_CHAR
- Packet = Packet & MapNpcNum & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).ID & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).Morto & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).Sprite & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).Sexo & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).Mapa & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).Level & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).AtualHP & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).TotalHP & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).X & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).Y & SEP_CHAR
- Packet = Packet & MapNpc(MapNpcNum).Dir & SEP_CHAR
- Packet = Packet & END_CHAR
- Call SendDataToAll(Packet)
- End If
- End If
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement