From: <hei...@us...> - 2008-08-21 20:23:16
|
Revision: 2096 http://planeshift.svn.sourceforge.net/planeshift/?rev=2096&view=rev Author: heinchen Date: 2008-08-21 20:23:24 +0000 (Thu, 21 Aug 2008) Log Message: ----------- locked possible race condition Modified Paths: -------------- trunk/src/server/weathermanager.cpp trunk/src/server/weathermanager.h Modified: trunk/src/server/weathermanager.cpp =================================================================== --- trunk/src/server/weathermanager.cpp 2008-08-21 19:52:56 UTC (rev 2095) +++ trunk/src/server/weathermanager.cpp 2008-08-21 20:23:24 UTC (rev 2096) @@ -213,8 +213,10 @@ si, clientnum, r,g,b); - - events.Push(event); + { + CS::Threading::MutexScopedLock lock (eventsMutex); + events.Push(event); + } psserver->GetEventManager()->Push(event); } @@ -233,7 +235,10 @@ void WeatherManager::HandleWeatherEvent(psWeatherGameEvent *event) { - events.Delete(event); // Delete this from our "db" + { + CS::Threading::MutexScopedLock lock (eventsMutex); + events.Delete(event); // Delete this from our "db" + } // See if we want to ignore this event for(size_t i = 0; i < ignored.GetSize();i++) @@ -341,22 +346,26 @@ // Simple case is when event types are equal. In addition we have to test // for the mutal exclusive case where we are changing from snow to rain or // rain to snow. - for(size_t i = 0; i < events.GetSize();i++) + { - psWeatherGameEvent* evt = events[i]; - if(evt->sector == event->sector && - (evt->type == event->type || ((evt->type==psWeatherMessage::RAIN|| - evt->type==psWeatherMessage::SNOW)&& - (event->type==psWeatherMessage::RAIN|| - event->type==psWeatherMessage::SNOW)))) + CS::Threading::MutexScopedLock lock (eventsMutex); + for (size_t i = 0; i < events.GetSize(); i++) { - ignored.Push(evt); // Ignore when the eventmanager handles the event - events.DeleteIndex(i); - i--; - - Notify4(LOG_WEATHER,"Removed disturbing event for sector '%s' (%d,%d)", - evt->sector.GetData(),evt->value,evt->duration); - + psWeatherGameEvent* evt = events[i]; + if (evt->sector == event->sector && (evt->type == event->type + || ((evt->type == psWeatherMessage::RAIN || evt->type + == psWeatherMessage::SNOW) && (event->type + == psWeatherMessage::RAIN || event->type + == psWeatherMessage::SNOW)))) + { + ignored.Push(evt); // Ignore when the eventmanager handles the event + events.DeleteIndex(i); + i--; + + Notify4(LOG_WEATHER,"Removed disturbing event for sector '%s' (%d,%d)", + evt->sector.GetData(),evt->value,evt->duration); + + } } } Modified: trunk/src/server/weathermanager.h =================================================================== --- trunk/src/server/weathermanager.h 2008-08-21 19:52:56 UTC (rev 2095) +++ trunk/src/server/weathermanager.h 2008-08-21 20:23:24 UTC (rev 2096) @@ -96,7 +96,10 @@ int gameTimeYear; csArray<psWeatherGameEvent*> ignored; // Used for overriding commands like /rain - csArray<psWeatherGameEvent*> events; // Ugly, but we need a copy of our events + + CS::Threading::Mutex eventsMutex; + csArray<psWeatherGameEvent*> events; // Ugly, but we need a copy of our events + }; /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-08-24 11:00:11
|
Revision: 2102 http://planeshift.svn.sourceforge.net/planeshift/?rev=2102&view=rev Author: mgist Date: 2008-08-24 11:00:21 +0000 (Sun, 24 Aug 2008) Log Message: ----------- - Fixed a few compile warnings. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/usermanager.cpp Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2008-08-24 10:56:07 UTC (rev 2101) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2008-08-24 11:00:21 UTC (rev 2102) @@ -777,7 +777,7 @@ { // We have to return a valid equipInfo in all cases, so make a dummy one here for that // ItemIndex 0 is always a dummy item for this purpose - static psEquipInfo dummy_equipment = {0, 0, 0, NULL}; + static psEquipInfo dummy_equipment = {0, 0, 0, 0}; if (slot<PSCHARACTER_SLOT_NONE || slot>=PSCHARACTER_SLOT_BULK1) return dummy_equipment; Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2008-08-24 10:56:07 UTC (rev 2101) +++ trunk/src/server/usermanager.cpp 2008-08-24 11:00:21 UTC (rev 2102) @@ -1319,7 +1319,7 @@ // must use msg.sides instead of msg.sides-1 because rand never actually // returns max val, and int truncation never results in max val as a result if (msg.dtarget) - total += ((psserver->rng->Get(msg.sides) + 1 >= msg.dtarget)? 1: 0); + total += ((psserver->rng->Get(msg.sides) + 1 >= (uint)msg.dtarget)? 1: 0); else total = total + psserver->rng->Get(msg.sides) + 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2008-09-16 04:20:05
|
Revision: 2161 http://planeshift.svn.sourceforge.net/planeshift/?rev=2161&view=rev Author: kennygraunke Date: 2008-09-16 04:20:15 +0000 (Tue, 16 Sep 2008) Log Message: ----------- Very small spell cleanups. Modified Paths: -------------- trunk/src/server/bulkobjects/psspell.h trunk/src/server/spellmanager.cpp trunk/src/server/spellmanager.h Modified: trunk/src/server/bulkobjects/psspell.h =================================================================== --- trunk/src/server/bulkobjects/psspell.h 2008-09-16 03:53:05 UTC (rev 2160) +++ trunk/src/server/bulkobjects/psspell.h 2008-09-16 04:20:15 UTC (rev 2161) @@ -114,9 +114,6 @@ */ psSpellCastGameEvent *Cast(psSpellManager * mgr, Client * client, csString &effectName, csVector3 &offset, PS_ID& anchorID, PS_ID& targetID, unsigned int &castingDuration, csString *castingText) const; - bool isTargetAffected( Client * client, gemObject *target, float max_range, csString *castingText ) const; - int checkRange( gemActor *caster, gemObject *target, float max_range) const; - /** Find all objects in range for spell around caster * @@ -151,6 +148,9 @@ double CalcFunction(const char * functionName, const double * params); protected: + bool isTargetAffected( Client * client, gemObject *target, float max_range, csString *castingText ) const; + int checkRange( gemActor *caster, gemObject *target, float max_range) const; + // Returns mathscript variable with given name - when there is no such variable, returns NULL and writes error into log MathScriptVar * GetScriptVar(const char * varName); Modified: trunk/src/server/spellmanager.cpp =================================================================== --- trunk/src/server/spellmanager.cpp 2008-09-16 03:53:05 UTC (rev 2160) +++ trunk/src/server/spellmanager.cpp 2008-09-16 04:20:15 UTC (rev 2161) @@ -127,7 +127,7 @@ case MSGTYPE_SPELL_CANCEL: { - CancelSpellCasting(client->GetActor()); + client->GetCharacterData()->InterruptSpellCasting(); break; } } @@ -341,11 +341,6 @@ } } -void psSpellManager::CancelSpellCasting(gemActor * caster) -{ - caster->GetCharacterData()->InterruptSpellCasting(); -} - void psSpellManager::SendSpellBook(Client * client) { psSpellBookMessage mesg(client->GetClientNum()); Modified: trunk/src/server/spellmanager.h =================================================================== --- trunk/src/server/spellmanager.h 2008-09-16 03:53:05 UTC (rev 2160) +++ trunk/src/server/spellmanager.h 2008-09-16 04:20:15 UTC (rev 2161) @@ -117,12 +117,6 @@ */ void Cast(Client * client, csString spellName, float kFactor); - /** Abort a spell cast. - * - * @param castor The castor that was casting this spell. - */ - void CancelSpellCasting(gemActor * caster); - /** Send the player's spell book. * * @param client The client that will be sent the spell book. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2008-09-16 04:21:20
|
Revision: 2162 http://planeshift.svn.sourceforge.net/planeshift/?rev=2162&view=rev Author: kennygraunke Date: 2008-09-16 04:21:29 +0000 (Tue, 16 Sep 2008) Log Message: ----------- Cleaned up ludicrous handling of weapon stat modifiers. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitem.h trunk/src/server/bulkobjects/psitemstats.cpp trunk/src/server/bulkobjects/psitemstats.h trunk/src/server/main.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2008-09-16 04:20:15 UTC (rev 2161) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2008-09-16 04:21:29 UTC (rev 2162) @@ -1489,46 +1489,34 @@ } // go through list and make items active whose requirements are fulfilled and remove item from list. // stop when a complete loop has been made without making a change. - int haschanged = 1; // go through list at least once - while( haschanged ) + bool hasChanged; + do { - haschanged = 0; - csList<psItem*>::Iterator i(itemlist); - while( i.HasNext() ) + hasChanged = false; + csList<psItem*>::Iterator it(itemlist); + while (it.HasNext()) { - currentitem = i.Next(); + currentitem = it.Next(); csString response; if (!currentitem->CheckRequirements(this, response)) { continue; } - if( !currentitem->IsActive() ) + if (!currentitem->IsActive()) { Inventory().RunEquipScript(currentitem); } // Check for attr bonuses - for(int z = 0; z < PSITEMSTATS_STAT_BONUS_INDEX_COUNT; z++) + for (int i = 0; i < PSITEMSTATS_STAT_BONUS_COUNT; i++) { - PSITEMSTATS_STAT_BONUS_INDEX stat = PSITEMSTATS_STAT_BONUS_INDEX_0; - - if(z == 0) - stat = PSITEMSTATS_STAT_BONUS_INDEX_0; - else if( z == 1) - stat = PSITEMSTATS_STAT_BONUS_INDEX_1; - else if( z == 2) - stat = PSITEMSTATS_STAT_BONUS_INDEX_2; - - float bonus = currentitem->GetWeaponAttributeBonusMax(stat); - - // Add to right var - modifiers.AddToStat(currentitem->GetWeaponAttributeBonusType(stat), (int)bonus); + modifiers.AddToStat(currentitem->GetWeaponAttributeBonusType(i), (int) currentitem->GetWeaponAttributeBonusMax(i)); } - haschanged = 1; - itemlist.Delete(i); + hasChanged = true; + itemlist.Delete(it); break; } - } + } while (hasChanged); // go through list of items whose requirements are not fulfilled and deactivate them csList<psItem*>::Iterator i(itemlist); Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2008-09-16 04:20:15 UTC (rev 2161) +++ trunk/src/server/bulkobjects/psitem.cpp 2008-09-16 04:21:29 UTC (rev 2162) @@ -1553,26 +1553,22 @@ return current_stats->Armor().Hardness(); } -PSITEMSTATS_STAT psItem::GetWeaponAttributeBonusType(PSITEMSTATS_STAT_BONUS_INDEX index) +PSITEMSTATS_STAT psItem::GetWeaponAttributeBonusType(int index) { return current_stats->Weapon().AttributeBonusType(index); } float psItem::GetWeaponAttributeBonus(PSITEMSTATS_STAT stat) { - if (GetWeaponAttributeBonusType(PSITEMSTATS_STAT_BONUS_INDEX_0)== stat) - return GetWeaponAttributeBonusMax(PSITEMSTATS_STAT_BONUS_INDEX_0); - - else if (GetWeaponAttributeBonusType(PSITEMSTATS_STAT_BONUS_INDEX_1)== stat) - return GetWeaponAttributeBonusMax(PSITEMSTATS_STAT_BONUS_INDEX_1); - - else if (GetWeaponAttributeBonusType(PSITEMSTATS_STAT_BONUS_INDEX_2)== stat) - return GetWeaponAttributeBonusMax(PSITEMSTATS_STAT_BONUS_INDEX_2); - else - return 0.0F; + for (int i = 0; i < PSITEMSTATS_STAT_BONUS_COUNT; i++) + { + if (GetWeaponAttributeBonusType(i) == stat) + return GetWeaponAttributeBonusMax(i); + } + return 0.0f; } -float psItem::GetWeaponAttributeBonusMax(PSITEMSTATS_STAT_BONUS_INDEX index) +float psItem::GetWeaponAttributeBonusMax(int index) { return current_stats->Weapon().AttributeBonusMax(index); } Modified: trunk/src/server/bulkobjects/psitem.h =================================================================== --- trunk/src/server/bulkobjects/psitem.h 2008-09-16 04:20:15 UTC (rev 2161) +++ trunk/src/server/bulkobjects/psitem.h 2008-09-16 04:21:29 UTC (rev 2162) @@ -679,8 +679,8 @@ float GetDamageProtection(PSITEMSTATS_DAMAGETYPE dmgtype); float GetHardness(); float GetWeaponAttributeBonus(PSITEMSTATS_STAT stat); - PSITEMSTATS_STAT GetWeaponAttributeBonusType(PSITEMSTATS_STAT_BONUS_INDEX index); - float GetWeaponAttributeBonusMax(PSITEMSTATS_STAT_BONUS_INDEX index); + PSITEMSTATS_STAT GetWeaponAttributeBonusType(int index); + float GetWeaponAttributeBonusMax(int index); float GetWeight(); unsigned short GetItemSize(); Modified: trunk/src/server/bulkobjects/psitemstats.cpp =================================================================== --- trunk/src/server/bulkobjects/psitemstats.cpp 2008-09-16 04:20:15 UTC (rev 2161) +++ trunk/src/server/bulkobjects/psitemstats.cpp 2008-09-16 04:21:29 UTC (rev 2162) @@ -147,16 +147,16 @@ return weapon_skill[index]; } -PSITEMSTATS_STAT psItemWeaponStats::AttributeBonusType(PSITEMSTATS_STAT_BONUS_INDEX index) +PSITEMSTATS_STAT psItemWeaponStats::AttributeBonusType(int index) { - if (index<0 || index >= PSITEMSTATS_STAT_BONUS_INDEX_COUNT) + if (index < 0 || index >= PSITEMSTATS_STAT_BONUS_COUNT) return PSITEMSTATS_STAT_NONE; return attribute_bonuses[index].attribute_id; } -float psItemWeaponStats::AttributeBonusMax(PSITEMSTATS_STAT_BONUS_INDEX index) +float psItemWeaponStats::AttributeBonusMax(int index) { - if (index<0 || index >= PSITEMSTATS_STAT_BONUS_INDEX_COUNT) + if (index < 0 || index >= PSITEMSTATS_STAT_BONUS_COUNT) return 0.0f; return attribute_bonuses[index].bonus_max; } Modified: trunk/src/server/bulkobjects/psitemstats.h =================================================================== --- trunk/src/server/bulkobjects/psitemstats.h 2008-09-16 04:20:15 UTC (rev 2161) +++ trunk/src/server/bulkobjects/psitemstats.h 2008-09-16 04:21:29 UTC (rev 2162) @@ -194,15 +194,8 @@ short bonus_max; }; -enum PSITEMSTATS_STAT_BONUS_INDEX -{ - PSITEMSTATS_STAT_BONUS_INDEX_0 = 0, - PSITEMSTATS_STAT_BONUS_INDEX_1, - PSITEMSTATS_STAT_BONUS_INDEX_2, - PSITEMSTATS_STAT_BONUS_INDEX_COUNT -}; +#define PSITEMSTATS_STAT_BONUS_COUNT 3 - /** * This is a struct used by item stats to say that a person * must have a certain level at a certain skill to use the @@ -276,13 +269,13 @@ float TargetedBlockValue(){ return targeted_block_value;} float CounterBlockValue(){ return counter_block_value; } - PSITEMSTATS_STAT AttributeBonusType(PSITEMSTATS_STAT_BONUS_INDEX index); - float AttributeBonusMax(PSITEMSTATS_STAT_BONUS_INDEX index); + PSITEMSTATS_STAT AttributeBonusType(int index); + float AttributeBonusMax(int index); private: PSITEMSTATS_WEAPONTYPE weapon_type; PSSKILL weapon_skill[PSITEMSTATS_WEAPONSKILL_INDEX_COUNT]; - st_attribute_bonus attribute_bonuses[PSITEMSTATS_STAT_BONUS_INDEX_COUNT]; + st_attribute_bonus attribute_bonuses[PSITEMSTATS_STAT_BONUS_COUNT]; float latency; float damages[PSITEMSTATS_DAMAGETYPE_COUNT]; // 4.3 precision float penetration; Modified: trunk/src/server/main.cpp =================================================================== --- trunk/src/server/main.cpp 2008-09-16 04:20:15 UTC (rev 2161) +++ trunk/src/server/main.cpp 2008-09-16 04:21:29 UTC (rev 2162) @@ -26,7 +26,6 @@ #include "globals.h" #include "psserver.h" #include "iserver/idal.h" -#include "net/netpacket.h" #include "util/serverconsole.h" #include "util/log.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2008-09-17 07:45:19
|
Revision: 2164 http://planeshift.svn.sourceforge.net/planeshift/?rev=2164&view=rev Author: kennygraunke Date: 2008-09-17 07:45:30 +0000 (Wed, 17 Sep 2008) Log Message: ----------- Fix misspelling in function name. Modified Paths: -------------- trunk/src/server/npcmanager.cpp trunk/src/server/npcmanager.h Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-09-16 18:32:55 UTC (rev 2163) +++ trunk/src/server/npcmanager.cpp 2008-09-17 07:45:30 UTC (rev 2164) @@ -1313,7 +1313,7 @@ } } -bool NPCManager::CanPetHereYou(int clientnum, Client * owner, gemNPC * pet, const char * type) +bool NPCManager::CanPetHearYou(int clientnum, Client *owner, gemNPC *pet, const char *type) { //TODO: Add a range check @@ -1430,7 +1430,7 @@ case psPETCommandMessage::CMD_FOLLOW : if ( pet != NULL ) { - if (CanPetHereYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 1)) + if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 1)) { // If no target target owner if (!pet->GetTarget()) @@ -1450,7 +1450,7 @@ case psPETCommandMessage::CMD_STAY : if ( pet != NULL ) { - if (CanPetHereYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 1)) + if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 1)) { QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_STAY ); owner->GetCharacterData()->GetSkills()->AddSkillPractice(PSSKILL_EMPATHY, 1); @@ -1591,7 +1591,7 @@ case psPETCommandMessage::CMD_ATTACK : if ( pet != NULL ) { - if ( CanPetHereYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 4)) + if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 4)) { gemActor *lastAttacker = NULL; gemObject * trg = pet->GetTarget(); @@ -1647,7 +1647,7 @@ case psPETCommandMessage::CMD_STOPATTACK : if ( pet != NULL ) { - if ( CanPetHereYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 4)) + if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 4)) { QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_STOPATTACK ); owner->GetCharacterData()->GetSkills()->AddSkillPractice(PSSKILL_EMPATHY, 1); @@ -1662,7 +1662,7 @@ case psPETCommandMessage::CMD_ASSIST : if ( pet != NULL ) { - if ( CanPetHereYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 3) ) + if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 3) ) { QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_ASSIST ); } @@ -1676,7 +1676,7 @@ case psPETCommandMessage::CMD_GUARD : if ( pet != NULL ) { - if ( CanPetHereYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 2)) + if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 2)) { QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_GUARD ); } @@ -1691,7 +1691,7 @@ if ( pet != NULL ) { - if ( !CanPetHereYou(me->clientnum, owner, pet, typeStr) ) + if (!CanPetHearYou(me->clientnum, owner, pet, typeStr)) { return; } @@ -1794,7 +1794,7 @@ case psPETCommandMessage::CMD_TARGET : if ( pet != NULL ) { - if ( CanPetHereYou(me->clientnum, owner, pet, typeStr) ) + if (CanPetHearYou(me->clientnum, owner, pet, typeStr)) { if ( words.GetCount() == 0 ) { Modified: trunk/src/server/npcmanager.h =================================================================== --- trunk/src/server/npcmanager.h 2008-09-16 18:32:55 UTC (rev 2163) +++ trunk/src/server/npcmanager.h 2008-09-17 07:45:30 UTC (rev 2164) @@ -158,7 +158,7 @@ void SendRaces(Client *client); /// Check if a pet is within range to react to commands - bool CanPetHereYou(int clientnum, Client * owner, gemNPC * pet, const char * type); + bool CanPetHearYou(int clientnum, Client *owner, gemNPC *pet, const char *type); /// Check if your pet will reacto to your command based on skills bool WillPetReact(int clientnum, Client * owner, gemNPC * pet, const char * type, int level); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-01 23:41:36
|
Revision: 2340 http://planeshift.svn.sourceforge.net/planeshift/?rev=2340&view=rev Author: Vengeance2001 Date: 2008-11-01 23:41:32 +0000 (Sat, 01 Nov 2008) Log Message: ----------- Committing patch by Lanarel to fix bug #2425, where the server sometimes crashes when inspecting other people's items in guarded containers. Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/client.cpp trunk/src/server/client.h trunk/src/server/slotmanager.cpp Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2008-11-01 22:31:48 UTC (rev 2339) +++ trunk/src/server/bulkobjects/psitem.cpp 2008-11-01 23:41:32 UTC (rev 2340) @@ -2402,7 +2402,7 @@ return; } - int stackCount = client->CanTake(child) ? child->GetStackCount() : -1; + int stackCount = client->CanTake(container,child) ? child->GetStackCount() : -1; outgoing.AddContents(child->GetName(), child->GetImageName(), child->GetPurifyStatus(), child->GetLocInParent(), stackCount); } Modified: trunk/src/server/client.cpp =================================================================== --- trunk/src/server/client.cpp 2008-11-01 22:31:48 UTC (rev 2339) +++ trunk/src/server/client.cpp 2008-11-01 23:41:32 UTC (rev 2340) @@ -480,29 +480,26 @@ return true; } -bool Client::CanTake(psItem* item) +bool Client::CanTake(gemContainer* gemcontainer, psItem* item) { - if (!item) + if (!item || !gemcontainer) return false; + psItem *containeritem = gemcontainer->GetItem(); + CS_ASSERT(containeritem); + // Check for npc-owned or locked container - if (item->GetContainerID() && GetSecurityLevel() < GM_LEVEL_2) + if (GetSecurityLevel() < GM_LEVEL_2) { - gemObject *gemcont = GEMSupervisor::GetSingleton().FindObject(EID(item->GetContainerID())); - if (gemcont) + if (containeritem->GetIsNpcOwned()) { - psItem *cont = gemcont->GetItem(); - CS_ASSERT(cont); - if (cont->GetIsNpcOwned()) - { - return false; - } - if (cont->GetIsLocked()) - { - psserver->SendSystemError(GetClientNum(), "You cannot take an item from a locked container!"); - return false; - } + return false; } + if (containeritem->GetIsLocked()) + { + psserver->SendSystemError(GetClientNum(), "You cannot take an item from a locked container!"); + return false; + } } // Allow if the item is pickupable and either: public, guarded by the character, or the guarding character is offline @@ -510,20 +507,18 @@ gemActor* guardingActor = GEMSupervisor::GetSingleton().FindPlayerEntity(guard); if ((!guard.IsValid() || guard == GetCharacterData()->GetPID() || !guardingActor) - && !item->GetIsNpcOwned() && !item->GetIsNoPickup()) + && !item->GetIsNpcOwned() && !item->GetIsNoPickup()) { return true; } if (guard.IsValid() && guardingActor) { - gemItem* gemitem = item->GetGemObject(); - if (item->GetContainerID()) - gemitem = GEMSupervisor::GetSingleton().FindItemEntity(item->GetContainerID()); - if (gemitem && - guardingActor->RangeTo(gemitem) > 5) + if (guardingActor->RangeTo(gemcontainer) > 5) + { return true; - } + } + } // Allow GM2s to take any PC-owned stuff if (GetSecurityLevel() >= GM_LEVEL_2 && !item->GetIsNpcOwned() && !item->GetIsNoPickup()) Modified: trunk/src/server/client.h =================================================================== --- trunk/src/server/client.h 2008-11-01 22:31:48 UTC (rev 2339) +++ trunk/src/server/client.h 2008-11-01 23:41:32 UTC (rev 2340) @@ -42,6 +42,7 @@ class psCharacter; class psItem; class gemObject; +class gemContainer; class gemActor; class gemNPC; class psPath; @@ -198,7 +199,7 @@ /** Checks if this client is allowed to pick up an item, or take it * out of the container. */ - bool CanTake(psItem* item); + bool CanTake(gemContainer* gemcontainer, psItem* item); /** Returns the type of the target, from TARGET_TYPES. * Modified: trunk/src/server/slotmanager.cpp =================================================================== --- trunk/src/server/slotmanager.cpp 2008-11-01 22:31:48 UTC (rev 2339) +++ trunk/src/server/slotmanager.cpp 2008-11-01 23:41:32 UTC (rev 2340) @@ -168,7 +168,7 @@ return; } - if (!fromClient->CanTake(itemProposed)) + if (!fromClient->CanTake(worldContainer,itemProposed)) { Error2("Client %u tried to take item it doesn't own.", fromClient->GetClientNum()); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-07 04:59:42
|
Revision: 2367 http://planeshift.svn.sourceforge.net/planeshift/?rev=2367&view=rev Author: Vengeance2001 Date: 2008-11-07 04:59:39 +0000 (Fri, 07 Nov 2008) Log Message: ----------- Added column for voiced audio support in npc dialog. Loaded and cached but not used yet. DB version bump. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/database/mysql/npc_responses.sql trunk/src/server/database/mysql/server_options.sql trunk/src/server/database/mysql/upgrade_schema.sql Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-06 23:04:53 UTC (rev 2366) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-07 04:59:39 UTC (rev 2367) @@ -1117,6 +1117,12 @@ it = row["pronoun_it"]; them = row["pronoun_them"]; + + voiceAudioPath = row["audio_path"]; + if (voiceAudioPath.Length() > 0) + printf("Got audio file '%s' on response %d.\n", voiceAudioPath.GetDataSafe(), id); + + type = NpcResponse::VALID_RESPONSE; // if a quest_id is specified in this response, Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-06 23:04:53 UTC (rev 2366) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-07 04:59:39 UTC (rev 2367) @@ -293,14 +293,15 @@ public: int id; /// xref from trigger response csString response[MAX_RESP]; /// possible alternative answers for this response - csString him,her,it,them; /// record antecedents for next question pronouns + csString him,her,it,them; /// record antecedents for next question pronouns csString triggerText; /// This is the text that triggered the response. - int type; /// record the type of response + csString voiceAudioPath; /// Optional vfs path to audio file to stream on demand to the client + int type; /// record the type of response + psQuest * quest; /// Quest that this respons is part of + int active_quest; /// which one should be run. this is actually set by check quest avail op + csTicks timeDelay; /// This tracks the current time delay for chat msgs in the responses, so a single script can have a sequence of things that take a while csPDelArray<ResponseOperation> script; /// list of ops in script to execute when triggered - psQuest * quest; /// Quest that this respons is part of csRef<psQuestPrereqOp> prerequisite; /// prerequisite for this Response to be available - int active_quest; /// which one should be run. this is actually set by check quest avail op - csTicks timeDelay; /// This tracks the current time delay for chat msgs in the responses, so a single script can have a sequence of things that take a while enum { Modified: trunk/src/server/database/mysql/npc_responses.sql =================================================================== --- trunk/src/server/database/mysql/npc_responses.sql 2008-11-06 23:04:53 UTC (rev 2366) +++ trunk/src/server/database/mysql/npc_responses.sql 2008-11-07 04:59:39 UTC (rev 2367) @@ -1,83 +1,130 @@ -# MySQL-Front 3.2 (Build 13.0) +# HeidiSQL Dump +# +# -------------------------------------------------------- +# Host: 127.0.0.1 +# Database: planeshift +# Server version: 5.0.67-community-nt +# Server OS: Win32 +# Target-Compatibility: Standard ANSI SQL +# HeidiSQL version: 3.2 Revision: 1129 +# -------------------------------------------------------- -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES */; +/*!40100 SET CHARACTER SET latin1;*/ +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI';*/ +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;*/ -/*!40101 SET NAMES latin1 */; -/*!40103 SET TIME_ZONE='SYSTEM' */; -# Host: localhost Database: planeshift -# ------------------------------------------------------ -# Server version 5.0.19-nt +# +# Database structure for database 'planeshift' +# +CREATE DATABASE /*!32312 IF NOT EXISTS*/ "planeshift" /*!40100 DEFAULT CHARACTER SET utf8 */; + +USE "planeshift"; + + # -# Table structure for table npc_responses +# Table structure for table 'npc_responses' # -CREATE TABLE `npc_responses` ( - `id` int(10) unsigned NOT NULL auto_increment, - `trigger_id` int(10) unsigned default '0', - `response1` text, - `response2` text, - `response3` text, - `response4` text, - `response5` text, - `pronoun_him` varchar(30) default '', - `pronoun_her` varchar(30) default '', - `pronoun_it` varchar(30) default '', - `pronoun_them` varchar(30) default '', - `script` blob, - `prerequisite` blob, - `quest_id` int(10) unsigned default NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB; +CREATE TABLE /*!32312 IF NOT EXISTS*/ "npc_responses" ( + "id" int(10) unsigned NOT NULL auto_increment, + "trigger_id" int(10) unsigned default '0', + "response1" text, + "response2" text, + "response3" text, + "response4" text, + "response5" text, + "pronoun_him" varchar(30) default '', + "pronoun_her" varchar(30) default '', + "pronoun_it" varchar(30) default '', + "pronoun_them" varchar(30) default '', + "script" blob, + "prerequisite" blob, + "quest_id" int(10) unsigned default NULL, + "audio_path" varchar(100) default NULL COMMENT 'This holds an optional VFS path to a speech file to be sent to the client and played on demand.', + PRIMARY KEY ("id") +) AUTO_INCREMENT=45 /*!40100 DEFAULT CHARSET=utf8*/; + + # -# Dumping data for table npc_responses +# Dumping data for table 'npc_responses' # -INSERT INTO `npc_responses` VALUES (1,1,'Hello $playername.','Hello friend.','Hi. What can I do for you?','Go away!','Whatever dude...','0','0','0','0','<response><respondpublic/><action anim=\"greet\"/></response>','',0); -INSERT INTO `npc_responses` VALUES (2,2,'I\'m fine and you?','Terrible... what a day...','Comme ci, comme ca... et toi?','Va bene, e tu?','','0','0','0','0','','',0); -INSERT INTO `npc_responses` VALUES (3,3,'Later.','May the Crystal shine brightly on you.','Goodbye $playername.','','','0','0','0','0','','',0); -INSERT INTO `npc_responses` VALUES (11,4,'I\'m just a simple peasant.','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (12,5,'I\'m the great creator of many weapons.','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (15,6,'I will train you','','','','','','','','','<response><respond/><train skill=\"Sword\"/></response>','<pre><faction name=\"orcs\" value=\"0\"/></pre>',0); -INSERT INTO `npc_responses` VALUES (16,6,'No way I train you','','','','','','','','','','<pre><not><faction name=\"orcs\" value=\"0\"/></not></pre>',0); -INSERT INTO `npc_responses` VALUES (17,9,'Thanks, friend.','What a lovely gesture.','','','','','','','','<response><respond/><action anim=\"greet\"/></response>','',0); -INSERT INTO `npc_responses` VALUES (18,10,'Umm, didn\'t you just say that?','I feel like I\'m repeating myself here','Don\'t be annoying.','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (19,11,'Oh weird, it\'s like deja vu!','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (20,12,'I have already responded to that and I will not do so again, $sir!','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (21,13,'I\'m not giving you anything. What have you given me?','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (22,14,'Ok, I will give you some exp.','','','','','','','','','<response><respond/><run scr=\"give_exp\" param0=\"200\" /></response>','',0); -INSERT INTO `npc_responses` VALUES (23,15,'Hi $sir!, I will say thank you for 11 trias.','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (24,16,'You are speaking strangely, please rephrase.','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (25,17,'this is my error response.','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (26,19,'I QuestMaster1 test Quest sub step control[Type \'step2\', verify error response. Type \'step1\', verify quest started and follow instructions], and Quest lockouts[Type \'quest2\', veriyf quest started and follow instructions.]','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (27,20,'I QuestMaster2 test Quest prerequisites[Type \'quest2\', verify error response. Type \'quest1\', verify quest assigned and follow instructions]','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (28,21,'I have the following fruits: apple, orange','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (29,22,'You asked for apple','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (30,23,'You asked for orange','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (31,24,'A greeting from DictMaster2','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (32,25,'I have the following fruits: pear, plum','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (33,26,'You asked for pear','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (34,27,'You asked for plum','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (35,29,'How rude! You asked for about me, without saying hello.','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (36,28,'You asked for about me','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (37,20,'Welcome to npcroom, $playername. Do you need help?',NULL,NULL,NULL,NULL,'','','','',NULL,'',0); -INSERT INTO `npc_responses` VALUES (38,31,'Be thee friend or foe, stranger?',NULL,NULL,NULL,NULL,'','','','',NULL,'',0); -INSERT INTO `npc_responses` VALUES (39,32,'Hark! Who goes there?',NULL,NULL,NULL,NULL,'','','','',NULL,'',0); -INSERT INTO `npc_responses` VALUES (40,33,'Ok, I will winch send the \"winch up\" command to the beast.','','','','','','','','','<response><respond/><npccmd cmd=\"winch_up\" /></response>','',0); -INSERT INTO `npc_responses` VALUES (41,34,'Ok, I will winch send the \"winch down\" command to the beast.','','','','','','','','','<response><respond/><npccmd cmd=\"winch_down\" /></response>','',0); -INSERT INTO `npc_responses` VALUES (42,8,'I will train you','','','','','','','','','<response><respond/><train skill=\"Sword\"/></response>','',0); -INSERT INTO `npc_responses` VALUES (43,18,'this is my error response.','','','','','','','','','','',0); -INSERT INTO `npc_responses` VALUES (44,35,'You just asked a question that I do not know the answer to.','','','','','','','','','','',0); -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +LOCK TABLES "npc_responses" WRITE; +/*!40000 ALTER TABLE "npc_responses" DISABLE KEYS;*/ +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('1','1','Hello $playername.','Hello friend.','Hi. What can I do for you?','Go away!','Whatever dude...','0','0','0','0','<response><respondpublic/><action anim="greet"/></response>','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('2','2','I''m fine and you?','Terrible... what a day...','Comme ci, comme ca... et toi?','Va bene, e tu?','','0','0','0','0','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('3','3','Later.','May the Crystal shine brightly on you.','Goodbye $playername.','','','0','0','0','0','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('11','4','I''m just a simple peasant.','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('12','5','I''m the great creator of many weapons.','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('15','6','I will train you','','','','','','','','','<response><respond/><train skill="Sword"/></response>','<pre><faction name="orcs" value="0"/></pre>','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('16','6','No way I train you','','','','','','','','','','<pre><not><faction name="orcs" value="0"/></not></pre>','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('17','9','Thanks, friend.','What a lovely gesture.','','','','','','','','<response><respond/><action anim="greet"/></response>','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('18','10','Umm, didn''t you just say that?','I feel like I''m repeating myself here','Don''t be annoying.','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('19','11','Oh weird, it''s like deja vu!','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('20','12','I have already responded to that and I will not do so again, $sir!','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('21','13','I''m not giving you anything. What have you given me?','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('22','14','Ok, I will give you some exp.','','','','','','','','','<response><respond/><run scr="give_exp" param0="200" /></response>','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('23','15','Hi $sir!, I will say thank you for 11 trias.','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('24','16','You are speaking strangely, please rephrase.','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('25','17','this is my error response.','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('26','19','I QuestMaster1 test Quest sub step control[Type ''step2'', verify error response. Type ''step1'', verify quest started and follow instructions], and Quest lockouts[Type ''quest2'', veriyf quest started and follow instructions.]','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('27','20','I QuestMaster2 test Quest prerequisites[Type ''quest2'', verify error response. Type ''quest1'', verify quest assigned and follow instructions]','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('28','21','I have the following fruits: apple, orange','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('29','22','You asked for apple','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('30','23','You asked for orange','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('31','24','A greeting from DictMaster2','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('32','25','I have the following fruits: pear, plum','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('33','26','You asked for pear','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('34','27','You asked for plum','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('35','29','How rude! You asked for about me, without saying hello.','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('36','28','You asked for about me','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('37','20','Welcome to npcroom, $playername. Do you need help?',NULL,NULL,NULL,NULL,'','','','',NULL,'','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('38','31','Be thee friend or foe, stranger?',NULL,NULL,NULL,NULL,'','','','','','','0','/data/voice/merchant/betheefriend.spx'); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('39','32','Hark! Who goes there?',NULL,NULL,NULL,NULL,'','','','','','','0','/data/voice/merchant/hark.spx'); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('40','33','Ok, I will winch send the "winch up" command to the beast.','','','','','','','','','<response><respond/><npccmd cmd="winch_up" /></response>','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('41','34','Ok, I will winch send the "winch down" command to the beast.','','','','','','','','','<response><respond/><npccmd cmd="winch_down" /></response>','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('42','8','I will train you','','','','','','','','','<response><respond/><train skill="Sword"/></response>','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('43','18','this is my error response.','','','','','','','','','','','0',NULL); +REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES + ('44','35','You just asked a question that I do not know the answer to.','','','','','','','','','','','0',NULL); +/*!40000 ALTER TABLE "npc_responses" ENABLE KEYS;*/ +UNLOCK TABLES; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE;*/ +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;*/ Modified: trunk/src/server/database/mysql/server_options.sql =================================================================== --- trunk/src/server/database/mysql/server_options.sql 2008-11-06 23:04:53 UTC (rev 2366) +++ trunk/src/server/database/mysql/server_options.sql 2008-11-07 04:59:39 UTC (rev 2367) @@ -1,41 +1,55 @@ -# MySQL-Front 3.2 (Build 13.0) +# HeidiSQL Dump +# +# -------------------------------------------------------- +# Host: 127.0.0.1 +# Database: planeshift +# Server version: 5.0.67-community-nt +# Server OS: Win32 +# Target-Compatibility: Standard ANSI SQL +# HeidiSQL version: 3.2 Revision: 1129 +# -------------------------------------------------------- -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES */; +/*!40100 SET CHARACTER SET latin1;*/ +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI';*/ +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;*/ -/*!40101 SET NAMES latin1 */; -/*!40103 SET TIME_ZONE='SYSTEM' */; -# Host: localhost Database: planeshift -# ------------------------------------------------------ -# Server version 5.0.19-nt +# +# Database structure for database 'planeshift' +# +CREATE DATABASE /*!32312 IF NOT EXISTS*/ "planeshift" /*!40100 DEFAULT CHARACTER SET utf8 */; + +USE "planeshift"; + + # -# Table structure for table server_options +# Table structure for table 'server_options' # -CREATE TABLE `server_options` ( - `option_name` varchar(50) NOT NULL default '', - `option_value` varchar(90) NOT NULL default '', - PRIMARY KEY (`option_name`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; +CREATE TABLE /*!32312 IF NOT EXISTS*/ "server_options" ( + "option_name" varchar(50) NOT NULL default '', + "option_value" varchar(90) NOT NULL default '', + PRIMARY KEY ("option_name") +) /*!40100 DEFAULT CHARSET=latin1*/; + + # -# Dumping data for table server_options +# Dumping data for table 'server_options' # -INSERT INTO `server_options` VALUES ('db_version','1202'); -INSERT INTO `server_options` VALUES ('game_time','15:00'); -INSERT INTO `server_options` VALUES ('game_date','100-1-1'); -INSERT INTO `server_options` VALUES ('standard_motd','This is the message of the day from server_options table.'); - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +LOCK TABLES "server_options" WRITE; +/*!40000 ALTER TABLE "server_options" DISABLE KEYS;*/ +REPLACE INTO "server_options" ("option_name", "option_value") VALUES + ('db_version','1203'); +REPLACE INTO "server_options" ("option_name", "option_value") VALUES + ('game_date','100-1-1'); +REPLACE INTO "server_options" ("option_name", "option_value") VALUES + ('game_time','15:00'); +REPLACE INTO "server_options" ("option_name", "option_value") VALUES + ('standard_motd','This is the message of the day from server_options table.'); +/*!40000 ALTER TABLE "server_options" ENABLE KEYS;*/ +UNLOCK TABLES; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE;*/ +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;*/ Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2008-11-06 23:04:53 UTC (rev 2366) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2008-11-07 04:59:39 UTC (rev 2367) @@ -1026,6 +1026,8 @@ ALTER TABLE `gameboards` ADD COLUMN `gameboardOptions` varchar(100) NOT NULL DEFAULT 'White,Checked' AFTER `numPlayers`; UPDATE `server_options` SET `option_value`='1202' WHERE `option_name`='db_version'; +#### 1203 - Keith Fulton - Voiced NPC Dialog Support +ALTER TABLE `npc_responses` ADD `audio_path` VARCHAR(100) NULL COMMENT 'This holds an optional VFS path to a speech file to be sent to the client and played on demand.' # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-07 06:04:20
|
Revision: 2370 http://planeshift.svn.sourceforge.net/planeshift/?rev=2370&view=rev Author: Vengeance2001 Date: 2008-11-07 06:04:17 +0000 (Fri, 07 Nov 2008) Log Message: ----------- Removed incorrect and incomplete error response syntax in quest scripts, which was using parentheses after the response to indicate something which didn't work. Now parentheses after the response delimit the VFS path to the voiced audio file for the response. This is the quest_script way of assigning the new audio_path column in the npc_responses table. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/questmanager.cpp trunk/src/server/questmanager.h Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-07 05:02:49 UTC (rev 2369) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-07 06:04:17 UTC (rev 2370) @@ -607,7 +607,8 @@ const char *pronoun_them, const char *npc_name, int &new_id, - psQuest * quest) + psQuest * quest, + const char *audio_path) { NpcResponse *newresp = new NpcResponse; @@ -686,6 +687,7 @@ newresp->her = pronoun_her; newresp->it = pronoun_it; newresp->them = pronoun_them; + newresp->voiceAudioPath = audio_path; newresp->type = NpcResponse::VALID_RESPONSE; Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-07 05:02:49 UTC (rev 2369) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-07 06:04:17 UTC (rev 2370) @@ -130,7 +130,8 @@ const char *pronoun_them, const char *npc_name, int &new_id, - psQuest * quest); + psQuest * quest, + const char *audio_path); NpcTrigger *AddTrigger(const char *k_area, const char *mytrigger, Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2008-11-07 05:02:49 UTC (rev 2369) +++ trunk/src/server/questmanager.cpp 2008-11-07 06:04:17 UTC (rev 2370) @@ -515,7 +515,7 @@ size_t which_trigger=0; int step_count=1; // Main quest is step 1 csString current_npc; - csString response_text,error_text; + csString response_text,file_path; NpcResponse *last_response=NULL,*error_response=NULL; bool quest_assigned_already = false; csString response_requireop; // Accumulate prerequisites for next response @@ -573,7 +573,7 @@ current_npc = npc_name; next_to_last_response_id = last_response_id = -1; // When you switch NPCs, the prior responses must be reset also. } - if (!GetResponseText(block,response_text,error_text,him,her,it,them)) + if (!GetResponseText(block,response_text,file_path,him,her,it,them)) { Error2("Could not get response text out of <%s>! Failing.",block.GetData() ); lastError.Format("Could not get response text out of <%s>! Failing.",block.GetData() ); @@ -586,15 +586,14 @@ return line_number; } - Debug4( LOG_QUESTS, 0,"NPC %s responds with '%s', or the error " - "response '%s'", current_npc.GetData(), - response_text.GetData(), error_text.GetData() ); + Debug4( LOG_QUESTS, 0,"NPC %s responds with '%s', with the voice file '%s'", current_npc.GetData(), + response_text.GetData(), file_path.GetDataSafe() ); // Now add this response to the npc dialog dict if (which_trigger == 0) // new sequence next_to_last_response_id = last_response_id; - last_response = AddResponse(current_npc,response_text,last_response_id,quest,him,her,it,them); + last_response = AddResponse(current_npc,response_text,last_response_id,quest,him,her,it,them,file_path); if (last_response) { bool ret = AddTrigger(current_npc,pending_triggers[which_trigger++],next_to_last_response_id,last_response_id, quest, ""); @@ -617,37 +616,6 @@ { return line_number; } - - // Add response for error condition. - if (!error_text.IsEmpty()) - { - int error_response_id = 0; - error_response = AddResponse(current_npc,error_text,error_response_id,quest,him,her,it,them); - if (error_response) - { - error_response->quest = NULL; // Force quest to NULL, to prevent available checks only prerequisite tests. - bool ret = AddTrigger(current_npc,pending_triggers[(which_trigger-1)],next_to_last_response_id,error_response_id, quest, " error"); - if (!ret) - { - lastError.Format("Trigger could not be added on line %d", line_number); - return line_number; - } - - if (mainQuest) // Prerequisites only apply to quest scripts, not KA scripts. - { - if (!PrependPrerequisites(substep_requireop, response_requireop, quest_assigned_already,error_response,mainQuest)) - { - lastError.Format("PrependPrerequistes failed on %d", line_number); - return line_number; - } - } - } - else - { - return line_number; - } - } - } else if (!strncasecmp(block,"Player ",7)) // player does something { @@ -899,7 +867,7 @@ } -bool QuestManager::GetResponseText(csString& block,csString& response,csString& error, +bool QuestManager::GetResponseText(csString& block,csString& response,csString& file_path, csString& him, csString& her, csString& it, csString& them) { size_t start; @@ -912,7 +880,7 @@ start++; // skip colon block.SubString(response,start,block.Length()-start); - CutOutParenthesis(response,error,'(',')'); + CutOutParenthesis(response,file_path,'(',')'); CutOutParenthesis(response,pron,'{','}'); him.Clear(); her.Clear(); it.Clear(); them.Clear(); if (pron.Length()) @@ -941,11 +909,12 @@ return true; } -NpcResponse *QuestManager::AddResponse(csString& current_npc,const char *response_text,int& last_response_id, psQuest * quest, csString him, csString her, csString it, csString them) +NpcResponse *QuestManager::AddResponse(csString& current_npc,const char *response_text,int& last_response_id, psQuest * quest, + csString& him, csString& her, csString& it, csString& them, csString& file_path) { last_response_id = 0; // let AddResponse autoset this if set to 0 Debug2( LOG_QUESTS, 0,"Adding response %s to dictionary...", response_text ); - return dict->AddResponse(response_text,him,her,it,them,current_npc,last_response_id,quest); + return dict->AddResponse(response_text,him,her,it,them,current_npc,last_response_id,quest,file_path); } bool QuestManager::AddTrigger(csString& current_npc,const char *trigger,int prior_response_id,int trig_response, psQuest * quest, const psString& postfix) Modified: trunk/src/server/questmanager.h =================================================================== --- trunk/src/server/questmanager.h 2008-11-07 05:02:49 UTC (rev 2369) +++ trunk/src/server/questmanager.h 2008-11-07 06:04:17 UTC (rev 2370) @@ -69,7 +69,7 @@ int ParseQuestScript(int id,const char *script); void CutOutParenthesis(csString &response, csString &within,char start_char,char end_char); - bool GetResponseText(csString& block,csString& response,csString& error, + bool GetResponseText(csString& block,csString& response,csString& file_path, csString& him, csString& her, csString& it, csString& them); bool BuildTriggerList(csString& block,csStringArray& list); int GetNPCFromBlock(WordArray words,csString& current_npc); @@ -78,7 +78,7 @@ NpcResponse *AddResponse(csString& current_npc,const char *response_text, int& last_response_id, psQuest * quest, - csString him, csString her, csString it, csString them); + csString& him, csString& her, csString& it, csString& them, csString& file_path); bool AddTrigger(csString& current_npc,const char *trigger, int prior_response_id,int trig_response, psQuest* quest, const psString& postfix); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-09 05:46:29
|
Revision: 2395 http://planeshift.svn.sourceforge.net/planeshift/?rev=2395&view=rev Author: Vengeance2001 Date: 2008-11-09 05:46:25 +0000 (Sun, 09 Nov 2008) Log Message: ----------- Now the top 100 most recently used audio files will be cached by the server instead of loading from scratch every time. 100 is just a guess. We'll have to see what size this cache should really be. Modified Paths: -------------- trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2008-11-09 03:07:35 UTC (rev 2394) +++ trunk/src/server/chatmanager.cpp 2008-11-09 05:46:25 UTC (rev 2395) @@ -432,26 +432,59 @@ if (!voiceFile || voiceFile[0]==0) return; - printf("Sending audio file '%s'.\n", voiceFile); + csRef<iDataBuffer> buffer; + csString timestamp; - // need to cache this probably, later - csRef<iDataBuffer> buffer = psserver->vfs->ReadFile(voiceFile); - csFileTime oTime; - psserver->vfs->GetFileTime(voiceFile,oTime); + printf("Checking cache for audio file '%s'.\n", voiceFile); - csString timestamp; - timestamp.Format("%d/%d/%d %d:%d:%d ", - oTime.mon, oTime.day, oTime.year, - oTime.hour, oTime.min, oTime.sec); + // Check cache for file + csRef<iDataBuffer> cache; + for (size_t i=0; i < audioFileCache.GetSize(); i++) + { + printf("Cached item %d: '%s'\n", i, audioFileCache[i]->key.GetDataSafe() ); + if (audioFileCache[i]->key == voiceFile) // found + { + printf("Found in cache. Moving to front.\n"); + + buffer = audioFileCache[i]->data; + timestamp = audioFileCache[i]->alternate; + // now make a new copy of the entry and move up to front of array + audioFileCache.DeleteIndex(i); + CachedData *n = new CachedData(buffer,voiceFile,timestamp); + audioFileCache.Insert(0,n); + break; + } + } + if (!buffer.IsValid()) { - Error2("Audio file '%s' not found.\n", voiceFile); - return; + printf("File not found in cache. Loading from disk.\n"); + + buffer = psserver->vfs->ReadFile(voiceFile); + if (!buffer.IsValid()) + { + Error2("Audio file '%s' not found.\n", voiceFile); + return; + } + csFileTime oTime; + psserver->vfs->GetFileTime(voiceFile,oTime); + + timestamp.Format("%d/%d/%d %d:%d:%d ", + oTime.mon, oTime.day, oTime.year, + oTime.hour, oTime.min, oTime.sec); + + + timestamp.Append(voiceFile); + + // Add newly read file to the MRU cache + CachedData *n = new CachedData(buffer,voiceFile,timestamp); + audioFileCache.Insert(0,n); + // We added one to the front of our list, so keep the list at no more than 100 items. + if (audioFileCache.GetSize() > 100) + audioFileCache.Pop(); } - timestamp.Append(voiceFile); - psCachedFileMessage msg(client->GetClientNum(), timestamp, buffer); msg.SendMessage(); } Modified: trunk/src/server/chatmanager.h =================================================================== --- trunk/src/server/chatmanager.h 2008-11-09 03:07:35 UTC (rev 2394) +++ trunk/src/server/chatmanager.h 2008-11-09 05:46:25 UTC (rev 2395) @@ -52,6 +52,20 @@ #define CHAT_SAY_RANGE 10 +struct CachedData +{ + csString key; + csString alternate; + csRef<iDataBuffer> data; + + CachedData(iDataBuffer *buffer, const char *n, const char *alt) + { + data = buffer; + key = n; + alternate = alt; + } +}; + class ChatManager : public MessageManager { public: @@ -67,6 +81,8 @@ void SendGuild(const csString & sender, psGuildInfo * guild, psChatMessage& msg); protected: + csPDelArray<CachedData> audioFileCache; + void SendTell(psChatMessage& msg, const char* who,Client *from,Client *target); void SendSay(uint32_t clientNum, gemActor* actor, psChatMessage& msg, const char* who); void SendGuild(Client * client, psChatMessage& msg); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-20 18:54:21
|
Revision: 2457 http://planeshift.svn.sourceforge.net/planeshift/?rev=2457&view=rev Author: Vengeance2001 Date: 2008-11-20 18:54:17 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Quest prerequisites (at least the basic ones) now work with popup dialog. This makes the popups more accurate and enforces the substeps in the quests correctly now. There are probably lots of special cases not yet handled, so be careful. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/questmanager.cpp Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-20 16:57:00 UTC (rev 2456) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-20 18:54:17 UTC (rev 2457) @@ -799,12 +799,7 @@ NpcDialogMenu *found = FindMenu(name); if (found) // merge with existing { - // We already have a menu, so we just need to append the new dialog onto this one - for (size_t i=0; i<menu->triggers.GetSize(); i++) - { - printf("--->Merging %s into existing menu.\n", menu->triggers[i].formatted.GetDataSafe()); - found->AddTrigger(menu->triggers[i].formatted, menu->triggers[i].trigger); - } + found->Add(menu); delete menu; // delete here if we don't keep it above } else // add a new menu @@ -2380,12 +2375,13 @@ counter = 0; } -void NpcDialogMenu::AddTrigger(const csString &formatted, const csString &trigger) +void NpcDialogMenu::AddTrigger(const csString &formatted, const csString &trigger, psQuestPrereqOp *script) { NpcDialogMenu::DialogTrigger new_trigger; - new_trigger.formatted = formatted; - new_trigger.trigger = trigger; + new_trigger.formatted = formatted; + new_trigger.trigger = trigger; + new_trigger.prerequisite = script; new_trigger.triggerID = counter++; this->triggers.Push( new_trigger ); @@ -2400,7 +2396,7 @@ for (size_t i=0; i < add->triggers.GetSize(); i++) { printf("Adding '%s' to menu.\n", add->triggers[i].formatted.GetData() ); - AddTrigger(add->triggers[i].formatted, add->triggers[i].trigger); + AddTrigger(add->triggers[i].formatted, add->triggers[i].trigger, add->triggers[i].prerequisite); } printf("Added %d triggers to menu.\n", add->triggers.GetSize() ); } @@ -2412,15 +2408,59 @@ psDialogMenuMessage menu; - for( size_t i = 0; i < counter; i++ ) + for (size_t i=0; i < counter; i++ ) { - menu.AddResponse((uint32_t) i, this->triggers[ i ].formatted, - this->triggers[i].trigger, - client->GetName(), client->GetActor()->GetCharacterData()->GetRaceInfo()->GetRace(), - client->GetActor()->GetCharacterData()->GetRaceInfo()->GetHonorific(), - client->GetActor()->GetCharacterData()->GetRaceInfo()->GetPossessive() ); + csString prereq; + + if (triggers[i].prerequisite) + prereq = triggers[i].prerequisite->GetScript(); + + if (!prereq.IsEmpty()) + { + printf("Item %d Prereq : %s\n",i, prereq.GetDataSafe()); + } + else + { + printf("Item %d has no prereqs.\n", i); + } + + if (triggers[i].prerequisite) + { + if (!triggers[i].prerequisite->Check(client->GetCharacterData())) + { + printf("Prereq check failed. Skipping.\n"); + continue; + } + } + + menu.AddResponse((uint32_t) i, + triggers[ i ].formatted, + triggers[i].trigger, + client->GetName(), client->GetCharacterData()->GetRaceInfo()->GetRace(), + client->GetCharacterData()->GetRaceInfo()->GetHonorific(), + client->GetCharacterData()->GetRaceInfo()->GetPossessive() ); } menu.BuildMsg(client->GetClientNum()); menu.SendMessage(); } + +void NpcDialogMenu::SetPrerequisiteScript(psQuestPrereqOp *script) +{ + csString prereq; + + if (script) + prereq = script->GetScript(); + + if (!prereq.IsEmpty()) + { + printf("Setting menu %p to have trigger prereq : %s\n", this, prereq.GetDataSafe()); + } + + // Each item must have its own prequisite script so they can be different when menus are merged + // even though they appear to all be set the same here. + for (size_t i=0; i < counter; i++ ) + { + triggers[i].prerequisite = script; + } +} Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-20 16:57:00 UTC (rev 2456) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-20 18:54:17 UTC (rev 2457) @@ -306,6 +306,7 @@ unsigned int triggerID; csString formatted; csString trigger; + csRef<psQuestPrereqOp> prerequisite; }; unsigned int counter; // ID counter @@ -316,9 +317,10 @@ NpcDialogMenu(); - void AddTrigger( const csString &formatted, const csString &trigger ); + void AddTrigger( const csString &formatted, const csString &trigger, psQuestPrereqOp *script=NULL ); void Add( NpcDialogMenu *add); void ShowMenu( Client *client ); + void SetPrerequisiteScript(psQuestPrereqOp *script); }; /** @@ -367,6 +369,9 @@ bool ExecuteScript(Client *client, gemNPC* target); csString GetResponseScript(); + // This is used so that the popup menu and the subsequent response can share the same filtering criteria + psQuestPrereqOp *GetPrerequisiteScript() { return prerequisite; } + /** * Pars and append the xml based prerequisite script to the * prerequisite for this Response. Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2008-11-20 16:57:00 UTC (rev 2456) +++ trunk/src/server/questmanager.cpp 2008-11-20 18:54:17 UTC (rev 2457) @@ -524,6 +524,7 @@ psQuest *quest = mainQuest; // Substep is main step until substep is defined. int line_number = 0; NpcDialogMenu *pending_menu = NULL; + NpcDialogMenu *last_menu = NULL; if (!mainQuest && quest_id > 0) { @@ -574,9 +575,14 @@ } if (last_response) // popup is part of a dialog chain - last_response->menu = menu; + { + last_response->menu = menu; // attach the menu to the prior response for easy access in chains + last_menu = menu; // save so we can add prerequisites later + } else - pending_menu = menu; // save for when we know the npc + { + pending_menu = menu; // save for when we know the npc. cannot attach to anything yet. + } } else if (strchr(block,':')) // text response { @@ -585,22 +591,22 @@ if (current_npc.Find(npc_name) == 0) // if npc_name is the beginning of the current npc name, then it is a repeat { // Need to add this trigger menu to the generic menu for this npc if same npc follows a "..." - if (last_response_id == -1 && pending_menu) - { - dict->AddMenu(current_npc, pending_menu); - pending_menu = NULL; - } +// if (last_response_id == -1 && pending_menu) +// { +// dict->AddMenu(current_npc, pending_menu); +// pending_menu = NULL; +// } } else // switch NPCs here { current_npc = npc_name; next_to_last_response_id = last_response_id = -1; // When you switch NPCs, the prior responses must be reset also. - if (pending_menu) - { - dict->AddMenu(current_npc, pending_menu); - pending_menu = NULL; - } +// if (pending_menu) +// { +// dict->AddMenu(current_npc, pending_menu); +// pending_menu = NULL; +// } } if (!GetResponseText(block,response_text,file_path,him,her,it,them)) { @@ -640,6 +646,18 @@ return line_number; } } + if (pending_menu) + { + // Now go back to the previous menu + pending_menu->SetPrerequisiteScript( last_response->GetPrerequisiteScript() ); + dict->AddMenu(current_npc, pending_menu); + pending_menu = NULL; + } + else if (last_menu) + { + last_menu->SetPrerequisiteScript( last_response->GetPrerequisiteScript() ); + last_menu = NULL; + } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-11-22 16:10:29
|
Revision: 2469 http://planeshift.svn.sourceforge.net/planeshift/?rev=2469&view=rev Author: mgist Date: 2008-11-22 16:10:24 +0000 (Sat, 22 Nov 2008) Log Message: ----------- - Removed some old code. - Fixed unsafe comparison. Modified Paths: -------------- trunk/src/server/cachemanager.cpp trunk/src/server/cachemanager.h trunk/src/server/creationmanager.cpp Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2008-11-22 06:53:15 UTC (rev 2468) +++ trunk/src/server/cachemanager.cpp 2008-11-22 16:10:24 UTC (rev 2469) @@ -191,7 +191,6 @@ // PreCreateCraftMessages(); PreloadCommandGroups(); - PreloadUpdateInfo(); return true; } @@ -2940,26 +2939,6 @@ return GetArmorVSWeaponResistance(armorstr,weaponstr); } -void CacheManager::PreloadUpdateInfo() -{ - csRef<iVFS> vfs = csQueryRegistry<iVFS> (psserver->GetObjectReg()); - CS_ASSERT(vfs != NULL); - - csRef<iDataBuffer> data = vfs->ReadFile("/this/version.dat"); - if (!data) - { - Warning1(LOG_ANY,"Missing /this/version.dat! Cannot send update notifications to clients."); - updateTimeStamp = 0; - return; - } - - // The first 32 characters are the version stamp. - // We want the time stamp after it. - csString tmp(data->GetData()); - tmp.DeleteAt(0,33); - updateTimeStamp = atoi( tmp.GetDataSafe() ); -} - const char *CacheManager::MakeCacheName(const char *prefix, uint32 id) { sprintf(CacheNameBuffer,"%.5s%u",prefix,id); Modified: trunk/src/server/cachemanager.h =================================================================== --- trunk/src/server/cachemanager.h 2008-11-22 06:53:15 UTC (rev 2468) +++ trunk/src/server/cachemanager.h 2008-11-22 16:10:24 UTC (rev 2469) @@ -326,8 +326,6 @@ /// Translation table for Flag strings (from db) into bit codes csArray<psItemStatFlags> ItemStatFlagArray; - uint32_t GetUpdateTimeStamp() { return updateTimeStamp; } - const char *MakeCacheName(const char *prefix, uint32 id); void AddToCache(iCachedObject *obj, const char *name, int max_cache_time_seconds); iCachedObject *RemoveFromCache(const char *name); @@ -378,7 +376,6 @@ bool PreloadMovement(); bool PreloadStances(); void PreloadCommandGroups(); - void PreloadUpdateInfo(); /// Cache in the crafting messages. bool PreloadCraftMessages(); @@ -462,8 +459,6 @@ csPDelArray<psMovement> movements; csPDelArray<psCharacterLimitation> limits; /// All the limitations based on scores for characters. psCommandManager* commandManager; - - uint32_t updateTimeStamp; }; Modified: trunk/src/server/creationmanager.cpp =================================================================== --- trunk/src/server/creationmanager.cpp 2008-11-22 06:53:15 UTC (rev 2468) +++ trunk/src/server/creationmanager.cpp 2008-11-22 16:10:24 UTC (rev 2469) @@ -1171,7 +1171,7 @@ query.Format( "Select id from characters where name='%s'", escape.GetData() ); Result result (db->Select( query ) ); //if dbUniqueness is true we will check result.Count() for > 1 else > 0 (like >= 1) - return ! ( result.IsValid() && (result.Count() > dbUniqueness) ); + return ! ( result.IsValid() && (result.Count() > (unsigned long)(dbUniqueness ? 1:0)) ); } bool psCharCreationManager::IsLastNameUnique( const char* lastname ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-23 00:35:24
|
Revision: 2474 http://planeshift.svn.sourceforge.net/planeshift/?rev=2474&view=rev Author: Vengeance2001 Date: 2008-11-23 00:35:23 +0000 (Sun, 23 Nov 2008) Log Message: ----------- Converted two more managers to use the functor style callbacks. Slight refactoring so the callbacks could be standardized. Modified Paths: -------------- trunk/src/server/actionmanager.cpp trunk/src/server/actionmanager.h trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h Modified: trunk/src/server/actionmanager.cpp =================================================================== --- trunk/src/server/actionmanager.cpp 2008-11-23 00:05:08 UTC (rev 2473) +++ trunk/src/server/actionmanager.cpp 2008-11-23 00:35:23 UTC (rev 2474) @@ -118,12 +118,8 @@ { database = db; - //clients = psserver->GetNetManager()->GetConnections(); // Action Messages from client that need handling - psserver->GetEventManager()->Subscribe( this, MSGTYPE_MAPACTION, REQUIRE_READY_CLIENT ); - //// Used to handle proximity triggers - // psserver->GetEventManager()->Subscribe( this, MSGTYPE_DEAD_RECKONING, REQUIRE_READY_CLIENT ); - //PreloadActionLocations(); + psserver->GetEventManager()->Subscribe( this,new NetMessageCallback<ActionManager>(this,&ActionManager::HandleMapAction), MSGTYPE_MAPACTION, REQUIRE_READY_CLIENT ); } @@ -131,62 +127,46 @@ { // Unsubscribe from Messages psserver->GetEventManager()->Unsubscribe( this, MSGTYPE_MAPACTION ); - //psserver->GetEventManager()->Unsubscribe( this, MSGTYPE_DEAD_RECKONING ); + + csHash<psActionLocation *>::GlobalIterator it (actionLocationList.GetIterator ()); + while ( it.HasNext () ) { - csHash<psActionLocation *>::GlobalIterator it (actionLocationList.GetIterator ()); - while ( it.HasNext () ) - { - psActionLocation* actionLocation = it.Next (); - delete actionLocation; - } + psActionLocation* actionLocation = it.Next (); + delete actionLocation; } + database = NULL; } void ActionManager::HandleMessage( MsgEntry *me, Client *client ) { - switch ( me->GetType() ) - { - case MSGTYPE_MAPACTION: - { - psMapActionMessage msg( me ); - - if ( msg.valid ) - HandleMessage( &msg, client ); - break; - } - //case MSGTYPE_DEAD_RECKONING: - // { - // psDRMessage msg( me, CacheManager::GetSingleton().GetMsgStrings(), EntityManager::GetSingleton().GetEngine() ); - - // if ( msg.valid ) - // HandleMessage( &msg, client ); - // break; - // } - } + // here for backwards compatibility. no longer used } -void ActionManager::HandleMessage( psMapActionMessage *msg, Client *client ) +void ActionManager::HandleMapAction(MsgEntry *me, Client *client ) { - if ( !msg->valid ) return; + psMapActionMessage msg( me ); - switch ( msg->command ) + if ( !msg.valid ) + return; + + switch ( msg.command ) { - case psMapActionMessage::QUERY : - HandleQueryMessage( msg->actionXML, client ); - break; - case psMapActionMessage::SAVE : - HandleSaveMessage( msg->actionXML, client ); - break; - case psMapActionMessage::LIST_QUERY : - HandleListMessage( msg->actionXML, client ); - break; - case psMapActionMessage::DELETE_ACTION: - HandleDeleteMessage( msg->actionXML, client ); - break; - case psMapActionMessage::RELOAD_CACHE: - HandleReloadMessage( client ); - break; + case psMapActionMessage::QUERY : + HandleQueryMessage( msg.actionXML, client ); + break; + case psMapActionMessage::SAVE : + HandleSaveMessage( msg.actionXML, client ); + break; + case psMapActionMessage::LIST_QUERY : + HandleListMessage( msg.actionXML, client ); + break; + case psMapActionMessage::DELETE_ACTION: + HandleDeleteMessage( msg.actionXML, client ); + break; + case psMapActionMessage::RELOAD_CACHE: + HandleReloadMessage( client ); + break; } } Modified: trunk/src/server/actionmanager.h =================================================================== --- trunk/src/server/actionmanager.h 2008-11-23 00:05:08 UTC (rev 2473) +++ trunk/src/server/actionmanager.h 2008-11-23 00:35:23 UTC (rev 2474) @@ -111,7 +111,7 @@ * @param msg The message to process * @param client The client that sent the message. */ - void HandleMessage( psMapActionMessage *msg, Client *client ); + void HandleMapAction( MsgEntry *msg, Client *client ); // /** Processes psDRMessages // * Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-11-23 00:05:08 UTC (rev 2473) +++ trunk/src/server/adminmanager.cpp 2008-11-23 00:35:23 UTC (rev 2474) @@ -138,11 +138,11 @@ { clients = psserver->GetNetManager()->GetConnections(); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_ADMINCMD,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_PETITION_REQUEST,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GMGUI,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GMSPAWNITEMS,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GMSPAWNITEM,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AdminManager>(this,&AdminManager::HandleAdminCmdMessage),MSGTYPE_ADMINCMD,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AdminManager>(this,&AdminManager::HandlePetitionMessage),MSGTYPE_PETITION_REQUEST,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AdminManager>(this,&AdminManager::HandleGMGuiMessage) ,MSGTYPE_GMGUI,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AdminManager>(this,&AdminManager::SendSpawnItems) ,MSGTYPE_GMSPAWNITEMS,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AdminManager>(this,&AdminManager::SpawnItemInv) ,MSGTYPE_GMSPAWNITEM,REQUIRE_READY_CLIENT); // this makes sure that the player dictionary exists on start up. npcdlg = new psNPCDialog(NULL); @@ -169,53 +169,7 @@ void AdminManager::HandleMessage(MsgEntry *me, Client *client) { - switch ( me->GetType() ) - { - case MSGTYPE_ADMINCMD: - { - AdminCmdData data; - - psAdminCmdMessage msg(me); - - // Decode the string from the message into a struct with data elements - if (!data.DecodeAdminCmdMessage(me,msg,client)) - { - psserver->SendSystemInfo(me->clientnum,"Invalid admin command"); - return; - } - - HandleAdminCmdMessage(me, msg, data, client); - break; - } - - case MSGTYPE_PETITION_REQUEST: - { - psPetitionRequestMessage msg(me); - HandlePetitionMessage(me, msg, client); - break; - } - - case MSGTYPE_GMGUI: - { - psGMGuiMessage msg(me); - HandleGMGuiMessage(me, msg, client); - break; - } - - case MSGTYPE_GMSPAWNITEMS: - { - psGMSpawnItems msg(me); - SendSpawnItems(me, msg, client); - break; - } - - case MSGTYPE_GMSPAWNITEM: - { - psGMSpawnItem msg(me); - SpawnItemInv(me, msg, client); - break; - } - } + /******* No longer required with direct handler functors now. */ } @@ -1089,9 +1043,19 @@ } -void AdminManager::HandleAdminCmdMessage(MsgEntry *me, psAdminCmdMessage &msg, AdminCmdData &data, Client *client) +void AdminManager::HandleAdminCmdMessage(MsgEntry *me, Client *client) { + AdminCmdData data; + psAdminCmdMessage msg(me); + + // Decode the string from the message into a struct with data elements + if (!data.DecodeAdminCmdMessage(me,msg,client)) + { + psserver->SendSystemInfo(me->clientnum,"Invalid admin command"); + return; + } + // Security check if ( me->clientnum != 0 && !IsReseting(msg.cmd) && !Valid(client->GetSecurityLevel(), data.command, me->clientnum) ) { @@ -1885,8 +1849,10 @@ } } -void AdminManager::HandlePetitionMessage(MsgEntry *me, psPetitionRequestMessage& msg,Client *client) +void AdminManager::HandlePetitionMessage(MsgEntry *me, Client *client) { + psPetitionRequestMessage msg(me); + // Check which message and if this is a GM message or user message if (msg.request == "query") { @@ -1909,8 +1875,9 @@ } } -void AdminManager::HandleGMGuiMessage(MsgEntry *me, psGMGuiMessage& msg,Client *client) +void AdminManager::HandleGMGuiMessage(MsgEntry *me, Client *client) { + psGMGuiMessage msg(me); if (msg.type == psGMGuiMessage::TYPE_QUERYPLAYERLIST) { if (client->GetSecurityLevel() >= GM_LEVEL_0) @@ -5919,8 +5886,10 @@ msg2.SendMessage(); } -void AdminManager::SendSpawnItems (MsgEntry* me, psGMSpawnItems& msg,Client *client) +void AdminManager::SendSpawnItems (MsgEntry* me, Client *client) { + psGMSpawnItems msg(me); + csArray<psItemStats*> items; unsigned int size = 0; if (!Valid(client->GetSecurityLevel(), "/item", client->GetClientNum())) @@ -5977,8 +5946,14 @@ msg2.SendMessage(); } -void AdminManager::SpawnItemInv(MsgEntry* me, psGMSpawnItem& msg,Client *client) +void AdminManager::SpawnItemInv(MsgEntry* me, Client *client) { + psGMSpawnItem msg(me); + SpawnItemInv(me, msg, client); +} + +void AdminManager::SpawnItemInv( MsgEntry* me, psGMSpawnItem& msg, Client *client) +{ if (!Valid(client->GetSecurityLevel(), "/item", client->GetClientNum())) { return; Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2008-11-23 00:05:08 UTC (rev 2473) +++ trunk/src/server/adminmanager.h 2008-11-23 00:35:23 UTC (rev 2474) @@ -141,10 +141,12 @@ bool DecodeAdminCmdMessage(MsgEntry *pMsg, psAdminCmdMessage& msg, Client *client); }; - void CommandArea(MsgEntry *me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client, int range); - void HandleAdminCmdMessage(MsgEntry *pMsg, psAdminCmdMessage& msg, AdminCmdData& data, Client *client); - void HandlePetitionMessage(MsgEntry *pMsg, psPetitionRequestMessage& msg, Client *client); - void HandleGMGuiMessage(MsgEntry *pMsg, psGMGuiMessage& msg, Client *client); + void CommandArea (MsgEntry *me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client, int range); + void HandleAdminCmdMessage(MsgEntry *pMsg, Client *client); + void HandlePetitionMessage(MsgEntry *pMsg, Client *client); + void HandleGMGuiMessage (MsgEntry *pMsg, Client *client); + void SpawnItemInv ( MsgEntry* me, Client *client); + void SpawnItemInv ( MsgEntry* me, psGMSpawnItem& msg, Client *client); /** @brief Handles a request to reload a quest from the database. * @param msg The text name is in the msg.text field. @@ -328,8 +330,7 @@ void BanAdvisor(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client); void UnbanAdvisor(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client); void SendSpawnTypes (MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client); - void SendSpawnItems (MsgEntry* me, psGMSpawnItems& msg, Client *client); - void SpawnItemInv( MsgEntry* me, psGMSpawnItem& msg, Client *client); + void SendSpawnItems (MsgEntry* me, Client *client); bool GetAccount(csString useroracc,Result& resultre); void RenameGuild( MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client* client); void ChangeGuildLeader( MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client* client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-23 02:08:12
|
Revision: 2476 http://planeshift.svn.sourceforge.net/planeshift/?rev=2476&view=rev Author: Vengeance2001 Date: 2008-11-23 02:08:07 +0000 (Sun, 23 Nov 2008) Log Message: ----------- ChatManager converted to use message functors. Modified Paths: -------------- trunk/src/server/bankmanager.cpp trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h Modified: trunk/src/server/bankmanager.cpp =================================================================== --- trunk/src/server/bankmanager.cpp 2008-11-23 00:56:33 UTC (rev 2475) +++ trunk/src/server/bankmanager.cpp 2008-11-23 02:08:07 UTC (rev 2476) @@ -676,15 +676,12 @@ void BankManager::HandleMessage(MsgEntry *me, Client *client) { - if(me->GetType() == MSGTYPE_BANKING) + psGUIBankingMessage msg(me); + if (msg.valid) + HandleBanking(client, msg); + else { - psGUIBankingMessage msg(me); - if (msg.valid) - HandleBanking(client, msg); - else - { - Debug2(LOG_NET,me->clientnum,"Received unparsable psGUIBankingMessage from client %u.\n", me->clientnum); - } + Debug2(LOG_NET,me->clientnum,"Received unparsable psGUIBankingMessage from client %u.\n", me->clientnum); } } Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2008-11-23 00:56:33 UTC (rev 2475) +++ trunk/src/server/chatmanager.cpp 2008-11-23 02:08:07 UTC (rev 2476) @@ -56,8 +56,8 @@ ChatManager::ChatManager() { - psserver->GetEventManager()->Subscribe(this,MSGTYPE_CHAT,REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_CACHEFILE,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ChatManager>(this,&ChatManager::HandleChatMessage),MSGTYPE_CHAT,REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ChatManager>(this,&ChatManager::HandleCacheMessage),MSGTYPE_CACHEFILE,REQUIRE_READY_CLIENT); } ChatManager::~ChatManager() @@ -66,223 +66,227 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_CACHEFILE); } -void ChatManager::HandleMessage(MsgEntry *me, Client *client) + +void ChatManager::HandleChatMessage(MsgEntry *me, Client *client) { - if (me->GetType() == MSGTYPE_CHAT) + psChatMessage msg(me); + + // Dont + if (!msg.valid) { - psChatMessage msg(me); + Debug2(LOG_NET,me->clientnum,"Received unparsable psChatMessage from client %u.\n",me->clientnum); + return; + } - // Dont - if (!msg.valid) - { - Debug2(LOG_NET,me->clientnum,"Received unparsable psChatMessage from client %u.\n",me->clientnum); - return; - } + const char *pType = msg.GetTypeText(); - const char *pType = msg.GetTypeText(); + if (msg.iChatType != CHAT_TELL) + { + Debug4(LOG_CHAT, client->GetClientNum(), + "%s %s: %s\n", client->GetName(), + pType, (const char *) msg.sText); + } + else + { + Debug5(LOG_CHAT,client->GetClientNum(), "%s %s %s: %s\n", client->GetName(), + pType, (const char *)msg.sPerson,(const char *)msg.sText); + } - if (msg.iChatType != CHAT_TELL) - { - Debug4(LOG_CHAT, client->GetClientNum(), - "%s %s: %s\n", client->GetName(), - pType, (const char *) msg.sText); - } - else - { - Debug5(LOG_CHAT,client->GetClientNum(), "%s %s %s: %s\n", client->GetName(), - pType, (const char *)msg.sPerson,(const char *)msg.sText); - } + bool saveFlood = true; - bool saveFlood = true; + if (!client->IsMute()) + { + // Send Chat to other players + switch (msg.iChatType) + { + case CHAT_GUILD: + { + SendGuild(client, msg); + break; + } + case CHAT_GROUP: + { + SendGroup(client, msg); + break; + } + case CHAT_AUCTION: + case CHAT_SHOUT: + { + SendShout(client, msg); + break; + } + case CHAT_PET_ACTION: + { + gemNPC *pet = NULL; - if (!client->IsMute()) - { - // Send Chat to other players - switch (msg.iChatType) - { - case CHAT_GUILD: + // Check if a specific pet's name was specified, in one of these forms: + // - /mypet Petname ... + // - /mypet Petname's ... + size_t numPets = client->GetNumPets(); + for (size_t i = 0; i < numPets; i++) { - SendGuild(client, msg); - break; - } - case CHAT_GROUP: - { - SendGroup(client, msg); - break; - } - case CHAT_AUCTION: - case CHAT_SHOUT: - { - SendShout(client, msg); - break; - } - case CHAT_PET_ACTION: - { - gemNPC *pet = NULL; - - // Check if a specific pet's name was specified, in one of these forms: - // - /mypet Petname ... - // - /mypet Petname's ... - size_t numPets = client->GetNumPets(); - for (size_t i = 0; i < numPets; i++) + if ((pet = dynamic_cast <gemNPC*>(client->GetPet(i))) + && msg.sText.StartsWith(pet->GetCharacterData()->GetCharName(), true)) { - if ((pet = dynamic_cast <gemNPC*>(client->GetPet(i))) - && msg.sText.StartsWith(pet->GetCharacterData()->GetCharName(), true)) + size_t n = strlen(pet->GetCharacterData()->GetCharName()); + if (msg.sText.Length() >= n + 1 && msg.sText.GetAt(n) == ' ') { - size_t n = strlen(pet->GetCharacterData()->GetCharName()); - if (msg.sText.Length() >= n + 1 && msg.sText.GetAt(n) == ' ') - { - msg.sText.DeleteAt(0, n); - msg.sText.LTrim(); - break; - } - else if (msg.sText.Length() >= n + 3 && msg.sText.GetAt(n) == '\'' - && msg.sText.GetAt(n + 1) == 's' && msg.sText.GetAt(n + 2) == ' ') - { - msg.sText.DeleteAt(0, n); - break; - } + msg.sText.DeleteAt(0, n); + msg.sText.LTrim(); + break; } - else pet = NULL; + else if (msg.sText.Length() >= n + 3 && msg.sText.GetAt(n) == '\'' + && msg.sText.GetAt(n + 1) == 's' && msg.sText.GetAt(n + 2) == ' ') + { + msg.sText.DeleteAt(0, n); + break; + } } - // If no particular pet was specified, assume the default familiar... - if (!pet) - pet = dynamic_cast <gemNPC*>(client->GetFamiliar()); + else pet = NULL; + } + // If no particular pet was specified, assume the default familiar... + if (!pet) + pet = dynamic_cast <gemNPC*>(client->GetFamiliar()); - // Send the message or an appropriate error... - if (!pet) - psserver->SendSystemInfo(me->clientnum, "You have no familiar to command."); - else - SendSay(client->GetClientNum(), pet, msg, pet->GetCharacterData()->GetCharFullName()); + // Send the message or an appropriate error... + if (!pet) + psserver->SendSystemInfo(me->clientnum, "You have no familiar to command."); + else + SendSay(client->GetClientNum(), pet, msg, pet->GetCharacterData()->GetCharFullName()); - break; + break; + } + case CHAT_SAY: + { + // Send to all if there's no NPC response or the response is public + SendSay(client->GetClientNum(), client->GetActor(), msg, client->GetName()); + break; + } + case CHAT_NPC: + { + // Only the speaker sees his successful chatting with an npc. + // This helps quests stay secret. + psChatMessage newMsg(client->GetClientNum(), client->GetName(), 0, + msg.sText, msg.iChatType, msg.translate); + newMsg.SendMessage(); + saveFlood = false; + + gemObject *target = client->GetTargetObject(); + gemNPC *targetnpc = dynamic_cast<gemNPC*>(target); + NpcResponse *resp = CheckNPCResponse(msg,client,targetnpc); + if (resp) + { + SendAudioFileHash(client, resp->GetVoiceFile()); + resp->ExecuteScript(client, targetnpc); } - case CHAT_SAY: + break; + } + case CHAT_TELL: + { + if ( msg.sPerson.Length() == 0 ) { - // Send to all if there's no NPC response or the response is public - SendSay(client->GetClientNum(), client->GetActor(), msg, client->GetName()); + psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); break; } - case CHAT_NPC: + + Client *target = FindPlayerClient(msg.sPerson); + if (target && !target->IsSuperClient()) { - // Only the speaker sees his successful chatting with an npc. - // This helps quests stay secret. - psChatMessage newMsg(client->GetClientNum(), client->GetName(), 0, - msg.sText, msg.iChatType, msg.translate); - newMsg.SendMessage(); - saveFlood = false; + SendTell(msg, client->GetName(), client, target); - gemObject *target = client->GetTargetObject(); - gemNPC *targetnpc = dynamic_cast<gemNPC*>(target); - NpcResponse *resp = CheckNPCResponse(msg,client,targetnpc); - if (resp) - { - SendAudioFileHash(client, resp->GetVoiceFile()); - resp->ExecuteScript(client, targetnpc); - } - break; + // Save to chat history + client->GetActor()->LogMessage(client->GetActor()->GetName(), msg); + if (target->GetActor()) // this can be null if someone sends a tell to a connecting client + target->GetActor()->LogMessage(client->GetActor()->GetName(), msg); } - case CHAT_TELL: + else { - if ( msg.sPerson.Length() == 0 ) - { - psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); - break; - } + psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", msg.sPerson.GetDataSafe()); + } + break; + } + case CHAT_REPORT: + { + // First thing to extract the name of the player to log + csString targetName; + int index = (int)msg.sText.FindFirst(' ', 0); + if ( index == -1 ) + targetName = msg.sText; + else + targetName = msg.sText.Slice(0, index); + targetName = NormalizeCharacterName(targetName); - Client *target = FindPlayerClient(msg.sPerson); - if (target && !target->IsSuperClient()) - { - SendTell(msg, client->GetName(), client, target); + if ( msg.sText.Length() == 0 ) + { + psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); + break; + } - // Save to chat history - client->GetActor()->LogMessage(client->GetActor()->GetName(), msg); - if (target->GetActor()) // this can be null if someone sends a tell to a connecting client - target->GetActor()->LogMessage(client->GetActor()->GetName(), msg); - } - else - { - psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", msg.sPerson.GetDataSafe()); - } + Client * target = psserver->GetConnections()->Find(targetName); + if ( !target ) + { + psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", targetName.GetData()); break; } - case CHAT_REPORT: + if (target->IsSuperClient()) { - // First thing to extract the name of the player to log - csString targetName; - int index = (int)msg.sText.FindFirst(' ', 0); - if ( index == -1 ) - targetName = msg.sText; - else - targetName = msg.sText.Slice(0, index); - targetName = NormalizeCharacterName(targetName); + psserver->SendSystemError(client->GetClientNum(), "Can't report NPCs."); + break; + } - if ( msg.sText.Length() == 0 ) + if (!client->GetActor()->IsLoggingChat()) + { + psserver->SendSystemError(client->GetClientNum(), "%s will be logged for five minutes now.", targetName.GetData()); + psserver->SendSystemError(target->GetClientNum(), "Your last 5 minutes of chat has been reported to the GMs, logging will now continue."); + } + else + { + if (target->GetClientNum() != client->GetActor()->GetReportTargetId()) { - psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); + psserver->SendSystemError(client->GetClientNum(), "Previous logging is still active."); break; } + psserver->SendSystemError(client->GetClientNum(), "Logging for another five minutes."); + } + client->GetActor()->AddChatReport(target->GetActor()); + psserver->GetEventManager()->Push(new psEndChatLoggingEvent(client->GetClientNum(), 300000)); + break; + } + case CHAT_ADVISOR: + case CHAT_ADVICE: + { + break; + } - Client * target = psserver->GetConnections()->Find(targetName); - if ( !target ) - { - psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", targetName.GetData()); - break; - } - if (target->IsSuperClient()) - { - psserver->SendSystemError(client->GetClientNum(), "Can't report NPCs."); - break; - } - - if (!client->GetActor()->IsLoggingChat()) - { - psserver->SendSystemError(client->GetClientNum(), "%s will be logged for five minutes now.", targetName.GetData()); - psserver->SendSystemError(target->GetClientNum(), "Your last 5 minutes of chat has been reported to the GMs, logging will now continue."); - } - else - { - if (target->GetClientNum() != client->GetActor()->GetReportTargetId()) - { - psserver->SendSystemError(client->GetClientNum(), "Previous logging is still active."); - break; - } - psserver->SendSystemError(client->GetClientNum(), "Logging for another five minutes."); - } - client->GetActor()->AddChatReport(target->GetActor()); - psserver->GetEventManager()->Push(new psEndChatLoggingEvent(client->GetClientNum(), 300000)); - break; - } - case CHAT_ADVISOR: - case CHAT_ADVICE: - { - break; - } - - default: - { - Error2("Unknown Chat Type: %d\n",msg.iChatType); - break; - } - } - } - else - { - //User is muted but tries to chat anyway. Remind the user that he/she/it is muted - psserver->SendSystemInfo(client->GetClientNum(),"You can't send messages because you are muted."); - } - - if (saveFlood) - client->FloodControl(msg.iChatType, msg.sText, msg.sPerson); + default: + { + Error2("Unknown Chat Type: %d\n",msg.iChatType); + break; + } + } } - else if (me->GetType() == MSGTYPE_CACHEFILE) // client sends back hash to request file send + else { - psCachedFileMessage msg(me); - printf("Got request for file '%s'\n",msg.hash.GetDataSafe()); - SendAudioFile(client,msg.hash); + //User is muted but tries to chat anyway. Remind the user that he/she/it is muted + psserver->SendSystemInfo(client->GetClientNum(),"You can't send messages because you are muted."); } + + if (saveFlood) + client->FloodControl(msg.iChatType, msg.sText, msg.sPerson); } +void ChatManager::HandleCacheMessage(MsgEntry *me, Client *client) +{ + psCachedFileMessage msg(me); + printf("Got request for file '%s'\n",msg.hash.GetDataSafe()); + SendAudioFile(client,msg.hash); +} + +void ChatManager::HandleMessage(MsgEntry *me, Client *client) +{ + // no longer used +} + /// TODO: This function is guaranteed not to work atm.-Keith void ChatManager::SendNotice(psChatMessage& msg) { Modified: trunk/src/server/chatmanager.h =================================================================== --- trunk/src/server/chatmanager.h 2008-11-23 00:56:33 UTC (rev 2475) +++ trunk/src/server/chatmanager.h 2008-11-23 02:08:07 UTC (rev 2476) @@ -74,6 +74,9 @@ virtual ~ChatManager(); virtual void HandleMessage(MsgEntry *pMsg,Client *client); + void HandleChatMessage (MsgEntry *me, Client *client); + void HandleCacheMessage(MsgEntry *me, Client *client); + void SendNotice(psChatMessage& msg); NpcResponse *CheckNPCEvent(Client *client,csString& trigger,gemNPC * &target); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-23 02:18:56
|
Revision: 2477 http://planeshift.svn.sourceforge.net/planeshift/?rev=2477&view=rev Author: Vengeance2001 Date: 2008-11-23 02:18:45 +0000 (Sun, 23 Nov 2008) Log Message: ----------- Now combatManager uses a functor for death events. Also, changed the name of psCombatManager to just CombatManager to be consistent with other manager classes. Modified Paths: -------------- trunk/src/server/combatmanager.cpp trunk/src/server/combatmanager.h trunk/src/server/psserver.cpp trunk/src/server/psserver.h trunk/src/server/usermanager.h Modified: trunk/src/server/combatmanager.cpp =================================================================== --- trunk/src/server/combatmanager.cpp 2008-11-23 02:08:07 UTC (rev 2476) +++ trunk/src/server/combatmanager.cpp 2008-11-23 02:18:45 UTC (rev 2477) @@ -90,7 +90,7 @@ int AttackResult; ///< Code indicating the result of the attack attempt int PreviousAttackResult; ///< The code of the previous result of the attack attempt - psCombatGameEvent(psCombatManager *mgr, + psCombatGameEvent(CombatManager *mgr, int delayticks, int action, gemObject *attacker, @@ -133,10 +133,10 @@ int GetAttackResult() { return AttackResult; }; protected: - psCombatManager *combatmanager; + CombatManager *combatmanager; }; -psCombatManager::psCombatManager() : pvp_region(NULL) +CombatManager::CombatManager() : pvp_region(NULL) { randomgen = psserver->rng; var_IAH = NULL; @@ -194,10 +194,10 @@ actorVar = staminacombat->GetOrCreateVar("Actor"); weaponVar = staminacombat->GetOrCreateVar("Weapon"); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DEATH_EVENT,NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<CombatManager>(this,&CombatManager::HandleDeathEvent),MSGTYPE_DEATH_EVENT,NO_VALIDATION); } -psCombatManager::~psCombatManager() +CombatManager::~CombatManager() { psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_DEATH_EVENT); if (pvp_region) @@ -207,7 +207,7 @@ } } -bool psCombatManager::InitializePVP() +bool CombatManager::InitializePVP() { Result rs(db->Select("select * from sc_location_type where name = 'pvp_region'")); @@ -244,7 +244,7 @@ return true; } -bool psCombatManager::InPVPRegion(csVector3& pos,iSector * sector) +bool CombatManager::InPVPRegion(csVector3& pos,iSector * sector) { if (pvp_region->CheckWithinBounds(EntityManager::GetSingleton().GetEngine(), pos, sector)) return true; @@ -252,7 +252,7 @@ return false; } -void psCombatManager::AttackSomeone(gemActor *attacker,gemObject *target,Stance stance) +void CombatManager::AttackSomeone(gemActor *attacker,gemObject *target,Stance stance) { psCharacter *attacker_character = attacker->GetCharacterData(); @@ -334,7 +334,7 @@ } } -void psCombatManager::SetCombat(gemActor *combatant, Stance stance) +void CombatManager::SetCombat(gemActor *combatant, Stance stance) { // Sanity check if (!combatant || !combatant->GetCharacterData() || !combatant->IsAlive()) @@ -353,7 +353,7 @@ Debug3(LOG_COMBAT,combatant->GetClientID(), "%s starts attacking with stance %s", combatant->GetName(), stance.stance_name.GetData()); } -void psCombatManager::StopAttack(gemActor *attacker) +void CombatManager::StopAttack(gemActor *attacker) { if (!attacker) return; @@ -374,7 +374,7 @@ Debug2(LOG_COMBAT, attacker->GetClientID(), "%s stops attacking", attacker->GetName()); } -void psCombatManager::NotifyTarget(gemActor *attacker,gemObject *target) +void CombatManager::NotifyTarget(gemActor *attacker,gemObject *target) { // Queue Attack percetion to npc clients gemNPC *targetnpc = dynamic_cast<gemNPC *>(target); @@ -387,7 +387,7 @@ // targetactor->GetCharacterData()->InterruptSpellCasting(); } -void psCombatManager::QueueNextEvent(psCombatGameEvent *event) +void CombatManager::QueueNextEvent(psCombatGameEvent *event) { QueueNextEvent(event->GetAttacker(), event->GetWeaponSlot(), @@ -397,7 +397,7 @@ event->GetAttackResult()); } -void psCombatManager::QueueNextEvent(gemObject *attacker,INVENTORY_SLOT_NUMBER weaponslot, +void CombatManager::QueueNextEvent(gemObject *attacker,INVENTORY_SLOT_NUMBER weaponslot, gemObject *target, int attackerCID, int targetCID, int previousResult) @@ -444,7 +444,7 @@ } /* ----------------------- NOT IMPLEMENTED YET ------------------------- -int psCombatManager::GetQueuedAction(gemActor *attacker) +int CombatManager::GetQueuedAction(gemActor *attacker) { (void) attacker; // TODO: This will eventually query the prop class for the next action @@ -453,7 +453,7 @@ return 0; } -int psCombatManager::GetDefaultModeAction(gemActor *attacker) +int CombatManager::GetDefaultModeAction(gemActor *attacker) { (void) attacker; // TODO: This will eventually query the prop class for the mode @@ -466,7 +466,7 @@ /** * This is the meat and potatoes of the combat engine here. */ -int psCombatManager::CalculateAttack(psCombatGameEvent *event, psItem* subWeapon) +int CombatManager::CalculateAttack(psCombatGameEvent *event, psItem* subWeapon) { var_Attacker->SetObject(event->GetAttackerData() ); var_Target->SetObject(event->GetTargetData() ); @@ -515,7 +515,7 @@ return ATTACK_DAMAGE; } -void psCombatManager::ApplyCombatEvent(psCombatGameEvent *event, int attack_result) +void CombatManager::ApplyCombatEvent(psCombatGameEvent *event, int attack_result) { psCharacter *attacker_data,*target_data; @@ -705,7 +705,7 @@ } } -void psCombatManager::HandleCombatEvent(psCombatGameEvent *event) +void CombatManager::HandleCombatEvent(psCombatGameEvent *event) { psCharacter *attacker_data,*target_data; int attack_result; @@ -919,7 +919,7 @@ // CPrintf(CON_DEBUG, "Slot %d for %s not an auto-attack slot.\n",event->GetWeaponSlot(), event->attacker->GetName() ); } -void psCombatManager::DebugOutput(psCombatGameEvent *event) +void CombatManager::DebugOutput(psCombatGameEvent *event) { psItem* item = event->GetAttackerData()->Inventory().GetEffectiveWeaponInSlot(event->GetWeaponSlot() ); psString debug; @@ -937,7 +937,7 @@ -bool psCombatManager::ValidDistance(gemObject *attacker,gemObject *target,psItem *Weapon) +bool CombatManager::ValidDistance(gemObject *attacker,gemObject *target,psItem *Weapon) { if (Weapon==NULL) return false; @@ -952,7 +952,7 @@ } } -bool psCombatManager::ValidCombatAngle(gemObject *attacker,gemObject *target,psItem *Weapon) +bool CombatManager::ValidCombatAngle(gemObject *attacker,gemObject *target,psItem *Weapon) { csVector3 attackPos, targetPos; iSector *attackSector, *targetSector; @@ -986,16 +986,12 @@ return ( fabs(angle) < 3.14159F * .40); } -void psCombatManager::HandleMessage(MsgEntry *me,Client *client) +void CombatManager::HandleMessage(MsgEntry *me,Client *client) { - if (me->GetType() == MSGTYPE_DEATH_EVENT) - { - HandleDeathEvent(me); - return; - } + // converted to functor } -void psCombatManager::HandleDeathEvent(MsgEntry *me) +void CombatManager::HandleDeathEvent(MsgEntry *me,Client *client) { psDeathEvent death(me); @@ -1042,7 +1038,7 @@ /*-------------------------------------------------------------*/ -psCombatGameEvent::psCombatGameEvent(psCombatManager *mgr, +psCombatGameEvent::psCombatGameEvent(CombatManager *mgr, int delayticks, int act, gemObject *attacker, Modified: trunk/src/server/combatmanager.h =================================================================== --- trunk/src/server/combatmanager.h 2008-11-23 02:08:07 UTC (rev 2476) +++ trunk/src/server/combatmanager.h 2008-11-23 02:18:45 UTC (rev 2477) @@ -52,14 +52,14 @@ * and information from the pspccharacterinfo Prop Classes for both * the attacker and the target. */ -class psCombatManager: public MessageManager +class CombatManager: public MessageManager { public: - psCombatManager(); + CombatManager(); bool InitializePVP(); - virtual ~psCombatManager(); + virtual ~CombatManager(); void HandleMessage(MsgEntry *me, Client *client); @@ -111,7 +111,7 @@ MathScriptVar* actorVar; MathScriptVar* weaponVar; - void HandleDeathEvent(MsgEntry *me); + void HandleDeathEvent(MsgEntry *me,Client *client); bool ValidDistance(gemObject *attacker, gemObject *target, psItem *Weapon); void SetCombat(gemActor *combatant, Stance stance); Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2008-11-23 02:08:07 UTC (rev 2476) +++ trunk/src/server/psserver.cpp 2008-11-23 02:18:45 UTC (rev 2477) @@ -410,7 +410,7 @@ Debug1(LOG_STARTUP,0,"Started CEL\n"); // Start Combat Manager - combatmanager = new psCombatManager(); + combatmanager = new CombatManager(); if (!combatmanager->InitializePVP()) { return false; Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2008-11-23 02:08:07 UTC (rev 2476) +++ trunk/src/server/psserver.h 2008-11-23 02:18:45 UTC (rev 2477) @@ -59,7 +59,7 @@ class TutorialManager; class ServerStatus; class psMarriageManager; -class psCombatManager; +class CombatManager; class psSpellManager; class ExchangeManager; class ProgressionManager; @@ -107,7 +107,7 @@ * Initializes the following modules: * - marriage Manager ( psMarriageManager ) * - database ( psDatabase ) - * - combat manager ( psCombatManager ) + * - combat manager ( CombatManager ) * - weather manager ( WeatherManager ) * - user manager ( UserManager ) * - chat manager ( ChatManager ) @@ -289,7 +289,7 @@ * * @return Returns a reference to the current combat manager. */ - psCombatManager* GetCombatManager() { return combatmanager; } + CombatManager* GetCombatManager() { return combatmanager; } /** Returns the spell manager. * @@ -501,7 +501,7 @@ NPCManager* npcmanager; psMarriageManager* marriageManager; - psCombatManager* combatmanager; + CombatManager* combatmanager; csRandomGen * rng; QuestManager * questmanager; psCharCreationManager* charCreationManager; Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2008-11-23 02:08:07 UTC (rev 2476) +++ trunk/src/server/usermanager.h 2008-11-23 02:18:45 UTC (rev 2477) @@ -49,13 +49,13 @@ // FORWARD DECLARATIONS /////////////////////////////////////////////////////////////////////////////// class EntityManager; -class psCombatManager; +class CombatManager; class psServer; class AdminManager; class ClientConnectionSet; class psDatabase; class EventManager; -class psCombatManager; +class CombatManager; class PendingDuelInvite; class AdviceManager; class StatSet; @@ -374,7 +374,7 @@ // psDatabase *database; // csRandomGen *randomgen; // EventManager *eventmanager; -// psCombatManager *combatmanager; +// CombatManager *combatmanager; // psServer *server; // AdminManager *adminmanager; csTicks nextUserStatRegeneration; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-23 06:02:14
|
Revision: 2478 http://planeshift.svn.sourceforge.net/planeshift/?rev=2478&view=rev Author: Vengeance2001 Date: 2008-11-23 06:02:09 +0000 (Sun, 23 Nov 2008) Log Message: ----------- Changed CharCreationManager to use functor callbacks for net messages. Renamed psCharCreationManager to CharCreationManager for consistency. Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/creationmanager.cpp trunk/src/server/creationmanager.h trunk/src/server/npcmanager.cpp trunk/src/server/psserver.cpp trunk/src/server/psserver.h Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-11-23 02:18:45 UTC (rev 2477) +++ trunk/src/server/adminmanager.cpp 2008-11-23 06:02:09 UTC (rev 2478) @@ -1116,7 +1116,7 @@ else { targetclient = FindPlayerClient(data.player); // Other player? - if(targetclient && !psCharCreationManager::IsUnique(data.player, true)) //check that the actor name isn't duplicate + if(targetclient && !CharCreationManager::IsUnique(data.player, true)) //check that the actor name isn't duplicate duplicateActor = true; } @@ -5384,19 +5384,19 @@ if (!checkFirst && !checkLast && data.newLastName.Length() != 0) return; - if(checkFirst && !psCharCreationManager::FilterName(data.newName)) + if(checkFirst && !CharCreationManager::FilterName(data.newName)) { psserver->SendSystemError(me->clientnum,"The name %s is invalid!",data.newName.GetData()); return; } - if(checkLast && !psCharCreationManager::FilterName(data.newLastName)) + if(checkLast && !CharCreationManager::FilterName(data.newLastName)) { psserver->SendSystemError(me->clientnum,"The last name %s is invalid!",data.newLastName.GetData()); return; } - bool nameUnique = psCharCreationManager::IsUnique(data.newName); + bool nameUnique = CharCreationManager::IsUnique(data.newName); bool allowedToClonename = CacheManager::GetSingleton().GetCommandManager()->Validate( client->GetSecurityLevel(), "changenameall"); if (!allowedToClonename) @@ -5409,7 +5409,7 @@ return; } - bool secondNameUnique = psCharCreationManager::IsLastNameUnique(data.newLastName); + bool secondNameUnique = CharCreationManager::IsLastNameUnique(data.newLastName); // If the last name should be unique, check it if (checkLast && data.uniqueName && data.newLastName.Length() && !secondNameUnique) { Modified: trunk/src/server/creationmanager.cpp =================================================================== --- trunk/src/server/creationmanager.cpp 2008-11-23 02:18:45 UTC (rev 2477) +++ trunk/src/server/creationmanager.cpp 2008-11-23 06:02:09 UTC (rev 2478) @@ -60,7 +60,7 @@ -psCharCreationManager::psCharCreationManager() +CharCreationManager::CharCreationManager() { raceCPValues = 0; raceCPValuesLength = 0; @@ -68,13 +68,13 @@ psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_CHAR_CREATE_UPLOAD); } -psCharCreationManager::~psCharCreationManager() +CharCreationManager::~CharCreationManager() { delete[] raceCPValues; } -bool psCharCreationManager::Initialize( ) +bool CharCreationManager::Initialize( ) { if ( !( LoadCPValues() && @@ -82,76 +82,25 @@ LoadLifeEvents()) ) return false; - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_CREATE_UPLOAD,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_CREATE_CP,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_CREATE_PARENTS,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_CREATE_CHILDHOOD,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_CREATE_LIFEEVENTS,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_CREATE_TRAITS,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_CREATE_NAME,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CHAR_DELETE,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleUploadMessage), MSGTYPE_CHAR_CREATE_UPLOAD,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleCharCreateCP), MSGTYPE_CHAR_CREATE_CP,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleParents), MSGTYPE_CHAR_CREATE_PARENTS,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleChildhood), MSGTYPE_CHAR_CREATE_CHILDHOOD,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleLifeEvents), MSGTYPE_CHAR_CREATE_LIFEEVENTS,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleTraits), MSGTYPE_CHAR_CREATE_TRAITS,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleName), MSGTYPE_CHAR_CREATE_NAME,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<CharCreationManager>(this,&CharCreationManager::HandleCharDelete), MSGTYPE_CHAR_DELETE,REQUIRE_ANY_CLIENT); // Other loaders are here. return true; } -void psCharCreationManager::HandleMessage(MsgEntry *pMsg,Client *client) +void CharCreationManager::HandleMessage(MsgEntry *pMsg,Client *client) { - switch ( pMsg->GetType() ) - { - /* This is a simple message requesting a CP value for a race - * so we can handle the raw message data here. - */ - case MSGTYPE_CHAR_CREATE_CP: - { - HandleCharCreateCP( pMsg, client ); - return; - } - - case MSGTYPE_CHAR_DELETE: - { - HandleCharDelete( pMsg, client ); - return; - } - - case MSGTYPE_CHAR_CREATE_NAME: - { - HandleName(pMsg,client); - return; - } - case MSGTYPE_CHAR_CREATE_PARENTS: - { - HandleParents(pMsg,client); - return; - } - - case MSGTYPE_CHAR_CREATE_CHILDHOOD: - { - HandleChildhood(pMsg,client); - return; - } - - case MSGTYPE_CHAR_CREATE_LIFEEVENTS: - { - HandleLifeEvents(pMsg,client); - return; - } - - case MSGTYPE_CHAR_CREATE_TRAITS: - { - HandleTraits(pMsg,client); - return; - } - - case MSGTYPE_CHAR_CREATE_UPLOAD: - { - HandleUploadMessage( pMsg, client ); - break; - } - } + // no longer used } -bool psCharCreationManager::HandleCharDelete( MsgEntry* me, Client* client ) +void CharCreationManager::HandleCharDelete( MsgEntry* me, Client* client ) { psCharDeleteMessage msg(me); csString charName = msg.charName; @@ -159,7 +108,7 @@ if(!charName.Length()) { CPrintf(CON_WARNING,"Client %u sent malformed character name to deletion code!",client->GetClientNum()); - return false; // No char + return; // No char } PID pid = psserver->CharacterLoader.FindCharacterID(client->GetAccountID(), charName); @@ -171,14 +120,14 @@ if (!pid.IsValid()) { psserver->SendSystemError(client->GetClientNum(),"Couldn't find character data!"); - return false; + return; } // Can we delete it? if (!psserver->CharacterLoader.DeleteCharacterData(pid, error)) { psserver->SendSystemError(client->GetClientNum(),"Error: %s",error.GetData()); - return false; + return; } // Remove cached objects to make sure that the client gets a fresh character @@ -204,14 +153,12 @@ { CPrintf(CON_WARNING,"Character %s not deleted because of non-ownership\n", charName.GetData() ); psserver->SendSystemError(client->GetClientNum(),"You do not own that character!"); - return false; + return; } - - return true; } -bool psCharCreationManager::LoadCPValues() +bool CharCreationManager::LoadCPValues() { Result result(db->Select("SELECT id,initial_cp from race_info")); if ( !result.IsValid() || result.Count() == 0 ) @@ -229,7 +176,7 @@ return true; } -bool psCharCreationManager::LoadLifeEvents() +bool CharCreationManager::LoadLifeEvents() { Result events( db->Select("SELECT * from char_create_life") ); @@ -272,7 +219,7 @@ return true; } -bool psCharCreationManager::LoadCreationChoices() +bool CharCreationManager::LoadCreationChoices() { Result result( db->Select("SELECT * from character_creation") ); @@ -320,7 +267,7 @@ } -int psCharCreationManager::ConvertAreaToInt( const char* area ) +int CharCreationManager::ConvertAreaToInt( const char* area ) { csString str( area ); @@ -350,7 +297,7 @@ return -1; } -void psCharCreationManager::HandleName( MsgEntry* me, Client *client ) +void CharCreationManager::HandleName( MsgEntry* me, Client *client ) { psNameCheckMessage name; name.FromClient( me ); @@ -437,7 +384,7 @@ response.SendMessage(); } -void psCharCreationManager::HandleChildhood( MsgEntry* me,Client *client ) +void CharCreationManager::HandleChildhood( MsgEntry* me,Client *client ) { psCreationChoiceMsg message(me); @@ -470,7 +417,7 @@ } -void psCharCreationManager::HandleParents( MsgEntry* me,Client *client ) +void CharCreationManager::HandleParents( MsgEntry* me,Client *client ) { psCreationChoiceMsg message(me); if (!message.valid) @@ -498,7 +445,7 @@ } } -void psCharCreationManager::HandleLifeEvents( MsgEntry* me,Client *client ) +void CharCreationManager::HandleLifeEvents( MsgEntry* me,Client *client ) { psLifeEventMsg message(me); @@ -525,7 +472,7 @@ } -void psCharCreationManager::HandleTraits( MsgEntry* me,Client *client ) +void CharCreationManager::HandleTraits( MsgEntry* me,Client *client ) { psCreationChoiceMsg message(me); @@ -555,7 +502,7 @@ -psCharCreationManager::LifeEventChoiceServer* psCharCreationManager::FindLifeEvent( int id ) +CharCreationManager::LifeEventChoiceServer* CharCreationManager::FindLifeEvent( int id ) { for (size_t x = 0; x < lifeEvents.GetSize(); x++ ) { @@ -567,7 +514,7 @@ } -psCharCreationManager::CreationChoice* psCharCreationManager::FindChoice( int id ) +CharCreationManager::CreationChoice* CharCreationManager::FindChoice( int id ) { size_t x; for ( x = 0; x < childhoodData.GetSize(); x++ ) @@ -587,7 +534,7 @@ -bool psCharCreationManager::Validate( psCharUploadMessage& mesg, csString& errorMsg ) +bool CharCreationManager::Validate( psCharUploadMessage& mesg, csString& errorMsg ) { // Check for bad parent modifier. @@ -629,12 +576,12 @@ } -int psCharCreationManager::CalculateCPLife( csArray<uint32_t>& events ) +int CharCreationManager::CalculateCPLife( csArray<uint32_t>& events ) { int cpCost = 0; for ( size_t li = 0; li < events.GetSize(); li++ ) { - psCharCreationManager::LifeEventChoiceServer *event; + CharCreationManager::LifeEventChoiceServer *event; event = psserver->charCreationManager->FindLifeEvent( events[li] ); if ( event ) @@ -646,12 +593,12 @@ return cpCost; } -int psCharCreationManager::CalculateCPChoices( csArray<uint32_t>& choices, int fatherMod, int motherMod ) +int CharCreationManager::CalculateCPChoices( csArray<uint32_t>& choices, int fatherMod, int motherMod ) { int cpCost = 0; for ( size_t ci = 0; ci < choices.GetSize(); ci++ ) { - psCharCreationManager::CreationChoice* choice = FindChoice( choices[ci] ); + CharCreationManager::CreationChoice* choice = FindChoice( choices[ci] ); if ( choice ) { if ( choice->choiceArea == FATHER_JOB ) @@ -670,7 +617,7 @@ return cpCost; } -void psCharCreationManager::HandleUploadMessage( MsgEntry* me, Client *client ) +void CharCreationManager::HandleUploadMessage( MsgEntry* me, Client *client ) { Debug1( LOG_NEWCHAR, me->clientnum,"New Character is being created" ); @@ -972,7 +919,7 @@ // psserver->charCreationManager->CalculateCPLife(upload.lifeEvents ); for ( size_t ci = 0; ci < upload.choices.GetSize(); ci++ ) { - psCharCreationManager::CreationChoice* choice = psserver->charCreationManager->FindChoice( upload.choices[ci] ); + CharCreationManager::CreationChoice* choice = psserver->charCreationManager->FindChoice( upload.choices[ci] ); if ( choice ) { csString script (choice->eventScript.GetData() ); @@ -1098,7 +1045,7 @@ } } -bool psCharCreationManager::PlayerHasFinishedTutorial(AccountID acctID, uint32 tutorialsecid) +bool CharCreationManager::PlayerHasFinishedTutorial(AccountID acctID, uint32 tutorialsecid) { // if there are characters associated with this account that are outside the tutorial assume the tutorial was passed... Result result(db->Select("SELECT id FROM characters WHERE account_id = %u AND loc_sector_id != %u", acctID.Unbox(), tutorialsecid)); @@ -1110,7 +1057,7 @@ } -void psCharCreationManager::AssignScript( psCharacter* character ) +void CharCreationManager::AssignScript( psCharacter* character ) { /* csString query; @@ -1131,7 +1078,7 @@ */ } -int psCharCreationManager::IsReserved(const char* name, AccountID acctID) +int CharCreationManager::IsReserved(const char* name, AccountID acctID) { // Check to see if this name is reserved. Does this check by comparing // the email address of the account with that stored in the migration table. @@ -1161,7 +1108,7 @@ return NAME_AVAILABLE; } -bool psCharCreationManager::IsUnique( const char* name , bool dbUniqueness) +bool CharCreationManager::IsUnique( const char* name , bool dbUniqueness) { csString escape; db->Escape( escape, name ); @@ -1174,7 +1121,7 @@ return ! ( result.IsValid() && (result.Count() > (unsigned long)(dbUniqueness ? 1:0)) ); } -bool psCharCreationManager::IsLastNameUnique( const char* lastname ) +bool CharCreationManager::IsLastNameUnique( const char* lastname ) { if (lastname && strlen(lastname)) { @@ -1190,7 +1137,7 @@ return true; // blank last name is now allowed. } -bool psCharCreationManager::FilterName(const char* name) +bool CharCreationManager::FilterName(const char* name) { if (name == NULL) return false; @@ -1230,7 +1177,7 @@ } -bool psCharCreationManager::HandleCharCreateCP( MsgEntry* me, Client*client ) +void CharCreationManager::HandleCharCreateCP( MsgEntry* me, Client*client ) { int32_t raceID = me->GetInt32(); int32_t raceCPValue = 0; @@ -1245,6 +1192,4 @@ psCharCreateCPMessage response(me->clientnum,raceID, raceCPValue); psserver->GetEventManager()->SendMessage(response.msg); - - return true; } Modified: trunk/src/server/creationmanager.h =================================================================== --- trunk/src/server/creationmanager.h 2008-11-23 02:18:45 UTC (rev 2477) +++ trunk/src/server/creationmanager.h 2008-11-23 06:02:09 UTC (rev 2478) @@ -44,11 +44,11 @@ * character_creation * */ -class psCharCreationManager : MessageManager +class CharCreationManager : MessageManager { public: - psCharCreationManager(); - virtual ~psCharCreationManager(); + CharCreationManager(); + virtual ~CharCreationManager(); /** Caches the data from the database needed for character creation. */ @@ -115,7 +115,7 @@ /** Handles the creation of a character from the char creation screen */ - bool HandleCharCreateCP(MsgEntry*me, Client* client); + void HandleCharCreateCP(MsgEntry*me, Client* client); /** Handles a check on a name. * This will check the name against the migration and the current @@ -127,7 +127,7 @@ /** Handles the deletion of a character from the char pick screen. */ - bool HandleCharDelete( MsgEntry* me, Client* client ); + void HandleCharDelete( MsgEntry* me, Client* client ); int CalculateCPChoices( csArray<uint32_t>& choices, int fatherMod, int motherMod ); int CalculateCPLife( csArray<uint32_t>& events ); Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-11-23 02:18:45 UTC (rev 2477) +++ trunk/src/server/npcmanager.cpp 2008-11-23 06:02:09 UTC (rev 2478) @@ -1707,7 +1707,7 @@ return; } firstName = NormalizeCharacterName( firstName ); - if ( !psCharCreationManager::FilterName( firstName ) ) + if ( !CharCreationManager::FilterName( firstName ) ) { psserver->SendSystemError( me->clientnum, "The name %s is invalid!", firstName.GetData() ); return; @@ -1722,7 +1722,7 @@ } lastName = NormalizeCharacterName( lastName ); - if ( !psCharCreationManager::FilterName( lastName ) ) + if ( !CharCreationManager::FilterName( lastName ) ) { psserver->SendSystemError( me->clientnum, "The last name %s is invalid!", lastName.GetData() ); return; @@ -1755,7 +1755,7 @@ return; } - if (firstName != prevFirstName && !psCharCreationManager::IsUnique( firstName )) + if (firstName != prevFirstName && !CharCreationManager::IsUnique( firstName )) { psserver->SendSystemError( me->clientnum, "The name %s is not unique!", firstName.GetDataSafe() ); Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2008-11-23 02:18:45 UTC (rev 2477) +++ trunk/src/server/psserver.cpp 2008-11-23 06:02:09 UTC (rev 2478) @@ -507,7 +507,7 @@ } Debug1(LOG_STARTUP, 0, "Started Minigame Manager\n"); - charCreationManager = new psCharCreationManager(); + charCreationManager = new CharCreationManager(); if ( !charCreationManager->Initialize() ) { Error1("Failed to load character creation data"); Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2008-11-23 02:18:45 UTC (rev 2477) +++ trunk/src/server/psserver.h 2008-11-23 06:02:09 UTC (rev 2478) @@ -67,7 +67,7 @@ class CacheManager; class psCharacterLoader; class csRandomGen; -class psCharCreationManager; +class CharCreationManager; class QuestManager; class EconomyManager; class psWorkManager; @@ -504,7 +504,7 @@ CombatManager* combatmanager; csRandomGen * rng; QuestManager * questmanager; - psCharCreationManager* charCreationManager; + CharCreationManager* charCreationManager; csRef<GuildManager> guildmanager; csRef<QuestionManager> questionmanager; csRef<GroupManager> groupmanager; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-25 06:25:34
|
Revision: 2505 http://planeshift.svn.sourceforge.net/planeshift/?rev=2505&view=rev Author: Vengeance2001 Date: 2008-11-25 06:25:29 +0000 (Tue, 25 Nov 2008) Log Message: ----------- Changed psAuthenticationServer to AuthenticationServer for naming consistency. Updated EntityManager and ExchangeManager to use message functors. Modified Paths: -------------- trunk/src/server/authentserver.cpp trunk/src/server/authentserver.h trunk/src/server/bulkobjects/psminigameboard.h trunk/src/server/entitymanager.cpp trunk/src/server/entitymanager.h trunk/src/server/exchangemanager.cpp trunk/src/server/exchangemanager.h trunk/src/server/psserver.cpp trunk/src/server/psserver.h Modified: trunk/src/server/authentserver.cpp =================================================================== --- trunk/src/server/authentserver.cpp 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/authentserver.cpp 2008-11-25 06:25:29 UTC (rev 2505) @@ -73,7 +73,7 @@ }; -psAuthenticationServer::psAuthenticationServer(ClientConnectionSet *pCCS, +AuthenticationServer::AuthenticationServer(ClientConnectionSet *pCCS, UserManager *usermgr, GuildManager *gm) { @@ -82,14 +82,14 @@ guildmanager = gm; msgstringsmessage = NULL; - psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandlePreAuthent),MSGTYPE_PREAUTHENTICATE,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleAuthent),MSGTYPE_AUTHENTICATE,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleDisconnect),MSGTYPE_DISCONNECT,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleAuthCharacter),MSGTYPE_AUTHCHARACTER,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleStatusUpdate),MSGTYPE_CLIENTSTATUS,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AuthenticationServer>(this,&AuthenticationServer::HandlePreAuthent),MSGTYPE_PREAUTHENTICATE,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AuthenticationServer>(this,&AuthenticationServer::HandleAuthent),MSGTYPE_AUTHENTICATE,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AuthenticationServer>(this,&AuthenticationServer::HandleDisconnect),MSGTYPE_DISCONNECT,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AuthenticationServer>(this,&AuthenticationServer::HandleAuthCharacter),MSGTYPE_AUTHCHARACTER,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<AuthenticationServer>(this,&AuthenticationServer::HandleStatusUpdate),MSGTYPE_CLIENTSTATUS,REQUIRE_ANY_CLIENT); } -psAuthenticationServer::~psAuthenticationServer() +AuthenticationServer::~AuthenticationServer() { if (psserver->GetEventManager()) { @@ -103,12 +103,12 @@ delete msgstringsmessage; } -void psAuthenticationServer::HandleMessage(MsgEntry *me,Client *client) +void AuthenticationServer::HandleMessage(MsgEntry *me,Client *client) { // required for backward compatibility with pre-functor days but not used here } -void psAuthenticationServer::HandleAuthCharacter( MsgEntry* me, Client *client ) +void AuthenticationServer::HandleAuthCharacter( MsgEntry* me, Client *client ) { psCharacterPickerMessage charpick( me ); if (!charpick.valid) @@ -153,7 +153,7 @@ } -bool psAuthenticationServer::CheckAuthenticationPreCondition(int clientnum, bool netversionok, const char * sUser) +bool AuthenticationServer::CheckAuthenticationPreCondition(int clientnum, bool netversionok, const char * sUser) { /** * CHECK 1: Is Network protokol compatible? @@ -193,7 +193,7 @@ } -void psAuthenticationServer::HandlePreAuthent(MsgEntry *me, Client *notused) +void AuthenticationServer::HandlePreAuthent(MsgEntry *me, Client *notused) { psPreAuthenticationMessage msg(me); if (!msg.valid) @@ -209,7 +209,7 @@ reply.SendMessage(); } -void psAuthenticationServer::HandleAuthent(MsgEntry *me, Client *notused) +void AuthenticationServer::HandleAuthent(MsgEntry *me, Client *notused) { csTicks start = csGetTicks(); @@ -502,7 +502,7 @@ psserver->GetLogCSV()->Write(CSV_AUTHENT, status); } -void psAuthenticationServer::HandleDisconnect(MsgEntry* me,Client *client) +void AuthenticationServer::HandleDisconnect(MsgEntry* me,Client *client) { psDisconnectMessage mesg(me); @@ -522,7 +522,7 @@ } -void psAuthenticationServer::SendDisconnect(Client* client, const char *reason) +void AuthenticationServer::SendDisconnect(Client* client, const char *reason) { if (client->GetActor()) { @@ -547,7 +547,7 @@ } } -void psAuthenticationServer::SendMsgStrings(int cnum) +void AuthenticationServer::SendMsgStrings(int cnum) { // send message strings hash table to client if (!msgstringsmessage) @@ -564,7 +564,7 @@ msgstringsmessage->SendMessage(); } -void psAuthenticationServer::HandleStatusUpdate(MsgEntry* me, Client* client) +void AuthenticationServer::HandleStatusUpdate(MsgEntry* me, Client* client) { psClientStatusMessage msg(me); // printf("Got ClientStatus message!\n"); Modified: trunk/src/server/authentserver.h =================================================================== --- trunk/src/server/authentserver.h 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/authentserver.h 2008-11-25 06:25:29 UTC (rev 2505) @@ -73,12 +73,12 @@ * "Not Authorized" message. * */ -class psAuthenticationServer : public MessageManager +class AuthenticationServer : public MessageManager { public: /** Initializing Constructor. - * This initializes the psAuthenticationServer object. Storing the + * This initializes the AuthenticationServer object. Storing the * references to the objects asked for. This also subscribes this object * to the message handler listening to messages of type: * - MSGTYPE_AUTHENTICATE @@ -93,7 +93,7 @@ * @param gm: Reference to the guild manager. * @see HandleMessage() , MsgHandler::Subscribe() */ - psAuthenticationServer(ClientConnectionSet *pCCS, + AuthenticationServer(ClientConnectionSet *pCCS, UserManager *usermgr, GuildManager *gm); @@ -102,7 +102,7 @@ * * @see MsgHandler::Unsubscribe() */ - virtual ~psAuthenticationServer(); + virtual ~AuthenticationServer(); /** Handles a subscribed message. * This function handles the messages we subscribed to: Modified: trunk/src/server/bulkobjects/psminigameboard.h =================================================================== --- trunk/src/server/bulkobjects/psminigameboard.h 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/bulkobjects/psminigameboard.h 2008-11-25 06:25:29 UTC (rev 2505) @@ -28,6 +28,7 @@ //============================================================================= // Project Includes //============================================================================= +#include "psstdint.h" //============================================================================= // Local Includes Modified: trunk/src/server/entitymanager.cpp =================================================================== --- trunk/src/server/entitymanager.cpp 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/entitymanager.cpp 2008-11-25 06:25:29 UTC (rev 2505) @@ -135,12 +135,12 @@ usermanager = umanager; - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CELPERSIST,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_USERACTION,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_PERSIST_WORLD_REQUEST,REQUIRE_ANY_CLIENT ); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_PERSIST_ACTOR_REQUEST,REQUIRE_ANY_CLIENT ); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_PERSIST_ALL,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_REQUESTMOVEMENTS,REQUIRE_ANY_CLIENT); +// psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<EntityManager>(this,&EntityManager::HandlePreAuthent), MSGTYPE_CELPERSIST,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<EntityManager>(this,&EntityManager::HandleUserAction), MSGTYPE_USERACTION,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<EntityManager>(this,&EntityManager::HandleWorld) , MSGTYPE_PERSIST_WORLD_REQUEST,REQUIRE_ANY_CLIENT ); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<EntityManager>(this,&EntityManager::HandleActor) , MSGTYPE_PERSIST_ACTOR_REQUEST,REQUIRE_ANY_CLIENT ); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<EntityManager>(this,&EntityManager::HandleAllRequest), MSGTYPE_PERSIST_ALL,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<EntityManager>(this,&EntityManager::SendMovementInfo), MSGTYPE_REQUESTMOVEMENTS,REQUIRE_ANY_CLIENT); EntityManager::clients = clients; @@ -952,6 +952,7 @@ void EntityManager::HandleMessage(MsgEntry* me,Client *client) { + /**************************** switch(me->GetType()) { case MSGTYPE_USERACTION: @@ -970,12 +971,11 @@ SendMovementInfo( me->clientnum ); break; } + ****************************/ } -void EntityManager::HandleAllRequest( MsgEntry* me) +void EntityManager::HandleAllRequest(MsgEntry* me, Client *client) { - Client* client = clients->FindAny(me->clientnum); - // This is not available to regular clients! if ( client->IsSuperClient() ) { @@ -999,9 +999,8 @@ } -void EntityManager::HandleActor(MsgEntry* me) +void EntityManager::HandleActor(MsgEntry* me, Client *client) { - Client* client = clients->FindAny(me->clientnum); if(!client || client->IsSuperClient()) return; @@ -1024,7 +1023,7 @@ chardata->SetLastLoginTime(); } -void EntityManager::SendMovementInfo(int cnum) +void EntityManager::SendMovementInfo(MsgEntry* me, Client *client) { if (moveinfomsg == NULL) // Construct once and reuse { @@ -1051,7 +1050,7 @@ CS_ASSERT( moveinfomsg->valid ); } - moveinfomsg->msg->clientnum = cnum; + moveinfomsg->msg->clientnum = client->GetClientNum(); moveinfomsg->SendMessage(); // Send modifiers too @@ -1059,15 +1058,8 @@ // client->GetActor()->UpdateAllSpeedModifiers(); } -void EntityManager::HandleWorld( MsgEntry* me ) +void EntityManager::HandleWorld( MsgEntry* me, Client *client ) { - Client* client = clients->FindAny(me->clientnum); - if (!client) - { - Error2("Client %d not found!", me->clientnum); - return; - } - if (!client->GetActor() && !CreatePlayer (client)) { Error1("Error while creating player in world!"); @@ -1087,7 +1079,7 @@ psserver->GetWeatherManager()->UpdateClient(client->GetClientNum()); } -void EntityManager::HandleUserAction(MsgEntry* me) +void EntityManager::HandleUserAction(MsgEntry* me, Client *client) { psUserActionMessage actionMsg(me); csString action; @@ -1098,13 +1090,6 @@ return; } - Client* client = clients->Find(me->clientnum); - if (!client) - { - Debug2(LOG_ANY,me->clientnum,"User action from unknown client! Clientnum:%d\n",me->clientnum); - return; - } - gemObject *object = gem->FindObject(actionMsg.target); client->SetTargetObject(object); // have special tracking for this for fast processing of other messages Modified: trunk/src/server/entitymanager.h =================================================================== --- trunk/src/server/entitymanager.h 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/entitymanager.h 2008-11-25 06:25:29 UTC (rev 2505) @@ -87,6 +87,12 @@ ClientConnectionSet* clients, UserManager *usermanager); + void HandleUserAction(MsgEntry* me, Client *client); + void HandleWorld(MsgEntry* me, Client *client); + void HandleActor(MsgEntry* me, Client *client); + void HandleAllRequest(MsgEntry* me, Client *client); + void SendMovementInfo(MsgEntry* me, Client *client); + bool LoadMap (const char* mapname); iSector* FindSector(const char *name); @@ -129,8 +135,6 @@ ClientConnectionSet *GetClients() { return clients; }; psWorld* GetWorld() { return gameWorld; } - void SendMovementInfo(int cnum); - void Teleport( gemObject *subject, gemObject *dest); protected: @@ -141,12 +145,7 @@ bool SamePos(gemObject * actor, iSector * sector, const csVector3 & point); - void HandleUserAction(MsgEntry* me); - void HandleWorld( MsgEntry* me ); - void HandleActor( MsgEntry* me ); - void HandleAllRequest( MsgEntry* me ); - bool SendActorList(Client *client); void LoadFamiliarTypes(); Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/exchangemanager.cpp 2008-11-25 06:25:29 UTC (rev 2505) @@ -1310,17 +1310,15 @@ { clients = pClnts; - psserver->GetEventManager()->Subscribe(this, MSGTYPE_GUIEXCHANGE, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_EXCHANGE_REQUEST, REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGETACTOR); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_EXCHANGE_ACCEPT, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_EXCHANGE_END, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeRequest),MSGTYPE_EXCHANGE_REQUEST, REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGETACTOR); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeAccept),MSGTYPE_EXCHANGE_ACCEPT, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeEnd),MSGTYPE_EXCHANGE_END, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); } ExchangeManager::~ExchangeManager() { if (psserver->GetEventManager()) { - psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_GUIEXCHANGE); psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_EXCHANGE_REQUEST); psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_EXCHANGE_ACCEPT); psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_EXCHANGE_END); @@ -1433,48 +1431,62 @@ } } +void ExchangeManager::HandleExchangeRequest(MsgEntry *me,Client *client) +{ + Notify2( LOG_TRADE, "Trade Requested from %u", client->GetClientNum() ); + psExchangeRequestMsg msg(me); + StartExchange( client, msg.withPlayer ); +} + +void ExchangeManager::HandleExchangeAccept(MsgEntry *me,Client *client) +{ + Notify3( LOG_TRADE, "Exchange %d Accept from %d", client->GetExchangeID(), client->GetClientNum() ); + + Exchange* exchange = GetExchange( client->GetExchangeID() ); + if ( exchange ) + { + if (exchange->HandleAccept(client)) + { + DeleteExchange(exchange); + } + } +} + +void ExchangeManager::HandleExchangeEnd(MsgEntry *me,Client *client) +{ + Notify2( LOG_TRADE, "Trade %d Rejected", client->GetExchangeID() ); + + Exchange* exchange = GetExchange( client->GetExchangeID() ); + if ( exchange ) + { + exchange->HandleEnd(client); + DeleteExchange(exchange); + } + else + { + Warning2( LOG_TRADE, "Trade %d Not located", client->GetExchangeID() ); + } +} + void ExchangeManager::HandleMessage(MsgEntry *me,Client *client) { switch ( me->GetType() ) { case MSGTYPE_EXCHANGE_END: { - Notify2( LOG_TRADE, "Trade %d Rejected", client->GetExchangeID() ); - - Exchange* exchange = GetExchange( client->GetExchangeID() ); - if ( exchange ) - { - exchange->HandleEnd(client); - DeleteExchange(exchange); - } - else - { - Warning2( LOG_TRADE, "Trade %d Not located", client->GetExchangeID() ); - } - + HandleExchangeEnd(me, client); break; } case MSGTYPE_EXCHANGE_REQUEST: { - Notify2( LOG_TRADE, "Trade Requested from %u", client->GetClientNum() ); - psExchangeRequestMsg msg(me); - StartExchange( client, msg.withPlayer ); + HandleExchangeRequest(me, client); break; } case MSGTYPE_EXCHANGE_ACCEPT: { - Notify3( LOG_TRADE, "Exchange %d Accept from %d", client->GetExchangeID(), client->GetClientNum() ); - - Exchange* exchange = GetExchange( client->GetExchangeID() ); - if ( exchange ) - { - if (exchange->HandleAccept(client)) - { - DeleteExchange(exchange); - } - } + HandleExchangeAccept(me, client); break; } } Modified: trunk/src/server/exchangemanager.h =================================================================== --- trunk/src/server/exchangemanager.h 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/exchangemanager.h 2008-11-25 06:25:29 UTC (rev 2505) @@ -334,6 +334,9 @@ void StartExchange( Client* client, bool withPlayer ); virtual void HandleMessage(MsgEntry *pMsg,Client *client); + void HandleExchangeRequest(MsgEntry *me,Client *client); + void HandleExchangeAccept (MsgEntry *me,Client *client); + void HandleExchangeEnd (MsgEntry *me,Client *client); /** Utility function to handle exchange objects */ Exchange * GetExchange(int id); Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/psserver.cpp 2008-11-25 06:25:29 UTC (rev 2505) @@ -464,7 +464,7 @@ actionmanager = csPtr<ActionManager>(new ActionManager( database)); Debug1(LOG_STARTUP,0,"Started Action Manager\n"); - authserver = csPtr<psAuthenticationServer>(new psAuthenticationServer(GetConnections(), usermanager, guildmanager)); + authserver = csPtr<AuthenticationServer>(new AuthenticationServer(GetConnections(), usermanager, guildmanager)); Debug1(LOG_STARTUP,0,"Started Authentication Server\n"); exchangemanager = new ExchangeManager(GetConnections()); Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2008-11-25 04:04:25 UTC (rev 2504) +++ trunk/src/server/psserver.h 2008-11-25 06:25:29 UTC (rev 2505) @@ -44,7 +44,7 @@ struct iChat; class EntityManager; class MsgHandler; // Receive and distributes incoming messages. -class psAuthenticationServer; +class AuthenticationServer; class ChatManager; class GuildManager; class GroupManager; @@ -345,8 +345,8 @@ */ IntroductionManager *GetIntroductionManager() { return intromanager; } - /// Returns a pointer to the psAuthenticationServer - psAuthenticationServer* GetAuthServer() { return authserver; } + /// Returns a pointer to the AuthenticationServer + AuthenticationServer* GetAuthServer() { return authserver; } /** Gets a list of all connected clients. * @@ -538,7 +538,7 @@ csRef<ChatManager> chatmanager; csRef<AdviceManager> advicemanager; csRef<ActionManager> actionmanager; - csRef<psAuthenticationServer> authserver; + csRef<AuthenticationServer> authserver; LogCSV* logcsv; bool MapLoaded; csString motd; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2008-11-28 09:03:19
|
Revision: 2533 http://planeshift.svn.sourceforge.net/planeshift/?rev=2533&view=rev Author: kennygraunke Date: 2008-11-28 09:03:15 +0000 (Fri, 28 Nov 2008) Log Message: ----------- Switched to references instead of pointers in a few places - cleaner. Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/bulkobjects/pscharacterloader.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitemstats.cpp trunk/src/server/bulkobjects/psnpcloader.cpp trunk/src/server/bulkobjects/psquestprereqops.cpp trunk/src/server/bulkobjects/psspell.cpp trunk/src/server/command.cpp trunk/src/server/creationmanager.cpp trunk/src/server/npcmanager.cpp trunk/src/server/progressionmanager.cpp trunk/src/server/spawnmanager.cpp trunk/src/server/spellmanager.cpp trunk/src/server/usermanager.cpp trunk/src/server/workmanager.cpp Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/adminmanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -6437,7 +6437,7 @@ psSkillInfo * skill = CacheManager::GetSingleton().GetSkillByID(i); if (skill == NULL) continue; - unsigned int old_value = pchar->GetSkills()->GetSkillRank(skill->id); + unsigned int old_value = pchar->Skills().GetSkillRank(skill->id); if(data.value == -1) { @@ -6468,7 +6468,7 @@ return; } - unsigned int old_value = pchar->GetSkills()->GetSkillRank(skill->id); + unsigned int old_value = pchar->Skills().GetSkillRank(skill->id); if (data.value == -1) { psserver->SendSystemInfo(me->clientnum, "Current '%s' of '%s' is %u",skill->name.GetDataSafe(), target->GetName(), old_value); Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -3195,27 +3195,25 @@ { if (!strcasecmp(functionName, "GetStatValue")) { - psCharacter *my_char = this; PSITEMSTATS_STAT stat = (PSITEMSTATS_STAT)(int)params[0]; - return (double)my_char->GetAttributes()->GetStat(stat); + return (double) attributes.GetStat(stat); } else if (!strcasecmp(functionName, "GetAverageSkillValue")) { - psCharacter *my_char = this; PSSKILL skill1 = (PSSKILL)(int)params[0]; PSSKILL skill2 = (PSSKILL)(int)params[1]; PSSKILL skill3 = (PSSKILL)(int)params[2]; - double v1 = my_char->GetSkills()->GetSkillRank(skill1); + double v1 = skills.GetSkillRank(skill1); if (skill2!=PSSKILL_NONE) { - double v2 = my_char->GetSkills()->GetSkillRank(skill2); + double v2 = skills.GetSkillRank(skill2); v1 = (v1+v2)/2; } if (skill3!=PSSKILL_NONE) { - double v3 = my_char->GetSkills()->GetSkillRank(skill3); + double v3 = skills.GetSkillRank(skill3); v1 = (v1+v3)/2; } @@ -3227,10 +3225,9 @@ } else if (!strcasecmp(functionName, "GetSkillValue")) { - psCharacter *my_char = this; PSSKILL skill = (PSSKILL)(int)params[0]; - double value = my_char->GetSkills()->GetSkillRank(skill); + double value = skills.GetSkillRank(skill); // always give a small % of melee (unharmed) skill if (skill==PSSKILL_MARTIALARTS && value==0) Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/pscharacter.h 2008-11-28 09:03:15 UTC (rev 2533) @@ -649,9 +649,8 @@ ///Sets if the client should receive notifications about guild members logging in void SetGuildNotifications(bool enabled) { guildNotified = enabled; } - StatSet *GetAttributes() { return &attributes; } - StatSet *GetModifiers() { return &modifiers; } - SkillSet *GetSkills() { return &skills; } + StatSet & Stats() { return attributes; } + SkillSet & Skills() { return skills; } /** * Returns a pointer to the skill cache for this character Modified: trunk/src/server/bulkobjects/pscharacterloader.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacterloader.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/pscharacterloader.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -319,12 +319,12 @@ values.FormatPush("%u",chardata->GetRaceInfo()->uid); values.FormatPush("%u",chardata->GetCharType() ); values.FormatPush("%s",chardata->GetDescription()); - values.FormatPush("%d",chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH, false)); - values.FormatPush("%d",chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY, false)); - values.FormatPush("%d",chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE, false)); - values.FormatPush("%d",chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE, false)); - values.FormatPush("%d",chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL, false)); - values.FormatPush("%d",chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA, false)); + values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH, false)); + values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_AGILITY, false)); + values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE, false)); + values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE, false)); + values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_WILL, false)); + values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA, false)); values.FormatPush("%10.2f",chardata->GetHP()); values.FormatPush("%10.2f",chardata->GetHitPointsMax()); values.FormatPush("%10.2f",chardata->GetMana()); @@ -413,9 +413,9 @@ for (i=0;i<PSSKILL_COUNT;i++) { - unsigned int skillRank=chardata->GetSkills()->GetSkillRank((PSSKILL)i, false); - unsigned int skillY=chardata->GetSkills()->GetSkillKnowledge((PSSKILL)i); - unsigned int skillZ=chardata->GetSkills()->GetSkillPractice((PSSKILL)i); + unsigned int skillRank = chardata->Skills().GetSkillRank((PSSKILL) i, false); + unsigned int skillY = chardata->Skills().GetSkillKnowledge((PSSKILL) i); + unsigned int skillZ = chardata->Skills().GetSkillPractice((PSSKILL) i); SaveCharacterSkill(chardata->GetPID(),i,skillZ,skillY,skillRank); } @@ -665,12 +665,12 @@ targetUpdate->AddField("old_lastname", chardata->GetOldLastName()); targetUpdate->AddField("racegender_id", chardata->GetRaceInfo()->uid); targetUpdate->AddField("character_type", chardata->GetCharType()); - targetUpdate->AddField("base_strength", chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH, false)); - targetUpdate->AddField("base_agility", chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY, false)); - targetUpdate->AddField("base_endurance", chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE, false)); - targetUpdate->AddField("base_intelligence", chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE, false)); - targetUpdate->AddField("base_will", chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL, false)); - targetUpdate->AddField("base_charisma", chardata->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA, false)); + targetUpdate->AddField("base_strength", chardata->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH, false)); + targetUpdate->AddField("base_agility", chardata->Stats().GetStat(PSITEMSTATS_STAT_AGILITY, false)); + targetUpdate->AddField("base_endurance", chardata->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE, false)); + targetUpdate->AddField("base_intelligence", chardata->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE, false)); + targetUpdate->AddField("base_will", chardata->Stats().GetStat(PSITEMSTATS_STAT_WILL, false)); + targetUpdate->AddField("base_charisma", chardata->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA, false)); targetUpdate->AddField("mod_hitpoints", (playerORpet)? chardata->GetHP():chardata->GetHitPointsMax()); targetUpdate->AddField("mod_mana", (playerORpet)?chardata->GetMana():chardata->GetManaMax()); targetUpdate->AddField("stamina_physical", chardata->GetStamina(true)); @@ -826,11 +826,11 @@ // one to the database. for (i=0;i<PSSKILL_COUNT;i++) { - if ( chardata->GetSkills()->GetSkill((PSSKILL)i)->dirtyFlag ) + if (chardata->Skills().GetSkill((PSSKILL) i)->dirtyFlag) { - unsigned int skillY=chardata->GetSkills()->GetSkillKnowledge((PSSKILL)i); - unsigned int skillZ=chardata->GetSkills()->GetSkillPractice((PSSKILL)i); - unsigned int skillRank=chardata->GetSkills()->GetSkillRank((PSSKILL)i, false); + unsigned int skillY = chardata->Skills().GetSkillKnowledge((PSSKILL) i); + unsigned int skillZ = chardata->Skills().GetSkillPractice((PSSKILL) i); + unsigned int skillRank = chardata->Skills().GetSkillRank((PSSKILL) i, false); UpdateCharacterSkill(chardata->GetPID(),i,skillZ,skillY,skillRank); } } Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/psitem.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -1409,7 +1409,7 @@ int psItem::GetAttackAnimID(psCharacter *pschar) { PSSKILL skill = current_stats->Weapon().Skill(PSITEMSTATS_WEAPONSKILL_INDEX_0); - unsigned int curr_level = pschar->GetSkills()->GetSkillRank(skill); + unsigned int curr_level = pschar->Skills().GetSkillRank(skill); return current_stats->GetAttackAnimID(curr_level); } @@ -2426,7 +2426,7 @@ itemQuality = ""; int idSkill = GetIdentifySkill(); int idMin = GetIdentifyMinSkill(); - if (!idSkill || ((uint)idMin < client->GetCharacterData()->GetSkills()->GetSkillRank((PSSKILL)idSkill))) + if (!idSkill || (uint) idMin < client->GetCharacterData()->Skills().GetSkillRank((PSSKILL) idSkill)) { // If the item is an average stackable type object it has no max quality so don't // send that information to the client since it is not applicable. @@ -2668,7 +2668,7 @@ int priSkill = skillArray->Get(count)->priSkillId; if(priSkill != 0) { - if(skillArray->Get(count)->minPriSkill >= (int)character->GetSkills()->GetSkillRank((PSSKILL)priSkill)) + if (skillArray->Get(count)->minPriSkill >= (int) character->Skills().GetSkillRank((PSSKILL) priSkill)) { return; } @@ -2678,7 +2678,7 @@ int secSkill = skillArray->Get(count)->secSkillId; if(secSkill != 0) { - if(skillArray->Get(count)->minSecSkill >= (int)character->GetSkills()->GetSkillRank((PSSKILL)priSkill)) + if (skillArray->Get(count)->minSecSkill >= (int)character->Skills().GetSkillRank((PSSKILL)priSkill)) { return; } @@ -2701,7 +2701,7 @@ int priSkill = craftArray->Get(count)->priSkillId; if(priSkill != 0) { - if(craftArray->Get(count)->minPriSkill >= (int)character->GetSkills()->GetSkillRank((PSSKILL)priSkill)) + if (craftArray->Get(count)->minPriSkill >= (int) character->Skills().GetSkillRank((PSSKILL) priSkill)) { continue; } @@ -2711,7 +2711,7 @@ int secSkill = craftArray->Get(count)->secSkillId; if(secSkill != 0) { - if(craftArray->Get(count)->minSecSkill >= (int)character->GetSkills()->GetSkillRank((PSSKILL)secSkill)) + if (craftArray->Get(count)->minSecSkill >= (int) character->Skills().GetSkillRank((PSSKILL) secSkill)) { continue; } Modified: trunk/src/server/bulkobjects/psitemstats.cpp =================================================================== --- trunk/src/server/bulkobjects/psitemstats.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/psitemstats.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -1227,8 +1227,8 @@ if ( stat != PSITEMSTATS_STAT_NONE ) { // Stat buffs may be negative; don't use those here - bool usebuff = charData->GetAttributes()->GetBuffVal(stat) > 0; - val = charData->GetAttributes()->GetStat(stat,usebuff); + bool usebuff = charData->Stats().GetBuffVal(stat) > 0; + val = charData->Stats().GetStat(stat, usebuff); // TODO: This should just use the buff always when a move from equipment to bulk can't fail } else @@ -1236,7 +1236,7 @@ PSSKILL skill = CacheManager::GetSingleton().ConvertSkillString(reqs[z].name); if ( skill != PSSKILL_NONE ) { - val = charData->GetSkills()->GetSkillRank( skill ); + val = charData->Skills().GetSkillRank(skill); } } Modified: trunk/src/server/bulkobjects/psnpcloader.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcloader.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/psnpcloader.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -441,12 +441,12 @@ strength = xmlnode->GetAttributeValueAsFloat("str"); will = xmlnode->GetAttributeValueAsFloat("wil"); - npc->GetAttributes()->SetStat(PSITEMSTATS_STAT_AGILITY, (unsigned int)agility); - npc->GetAttributes()->SetStat(PSITEMSTATS_STAT_CHARISMA, (unsigned int)charisma); - npc->GetAttributes()->SetStat(PSITEMSTATS_STAT_ENDURANCE, (unsigned int)endurance); - npc->GetAttributes()->SetStat(PSITEMSTATS_STAT_INTELLIGENCE, (unsigned int)intelligence); - npc->GetAttributes()->SetStat(PSITEMSTATS_STAT_STRENGTH, (unsigned int)strength); - npc->GetAttributes()->SetStat(PSITEMSTATS_STAT_WILL, (unsigned int)will); + npc->Stats().SetStat(PSITEMSTATS_STAT_AGILITY, (unsigned int)agility); + npc->Stats().SetStat(PSITEMSTATS_STAT_CHARISMA, (unsigned int)charisma); + npc->Stats().SetStat(PSITEMSTATS_STAT_ENDURANCE, (unsigned int)endurance); + npc->Stats().SetStat(PSITEMSTATS_STAT_INTELLIGENCE, (unsigned int)intelligence); + npc->Stats().SetStat(PSITEMSTATS_STAT_STRENGTH, (unsigned int)strength); + npc->Stats().SetStat(PSITEMSTATS_STAT_WILL, (unsigned int)will); } @@ -544,7 +544,7 @@ psSkillInfo* skillInfo = CacheManager::GetSingleton().GetSkillByName(skill); if (skillInfo!=NULL) { - npc->GetSkills()->SetSkillRank(skillInfo->id, value); + npc->Skills().SetSkillRank(skillInfo->id, value); } else { CPrintf(CON_WARNING, "Unknown skill '%s'... skipping\n",skill.GetData()); @@ -1020,12 +1020,12 @@ csRef<iDocumentNode> statsNode = npcRoot->CreateNodeBefore(CS_NODE_ELEMENT); statsNode->SetValue("stats"); - statsNode->SetAttributeAsInt("agi", (int)npc->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY, false)); - statsNode->SetAttributeAsInt("cha", (int)npc->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA, false)); - statsNode->SetAttributeAsInt("end", (int)npc->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE, false)); - statsNode->SetAttributeAsInt("int", (int)npc->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE, false)); - statsNode->SetAttributeAsInt("str", (int)npc->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH, false)); - statsNode->SetAttributeAsInt("wil", (int)npc->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL, false)); + statsNode->SetAttributeAsInt("agi", (int)npc->Stats().GetStat(PSITEMSTATS_STAT_AGILITY, false)); + statsNode->SetAttributeAsInt("cha", (int)npc->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA, false)); + statsNode->SetAttributeAsInt("end", (int)npc->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE, false)); + statsNode->SetAttributeAsInt("int", (int)npc->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE, false)); + statsNode->SetAttributeAsInt("str", (int)npc->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH, false)); + statsNode->SetAttributeAsInt("wil", (int)npc->Stats().GetStat(PSITEMSTATS_STAT_WILL, false)); } @@ -1433,7 +1433,7 @@ skillsNode->SetValue("skills"); for (int i=0;i<PSSKILL_COUNT;i++) { - unsigned int rank = npc->GetSkills()->GetSkillRank((PSSKILL)i); + unsigned int rank = npc->Skills().GetSkillRank((PSSKILL)i); if (rank) { csRef<iDocumentNode> skillNode = skillsNode->CreateNodeBefore(CS_NODE_ELEMENT); Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -447,7 +447,7 @@ bool psQuestPrereqOpSkill::Check(psCharacter * character) { - unsigned int skill_val = character->GetSkills()->GetSkillRank(skill->id); + unsigned int skill_val = character->Skills().GetSkillRank(skill->id); if(max && skill_val > max) { Modified: trunk/src/server/bulkobjects/psspell.cpp =================================================================== --- trunk/src/server/bulkobjects/psspell.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/bulkobjects/psspell.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -608,9 +608,9 @@ if (targetData) { if ( saveThrow->statSave != PSITEMSTATS_STAT_NONE ) - playerAttrib = (int)targetData->GetAttributes()->GetStat( saveThrow->statSave ); + playerAttrib = (int) targetData->Stats().GetStat(saveThrow->statSave); else if ( saveThrow->skillSave != PSSKILL_NONE ) - playerAttrib = (int)targetData->GetSkills()->GetSkillRank( saveThrow->skillSave ); + playerAttrib = (int) targetData->Skills().GetSkillRank(saveThrow->skillSave); } if ( playerAttrib != -1.0 ) { Modified: trunk/src/server/command.cpp =================================================================== --- trunk/src/server/command.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/command.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -2063,12 +2063,12 @@ CPrintf(CON_CMDOUTPUT ,"Stat Base Buff\n"); { - CPrintf(CON_CMDOUTPUT ,"STR %7.1f\t%7.1f\n",(float)charData->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH, false), (float)charData->GetAttributes()->GetBuffVal(PSITEMSTATS_STAT_STRENGTH) ); - CPrintf(CON_CMDOUTPUT ,"AGI %7.1f\t%7.1f\n",(float)charData->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY, false), (float)charData->GetAttributes()->GetBuffVal(PSITEMSTATS_STAT_AGILITY)); - CPrintf(CON_CMDOUTPUT ,"END %7.1f\t%7.1f\n",(float)charData->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE, false), (float)charData->GetAttributes()->GetBuffVal(PSITEMSTATS_STAT_ENDURANCE)); - CPrintf(CON_CMDOUTPUT ,"INT %7.1f\t%7.1f\n",(float)charData->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE,false), (float)charData->GetAttributes()->GetBuffVal(PSITEMSTATS_STAT_INTELLIGENCE)); - CPrintf(CON_CMDOUTPUT ,"WIL %7.1f\t%7.1f\n",(float)charData->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL,false), (float)charData->GetAttributes()->GetBuffVal(PSITEMSTATS_STAT_WILL)); - CPrintf(CON_CMDOUTPUT ,"CHA %7.1f\t%7.1f\n",(float)charData->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA, false),(float)charData->GetAttributes()->GetBuffVal(PSITEMSTATS_STAT_CHARISMA) ); + CPrintf(CON_CMDOUTPUT ,"STR %7.1f\t%7.1f\n",(float)charData->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH, false), (float)charData->Stats().GetBuffVal(PSITEMSTATS_STAT_STRENGTH) ); + CPrintf(CON_CMDOUTPUT ,"AGI %7.1f\t%7.1f\n",(float)charData->Stats().GetStat(PSITEMSTATS_STAT_AGILITY, false), (float)charData->Stats().GetBuffVal(PSITEMSTATS_STAT_AGILITY)); + CPrintf(CON_CMDOUTPUT ,"END %7.1f\t%7.1f\n",(float)charData->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE, false), (float)charData->Stats().GetBuffVal(PSITEMSTATS_STAT_ENDURANCE)); + CPrintf(CON_CMDOUTPUT ,"INT %7.1f\t%7.1f\n",(float)charData->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE,false), (float)charData->Stats().GetBuffVal(PSITEMSTATS_STAT_INTELLIGENCE)); + CPrintf(CON_CMDOUTPUT ,"WIL %7.1f\t%7.1f\n",(float)charData->Stats().GetStat(PSITEMSTATS_STAT_WILL,false), (float)charData->Stats().GetBuffVal(PSITEMSTATS_STAT_WILL)); + CPrintf(CON_CMDOUTPUT ,"CHA %7.1f\t%7.1f\n",(float)charData->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA, false),(float)charData->Stats().GetBuffVal(PSITEMSTATS_STAT_CHARISMA) ); } CPrintf(CON_CMDOUTPUT ,"Experience points(W) %7u\n",charData->GetExperiencePoints()); @@ -2083,9 +2083,9 @@ continue; } - unsigned int z = charData->GetSkills()->GetSkillPractice(info->id); - unsigned int y = charData->GetSkills()->GetSkillKnowledge(info->id); - unsigned int rank = charData->GetSkills()->GetSkillRank(info->id); + unsigned int z = charData->Skills().GetSkillPractice(info->id); + unsigned int y = charData->Skills().GetSkillKnowledge(info->id); + unsigned int rank = charData->Skills().GetSkillRank(info->id); if ( z == 0 && y == 0 && rank == 0 ) Modified: trunk/src/server/creationmanager.cpp =================================================================== --- trunk/src/server/creationmanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/creationmanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -1007,7 +1007,7 @@ int z; for ( z = 0; z < PSITEMSTATS_STAT_COUNT; z++ ) { - unsigned int value = chardata->GetAttributes()->GetStat( (PSITEMSTATS_STAT)z); + unsigned int value = chardata->Stats().GetStat((PSITEMSTATS_STAT) z); if ( value > 0 ) { mesg.AddStat( value, CacheManager::GetSingleton().Attribute2String((PSITEMSTATS_STAT)z)); @@ -1015,7 +1015,7 @@ } for ( z = 0; z < PSSKILL_COUNT; z++ ) { - unsigned int rank = chardata->GetSkills()->GetSkillRank( (PSSKILL)z, false ); + unsigned int rank = chardata->Skills().GetSkillRank((PSSKILL) z, false); psSkillInfo* info = CacheManager::GetSingleton().GetSkillByID(z); csString name("Not found"); Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/npcmanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -305,7 +305,7 @@ if ( owner ) { actorvar->SetObject( this->owner->GetCharacterData() ); - skill->SetValue( owner->GetCharacterData()->GetSkills()->GetSkillRank(PSSKILL_EMPATHY) ); + skill->SetValue(owner->GetCharacterData()->Skills().GetSkillRank(PSSKILL_EMPATHY)); maxPetTime->Execute(); MathScriptVar* timeValue = maxPetTime->GetVar("MaxTime"); @@ -1436,7 +1436,7 @@ pet->SetTarget( owner->GetActor() ); } QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_FOLLOW ); - owner->GetCharacterData()->GetSkills()->AddSkillPractice(PSSKILL_EMPATHY, 1); + owner->GetCharacterData()->Skills().AddSkillPractice(PSSKILL_EMPATHY, 1); } } else @@ -1451,7 +1451,7 @@ if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 1)) { QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_STAY ); - owner->GetCharacterData()->GetSkills()->AddSkillPractice(PSSKILL_EMPATHY, 1); + owner->GetCharacterData()->Skills().AddSkillPractice(PSSKILL_EMPATHY, 1); } } else @@ -1572,7 +1572,7 @@ owner->SetFamiliar( pet ); // Send OwnerActionLogon Perception pet->SetOwner( owner->GetActor() ); - owner->GetCharacterData()->GetSkills()->AddSkillPractice(PSSKILL_EMPATHY, 1); + owner->GetCharacterData()->Skills().AddSkillPractice(PSSKILL_EMPATHY, 1); } else { @@ -1627,7 +1627,7 @@ stance.stance_id = words.GetInt( 0 ); } QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_ATTACK ); - owner->GetCharacterData()->GetSkills()->AddSkillPractice(PSSKILL_EMPATHY, 1); + owner->GetCharacterData()->Skills().AddSkillPractice(PSSKILL_EMPATHY, 1); } } else @@ -1648,7 +1648,7 @@ if (CanPetHearYou(me->clientnum, owner, pet, typeStr) && WillPetReact(me->clientnum, owner, pet, typeStr, 4)) { QueueOwnerCmdPerception( owner->GetActor(), pet, psPETCommandMessage::CMD_STOPATTACK ); - owner->GetCharacterData()->GetSkills()->AddSkillPractice(PSSKILL_EMPATHY, 1); + owner->GetCharacterData()->Skills().AddSkillPractice(PSSKILL_EMPATHY, 1); } } else @@ -1879,7 +1879,7 @@ for (int i=0; i<(int)g->GetMemberCount(); i++) { outbound->msg->Add(g->GetMember(i)->GetEID().Unbox()); - outbound->msg->Add( (int8_t) g->GetMember(i)->GetCharacterData()->GetSkills()->GetBestSkillSlot(true)); + outbound->msg->Add( (int8_t) g->GetMember(i)->GetCharacterData()->Skills().GetBestSkillSlot(true)); } cmd_count++; @@ -2221,12 +2221,12 @@ psPetSkillMessage newmsg(client->GetClientNum(), psPetSkillMessage::DESCRIPTION, buff, - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_AGILITY)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_WILL)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA)), (unsigned int)(chr->GetHP()), (unsigned int)(chr->GetMana()), (unsigned int)(chr->GetStamina(true)), @@ -2246,119 +2246,7 @@ } break; } - // case psPetSkillMessage::BUY_SKILL: - // { - // CPrintf(CON_DEBUG, "---------------Buying Skill-------------\n"); - // csRef<iDocumentSystem> xml = csPtr<iDocumentSystem>(new csTinyDocumentSystem); - // CS_ASSERT( xml ); - // - // csRef<iDocument> invList = xml->CreateDocument(); - - // const char* error = invList->Parse( msg.commandData); - // if ( error ) - // { - // Error2("Error in XML: %s", error ); - // CPrintf(CON_DEBUG, " Error in XML\n"); - // return; - // } - - // csRef<iDocumentNode> root = invList->GetRoot(); - //if(!root) - //{ - // Error1("No XML root"); - // return; - //} - // csRef<iDocumentNode> topNode = root->GetNode("B"); - //if(!topNode) - //{ - // Error1("No <B> tag"); - // return; - //} - // - // csString skillName = topNode->GetAttributeValue("NAME"); - //if(!skillName || (skillName=="")) - //{ - // psserver->SendSystemError(client->GetClientNum(), "You don't have any skill selected."); - // return; - //} - - // psSkillInfo * info = CacheManager::GetSingleton().GetSkillByName(skillName); - // CPrintf(CON_DEBUG, " Looking for: %s\n", (const char*)skillName); - // - // if (!info) - // { - // Error2("No skill with name %s found!",skillName.GetData()); - // Error2("Full Data Sent from Client was: %s\n", msg.commandData.GetData() ); - // CPrintf(CON_DEBUG, " No Skill Found\n"); - // return; - // } - - // psCharacter * character = client->GetCharacterData(); - - // if (character->GetTrainer() == NULL) - // { - // psserver->SendSystemInfo(client->GetClientNum(), - // "Can't buy skills when not training!"); - // return; - // } - // - // gemActor* actorTrainer = character->GetTrainer()->GetActor(); - // if ( actorTrainer ) - // { - // if ( character->GetActor()->RangeTo(actorTrainer) > RANGE_TO_SELECT ) - // { - // psserver->SendSystemInfo(client->GetClientNum(), - // "Need to get a bit closer to understand the training."); - // return; - // } - // } - - // - // - // CPrintf(CON_DEBUG, " PP available: %d\n", character->GetProgressionPoints() ); - // - // // Test for progression points - // if (character->GetProgressionPoints() <= 0) - // { - // psserver->SendSystemInfo(client->GetClientNum(), - // "You don't have any progression points!"); - // return; - // } - - // // Test for money - // - // if (info->price > character->Money()) - // { - // psserver->SendSystemInfo(client->GetClientNum(), - // "You don't have the money to buy this skill!"); - // return; - // } - // if ( !character->CanTrain( info->id ) ) - // { - // psserver->SendSystemInfo(client->GetClientNum(), - // "You cannot train this skill any higher yet!"); - // return; - // } - // - // int current = character->GetSkills()->GetSkillRank((PSSKILL)info->id); - // float faction = actorTrainer->GetRelativeFaction(character->GetActor()); - // if ( !character->GetTrainer()->GetTrainerInfo()->TrainingInSkill((PSSKILL)info->id, current, faction)) - // { - // psserver->SendSystemInfo(client->GetClientNum(), - // "You cannot train this skill currently."); - // return; - // } - - // character->UseProgressionPoints(1); - // character->SetMoney(character->Money()-info->price); - // character->Train(info->id,1); - // SendSkillList(client,true,info->id); - // - // psserver->SendSystemInfo(client->GetClientNum(), "You've received some %s training", skillName.GetData()); - // - // break; - // } case psPetSkillMessage::QUIT: { //client->GetCharacterData()->SetTrainer(NULL); @@ -2395,40 +2283,18 @@ return; } - Skill * charSkill = character->GetSkills()->GetSkill( (PSSKILL)skillID ); + Skill * charSkill = character->Skills().GetSkill((PSSKILL) skillID); if (charSkill == NULL) { Error3("Can't find skill %d in character %s", skillID, ShowID(character->GetPID())); return; } - // // If we are training, send skills that the trainer is providing education in only - // if ( - // !trainerInfo - // || - // trainerInfo->TrainingInSkill((PSSKILL)skillID, character->GetSkills()->GetSkillRank((PSSKILL)skillID), faction) - // ) - // { - // bool stat = info->id == PSSKILL_AGI || - // info->id == PSSKILL_CHA || - // info->id == PSSKILL_END || - // info->id == PSSKILL_INT || - // info->id == PSSKILL_WILL || - // info->id == PSSKILL_STR; - - // if(!found) // Get the row id the client will use - // { - // realID++; - // if(info->id == focus) - // found = true; - // } - csString escpxml = EscpXML(info->name); buff.AppendFmt("<SKILL NAME=\"%s\" R=\"%i\" Y=\"%i\" YC=\"%i\" Z=\"%i\" ZC=\"%i\" CAT=\"%d\"/>", escpxml.GetData(), charSkill->rank, charSkill->y, charSkill->yCost, charSkill->z, charSkill->zCost, info->category); - //} } buff.Append("</L>"); @@ -2436,12 +2302,12 @@ psPetSkillMessage newmsg(client->GetClientNum(), psPetSkillMessage::SKILL_LIST, buff, - (unsigned int)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH), - (unsigned int)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE), - (unsigned int)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY), - (unsigned int)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE), - (unsigned int)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL), - (unsigned int)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA), + (unsigned int)chr->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH), + (unsigned int)chr->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE), + (unsigned int)chr->Stats().GetStat(PSITEMSTATS_STAT_AGILITY), + (unsigned int)chr->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE), + (unsigned int)chr->Stats().GetStat(PSITEMSTATS_STAT_WILL), + (unsigned int)chr->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA), (unsigned int)chr->GetHP(), (unsigned int)chr->GetMana(), (unsigned int)chr->GetStamina(true), Modified: trunk/src/server/progressionmanager.cpp =================================================================== --- trunk/src/server/progressionmanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/progressionmanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -818,9 +818,9 @@ case CON: case STA: if (base || findBase) - return targetChar->GetAttributes()->GetStat(statToAttrib[stat], false); + return targetChar->Stats().GetStat(statToAttrib[stat], false); else - return targetChar->GetAttributes()->GetStat(statToAttrib[stat], true); + return targetChar->Stats().GetStat(statToAttrib[stat], true); break; case ATTACK: return targetChar->GetAttackValueModifier(); @@ -954,12 +954,12 @@ { if (base) { - targetChar->GetAttributes()->SetStat(statToAttrib[stat],(unsigned)newValue); + targetChar->Stats().SetStat(statToAttrib[stat], (unsigned) newValue); targetChar->CalculateEquipmentModifiers(); } else { - targetChar->GetAttributes()->BuffStat(statToAttrib[stat],unsigned(newValue-oldValue)); + targetChar->Stats().BuffStat(statToAttrib[stat], unsigned(newValue-oldValue)); targetChar->CalculateEquipmentModifiers(); } break; @@ -1293,14 +1293,14 @@ if (isBuff) { - character->GetSkills()->BuffSkillRank( skill, adjustValue ); + character->Skills().BuffSkillRank(skill, adjustValue); result = adjustValue; } else { - oldSkillRank = character->GetSkills()->GetSkillRank(skill, false); + oldSkillRank = character->Skills().GetSkillRank(skill, false); result = adjustValue + (int) (setValue ? 0 : oldSkillRank); - character->GetSkills()->SetSkillRank(skill, (int) result); + character->Skills().SetSkillRank(skill, (int) result); } int delay = GetDelay(actor, target); @@ -4769,12 +4769,12 @@ psGUISkillMessage::DESCRIPTION, buff, NULL, - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL)), - (unsigned int)(chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_AGILITY)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_WILL)), + (unsigned int)(chr->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA)), (unsigned int)(chr->GetHP()), (unsigned int)(chr->GetMana()), (unsigned int)(chr->GetStamina(true)), @@ -4891,7 +4891,7 @@ return; } - unsigned int current = character->GetSkills()->GetSkillRank((PSSKILL)info->id, false); + unsigned int current = character->Skills().GetSkillRank((PSSKILL) info->id, false); float faction = actorTrainer->GetRelativeFaction(character->GetActor()); if ( !character->GetTrainer()->GetTrainerInfo()->TrainingInSkill((PSSKILL)info->id, current, faction)) { @@ -4948,7 +4948,7 @@ return; } - Skill * charSkill = character->GetSkills()->GetSkill( (PSSKILL)skillID ); + Skill *charSkill = character->Skills().GetSkill((PSSKILL) skillID); if (charSkill == NULL) { Error3("Can't find skill %d in character %s", skillID, ShowID(character->GetPID())); @@ -4959,7 +4959,7 @@ if ( !trainerInfo || - trainerInfo->TrainingInSkill((PSSKILL)skillID, character->GetSkills()->GetSkillRank((PSSKILL)skillID, false), faction) + trainerInfo->TrainingInSkill((PSSKILL) skillID, character->Skills().GetSkillRank((PSSKILL) skillID, false), faction) ) { bool stat = info->id == PSSKILL_AGI || @@ -4992,32 +4992,32 @@ unsigned int actualStat; if (info->category != 0) - actualStat = character->GetSkills()->GetSkillRank((PSSKILL)skillID); + actualStat = character->Skills().GetSkillRank((PSSKILL) skillID); else { if(info->name=="Strength") { - actualStat=character->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH); + actualStat=character->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH); } else if(info->name== "Endurance") { - actualStat=character->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE); + actualStat=character->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE); } else if(info->name== "Agility") { - actualStat=character->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY); + actualStat=character->Stats().GetStat(PSITEMSTATS_STAT_AGILITY); } else if(info->name== "Intelligence") { - actualStat=character->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE); + actualStat=character->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE); } else if(info->name== "Will") { - actualStat=character->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL); + actualStat=character->Stats().GetStat(PSITEMSTATS_STAT_WILL); } else { - actualStat=character->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA); + actualStat=character->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA); } } @@ -5053,12 +5053,12 @@ psGUISkillMessage::SKILL_LIST, "", skills, - (unsigned int)character->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH), - (unsigned int)character->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE), - (unsigned int)character->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY), - (unsigned int)character->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE), - (unsigned int)character->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL), - (unsigned int)character->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA), + (unsigned int)character->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH), + (unsigned int)character->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE), + (unsigned int)character->Stats().GetStat(PSITEMSTATS_STAT_AGILITY), + (unsigned int)character->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE), + (unsigned int)character->Stats().GetStat(PSITEMSTATS_STAT_WILL), + (unsigned int)character->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA), (unsigned int)character->GetHP(), (unsigned int)character->GetMana(), (unsigned int)character->GetStamina(true), Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/spawnmanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -1830,13 +1830,13 @@ return 1000.0; } - // Use the mob's attribustes to calculate modifier cost cap - modifierCostCalc->GetOrCreateVar("Str")->SetValue((double)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_STRENGTH)); - modifierCostCalc->GetOrCreateVar("End")->SetValue((double)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_ENDURANCE)); - modifierCostCalc->GetOrCreateVar("Agi")->SetValue((double)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_AGILITY)); - modifierCostCalc->GetOrCreateVar("Int")->SetValue((double)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_INTELLIGENCE)); - modifierCostCalc->GetOrCreateVar("Will")->SetValue((double)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_WILL)); - modifierCostCalc->GetOrCreateVar("Cha")->SetValue((double)chr->GetAttributes()->GetStat(PSITEMSTATS_STAT_CHARISMA)); + // Use the mob's attributes to calculate modifier cost cap + modifierCostCalc->GetOrCreateVar("Str")->SetValue((double)chr->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH)); + modifierCostCalc->GetOrCreateVar("End")->SetValue((double)chr->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE)); + modifierCostCalc->GetOrCreateVar("Agi")->SetValue((double)chr->Stats().GetStat(PSITEMSTATS_STAT_AGILITY)); + modifierCostCalc->GetOrCreateVar("Int")->SetValue((double)chr->Stats().GetStat(PSITEMSTATS_STAT_INTELLIGENCE)); + modifierCostCalc->GetOrCreateVar("Will")->SetValue((double)chr->Stats().GetStat(PSITEMSTATS_STAT_WILL)); + modifierCostCalc->GetOrCreateVar("Cha")->SetValue((double)chr->Stats().GetStat(PSITEMSTATS_STAT_CHARISMA)); modifierCostCalc->GetOrCreateVar("MaxHP")->SetValue((double)chr->GetHitPointsMax()); modifierCostCalc->GetOrCreateVar("MaxMana")->SetValue((double)chr->GetManaMax()); Modified: trunk/src/server/spellmanager.cpp =================================================================== --- trunk/src/server/spellmanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/spellmanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -569,7 +569,7 @@ const psSpell * spell = event->spell; // Check for spell failure - float chanceOfSuccess = spell->ChanceOfSuccess( caster->GetCharacterData()->GetKFactor(), caster->GetCharacterData()->GetSkills()->GetSkillRank( spell->GetSkill() ), caster->GetCharacterData()->GetSkills()->GetSkillRank( spell->GetRelatedStat() ) ); + float chanceOfSuccess = spell->ChanceOfSuccess(caster->GetCharacterData()->GetKFactor(), caster->GetCharacterData()->Skills().GetSkillRank(spell->GetSkill()), caster->GetCharacterData()->Skills().GetSkillRank(spell->GetRelatedStat())); Notify4(LOG_SPELLS, "%s Casting %s with a chance of success = %.2f\n",caster->GetName(), spell->GetName().GetData(), chanceOfSuccess); @@ -600,7 +600,7 @@ if (spell->AffectTargets(this, event, responseEffectName, offset, anchorID, targetID, affectText)) { // Only gain practice if the spell was effective - caster->GetCharacterData()->GetSkills()->AddSkillPractice( spell->GetSkill(), 1 ); + caster->GetCharacterData()->Skills().AddSkillPractice(spell->GetSkill(), 1); } // If there is some sort of visual/particle/audio effect for the target then fire it out. Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/usermanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -672,7 +672,7 @@ void UserManager::SendCharacterDescription(Client * client, psCharacter * charData, bool full, bool simple, const csString & requestor) { - StatSet* playerAttr = client->GetCharacterData()->GetAttributes(); + StatSet & playerAttr = client->GetCharacterData()->Stats(); csString meshName = charData->GetActor()->GetMesh(); bool isSelf = (charData->GetPID() == client->GetCharacterData()->GetPID()); @@ -689,29 +689,30 @@ { desc += "\n\n"; desc += "HP: "+intToStr(int(charData->GetHP()))+" Max HP: "+intToStr(int(charData->GetHitPointsMax()))+"\n"; - SkillSet *sks = charData->GetSkills(); - StatSet *sts = charData->GetAttributes(); + SkillSet & sks = charData->Skills(); + StatSet & sts = charData->Stats(); - for(int skill = 0; sks && sts && skill < PSSKILL_COUNT; skill++) + for (int skill = 0; skill < PSSKILL_COUNT; skill++) { psSkillInfo *skinfo; skinfo = CacheManager::GetSingleton().GetSkillByID((PSSKILL)skill); - if (skinfo != NULL) { + if (skinfo != NULL) + { psCharacterDetailsMessage::NetworkDetailSkill s; s.category = skinfo->category; if (PSSKILL_AGI <= skill && skill <= PSSKILL_WILL) { - // handle stats specially in order to pick up buffs/debuffs - s.text = fmtStatLine(skinfo->name, - sts->GetStat(skilltostat[skill - PSSKILL_AGI], false), - sts->GetStat(skilltostat[skill - PSSKILL_AGI], true)); + // handle stats specially in order to pick up buffs/debuffs + s.text = fmtStatLine(skinfo->name, + sts.GetStat(skilltostat[skill - PSSKILL_AGI], false), + sts.GetStat(skilltostat[skill - PSSKILL_AGI], true)); } else { - s.text = fmtStatLine(skinfo->name, - sks->GetSkillRank(static_cast<PSSKILL>(skill), false), - sks->GetSkillRank(static_cast<PSSKILL>(skill), true)); + s.text = fmtStatLine(skinfo->name, + sks.GetSkillRank(static_cast<PSSKILL>(skill), false), + sks.GetSkillRank(static_cast<PSSKILL>(skill), true)); } skills.Push(s); } @@ -738,7 +739,7 @@ // dead or if we are viewing our own description if ( !charData->impervious_to_attack && (charData->GetMode() != PSCHARACTER_MODE_DEAD) && !isSelf ) { - if ( playerAttr->GetStat(PSITEMSTATS_STAT_INTELLIGENCE) < 50 ) + if (playerAttr.GetStat(PSITEMSTATS_STAT_INTELLIGENCE) < 50) desc.AppendFmt( "\n\nYou try to evaluate the strength of %s, but you have no clue.", charName.GetData() ); else { @@ -754,7 +755,7 @@ "is significantly more powerful than you", "may be impossible to defeat" }; - bool smart = (playerAttr->GetStat(PSITEMSTATS_STAT_INTELLIGENCE) >= 100); + bool smart = (playerAttr.GetStat(PSITEMSTATS_STAT_INTELLIGENCE) >= 100); int CharsLvl = charData->GetCharLevel(); int PlayersLvl = client->GetCharacterData()->GetCharLevel(); Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2008-11-28 04:06:19 UTC (rev 2532) +++ trunk/src/server/workmanager.cpp 2008-11-28 09:03:15 UTC (rev 2533) @@ -391,7 +391,7 @@ if (repairTarget->GetPrice().GetTotal()<300) rankneeded = 0; int skillid = repairTarget->GetBaseStats()->GetCategory()->repairSkillId; - int repairskillrank = client->GetCharacterData()->GetSkills()->GetSkillRank(PSSKILL(skillid)); + int repairskillrank = client->GetCharacterData()->Skills().GetSkillRank(PSSKILL(skillid)); if (repairskillrank<rankneeded) { psserver->SendSystemError(client->GetClientNum(),"This item is too complex for your current repair skill. You cannot repair it." ); @@ -400,7 +400,7 @@ // If skill=0, check if it has at least theoretical training in that skill if (repairskillrank==0) { - if( client->GetCharacterData()->GetSkills()->GetSkill(PSSKILL(skillid))->CanTrain() ) + if( client->GetCharacterData()->Skills().GetSkill(PSSKILL(skillid))->CanTrain() ) { psserver->SendSystemInfo(client->GetClientNum(),"You don't have the skill to repair your %s.",repairTarget->GetName()); return; @@ -527,7 +527,7 @@ psSkillInfo *skill = CacheManager::GetSingleton().GetSkillByID((PSSKILL)skillid); if (skill) { - workEvent->client->GetCharacterData()->GetSkills()->AddSkillPractice((PSSKILL)skillid,1); + workEvent->client->GetCharacterData()->Skills().AddSkillPractice((PSSKILL)skillid,1); } repairTarget->Save(false); } @@ -603,11 +603,11 @@ } // Validate the skill - float cur_skill = client->GetCharacterData()->GetSkills()->GetSkillRank((PSSKILL)nr->skill->id); + float cur_skill = client->GetCharacterData()->Skills().GetSkillRank((PSSKILL)nr->skill->id); // If skill=0, check if it has at least theoretical training in that skill if (cur_skill==0) { - bool fullTrainingReceived = !client->GetCharacterData()->GetSkills()->GetSkill((PSSKILL)nr->skill->id)->CanTrain(); + bool fullTrainingReceived = !client->GetCharacterData()->Skills().GetSkill((PSSKILL)nr->skill->id)->CanTrain(); if (fullTrainingReceived) cur_skill=0.7F; } @@ -682,11 +682,11 @@ } // Validate the skill - float cur_skill = actor->GetCharacterData()->GetSkills()->GetSkillRank((PSSKILL)nr->skill->id); + float cur_skill = actor->GetCharacterData()->Skills().GetSkillRank((PSSKILL)nr->skill->id); // If skill=0, check if it has at least theoretical training in that skill if (cur_skill==0) { - bool fullTrainingReceived = !actor->GetCharacterData()->GetSkills()->GetSkill((PSSKILL)nr->skill->id)->CanTrain(); + bool fullTrainingReceived = !actor->GetCharacterData()->Skills().GetSkill((PSSKILL)nr->skill->id)->CanTrain(); if (fullTrainingReceived) cur_skill=0.7F; } @@ -812,11 +812,11 @@ float roll = psserver->GetRandom(); // Get player skill value - float cur_skill = workerchar->GetSkills()->GetSkillRank((PSSKILL)workEvent->nr->skill->id); + float cur_skill = workerchar->Skills().GetSkillRank((PSSKILL)workEvent->nr->skill->id); // If skill=0, check if it has at least theoretical training in that skill if (cur_skill==0) { - bool fullTrainingReceived = !workerchar->GetSkills()->GetSkill((PSSKILL)workEvent->nr->skill->id)->CanTrain(); + bool fullTrainingReceived = !workerchar->Skills().GetSkill((PSSKILL)workEvent->nr->skill->id)->CanTrain(); if (fullTrainingReceived) cur_skill = 0.7F; // consider the skill somewhat usable } @@ -939,7 +939,7 @@ psSkillInfo *skill = CacheManager::GetSingleton().GetSkillByID((PSSKILL)workEvent->nr->skill->id); if (skill) { - workerchar->GetSkills()->AddSkillPractice(PSSKILL_MINING,1); + workerchar->Skills().AddSkillPractice(PSSKILL_MINING,1); } } } @@ -2527,10 +2527,10 @@ if ( priSkill > 0 ) { // If primary skill is zero, check if this skill should be trained first - unsigned int basePriSkill = owner->GetSkills()->GetSkillRank((PSSKILL)priSkill); + unsigned int basePriSkill = owner->Skills().GetSkillRank((PSSKILL)priSkill); if ( basePriSkill == 0 ) { - if( owner->GetSkills()->GetSkill((PSSKILL)priSkill)->CanTrain() ) + if( owner->Skills().GetSkill((PSSKILL)priSkill)->CanTrain() ) return false; } } @@ -2540,10 +2540,10 @@ if ( secSkill > 0 ) { // If secondary skill is zero, check if this skill should be trained first - unsigned int baseSecSkill = owner->GetSkills()->GetSkillRank((PSSKILL)secSkill); + unsigned int baseSecSkill = owner->Skills().GetSkillRank((PSSKILL)secSkill); if ( baseSecSkill == 0 ) { - if( owner->GetSkills()->GetSkill((PSSKILL)secSkill)->CanTrain() ) + if( owner->Skills().GetSkill((PSSKILL)secSkill)->CanTrain() ) return false; } } @@ -2559,7 +2559,7 @@ if ( priSkill > 0 ) { unsigned int minPriSkill = processCandidate->GetMinPrimarySkill(); - unsigned int basePriSkill = owner->GetSkills()->GetSkillRank((PSSKILL)priSkill); + unsigned int basePriSkill = owner->Skills().GetSkillRank((PSSKILL)priSkill); if ( minPriSkill > basePriSkill ) { return false; @@ -2571,7 +2571,7 @@ if ( secSkill > 0 ) { unsigned int minSecSkill = processCandidate->GetMinSecondarySkill(); - unsigned int baseSecSkill = owner->GetSkills()->GetSkillRank((PSSKILL)secSkill); + unsigned int baseSecSkill = owner->Skills().GetSkillRank((PSSKILL)secSkill); if ( minSecSkill > baseSecSkill ) { return false; @@ -2597,7 +2597,7 @@ if ( priSkill > 0 ) { unsigned int maxPriSkill = processCandidate->GetMaxPrimarySkill(); - unsigned int basePriSkill = owner->GetSkills()->GetSkillRank((PSSKILL)priSkill); + unsigned int basePriSkill = owner->Skills().GetSkillRank((PSSKILL)priSkill); if ( maxPriSkill < basePriSkill ) { return false; @@ -2609,7 +2609,7 @@ if ( secSkill > 0 ) { unsigned int maxSecSkill = processCandidate->GetMaxSecondarySkill(); - unsigned int baseSecSkill = owner->GetSkills()->GetSkillRank((PSSKILL)secSkill); + unsigned int baseSecSkill = owner->Skills().GetSkillRank((PSSKILL)secSkill); if ( maxSecSkill < baseSecSkill ) { return false; @@ -3631,7 +3631,7 @@ } // Get the players skill level using the transformations primary skill - unsigned int basePriSkill = owner->GetSkills()->GetSkillRank((PSSKILL)priSkill); + unsigned int basePriSkill = owner->Skills().GetSkillRank((PSSKILL)priSkill); unsigned int maxPriSkill = process->GetMaxPrimarySkill(); // Get the quality factor for this primary skill @@ -3667,7 +3667,7 @@ { // Get some practice in int priPoints = process->GetPrimaryPracticePts(); - owner->GetSkills()->AddSkillPractice( (PSSKILL)priSkill, priPoints ); + owner->Skills().AddSkillPractice( (PSSKILL)priSkill, priPoints ); if (secure) psserver->SendSystemInfo(clientNum,"Giving practice points %d to skill %d.",priPoints, priSkill); } @@ -3690,7 +3690,7 @@ currentQuality = currentQuality * 2; } - unsigned int baseSecSkill = owner->GetSkills()->GetSkillRank((PSSKILL)secSkill); + unsigned int baseSecSkill = owner->Skills().GetSkillRank((PSSKILL)secSkill); unsigned int maxSecSkill = process->GetMaxSecondarySkill(); // Get the quality factor for this secmary skill @@ -3723,7 +3723,7 @@ { // Get some practice in int secPoints = process->GetSecondaryPracticePts(); - owner->GetSkills()->AddSkillPractice( (PSSKILL)secSkill, secPoints ); + owner->Skills().AddSkillPractice( (PSSKILL)secSkill, secPoints ); if (secure) psserver->SendSystemInfo(clientNum,"Giving practice points %d to skill %d.",... [truncated message content] |
From: <ken...@us...> - 2008-11-29 05:44:45
|
Revision: 2544 http://planeshift.svn.sourceforge.net/planeshift/?rev=2544&view=rev Author: kennygraunke Date: 2008-11-29 05:44:39 +0000 (Sat, 29 Nov 2008) Log Message: ----------- Clean out some pointless wrappers in ProgressionManager. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/progressionmanager.cpp trunk/src/server/progressionmanager.h Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-29 00:10:21 UTC (rev 2543) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-29 05:44:39 UTC (rev 2544) @@ -2054,7 +2054,7 @@ bool FactionResponseOp::Load(iDocumentNode *node) { - faction = psserver->GetProgressionManager()->FindFaction(node->GetAttributeValue("name")); + faction = CacheManager::GetSingleton().GetFaction(node->GetAttributeValue("name")); if (!faction) { Error2("Error: FactionOp faction(%s) not found\n",node->GetAttributeValue("name")); Modified: trunk/src/server/progressionmanager.cpp =================================================================== --- trunk/src/server/progressionmanager.cpp 2008-11-29 00:10:21 UTC (rev 2543) +++ trunk/src/server/progressionmanager.cpp 2008-11-29 05:44:39 UTC (rev 2544) @@ -621,7 +621,7 @@ else aimIsActor = true; // Default - faction = psserver->GetProgressionManager()->FindFaction(node->GetAttributeValue("name") ); + faction = CacheManager::GetSingleton().GetFaction(node->GetAttributeValue("name")); if (!faction) { Error2("Error: FactionOp faction(%s) not found\n",node->GetAttributeValue("name")); @@ -5218,16 +5218,6 @@ return events.Get(name, NULL); } -Faction *ProgressionManager::FindFaction(const char *name) -{ - return CacheManager::GetSingleton().GetFaction(name); -} - -Faction *ProgressionManager::FindFaction(int id) -{ - return CacheManager::GetSingleton().GetFaction(id); -} - void ProgressionManager::QueueEvent(psGameEvent *event) { psserver->GetEventManager()->Push(event); Modified: trunk/src/server/progressionmanager.h =================================================================== --- trunk/src/server/progressionmanager.h 2008-11-29 00:10:21 UTC (rev 2543) +++ trunk/src/server/progressionmanager.h 2008-11-29 05:44:39 UTC (rev 2544) @@ -48,9 +48,7 @@ class psCharacter; class ProgressionEvent; -struct Faction; - class ProgressionManager : public MessageManager { public: @@ -77,9 +75,6 @@ bool AddScript(const char *name, const char *script); void QueueUndoScript(const char *script, int delay, gemActor * actor = NULL, gemObject *target = NULL, psItem *item = NULL, int persistentID = 0); - Faction *FindFaction(const char *name); - Faction *FindFaction(int id); - csHash< csString, csString> &GetAffinityCategories() { return affinitycategories; } // Internal utility functions for the progression system This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-12-03 22:01:09
|
Revision: 2616 http://planeshift.svn.sourceforge.net/planeshift/?rev=2616&view=rev Author: weltall2 Date: 2008-12-03 22:01:05 +0000 (Wed, 03 Dec 2008) Log Message: ----------- even more fixes of uint/int to INSTANCE_ID and removing of hardcoded instance numbers to use the defines in psconst Modified Paths: -------------- trunk/src/server/gem.cpp trunk/src/server/gem.h Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-12-03 21:54:13 UTC (rev 2615) +++ trunk/src/server/gem.cpp 2008-12-03 22:01:05 UTC (rev 2616) @@ -587,7 +587,7 @@ gemObject::gemObject(const char* name, const char* factname, const char* filename, - unsigned int myInstance, + INSTANCE_ID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -1191,7 +1191,7 @@ gemActiveObject::gemActiveObject( const char* name, const char* factname, const char* filename, - unsigned int myInstance, + INSTANCE_ID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -1653,7 +1653,7 @@ gemActor::gemActor( psCharacter *chardata, const char* factname, const char* filename, - unsigned int myInstance, + INSTANCE_ID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -1937,7 +1937,7 @@ { // TODO: Get Death Realm location from db somewhere cel->Teleport( this, -29.2f, -119.0f, 28.2f, 0.0f, "DR01"); - SetInstance(0); + SetInstance(DEFAULT_INSTANCE); } psChar->SetHitPoints(psChar->GetHitPointsMax()); @@ -2632,7 +2632,7 @@ questtester = false; // Always off by default } -void gemActor::SetInstance(unsigned int worldInstance) +void gemActor::SetInstance(INSTANCE_ID worldInstance) { this->worldInstance = worldInstance; } @@ -3950,7 +3950,7 @@ gemContainer::gemContainer(csWeakRef<psItem> item, const char* factname, const char* filename, - unsigned int myInstance, + INSTANCE_ID myInstance, iSector* room, const csVector3& pos, float rotangle, Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-12-03 21:54:13 UTC (rev 2615) +++ trunk/src/server/gem.h 2008-12-03 22:01:05 UTC (rev 2616) @@ -398,7 +398,7 @@ gemActiveObject( const char* name, const char* factname, const char* filename, - unsigned int myInstance, + INSTANCE_ID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -433,7 +433,7 @@ gemItem(csWeakRef<psItem> item, const char* factname, const char* filename, - unsigned int myInstance, + INSTANCE_ID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -477,7 +477,7 @@ gemContainer(csWeakRef<psItem> item, const char* factname, const char* filename, - unsigned int myInstance, + INSTANCE_ID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -655,7 +655,7 @@ psLinearMovement* pcmove; gemActor(psCharacter *chardata, const char* factname,const char* filename, - unsigned int myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); + INSTANCE_ID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); virtual ~gemActor(); @@ -897,7 +897,7 @@ public: gemNPC(psCharacter *chardata, const char* factname,const char* filename, - unsigned int myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); + INSTANCE_ID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); virtual ~gemNPC(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-12-03 23:57:50
|
Revision: 2619 http://planeshift.svn.sourceforge.net/planeshift/?rev=2619&view=rev Author: weltall2 Date: 2008-12-03 23:57:47 +0000 (Wed, 03 Dec 2008) Log Message: ----------- even more fixes of uint/int to INSTANCE_ID and removing of hardcoded instance numbers to use the defines in psconst Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/usermanager.cpp Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-12-03 22:46:54 UTC (rev 2618) +++ trunk/src/server/adminmanager.cpp 2008-12-03 23:57:47 UTC (rev 2619) @@ -3525,7 +3525,7 @@ bool AdminManager::GetTargetOfTeleport(Client *client, psAdminCmdMessage& msg, AdminCmdData& data, iSector * & targetSector, csVector3 & targetPoint, float &yRot, gemObject *subject, INSTANCE_ID &instance) { - instance = 0; + instance = DEFAULT_INSTANCE; // when teleporting to a map if (data.target == "map") Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2008-12-03 22:46:54 UTC (rev 2618) +++ trunk/src/server/usermanager.cpp 2008-12-03 23:57:47 UTC (rev 2619) @@ -949,7 +949,7 @@ // Send player to unique instance else if (entranceType == "ActionID") { - int instance = (int)action->id; + INSTANCE_ID instance = action->id; if (secure) psserver->SendSystemInfo(client->GetClientNum(),"Teleporting to sector %s", sectorName.GetData()); Teleport( client, pos.x, pos.y, pos.z, instance, rot, sectorName ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-12-12 00:04:59
|
Revision: 2672 http://planeshift.svn.sourceforge.net/planeshift/?rev=2672&view=rev Author: Vengeance2001 Date: 2008-12-12 00:04:54 +0000 (Fri, 12 Dec 2008) Log Message: ----------- Added support for AutoGive to ExchangeManager and popup menus. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/exchangemanager.cpp trunk/src/server/exchangemanager.h Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2008-12-11 21:31:59 UTC (rev 2671) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2008-12-12 00:04:54 UTC (rev 2672) @@ -1385,10 +1385,10 @@ objNode->SetAttributeAsInt("slot", slot); } -size_t psCharacterInventory::FindItemStatIndex(psItemStats *itemstats) +size_t psCharacterInventory::FindItemStatIndex(psItemStats *itemstats, size_t startAt) { // Inventory indexes start at 1. 0 is reserved for the "NULL" item. - for (size_t i=1; i<inventory.GetSize(); i++) + for (size_t i=startAt; i<inventory.GetSize(); i++) { if (inventory[i].item->GetBaseStats() == itemstats) return i; Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2008-12-11 21:31:59 UTC (rev 2671) +++ trunk/src/server/bulkobjects/pscharinventory.h 2008-12-12 00:04:54 UTC (rev 2672) @@ -224,7 +224,7 @@ /** Return the direct index into inventory of the defined item */ - size_t FindItemStatIndex(psItemStats *itemstats); + size_t FindItemStatIndex(psItemStats *itemstats,size_t startAt=1); /** Remove an item from the bulk slots. * @param bulkSlot The slot we want to remove the item from. Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2008-12-11 21:31:59 UTC (rev 2671) +++ trunk/src/server/exchangemanager.cpp 2008-12-12 00:04:54 UTC (rev 2672) @@ -35,6 +35,7 @@ #include "util/psconst.h" #include "util/psstring.h" #include "util/eventmanager.h" +#include "util/psxmlparser.h" //============================================================================= // Local Includes @@ -1475,6 +1476,90 @@ psSimpleStringMessage give(me); printf("Got autogive of '%s'\n", give.str.GetDataSafe() ); + + // Expecting xml string like: <l money="0,0,0,0"><item n="Steel Falchion" c="1"/></l> + + csRef<iDocument> doc = ParseString(give.str); + if (doc == NULL) + { + Error2("Failed to parse script %s", give.str.GetData() ); + return; + } + csRef<iDocumentNode> root = doc->GetRoot(); + if(!root) + { + Error1("No XML root in progression script"); + return; + } + csRef<iDocumentNode> topNode = root->GetNode("l"); + if (!topNode) + { + Error1("Could not find <evt> tag in progression script!"); + return; + } + // TODO: Validate that the person has sufficient money here + + // Create a temporary exchange to actually do all the gift giving + StartExchange(client, false); + + // Check to make sure it worked + Exchange* exchange = GetExchange( client->GetExchangeID() ); + if (!exchange) + { + psserver->SendSystemError(client->GetClientNum(),"Could not give requested items."); + return; + } + // Now validate that the person has all the required items here + int exchangeSlot = 0, itemCount = 0; + csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); + while ( iter->HasNext() ) + { + itemCount++; + + csRef<iDocumentNode> node = iter->Next(); + csString itemName = node->GetAttributeValue("n"); + int itemCount = node->GetAttributeValueAsInt("c"); + + // Get the definition of the item from the name + psItemStats *itemstat = CacheManager::GetSingleton().GetBasicItemStatsByName(itemName); + if (itemstat) + { + // Now find that item in the player's inv from the definition + size_t foundIndex = client->GetCharacterData()->Inventory().FindItemStatIndex(itemstat); + if (foundIndex != SIZET_NOT_FOUND) + { + // Now verify that the player has exactly the right count of these items, and not more of them in another slot + psItem *invItem = client->GetCharacterData()->Inventory().GetInventoryIndexItem(foundIndex); + if (invItem->GetStackCount() > itemCount || client->GetCharacterData()->Inventory().FindItemStatIndex(itemstat,foundIndex+1) != SIZET_NOT_FOUND) + { + psserver->SendSystemError(client->GetClientNum(), "You must give the items manually because you have too many %s.",itemName.GetData() ); + HandleExchangeEnd(NULL,client); + break; + } + // Finally add the item to the exchange + client->GetCharacterData()->Inventory().SetExchangeOfferSlot(NULL, invItem->GetLocInParent(), exchangeSlot, itemCount); + exchange->AddItem(client,invItem->GetLocInParent(),itemCount,exchangeSlot); + exchangeSlot++; + } + else + { + psserver->SendSystemError(client->GetClientNum(), "You do not have required item: %s",itemName.GetData() ); + HandleExchangeEnd(NULL,client); + break; + } + } + else + { + Error2("Could not find item stat for autogive, item name '%s'.",itemName.GetData() ); + HandleExchangeEnd(NULL,client); + break; + } + } + // Now execute the exchange if all items were found + if (exchangeSlot == itemCount) // successfully added everything to the exchange + { + HandleExchangeAccept(NULL, client); + } } void ExchangeManager::HandleMessage(MsgEntry *me,Client *client) Modified: trunk/src/server/exchangemanager.h =================================================================== --- trunk/src/server/exchangemanager.h 2008-12-11 21:31:59 UTC (rev 2671) +++ trunk/src/server/exchangemanager.h 2008-12-12 00:04:54 UTC (rev 2672) @@ -191,11 +191,21 @@ * network messages. * * @param fromClient The client that this item came from. - * @param item The item that is being offered. - * @param toSlot Where in the exchange the item is placed. - * @param transaction The transaction item is currently in. + * @param fromSlot The originating slot in the exchange window for the item moved. + * @param stackCount The number of items being moved. + * @param toSlot Where in the exchange the item is to be placed. */ virtual bool AddItem(Client* fromClient, INVENTORY_SLOT_NUMBER fromSlot, int stackCount, int toSlot); + + /** Move an item from one slot to another in the exchange. Will swap items if another + * item is already in the destination slot. Sends out the relevant + * network messages. + * + * @param fromClient The client that this item came from. + * @param fromSlot The originating slot in the exchange window for the item moved. + * @param stackCount The number of items being moved. + * @param toSlot Where in the exchange the item is to be placed. + */ virtual void MoveItem(Client* client, int fromSlot, int stackCount, int toSlot); /* Removes an item from the exchange. Sends out the network messages to update This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-12-13 19:03:31
|
Revision: 2682 http://planeshift.svn.sourceforge.net/planeshift/?rev=2682&view=rev Author: weltall2 Date: 2008-12-13 19:03:29 +0000 (Sat, 13 Dec 2008) Log Message: ----------- Committed a patch for FS#2397 - TRANSIENT - crafting transformations shouldn't schedule removal events patch by peeg Modified Paths: -------------- trunk/src/server/workmanager.cpp trunk/src/server/workmanager.h Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2008-12-13 18:50:30 UTC (rev 2681) +++ trunk/src/server/workmanager.cpp 2008-12-13 19:03:29 UTC (rev 2682) @@ -2998,7 +2998,7 @@ } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Transform all items in equipment into a new item +// Transforms the targeted item into a new item psItem* psWorkManager::TransformTargetItem(psItem* oldItem, uint32 newId, int newQty, float itemQuality) { if (!oldItem) @@ -3033,7 +3033,7 @@ return NULL; // Create item - psItem* newItem = CreateTradeItem(newId, newQty, itemQuality); + psItem* newItem = CreateTradeItem(newId, newQty, itemQuality, true); if(!newItem) { Error2("CreateTradeItem() could not create new item ID #%u", newId); @@ -3073,7 +3073,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Create the new item and return newly created item pointer // The location and saving of item is up to calling routine -psItem* psWorkManager::CreateTradeItem(uint32 newId, int newQty, float itemQuality) +psItem* psWorkManager::CreateTradeItem(uint32 newId, int newQty, float itemQuality, bool transient) { Debug3( LOG_TRADE, 0,"Creating new item id(%u) quantity(%d)\n", newId, newQty ); @@ -3094,7 +3094,7 @@ } // Make a perminent new item - psItem* newItem = baseStats->InstantiateBasicItem( true ); + psItem* newItem = baseStats->InstantiateBasicItem( transient ); if (!newItem) { Error3("CreateTradeItem() could not create item (%s) id #%u", Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2008-12-13 18:50:30 UTC (rev 2681) +++ trunk/src/server/workmanager.h 2008-12-13 19:03:29 UTC (rev 2682) @@ -423,7 +423,7 @@ bool ValidateMind(); bool ValidateStamina(Client* client); bool IsOnHand(uint32 equipId); - psItem* CreateTradeItem(uint32 newId, int newQty, float itemQuality); + psItem* CreateTradeItem(uint32 newId, int newQty, float itemQuality, bool transient = false); bool ValidateTraining(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate); bool ValidateSkills(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate); bool ValidateNotOverSkilled(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-12-23 05:56:59
|
Revision: 2745 http://planeshift.svn.sourceforge.net/planeshift/?rev=2745&view=rev Author: Vengeance2001 Date: 2008-12-23 05:56:55 +0000 (Tue, 23 Dec 2008) Log Message: ----------- Starting to make big demo quest work better with the menus. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/bulkobjects/psnpcdialog.cpp trunk/src/server/exchangemanager.cpp trunk/src/server/gem.cpp trunk/src/server/gem.h trunk/src/server/questmanager.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2008-12-23 02:07:07 UTC (rev 2744) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2008-12-23 05:56:55 UTC (rev 2745) @@ -2512,7 +2512,7 @@ //if (parent of) quest id is an assigned quest, set its last response -bool psCharacter::SetAssignedQuestLastResponse(psQuest *quest, int response) +bool psCharacter::SetAssignedQuestLastResponse(psQuest *quest, int response, gemObject *npc) { int id = 0; @@ -2532,6 +2532,7 @@ assigned_quests[i]->status == PSQUEST_ASSIGNED && !assigned_quests[i]->GetQuest()->GetParentQuest()) { assigned_quests[i]->last_response = response; + assigned_quests[i]->last_response_from_npc_pid = npc->GetPID(); assigned_quests[i]->dirty = true; UpdateQuestAssignments(); return true; @@ -2928,19 +2929,21 @@ db->CommandPump("insert into character_quests " "(player_id, assigner_id, quest_id, " - "status, remaininglockout, last_response) " - "values (%d, %d, %d, '%c', %d, %d) " + "status, remaininglockout, last_response, last_response_npc_id) " + "values (%d, %d, %d, '%c', %d, %d, %d) " "ON DUPLICATE KEY UPDATE " - "status='%c',remaininglockout=%ld,last_response=%ld;", + "status='%c',remaininglockout=%ld,last_response=%ld,last_response_npc_id=%ld;", pid.Unbox(), q->assigner_id.Unbox(), q->GetQuest()->GetID(), q->status, q->lockout_end, q->last_response, + q->last_response_from_npc_pid, q->status, q->lockout_end, - q->last_response ); + q->last_response, + q->last_response_from_npc_pid); Debug3(LOG_QUESTS, pid.Unbox(), "Updated quest info for player %d, quest %d.\n", pid.Unbox(), assigned_quests[i]->GetQuest()->GetID()); assigned_quests[i]->dirty = false; } @@ -2965,10 +2968,11 @@ QuestAssignment *q = new QuestAssignment; q->dirty = false; q->SetQuest(CacheManager::GetSingleton().GetQuestByID( result[i].GetInt("quest_id") ) ); - q->status = result[i]["status"][0]; - q->lockout_end = result[i].GetInt("remaininglockout"); - q->assigner_id = PID(result[i].GetInt("assigner_id")); + q->status = result[i]["status"][0]; + q->lockout_end = result[i].GetInt("remaininglockout"); + q->assigner_id = PID(result[i].GetInt("assigner_id")); q->last_response = result[i].GetInt("last_response"); + q->last_response_from_npc_pid = PID(result[i].GetInt("last_response_npc_id")); if (!q->GetQuest()) { Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2008-12-23 02:07:07 UTC (rev 2744) +++ trunk/src/server/bulkobjects/pscharacter.h 2008-12-23 05:56:55 UTC (rev 2745) @@ -177,8 +177,11 @@ bool dirty; /// When a quest is completed, often it cannot immediately be repeated. This indicate the time when it can be started again. unsigned long lockout_end; - /// To avoid loosing a chain of responses in a quest, last responses are stored per assigned quest. + /// To avoid losing a chain of responses in a quest, last responses are stored per assigned quest. int last_response; + /// To avoid losing a chain of responses in a quest, last responses are stored per assigned quest. + PID last_response_from_npc_pid; + /// Since "quest" member can be nulled without notice, this accessor function attempts to refresh it if NULL csWeakRef<psQuest>& GetQuest(); void SetQuest(psQuest *q); @@ -814,7 +817,7 @@ QuestAssignment *AssignQuest(psQuest *quest, PID assigner_id); bool CompleteQuest(psQuest *quest); void DiscardQuest(QuestAssignment *q, bool force = false); - bool SetAssignedQuestLastResponse(psQuest *quest, int response); + bool SetAssignedQuestLastResponse(psQuest *quest, int response, gemObject *npc); size_t GetNumAssignedQuests() { return assigned_quests.GetSize(); } int GetAssignedQuestLastResponse(size_t i); /// The last_response given by an npc to this player. Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2008-12-23 02:07:07 UTC (rev 2744) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2008-12-23 05:56:55 UTC (rev 2745) @@ -637,18 +637,6 @@ { Debug2(LOG_NPC, currentClient->GetClientNum(),"Found response to: '%s'", copy.GetData()); - // // Removed till we find a better way to manage repeated responses - // // At the moment are annoying since you cannot restart the conversation from - // // a certain point - // int times; - // csTicks when; - // if (dialogHistory.EverSaid(client->GetPID(), resp->id, when, times)) - // { - // return RepeatedResponse(trigger.GetString(), resp, when, times); - // } - // else - // dialogHistory.AddToHistory(client->GetPID(), resp->id, csGetTicks() ); - //May be it is safe not to check for characterdata (now needed for GetLastRespons()) if (currentClient->GetCharacterData() == NULL) { @@ -661,7 +649,7 @@ currentClient->GetCharacterData()->SetLastResponse(resp->id); Debug4(LOG_NPC, currentClient->GetClientNum(),"Setting last response for quest '%s', %d: %s", resp->quest ? resp->quest->GetName() : "none", resp->id, resp->GetResponse()); - currentClient->GetCharacterData()->SetAssignedQuestLastResponse(resp->quest,resp->id); + currentClient->GetCharacterData()->SetAssignedQuestLastResponse(resp->quest,resp->id, currentClient->GetTargetObject() ); } if( resp->menu ) Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2008-12-23 02:07:07 UTC (rev 2744) +++ trunk/src/server/exchangemanager.cpp 2008-12-23 05:56:55 UTC (rev 2745) @@ -1218,7 +1218,7 @@ starterChar.TransferMoney(target->GetCharacterData()); exchangeSuccess = true; client->GetCharacterData()->SetLastResponse(resp->id); - client->GetCharacterData()->SetAssignedQuestLastResponse(resp->quest,resp->id); + client->GetCharacterData()->SetAssignedQuestLastResponse(resp->quest,resp->id, target); return true; } } Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-12-23 02:07:07 UTC (rev 2744) +++ trunk/src/server/gem.cpp 2008-12-23 05:56:55 UTC (rev 2745) @@ -3460,9 +3460,9 @@ UpdateProxList(true); } -void gemNPC::SetupDialog(PID npcID) +void gemNPC::SetupDialog(PID npcID, bool force) { - if (db->SelectSingleNumber("SELECT count(*) FROM npc_knowledge_areas WHERE player_id=%d", npcID.Unbox()) > 0) + if (force || db->SelectSingleNumber("SELECT count(*) FROM npc_knowledge_areas WHERE player_id=%d", npcID.Unbox()) > 0) { npcdialog = new psNPCDialog(this); if (!npcdialog->Initialize(db,npcID)) @@ -3543,13 +3543,14 @@ for (size_t i=0; i < quests.GetSize(); i++) { psQuest *q = quests[i]->GetQuest(); - if (quests[i]->status == 'C') + // If the quest is completed or the last response was not from this NPC, then skip + if (quests[i]->last_response_from_npc_pid != pid || quests[i]->status == 'C') { - printf("Skipping completed quest: %s\n", q->GetName() ); + printf("Skipping completed or irrelevant quest: %s\n", q->GetName() ); continue; } printf("Checking quest %d: %s. ", i, q->GetName() ); - int last_response = client->GetCharacterData()->GetAssignedQuestLastResponse(i); + int last_response = quests[i]->last_response; printf("Got last response %d\n", last_response); if (last_response != -1) // within a quest step Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-12-23 02:07:07 UTC (rev 2744) +++ trunk/src/server/gem.h 2008-12-23 05:56:55 UTC (rev 2745) @@ -909,7 +909,7 @@ virtual AccountID GetSuperclientID() { return superClientID; } virtual void SetSuperclientID(AccountID id) { superClientID = id; } - void SetupDialog(PID npcID); + void SetupDialog(PID npcID,bool force=false); void ReactToPlayerApproach(psNPCCommandsMessage::PerceptionType type,gemActor *player); virtual void AddLootableClient(int cnum); Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2008-12-23 02:07:07 UTC (rev 2744) +++ trunk/src/server/questmanager.cpp 2008-12-23 05:56:55 UTC (rev 2745) @@ -996,6 +996,19 @@ bool QuestManager::AddTrigger(csString& current_npc,const char *trigger,int prior_response_id,int trig_response, psQuest * quest, const psString& postfix) { + // Now that this npc has a trigger associated, we need to make sure it has a KA for itself. + // These have been added manually in the past, but we will do it here automatically now. + gemNPC *npc = dynamic_cast<gemNPC *>(psserver->entitymanager->GetGEM()->FindObject(current_npc)); + if (npc) // specific KA named here + { + // First check for no dialog at all on this npc, and create it if needed + if (!npc->GetNPCDialogPtr()) + { + npc->SetupDialog(npc->GetPID(), true); // force init even though potentially no KA's in database + } + //npc->GetNPCDialogPtr()->AddKnowledgeArea(current_npc); + } + // search for multiple triggers csString temp(trigger); temp.Downcase(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-12-23 06:44:35
|
Revision: 2748 http://planeshift.svn.sourceforge.net/planeshift/?rev=2748&view=rev Author: Vengeance2001 Date: 2008-12-23 06:44:30 +0000 (Tue, 23 Dec 2008) Log Message: ----------- Fixed compile error and some script errors. Modified Paths: -------------- trunk/src/server/combatmanager.cpp trunk/src/server/database/mysql/quest_scripts.sql Modified: trunk/src/server/combatmanager.cpp =================================================================== --- trunk/src/server/combatmanager.cpp 2008-12-23 06:00:40 UTC (rev 2747) +++ trunk/src/server/combatmanager.cpp 2008-12-23 06:44:30 UTC (rev 2748) @@ -580,7 +580,7 @@ // If the target wasn't in combat, it is now... // Note that other modes shouldn't be interrupted automatically - if (gemTarget->GetMode() == PSCHARACTER_MODE_PEACE || || gemTarget->GetMode() == PSCHARACTER_MODE_WORK)) + if (gemTarget->GetMode() == PSCHARACTER_MODE_PEACE || gemTarget->GetMode() == PSCHARACTER_MODE_WORK) { if (gemTarget->GetClient()) // Set reciprocal target gemTarget->GetClient()->SetTargetObject(gemAttacker,true); Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2008-12-23 06:00:40 UTC (rev 2747) +++ trunk/src/server/database/mysql/quest_scripts.sql 2008-12-23 06:44:30 UTC (rev 2748) @@ -715,6 +715,7 @@ Require completion of One Thousand Year Sammich Step 10. Player gives Reginald Hartlepool 1 Red Paperclip. +Menu: Give Reginald your Red Paperclip. Reginald Hartlepool: [Reginald takes the red paperclip and affixes it to his wayward trousers. He grins as the thing holds.] Wondrous And even a little stylish. Why, red paperclip trouser afixers might just become the new style! Thank you oh so much. Ah, yes, your \'sammich\'. Gertie that you conversed with before coming to me should have more. I sold her quite a few of my best creations. I don\'t know why she didn't just give you one in the first place. Here, take a few coins, as I am sure she will not part with such wondrous and savoury feasts cheaply. Give 10 Silver Penny. @@ -751,6 +752,7 @@ Require completion of One Thousand Year Sammich Step 13. Player gives Gertie Hollaback 10 Silver Penny. +Menu: Give Gertie the 10 Silver Pennies. G: Lemme count these har coins first. One...two...tree...five... [Gertie glances up at you and closes her hand.] Ten. All here. Here is yar sammich. Give 1 Sublime Sandwich. Give 10000 Exp. @@ -775,6 +777,7 @@ Require completion of One Thousand Year Sammich Step 15. Player gives Reginald Hartlepool 1 Red Paperclip. +Menu: Give Reginald your Red Paperclip. Reginald Hartlepool: Alas, I have no children to whom I may pass on the marvellous lore of the Sandwich. Since you have proven yourself a remarkably considerate and compassionate being, I have chosen to pass my knowledge on to you. However, you must learn the lore just as a child of my own getting would be required to do. I hereby present to you that which has been passed down in my family for generations unnumbered. I give you... the Sandwich Plate! [Reginald gingerly places an elderly serving plate in your hands. It is quite chipped and contains four sections, each in a different, and somewhat gaudy, colour.] When you have given this magnificent object the reverence due to it, tell me you are ready and I will impart its sublime knowledge to you. Give 1 Sandwich Plate. @@ -945,6 +948,7 @@ Require completion of One Thousand Year Sammich Step 26. Player gives Reginald Hartlepool 1 Sandwich Plate, 1 Artisan Waybread, 1 Corned Beef, 1 Smoked Provolone. +Menu: Give Reginald the 3 ingredients you have gathered and the plate. Reginald Hartlepool: Observe carefully as I put the ingredients in their proper sections on the Sandwich Plate. Now tell me, my good apprentice, which section is empty? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-12-23 21:07:23
|
Revision: 2755 http://planeshift.svn.sourceforge.net/planeshift/?rev=2755&view=rev Author: weltall2 Date: 2008-12-23 21:07:13 +0000 (Tue, 23 Dec 2008) Log Message: ----------- Added a /setkillexp for gm3+ which allows the issuer to set the exp he would give if killed and a flag to enable this is now available under /set (/set givekillexp) Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h trunk/src/server/database/mysql/command_access.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/gem.h trunk/src/server/progressionmanager.cpp Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-12-23 20:39:51 UTC (rev 2754) +++ trunk/src/server/adminmanager.cpp 2008-12-23 21:07:13 UTC (rev 2755) @@ -1039,6 +1039,11 @@ subCmd = words[2]; //save = save to db return true; } + else if (command == "/setkillexp") //allows to set the exp which will be given when killed. It doesn't support targeting on purpose + { + value = words.GetInt(1); + return true; + } return false; } @@ -1432,6 +1437,10 @@ { DisableQuest(me, msg, data, client); } + else if (data.command == "/setkillexp") + { + SetKillExp(me, msg, data, client); + } } void AdminManager::HandleLoadQuest(psAdminCmdMessage& msg, AdminCmdData& data, Client* client) @@ -2039,7 +2048,8 @@ "infiniteinventory = %s\n" "questtester = %s\n" "infinitemana = %s\n" - "instantcast = %s", + "instantcast = %s\n" + "givekillexp = %s", (actor->GetInvincibility())?"on":"off", (!actor->GetVisibility())?"on":"off", (actor->GetViewAllObjects())?"on":"off", @@ -2048,7 +2058,8 @@ (!actor->GetFiniteInventory())?"on":"off", (actor->questtester)?"on":"off", (actor->infinitemana)?"on":"off", - (actor->instantcast)?"on":"off"); + (actor->instantcast)?"on":"off", + (actor->givekillexp)?"on":"off"); return; } else if (data.attribute == "invincible" || data.attribute == "invincibility") @@ -2159,6 +2170,18 @@ else actor->questtester = onoff; } + else if (data.attribute == "givekillexp") + { + if (toggle) + { + actor->givekillexp = !actor->givekillexp; + onoff = actor->givekillexp; + } + else if (actor->givekillexp == onoff) + already = true; + else + actor->givekillexp = onoff; + } else if (!data.attribute.IsEmpty()) { psserver->SendSystemInfo(me->clientnum, "%s is not a supported attribute", data.attribute.GetData() ); @@ -7967,6 +7990,12 @@ } if(targetobject) //just to be sure psserver->SendSystemInfo(client->GetClientNum(),"Targeted: %s", targetobject->GetName()); + gemActor *myact = targetobject->GetActorPtr(); + if(myact && myact->GetCharacterData()) + { + myact->GetCharacterData()->SetKillExperience(10000); + printf("%d\n",myact->GetCharacterData()->GetKillExperience()); + } } void AdminManager::DisableQuest(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client ) @@ -8009,3 +8038,24 @@ //tell the user that everything went fine psserver->SendSystemInfo(client->GetClientNum(),"The quest %s was %s successfully.", quest->GetName(), quest->Active() ? "enabled" : "disabled"); } + +void AdminManager::SetKillExp(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client ) +{ + if(data.value < 0) + { + psserver->SendSystemInfo(client->GetClientNum(),"Only positive exp values are allowed."); + return; + } + + if(client->GetActor() && client->GetActor()->GetCharacterData()) + { + client->GetActor()->GetCharacterData()->SetKillExperience(data.value); + //tell the user that everything went fine + psserver->SendSystemInfo(client->GetClientNum(),"When killed you will now automatically award %d experience",data.value); + } + else + { + //tell the user that everything went wrong + psserver->SendSystemInfo(client->GetClientNum(),"Unable to find your characterData."); + } +} Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2008-12-23 20:39:51 UTC (rev 2754) +++ trunk/src/server/adminmanager.h 2008-12-23 21:07:13 UTC (rev 2755) @@ -112,7 +112,6 @@ bool Valid( int level, const char* command, int clientnum ); bool IsReseting(const csString& command); - struct AdminCmdData { csString player, target, command, subCmd, commandMod; @@ -410,6 +409,14 @@ */ void DisableQuest(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client ); + /** @brief Allows to set an experience given to who kills the issing player + * + * @param me The incoming message from the GM + * @param msg The cracked command message. + * @param client The GM client the command came from. + */ + void SetKillExp(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client ); + /** @brief Adds a petition under the passed user's name to the 'petitions' table in the database. * * Will automatically add the date and time of the petition's submission Modified: trunk/src/server/database/mysql/command_access.sql =================================================================== --- trunk/src/server/database/mysql/command_access.sql 2008-12-23 20:39:51 UTC (rev 2754) +++ trunk/src/server/database/mysql/command_access.sql 2008-12-23 21:07:13 UTC (rev 2755) @@ -149,6 +149,10 @@ INSERT INTO command_group_assignment VALUES( "/morph", 25 ); INSERT INTO command_group_assignment VALUES( "/morph", 24 ); INSERT INTO command_group_assignment VALUES( "/morph", 23 ); +INSERT INTO command_group_assignment VALUES( "/setkillexp", 30 ); +INSERT INTO command_group_assignment VALUES( "/setkillexp", 25 ); +INSERT INTO command_group_assignment VALUES( "/setkillexp", 24 ); +INSERT INTO command_group_assignment VALUES( "/setkillexp", 23 ); # GM2 and above INSERT INTO command_group_assignment VALUES( "command area", 30 ); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2008-12-23 20:39:51 UTC (rev 2754) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2008-12-23 21:07:13 UTC (rev 2755) @@ -1066,7 +1066,13 @@ ALTER TABLE `character_quests` ADD `last_response_npc_id` INT(10) UNSIGNED NULL COMMENT 'This field stores the npc PID who gave the last response. Required for menu filtering.' UPDATE `server_options` SET `option_value`='1211' WHERE `option_name`='db_version'; +#### 1211 - Stefano Angeleri - Added /setkillexp +INSERT INTO command_group_assignment VALUES( "/setkillexp", 30 ); +INSERT INTO command_group_assignment VALUES( "/setkillexp", 25 ); +INSERT INTO command_group_assignment VALUES( "/setkillexp", 24 ); +INSERT INTO command_group_assignment VALUES( "/setkillexp", 23 ); + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-12-23 20:39:51 UTC (rev 2754) +++ trunk/src/server/gem.h 2008-12-23 21:07:13 UTC (rev 2755) @@ -848,6 +848,7 @@ bool instantcast; ///< cast spells instantly bool safefall; ///< no fall damage bool questtester; ///< no quest lockouts + bool givekillexp; ///< give exp if killed bool SetMesh(const char* meshname); bool ResetMesh() { return SetMesh(meshcache); } Modified: trunk/src/server/progressionmanager.cpp =================================================================== --- trunk/src/server/progressionmanager.cpp 2008-12-23 20:39:51 UTC (rev 2754) +++ trunk/src/server/progressionmanager.cpp 2008-12-23 21:07:13 UTC (rev 2755) @@ -4680,8 +4680,8 @@ Debug1(LOG_COMBAT, me->clientnum,"Progression Manager handling Death Event\n"); psDeathEvent evt(me); - // Only do progression if dead guy is an NPC and not a pet - if (evt.deadActor->GetClientID()==0 && !evt.deadActor->GetCharacterData()->IsPet()) + // Only do progression if dead guy is an NPC and not a pet or if a gm enabled the givexp flag + if ((evt.deadActor->GetClientID()==0 && !evt.deadActor->GetCharacterData()->IsPet()) || evt.deadActor->givekillexp) { csString progEvent = FindEvent( "kill" )->ToString(true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |