Opublikowano 27 Marca 20251 r Dodatkowa szansa na resp bossa z bossachar_battle.cppSZUKAJ:void CHARACTER::Dead Tylko zalogowani Zaloguj się, aby wyświetlić chronioną treść Ten post zawiera treści dostępne tylko dla członków. Zaloguj się lub utwórz konto, aby odblokować całą zawartość tego posta. Zaloguj się Utwórz konto Edytowane 29 Marca 20251 r przez Arta
Opublikowano 28 Marca 20251 r Autor W dniu 28.03.2025 o 04:04, luwiart napisał(a):Popraw link :)Faktycznie jak tylko będę na kompie przywróce link bo forum zgasło wieczorem i widocznie się nie zedytowalo. Dzięki
Opublikowano 30 Marca 20251 r Programista No tak.Po co użyć czegoś co jest już domyślnie zrobione w grze, skoro można jeszcze raz, gorzej.Poszerzamy mob_proto o nową kolumnę:Modyfikujemy strukturę TMobTable (common/tables.h) w poniższy sposób:C++Kod został skopiowanytypedef struct SMobTable : public SEntityTable{ // </> DWORD dwSummonVnum; DWORD dwSummonChance; // </>} TMobTable;Modyfikujemy db/ClientManagerBoot.cpp w ten sposób:C++Kod został skopiowanyenum MProtoT{ // </> summon, summon_chance, // </>}; boolCClientManager::InitializeMobTableFromDB(){ // </> "dam_multiply, summon, summon_chance, drain_sp," // </> VERIFY_IFIELD(MProto::summon, mob_table->dwSummonVnum); VERIFY_IFIELD(MProto::summon_chance, mob_table->dwSummonChance);}Modyfikujemy game/char_battle.cpp w poniższy sposób:C++Kod został skopiowanyDWORDCHARACTER::GetSummonVnum() const{ return m_pkMobData ? m_pkMobData->m_table.dwSummonVnum : 0;} DWORDCHARACTER::GetSummonChance() const{ return m_pkMobData ? m_pkMobData->m_table.dwSummonChance : 0;} voidCHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead){ // </> // killer check if (pkKiller && pkKiller->IsPC()) { // victim check if (!IsPC()) { auto vnum = GetSummonVnum(); if (vnum && number(1, 100) <= GetSummonChance()) { CHARACTER_MANAGER::instance().SpawnMob( vnum, GetMapIndex(), GetX(), GetY(), GetZ(), true); pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Spawn additional boss - success")); } } }}Modyfikujemy game/char.h w ten sposób:C++Kod został skopiowany// </>DWORD GetSummonVnum() const;DWORD GetSummonChance() const;// </>Na sam koniec pozostała edycja locale_string: Edytowane 30 Marca 20251 r przez Thorek
Opublikowano 30 Marca 20251 r Autor W dniu 30.03.2025 o 15:33, Thorek napisał(a):No tak.Po co użyć czegoś co jest już domyślnie zrobione w grze, skoro można jeszcze raz, gorzej.Poszerzamy mob_proto o nową kolumnę:Modyfikujemy strukturę TMobTable (common/tables.h) w poniższy sposób:C++Kod został skopiowanytypedef struct SMobTable : public SEntityTable{ // </> DWORD dwSummonVnum; DWORD dwSummonChance; // </>} TMobTable;Modyfikujemy db/ClientManagerBoot.cpp w ten sposób:C++Kod został skopiowanyenum MProtoT{ // </> summon, summon_chance, // </>}; boolCClientManager::InitializeMobTableFromDB(){ // </>"dam_multiply, summon, summon_chance, drain_sp,"// </>VERIFY_IFIELD(MProto::summon, mob_table->dwSummonVnum); VERIFY_IFIELD(MProto::summon_chance, mob_table->dwSummonChance);}Modyfikujemy game/char_battle.cpp w poniższy sposób:C++Kod został skopiowanyDWORDCHARACTER::GetSummonVnum() const{ return m_pkMobData ? m_pkMobData->m_table.dwSummonVnum : 0;} DWORDCHARACTER::GetSummonChance() const{ return m_pkMobData ? m_pkMobData->m_table.dwSummonChance : 0;} voidCHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead){ // </>// killer checkif (pkKiller && pkKiller->IsPC()) { // victim check if (!IsPC()) { auto vnum = GetSummonVnum(); if (vnum && number(1, 100) <= GetSummonChance()) { CHARACTER_MANAGER::instance().SpawnMob( vnum, GetMapIndex(), GetX(), GetY(), GetZ(), true); pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Spawn additional boss - success")); } } }}Modyfikujemy game/char.h w ten sposób:C++Kod został skopiowany// </>DWORD GetSummonVnum() const;DWORD GetSummonChance() const;// </>Na sam koniec pozostała edycja locale_string:RozwińWolę zmienić jeden plik niż rozgrzebywać proto które i tak jest zjebane, każdy jest kowalem swojego losu.
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto