From: <ha...@us...> - 2002-08-07 17:31:45
|
Update of /cvsroot/decaldev/source/DecalFilters In directory usw-pr-cvs1:/tmp/cvs-serv31648 Modified Files: StdAfx.h CharacterStats.h CharacterStats.cpp Log Message: Stopped the damn crash on removeenchantment. Using the PROPER container types for the enchantments and spells known now. As far as I could tell it was working fine, however it probably needs more testing. Index: StdAfx.h =================================================================== RCS file: /cvsroot/decaldev/source/DecalFilters/StdAfx.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** StdAfx.h 12 Apr 2002 01:07:34 -0000 1.6 --- StdAfx.h 7 Aug 2002 17:31:40 -0000 1.7 *************** *** 29,32 **** --- 29,34 ---- #include <vector> #include <map> + #include <set> + #include <utility> #include <algorithm> #include "DecalFilters.h" Index: CharacterStats.h =================================================================== RCS file: /cvsroot/decaldev/source/DecalFilters/CharacterStats.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** CharacterStats.h 2 Aug 2002 00:38:33 -0000 1.10 --- CharacterStats.h 7 Aug 2002 17:31:40 -0000 1.11 *************** *** 56,59 **** --- 56,90 ---- DWORD dwAffected, dwAffectMask, dwFamily; float fAdjustment; + + cEnchantment() + { + } + + cEnchantment( cEnchantment &right ) + { + iSpellID = right.iSpellID; + iLayer = right.iLayer; + ExpireTime = right.ExpireTime; + dwAffected = right.dwAffected; + dwAffectMask = right.dwAffectMask; + dwFamily = right.dwFamily; + fAdjustment = right.fAdjustment; + } + + cEnchantment& operator= ( cEnchantment& right ) + { + if( this != &right ) + { + iSpellID = right.iSpellID; + iLayer = right.iLayer; + ExpireTime = right.ExpireTime; + dwAffected = right.dwAffected; + dwAffectMask = right.dwAffectMask; + dwFamily = right.dwFamily; + fAdjustment = right.fAdjustment; + } + + return *this; + } }; *************** *** 104,108 **** private: ! std::vector< cEnchantment * > Enchantments; DWORD TotalBurden, TotalPyreal, TotalXP, UnassignedXP, SkillPoints, Level, Rank; --- 135,139 ---- private: ! std::list< cEnchantment * > Enchantments; DWORD TotalBurden, TotalPyreal, TotalXP, UnassignedXP, SkillPoints, Level, Rank; *************** *** 134,138 **** char Server[50]; ! std::vector< DWORD > SpellsLearned; long TotalSpells; bool DecalDat; --- 165,169 ---- char Server[50]; ! std::set< DWORD > SpellsLearned; long TotalSpells; bool DecalDat; Index: CharacterStats.cpp =================================================================== RCS file: /cvsroot/decaldev/source/DecalFilters/CharacterStats.cpp,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** CharacterStats.cpp 3 Aug 2002 23:12:21 -0000 1.23 --- CharacterStats.cpp 7 Aug 2002 17:31:40 -0000 1.24 *************** *** 440,444 **** pMessage->get_Member (_variant_t ("spell"), &vKey); ! SpellsLearned.push_back(vKey.lVal); } --- 440,444 ---- pMessage->get_Member (_variant_t ("spell"), &vKey); ! SpellsLearned.insert(vKey.lVal); } *************** *** 712,728 **** break; } ! ! case (0x004D): // Spellbook Delete { _variant_t vSpellID; pMessage->get_Member( _variant_t( "spell" ), &vSpellID ); ! DWORD nSpellID = DWORD(vSpellID.lVal); ! for (std::vector< DWORD >::iterator Spell = SpellsLearned.begin(); Spell != SpellsLearned.end(); Spell++) { ! if(*Spell==nSpellID) ! SpellsLearned.erase( Spell ); } ! ! Fire_Spellbook_Delete( vSpellID.lVal ); break; --- 712,738 ---- break; } ! case 0x004C: // Spellbook Add { _variant_t vSpellID; pMessage->get_Member( _variant_t( "spell" ), &vSpellID ); ! DWORD nSpellID = vSpellID.lVal; ! ! std::pair< std::set< DWORD >::iterator, bool > pSuccess; ! ! pSuccess = SpellsLearned.insert( nSpellID ); ! if( pSuccess.second == true ) { ! Fire_Spellbook_Add( nSpellID ); } ! break; ! } ! ! case 0x004D: // Spellbook Delete ! { ! _variant_t vSpellID; ! pMessage->get_Member( _variant_t( "spell" ), &vSpellID ); ! DWORD nSpellID = vSpellID.lVal; ! SpellsLearned.erase( nSpellID ); ! Fire_Spellbook_Delete( nSpellID ); break; *************** *** 738,741 **** --- 748,754 ---- void cCharacterStats::AddEnchant(int SpellID, int Layer, double Duration, DWORD Family, double Elapsed, DWORD AffectMask, DWORD Affected, float Adjustment) { + if(SpellID==666) + Vitae = Adjustment; + time_t TimeExpires = time(NULL); // duration of the spell plus the (negative) number the server sends us indicating how many seconds have elapsed *************** *** 751,757 **** tpench->fAdjustment = Adjustment; - if(SpellID==666) - Vitae = Adjustment; - Enchantments.push_back(tpench); --- 764,767 ---- *************** *** 764,768 **** tpench->dwAffected--; ! for (std::vector<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x01) && ((*tpi)->dwAffected == tpench->dwAffected)) --- 774,778 ---- tpench->dwAffected--; ! for (std::list<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x01) && ((*tpi)->dwAffected == tpench->dwAffected)) *************** *** 789,793 **** tpench->dwAffected /= 2; ! for (std::vector<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x02) && ((*tpi)->dwAffected == tpench->dwAffected)) --- 799,803 ---- tpench->dwAffected /= 2; ! for (std::list<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x02) && ((*tpi)->dwAffected == tpench->dwAffected)) *************** *** 812,816 **** case 0x10: //Skill { ! for (std::vector<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x10) && ((*tpi)->dwAffected == tpench->dwAffected)) --- 822,826 ---- case 0x10: //Skill { ! for (std::list<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x10) && ((*tpi)->dwAffected == tpench->dwAffected)) *************** *** 831,835 **** Vitae = 1.00; ! for (std::vector< cEnchantment * >::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if( ( (*tpi)->iSpellID == SpellID) && ( (*tpi)->iLayer == Layer) ) --- 841,845 ---- Vitae = 1.00; ! for (std::list< cEnchantment * >::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if( ( (*tpi)->iSpellID == SpellID) && ( (*tpi)->iLayer == Layer) ) *************** *** 861,865 **** std::map<DWORD, float> FamilyMap; ! for (std::vector< cEnchantment * >::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x01) && ((*tpi)->dwAffected == Stat)) --- 871,875 ---- std::map<DWORD, float> FamilyMap; ! for (std::list< cEnchantment * >::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x01) && ((*tpi)->dwAffected == Stat)) *************** *** 889,893 **** std::map<DWORD, float> FamilyMap; ! for (std::vector< cEnchantment * >::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if( (((*tpi)->dwAffectMask & 0x13) == 0x02) && ((*tpi)->dwAffected == SecStat) ) --- 899,903 ---- std::map<DWORD, float> FamilyMap; ! for (std::list< cEnchantment * >::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if( (((*tpi)->dwAffectMask & 0x13) == 0x02) && ((*tpi)->dwAffected == SecStat) ) *************** *** 917,921 **** std::map<DWORD, float> FamilyMap; ! for (std::vector<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x10) && ((*tpi)->dwAffected == Skill)) --- 927,931 ---- std::map<DWORD, float> FamilyMap; ! for (std::list<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) { if ((((*tpi)->dwAffectMask & 0x13) == 0x10) && ((*tpi)->dwAffected == Skill)) *************** *** 964,969 **** } ! *pVal = SpellsLearned[ SpellID ]; return S_OK; } --- 974,985 ---- } ! std::set< DWORD >::iterator a = SpellsLearned.find( SpellID ); ! if( a == SpellsLearned.end() ) ! { ! *pVal = 0; ! return S_OK; ! } + *pVal = 1; return S_OK; } *************** *** 1443,1481 **** } ! HRESULT cCharacterStats::get_Enchantment(long SpellID, IEnchantment **pVal) { if (!GotLogin) return E_FAIL; ! if (SpellID < 0) return S_FALSE; ! for (std::vector<cEnchantment *>::iterator tpi = Enchantments.begin(); tpi != Enchantments.end(); tpi++) ! { ! if ((*tpi)->iSpellID == SpellID) ! { ! time_t CurrentTime = time(NULL); ! long SecondsLeft = (*tpi)->ExpireTime - CurrentTime; ! CComObject< ::Enchantment > *pEnchant; ! CComObject< ::Enchantment >::CreateInstance( &pEnchant ); ! pEnchant->put_SpellID( (*tpi)->iSpellID ); ! pEnchant->put_Layer( (*tpi)->iLayer ); ! pEnchant->put_TimeRemaining( SecondsLeft ); ! pEnchant->put_Affected( (*tpi)->dwAffected ); ! pEnchant->put_AffectedMask( (*tpi)->dwAffectMask ); ! pEnchant->put_Family( (*tpi)->dwFamily ); ! pEnchant->put_Adjustment( (*tpi)->fAdjustment ); ! return pEnchant->QueryInterface(pVal); ! return S_OK; ! } ! } ! return S_FALSE; } ! HRESULT cCharacterStats::get_Vitae(/*[out, retval]*/ long *pVal) { if(!GotLogin) --- 1459,1494 ---- } ! HRESULT cCharacterStats::get_Enchantment(long EnchantNum, IEnchantment **pVal) { if (!GotLogin) return E_FAIL; ! if (EnchantNum < 0) return S_FALSE; ! std::list<cEnchantment *>::iterator tpi = Enchantments.begin(); ! for( int i = 1; i < EnchantNum; i++ ) ! tpi++; ! time_t CurrentTime = time(NULL); ! long SecondsLeft = (*tpi)->ExpireTime - CurrentTime; ! CComObject< ::Enchantment > *pEnchant; ! CComObject< ::Enchantment >::CreateInstance( &pEnchant ); ! pEnchant->put_SpellID( (*tpi)->iSpellID ); ! pEnchant->put_Layer( (*tpi)->iLayer ); ! pEnchant->put_TimeRemaining( SecondsLeft ); ! pEnchant->put_Affected( (*tpi)->dwAffected ); ! pEnchant->put_AffectedMask( (*tpi)->dwAffectMask ); ! pEnchant->put_Family( (*tpi)->dwFamily ); ! pEnchant->put_Adjustment( (*tpi)->fAdjustment ); ! ! pEnchant->QueryInterface(pVal); ! return S_OK; } ! HRESULT cCharacterStats::get_Vitae(long *pVal) { if(!GotLogin) |