From: Andrew C. <ac...@us...> - 2004-05-27 00:12:32
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27686/src/server Modified Files: combatmanager.cpp combatmanager.h gem.cpp gem.h Log Message: Fixed one problem when target quits in the middle of combat. Index: combatmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/combatmanager.cpp,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** combatmanager.cpp 11 May 2004 17:39:22 -0000 1.46 --- combatmanager.cpp 27 May 2004 00:12:19 -0000 1.47 *************** *** 539,542 **** --- 539,545 ---- this->TargetCID = targetCID; + // Also register the target as a disconnector + target->Register(this); + attackerdata = attacker->GetCharacterData(); targetdata = target->GetCharacterData(); *************** *** 545,551 **** return; - // attackerdata->DecRef(); - // targetdata->DecRef(); - AttackValue=-1; AttackRoll=-1; --- 548,551 ---- *************** *** 563,566 **** --- 563,588 ---- } + + psCombatGameEvent::~psCombatGameEvent() + { + if ( target ) + { + target->Unregister(this); + target = NULL; + } + } + + bool psCombatGameEvent::CheckTrigger() + { + if ( attacker && target ) + { + return true; + } + else + { + return false; + } + } + void psCombatGameEvent::Trigger() { *************** *** 570,571 **** --- 592,608 ---- + void psCombatGameEvent::Disconnecting(void * object) + { + valid = false; + if (attacker) + { + attacker->Unregister(this); + attacker = NULL; + } + if ( target ) + { + target->Unregister(this); + target = NULL; + } + } + Index: combatmanager.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/combatmanager.h,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** combatmanager.h 1 Apr 2004 22:04:57 -0000 1.19 --- combatmanager.h 27 May 2004 00:12:20 -0000 1.20 *************** *** 174,177 **** --- 174,178 ---- int attackerCID, int targetCID); + ~psCombatGameEvent(); virtual void Trigger(); // Abstract event processing function *************** *** 197,200 **** --- 198,205 ---- return WeaponSlot; }; + + virtual bool CheckTrigger(); + virtual void Disconnecting(void * object); + int GetTargetID() { return TargetCID; }; int GetAttackerID() { return AttackerCID; }; Index: gem.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.cpp,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** gem.cpp 26 May 2004 19:04:15 -0000 1.63 --- gem.cpp 27 May 2004 00:12:20 -0000 1.64 *************** *** 432,436 **** gemObject::~gemObject() ! { cel->RemoveEntity(this); delete proxlist; --- 432,437 ---- gemObject::~gemObject() ! { ! Disconnect(); cel->RemoveEntity(this); delete proxlist; *************** *** 587,590 **** --- 588,592 ---- void gemObject::UpdateProxList( bool force ) { + #ifdef PSPROXDEBUG psString log; *************** *** 606,610 **** GetPosition(pos,yrot,sector); csRef<iCelEntityList> nearlist = cel->pl->FindNearbyEntities(sector,pos,prox_distance_current); ! // Cycle through list and add any entities // that represent players to the proximity subscription list. --- 608,612 ---- GetPosition(pos,yrot,sector); csRef<iCelEntityList> nearlist = cel->pl->FindNearbyEntities(sector,pos,prox_distance_current); ! // Cycle through list and add any entities // that represent players to the proximity subscription list. *************** *** 613,617 **** proxlist->ClearTouched(); - for (int i=0; i<count; i++) { --- 615,618 ---- *************** *** 705,708 **** --- 706,710 ---- } } + while (proxlist->GetUntouched_ObjectThatWatchesMe(obj)) { Index: gem.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.h,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** gem.h 4 May 2004 11:04:28 -0000 1.33 --- gem.h 27 May 2004 00:12:20 -0000 1.34 *************** *** 458,462 **** * gemObject is deleted before the event is fired. */ ! class psGEMEvent : public psGameEvent, iDisconnectReceiver { public: --- 458,462 ---- * gemObject is deleted before the event is fired. */ ! class psGEMEvent : public psGameEvent, public iDisconnectReceiver { public: |