FuckStyle
Mensagens : 23 Data de inscrição : 07/12/2011
| Assunto: Skill ~~ NPC Qua Dez 07, 2011 3:07 am | |
| Primeiramente , para que server este diacho ? ele fara com que os npc's do seu jogo possam usar Skill (Magia / spell)Server ~ Side Em modConstantsProcure por : - Código:
-
Public Const MAX_PARTY_MEMBERS As Long = 4 Embaixo dele você adciona - Código:
-
Public Const MAX_NPC_SPELLS As Long = 5 Isso diz quantas spells seu npc terá, no caso 5 mas pode ter mais ou menos.Agora vá para modTypesLá procure por Private Type NpcRecAdcione isso entre Private Type NpcRec e End Type - Código:
-
Spell(1 To MAX_NPC_SPELLS) As Long Ainda em modTypesProcure Private Type MapNpcRec(Fica logo abaixo de Private Type NpcRec.) Entre Private Type MapNpcRec e End Type adcione - Código:
-
SpellTimer(1 To MAX_NPC_SPELLS) As Long Heals As Integer Vamos para modCombatProcure por Sub NpcAttackPlayer No final desse Sub após até do End Sub adcione isto - Código:
-
Sub NpcSpellPlayer(ByVal MapNpcNum As Long, ByVal Victim As Long, SpellSlotNum As Long) Dim mapnum As Long Dim i As Long Dim n As Long Dim SpellNum As Long Dim Buffer As clsBuffer Dim InitDamage As Long Dim Damage As Long Dim MaxHeals As Long
' Check for subscript out of range If MapNpcNum <= 0 Or MapNpcNum > MAX_MAP_NPCS Or IsPlaying(Victim) = False Then Exit Sub End If
' Check for subscript out of range If MapNpc(GetPlayerMap(Victim)).Npc(MapNpcNum).Num <= 0 Then Exit Sub End If If SpellSlotNum <= 0 Or SpellSlotNum > MAX_NPC_SPELLS Then Exit Sub
' The Variables mapnum = GetPlayerMap(Victim) SpellNum = Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Spell(SpellSlotNum) ' Send this packet so they can see the person attacking Set Buffer = New clsBuffer Buffer.WriteLong SNpcAttack Buffer.WriteLong MapNpcNum SendDataToMap mapnum, Buffer.ToArray() Set Buffer = Nothing ' CoolDown Time If MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) > GetTickCount Then Exit Sub ' Spell Types Select Case Spell(SpellNum).Type ' AOE Healing Spells Case SPELL_TYPE_HEALHP ' Make sure an npc waits for the spell to cooldown MaxHeals = 1 + Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) \ 25 If MapNpc(mapnum).Npc(MapNpcNum).Heals >= MaxHeals Then Exit Sub If MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) <= Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).HP * 0.3 Then If Spell(SpellNum).IsAoE Then For i = 1 To MAX_MAP_NPCS If MapNpc(mapnum).Npc(i).Num > 0 Then If MapNpc(mapnum).Npc(i).Vital(Vitals.HP) > 0 Then If isInRange(Spell(SpellNum).AoE, MapNpc(mapnum).Npc(MapNpcNum).x, MapNpc(mapnum).Npc(MapNpcNum).y, MapNpc(mapnum).Npc(i).x, MapNpc(mapnum).Npc(i).y) Then InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2) MapNpc(mapnum).Npc(i).Vital(Vitals.HP) = MapNpc(mapnum).Npc(i).Vital(Vitals.HP) + InitDamage SendActionMsg mapnum, "+" & InitDamage, BrightGreen, 1, (MapNpc(mapnum).Npc(i).x * 32), (MapNpc(mapnum).Npc(i).y * 32) Call SendAnimation(mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_NPC, MapNpcNum) If MapNpc(mapnum).Npc(i).Vital(Vitals.HP) > Npc(MapNpc(mapnum).Npc(i).Num).HP Then MapNpc(mapnum).Npc(i).Vital(Vitals.HP) = Npc(MapNpc(mapnum).Npc(i).Num).HP End If MapNpc(mapnum).Npc(MapNpcNum).Heals = MapNpc(mapnum).Npc(MapNpcNum).Heals + 1 MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000 Exit Sub End If End If End If Next Else ' Non AOE Healing Spells InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2) MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) = MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) + InitDamage SendActionMsg mapnum, "+" & InitDamage, BrightGreen, 1, (MapNpc(mapnum).Npc(MapNpcNum).x * 32), (MapNpc(mapnum).Npc(MapNpcNum).y * 32) Call SendAnimation(mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_NPC, MapNpcNum) If MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) > Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).HP Then MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) = Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).HP End If MapNpc(mapnum).Npc(MapNpcNum).Heals = MapNpc(mapnum).Npc(MapNpcNum).Heals + 1 MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000 Exit Sub End If End If ' AOE Damaging Spells Case SPELL_TYPE_DAMAGEHP ' Make sure an npc waits for the spell to cooldown If Spell(SpellNum).IsAoE Then For i = 1 To Player_HighIndex If IsPlaying(i) Then If GetPlayerMap(i) = mapnum Then If isInRange(Spell(SpellNum).AoE, MapNpc(mapnum).Npc(MapNpcNum).x, MapNpc(mapnum).Npc(MapNpcNum).y, GetPlayerX(i), GetPlayerY(i)) Then InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2) Damage = InitDamage - Player(i).Stat(Stats.willpower) If Damage <= 0 Then SendActionMsg GetPlayerMap(i), "RESIST!", Pink, 1, (GetPlayerX(i) * 32), (GetPlayerY(i) * 32) Exit Sub Else NpcAttackPlayer MapNpcNum, i, Damage SendAnimation mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_PLAYER, MapNpcNum MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000 Exit Sub End If End If End If End If Next ' Non AoE Damaging Spells Else If isInRange(Spell(SpellNum).Range, MapNpc(mapnum).Npc(MapNpcNum).x, MapNpc(mapnum).Npc(MapNpcNum).y, GetPlayerX(Victim), GetPlayerY(Victim)) Then InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2) Damage = InitDamage - Player(Victim).Stat(Stats.willpower) If Damage <= 0 Then SendActionMsg GetPlayerMap(Victim), "RESIST!", Pink, 1, (GetPlayerX(Victim) * 32), (GetPlayerY(Victim) * 32) Exit Sub Else NpcAttackPlayer MapNpcNum, Victim, Damage SendAnimation mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_PLAYER, Victim MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000 Exit Sub End If End If End If End Select End Sub No modServerLoopProcure por isso e delete - Código:
-
Else ' lol no npc combat :( End If Agora Procure no mesmo mod - Código:
-
' //////////////////////////////////////////// ' // This is used for regenerating NPC's HP // ' //////////////////////////////////////////// Acima disso adcione - Código:
-
' Spell Casting For i = 1 To MAX_NPC_SPELLS If Npc(npcNum).Spell(i) > 0 Then If MapNpc(mapnum).Npc(x).SpellTimer(i) + (Spell(Npc(npcNum).Spell(i)).CastTime * 1000) < GetTickCount Then NpcSpellPlayer x, target, i End If End If Next End If Acabou o Lado do Servidor salve e compile ^.^ Vamos para o Client agora. Abra o seu CLIENT.VBP Vá em modConstantsProcure por - Código:
-
Public Const MAX_PARTY_MEMBERS As Long = 4 Logo abaixo adcione - Código:
-
Public Const MAX_NPC_SPELLS As Long = 5 Agora vamos para o modTypesProcure por Private Type NpcRecEntre o Private Type NpcRec e o End TypeAdcione - Código:
-
Spell(1 To MAX_NPC_SPELLS) As Long Vá para modGameEditorsProcure por Public Sub NpcEditorInitAche esta linha - Código:
-
.txtDamage.text = Npc(EditorIndex).Damage Logo abaixo disso adcione - Código:
-
.scrlSpellNum.Max = MAX_NPC_SPELLS .scrlSpellNum.Value = 1 agora baixe esses 2 arquivos e os adcione no seu projeto - Spoiler:
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
- Spoiler:
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link] Creditos ~ DJ Maxus [Criar] FuckStyle [traduzir e postar] | |
|
Nicolasn2013
Mensagens : 2 Data de inscrição : 02/06/2013
| Assunto: Re: Skill ~~ NPC Dom Jun 02, 2013 2:46 pm | |
| Bote os devidos creditos do Thales12 da MMORPG BR, pq ele foi o criador | |
|
Nicolasn2013
Mensagens : 2 Data de inscrição : 02/06/2013
| Assunto: Re: Skill ~~ NPC Dom Jun 02, 2013 2:46 pm | |
| Bote os devidos creditos do Thales12 da MMORPG BR, pq ele foi o criador | |
|
Conteúdo patrocinado
| Assunto: Re: Skill ~~ NPC | |
| |
|