Çözüldü Yanında Gezmeli Binek Sistemi Ölünce İki Binek Olma Bugu

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
char cppde die komutu varsa eğer oraya öldüğünde unmount çektir (yada binekten seni indiren neyse) binekten indirsin seni. çözülür.
 
Öldükten sonra 2 defa Pvp koruma etkinleştirildi çıkıyor normal mi?
Linkleri görebilmek için giriş yap veya kayıt ol.
Muhtemelen öldüğünde binekten iniyor bir tanesi onun için diğeri de tekrar biniyor onun için.

bu hatayı bende bir fileste görmüştüm hiç uğraşmadım sildim sana tavsiyem sistemi komple düzgün çalışan bir filesle karşılaştır. Mutlaka eksik bir şeyler vardır.
 
Muhtemelen öldüğünde binekten iniyor bir tanesi onun için diğeri de tekrar biniyor onun için.

bu hatayı bende bir fileste görmüştüm hiç uğraşmadım sildim sana tavsiyem sistemi komple düzgün çalışan bir filesle karşılaştır. Mutlaka eksik bir şeyler vardır.
Zaten sorunsuz bir filesten çektim sistemi
 
Burada başla komutundaki çağırma fonksiyonlarını kaldır.
C++:
ACMD(do_restart)
{
    if (false == ch->IsDead())
    {
        ch->ChatPacket(CHAT_TYPE_COMMAND, "CloseRestartWindow");
        ch->StartRecoveryEvent();
        return;
    }

    if (NULL == ch->m_pkDeadEvent)
        return;

    int iTimeToDead = (event_time(ch->m_pkDeadEvent) / passes_per_sec);

    if (subcmd != SCMD_RESTART_TOWN && (!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
    {
        if (!test_server)
        {
            if (ch->IsHack())
            {
                //성지 맵일경우에는 체크 하지 않는다.
                if (false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
                {
                    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - (180 - g_nPortalLimitTime));
                    return;
                }
            }
#define eFRS_HERESEC    170
            if (iTimeToDead > eFRS_HERESEC)
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - eFRS_HERESEC);
                return;
            }
        }
    }

    //PREVENT_HACK
    //DESC : 창고, 교환 창 후 포탈을 사용하는 버그에 이용될수 있어서
    //        쿨타임을 추가
    if (subcmd == SCMD_RESTART_TOWN)
    {
        if (ch->IsHack())
        {
            //길드맵, 성지맵에서는 체크 하지 않는다.
            if ((!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG) ||
                false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - (180 - g_nPortalLimitTime));
                return;
            }
        }

#define eFRS_TOWNSEC    173
        if (iTimeToDead > eFRS_TOWNSEC)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 마을에서 재시작 할 수 없습니다. (%d 초 남음)"), iTimeToDead - eFRS_TOWNSEC);
            return;
        }
    }
    //END_PREVENT_HACK

    ch->ChatPacket(CHAT_TYPE_COMMAND, "CloseRestartWindow");

    ch->GetDesc()->SetPhase(PHASE_GAME);
    ch->SetPosition(POS_STANDING);
    ch->StartRecoveryEvent();

    //FORKED_LOAD
    //DESC: 삼거리 전투시 부활을 할경우 맵의 입구가 아닌 삼거리 전투의 시작지점으로 이동하게 된다.
    if (1 == quest::CQuestManager::instance().GetEventFlag("threeway_war"))
    {
        if (subcmd == SCMD_RESTART_TOWN || subcmd == SCMD_RESTART_HERE)
        {
            if (true == CThreeWayWar::instance().IsThreeWayWarMapIndex(ch->GetMapIndex()) &&
                false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
            {
                ch->GoHome();

                ch->ReviveInvisible(5);
                ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
                ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());

                return;
            }

            //성지
            if (true == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
            {
                if (CThreeWayWar::instance().GetReviveTokenForPlayer(ch->GetPlayerID()) <= 0)
                {
                    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성지에서 부활 기회를 모두 잃었습니다! 마을로 이동합니다!"));
                    ch->GoHome();
                }
                else
                {
                    ch->Show(ch->GetMapIndex(), GetSungziStartX(ch->GetEmpire()), GetSungziStartY(ch->GetEmpire()));
                }

                ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
                ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
                ch->ReviveInvisible(5);

                return;
            }
        }
    }
    //END_FORKED_LOAD

    if (ch->GetDungeon())
        ch->GetDungeon()->UseRevive(ch);

    if (ch->GetWarMap() && !ch->IsObserverMode())
    {
        CWarMap* pMap = ch->GetWarMap();
        DWORD dwGuildOpponent = pMap ? pMap->GetGuildOpponent(ch) : 0;

        if (dwGuildOpponent)
        {
            switch (subcmd)
            {
            case SCMD_RESTART_TOWN:
                sys_log(0, "do_restart: restart town");
                PIXEL_POSITION pos;

                if (CWarMapManager::instance().GetStartPosition(ch->GetMapIndex(), ch->GetGuild()->GetID() < dwGuildOpponent ? 0 : 1, pos))
                    ch->Show(ch->GetMapIndex(), pos.x, pos.y);
                else
                    ch->ExitToSavedLocation();

                ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
                ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
                ch->ReviveInvisible(5);
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
                ch->CheckMount();
#endif
                break;

            case SCMD_RESTART_HERE:
                sys_log(0, "do_restart: restart here");
                ch->RestartAtSamePos();
                //ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
                ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
                ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
                ch->ReviveInvisible(5);
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
                ch->CheckMount();
#endif
                break;
            }

            return;
        }
    }
    switch (subcmd)
    {
    case SCMD_RESTART_TOWN:
        sys_log(0, "do_restart: restart town");
        PIXEL_POSITION pos;

        if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire(ch->GetMapIndex(), ch->GetEmpire(), pos))
            ch->WarpSet(pos.x, pos.y);
        else
            ch->GoHome();
        ch->PointChange(POINT_HP, 50 - ch->GetHP());
        ch->DeathPenalty(1);
        break;

    case SCMD_RESTART_HERE:
        sys_log(0, "do_restart: restart here");
        ch->RestartAtSamePos();
        //ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
        ch->PointChange(POINT_HP, 50 - ch->GetHP());
        ch->DeathPenalty(0);
        ch->ReviveInvisible(5);
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
        ch->CheckMount();
#endif
        break;
    }
}
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst