Domanda Problema .kill_party

Stato
Discussione chiusa ad ulteriori risposte.

Hik

Utente Electrum
25 Dicembre 2014
285
28
38
112
Salve ragazzi.
Oggi sono di nuovo qui per un nuovo problema (le mie disavventure sembrano non finire).
Sto utilizzando questa funzione:

when 393.party_kill begin

Ma quando elimino il mob, se sono il leader del gruppo o meno, il conteggio è doppio.
Ho già applicato un fix per il doppio conteggio:

Codice:
m_mapNPC[npc].OnKill(*pPC);

--> sostituito con -->

Codice:
if(npc > 0)
{
    m_mapNPC[npc].OnKill(*pPC);
}

Come posso risolvere?
 
Attualmente sono da cellulare, applica il check sul leader.

Quando torno a casa, se non hai risolto, ti aiuto io.
 
Ultima modifica:
Ho applicato la modifica e sto compilando, ti terrò aggiornato.
Grazie, sei gentilissimo!

Codice:
if (leader)
            {
                if(npc > 0)
                {
                      m_mapNPC[npc].OnKill(*pPC);
                }
                m_pCurrentPartyMember = ch;

                if (m_mapNPC[npc].OnPartyKill(*GetPC(leader->GetPlayerID())))
                    return;

                pPC = GetPC(pc);
            }

In questo modo non funziona.
 
  • Mi piace
Reazioni: Michs
Ho creato una quest che prevede l'eliminazione di un mob, dove è possibile sfruttare anche il party (tipo missione cavallo).
Quando elimino il mob, però, me lo conta x2 ( come se ne avessi eliminati 2 ) e lo fa sia in gruppo che da solo.
 
Codice:
void CQuestManager::Kill(unsigned int pc, unsigned int npc, unsigned int pc2) //pc2 è stato aggiunto dopo, ho provato una modifica presa altri file
    {
        //m_CurrentNPCRace = npc;
        PC * pPC;

        //sys_log(0, "CQuestManager::Kill QUEST_KILL_EVENT (pc=%d, npc=%d)", pc, npc, pc2);

        if ((pPC = GetPC(pc)))
        {
            if (!CheckQuestLoaded(pPC))
                return;

            /* [hyo] ¸÷ kill½Ã Áߺ¹ Ä«¿îÆà À̽´ °ü·ÃÇÑ ¼öÁ¤»çÇ×
              quest script¿¡ when 171.kill begin ... µîÀÇ ÄÚµå·Î ÀÎÇÏ¿© ½ºÅ©¸³Æ®°¡ 󸮵Ǿú´õ¶óµµ
              ¹Ù·Î returnÇÏÁö ¾Ê°í ´Ù¸¥ °Ë»çµµ ¼öÇàÇϵµ·Ï º¯°æÇÔ. (2011/07/21)
            */  
            // call script
            if(npc > 0 && pc2 == 0)   //stessa cosa, la funzione con il fix è npc>0
            {
                m_mapNPC[npc].OnKill(*pPC);  //fix_conteggio_doppio
            }

            LPCHARACTER ch = GetCurrentCharacterPtr();
            LPPARTY pParty = ch->GetParty();
            LPCHARACTER leader = pParty ? pParty->GetLeaderCharacter() : ch;

            if (leader)
            {
                if(npc > 0)
                {
                      m_mapNPC[npc].OnKill(*pPC);
                }
                m_pCurrentPartyMember = ch;

                if (m_mapNPC[npc].OnPartyKill(*GetPC(leader->GetPlayerID())))
                    return;

                pPC = GetPC(pc);
            }

        //    if (m_mapNPC[QUEST_NO_NPC].OnKill(*pPC)) 
        //        return;
            LPCHARACTER victim = CHARACTER_MANAGER::instance().FindByPID(pc2);  //
            if (victim && victim->IsPC() && m_mapNPC[QUEST_NO_NPC].OnKill(*pPC))  //fix by Mattius
                return;  //
                else if (m_mapNPC[QUEST_NO_NPC].OnKill(*pPC)) //
                return; //
               
               

            if (leader)
            {
                m_pCurrentPartyMember = ch;
                m_mapNPC[QUEST_NO_NPC].OnPartyKill(*GetPC(leader->GetPlayerID()));
            }
        }
        else
            sys_err("QUEST: no such pc id : %d", pc);
    }
 
Perfetto, grazie :D (le modifiche che ho fatto posso rimuoverle? vorrei evitare del codice esterno inutile)
 
Il problema è individuale, la fix è stata pubblicata :p Hai sminchiato il mondo ahaha. La fix secondaria sta su skype :)
 
Non credo dipenda da quella funzione, ci deve essere altro .
Si, però non voglio ogni volta dover ricorrere ad un controllo, vorrei qualcosa di più "pulito" :asd:
 
  • Mi piace
Reazioni: Michs
Stato
Discussione chiusa ad ulteriori risposte.