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

Fix na Usuwanie postaci


Rekomendowane odpowiedzi

Opublikowano

Srcs/Server/db/src/ClientManagerPlayer.cpp


 


szukamy 



snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s_deleted SELECT * FROM player%s WHERE id=%d",
GetTablePostfix(), GetTablePostfix(), pi->player_id);
std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));

if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
{
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player%s_deleted", dwPID, GetTablePostfix());

peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
peer->EncodeBYTE(pi->account_index);
return;
}

zamieniamy na 



snprintf(queryStr, sizeof(queryStr), "INSERT INTO player_deleted%s SELECT * FROM player%s WHERE id=%d",
GetTablePostfix(), GetTablePostfix(), pi->player_id);
std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));

if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
{
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player_deleted%s", dwPID, GetTablePostfix());

peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
peer->EncodeBYTE(pi->account_index);
return;
}

Opublikowano

powiedz mi kolego czym to się różni bo nie jestem tak wybitnym technikiem jak ty ???

 

bo według mnie kod się niczym nie różni 

Opublikowano

powiedz mi kolego czym to się różni bo nie jestem tak wybitnym technikiem jak ty ???

 

bo według mnie kod się niczym nie różni

player%s_deleted

 

na

 

player_deleted%s
Opublikowano

 

powiedz mi kolego czym to się różni bo nie jestem tak wybitnym technikiem jak ty ???

 

bo według mnie kod się niczym nie różni

player%s_deleted

 

na

 

player_deleted%s

naprawdę ? ?? DZIĘKI !xD

  • 1 miesiąc temu...
Opublikowano

 

Usuwanie postaci działa normalnie bez tej zmiany...

Na sporej ilości serwerów nie działa usuwanie ;)

 

 

To, że nie potrafią zduplikować tabeli player i zmienić jej nazwę na player_deleted to już co innego, wiele osób zapomina, że jak się zmieni jakąś kolumnę w player, to w player_deleted też trzeba

Opublikowano

 

Srcs/Server/db/src/ClientManagerPlayer.cpp

 

szukamy 

        snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s_deleted SELECT * FROM player%s WHERE id=%d",
                GetTablePostfix(), GetTablePostfix(), pi->player_id);
        std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));

        if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
        {
            sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player%s_deleted", dwPID, GetTablePostfix());

            peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
            peer->EncodeBYTE(pi->account_index);
            return;
        }

zamieniamy na 

snprintf(queryStr, sizeof(queryStr), "INSERT INTO player_deleted%s SELECT * FROM player%s WHERE id=%d",
                GetTablePostfix(), GetTablePostfix(), pi->player_id);
        std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));

        if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
        {
            sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player_deleted%s", dwPID, GetTablePostfix());

            peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
            peer->EncodeBYTE(pi->account_index);
            return;
        }

Weź bo pierdolca zaraz dostanę jak to widzę to mnie szlag jasny trafia, jak widzę Twoje tematy to żadne z nich nie są dokładne i nie wnoszą nic, wnoszą większe bugi więc proszę wpierw szkol się a nie pisz tu pierdół ok?

 

 

Mnie również działa bez tego :)

Mi nie działało.

Nie korzystam z linii SG.

 

Weź, Ty wgl widzisz co piszesz?! w każdym source'owym db jest tak samo!!!!!! dla mnie możesz korzystać nawet z source z kosmosu

 

 

Usuwanie postaci działa normalnie bez tej zmiany...

Na sporej ilości serwerów nie działa usuwanie ;)

 

A wiesz przez co? poniżej dam fixa na to raz na zawsze...

 

 

 

Usuwanie postaci działa normalnie bez tej zmiany...

Na sporej ilości serwerów nie działa usuwanie ;)

 

 

To, że nie potrafią zduplikować tabeli player i zmienić jej nazwę na player_deleted to już co innego, wiele osób zapomina, że jak się zmieni jakąś kolumnę w player, to w player_deleted też trzeba

 

Nie tylko o to chodzi..

 

