Erro quando o npc mata o player usando magia. Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Erro quando o npc mata o player usando magia.

3 participantes

Ir para baixo

Erro quando o npc mata o player usando magia. Empty Erro quando o npc mata o player usando magia.

Mensagem por Snoopy Sáb maio 10, 2014 7:26 pm

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.

Erro quando o npc mata o player usando magia. Ivvayr
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
Snoopy
Iniciante
Iniciante

Mensagens : 58
Créditos : 7

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Fadinext Dom maio 11, 2014 8:31 pm

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.
Fadinext
Fadinext
Iniciante
Iniciante

Mensagens : 33
Créditos : 8

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Snoopy Seg maio 12, 2014 11:17 am

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.
Snoopy
Snoopy
Iniciante
Iniciante

Mensagens : 58
Créditos : 7

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Dooolly Seg maio 12, 2014 12:23 pm

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
Dooolly
Dooolly
Colaborador
Colaborador

Medalhas : Erro quando o npc mata o player usando magia. Trophy12
Mensagens : 1227
Créditos : 153

Ficha do personagem
Nível: 1
Experiência:
Erro quando o npc mata o player usando magia. Left_bar_bleue0/0Erro quando o npc mata o player usando magia. Empty_bar_bleue  (0/0)
Vida:
Erro quando o npc mata o player usando magia. Left_bar_bleue30/30Erro quando o npc mata o player usando magia. Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Snoopy Ter maio 13, 2014 11:57 am

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
Tai vlw por estar ajudando.
Snoopy
Snoopy
Iniciante
Iniciante

Mensagens : 58
Créditos : 7

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Dooolly Ter maio 13, 2014 12:15 pm

Snoopy escreveu:
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
Tai vlw por estar ajudando.

Cara o Codigo está normal, ñ vi nenhuma erro nele, acho q o servidor ñ está recebendo a magia q o NPC está usando...
Dooolly
Dooolly
Colaborador
Colaborador

Medalhas : Erro quando o npc mata o player usando magia. Trophy12
Mensagens : 1227
Créditos : 153

Ficha do personagem
Nível: 1
Experiência:
Erro quando o npc mata o player usando magia. Left_bar_bleue0/0Erro quando o npc mata o player usando magia. Empty_bar_bleue  (0/0)
Vida:
Erro quando o npc mata o player usando magia. Left_bar_bleue30/30Erro quando o npc mata o player usando magia. Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Snoopy Ter maio 13, 2014 12:51 pm

então se o npc usasse outras magias não daria erro?
Snoopy
Snoopy
Iniciante
Iniciante

Mensagens : 58
Créditos : 7

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Fadinext Ter maio 13, 2014 5:23 pm

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
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
Fadinext
Iniciante
Iniciante

Mensagens : 33
Créditos : 8

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Snoopy Qua maio 14, 2014 12:34 pm

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? Question
edit: to usando a Eclipse Omega (Super editado por min)a qual ja vem integrado a magia no npc.
Snoopy
Snoopy
Iniciante
Iniciante

Mensagens : 58
Créditos : 7

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Fadinext Qua maio 14, 2014 3:10 pm

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
Fadinext
Iniciante
Iniciante

Mensagens : 33
Créditos : 8

Ir para o topo Ir para baixo

Erro quando o npc mata o player usando magia. Empty Re: Erro quando o npc mata o player usando magia.

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos