|
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)
|