A fix na source i na każdych innych plikach jest następujący:

w db mamy plik .conf i wpis:

 

PLAYER_DELETE_LEVEL_LIMIT = 1

To oznacza że nie można usuwać postaci większe od 1 lv i równych 1 lv więc można usuwać tylko postacie o 0lv

@#Bazyliszek, gdybyś przyjrzał się source db w którym tam tak grzebałeś, i przetłumaczył normalnie translate google co pisze to sam byś do tego doszedł że jest tam wpisane +1 czy 1 co oznacza że wyprzedzić trzeba o 1 lv by usuwać 1lv ale i tak nie skumasz tego.

Teraz dla przykładu, na serwerze mamy 160lv i chcemy usunąć nawet postać 160lv więc wpis w conf.txt wygląda następująco:

 

PLAYER_DELETE_LEVEL_LIMIT = 161

I już można usuwać dowoli.

 

Ci którzy nie mają tego wpisu, posiadają source i chcą ustawić limit, to bodajże jest w db w pliku:

ClientManagerPlayer.cpp 

Szukamy frazę:

 

int deletedLevelLimit = 0;

I tu z 0 zmieniamy na limit np. 160 bądź 161

 

Mogę się mylić ale raczej nie, mogę przetestować ale po co jak można wpis do conf.txt i załatwia sprawę ;)

Ci którzy nie mają wpisu w conf.txt to już wiedzą że nie ma limitu usuwania postaci.

I oczywiście nie zapomnijmy o najważniejszym, skopiować player i zmienić nazwę player_copy na player_deleted i wyczyścić całą tabele player_deleted metodą Truncate w navi albo z sql np.:

truncate table player.player_deleted;

To na tyle, testowana metoda z conf.txt i zadziała u każdego, bez wyjątku.

Pomogłem ? klik up to Like ;D ( Lubię to ! ) xD

300 postów-> 10.10.2013 godz. 9:00
400 postów-> 19.10.2013 godz. 9:00

 

  • 10 miesięcy temu...
Opublikowano
Dnia 24.11.2017 o 11:28, NoName#2 napisał:

@kamil2321 przecież Bazyliszek dobrze zrobił, w przypadku gdy ktoś używa sufixu

Sufixy w metinie nie działają. Raz niektóre zapytania używają sufxów inne nie. Koreańczycy tworząc kod raz na to zwracali uwagę, a w update kodu mieli to gdzieś.

Opublikowano
53 minuty temu, Lovable napisał:

Sufixy w metinie nie działają. Raz niektóre zapytania używają sufxów inne nie. Koreańczycy tworząc kod raz na to zwracali uwagę, a w update kodu mieli to gdzieś.

Lol, po co mi mówisz jak wygląda kod skoro jeszcze wzroku nie straciłem? Protip: kod jest po to aby go edytować i wtedy wszystko działa.

Opublikowano
Dnia 24.11.2017 o 11:28, NoName#2 napisał:

@kamil2321 przecież Bazyliszek dobrze zrobił, w przypadku gdy ktoś używa sufixu

No wiesz, 90% z działu metina korzysta bez sufixu a Ci co korzystają z sufixów w tym bazyliszek to nie mają zielonego pojęcia o co kaman z tym :D 
Mógł dodać temat na "sufix usuwanie postaci", ale skoro nie dodał i myśli, że u każdego jest tak jak on pisał to jest w błędzie bo nawet po zmianie u innych nie będzie rezultatu i rezultat przyniesie mój temacik: https://www.mpcforum.pl/topic/1595480-fix-usuwanie-postaci-na-każdych-plikach-serwerowych/ :D 
ja wiem, że zmiana jest:
player%s_deleted
na:
player_deleted%s

Ale autor nie wie, dlaczego taka zmiana działa a u większości nie działa :P więc wyjaśniłem też kwestię takową :P

Pomogłem ? klik up to Like ;D ( Lubię to ! ) xD

300 postów-> 10.10.2013 godz. 9:00
400 postów-> 19.10.2013 godz. 9:00

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...