Opublikowano 2 Lutego2 Lut Witam serdecznie, Czy ktoś mógłby jak najprościej wytłumaczyć mechanizm działania i komunikacji tego wszystkiego tak w chłopskich słowach? Przykładowo chciałbym zmienic (lub dodać) nowy bonus ala itemshopowy na zasadzie rekawicy/monety z isu. Chce aby jeden bonus (vip) dawał wszystko na raz - rekawice, trzecią ręke, monetke, oraz np. dodatkowo bonusy silny przeciwko nieumarłym 10%. Ale to najmniej istotne. Na jakiej zasadziec clieent lub też binka komunikuje sie z serwerem. Skąd pobierany jest czas który jest obliczny po najechaniu na ikonke w lewym górnym roku (np. 3dni 12godzin 3min.) do konca) . W bince funkcja wywołuje odpowiedni pakiet zwracający dane z serwera? Skąd client (python gui) ma te dane? Binka obsługuje dane z serwera i pobiera gui pythona? Czy to gui pythona wywołuje funkcje z binki która wywołuje funkcje z backendu? Struktura jest ogromna i można sobie włosy wyrwać.
Opublikowano 2 Lutego2 Lut Rozwiązanie Wszystkie czasy pakietów VIP są określone w tabeli account: gold_expire, silver_expire, safebox_expire, fish_mind_expire, mariage_fast_expire, autoloot_expire w nich ustalasz do kiedy ma trwać dany bonus. Te wartości są ładowane podczas logowania na serwer. Czas trwania bonusu i ikona u góry jest określona jako affecty dokładnie: AFFECT_PREMIUM_START = 500, AFFECT_EXP_BONUS = 500, // 경험의 반지 AFFECT_ITEM_BONUS = 501, // 도둑의 장갑 AFFECT_SAFEBOX = 502, // PREMIUM_SAFEBOX, AFFECT_AUTOLOOT = 503, // PREMIUM_AUTOLOOT, AFFECT_FISH_MIND = 504, // PREMIUM_FISH_MIND, AFFECT_MARRIAGE_FAST = 505, // 원앙의 깃털 AFFECT_GOLD_BONUS = 506, // 돈 드롭확률 50%증가 AFFECT_PREMIUM_END = 509, W binarce w InterfaceBase.h masz określone te same affecty muszą mieć te same identyfikatory i kolejność. W PythonCharacterModule masz określone nazwy modułów dla nich aby móc się odwołać w py. W Python uiaffectshower.py możesz się wtedy odwołać do chr i danego affectu. Pakiety zwykle są jako VIP możliwe do zakupu przez stronę lub ItemShop w grze wtedy po prostu aktualizujesz czas w danym pakiecie. Możesz stworzyć przedmioty na typie USE_AFFECT wykorzystując affecty od VIP. W ten sposób możesz tworzyć również nowe. Jeśli chodzi o logikę działania to masz po prostu warunki, które sprawdzają czy dany typ premium jest aktywny, czyli ma czas. W length.h masz enum z wszystkimi typami: enum EPremiumTypes { PREMIUM_EXP, PREMIUM_ITEM, PREMIUM_SAFEBOX, PREMIUM_AUTOLOOT, PREMIUM_FISH_MIND , PREMIUM_MARRIAGE_FAST, PREMIUM_GOLD, PREMIUM_MAX_NUM, }; I przykładowo w funkcji :GiveExp masz warunek tego typu: if (to->GetPremiumRemainSeconds(PREMIUM_EXP) > 0) { iExp += (iExp * 50 / 100); }
Opublikowano 2 Lutego2 Lut Autor Super dzięki wielkie, moglbys jeszcze w wolnej chwili wskazac gdzie dokladnie jest inicjalizacja postaci? Podejrzewam ze wiekszosc rzeczy ladowana jest w pewnym momencie do singletonu aby zmniejszac obciazenie i ruch na bazie danych.
Opublikowano 2 Lutego2 Lut Programista Godzinę temu, ouiai napisał(a): Super dzięki wielkie, moglbys jeszcze w wolnej chwili wskazac gdzie dokladnie jest inicjalizacja postaci? Podejrzewam ze wiekszosc rzeczy ladowana jest w pewnym momencie do singletonu aby zmniejszac obciazenie i ruch na bazie danych. Singleton jest po to, aby odwoływać się do istniejącej już inicjalizacji klasy, więc to nie do końca tak, a postać ładuje się w CHARACTER::Initialize i funkcjach porozrzucanych po reszcie char.cpp Edytowane 2 Lutego2 Lut przez Thorek
Opublikowano 4 Lutego4 Lut @ouiai Czy temat dla Ciebie został wyczerpany i uzyskałeś odpowiedzi, czy nadal masz jakieś pytanie w związku z powyższym?
Opublikowano 4 Lutego4 Lut Autor 11 godzin temu, Sevence napisał(a): @ouiai Czy temat dla Ciebie został wyczerpany i uzyskałeś odpowiedzi, czy nadal masz jakieś pytanie w związku z powyższym? Tak na ten moment wszystko jasne, dziekuje bardzo. W razie innych pytan otworze nowy temat w przyszlosci, pozdrawiam.