From: <wel...@us...> - 2008-12-26 08:20:28
|
Revision: 2775 http://planeshift.svn.sourceforge.net/planeshift/?rev=2775&view=rev Author: weltall2 Date: 2008-12-26 08:20:24 +0000 (Fri, 26 Dec 2008) Log Message: ----------- fixed compilation Modified Paths: -------------- trunk/src/server/exchangemanager.cpp trunk/src/server/usermanager.cpp Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2008-12-25 23:08:10 UTC (rev 2774) +++ trunk/src/server/exchangemanager.cpp 2008-12-26 08:20:24 UTC (rev 2775) @@ -1374,7 +1374,7 @@ return; } - if(target->IsFrozen()) + if(targetClient->IsFrozen()) { psserver->SendSystemInfo(client->GetClientNum(), "% was frozen by a GM and cannot trade", target->GetName()); return; Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2008-12-25 23:08:10 UTC (rev 2774) +++ trunk/src/server/usermanager.cpp 2008-12-26 08:20:24 UTC (rev 2775) @@ -2216,7 +2216,7 @@ return; } - if(target->IsFrozen()) + if(targetClient->IsFrozen()) { psserver->SendSystemInfo(client->GetClientNum(), "% was frozen by a GM and cannot be challenged", target->GetName()); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-01-05 08:39:17
|
Revision: 2811 http://planeshift.svn.sourceforge.net/planeshift/?rev=2811&view=rev Author: weltall2 Date: 2009-01-05 08:39:12 +0000 (Mon, 05 Jan 2009) Log Message: ----------- Fix for FS#673 - trias in skills panel not updated patch by kougaro Modified Paths: -------------- trunk/src/server/psserverchar.h trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/server/psserverchar.h =================================================================== --- trunk/src/server/psserverchar.h 2009-01-05 08:12:47 UTC (rev 2810) +++ trunk/src/server/psserverchar.h 2009-01-05 08:39:12 UTC (rev 2811) @@ -79,6 +79,8 @@ /// Sends the client an inventory virtual bool SendInventory( int clientNum, bool sendUpdatesOnly=true ); + void SendPlayerMoney( Client *client); + /// Update all views with items virtual bool UpdateItemViews( int clientNum ); @@ -124,7 +126,6 @@ void HandleMerchantSell(psGUIMerchantMessage& msg, Client *client); void HandleMerchantView(psGUIMerchantMessage& msg, Client *client); - void SendPlayerMoney( Client *client); bool SendPlayerItems( Client *client, psItemCategory * category); Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-01-05 08:12:47 UTC (rev 2810) +++ trunk/src/server/usermanager.cpp 2009-01-05 08:39:12 UTC (rev 2811) @@ -68,6 +68,7 @@ #include "adminmanager.h" #include "commandmanager.h" #include "psserver.h" +#include "psserverchar.h" #include "cachemanager.h" #include "playergroup.h" #include "progressionmanager.h" @@ -1844,6 +1845,7 @@ for(unsigned int i=0; i< closegroupmembers.GetSize(); i++) { closegroupmembers[i]->GetCharacterData()->AdjustMoney(eachmoney, false); + psserver->GetCharManager()->SendPlayerMoney(closegroupmembers[i]); } } @@ -1853,6 +1855,7 @@ loot2.SendMessage(); client->GetCharacterData()->AdjustMoney(remmoney, false); + psserver->GetCharManager()->SendPlayerMoney(client); psLootEvent evt( chr->GetPID(), client->GetCharacterData()->GetPID(), @@ -1873,6 +1876,7 @@ loot.SendMessage(); client->GetCharacterData()->AdjustMoney(m, false); + psserver->GetCharManager()->SendPlayerMoney(client); psLootEvent evt( chr->GetPID(), Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-01-05 08:12:47 UTC (rev 2810) +++ trunk/src/server/usermanager.h 2009-01-05 08:39:12 UTC (rev 2811) @@ -121,6 +121,8 @@ void Attack(Stance stance, Client *client,int clientnum); + void SendPlayerMoney(Client *client); + /** @brief Handles a /loot command from a player to loot something. * * Sends the lootable item to the client and splits any loot money across This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-06 03:15:18
|
Revision: 2819 http://planeshift.svn.sourceforge.net/planeshift/?rev=2819&view=rev Author: Vengeance2001 Date: 2009-01-06 03:15:16 +0000 (Tue, 06 Jan 2009) Log Message: ----------- More minor message functor cleanup work. Modified Paths: -------------- trunk/src/server/bankmanager.cpp trunk/src/server/bankmanager.h trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h trunk/src/server/combatmanager.cpp trunk/src/server/combatmanager.h trunk/src/server/creationmanager.cpp trunk/src/server/creationmanager.h Modified: trunk/src/server/bankmanager.cpp =================================================================== --- trunk/src/server/bankmanager.cpp 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/bankmanager.cpp 2009-01-06 03:15:16 UTC (rev 2819) @@ -50,7 +50,7 @@ BankManager::BankManager() { - psserver->GetEventManager()->Subscribe(this,MSGTYPE_BANKING,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<BankManager>(this,&BankManager::HandleBanking),MSGTYPE_BANKING,REQUIRE_READY_CLIENT); // Load money events. Result result(db->Select("select * from money_events")); @@ -674,19 +674,13 @@ } -void BankManager::HandleMessage(MsgEntry *me, Client *client) +void BankManager::HandleBanking( MsgEntry *me, Client *client ) { psGUIBankingMessage msg(me); - if (msg.valid) - HandleBanking(client, msg); - else + if (!msg.valid) { Debug2(LOG_NET,me->clientnum,"Received unparsable psGUIBankingMessage from client %u.\n", me->clientnum); } -} - -void BankManager::HandleBanking(Client *client, psGUIBankingMessage &msg) -{ // Check we're still near the banker. gemObject *banker = NULL; banker = client->GetTargetObject(); Modified: trunk/src/server/bankmanager.h =================================================================== --- trunk/src/server/bankmanager.h 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/bankmanager.h 2009-01-06 03:15:16 UTC (rev 2819) @@ -38,7 +38,7 @@ BankManager(); ~BankManager(); inline void StartBanking(Client* client, bool guild) { SendBankWindow(client, guild, true); } - void HandleMessage(MsgEntry *me, Client *client); + void HandleMessage(MsgEntry *me, Client *client) { } void ProcessTax(); protected: @@ -69,7 +69,7 @@ void DepositFunds(Client* client, bool guild, int circles, int octas, int hexas, int trias); void ExchangeFunds(Client* client, bool guild, int coins, int coin); psMoney* GetTotalFunds(psCharacter* pschar, bool guild); - void HandleBanking(Client* client, psGUIBankingMessage& msg); + void HandleBanking(MsgEntry *me, Client *client); int CoinsForExchange(psCharacter* pschar, bool guild, int type, float fee); int CalculateAccountLevel(psCharacter* pschar, bool guild); inline float CalculateFee(psCharacter* pschar, bool guild); Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/chatmanager.cpp 2009-01-06 03:15:16 UTC (rev 2819) @@ -282,11 +282,6 @@ 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 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/chatmanager.h 2009-01-06 03:15:16 UTC (rev 2819) @@ -73,7 +73,7 @@ ChatManager(); virtual ~ChatManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } void HandleChatMessage (MsgEntry *me, Client *client); void HandleCacheMessage(MsgEntry *me, Client *client); Modified: trunk/src/server/combatmanager.cpp =================================================================== --- trunk/src/server/combatmanager.cpp 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/combatmanager.cpp 2009-01-06 03:15:16 UTC (rev 2819) @@ -986,11 +986,6 @@ return ( fabs(angle) < 3.14159F * .40); } -void CombatManager::HandleMessage(MsgEntry *me,Client *client) -{ - // converted to functor -} - void CombatManager::HandleDeathEvent(MsgEntry *me,Client *client) { psDeathEvent death(me); Modified: trunk/src/server/combatmanager.h =================================================================== --- trunk/src/server/combatmanager.h 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/combatmanager.h 2009-01-06 03:15:16 UTC (rev 2819) @@ -61,7 +61,7 @@ virtual ~CombatManager(); - void HandleMessage(MsgEntry *me, Client *client); + void HandleMessage(MsgEntry *me, Client *client) { } /// This is how you start an attack sequence void AttackSomeone(gemActor *attacker, gemObject *target, Stance stance); Modified: trunk/src/server/creationmanager.cpp =================================================================== --- trunk/src/server/creationmanager.cpp 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/creationmanager.cpp 2009-01-06 03:15:16 UTC (rev 2819) @@ -95,11 +95,6 @@ return true; } -void CharCreationManager::HandleMessage(MsgEntry *pMsg,Client *client) -{ - // no longer used -} - void CharCreationManager::HandleCharDelete( MsgEntry* me, Client* client ) { psCharDeleteMessage msg(me); Modified: trunk/src/server/creationmanager.h =================================================================== --- trunk/src/server/creationmanager.h 2009-01-06 00:32:42 UTC (rev 2818) +++ trunk/src/server/creationmanager.h 2009-01-06 03:15:16 UTC (rev 2819) @@ -54,10 +54,10 @@ */ bool Initialize(); - /** Handles incomming net messages. + /** Handles incoming net messages. * Have to add what messages it is subscribed to. */ - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } bool Validate( psCharUploadMessage& mesg, csString& errorMsg ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-06 17:50:33
|
Revision: 2831 http://planeshift.svn.sourceforge.net/planeshift/?rev=2831&view=rev Author: Vengeance2001 Date: 2009-01-06 17:50:31 +0000 (Tue, 06 Jan 2009) Log Message: ----------- Fixes and updates to npc spawn ranges table. Thanks to Aiken for doing most of the legwork here. DB VERSION BUMP. Modified Paths: -------------- trunk/src/server/database/mysql/npc_spawn_ranges.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/psserver.cpp trunk/src/server/spawnmanager.cpp Modified: trunk/src/server/database/mysql/npc_spawn_ranges.sql =================================================================== --- trunk/src/server/database/mysql/npc_spawn_ranges.sql 2009-01-06 17:37:29 UTC (rev 2830) +++ trunk/src/server/database/mysql/npc_spawn_ranges.sql 2009-01-06 17:50:31 UTC (rev 2831) @@ -16,7 +16,7 @@ x2 float(10,2) NOT NULL DEFAULT '0.00' , y2 float(10,2) NOT NULL DEFAULT '0.00' , z2 float(10,2) NOT NULL DEFAULT '0.00' , - cstr_id_spawn_sector int(10) DEFAULT '0' , + sector_id int(10) NOT NULL DEFAULT '0' , range_type_code char(1) NOT NULL DEFAULT 'A' , PRIMARY KEY (id) ); @@ -26,5 +26,5 @@ # Dumping data for table 'npc_spawn_ranges' # -INSERT INTO npc_spawn_ranges VALUES("1","999","-20.00","0.00","-160.00","0.00","0.00","-180.00","1","A"); -INSERT INTO npc_spawn_ranges VALUES("2","100","-20.00","0.00","-160.00","0.00","0.00","-180.00","1","L"); +INSERT INTO npc_spawn_ranges VALUES("1","999","-20.00","0.00","-160.00","0.00","0.00","-180.00","3","A"); +INSERT INTO npc_spawn_ranges VALUES("2","100","-20.00","0.00","-160.00","0.00","0.00","-180.00","3","L"); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-01-06 17:37:29 UTC (rev 2830) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-01-06 17:50:31 UTC (rev 2831) @@ -1066,22 +1066,25 @@ 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 +#### Also 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 ); -#### 1211 - Stefano Angeleri - Lowered killnpc required access level to gm2 +#### Lowered killnpc required access level to gm2 INSERT INTO command_group_assignment VALUES( "/killnpc", 24 ); INSERT INTO command_group_assignment VALUES( "/killnpc", 23 ); INSERT INTO command_group_assignment VALUES( "/killnpc", 22 ); -#### 1211 - Stefano Angeleri - Added /assignfaction for gm4+ +#### Added /assignfaction for gm4+ INSERT INTO command_group_assignment VALUES( "/assignfaction", 30 ); INSERT INTO command_group_assignment VALUES( "/assignfaction", 25 ); INSERT INTO command_group_assignment VALUES( "/assignfaction", 24 ); +#### 1212 - Keith Fulton - Renamed column name to be more accurate and to be required +ALTER TABLE `npc_spawn_ranges` CHANGE `cstr_id_spawn_sector` `sector_id` int(10) NOT NULL DEFAULT '0'; +UPDATE `server_options` SET `option_value`='1212' WHERE `option_name`='db_version'; # 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. Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2009-01-06 17:37:29 UTC (rev 2830) +++ trunk/src/server/psserver.cpp 2009-01-06 17:50:31 UTC (rev 2831) @@ -89,7 +89,7 @@ #include "introductionmanager.h" // Remember to bump this in server_options.sql and add to upgrade_schema.sql! -#define DATABASE_VERSION_STR "1211" +#define DATABASE_VERSION_STR "1212" psCharacterLoader psServer::CharacterLoader; Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2009-01-06 17:37:29 UTC (rev 2830) +++ trunk/src/server/spawnmanager.cpp 2009-01-06 17:50:31 UTC (rev 2831) @@ -480,9 +480,10 @@ void SpawnManager::LoadSpawnRanges(SpawnRule *rule) { - Result result(db->Select("select id,x1,y1,z1,x2,y2,z2,cstr_id_spawn_sector,range_type_code" - " from npc_spawn_ranges" - " where npc_spawn_rule_id=%d", rule->GetID() )); + Result result(db->Select("select npc_spawn_ranges.id,x1,y1,z1,x2,y2,z2,name,range_type_code" + " from npc_spawn_ranges, sectors " + " where npc_spawn_ranges.sector_id = sectors.id" + " and npc_spawn_rule_id=%d", rule->GetID() )); if (!result.IsValid() ) { @@ -504,8 +505,9 @@ result[i].GetFloat("x2"), result[i].GetFloat("y2"), result[i].GetFloat("z2"), - CacheManager::GetSingleton().FindCommonString( result[i].GetUInt32("cstr_id_spawn_sector") ) ); + result[i]["name"]); + rule->AddRange(r); } } @@ -1154,7 +1156,7 @@ // randomly choose an angle in [0, 2*PI] angle = randomgen->Get() * TWO_PI; - + instance = fixedinstance; } else if (ch && fixedspawnsector == "startlocation") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-09 23:30:36
|
Revision: 2847 http://planeshift.svn.sourceforge.net/planeshift/?rev=2847&view=rev Author: Vengeance2001 Date: 2009-01-09 23:30:26 +0000 (Fri, 09 Jan 2009) Log Message: ----------- Converted several more managers to use the functor messaging. Modified Paths: -------------- trunk/src/server/entitymanager.cpp trunk/src/server/gmeventmanager.cpp trunk/src/server/gmeventmanager.h trunk/src/server/groupmanager.cpp trunk/src/server/groupmanager.h trunk/src/server/guildmanager.cpp trunk/src/server/guildmanager.h trunk/src/server/introductionmanager.cpp trunk/src/server/introductionmanager.h trunk/src/server/minigamemanager.cpp trunk/src/server/minigamemanager.h trunk/src/server/npcmanager.cpp trunk/src/server/npcmanager.h Modified: trunk/src/server/entitymanager.cpp =================================================================== --- trunk/src/server/entitymanager.cpp 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/entitymanager.cpp 2009-01-09 23:30:26 UTC (rev 2847) @@ -135,7 +135,6 @@ usermanager = umanager; -// 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 ); Modified: trunk/src/server/gmeventmanager.cpp =================================================================== --- trunk/src/server/gmeventmanager.cpp 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/gmeventmanager.cpp 2009-01-09 23:30:26 UTC (rev 2847) @@ -49,7 +49,7 @@ // initialise gmEvents gmEvents.DeleteAll(); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_GMEVENT_INFO, REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<GMEventManager>(this,&GMEventManager::HandleGMEventCommand), MSGTYPE_GMEVENT_INFO, REQUIRE_READY_CLIENT); } GMEventManager::~GMEventManager() @@ -589,72 +589,67 @@ } /// handle message from client -void GMEventManager::HandleMessage(MsgEntry* me, Client* client) +void GMEventManager::HandleGMEventCommand(MsgEntry* me, Client* client) { - // request from client for the events description - if (me->GetType() == MSGTYPE_GMEVENT_INFO) - { - //int gmID; - psGMEventInfoMessage msg(me); + psGMEventInfoMessage msg(me); - if (msg.command == psGMEventInfoMessage::CMD_QUERY) + if (msg.command == psGMEventInfoMessage::CMD_QUERY) + { + GMEvent* theEvent; + if ((theEvent = GetGMEventByID(msg.id)) == NULL) { - GMEvent* theEvent; - if ((theEvent = GetGMEventByID(msg.id)) == NULL) - { - Error3("Client %s requested unavailable GM Event %d", client->GetName(), msg.id); - return; - } + Error3("Client %s requested unavailable GM Event %d", client->GetName(), msg.id); + return; + } - csString eventDesc(theEvent->eventDescription); + csString eventDesc(theEvent->eventDescription); - if (theEvent->status != EMPTY) - { - ClientConnectionSet* clientConnections = psserver->GetConnections(); - Client* target; + if (theEvent->status != EMPTY) + { + ClientConnectionSet* clientConnections = psserver->GetConnections(); + Client* target; - // if this client is the GM, list the participants too - if (client->GetPID() == theEvent->gmID) + // if this client is the GM, list the participants too + if (client->GetPID() == theEvent->gmID) + { + eventDesc.AppendFmt(". Participants: %zu. Online: ", theEvent->playerID.GetSize()); + csArray<PID>::Iterator iter = theEvent->playerID.GetIterator(); + while (iter.HasNext()) { - eventDesc.AppendFmt(". Participants: %zu. Online: ", theEvent->playerID.GetSize()); - csArray<PID>::Iterator iter = theEvent->playerID.GetIterator(); - while (iter.HasNext()) + if ((target = clientConnections->FindPlayer(iter.Next()))) { - if ((target = clientConnections->FindPlayer(iter.Next()))) - { - eventDesc.AppendFmt("%s, ", target->GetName()); - } + eventDesc.AppendFmt("%s, ", target->GetName()); } } - else if (theEvent->status == RUNNING) // and name the running GM + } + else if (theEvent->status == RUNNING) // and name the running GM + { + if (theEvent->gmID == UNDEFINED_GMID) { - if (theEvent->gmID == UNDEFINED_GMID) - { - eventDesc.AppendFmt(" (No GM)"); - } - if ((target = clientConnections->FindPlayer(theEvent->gmID))) - { - eventDesc.AppendFmt(" (%s)", target->GetName()); - } + eventDesc.AppendFmt(" (No GM)"); } - - psGMEventInfoMessage response(me->clientnum, - psGMEventInfoMessage::CMD_INFO, - msg.id, - theEvent->eventName.GetDataSafe(), - eventDesc.GetDataSafe()); - response.SendMessage(); + if ((target = clientConnections->FindPlayer(theEvent->gmID))) + { + eventDesc.AppendFmt(" (%s)", target->GetName()); + } } - else - { - Error3("Client %s requested unavailable GM Event %d", client->GetName(), msg.id); - } + + psGMEventInfoMessage response(me->clientnum, + psGMEventInfoMessage::CMD_INFO, + msg.id, + theEvent->eventName.GetDataSafe(), + eventDesc.GetDataSafe()); + response.SendMessage(); } - else if (msg.command == psGMEventInfoMessage::CMD_DISCARD) + else { - DiscardGMEvent(client, msg.id); + Error3("Client %s requested unavailable GM Event %d", client->GetName(), msg.id); } } + else if (msg.command == psGMEventInfoMessage::CMD_DISCARD) + { + DiscardGMEvent(client, msg.id); + } } /// remove players complete references to GM events they were involved with, Modified: trunk/src/server/gmeventmanager.h =================================================================== --- trunk/src/server/gmeventmanager.h 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/gmeventmanager.h 2009-01-09 23:30:26 UTC (rev 2847) @@ -172,7 +172,8 @@ csString& name, csString& description); - virtual void HandleMessage(MsgEntry *me, Client *client); + virtual void HandleMessage(MsgEntry *me, Client *client) { }; + virtual void HandleGMEventCommand(MsgEntry *me, Client *client); /** @brief Removes a player from any GM event they maybe involved with (eg player being deleted) * Modified: trunk/src/server/groupmanager.cpp =================================================================== --- trunk/src/server/groupmanager.cpp 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/groupmanager.cpp 2009-01-09 23:30:26 UTC (rev 2847) @@ -266,7 +266,7 @@ chatserver = chat; // Needed to GROUPSAY things. eventmanager = psserver->GetEventManager(); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GROUPCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<GroupManager>(this,&GroupManager::HandleGroupCommand),MSGTYPE_GROUPCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); } GroupManager::~GroupManager() @@ -275,7 +275,7 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_GROUPCMD); } -void GroupManager::HandleMessage(MsgEntry *me, Client *client) +void GroupManager::HandleGroupCommand(MsgEntry *me, Client *client) { psGroupCmdMessage msg(me); if (!msg.valid) @@ -284,12 +284,6 @@ return; } - if (!msg.valid) - { - Error1("Command not supported"); - return; - } - if (msg.command == "/invite") { Invite(msg,client); Modified: trunk/src/server/groupmanager.h =================================================================== --- trunk/src/server/groupmanager.h 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/groupmanager.h 2009-01-09 23:30:26 UTC (rev 2847) @@ -60,13 +60,14 @@ GroupManager(ClientConnectionSet *pCCS, ChatManager *chat); virtual ~GroupManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); - + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } void HandleJoinGroup(PendingGroupInvite *invite); protected: friend class PlayerGroup; + void HandleGroupCommand(MsgEntry *pMsg,Client *client); + void Invite(psGroupCmdMessage& msg,Client *client); void Disband(psGroupCmdMessage& msg,gemActor *client); void Leave(psGroupCmdMessage& msg,gemActor *client); Modified: trunk/src/server/guildmanager.cpp =================================================================== --- trunk/src/server/guildmanager.cpp 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/guildmanager.cpp 2009-01-09 23:30:26 UTC (rev 2847) @@ -192,9 +192,9 @@ xml = csPtr<iDocumentSystem>(new csTinyDocumentSystem); CS_ASSERT( xml ); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GUILDCMD,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GUIGUILD,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GUILDMOTDSET,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<GuildManager>(this,&GuildManager::HandleCmdMessage),MSGTYPE_GUILDCMD,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<GuildManager>(this,&GuildManager::HandleGUIMessage),MSGTYPE_GUIGUILD,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<GuildManager>(this,&GuildManager::HandleMOTDSet),MSGTYPE_GUILDMOTDSET,REQUIRE_ANY_CLIENT); } GuildManager::~GuildManager() @@ -210,47 +210,17 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_GUILDMOTDSET); } -void GuildManager::HandleMessage(MsgEntry *me,Client *client) + +void GuildManager::HandleCmdMessage( MsgEntry *me,Client *client ) { - switch (me->GetType()) + psGuildCmdMessage msg(me); + if (!msg.valid) { - case MSGTYPE_GUILDCMD: - { - psGuildCmdMessage msg(me); - if (!msg.valid) - { - psserver->SendSystemError(me->clientnum, "Command not supported by server yet."); - Error2("Failed to parse psGuildCmdMessage from client %u.",me->clientnum); - return; - } - HandleCmdMessage(msg,client); - break; - } - case MSGTYPE_GUIGUILD: - { - psGUIGuildMessage msg(me); - if (!msg.valid) - { - Error2("Failed to parse psGUIGuildMessage from client %u.",me->clientnum); - return; - } - HandleGUIMessage(msg,client); - break; - } - case MSGTYPE_GUILDMOTDSET: - { - psGuildMOTDSetMessage msg(me); - if (!msg.valid) - { - Error2("Failed to parse psGuildMOTDSetMessage from client %u.",me->clientnum); - } - HandleMOTDSet(msg,client); - } + psserver->SendSystemError(me->clientnum, "Command not supported by server yet."); + Error2("Failed to parse psGuildCmdMessage from client %u.",me->clientnum); + return; } -} -void GuildManager::HandleCmdMessage(psGuildCmdMessage& msg, Client* client ) -{ int clientnum = client->GetClientNum(); if (msg.command == "/newguild") @@ -339,8 +309,14 @@ } } -void GuildManager::HandleGUIMessage(psGUIGuildMessage& msg,Client *client) +void GuildManager::HandleGUIMessage(MsgEntry *me,Client *client) { + psGUIGuildMessage msg(me); + if (!msg.valid) + { + Error2("Failed to parse psGUIGuildMessage from client %u.",me->clientnum); + return; + } csRef<iDocument> doc = xml->CreateDocument(); const char* error = doc->Parse( msg.commandData); @@ -379,8 +355,14 @@ } } -void GuildManager::HandleMOTDSet(psGuildMOTDSetMessage& msg,Client *client) +void GuildManager::HandleMOTDSet(MsgEntry *me,Client *client) { + psGuildMOTDSetMessage msg(me); + if (!msg.valid) + { + Error2("Failed to parse psGuildMOTDSetMessage from client %u.",me->clientnum); + } + if (CheckClientRights(client,RIGHTS_EDIT_GUILD,"You don't have permission to change settings of your guild.")) { if (msg.guildmotd.Length() > 200) Modified: trunk/src/server/guildmanager.h =================================================================== --- trunk/src/server/guildmanager.h 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/guildmanager.h 2009-01-09 23:30:26 UTC (rev 2847) @@ -66,7 +66,7 @@ GuildManager(ClientConnectionSet *pCCS, ChatManager *chat); virtual ~GuildManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { }; void HandleJoinGuild(PendingGuildInvite *invite); void AcceptWar(PendingGuildWarInvite *invite); @@ -84,9 +84,9 @@ int GetClientLevel(Client *client); bool CheckAllianceOperation(Client * client, bool checkLeaderGuild, psGuildInfo * & guild, psGuildAlliance * & alliance); - void HandleCmdMessage(psGuildCmdMessage& msg,Client *client); - void HandleGUIMessage(psGUIGuildMessage& msg,Client *client); - void HandleMOTDSet(psGuildMOTDSetMessage& msg,Client *client); + void HandleCmdMessage(MsgEntry *me,Client *client); + void HandleGUIMessage(MsgEntry *me,Client *client); + void HandleMOTDSet(MsgEntry *me,Client *client); void HandleSubscribeGuildData(Client *client,iDocumentNode * root); void UnsubscribeGuildData(Client *client); void HandleSetOnline(Client *client,iDocumentNode * root); Modified: trunk/src/server/introductionmanager.cpp =================================================================== --- trunk/src/server/introductionmanager.cpp 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/introductionmanager.cpp 2009-01-09 23:30:26 UTC (rev 2847) @@ -44,9 +44,11 @@ #include "psserver.h" #include "globals.h" + + IntroductionManager::IntroductionManager() { - psserver->GetEventManager()->Subscribe(this,MSGTYPE_INTRODUCTION,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<IntroductionManager>(this,&IntroductionManager::HandleIntroduction),MSGTYPE_INTRODUCTION,REQUIRE_READY_CLIENT); } IntroductionManager::~IntroductionManager() @@ -54,9 +56,9 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_INTRODUCTION); } -void IntroductionManager::HandleMessage(MsgEntry *pMsg, Client *client) +void IntroductionManager::HandleIntroduction(MsgEntry *me, Client *client) { - psCharIntroduction msg(pMsg); + psCharIntroduction msg(me); if (!msg.valid) return; Modified: trunk/src/server/introductionmanager.h =================================================================== --- trunk/src/server/introductionmanager.h 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/introductionmanager.h 2009-01-09 23:30:26 UTC (rev 2847) @@ -40,7 +40,10 @@ IntroductionManager(); ~IntroductionManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } + +protected: + void HandleIntroduction(MsgEntry *pMsg,Client *client); }; #endif Modified: trunk/src/server/minigamemanager.cpp =================================================================== --- trunk/src/server/minigamemanager.cpp 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/minigamemanager.cpp 2009-01-09 23:30:26 UTC (rev 2847) @@ -91,8 +91,8 @@ MiniGameManager::MiniGameManager() { - psserver->GetEventManager()->Subscribe(this, MSGTYPE_MINIGAME_STARTSTOP, REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_MINIGAME_UPDATE, REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<MiniGameManager>(this,&MiniGameManager::HandleStartStop), MSGTYPE_MINIGAME_STARTSTOP, REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<MiniGameManager>(this,&MiniGameManager::HandleGameUpdate), MSGTYPE_MINIGAME_UPDATE, REQUIRE_READY_CLIENT); MiniGameManagerTick *tick = new MiniGameManagerTick(MINIGAME_TICK_INTERVAL, this); psserver->GetEventManager()->Push(tick); @@ -160,39 +160,23 @@ return false; } -void MiniGameManager::HandleMessage(MsgEntry *me, Client *client) +void MiniGameManager::HandleStartStop(MsgEntry *me, Client *client) { - if (me->GetType() == MSGTYPE_MINIGAME_STARTSTOP) + psMGStartStopMessage msg(me); + if (!msg.valid) { - psMGStartStopMessage msg(me); - if (!msg.valid) - { - Error2("Failed to parse psMGStartStopMessage from client %u.", me->clientnum); - return; - } - - if (msg.msgStart) - { - HandleStartGameRequest(client); - } - else - { - HandleStopGameRequest(client); - } + Error2("Failed to parse psMGStartStopMessage from client %u.", me->clientnum); + return; } - else if (me->GetType() == MSGTYPE_MINIGAME_UPDATE) + if (msg.msgStart) { - psMGUpdateMessage msg(me); - if (!msg.valid) - { - Error2("Failed to parse psMGUpdateMessage from client %u.", me->clientnum); - return; - } - - HandleGameUpdate(client, msg); + HandleStartGameRequest(client); } - + else + { + HandleStopGameRequest(client); + } } void MiniGameManager::HandleStartGameRequest(Client *client) @@ -308,8 +292,15 @@ } } -void MiniGameManager::HandleGameUpdate(Client *client, psMGUpdateMessage &msg) +void MiniGameManager::HandleGameUpdate(MsgEntry *me, Client *client) { + psMGUpdateMessage msg(me); + if (!msg.valid) + { + Error2("Failed to parse psMGUpdateMessage from client %u.", me->clientnum); + return; + } + if (!client || client->GetClientNum() == (uint32_t)-1) { Error1("Invalid client in the minigame update message."); @@ -923,7 +914,7 @@ if (endgameReached) { // determine winner - uint32_t winnerID, loserID; + uint32_t winnerID=(uint32_t)-1, loserID; csString wonText; ProgressionEvent *progEvent = NULL; Modified: trunk/src/server/minigamemanager.h =================================================================== --- trunk/src/server/minigamemanager.h 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/minigamemanager.h 2009-01-09 23:30:26 UTC (rev 2847) @@ -234,7 +234,7 @@ ~MiniGameManager(); /// Handles message from client. - virtual void HandleMessage(MsgEntry *me, Client *client); + virtual void HandleMessage(MsgEntry *me, Client *client) { } /// returns session by its id. psMiniGameSession *GetSessionByID(uint32_t id); @@ -253,6 +253,12 @@ protected: + /// Handle start and stop messages + void HandleStartStop(MsgEntry *me, Client *client); + + /// handles a client that has made a move. + void HandleGameUpdate(MsgEntry *me, Client *client); + /// client requests start of game session. void HandleStartGameRequest(Client *client); @@ -262,15 +268,11 @@ /// a client is removed from a game session. void RemovePlayerFromSessions(psMiniGameSession *session, Client *client, uint32_t clientID); - /// handles a client that has made a move. - void HandleGameUpdate(Client *client, psMGUpdateMessage &msg); - /// requests a session to be reset. void ResetGameSession(psMiniGameSession *sessionToReset); /// function parses game options string from gameboards DB table. int16_t ParseGameboardOptions(psString optionsStr); - /// Game sessions. csPDelArray<psMiniGameSession> sessions; Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/npcmanager.cpp 2009-01-09 23:30:26 UTC (rev 2847) @@ -339,14 +339,14 @@ database = db; eventmanager = evtmgr; - psserver->GetEventManager()->Subscribe(this,MSGTYPE_NPCAUTHENT,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_NPCOMMANDLIST,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_NPC_COMMAND,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<NPCManager>(this,&NPCManager::HandleAuthentRequest),MSGTYPE_NPCAUTHENT,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<NPCManager>(this,&NPCManager::HandleCommandList) ,MSGTYPE_NPCOMMANDLIST,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<NPCManager>(this,&NPCManager::HandleConsoleCommand),MSGTYPE_NPC_COMMAND,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DAMAGE_EVENT,NO_VALIDATION); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DEATH_EVENT,NO_VALIDATION); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_PET_COMMAND,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_PET_SKILL,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<NPCManager>(this,&NPCManager::HandleDamageEvent),MSGTYPE_DAMAGE_EVENT,NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<NPCManager>(this,&NPCManager::HandleDeathEvent) ,MSGTYPE_DEATH_EVENT,NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<NPCManager>(this,&NPCManager::HandlePetCommand) ,MSGTYPE_PET_COMMAND,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<NPCManager>(this,&NPCManager::HandlePetSkill) ,MSGTYPE_PET_SKILL,REQUIRE_ANY_CLIENT); PrepareMessage(); @@ -400,49 +400,8 @@ delete outbound; } -void NPCManager::HandleMessage(MsgEntry *me,Client *client) -{ - switch ( me->GetType() ) - { - case MSGTYPE_DAMAGE_EVENT: - { - HandleDamageEvent(me); - break; - } - case MSGTYPE_DEATH_EVENT: - { - HandleDeathEvent(me); - break; - } - case MSGTYPE_NPCAUTHENT: - { - HandleAuthentRequest(me); - break; - } - case MSGTYPE_NPCOMMANDLIST: - { - HandleCommandList(me); - break; - } - case MSGTYPE_PET_COMMAND: - { - HandlePetCommand(me); - break; - } - case MSGTYPE_PET_SKILL: - { - HandlePetSkill(me); - break; - } - case MSGTYPE_NPC_COMMAND: - { - HandleConsoleCommand(me); - break; - } - } -} -void NPCManager::HandleDamageEvent(MsgEntry *me) +void NPCManager::HandleDamageEvent(MsgEntry *me,Client *client) { psDamageEvent evt(me); @@ -453,7 +412,7 @@ } } -void NPCManager::HandleDeathEvent(MsgEntry *me) +void NPCManager::HandleDeathEvent(MsgEntry *me,Client *client) { Debug1(LOG_SUPERCLIENT, 0,"NPCManager handling Death Event\n"); psDeathEvent evt(me); @@ -462,7 +421,7 @@ } -void NPCManager::HandleConsoleCommand(MsgEntry *me) +void NPCManager::HandleConsoleCommand(MsgEntry *me,Client *client) { csString buffer; @@ -493,7 +452,7 @@ } -void NPCManager::HandleAuthentRequest(MsgEntry *me) +void NPCManager::HandleAuthentRequest(MsgEntry *me,Client *notused) { Client* client = clients->FindAny(me->clientnum); if (!client) @@ -710,7 +669,7 @@ } } -void NPCManager::HandleCommandList(MsgEntry *me) +void NPCManager::HandleCommandList(MsgEntry *me,Client *client) { psNPCCommandsMessage list(me); @@ -1355,7 +1314,7 @@ return false; } -void NPCManager::HandlePetCommand( MsgEntry * me ) +void NPCManager::HandlePetCommand(MsgEntry * me,Client *client) { psPETCommandMessage msg( me ); gemNPC *pet = NULL; @@ -2149,7 +2108,7 @@ /*-----------------------------------------------------------------*/ /* Pet Skills Handler */ /*-----------------------------------------------------------------*/ -void NPCManager::HandlePetSkill( MsgEntry * me ) +void NPCManager::HandlePetSkill(MsgEntry * me,Client *client) { psPetSkillMessage msg( me ); if ( !msg.valid ) @@ -2157,7 +2116,7 @@ Debug2( LOG_NET, me->clientnum, "Received unparsable psPetSkillMessage from client %u.\n", me->clientnum ); return; } - Client* client = clients->FindAny( me->clientnum ); + // Client* client = clients->FindAny( me->clientnum ); if ( !client->GetFamiliar() ) return; Modified: trunk/src/server/npcmanager.h =================================================================== --- trunk/src/server/npcmanager.h 2009-01-09 22:09:59 UTC (rev 2846) +++ trunk/src/server/npcmanager.h 2009-01-09 23:30:26 UTC (rev 2847) @@ -65,7 +65,7 @@ bool Initialize(); /// Handle incoming messages from the superclients. - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } /// Send a list of managed NPCs to a newly connecting superclient. void SendNPCList(Client *client); @@ -139,16 +139,16 @@ protected: /// Handle a login message from a superclient. - void HandleAuthentRequest(MsgEntry *me); + void HandleAuthentRequest(MsgEntry *me,Client *client); /// Handle a network msg with a list of npc directives. - void HandleCommandList(MsgEntry *me); + void HandleCommandList(MsgEntry *me,Client *client); /// Catch an internal server event for damage so a perception can be sent about it. - void HandleDamageEvent(MsgEntry *me); + void HandleDamageEvent(MsgEntry *me,Client *client); /// Catch an internal server event for death so a perception can be sent about it. - void HandleDeathEvent(MsgEntry *me); + void HandleDeathEvent(MsgEntry *me,Client *client); /// Send the list of maps for the superclient to load on startup. void SendMapList(Client *client); @@ -163,13 +163,13 @@ bool WillPetReact(int clientnum, Client * owner, gemNPC * pet, const char * type, int level); /// Handle network message with pet directives - void HandlePetCommand( MsgEntry *me ); + void HandlePetCommand(MsgEntry *me,Client *client); /// Handle network message with console commands from npcclient - void HandleConsoleCommand(MsgEntry *me); + void HandleConsoleCommand(MsgEntry *me,Client *client); /// Handle network message with pet skills - void HandlePetSkill( MsgEntry * me ); + void HandlePetSkill(MsgEntry * me,Client *client); void SendPetSkillList( Client * client, bool forceOpen = true, PSSKILL focus = PSSKILL_NONE ); /// Create an empty command list message, waiting for items to be queued in it. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-10 07:15:12
|
Revision: 2849 http://planeshift.svn.sourceforge.net/planeshift/?rev=2849&view=rev Author: Vengeance2001 Date: 2009-01-10 07:15:06 +0000 (Sat, 10 Jan 2009) Log Message: ----------- Converted over a couple more managers to functor messaging. Renamed psServerCharManager to ServerCharManager for consistency. Slight refactoring in ServerCharManager to take out needless ref to ClientConnectionSet. Modified Paths: -------------- trunk/src/server/gem.h trunk/src/server/progressionmanager.cpp trunk/src/server/progressionmanager.h trunk/src/server/psserver.cpp trunk/src/server/psserver.h trunk/src/server/psserverchar.cpp trunk/src/server/psserverchar.h Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2009-01-10 07:13:35 UTC (rev 2848) +++ trunk/src/server/gem.h 2009-01-10 07:15:06 UTC (rev 2849) @@ -48,7 +48,7 @@ struct iMeshWrapper; class ProximityList; -class psServerCharManager; +class ServerCharManager; class EntityManager; class gemObject; class PlayerGroup; Modified: trunk/src/server/progressionmanager.cpp =================================================================== --- trunk/src/server/progressionmanager.cpp 2009-01-10 07:13:35 UTC (rev 2848) +++ trunk/src/server/progressionmanager.cpp 2009-01-10 07:15:06 UTC (rev 2849) @@ -4538,10 +4538,9 @@ { clients = ccs; - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GUISKILL,REQUIRE_READY_CLIENT); - - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DEATH_EVENT,NO_VALIDATION); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_ZPOINT_EVENT,NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ProgressionManager>(this,&ProgressionManager::HandleSkill) ,MSGTYPE_GUISKILL, REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ProgressionManager>(this,&ProgressionManager::HandleDeathEvent) ,MSGTYPE_DEATH_EVENT, NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ProgressionManager>(this,&ProgressionManager::HandleZPointEvent),MSGTYPE_ZPOINT_EVENT,NO_VALIDATION); } @@ -4626,56 +4625,24 @@ return true; } -void ProgressionManager::HandleMessage(MsgEntry *me,Client *client) + +void ProgressionManager::HandleZPointEvent(MsgEntry *me, Client *client) { - switch( me->GetType()) - { - case MSGTYPE_GUISKILL: - { - psGUISkillMessage msg(me); - if (msg.valid) - HandleSkill(client, msg); - else - { - Debug2(LOG_NET,me->clientnum,"Received unparsable psGUISkillMessage from client %u.\n",me->clientnum); - } - break; - } - case MSGTYPE_DEATH_EVENT: - { - HandleDeathEvent(me); - break; - } + psZPointsGainedEvent evt(me); - case MSGTYPE_ZPOINT_EVENT: - { - psZPointsGainedEvent evt(me); - - Client* client = clients->Find( evt.actor->GetClientID() ); - - if (!client) - { - Error1("Got unknown client!"); - return; - } - - csString string; - string.Format("You've gained some practice points in %s.", evt.skillName.GetData() ); - if ( evt.rankUp ) - { - string.Append(" You've also ranked up!"); - } - psserver->SendSystemInfo(evt.actor->GetClientID(), string); - - SendSkillList( client, false ); - - break; - } - + csString string; + string.Format("You've gained some practice points in %s.", evt.skillName.GetData() ); + if ( evt.rankUp ) + { + string.Append(" You've also ranked up!"); } + psserver->SendSystemInfo(evt.actor->GetClientID(), string); + + SendSkillList( client, false ); } -void ProgressionManager::HandleDeathEvent(MsgEntry *me) + +void ProgressionManager::HandleDeathEvent(MsgEntry *me, Client *notused) { Debug1(LOG_COMBAT, me->clientnum,"Progression Manager handling Death Event\n"); psDeathEvent evt(me); @@ -4695,8 +4662,15 @@ } -void ProgressionManager::HandleSkill(Client * client, psGUISkillMessage& msg) +void ProgressionManager::HandleSkill(MsgEntry *me, Client * client) { + psGUISkillMessage msg(me); + if (!msg.valid) + { + Debug2(LOG_NET,me->clientnum,"Received unparsable psGUISkillMessage from client %u.\n",me->clientnum); + return; + } + // CPrintf(CON_DEBUG, "ProgressionManager::HandleSkill(%d,%s)\n",msg.command, (const char*)msg.commandData); switch ( msg.command ) { Modified: trunk/src/server/progressionmanager.h =================================================================== --- trunk/src/server/progressionmanager.h 2009-01-10 07:13:35 UTC (rev 2848) +++ trunk/src/server/progressionmanager.h 2009-01-10 07:15:06 UTC (rev 2849) @@ -57,8 +57,7 @@ virtual ~ProgressionManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); - void HandleSkill(Client * client, psGUISkillMessage& msg); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) {} /** Send the skill list to the client. * @param client The client that the message is for. @@ -100,7 +99,9 @@ protected: - void HandleDeathEvent(MsgEntry *me); + void HandleSkill(MsgEntry *me, Client * client); + void HandleDeathEvent(MsgEntry *me, Client *notused); + void HandleZPointEvent(MsgEntry *me, Client *client); csHash<csString, csString> affinitycategories; Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2009-01-10 07:13:35 UTC (rev 2848) +++ trunk/src/server/psserver.cpp 2009-01-10 07:15:06 UTC (rev 2849) @@ -453,8 +453,8 @@ groupmanager = csPtr<GroupManager>(new GroupManager(GetConnections(), chatmanager)); Debug1(LOG_STARTUP,0,"Started Group Manager\n"); - charmanager = new psServerCharManager(); - if (!charmanager->Initialize(GetConnections())) + charmanager = new ServerCharManager(); + if (!charmanager->Initialize()) return false; Debug1(LOG_STARTUP,0,"Started Character Manager\n"); Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2009-01-10 07:13:35 UTC (rev 2848) +++ trunk/src/server/psserver.h 2009-01-10 07:15:06 UTC (rev 2849) @@ -53,7 +53,7 @@ class WeatherManager; class psTimerThread; class psDatabase; -class psServerCharManager; +class ServerCharManager; class SpawnManager; class EventManager; class TutorialManager; @@ -114,7 +114,7 @@ * - advice manager ( AdviceManager ) * - guild manager ( GuildManager ) * - group manager ( GroupManager ) - * - character manager ( psServerCharManager ) + * - character manager ( ServerCharManager ) * - spawn manager ( psSpawnManager ) * - admin manager ( AdminManager ) * - CEL Server ( EntityManager ) @@ -271,7 +271,7 @@ * @return Returns a reference to the current character manager for the * server. */ - psServerCharManager* GetCharManager() { return charmanager; } + ServerCharManager* GetCharManager() { return charmanager; } /** Returns the Progression Manager. * @@ -520,7 +520,7 @@ NetManager* netmanager; AdminManager* adminmanager; psDatabase* database; - psServerCharManager* charmanager; + ServerCharManager* charmanager; SpawnManager* spawnmanager; csRef<EventManager> eventmanager; WeatherManager* weathermanager; Modified: trunk/src/server/psserverchar.cpp =================================================================== --- trunk/src/server/psserverchar.cpp 2009-01-10 07:13:35 UTC (rev 2848) +++ trunk/src/server/psserverchar.cpp 2009-01-10 07:15:06 UTC (rev 2849) @@ -83,7 +83,7 @@ /// The number of characters per email account #define CHARACTERS_ALLOWED 4 -psServerCharManager::psServerCharManager() +ServerCharManager::ServerCharManager() { slotManager = NULL; @@ -110,7 +110,7 @@ } } -psServerCharManager::~psServerCharManager() +ServerCharManager::~ServerCharManager() { if (psserver->GetEventManager()) { @@ -126,16 +126,16 @@ slotManager = NULL; } -bool psServerCharManager::Initialize( ClientConnectionSet* ccs) +bool ServerCharManager::Initialize() { - clients = ccs; +// clients = ccs; - psserver->GetEventManager()->Subscribe(this, MSGTYPE_GUIINVENTORY,NO_VALIDATION); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_GUIMERCHANT,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_VIEW_ITEM,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_VIEW_SKETCH,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_WRITE_BOOK, REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_FACTION_INFO); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::HandleInventoryMessage), MSGTYPE_GUIINVENTORY,NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::HandleMerchantMessage), MSGTYPE_GUIMERCHANT,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::ViewItem), MSGTYPE_VIEW_ITEM,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::UpdateSketch), MSGTYPE_VIEW_SKETCH,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::HandleBookWrite), MSGTYPE_WRITE_BOOK, REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::HandleFaction), MSGTYPE_FACTION_INFO); slotManager = new SlotManager; if ( !(slotManager && slotManager->Initialize()) ) @@ -144,20 +144,18 @@ return true; } -void psServerCharManager::ViewItem( MsgEntry* me ) +void ServerCharManager::ViewItem(MsgEntry *me, Client *client) { psViewItemDescription mesg(me); - Client* client = clients->Find(me->clientnum); ViewItem(client, mesg.containerID, (INVENTORY_SLOT_NUMBER) mesg.slotID); } -void psServerCharManager::UpdateSketch( MsgEntry* me ) +void ServerCharManager::UpdateSketch(MsgEntry* me, Client *client) { psSketchMessage sketchMsg(me); if (sketchMsg.valid) { - Client *client = clients->Find(me->clientnum); psItem *item = client->GetCharacterData()->Inventory().FindItemID(sketchMsg.ItemID); if (item) { @@ -194,7 +192,7 @@ } } -void psServerCharManager::ViewItem(Client* client, int containerID, INVENTORY_SLOT_NUMBER slotID) +void ServerCharManager::ViewItem(Client* client, int containerID, INVENTORY_SLOT_NUMBER slotID) { // printf("Viewing item in Container %d, slot %d.\n", containerID, slotID); @@ -267,7 +265,7 @@ } } -void psServerCharManager::HandleBookWrite(MsgEntry* me, Client* client) +void ServerCharManager::HandleBookWrite(MsgEntry* me, Client* client) { psWriteBookMessage mesg(me); @@ -333,77 +331,12 @@ } } -void psServerCharManager::HandleMessage( MsgEntry* me, Client *client ) -{ - client = clients->FindAny(me->clientnum); - if (!client) - { - CPrintf (CON_ERROR, "***Couldn't find clientnum in serverchar HandleMessage\n"); - return; - } - - switch ( me->GetType() ) - { - // Case to handle incoming faction requests from a client. - // These should normally only be a request for a full - // list - case MSGTYPE_FACTION_INFO: - { - HandleFaction(me); - return; - } - - case MSGTYPE_GUIINVENTORY: - { - HandleInventoryMessage(me); - return; - } - - case MSGTYPE_VIEW_ITEM: - { - // printf("Got msgtype view item\n"); - ViewItem(me); - break; - } - - case MSGTYPE_VIEW_SKETCH: - { - UpdateSketch(me); - break; - } - //Not yet implemented, using /examine for now - case MSGTYPE_READ_BOOK: - { - ViewItem( me ); - break; - } - - case MSGTYPE_WRITE_BOOK: - { - HandleBookWrite( me, client ); - break; - } - - case MSGTYPE_GUIMERCHANT: - { - HandleMerchantMessage(me, client); - break; - } - } -} - - -void psServerCharManager::HandleFaction(MsgEntry* me) +void ServerCharManager::HandleFaction(MsgEntry* me,Client *client) { - Client* client = clients->Find(me->clientnum); - if (client==NULL) - return; - psCharacter *chardata=client->GetCharacterData(); if (chardata==NULL) return; - psFactionMessage outMsg(me->clientnum, psFactionMessage::MSG_FULL_LIST); @@ -424,11 +357,8 @@ * This handles all formats of inventory message. */ //--------------------------------------------------------------------------- -bool psServerCharManager::HandleInventoryMessage( MsgEntry* me ) +void ServerCharManager::HandleInventoryMessage(MsgEntry* me,Client *client) { - if ( !me ) - return false; - psGUIInventoryMessage incoming(me); int fromClientNumber = me->clientnum; @@ -437,19 +367,17 @@ case psGUIInventoryMessage::REQUEST: case psGUIInventoryMessage::UPDATE_REQUEST: { - SendInventory(fromClientNumber, - (static_cast<psGUIInventoryMessage::commands>(incoming.command)==psGUIInventoryMessage::UPDATE_REQUEST)); + SendInventory(fromClientNumber, (static_cast<psGUIInventoryMessage::commands>(incoming.command)==psGUIInventoryMessage::UPDATE_REQUEST)); break; } } - return true; } -bool psServerCharManager::SendInventory( int clientNum, bool sendUpdatesOnly) +bool ServerCharManager::SendInventory( int clientNum, bool sendUpdatesOnly) { psGUIInventoryMessage* outgoing; - Client* client = clients->Find(clientNum); + Client* client = psserver->GetNetManager()->GetClient(clientNum); if (client==NULL) return false; @@ -541,9 +469,9 @@ return true; } -bool psServerCharManager::UpdateItemViews( int clientNum ) +bool ServerCharManager::UpdateItemViews( int clientNum ) { - Client* client = clients->Find(clientNum); + Client* client = psserver->GetNetManager()->GetClient(clientNum); // If inventory window is up, update it SendInventory( clientNum ); @@ -561,7 +489,7 @@ return true; } -bool psServerCharManager::IsBanned(const char* name) +bool ServerCharManager::IsBanned(const char* name) { // Check if the name is banned csString nName = NormalizeCharacterName(name); @@ -575,7 +503,7 @@ } -bool psServerCharManager::HasConnected( csString name ) +bool ServerCharManager::HasConnected( csString name ) { int secondsLastLogin; secondsLastLogin = 0; @@ -599,7 +527,7 @@ return true; } -void psServerCharManager::BeginTrading(Client * client, gemObject * target, const csString & type) +void ServerCharManager::BeginTrading(Client * client, gemObject * target, const csString & type) { psCharacter * merchant = NULL; int clientnum = client->GetClientNum(); @@ -694,7 +622,7 @@ SendPlayerMoney(client); } -void psServerCharManager::HandleMerchantRequest(psGUIMerchantMessage& msg, Client *client) +void ServerCharManager::HandleMerchantRequest(psGUIMerchantMessage& msg, Client *client) { csRef<iDocumentNode> exchangeNode = ParseString(msg.commandData, "R"); if (!exchangeNode) @@ -727,7 +655,7 @@ BeginTrading(client, target, type); } -void psServerCharManager::HandleMerchantCategory(psGUIMerchantMessage& msg, Client *client) +void ServerCharManager::HandleMerchantCategory(psGUIMerchantMessage& msg, Client *client) { psCharacter* character = client->GetCharacterData(); @@ -767,7 +695,7 @@ } } -void psServerCharManager::HandleMerchantBuy(psGUIMerchantMessage& msg, Client *client) +void ServerCharManager::HandleMerchantBuy(psGUIMerchantMessage& msg, Client *client) { psCharacter* character = client->GetCharacterData(); csRef <iDocumentNode> merchantNode = ParseString(msg.commandData, "T"); @@ -919,7 +847,7 @@ } } -void psServerCharManager::HandleMerchantSell(psGUIMerchantMessage& msg, Client *client) +void ServerCharManager::HandleMerchantSell(psGUIMerchantMessage& msg, Client *client) { psCharacter* character = client->GetCharacterData(); csRef <iDocumentNode> merchantNode = ParseString(msg.commandData, "T"); @@ -1008,7 +936,7 @@ } } -void psServerCharManager::HandleMerchantView(psGUIMerchantMessage& msg, Client *client) +void ServerCharManager::HandleMerchantView(psGUIMerchantMessage& msg, Client *client) { psCharacter* character = client->GetCharacterData(); csRef <iDocumentNode> merchantNode = ParseString(msg.commandData, "V"); @@ -1048,7 +976,7 @@ } } -void psServerCharManager::HandleMerchantMessage( MsgEntry* me, Client *client ) +void ServerCharManager::HandleMerchantMessage( MsgEntry* me, Client *client ) { psGUIMerchantMessage msg(me); if (!msg.valid) @@ -1057,7 +985,7 @@ return; } - // CPrintf(CON_DEBUG, "psServerCharManager::HandleMerchantMessage (%s, %d,%s)\n", + // CPrintf(CON_DEBUG, "ServerCharManager::HandleMerchantMessage (%s, %d,%s)\n", // (const char*)client->GetName(),msg.command, (const char*)msg.commandData); switch (msg.command) @@ -1099,7 +1027,7 @@ } } -bool psServerCharManager::VerifyTrade( Client * client, psCharacter * character, psCharacter ** merchant, psMerchantInfo ** info, +bool ServerCharManager::VerifyTrade( Client * client, psCharacter * character, psCharacter ** merchant, psMerchantInfo ** info, const char * trade,const char * itemName, PID merchantID) { *merchant = character->GetMerchant(); @@ -1144,7 +1072,7 @@ } -void psServerCharManager::SendOutPlaySoundMessage( int clientnum, const char* itemsound, const char* action ) +void ServerCharManager::SendOutPlaySoundMessage( int clientnum, const char* itemsound, const char* action ) { if (clientnum == 0 || itemsound == NULL || action == NULL) return; @@ -1166,7 +1094,7 @@ // psserver->GetEventManager()->Multicast(msg, fromClient->GetActor()->GetMulticastClients(), 0, range ); } -void psServerCharManager::SendOutEquipmentMessages( gemActor* actor, +void ServerCharManager::SendOutEquipmentMessages( gemActor* actor, INVENTORY_SLOT_NUMBER slot, psItem* item, int equipped ) @@ -1201,7 +1129,7 @@ PROX_LIST_ANY_RANGE ); } -void psServerCharManager::SendPlayerMoney( Client *client ) +void ServerCharManager::SendPlayerMoney( Client *client ) { csString buff; @@ -1218,7 +1146,7 @@ psserver->GetEventManager()->SendMessage(msg.msg); } -bool psServerCharManager::SendMerchantItems( Client *client, psCharacter* merchant, psItemCategory* category) +bool ServerCharManager::SendMerchantItems( Client *client, psCharacter* merchant, psItemCategory* category) { csArray<psItem*> items = merchant->Inventory().GetItemsInCategory(category); @@ -1260,7 +1188,7 @@ return true; } -int psServerCharManager::CalculateMerchantPrice(psItem *item, Client *client, bool sellPrice) +int ServerCharManager::CalculateMerchantPrice(psItem *item, Client *client, bool sellPrice) { int basePrice = sellPrice?item->GetSellPrice().GetTotal():item->GetPrice().GetTotal(); int finalPrice = basePrice; @@ -1292,7 +1220,7 @@ return finalPrice; } -bool psServerCharManager::SendPlayerItems( Client *client, psItemCategory* category) +bool ServerCharManager::SendPlayerItems( Client *client, psItemCategory* category) { csArray<psItem*> items = client->GetCharacterData()->Inventory().GetItemsInCategory(category); @@ -1355,7 +1283,7 @@ return true; } -bool psServerCharManager::VerifyGoal(Client* client, psCharacter* character, psItem* goal) +bool ServerCharManager::VerifyGoal(Client* client, psCharacter* character, psItem* goal) { // glyph items can't be goals if (goal->GetCurrentStats()->GetIsGlyph()) Modified: trunk/src/server/psserverchar.h =================================================================== --- trunk/src/server/psserverchar.h 2009-01-10 07:13:35 UTC (rev 2848) +++ trunk/src/server/psserverchar.h 2009-01-10 07:15:06 UTC (rev 2849) @@ -38,7 +38,6 @@ #include "msgmanager.h" class MsgEntry; -class ClientConnectionSet; class psServer; class Client; class psMerchantInfo; @@ -60,22 +59,18 @@ * is an all or nothing sort of thing. By using this we can make * more efficient use of the net traffic */ -class psServerCharManager : public MessageManager +class ServerCharManager : public MessageManager { public: - psServerCharManager(); - virtual ~psServerCharManager(); + ServerCharManager(); + virtual ~ServerCharManager(); - bool Initialize( ClientConnectionSet* ccs); + bool Initialize(); - virtual void HandleMessage( MsgEntry *me, Client *client ); + virtual void HandleMessage( MsgEntry *me, Client *client ) { }; - // Handles any incomming messages about the character gui. - virtual bool HandleInventoryMessage( MsgEntry* me ); - void HandleFaction(MsgEntry* me); - /// Sends the client an inventory virtual bool SendInventory( int clientNum, bool sendUpdatesOnly=true ); @@ -116,6 +111,14 @@ protected: + void HandleBookWrite(MsgEntry* me, Client* client); + void HandleCraftTransInfo( MsgEntry * me, Client *client ); + /// Handles any incoming messages about the character gui. + void HandleInventoryMessage(MsgEntry* me, Client *client); + void HandleFaction(MsgEntry* me, Client *client); + void ViewItem( MsgEntry* me, Client *client); + void UpdateSketch( MsgEntry* me, Client *client); + // -------------------Merchant Handling ------------------------------- int CalculateMerchantPrice(psItem *item, Client *client, bool sellPrice); bool SendMerchantItems( Client *client, psCharacter * merchant, psItemCategory * category); @@ -129,8 +132,6 @@ bool SendPlayerItems( Client *client, psItemCategory * category); - void HandleBookWrite(MsgEntry* me, Client* client); - void HandleCraftTransInfo( MsgEntry * me, Client *client ); /// Return true if all trade params are ok bool VerifyTrade( Client * client, psCharacter * character, psCharacter ** merchant, psMerchantInfo ** info, @@ -139,13 +140,10 @@ // verifies that item dropped in mind slot is a valid goal bool VerifyGoal(Client* client, psCharacter* character, psItem* goal); - ClientConnectionSet* clients; +// ClientConnectionSet* clients; SlotManager *slotManager; - void ViewItem( MsgEntry* me ); - void UpdateSketch( MsgEntry* me ); - MathScript* calc_item_merchant_price_buy; MathScriptVar* calc_item_merchant_price_item_price_buy; MathScriptVar* calc_item_merchant_price_char_data_buy; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-10 07:30:54
|
Revision: 2850 http://planeshift.svn.sourceforge.net/planeshift/?rev=2850&view=rev Author: Vengeance2001 Date: 2009-01-10 07:30:48 +0000 (Sat, 10 Jan 2009) Log Message: ----------- Refactored two more managers to use functor messaging. Modified Paths: -------------- trunk/src/server/entitymanager.cpp trunk/src/server/psserverdr.cpp trunk/src/server/psserverdr.h trunk/src/server/questionmanager.cpp trunk/src/server/questionmanager.h trunk/src/server/questmanager.cpp Modified: trunk/src/server/entitymanager.cpp =================================================================== --- trunk/src/server/entitymanager.cpp 2009-01-10 07:15:06 UTC (rev 2849) +++ trunk/src/server/entitymanager.cpp 2009-01-10 07:30:48 UTC (rev 2850) @@ -146,7 +146,7 @@ gem = new GEMSupervisor(object_reg,psserver->GetDatabase()); serverdr = new psServerDR; - if (!serverdr->Initialize(this, clients)) + if (!serverdr->Initialize()) { delete serverdr; serverdr = NULL; Modified: trunk/src/server/psserverdr.cpp =================================================================== --- trunk/src/server/psserverdr.cpp 2009-01-10 07:15:06 UTC (rev 2849) +++ trunk/src/server/psserverdr.cpp 2009-01-10 07:30:48 UTC (rev 2850) @@ -60,10 +60,10 @@ #include "psproxlist.h" #include "globals.h" + + psServerDR::psServerDR() { - entitymanager = NULL; - clients = NULL; paladin = NULL; } @@ -71,16 +71,13 @@ { if (psserver->GetEventManager()) psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_DEAD_RECKONING); - //delete paladin; + + delete paladin; } -bool psServerDR::Initialize(EntityManager* entitymanager, - ClientConnectionSet* clients) +bool psServerDR::Initialize() { - psServerDR::entitymanager = entitymanager; - psServerDR::clients = clients; - - if (!psserver->GetEventManager()->Subscribe(this,MSGTYPE_DEAD_RECKONING,REQUIRE_READY_CLIENT)) + if (!psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psServerDR>(this,&psServerDR::HandleDeadReckoning),MSGTYPE_DEAD_RECKONING,REQUIRE_READY_CLIENT)) return false; calc_damage = psserver->GetMathScriptEngine()->FindScript("Calculate Fall Damage"); @@ -90,13 +87,12 @@ return false; } - // Output var bindings here var_fall_height = calc_damage->GetVar("FallHeight"); var_fall_dmg = calc_damage->GetVar("Damage"); paladin = new PaladinJr; - paladin->Initialize(entitymanager); + paladin->Initialize(psserver->entitymanager); return true; } @@ -149,7 +145,7 @@ actor->MulticastDRUpdate(); } -void psServerDR::HandleMessage(MsgEntry* me,Client *client) +void psServerDR::HandleDeadReckoning(MsgEntry* me,Client *client) { psDRMessage drmsg(me,CacheManager::GetSingleton().GetMsgStrings(),EntityManager::GetSingleton().GetEngine() ); if (!drmsg.valid) Modified: trunk/src/server/psserverdr.h =================================================================== --- trunk/src/server/psserverdr.h 2009-01-10 07:15:06 UTC (rev 2849) +++ trunk/src/server/psserverdr.h 2009-01-10 07:30:48 UTC (rev 2850) @@ -32,14 +32,11 @@ #include "msgmanager.h" class psCelClient; -class ClientConnectionSet; class MsgEntry; class gemActor; class MathScript; class MathScriptVar; class PaladinJr; -class EntityManager; -class psServerDR; class psServerDR : public MessageManager { @@ -47,15 +44,16 @@ psServerDR(); virtual ~psServerDR(); - bool Initialize(EntityManager* celbase, - ClientConnectionSet* clients); + bool Initialize(); void SendPersist(); - virtual void HandleMessage(MsgEntry* me,Client *client); + virtual void HandleMessage(MsgEntry* me,Client *client) {} protected: + void HandleDeadReckoning(MsgEntry* me,Client *client); + /// If the entity was falling and stops falling, this is called. void HandleFallDamage(gemActor *actor,int clientnum, const csVector3& pos, iSector* sector); void ResetPos(gemActor* actor); @@ -65,8 +63,8 @@ MathScriptVar *var_fall_height; MathScriptVar *var_fall_dmg; - EntityManager *entitymanager; - ClientConnectionSet *clients; +// EntityManager *entitymanager; +// ClientConnectionSet *clients; PaladinJr *paladin; }; Modified: trunk/src/server/questionmanager.cpp =================================================================== --- trunk/src/server/questionmanager.cpp 2009-01-10 07:15:06 UTC (rev 2849) +++ trunk/src/server/questionmanager.cpp 2009-01-10 07:30:48 UTC (rev 2850) @@ -92,12 +92,12 @@ } /************************************************************** -* class QuestionManager +* class QuestionManager ***************************************************************/ QuestionManager::QuestionManager() { - psserver->GetEventManager()->Subscribe(this,MSGTYPE_QUESTIONRESPONSE,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<QuestionManager>(this,&QuestionManager::HandleQuestionResponse),MSGTYPE_QUESTIONRESPONSE,REQUIRE_READY_CLIENT); } QuestionManager::~QuestionManager() @@ -105,7 +105,7 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_QUESTIONRESPONSE); } -void QuestionManager::HandleMessage(MsgEntry *me,Client *client) +void QuestionManager::HandleQuestionResponse(MsgEntry *me,Client *client) { psQuestionResponseMsg msg(me); if (!msg.valid) Modified: trunk/src/server/questionmanager.h =================================================================== --- trunk/src/server/questionmanager.h 2009-01-10 07:15:06 UTC (rev 2849) +++ trunk/src/server/questionmanager.h 2009-01-10 07:30:48 UTC (rev 2850) @@ -116,7 +116,7 @@ QuestionManager(); virtual ~QuestionManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } /** Sends a question to a client */ void SendQuestion(PendingQuestion *question); @@ -125,6 +125,8 @@ void CancelQuestion(PendingQuestion *question); protected: + + void HandleQuestionResponse(MsgEntry *pMsg,Client *client); BinaryRBTree<PendingQuestion> questions; /** questions indexed by IDs */ }; Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-01-10 07:15:06 UTC (rev 2849) +++ trunk/src/server/questmanager.cpp 2009-01-10 07:30:48 UTC (rev 2850) @@ -1044,10 +1044,6 @@ } - - - - void QuestManager::HandleMessage(MsgEntry *me,Client *who) { if (me->GetType() == MSGTYPE_QUESTINFO) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-11 07:25:21
|
Revision: 2862 http://planeshift.svn.sourceforge.net/planeshift/?rev=2862&view=rev Author: Vengeance2001 Date: 2009-01-11 07:25:12 +0000 (Sun, 11 Jan 2009) Log Message: ----------- Converted two more managers to use functor messaging. Fixed a bad bug in SlotManager which was causing every drop message to also be attempted as a slot move message. Modified Paths: -------------- trunk/src/server/questmanager.cpp trunk/src/server/questmanager.h trunk/src/server/slotmanager.cpp trunk/src/server/slotmanager.h Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-01-11 06:40:56 UTC (rev 2861) +++ trunk/src/server/questmanager.cpp 2009-01-11 07:25:12 UTC (rev 2862) @@ -57,9 +57,8 @@ QuestManager::QuestManager() { - psserver->GetEventManager()->Subscribe(this,MSGTYPE_QUESTINFO,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_QUESTREWARD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<QuestManager>(this,&QuestManager::HandleQuestInfo), MSGTYPE_QUESTINFO,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<QuestManager>(this,&QuestManager::HandleQuestReward),MSGTYPE_QUESTREWARD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); } QuestManager::~QuestManager() @@ -1043,67 +1042,64 @@ return result; } - -void QuestManager::HandleMessage(MsgEntry *me,Client *who) +void QuestManager::HandleQuestInfo(MsgEntry *me,Client *who) { - if (me->GetType() == MSGTYPE_QUESTINFO) - { - psQuestInfoMessage msg(me); - QuestAssignment *q = who->GetActor()->GetCharacterData()->IsQuestAssigned(msg.id); + psQuestInfoMessage msg(me); + QuestAssignment *q = who->GetActor()->GetCharacterData()->IsQuestAssigned(msg.id); - if (q) + if (q) + { + if (msg.command == psQuestInfoMessage::CMD_DISCARD) { - if (msg.command == psQuestInfoMessage::CMD_DISCARD) - { - // Discard quest assignment on request - who->GetActor()->GetCharacterData()->DiscardQuest(q); - } - else - { - psQuestInfoMessage response(me->clientnum,psQuestInfoMessage::CMD_INFO, - q->GetQuest()->GetID(),q->GetQuest()->GetName(),q->GetQuest()->GetTask()); - response.SendMessage(); - } + // Discard quest assignment on request + who->GetActor()->GetCharacterData()->DiscardQuest(q); } else { - if (msg.command == psQuestInfoMessage::CMD_DISCARD) - { - Error3("Client %s requested discard of unassigned quest id #%u!",who->GetName(),msg.id); - } - else - { - Error3("Client %s requested unassigned quest id #%u!",who->GetName(),msg.id); - } + psQuestInfoMessage response(me->clientnum,psQuestInfoMessage::CMD_INFO, + q->GetQuest()->GetID(),q->GetQuest()->GetName(),q->GetQuest()->GetTask()); + response.SendMessage(); } } - else if (me->GetType() == MSGTYPE_QUESTREWARD) + else { - psQuestRewardMessage msg(me); + if (msg.command == psQuestInfoMessage::CMD_DISCARD) + { + Error3("Client %s requested discard of unassigned quest id #%u!",who->GetName(),msg.id); + } + else + { + Error3("Client %s requested unassigned quest id #%u!",who->GetName(),msg.id); + } + } +} - if (msg.msgType==psQuestRewardMessage::selectReward) +void QuestManager::HandleQuestReward(MsgEntry *me,Client *who) +{ + psQuestRewardMessage msg(me); + + if (msg.msgType==psQuestRewardMessage::selectReward) + { + // verify that this item was really offered to the client as a + // possible reward + for (size_t z=0;z<offers.GetSize();z++) { - // verify that this item was really offered to the client as a - // possible reward - for (size_t z=0;z<offers.GetSize();z++) + QuestRewardOffer* offer = offers[z]; + if (offer->clientID==me->clientnum) { - QuestRewardOffer* offer = offers[z]; - if (offer->clientID==me->clientnum) + for (size_t x=0;x<offer->items.GetSize();x++) { - for (size_t x=0;x<offer->items.GetSize();x++) + uint32 itemID = (uint32)atoi(msg.newValue.GetData()); + + if (offer->items[x]->GetUID()==itemID) { - uint32 itemID = (uint32)atoi(msg.newValue.GetData()); + // this item has indeed been offered to the client + // so the item can now be given to client (player) + GiveRewardToPlayer(who, offer->items[x]); - if (offer->items[x]->GetUID()==itemID) - { - // this item has indeed been offered to the client - // so the item can now be given to client (player) - GiveRewardToPlayer(who, offer->items[x]); - - // remove the offer from the list - offers.DeleteIndex(z); - return; - } + // remove the offer from the list + offers.DeleteIndex(z); + return; } } } @@ -1111,6 +1107,8 @@ } } + + void QuestManager::OfferRewardsToPlayer(Client *who, csArray<psItemStats*> &offer,csTicks &timeDelay) { csString rewardList; Modified: trunk/src/server/questmanager.h =================================================================== --- trunk/src/server/questmanager.h 2009-01-11 06:40:56 UTC (rev 2861) +++ trunk/src/server/questmanager.h 2009-01-11 07:25:12 UTC (rev 2862) @@ -106,7 +106,10 @@ psQuest *mainQuest, bool& quest_assigned_already, psQuest *quest); - + + void HandleQuestInfo(MsgEntry *pMsg,Client *client); + void HandleQuestReward(MsgEntry *pMsg,Client *client); + public: QuestManager(); @@ -114,7 +117,7 @@ bool Initialize(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } void Assign(psQuest *quest, Client *who, gemNPC *assigner); bool Complete(psQuest *quest, Client *who); Modified: trunk/src/server/slotmanager.cpp =================================================================== --- trunk/src/server/slotmanager.cpp 2009-01-11 06:40:56 UTC (rev 2861) +++ trunk/src/server/slotmanager.cpp 2009-01-11 07:25:12 UTC (rev 2862) @@ -61,22 +61,14 @@ bool SlotManager::Initialize() { worldContainer = NULL; - psserver->GetEventManager()->Subscribe(this, MSGTYPE_SLOT_MOVEMENT, REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this, MSGTYPE_CMDDROP, REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<SlotManager>(this,&SlotManager::HandleSlotMovement),MSGTYPE_SLOT_MOVEMENT, REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<SlotManager>(this,&SlotManager::HandleDropCommand),MSGTYPE_CMDDROP, REQUIRE_READY_CLIENT); return true; } -void SlotManager::HandleMessage(MsgEntry* me, Client *fromClient) +void SlotManager::HandleSlotMovement(MsgEntry* me, Client *fromClient) { - // Those are the only two types of messages we should handle - if (me->GetType() == MSGTYPE_CMDDROP) - { - CmdDrop(me, fromClient); - } - else if (me->GetType() != MSGTYPE_SLOT_MOVEMENT) - return; - psSlotMovementMsg mesg(me); // printf("Got slot movement message for %d stacked items.\n", mesg.stackCount); // printf("--> From container %d, slot %d\n", mesg.fromContainer, mesg.fromSlot); @@ -927,7 +919,7 @@ } } -void SlotManager::CmdDrop(MsgEntry* me, Client *fromClient) +void SlotManager::HandleDropCommand(MsgEntry* me, Client *fromClient) { psCmdDropMessage mesg(me); if (mesg.quantity < 1) Modified: trunk/src/server/slotmanager.h =================================================================== --- trunk/src/server/slotmanager.h 2009-01-11 06:40:56 UTC (rev 2861) +++ trunk/src/server/slotmanager.h 2009-01-11 07:25:12 UTC (rev 2862) @@ -47,7 +47,7 @@ bool Initialize(); - virtual void HandleMessage(MsgEntry *me, Client *client); + virtual void HandleMessage(MsgEntry *me, Client *client) { } static psItem* FindItem(Client* client, int containerID, INVENTORY_SLOT_NUMBER slotID); @@ -55,6 +55,11 @@ int containerEntityID; // Working ID of the container ID private: + + ///drop a stack of the item type requested by searching into the different slots + void HandleDropCommand(MsgEntry *me, Client *client); + void HandleSlotMovement(MsgEntry *me, Client *client); + /** Create a money item. * * @param slot One of the four money slots. @@ -80,9 +85,6 @@ /// Consume an item and fire off any progression events it has. static void Consume(psItem* item, psCharacter *charData, int count); - - ///drop a stack of the item type requested by searching into the different slots - void CmdDrop(MsgEntry* me, Client *fromClient); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-11 07:33:27
|
Revision: 2863 http://planeshift.svn.sourceforge.net/planeshift/?rev=2863&view=rev Author: Vengeance2001 Date: 2009-01-11 07:33:24 +0000 (Sun, 11 Jan 2009) Log Message: ----------- One more functor messaging conversion. Modified Paths: -------------- trunk/src/server/spawnmanager.cpp trunk/src/server/spawnmanager.h Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2009-01-11 07:25:12 UTC (rev 2862) +++ trunk/src/server/spawnmanager.cpp 2009-01-11 07:33:24 UTC (rev 2863) @@ -186,8 +186,8 @@ PreloadDatabase(); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_LOOTITEM,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DEATH_EVENT,NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpawnManager>(this,&SpawnManager::HandleLootItem),MSGTYPE_LOOTITEM,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpawnManager>(this,&SpawnManager::HandleDeathEvent),MSGTYPE_DEATH_EVENT,NO_VALIDATION); } SpawnManager::~SpawnManager() @@ -848,18 +848,6 @@ #define SPAWN_POINT_TAKEN 999 #define SPAWN_BASE_ITEM 1000 -void SpawnManager::HandleMessage(MsgEntry *me,Client *client) -{ - if (me->GetType() == MSGTYPE_LOOTITEM) - { - HandleLootItem(me,client); - return; - } - if (me->GetType() == MSGTYPE_DEATH_EVENT) - { - HandleDeathEvent(me); - } -} void SpawnManager::Respawn(InstanceID instance, csVector3& where, float rot, csString& sector, PID playerID) { @@ -1032,7 +1020,7 @@ } -void SpawnManager::HandleDeathEvent(MsgEntry *me) +void SpawnManager::HandleDeathEvent(MsgEntry *me,Client *notused) { Debug1(LOG_SPAWN,0, "Spawn Manager handling Death Event\n"); psDeathEvent death(me); Modified: trunk/src/server/spawnmanager.h =================================================================== --- trunk/src/server/spawnmanager.h 2009-01-11 07:25:12 UTC (rev 2862) +++ trunk/src/server/spawnmanager.h 2009-01-11 07:33:24 UTC (rev 2863) @@ -313,7 +313,7 @@ LootRandomizer *lootRandomizer; void HandleLootItem(MsgEntry *me,Client *client); - void HandleDeathEvent(MsgEntry *me); + void HandleDeathEvent(MsgEntry *me,Client *notused); public: @@ -371,7 +371,7 @@ /** * This function receives inbound net messages from the client. */ - void HandleMessage(MsgEntry *me,Client *client); + void HandleMessage(MsgEntry *me,Client *client) { }; /** * This function is called periodically by the server and will respawn This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-11 22:50:36
|
Revision: 2864 http://planeshift.svn.sourceforge.net/planeshift/?rev=2864&view=rev Author: Vengeance2001 Date: 2009-01-11 22:50:29 +0000 (Sun, 11 Jan 2009) Log Message: ----------- Updated tutorial and spell manager to functor messaging. Renamed psSpellManager to SpellManager for consistency. Modified Paths: -------------- trunk/src/server/bulkobjects/psspell.cpp trunk/src/server/bulkobjects/psspell.h trunk/src/server/psserver.cpp trunk/src/server/psserver.h trunk/src/server/psserverchar.cpp trunk/src/server/spellmanager.cpp trunk/src/server/spellmanager.h trunk/src/server/tutorialmanager.cpp trunk/src/server/tutorialmanager.h trunk/src/server/usermanager.cpp Modified: trunk/src/server/bulkobjects/psspell.cpp =================================================================== --- trunk/src/server/bulkobjects/psspell.cpp 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/bulkobjects/psspell.cpp 2009-01-11 22:50:29 UTC (rev 2864) @@ -232,7 +232,7 @@ return true; } -psSpellCastGameEvent *psSpell::Cast(psSpellManager * mgr, Client * client, csString &effectName, +psSpellCastGameEvent *psSpell::Cast(SpellManager * mgr, Client * client, csString &effectName, csVector3 &offset, EID &anchorID, EID &targetID, unsigned int &castingDuration, csString & castingText) const { gemActor *caster = client->GetActor(); @@ -444,7 +444,7 @@ return targetsInRange; } -bool psSpell::AffectTargets(psSpellManager * mgr, psSpellCastGameEvent * event, csString &effectName, csVector3 &offset, +bool psSpell::AffectTargets(SpellManager * mgr, psSpellCastGameEvent * event, csString &effectName, csVector3 &offset, EID &anchorID, EID &targetID, csString & affectText) const { gemActor * caster = event->caster->GetActor(); Modified: trunk/src/server/bulkobjects/psspell.h =================================================================== --- trunk/src/server/bulkobjects/psspell.h 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/bulkobjects/psspell.h 2009-01-11 22:50:29 UTC (rev 2864) @@ -36,7 +36,7 @@ #include "psskills.h" class csVector3; -class psSpellManager; +class SpellManager; class Client; class gemObject; class gemActor; @@ -112,7 +112,7 @@ * * @return An array of new psSpellCastGameEvents that are ready to be pushed inot the event stream. */ - psSpellCastGameEvent *Cast(psSpellManager * mgr, Client * client, csString &effectName, csVector3 &offset, + psSpellCastGameEvent *Cast(SpellManager * mgr, Client * client, csString &effectName, csVector3 &offset, EID & anchorID, EID & targetID, unsigned int & castingDuration, csString & castingText) const; /** Find all objects in range for spell around caster @@ -125,7 +125,7 @@ */ csArray< gemObject *> *getTargetsInRange(Client * client, float max_range, float range) const; - bool AffectTargets(psSpellManager * mgr,psSpellCastGameEvent * event, csString &effectName, csVector3 &offset, + bool AffectTargets(SpellManager * mgr,psSpellCastGameEvent * event, csString &effectName, csVector3 &offset, EID & anchorID, EID & targetID, csString & affectText) const; bool AffectTarget( psSpellCastGameEvent * event, csString &effectName, csVector3 &offset, EID & anchorID, EID & targetID, csString & affectText) const; Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/psserver.cpp 2009-01-11 22:50:29 UTC (rev 2864) @@ -423,7 +423,7 @@ Debug1(LOG_STARTUP,0,"Started Combat Manager\n"); // Start Spell Manager - spellmanager = new psSpellManager(GetConnections(), object_reg); + spellmanager = new SpellManager(GetConnections(), object_reg); Debug1(LOG_STARTUP,0,"Started Spell Manager\n"); // Start Weather Manager Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/psserver.h 2009-01-11 22:50:29 UTC (rev 2864) @@ -60,7 +60,7 @@ class ServerStatus; class psMarriageManager; class CombatManager; -class psSpellManager; +class SpellManager; class ExchangeManager; class ProgressionManager; class NPCManager; @@ -296,7 +296,7 @@ * @return Returns a reference to the current spell manager for the * server. */ - psSpellManager* GetSpellManager() { return spellmanager; } + SpellManager* GetSpellManager() { return spellmanager; } /** Returns the work manager. * @@ -524,7 +524,7 @@ SpawnManager* spawnmanager; csRef<EventManager> eventmanager; WeatherManager* weathermanager; - psSpellManager* spellmanager; + SpellManager* spellmanager; ProgressionManager* progression; psWorkManager* workmanager; EconomyManager* economymanager; Modified: trunk/src/server/psserverchar.cpp =================================================================== --- trunk/src/server/psserverchar.cpp 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/psserverchar.cpp 2009-01-11 22:50:29 UTC (rev 2864) @@ -477,7 +477,7 @@ SendInventory( clientNum ); // If glyph window is up, update it - psserver->GetSpellManager()->SendGlyphs(client); + psserver->GetSpellManager()->SendGlyphs(NULL,client); if ( slotManager->worldContainer ) { Modified: trunk/src/server/spellmanager.cpp =================================================================== --- trunk/src/server/spellmanager.cpp 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/spellmanager.cpp 2009-01-11 22:50:29 UTC (rev 2864) @@ -52,7 +52,7 @@ #include "commandmanager.h" -psSpellManager::psSpellManager(ClientConnectionSet *ccs, +SpellManager::SpellManager(ClientConnectionSet *ccs, iObjectRegistry * object_reg) { clients = ccs; @@ -60,12 +60,12 @@ randomgen = psserver->rng; - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GLYPH_REQUEST,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GLYPH_ASSEMBLE,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_SPELL_CAST,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_PURIFY_GLYPH,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_SPELL_BOOK,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_SPELL_CANCEL,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpellManager>(this,&SpellManager::SendGlyphs),MSGTYPE_GLYPH_REQUEST,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpellManager>(this,&SpellManager::HandleAssembler),MSGTYPE_GLYPH_ASSEMBLE,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpellManager>(this,&SpellManager::Cast),MSGTYPE_SPELL_CAST,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpellManager>(this,&SpellManager::StartPurifying),MSGTYPE_PURIFY_GLYPH,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpellManager>(this,&SpellManager::SendSpellBook),MSGTYPE_SPELL_BOOK,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<SpellManager>(this,&SpellManager::HandleCancelSpell),MSGTYPE_SPELL_CANCEL,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); researchSpellScript = psserver->GetMathScriptEngine()->FindScript("CalculateChanceOfResearchSuccess"); if ( researchSpellScript ) @@ -80,7 +80,7 @@ } } -psSpellManager::~psSpellManager() +SpellManager::~SpellManager() { if (psserver->GetEventManager()) { @@ -93,57 +93,14 @@ } } -void psSpellManager::HandleMessage(MsgEntry *me,Client *client) -{ - switch( me->GetType()) - { - case MSGTYPE_SPELL_CAST: - { - psSpellCastMessage mesg(me); - Cast(client,mesg.spell,mesg.kFactor); - break; - } - case MSGTYPE_PURIFY_GLYPH: - { - psPurifyGlyphMessage mesg(me); - StartPurifying(client, mesg.glyph); - break; - } - case MSGTYPE_SPELL_BOOK: - { - SendSpellBook( client ); - break; - } - case MSGTYPE_GLYPH_REQUEST: - { - SendGlyphs( client ); - break; - } - case MSGTYPE_GLYPH_ASSEMBLE: - { - HandleAssembler( client, me ); - break; - } - - case MSGTYPE_SPELL_CANCEL: - { - client->GetCharacterData()->InterruptSpellCasting(); - break; - } - } -} -//debug: -void DumpAssembler(Client * client, glyphList_t & assembler) +void SpellManager::HandleCancelSpell(MsgEntry* notused, Client* client) { - psString msg; - msg=""; - for (size_t i=0; i < assembler.GetSize(); i++) - msg.AppendFmt("S%u ",assembler[i]->GetUID()); - psserver->SendSystemInfo(client->GetClientNum(), msg.GetData()); + client->GetCharacterData()->InterruptSpellCasting(); } -void psSpellManager::HandleAssembler( Client* client, MsgEntry* me ) + +void SpellManager::HandleAssembler(MsgEntry* me, Client* client) { psGlyphAssembleMessage mesg; mesg.FromClient( me ); @@ -172,7 +129,7 @@ if (!client->GetCharacterData()->Inventory().HasPurifiedGlyphs(assembler)) { Error2( "Client %i tried to research spell with glyphs he actually doesn't have", client->GetClientNum() ); - SendGlyphs( client ); + SendGlyphs(NULL,client); return; } @@ -256,7 +213,7 @@ } -void psSpellManager::SaveSpell(Client * client, csString spellName) +void SpellManager::SaveSpell(Client * client, csString spellName) { psSpell * spell = client->GetCharacterData()->GetSpellByName(spellName); if (spell) @@ -279,14 +236,18 @@ psServer::CharacterLoader.SaveCharacterData(client->GetCharacterData(),client->GetActor()); - SendSpellBook(client); + SendSpellBook(NULL,client); psserver->SendSystemInfo(client->GetClientNum(), "%s added to your spell book!",spellName.GetData()); } -void psSpellManager::Cast(Client * client, csString spellName, float kFactor) +void SpellManager::Cast(MsgEntry *me, Client * client) { + psSpellCastMessage msg(me); + psSpell *spell = NULL; + csString spellName = msg.spell; + float kFactor = msg.kFactor; // Allow developers to cast any spell, even if unknown to the character. if (CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), "cast all spells")) @@ -342,7 +303,7 @@ } } -void psSpellManager::SendSpellBook(Client * client) +void SpellManager::SendSpellBook(MsgEntry *notused, Client * client) { psSpellBookMessage mesg(client->GetClientNum()); csArray<psSpell*> spells = client->GetCharacterData()->GetSpellList(); @@ -369,7 +330,7 @@ mesg.SendMessage(); } -void psSpellManager::SendGlyphs( Client * client) +void SpellManager::SendGlyphs(MsgEntry *notused, Client * client) { psCharacter * character = client->GetCharacterData(); csArray <glyphSlotInfo> slots; @@ -444,8 +405,11 @@ return NULL; } -void psSpellManager::StartPurifying(Client * client, int statID) +void SpellManager::StartPurifying(MsgEntry *me, Client * client) { + psPurifyGlyphMessage mesg(me); + int statID = mesg.glyph; + psCharacter* character = client->GetCharacterData(); psGlyph* glyph = FindUnpurifiedGlyph(character, statID); @@ -475,7 +439,7 @@ // Reset the stack count to account for the one that was destroyed. stackOfGlyphs->SetStackCount(stackOfGlyphs->GetStackCount() + 1); - SendGlyphs(client); + SendGlyphs(NULL,client); return; } stackOfGlyphs->Save(false); @@ -495,11 +459,11 @@ event.Format("<evt><script delay=\"%d\" persistent=\"yes\"><purify glyph=\"%u\"/></script></evt>",20000,glyph->GetUID()); psserver->GetProgressionManager()->ProcessScript(event.GetData(),client->GetActor(),client->GetActor()); - SendGlyphs(client); + SendGlyphs(NULL,client); psserver->GetCharManager()->SendInventory(client->GetClientNum()); } -void psSpellManager::EndPurifying(psCharacter * character, uint32 glyphUID) +void SpellManager::EndPurifying(psCharacter * character, uint32 glyphUID) { Client * client = clients->FindPlayer(character->GetPID()); if (!client) @@ -517,14 +481,14 @@ glyph->PurifyingFinished(); glyph->Save(false); psserver->SendSystemInfo(client->GetClientNum(), "The glyph %s is now purified", glyph->GetName()); - SendGlyphs(client); + SendGlyphs(NULL,client); psserver->GetCharManager()->SendInventory(client->GetClientNum()); return; } } } -psSpell* psSpellManager::FindSpell(Client * client, const glyphList_t & assembler) +psSpell* SpellManager::FindSpell(Client * client, const glyphList_t & assembler) { CacheManager::SpellIterator loop = CacheManager::GetSingleton().GetSpellIterator(); @@ -544,12 +508,12 @@ return NULL; } -psSpell* psSpellManager::FindSpell(csString& name) +psSpell* SpellManager::FindSpell(csString& name) { return CacheManager::GetSingleton().GetSpellByName(name); } -psSpell* psSpellManager::FindSpell(int spellID) +psSpell* SpellManager::FindSpell(int spellID) { return CacheManager::GetSingleton().GetSpellByID(spellID); } @@ -557,7 +521,7 @@ /** * This is the meat and potatoes of the spell engine here. */ -void psSpellManager::HandleSpellCastEvent(psSpellCastGameEvent *event) +void SpellManager::HandleSpellCastEvent(psSpellCastGameEvent *event) { csString responseEffectName; csVector3 offset; @@ -630,7 +594,7 @@ } } -void psSpellManager::HandleSpellAffectEvent( psSpellAffectGameEvent *event ) +void SpellManager::HandleSpellAffectEvent( psSpellAffectGameEvent *event ) { // Since we just came in from an event, make sure target is still alive. if ( event->target->IsAlive()) @@ -673,7 +637,7 @@ /*-------------------------------------------------------------*/ -psSpellCastGameEvent::psSpellCastGameEvent(psSpellManager *mgr, +psSpellCastGameEvent::psSpellCastGameEvent(SpellManager *mgr, const psSpell * spell, Client *caster, gemObject *target, @@ -755,7 +719,7 @@ /*-------------------------------------------------------------*/ -psSpellAffectGameEvent::psSpellAffectGameEvent(psSpellManager *mgr, +psSpellAffectGameEvent::psSpellAffectGameEvent(SpellManager *mgr, const psSpell *spell, Client *caster, gemObject *target, Modified: trunk/src/server/spellmanager.h =================================================================== --- trunk/src/server/spellmanager.h 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/spellmanager.h 2009-01-11 22:50:29 UTC (rev 2864) @@ -59,13 +59,13 @@ /** Manager class that handles loading/searching/casting spells. * This class also manages a number of psSpell Events. */ -class psSpellManager : public MessageManager +class SpellManager : public MessageManager { public: - psSpellManager(ClientConnectionSet *clients, + SpellManager(ClientConnectionSet *clients, iObjectRegistry * object_reg); - virtual ~psSpellManager(); + virtual ~SpellManager(); /** Handles a network message. * This is a factory for the different types of message that the manager handles. @@ -73,7 +73,7 @@ * @param me The message entry incoming. * @param client The client that this message came from. */ - virtual void HandleMessage(MsgEntry *me,Client *client); + virtual void HandleMessage(MsgEntry *me,Client *client) { } /** Purifying on a glyph has been complete. * This will send out a network message to the client and update it's inventory @@ -89,7 +89,7 @@ * * @param client The client that will be sent it's current glyphs. */ - void SendGlyphs(Client * client); + void SendGlyphs(MsgEntry *notused, Client * client); /** Handles a cast event object. * @param event The event that needs to be handled. @@ -115,13 +115,15 @@ * @param spellName The name of the spell to cast. * @param kFactor The power factor that the spell is cast with. */ - void Cast(Client * client, csString spellName, float kFactor); - + void Cast(MsgEntry *me, Client * client); + + void HandleCancelSpell(MsgEntry* notused, Client* client); + /** Send the player's spell book. * * @param client The client that will be sent the spell book. */ - void SendSpellBook(Client * client); + void SendSpellBook(MsgEntry *notused, Client * client); /** Start to purify a glyph. * This will also send out notifications to the client about the start of operation. @@ -129,7 +131,7 @@ * @param client The client that this data is for. * @param The stat ID of the glyph that the player wants to purify. */ - void StartPurifying(Client * client, int statID); + void StartPurifying(MsgEntry *me, Client * client); /** Find a spell in the assorted glyphs. * This checks ths list of glyphs and see if it matches any @@ -163,7 +165,7 @@ * @param client The client this is for. * @param me The message from that client. */ - void HandleAssembler(Client* client, MsgEntry* me); + void HandleAssembler(MsgEntry* me,Client* client); MathScript *researchSpellScript; MathScriptVar *varCaster; @@ -183,7 +185,7 @@ class psSpellCastGameEvent : public psGameEvent, public iDeleteObjectCallback { protected: - psSpellManager *spellmanager; + SpellManager *spellmanager; public: @@ -195,7 +197,7 @@ float powerLevel; csTicks duration; - psSpellCastGameEvent(psSpellManager *mgr, + psSpellCastGameEvent(SpellManager *mgr, const psSpell *spell, Client *caster, gemObject *target, @@ -220,7 +222,7 @@ class psSpellAffectGameEvent : public psGameEvent, public iDeleteObjectCallback, public iDeathCallback { protected: - psSpellManager *spellmanager; + SpellManager *spellmanager; public: @@ -233,7 +235,7 @@ float powerLevel; csTicks duration; - psSpellAffectGameEvent(psSpellManager *mgr, + psSpellAffectGameEvent(SpellManager *mgr, const psSpell *spell, Client *caster, gemObject *target, Modified: trunk/src/server/tutorialmanager.cpp =================================================================== --- trunk/src/server/tutorialmanager.cpp 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/tutorialmanager.cpp 2009-01-11 22:50:29 UTC (rev 2864) @@ -49,12 +49,12 @@ TutorialManager::TutorialManager(ClientConnectionSet *pCCS) { clients = pCCS; - psserver->GetEventManager()->Subscribe(this,MSGTYPE_CONNECT_EVENT, REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_MOVEMENT_EVENT,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_TARGET_EVENT, NO_VALIDATION); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_GENERIC_EVENT, REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DAMAGE_EVENT, NO_VALIDATION); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DEATH_EVENT, NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<TutorialManager>(this,&TutorialManager::HandleConnect),MSGTYPE_CONNECT_EVENT, REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<TutorialManager>(this,&TutorialManager::HandleMovement),MSGTYPE_MOVEMENT_EVENT,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<TutorialManager>(this,&TutorialManager::HandleTarget),MSGTYPE_TARGET_EVENT, NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<TutorialManager>(this,&TutorialManager::HandleGeneric),MSGTYPE_GENERIC_EVENT, REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<TutorialManager>(this,&TutorialManager::HandleDamage),MSGTYPE_DAMAGE_EVENT, NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<TutorialManager>(this,&TutorialManager::HandleDeath),MSGTYPE_DEATH_EVENT, NO_VALIDATION); LoadTutorialStrings(); } @@ -99,24 +99,11 @@ msg.SendMessage(); } -void TutorialManager::HandleMessage(MsgEntry *pMsg,Client *client) -{ - switch (pMsg->GetType()) - { - case MSGTYPE_CONNECT_EVENT: HandleConnect(pMsg,client); break; - case MSGTYPE_MOVEMENT_EVENT: HandleMovement(pMsg,client); break; - case MSGTYPE_TARGET_EVENT: HandleTarget(pMsg,client); break; - case MSGTYPE_DAMAGE_EVENT: HandleDamage(pMsg,client); break; - case MSGTYPE_DEATH_EVENT: HandleDeath(pMsg,client); break; - case MSGTYPE_GENERIC_EVENT: HandleGeneric(pMsg,client); break; - default: break; - } -} -void TutorialManager::HandleConnect(MsgEntry *pMsg,Client *client) +void TutorialManager::HandleConnect(MsgEntry *me,Client *client) { // printf("Got psConnectEvent\n"); - psConnectEvent evt(pMsg); + psConnectEvent evt(me); if (client) { psCharacter *ch = client->GetCharacterData(); @@ -128,10 +115,10 @@ } } -void TutorialManager::HandleMovement(MsgEntry *pMsg,Client *client) +void TutorialManager::HandleMovement(MsgEntry *me,Client *client) { // printf("Got psMovementEvent\n"); - psMovementEvent evt(pMsg); + psMovementEvent evt(me); if (client) { psCharacter *ch = client->GetCharacterData(); @@ -144,10 +131,10 @@ } // psTargetEvent already published so intercepting this takes zero code -void TutorialManager::HandleTarget(MsgEntry *pMsg,Client *client) +void TutorialManager::HandleTarget(MsgEntry *me,Client *client) { // printf("Got psTargetEvent\n"); - psTargetChangeEvent evt(pMsg); + psTargetChangeEvent evt(me); if (evt.character) { client = evt.character->GetClient(); @@ -167,10 +154,10 @@ } /// Specifically handle the Damage event in the tutorial -void TutorialManager::HandleDamage(MsgEntry *pMsg,Client *client) +void TutorialManager::HandleDamage(MsgEntry *me,Client *client) { //printf("Got psDamageEvent\n"); - psDamageEvent evt(pMsg); + psDamageEvent evt(me); if (evt.target && evt.attacker) // someone hurt us { client = evt.target->GetClient(); @@ -200,10 +187,10 @@ } /// Specifically handle the Damage event in the tutorial -void TutorialManager::HandleDeath(MsgEntry *pMsg,Client *client) +void TutorialManager::HandleDeath(MsgEntry *me,Client *client) { //printf("Got psDeathEvent\n"); - psDeathEvent evt(pMsg); + psDeathEvent evt(me); if (evt.deadActor) // We're dead { client = evt.deadActor->GetClient(); @@ -219,10 +206,10 @@ } } -void TutorialManager::HandleGeneric(MsgEntry *pMsg,Client *client) +void TutorialManager::HandleGeneric(MsgEntry *me,Client *client) { // printf("Got psGenericEvent\n"); - psGenericEvent evt(pMsg); + psGenericEvent evt(me); if (evt.client_id) { switch (evt.eventType) Modified: trunk/src/server/tutorialmanager.h =================================================================== --- trunk/src/server/tutorialmanager.h 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/tutorialmanager.h 2009-01-11 22:50:29 UTC (rev 2864) @@ -60,7 +60,7 @@ TutorialManager(ClientConnectionSet *pCCS); virtual ~TutorialManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } protected: /// Specifically handle the Connect event in the tutorial Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-01-11 07:33:24 UTC (rev 2863) +++ trunk/src/server/usermanager.cpp 2009-01-11 22:50:29 UTC (rev 2864) @@ -130,7 +130,6 @@ psserver->GetEventManager()->Subscribe(this,MSGTYPE_MOTDREQUEST,REQUIRE_ANY_CLIENT); psserver->GetEventManager()->Subscribe(this,MSGTYPE_CHARDETAILSREQUEST,REQUIRE_READY_CLIENT); psserver->GetEventManager()->Subscribe(this,MSGTYPE_CHARDESCUPDATE,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_TARGET_EVENT,NO_VALIDATION); psserver->GetEventManager()->Subscribe(this,MSGTYPE_ENTRANCE,REQUIRE_READY_CLIENT); } @@ -143,7 +142,6 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_MOTDREQUEST); psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_CHARDETAILSREQUEST); psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_CHARDESCUPDATE); - psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_TARGET_EVENT); psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_ENTRANCE); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-11 23:15:09
|
Revision: 2865 http://planeshift.svn.sourceforge.net/planeshift/?rev=2865&view=rev Author: Vengeance2001 Date: 2009-01-11 23:15:04 +0000 (Sun, 11 Jan 2009) Log Message: ----------- Final functor messaging conversion is completed. Renamed psWorkManager to WorkManager for consistency. I think all the "ps" prefixes are now gone from the Manager level anyway. Modified Paths: -------------- trunk/src/server/psserver.cpp trunk/src/server/psserver.h trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h trunk/src/server/workmanager.cpp trunk/src/server/workmanager.h Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2009-01-11 22:50:29 UTC (rev 2864) +++ trunk/src/server/psserver.cpp 2009-01-11 23:15:04 UTC (rev 2865) @@ -494,7 +494,7 @@ Debug1(LOG_STARTUP,0,"Started Progression Manager\n"); // Start work manager - workmanager = new psWorkManager(); + workmanager = new WorkManager(); Debug1(LOG_STARTUP,0,"Started Work Manager\n"); // Start economy manager Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2009-01-11 22:50:29 UTC (rev 2864) +++ trunk/src/server/psserver.h 2009-01-11 23:15:04 UTC (rev 2865) @@ -70,7 +70,7 @@ class CharCreationManager; class QuestManager; class EconomyManager; -class psWorkManager; +class WorkManager; class QuestionManager; class ClientConnectionSet; class Client; @@ -303,7 +303,7 @@ * @return Returns a reference to the current work manager for the * server. */ - psWorkManager* GetWorkManager() { return workmanager; } + WorkManager* GetWorkManager() { return workmanager; } /** Returns the guild manager. * @@ -526,7 +526,7 @@ WeatherManager* weathermanager; SpellManager* spellmanager; ProgressionManager* progression; - psWorkManager* workmanager; + WorkManager* workmanager; EconomyManager* economymanager; TutorialManager* tutorialmanager; MiniGameManager* minigamemanager; Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-01-11 22:50:29 UTC (rev 2864) +++ trunk/src/server/usermanager.cpp 2009-01-11 23:15:04 UTC (rev 2865) @@ -126,12 +126,12 @@ { clients = cs; - psserver->GetEventManager()->Subscribe(this,MSGTYPE_USERCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_MOTDREQUEST,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_CHARDETAILSREQUEST,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_CHARDESCUPDATE,REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_TARGET_EVENT,NO_VALIDATION); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_ENTRANCE,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleUserCommand),MSGTYPE_USERCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleMOTDRequest),MSGTYPE_MOTDREQUEST,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleCharDetailsRequest),MSGTYPE_CHARDETAILSREQUEST,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleCharDescUpdate),MSGTYPE_CHARDESCUPDATE,REQUIRE_READY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleTargetEvent),MSGTYPE_TARGET_EVENT,NO_VALIDATION); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleEntranceMessage),MSGTYPE_ENTRANCE,REQUIRE_READY_CLIENT); } UserManager::~UserManager() @@ -837,7 +837,7 @@ Debug3(LOG_USER, client->GetClientNum(), "Character description updated for %s (%s)\n", charData->GetCharFullName(), ShowID(client->GetAccountID())); } -void UserManager::HandleTargetEvent(MsgEntry *me) +void UserManager::HandleTargetEvent(MsgEntry *me, Client *notused) { psTargetChangeEvent targetevent(me); @@ -1001,44 +1001,7 @@ } } -void UserManager::HandleMessage(MsgEntry *me,Client *client) -{ - switch (me->GetType()) - { - case MSGTYPE_MOTDREQUEST: - { - HandleMOTDRequest(me,client); - break; - } - case MSGTYPE_USERCMD: - { - HandleUserCommand(me,client); - break; - } - case MSGTYPE_CHARDETAILSREQUEST: - { - HandleCharDetailsRequest(me,client); - break; - } - case MSGTYPE_CHARDESCUPDATE: - { - HandleCharDescUpdate(me,client); - break; - } - case MSGTYPE_TARGET_EVENT: - { - HandleTargetEvent(me); - break; - } - case MSGTYPE_ENTRANCE: - { - HandleEntranceMessage(me, client); - break; - } - } -} - void UserManager::Who(psUserCmdMessage& msg, Client* client, int clientnum) { csString message((size_t) 1024); Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-01-11 22:50:29 UTC (rev 2864) +++ trunk/src/server/usermanager.h 2009-01-11 23:15:04 UTC (rev 2865) @@ -70,7 +70,7 @@ UserManager(ClientConnectionSet *pCCS); virtual ~UserManager(); - virtual void HandleMessage(MsgEntry *pMsg,Client *client); + virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } /** @brief Send a notification to all clients on a person buddy list if they log on/off. * @@ -340,7 +340,7 @@ void HandleUserCommand(MsgEntry *me,Client *client); void HandleCharDescUpdate(MsgEntry *me,Client *client); void HandleCharDetailsRequest(MsgEntry *me,Client *client); - void HandleTargetEvent(MsgEntry *me); + void HandleTargetEvent(MsgEntry *me,Client *client); void HandleEntranceMessage( MsgEntry* me, Client *client ); void SwitchAttackTarget(Client *targeter, Client *targeted); Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-01-11 22:50:29 UTC (rev 2864) +++ trunk/src/server/workmanager.cpp 2009-01-11 23:15:04 UTC (rev 2865) @@ -84,32 +84,32 @@ // Time of day. // Parameter: hh; where hh is hour of 24 hour clock. // Example: TIME(12) is noon. - {psWorkManager::constraintTime, "TIME", "You can not do this work at this time of the day!"}, + {WorkManager::constraintTime, "TIME", "You can not do this work at this time of the day!"}, // People in area. // Parameter: n,r; where n is number of people and r is the range. // Example: FRIENDS(6,4) is six people within 4. - {psWorkManager::constraintFriends, "FRIENDS", "You need more people for this work!"}, + {WorkManager::constraintFriends, "FRIENDS", "You need more people for this work!"}, // Location of player. // Parameter: s,x,y,z,r; where s is sector, x is x-coord, y is y-coord, z is z-coord, and r is rotation. // Example: LOCATION(3,-10.53,176.36,,) is at [-10.53,176.36] any hight and any direction in sector 3. - {psWorkManager::constraintLocation, "LOCATION","You can not do this work here!"}, + {WorkManager::constraintLocation, "LOCATION","You can not do this work here!"}, // Player mode. // Parameter: mode; where mode is psCharacter mode string. // Example: MODE(sitting) is player needs to be sitting as work is started. - {psWorkManager::constraintMode, "MODE","You are not in the right position to complete this work!"}, + {WorkManager::constraintMode, "MODE","You are not in the right position to complete this work!"}, // Player gender. // Parameter: gender; where gender is psCharacter's gender. // Example: GENDER(F) is player needs to be female as work is completed. - {psWorkManager::constraintGender, "GENDER","You are not in the right gender to complete this work!"}, + {WorkManager::constraintGender, "GENDER","You are not in the right gender to complete this work!"}, // Player race. // Parameter: race; where race is psCharacter's race. // Example: RACE(ylianm) is player needs to be ylianm as work is completed. - {psWorkManager::constraintRace, "RACE","You do not have right racial background to complete this work!"}, + {WorkManager::constraintRace, "RACE","You do not have right racial background to complete this work!"}, // Array end. {NULL, "", ""} @@ -117,12 +117,12 @@ //----------------------------------------------------------------------------- -psWorkManager::psWorkManager() +WorkManager::WorkManager() { currentQuality = 1.00; - psserver->GetEventManager()->Subscribe(this,MSGTYPE_WORKCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_LOCKPICK,REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGET); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<WorkManager>(this,&WorkManager::HandleWorkCommand),MSGTYPE_WORKCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<WorkManager>(this,&WorkManager::HandleLockPick),MSGTYPE_LOCKPICK,REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGET); script_engine = psserver->GetMathScriptEngine(); calc_repair_time = script_engine->FindScript("Calculate Repair Time"); @@ -178,7 +178,7 @@ }; -psWorkManager::~psWorkManager() +WorkManager::~WorkManager() { if (psserver->GetEventManager()) { @@ -187,7 +187,7 @@ } } -void psWorkManager::Initialize() +void WorkManager::Initialize() { Result res(db->Select("select * from natural_resources")); @@ -224,90 +224,81 @@ } } - -void psWorkManager::HandleMessage(MsgEntry* me,Client *client) +void WorkManager::HandleWorkCommand(MsgEntry* me,Client *client) { - switch ( me->GetType() ) + psWorkCmdMessage msg(me); + + if (!msg.valid) { - case MSGTYPE_WORKCMD: - { - psWorkCmdMessage msg(me); + psserver->SendSystemError(me->clientnum,"Invalid work command."); + return; + } - if (!msg.valid) - { - psserver->SendSystemError(me->clientnum,"Invalid work command."); - return; - } + if (msg.command == "/use" ) + { + HandleUse(client); + } + else if (msg.command == "/combine") + { + HandleCombine(client); + } + else if (msg.command == "/dig") + { + HandleProduction(client,"dig",msg.filter); + } + else if (msg.command == "/fish") + { + HandleProduction(client, "fish", msg.filter); + } + else if (msg.command == "/repair") + { + HandleRepair(client, msg); + } +} - if (msg.command == "/use" ) - { - HandleUse(client); - } - else if (msg.command == "/combine") - { - HandleCombine(client); - } - else if (msg.command == "/dig") - { - HandleProduction(client,"dig",msg.filter); - } - else if (msg.command == "/fish") - { - HandleProduction(client, "fish", msg.filter); - } - else if (msg.command == "/repair") - { - HandleRepair(client, msg); - } - break; - } +void WorkManager::HandleLockPick(MsgEntry* me,Client *client) +{ + gemObject* target = client->GetTargetObject(); - case MSGTYPE_LOCKPICK: + // Check if target is action item + gemActionLocation* gemAction = dynamic_cast<gemActionLocation*>(target); + if(gemAction) { + psActionLocation *action = gemAction->GetAction(); + + // Check if the actionlocation is linked to real item + InstanceID InstanceID = action->GetInstanceID(); + if( InstanceID!= INSTANCE_ALL ) { - gemObject* target = client->GetTargetObject(); + target = GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); + } + } - // Check if target is action item - gemActionLocation* gemAction = dynamic_cast<gemActionLocation*>(target); - if(gemAction) { - psActionLocation *action = gemAction->GetAction(); + // Check target gem + if (!target) + { + Error1("No gemItem target!\n"); + return; + } - // Check if the actionlocation is linked to real item - InstanceID InstanceID = action->GetInstanceID(); - if( InstanceID!= INSTANCE_ALL ) - { - target = GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); - } - } + // Check range ignoring Y co-ordinate + if (client->GetActor()->RangeTo(target, true) > RANGE_TO_USE) + { + psserver->SendSystemInfo(client->GetClientNum(),"You need to be closer to the lock to try this."); + return; + } - // Check target gem - if (!target) - { - Error1("No gemItem target!\n"); - return; - } - - // Check range ignoring Y co-ordinate - if (client->GetActor()->RangeTo(target, true) > RANGE_TO_USE) - { - psserver->SendSystemInfo(client->GetClientNum(),"You need to be closer to the lock to try this."); - return; - } - - // Get item - psItem* item = target->GetItem(); - if ( !item ) - { - Error1("Found gemItem but no psItem was attached!\n"); - return; - } - - StartLockpick(client,item); - break; - } + // Get item + psItem* item = target->GetItem(); + if ( !item ) + { + Error1("Found gemItem but no psItem was attached!\n"); + return; } + StartLockpick(client,item); } + //----------------------------------------------------------------------------- // Repair //----------------------------------------------------------------------------- @@ -324,7 +315,7 @@ * 6) Queue time event to trigger when repair is complete, if not canceled. * */ -void psWorkManager::HandleRepair(Client *client, psWorkCmdMessage &msg) +void WorkManager::HandleRepair(Client *client, psWorkCmdMessage &msg) { // Make sure client isn't already busy digging, etc. if ( client->GetActor()->GetMode() != PSCHARACTER_MODE_PEACE ) @@ -448,7 +439,7 @@ * 2) Consume the repair required item, if flagged to do so. * 3) Notify the user. */ -void psWorkManager::HandleRepairEvent(psWorkGameEvent* workEvent) +void WorkManager::HandleRepairEvent(psWorkGameEvent* workEvent) { psItem *repairTarget = workEvent->object; @@ -549,7 +540,7 @@ * Send anim and confirmation message to client * Queue up game event for success */ -void psWorkManager::HandleProduction(Client *client,const char *type,const char *reward) +void WorkManager::HandleProduction(Client *client,const char *type,const char *reward) { if ( !LoadLocalVars(client) ) { @@ -647,7 +638,7 @@ } // Function used by super client -void psWorkManager::HandleProduction(gemActor *actor,const char *type,const char *reward) +void WorkManager::HandleProduction(gemActor *actor,const char *type,const char *reward) { int mode = actor->GetMode(); @@ -731,7 +722,7 @@ } -bool psWorkManager::SameProductionPosition(gemActor *actor, +bool WorkManager::SameProductionPosition(gemActor *actor, const csVector3& startPos) { csVector3 pos; @@ -742,7 +733,7 @@ return ((startPos - pos).SquaredNorm() < 1); } -NaturalResource *psWorkManager::FindNearestResource(const char *reward,iSector *sector, csVector3& pos, const char *action) +NaturalResource *WorkManager::FindNearestResource(const char *reward,iSector *sector, csVector3& pos, const char *action) { NaturalResource *nr=NULL; @@ -778,7 +769,7 @@ return nr; } -void psWorkManager::HandleProductionEvent(psWorkGameEvent* workEvent) +void WorkManager::HandleProductionEvent(psWorkGameEvent* workEvent) { if (!workEvent->worker.IsValid()) // Worker has disconnected return; @@ -1027,9 +1018,9 @@ * StartAutoWork - Item moved into container: SlotManager::MoveFromInventory() * - Item stack split in container: SlotManager::MoveFromWorldContainer() * HandleUse - Client issues /use command from buttons: gemActiveObject::SendBehaviorMessage() -* - Workmanager gets /use message: psWorkManager::HandleMessage() +* - Workmanager gets /use message: WorkManager::HandleMessage() * HandleCombine - Client issues /combine command from buttons: gemActiveObject::SendBehaviorMessage() -* - Workmanager gets /combine message: psWorkManager::HandleMessage() +* - Workmanager gets /combine message: WorkManager::HandleMessage() * HandleWorkEvent - Work event triggers: psWorkGameEvent::Trigger() * StopWork - Items removed from containers: SlotManager::MoveFromWorldContainer(); * StartScriptWork - Progression scripts pass pattern information: CraftOp::Run() @@ -1038,7 +1029,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Stop doing work -void psWorkManager::StopWork(Client* client, psItem* item) +void WorkManager::StopWork(Client* client, psItem* item) { // Assign the memeber vars if ( !LoadLocalVars(client) ) @@ -1084,7 +1075,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Handle /use command -void psWorkManager::HandleUse(Client *client) +void WorkManager::HandleUse(Client *client) { // Assign the memeber vars if ( !LoadLocalVars(client) ) @@ -1105,7 +1096,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check if possible to do some use work -void psWorkManager::StartUseWork(Client* client) +void WorkManager::StartUseWork(Client* client) { // Check to see if we have everything we need to do any trade work if (!ValidateWork()) @@ -1256,7 +1247,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Stop doing use work -void psWorkManager::StopUseWork(Client* client) +void WorkManager::StopUseWork(Client* client) { // Check for any targeted item or container in hand if ( !ValidateTarget(client)) @@ -1274,7 +1265,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Handle /combine command -void psWorkManager::HandleCombine(Client *client) +void WorkManager::HandleCombine(Client *client) { // Assign the memeber vars if ( !LoadLocalVars(client) ) @@ -1295,7 +1286,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check if possible to do some use work -void psWorkManager::StartCombineWork(Client* client) +void WorkManager::StartCombineWork(Client* client) { // Check to see if we have everything we need to do any trade work if (!ValidateWork()) @@ -1326,7 +1317,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Do combine work if possible -bool psWorkManager::CombineWork() +bool WorkManager::CombineWork() { // Find out if anything can be combined in container uint32 combinationId = 0; @@ -1376,7 +1367,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Stop doing combine work -void psWorkManager::StopCombineWork(Client* client) +void WorkManager::StopCombineWork(Client* client) { // Check for any targeted item or container in hand if ( !ValidateTarget(client)) @@ -1396,7 +1387,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check if possible to do some automatic work -void psWorkManager::StartAutoWork(Client* client, gemContainer* container, psItem* droppedItem, int count) +void WorkManager::StartAutoWork(Client* client, gemContainer* container, psItem* droppedItem, int count) { // Assign the member vars if ( !LoadLocalVars(client) ) @@ -1473,7 +1464,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Stop doing automatic work -void psWorkManager::StopAutoWork(Client* client, psItem* autoItem) +void WorkManager::StopAutoWork(Client* client, psItem* autoItem) { // Check for proper autoItem if ( !autoItem ) @@ -1505,7 +1496,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check if possible to do some script work -bool psWorkManager::StartScriptWork(Client* client, gemObject *target, csString pattern) +bool WorkManager::StartScriptWork(Client* client, gemObject *target, csString pattern) { // Assign the memeber vars if (!LoadLocalVars(client, target)) @@ -1581,7 +1572,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Do no item script work -bool psWorkManager::ScriptNoTarget() +bool WorkManager::ScriptNoTarget() { // Check if player has any items in right hand psItem* rhand = owner->Inventory().GetInventoryItem(PSCHARACTER_SLOT_RIGHTHAND); @@ -1640,7 +1631,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Do actor script work -bool psWorkManager::ScriptActor(gemActor* gemAct) +bool WorkManager::ScriptActor(gemActor* gemAct) { // Set target if any if (gemAct && gemAct->GetCharacterData() == NULL ) @@ -1706,7 +1697,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Do item script work -bool psWorkManager::ScriptItem(gemItem* gemItm) +bool WorkManager::ScriptItem(gemItem* gemItm) { // Check range ignoring Y co-ordinate if (worker->RangeTo(gemItm, true) > RANGE_TO_USE) @@ -1754,7 +1745,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Do action location script work -bool psWorkManager::ScriptAction(gemActionLocation* gemAction) +bool WorkManager::ScriptAction(gemActionLocation* gemAction) { psActionLocation *action = gemAction->GetAction(); @@ -1775,7 +1766,7 @@ // if work item container has the correct items in the correct amounts // Note: This assumes that the combination items array is sorted by // resultId and then itemId -bool psWorkManager::IsContainerCombinable(uint32 &resultId, int &resultQty) +bool WorkManager::IsContainerCombinable(uint32 &resultId, int &resultQty) { // cast a gem container to iterate thru gemContainer *container = dynamic_cast<gemContainer*> (workItem->GetGemObject()); @@ -1817,7 +1808,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks to see if every item in list matches every item in a valid combination -bool psWorkManager::ValidateCombination(csArray<psItem*> itemArray, uint32 &resultId, int &resultQty) +bool WorkManager::ValidateCombination(csArray<psItem*> itemArray, uint32 &resultId, int &resultQty) { // check if player owns anything in conatiner size_t itemCount = itemArray.GetSize(); @@ -1888,7 +1879,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks to see if every item in list is in the set of ingredients for this pattern -bool psWorkManager::AnyCombination(csArray<psItem*> itemArray, uint32 &resultId, int &resultQty) +bool WorkManager::AnyCombination(csArray<psItem*> itemArray, uint32 &resultId, int &resultQty) { // check if player owns anything in conatiner size_t itemCount = itemArray.GetSize(); @@ -1948,7 +1939,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks for matching combination list to item array -bool psWorkManager::MatchCombinations(csArray<psItem*> itemArray, CombinationConstruction* current) +bool WorkManager::MatchCombinations(csArray<psItem*> itemArray, CombinationConstruction* current) { // If the items count match then this is a possible valid combination. if ( itemArray.GetSize() == current->combinations.GetSize() ) @@ -2005,7 +1996,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks if any transformation is possible // We check the more specific transforms for matches first -unsigned int psWorkManager::AnyTransform(uint32 singlePatternId, uint32 groupPatternId, uint32 targetId, int targetQty) +unsigned int WorkManager::AnyTransform(uint32 singlePatternId, uint32 groupPatternId, uint32 targetId, int targetQty) { // First check for specific single transform match if (secure) psserver->SendSystemInfo(clientNum,"Checking single transforms for pattern id %u, target id %u, and target qty %u.", singlePatternId,targetId,targetQty ); @@ -2059,7 +2050,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks if a transformation is possible -unsigned int psWorkManager::IsTransformable(uint32 patternId, uint32 targetId, int targetQty) +unsigned int WorkManager::IsTransformable(uint32 patternId, uint32 targetId, int targetQty) { unsigned int match = TRANSFORM_GARBAGE; uint32 workID = 0; @@ -2170,7 +2161,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks if any ingredient transformation is possible -bool psWorkManager::IsIngredient(uint32 patternId, uint32 groupPatternId, uint32 targetId) +bool WorkManager::IsIngredient(uint32 patternId, uint32 groupPatternId, uint32 targetId) { // Check if ingredient is on list of unique ingredients for this pattern csArray<uint32>* itemArray = CacheManager::GetSingleton().GetTradeTransUniqueByID(patternId); @@ -2220,7 +2211,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Do transformation // This is called once all the transformation requirements have been verified. -void psWorkManager::StartTransformationEvent(int transType, INVENTORY_SLOT_NUMBER transSlot, int resultQty, +void WorkManager::StartTransformationEvent(int transType, INVENTORY_SLOT_NUMBER transSlot, int resultQty, float resultQuality, psItem* item) { // Get transformation delay @@ -2295,7 +2286,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Loads up local memeber variables -bool psWorkManager::LoadLocalVars(Client* client, gemObject *target) +bool WorkManager::LoadLocalVars(Client* client, gemObject *target) { if ( client == NULL ) { @@ -2345,7 +2336,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check to see if client can do any trade work -bool psWorkManager::ValidateWork() +bool WorkManager::ValidateWork() { if ( worker->GetMode() == PSCHARACTER_MODE_WORK) { @@ -2366,7 +2357,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check to see if client can do any trade work and // that we have everything we need to do any trade work -bool psWorkManager::ValidateMind() +bool WorkManager::ValidateMind() { // Check for the existance of a design item psItem* designitem = owner->Inventory().GetInventoryItem( PSCHARACTER_SLOT_MIND ); @@ -2398,7 +2389,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check for any targeted item or container in hand -bool psWorkManager::ValidateTarget(Client* client) +bool WorkManager::ValidateTarget(Client* client) { // Check if player has something targeted gemObject* target = client->GetTargetObject(); @@ -2476,7 +2467,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Check if client is too tired -bool psWorkManager::ValidateStamina(Client* client) +bool WorkManager::ValidateStamina(Client* client) { //TODO: use factors based on the work to determine required stamina // check stamina @@ -2493,7 +2484,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks if equipment is in hand -bool psWorkManager::IsOnHand( uint32 equipId ) +bool WorkManager::IsOnHand( uint32 equipId ) { // Check right hand psItem* rhand = owner->Inventory().GetInventoryItem(PSCHARACTER_SLOT_RIGHTHAND); @@ -2520,7 +2511,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Validates player has enough training -bool psWorkManager::ValidateTraining(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) +bool WorkManager::ValidateTraining(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) { // Check primary skill training if any skill required int priSkill = processCandidate->GetPrimarySkillId(); @@ -2552,7 +2543,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Validates player has the correct skills -bool psWorkManager::ValidateSkills(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) +bool WorkManager::ValidateSkills(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) { // Check if players primary skill levels are less then minimum for that skill int priSkill = processCandidate->GetPrimarySkillId(); @@ -2581,7 +2572,7 @@ } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -bool psWorkManager::CheckStamina(psCharacter * owner) const +bool WorkManager::CheckStamina(psCharacter * owner) const { //todo- use factors based on the work to determine required stamina return ((owner->GetStamina(true) >= ( owner->GetStaminaMax(true)*.1 ) ) // physical @@ -2590,7 +2581,7 @@ } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Validates player is not over skilled -bool psWorkManager::ValidateNotOverSkilled(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) +bool WorkManager::ValidateNotOverSkilled(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) { // Check if players primary skill levels are less then minimum for that skill int priSkill = processCandidate->GetPrimarySkillId(); @@ -2621,7 +2612,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Validate if all the transformation constraints are meet // Note: This assumes that each of the constraints have paramaters -bool psWorkManager::ValidateConstraints(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) +bool WorkManager::ValidateConstraints(psTradeTransformations* transCandidate, psTradeProcesses* processCandidate) { // Set up to go through the constraint string picking out the functions and parameters const char constraintSeperators[] = "\t(),"; @@ -2667,7 +2658,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Calculate how long it will take to complete event // based on the transformation's point quanity -int psWorkManager::CalculateEventDuration(int pointQty) +int WorkManager::CalculateEventDuration(int pointQty) { // Translate the points into seconds // ToDo: For now the point quantity is the duration @@ -2676,7 +2667,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Combine transform all items in container into a new item -psItem* psWorkManager::CombineContainedItem(uint32 newId, int newQty, float itemQuality, psItem* containerItem) +psItem* WorkManager::CombineContainedItem(uint32 newId, int newQty, float itemQuality, psItem* containerItem) { #ifdef DEBUG_WORKMANAGER CPrintf(CON_DEBUG, "deleting items from container...\n"); @@ -2766,7 +2757,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Transform the one items in container into a new item -psItem* psWorkManager::TransformContainedItem(psItem* oldItem, uint32 newId, int newQty, float itemQuality) +psItem* WorkManager::TransformContainedItem(psItem* oldItem, uint32 newId, int newQty, float itemQuality) { if (!oldItem) { @@ -2848,7 +2839,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Transform all items in equipment into a new item -psItem* psWorkManager::TransformSlotItem(INVENTORY_SLOT_NUMBER slot, uint32 newId, int newQty, float itemQuality) +psItem* WorkManager::TransformSlotItem(INVENTORY_SLOT_NUMBER slot, uint32 newId, int newQty, float itemQuality) { // Remove items from slot and destroy it psItem *oldItem = owner->Inventory().RemoveItem(NULL,slot); @@ -2918,7 +2909,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Transform all items in equipment into a new item -psItem* psWorkManager::TransformTargetSlotItem(INVENTORY_SLOT_NUMBER slot, uint32 newId, int newQty, float itemQuality) +psItem* WorkManager::TransformTargetSlotItem(INVENTORY_SLOT_NUMBER slot, uint32 newId, int newQty, float itemQuality) { // Remove items from targeted slot and destroy it psItem *oldItem = gemTarget->GetCharacterData()->Inventory().RemoveItem(NULL,slot); @@ -2999,7 +2990,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Transforms the targeted item into a new item -psItem* psWorkManager::TransformTargetItem(psItem* oldItem, uint32 newId, int newQty, float itemQuality) +psItem* WorkManager::TransformTargetItem(psItem* oldItem, uint32 newId, int newQty, float itemQuality) { if (!oldItem) { @@ -3073,7 +3064,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, bool transient) +psItem* WorkManager::CreateTradeItem(uint32 newId, int newQty, float itemQuality, bool transient) { Debug3( LOG_TRADE, 0,"Creating new item id(%u) quantity(%d)\n", newId, newQty ); @@ -3134,7 +3125,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Constraint function to check hour of day -bool psWorkManager::constraintTime(psWorkManager* that,char* param) +bool WorkManager::constraintTime(WorkManager* that,char* param) { // Check paramater pointer if(!param) @@ -3155,7 +3146,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Constraint function to check if players are near worker (including worker) // Note: Constraint distance is limited to proximiy list. -bool psWorkManager::constraintFriends(psWorkManager* that, char* param) +bool WorkManager::constraintFriends(WorkManager* that, char* param) { // Check paramater pointer if(!param) @@ -3177,7 +3168,7 @@ #define MAXANGLE 0.2 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Constraint function to check location -bool psWorkManager::constraintLocation(psWorkManager* that, char* param) +bool WorkManager::constraintLocation(WorkManager* that, char* param) { int ch = ','; char* pdest; @@ -3266,7 +3257,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Constraint function to check client mode -bool psWorkManager::constraintMode(psWorkManager* that, char* param) +bool WorkManager::constraintMode(WorkManager* that, char* param) { // Check mode string pointer if ( !that->preworkModeString ) @@ -3281,7 +3272,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Constraint function to check client gender -bool psWorkManager::constraintGender(psWorkManager* that, char* param) +bool WorkManager::constraintGender(WorkManager* that, char* param) { // Get race info psRaceInfo* race = that->owner->GetRaceInfo(); @@ -3295,7 +3286,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Constraint function to check client race -bool psWorkManager::constraintRace(psWorkManager* that, char* param) +bool WorkManager::constraintRace(WorkManager* that, char* param) { // Get race info psRaceInfo* race = that->owner->GetRaceInfo(); @@ -3309,7 +3300,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // This handles trade work transformation events -void psWorkManager::HandleWorkEvent(psWorkGameEvent* workEvent) +void WorkManager::HandleWorkEvent(psWorkGameEvent* workEvent) { #ifdef DEBUG_WORKMANAGER CPrintf(CON_DEBUG, "handling work event...\n"); @@ -3600,7 +3591,7 @@ } // Apply skills if any to quality and practice points -bool psWorkManager::ApplySkills(float factor, psItem* transItem) +bool WorkManager::ApplySkills(float factor, psItem* transItem) { // just return for processless transforms if (!process) @@ -3764,7 +3755,7 @@ return true; } -void psWorkManager::SendTransformError( uint32_t clientNum, unsigned int result, uint32 curItemId, int curItemQty ) +void WorkManager::SendTransformError( uint32_t clientNum, unsigned int result, uint32 curItemId, int curItemQty ) { csString error(""); @@ -3869,7 +3860,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Stop doing cleanup work -void psWorkManager::StopCleanupWork(Client* client, psItem* cleanItem) +void WorkManager::StopCleanupWork(Client* client, psItem* cleanItem) { // Check for proper autoItem if ( !cleanItem ) @@ -3890,7 +3881,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Start doing cleanup -void psWorkManager::StartCleanupEvent(int transType, Client* client, psItem* item, gemActor* worker) +void WorkManager::StartCleanupEvent(int transType, Client* client, psItem* item, gemActor* worker) { if (!item) { @@ -3916,7 +3907,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Remove ownership of item making item free game. -void psWorkManager::HandleCleanupEvent(psWorkGameEvent* workEvent) +void WorkManager::HandleCleanupEvent(psWorkGameEvent* workEvent) { #ifdef DEBUG_WORKMANAGER CPrintf(CON_DEBUG, "handling cleanup workEvent...\n"); @@ -3937,7 +3928,7 @@ // Lock picking //----------------------------------------------------------------------------- -void psWorkManager::StartLockpick(Client* client,psItem* item) +void WorkManager::StartLockpick(Client* client,psItem* item) { // Check if its a lock if(!item->GetIsLockable()) @@ -4003,7 +3994,7 @@ psserver->GetEventManager()->Push(ev); } -void psWorkManager::LockpickComplete(psWorkGameEvent* workEvent) +void WorkManager::LockpickComplete(psWorkGameEvent* workEvent) { psCharacter* character = workEvent->client->GetCharacterData(); PSSKILL skill = workEvent->object->GetLockpickSkill(); @@ -4043,7 +4034,7 @@ ////////////////////////////////////////////////////////////// // Primary work object -psWorkGameEvent::psWorkGameEvent(psWorkManager* mgr, +psWorkGameEvent::psWorkGameEvent(WorkManager* mgr, gemActor* worker, int delayticks, int cat, Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2009-01-11 22:50:29 UTC (rev 2864) +++ trunk/src/server/workmanager.h 2009-01-11 23:15:04 UTC (rev 2865) @@ -38,7 +38,7 @@ #include "gem.h" class psWorkGameEvent; -class psWorkManager; +class WorkManager; class psItem; class Client; struct CombinationConstruction; @@ -118,7 +118,7 @@ struct constraint { - bool (*constraintFunction)(psWorkManager* that, char* param); + bool (*constraintFunction)(WorkManager* that, char* param); const char* name; const char* message; }; @@ -129,14 +129,14 @@ * and information from the pspccharacterinfo Prop Classes for both * the worker and the target. */ -class psWorkManager : public MessageManager +class WorkManager : public MessageManager { public: - psWorkManager(); - virtual ~psWorkManager(); + WorkManager(); + virtual ~WorkManager(); - virtual void HandleMessage(MsgEntry *me, Client *client); + virtual void HandleMessage(MsgEntry *me, Client *client) { } //----------------------------------------------------------------------------- // Entry points @@ -219,12 +219,12 @@ * */ //@{ - static bool constraintTime(psWorkManager* that, char* param); - static bool constraintFriends(psWorkManager* that,char* param); - static bool constraintLocation(psWorkManager* that,char* param); - static bool constraintMode(psWorkManager* that,char* param); - static bool constraintGender(psWorkManager* that,char* param); - static bool constraintRace(psWorkManager* that,char* param); + static bool constraintTime(WorkManager* that, char* param); + static bool constraintFriends(WorkManager* that,char* param); + static bool constraintLocation(WorkManager* that,char* param); + static bool constraintMode(WorkManager* that,char* param); + static bool constraintGender(WorkManager* that,char* param); + static bool constraintRace(WorkManager* that,char* param); //@} @@ -273,6 +273,9 @@ MathScriptVar *var_mining_skill; /// Mining skill MathScriptVar *var_mining_total; /// Final result + void HandleLockPick(MsgEntry* me,Client *client); + void HandleWorkCommand(MsgEntry* me,Client *client); + /** Stop auto work event. * This is called when a client removes an item from any container * before it has had a chance to transform the item. @@ -467,7 +470,7 @@ class psWorkGameEvent : public psGameEvent, public iDeleteObjectCallback { public: - psWorkGameEvent(psWorkManager* mgr, + psWorkGameEvent(WorkManager* mgr, gemActor* worker, int delayticks, int cat, @@ -525,7 +528,7 @@ int GetTransformationType() { return transType; } void SetTransformationType(int t) { transType = t; } - psWorkManager* workmanager; + WorkManager* workmanager; csWeakRef<gemObject> worker; NaturalResource* nr; Client* client; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-01-13 07:47:26
|
Revision: 2872 http://planeshift.svn.sourceforge.net/planeshift/?rev=2872&view=rev Author: Vengeance2001 Date: 2009-01-13 07:47:20 +0000 (Tue, 13 Jan 2009) Log Message: ----------- Now PaladinJr will not report teleports or shifts as cheat moves. Restructured the allowed lag calculations significantly. Khaki if you're out there your review would be appreciated. Left in the debug printf spam intentionally to help the testing team help me figure out where the remaining problems are. Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/client.cpp trunk/src/server/client.h trunk/src/server/paladinjr.cpp Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-01-12 22:12:36 UTC (rev 2871) +++ trunk/src/server/adminmanager.cpp 2009-01-13 07:47:20 UTC (rev 2872) @@ -3870,6 +3870,8 @@ actor->pcmove->SetVelocity(csVector3(0.0f,0.0f,0.0f)); // Halt actor actor->SetInstance(instance); actor->SetPosition(pos,yrot,sector); + if (actor->GetClient()) + actor->GetClient()->SetCheatMask(MOVE_CHEAT,true); // This tells paladin one of these is ok. actor->MulticastDRUpdate(); } else Modified: trunk/src/server/client.cpp =================================================================== --- trunk/src/server/client.cpp 2009-01-12 22:12:36 UTC (rev 2871) +++ trunk/src/server/client.cpp 2009-01-13 07:47:20 UTC (rev 2872) @@ -56,7 +56,7 @@ accountID(0), playerID(0), securityLevel(0), superclient(false), name(""), waypointEffectID(0), waypointIsDisplaying(false), pathEffectID(0), pathPath(NULL), pathIsDisplaying(false), - locationEffectID(0), locationIsDisplaying(false) + locationEffectID(0), locationIsDisplaying(false),cheatMask(NO_CHEAT) { actor = 0; target = 0; @@ -65,7 +65,7 @@ lastInviteTime = 0; spamPoints = 0; clientnum = 0; - detectedCheatCount = 0; + detectedCheatCount = 0; nextFloodHistoryIndex = 0; @@ -652,3 +652,11 @@ return advisorBan; } + +void Client::SetCheatMask(CheatFlags mask,bool flag ) +{ + if (flag) + cheatMask |= mask; + else + cheatMask &= (~mask); +} Modified: trunk/src/server/client.h =================================================================== --- trunk/src/server/client.h 2009-01-12 22:12:36 UTC (rev 2871) +++ trunk/src/server/client.h 2009-01-13 07:47:20 UTC (rev 2872) @@ -70,7 +70,13 @@ TARGET_PVP = 0x100 }; +enum CheatFlags // will have more of these as Paladin gets better +{ + NO_CHEAT = 0x00, + MOVE_CHEAT = 0x01 +}; + /** * This class collects data of a netclient. While the socket data like * ip adress and port is managed inside NetManager and not stored here @@ -355,6 +361,9 @@ /// Give a warning to the client silently. Capped at 10000. void CountDetectedCheat() {if (detectedCheatCount < 10000) detectedCheatCount++; } int GetDetectedCheatCount() { return detectedCheatCount;} + /// Set the next move as not a cheat, or clear it. + void SetCheatMask(CheatFlags mask,bool flag); + bool GetCheatMask(CheatFlags mask) { return (cheatMask & mask) != 0; } protected: @@ -429,8 +438,10 @@ bool isFrozen; ///< Whether the client is frozen or not. /// Potential number of exploits automatically detected. - /// This needs more work as it's only a preliminary measure so far. int detectedCheatCount; + + /// This flag set to true after a teleport, to keep Paladin from reporting a cheat + int cheatMask; }; #endif Modified: trunk/src/server/paladinjr.cpp =================================================================== --- trunk/src/server/paladinjr.cpp 2009-01-12 22:12:36 UTC (rev 2871) +++ trunk/src/server/paladinjr.cpp 2009-01-13 07:47:20 UTC (rev 2872) @@ -226,36 +226,55 @@ if (!sector) return true; - float dist = sqrt ( (currUpdate.pos.x - oldpos.x)*(currUpdate.pos.x - oldpos.x) + + float dist = sqrtf ( (currUpdate.pos.x - oldpos.x)*(currUpdate.pos.x - oldpos.x) + (currUpdate.pos.z - oldpos.z)*(currUpdate.pos.z - oldpos.z) ); csTicks timedelta = client->GetActor()->pcmove->ClientTimeDiff(); + // We use the last reported vel, not the new vel, to calculate how far he should have gone since the last DR update + csVector3 vel; + vel = client->GetActor()->pcmove->GetVelocity(); + float reported_distance = sqrtf(vel.x * vel.x + vel.z * vel.z)*timedelta/1000; + + printf("Player went %1.3fm in %u ticks when %1.3fm was allowed.\n",dist, timedelta, reported_distance); + float max_noncheat_distance = maxSpeed*timedelta/1000; float lag_distance = maxSpeed*client->accumulatedLag/1000; - + if (fabs(currUpdate.vel.x) <= maxVelocity.x && currUpdate.vel.y <= maxVelocity.y && fabs(currUpdate.vel.z) <= maxVelocity.z && dist<max_noncheat_distance + lag_distance) { - if (dist < max_noncheat_distance) + if (dist==0) // trivial case { + client->accumulatedLag = 200; // reset the allowed lag when the player becomes stationary again + return true; + } + + if (fabs(dist-reported_distance) < dist * 0.05F) // negligible error just due to lag jitter + { + printf("Ignoring lag jitter.\n"); + return true; + } + + if (dist > 0.0F && dist < reported_distance) + { // Calculate the "unused movement time" here and add it to the // accumulated lag. - client->accumulatedLag += (csTicks)((max_noncheat_distance-dist) * 1000.0f/maxSpeed); + client->accumulatedLag += (csTicks)((reported_distance-dist) * 1000.0f/maxSpeed); if (client->accumulatedLag > MAX_ACCUMULATED_LAG) client->accumulatedLag = MAX_ACCUMULATED_LAG; } - else + else if (dist > 0.0F) { // Subtract from the accumulated lag. - if(client->accumulatedLag > (csTicks)((dist-max_noncheat_distance) * 1000.0f/maxSpeed)) - client->accumulatedLag-=(csTicks)((dist-max_noncheat_distance) - * 1000.0f/maxSpeed); + if(client->accumulatedLag > (csTicks)((dist-reported_distance) * 1000.0f/maxSpeed)) + client->accumulatedLag-= (csTicks)((dist-reported_distance) * 1000.0f/maxSpeed); } - //printf("Accumulated lag: %u\n",client->accumulatedLag); + + printf("Accumulated lag: %u\n",client->accumulatedLag); } else { @@ -264,7 +283,6 @@ //printf("MaxSpeed is %1.2f\n", maxSpeed); // Report cheater - csVector3 vel; csVector3 angVel; csString buf; csString type; @@ -283,7 +301,13 @@ else type = "Distance Violation"; - vel = client->GetActor()->pcmove->GetVelocity(); + if (client->GetCheatMask(MOVE_CHEAT)) + { + printf("Server has pre-authorized this apparent speed violation.\n"); + client->SetCheatMask(MOVE_CHEAT, false); // now clear the Get Out of Jail Free card + return true; // not cheating + } + client->GetActor()->pcmove->GetAngularVelocity(angVel); buf.Format("%s, %s, %s, %.3f %.3f %.3f, %.3f 0 %.3f, %.3f %.3f %.3f, %.3f %.3f %.3f, %.3f %.3f %.3f, %s\n", client->GetName(), type.GetData(), sectorName.GetData(),oldpos.x, oldpos.y, oldpos.z, @@ -297,6 +321,7 @@ client->GetName (),dist,timedelta,client->accumulatedLag); client->CountDetectedCheat(); + printf("Client has %d detected cheats now.\n", client->GetDetectedCheatCount()); if (client->GetDetectedCheatCount() % 5 == 0) { psserver->SendSystemError(client->GetClientNum(),"You have been flagged as using speed hacks. You will be disconnected if you continue."); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-01-14 06:33:19
|
Revision: 2879 http://planeshift.svn.sourceforge.net/planeshift/?rev=2879&view=rev Author: weltall2 Date: 2009-01-14 06:33:15 +0000 (Wed, 14 Jan 2009) Log Message: ----------- Added a setting item flag so setting don't lose their items anymore Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitem.h trunk/src/server/command.cpp Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-01-13 18:49:56 UTC (rev 2878) +++ trunk/src/server/adminmanager.cpp 2009-01-14 06:33:15 UTC (rev 2879) @@ -1732,6 +1732,8 @@ info += " 'transient'"; if ( flags & PSITEM_FLAG_USE_CD) info += " 'collide'"; + if ( flags & PSITEM_FLAG_SETTINGITEM) + info += " 'settingitem'"; } psserver->SendSystemInfo(client->GetClientNum(),info); @@ -1951,6 +1953,8 @@ gmSettings |= (1 << 8); if (client->GetActor()->givekillexp) gmSettings |= (1 << 9); + if (client->GetActor()->attackable) + gmSettings |= (1 << 10); psGMGuiMessage gmMsg(client->GetClientNum(), gmSettings); @@ -2065,7 +2069,8 @@ "questtester = %s\n" "infinitemana = %s\n" "instantcast = %s\n" - "givekillexp = %s\n", + "givekillexp = %s\n" + "attackable = %s", (actor->GetInvincibility())?"on":"off", (!actor->GetVisibility())?"on":"off", (actor->GetViewAllObjects())?"on":"off", @@ -2075,7 +2080,8 @@ (actor->questtester)?"on":"off", (actor->infinitemana)?"on":"off", (actor->instantcast)?"on":"off", - (actor->givekillexp)?"on":"off"); + (actor->givekillexp)?"on":"off", + (actor->attackable)?"on":"off"); return; } else if (data.attribute == "invincible" || data.attribute == "invincibility") @@ -2198,6 +2204,18 @@ else actor->givekillexp = onoff; } + else if (data.attribute == "attackable") + { + if (toggle) + { + actor->attackable = !actor->attackable; + onoff = actor->attackable; + } + else if (actor->attackable == onoff) + already = true; + else + actor->attackable = onoff; + } else if (!data.attribute.IsEmpty()) { psserver->SendSystemInfo(me->clientnum, "%s is not a supported attribute", data.attribute.GetData() ); @@ -7183,6 +7201,12 @@ item->GetGemObject()->Send(me->clientnum, false, false); item->GetGemObject()->Broadcast(me->clientnum, false); } + else if (data.action == "settingitem") + { + item->SetIsSettingItem(onoff); + psserver->SendSystemInfo(me->clientnum, "%s is now %s", + item->GetName(), onoff ? "a setting item" : "not a setting item"); + } // TODO: Add more flags else { Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2009-01-13 18:49:56 UTC (rev 2878) +++ trunk/src/server/bulkobjects/psitem.cpp 2009-01-14 06:33:15 UTC (rev 2879) @@ -327,6 +327,10 @@ flags |= PSITEM_FLAG_STACKABLE; flags &= ~PSITEM_FLAG_UNSTACKABLE; } + if (flagstr.FindSubString("SETTINGITEM", 0, true) != -1) + { + flags |= PSITEM_FLAG_SETTINGITEM; + } // Lockpick stuff SetLockStrength(row.GetInt("lock_str")); @@ -603,6 +607,11 @@ if (!flagString.IsEmpty()) flagString.Append(","); flagString.Append("STACKABLE"); } + if (flags & PSITEM_FLAG_SETTINGITEM) + { + if (!flagString.IsEmpty()) flagString.Append(","); + flagString.Append("SETTINGITEM"); + } targetQuery->AddField("flags",flagString); @@ -2051,6 +2060,14 @@ return openableLocks.Find(KEY_SKELETON) != csArrayItemNotFound; } +void psItem::SetIsSettingItem(bool v) +{ + if (v) + flags = flags | PSITEM_FLAG_SETTINGITEM; + else + flags = flags & ~PSITEM_FLAG_SETTINGITEM; +} + void psItem::RemoveOpenableLock(uint32 v) { size_t n = openableLocks.Find(v); Modified: trunk/src/server/bulkobjects/psitem.h =================================================================== --- trunk/src/server/bulkobjects/psitem.h 2009-01-13 18:49:56 UTC (rev 2878) +++ trunk/src/server/bulkobjects/psitem.h 2009-01-14 06:33:15 UTC (rev 2879) @@ -127,6 +127,9 @@ /// Flag defines if item can be stacked #define PSITEM_FLAG_STACKABLE 0x00040000 +/// Flag defines if item is done by setting (unused by the server, it's more for ordering in the db) +#define PSITEM_FLAG_SETTINGITEM 0x00080000 + #define KEY_SKELETON ((unsigned int)-2) #define MAX_STACK_COUNT 65 // This is the most items a player can have in a stack @@ -804,6 +807,9 @@ void SetIsItemStackable(bool v); void ResetItemStackable(); + bool GetIsSettingItem() const { return ((flags & PSITEM_FLAG_SETTINGITEM)? true : false); } + void SetIsSettingItem(bool v); + PSSKILL GetLockpickSkill() { return lockpickSkill; } void SetLockpickSkill(PSSKILL v); Modified: trunk/src/server/command.cpp =================================================================== --- trunk/src/server/command.cpp 2009-01-13 18:49:56 UTC (rev 2878) +++ trunk/src/server/command.cpp 2009-01-14 06:33:15 UTC (rev 2879) @@ -1370,6 +1370,7 @@ if (flags & PSITEM_FLAG_UNPICKABLE) flags_string += "UNPICKABLE "; if (flags & PSITEM_FLAG_KEY) flags_string += "KEY "; if (flags & PSITEM_FLAG_MASTERKEY) flags_string += "MASTERKEY "; + if (flags & PSITEM_FLAG_SETTINGITEM) flags_string += "SETTINGITEM "; if (flags_string.Length () > 0) { indent(depth); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <are...@us...> - 2009-01-21 03:53:46
|
Revision: 2923 http://planeshift.svn.sourceforge.net/planeshift/?rev=2923&view=rev Author: aresilek Date: 2009-01-21 03:53:42 +0000 (Wed, 21 Jan 2009) Log Message: ----------- - Fixed PS#2368 - Add Map name to /info results, patch by kougaro. Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/usermanager.cpp Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-01-21 03:09:44 UTC (rev 2922) +++ trunk/src/server/adminmanager.cpp 2009-01-21 03:53:42 UTC (rev 2923) @@ -1628,7 +1628,7 @@ void AdminManager::GetInfo(MsgEntry* me,psAdminCmdMessage& msg, AdminCmdData& data,Client *client, gemObject* target) { EID entityId; - csString sectorName; + csString sectorName, regionName; InstanceID instance = DEFAULT_INSTANCE; float loc_x = 0.0f, loc_y = 0.0f, loc_z = 0.0f, loc_yrot = 0.0f; int degrees = 0; @@ -1648,6 +1648,8 @@ instance = target->GetInstance(); sectorName = (sector) ? sector->QueryObject()->GetName() : "(null)"; + + regionName = (sector) ? sector->QueryObject()->GetObjectParent()->GetName() : "(null)"; } if (target && strcmp(target->GetObjectType(), "ActionLocation") == 0) // Action location @@ -1661,9 +1663,10 @@ psActionLocation *action = item->GetAction(); csString info; - info.Format("ActionLocation: %s is at position (%1.2f, %1.2f, %1.2f) " + info.Format("ActionLocation: %s is at region %s, position (%1.2f, %1.2f, %1.2f) " "angle: %d in sector: %s, instance: %d with ", item->GetName(), + regionName.GetData(), loc_x, loc_y, loc_z, degrees, sectorName.GetData(), instance); @@ -1688,11 +1691,12 @@ if ( item->GetStackCount() > 1 ) info.AppendFmt("(x%d) ", item->GetStackCount() ); - info.AppendFmt("with item stats ID %u, item ID %u, and %s, is at position (%1.2f, %1.2f, %1.2f) " + info.AppendFmt("with item stats ID %u, item ID %u, and %s, is at region %s, position (%1.2f, %1.2f, %1.2f) " "angle: %d in sector: %s, instance: %d", item->GetBaseStats()->GetUID(), item->GetUID(), ShowID(entityId), + regionName.GetData(), loc_x, loc_y, loc_z, degrees, sectorName.GetData(), instance); @@ -1790,11 +1794,12 @@ { name = target->GetName(); psserver->SendSystemInfo(client->GetClientNum(), - "NPC: <%s, %s, %s> is at position (%1.2f, %1.2f, %1.2f) " + "NPC: <%s, %s, %s> is at region %s, position (%1.2f, %1.2f, %1.2f) " "angle: %d in sector: %s, instance: %d, and has been active for %1.1f hours.", name.GetData(), ShowID(playerId), ShowID(entityId), + regionName.GetData(), loc_x, loc_y, loc_z, @@ -1872,8 +1877,8 @@ else info.Append("is offline, "); - info.AppendFmt("at position (%1.2f, %1.2f, %1.2f) angle: %d in sector: %s, instance: %d, ", - loc_x, loc_y, loc_z, degrees, sectorName.GetData(), instance); + info.AppendFmt("at region %s, position (%1.2f, %1.2f, %1.2f) angle: %d in sector: %s, instance: %d, ", + regionName.GetData(), loc_x, loc_y, loc_z, degrees, sectorName.GetData(), instance); info.AppendFmt("total time connected is %1.1f hours", timeConnected ); Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-01-21 03:09:44 UTC (rev 2922) +++ trunk/src/server/usermanager.cpp 2009-01-21 03:53:42 UTC (rev 2923) @@ -1451,9 +1451,9 @@ int degrees = (int)(angle*180.0/PI); psserver->SendSystemInfo(clientnum, - "%s current position is %s %1.2f %1.2f %1.2f %d angle: %d, region: %s%s", - name.GetData(), sector_name.GetData(), pos.x, pos.y, pos.z, instance, degrees, - region_name.GetData(), range.GetData()); + "%s current position is region: %s %1.2f %1.2f %1.2f %d angle: %d, sector : %s%s", + name.GetData(), region_name.GetData(), pos.x, pos.y, pos.z, instance, degrees, + sector_name.GetData(), range.GetData()); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-02 09:55:57
|
Revision: 2965 http://planeshift.svn.sourceforge.net/planeshift/?rev=2965&view=rev Author: weltall2 Date: 2009-02-02 09:55:53 +0000 (Mon, 02 Feb 2009) Log Message: ----------- Added a column to store how the factions should change the life events of a character and a column to store user editable life events. DB DUMP! (1213) Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacterloader.cpp trunk/src/server/database/mysql/characters.sql trunk/src/server/database/mysql/upgrade_schema.sql Modified: trunk/src/server/bulkobjects/pscharacterloader.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacterloader.cpp 2009-02-02 09:45:14 UTC (rev 2964) +++ trunk/src/server/bulkobjects/pscharacterloader.cpp 2009-02-02 09:55:53 UTC (rev 2965) @@ -279,6 +279,7 @@ "description", "description_ooc", "creation_info", + "description_life", "base_strength", "base_agility", "base_endurance", @@ -323,6 +324,7 @@ values.FormatPush("%s",chardata->GetDescription()); values.FormatPush("%s",chardata->GetOOCDescription()); values.FormatPush("%s",chardata->GetCreationInfo()); + values.FormatPush("%s","");//placeholder life description 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)); @@ -807,6 +809,7 @@ targetUpdate->AddField("description",chardata->GetDescription()); targetUpdate->AddField("description_ooc",chardata->GetOOCDescription()); targetUpdate->AddField("creation_info",chardata->GetCreationInfo()); + targetUpdate->AddField("description_life",""); //placeholder life description // Done building the fields struct, now // SAVE it to the DB. Modified: trunk/src/server/database/mysql/characters.sql =================================================================== --- trunk/src/server/database/mysql/characters.sql 2009-02-02 09:45:14 UTC (rev 2964) +++ trunk/src/server/database/mysql/characters.sql 2009-02-02 09:55:53 UTC (rev 2965) @@ -71,6 +71,7 @@ `description` text, `description_ooc` TEXT DEFAULT NULL, `creation_info` TEXT DEFAULT NULL, + `description_life` TEXT DEFAULT NULL, `kill_exp` int(5) NOT NULL default '10', `animal_affinity` text, `help_event_flags` int(11) unsigned default '0' COMMENT 'Bit field of which instruction events have played for him.', @@ -85,41 +86,41 @@ # Dumping data for table characters # -INSERT INTO `characters` VALUES (1,'Guest','Char','',0,0,144.00,40.00,44.00,40.00,40.00,40.00,0.00,100.00,0.00,100.00,216.00,200.00,34,40,10,134,100,100,100,100,0,3,-43.86,-0.01,-152.30,1.50,0,0,0,NULL,NULL,0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',3,2604,0,180,18,'Was born in a jar','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (2,'Vengeance','IsMine','',0,0,300.00,60.00,60.00,60.00,60.00,60.00,0.00,280.00,0.00,120.00,200.00,200.00,34,40,10,134,0,0,0,0,0,3,-32.03,0.00,-154.36,0.49,0,0,0,NULL,NULL,0,'2006-11-29 21:55:15','1,-40,2,50','',0,0,'N',1,14985,0,150,10,'Grew up on a ice mountain','','',10,'<category attribute=\"Lifecycle\" name=\"Daylight\" value=\"10\" /><category attribute=\"Type\" name=\"Animal\" value=\"5\" />',3,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (3,'Acraig','Newfie','',2,0,144.00,40.00,44.00,40.00,40.00,40.00,0.00,100.00,0.00,100.00,216.00,200.00,34,40,10,134,100,100,100,100,0,3,-61.32,-0.01,-187.16,0.00,0,0,0,NULL,NULL,0,'0000-00-00 00:00:00','1,-30,2,30','',0,0,'N',5,3798,0,150,1000,'description','','',1000,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (4,'MaleEnki','','',1,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-179.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (5,'Smith','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-53.54,0.00,-155.11,0.00,0,0,0,'','',0,NULL,'','',1,5,'N',9,0,0,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (6,'Fighter1','','',2,1,65.00,65.00,65.00,60.00,60.00,60.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-2.00,0.00,-181.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,6,'N',9,0,2,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (7,'Fighter2','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-92.00,0.00,-266.00,0.00,0,0,0,'','',0,NULL,'1,35,2,-35','',1,6,'N',9,0,2,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (8,'Merchant','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-46.54,0.00,-151.11,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,8,'N',9,0,0,0,0,'description','','',500,'',0,'0000-00-00 00:00:00', 1); -INSERT INTO `characters` VALUES (9,'Lady','Aren','',14,0,44.00,40.00,44.00,40.00,40.00,40.00,0.00,100.00,0.00,100.00,216.00,200.00,34,40,10,134,100,100,100,100,0,3,-43.86,-0.01,-152.30,1.50,0,0,0,NULL,NULL,0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',1,2604,0,180,18,'The love of Guest Char.','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (12,'QuestMaster1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-30.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,12,'Y',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (13,'QuestMaster2','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-35.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,13,'Y',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (14,'DictMaster1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-40.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,14,'N',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (15,'DictMaster2','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-45.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,15,'N',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (20,'TribeMember','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-45.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',0,20,'N',9,0,0,0,0,'Tribe member. Used in tribe testing.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (21,'MoveMaster1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-30.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,21,'N',9,0,0,0,0,'Used to test movement.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (22,'MoveMaster2','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-35.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,22,'N',9,0,0,0,0,'Used to test movement.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (23,'MoveMaster3','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-40.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,23,'N',9,0,0,0,0,'Used to test movement.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (24,'MoveMaster4','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-45.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,24,'N',9,0,0,0,0,'Used to test movement.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (25,'Fighter3','','',2,1,65.00,65.00,65.00,60.00,60.00,60.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,2.50,0.00,-132.50,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,6,'N',9,0,2,0,0,'Fighting with region','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (26,'Fighter4','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,17.50,0.00,-147.50,0.00,0,0,0,'','',0,NULL,'1,35,2,-35','',1,6,'N',9,0,2,0,0,'Fighting with region','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (27,'MoveMaster5A','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-60.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,27,'N',9,0,0,0,0,'Used to test movement.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (28,'MoveMaster5B','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-60.00,0.00,-128.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,28,'N',9,0,0,0,0,'Used to test movement.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (29,'MoveMaster5C','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-60.00,0.00,-126.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,29,'N',9,0,0,0,0,'Used to test movement.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (30,'WinchBeast1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-50.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,30,'N',9,0,0,0,0,'Used to test interactions with sequences.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (40,'WinchMover1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-55.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,31,'N',9,0,0,0,0,'Used to test interactions with sequences.','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (50,'FAMILIAR:Roge','Sample','',23,2,60.00,60.00,60.00,60.00,60.00,60.00,60.00,100.00,100.00,100.00,200.00,200.00,100,100,100,100,100,100,100,100,0,3,0.00,0.00,0.00,0.00,0,0,0,'','',0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',9,0,0,10000,1000,'A Pet Sample','','',10000,NULL,0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (51,'FAMILIAR:Clacker','Sample','',24,2,60.00,60.00,60.00,60.00,60.00,60.00,60.00,100.00,100.00,100.00,200.00,200.00,100,100,100,100,100,100,100,100,0,3,0.00,0.00,0.00,0.00,0,0,0,'','',0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',9,0,0,10000,1000,'A Pet Sample','','',10000,NULL,0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (52,'FAMILIAR:Rat','Sample','',25,2,60.00,60.00,60.00,60.00,60.00,60.00,60.00,100.00,100.00,100.00,200.00,200.00,100,100,100,100,100,100,100,100,0,3,0.00,0.00,0.00,0.00,0,0,0,'','',0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',9,0,0,10000,1000,'A Pet Sample','','',10000,NULL,0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (53,'MoveUnderground','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-65.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,53,'N',9,0,0,0,0,'Used to test wander underground.','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (1,'Guest','Char','',0,0,144.00,40.00,44.00,40.00,40.00,40.00,0.00,100.00,0.00,100.00,216.00,200.00,34,40,10,134,100,100,100,100,0,3,-43.86,-0.01,-152.30,1.50,0,0,0,NULL,NULL,0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',3,2604,0,180,18,'Was born in a jar','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (2,'Vengeance','IsMine','',0,0,300.00,60.00,60.00,60.00,60.00,60.00,0.00,280.00,0.00,120.00,200.00,200.00,34,40,10,134,0,0,0,0,0,3,-32.03,0.00,-154.36,0.49,0,0,0,NULL,NULL,0,'2006-11-29 21:55:15','1,-40,2,50','',0,0,'N',1,14985,0,150,10,'Grew up on a ice mountain','','','',10,'<category attribute=\"Lifecycle\" name=\"Daylight\" value=\"10\" /><category attribute=\"Type\" name=\"Animal\" value=\"5\" />',3,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (3,'Acraig','Newfie','',2,0,144.00,40.00,44.00,40.00,40.00,40.00,0.00,100.00,0.00,100.00,216.00,200.00,34,40,10,134,100,100,100,100,0,3,-61.32,-0.01,-187.16,0.00,0,0,0,NULL,NULL,0,'0000-00-00 00:00:00','1,-30,2,30','',0,0,'N',5,3798,0,150,1000,'description','','',1000,'','',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (4,'MaleEnki','','',1,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-179.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (5,'Smith','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-53.54,0.00,-155.11,0.00,0,0,0,'','',0,NULL,'','',1,5,'N',9,0,0,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (6,'Fighter1','','',2,1,65.00,65.00,65.00,60.00,60.00,60.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-2.00,0.00,-181.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,6,'N',9,0,2,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (7,'Fighter2','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-92.00,0.00,-266.00,0.00,0,0,0,'','',0,NULL,'1,35,2,-35','',1,6,'N',9,0,2,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (8,'Merchant','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-46.54,0.00,-151.11,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,8,'N',9,0,0,0,0,'description','','','',500,'',0,'0000-00-00 00:00:00', 1); +INSERT INTO `characters` VALUES (9,'Lady','Aren','',14,0,44.00,40.00,44.00,40.00,40.00,40.00,0.00,100.00,0.00,100.00,216.00,200.00,34,40,10,134,100,100,100,100,0,3,-43.86,-0.01,-152.30,1.50,0,0,0,NULL,NULL,0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',1,2604,0,180,18,'The love of Guest Char.','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (12,'QuestMaster1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-30.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,12,'Y',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (13,'QuestMaster2','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-35.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,13,'Y',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (14,'DictMaster1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-40.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,14,'N',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (15,'DictMaster2','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-45.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,15,'N',9,0,0,0,0,'Used for quest testing. Type \"step1\" to start Test.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (20,'TribeMember','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-45.00,0.00,-150.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',0,20,'N',9,0,0,0,0,'Tribe member. Used in tribe testing.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (21,'MoveMaster1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-30.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,21,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (22,'MoveMaster2','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-35.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,22,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (23,'MoveMaster3','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-40.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,23,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (24,'MoveMaster4','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-45.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,24,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (25,'Fighter3','','',2,1,65.00,65.00,65.00,60.00,60.00,60.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,2.50,0.00,-132.50,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,6,'N',9,0,2,0,0,'Fighting with region','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (26,'Fighter4','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,17.50,0.00,-147.50,0.00,0,0,0,'','',0,NULL,'1,35,2,-35','',1,6,'N',9,0,2,0,0,'Fighting with region','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (27,'MoveMaster5A','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-60.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,27,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (28,'MoveMaster5B','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-60.00,0.00,-128.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,28,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (29,'MoveMaster5C','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-60.00,0.00,-126.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,29,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (30,'WinchBeast1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-50.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,30,'N',9,0,0,0,0,'Used to test interactions with sequences.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (40,'WinchMover1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-55.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,31,'N',9,0,0,0,0,'Used to test interactions with sequences.','','','',500,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (50,'FAMILIAR:Roge','Sample','',23,2,60.00,60.00,60.00,60.00,60.00,60.00,60.00,100.00,100.00,100.00,200.00,200.00,100,100,100,100,100,100,100,100,0,3,0.00,0.00,0.00,0.00,0,0,0,'','',0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',9,0,0,10000,1000,'A Pet Sample','','','',10000,NULL,0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (51,'FAMILIAR:Clacker','Sample','',24,2,60.00,60.00,60.00,60.00,60.00,60.00,60.00,100.00,100.00,100.00,200.00,200.00,100,100,100,100,100,100,100,100,0,3,0.00,0.00,0.00,0.00,0,0,0,'','',0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',9,0,0,10000,1000,'A Pet Sample','','','',10000,NULL,0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (52,'FAMILIAR:Rat','Sample','',25,2,60.00,60.00,60.00,60.00,60.00,60.00,60.00,100.00,100.00,100.00,200.00,200.00,100,100,100,100,100,100,100,100,0,3,0.00,0.00,0.00,0.00,0,0,0,'','',0,'0000-00-00 00:00:00','1,-50,2,50','',0,0,'N',9,0,0,10000,1000,'A Pet Sample','','','',10000,NULL,0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (53,'MoveUnderground','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-65.00,0.00,-130.00,0.00,0,0,0,'','',0,NULL,'1,30,3,30,4,-50','',1,53,'N',9,0,0,0,0,'Used to test wander underground.','','','',500,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (54,'Gertie','Hollaback','',1,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-178.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (55,'Reginald','Hartlepool','',2,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-177.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (56,'Butch','','',3,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-176.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (57,'Loudon','','',4,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-175.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); -INSERT INTO `characters` VALUES (58,'Cabot','','',5,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-174.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (54,'Gertie','Hollaback','',1,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-178.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (55,'Reginald','Hartlepool','',2,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-177.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (56,'Butch','','',3,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-176.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (57,'Loudon','','',4,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-175.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); +INSERT INTO `characters` VALUES (58,'Cabot','','',5,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-1.00,0.00,-174.00,0.00,0,0,0,'','',0,NULL,'1,30,2,-30','',1,4,'N',9,0,0,0,0,'description','','','',10,'',0,'0000-00-00 00:00:00',0); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-02-02 09:45:14 UTC (rev 2964) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-02-02 09:55:53 UTC (rev 2965) @@ -1086,8 +1086,12 @@ ALTER TABLE `npc_spawn_ranges` CHANGE `cstr_id_spawn_sector` `sector_id` int(10) NOT NULL DEFAULT '0'; UPDATE `server_options` SET `option_value`='1212' WHERE `option_name`='db_version'; -#### Added item rotation around the x and z axis +#### 1213 - Stefano Angeleri - Added the ability to make char creation data dynamic with factions +ALTER TABLE factions ADD COLUMN faction_character BLOB NOT NULL DEFAULT '' AFTER faction_description; +ALTER TABLE characters ADD COLUMN description_life TEXT DEFAULT NULL AFTER creation_info; +#### Kougaro - Added item rotation around the x and z axis + INSERT INTO command_group_assignment VALUES( "rotate all", 30 ); INSERT INTO command_group_assignment VALUES( "rotate all", 25 ); INSERT INTO command_group_assignment VALUES( "rotate all", 24 ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-06 09:50:40
|
Revision: 2982 http://planeshift.svn.sourceforge.net/planeshift/?rev=2982&view=rev Author: weltall2 Date: 2009-02-06 09:50:36 +0000 (Fri, 06 Feb 2009) Log Message: ----------- fixed some little glitches in the descriptions Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/cachemanager.cpp trunk/src/server/usermanager.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-05 22:46:16 UTC (rev 2981) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-06 09:50:36 UTC (rev 2982) @@ -3821,7 +3821,7 @@ { FactionStanding* standing = iter.Next(); int score = 0; //used to store the current score - if(standing->score > 0) //positive factions + if(standing->score >= 0) //positive factions { csHash<FactionLifeEvent*, int>::GlobalIterator scoreIter = standing->faction->PositiveFactionEvents.GetIterator(); score = standing->score; @@ -3844,7 +3844,7 @@ while (scoreIter.HasNext()) { FactionLifeEvent* lifevt = scoreIter.Next(); - if(score > lifevt->value) + if(score >= lifevt->value) { factionDescription += lifevt->event_description; factionDescription += "\n"; Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2009-02-05 22:46:16 UTC (rev 2981) +++ trunk/src/server/cachemanager.cpp 2009-02-06 09:50:36 UTC (rev 2982) @@ -2345,7 +2345,7 @@ break; //take out the string we need - csString entry_text = factionCharacterEvents.Slice(cutpos+1, cutpos2); + csString entry_text = factionCharacterEvents.Slice(cutpos+1, cutpos2-cutpos-1); //prepare the struct containing the parsed data FactionLifeEvent * factionevt = new FactionLifeEvent; Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-05 22:46:16 UTC (rev 2981) +++ trunk/src/server/usermanager.cpp 2009-02-06 09:50:36 UTC (rev 2982) @@ -703,7 +703,7 @@ creationinfo += charData->GetCreationInfo(); if(creationinfo.Length() > 0) //only add separators in case there is something to separate - creationinfo += "\n\n"; + creationinfo += "\n"; //get the dynamically generated faction based life events if(charData->GetFactionEventsDescription(factiondescription)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-10 16:02:48
|
Revision: 3005 http://planeshift.svn.sourceforge.net/planeshift/?rev=3005&view=rev Author: weltall2 Date: 2009-02-10 16:02:41 +0000 (Tue, 10 Feb 2009) Log Message: ----------- fix for PS#2677 - server crash on opening skill window patch by loyni Modified Paths: -------------- trunk/src/server/msgmanager.cpp trunk/src/server/psserverchar.cpp Modified: trunk/src/server/msgmanager.cpp =================================================================== --- trunk/src/server/msgmanager.cpp 2009-02-10 07:42:25 UTC (rev 3004) +++ trunk/src/server/msgmanager.cpp 2009-02-10 16:02:41 UTC (rev 3005) @@ -41,9 +41,6 @@ { client = NULL; - if (flags == NO_VALIDATION) - return true; - gemObject *obj = NULL; gemActor *actor; gemNPC *npc; @@ -54,6 +51,9 @@ Warning2(LOG_NET,"MessageManager got unknown client %d!",pMsg->clientnum); return false; } + + if (flags == NO_VALIDATION) + return true; if (flags & REQUIRE_READY_CLIENT) { // Infer the client MUST be ready to have sent this message. Modified: trunk/src/server/psserverchar.cpp =================================================================== --- trunk/src/server/psserverchar.cpp 2009-02-10 07:42:25 UTC (rev 3004) +++ trunk/src/server/psserverchar.cpp 2009-02-10 16:02:41 UTC (rev 3005) @@ -135,7 +135,7 @@ psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::ViewItem), MSGTYPE_VIEW_ITEM,REQUIRE_READY_CLIENT); psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::UpdateSketch), MSGTYPE_VIEW_SKETCH,REQUIRE_READY_CLIENT); psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::HandleBookWrite), MSGTYPE_WRITE_BOOK, REQUIRE_READY_CLIENT); - psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::HandleFaction), MSGTYPE_FACTION_INFO); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<ServerCharManager>(this,&ServerCharManager::HandleFaction), MSGTYPE_FACTION_INFO, REQUIRE_READY_CLIENT); slotManager = new SlotManager; if ( !(slotManager && slotManager->Initialize()) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-10 23:22:16
|
Revision: 3009 http://planeshift.svn.sourceforge.net/planeshift/?rev=3009&view=rev Author: weltall2 Date: 2009-02-10 22:05:07 +0000 (Tue, 10 Feb 2009) Log Message: ----------- various fixes and cleanups in prereqops - partly by Lanarel, fixed PS#2623 patch by loyni Modified Paths: -------------- trunk/src/server/bulkobjects/psquestprereqops.h trunk/src/server/gemmesh.cpp Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-10 20:09:41 UTC (rev 3008) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-10 22:05:07 UTC (rev 3009) @@ -666,7 +666,7 @@ /** * Construct a race operator * - * @param gender The name of the race the actor is required to be + * @param race The name of the race the actor is required to be */ psQuestPrereqOpRace(const char *race):race(race){}; @@ -734,7 +734,7 @@ * Convert the prerequisite operator to a xml string * * Convert the operator into the xml string: - * <gender type="GenderType"/> + * <gender type="Gender Initial"/> * * @return XML string for the prerequisite operator. */ @@ -784,7 +784,7 @@ * Convert the prerequisite operator to a xml string * * Convert the operator into the xml string: - * <activemagic name="-activemagic"/> + * <guild type="type of the guild"/> * * @return XML string for the prerequisite operator. */ @@ -862,7 +862,7 @@ class psQuestPrereqOpTimeOnline : public psQuestPrereqOp { protected: - int minTime, maxTime; + unsigned int minTime, maxTime; csString type; public: Modified: trunk/src/server/gemmesh.cpp =================================================================== --- trunk/src/server/gemmesh.cpp 2009-02-10 20:09:41 UTC (rev 3008) +++ trunk/src/server/gemmesh.cpp 2009-02-10 22:05:07 UTC (rev 3009) @@ -57,7 +57,7 @@ csRef<iThreadReturn> ret = loader->LoadFile(fileName); ret->Wait(); - + engine->SyncEngineListsNow(loader); // PS#2666 - server crash on /morph csRef<iMeshFactoryWrapper> imesh_fact = 0; if ( ret->WasSuccessful() ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-02-18 06:32:03
|
Revision: 3053 http://planeshift.svn.sourceforge.net/planeshift/?rev=3053&view=rev Author: Vengeance2001 Date: 2009-02-18 06:31:59 +0000 (Wed, 18 Feb 2009) Log Message: ----------- Refactoring from Tristan Cragnolini for command message structure to use separate functions for each command in usermanager, of which there are many. Thanks Tristan! Modified Paths: -------------- trunk/src/server/gem.cpp trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-02-18 02:32:58 UTC (rev 3052) +++ trunk/src/server/gem.cpp 2009-02-18 06:31:59 UTC (rev 3053) @@ -3831,7 +3831,7 @@ else if (msg_id == "attack") psserver->usermanager->Attack(actor->GetCharacterData()->getStance("Normal"), actor->GetClient(), actor->GetClientID()); else if (msg_id == "loot") - psserver->usermanager->HandleLoot(actor->GetClient()); + psserver->usermanager->Loot(actor->GetClient()); } void gemNPC::AddLootableClient(int cnum) Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-18 02:32:58 UTC (rev 3052) +++ trunk/src/server/usermanager.cpp 2009-02-18 06:31:59 UTC (rev 3053) @@ -132,6 +132,35 @@ psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleCharDescUpdate),MSGTYPE_CHARDESCUPDATE,REQUIRE_READY_CLIENT); psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleTargetEvent),MSGTYPE_TARGET_EVENT,NO_VALIDATION); psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<UserManager>(this,&UserManager::HandleEntranceMessage),MSGTYPE_ENTRANCE,REQUIRE_READY_CLIENT); + + userCommandHash.Put("/admin", &UserManager::HandleAdminCommand); + userCommandHash.Put("/assist", &UserManager::Assist); + userCommandHash.Put("/attack", &UserManager::HandleAttack); + userCommandHash.Put("/bank", &UserManager::HandleBanking); + userCommandHash.Put("/buddy", &UserManager::Buddy); + userCommandHash.Put("/challenge", &UserManager::ChallengeToDuel); + userCommandHash.Put("/die", &UserManager::HandleDie); + userCommandHash.Put("/guard", &UserManager::HandleGuard); + userCommandHash.Put("/loot", &UserManager::HandleLoot); + userCommandHash.Put("/marriage", &UserManager::ReportPosition); + userCommandHash.Put("/motd", &UserManager::GiveMOTD); + userCommandHash.Put("/npcmenu", &UserManager::ShowNpcMenu); + userCommandHash.Put("/pickup", &UserManager::HandlePickup); + userCommandHash.Put("/pos", &UserManager::ReportPosition); + userCommandHash.Put("/quests", &UserManager::HandleQuestsCommand); + userCommandHash.Put("/roll", &UserManager::RollDice); + userCommandHash.Put("/rotate", &UserManager::HandleRotate); + userCommandHash.Put("/sit", &UserManager::HandleSit); +// userCommandHash.Put("/spawn", &UserManager::MoveToSpawnPos); + userCommandHash.Put("/stand", &UserManager::HandleStand); + userCommandHash.Put("/starttrading", &UserManager::StartTrading); + userCommandHash.Put("/stopattack", &UserManager::HandleStopAttack); + userCommandHash.Put("/stoptrading", &UserManager::StopTrading); + userCommandHash.Put("/tip", &UserManager::GiveTip); + userCommandHash.Put("/train", &UserManager::HandleTraining); + userCommandHash.Put("/unstick", &UserManager::HandleUnstick); + userCommandHash.Put("/who", &UserManager::Who); + userCommandHash.Put("/yield", &UserManager::HandleYield); } UserManager::~UserManager() @@ -201,178 +230,20 @@ Debug3(LOG_USER, client->GetClientNum(),"Received user command: %s from %s\n", me->bytes->payload, (const char *)client->GetName()); - // We don't check for validity for emotes, they always are. - if (!msg.valid && !CheckForEmote(msg.command, false, me, client)) + cmdPointer cmdPt = userCommandHash.Get(msg.command, NULL); + if(cmdPt != NULL) { - psserver->SendSystemError(me->clientnum,"Command not supported by server yet."); + (this->*cmdPt)(msg,client); return; } - if (msg.command == "/who") + // We don't check for validity for emotes, they always are. + if (!msg.valid && !CheckForEmote(msg.command, true, client)) { - Who(msg,client,me->clientnum); - } - else if (msg.command == "/buddy") - { - Buddy(msg,client,me->clientnum); - } - else if (msg.command == "/roll") - { - RollDice(msg,client,me->clientnum); - } - else if (msg.command == "/pos") - { - ReportPosition(msg,client,me->clientnum); - } - /*else if (msg.command == "/spawn") - { - MoveToSpawnPos(msg,client,me->clientnum);* - }*/ - else if (msg.command == "/unstick") - { - HandleUnstick(msg,client,me->clientnum); - } - else if (msg.command == "/attack") - { - HandleAttack(msg,client,me->clientnum); - } - else if (msg.command == "/stopattack") - { - psserver->combatmanager->StopAttack(client->GetActor()); - } - else if ( msg.command == "/admin" ) - { - psserver->GetAdminManager()->Admin(me->clientnum, client); - } - else if ( msg.command == "/loot" ) - { - HandleLoot(client); - } - else if ( msg.command == "/quests" ) - { - HandleQuests(client); - HandleGMEvents(client); - } - else if ( msg.command == "/train" ) - { - HandleTraining(client); - } - else if ( msg.command == "/sit" ) - { - if (client->GetActor()->GetMode() == PSCHARACTER_MODE_PEACE && client->GetActor()->AtRest() && !client->GetActor()->IsFalling()) - { - client->GetActor()->SetMode(PSCHARACTER_MODE_SIT); - Emote("%s takes a seat.", "%s takes a seat by %s.", "sit", me, client); - } - } - else if ( msg.command == "/stand" ) - { - if (client->GetActor()->GetMode() == PSCHARACTER_MODE_SIT) - { - client->GetActor()->SetMode(PSCHARACTER_MODE_PEACE); - psUserActionMessage anim(me->clientnum, client->GetActor()->GetEID(), "stand up"); - anim.Multicast( client->GetActor()->GetMulticastClients(),0,PROX_LIST_ANY_RANGE ); - Emote("%s stands up.", "%s stands up.", "stand", me, client); - } - else if (client->GetActor()->GetMode() == PSCHARACTER_MODE_OVERWEIGHT) - { - psserver->SendSystemError(client->GetClientNum(), "You can't stand up because you're overloaded!"); - } - } - else if (msg.command == "/starttrading") - { - client->GetCharacterData()->SetTradingStopped(false); - psserver->SendSystemInfo(me->clientnum,"You can trade now."); - } - else if (msg.command == "/stoptrading") - { - client->GetCharacterData()->SetTradingStopped(true); - psserver->SendSystemInfo(me->clientnum,"You are busy and can't trade."); - } - else if ( msg.command == "/assist" ) - { - Assist( msg, client, me->clientnum ); - } - else if (msg.command == "/tip") - { - GiveTip(me->clientnum); - } - else if (msg.command == "/motd") - { - GiveMOTD(me->clientnum); - } - else if (msg.command == "/challenge") - { - ChallengeToDuel(msg,client); - } - else if (msg.command == "/yield") - { - YieldDuel(client); - } - else if (msg.command == "/npcmenu") - { - ShowNpcMenu(client); - } - else if ( msg.command == "/die" ) - { - gemActor* actor = client->GetActor(); - if (!actor) - return; - actor->Kill(actor); - } - else if (msg.command == "/marriage") - { - if (msg.action == "propose") - { - if ( msg.player.IsEmpty() || msg.text.IsEmpty() ) - { - psserver->SendSystemError( client->GetClientNum(), "Usage: /marriage propose [first name] [message]" ); - return; - } - - // Send propose message - psserver->GetMarriageManager()->Propose(client, msg.player, msg.text); - } - else if (msg.action == "divorce") - { - if ( msg.text.IsEmpty() ) - { - psserver->SendSystemError( client->GetClientNum(), "Usage: /marriage divorce [message]" ); - return; - } - - // Send divorce prompt - psserver->GetMarriageManager()->ContemplateDivorce(client, msg.text); - } - else - { - psserver->SendSystemError( client->GetClientNum(), "Usage: /marriage [propose|divorce]" ); - } - } - else if(CheckForEmote(msg.command, true, me, client)) - { + psserver->SendSystemError(me->clientnum,"Command not supported by server yet."); return; } - else if (msg.command == "/bank") - { - HandleBanking(client, msg.action); - } - else if (msg.command == "/pickup") - { - HandlePickup(client, msg.target); - } - else if (msg.command == "/guard") - { - HandleGuard(client, msg.target, msg.action); - } - else if (msg.command == "/rotate") - { - HandleRotate(client, msg.target, msg.action); - } - else - { - psserver->SendSystemError(me->clientnum,"Command not supported by server yet."); - } + } csArray<csString> UserManager::DecodeCommandArea(Client *client, csString target) @@ -527,7 +398,7 @@ return result; } -bool UserManager::CheckForEmote(csString command, bool execute, MsgEntry *me, Client *client) +bool UserManager::CheckForEmote(csString command, bool execute, Client *client) { for(unsigned int i=0; i < emoteList.GetSize(); i++) { @@ -535,7 +406,7 @@ { if(execute) { - Emote(emoteList[i].general, emoteList[i].specific, emoteList[i].anim, me, client); + Emote(emoteList[i].general, emoteList[i].specific, emoteList[i].anim, client); } return true; } @@ -543,22 +414,22 @@ return false; } -void UserManager::Emote(csString general, csString specific, csString animation, MsgEntry *me, Client *client) +void UserManager::Emote(csString general, csString specific, csString animation, Client *client) { if (client->GetTargetObject() && (client->GetTargetObject() != client->GetActor())) { - psSystemMessage newmsg(me->clientnum, MSG_INFO_BASE, specific, client->GetActor()->GetName(), client->GetTargetObject()->GetName()); + psSystemMessage newmsg(client->GetClientNum(), MSG_INFO_BASE, specific, client->GetActor()->GetName(), client->GetTargetObject()->GetName()); newmsg.Multicast(client->GetActor()->GetMulticastClients(), 0, CHAT_SAY_RANGE); } else { - psSystemMessage newmsg(me->clientnum, MSG_INFO_BASE, general, client->GetActor()->GetName()); + psSystemMessage newmsg(client->GetClientNum(), MSG_INFO_BASE, general, client->GetActor()->GetName()); newmsg.Multicast(client->GetActor()->GetMulticastClients(), 0, CHAT_SAY_RANGE); } if (animation != "noanim") { - psUserActionMessage anim(me->clientnum, client->GetActor()->GetEID(), animation); + psUserActionMessage anim(client->GetClientNum(), client->GetActor()->GetEID(), animation); anim.Multicast(client->GetActor()->GetMulticastClients(), 0, PROX_LIST_ANY_RANGE); } } @@ -866,6 +737,72 @@ Debug3(LOG_USER, client->GetClientNum(), "Character description updated for %s (%s)\n", charData->GetCharFullName(), ShowID(client->GetAccountID())); } +void UserManager::HandleSit(psUserCmdMessage& msg, Client *client) +{ + if (client->GetActor()->GetMode() == PSCHARACTER_MODE_PEACE + && client->GetActor()->AtRest() && !client->GetActor()->IsFalling()) + { + client->GetActor()->SetMode(PSCHARACTER_MODE_SIT); + Emote("%s takes a seat.", "%s takes a seat by %s.", "sit", client); + } +} + +void UserManager::HandleAdminCommand(psUserCmdMessage& msg, Client *client) +{ + psserver->GetAdminManager()->Admin(client->GetClientNum(), client); +} + +void UserManager::HandleQuestsCommand(psUserCmdMessage& msg, Client *client) +{ + HandleQuests(client); + HandleGMEvents(client); +} + +void UserManager::HandleMarriage(psUserCmdMessage& msg, Client *client) +{ + if (msg.action == "propose") + { + if ( msg.player.IsEmpty() || msg.text.IsEmpty() ) + { + psserver->SendSystemError( client->GetClientNum(), "Usage: /marriage propose [first name] [message]" ); + return; + } + + // Send propose message + psserver->GetMarriageManager()->Propose(client, msg.player, msg.text); + } + else if (msg.action == "divorce") + { + if ( msg.text.IsEmpty() ) + { + psserver->SendSystemError( client->GetClientNum(), "Usage: /marriage divorce [message]" ); + return; + } + + // Send divorce prompt + psserver->GetMarriageManager()->ContemplateDivorce(client, msg.text); + } + else + { + psserver->SendSystemError( client->GetClientNum(), "Usage: /marriage [propose|divorce]" ); + } +} + +void UserManager::HandleStand(psUserCmdMessage& msg, Client *client) +{ + if (client->GetActor()->GetMode() == PSCHARACTER_MODE_SIT) + { + client->GetActor()->SetMode(PSCHARACTER_MODE_PEACE); + psUserActionMessage anim(client->GetClientNum(), client->GetActor()->GetEID(), "stand up"); + anim.Multicast( client->GetActor()->GetMulticastClients(),0,PROX_LIST_ANY_RANGE ); + Emote("%s stands up.", "%s stands up.", "stand", client); + } + else if (client->GetActor()->GetMode() == PSCHARACTER_MODE_OVERWEIGHT) + { + psserver->SendSystemError(client->GetClientNum(), "You can't stand up because you're overloaded!"); + } +} + void UserManager::HandleTargetEvent(MsgEntry *me, Client *notused) { psTargetChangeEvent targetevent(me); @@ -1030,8 +967,15 @@ } } +void UserManager::HandleDie(psUserCmdMessage& msg, Client* client) +{ + gemActor* actor = client->GetActor(); + if (!actor) + return; + actor->Kill(actor); +} -void UserManager::Who(psUserCmdMessage& msg, Client* client, int clientnum) +void UserManager::Who(psUserCmdMessage& msg, Client* client) { csString message((size_t) 1024); csString headerMsg("Players Currently Online"); @@ -1081,8 +1025,8 @@ while (i.HasNext()) { Client *curr = i.Next(); - if (!WhoProcessClient(curr, client->GetGuildID(), &message, msg.filter, true, - &count)) + if (!WhoProcessClient(curr, client->GetGuildID(), &message, + msg.filter, true, &count)) break; } } @@ -1094,7 +1038,7 @@ message.Append('\n'); message.Append(temp); - psSystemMessageSafe newmsg(clientnum, MSG_WHO, message); + psSystemMessageSafe newmsg(client->GetClientNum(), MSG_WHO, message); newmsg.SendMessage(); } @@ -1156,7 +1100,7 @@ str[i] = tolower(str[i]); } -void UserManager::Buddy(psUserCmdMessage& msg,Client *client,int clientnum) +void UserManager::Buddy(psUserCmdMessage& msg,Client *client) { bool onoff = false; ///< Holds if the player is forcing add (true) or remove bool toggle = false; ///< Holds if the player didn't force add or remove and so we are going to toggle @@ -1171,7 +1115,7 @@ if (msg.player.Length() == 0) //if no imput was provided other than the command send the buddylist { - BuddyList(client,clientnum, UserManager::ALL_PLAYERS); + BuddyList(client,client->GetClientNum(), UserManager::ALL_PLAYERS); return; } @@ -1191,7 +1135,7 @@ if (!buddyid.IsValid()) //Check if the buddy was found { - psserver->SendSystemError(clientnum,"Could not add buddy: Character '%s' not found.", msg.player.GetData()); + psserver->SendSystemError(client->GetClientNum(),"Could not add buddy: Character '%s' not found.", msg.player.GetData()); return; } @@ -1200,7 +1144,7 @@ { if ( !chardata->AddBuddy( buddyid, msg.player ) ) { - psserver->SendSystemError(clientnum,"%s could not be added to buddy list.",(const char *)msg.player); + psserver->SendSystemError(client->GetClientNum(),"%s could not be added to buddy list.",(const char *)msg.player); return; } @@ -1212,11 +1156,11 @@ if (!psserver->AddBuddy(selfid,buddyid)) { - psserver->SendSystemError(clientnum,"%s is already on your buddy list.",(const char *)msg.player); + psserver->SendSystemError(client->GetClientNum(),"%s is already on your buddy list.",(const char *)msg.player); return; } - psserver->SendSystemInfo(clientnum,"%s has been added to your buddy list.",(const char *)msg.player); + psserver->SendSystemInfo(client->GetClientNum(),"%s has been added to your buddy list.",(const char *)msg.player); } else //If the player used remove or the buddy was found in the player list remove it from there { @@ -1231,14 +1175,14 @@ if (!psserver->RemoveBuddy(selfid,buddyid)) { - psserver->SendSystemError(clientnum,"%s is not on your buddy list.",(const char *)msg.player); + psserver->SendSystemError(client->GetClientNum(),"%s is not on your buddy list.",(const char *)msg.player); return; } - psserver->SendSystemInfo(clientnum,"%s has been removed from your buddy list.",(const char *)msg.player); + psserver->SendSystemInfo(client->GetClientNum(),"%s has been removed from your buddy list.",(const char *)msg.player); } - BuddyList( client, clientnum, true ); + BuddyList( client, client->GetClientNum(), true ); } void UserManager::BuddyList(Client *client,int clientnum,bool filter) @@ -1321,7 +1265,7 @@ -void UserManager::RollDice(psUserCmdMessage& msg,Client *client,int clientnum) +void UserManager::RollDice(psUserCmdMessage& msg,Client *client) { int total=0; @@ -1352,7 +1296,7 @@ { if (msg.dice > 1) { - psSystemMessage newmsg(clientnum,MSG_INFO_BASE, + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, "Player %s has rolled %d %d-sided dice and had %d of them come up %d or greater.", client->GetName(), msg.dice, @@ -1364,7 +1308,7 @@ } else { - psSystemMessage newmsg(clientnum,MSG_INFO_BASE,((total)? + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE,((total)? "Player %s has rolled a %d-sided dice and had it come up %d or greater.": "Player %s has rolled a %d-sided dice and had it come up less than %d."), client->GetName(), @@ -1378,7 +1322,7 @@ { if (msg.dice > 1) { - psSystemMessage newmsg(clientnum,MSG_INFO_BASE, + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, "Player %s has rolled %d %d-sided dice for a %d.", client->GetName(), msg.dice, @@ -1389,7 +1333,7 @@ } else { - psSystemMessage newmsg(clientnum,MSG_INFO_BASE, + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, "Player %s has rolled a %d-sided die for a %d.", client->GetName(), msg.sides, @@ -1401,7 +1345,7 @@ } -void UserManager::ReportPosition(psUserCmdMessage& msg,Client *client,int clientnum) +void UserManager::ReportPosition(psUserCmdMessage& msg,Client *client) { if (msg.player.StartsWith("area:")) @@ -1410,7 +1354,7 @@ csArray<csString>::Iterator it(filters.GetIterator()); while (it.HasNext()) { msg.player = it.Next(); - ReportPosition(msg, client, clientnum); + ReportPosition(msg, client); } return; } @@ -1483,21 +1427,20 @@ idtxt.Format(", %s", ShowID(object->GetPID())); int degrees = (int)(angle*180.0/PI); - psserver->SendSystemInfo(clientnum, + psserver->SendSystemInfo(client->GetClientNum(), "%s current position is region: %s %1.2f %1.2f %1.2f %d angle: %d, sector : %s%s%s", name.GetData(), region_name.GetData(), pos.x, pos.y, pos.z, instance, degrees, sector_name.GetData(), range.GetData(), idtxt.GetDataSafe()); } else { - psserver->SendSystemInfo(clientnum,"%s current position is %s %1.2f %1.2f %1.2f, instance: %d", + psserver->SendSystemInfo(client->GetClientNum(),"%s current position is %s %1.2f %1.2f %1.2f, instance: %d", name.GetData(), sector_name.GetData(), pos.x, pos.y, pos.z, instance); } } } -void UserManager::HandleUnstick(psUserCmdMessage& msg, Client *client, - int clientnum) +void UserManager::HandleUnstick(psUserCmdMessage& msg, Client *client) { gemActor *actor = client->GetActor(); if (!actor) @@ -1512,7 +1455,7 @@ iSector* sector; actor->GetPosition(pos, sector); - psserver->SendSystemInfo(clientnum, + psserver->SendSystemInfo(client->GetClientNum(), "Moving back to valid position in sector %s...", sector->QueryObject()->GetName()); } @@ -1520,9 +1463,9 @@ { int timeRemaining = (UNSTICK_TIME - int(csGetTicks() - actor->GetFallStartTime())) / 1000; if (actor->IsFalling() && timeRemaining > 0) - psserver->SendSystemError(clientnum, "You cannot /unstick yet - please wait %d %s and try again.", timeRemaining, timeRemaining == 1 ? "second" : "seconds"); + psserver->SendSystemError(client->GetClientNum(), "You cannot /unstick yet - please wait %d %s and try again.", timeRemaining, timeRemaining == 1 ? "second" : "seconds"); else - psserver->SendSystemError(clientnum, "You cannot /unstick at this time."); + psserver->SendSystemError(client->GetClientNum(), "You cannot /unstick at this time."); } } @@ -1556,11 +1499,17 @@ psserver->combatmanager->StopAttack(client->GetActor()); } -void UserManager::HandleAttack(psUserCmdMessage& msg,Client *client,int clientnum) +void UserManager::HandleAttack(psUserCmdMessage& msg,Client *client) { - Attack(client->GetCharacterData()->getStance(msg.stance), client, clientnum); + Attack(client->GetCharacterData()->getStance(msg.stance), client, client->GetClientNum()); } +void UserManager::HandleStopAttack(psUserCmdMessage& msg,Client *client) +{ + psserver->combatmanager->StopAttack(client->GetActor()); +} + +//TODO : remove clientnum, check calling functions void UserManager::Attack(Stance stance, Client *client,int clientnum) { if (!client->IsAlive() || client->IsFrozen()) @@ -1572,17 +1521,17 @@ gemObject *target = client->GetTargetObject(); if ( ! target ) { - psserver->SendSystemError(clientnum,"You do not have a target selected."); + psserver->SendSystemError(client->GetClientNum(),"You do not have a target selected."); return; } if (target->GetItem() || strcmp(target->GetObjectType(), "ActionLocation") == 0 ) { - psserver->SendSystemError(clientnum,"You cannot attack %s.", (const char*)target->GetName() ); + psserver->SendSystemError(client->GetClientNum(),"You cannot attack %s.", (const char*)target->GetName() ); return; } if (!target->IsAlive()) { - psserver->SendSystemError(clientnum,"%s is already dead.", (const char*)target->GetName() ); + psserver->SendSystemError(client->GetClientNum(),"%s is already dead.", (const char*)target->GetName() ); return; } @@ -1592,7 +1541,7 @@ } } -void UserManager::Assist( psUserCmdMessage& msg, Client* client, int clientnum ) +void UserManager::Assist(psUserCmdMessage& msg, Client* client) { Client* targetClient = NULL; @@ -1609,20 +1558,20 @@ int currentTarget = client->GetTargetClientID(); if ( currentTarget == -1 ) { - psserver->SendSystemInfo( clientnum, "You have no target selected."); + psserver->SendSystemInfo(client->GetClientNum(), "You have no target selected."); return; } if ( currentTarget == 0 ) { - psserver->SendSystemInfo( clientnum, "You can assist other players only."); + psserver->SendSystemInfo(client->GetClientNum(), "You can assist other players only."); return; } targetClient = clients->Find( currentTarget ); if ( targetClient == NULL ) { - psserver->SendSystemInfo( clientnum, "Internal error - client not found."); + psserver->SendSystemInfo(client->GetClientNum(), "Internal error - client not found."); return; } } @@ -1633,20 +1582,20 @@ if ( !targetClient ) { - psserver->SendSystemInfo( clientnum,"Specified player is not online." ); + psserver->SendSystemInfo(client->GetClientNum(),"Specified player is not online." ); return; } } if ( targetClient == client ) { - psserver->SendSystemInfo( clientnum,"You cannot assist yourself." ); + psserver->SendSystemInfo(client->GetClientNum(),"You cannot assist yourself." ); return; } if ( !client->GetActor()->IsNear( targetClient->GetActor(), ASSIST_MAX_DIST ) ) { - psserver->SendSystemInfo(clientnum,"Specified player is too far away." ); + psserver->SendSystemInfo(client->GetClientNum(),"Specified player is too far away." ); return; } @@ -1658,7 +1607,7 @@ int nGID = client->GetActor()->GetGroupID(); if ( (nGID == 0) || (nGID != targetClient->GetActor()->GetGroupID()) ) { - psserver->SendSystemInfo( clientnum,"You can only assist members of your guild or players you're grouped with." ); + psserver->SendSystemInfo(client->GetClientNum(),"You can only assist members of your guild or players you're grouped with." ); return; } } @@ -1666,7 +1615,7 @@ gemObject* targetObject = targetClient->GetTargetObject(); if(!targetObject) { - psserver->SendSystemInfo(clientnum, + psserver->SendSystemInfo(client->GetClientNum(), "Specified player has no target selected." ); return; } @@ -1691,12 +1640,17 @@ UserStatRegeneration(); } +void UserManager::HandleLoot(psUserCmdMessage& msg,Client *client) +{ + Loot(client); +} + /** * Check target dead * Check target lootable by this client * Return lootable items list if present */ -void UserManager::HandleLoot(Client *client) +void UserManager::Loot(Client *client) { uint32_t clientnum = client->GetClientNum(); @@ -1937,7 +1891,7 @@ } } -void UserManager::HandleTraining(Client *client) +void UserManager::HandleTraining(psUserCmdMessage& msg, Client *client) { if (!client->IsAlive()) { @@ -1988,7 +1942,7 @@ psserver->GetProgressionManager()->StartTraining(client,trainer); } -void UserManager::HandleBanking(Client *client, csString accountType) +void UserManager::HandleBanking(psUserCmdMessage& msg, Client *client) { // Check if target is a banker. gemObject *target = client->GetTargetObject(); @@ -2023,13 +1977,13 @@ } // Check which account we're trying to access. - if (accountType.CompareNoCase("personal")) + if (msg.action.CompareNoCase("personal")) { // Open personal bank. psserver->GetBankManager()->GetSingleton().StartBanking(client, false); return; } - else if (accountType.CompareNoCase("guild")) + else if (msg.action.CompareNoCase("guild")) { // Open guild bank. psserver->GetBankManager()->GetSingleton().StartBanking(client, true); @@ -2042,14 +1996,19 @@ } } -void UserManager::HandlePickup(Client *client, csString target) +void UserManager::HandlePickup(psUserCmdMessage& msg, Client *client) { + Pickup(client, msg.target); +} + +void UserManager::Pickup(Client *client, csString target) +{ if (target.StartsWith("area:")) { csArray<csString> filters = DecodeCommandArea(client, target); csArray<csString>::Iterator it(filters.GetIterator()); while (it.HasNext()) { - HandlePickup(client, it.Next()); + Pickup(client, it.Next()); } return; } @@ -2078,14 +2037,19 @@ "Item not found %s", target.GetData()); } -void UserManager::HandleGuard(Client *client, csString target, csString action) +void UserManager::HandleGuard(psUserCmdMessage& msg, Client *client) { + Guard(client, msg.target, msg.action); +} + +void UserManager::Guard(Client *client, csString target, csString action) +{ if (target.StartsWith("area:")) { csArray<csString> filters = DecodeCommandArea(client, target); csArray<csString>::Iterator it(filters.GetIterator()); while (it.HasNext()) { - HandleGuard(client, it.Next(), action); + Guard(client, it.Next(), action); } return; } @@ -2144,132 +2108,133 @@ else if(client->GetTargetObject()) { gemObject* object= client->GetTargetObject(); - HandleGuard(client, object->GetEID().Show(), action); + Guard(client, object->GetEID().Show(), action); } else psserver->SendSystemError(client->GetClientNum(), "Item not found %s", target.GetData()); } -void UserManager::HandleRotate(Client *client, csString target, csString action) +void UserManager::HandleRotate(psUserCmdMessage& msg, Client *client) { - if (target.StartsWith("area:")) + gemObject* rotationTarget; + if (msg.target.StartsWith("area:")) { - csArray<csString> filters = DecodeCommandArea(client, target); + csArray<csString> filters = DecodeCommandArea(client, msg.target); csArray<csString>::Iterator it(filters.GetIterator()); while (it.HasNext()) { - HandleRotate(client, it.Next(), action); + rotationTarget = psserver->GetAdminManager()->FindObjectByString(msg.target, client->GetActor()); + Rotate(client, rotationTarget, msg.action); } return; } - else if (target.StartsWith("eid:", true)) + else if(msg.target.StartsWith("eid:")) { - gemItem* rotItem = NULL; - GEMSupervisor *gem = GEMSupervisor::GetSingletonPtr(); - csString eid_str = target.Slice(4); - EID eID = EID(strtoul(eid_str.GetDataSafe(), NULL, 10)); - if (eID.IsValid()) - { - // only rotate the object if it's an item - rotItem = dynamic_cast<gemItem*> (gem->FindObject(eID)); + rotationTarget = psserver->GetAdminManager()->FindObjectByString(msg.target, client->GetActor()); + Rotate(client, rotationTarget, msg.action); + } + else + psserver->SendSystemError(client->GetClientNum(), + "Unknown target : %s", msg.target.GetData()); +} - if (rotItem) - { - float oldxrot, oldyrot, oldzrot; - rotItem->GetRotation(oldxrot, oldyrot, oldzrot); - // rotation is stored in radians, - // we are converting the angles to degrees - oldxrot = oldxrot*180/PI; - oldyrot = oldyrot*180/PI; - oldzrot = oldzrot*180/PI; - // the specified rotation is added to the item's current rotation - float xrot=oldxrot, yrot=oldyrot, zrot=oldzrot; - WordArray words(action); - if (words[0] == "x") - { - if (words[1] != "reset") - xrot = oldxrot + atoi(words[1]); - else - xrot = 0; - } - else if (words[0] == "y") - { - if (words[1] != "reset") - yrot = oldyrot + atoi(words[1]); - else - yrot = 0; - } - else if (words[0] == "z") - { - if (words[1] != "reset") - zrot = oldzrot + atoi(words[1]); - else - zrot = 0; - } - else - { - if (words[0] != "reset") - xrot = oldxrot + atoi(words[1]); - else - xrot = 0; - if (words[1] != "reset") - yrot = oldyrot + atoi(words[1]); - else - yrot = 0; - if (words[2] != "reset") - zrot = oldzrot + atoi(words[1]); - else - zrot = 0; - } +void UserManager::Rotate(Client *client, gemObject* target, csString action) +{ + gemItem* rotItem = NULL; + // only rotate the object if it's an item + rotItem = dynamic_cast<gemItem*> (target); - // rotate an item only if the client is guarding it, - // or has the right to rotate all items - if (psserver->HasAccess(client, "rotate all")|| - rotItem->GetItem()->GetGuardingCharacterID() == client->GetPID()) - { - // rotation is given in degrees, converting that to radians - xrot = xrot/180*PI; - yrot = yrot/180*PI; - zrot = zrot/180*PI; - rotItem->SetRotation(xrot, yrot, zrot); - rotItem->UpdateProxList(true); - psserver->SendSystemInfo(client->GetClientNum(), "You have rotated %s %f %f %f", rotItem->GetItem()->GetName(), xrot, yrot, zrot); - } - else - { - psserver->SendSystemInfo(client->GetClientNum(), "You can't rotate %s", rotItem->GetItem()->GetName()); - } - } + if (rotItem) + { + float oldxrot, oldyrot, oldzrot; + rotItem->GetRotation(oldxrot, oldyrot, oldzrot); + // rotation is stored in radians, + // we are converting the angles to degrees + oldxrot = oldxrot*180/PI; + oldyrot = oldyrot*180/PI; + oldzrot = oldzrot*180/PI; + // the specified rotation is added to the item's current rotation + float xrot=oldxrot, yrot=oldyrot, zrot=oldzrot; + WordArray words(action); + if (words[0] == "x") + { + if (words[1] != "reset") + xrot = oldxrot + atoi(words[1]); else - { - psserver->SendSystemError(client->GetClientNum(), - "Item not found.", target.GetData()); - } + xrot = 0; } + else if (words[0] == "y") + { + if (words[1] != "reset") + yrot = oldyrot + atoi(words[1]); + else + yrot = 0; + } + else if (words[0] == "z") + { + if (words[1] != "reset") + zrot = oldzrot + atoi(words[1]); + else + zrot = 0; + } + else + { + if (words[0] != "reset") + xrot = oldxrot + atoi(words[1]); + else + xrot = 0; + if (words[1] != "reset") + yrot = oldyrot + atoi(words[1]); + else + yrot = 0; + if (words[2] != "reset") + zrot = oldzrot + atoi(words[1]); + else + zrot = 0; + } + + // rotate an item only if the client is guarding it, + // or has the right to rotate all items + if (psserver->HasAccess(client, "rotate all")|| + rotItem->GetItem()->GetGuardingCharacterID() == client->GetPID()) + { + // rotation is given in degrees, converting that to radians + xrot = xrot/180*PI; + yrot = yrot/180*PI; + zrot = zrot/180*PI; + rotItem->SetRotation(xrot, yrot, zrot); + rotItem->UpdateProxList(true); + psserver->SendSystemInfo(client->GetClientNum(), "You have rotated %s", rotItem->GetItem()->GetName()); + } + else + { + psserver->SendSystemInfo(client->GetClientNum(), "You can't rotate %s", rotItem->GetItem()->GetName()); + } } else + { psserver->SendSystemError(client->GetClientNum(), - "You can't rotate %s", target.GetData()); + "Item not found."); + } } -void UserManager::GiveTip(int id) +void UserManager::GiveTip(psUserCmdMessage& msg, Client *client) { unsigned int max=CacheManager::GetSingleton().GetTipLength(); unsigned int rnd = psserver->rng->Get(max); csString tip; CacheManager::GetSingleton().GetTipByID(rnd, tip); - psserver->SendSystemInfo(id,tip.GetData()); + psserver->SendSystemInfo(client->GetClientNum(),tip.GetData()); } -void UserManager::GiveMOTD(int id) +void UserManager::GiveMOTD(psUserCmdMessage& msg, Client *client) { - psserver->SendSystemInfo(id,psserver->GetMOTD()); + psserver->SendSystemInfo(client->GetClientNum(),psserver->GetMOTD()); } - -void UserManager::ShowNpcMenu(Client *client) +void UserManager::ShowNpcMenu(psUserCmdMessage& msg, Client *client) { gemNPC *npc = dynamic_cast<gemNPC*> ( client->GetTargetObject() ); if (npc) @@ -2384,6 +2349,23 @@ psserver->usermanager->AcceptDuel(this); } +void UserManager::StartTrading(psUserCmdMessage& msg,Client *client) +{ + client->GetCharacterData()->SetTradingStopped(false); + psserver->SendSystemInfo(client->GetClientNum(),"You can trade now."); +} + +void UserManager::StopTrading(psUserCmdMessage& msg,Client *client) +{ + client->GetCharacterData()->SetTradingStopped(true); + psserver->SendSystemInfo(client->GetClientNum(),"You are busy and can't trade."); +} + +void UserManager::HandleYield(psUserCmdMessage& msg,Client *client) +{ + YieldDuel(client); +} + void UserManager::YieldDuel(Client *client) { if (client->GetActor()->GetMode() == PSCHARACTER_MODE_DEFEATED || !client->GetActor()->IsAlive()) Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-02-18 02:32:58 UTC (rev 3052) +++ trunk/src/server/usermanager.h 2009-02-18 06:31:59 UTC (rev 3053) @@ -123,16 +123,25 @@ void SendPlayerMoney(Client *client); + /** @brief Handles a /loot command from a player to loot something. * + * @param msg The incomming user command message + * @param client The client that request the /who + */ + void HandleLoot(psUserCmdMessage& msg,Client *client); + + /** @brief Attempt to loot the target + * * Sends the lootable item to the client and splits any loot money across * a group ( if present ). * + * @param msg The incoming user command message * @param client The client where the loot command came from. */ - void HandleLoot(Client *client); + void Loot(Client *client); - // Load emotes from xml. + /// Load emotes from xml. bool LoadEmotes(const char *xmlfile, iVFS *vfs); /** @brief Decodes an area: expression @@ -147,11 +156,10 @@ * * Sends the name/guild/rank of all players in the world. * - * @param msg The incomming user command message (unused) - * @param client The client that request the /who (unused) - * @param clientnum The client id number of the requesting client. + * @param msg The incomming user command message + * @param client The client that request the /who */ - void Who(psUserCmdMessage& msg, Client* client, int clientnum); + void Who(psUserCmdMessage& msg, Client* client); /** @brief Formats output of a player and adds it to a message. @@ -177,9 +185,8 @@ * * @param msg The incomming user command message. * @param client The client that request the /buddy. - * @param clientnum The client id number of the requesting client. */ - void Buddy(psUserCmdMessage& msg,Client *client,int clientnum); + void Buddy(psUserCmdMessage& msg,Client *client); enum { @@ -191,19 +198,17 @@ /** @brief Calculates a dice roll from a player based on number of die and sides. * * @param msg The incomming user command message. - * @param client The client that request the command.. - * @param clientnum The client id number of the requesting client. + * @param client The client that request the command. */ - void RollDice(psUserCmdMessage& msg,Client *client,int clientnum); + void RollDice(psUserCmdMessage& msg,Client *client); /** @brief Sends the player their current position and sector. * * @param msg The incomming user command message. - * @param client The client that request the command.. - * @param clientnum The client id number of the requesting client. + * @param client The client that request the command. */ - void ReportPosition(psUserCmdMessage& msg,Client *client,int clientnum); + void ReportPosition(psUserCmdMessage& msg,Client *client); /** @brief Moves a player back to the default start point for their race. @@ -217,10 +222,9 @@ /** @brief Moves a player back to his last valid position. * * @param msg The incomming user command message. - * @param client The client that request the command.. - * @param clientnum The client id number of the requesting client. + * @param client The client that request the command. */ - void HandleUnstick(psUserCmdMessage& msg,Client *client,int clientnum); + void HandleUnstick(psUserCmdMessage& msg,Client *client); /** @brief Helper function to log a stuck character's details. * @@ -238,11 +242,18 @@ * working. * * @param msg The incomming user command message. - * @param client The client that request the command.. - * @param clientnum The client id number of the requesting client. + * @param client The client that request the command. */ - void HandleAttack(psUserCmdMessage& msg,Client *client,int clientnum); + void HandleAttack(psUserCmdMessage& msg,Client *client); + /** @brief Command to stop attacking your target + * + * @param msg The incomming user command message. + * @param client The client that request the command. + */ + void HandleStopAttack(psUserCmdMessage& msg,Client *client); + + /** @brief Command to challenge someone to a duel. * * @param msg The incoming user command message. @@ -252,73 +263,142 @@ /** @brief Command to surrender to someone in a duel. * + * @param client The client that request the command.. + */ + void YieldDuel(Client *client); + + /** @brief Handle the yield command + * * @param msg The incoming user command message. * @param client The client that request the command.. */ - void YieldDuel(Client *client); + void HandleYield(psUserCmdMessage& msg,Client *client); + /// Handle the /starttrading command + void StartTrading(psUserCmdMessage& msg,Client *client); + /// Handle the /stoptrading command + void StopTrading(psUserCmdMessage& msg,Client *client); + + /** @brief Command to marry/divorce someone + * + * @param msg The incoming user command message. + * @param client The client that request the command.. + */ + void HandleMarriage(psUserCmdMessage& msg,Client *client); + /** @brief Sends a client a list of their current assigned quests. * * @param client The requesting client. */ void HandleQuests(Client *client); + /** @brief Sends a client a list of their current assigned quests and events + * + * @param msg The incoming user command message. + * @param client The requesting client. + */ + void HandleQuestsCommand(psUserCmdMessage& msg,Client *client); + /** @brief Sends a client a list of their current assigned event. * @param client: the requesting client. */ void HandleGMEvents(Client* client); /** @brief Give a tip from the database to the client - * - * @param id The id of the client who wants the tip - */ - void GiveTip(int id); + * + * @param the user command message + * @param the client who sit + */ + void GiveTip(psUserCmdMessage& msg, Client *client); /** @brief Sends the MOTD to the client * - * @param id The id of the client + * @param the user command message + * @param the client who sit */ - void GiveMOTD(int id); + void GiveMOTD(psUserCmdMessage& msg, Client *client); /** @brief Handles a player command to show the popup dialog menu of the currently targeted NPC, if any. * + * @param the user command message * @param client The client that issued the command. */ - void ShowNpcMenu(Client *client); + void ShowNpcMenu(psUserCmdMessage& msg, Client *client); + /** + * @brief Handles a player command to sit down + * + * @param the user command message + * @param the client who sit + */ + void HandleSit(psUserCmdMessage& msg, Client *client); + + /** @brief Handles the /admin command + * + * @param the user command message + * @param the client who sit + */ + void HandleAdminCommand(psUserCmdMessage& msg, Client *client); + + /** + * @brief Handles a player command to stand up + * + * @param the user command message + * @param the client who stand + */ + void HandleStand(psUserCmdMessage& msg, Client *client); + + /** @brief Handles a player command to die + * + * @param the user command message + * @param the client who stand + */ + void HandleDie(psUserCmdMessage& msg, Client *client); + /** @brief Handles a player command to start training with targeted entity. * + * @param the user command message * @param client The client that issued the command. */ - void HandleTraining(Client *client); + void HandleTraining(psUserCmdMessage& msg, Client *client); /** @brief Handles a player command to start banking with the targeted entity. - * @param client The client that issued the command. - */ - void HandleBanking(Client *client, csString accountType); + * + * @param client The client that issued the command. + */ + void HandleBanking(psUserCmdMessage& msg, Client *client); + /// Handle the /pickup command, send it to Pickup() + void HandlePickup(psUserCmdMessage& msg, Client *client); + /** @brief Handles a player command to pickup an item. * * @param client The client that issued the command. * @param target description of the item to be picked up. */ - void HandlePickup(Client *client, csString target); + void Pickup(Client *client, csString target); + /// Handle the /guard command, send it to Guard() + void HandleGuard(psUserCmdMessage& msg, Client *client); + /** @brief Handles a player command to guard/unguard an item. * * @param client The client that issued the command. * @param target description of the item to be guarded/unguarded. */ - void HandleGuard(Client *client, csString target, csString action); + void Guard(Client *client, csString target, csString action); + /// Handle the /rotate command, send it to Rotate() + void HandleRotate(psUserCmdMessage& msg, Client *client); + /** @brief Handles a player command to rotate an item. * * @param client The client that issued the command. - * @param target description of the item to be rotated. + * @param target pointer to the item to be rotated. * @param action rotation data */ - void HandleRotate(Client *client, csString target, csString action); + void Rotate(Client *client, gemObject* target, csString action); /** @brief Handles a player request to 'use' the targeted item. * @@ -330,9 +410,8 @@ /** @brief Handles an /Assist command comming from the client. * @param msg The incomming command message * @param client A pointer to the client struct. - * @param clientnum The id number of this client. */ - void Assist( psUserCmdMessage& msg, Client* client, int clientnum ); + void Assist( psUserCmdMessage& msg, Client* client); /** @brief Teleport player to a location. * @@ -344,9 +423,20 @@ */ void Teleport( Client *client, float x, float y, float z, InstanceID instance, float rot, const char* sectorname ); + /** @brief Sends to client the MOTD and tip, and his guild's MOTD if needed + * + * @param me The incoming message + * @param client the client to send the message to + */ void HandleMOTDRequest(MsgEntry *me,Client *client); + + /// Take a user command from a client, and send it to be handled by a function void HandleUserCommand(MsgEntry *me,Client *client); + + /// Handle a message to update a character's description void HandleCharDescUpdate(MsgEntry *me,Client *client); + + /// Handle a request to send a character description void HandleCharDetailsRequest(MsgEntry *me,Client *client); void HandleTargetEvent(MsgEntry *me,Client *client); void HandleEntranceMessage( MsgEntry* me, Client *client ); @@ -358,17 +448,15 @@ * @param general The phrase to broadcast if no target is selected. * @param specific The phrase to broadcast if a target is selected. * @param animation The animation for the emote. If there isn't one pass "noanim". - * @param range The range of the broadcast. - * @param target The target, if there is one. */ - void Emote(csString general, csString specific, csString animation, MsgEntry *me, Client *client); + void Emote(csString general, csString specific, csString animation, Client *client); /** @brief Check to see if command is an emote. * * @param command The command in question. * @param execute Execute the emote or not. */ - bool CheckForEmote(csString command, bool execute, MsgEntry *me, Client *client); + bool CheckForEmote(csString command, bool execute, Client *client); /// Struct to hold our emote data. struct EMOTE { @@ -388,6 +476,10 @@ // psServer *server; // AdminManager *adminmanager; csTicks nextUserStatRegeneration; + /// pointer to member function typedef, improves readability + typedef void (UserManager::*cmdPointer)(psUserCmdMessage& msg, Client *client); + /// Hash of the user commands, the key is the command name + csHash<cmdPointer, csString> userCommandHash; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-02-21 08:26:35
|
Revision: 3075 http://planeshift.svn.sourceforge.net/planeshift/?rev=3075&view=rev Author: kougaro Date: 2009-02-21 08:26:31 +0000 (Sat, 21 Feb 2009) Log Message: ----------- changed the emote list in usermanager to a hashmap, and renamed the pointer to member function typedef Modified Paths: -------------- trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-21 07:33:51 UTC (rev 3074) +++ trunk/src/server/usermanager.cpp 2009-02-21 08:26:31 UTC (rev 3075) @@ -174,6 +174,7 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_TARGET_EVENT); psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_ENTRANCE); } + emoteHash.DeleteAll(); } void UserManager::HandleMOTDRequest(MsgEntry *me,Client *client) @@ -230,7 +231,7 @@ Debug3(LOG_USER, client->GetClientNum(),"Received user command: %s from %s\n", me->bytes->payload, (const char *)client->GetName()); - cmdPointer cmdPt = userCommandHash.Get(msg.command, NULL); + userCmdPointer cmdPt = userCommandHash.Get(msg.command, NULL); if(cmdPt != NULL) { (this->*cmdPt)(msg,client); @@ -400,18 +401,12 @@ bool UserManager::CheckForEmote(csString command, bool execute, Client *client) { - for(unsigned int i=0; i < emoteList.GetSize(); i++) - { - if( command == emoteList[i].command ) - { - if(execute) - { - Emote(emoteList[i].general, emoteList[i].specific, emoteList[i].anim, client); - } - return true; - } - } - return false; + EMOTE *emotePtr = emoteHash.Get(command, NULL); + if(emotePtr == NULL) + return false; + + Emote(emotePtr->general, emotePtr->specific, emotePtr->anim, client); + return true; } void UserManager::Emote(csString general, csString specific, csString animation, Client *client) @@ -468,17 +463,19 @@ } csRef<iDocumentNodeIterator> emoteIter = topNode->GetNodes("emote"); + EMOTE *emote; + while(emoteIter->HasNext()) { csRef<iDocumentNode> emoteNode = emoteIter->Next(); - EMOTE emote; - emote.command = emoteNode->GetAttributeValue("command"); - emote.general = emoteNode->GetAttributeValue("general"); - emote.specific = emoteNode->GetAttributeValue("specific"); - emote.anim = emoteNode->GetAttributeValue("anim"); - - emoteList.Push(emote); + emote = new EMOTE; + emote->command = emoteNode->GetAttributeValue("command"); + emote->general = emoteNode->GetAttributeValue("general"); + emote->specific = emoteNode->GetAttributeValue("specific"); + emote->anim = emoteNode->GetAttributeValue("anim"); + + emoteHash.Put(emote->command, emote); } return true; Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-02-21 07:33:51 UTC (rev 3074) +++ trunk/src/server/usermanager.h 2009-02-21 08:26:31 UTC (rev 3075) @@ -466,7 +466,7 @@ csString anim; }; - csArray<EMOTE> emoteList; + csHash<EMOTE *, csString> emoteHash; ClientConnectionSet *clients; // psDatabase *database; @@ -476,10 +476,11 @@ // psServer *server; // AdminManager *adminmanager; csTicks nextUserStatRegeneration; + /// pointer to member function typedef, improves readability - typedef void (UserManager::*cmdPointer)(psUserCmdMessage& msg, Client *client); + typedef void (UserManager::*userCmdPointer)(psUserCmdMessage& msg, Client *client); /// Hash of the user commands, the key is the command name - csHash<cmdPointer, csString> userCommandHash; + csHash<userCmdPointer, csString> userCommandHash; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-02-21 08:58:11
|
Revision: 3076 http://planeshift.svn.sourceforge.net/planeshift/?rev=3076&view=rev Author: kougaro Date: 2009-02-21 08:58:06 +0000 (Sat, 21 Feb 2009) Log Message: ----------- merged the Validate wrapper from adminmanager into the HasAccess from psserver, changed various commands in usermanager and adminmanager to use the new wrapper Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h trunk/src/server/commandmanager.cpp trunk/src/server/psserver.cpp trunk/src/server/psserver.h trunk/src/server/usermanager.cpp Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-02-21 08:26:31 UTC (rev 3075) +++ trunk/src/server/adminmanager.cpp 2009-02-21 08:58:06 UTC (rev 3076) @@ -1068,11 +1068,8 @@ } // Security check - if ( me->clientnum != 0 && !IsReseting(msg.cmd) && !Valid(client->GetSecurityLevel(), data.command, me->clientnum) ) - { - psserver->SendSystemError(me->clientnum, "You are not allowed to use %s.", data.command.GetData()); + if ( me->clientnum != 0 && !IsReseting(msg.cmd) && !psserver->CheckAccess(client, data.command)) return; - } // Called functions should report all needed errors gemObject* targetobject = NULL; @@ -1610,20 +1607,6 @@ } } - -bool AdminManager::Valid( int level, const char* command, int clientnum ) -{ - csString errorStr; - - if ( !CacheManager::GetSingleton().GetCommandManager()->Validate( level, command, errorStr ) ) - { - psserver->SendSystemError(clientnum, errorStr); - return false; - } - return true; -} - - void AdminManager::GetInfo(MsgEntry* me,psAdminCmdMessage& msg, AdminCmdData& data,Client *client, gemObject* target) { EID entityId; @@ -5423,7 +5406,7 @@ type = row.GetUInt32("character_type"); if (type == PSCHARACTER_TYPE_NPC) { - if (!Valid(client->GetSecurityLevel(), "change NPC names", me->clientnum)) + if (!psserver->CheckAccess(client, "change NPC names")) return; } } @@ -5965,7 +5948,7 @@ csArray<psItemStats*> items; unsigned int size = 0; - if (!Valid(client->GetSecurityLevel(), "/item", client->GetClientNum())) + if (!psserver->CheckAccess(client, "/item")) { return; } @@ -6027,7 +6010,7 @@ void AdminManager::SpawnItemInv( MsgEntry* me, psGMSpawnItem& msg, Client *client) { - if (!Valid(client->GetSecurityLevel(), "/item", client->GetClientNum())) + if (!psserver->CheckAccess(client, "/item")) { return; } @@ -6483,7 +6466,7 @@ } // Check the permission to set skills for other characters - if (target != client && !Valid(client->GetSecurityLevel(), "setskill others", me->clientnum)) + if (target != client && !psserver->CheckAccess(client, "setskill others")) return; psCharacter * pchar = target->GetCharacterData(); @@ -7258,11 +7241,8 @@ return; } - if(targetclient != client && !Valid(client->GetSecurityLevel(), "morph others", me->clientnum)) - { - psserver->SendSystemError(me->clientnum,"You don't have permission to change mesh of %s!", targetclient->GetName() ); + if(targetclient != client && !psserver->CheckAccess(client, "morph others")) return; - } gemActor* target = targetclient->GetActor(); @@ -8047,7 +8027,7 @@ quest->Active(!quest->Active()); //invert the status of the quest: if enabled, disable it, if disabled, enable it if(data.subCmd == "save") //if the subcmd is save we save this also on the database { - if(!Valid(client->GetSecurityLevel(), "save quest disable", me->clientnum)) //check if the client has the correct rights to do this + if(!psserver->CheckAccess(client, "save quest disable", false)) //check if the client has the correct rights to do this { psserver->SendSystemInfo(client->GetClientNum(),"You can't change the active status of quests: the quest status was changed only temporarily."); return; Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2009-02-21 08:26:31 UTC (rev 3075) +++ trunk/src/server/adminmanager.h 2009-02-21 08:58:06 UTC (rev 3076) @@ -109,7 +109,6 @@ protected: - bool Valid( int level, const char* command, int clientnum ); bool IsReseting(const csString& command); struct AdminCmdData Modified: trunk/src/server/commandmanager.cpp =================================================================== --- trunk/src/server/commandmanager.cpp 2009-02-21 08:26:31 UTC (rev 3075) +++ trunk/src/server/commandmanager.cpp 2009-02-21 08:58:06 UTC (rev 3076) @@ -111,6 +111,14 @@ return true; } +bool psCommandManager::GroupExists( int securityLevel ) +{ + // Force every security level to legal range + if (securityLevel > 30) securityLevel = 30; + + return commandGroups.Contains( securityLevel ); +} + bool psCommandManager::Validate( int securityLevel, const char* command ) { if ( !command ) @@ -126,14 +134,6 @@ return false; } -bool psCommandManager::GroupExists( int securityLevel ) -{ - // Force every security level to legal range - if (securityLevel > 30) securityLevel = 30; - - return commandGroups.Contains( securityLevel ); -} - bool psCommandManager::Validate( int securityLevel, const char* command, csString& error ) { if ( !command ) @@ -156,7 +156,7 @@ if ( grp ) groupName = grp->name; - error.Format("You cannot '%s' in your group '%s'", command, groupName.GetData() ); + error.Format("You do not have access to '%s' in your group '%s'", command, groupName.GetData() ); return false; } else Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2009-02-21 08:26:31 UTC (rev 3075) +++ trunk/src/server/psserver.cpp 2009-02-21 08:58:06 UTC (rev 3076) @@ -1022,7 +1022,19 @@ return result==1; } -bool psServer::HasAccess( Client* client, const char* command) +bool psServer::CheckAccess(Client* client, const char* command, bool returnError) { + if(returnError) + { + bool gotAccess; + csString errorMessage; + gotAccess = CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), command, errorMessage); + if(gotAccess) + return true; + + SendSystemError(client->GetClientNum(), errorMessage); + return false; + } + return CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), command); } Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2009-02-21 08:26:31 UTC (rev 3075) +++ trunk/src/server/psserver.h 2009-02-21 08:58:06 UTC (rev 3076) @@ -495,14 +495,16 @@ */ bool SetServerOption(const char *option_name,const csString& value); - iResultSet* GetAllResponses( csString& trigger ); + iResultSet* GetAllResponses(csString& trigger); /** Check if a client is authorized to execute a command * @param client: the client we are checking * @param command: the command we are checking for + * @param returnError: tells whether the command outputs an error + * * @return return true if the client is authorized to execute the command */ - bool HasAccess( Client* client, const char* command); + bool CheckAccess(Client* client, const char* command, bool returnError=true); static psCharacterLoader CharacterLoader; Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-21 08:26:31 UTC (rev 3075) +++ trunk/src/server/usermanager.cpp 2009-02-21 08:58:06 UTC (rev 3076) @@ -558,7 +558,7 @@ csArray<psCharacterDetailsMessage::NetworkDetailSkill> skills; - if ( !simple && CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), "view stats") ) + if (!simple && psserver->CheckAccess(client, "view stats", false)) full = true; // GMs can view the stats list //send creation info only if the player is requesting his info @@ -1359,7 +1359,7 @@ gemObject *object = NULL; bool self = true; - bool extras = CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), "pos extras"); + bool extras = psserver->CheckAccess(client, "pos extras", false); // Allow GMs to get other players' and entities' locations if (extras && msg.player.Length()) @@ -2193,8 +2193,8 @@ // rotate an item only if the client is guarding it, // or has the right to rotate all items - if (psserver->HasAccess(client, "rotate all")|| - rotItem->GetItem()->GetGuardingCharacterID() == client->GetPID()) + if (rotItem->GetItem()->GetGuardingCharacterID() == client->GetPID() || + psserver->CheckAccess(client, "rotate all")) { // rotation is given in degrees, converting that to radians xrot = xrot/180*PI; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-02-21 09:29:46
|
Revision: 3077 http://planeshift.svn.sourceforge.net/planeshift/?rev=3077&view=rev Author: kougaro Date: 2009-02-21 09:29:44 +0000 (Sat, 21 Feb 2009) Log Message: ----------- moved DecodeCommandArea and FindObjectByString from usermanager and adminmanager to msgmanager, where they will be easily reusable by both classes, plus some code alignments Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h trunk/src/server/msgmanager.cpp trunk/src/server/msgmanager.h trunk/src/server/psserver.cpp trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-02-21 08:58:06 UTC (rev 3076) +++ trunk/src/server/adminmanager.cpp 2009-02-21 09:29:44 UTC (rev 3077) @@ -62,30 +62,30 @@ //============================================================================= // Application Includes //============================================================================= -#include "globals.h" +#include "actionmanager.h" #include "adminmanager.h" -#include "spawnmanager.h" +#include "authentserver.h" +#include "cachemanager.h" #include "chatmanager.h" -#include "marriagemanager.h" -#include "gem.h" #include "clients.h" -#include "playergroup.h" +#include "creationmanager.h" #include "entitymanager.h" -#include "psserver.h" -#include "usermanager.h" -#include "cachemanager.h" +#include "gem.h" +#include "globals.h" +#include "gmeventmanager.h" +#include "guildmanager.h" +#include "marriagemanager.h" #include "netmanager.h" #include "npcmanager.h" +#include "playergroup.h" +#include "progressionmanager.h" +#include "psserver.h" #include "psserverchar.h" +#include "questionmanager.h" #include "questmanager.h" -#include "creationmanager.h" -#include "guildmanager.h" +#include "spawnmanager.h" +#include "usermanager.h" #include "weathermanager.h" -#include "authentserver.h" -#include "gmeventmanager.h" -#include "actionmanager.h" -#include "progressionmanager.h" -#include "questionmanager.h" //----------------------------------------------------------------------------- @@ -108,13 +108,13 @@ return; //decode the area command and get the list of objects to work on - csArray<csString> filters = UserManager::DecodeCommandArea(client, player); + csArray<csString> filters = MessageManager::DecodeCommandArea(client, player); csArray<csString>::Iterator it(filters.GetIterator()); while (it.HasNext()) { csString cur_player = it.Next(); //get the data about the specific entity on this iteration - gemObject * targetobject = psserver->GetAdminManager()->FindObjectByString(cur_player,client->GetActor()); + gemObject * targetobject = psserver->GetAdminManager()->FindObjectByString(cur_player, client->GetActor()); if(targetobject == client->GetActor()) { continue; @@ -133,6 +133,7 @@ csString player; ///< Normally this should be the area:x:x command extrapolated from the original command }; + AdminManager::AdminManager() { clients = psserver->GetNetManager()->GetConnections(); @@ -1096,7 +1097,7 @@ csString question; //used to hold the generated question for the client //first part of the question add also the command which will be used on the are if confirmed (the name not the arguments) question.Format("Are you sure you want to execute %s on:\n", data.command.GetDataSafe()); - csArray<csString> filters = UserManager::DecodeCommandArea(client, data.player); //decode the area command + csArray<csString> filters = DecodeCommandArea(client, data.player); //decode the area command csArray<csString>::Iterator it(filters.GetIterator()); if(filters.GetSize()) { @@ -1481,49 +1482,6 @@ } } - -gemObject* AdminManager::FindObjectByString(const csString& str, gemActor * me) const -{ - gemObject* found = NULL; - GEMSupervisor *gem = GEMSupervisor::GetSingletonPtr(); - if (!gem) - { - return NULL; - } - - if ( str.StartsWith("pid:",true) ) // Find by player ID - { - csString pid_str = str.Slice(4); - PID pid = PID(strtoul(pid_str.GetDataSafe(), NULL, 10)); - if (pid.IsValid()) - found = gem->FindPlayerEntity(pid); - } - else if ( str.StartsWith("eid:",true) ) // Find by entity ID - { - csString eid_str = str.Slice(4); - EID eid = EID(strtoul(eid_str.GetDataSafe(), NULL, 10)); - if (eid.IsValid()) - found = gem->FindObject(eid); - } - else if ( str.StartsWith("itemid:",true) ) // Find by item UID - { - csString itemid_str = str.Slice(7); - uint32 itemID = strtoul(itemid_str.GetDataSafe(), NULL, 10); - if (itemID != 0) - found = gem->FindItemEntity(itemID); - } - else if ( me != NULL && str.CompareNoCase("me") ) // Return me - { - found = me; - } - else // Try finding an entity by name - { - found = gem->FindObject(str); - } - - return found; -} - void AdminManager::GetSiblingChars(MsgEntry* me,psAdminCmdMessage& msg, AdminCmdData& data, gemObject *targetobject, bool duplicateActor, Client *client) { if ((!data.player || !data.player.Length()) && !targetobject) Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2009-02-21 08:58:06 UTC (rev 3076) +++ trunk/src/server/adminmanager.h 2009-02-21 09:29:44 UTC (rev 3077) @@ -99,8 +99,6 @@ void AdminCreateNewNPC(csString& data); - gemObject* FindObjectByString(const csString& str, gemActor * me) const; - void AwardExperienceToTarget(int gmClientnum, Client* target, csString recipient, int ppAward); void AdjustFactionStandingOfTarget(int gmClientnum, Client* target, csString factionName, int standingDelta); Modified: trunk/src/server/msgmanager.cpp =================================================================== --- trunk/src/server/msgmanager.cpp 2009-02-21 08:58:06 UTC (rev 3076) +++ trunk/src/server/msgmanager.cpp 2009-02-21 09:29:44 UTC (rev 3077) @@ -27,6 +27,7 @@ //============================================================================= #include "net/messages.h" // Chat Message definitions #include "util/psdatabase.h" +#include "util/strutil.h" //============================================================================= // Local Includes @@ -115,3 +116,192 @@ return player; } +csArray<csString> MessageManager::DecodeCommandArea(Client *client, csString target) +{ + csArray<csString> result; + + if (!psserver->CheckAccess(client, "command area")) + return result; + + csArray<csString> splitTarget = psSplit(target, ':'); + size_t splitSize = splitTarget.GetSize(); + + if (splitSize < 3 || splitSize > 4) + { + psserver->SendSystemError(client->GetClientNum(), + "Try /$CMD area:item:range[:name]"); + return result; + } + + csString itemName = splitTarget[1]; + csString* nameFilter = splitSize > 3 ? &splitTarget[3] : 0; + + const int range = atoi(splitTarget[2].GetData()); + if (range <= 0) + { + psserver->SendSystemError(client->GetClientNum(), + "You must specify a positive integer for the area: range."); + return result; + } + + bool allNames = true; + if (nameFilter && (*nameFilter!="all")) + allNames = false; + + int mode; + if (itemName == "players") + mode = 0; + else if (itemName == "actors") + mode = 1; + else if (itemName == "items") + mode = 2; + else if (itemName == "npcs") + mode = 3; + else if (itemName == "entities") + mode = 4; + else + { + psserver->SendSystemError(client->GetClientNum(), + "item must be players|actors|items|npcs|entities"); + return result; + } + + gemActor* self = client->GetActor(); + if (!self) + { + psserver->SendSystemError(client->GetClientNum(), "You do not exist..."); + return result; + } + + csVector3 pos; + iSector* sector; + self->GetPosition(pos, sector); + + GEMSupervisor* gem = GEMSupervisor::GetSingletonPtr(); + if (!gem) + return result; + + csArray<gemObject*> nearlist = gem->FindNearbyEntities(sector, pos, + range); + size_t count = nearlist.GetSize(); + csArray<csString *> results; + + for (size_t i=0; i<count; i++) + { + gemObject *nearobj = nearlist[i]; + if (!nearobj) + continue; + + if (nearobj->GetInstance() != self->GetInstance()) + continue; + + if (!allNames) + { + csString nearobjName = nearobj->GetName(); + if (!nearobjName.StartsWith(*nameFilter->GetData(), true)) + continue; + } + + csString newTarget; + + switch (mode) + { + case 0: // Target players + { + if (nearobj->GetClientID()) + { + newTarget.Format("pid:%d", nearobj->GetPID().Unbox()); + break; + } + else + continue; + } + case 1: // Target actors + { + if (nearobj->GetPID().IsValid()) + { + newTarget.Format("pid:%d", nearobj->GetPID().Unbox()); + break; + } + else + continue; + } + case 2: // Target items + { + if (nearobj->GetItem()) + { + newTarget.Format("eid:%u", nearobj->GetEID().Unbox()); + break; + } + else + continue; + } + case 3: // Target NPCs + { + if (nearobj->GetNPCPtr()) + { + newTarget.Format("pid:%u", nearobj->GetPID().Unbox()); + break; + } + else + continue; + } + case 4: // Target everything + { + newTarget.Format("eid:%u", nearobj->GetEID().Unbox()); + break; + } + } + + // Run this once for every target in range (each one will be verified and logged seperately) + result.Push(newTarget); + } + if (result.IsEmpty()) + { + psserver->SendSystemError(client->GetClientNum(), + "Nothing of specified type in range."); + } + return result; +} + +gemObject* MessageManager::FindObjectByString(const csString& str, gemActor * me) const +{ + gemObject* found = NULL; + GEMSupervisor *gem = GEMSupervisor::GetSingletonPtr(); + if (!gem) + { + return NULL; + } + + if ( str.StartsWith("pid:",true) ) // Find by player ID + { + csString pid_str = str.Slice(4); + PID pid = PID(strtoul(pid_str.GetDataSafe(), NULL, 10)); + if (pid.IsValid()) + found = gem->FindPlayerEntity(pid); + } + else if ( str.StartsWith("eid:",true) ) // Find by entity ID + { + csString eid_str = str.Slice(4); + EID eid = EID(strtoul(eid_str.GetDataSafe(), NULL, 10)); + if (eid.IsValid()) + found = gem->FindObject(eid); + } + else if ( str.StartsWith("itemid:",true) ) // Find by item UID + { + csString itemid_str = str.Slice(7); + uint32 itemID = strtoul(itemid_str.GetDataSafe(), NULL, 10); + if (itemID != 0) + found = gem->FindItemEntity(itemID); + } + else if ( me != NULL && str.CompareNoCase("me") ) // Return me + { + found = me; + } + else // Try finding an entity by name + { + found = gem->FindObject(str); + } + + return found; +} Modified: trunk/src/server/msgmanager.h =================================================================== --- trunk/src/server/msgmanager.h 2009-02-21 08:58:06 UTC (rev 3076) +++ trunk/src/server/msgmanager.h 2009-02-21 09:29:44 UTC (rev 3077) @@ -44,6 +44,8 @@ #define REQUIRE_TARGETNPC 0x20 class Client; +class gemObject; +class gemActor; class MsgEntry; class MessageManager : public iNetSubscriber @@ -55,6 +57,23 @@ /** Finds Client* of character with given name. */ Client * FindPlayerClient(const char *name); + + /** @brief Decodes an area: expression + * + * @param client The client of the caller + * @param target The area: expression + */ + static csArray<csString> DecodeCommandArea(Client *client, csString target); + + /** @brief Find the object we are referring to in str + * + * This str can have different formats, depending on the object + * we are trying to get. + * + * @param str the field containing the reference to the object + * @param me the client's actor who is sending the command + */ + gemObject* FindObjectByString(const csString& str, gemActor * me) const; }; #endif Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2009-02-21 08:58:06 UTC (rev 3076) +++ trunk/src/server/psserver.cpp 2009-02-21 09:29:44 UTC (rev 3077) @@ -50,43 +50,43 @@ //============================================================================= // Application Includes //============================================================================= -#include "gem.h" -#include "questionmanager.h" +#include "actionmanager.h" +#include "adminmanager.h" #include "advicemanager.h" -#include "actionmanager.h" -#include "entitymanager.h" -#include "psserver.h" +#include "authentserver.h" +#include "bankmanager.h" +#include "cachemanager.h" #include "chatmanager.h" -#include "netmanager.h" #include "client.h" -#include "authentserver.h" +#include "combatmanager.h" +#include "commandmanager.h" +#include "creationmanager.h" +#include "economymanager.h" +#include "entitymanager.h" +#include "exchangemanager.h" +#include "gem.h" +#include "globals.h" +#include "gmeventmanager.h" +#include "groupmanager.h" #include "guildmanager.h" -#include "groupmanager.h" +#include "introductionmanager.h" +#include "marriagemanager.h" +#include "minigamemanager.h" +#include "netmanager.h" +#include "npcmanager.h" #include "playergroup.h" -#include "usermanager.h" -#include "tutorialmanager.h" +#include "progressionmanager.h" +#include "psserver.h" #include "psserverchar.h" +#include "questionmanager.h" +#include "questmanager.h" +#include "serverstatus.h" #include "spawnmanager.h" -#include "adminmanager.h" -#include "commandmanager.h" -#include "exchangemanager.h" -#include "marriagemanager.h" -#include "combatmanager.h" #include "spellmanager.h" +#include "tutorialmanager.h" +#include "usermanager.h" #include "weathermanager.h" -#include "npcmanager.h" -#include "serverstatus.h" -#include "progressionmanager.h" -#include "cachemanager.h" -#include "creationmanager.h" -#include "questmanager.h" -#include "economymanager.h" #include "workmanager.h" -#include "minigamemanager.h" -#include "globals.h" -#include "gmeventmanager.h" -#include "bankmanager.h" -#include "introductionmanager.h" // Remember to bump this in server_options.sql and add to upgrade_schema.sql! #define DATABASE_VERSION_STR "1213" Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-21 08:58:06 UTC (rev 3076) +++ trunk/src/server/usermanager.cpp 2009-02-21 09:29:44 UTC (rev 3077) @@ -38,9 +38,9 @@ #include "util/serverconsole.h" #include "util/pserror.h" #include "util/psconst.h" -#include "util/strutil.h" #include "util/log.h" #include "util/eventmanager.h" +#include "util/strutil.h" #include "engine/psworld.h" @@ -55,34 +55,33 @@ //============================================================================= // Local Includes //============================================================================= -#include "usermanager.h" +#include "actionmanager.h" +#include "adminmanager.h" +#include "advicemanager.h" +#include "bankmanager.h" +#include "cachemanager.h" +#include "chatmanager.h" #include "client.h" #include "clients.h" +#include "combatmanager.h" +#include "commandmanager.h" +#include "entitymanager.h" #include "events.h" #include "gem.h" -#include "netmanager.h" -#include "entitymanager.h" -#include "marriagemanager.h" -#include "combatmanager.h" +#include "globals.h" +#include "gmeventmanager.h" #include "invitemanager.h" -#include "adminmanager.h" -#include "commandmanager.h" -#include "psserver.h" -#include "psserverchar.h" -#include "cachemanager.h" +#include "marriagemanager.h" +#include "netmanager.h" +#include "netmanager.h" #include "playergroup.h" #include "progressionmanager.h" -#include "netmanager.h" -#include "advicemanager.h" -#include "actionmanager.h" -#include "chatmanager.h" -#include "gmeventmanager.h" -#include "bankmanager.h" -#include "globals.h" +#include "psserver.h" +#include "psserverchar.h" +#include "usermanager.h" #define RANGE_TO_CHALLENGE 50 -//TODO: Implement or reuse adminmanager standard targetting also here class psUserStatRegeneration : public psGameEvent { @@ -247,158 +246,6 @@ } -csArray<csString> UserManager::DecodeCommandArea(Client *client, csString target) -{ - csArray<csString> result; - - if (!CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), "command area")) - { - psserver->SendSystemError(client->GetClientNum(), - "You are not allowed to use area", target.GetData()); - return result; - } - - csArray<csString> splitTarget = psSplit(target, ':'); - size_t splitSize = splitTarget.GetSize(); - - if (splitSize < 3 || splitSize > 4) - { - psserver->SendSystemError(client->GetClientNum(), - "Try /$CMD area:item:range[:name]"); - return result; - } - - csString itemName = splitTarget[1]; - csString* nameFilter = splitSize > 3 ? &splitTarget[3] : 0; - - const int range = atoi(splitTarget[2].GetData()); - if (range <= 0) - { - psserver->SendSystemError(client->GetClientNum(), - "You must specify a positive integer for the area: range."); - return result; - } - - bool allNames = true; - if (nameFilter && (*nameFilter!="all")) - allNames = false; - - int mode; - if (itemName == "players") - mode = 0; - else if (itemName == "actors") - mode = 1; - else if (itemName == "items") - mode = 2; - else if (itemName == "npcs") - mode = 3; - else if (itemName == "entities") - mode = 4; - else - { - psserver->SendSystemError(client->GetClientNum(), - "item must be players|actors|items|npcs|entities"); - return result; - } - - gemActor* self = client->GetActor(); - if (!self) - { - psserver->SendSystemError(client->GetClientNum(), "You do not exist..."); - return result; - } - - csVector3 pos; - iSector* sector; - self->GetPosition(pos, sector); - - GEMSupervisor* gem = GEMSupervisor::GetSingletonPtr(); - if (!gem) - return result; - - csArray<gemObject*> nearlist = gem->FindNearbyEntities(sector, pos, - range); - size_t count = nearlist.GetSize(); - csArray<csString *> results; - - for (size_t i=0; i<count; i++) - { - gemObject *nearobj = nearlist[i]; - if (!nearobj) - continue; - - if (nearobj->GetInstance() != self->GetInstance()) - continue; - - if (!allNames) - { - csString nearobjName = nearobj->GetName(); - if (!nearobjName.StartsWith(*nameFilter->GetData(), true)) - continue; - } - - csString newTarget; - - switch (mode) - { - case 0: // Target players - { - if (nearobj->GetClientID()) - { - newTarget.Format("pid:%d", nearobj->GetPID().Unbox()); - break; - } - else - continue; - } - case 1: // Target actors - { - if (nearobj->GetPID().IsValid()) - { - newTarget.Format("pid:%d", nearobj->GetPID().Unbox()); - break; - } - else - continue; - } - case 2: // Target items - { - if (nearobj->GetItem()) - { - newTarget.Format("eid:%u", nearobj->GetEID().Unbox()); - break; - } - else - continue; - } - case 3: // Target NPCs - { - if (nearobj->GetNPCPtr()) - { - newTarget.Format("pid:%u", nearobj->GetPID().Unbox()); - break; - } - else - continue; - } - case 4: // Target everything - { - newTarget.Format("eid:%u", nearobj->GetEID().Unbox()); - break; - } - } - - // Run this once for every target in range (each one will be verified and logged seperately) - result.Push(newTarget); - } - if (result.IsEmpty()) - { - psserver->SendSystemError(client->GetClientNum(), - "Nothing of specified type in range."); - } - return result; -} - bool UserManager::CheckForEmote(csString command, bool execute, Client *client) { EMOTE *emotePtr = emoteHash.Get(command, NULL); @@ -1005,7 +852,7 @@ while (it.HasNext()) { csString pid = it.Next(); - gemObject *object = psserver->GetAdminManager()->FindObjectByString(pid,client->GetActor()); + gemObject *object = FindObjectByString(pid,client->GetActor()); Client* thisclient = object->GetClient(); if (thisclient) { @@ -1377,9 +1224,9 @@ } else { - Client* c = psserver->GetAdminManager()->FindPlayerClient(msg.player); + Client* c = FindPlayerClient(msg.player); if (c) object = (gemObject*)c->GetActor(); - if (!object) object = psserver->GetAdminManager()->FindObjectByString(msg.player,client->GetActor()); + if (!object) object = FindObjectByString(msg.player,client->GetActor()); } } else @@ -2121,14 +1968,14 @@ csArray<csString>::Iterator it(filters.GetIterator()); while (it.HasNext()) { - rotationTarget = psserver->GetAdminManager()->FindObjectByString(msg.target, client->GetActor()); + rotationTarget = FindObjectByString(msg.target, client->GetActor()); Rotate(client, rotationTarget, msg.action); } return; } else if(msg.target.StartsWith("eid:")) { - rotationTarget = psserver->GetAdminManager()->FindObjectByString(msg.target, client->GetActor()); + rotationTarget = FindObjectByString(msg.target, client->GetActor()); Rotate(client, rotationTarget, msg.action); } else Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-02-21 08:58:06 UTC (rev 3076) +++ trunk/src/server/usermanager.h 2009-02-21 09:29:44 UTC (rev 3077) @@ -144,13 +144,6 @@ /// Load emotes from xml. bool LoadEmotes(const char *xmlfile, iVFS *vfs); - /** @brief Decodes an area: expression - * - * @param client The client of the caller - * @param target The area: expression - * */ - static csArray<csString> DecodeCommandArea(Client *client, csString target); - protected: /** @brief Send a list of the players that are online to a client. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-21 17:45:42
|
Revision: 3081 http://planeshift.svn.sourceforge.net/planeshift/?rev=3081&view=rev Author: weltall2 Date: 2009-02-21 17:45:34 +0000 (Sat, 21 Feb 2009) Log Message: ----------- Fix for PS#1714 - ability for gms to view all petitions even if claimed. Allowed all gm to see even in progress petitions, allowed only gm5+ and devs to unclaim claimed petitions - part1 Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-02-21 11:25:32 UTC (rev 3080) +++ trunk/src/server/adminmanager.cpp 2009-02-21 17:45:34 UTC (rev 3081) @@ -4805,7 +4805,7 @@ // Try and grab the result set from the database: // Show the player all petitions. - iResultSet *rs = GetPetitions(PETITION_GM, client->GetPID(), GM_DEVELOPER ); + iResultSet *rs = GetPetitions(PETITION_GM, client->GetPID()); if (rs) { // Send list to GM: @@ -4820,6 +4820,7 @@ info.escalation = atoi((*rs)[i][3]); info.created = csString((*rs)[i][4]).Slice(0, 16); info.player = (*rs)[i][5]; + info.assignedgm = (*rs)[i][6]; info.online = (clients->Find(info.player) ? true : false); // Append to the message: @@ -4874,7 +4875,7 @@ { // Deassigning petition: type = PETITION_DEASSIGN; - result = DeassignPetition(client->GetPID(), msg.id); + result = DeassignPetition(client->GetPID(), client->GetSecurityLevel(), msg.id); } else if (msg.request == "escalate") { @@ -4893,13 +4894,13 @@ // Check result of operation if (!result) { - psPetitionMessage error(me->clientnum, NULL, db->GetLastError(), false, type, true); + psPetitionMessage error(me->clientnum, NULL, lasterror, false, type, true); error.SendMessage(); return; } // Try and grab the result set from the database: - iResultSet *rs = GetPetitions(PETITION_GM, client->GetPID(), GM_DEVELOPER); + iResultSet *rs = GetPetitions(PETITION_GM, client->GetPID()); if (rs) { // Send list to GM: @@ -4914,6 +4915,7 @@ info.escalation = atoi((*rs)[i][3]); info.created = csString((*rs)[i][4]).Slice(0, 16); info.player = (*rs)[i][5]; + info.assignedgm = (*rs)[i][6]; info.online = (clients->Find(info.player) ? true : false); // Append to the message: @@ -4988,10 +4990,9 @@ "WHERE id=%d AND escalation_level<=%d AND escalation_level<%d " "AND (assigned_gm=%d OR status='Open')", petitionID, gmLevel, GM_DEVELOPER-20, gmID.Unbox()); // If this failed if means that there is a serious error - if (result == -1) + if (!result || result <= -1) { - lasterror.Format("Couldn't escalate petition #%d.", - petitionID); + lasterror.Format("Couldn't escalate petition #%d.", petitionID); return false; } return (result != -1); @@ -5004,10 +5005,9 @@ "escalation_level=(escalation_level-1)" "WHERE id=%d AND escalation_level<=%d AND (assigned_gm=%u OR status='Open' AND escalation_level != 0)", petitionID, gmLevel, gmID.Unbox()); // If this failed if means that there is a serious error - if (result == -1) + if (!result || result <= -1) { - lasterror.Format("Couldn't descalate petition #%d.", - petitionID); + lasterror.Format("Couldn't descalate petition #%d.", petitionID); return false; } return (result != -1); @@ -5028,18 +5028,17 @@ return (result != -1); } -iResultSet *AdminManager::GetPetitions(PID playerID, PID gmID, int gmLevel) +iResultSet *AdminManager::GetPetitions(PID playerID, PID gmID) { iResultSet *rs; // Check player ID, if ID is PETITION_GM (0xFFFFFFFF), get a complete list for the GM: if (playerID == PETITION_GM) { - rs = db->Select("SELECT pet.id,pet.petition,pet.status,pet.escalation_level,pet.created_date,pl.name FROM petitions pet, " - "characters pl WHERE (pet.player!=%d AND ((pet.status=\"Open\" AND pet.escalation_level<=%d) " - "OR (pet.assigned_gm=%d AND pet.status=\"In Progress\"))) " + rs = db->Select("SELECT pet.id,pet.petition,pet.status,pet.escalation_level,pet.created_date,pl.name, gm.name as gmname FROM petitions pet " + "LEFT JOIN characters gm ON pet.assigned_gm=gm.id, characters pl WHERE pet.player!=%d AND (pet.status=\"Open\" OR pet.status=\"In Progress\") " "AND pet.player=pl.id " - "ORDER BY pet.status ASC,pet.escalation_level DESC,pet.created_date ASC", gmID.Unbox(), gmLevel, gmID.Unbox()); + "ORDER BY pet.status ASC,pet.escalation_level DESC,pet.created_date ASC", gmID.Unbox()); } else { @@ -5064,7 +5063,7 @@ // If player ID is PETITION_GM, just cancel the petition (a GM is requesting the change) if (playerID == PETITION_GM) { - int result = db->CommandPump("UPDATE petitions SET status='Cancelled' WHERE id=%d", petitionID); + int result = db->CommandPump("UPDATE petitions SET status='Cancelled' WHERE id=%d AND (assigned_gm=-1 OR assigned_gm=%u)", petitionID,playerID.Unbox()); return (result != -1); } @@ -5123,22 +5122,30 @@ "WHERE id=%d AND assigned_gm=%u", escape.GetData(), petitionID, gmID.Unbox()); // If this failed if means that there is a serious error, or the GM was not assigned - if (result == -1) + if (!result || result <= -1) { lasterror.Format("Couldn't close petition #%d. You must be assigned to the petition before you close it.", petitionID); return false; } - return (result != -1); + return true; } -bool AdminManager::DeassignPetition(PID gmID, int petitionID) +bool AdminManager::DeassignPetition(PID gmID, int gmLevel, int petitionID) { - int result = db->CommandPump("UPDATE petitions SET assigned_gm=-1,status=\"Open\" WHERE id=%d AND assigned_gm=%u", petitionID, gmID.Unbox()); + int result; + if(gmLevel > GM_LEVEL_5) //allows to deassing without checks only to a gm lead or a developer + { + result = db->CommandPump("UPDATE petitions SET assigned_gm=-1,status=\"Open\" WHERE id=%d", petitionID); + } + else + { + result = db->CommandPump("UPDATE petitions SET assigned_gm=-1,status=\"Open\" WHERE id=%d AND assigned_gm=%u", petitionID, gmID.Unbox()); + } // If this failed if means that there is a serious error, or another GM was already assigned - if (result == -1) + if (!result || result <= -1) { lasterror.Format("Couldn't deassign you to petition #%d. Another GM is assigned to that petition.", petitionID); @@ -5153,7 +5160,7 @@ int result = db->CommandPump("UPDATE petitions SET assigned_gm=%d,status=\"In Progress\" WHERE id=%d AND assigned_gm=-1", gmID.Unbox(), petitionID); // If this failed if means that there is a serious error, or another GM was already assigned - if (result == -1) + if (!result || result <= -1) { lasterror.Format("Couldn't assign you to petition #%d. Another GM is already assigned to that petition.", petitionID); Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2009-02-21 11:25:32 UTC (rev 3080) +++ trunk/src/server/adminmanager.h 2009-02-21 17:45:34 UTC (rev 3081) @@ -439,10 +439,9 @@ * @param playerID: Is the ID of the player who is requesting the list. * if the ID is -1, that means a GM is requesting a complete listing * @param gmID: Is the id of the GM who is requesting petitions, ignored if playerID != -1 - * @param gmLevel: Is the security level of the GM who is requesting petitions, ignored if playerID != -1 * @return Returns a iResultSet which contains the set of all matching petitions for the user */ - iResultSet *GetPetitions(PID playerID, PID gmID = PETITION_GM, int gmLevel = -1); + iResultSet *GetPetitions(PID playerID, PID gmID = PETITION_GM); /** @brief Cancels the specified petition if the player was its creator * @param playerID: Is the ID of the player who is requesting the change. @@ -477,10 +476,11 @@ /** @brief Deassignes the specified GM to the specified petition * @param gmID: Is the ID of the GM who is requesting the deassignment. + * @param gmLevel: The security level of the gm * @param petitionID: The petition id * @return Returns either success or failure. */ - bool DeassignPetition(PID gmID, int petitionID); + bool DeassignPetition(PID gmID, int gmLevel, int petitionID); /** @brief Escalates the level of the specified petition. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-02-28 03:21:30
|
Revision: 3118 http://planeshift.svn.sourceforge.net/planeshift/?rev=3118&view=rev Author: kougaro Date: 2009-02-28 03:21:28 +0000 (Sat, 28 Feb 2009) Log Message: ----------- Changed some security check to use the psserver wrapper, plus some comments fixed Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/gem.cpp trunk/src/server/usermanager.h trunk/src/server/workmanager.cpp trunk/src/server/workmanager.h Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-02-28 00:33:48 UTC (rev 3117) +++ trunk/src/server/adminmanager.cpp 2009-02-28 03:21:28 UTC (rev 3118) @@ -3784,12 +3784,8 @@ { // This is a powerful feature; not everyone is allowed to use all of it csString response; - bool allowedToMoveOthers = CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), "move others", response); - if ( client->GetActor() != (gemActor*)target && !allowedToMoveOthers ) - { - psserver->SendSystemError(client->GetClientNum(),response); + if (client->GetActor() != (gemActor*)target && psserver->CheckAccess(client, "move others")) return false; - } if ( dynamic_cast<gemItem*>(target) ) // Item? { @@ -5418,8 +5414,7 @@ } bool nameUnique = CharCreationManager::IsUnique(data.newName); - bool allowedToClonename = CacheManager::GetSingleton().GetCommandManager()->Validate( - client->GetSecurityLevel(), "changenameall"); + bool allowedToClonename = psserver->CheckAccess(client, "changenameall", false); if (!allowedToClonename) data.uniqueFirstName=true; @@ -7546,8 +7541,8 @@ // "/quest" gives access to list and change your own quests. // "quest list others" gives access to list other players' quests. // "quest change others" gives access to complete/discard other players' quests. - const bool listOthers = CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), "quest list others"); - const bool changeOthers = CacheManager::GetSingleton().GetCommandManager()->Validate(client->GetSecurityLevel(), "quest change others"); + const bool listOthers = psserver->CheckAccess(client, "quest list others", false); + const bool changeOthers = psserver->CheckAccess(client, "quest change others", false); if (data.subCmd == "complete") { Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-02-28 00:33:48 UTC (rev 3117) +++ trunk/src/server/gem.cpp 2009-02-28 03:21:28 UTC (rev 3118) @@ -1167,7 +1167,7 @@ // Check if the item is in range if (!(RangeTo(actor) < RANGE_TO_SELECT)) { - if (!CacheManager::GetSingleton().GetCommandManager()->Validate(actor->GetClient()->GetSecurityLevel(), "pickup override")) + if (!psserver->CheckAccess(actor->GetClient(), "pickup override", false)) { psserver->SendSystemInfo(clientnum,"You're too far away to pick up %s.", GetName()); return; @@ -1177,7 +1177,7 @@ psItem* item = GetItem(); // Check if item is guarded - if (!CacheManager::GetSingleton().GetCommandManager()->Validate(actor->GetClient()->GetSecurityLevel(), "pickup override")) + if (!psserver->CheckAccess(actor->GetClient(), "pickup override", false)) { PID guardCharacterID = item->GetGuardingCharacterID(); gemActor* guardActor = GEMSupervisor::GetSingleton().FindPlayerEntity(guardCharacterID); @@ -2248,6 +2248,7 @@ { psserver->combatmanager->StopAttack(attacker); } + MulticastDRUpdate(); } // Update group stats and it's own Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-02-28 00:33:48 UTC (rev 3117) +++ trunk/src/server/usermanager.h 2009-02-28 03:21:28 UTC (rev 3118) @@ -204,13 +204,12 @@ void ReportPosition(psUserCmdMessage& msg,Client *client); - /** @brief Moves a player back to the default start point for their race. + /* @brief Moves a player back to the default start point for their race. * * @param msg The incomming user command message. * @param client The client that request the command.. - * @param clientnum The client id number of the requesting client. - */ - void MoveToSpawnPos(psUserCmdMessage& msg,Client *client,int clientnum); + * + void MoveToSpawnPos(psUserCmdMessage& msg,Client *client,int clientnum); */ /** @brief Moves a player back to his last valid position. * @@ -300,21 +299,21 @@ /** @brief Give a tip from the database to the client * - * @param the user command message + * @param msg The incomming user command message * @param the client who sit */ void GiveTip(psUserCmdMessage& msg, Client *client); /** @brief Sends the MOTD to the client * - * @param the user command message + * @param msg The incomming user command message * @param the client who sit */ void GiveMOTD(psUserCmdMessage& msg, Client *client); /** @brief Handles a player command to show the popup dialog menu of the currently targeted NPC, if any. * - * @param the user command message + * @param msg The incomming user command message * @param client The client that issued the command. */ void ShowNpcMenu(psUserCmdMessage& msg, Client *client); @@ -322,14 +321,14 @@ /** * @brief Handles a player command to sit down * - * @param the user command message + * @param msg The incomming user command message * @param the client who sit */ void HandleSit(psUserCmdMessage& msg, Client *client); /** @brief Handles the /admin command * - * @param the user command message + * @param msg The incomming user command message * @param the client who sit */ void HandleAdminCommand(psUserCmdMessage& msg, Client *client); @@ -337,14 +336,14 @@ /** * @brief Handles a player command to stand up * - * @param the user command message + * @param msg The incomming user command message * @param the client who stand */ void HandleStand(psUserCmdMessage& msg, Client *client); /** @brief Handles a player command to die * - * @param the user command message + * @param msg The incomming user command message * @param the client who stand */ void HandleDie(psUserCmdMessage& msg, Client *client); @@ -358,6 +357,7 @@ /** @brief Handles a player command to start banking with the targeted entity. * + * @param msg The incomming user command message * @param client The client that issued the command. */ void HandleBanking(psUserCmdMessage& msg, Client *client); @@ -401,6 +401,7 @@ void HandleUse(Client *client, bool on); /** @brief Handles an /Assist command comming from the client. + * * @param msg The incomming command message * @param client A pointer to the client struct. */ Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-02-28 00:33:48 UTC (rev 3117) +++ trunk/src/server/workmanager.cpp 2009-02-28 03:21:28 UTC (rev 3118) @@ -852,10 +852,9 @@ } - psCharacter *worke = workEvent->worker->GetCharacterData(); if (roll < total) // successful! { - unsigned int ppGained = worke->AddExperiencePoints(25); + unsigned int ppGained = workerchar->AddExperiencePoints(25); if (workEvent->client) { @@ -882,7 +881,7 @@ if (!worke->Inventory().AddOrDrop(item)) { Debug5(LOG_ANY, worke->GetPID().Unbox(), "HandleProductionEvent() could not give item of stat %u (%s) to character %s[%s])", - newitem->GetUID(), newitem->GetName(), worke->GetCharName(), ShowID(worke->GetPID())); + newitem->GetUID(), newitem->GetName(), workerchar->GetCharName(), ShowID(worke->GetPID())); if (workEvent->client) { @@ -936,7 +935,7 @@ } else { - unsigned int ppGained = worke->AddExperiencePoints(2); + unsigned int ppGained = workerchar->AddExperiencePoints(2); if (workEvent->client) { Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2009-02-28 00:33:48 UTC (rev 3117) +++ trunk/src/server/workmanager.h 2009-02-28 03:21:28 UTC (rev 3118) @@ -242,14 +242,14 @@ */ bool LoadLocalVars(Client* client, gemObject *target=NULL); -/* /** Send clear client view message to remove items from autocontainers. + /* Send clear client view message to remove items from autocontainers. * * @param slotID The slot number to clear. * @param containerID The container ID that has item that needs to be cleared. * * @return False if there is a problem sending message. - */ - // bool SendClearUpdate( unsigned int slotID, unsigned int containerID ); + * + bool SendClearUpdate( unsigned int slotID, unsigned int containerID ); */ /// Handle production events from super clients This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-03-01 09:52:45
|
Revision: 3124 http://planeshift.svn.sourceforge.net/planeshift/?rev=3124&view=rev Author: weltall2 Date: 2009-03-01 09:52:44 +0000 (Sun, 01 Mar 2009) Log Message: ----------- some little changes to some recently implemented prerequisite operators and additions to the quest syntax Modified Paths: -------------- trunk/src/server/bulkobjects/psquest.cpp trunk/src/server/bulkobjects/psquestprereqops.cpp trunk/src/server/bulkobjects/psquestprereqops.h trunk/src/server/questmanager.cpp Modified: trunk/src/server/bulkobjects/psquest.cpp =================================================================== --- trunk/src/server/bulkobjects/psquest.cpp 2009-02-28 20:35:03 UTC (rev 3123) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-03-01 09:52:44 UTC (rev 3124) @@ -351,6 +351,19 @@ prerequisite.AttachNew(new psQuestPrereqOpFaction(faction,value,max!=0)); } + else if ( strcmp( topNode->GetValue(), "item" ) == 0 ) + { + csString name = topNode->GetAttributeValue("name"); + if (name.IsEmpty()) + { + Error1("No name given for item prerequisite operation"); + return false; + } + + bool includeInventory = topNode->GetAttributeValueAsBool("position", false); + + prerequisite.AttachNew(new psQuestPrereqOpItem(name,includeInventory)); + } else if ( strcmp( topNode->GetValue(), "activemagic" ) == 0 ) { csString name = topNode->GetAttributeValue("name"); @@ -441,16 +454,8 @@ int max = topNode->GetAttributeValueAsInt("max"); - csString type = topNode->GetAttributeValue("type"); + prerequisite.AttachNew(new psQuestPrereqOpTimeOnline(min,max)); - if (type.IsEmpty()) - { - Error1("No type given for onlinetime prerequisite operation"); - return false; - } - - prerequisite.AttachNew(new psQuestPrereqOpTimeOnline(min,max,type)); - } else if ( strcmp( topNode->GetValue(), "not" ) == 0 ) { Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-28 20:35:03 UTC (rev 3123) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-03-01 09:52:44 UTC (rev 3124) @@ -266,7 +266,7 @@ bool psQuestPrereqOpQuestAssigned::Check(psCharacter * character) { - return character->CheckQuestAssigned(quest); + return character->CheckQuestAssigned(quest); } csString psQuestPrereqOpQuestAssigned::GetScriptOp() @@ -354,6 +354,34 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpItem::Check(psCharacter * character) +{ + + if (character->GetActor()) + { + return true; + } + return false; +} + +csString psQuestPrereqOpItem::GetScriptOp() +{ + csString script; + + script.Format("<item inventory=\"%s\" name=\"%s\"/>", includeInventory? "true" : "false", itemName.GetData()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpItem::Copy() +{ + csRef<psQuestPrereqOpItem> copy; + copy.AttachNew(new psQuestPrereqOpItem(itemName,includeInventory)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpActiveMagic::Check(psCharacter * character) { if (character->GetActor()) @@ -525,20 +553,28 @@ bool psQuestPrereqOpTimeOnline::Check(psCharacter * character) { - if(type == "min") - return (character->GetTotalOnlineTime() > minTime); - if(type == "max") - return (character->GetTotalOnlineTime() < maxTime); - if(type == "both") - return (character->GetTotalOnlineTime() > minTime && character->GetTotalOnlineTime() < maxTime); - return false; + if(maxTime) + { + // If value is max, make sure we're below it + return (character->GetTotalOnlineTime() <= maxTime); + } + return (character->GetTotalOnlineTime() >= minTime); } csString psQuestPrereqOpTimeOnline::GetScriptOp() { csString script; - script.Format("<onlinetime min=\"%d\" max=\"%d\" type=\"%s\"/>", minTime, maxTime, type.GetDataSafe()); + script.AppendFmt("<onlinetime "); + if(minTime) + { + script.AppendFmt(" min=\"%d\"", minTime); + } + if(maxTime) + { + script.AppendFmt(" max=\"%d\"", maxTime); + } + script.Append(" />"); return script; } @@ -546,7 +582,7 @@ csPtr<psQuestPrereqOp> psQuestPrereqOpTimeOnline::Copy() { csRef<psQuestPrereqOpTimeOnline> copy; - copy.AttachNew(new psQuestPrereqOpTimeOnline(minTime, maxTime, type)); + copy.AttachNew(new psQuestPrereqOpTimeOnline(minTime, maxTime)); return csPtr<psQuestPrereqOp>(copy); } @@ -554,7 +590,6 @@ bool psQuestPrereqOpAdvisorPoints::Check(psCharacter * character) { - //Requirements are always valid for quest testers if(character->GetActor()) { if(character->GetActor()->questtester) Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-28 20:35:03 UTC (rev 3123) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-03-01 09:52:44 UTC (rev 3124) @@ -602,6 +602,60 @@ }; /** + * Inventory prerequisite operator. + * + * The given item must be equiped or just in inventory (includes the first) + * for this prerequisite to be true. + */ +class psQuestPrereqOpItem : public psQuestPrereqOp +{ + protected: + csString itemName; + bool includeInventory; + + public: + + /** + * Construct an inventory operator + * + * @param includeInventory if true it will search either equipment and inventory + * else only inventory. + * @param name The name of the base item we are searching for. + */ + psQuestPrereqOpItem(const char *itemName, bool includeInventory):itemName(itemName),includeInventory(includeInventory){}; + + virtual ~psQuestPrereqOpItem() {} + + /** + * Check if the specified item is in the player inventory/equipment + * + * @param character The character that are checking for a prerequisite + * @return True if the item was found. + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <item inventory="true/false" name="baseitemname"/> + * + * @return XML string for the prerequisite operator. + */ + virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual csPtr<psQuestPrereqOp> Copy(); +}; + +/** * Active magic prerequisite operator * * The actor must have a certain active magic (buff or debuff). @@ -960,7 +1014,6 @@ { protected: unsigned int minTime, maxTime; - csString type; public: @@ -969,9 +1022,8 @@ * * @param minTime Minimal time online * @param maxTime Maximal time online - * @param type Type of the check */ - psQuestPrereqOpTimeOnline(int minTime, int maxTime, csString type):minTime(minTime),maxTime(maxTime),type(type){}; + psQuestPrereqOpTimeOnline(int minTime, int maxTime):minTime(minTime),maxTime(maxTime){}; virtual ~psQuestPrereqOpTimeOnline() {} @@ -987,7 +1039,7 @@ * Convert the prerequisite operator to a xml string * * Convert the operator into the xml string: - * <onlinetime min="-min" max="-max" type="min/max/both"/> + * <onlinetime min="-min" max="-max" /> * * @return XML string for the prerequisite operator. */ @@ -1017,7 +1069,7 @@ public: /** - * Construct an active magic operator + * Construct a time of the day operator * * @param minTime Minimal time of day * @param maxTime Maximal time of day Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-02-28 20:35:03 UTC (rev 3123) +++ trunk/src/server/questmanager.cpp 2009-03-01 09:52:44 UTC (rev 3124) @@ -444,14 +444,6 @@ } op.Append("/>"); } - else if (!strncasecmp(block,"Introduce",9)) - { - csString charname = block.Slice(10).Trim(); - if (!charname.IsEmpty()) - op.Format("<introduce name=\"%s\"/>", charname.GetData() ); - else - op.Format("<introduce/>"); - } else if (!strncasecmp(block,"DoAdminCmd",10)) { csString command = block.Slice(11).Trim(); @@ -475,6 +467,82 @@ response_requireop.AppendFmt("<not><timeofday min=\"%s\" max=\"%s\" /></not>", timeinfo[0].GetData(), timeinfo[1].GetData() ); } } + else if (!strncasecmp(block,"Require guild",13)) //NOTE: the both argument is implictly defined + { + csString type = block.Slice(14,block.Length()).Trim(); + response_requireop.AppendFmt("<guild type=\"%s\" />", type.Length() ? type.GetData() : "both" ); + } + else if (!strncasecmp(block,"Require not guild",17)) //NOTE: the both argument is implictly defined + { + csString type = block.Slice(18,block.Length()).Trim(); + response_requireop.AppendFmt("<not><guild type=\"%s\" /></not>", type.Length() ? type.GetData() : "both" ); + } + else if (!strncasecmp(block,"Require active magic",20)) + { + csString magicname = block.Slice(21,block.Length()).Trim(); + response_requireop.AppendFmt("<activemagic name=\"%s\" />", magicname.GetData() ); + } + else if (!strncasecmp(block,"Require not active magic",24)) + { + csString magicname = block.Slice(25,block.Length()).Trim(); + response_requireop.AppendFmt("<not><activemagic name=\"%s\" /></not>", magicname.GetData() ); + } + else if (!strncasecmp(block,"Require known spell",19)) + { + csString magicname = block.Slice(20,block.Length()).Trim(); + response_requireop.AppendFmt("<knownspell name=\"%s\" />", magicname.GetData() ); + } + else if (!strncasecmp(block,"Require not known spell",23)) + { + csString magicname = block.Slice(24,block.Length()).Trim(); + response_requireop.AppendFmt("<not><knownspell name=\"%s\" /></not>", magicname.GetData() ); + } + else if (!strncasecmp(block,"Require race",12)) + { + csString racename = block.Slice(13,block.Length()).Trim(); + response_requireop.AppendFmt("<race name=\"%s\" />", racename.GetData() ); + } + else if (!strncasecmp(block,"Require not race",16)) + { + csString racename = block.Slice(17,block.Length()).Trim(); + response_requireop.AppendFmt("<not><race name=\"%s\" /></not>", racename.GetData() ); + } + else if (!strncasecmp(block,"Require gender",14)) + { + csString gender = block.Slice(15,block.Length()).Trim(); + + if(gender == "male") gender = "M"; + else if(gender == "female") gender = "F"; + else if(gender == "neutral") gender = "N"; + + response_requireop.AppendFmt("<gender type=\"%s\" />", gender.GetData() ); + } + else if (!strncasecmp(block,"Require not gender",18)) + { + csString gender = block.Slice(19,block.Length()).Trim(); + + if(gender == "male") gender = "M"; + else if(gender == "female") gender = "F"; + else if(gender == "neutral") gender = "N"; + + response_requireop.AppendFmt("<not><gender type=\"%s\" /></not>", gender.GetData() ); + } + else if (!strncasecmp(block,"Require married",15)) + { + response_requireop.AppendFmt("<married />"); + } + else if (!strncasecmp(block,"Require not married",19)) + { + response_requireop.AppendFmt("<not><married /></not>"); + } + else if (!strncasecmp(block,"Introduce",9)) + { + csString charname = block.Slice(10).Trim(); + if (!charname.IsEmpty()) + op.Format("<introduce name=\"%s\"/>", charname.GetData() ); + else + op.Format("<introduce/>"); + } else // unknown block { Error2("Unknown command '%s' !",block.GetData()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |