Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] Problem z FIX na Quest :: PC :: GetFlag crash


Rekomendowane odpowiedzi

Opublikowano

Witajcie ! :) mam problem..
Nie wiem o co chodzi ale skorzystałem z FIX z innego forum niemieckiego i coś mi nie działa albo robie coś źle..

Chodz imi dokladnie o exploit Quest :: PC :: GetFlag

To jest oryginalny kod z char.cpp


int CHARACTER::GetQuestFlag(const std::string& flag) const
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	return pPC->GetFlag(flag);
}

void CHARACTER::SetQuestFlag(const std::string& flag, int value)
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	pPC->SetFlag(flag, value);
}

Natomiast ludzie z forum kazali mi zrobic tak..

Aby naprawić ten błąd / exploit trzeba w char.cpp brzmienie metodę wyszukiwania:

int CHARACTER::GetQuestFlag(const std::string& flag) const  

i pisze poniżej linii:

    quest::PC* pPC = q.GetPC(GetPlayerID());  

następujące elementy:

    if(!pPC) { 
        sys_err("Nullpointer in CHARACTER::GetQuestFlag %lu", GetPlayerID()); 
        return 0; 
    }  
To samo robisz potem znowu w funkcji:

void CHARACTER::SetQuestFlag(const std::string& flag, int value)  

Więc tak zrobiłem..

int CHARACTER::GetQuestFlag(const std::string& flag) const
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	if(!pPC) 
    { 
        sys_err("Nullpointer in CHARACTER::GetQuestFlag %lu", GetPlayerID()); 
        return 0; 
    } 
}

void CHARACTER::SetQuestFlag(const std::string& flag, int value)
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	if(!pPC) 
    { 
        sys_err("Nullpointer in CHARACTER::GetQuestFlag %lu", GetPlayerID()); 
        return 0; 
    } 
}

Problem jest tego typu ze Void nic nie zwraca więc kompilacja została zatrzymana.. To wiem..
Po usunieciu return 0; z z funkcji void kompiluje sie game ale bodzie itp do ulepszania nie dzialaja tzn dzialaja ale tylko dla broni do 20 lv. 
Proszę o pomoc jak ten kod ma wygladac.

cooltext1_wrhasrw.png

Opublikowano

Nie pisałem nigdy nic do metina, nie wiem co chcesz osiągnąć, ale:

 

int CHARACTER::GetQuestFlag(const std::string& flag) const
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	if(!pPC) 
    { 
        sys_err("Nullpointer in CHARACTER::GetQuestFlag %lu", GetPlayerID()); 
        return 0; 
    } 
}

Zwróci 0 tylko w momencie jeżeli !pPC, a co w przeciwnym wypadku? Dopisz defaultowego returna jeszcze ;d

Tak jak mówiłem - nie znam się na metinie i nie wiem co to robi xD ale chyba powinno to wygladać tak:

int CHARACTER::GetQuestFlag(const std::string& flag) const
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	
	if(!pPC)
	{
	//gracz coś kręci xD
	return 0;
	}

	return pPC->GetFlag(flag);
}

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...