From bfc0cceecc228b6aad84a957cdfc2a6d218686f8 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sat, 12 Oct 2024 11:06:36 -0700 Subject: [PATCH] Basics work for rof2 --- common/patches/rof2.cpp | 12 +- world/client.cpp | 2 + zone/client.h | 2 +- zone/client_mods.cpp | 300 +--------------------------------------- zone/zonedb.cpp | 12 ++ 5 files changed, 26 insertions(+), 302 deletions(-) diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 9024f93b9..631dbbbe1 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -2806,13 +2806,13 @@ namespace RoF2 outapp->WriteSInt32(345); // Mana Total ? // these are needed to fix display bugs - outapp->WriteUInt32(0x19); // base CR - outapp->WriteUInt32(0x19); // base FR - outapp->WriteUInt32(0x19); // base MR - outapp->WriteUInt32(0xf); // base DR - outapp->WriteUInt32(0xf); // base PR + outapp->WriteUInt32(emu->cold_resist); // base CR + outapp->WriteUInt32(emu->fire_resist); // base FR + outapp->WriteUInt32(emu->magic_resist); // base MR + outapp->WriteUInt32(emu->disease_resist); // base DR + outapp->WriteUInt32(emu->poison_resist); // base PR outapp->WriteUInt32(0xf); // base PhR? - outapp->WriteUInt32(0xf); // base Corrup + outapp->WriteUInt32(emu->corruption_resist); // base Corrup outapp->WriteUInt32(0); // Unknown outapp->WriteUInt32(0); // Unknown outapp->WriteUInt32(0); // Unknown diff --git a/world/client.cpp b/world/client.cpp index 6058c19b0..4a3c3994e 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -1911,6 +1911,8 @@ bool CheckCharCreateInfoTitanium(CharCreate_Struct* cc) } //TODO: these hard coded values should be settable somewhere somehow. +//Also they're not 100% accurate so if I don't make them settable somehow +//we need to go back and match them to the logic that was ripped out of zone void GetResistsForCharacterCreate(CharCreate_Struct* cc, bool sofAndLater, uint32 &cold_resist, diff --git a/zone/client.h b/zone/client.h index 98bd7b15c..e4b76a3e0 100644 --- a/zone/client.h +++ b/zone/client.h @@ -597,7 +597,7 @@ public: inline uint8 GetBaseINT() const { return m_pp.INT; } inline uint8 GetBaseAGI() const { return m_pp.AGI; } inline uint8 GetBaseWIS() const { return m_pp.WIS; } - inline uint8 GetBaseCorrup() const { return 15; } // Same for all + inline uint8 GetBaseCorrup() const { return m_pp.corruption_resist; } inline uint8 GetBasePhR() const { return 0; } // Guessing at 0 as base inline virtual int32 GetHeroicSTR() const { return itembonuses.HeroicSTR; } diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index 0387b795b..80abd9710 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -1009,65 +1009,7 @@ int Client::CalcHaste() //in Mob::ResistSpell int32 Client::CalcMR() { - //racial bases - switch (GetBaseRace()) { - case HUMAN: - MR = 25; - break; - case BARBARIAN: - MR = 25; - break; - case ERUDITE: - MR = 30; - break; - case WOOD_ELF: - MR = 25; - break; - case HIGH_ELF: - MR = 25; - break; - case DARK_ELF: - MR = 25; - break; - case HALF_ELF: - MR = 25; - break; - case DWARF: - MR = 30; - break; - case TROLL: - MR = 25; - break; - case OGRE: - MR = 25; - break; - case HALFLING: - MR = 25; - break; - case GNOME: - MR = 25; - break; - case IKSAR: - MR = 25; - break; - case VAHSHIR: - MR = 25; - break; - case FROGLOK: - MR = 30; - break; - case DRAKKIN: - { - MR = 25; - if (GetDrakkinHeritage() == 2) - MR += 10; - else if (GetDrakkinHeritage() == 5) - MR += 2; - break; - } - default: - MR = 20; - } + MR = m_pp.magic_resist; MR += itembonuses.MR + spellbonuses.MR + aabonuses.MR; if (GetClass() == Class::Warrior || GetClass() == Class::Berserker) { MR += GetLevel() / 2; @@ -1083,65 +1025,7 @@ int32 Client::CalcMR() int32 Client::CalcFR() { - //racial bases - switch (GetBaseRace()) { - case HUMAN: - FR = 25; - break; - case BARBARIAN: - FR = 25; - break; - case ERUDITE: - FR = 25; - break; - case WOOD_ELF: - FR = 25; - break; - case HIGH_ELF: - FR = 25; - break; - case DARK_ELF: - FR = 25; - break; - case HALF_ELF: - FR = 25; - break; - case DWARF: - FR = 25; - break; - case TROLL: - FR = 5; - break; - case OGRE: - FR = 25; - break; - case HALFLING: - FR = 25; - break; - case GNOME: - FR = 25; - break; - case IKSAR: - FR = 30; - break; - case VAHSHIR: - FR = 25; - break; - case FROGLOK: - FR = 25; - break; - case DRAKKIN: - { - FR = 25; - if (GetDrakkinHeritage() == 0) - FR += 10; - else if (GetDrakkinHeritage() == 5) - FR += 2; - break; - } - default: - FR = 20; - } + MR = m_pp.fire_resist; int c = GetClass(); if (c == Class::Ranger) { FR += 4; @@ -1169,65 +1053,7 @@ int32 Client::CalcFR() int32 Client::CalcDR() { - //racial bases - switch (GetBaseRace()) { - case HUMAN: - DR = 15; - break; - case BARBARIAN: - DR = 15; - break; - case ERUDITE: - DR = 10; - break; - case WOOD_ELF: - DR = 15; - break; - case HIGH_ELF: - DR = 15; - break; - case DARK_ELF: - DR = 15; - break; - case HALF_ELF: - DR = 15; - break; - case DWARF: - DR = 15; - break; - case TROLL: - DR = 15; - break; - case OGRE: - DR = 15; - break; - case HALFLING: - DR = 20; - break; - case GNOME: - DR = 15; - break; - case IKSAR: - DR = 15; - break; - case VAHSHIR: - DR = 15; - break; - case FROGLOK: - DR = 15; - break; - case DRAKKIN: - { - DR = 15; - if (GetDrakkinHeritage() == 1) - DR += 10; - else if (GetDrakkinHeritage() == 5) - DR += 2; - break; - } - default: - DR = 15; - } + MR = m_pp.disease_resist; int c = GetClass(); // the monk one is part of base resist if (c == Class::Monk) { @@ -1261,65 +1087,7 @@ int32 Client::CalcDR() int32 Client::CalcPR() { - //racial bases - switch (GetBaseRace()) { - case HUMAN: - PR = 15; - break; - case BARBARIAN: - PR = 15; - break; - case ERUDITE: - PR = 15; - break; - case WOOD_ELF: - PR = 15; - break; - case HIGH_ELF: - PR = 15; - break; - case DARK_ELF: - PR = 15; - break; - case HALF_ELF: - PR = 15; - break; - case DWARF: - PR = 20; - break; - case TROLL: - PR = 15; - break; - case OGRE: - PR = 15; - break; - case HALFLING: - PR = 20; - break; - case GNOME: - PR = 15; - break; - case IKSAR: - PR = 15; - break; - case VAHSHIR: - PR = 15; - break; - case FROGLOK: - PR = 30; - break; - case DRAKKIN: - { - PR = 15; - if (GetDrakkinHeritage() == 3) - PR += 10; - else if (GetDrakkinHeritage() == 5) - PR += 2; - break; - } - default: - PR = 15; - } + MR = m_pp.poison_resist; int c = GetClass(); // this monk bonus is part of the base if (c == Class::Monk) { @@ -1353,65 +1121,7 @@ int32 Client::CalcPR() int32 Client::CalcCR() { - //racial bases - switch (GetBaseRace()) { - case HUMAN: - CR = 25; - break; - case BARBARIAN: - CR = 35; - break; - case ERUDITE: - CR = 25; - break; - case WOOD_ELF: - CR = 25; - break; - case HIGH_ELF: - CR = 25; - break; - case DARK_ELF: - CR = 25; - break; - case HALF_ELF: - CR = 25; - break; - case DWARF: - CR = 25; - break; - case TROLL: - CR = 25; - break; - case OGRE: - CR = 25; - break; - case HALFLING: - CR = 25; - break; - case GNOME: - CR = 25; - break; - case IKSAR: - CR = 15; - break; - case VAHSHIR: - CR = 25; - break; - case FROGLOK: - CR = 25; - break; - case DRAKKIN: - { - CR = 25; - if (GetDrakkinHeritage() == 4) - CR += 10; - else if (GetDrakkinHeritage() == 5) - CR += 2; - break; - } - default: - CR = 25; - } + MR = m_pp.cold_resist; int c = GetClass(); if (c == Class::Ranger || c == Class::Beastlord) { CR += 4; diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index bcfaa935d..69c05b3f6 100644 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -561,6 +561,12 @@ bool ZoneDatabase::LoadCharacterData(uint32 character_id, PlayerProfile_Struct* m_epp->expended_aa = e.e_expended_aa_spent; m_epp->last_invsnapshot_time = e.e_last_invsnapshot; m_epp->next_invsnapshot_time = m_epp->last_invsnapshot_time + (RuleI(Character, InvSnapshotMinIntervalM) * 60); + pp->cold_resist = e.cold_resist; + pp->fire_resist = e.fire_resist; + pp->magic_resist = e.magic_resist; + pp->disease_resist = e.disease_resist; + pp->poison_resist = e.poison_resist; + pp->corruption_resist = e.corruption_resist; return true; } @@ -1158,6 +1164,12 @@ bool ZoneDatabase::SaveCharacterData( e.e_expended_aa_spent = m_epp->expended_aa; e.e_last_invsnapshot = m_epp->last_invsnapshot_time; e.mailkey = c->GetMailKeyFull(); + e.cold_resist = pp->cold_resist; + e.fire_resist = pp->fire_resist; + e.magic_resist = pp->magic_resist; + e.disease_resist = pp->disease_resist; + e.poison_resist = pp->poison_resist; + e.corruption_resist = pp->corruption_resist; const int replaced = CharacterDataRepository::ReplaceOne(database, e);