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

[Quest] (Fix) Ponowne odbieranie nagrody od Biologa


Rekomendowane odpowiedzi

Opublikowano

UWAGA! Fix działa na game o svn 2089! Nie wiem jak wygląda sytuacja na innych wersjach game.

 

Cześć. Przejdę od razu do rzeczy :D W plikach serwerowych jest quest check_collect_reward.quest. Jeśli mamy ukończone questy na 30,40,50 itd. poziom, możemy w nim zresetować czas nagrody. Niestety, niewiele osób wie o tym, że w queście ukryta jest luka, która pozwala na otrzymanie kolejny raz tej samej nagrody. W efekcie możemy nafarmić sobie nawet 3000 Defa i innych bonusów. Zwykle niewiele graczy wie o tym bugu. Jak go załatać? Już tłumaczę. W game 2089 została wbudowana funkcja questowa affect.remove_all_collect() (kod funkcji znajduje się poniżej), która umożliwia usunięcie WSZYSTKICH affectów o type 515. Mówiąc prościej, usuwa ona wszystkie bonusy stałe nadane za pomocą affect.add_collect(). Nie ma sensu, bym tłumaczył Wam co należy podmienić, dlatego dzisiaj jako że mam dobry humor dostaniecie gotowego już questa. Pamiętajcie, że do questlib.lua należy dodać wpis

affect.remove_all_collect

jeśli go tam nie macie.

 

QUEST:

http://pastebin.com/EguR0YuP

 

Kod Funkcji affect.remove_all_collect() (IDA Pro):

 


int __fastcall quest::affect_remove_all_collect(int a1)
{
int v1; // eax@2
int result; // eax@4
int v3; // [sp+24h] [bp-4h]@1

v3 = *(_DWORD *)_stack_chk_guard__FBSD_1_0;
if ( !singleton<quest::CQuestManager>::ms_singleton )
__assert("instance", "../../common/singleton.h", 26);
v1 = *(_DWORD *)(singleton<quest::CQuestManager>::ms_singleton + 220);
if ( v1 )
CHARACTER::RemoveAffect(v1, 515);
result = 0;
if ( *(_DWORD *)_stack_chk_guard__FBSD_1_0 != v3 )
__stack_chk_fail(a1, *(_DWORD *)_stack_chk_guard__FBSD_1_0 ^ v3);
return result;
}

 

 

Na koniec pragnę przypomnieć o jednym: jeśli macie jakieś inne questy, w których przyznajecie bonusy na zasadzie tych u biologa, to musicie dodać odpowiednie wpisy do tego questa! Nie powiem Wam jak to zrobić, wysilcie szare komórki i napiszcie to sami ;)

 

//edit: tak, wiem, że w chuj nieoptymalne i za dużo pustych stringów i że napisalibyście to inaczej :D

57199140501148694665.png

Opublikowano

Dostałes moddera gratuluje . Szczerze mowiac nie wiem o co tu chodzi ... jesli biolog nam da okreslony bon to przy kolejnych misjach biolga przeciez dostaje sie co innego ( inny bon ) wiec nie ma mozliwosci zeby tak drastyczie bony sie podniosly

Pracuje niestety samodzielnie nad typowym hardem :

Mój Postęp Prac :

Pliki serwerowe : ok 80 %

Client : ok 80 %

Strona www : ok 95 %

Opublikowano

Oto oryginalny quest check_collect_reward:

http://wklej.to/qGb91

Czym się różni ten quest, od Twojego?

Ja też za bardzo nie rozumiem...

 

Gratuluję Moddera. :)

KONIEC


-----------------------------------------


2013-08-15

Opublikowano

Dostałes moddera gratuluje . Szczerze mowiac nie wiem o co tu chodzi ... jesli biolog nam da okreslony bon to przy kolejnych misjach biolga przeciez dostaje sie co innego ( inny bon ) wiec nie ma mozliwosci zeby tak drastyczie bony sie podniosly

Dzięki ;) Owszem, jest tak jak mówisz, ale twórcy metina założyli, że będzie to gra na co najmniej 60 lat (beka, nie? na tyle przynajmniej nadawane są bonusy w questach biologa). A co, jeśli minie te 60 lat, a nasze bonusy się skończą? Ten quest służy do odświeżania bonusów. Jeśli pogadasz z Baek-Go, dostaniesz bonus na kolejne 60 lat, ale TYLKO wtedy, gdy ukończysz odpowiedni quest u biologa. To po prostu odświeża czas bonusów.

 

Oto oryginalny quest check_collect_reward:

http://wklej.to/qGb91

Czym się różni ten quest, od Twojego?

Ja też za bardzo nie rozumiem...

 

Gratuluję Moddera. :)

Funkcja zastosowana w podanym przez Ciebie queście (affect.remove_collect()) po prostu nie usuwa bonusów. Quest idzie dalej i nakłada kolejne. W ten sposób po wielokrotnych rozmowach z NPC możemy uzyskać wielokrotnie bonusy. Funkcja zastosowana przeze mnie (affect.remove_all_collect()) usuwa wszystkie bonusy nadane w questach biologa i nadaje je od nowa, co aktualizuje ich czas. btw, dzięki :D

57199140501148694665.png

Opublikowano

Ja jestem raczek zwolennikiem prostoty i wolę dać te bonusy na 60 lat - na 99% za te 60 lat nie będę się bawił w prywatne serwery :) Wtedy nie trzeba usuwać żadnych bonusów, a quest na reset można usunąć :)

Pozdrawiam

zf0m.png


LINK DO PREZENTACJI (KLIK)


Nic dodać, nic ująć.


Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...