C++ Salire sul cavallo dopo la morte

Stato
Discussione chiusa ad ulteriori risposte.

Michs

Bannato
8 Dicembre 2015
1,789
70
257
593
Ultima modifica da un moderatore:
Salve.
Giocando su Metin2 Ufficiale ho notato che se stai cavalcando il pony e muori mentre sei su di esso, quando farai 'Ricomincia da Qui' il personaggio salirà automaticamente sul cavallo.

Codice: C++

Recatevi su game/src/char_horse.cpp
Cercate:
C++:
bool CHARACTER::StartRiding()
{
Cercate:
C++:
    if(test_server)
        sys_log(0, "Ride Horse : %s ", GetName());
Sotto aggiungete:
C++:
    m_HorseNSystem = 1;
Cercate:
C++:
bool CHARACTER::StopRiding()
{
Cercate:
C++:
        if (!IsDead() && !IsStun())
        {
Sotto aggiungete:
C++:
            m_HorseNSystem = 0;
Cercate:
C++:
            m_HorseNSystem = 0;
            ComputePoints();
            UpdatePacket();
Sopra Aggiungete:
C++:
            m_dwMountVnum = 0;
Recatevi su game/src/char.h
Cercate:
C++:
        PIXEL_POSITION        m_posSafeboxOpen;
Aggiungete sotto:
Codice:
    public:
            int                m_HorseNSystem;
Recatevi su game/src/cmd_general.cpp
Cercate:
Codice:
    ch->ChatPacket(CHAT_TYPE_COMMAND, "CloseRestartWindow");

    ch->GetDesc()->SetPhase(PHASE_GAME);
    ch->SetPosition(POS_STANDING);
    ch->StartRecoveryEvent();
Sotto aggiungete:
Codice:
    if (ch->m_HorseNSystem == 1)
    {
        ch->StartRiding();
        ch->m_HorseNSystem = 0;
    }

Recatevi su game/src/char_battle.cpp
Cercate:
C++:
void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
{
Cercate:
C++:
        if (IsHorseRiding())
        {
            StopRiding();
Sotto aggiungete:
Codice:
            m_HorseNSystem = 1;
Cercate:
C++:
        else if (GetMountVnum())
        {
            RemoveAffect(AFFECT_MOUNT_BONUS);
            m_dwMountVnum = 0;
            UnEquipSpecialRideUniqueItem();
Sotto aggiungete:
Codice:
            m_HorseNSystem = 1;

Per qualsiasi problema e/o bug non esitate a segnalare.
Il codice è stato scritto in pochi minuti per un test personale.

Update:
Metodo piu' veloce.

Aprire game/src/char_battle.cpp
Cercare:
C++:
void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
{
   if (IsDead())
       return;

   {
       if (IsHorseRiding())
       {
           StopRiding();
       }
       else if (GetMountVnum())
       {
           RemoveAffect(AFFECT_MOUNT_BONUS);
           m_dwMountVnum = 0;
           UnEquipSpecialRideUniqueItem();

           UpdatePacket();
       }
   }

Modificare cosi':
C++:
void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
{
   if (IsDead())
       return;

   {
/*        if (IsHorseRiding())
       {
           StopRiding();
       }
       else if (GetMountVnum())
       {
           RemoveAffect(AFFECT_MOUNT_BONUS);
           m_dwMountVnum = 0;
           UnEquipSpecialRideUniqueItem();

           UpdatePacket();
       }*/
   }
Per il secondo metodo ringrazio txtxtxt, una piccola svista durante il fast coding.
Saluti,
Anyone.
 
in char_horse.cpp nella funzione bool CHARACTER::StartRiding()

All'inizio della funzione aggiungere:
C:
if (IsDead())
    {
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Non puoi salire su cavallo se sei morto."));
        return false;
    }
 
in char_horse.cpp nella funzione bool CHARACTER::StartRiding()

All'inizio della funzione aggiungere:
C:
if (IsDead())
    {
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Non puoi salire su cavallo se sei morto."));
        return false;
    }
Mi sa che non hai capito come funziona il system ahaha.
Se muori e stai cavalcando appena rinasci il personaggio sale automaticamente sul cavallo come Metin2 Ufficiale.
 
Il primo metodo fa pietà ovviamente, però anche fosse utilizzabile: Posso chiederti perché un long?
Nel primo metodo usi un long per sapere se prima di morire si trova a cavallo o meno.
Usi un long (4 byte di memoria se non erro su sistemi freebsd) per fare quello che potrebbe fare un bool (1 bit di memoria ).
Ah ma certo, tu non sai nemmeno quello che fai, e probabilmente nessuno dei due metodi li hai scritti tu.

Inviato dal mio LG-D855 utilizzando Tapatalk
 
  • Mi piace
Reazioni: King Gherusio
Il primo metodo fa pietà ovviamente, però anche fosse utilizzabile: Posso chiederti perché un long?
Nel primo metodo usi un long per sapere se prima di morire si trova a cavallo o meno.
Usi un long (4 byte di memoria se non erro su sistemi freebsd) per fare quello che potrebbe fare un bool (1 bit di memoria ).
Ah ma certo, tu non sai nemmeno quello che fai, e probabilmente nessuno dei due metodi li hai scritti tu.

Inviato dal mio LG-D855 utilizzando Tapatalk
Ho messo un long, se leggi alla fine l'ho scritto in due secondi mentre ero in call con un ragazzo per test personale.
Sto aspettando ancora il system che devi scrivere, sai solo parlare e parlare.
Evapora
 
Stato
Discussione chiusa ad ulteriori risposte.