Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
Erro quando o npc mata o player usando magia.
3 participantes
Página 1 de 1
Erro quando o npc mata o player usando magia.
1* Primeiro Problema
Bom eu cheio de problemas com a engine do nada descubro outro problema.
É assim depois que o npc mata o player usando uma magia da o erro no servidor.
esse erro acontece tanto quando o npc me da só um hit com a magia quanto com vários. sopra constar
2* Erro em um tipo de item que fiz. ( já consegui resolver).Agr o problema que está dando dor de cabeça é esse ai em cima.
Se não entenderem algo por favor me informem
Bom eu cheio de problemas com a engine do nada descubro outro problema.
É assim depois que o npc mata o player usando uma magia da o erro no servidor.
esse erro acontece tanto quando o npc me da só um hit com a magia quanto com vários. sopra constar
2* Erro em um tipo de item que fiz. ( já consegui resolver).Agr o problema que está dando dor de cabeça é esse ai em cima.
Se não entenderem algo por favor me informem
Snoopy- Iniciante
- Mensagens : 58
Créditos : 7
Re: Erro quando o npc mata o player usando magia.
Provavelmente tem algum erro que não consegue pegar o spellNum,aí por padrão ele fica sendo zero.Como não existe magia 0 (só de 1 até 255,se você não mudou),o server trava.
Coloca um Call PlayerMsg(index,"A magia é: " & spellNum,Red) por cima da linha que tá dando erro.Provavelmente vai aparecer a mensagem "A magia é: 0",então o que eu falei vai estar certo,e você vai ter que procurar o porquê de não encontrar o spellNum.
Coloca um Call PlayerMsg(index,"A magia é: " & spellNum,Red) por cima da linha que tá dando erro.Provavelmente vai aparecer a mensagem "A magia é: 0",então o que eu falei vai estar certo,e você vai ter que procurar o porquê de não encontrar o spellNum.
Fadinext- Iniciante
- Mensagens : 33
Créditos : 8
Re: Erro quando o npc mata o player usando magia.
fiz o que você disse porém em game a mensagem não chego o erro ficou do mesmo jeito de antes
mais será que poderia por a primeira magia 0 invés de 1? dai ao invés de dar erro ele iria usar a magia 0.
mais será que poderia por a primeira magia 0 invés de 1? dai ao invés de dar erro ele iria usar a magia 0.
Snoopy- Iniciante
- Mensagens : 58
Créditos : 7
Re: Erro quando o npc mata o player usando magia.
Snoopy escreveu:fiz o que você disse porém em game a mensagem não chego o erro ficou do mesmo jeito de antes
mais será que poderia por a primeira magia 0 invés de 1? dai ao invés de dar erro ele iria usar a magia 0.
o problema ñ eh pq está usando a magia 0, o problema eh q o SpellNum ñ está sendo definido...
pode postar toda a Sub em q o erro ocorre em aki no topico para que eu possa ver se o erro está realmente na sub.. pois o servidor pode ñ está recebendo a informação dessa tal magia...
Recomendo Usar isso:
- Código:
Sub
Re: Erro quando o npc mata o player usando magia.
- 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), "RESISTE!", 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, i
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), "RESISTE!", 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
Snoopy- Iniciante
- Mensagens : 58
Créditos : 7
Re: Erro quando o npc mata o player usando magia.
Snoopy escreveu:Tai vlw por estar ajudando.
- 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), "RESISTE!", 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, i
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), "RESISTE!", 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
Cara o Codigo está normal, ñ vi nenhuma erro nele, acho q o servidor ñ está recebendo a magia q o NPC está usando...
Re: Erro quando o npc mata o player usando magia.
então se o npc usasse outras magias não daria erro?
Snoopy- Iniciante
- Mensagens : 58
Créditos : 7
Re: Erro quando o npc mata o player usando magia.
Não existe magia 0.
O NPC pode estar usando a magia 18,por exemplo.Com esse erro no código,que eu também não achei qual é,o valor da spellNum tá sempre sendo 0.
Como não existe a magia número 0,não dá pra acessar os data members da rec ( .type , .name, .mpcost etc),aí dá erro.
Isso aconteceu comigo no meu sistema de receitas,o servidor não tava recebendo o número da receita,então por padrão tava sendo 0 e bugando tudo.
Edit:Faz assim,embaixo de
Coloca:
Provavelmente vai parar de travar o servidor,porém o NPC ainda não vai usar a magia.Você tá usando a Modification S ( E.O 2.6 ) ? Se for,vou dar uma olhada na source dela.
O NPC pode estar usando a magia 18,por exemplo.Com esse erro no código,que eu também não achei qual é,o valor da spellNum tá sempre sendo 0.
Como não existe a magia número 0,não dá pra acessar os data members da rec ( .type , .name, .mpcost etc),aí dá erro.
Isso aconteceu comigo no meu sistema de receitas,o servidor não tava recebendo o número da receita,então por padrão tava sendo 0 e bugando tudo.
Edit:Faz assim,embaixo de
- Código:
spellNum = Npc(MapNpc(mapNum).Npc(mapNpcNum).Num).Spell(SpellSlotNum)
Coloca:
- Código:
If spellNum = 0 Then Exit Sub
Provavelmente vai parar de travar o servidor,porém o NPC ainda não vai usar a magia.Você tá usando a Modification S ( E.O 2.6 ) ? Se for,vou dar uma olhada na source dela.
Última edição por Fadinext em Ter maio 13, 2014 5:28 pm, editado 1 vez(es) (Motivo da edição : O 2.6) formou um smiley..)
Fadinext- Iniciante
- Mensagens : 33
Créditos : 8
Re: Erro quando o npc mata o player usando magia.
cara eu fiz isso e o npc está usando a magia normalmente valeu por ajudar
Mas porque se você disse que ele não iria usar mais?
edit: to usando a Eclipse Omega (Super editado por min)a qual ja vem integrado a magia no npc.
Mas porque se você disse que ele não iria usar mais?
edit: to usando a Eclipse Omega (Super editado por min)a qual ja vem integrado a magia no npc.
Snoopy- Iniciante
- Mensagens : 58
Créditos : 7
Re: Erro quando o npc mata o player usando magia.
Achei que ia parar de usar magia,porque achei tava sempre pegando a 0,então sempre ia sair da Sub.Mas que bom que funcionou.
Fadinext- Iniciante
- Mensagens : 33
Créditos : 8
Tópicos semelhantes
» [RESOLVIDA] Quando mata o mob todos os outros player vão ver?
» [Resolvido]Erro Player vs Player linha 61 Por favor me ajudem
» Como faser o player usar uma magia e mudar de sprite?
» Erro no Vital do player
» que erro é esse quando vai iniciar o Net Play?
» [Resolvido]Erro Player vs Player linha 61 Por favor me ajudem
» Como faser o player usar uma magia e mudar de sprite?
» Erro no Vital do player
» que erro é esse quando vai iniciar o Net Play?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|