From: <mg...@us...> - 2008-07-28 20:40:41
|
Revision: 1956 http://planeshift.svn.sourceforge.net/planeshift/?rev=1956&view=rev Author: mgist Date: 2008-07-28 20:40:50 +0000 (Mon, 28 Jul 2008) Log Message: ----------- - Fix for the last part of FS#74, patch by Kaerli. => NETVERSION BUMP! Modified Paths: -------------- trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/server/client.cpp Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-07-28 20:20:42 UTC (rev 1955) +++ trunk/src/common/net/messages.cpp 2008-07-28 20:40:50 UTC (rev 1956) @@ -2048,7 +2048,7 @@ item.slot = message->GetUInt32(); item.stackcount = message->GetUInt32(); item.weight = message->GetFloat(); - item.size = message->GetFloat(); + item.size = message->GetUInt32(); item.iconImage = message->GetStr(); item.purifyStatus = message->GetUInt8(); items.Push(item); @@ -2100,7 +2100,7 @@ int slotID, int stackcount, float weight, - float size, + uint32 size, const char* icon, int purifyStatus ) { @@ -2149,7 +2149,7 @@ msgtext.AppendFmt("%d x '%s' ", items[x].stackcount, items[x].name.GetDataSafe()); #ifdef FULL_DEBUG_DUMP - msgtext.AppendFmt("(Container: %d Slot: %d Weight: %.2f Size: %.2f Icon: '%s' Purified: %d), ", + msgtext.AppendFmt("(Container: %d Slot: %d Weight: %.2f Size: %ud Icon: '%s' Purified: %d), ", items[x].container, items[x].slot, items[x].weight, Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-07-28 20:20:42 UTC (rev 1955) +++ trunk/src/common/net/messages.h 2008-07-28 20:40:50 UTC (rev 1956) @@ -43,7 +43,7 @@ // This holds the version number of the network code, remember to increase // this each time you do an update which breaks compatibility -#define PS_NETVERSION 0x008D +#define PS_NETVERSION 0x008E // Remember to bump the version in pscssetup.h, as well. // NPC Networking version is separate so we don't have to break compatibility @@ -1500,7 +1500,7 @@ int slot, int stackcount, float weight, - float size, + uint32 size, const char* icon, int purifyStatus ); @@ -1518,7 +1518,7 @@ csString name; int slot; float weight; - float size; + uint32 size; int stackcount; csString iconImage; int container; Modified: trunk/src/server/client.cpp =================================================================== --- trunk/src/server/client.cpp 2008-07-28 20:20:42 UTC (rev 1955) +++ trunk/src/server/client.cpp 2008-07-28 20:40:50 UTC (rev 1956) @@ -729,7 +729,7 @@ bool advisorBan = false; Result result(db->Select("SELECT advisor_ban FROM accounts WHERE id = %d", GetAccountID())); if (result.IsValid()) - advisorBan = result[0].GetUInt32("advisor_ban"); + advisorBan = result[0].GetUInt32("advisor_ban") != 0; return advisorBan; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-01 14:31:00
|
Revision: 1981 http://planeshift.svn.sourceforge.net/planeshift/?rev=1981&view=rev Author: heinchen Date: 2008-08-01 14:31:09 +0000 (Fri, 01 Aug 2008) Log Message: ----------- reenabling of ref counting Modified Paths: -------------- trunk/src/common/net/connection.cpp trunk/src/common/net/netbase.cpp trunk/src/common/net/netpacket.h trunk/src/server/netmanager.cpp Modified: trunk/src/common/net/connection.cpp =================================================================== --- trunk/src/common/net/connection.cpp 2008-08-01 12:54:26 UTC (rev 1980) +++ trunk/src/common/net/connection.cpp 2008-08-01 14:31:09 UTC (rev 1981) @@ -128,9 +128,6 @@ server = NULL; } - // Clear awaitingack queue - csHash<csRef<psNetPacketEntry>, PacketKey>::GlobalIterator it (awaitingack.GetIterator()); - // with proper refcounting this should kill all members of the hash awaitingack.Empty(); } Modified: trunk/src/common/net/netbase.cpp =================================================================== --- trunk/src/common/net/netbase.cpp 2008-08-01 12:54:26 UTC (rev 1980) +++ trunk/src/common/net/netbase.cpp 2008-08-01 14:31:09 UTC (rev 1981) @@ -237,7 +237,7 @@ } } - //Create new net packet entry and transfere overship of bufpacket to pkt. + //Create new net packet entry and transfer ownership of bufpacket to pkt. csRef<psNetPacketEntry> pkt; pkt.AttachNew(new psNetPacketEntry( bufpacket, connection ? connection->clientnum : 0, packetlen)); @@ -245,7 +245,6 @@ // ACK packets can get eaten by HandleAck if (HandleAck(pkt, connection, &addr)) { - // pkt should be unref'd here return true; } @@ -278,9 +277,7 @@ splitpacket = pkt->GetNextPacket(packetdata); if (splitpacket) BuildMessage(splitpacket, connection, &addr); - // if BuildMessage didn't store it, splitpacket should be unref'd here } while (packetdata); - // merged packet pkt should be unref'd return true; } @@ -348,7 +345,6 @@ Debug2(LOG_NET,0,"No packet in ack queue :%d\n", ack->packet->pktid); #endif } - // else ack should be unref'd here } else // if not found, it is probably a resent ACK which is redundant so do nothing { @@ -1152,7 +1148,7 @@ // We don't care how many times it's in the queue, there's a mistake if it's over 1. Let's fix it now. packets.Delete(PacketKey(client, id), pkt); - // pkt should be unref'd here + printf("%s:%d pkt has ref count %d\n", __FILE__, __LINE__, pkt->GetRefCount()); } /* If the search offset didnt finish at the end of the packet, we have gaps, not all pieces were deleted, * someone is trying to play games, and we should ignore the message, and Modified: trunk/src/common/net/netpacket.h =================================================================== --- trunk/src/common/net/netpacket.h 2008-08-01 12:54:26 UTC (rev 1980) +++ trunk/src/common/net/netpacket.h 2008-08-01 14:31:09 UTC (rev 1981) @@ -221,8 +221,6 @@ { } bool GetPending() { return false; } - void IncRef() {}; - void DecRef() {}; }; template<> Modified: trunk/src/server/netmanager.cpp =================================================================== --- trunk/src/server/netmanager.cpp 2008-08-01 12:54:26 UTC (rev 1980) +++ trunk/src/server/netmanager.cpp 2008-08-01 14:31:09 UTC (rev 1981) @@ -120,8 +120,6 @@ (uint16_t) pong.msg->bytes->GetTotalSize(), pong.msg->bytes)); SendFinalPacket(pkt,addr); - // pkt should be unref'd here - return false; } @@ -484,7 +482,6 @@ (uint16_t) newmsg->bytes->GetTotalSize(), newmsg->bytes)); // this will also delete the pkt SendFinalPacket(pkt); - // pkt should be unref'd here CHECK_FINAL_DECREF(newmsg, "FinalPacket"); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <va...@us...> - 2008-08-25 11:39:36
|
Revision: 2112 http://planeshift.svn.sourceforge.net/planeshift/?rev=2112&view=rev Author: varslot Date: 2008-08-25 11:39:41 +0000 (Mon, 25 Aug 2008) Log Message: ----------- Made Jamfiles use the CS-version that was detected during configuration. Modified Paths: -------------- trunk/src/client/Jamfile trunk/src/pslaunch/Jamfile trunk/src/setup/Jamfile Modified: trunk/src/client/Jamfile =================================================================== --- trunk/src/client/Jamfile 2008-08-25 11:28:21 UTC (rev 2111) +++ trunk/src/client/Jamfile 2008-08-25 11:39:41 UTC (rev 2112) @@ -22,7 +22,7 @@ } Application psclient_static : [ Wildcard *.cpp *.h ] $(extrafiles) : independent noinstall nohelp ; CFlags psclient_static : [ FDefines CS_STATIC_LINKED ] $(CAL3D.CFLAGS) ; -LFlags psclient_static : -lcrystalspace_staticplugins-1.3 -lcal3d ; +LFlags psclient_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) -lcal3d ; MsvcDefine psclient_static : CS_STATIC_LINKED ; LinkWith psclient_static : gui psnet psengine psrpgrules pssound psutil paws effects fparser ; Modified: trunk/src/pslaunch/Jamfile =================================================================== --- trunk/src/pslaunch/Jamfile 2008-08-25 11:28:21 UTC (rev 2111) +++ trunk/src/pslaunch/Jamfile 2008-08-25 11:39:41 UTC (rev 2112) @@ -13,7 +13,7 @@ SubVariant updaterStatic ; Application psupdater_static : [ Filter [ Wildcard *.cpp *.h ] : pslaunch.cpp pawslauncherwindow.cpp pslaunch.h pawslauncherwindow.h globals.h ] : console ; CFlags psupdater_static : [ FDefines CS_STATIC_LINKED ] ; -LFlags psupdater_static : -lcrystalspace_staticplugins-1.3 ; +LFlags psupdater_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; MsvcDefine psupdater_static : CS_STATIC_LINKED ; LinkWith psupdater_static : xdelta3 psutil xpnet ; @@ -44,7 +44,7 @@ SubVariant launcherStatic ; Application pslaunch_static : [ Filter [ Wildcard *.cpp *.h ] : updater.cpp updater.h ] : ; CFlags pslaunch_static : [ FDefines CS_STATIC_LINKED ] ; -LFlags pslaunch_static : -lcrystalspace_staticplugins-1.3 ; +LFlags pslaunch_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; MsvcDefine pslaunch_static : CS_STATIC_LINKED ; LinkWith pslaunch_static : xdelta3 paws psutil fparser xpnet ; Modified: trunk/src/setup/Jamfile =================================================================== --- trunk/src/setup/Jamfile 2008-08-25 11:28:21 UTC (rev 2111) +++ trunk/src/setup/Jamfile 2008-08-25 11:39:41 UTC (rev 2112) @@ -14,7 +14,7 @@ SubVariant static ; Application pssetup_static : [ Wildcard *.cpp *.h ] : independent noinstall nohelp ; CFlags pssetup_static : [ FDefines CS_STATIC_LINKED ] ; -LFlags pssetup_static : "-lcrystalspace_staticplugins-1.3" ; +LFlags pssetup_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; MsvcDefine pssetup_static : CS_STATIC_LINKED ; LinkWith pssetup_static : paws psutil fparser ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2008-09-27 14:16:27
|
Revision: 2199 http://planeshift.svn.sourceforge.net/planeshift/?rev=2199&view=rev Author: kennygraunke Date: 2008-09-27 14:16:22 +0000 (Sat, 27 Sep 2008) Log Message: ----------- Fix for last commit (forgot to remove include lines). Modified Paths: -------------- trunk/src/client/psnetmanager.cpp trunk/src/common/net/connection.cpp trunk/src/common/net/msghandler.cpp trunk/src/npcclient/networkmgr.cpp trunk/src/npcclient/status.cpp trunk/src/server/netmanager.cpp trunk/src/server/psserver.cpp trunk/src/server/serverstatus.cpp Modified: trunk/src/client/psnetmanager.cpp =================================================================== --- trunk/src/client/psnetmanager.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/client/psnetmanager.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -25,7 +25,6 @@ #include "net/clientmsghandler.h" #include "authentclient.h" #include "net/connection.h" -#include "util/sleep.h" #include "net/cmdhandler.h" #include "cmdusers.h" #include "cmdguilds.h" Modified: trunk/src/common/net/connection.cpp =================================================================== --- trunk/src/common/net/connection.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/common/net/connection.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -26,7 +26,6 @@ #include <csutil/sysfunc.h> #include "util/pserror.h" -#include "util/sleep.h" #include "util/log.h" #include "net/connection.h" #include "net/messages.h" Modified: trunk/src/common/net/msghandler.cpp =================================================================== --- trunk/src/common/net/msghandler.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/common/net/msghandler.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -17,7 +17,6 @@ */ #include <psconfig.h> -#include "util/sleep.h" #include "net/message.h" #include "net/messages.h" #include "net/netbase.h" Modified: trunk/src/npcclient/networkmgr.cpp =================================================================== --- trunk/src/npcclient/networkmgr.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/npcclient/networkmgr.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -30,7 +30,6 @@ //============================================================================= // Project Space Includes //============================================================================= -#include "util/sleep.h" #include "util/log.h" #include "util/serverconsole.h" #include "util/eventmanager.h" Modified: trunk/src/npcclient/status.cpp =================================================================== --- trunk/src/npcclient/status.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/npcclient/status.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -29,7 +29,6 @@ //============================================================================= // Library Includes //============================================================================= -#include "util/sleep.h" #include "util/eventmanager.h" #include "util/psxmlparser.h" Modified: trunk/src/server/netmanager.cpp =================================================================== --- trunk/src/server/netmanager.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/server/netmanager.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -26,7 +26,6 @@ // Project Includes //============================================================================= #include "util/pserror.h" -#include "util/sleep.h" #include "util/serverconsole.h" #include "net/message.h" Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/server/psserver.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -34,7 +34,6 @@ // Library Include //============================================================================= #include "util/serverconsole.h" -#include "util/sleep.h" #include "util/mathscript.h" #include "util/psdatabase.h" #include "util/eventmanager.h" Modified: trunk/src/server/serverstatus.cpp =================================================================== --- trunk/src/server/serverstatus.cpp 2008-09-27 13:09:51 UTC (rev 2198) +++ trunk/src/server/serverstatus.cpp 2008-09-27 14:16:22 UTC (rev 2199) @@ -28,7 +28,6 @@ //============================================================================= // Project Includes //============================================================================= -#include "util/sleep.h" #include "util/eventmanager.h" #include "util/psxmlparser.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-02 14:48:12
|
Revision: 2349 http://planeshift.svn.sourceforge.net/planeshift/?rev=2349&view=rev Author: Vengeance2001 Date: 2008-11-02 14:48:02 +0000 (Sun, 02 Nov 2008) Log Message: ----------- Committing updated patch by Lanarel to fix bug #2425, where the server sometimes crashes when inspecting other people's items in guarded containers. Now CanTake is in the container code instead of Client, where it doesn't belong. Modified Paths: -------------- trunk/src/common/util/pscssetup.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/client.cpp trunk/src/server/client.h trunk/src/server/gem.cpp trunk/src/server/gem.h trunk/src/server/slotmanager.cpp Modified: trunk/src/common/util/pscssetup.cpp =================================================================== --- trunk/src/common/util/pscssetup.cpp 2008-11-02 14:39:48 UTC (rev 2348) +++ trunk/src/common/util/pscssetup.cpp 2008-11-02 14:48:02 UTC (rev 2349) @@ -311,16 +311,24 @@ if (strcmp (filename + strlen(filename) - 4, ".zip")) continue; - char* name = csStrNew(filename); - char* onlyname = PS_GetFileName(name); - onlyname[strlen(onlyname) - 4] = '\0'; - csString finaldir ("/planeshift/world/"); - finaldir += onlyname; + csString finaldir(filename); + // Get only filename + size_t term = finaldir.FindLast('/'); + finaldir.DeleteAt(0,term); + finaldir.Insert(0,"/planeshift/world"); + term = finaldir.FindLast('.'); + finaldir.Truncate(term); + // char* name = csStrNew(filename); + // char* onlyname = PS_GetFileName(name); + // onlyname[strlen(onlyname) - 4] = '\0'; + // csString finaldir ("/planeshift/world/"); + // finaldir += onlyname; + csRef<iDataBuffer> xrpath = vfs->GetRealPath(filename); vfs->Mount(finaldir, **xrpath); - delete[] name; + // delete[] name; } } } Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2008-11-02 14:39:48 UTC (rev 2348) +++ trunk/src/server/bulkobjects/psitem.cpp 2008-11-02 14:48:02 UTC (rev 2349) @@ -2402,7 +2402,7 @@ return; } - int stackCount = client->CanTake(container,child) ? child->GetStackCount() : -1; + int stackCount = container->CanTake(client,child) ? child->GetStackCount() : -1; outgoing.AddContents(child->GetName(), child->GetImageName(), child->GetPurifyStatus(), child->GetLocInParent(), stackCount); } Modified: trunk/src/server/client.cpp =================================================================== --- trunk/src/server/client.cpp 2008-11-02 14:39:48 UTC (rev 2348) +++ trunk/src/server/client.cpp 2008-11-02 14:48:02 UTC (rev 2349) @@ -480,57 +480,6 @@ return true; } -bool Client::CanTake(gemContainer* gemcontainer, psItem* item) -{ - if (!item || !gemcontainer) - return false; - - psItem *containeritem = gemcontainer->GetItem(); - CS_ASSERT(containeritem); - - // Check for npc-owned or locked container - if (GetSecurityLevel() < GM_LEVEL_2) - { - if (containeritem->GetIsNpcOwned()) - { - return false; - } - if (containeritem->GetIsLocked()) - { - psserver->SendSystemError(GetClientNum(), "You cannot take an item from a locked container!"); - return false; - } - } - - // Allow if the item is pickupable and either: public, guarded by the character, or the guarding character is offline - PID guard = item->GetGuardingCharacterID(); - gemActor* guardingActor = GEMSupervisor::GetSingleton().FindPlayerEntity(guard); - - if ((!guard.IsValid() || guard == GetCharacterData()->GetPID() || !guardingActor) - && !item->GetIsNpcOwned() && !item->GetIsNoPickup()) - { - return true; - } - - if (guard.IsValid() && guardingActor) - { - if (guardingActor->RangeTo(gemcontainer) > 5) - { - return true; - } - } - - // Allow GM2s to take any PC-owned stuff - if (GetSecurityLevel() >= GM_LEVEL_2 && !item->GetIsNpcOwned() && !item->GetIsNoPickup()) - return true; - - // Allow developers to take anything - if (GetSecurityLevel() >= GM_DEVELOPER) - return true; - - return false; -} - int Client::GetTargetType(gemObject* target) { if (!target) Modified: trunk/src/server/client.h =================================================================== --- trunk/src/server/client.h 2008-11-02 14:39:48 UTC (rev 2348) +++ trunk/src/server/client.h 2008-11-02 14:48:02 UTC (rev 2349) @@ -42,7 +42,6 @@ class psCharacter; class psItem; class gemObject; -class gemContainer; class gemActor; class gemNPC; class psPath; @@ -196,11 +195,6 @@ */ bool IsAllowedToAttack(gemObject* target, bool inform = true); - /** Checks if this client is allowed to pick up an item, or take it - * out of the container. - */ - bool CanTake(gemContainer* gemcontainer, psItem* item); - /** Returns the type of the target, from TARGET_TYPES. * * @param target The target to check. Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-11-02 14:39:48 UTC (rev 2348) +++ trunk/src/server/gem.cpp 2008-11-02 14:48:02 UTC (rev 2349) @@ -3947,6 +3947,54 @@ return result; } +bool gemContainer::CanTake(Client *client, psItem* item) +{ + if (!client || !item) + return false; + + // Allow developers to take anything + if (client->GetSecurityLevel() >= GM_DEVELOPER) + return true; + + /* \note + * The check if the item is NPCOwned or NoPickup only makes + * sense if it is not possible to have NPCOwned items in a not + * NPCOwned container, or NoPickup items in a PickUpable container + */ + //not allowed to take npcowned or nopickup items in a container + if (item->GetIsNpcOwned() || item->GetIsNoPickup()) + return false; + + psItem *containeritem = GetItem(); + CS_ASSERT(containeritem); + + // Check for npc-owned or locked container + if (client->GetSecurityLevel() < GM_LEVEL_2) + { + if (containeritem->GetIsNpcOwned()) + { + return false; + } + if (containeritem->GetIsLocked()) + { + psserver->SendSystemError(client->GetClientNum(), "You cannot take an item from a locked container!"); + return false; + } + } + + // Allow if the item is pickupable and either: public, guarded by the character, or the guarding character is offline + PID guard = item->GetGuardingCharacterID(); + gemActor* guardingActor = GEMSupervisor::GetSingleton().FindPlayerEntity(guard); + + if ((!guard.IsValid() || guard == client->GetCharacterData()->GetPID() || !guardingActor) || (guardingActor->RangeTo(this) > 5)) + { + return true; + } + + return false; +} + + bool gemContainer::AddToContainer(psItem *item, Client *fromClient, int slot, bool test) { // Slot changing and item creation in craft is done at the very end of event. Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-11-02 14:39:48 UTC (rev 2348) +++ trunk/src/server/gem.h 2008-11-02 14:48:02 UTC (rev 2349) @@ -479,6 +479,14 @@ bool AddToContainer(psItem *item,Client *fromClient, int slot=-1) { return AddToContainer(item, fromClient, slot, false); } bool RemoveFromContainer(psItem *item,Client *fromClient); + /** Checks if client is allowed to remove an item from the container. + * @param client A pointer to the client viewing the container + * @param item Item being viewed or taken + * + * @return boolean indicating if client is allowed to take the item + */ + bool CanTake(Client *client, psItem* item); + /** Remove an item from the container. * @param itemStack A pointer to the complete stack of the items we are looking at. * @param fromslot Where in the container the items are removed from. Modified: trunk/src/server/slotmanager.cpp =================================================================== --- trunk/src/server/slotmanager.cpp 2008-11-02 14:39:48 UTC (rev 2348) +++ trunk/src/server/slotmanager.cpp 2008-11-02 14:48:02 UTC (rev 2349) @@ -168,7 +168,7 @@ return; } - if (!fromClient->CanTake(worldContainer,itemProposed)) + if (!worldContainer->CanTake(fromClient,itemProposed)) { Error2("Client %u tried to take item it doesn't own.", fromClient->GetClientNum()); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-08 17:15:35
|
Revision: 2381 http://planeshift.svn.sourceforge.net/planeshift/?rev=2381&view=rev Author: Vengeance2001 Date: 2008-11-08 17:15:32 +0000 (Sat, 08 Nov 2008) Log Message: ----------- Voiced npc dialog is now working at a basic level. There are three examples here. - If you say hello to the merchant, he will say "Hello Newman" back. - If you say "Can bring you" to him, he will say something when he assigns the quest. - If you say "here you" to him after that, he will complete the quest and say thank you. Also fixed a Windows sockets incompatibility problem that only shows up when sending large messages. Also renamed the GetData() function in MsgEntry because it is not being used in a safe way by mini-games, it looks like. Someone should review that. Bumped netversion. Modified Paths: -------------- trunk/src/client/modehandler.cpp trunk/src/client/modehandler.h trunk/src/client/pscelclient.h trunk/src/client/sound/pssoundmngr.cpp trunk/src/common/net/message.h trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/common/net/netbase.h trunk/src/common/net/npcmessages.cpp trunk/src/npcclient/networkmgr.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h trunk/src/server/database/mysql/npc_responses.sql trunk/src/server/database/mysql/quest_scripts.sql trunk/src/server/database/mysql/quests.sql trunk/src/server/npcmanager.cpp Modified: trunk/src/client/modehandler.cpp =================================================================== --- trunk/src/client/modehandler.cpp 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/client/modehandler.cpp 2008-11-08 17:15:32 UTC (rev 2381) @@ -110,6 +110,7 @@ actorEntity = 0; object_reg = obj_reg; engine = csQueryRegistry<iEngine> (object_reg); + vfs = csQueryRegistry<iVFS> (object_reg); downfall = NULL; fog = NULL; @@ -142,6 +143,7 @@ msghandler->Unsubscribe(this,MSGTYPE_WEATHER); msghandler->Unsubscribe(this,MSGTYPE_NEWSECTOR); msghandler->Unsubscribe(this,MSGTYPE_COMBATEVENT); + msghandler->Unsubscribe(this,MSGTYPE_CACHEFILE); } if (randomgen) delete randomgen; @@ -156,6 +158,7 @@ msghandler->Subscribe(this,MSGTYPE_WEATHER); msghandler->Subscribe(this,MSGTYPE_NEWSECTOR); msghandler->Subscribe(this,MSGTYPE_COMBATEVENT); + msghandler->Subscribe(this,MSGTYPE_CACHEFILE); // Light levels if(!LoadLightingLevels()) @@ -307,6 +310,10 @@ case MSGTYPE_COMBATEVENT: HandleCombatEvent(me); return; + + case MSGTYPE_CACHEFILE: + HandleCachedFile(me); + return; } } @@ -2106,3 +2113,27 @@ } } } + +void ModeHandler::HandleCachedFile(MsgEntry* me) +{ + psCachedFileMessage msg(me); + + if (msg.valid) + { + // TODO: Check for cached version + csString fname; + fname.Format("/planeshift/userdata/%s",msg.hash.GetDataSafe() ); + + printf("Got audio file '%s' to play.\n", msg.hash.GetDataSafe() ); + + // Save sound file + if (!vfs->WriteFile(fname,msg.databuf->GetData(), msg.databuf->GetSize() )) + { + Error2("Could not write cached file '%s'.",fname.GetData()); + return; + } + + // Play sound file + soundmanager->StartAmbientSound(fname); + } +} Modified: trunk/src/client/modehandler.h =================================================================== --- trunk/src/client/modehandler.h 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/client/modehandler.h 2008-11-08 17:15:32 UTC (rev 2381) @@ -161,6 +161,8 @@ csRef<psCelClient> celclient; csRef<MsgHandler> msghandler; csRef<iEngine> engine; + csRef<iVFS> vfs; + // Each element represents an hour of the day. csPDelArray<LightingList> lights; // Track the stage of the current step. @@ -189,6 +191,7 @@ void HandleWeatherMessage(MsgEntry* me); void HandleNewSectorMessage(MsgEntry* me); void HandleCombatEvent(MsgEntry* me); + void HandleCachedFile(MsgEntry* me); bool ProcessLighting(LightingSetting *color, float pct); LightingSetting *FindLight(LightingSetting *light,int which); Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/client/pscelclient.h 2008-11-08 17:15:32 UTC (rev 2381) @@ -26,6 +26,7 @@ #include <csutil/refarr.h> #include <csutil/list.h> #include <csutil/hash.h> +#include <csutil/strhashr.h> #include <iengine/collection.h> //============================================================================= Modified: trunk/src/client/sound/pssoundmngr.cpp =================================================================== --- trunk/src/client/sound/pssoundmngr.cpp 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/client/sound/pssoundmngr.cpp 2008-11-08 17:15:32 UTC (rev 2381) @@ -728,24 +728,32 @@ csPtr<psTemplateRes> psSoundManager::psSndSourceMngr::LoadResource (const char* name) { - csHash<psSoundFileInfo *>::Iterator i = sndfiles.GetIterator(csHashCompute(name)); - psSoundFileInfo* info = NULL; - while ( i.HasNext() ) - { - info = i.Next(); - if (!strcmp(info->name, name)) - break; - } - if (!info) - { - Error2("Couldn't find a definition for '%s'", name); - return NULL; - } + csRef<iSndSysData> snddata; + + if (name[0] != '/') // not a pathname + { + csHash<psSoundFileInfo *>::Iterator i = sndfiles.GetIterator(csHashCompute(name)); + psSoundFileInfo* info = NULL; + while ( i.HasNext() ) + { + info = i.Next(); + if (!strcmp(info->name, name)) + break; + } + if (!info) + { + Error2("Couldn't find a definition for '%s'", name); + return NULL; + } - csRef<iSndSysData> snddata = LoadSound(info->file); - if (!snddata) - return NULL; - + snddata = LoadSound(info->file); + if (!snddata) + return NULL; + } + else + { + snddata = LoadSound(name); + } return csPtr <psTemplateRes> (new psSoundHandle(snddata)); } Modified: trunk/src/common/net/message.h =================================================================== --- trunk/src/common/net/message.h 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/common/net/message.h 2008-11-08 17:15:32 UTC (rev 2381) @@ -796,7 +796,7 @@ } // Get a pre-converted data buffer with recorded length from the current psMessageBytes buffer. - void * GetData(uint32_t*length) + void * GetBufferPointerUnsafe(size_t& length) { // If the message is in overrun state, we know we can't read anymore if (overrun) @@ -805,25 +805,26 @@ if (current+sizeof(uint32_t) > bytes->GetSize()) { Debug2(LOG_NET,0,"Message id %u would have read beyond end of buffer.\n",msgid); - *length=0; + length=0; overrun=true; return NULL; } - *length = GetUInt32(); - if ((*length)==0) return NULL; + length = GetUInt32(); + if (length==0) + return NULL; - if (current + (*length) > bytes->GetSize()) + if (current + (length) > bytes->GetSize()) { Debug2(LOG_NET,0,"Message id %u would have read beyond end of buffer.\n",msgid); - *length=0; + length=0; overrun=true; return NULL; } void *datastream = bytes->payload+current; - current += *length; - return datastream; + current += length; + return datastream; // Not safe to use this pointer after the MsgEntry goes out of scope! } void SetType(uint8_t type) Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/common/net/messages.cpp 2008-11-08 17:15:32 UTC (rev 2381) @@ -3215,7 +3215,7 @@ // Read the data uint32_t length = 0; - const void* data = message->GetData(&length); + const void* data = message->GetBufferPointerUnsafe(length); if (message->overrun) { @@ -3366,8 +3366,8 @@ EID target, int targetLocation, float damage, - csStringID attack_anim, - csStringID defense_anim) + int attack_anim, + int defense_anim) { switch (event_type) { @@ -6523,11 +6523,11 @@ msgCols = msg->GetInt8(); msgRows = msg->GetInt8(); - uint32_t tmp = 0; - msgLayout = (uint8_t *)msg->GetData(&tmp); + uint32_t size = 0; + msgLayout = (uint8_t *)msg->GetBufferPointerUnsafe(size); msgNumOfPieces = msg->GetInt8(); - msgPieces = (uint8_t *)msg->GetData(&tmp); + msgPieces = (uint8_t *)msg->GetBufferPointerUnsafe(size); } bool psMGBoardMessage::IsNewerThan(uint8_t oldCounter) @@ -6629,8 +6629,8 @@ msgGameID = msg->GetUInt32(); msgNumUpdates = msg->GetUInt8(); - uint32_t tmp = 0; - msgUpdates = (uint8_t *)msg->GetData(&tmp); + uint32_t size = 0; + msgUpdates = (uint8_t *)msg->GetBufferPointerUnsafe(size); } bool psMGUpdateMessage::IsNewerThan(uint8_t oldCounter) @@ -7114,3 +7114,29 @@ csString msgtext; return msgtext; } + +PSF_IMPLEMENT_MSG_FACTORY(psCachedFileMessage,MSGTYPE_CACHEFILE); + +psCachedFileMessage::psCachedFileMessage( uint32_t client, const char *pathname, iDataBuffer *contents) +{ + // We send the hash along with it to save as the filename on the client + hash = csMD5::Encode(pathname).HexString(); + + msg.AttachNew(new MsgEntry(hash.Length()+1 + contents->GetSize() + sizeof(uint32_t) )); + + msg->SetType(MSGTYPE_CACHEFILE); + msg->clientnum = client; + msg->Add(hash); + msg->Add(contents->GetData(), (uint32_t) contents->GetSize()); +} + +psCachedFileMessage::psCachedFileMessage( MsgEntry* me ) +{ + hash = me->GetStr(); + size_t size=0; + char *ptr = (char *)me->GetBufferPointerUnsafe(size); + if (ptr) + { + databuf = csPtr<iDataBuffer> (new csDataBuffer (ptr, size, false)); + } +} Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/common/net/messages.h 2008-11-08 17:15:32 UTC (rev 2381) @@ -25,7 +25,7 @@ #include <csutil/array.h> #include <csutil/stringarray.h> #include <csutil/databuf.h> -#include <csutil/strhashr.h> +#include <csutil/csmd5.h> #include "util/psscf.h" #include <csgeom/vector3.h> #include "rpgrules/psmoney.h" @@ -43,7 +43,7 @@ // This holds the version number of the network code, remember to increase // this each time you do an update which breaks compatibility -#define PS_NETVERSION 0x0094 +#define PS_NETVERSION 0x0095 // Remember to bump the version in pscssetup.h, as well. // NPC Networking version is separate so we don't have to break compatibility @@ -244,7 +244,9 @@ MSGTYPE_SEQUENCE, MSGTYPE_NPCRACELIST, - MSGTYPE_INTRODUCTION + MSGTYPE_INTRODUCTION, + + MSGTYPE_CACHEFILE }; class psMessageCracker; @@ -2285,8 +2287,8 @@ EID target_id; int target_location; // Where on the target the attack hit/miss float damage; - csStringID attack_anim; - csStringID defense_anim; + int attack_anim; + int defense_anim; enum { COMBAT_DODGE, @@ -2305,8 +2307,8 @@ EID target, int target_location, float damage, - csStringID attack_anim, - csStringID defense_anim); + int attack_anim, + int defense_anim); void SetClientNum(int cnum); @@ -3165,7 +3167,7 @@ msg->SetType(MSGTYPE_QUESTIONRESPONSE); msg->clientnum = clientnum; msg->Add(questionID); - msg->Add(answer.GetData()); + msg->Add(answer); } psQuestionResponseMsg(MsgEntry *me) { @@ -5042,4 +5044,34 @@ */ virtual csString ToString(AccessPointers * access_ptrs); }; + +/** + * Class to send a possibly cached file to the client. + */ +class psCachedFileMessage : public psMessageCracker +{ + +public: + csString hash; + csRef<iDataBuffer> databuf; + + psCachedFileMessage( uint32_t client, const char *pathname, iDataBuffer *contents); + psCachedFileMessage( MsgEntry* me ); + + PSF_DECLARE_MSG_FACTORY(); + + /** + * @brief Converts the message into human readable string. + * + * @param access_ptrs A struct to a number of access pointers. + * @return Return a human readable string for the message. + */ + virtual csString ToString(AccessPointers * access_ptrs) + { + return csString("not implemented"); + } + +}; + + #endif Modified: trunk/src/common/net/netbase.h =================================================================== --- trunk/src/common/net/netbase.h 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/common/net/netbase.h 2008-11-08 17:15:32 UTC (rev 2381) @@ -67,6 +67,19 @@ typedef GenericRefQueue <MsgEntry> MsgQueue; typedef GenericRefQueue <psNetPacketEntry> NetPacketQueue; +/* + * Microsoft sockets do not use Berkeley error codes or functions in all cases. + * This is the workaround. + * http://msdn.microsoft.com/en-us/library/ms737828(VS.85).aspx + */ +#ifdef CS_PLATFORM_WIN32 +#undef errno +#define errno WSAGetLastError() +#else +#define WSAEWOULDBLOCK EAGAIN +#endif + + struct PublishDestination { int client; @@ -319,8 +332,10 @@ * It's possible that the buffer will free between the sendto call and the select * leaving the select hanging forever if not for the timeout value. */ - while (retries++ < SENDTO_MAX_RETRIES && sentbytes==-1 && errno==EAGAIN) + while (retries++ < SENDTO_MAX_RETRIES && sentbytes==-1 && (errno==EAGAIN || errno==WSAEWOULDBLOCK)) { + printf("In while loop on EAGAIN... retry #%d.\n", retries); + // Clear the file descriptor set FD_ZERO(&wfds); // Set the socket's FD in this set @@ -346,8 +361,9 @@ totalcountout++; } else - Error1("NetBase::SendTo() gave up trying to send a packet."); - + { + Error2("NetBase::SendTo() gave up trying to send a packet with errno=%d.",errno); + } return sentbytes; } Modified: trunk/src/common/net/npcmessages.cpp =================================================================== --- trunk/src/common/net/npcmessages.cpp 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/common/net/npcmessages.cpp 2008-11-08 17:15:32 UTC (rev 2381) @@ -23,6 +23,7 @@ #include <iengine/sector.h> #include <iengine/engine.h> #include <iutil/object.h> +#include <csutil/strhashr.h> #include "util/strutil.h" //--------------------------------------------------------------------------- @@ -225,7 +226,7 @@ // Extract the data uint32_t len = 0; - void *data = msg->GetData(&len); + void *data = msg->GetBufferPointerUnsafe(len); // Make sure we haven't run past the end of the buffer if (msg->overrun) Modified: trunk/src/npcclient/networkmgr.cpp =================================================================== --- trunk/src/npcclient/networkmgr.cpp 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/npcclient/networkmgr.cpp 2008-11-08 17:15:32 UTC (rev 2381) @@ -25,6 +25,7 @@ #include <csutil/csstring.h> #include <iutil/vfs.h> #include <iengine/engine.h> +#include <csutil/strhashr.h> //============================================================================= Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-08 17:15:32 UTC (rev 2381) @@ -320,6 +320,9 @@ const char *GetResponse(); + /// Returns the VFS path to the audio file which represents this response on the server, or NULL if one was not specified. + const char *GetVoiceFile() { return voiceAudioPath; } + /// Check for SayResponseOp with public flag set, which tells chat whether it is public or private. bool HasPublicResponse(); bool ParseResponseScript(const char *xmlstr,bool insertBeginning=false); Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/server/chatmanager.cpp 2008-11-08 17:15:32 UTC (rev 2381) @@ -172,8 +172,10 @@ gemNPC *targetnpc = dynamic_cast<gemNPC*>(target); NpcResponse *resp = CheckNPCResponse(msg,client,targetnpc); if (resp) + { + SendAudioFile(client, resp->GetVoiceFile()); resp->ExecuteScript(client, targetnpc); - + } break; } case CHAT_TELL: @@ -425,8 +427,33 @@ return CheckNPCEvent(client,msg.sText,target); // <L MONEY="0,0,0,3"></L> } +void ChatManager::SendAudioFile(Client *client, const char *voiceFile) +{ + if (!voiceFile || voiceFile[0]==0) + return; + printf("Sending audio file '%s'.\n", voiceFile); + // need to cache this probably, later + csRef<iDataBuffer> buffer = psserver->vfs->ReadFile(voiceFile); + if (!buffer.IsValid()) + { + Error2("Audio file '%s' not found.\n", voiceFile); + return; + } + + psCachedFileMessage msg(client->GetClientNum(), voiceFile, buffer); + msg.SendMessage(); +} + + + + + + +/************************************************************************************************/ + + psEndChatLoggingEvent::psEndChatLoggingEvent(uint32_t _clientnum, const int delayticks=5000) : psGameEvent(0,delayticks,"psEndChatLoggingEvent") { Modified: trunk/src/server/chatmanager.h =================================================================== --- trunk/src/server/chatmanager.h 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/server/chatmanager.h 2008-11-08 17:15:32 UTC (rev 2381) @@ -75,8 +75,10 @@ NpcResponse *CheckNPCResponse(psChatMessage& msg,Client *client,gemNPC * &target); - //If this returns true, all went well. - //If it returns false, the client was muted + /// Starts the process of sending the specified file to the client + void SendAudioFile(Client *client, const char *voiceFile); + + /// If this returns true, all went well. If it returns false, the client was muted bool FloodControl(csString& newMessage, Client *client); }; Modified: trunk/src/server/database/mysql/npc_responses.sql =================================================================== --- trunk/src/server/database/mysql/npc_responses.sql 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/server/database/mysql/npc_responses.sql 2008-11-08 17:15:32 UTC (rev 2381) @@ -55,7 +55,7 @@ LOCK TABLES "npc_responses" WRITE; /*!40000 ALTER TABLE "npc_responses" DISABLE KEYS;*/ REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES - ('1','1','Hello $playername.','Hello friend.','Hi. What can I do for you?','Go away!','Whatever dude...','0','0','0','0','<response><respondpublic/><action anim="greet"/></response>','','0',NULL); + ('1','1','Hello $playername.','Hello friend.','Hi. What can I do for you?','Go away!','Whatever dude...','0','0','0','0','<response><respondpublic/><action anim="greet"/></response>','','0','/planeshift/data/voice/merchant/hello_n.wav'); REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES ('2','2','I''m fine and you?','Terrible... what a day...','Comme ci, comme ca... et toi?','Va bene, e tu?','','0','0','0','0','','','0',NULL); REPLACE INTO "npc_responses" ("id", "trigger_id", "response1", "response2", "response3", "response4", "response5", "pronoun_him", "pronoun_her", "pronoun_it", "pronoun_them", "script", "prerequisite", "quest_id", "audio_path") VALUES Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/server/database/mysql/quest_scripts.sql 2008-11-08 17:15:32 UTC (rev 2381) @@ -43,7 +43,7 @@ # INSERT INTO quest_scripts VALUES("2","2","P: can bring you -Merchant: I'm kinda hungry.. bring me a sandwich and hurry if you want a hexa and a mug for your trouble.(/data/voice/merchant/sandwich.spx) +Merchant: I'm kinda hungry.. bring me a sandwich and hurry if you want a hexa and a mug for your trouble.(/planeshift/data/voice/merchant/clawatit.wav) Assign Quest @@ -51,10 +51,9 @@ P: here you -M: Many thanks, this help for my hunger. +M: Many thanks, this help for my hunger.(/planeshift/data/voice/merchant/thank_you.wav) Give 1 hexa. Give Mug. Give 3 Potion of Healing. Give 5 faction merchants. - "); # Modified: trunk/src/server/database/mysql/quests.sql =================================================================== --- trunk/src/server/database/mysql/quests.sql 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/server/database/mysql/quests.sql 2008-11-08 17:15:32 UTC (rev 2381) @@ -28,7 +28,7 @@ # INSERT INTO quests VALUES("1","Rescue the Princess","Princess Leia is being held by the Empire on the Death Star. You must rescue her before she is compelled to give up the wherabouts of the rebel base!","0","0","0","0","0","0","Newbie",""); -INSERT INTO quests VALUES("2","Sandwich Quest","Bring the merchant a freakin' sandwich!","0","0","0","0","30","0","Newbie",""); +INSERT INTO quests VALUES("2","Sandwich Quest","Bring the merchant a freakin' sandwich!","0","0","0","0","10","0","Newbie",""); INSERT INTO quests VALUES("3","Falchion Quest","Bring the merchant a steel falchion","0","0","0","0","120","60","Newbie","<pre><skill name=\"Sword\" min=\"10\" max=\"20\"/></pre>"); INSERT INTO quests VALUES("10","Male Enki Alina Quest","Find Smith and ask him if he loves the daugther.","0","0","0","0","240","60","Newbie","<pre><completed quest=\"Male Enki Gold\"/></pre>"); INSERT INTO quests VALUES("11","Male Enki Gold","Mine gold ore for the MaleEnki npc.","0","0","0","0","240","60","Newbie",""); Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-11-08 14:45:57 UTC (rev 2380) +++ trunk/src/server/npcmanager.cpp 2008-11-08 17:15:32 UTC (rev 2381) @@ -735,7 +735,7 @@ { // extract the data uint32_t len = 0; - void *data = list.msg->GetData(&len); + void *data = list.msg->GetBufferPointerUnsafe(len); // Make sure we haven't run past the end of the buffer if (list.msg->overrun) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <are...@us...> - 2008-11-08 23:41:56
|
Revision: 2389 http://planeshift.svn.sourceforge.net/planeshift/?rev=2389&view=rev Author: aresilek Date: 2008-11-08 23:41:52 +0000 (Sat, 08 Nov 2008) Log Message: ----------- - Changed uint32_t to size_t for calls to GetBufferPointerUnsafe as this inconsistency caused some compilers to fail. Modified Paths: -------------- trunk/src/common/net/messages.cpp trunk/src/common/net/npcmessages.cpp trunk/src/server/npcmanager.cpp Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-08 22:56:53 UTC (rev 2388) +++ trunk/src/common/net/messages.cpp 2008-11-08 23:41:52 UTC (rev 2389) @@ -3214,7 +3214,7 @@ } // Read the data - uint32_t length = 0; + size_t length = 0; const void* data = message->GetBufferPointerUnsafe(length); if (message->overrun) @@ -6523,7 +6523,7 @@ msgCols = msg->GetInt8(); msgRows = msg->GetInt8(); - uint32_t size = 0; + size_t size = 0; msgLayout = (uint8_t *)msg->GetBufferPointerUnsafe(size); msgNumOfPieces = msg->GetInt8(); @@ -6629,7 +6629,7 @@ msgGameID = msg->GetUInt32(); msgNumUpdates = msg->GetUInt8(); - uint32_t size = 0; + size_t size = 0; msgUpdates = (uint8_t *)msg->GetBufferPointerUnsafe(size); } Modified: trunk/src/common/net/npcmessages.cpp =================================================================== --- trunk/src/common/net/npcmessages.cpp 2008-11-08 22:56:53 UTC (rev 2388) +++ trunk/src/common/net/npcmessages.cpp 2008-11-08 23:41:52 UTC (rev 2389) @@ -225,7 +225,7 @@ msgtext.Append("CMD_DRDATA: "); // Extract the data - uint32_t len = 0; + size_t len = 0; void *data = msg->GetBufferPointerUnsafe(len); // Make sure we haven't run past the end of the buffer Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-11-08 22:56:53 UTC (rev 2388) +++ trunk/src/server/npcmanager.cpp 2008-11-08 23:41:52 UTC (rev 2389) @@ -734,7 +734,7 @@ case psNPCCommandsMessage::CMD_DRDATA: { // extract the data - uint32_t len = 0; + size_t len = 0; void *data = list.msg->GetBufferPointerUnsafe(len); // Make sure we haven't run past the end of the buffer This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <are...@us...> - 2008-11-09 02:52:25
|
Revision: 2393 http://planeshift.svn.sourceforge.net/planeshift/?rev=2393&view=rev Author: aresilek Date: 2008-11-09 02:52:20 +0000 (Sun, 09 Nov 2008) Log Message: ----------- - Reverted r2389. Modified Paths: -------------- trunk/src/common/net/messages.cpp trunk/src/common/net/npcmessages.cpp trunk/src/server/npcmanager.cpp Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-09 02:32:22 UTC (rev 2392) +++ trunk/src/common/net/messages.cpp 2008-11-09 02:52:20 UTC (rev 2393) @@ -3214,7 +3214,7 @@ } // Read the data - size_t length = 0; + uint32_t length = 0; const void* data = message->GetBufferPointerUnsafe(length); if (message->overrun) @@ -6523,7 +6523,7 @@ msgCols = msg->GetInt8(); msgRows = msg->GetInt8(); - size_t size = 0; + uint32_t size = 0; msgLayout = (uint8_t *)msg->GetBufferPointerUnsafe(size); msgNumOfPieces = msg->GetInt8(); @@ -6629,7 +6629,7 @@ msgGameID = msg->GetUInt32(); msgNumUpdates = msg->GetUInt8(); - size_t size = 0; + uint32_t size = 0; msgUpdates = (uint8_t *)msg->GetBufferPointerUnsafe(size); } Modified: trunk/src/common/net/npcmessages.cpp =================================================================== --- trunk/src/common/net/npcmessages.cpp 2008-11-09 02:32:22 UTC (rev 2392) +++ trunk/src/common/net/npcmessages.cpp 2008-11-09 02:52:20 UTC (rev 2393) @@ -225,7 +225,7 @@ msgtext.Append("CMD_DRDATA: "); // Extract the data - size_t len = 0; + uint32_t len = 0; void *data = msg->GetBufferPointerUnsafe(len); // Make sure we haven't run past the end of the buffer Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-11-09 02:32:22 UTC (rev 2392) +++ trunk/src/server/npcmanager.cpp 2008-11-09 02:52:20 UTC (rev 2393) @@ -734,7 +734,7 @@ case psNPCCommandsMessage::CMD_DRDATA: { // extract the data - size_t len = 0; + uint32_t len = 0; void *data = list.msg->GetBufferPointerUnsafe(len); // Make sure we haven't run past the end of the buffer This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-11-09 13:39:40
|
Revision: 2399 http://planeshift.svn.sourceforge.net/planeshift/?rev=2399&view=rev Author: weltall2 Date: 2008-11-09 13:39:37 +0000 (Sun, 09 Nov 2008) Log Message: ----------- little improvements and fixes to my last committed code Modified Paths: -------------- trunk/src/common/paws/pawslistbox.cpp trunk/src/server/adminmanager.cpp Modified: trunk/src/common/paws/pawslistbox.cpp =================================================================== --- trunk/src/common/paws/pawslistbox.cpp 2008-11-09 12:18:07 UTC (rev 2398) +++ trunk/src/common/paws/pawslistbox.cpp 2008-11-09 13:39:37 UTC (rev 2399) @@ -46,10 +46,10 @@ { this->listBox = listBox; this->colNum = colNum; - - AddChild(innerWidget); + + AddChild(innerWidget); } - + bool OnMouseDown( int button, int modifiers, int x, int y ) { if (button == csmbWheelUp || button == csmbWheelDown) @@ -65,7 +65,7 @@ protected: pawsListBox * listBox; // our mother listbox - int colNum; // the number of the column this widget is used in + int colNum; // the number of the column this widget is used in }; //----------------------------------------------------------------------------- @@ -85,9 +85,9 @@ horzscrollBar= NULL; titleRow = NULL; xMod = 0; - + usingTitleRow = true; - + sortColNum = -1; ascOrder = true; @@ -145,22 +145,22 @@ // Get the definition of all the column types csRef<iDocumentNodeIterator> colIter = columnsNode->GetNodes( "column" ); - + csArray<ColumnDef> colInfo; - + rowWidth = 0; while ( colIter->HasNext() ) { csRef<iDocumentNode> colNode = colIter->Next(); - + ColumnDef cInfo; - cInfo.width = GetActualWidth(colNode->GetAttributeValueAsInt( "width" )); + cInfo.width = GetActualWidth(colNode->GetAttributeValueAsInt( "width" )); cInfo.height = GetActualHeight(columnHeight); cInfo.widgetNode = colNode->GetNode( "widget" ); cInfo.xmlbinding = colNode->GetAttributeValue( "xmlbinding" ); rowWidth+= cInfo.width; - + colInfo.Push(cInfo); } @@ -174,7 +174,7 @@ for (int i = 0; i < totalColumns; i++){ columnDef[i] = colInfo[i]; } - + if (usingTitleRow) CreateTitleRow(); @@ -194,11 +194,11 @@ SetSortOrder(true); } - csRef<iDocumentNode> highlightImageNode = node->GetNode( "highlight" ); + csRef<iDocumentNode> highlightImageNode = node->GetNode( "highlight" ); if ( highlightImageNode ) { csRef<iDocumentAttribute> attr; - + attr = highlightImageNode->GetAttribute("resource"); if (attr) @@ -206,15 +206,15 @@ attr = highlightImageNode->GetAttribute("alpha"); - if ( attr ) + if ( attr ) highlightAlpha = attr->GetValueAsInt(); } - csRef<iDocumentNode> scrollbarNode = node->GetNode( "scrollbar" ); + csRef<iDocumentNode> scrollbarNode = node->GetNode( "scrollbar" ); if ( scrollbarNode ) { csRef<iDocumentAttribute> attr; - + attr = scrollbarNode->GetAttribute("arrowup"); if (attr) arrowUp = attr->GetValue(); @@ -292,7 +292,7 @@ horzscrollBar->Hide(); AddChild( horzscrollBar ); - return true; + return true; } @@ -308,7 +308,7 @@ { titleRow->AddTitleColumn( x, columnDef ); } - + AddChild( titleRow ); } @@ -374,15 +374,15 @@ // Can only add a valid row. if ( !row ) return; - - + + row->SetParent( this ); AddChild( row ); - + row->SetRelativeFrame( 0 ,(totalRows+1)*GetActualHeight(columnHeight), rowWidth, GetActualHeight(columnHeight) ); - + totalRows++; - + rows.Push( row ); if ( scrollBar ) @@ -393,9 +393,9 @@ scrollBar->SetCurrentValue( (float)topRow ); } - CalculateDrawPositions(); + CalculateDrawPositions(); row->SetBackground("Standard Background"); -} +} pawsListBoxRow* pawsListBox::NewRow( size_t position ) @@ -406,14 +406,14 @@ newRow->SetRelativeFrame( 0 ,(totalRows+1)*GetActualHeight(columnHeight), rowWidth, GetActualHeight(columnHeight));//GetActualHeight(columnHeight) ); for ( int x = 0; x < totalColumns; x++ ) - { - newRow->AddColumn( x, columnDef ); + { + newRow->AddColumn( x, columnDef ); } if ( position != (size_t)-1 ) { - children.Insert( position, newRow ); + children.Insert( position, newRow ); rows.Insert( position, newRow ); } else @@ -427,14 +427,14 @@ if (autoID) { for ( int x = 0; x < totalColumns; x++ ) - { - pawsWidget * widget = newRow->GetColumn( x ); + { + pawsWidget * widget = newRow->GetColumn( x ); widget->SetID(id+totalRows*totalColumns+x); } } - + if ( scrollBar ) { if(autoUpdateScroll) @@ -443,10 +443,10 @@ scrollBar->SetCurrentValue( (float)topRow ); } - CalculateDrawPositions(); + CalculateDrawPositions(); newRow->SetBackground("Standard Background"); newRow->SetBackgroundAlpha(255); - + return newRow; } @@ -474,8 +474,8 @@ rows[x]->SetBackground("Standard Background"); rows[x]->SetBackgroundAlpha(255); } - return true; - } + return true; + } for ( int x = 0; x < (int)rows.GetSize(); x++ ) { @@ -490,16 +490,16 @@ rows[x]->SetBackground("Standard Background"); rows[x]->SetBackgroundAlpha(255); } - } + } if ( selected == -1 ) return false; - + // Adjust the topRow of drawing if the selected row is not visible // -1 because of title row. int offset = 0; - if ( usingTitleRow ) + if ( usingTitleRow ) offset = 1; int numberOfRows = screenFrame.Height() / columnDef[0].height - offset; @@ -509,12 +509,12 @@ topRow=(selected-numberOfRows)+1; CalculateDrawPositions(); - + if ( scrollBar ) { scrollBar->SetCurrentValue( (float)topRow ); } - + if (notify) SendOnListAction(LISTBOX_HIGHLIGHTED); @@ -525,14 +525,14 @@ { int horiz = 0; - // If horz scroll bar is visible add an extra vertical scroll + // If horz scroll bar is visible add an extra vertical scroll if ( horzscrollBar->IsVisible() ) { horiz = 1; } scrollBar->SetMaxValue( - int(rows.GetSize()) + (usingTitleRow?1:0) + horiz + - - + int(rows.GetSize()) + (usingTitleRow?1:0) + horiz + + - screenFrame.Height() / columnDef[0].height ); @@ -562,7 +562,7 @@ width = rows[i]->ScreenFrame().Width() - rowWidth; rowWidth += width; - + if( autoResize && width > wdg->ScreenFrame().Width() ) { wdg->SetRelativeFrameSize(width,wdg->ScreenFrame().Height()); @@ -595,7 +595,7 @@ { // -1 because of title row. int offset = 0; - if ( usingTitleRow ) + if ( usingTitleRow ) offset = 1; // Clamp toprow to existing rows @@ -604,7 +604,7 @@ if (topRow>totalRows) topRow=totalRows; - + size_t numberOfRows = screenFrame.Height() / columnDef[0].height - offset; size_t row = topRow; @@ -612,7 +612,7 @@ //Hide all rows till the one which will be drawn for ( size_t x = 0; x < row; x++ ) rows[x]->Hide(); - + //figure out which ones to draw and position them for ( size_t z = 0; z < numberOfRows; z++ ) { @@ -640,7 +640,7 @@ //hide the last rows we don't see for (size_t x = row; x < rows.GetSize(); x++ ) rows[x]->Hide(); - + if (scrollBar) { if (rows.GetSize() > numberOfRows) @@ -685,7 +685,7 @@ { return pawsWidget::OnMouseDown(button, modifiers, x, y); } - + return true; } @@ -715,10 +715,10 @@ { if ( columnDef ) delete [] columnDef; - + columnDef = new ColumnDef[ numCols ]; totalColumns = numCols; - + rowWidth = 0; columnHeight = 0; } @@ -727,19 +727,19 @@ void pawsListBox::SetColumnDef( int col, int width, int height, const char* widgetDesc ) { csRef<iDocumentSystem> xml = csPtr<iDocumentSystem>(new csTinyDocumentSystem); - + csRef<iDocument> doc= xml->CreateDocument(); doc->Parse( widgetDesc ); - + columnDef[col].width = width; columnDef[col].height = GetActualHeight(height); - columnDef[col].widgetNode = doc->GetRoot()->GetNode("widget"); + columnDef[col].widgetNode = doc->GetRoot()->GetNode("widget"); if(!columnDef[col].widgetNode) { Error1("Missing <widget> tag!"); return; } - rowWidth+=width; + rowWidth+=width; columnHeight = height; } @@ -747,7 +747,7 @@ bool pawsListBox::SelfPopulate( iDocumentNode *topNode ) { float oldScroll = scrollBar->GetCurrentValue(); - + csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); int count = 0; @@ -786,7 +786,7 @@ } } } - + scrollBar->SetCurrentValue(MIN(oldScroll, scrollBar->GetMaxValue())); return true; } @@ -826,7 +826,7 @@ // -1 because of title row. int offset = 0; - if ( usingTitleRow ) + if ( usingTitleRow ) offset = 1; int numberOfRows = screenFrame.Height() / columnDef[0].height - offset; @@ -837,7 +837,7 @@ topRow=selected; else if (selected>=topRow+numberOfRows) topRow=(selected-numberOfRows)+1; - + CalculateDrawPositions(); } @@ -862,7 +862,7 @@ } return pawsWidget::OnKeyDown(keyCode,keyChar,modifiers); -} +} int pawsListBox::GetSortedColumn() { @@ -882,7 +882,7 @@ sortColNum = colNum; ascOrder = true; - + CreateSortingArrow(sortColNum); SetSortingArrow(sortColNum, ascOrder); SortRows(); @@ -963,10 +963,10 @@ { pawsListBoxRow * rowA, * rowB; pawsWidget * cellA, * cellB; - + rowA = *((pawsListBoxRow**) void_rowA); rowB = *((pawsListBoxRow**) void_rowB); - + cellA = rowA -> GetColumn(sort_sortColNum); cellB = rowB -> GetColumn(sort_sortColNum); return sort_sortFunc(cellA, cellB) * (sort_ascOrder ? 1 : -1); @@ -977,7 +977,8 @@ pawsListBoxRow ** sortedRows; pawsListBoxRow * selectedrow; //stores the currently selected row before sorting //in order to be able to retrieve the correct position - size_t i; + int selectednew = 0; + size_t i; if (sortColNum == -1) return; @@ -1001,10 +1002,13 @@ { rows[i] = sortedRows[i]; if(sortedRows[i] == selectedrow) //check if the current row is the one which was selected - selected = i; //if so update our selected variable + selectednew = i; //if so update our selected variable } + delete [] sortedRows; - + + Select(GetSelectedRow()); //allows select to handle the new position and update gfx correctly + CalculateDrawPositions(); } @@ -1039,8 +1043,8 @@ void pawsListBox::MoveRow(int rownr,int dest) { pawsListBoxRow ** sortedRows; - int i; - + int i; + if ((size_t)rownr >= rows.GetSize() || rownr < 0 || dest < 0 || (size_t)dest >= rows.GetSize() || dest == rownr ) return; @@ -1100,7 +1104,7 @@ bool pawsListBoxRow::OnKeyDown(int keyCode, int keyChar, int modifiers) { return GetParent()->OnKeyDown(keyCode,keyChar,modifiers); -} +} bool pawsListBoxRow::OnMouseDown( int button, int modifiers, int x, int y ) @@ -1118,7 +1122,7 @@ bool pawsListBoxRow::OnDoubleClick(int button, int modifiers, int x, int y) { pawsListBox * parentBox = (pawsListBox *)parent; - + if (button != csmbWheelUp && button != csmbWheelDown) { parentBox->SendOnListAction(LISTBOX_SELECTED); @@ -1135,7 +1139,7 @@ void pawsListBoxRow::AddColumn( int column, ColumnDef* def ) { csString factory = def[column].widgetNode->GetAttributeValue("factory"); - + pawsWidget* widget = PawsManager::GetSingleton().CreateWidget( factory ); if (!widget) { @@ -1153,7 +1157,7 @@ borderW = 4; borderH = 4; } - + int offset = 0; for ( int x = 0; x < column; x++ ) offset += def[x].width; @@ -1169,27 +1173,27 @@ { // create the real title widget pawsTextBox *innerWidget = new pawsTextBox; - + innerWidget->SetName( def[column].widgetNode->GetAttributeValue("name") ); innerWidget->SetText( def[column].widgetNode->GetAttributeValue("name") ); - + csRef<iDocumentAttribute> atr = def[column].widgetNode->GetAttribute("visible"); if (atr) { csString choice = csString( atr->GetValue() ); - if ( choice == "no" ) + if ( choice == "no" ) { - innerWidget->Hide(); + innerWidget->Hide(); } } - + // create the wrapper widget - pawsListBoxTitle * title = new pawsListBoxTitle(dynamic_cast<pawsListBox*> (parent), + pawsListBoxTitle * title = new pawsListBoxTitle(dynamic_cast<pawsListBox*> (parent), column, innerWidget); AddChild(title); - + int offset = 0; - for ( int x = 0; x < column; x++ ) + for ( int x = 0; x < column; x++ ) offset+=def[x].width; title->SetRelativeFrame( offset-4, -4, def[column].width, def[column].height ); @@ -1207,11 +1211,11 @@ pawsListBoxRow * row = GetRow(rowNum); if (row == NULL) return NULL; - + pawsWidget * cell = row->GetColumn(colNum); if (cell == NULL) return NULL; - + return dynamic_cast <pawsTextBox*> (cell); } @@ -1239,7 +1243,7 @@ { pawsTextBox * textBoxA, * textBoxB; const char * textA, * textB; - + textBoxA = dynamic_cast <pawsTextBox*> (widgetA); textBoxB = dynamic_cast <pawsTextBox*> (widgetB); assert(textBoxA && textBoxB); Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-11-09 12:18:07 UTC (rev 2398) +++ trunk/src/server/adminmanager.cpp 2008-11-09 13:39:37 UTC (rev 2399) @@ -7075,7 +7075,7 @@ else //if the skill is defined as none { item->SetLockStrength(0); //we reset the skill level required to zero - item->SetLockpickSkill(-1); //and reset the required skill to none + item->SetLockpickSkill(PSSKILL_NONE); //and reset the required skill to none psserver->SendSystemInfo(me->clientnum,"The skill needed to open the lock of %s was removed",item->GetName()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-11-09 14:00:34
|
Revision: 2401 http://planeshift.svn.sourceforge.net/planeshift/?rev=2401&view=rev Author: weltall2 Date: 2008-11-09 14:00:27 +0000 (Sun, 09 Nov 2008) Log Message: ----------- little improvements and fixes to my last committed code Modified Paths: -------------- trunk/src/common/paws/pawslistbox.cpp trunk/src/server/adminmanager.cpp Modified: trunk/src/common/paws/pawslistbox.cpp =================================================================== --- trunk/src/common/paws/pawslistbox.cpp 2008-11-09 13:46:52 UTC (rev 2400) +++ trunk/src/common/paws/pawslistbox.cpp 2008-11-09 14:00:27 UTC (rev 2401) @@ -977,7 +977,6 @@ pawsListBoxRow ** sortedRows; pawsListBoxRow * selectedrow; //stores the currently selected row before sorting //in order to be able to retrieve the correct position - int selectednew = 0; size_t i; if (sortColNum == -1) @@ -987,9 +986,7 @@ sortedRows = new pawsListBoxRow*[rows.GetSize()]; for ( i=0; i < rows.GetSize(); i++) - { sortedRows[i] = rows[i]; - } selectedrow = sortedRows[selected]; //saves the corrispondence to the selected row @@ -1002,7 +999,7 @@ { rows[i] = sortedRows[i]; if(sortedRows[i] == selectedrow) //check if the current row is the one which was selected - selectednew = i; //if so update our selected variable + selected = i; //if so update our selected variable } delete [] sortedRows; Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-11-09 13:46:52 UTC (rev 2400) +++ trunk/src/server/adminmanager.cpp 2008-11-09 14:00:27 UTC (rev 2401) @@ -7083,7 +7083,7 @@ { if(data.value >= 0) //check that we didn't get a negative value { - if(item->GetLockpickSkill() >= 0) //check that there is a valid skill associated to the item + if(item->GetLockpickSkill() != PSSKILL_NONE) //check that the skill isn't none (not set) { item->SetLockStrength(data.value); //all went fine so set the skill level required to pick this item psserver->SendSystemInfo(me->clientnum,"The skill level needed to open the lock of %s is now %u",item->GetName(),data.value); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-10 01:57:32
|
Revision: 2406 http://planeshift.svn.sourceforge.net/planeshift/?rev=2406&view=rev Author: Vengeance2001 Date: 2008-11-10 01:49:39 +0000 (Mon, 10 Nov 2008) Log Message: ----------- Now the server only sends audio files to the client that the client does not already have. This increase lag (when the file must be sent) but reduces total bandwidth and lag when the client already has the file. Modified Paths: -------------- trunk/src/client/modehandler.cpp trunk/src/common/net/messages.cpp trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h Modified: trunk/src/client/modehandler.cpp =================================================================== --- trunk/src/client/modehandler.cpp 2008-11-09 23:56:56 UTC (rev 2405) +++ trunk/src/client/modehandler.cpp 2008-11-10 01:49:39 UTC (rev 2406) @@ -2120,20 +2120,40 @@ if (msg.valid) { + // TODO: Check for cached version csString fname; fname.Format("/planeshift/userdata/%s",msg.hash.GetDataSafe() ); printf("Got audio file '%s' to play.\n", msg.hash.GetDataSafe() ); - // Save sound file - if (!vfs->WriteFile(fname,msg.databuf->GetData(), msg.databuf->GetSize() )) + // Check for cached version + if (!msg.databuf.IsValid()) { - Error2("Could not write cached file '%s'.",fname.GetData()); - return; + printf("Checking if file exists locally already.\n"); + if (!vfs->Exists(fname)) // doesn't exist so we need to request it + { + printf("Requesting file from server.\n"); + psCachedFileMessage request(0,msg.hash,NULL); // cheating here to send the hash back in the filename field + request.SendMessage(); + } + else // does exist, and we're done + { + printf("Yes, it is cached already. Playing immediately.\n"); + soundmanager->StartAmbientSound(fname); + } } - - // Play sound file - soundmanager->StartAmbientSound(fname); + else + { + printf("Received file from server. Putting in cache.\n"); + // Save sound file + if (!vfs->WriteFile(fname,msg.databuf->GetData(), msg.databuf->GetSize() )) + { + Error2("Could not write cached file '%s'.",fname.GetData()); + return; + } + // Play sound file + soundmanager->StartAmbientSound(fname); + } } } Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-09 23:56:56 UTC (rev 2405) +++ trunk/src/common/net/messages.cpp 2008-11-10 01:49:39 UTC (rev 2406) @@ -7120,14 +7120,24 @@ psCachedFileMessage::psCachedFileMessage( uint32_t client, const char *pathname, iDataBuffer *contents) { // We send the hash along with it to save as the filename on the client - hash = csMD5::Encode(pathname).HexString(); + if (pathname[0] == '/') + { + hash = csMD5::Encode(pathname).HexString(); + // printf("Hashed %s to %s.\n", pathname, hash.GetData() ); + } + else + hash = pathname; - msg.AttachNew(new MsgEntry(hash.Length()+1 + contents->GetSize() + sizeof(uint32_t) )); + size_t size = contents ? contents->GetSize() : 0; + msg.AttachNew(new MsgEntry(hash.Length()+1 + size + sizeof(uint32_t) )); msg->SetType(MSGTYPE_CACHEFILE); msg->clientnum = client; msg->Add(hash); - msg->Add(contents->GetData(), (uint32_t) contents->GetSize()); + if (contents) + msg->Add(contents->GetData(), size); + else + msg->Add(size); } psCachedFileMessage::psCachedFileMessage( MsgEntry* me ) Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2008-11-09 23:56:56 UTC (rev 2405) +++ trunk/src/server/chatmanager.cpp 2008-11-10 01:49:39 UTC (rev 2406) @@ -57,219 +57,230 @@ ChatManager::ChatManager() { psserver->GetEventManager()->Subscribe(this,MSGTYPE_CHAT,REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this,MSGTYPE_CACHEFILE,REQUIRE_READY_CLIENT); } ChatManager::~ChatManager() { psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_CHAT); + psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_CACHEFILE); } void ChatManager::HandleMessage(MsgEntry *me, Client *client) { - psChatMessage msg(me); + if (me->GetType() == MSGTYPE_CHAT) + { + psChatMessage msg(me); - // Dont - if (!msg.valid) - { - Debug2(LOG_NET,me->clientnum,"Received unparsable psChatMessage from client %u.\n",me->clientnum); - return; - } + // Dont + if (!msg.valid) + { + Debug2(LOG_NET,me->clientnum,"Received unparsable psChatMessage from client %u.\n",me->clientnum); + return; + } - const char *pType = msg.GetTypeText(); + const char *pType = msg.GetTypeText(); - if (msg.iChatType != CHAT_TELL) - { - Debug4(LOG_CHAT, client->GetClientNum(), - "%s %s: %s\n", client->GetName(), - pType, (const char *) msg.sText); - } - else - { - Debug5(LOG_CHAT,client->GetClientNum(), "%s %s %s: %s\n", client->GetName(), - pType, (const char *)msg.sPerson,(const char *)msg.sText); - } + if (msg.iChatType != CHAT_TELL) + { + Debug4(LOG_CHAT, client->GetClientNum(), + "%s %s: %s\n", client->GetName(), + pType, (const char *) msg.sText); + } + else + { + Debug5(LOG_CHAT,client->GetClientNum(), "%s %s %s: %s\n", client->GetName(), + pType, (const char *)msg.sPerson,(const char *)msg.sText); + } - bool saveFlood = true; + bool saveFlood = true; - if (!client->IsMute()) - { - // Send Chat to other players - switch (msg.iChatType) - { - case CHAT_GUILD: - { - SendGuild(client, msg); - break; - } - case CHAT_GROUP: - { - SendGroup(client, msg); - break; - } - case CHAT_AUCTION: - case CHAT_SHOUT: - { - SendShout(client, msg); - break; - } - case CHAT_PET_ACTION: - { - gemNPC *pet = NULL; + if (!client->IsMute()) + { + // Send Chat to other players + switch (msg.iChatType) + { + case CHAT_GUILD: + { + SendGuild(client, msg); + break; + } + case CHAT_GROUP: + { + SendGroup(client, msg); + break; + } + case CHAT_AUCTION: + case CHAT_SHOUT: + { + SendShout(client, msg); + break; + } + case CHAT_PET_ACTION: + { + gemNPC *pet = NULL; - // Check if a specific pet's name was specified, in one of these forms: - // - /mypet Petname ... - // - /mypet Petname's ... - size_t numPets = client->GetNumPets(); - for (size_t i = 0; i < numPets; i++) - { - if ((pet = dynamic_cast <gemNPC*>(client->GetPet(i))) - && msg.sText.StartsWith(pet->GetCharacterData()->GetCharName(), true)) - { - size_t n = strlen(pet->GetCharacterData()->GetCharName()); - if (msg.sText.Length() >= n + 1 && msg.sText.GetAt(n) == ' ') - { - msg.sText.DeleteAt(0, n); - msg.sText.LTrim(); - break; - } - else if (msg.sText.Length() >= n + 3 && msg.sText.GetAt(n) == '\'' - && msg.sText.GetAt(n + 1) == 's' && msg.sText.GetAt(n + 2) == ' ') - { - msg.sText.DeleteAt(0, n); - break; - } - } - else pet = NULL; - } - // If no particular pet was specified, assume the default familiar... - if (!pet) - pet = dynamic_cast <gemNPC*>(client->GetFamiliar()); + // Check if a specific pet's name was specified, in one of these forms: + // - /mypet Petname ... + // - /mypet Petname's ... + size_t numPets = client->GetNumPets(); + for (size_t i = 0; i < numPets; i++) + { + if ((pet = dynamic_cast <gemNPC*>(client->GetPet(i))) + && msg.sText.StartsWith(pet->GetCharacterData()->GetCharName(), true)) + { + size_t n = strlen(pet->GetCharacterData()->GetCharName()); + if (msg.sText.Length() >= n + 1 && msg.sText.GetAt(n) == ' ') + { + msg.sText.DeleteAt(0, n); + msg.sText.LTrim(); + break; + } + else if (msg.sText.Length() >= n + 3 && msg.sText.GetAt(n) == '\'' + && msg.sText.GetAt(n + 1) == 's' && msg.sText.GetAt(n + 2) == ' ') + { + msg.sText.DeleteAt(0, n); + break; + } + } + else pet = NULL; + } + // If no particular pet was specified, assume the default familiar... + if (!pet) + pet = dynamic_cast <gemNPC*>(client->GetFamiliar()); - // Send the message or an appropriate error... - if (!pet) - psserver->SendSystemInfo(me->clientnum, "You have no familiar to command."); - else - SendSay(client->GetClientNum(), pet, msg, pet->GetCharacterData()->GetCharFullName()); + // Send the message or an appropriate error... + if (!pet) + psserver->SendSystemInfo(me->clientnum, "You have no familiar to command."); + else + SendSay(client->GetClientNum(), pet, msg, pet->GetCharacterData()->GetCharFullName()); - break; - } - case CHAT_SAY: - { - // Send to all if there's no NPC response or the response is public - SendSay(client->GetClientNum(), client->GetActor(), msg, client->GetName()); - break; - } - case CHAT_NPC: - { - // Only the speaker sees his successful chatting with an npc. - // This helps quests stay secret. - psChatMessage newMsg(client->GetClientNum(), client->GetName(), 0, - msg.sText, msg.iChatType, msg.translate); - newMsg.SendMessage(); - saveFlood = false; - - gemObject *target = client->GetTargetObject(); - gemNPC *targetnpc = dynamic_cast<gemNPC*>(target); - NpcResponse *resp = CheckNPCResponse(msg,client,targetnpc); - if (resp) + break; + } + case CHAT_SAY: { - SendAudioFile(client, resp->GetVoiceFile()); - resp->ExecuteScript(client, targetnpc); + // Send to all if there's no NPC response or the response is public + SendSay(client->GetClientNum(), client->GetActor(), msg, client->GetName()); + break; } - break; - } - case CHAT_TELL: - { - if ( msg.sPerson.Length() == 0 ) - { - psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); - break; - } + case CHAT_NPC: + { + // Only the speaker sees his successful chatting with an npc. + // This helps quests stay secret. + psChatMessage newMsg(client->GetClientNum(), client->GetName(), 0, + msg.sText, msg.iChatType, msg.translate); + newMsg.SendMessage(); + saveFlood = false; - Client *target = FindPlayerClient(msg.sPerson); - if (target && !target->IsSuperClient()) - { - SendTell(msg, client->GetName(), client, target); + gemObject *target = client->GetTargetObject(); + gemNPC *targetnpc = dynamic_cast<gemNPC*>(target); + NpcResponse *resp = CheckNPCResponse(msg,client,targetnpc); + if (resp) + { + SendAudioFileHash(client, resp->GetVoiceFile()); + resp->ExecuteScript(client, targetnpc); + } + break; + } + case CHAT_TELL: + { + if ( msg.sPerson.Length() == 0 ) + { + psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); + break; + } - // Save to chat history - client->GetActor()->LogMessage(client->GetActor()->GetName(), msg); - if (target->GetActor()) // this can be null if someone sends a tell to a connecting client - target->GetActor()->LogMessage(client->GetActor()->GetName(), msg); - } - else - { - psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", msg.sPerson.GetDataSafe()); - } - break; - } - case CHAT_REPORT: - { - // First thing to extract the name of the player to log - csString targetName; - int index = (int)msg.sText.FindFirst(' ', 0); - if ( index == -1 ) - targetName = msg.sText; - else - targetName = msg.sText.Slice(0, index); - targetName = NormalizeCharacterName(targetName); + Client *target = FindPlayerClient(msg.sPerson); + if (target && !target->IsSuperClient()) + { + SendTell(msg, client->GetName(), client, target); - if ( msg.sText.Length() == 0 ) - { - psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); - break; - } + // Save to chat history + client->GetActor()->LogMessage(client->GetActor()->GetName(), msg); + if (target->GetActor()) // this can be null if someone sends a tell to a connecting client + target->GetActor()->LogMessage(client->GetActor()->GetName(), msg); + } + else + { + psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", msg.sPerson.GetDataSafe()); + } + break; + } + case CHAT_REPORT: + { + // First thing to extract the name of the player to log + csString targetName; + int index = (int)msg.sText.FindFirst(' ', 0); + if ( index == -1 ) + targetName = msg.sText; + else + targetName = msg.sText.Slice(0, index); + targetName = NormalizeCharacterName(targetName); - Client * target = psserver->GetConnections()->Find(targetName); - if ( !target ) - { - psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", targetName.GetData()); - break; - } - if (target->IsSuperClient()) - { - psserver->SendSystemError(client->GetClientNum(), "Can't report NPCs."); - break; - } + if ( msg.sText.Length() == 0 ) + { + psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); + break; + } - if (!client->GetActor()->IsLoggingChat()) - { - psserver->SendSystemError(client->GetClientNum(), "%s will be logged for five minutes now.", targetName.GetData()); - psserver->SendSystemError(target->GetClientNum(), "Your last 5 minutes of chat has been reported to the GMs, logging will now continue."); - } - else - { - if (target->GetClientNum() != client->GetActor()->GetReportTargetId()) - { - psserver->SendSystemError(client->GetClientNum(), "Previous logging is still active."); - break; - } - psserver->SendSystemError(client->GetClientNum(), "Logging for another five minutes."); - } - client->GetActor()->AddChatReport(target->GetActor()); - psserver->GetEventManager()->Push(new psEndChatLoggingEvent(client->GetClientNum(), 300000)); - break; - } - case CHAT_ADVISOR: - case CHAT_ADVICE: - { - break; - } + Client * target = psserver->GetConnections()->Find(targetName); + if ( !target ) + { + psserver->SendSystemError(client->GetClientNum(), "%s is not found online.", targetName.GetData()); + break; + } + if (target->IsSuperClient()) + { + psserver->SendSystemError(client->GetClientNum(), "Can't report NPCs."); + break; + } - default: - { - Error2("Unknown Chat Type: %d\n",msg.iChatType); - break; - } - } - } - else - { - //User is muted but tries to chat anyway. Remind the user that he/she/it is muted - psserver->SendSystemInfo(client->GetClientNum(),"You can't send messages because you are muted."); - } + if (!client->GetActor()->IsLoggingChat()) + { + psserver->SendSystemError(client->GetClientNum(), "%s will be logged for five minutes now.", targetName.GetData()); + psserver->SendSystemError(target->GetClientNum(), "Your last 5 minutes of chat has been reported to the GMs, logging will now continue."); + } + else + { + if (target->GetClientNum() != client->GetActor()->GetReportTargetId()) + { + psserver->SendSystemError(client->GetClientNum(), "Previous logging is still active."); + break; + } + psserver->SendSystemError(client->GetClientNum(), "Logging for another five minutes."); + } + client->GetActor()->AddChatReport(target->GetActor()); + psserver->GetEventManager()->Push(new psEndChatLoggingEvent(client->GetClientNum(), 300000)); + break; + } + case CHAT_ADVISOR: + case CHAT_ADVICE: + { + break; + } - if (saveFlood) - client->FloodControl(msg.iChatType, msg.sText, msg.sPerson); + default: + { + Error2("Unknown Chat Type: %d\n",msg.iChatType); + break; + } + } + } + else + { + //User is muted but tries to chat anyway. Remind the user that he/she/it is muted + psserver->SendSystemInfo(client->GetClientNum(),"You can't send messages because you are muted."); + } + + if (saveFlood) + client->FloodControl(msg.iChatType, msg.sText, msg.sPerson); + } + else if (me->GetType() == MSGTYPE_CACHEFILE) // client sends back hash to request file send + { + psCachedFileMessage msg(me); + printf("Got request for file '%s'\n",msg.hash.GetDataSafe()); + SendAudioFile(client,msg.hash); + } } /// TODO: This function is guaranteed not to work atm.-Keith @@ -427,25 +438,26 @@ return CheckNPCEvent(client,msg.sText,target); // <L MONEY="0,0,0,3"></L> } -void ChatManager::SendAudioFile(Client *client, const char *voiceFile) +void ChatManager::SendAudioFileHash(Client *client, const char *voiceFile) { if (!voiceFile || voiceFile[0]==0) return; + csString timestamp; csRef<iDataBuffer> buffer; - csString timestamp; - printf("Checking cache for audio file '%s'.\n", voiceFile); + // printf("Checking cache for audio file '%s'.\n", voiceFile); // Check cache for file csRef<iDataBuffer> cache; - for (size_t i=0; i < audioFileCache.GetSize(); i++) + size_t i; + for (i=0; i < audioFileCache.GetSize(); i++) { - printf("Cached item %d: '%s'\n", i, audioFileCache[i]->key.GetDataSafe() ); + // printf("Cached item %d: '%s'\n", i, audioFileCache[i]->key.GetDataSafe() ); if (audioFileCache[i]->key == voiceFile) // found { - printf("Found in cache. Moving to front.\n"); + // printf("Found in cache. Moving to front.\n"); buffer = audioFileCache[i]->data; timestamp = audioFileCache[i]->alternate; @@ -457,9 +469,9 @@ } } - if (!buffer.IsValid()) + if (i == audioFileCache.GetSize()) // not found { - printf("File not found in cache. Loading from disk.\n"); + // printf("File not found in cache. Loading from disk.\n"); buffer = psserver->vfs->ReadFile(voiceFile); if (!buffer.IsValid()) @@ -477,23 +489,63 @@ timestamp.Append(voiceFile); + csString hash = csMD5::Encode(timestamp).HexString(); + + // printf("Caching %s to hash value: %s\n", timestamp.GetData(), hash.GetData() ); + // Add newly read file to the MRU cache - CachedData *n = new CachedData(buffer,voiceFile,timestamp); + CachedData *n = new CachedData(buffer,voiceFile,hash); audioFileCache.Insert(0,n); // We added one to the front of our list, so keep the list at no more than 100 items. if (audioFileCache.GetSize() > 100) audioFileCache.Pop(); } - psCachedFileMessage msg(client->GetClientNum(), timestamp, buffer); + // Send the file message but without the file. The client will + // check the file hash. If the client needs the file, it will reply + // back with a request for the file, which will come here + // and call SendAudioFile. + psCachedFileMessage msg(client->GetClientNum(), timestamp, NULL); msg.SendMessage(); } +void ChatManager::SendAudioFile(Client *client, const char *voiceFileHash) +{ + if (!voiceFileHash || voiceFileHash[0]==0) + return; + csRef<iDataBuffer> buffer; + csString timestamp,voiceFile; + // printf("Checking cache for audio file '%s'.\n", voiceFileHash); + // Check cache for file + csRef<iDataBuffer> cache; + for (size_t i=0; i < audioFileCache.GetSize(); i++) + { + // printf("Cached item %d: '%s'\n", i, audioFileCache[i]->key.GetDataSafe() ); + if (audioFileCache[i]->alternate == voiceFileHash) // found + { + // printf("Found in cache. Moving to front.\n"); + buffer = audioFileCache[i]->data; + timestamp = audioFileCache[i]->alternate; + voiceFile = audioFileCache[i]->key; + + psCachedFileMessage msg(client->GetClientNum(), timestamp, buffer); + msg.SendMessage(); + return; + } + } + Error2("Client requested file hash that does not exist. (%s)", voiceFileHash); +} + + + + + + /************************************************************************************************/ Modified: trunk/src/server/chatmanager.h =================================================================== --- trunk/src/server/chatmanager.h 2008-11-09 23:56:56 UTC (rev 2405) +++ trunk/src/server/chatmanager.h 2008-11-10 01:49:39 UTC (rev 2406) @@ -92,6 +92,8 @@ NpcResponse *CheckNPCResponse(psChatMessage& msg,Client *client,gemNPC * &target); /// Starts the process of sending the specified file to the client + void SendAudioFileHash(Client *client, const char *voiceFile); + /// Sends the actual file to the client if needed void SendAudioFile(Client *client, const char *voiceFile); /// If this returns true, all went well. If it returns false, the client was muted This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-12 03:39:11
|
Revision: 2412 http://planeshift.svn.sourceforge.net/planeshift/?rev=2412&view=rev Author: Vengeance2001 Date: 2008-11-12 03:39:00 +0000 (Wed, 12 Nov 2008) Log Message: ----------- Quest dialog popups are now working. To try them, update your database with this data, then go to the MaleEnki and say "greetings". You can also say "can bring you" to the Merchant. Thanks to blueCmd who gave me a good head start on getting this done. Modified Paths: -------------- trunk/src/client/gui/pawsnpcdialog.cpp trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/common/paws/pawslistbox.h trunk/src/common/paws/pawstextbox.cpp trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/database/mysql/quest_scripts.sql trunk/src/server/questmanager.cpp Modified: trunk/src/client/gui/pawsnpcdialog.cpp =================================================================== --- trunk/src/client/gui/pawsnpcdialog.cpp 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/client/gui/pawsnpcdialog.cpp 2008-11-12 03:39:00 UTC (rev 2412) @@ -32,7 +32,6 @@ #include "pawsnpcdialog.h" pawsNpcDialogWindow::pawsNpcDialogWindow() - { responseList = NULL; } @@ -47,10 +46,24 @@ void pawsNpcDialogWindow::OnListAction( pawsListBox* widget, int status ) { - if (status == LISTBOX_SELECTED) + if (status == LISTBOX_HIGHLIGHTED) { - printf( "Pressed: %p\n", widget->GetSelectedRow()->GetExtraData() ); + pawsTextBox *fld = dynamic_cast<pawsTextBox *>(widget->GetSelectedRow()->FindWidgetXMLBinding("text")); + printf( "Pressed: %s\n",fld->GetText() ); } + else if (status == LISTBOX_SELECTED) + { + pawsTextBox *fld = dynamic_cast<pawsTextBox *>(widget->GetSelectedRow()->FindWidgetXMLBinding("text")); + printf("Player chose '%s'.\n", fld->GetText() ); + pawsTextBox *trig = dynamic_cast<pawsTextBox *>(widget->GetSelectedRow()->FindWidgetXMLBinding("trig")); + printf("Player says '%s'.\n", trig->GetText() ); + + csString cmd; + cmd.Format("/tellnpc %s", trig->GetText() ); + psengine->GetCmdHandler()->Publish(cmd); + responseList->Clear(); + Hide(); + } } void pawsNpcDialogWindow::HandleMessage( MsgEntry* me ) @@ -59,7 +72,9 @@ { psDialogMenuMessage mesg(me); - printf( "Got psDialogMenuMessage\n "); + printf( "Got psDialogMenuMessage: %s\n", mesg.xml.GetDataSafe() ); + SelfPopulateXML(mesg.xml); + Show(); } } Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/common/net/messages.cpp 2008-11-12 03:39:00 UTC (rev 2412) @@ -7128,7 +7128,7 @@ else hash = pathname; - uint32_t size = contents ? contents->GetSize() : 0; + uint32_t size = contents ? (uint32_t)contents->GetSize() : 0; msg.AttachNew(new MsgEntry(hash.Length()+1 + size + sizeof(uint32_t) )); msg->SetType(MSGTYPE_CACHEFILE); @@ -7153,57 +7153,45 @@ PSF_IMPLEMENT_MSG_FACTORY(psDialogMenuMessage,MSGTYPE_DIALOG_MENU); -psDialogMenuMessage::psDialogMenuMessage(int clientnum) +psDialogMenuMessage::psDialogMenuMessage() { - this->clientnum = clientnum; valid = false; } psDialogMenuMessage::psDialogMenuMessage( MsgEntry *me ) { - while( ! msg->IsEmpty() ) - { - int32_t flags, id; - - id = msg->GetInt32(); - flags = msg->GetUInt32(); - - AddResponse( id, msg->GetStr(), flags ); - } - - this->clientnum = 0; + xml = me->GetStr(); } -void psDialogMenuMessage::AddResponse(uint32_t id, const csString &response, uint32_t flags) +void psDialogMenuMessage::AddResponse(uint32_t id, const csString& menuText, const csString& triggerText, uint32_t flags) { psDialogMenuMessage::DialogResponse new_response; - new_response.id = id; - new_response.response = response; - new_response.flags = flags; + new_response.id = id; + new_response.menuText = menuText; + new_response.triggerText = triggerText; + new_response.flags = flags; responses.Push( new_response ); } -void psDialogMenuMessage::BuildMsg() +void psDialogMenuMessage::BuildMsg(int clientnum) { - size_t size = 0; + xml = "<dlgmenu><options>"; for( size_t i = 0; i < responses.GetSize(); i++ ) - size += 9 + responses[ i ].response.Length(); - - msg.AttachNew( new MsgEntry( size ) ); - - for( size_t i = 0; i < responses.GetSize(); i++ ) { - msg->Add( responses[ i ].id ); - msg->Add( responses[ i ].flags ); - msg->Add( responses[ i ].response.GetDataSafe() ); + xml.AppendFmt("<row><text>%d. %s</text>",i+1, responses[i].menuText.GetData() ); + xml.AppendFmt("<trig>%s</trig></row>",responses[i].triggerText.GetData() ); } + xml += "</options></dlgmenu>"; + msg.AttachNew( new MsgEntry( xml.Length() + 1 ) ); msg->SetType( MSGTYPE_DIALOG_MENU ); msg->clientnum = clientnum; + msg->Add( xml ); + valid = !(msg->overrun); } @@ -7213,7 +7201,7 @@ for( size_t i = 0; i < responses.GetSize(); i++ ) { text.AppendFmt( "Menu: (%d) %s -> %s\n",responses[ i ].id, - responses[ i ].flags, responses[ i ].response.GetDataSafe() ); + responses[i].menuText.GetDataSafe(), responses[ i ].triggerText.GetDataSafe() ); } return text; Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/common/net/messages.h 2008-11-12 03:39:00 UTC (rev 2412) @@ -5082,19 +5082,15 @@ class psDialogMenuMessage : public psMessageCracker { public: - psDialogMenuMessage( int clientnum ); + csString xml; + + psDialogMenuMessage(); psDialogMenuMessage( MsgEntry* message ); - int clientnum; - PSF_DECLARE_MSG_FACTORY(); - enum - { - RESPONSE_SECRET = 0x01 - }; - void BuildMsg(); + void BuildMsg(int clientnum); /** * @brief Converts the message into human readable string. @@ -5107,11 +5103,12 @@ struct DialogResponse { uint32_t id; - csString response; + csString menuText; + csString triggerText; uint32_t flags; }; - void AddResponse( uint32_t id, const csString& response, uint32_t flags = 0x00 ); + void AddResponse( uint32_t id, const csString& menuText, const csString& triggerText, uint32_t flags = 0x00 ); csArray<DialogResponse> responses; }; Modified: trunk/src/common/paws/pawslistbox.h =================================================================== --- trunk/src/common/paws/pawslistbox.h 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/common/paws/pawslistbox.h 2008-11-12 03:39:00 UTC (rev 2412) @@ -59,7 +59,7 @@ }; -#define LISTBOX_HIGHLIGHTED 0x01 +#define LISTBOX_HIGHLIGHTED 0x01 /// Single click event #define LISTBOX_SELECTED 0x02 //----------------------------------------------------------------------------- Modified: trunk/src/common/paws/pawstextbox.cpp =================================================================== --- trunk/src/common/paws/pawstextbox.cpp 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/common/paws/pawstextbox.cpp 2008-11-12 03:39:00 UTC (rev 2412) @@ -228,6 +228,11 @@ SetText (node->GetAttributeValue("text")); return true; } + else if (node->GetContentsValue()) + { + SetText (node->GetContentsValue()); + return true; + } else return false; } Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-12 03:39:00 UTC (rev 2412) @@ -2370,12 +2370,12 @@ if( client == NULL ) return; - psDialogMenuMessage me( client->GetClientNum() ); + psDialogMenuMessage menu; for( size_t i = 0; i < counter; i++ ) - me.AddResponse( i, this->triggers[ i ].formatted ); + menu.AddResponse((uint32_t) i, this->triggers[ i ].formatted, this->triggers[i].trigger ); - me.BuildMsg(); + menu.BuildMsg(client->GetClientNum()); - me.SendMessage(); + menu.SendMessage(); } Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-12 03:39:00 UTC (rev 2412) @@ -287,7 +287,7 @@ /** * Holds the trigger menu, if it exists, for a given location in a dialog */ -class NpcDialogMenu : public csRefCount +class NpcDialogMenu { protected: struct DialogTrigger @@ -326,9 +326,8 @@ csTicks timeDelay; /// This tracks the current time delay for chat msgs in the responses, so a single script can have a sequence of things that take a while csPDelArray<ResponseOperation> script; /// list of ops in script to execute when triggered csRef<psQuestPrereqOp> prerequisite; /// prerequisite for this Response to be available + NpcDialogMenu *menu; /// List of possible player trigger replies for this response, for display to the player. - csRef<NpcDialogMenu> menu; - enum { VALID_RESPONSE, Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/server/database/mysql/quest_scripts.sql 2008-11-12 03:39:00 UTC (rev 2412) @@ -49,8 +49,11 @@ ... -P: here you +P: cannot find. P: here you +Menu: Sorry but I can't find any sandwiches. Menu: Here is a nice sandwich for you, good sir. +M: Well sandwiches are rare in these parts. Thanks anyway. + M: Many thanks, this help for my hunger.(/planeshift/data/voice/merchant/thank_you.wav) Give 1 hexa. Give Mug. Give 3 Potion of Healing. Give 5 faction merchants. @@ -79,25 +82,23 @@ # # Quest: "Male Enki Alina Quest" # -INSERT INTO quest_scripts VALUES("4","10","P: Greetings +INSERT INTO quest_scripts VALUES("4","10","P: greetings -MaleEnki: Hail! Would you like to earn a little money? +maleEnki: Hail! Would you like to earn a little money? P: No P: Yes +Menu: I am not interested in your chores old man! Menu: Cool yeah, I am totally broke. M: Well ok then. Have a good day. -M: My daughter Alina ran off with the smith and I fear they are up to no - good. - If you can find out if he really loves her, I'll pay you. - Can you do this for me? +M: My daughter Alina ran off with the smith and I fear they are up to no good. If you can find out if he really loves her, I'll pay you. Can you do this for me? P: No P: Yes +Menu: You will never find her. Menu: Ok I guess I can help you find her. M: Fair enough. I guess I'll just try to find someone else. -M: Last time I caught them upstairs above the blacksmith shop. Please hurry - up and ask her! +M: Last time I caught them upstairs above the blacksmith shop. Please hurry up and ask her! Assign Quest. @@ -133,15 +134,23 @@ # # Quest: "Male Enki Gold" # -INSERT INTO quest_scripts VALUES("5","11","P: Greetings +INSERT INTO quest_scripts VALUES("5","11","P: greetings -MaleEnki: Hello there. I'm looking for gold ore... Can you find some for me? +MaleEnki: Hello there. I'm looking for gold ore... But I need someone I can trust... +P: No. P: Yes. +Menu: Well then I am not your guy because I am chaotic neutral. Menu: You can trust your instincts with me. + +M: Chaotic neutral characters are a pain but ok, thanks for telling me. Bye. + +M: Yes, I think I will trust my instincts. Can you find gold for me? I'll gladly pay you a pittance. + P: No. P: Yes. +Menu: I am a war hero, not a grubby miner. Menu: I love pittances! I'll start right away! M: Ok I guess I'll just try to find someone else to help me. -M: Excellent. If you will bring me 5 gold ores, I will reward you handsomely! +M: Excellent. If you will bring me 5 gold ores, I will reward you. Now go! Assign Quest. Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2008-11-11 17:21:32 UTC (rev 2411) +++ trunk/src/server/questmanager.cpp 2008-11-12 03:39:00 UTC (rev 2412) @@ -568,11 +568,11 @@ return line_number; } - csRef<NpcDialogMenu> menu = new NpcDialogMenu(); + NpcDialogMenu *menu = new NpcDialogMenu(); if (!BuildMenu(block, pending_triggers, menu)) { - Error3("Could not determine triggers in script '%s', in line <%s>", + Error3("Could not determine menu triggers in script '%s', in line <%s>", mainQuest->GetName(),block.GetData()); lastError.Format("Could not determine triggers in script '%s', in line <%s>", mainQuest->GetName(),block.GetData()); @@ -879,7 +879,7 @@ return true; start += 5; // skip the actual Menu: - // Now find next P:, if any + // Now find next Menu: tag, if any end = block.Find("Menu:",start); if (end == SIZET_NOT_FOUND) end = block.Length(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-12 05:31:50
|
Revision: 2416 http://planeshift.svn.sourceforge.net/planeshift/?rev=2416&view=rev Author: Vengeance2001 Date: 2008-11-12 05:31:43 +0000 (Wed, 12 Nov 2008) Log Message: ----------- Now menu text supports $name, $race, $his, and $sir autosubstitution of variables from the player in the dialog. Changed some function names in psRaceInfo to clarify. Modified Paths: -------------- trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/psnpcdialog.cpp trunk/src/server/bulkobjects/psraceinfo.cpp trunk/src/server/bulkobjects/psraceinfo.h trunk/src/server/database/mysql/quest_scripts.sql trunk/src/server/marriagemanager.cpp trunk/src/server/workmanager.cpp Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/common/net/messages.cpp 2008-11-12 05:31:43 UTC (rev 2416) @@ -7163,7 +7163,9 @@ xml = me->GetStr(); } -void psDialogMenuMessage::AddResponse(uint32_t id, const csString& menuText, const csString& triggerText, uint32_t flags) +void psDialogMenuMessage::AddResponse(uint32_t id, const csString& menuText, const csString& triggerText, + const csString& playerName, const csString& playerRace, const csString& honorific, + const csString& possessive, uint32_t flags) { psDialogMenuMessage::DialogResponse new_response; @@ -7172,6 +7174,11 @@ new_response.triggerText = triggerText; new_response.flags = flags; + new_response.menuText.ReplaceAll("$name",playerName); + new_response.menuText.ReplaceAll("$race",playerRace); + new_response.menuText.ReplaceAll("$sir",honorific); + new_response.menuText.ReplaceAll("$his",possessive); + responses.Push( new_response ); } Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/common/net/messages.h 2008-11-12 05:31:43 UTC (rev 2416) @@ -5108,7 +5108,9 @@ uint32_t flags; }; - void AddResponse( uint32_t id, const csString& menuText, const csString& triggerText, uint32_t flags = 0x00 ); + void AddResponse( uint32_t id, const csString& menuText, const csString& triggerText, + const csString& playerName, const csString& playerRace, const csString& honorific, + const csString& possessive, uint32_t flags = 0x00 ); csArray<DialogResponse> responses; }; Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-12 05:31:43 UTC (rev 2416) @@ -51,6 +51,7 @@ #include "../npcmanager.h" #include "../adminmanager.h" #include "../netmanager.h" +#include "psraceinfo.h" #include "../iserver/idal.h" extern "C" { @@ -2373,8 +2374,13 @@ psDialogMenuMessage menu; for( size_t i = 0; i < counter; i++ ) - menu.AddResponse((uint32_t) i, this->triggers[ i ].formatted, this->triggers[i].trigger ); - + { + menu.AddResponse((uint32_t) i, this->triggers[ i ].formatted, + this->triggers[i].trigger, + client->GetName(), client->GetActor()->GetCharacterData()->GetRaceInfo()->GetRace(), + client->GetActor()->GetCharacterData()->GetRaceInfo()->GetHonorific(), + client->GetActor()->GetCharacterData()->GetRaceInfo()->GetPossessive() ); + } menu.BuildMsg(client->GetClientNum()); menu.SendMessage(); Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2008-11-12 05:31:43 UTC (rev 2416) @@ -491,7 +491,7 @@ } else if (word == "$sir") { - csString sir(player->GetCharacterData()->GetRaceInfo()->Sir()); + csString sir(player->GetCharacterData()->GetRaceInfo()->GetHonorific()); if (!response.ReplaceSubString(word,sir)) { Modified: trunk/src/server/bulkobjects/psraceinfo.cpp =================================================================== --- trunk/src/server/bulkobjects/psraceinfo.cpp 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/server/bulkobjects/psraceinfo.cpp 2008-11-12 05:31:43 UTC (rev 2416) @@ -227,7 +227,7 @@ sectorname = selectedLoc.sector_name; }; -const char* psRaceInfo::Sir() +const char* psRaceInfo::GetHonorific() { switch (gender) { @@ -240,7 +240,7 @@ } } -const char* psRaceInfo::Him() +const char* psRaceInfo::GetObjectPronoun() { switch (gender) { @@ -253,7 +253,7 @@ } } -const char* psRaceInfo::His() +const char* psRaceInfo::GetPossessive() { switch (gender) { @@ -266,7 +266,7 @@ } } -csString psRaceInfo::ReadableRaceGender() +const char *psRaceInfo::ReadableRaceGender() { switch (gender) { Modified: trunk/src/server/bulkobjects/psraceinfo.h =================================================================== --- trunk/src/server/bulkobjects/psraceinfo.h 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/server/bulkobjects/psraceinfo.h 2008-11-12 05:31:43 UTC (rev 2416) @@ -98,14 +98,14 @@ size = this->size; }; - const char* Sir(); - const char* Him(); - const char* His(); + const char *GetHonorific(); + const char *GetObjectPronoun(); + const char *GetPossessive(); - csString ReadableRaceGender(); + const char *ReadableRaceGender(); - csString GetGender() { return sex; } - csString GetRace() { return name; } + const char *GetGender() { return sex; } + const char *GetRace() { return name; } }; Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/server/database/mysql/quest_scripts.sql 2008-11-12 05:31:43 UTC (rev 2416) @@ -94,7 +94,7 @@ M: My daughter Alina ran off with the smith and I fear they are up to no good. If you can find out if he really loves her, I'll pay you. Can you do this for me? P: No P: Yes -Menu: You will never find her. Menu: Ok I guess I can help you find her. +Menu: You will never find her. Menu: $name shrugs $his shoulders and nods. M: Fair enough. I guess I'll just try to find someone else. @@ -146,7 +146,7 @@ M: Yes, I think I will trust my instincts. Can you find gold for me? I'll gladly pay you a pittance. P: No. P: Yes. -Menu: I am a war hero, not a grubby miner. Menu: I love pittances! I'll start right away! +Menu: I am a war hero, not a grubby miner. Menu: I am a $race! I love pittances! $name will start right away! M: Ok I guess I'll just try to find someone else to help me. Modified: trunk/src/server/marriagemanager.cpp =================================================================== --- trunk/src/server/marriagemanager.cpp 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/server/marriagemanager.cpp 2008-11-12 05:31:43 UTC (rev 2416) @@ -248,12 +248,12 @@ // Make sure both parties know each other if (!client->GetCharacterData()->Knows(proposedClient->GetCharacterData())) { - psserver->SendSystemResult(client->GetClientNum(), "You haven't asked %s name yet!", proposedClient->GetCharacterData()->GetRaceInfo()->His()); + psserver->SendSystemResult(client->GetClientNum(), "You haven't asked %s name yet!", proposedClient->GetCharacterData()->GetRaceInfo()->GetPossessive()); return; } if (!proposedClient->GetCharacterData()->Knows(client->GetCharacterData())) { - psserver->SendSystemResult(client->GetClientNum(), "You haven't told %s your name yet!", proposedClient->GetCharacterData()->GetRaceInfo()->Him()); + psserver->SendSystemResult(client->GetClientNum(), "You haven't told %s your name yet!", proposedClient->GetCharacterData()->GetRaceInfo()->GetObjectPronoun()); return; } Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2008-11-12 04:53:40 UTC (rev 2415) +++ trunk/src/server/workmanager.cpp 2008-11-12 05:31:43 UTC (rev 2416) @@ -3282,7 +3282,7 @@ psRaceInfo* race = that->owner->GetRaceInfo(); // Check constraint gender to player gender - if ( strcmp( race->GetGender().GetData(), param) != 0 ) + if ( strcmp( race->GetGender(), param) != 0 ) return false; return true; @@ -3296,7 +3296,7 @@ psRaceInfo* race = that->owner->GetRaceInfo(); // Check constraint race to player race - if ( strcmp( race->GetRace().GetData(), param) != 0 ) + if ( strcmp( race->GetRace(), param) != 0 ) return false; return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-18 06:35:58
|
Revision: 2442 http://planeshift.svn.sourceforge.net/planeshift/?rev=2442&view=rev Author: Vengeance2001 Date: 2008-11-18 06:35:53 +0000 (Tue, 18 Nov 2008) Log Message: ----------- Now initial triggers also work, not just ones with prior responses. Multiple initial triggers in different quest scripts are merged into a single menu for the named NPC. The menu is activated by the "talk" command on the NPC context menu now. "Talk" to the Merchant in npcroom to see a demo. Modified Paths: -------------- trunk/src/client/cmdusers.cpp trunk/src/client/gui/pawsinteractwindow.cpp trunk/src/common/net/messages.cpp trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/database/mysql/quest_scripts.sql trunk/src/server/gem.cpp trunk/src/server/gem.h trunk/src/server/psserver.h trunk/src/server/questmanager.cpp trunk/src/server/questmanager.h trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/client/cmdusers.cpp 2008-11-18 06:35:53 UTC (rev 2442) @@ -119,7 +119,7 @@ cmdsource->Subscribe("/bank", this); cmdsource->Subscribe("/introduce", this); cmdsource->Subscribe("/drop", this); - + cmdsource->Subscribe("/npcmenu", this); } psUserCommands::~psUserCommands() @@ -148,16 +148,16 @@ cmdsource->Unsubscribe("/away", this); cmdsource->Unsubscribe("/loot", this); cmdsource->Unsubscribe("/clear", this); - cmdsource->Unsubscribe("/advisor", this); - cmdsource->Unsubscribe("/help", this); + cmdsource->Unsubscribe("/advisor", this); + cmdsource->Unsubscribe("/help", this); cmdsource->Unsubscribe("/advice", this); cmdsource->Unsubscribe("/train", this); //cmdsource->Unsubscribe("/quests", this); cmdsource->Unsubscribe("/use", this); cmdsource->Unsubscribe("/dig", this); - cmdsource->Unsubscribe("/fish", this); + cmdsource->Unsubscribe("/fish", this); cmdsource->Unsubscribe("/target", this); - cmdsource->Unsubscribe("/targetcontext", this); + cmdsource->Unsubscribe("/targetcontext", this); cmdsource->Unsubscribe("/tip", this); cmdsource->Unsubscribe("/motd", this); cmdsource->Unsubscribe("/challenge", this); @@ -181,6 +181,7 @@ cmdsource->Unsubscribe("/bank", this); cmdsource->Unsubscribe("/introduce", this); cmdsource->Unsubscribe("/drop", this); + cmdsource->Unsubscribe("/npcmenu", this); @@ -289,7 +290,6 @@ return NULL; } - else if (words[0] == "/equip" || (words[0] == "/use" && words.GetCount() > 1)) { if ( words.GetCount() < 2 ) @@ -688,7 +688,6 @@ msgqueue->SendMessage(cmdmsg.msg); psengine->GetCharControl()->GetMovementManager()->StopAllMovement(); } - else if (words[0] == "/drop") { if (words.GetCount() < 3) @@ -739,7 +738,6 @@ psCmdDropMessage cmddrop(quantity, itemName, any, guard); msgqueue->SendMessage(cmddrop.msg); } - else { psUserCmdMessage cmdmsg(cmd); Modified: trunk/src/client/gui/pawsinteractwindow.cpp =================================================================== --- trunk/src/client/gui/pawsinteractwindow.cpp 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/client/gui/pawsinteractwindow.cpp 2008-11-18 06:35:53 UTC (rev 2442) @@ -344,17 +344,7 @@ } case INTERACT_NPCTALK: //speak to NPCs { - chatWindow = (pawsChatWindow*)PawsManager::GetSingleton().FindWidget("ChatWindow"); - if (!chatWindow) - return false; - Hide(); - - if (!chatWindow->IsVisible())//If the window is not visible, open it. - chatWindow->Show(); - PawsManager::GetSingleton().SetCurrentFocusedWidget( chatWindow );//Put focus on the chat - BringToTop(chatWindow); - chatWindow->NpcChat(); //Select the chat tab and give focus to input text. - + psengine->GetCmdHandler()->Execute("/npcmenu"); return true; } case INTERACT_VIEWSTATS: //Request Viewing of Stats of PET Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/common/net/messages.cpp 2008-11-18 06:35:53 UTC (rev 2442) @@ -1271,6 +1271,7 @@ command == "/challenge" || command == "/yield" || command == "/admin" || + command == "/npcmenu" || command == "/listemotes" || command == "/sit" || command == "/stand") Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-18 06:35:53 UTC (rev 2442) @@ -789,6 +789,31 @@ } } +NpcDialogMenu *NPCDialogDict::FindMenu(const char *name) +{ + return initial_popup_menus.Get(csString(name),0); +} + +void NPCDialogDict::AddMenu(const char *name, NpcDialogMenu *menu) +{ + NpcDialogMenu *found = FindMenu(name); + if (found) // merge with existing + { + // We already have a menu, so we just need to append the new dialog onto this one + for (size_t i=0; i<menu->triggers.GetSize(); i++) + { + printf("--->Merging %s into existing menu.\n", menu->triggers[i].formatted.GetDataSafe()); + found->AddTrigger(menu->triggers[i].formatted, menu->triggers[i].trigger); + } + delete menu; // delete here if we don't keep it above + } + else // add a new menu + { + initial_popup_menus.PutUnique(csString(name),menu); + } +} + + void PrintTrigger(NpcTrigger * trig) { CPrintf(CON_CMDOUTPUT ,"Trigger [%d] %s : \"%-60.60s\" %8d /", Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-18 06:35:53 UTC (rev 2442) @@ -49,6 +49,7 @@ class NpcTriggerGroupEntry; class NpcTrigger; class NpcResponse; +class NpcDialogMenu; class psSkillInfo; class gemNPC; class gemActor; @@ -69,8 +70,12 @@ csHash<NpcTrigger> trigger_by_id; BinaryRBTree<NpcResponse> responses; BinaryRBTree<csString> disallowed_words; - int dynamic_id; + /// This is a storage area for popup menus parsed during quest loading, which is done before NPCs are spawned. + csHash<NpcDialogMenu*,csString> initial_popup_menus; + + int dynamic_id; + bool LoadSynonyms(iDataConnection *db); bool LoadTriggerGroups(iDataConnection *db); bool LoadTriggers(iDataConnection *db); @@ -140,6 +145,12 @@ void DeleteTriggerResponse(NpcTrigger * trigger, int responseId); + /// Find a stored initial trigger menu with the specified NPC name + NpcDialogMenu *FindMenu(const char *name); + + /// Store an initial trigger menu with the specified NPC name + void AddMenu(const char *name, NpcDialogMenu *menu); + /** * Dump the entire dictionary */ @@ -297,10 +308,12 @@ csString trigger; }; - csArray<DialogTrigger> triggers; unsigned int counter; // ID counter + public: + csArray<DialogTrigger> triggers; + NpcDialogMenu(); void AddTrigger( const csString &formatted, const csString &trigger ); Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/database/mysql/quest_scripts.sql 2008-11-18 06:35:53 UTC (rev 2442) @@ -23,6 +23,7 @@ # Quest: "Rescue the Princess" # INSERT INTO quest_scripts VALUES("1","1","P:give me quest +Menu: Is there anyone you need saving? Merchant: Congratulations! You get to save the princess now.[Merchant bows to $playername.]I wish you luck.[As he finishes talking, you notice clouds darkening on the horizon...] @@ -31,6 +32,7 @@ ... P: done +Menu: Ok she is safe on Yavin 4 now. M: OMG you did it! I can\'t believe it. @@ -42,6 +44,7 @@ # Quest: "Sandwich Quest" # INSERT INTO quest_scripts VALUES("2","2","P: can bring you +Menu: Is there anything I can bring you? Merchant: I'm kinda hungry.. bring me a sandwich and hurry if you want a hexa and a mug for your trouble.(/planeshift/data/voice/merchant/clawatit.wav) Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/gem.cpp 2008-11-18 06:35:53 UTC (rev 2442) @@ -3530,6 +3530,16 @@ } } +void gemNPC::ShowPopupMenu(Client *client) +{ + NpcDialogMenu *menu = dict->FindMenu( GetName() ); + + if (menu) + menu->ShowMenu(client); + else + psserver->SendSystemError(client->GetClientNum(), "This NPC has nothing to say to you."); +} + csString gemNPC::GetDefaultBehavior(const csString & dfltBehaviors) { int behNum; Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/gem.h 2008-11-18 06:35:53 UTC (rev 2442) @@ -845,6 +845,7 @@ }; //----------------------------------------------------------------------------- +class NpcDialogMenu; class gemNPC : public gemActor { @@ -880,6 +881,8 @@ csPDelArray<DialogCounter> badText; + NpcDialogMenu *initial_triggers; + public: gemNPC(psCharacter *chardata, const char* factname,const char* filename, unsigned int myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); @@ -904,9 +907,8 @@ Client *GetRandomLootClient(int range); /// Used to allow a NPC to communicate to its environment - /// void NPCTalk(const csString & text); + void Say(const char *strsay,Client *who,bool saypublic,csTicks& timeDelay); - void Say(const char *strsay,Client *who,bool saypublic,csTicks& timeDelay); void AddBadText(const char *playerSaid,const char *trigger); void GetBadText(size_t first,size_t last, csStringArray& saidArray, csStringArray& trigArray); @@ -915,6 +917,7 @@ virtual void SendBehaviorMessage(const csString & str, gemObject *obj); virtual csString GetDefaultBehavior(const csString & dfltBehaviors); + void ShowPopupMenu(Client *client); virtual void SetTarget(gemObject* target) { Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/psserver.h 2008-11-18 06:35:53 UTC (rev 2442) @@ -510,6 +510,7 @@ csRef<GroupManager> groupmanager; UserManager* usermanager; ExchangeManager* exchangemanager; + EntityManager* entitymanager; csRef<iVFS> vfs; protected: @@ -517,7 +518,6 @@ ServerConsole* serverconsole; CacheManager* cachemanager; NetManager* netmanager; - EntityManager* entitymanager; AdminManager* adminmanager; psDatabase* database; psServerCharManager* charmanager; Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/questmanager.cpp 2008-11-18 06:35:53 UTC (rev 2442) @@ -523,8 +523,8 @@ psQuest *mainQuest = CacheManager::GetSingleton().GetQuestByID(quest_id); psQuest *quest = mainQuest; // Substep is main step until substep is defined. int line_number = 0; + NpcDialogMenu *pending_menu = NULL; - if (!mainQuest && quest_id > 0) { CPrintf(CON_CMDOUTPUT,"No main quest for quest_script with quest_id %d\n", quest_id); @@ -562,12 +562,6 @@ } else if (!strncasecmp(block,"Menu:",5)) // Menu: is an nice way of represention the various P: triggers { - if( last_response == NULL ) - { - Error1( "Menu without previous response - dialog menus as dialog starters are not supported" ); - return line_number; - } - NpcDialogMenu *menu = new NpcDialogMenu(); if (!BuildMenu(block, pending_triggers, menu)) @@ -579,7 +573,10 @@ return line_number; } - last_response->menu = menu; + if (last_response) // popup is part of a dialog chain + last_response->menu = menu; + else + pending_menu = menu; // save for when we know the npc } else if (strchr(block,':')) // text response { @@ -593,6 +590,11 @@ { current_npc = npc_name; next_to_last_response_id = last_response_id = -1; // When you switch NPCs, the prior responses must be reset also. + if (pending_menu) + { + dict->AddMenu(current_npc, pending_menu); + pending_menu = NULL; + } } if (!GetResponseText(block,response_text,file_path,him,her,it,them)) { @@ -1004,6 +1006,10 @@ } + + + + void QuestManager::HandleMessage(MsgEntry *me,Client *who) { if (me->GetType() == MSGTYPE_QUESTINFO) @@ -1173,3 +1179,4 @@ } return true; } + Modified: trunk/src/server/questmanager.h =================================================================== --- trunk/src/server/questmanager.h 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/questmanager.h 2008-11-18 06:35:53 UTC (rev 2442) @@ -85,6 +85,7 @@ csString& him, csString& her, csString& it, csString& them, csString& file_path); bool AddTrigger(csString& current_npc,const char *trigger, int prior_response_id,int trig_response, psQuest* quest, const psString& postfix); + void MergeTriggerMenus(NpcDialogMenu *pending_menu, const csString& current_npc); void GetNextScriptLine(psString& scr, csString& block, size_t& start, int& line_number); bool PrependPrerequisites(csString &substep_requireop, Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/usermanager.cpp 2008-11-18 06:35:53 UTC (rev 2442) @@ -310,6 +310,10 @@ { YieldDuel(client); } + else if (msg.command == "/npcmenu") + { + ShowNpcMenu(client); + } else if ( msg.command == "/die" ) { gemActor* actor = client->GetActor(); @@ -2062,6 +2066,19 @@ } +void UserManager::ShowNpcMenu(Client *client) +{ + gemNPC *npc = dynamic_cast<gemNPC*> ( client->GetTargetObject() ); + if (npc) + { + npc->ShowPopupMenu(client); + } + else + { + psserver->SendSystemError(client->GetClientNum(), "You must select an NPC first."); + } +} + void UserManager::ChallengeToDuel(psUserCmdMessage& msg,Client *client) { int clientnum = client->GetClientNum(); Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2008-11-17 21:31:56 UTC (rev 2441) +++ trunk/src/server/usermanager.h 2008-11-18 06:35:53 UTC (rev 2442) @@ -279,6 +279,11 @@ */ void GiveMOTD(int id); + /** @brief Handles a player command to show the popup dialog menu of the currently targeted NPC, if any. + * + * @param client The client that issued the command. + */ + void ShowNpcMenu(Client *client); /** @brief Handles a player command to start training with targeted entity. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-20 00:33:51
|
Revision: 2451 http://planeshift.svn.sourceforge.net/planeshift/?rev=2451&view=rev Author: Vengeance2001 Date: 2008-11-20 00:33:44 +0000 (Thu, 20 Nov 2008) Log Message: ----------- More updates for quest popup menus. Now all choices without prior responses are showing correctly. Need requirements filtering now for completed system. Modified Paths: -------------- trunk/src/client/gui/pawsnpcdialog.cpp trunk/src/server/adminmanager.cpp trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/bulkobjects/psnpcdialog.cpp trunk/src/server/gem.cpp trunk/src/server/questmanager.cpp Modified: trunk/src/client/gui/pawsnpcdialog.cpp =================================================================== --- trunk/src/client/gui/pawsnpcdialog.cpp 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/client/gui/pawsnpcdialog.cpp 2008-11-20 00:33:44 UTC (rev 2451) @@ -73,6 +73,8 @@ psDialogMenuMessage mesg(me); printf( "Got psDialogMenuMessage: %s\n", mesg.xml.GetDataSafe() ); + responseList->Clear(); + SelfPopulateXML(mesg.xml); Show(); Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/adminmanager.cpp 2008-11-20 00:33:44 UTC (rev 2451) @@ -7615,7 +7615,7 @@ { - csArray<QuestAssignment*> quests = target->GetCharacterData()->GetAssignedQuests(); + csArray<QuestAssignment*>& quests = target->GetCharacterData()->GetAssignedQuests(); for (size_t i = 0; i < quests.GetSize(); i++) { QuestAssignment *currassignment = quests.Get(i); Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-20 00:33:44 UTC (rev 2451) @@ -2391,6 +2391,20 @@ this->triggers.Push( new_trigger ); } + +void NpcDialogMenu::Add(NpcDialogMenu *add) +{ + if (!add) + return; + + for (size_t i=0; i < add->triggers.GetSize(); i++) + { + printf("Adding '%s' to menu.\n", add->triggers[i].formatted.GetData() ); + AddTrigger(add->triggers[i].formatted, add->triggers[i].trigger); + } + printf("Added %d triggers to menu.\n", add->triggers.GetSize() ); +} + void NpcDialogMenu::ShowMenu( Client *client ) { if( client == NULL ) Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-20 00:33:44 UTC (rev 2451) @@ -317,6 +317,7 @@ NpcDialogMenu(); void AddTrigger( const csString &formatted, const csString &trigger ); + void Add( NpcDialogMenu *add); void ShowMenu( Client *client ); }; Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2008-11-20 00:33:44 UTC (rev 2451) @@ -2479,9 +2479,9 @@ return NULL; } -int psCharacter::GetAssignedQuestLastResponse(uint i) +int psCharacter::GetAssignedQuestLastResponse(size_t i) { - if ((size_t) i<assigned_quests.GetSize()) + if (i<assigned_quests.GetSize()) { return assigned_quests[i]->last_response; } @@ -2511,7 +2511,7 @@ for (size_t i=0; i<assigned_quests.GetSize(); i++) { if (assigned_quests[i]->GetQuest().IsValid() && assigned_quests[i]->GetQuest()->GetID() == id && - assigned_quests[i]->status == PSQUEST_ASSIGNED) + assigned_quests[i]->status == PSQUEST_ASSIGNED && !assigned_quests[i]->GetQuest()->GetParentQuest()) { assigned_quests[i]->last_response = response; assigned_quests[i]->dirty = true; @@ -2592,7 +2592,8 @@ q->status = PSQUEST_ASSIGNED; q->lockout_end = 0; q->assigner_id = assigner_id; - q->last_response = this->lastResponse; //This should be the response given when starting this quest + //set last response to current response only if this is the top parent + q->last_response = quest->GetParentQuest() ? -1 : this->lastResponse; //This should be the response given when starting this quest // assign any skipped parent quests if (quest->GetParentQuest() && !IsQuestAssigned(quest->GetParentQuest()->GetID())) Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/bulkobjects/pscharacter.h 2008-11-20 00:33:44 UTC (rev 2451) @@ -817,7 +817,7 @@ void DiscardQuest(QuestAssignment *q, bool force = false); bool SetAssignedQuestLastResponse(psQuest *quest, int response); size_t GetNumAssignedQuests() { return assigned_quests.GetSize(); } - int GetAssignedQuestLastResponse(uint i); + int GetAssignedQuestLastResponse(size_t i); /// The last_response given by an npc to this player. int GetLastResponse() { return lastResponse; } void SetLastResponse(int response) { lastResponse=response; } @@ -831,7 +831,7 @@ bool UpdateQuestAssignments(bool force_update = false); size_t GetAssignedQuests(psQuestListMessage& quests,int cnum); - csArray<QuestAssignment*> GetAssignedQuests() { return assigned_quests; } + csArray<QuestAssignment*>& GetAssignedQuests() { return assigned_quests; } bool CheckQuestAssigned(psQuest *quest); bool CheckQuestCompleted(psQuest *quest); Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2008-11-20 00:33:44 UTC (rev 2451) @@ -349,7 +349,7 @@ bool TestedWithoutLastResponse = false; //first try with last responses of all assigned quests - for (uint q = 0; q < currentClient->GetCharacterData()->GetNumAssignedQuests(); q++) + for (size_t q = 0; q < currentClient->GetCharacterData()->GetNumAssignedQuests(); q++) { lastresponse = currentClient->GetCharacterData()->GetAssignedQuestLastResponse(q); if (lastresponse == -1) Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/gem.cpp 2008-11-20 00:33:44 UTC (rev 2451) @@ -52,6 +52,7 @@ #include "bulkobjects/psnpcdialog.h" #include "bulkobjects/pscharacter.h" #include "bulkobjects/psguildinfo.h" +#include "bulkobjects/psquest.h" #include "rpgrules/factions.h" @@ -3532,10 +3533,42 @@ void gemNPC::ShowPopupMenu(Client *client) { - NpcDialogMenu *menu = dict->FindMenu( GetName() ); + NpcResponse *resp = NULL; + NpcDialogMenu menu; + + csArray<QuestAssignment*>& quests = client->GetCharacterData()->GetAssignedQuests(); - if (menu) - menu->ShowMenu(client); + // Merge current spot in active quests first + for (size_t i=0; i < quests.GetSize(); i++) + { + psQuest *q = quests[i]->GetQuest(); + if (quests[i]->status == 'C') + { + printf("Skipping completed quest: %s\n", q->GetName() ); + continue; + } + printf("Checking quest %d: %s. ", i, q->GetName() ); + int last_response = client->GetCharacterData()->GetAssignedQuestLastResponse(i); + printf("Got last response %d\n", last_response); + + if (last_response != -1) // within a quest step + { + resp = dict->FindResponse(last_response); + menu.Add(resp->menu); + } + else + { + printf("Got last_response==-1 for quest %d.\n",i); + } + } + + // Also offer default choices in case a new quest should be started + NpcDialogMenu *npcmenu = dict->FindMenu( name ); + if (npcmenu) + menu.Add(npcmenu); + + if (menu.triggers.GetSize()) + menu.ShowMenu(client); else psserver->SendSystemError(client->GetClientNum(), "This NPC has nothing to say to you."); } Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2008-11-19 21:23:20 UTC (rev 2450) +++ trunk/src/server/questmanager.cpp 2008-11-20 00:33:44 UTC (rev 2451) @@ -584,7 +584,13 @@ block.SubString(npc_name,0,block.FindFirst(':')); // pull out name before colon if (current_npc.Find(npc_name) == 0) // if npc_name is the beginning of the current npc name, then it is a repeat { - // don't need to do anything + // Need to add this trigger menu to the generic menu for this npc if same npc follows a "..." + if (last_response_id == -1 && pending_menu) + { + dict->AddMenu(current_npc, pending_menu); + pending_menu = NULL; + } + } else // switch NPCs here { @@ -657,6 +663,7 @@ // This clears out prior responses whether there is a quest or a KA script here next_to_last_response_id = last_response_id = -1; + last_response = NULL; // This is used for popup menus substep_requireop.Free(); if (mainQuest) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-22 06:43:55
|
Revision: 2466 http://planeshift.svn.sourceforge.net/planeshift/?rev=2466&view=rev Author: Vengeance2001 Date: 2008-11-22 06:43:45 +0000 (Sat, 22 Nov 2008) Log Message: ----------- Now popup menus that originate from different quests have the names of their respective quests above each one. This is important now that we have relaxed the requirement to only have one quest active at a time per npc. Also, there is now a bold text option for any font in any widget. This bolding is used for the headings. Modified Paths: -------------- trunk/src/client/gui/pawsilluminationwindow.cpp trunk/src/common/net/messages.cpp trunk/src/common/paws/pawslistbox.cpp trunk/src/common/paws/pawslistbox.h trunk/src/common/paws/pawsprefmanager.h trunk/src/common/paws/pawstextwrap.cpp trunk/src/common/paws/pawswidget.cpp trunk/src/common/paws/pawswidget.h trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/questmanager.cpp trunk/src/server/questmanager.h Modified: trunk/src/client/gui/pawsilluminationwindow.cpp =================================================================== --- trunk/src/client/gui/pawsilluminationwindow.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/client/gui/pawsilluminationwindow.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -26,7 +26,7 @@ // PAWS INCLUDES #include "pawsilluminationwindow.h" -#include "paws/pawsprefmanager.h" // For FONT_DROPSHADOW - DrawColorWidgetText (maybe move DrawColorWidgetText to pawswidget?) +#include "paws/pawsprefmanager.h" // For FONT_STYLE_DROPSHADOW - DrawColorWidgetText (maybe move DrawColorWidgetText to pawswidget?) #include "paws/pawstextbox.h" #include "paws/pawsmanager.h" #include "net/messages.h" @@ -300,7 +300,7 @@ csRef<iFont> font = GetFont(); int style = GetFontStyle(); - if (style & FONT_DROPSHADOW) + if (style & FONT_STYLE_DROPSHADOW) graphics2D->Write( font, x+2, y+2, GetFontShadowColour(), -1, text ); graphics2D->Write( font, x, y, color, -1, text); Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/common/net/messages.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -7190,9 +7190,19 @@ { xml = "<dlgmenu><options>"; + int counter=1; for( size_t i = 0; i < responses.GetSize(); i++ ) { - xml.AppendFmt("<row><text>%d. %s</text>",i+1, responses[i].menuText.GetData() ); + csString choice = responses[i].menuText.GetData(); + if (choice.GetAt(0) == 'h' && choice.GetAt(1) == ':') // heading tag + { + choice.DeleteAt(0,2); // take out tag + xml.AppendFmt("<row heading=\"1\"><text>%s</text>", choice.GetData() ); + } + else + { + xml.AppendFmt("<row><text>%d. %s</text>",counter++, responses[i].menuText.GetData() ); + } xml.AppendFmt("<trig>%s</trig></row>",responses[i].triggerText.GetData() ); } xml += "</options></dlgmenu>"; Modified: trunk/src/common/paws/pawslistbox.cpp =================================================================== --- trunk/src/common/paws/pawslistbox.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/common/paws/pawslistbox.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -761,8 +761,13 @@ if ( strcmp( node->GetValue(), xmlbinding_row ) == 0 ) { pawsListBoxRow *row = NewRow(count++); + if (node->GetAttributeValueAsBool("heading") == true) + { + row->SetHeading(true); + } int x; for (x=0; x<totalColumns; x++) + { if (columnDef[x].xmlbinding.Length() > 0) { pawsWidget *columnwidget = row->GetColumn(x); @@ -784,6 +789,7 @@ return false; } } + } } } @@ -812,6 +818,14 @@ if (selected>0) { selected--; + if (GetSelectedRow()->IsHeading()) + { + if (selected > 0) + selected--; + else + selected++; // go back where we were if nothing is above the heading + } + Select(GetSelectedRow()); } } @@ -820,6 +834,13 @@ if (selected<totalRows-1) { selected++; + if (GetSelectedRow()->IsHeading()) + { + if (selected < totalRows-1) + selected++; + else + selected--; // go back where we were if nothing is above the heading + } Select(GetSelectedRow()); } } @@ -1095,6 +1116,7 @@ pawsListBoxRow::pawsListBoxRow() { + isHeading = false; } @@ -1106,6 +1128,10 @@ bool pawsListBoxRow::OnMouseDown( int button, int modifiers, int x, int y ) { + // Heading rows are not clickable or selectable + if (isHeading) + return true; + pawsListBox* parentBox = (pawsListBox*)parent; // mouse wheel @@ -1118,6 +1144,10 @@ bool pawsListBoxRow::OnDoubleClick(int button, int modifiers, int x, int y) { + // Heading rows are not clickable or selectable + if (isHeading) + return false; + pawsListBox * parentBox = (pawsListBox *)parent; if (button != csmbWheelUp && button != csmbWheelDown) @@ -1198,6 +1228,16 @@ title->SetID(column); } +void pawsListBoxRow::SetHeading(bool flag) +{ + isHeading = flag; + + for (size_t i=0; i<columns.GetSize(); i++) + { + columns[i]->SetFontStyle(flag ? FONT_STYLE_BOLD : DEFAULT_FONT_STYLE); + } +} + int pawsListBox::GetRowCount() { return (int)rows.GetSize(); Modified: trunk/src/common/paws/pawslistbox.h =================================================================== --- trunk/src/common/paws/pawslistbox.h 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/common/paws/pawslistbox.h 2008-11-22 06:43:45 UTC (rev 2466) @@ -89,17 +89,20 @@ bool OnKeyDown(int keyCode, int keyChar, int modifiers); - /** - * A single mouse click (left button) highlights the row - */ + /// A single mouse click (left button) highlights the row bool OnMouseDown(int button, int modifiers, int x, int y ); - /** - * A double click selects the row. - */ + /// A double click selects the row. bool OnDoubleClick(int button, int modifiers, int x, int y); + /// Heading rows exist within the list but are not clickable + void SetHeading(bool flag); + + bool IsHeading() { return isHeading; } private: + /// Store whether this row should be a heading or not + bool isHeading; + /// Store a list of columns for easy access. csArray<pawsWidget*> columns; Modified: trunk/src/common/paws/pawsprefmanager.h =================================================================== --- trunk/src/common/paws/pawsprefmanager.h 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/common/paws/pawsprefmanager.h 2008-11-22 06:43:45 UTC (rev 2466) @@ -32,13 +32,11 @@ struct iGraphics2D; struct iFont; struct BorderDefinition; - class PawsManager; + #define BORDER_COLOURS 5 -#define DEFAULT_FONT_SIZE 12 -#define DFFAULT_FONT_STYLE 0 -#define FONT_DROPSHADOW 1 + /** Holds/Loads the prefs from a pref file. */ class pawsPrefManager Modified: trunk/src/common/paws/pawstextwrap.cpp =================================================================== --- trunk/src/common/paws/pawstextwrap.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/common/paws/pawstextwrap.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -512,7 +512,7 @@ int a = (int) (255 - (parent->GetMinAlpha() + (parent->GetMaxAlpha()-parent->GetMinAlpha()) * parent->GetFadeVal() * 0.010)); int r, g, b; - if (style & FONT_DROPSHADOW) + if (style & FONT_STYLE_DROPSHADOW) { graphics2D->GetRGB(GetFontShadowColour(), r, g, b); graphics2D->Write( font, (int) x+2, (int) y+2, graphics2D->FindRGB(r, g, b, a), -1, text ); @@ -522,7 +522,7 @@ } else { - if (style & FONT_DROPSHADOW) + if (style & FONT_STYLE_DROPSHADOW) graphics2D->Write( font, (int) x+2, (int) y+2, GetFontShadowColour(), -1, text ); graphics2D->Write( font, (int) x, (int) y, fg, -1, text); Modified: trunk/src/common/paws/pawswidget.cpp =================================================================== --- trunk/src/common/paws/pawswidget.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/common/paws/pawswidget.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -438,7 +438,7 @@ defaultFontShadowColour = graphics2D->FindRGB( r, g, b ); if (fontAttribute->GetAttributeValueAsBool( "shadow" )) - fontStyle |= FONT_DROPSHADOW; + fontStyle |= FONT_STYLE_DROPSHADOW; } // Get the frame for this widget. @@ -1093,20 +1093,28 @@ int a = (int) (255 - (parent->GetMinAlpha() + (parent->GetMaxAlpha()-parent->GetMinAlpha()) * parent->GetFadeVal() * 0.010)); int r, g, b; - if (style & FONT_DROPSHADOW) + if (style & FONT_STYLE_DROPSHADOW) { graphics2D->GetRGB(GetFontShadowColour(), r, g, b); graphics2D->Write( font, x+2, y+2, graphics2D->FindRGB(r, g, b, a), -1, text ); } graphics2D->GetRGB(GetFontColour(), r, g, b); graphics2D->Write( font, x, y, graphics2D->FindRGB(r, g, b, a), -1, text); + if (style & FONT_STYLE_BOLD) + { + graphics2D->Write( font, x+1, y, graphics2D->FindRGB(r, g, b, a), -1, text); + } } else { - if (style & FONT_DROPSHADOW) + if (style & FONT_STYLE_DROPSHADOW) graphics2D->Write( font, x+2, y+2, GetFontShadowColour(), -1, text ); graphics2D->Write( font, x, y, GetFontColour(), -1, text); + if (style & FONT_STYLE_BOLD) + { + graphics2D->Write( font, x+1, y, GetFontColour(), -1, text); + } } } @@ -2434,14 +2442,19 @@ int pawsWidget::GetFontStyle() { - if (myFont) + if (fontStyle) return fontStyle; else if (parent) return parent->GetFontStyle(); else - return DFFAULT_FONT_STYLE; + return DEFAULT_FONT_STYLE; } +void pawsWidget::SetFontStyle(int style) +{ + fontStyle = style; +} + bool pawsWidget::SelfPopulateXML( const char *xmlstr ) { csRef<iDocumentSystem> xml = csPtr<iDocumentSystem>(new csTinyDocumentSystem); Modified: trunk/src/common/paws/pawswidget.h =================================================================== --- trunk/src/common/paws/pawswidget.h 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/common/paws/pawswidget.h 2008-11-22 06:43:45 UTC (rev 2466) @@ -77,8 +77,13 @@ #define BORDER_ETCHED (BORDER_REVERSED|BORDER_RAISED) -#define TEXT_DROPSHADOW 1 +#define DEFAULT_FONT_SIZE 12 +#define DEFAULT_FONT_STYLE 0 +#define FONT_STYLE_DROPSHADOW 1 +#define FONT_STYLE_BOLD 2 + + enum PAWS_WIDGET_SCRIPT_EVENTS { PW_SCRIPT_EVENT_SHOW = 0, @@ -1141,10 +1146,14 @@ /** Gets the current font style. * @return fontStyle if myFont, if not then the parent's, - * or if it doesn't have a parent it returns DFFAULT_FONT_STYLE. + * or if it doesn't have a parent it returns DEFAULT_FONT_STYLE. */ int GetFontStyle(); + /** Sets the current font style. + */ + void SetFontStyle(int style); + /** Determines if the coordinates are within this widget. Typically the border or screenFrame. * @param x The x screen position. * @param y The y screen position. Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/server/bulkobjects/dictionary.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -2375,14 +2375,15 @@ counter = 0; } -void NpcDialogMenu::AddTrigger(const csString &formatted, const csString &trigger, psQuestPrereqOp *script) +void NpcDialogMenu::AddTrigger(const csString &menuText, const csString &trigger, psQuest *quest, psQuestPrereqOp *script) { NpcDialogMenu::DialogTrigger new_trigger; - new_trigger.formatted = formatted; + new_trigger.menuText = menuText; new_trigger.trigger = trigger; + new_trigger.quest = quest; new_trigger.prerequisite = script; - new_trigger.triggerID = counter++; + new_trigger.triggerID = counter++; this->triggers.Push( new_trigger ); } @@ -2395,8 +2396,8 @@ for (size_t i=0; i < add->triggers.GetSize(); i++) { - printf("Adding '%s' to menu.\n", add->triggers[i].formatted.GetData() ); - AddTrigger(add->triggers[i].formatted, add->triggers[i].trigger, add->triggers[i].prerequisite); + printf("Adding '%s' to menu.\n", add->triggers[i].menuText.GetData() ); + AddTrigger(add->triggers[i].menuText, add->triggers[i].trigger, add->triggers[i].quest, add->triggers[i].prerequisite); } printf("Added %d triggers to menu.\n", add->triggers.GetSize() ); } @@ -2408,6 +2409,8 @@ psDialogMenuMessage menu; + csString currentQuest; + for (size_t i=0; i < counter; i++ ) { csString prereq; @@ -2433,8 +2436,18 @@ } } + // Check to see about inserting a quest heading + if (!(currentQuest == (triggers[i].quest ? triggers[i].quest->GetName() : "(Unknown)"))) + { + currentQuest = triggers[i].quest ? triggers[i].quest->GetName() : "(Unknown)"; + csString temp = "h:", temptrig = "heading"; + temp += currentQuest; + menu.AddResponse((uint32_t) i, temp, temptrig, + "", "", "", "" ); + } + menu.AddResponse((uint32_t) i, - triggers[ i ].formatted, + triggers[i].menuText, triggers[i].trigger, client->GetName(), client->GetCharacterData()->GetRaceInfo()->GetRace(), client->GetCharacterData()->GetRaceInfo()->GetHonorific(), Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/server/bulkobjects/dictionary.h 2008-11-22 06:43:45 UTC (rev 2466) @@ -304,8 +304,9 @@ struct DialogTrigger { unsigned int triggerID; - csString formatted; + csString menuText; csString trigger; + psQuest *quest; csRef<psQuestPrereqOp> prerequisite; }; @@ -317,7 +318,7 @@ NpcDialogMenu(); - void AddTrigger( const csString &formatted, const csString &trigger, psQuestPrereqOp *script=NULL ); + void AddTrigger( const csString &menuText, const csString &trigger, psQuest *quest, psQuestPrereqOp *script=NULL ); void Add( NpcDialogMenu *add); void ShowMenu( Client *client ); void SetPrerequisiteScript(psQuestPrereqOp *script); Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -2561,6 +2561,8 @@ { CS_ASSERT( quest ); // Must not be NULL + // Shame on Kayden for cutting and pasting those code from CheckQuestAvailable instead of making a distinct function for it. :) + /********************************* //first check if there is not another assigned quest with the same NPC for (size_t i=0; i<assigned_quests.GetSize(); i++) { @@ -2575,6 +2577,7 @@ return false; // Cannot have multiple quests from the same guy } } + ********************/ QuestAssignment *q = IsQuestAssigned(quest->GetID() ); if (!q) // make new entry if needed, reuse if old @@ -2767,6 +2770,7 @@ //Since the quest is not assigned, this conversation will lead to starting the quest. //Check all assigned quests, to make sure there is no other quest already started by this NPC + /***** for (size_t i=0; i<assigned_quests.GetSize(); i++) { if (assigned_quests[i]->GetQuest().IsValid() && assigned_quests[i]->assigner_id == assigner_id && @@ -2783,6 +2787,7 @@ return false; // Cannot have multiple quests from the same guy } } + ********/ if (q) //then quest in assigned list, but not PSQUEST_ASSIGNED { Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/server/questmanager.cpp 2008-11-22 06:43:45 UTC (rev 2466) @@ -565,7 +565,7 @@ { NpcDialogMenu *menu = new NpcDialogMenu(); - if (!BuildMenu(block, pending_triggers, menu)) + if (!BuildMenu(block, pending_triggers, mainQuest, menu)) { Error3("Could not determine menu triggers in script '%s', in line <%s>", mainQuest->GetName(),block.GetData()); @@ -894,7 +894,7 @@ return true; } -bool QuestManager::BuildMenu(const csString& block,const csStringArray& list, NpcDialogMenu *menu) +bool QuestManager::BuildMenu(const csString& block,const csStringArray& list, psQuest *quest, NpcDialogMenu *menu) { size_t start=0, end, counter = 0; csString response; @@ -914,7 +914,7 @@ block.SubString(response,start,end-start); response.Trim(); - menu->AddTrigger( response, list[ counter++ ] ); + menu->AddTrigger( response, list[ counter++ ], quest ); start = end; // Start at next Menu: or exit loop } Modified: trunk/src/server/questmanager.h =================================================================== --- trunk/src/server/questmanager.h 2008-11-22 01:45:06 UTC (rev 2465) +++ trunk/src/server/questmanager.h 2008-11-22 06:43:45 UTC (rev 2466) @@ -74,7 +74,7 @@ csString& him, csString& her, csString& it, csString& them); bool BuildTriggerList(csString& block,csStringArray& list); - bool BuildMenu(const csString& block,const csStringArray& list, NpcDialogMenu *menu); + bool BuildMenu(const csString& block,const csStringArray& list, psQuest *quest, NpcDialogMenu *menu); int GetNPCFromBlock(WordArray words,csString& current_npc); bool ParseItemList(const csString & input, csString & parsedItemList); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-22 17:21:27
|
Revision: 2470 http://planeshift.svn.sourceforge.net/planeshift/?rev=2470&view=rev Author: Vengeance2001 Date: 2008-11-22 17:21:24 +0000 (Sat, 22 Nov 2008) Log Message: ----------- Added functor templates for net message callback support. This is how ALL net msgtype subscriptions should be done in the future. I will work on backporting the existing ones over the next day or so. See authentserver for an example of how the subscriptions are done now. Modified Paths: -------------- trunk/src/common/net/msghandler.cpp trunk/src/common/net/msghandler.h trunk/src/server/authentserver.cpp trunk/src/server/authentserver.h Modified: trunk/src/common/net/msghandler.cpp =================================================================== --- trunk/src/common/net/msghandler.cpp 2008-11-22 16:10:24 UTC (rev 2469) +++ trunk/src/common/net/msghandler.cpp 2008-11-22 17:21:24 UTC (rev 2470) @@ -67,7 +67,12 @@ Client *client; me->Reset(); if (subscribers[mtype][x]->subscriber->Verify(me,subscribers[mtype][x]->flags,client)) - subscribers[mtype][x]->subscriber->HandleMessage(me,client); + { + if (subscribers[mtype][x]->callback) + subscribers[mtype][x]->callback->Call(me,client); + else + subscribers[mtype][x]->subscriber->HandleMessage(me,client); + } handled = true; } @@ -83,6 +88,7 @@ Subscription* p = new Subscription; p->subscriber = subscriber; + p->callback = NULL; p->type = type; p->flags = flags; @@ -95,6 +101,28 @@ return true; } +bool MsgHandler::Subscribe(iNetSubscriber *subscriber, MsgtypeCallback *callback, msgtype type,uint32_t flags) +{ + Subscription* p = new Subscription; + + p->subscriber = subscriber; + p->callback = callback; + p->type = type; + p->flags = flags; + + CS::Threading::RecursiveMutexScopedLock lock(mutex); + if ( IsSubscribed(p) ) + { + if (p->callback) + delete p->callback; + delete p; + } + else + subscribers[type].Push(p); + + return true; +} + bool MsgHandler::Unsubscribe(iNetSubscriber *subscriber, msgtype type) { CS::Threading::RecursiveMutexScopedLock lock(mutex); Modified: trunk/src/common/net/msghandler.h =================================================================== --- trunk/src/common/net/msghandler.h 2008-11-22 16:10:24 UTC (rev 2469) +++ trunk/src/common/net/msghandler.h 2008-11-22 17:21:24 UTC (rev 2470) @@ -29,10 +29,51 @@ // forward decls struct iNetSubscriber; class NetBase; +class Client; #define MAX_MESSAGE_TYPES 255 // MSGTYPE enumeration in messages.h has less types than this -// This little struct tracks who is interested in what. +/// Functor base class for direct callbacks on Subscriptions +class MsgtypeCallback +{ +public: + virtual void operator()(MsgEntry *message, Client *client) = 0; // call using operator + virtual void Call(MsgEntry *message, Client *client) = 0; // call using function +}; + +template <class Manager> +class NetMessageCallback : public MsgtypeCallback +{ + private: + void (Manager::*funcptr)(MsgEntry *message, Client *client); // pointer to member function + Manager *thisPtr; // pointer to object + + public: + + // constructor - takes pointer to an object and pointer to a member and stores + // them in two private variables + NetMessageCallback(Manager *myObject, void(Manager::*fpt)(MsgEntry *message, Client *client)) + { + thisPtr = myObject; + funcptr = fpt; + } + + // override operator "()" + virtual void operator()(MsgEntry *message, Client *client) + { + (*thisPtr.*funcptr)(message,client); + } + + // override function "Call" + virtual void Call(MsgEntry *message, Client *client) + { + (*thisPtr.*funcptr)(message,client); + } +}; + + + +/// This little struct tracks who is interested in what. struct Subscription { /// type of the messages this listener listens to @@ -43,11 +84,13 @@ /// pointer to the subscriber iNetSubscriber *subscriber; + + /// pointer to functor class callback as alternative to iNetSubscriber + MsgtypeCallback *callback; }; -/** - * This class handles the incoming network packets - */ + +/// This class handles the incoming network packets class MsgHandler : public csRefCount { public: @@ -61,6 +104,7 @@ * with this function */ virtual bool Subscribe(iNetSubscriber *subscriber, msgtype type, uint32_t flags=0); + virtual bool Subscribe(iNetSubscriber *subscriber, MsgtypeCallback *callback, msgtype type, uint32_t flags=0); /// Remove subscriber from list virtual bool Unsubscribe(iNetSubscriber *subscriber, msgtype type); Modified: trunk/src/server/authentserver.cpp =================================================================== --- trunk/src/server/authentserver.cpp 2008-11-22 16:10:24 UTC (rev 2469) +++ trunk/src/server/authentserver.cpp 2008-11-22 17:21:24 UTC (rev 2470) @@ -82,13 +82,11 @@ guildmanager = gm; msgstringsmessage = NULL; - psserver->GetEventManager()->Subscribe(this,MSGTYPE_PREAUTHENTICATE,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_AUTHENTICATE,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_DISCONNECT,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_AUTHCHARACTER,REQUIRE_ANY_CLIENT); - psserver->GetEventManager()->Subscribe(this,MSGTYPE_SYSTEM,REQUIRE_ANY_CLIENT); // Handle the heartbeat from the client - psserver->GetEventManager()->Subscribe(this,MSGTYPE_CLIENTSTATUS,REQUIRE_ANY_CLIENT); // Handle the heartbeat from the client - psserver->GetEventManager()->Subscribe(this,MSGTYPE_HEART_BEAT,REQUIRE_ANY_CLIENT); // Handle the heartbeat from the client + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandlePreAuthent),MSGTYPE_PREAUTHENTICATE,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleAuthent),MSGTYPE_AUTHENTICATE,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleDisconnect),MSGTYPE_DISCONNECT,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleAuthCharacter),MSGTYPE_AUTHCHARACTER,REQUIRE_ANY_CLIENT); + psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<psAuthenticationServer>(this,&psAuthenticationServer::HandleStatusUpdate),MSGTYPE_CLIENTSTATUS,REQUIRE_ANY_CLIENT); } psAuthenticationServer::~psAuthenticationServer() @@ -99,7 +97,6 @@ psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_AUTHENTICATE); psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_DISCONNECT); psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_AUTHCHARACTER); - psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_SYSTEM); psserver->GetEventManager()->Unsubscribe(this,MSGTYPE_CLIENTSTATUS); } if (msgstringsmessage) @@ -108,45 +105,11 @@ void psAuthenticationServer::HandleMessage(MsgEntry *me,Client *client) { - if (me == NULL) - { - Bug1("No Message Entity Found"); - return; - } - - switch (me->GetType()) - { - case MSGTYPE_AUTHCHARACTER: - HandleAuthCharacter( me ); - break; - - case MSGTYPE_AUTHENTICATE: - HandleAuthent(me); - break; - - case MSGTYPE_PREAUTHENTICATE: - HandlePreAuthent(me); - break; - - case MSGTYPE_DISCONNECT: - HandleDisconnect(me, "Your client has disconnected. If you are seeing this message a connection error has likely occurred."); - break; - - case MSGTYPE_CLIENTSTATUS: - HandleStatusUpdate(me, client); - break; - } + // required for backward compatibility with pre-functor days but not used here } -void psAuthenticationServer::HandleAuthCharacter( MsgEntry* me ) +void psAuthenticationServer::HandleAuthCharacter( MsgEntry* me, Client *client ) { - Client *client = clients->FindAny(me->clientnum); - if (!client) - { - Bug2("Couldn't find client %d?!?",me->clientnum); - return; - } - psCharacterPickerMessage charpick( me ); if (!charpick.valid) { @@ -230,7 +193,7 @@ } -void psAuthenticationServer::HandlePreAuthent(MsgEntry *me) +void psAuthenticationServer::HandlePreAuthent(MsgEntry *me, Client *notused) { psPreAuthenticationMessage msg(me); if (!msg.valid) @@ -246,7 +209,7 @@ reply.SendMessage(); } -void psAuthenticationServer::HandleAuthent(MsgEntry *me) +void psAuthenticationServer::HandleAuthent(MsgEntry *me, Client *notused) { csTicks start = csGetTicks(); @@ -539,11 +502,9 @@ psserver->GetLogCSV()->Write(CSV_AUTHENT, status); } -void psAuthenticationServer::HandleDisconnect(MsgEntry* me,const char *msg) +void psAuthenticationServer::HandleDisconnect(MsgEntry* me,Client *client) { psDisconnectMessage mesg(me); - - Client *client = clients->FindAny(me->clientnum); // Check if this client is allowed to disconnect or if the // zombie state should be set @@ -556,7 +517,7 @@ } else { - psserver->RemovePlayer(me->clientnum,msg); + psserver->RemovePlayer(me->clientnum,"Your client has disconnected. If you are seeing this message a connection error has likely occurred."); } } Modified: trunk/src/server/authentserver.h =================================================================== --- trunk/src/server/authentserver.h 2008-11-22 16:10:24 UTC (rev 2469) +++ trunk/src/server/authentserver.h 2008-11-22 17:21:24 UTC (rev 2470) @@ -171,10 +171,10 @@ * @param me: Is a message entry that contains the authenticate message. * @see psAuthMessageApproved */ - void HandleAuthent(MsgEntry *me); + void HandleAuthent(MsgEntry *me, Client *notused); /* This just questsions a random number (clientnum) from server * It is used for authenticating*/ - void HandlePreAuthent(MsgEntry *me); + void HandlePreAuthent(MsgEntry *me, Client *notused); /** Handles a disconnect message from the message queue. * This will remove the player from the server using @@ -183,12 +183,12 @@ * @param me: Is the disconnect message that was recieved. * @param msg: Is the reason for the disconnect. */ - void HandleDisconnect(MsgEntry* me,const char *msg); + void HandleDisconnect(MsgEntry* me,Client *notused); /** Handles a message where a client picks his character to play with. * Can remove the player using psServer::RemovePlayer if invalid. */ - void HandleAuthCharacter(MsgEntry* me); + void HandleAuthCharacter(MsgEntry* me, Client *notused); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-23 08:05:26
|
Revision: 2479 http://planeshift.svn.sourceforge.net/planeshift/?rev=2479&view=rev Author: Vengeance2001 Date: 2008-11-23 08:05:21 +0000 (Sun, 23 Nov 2008) Log Message: ----------- Now chat bubbles and the chat window show the nicer popup menu text even though the raw trigger text is sent to the server. This means separating out what is displayed from what is sent, so there is now special handling in several places for these two types. CHAT_NPC is for what goes back and forth, while CHAT_NPCINTERNAL is just for client self-display purposes. Modified Paths: -------------- trunk/src/client/chatbubbles.cpp trunk/src/client/gui/chatwindow.cpp trunk/src/client/gui/pawsnpcdialog.cpp trunk/src/common/net/messages.h trunk/src/server/chatmanager.cpp Modified: trunk/src/client/chatbubbles.cpp =================================================================== --- trunk/src/client/chatbubbles.cpp 2008-11-23 06:02:09 UTC (rev 2478) +++ trunk/src/client/chatbubbles.cpp 2008-11-23 08:05:21 UTC (rev 2479) @@ -156,7 +156,7 @@ else if (type == "my") chat.chatType = CHATBUBBLE_MY; else if (type == "npc") - chat.chatType = CHAT_NPC; + chat.chatType = CHAT_NPCINTERNAL; // /tellnpc messages are now ignored and only /tellnpcinternal messages are displayed. These are normally sent in pairs. else if (type == "npc_me") chat.chatType = CHAT_NPC_ME; else if (type == "npc_my") @@ -277,7 +277,7 @@ } //we have to manage this separately as sPerson in this case holds the destination in place of the origin - if(chatMsg.iChatType == CHAT_TELLSELF) + if (chatMsg.iChatType == CHAT_TELLSELF || chatMsg.iChatType == CHAT_NPCINTERNAL) chatMsg.sPerson = psengine->GetCelClient()->GetMainPlayer()->GetName(); // Get the first name of the person (needed for NPCs with both the first and the last name) Modified: trunk/src/client/gui/chatwindow.cpp =================================================================== --- trunk/src/client/gui/chatwindow.cpp 2008-11-23 06:02:09 UTC (rev 2478) +++ trunk/src/client/gui/chatwindow.cpp 2008-11-23 08:05:21 UTC (rev 2479) @@ -524,6 +524,15 @@ break; } } + else if (words[0] == "/tellnpcinternal") + { + pPerson = psengine->GetCelClient()->GetMainPlayer()->GetName(); + int space = pPerson.FindFirst(' '); + if (space != SIZET_NOT_FOUND) + pPerson.DeleteAt(space,pPerson.Length()-space); + words.GetTail(1, text); + chattype = CHAT_NPCINTERNAL; + } else if (words[0] == "/tellnpc") { pPerson.Clear(); @@ -807,7 +816,10 @@ } psChatMessage chat(0, pPerson.GetDataSafe(), 0, text.GetDataSafe(), chattype, false); - msgqueue->SendMessage(chat.msg); + if (chattype != CHAT_NPCINTERNAL) + msgqueue->SendMessage(chat.msg); // Send all chat msgs to server... + else + msgqueue->Publish(chat.msg); // ...except for the display only ones. return NULL; } @@ -1242,7 +1254,7 @@ return; } -void pawsChatWindow::HandleMessage (MsgEntry *me) +void pawsChatWindow::HandleMessage(MsgEntry *me) { bool sendAway = false; bool flashEnabled = true; @@ -1372,7 +1384,8 @@ break; } - case CHAT_NPC: + case CHAT_NPCINTERNAL: + case CHAT_NPC: { buff.Format(PawsManager::GetSingleton().Translate("%s says: %s"), (const char *)msg.sPerson, (const char *)msg.sText); @@ -1579,6 +1592,7 @@ cmdsource->Subscribe("/guild",this); cmdsource->Subscribe("/group",this); cmdsource->Subscribe("/tellnpc",this); + cmdsource->Subscribe("/tellnpcinternal",this); cmdsource->Subscribe("/me",this); cmdsource->Subscribe("/my",this); @@ -1804,6 +1818,14 @@ // Insert the command into the history chatHistory->Insert(textToSend); + + // Now special handling for showing /tellnpc commands locally, since these are not reflected to the client from the server anymore + if (textToSend.StartsWith("/tellnpc")) + { + textToSend.Insert(8,"internal"); + cmdsource->Publish(textToSend); + } + currLine.Free(); // Set to NULL } } @@ -2229,6 +2251,7 @@ case CHAT_NPC_ME: case CHAT_NPC_MY: case CHAT_NPC_NARRATE: + case CHAT_NPCINTERNAL: toMain = settings.npcIncluded; flashMain &= currentTab != npcText; ChatOutput(npcText, s.GetDataSafe(), colour, flashEnabled && !toMain && (settings.npcFlashing || (hasCharName && settings.npccFlashing)), "NPC Button"); Modified: trunk/src/client/gui/pawsnpcdialog.cpp =================================================================== --- trunk/src/client/gui/pawsnpcdialog.cpp 2008-11-23 06:02:09 UTC (rev 2478) +++ trunk/src/client/gui/pawsnpcdialog.cpp 2008-11-23 08:05:21 UTC (rev 2479) @@ -1,5 +1,5 @@ /* -* shadowmanager.cpp - Author: Christian Svensson +* pawsnpcdialog.cpp - Author: Christian Svensson * * Copyright (C) 2008 Atomic Blue (in...@pl..., http://www.atomicblue.org) * @@ -58,9 +58,19 @@ pawsTextBox *trig = dynamic_cast<pawsTextBox *>(widget->GetSelectedRow()->FindWidgetXMLBinding("trig")); printf("Player says '%s'.\n", trig->GetText() ); + // Send the server the original trigger csString cmd; cmd.Format("/tellnpc %s", trig->GetText() ); psengine->GetCmdHandler()->Publish(cmd); + // Now send the chat window and chat bubbles the nice menu text + csString text(fld->GetText()); + size_t dot = text.FindFirst('.'); // Take out the numbering to display + if (dot != SIZET_NOT_FOUND) + { + text.DeleteAt(0,dot+1); + } + cmd.Format("/tellnpcinternal %s", text.GetData() ); + psengine->GetCmdHandler()->Publish(cmd); responseList->Clear(); Hide(); } Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-11-23 06:02:09 UTC (rev 2478) +++ trunk/src/common/net/messages.h 2008-11-23 08:05:21 UTC (rev 2479) @@ -747,6 +747,7 @@ CHAT_GM, CHAT_SERVER_INFO, CHAT_NPC, + CHAT_NPCINTERNAL, CHAT_SYSTEM_BASE, ///< System messages that are also shown on the "Main" tab CHAT_PET_ACTION, CHAT_NPC_ME, Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2008-11-23 06:02:09 UTC (rev 2478) +++ trunk/src/server/chatmanager.cpp 2008-11-23 08:05:21 UTC (rev 2479) @@ -166,9 +166,9 @@ { // Only the speaker sees his successful chatting with an npc. // This helps quests stay secret. - psChatMessage newMsg(client->GetClientNum(), client->GetName(), 0, - msg.sText, msg.iChatType, msg.translate); - newMsg.SendMessage(); + //psChatMessage newMsg(client->GetClientNum(), client->GetName(), 0, + // msg.sText, msg.iChatType, msg.translate); + //newMsg.SendMessage(); saveFlood = false; gemObject *target = client->GetTargetObject(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-11-26 05:29:02
|
Revision: 2516 http://planeshift.svn.sourceforge.net/planeshift/?rev=2516&view=rev Author: Vengeance2001 Date: 2008-11-26 05:28:51 +0000 (Wed, 26 Nov 2008) Log Message: ----------- Fixed the sound caching issue that made it not work on the first try. Got Xillix's quest working, with audio. Talk to the Smith to test it. Modified Paths: -------------- trunk/src/client/modehandler.cpp trunk/src/common/net/messages.cpp trunk/src/server/chatmanager.cpp trunk/src/server/database/mysql/item_stats.sql trunk/src/server/database/mysql/quest_scripts.sql Modified: trunk/src/client/modehandler.cpp =================================================================== --- trunk/src/client/modehandler.cpp 2008-11-25 23:13:26 UTC (rev 2515) +++ trunk/src/client/modehandler.cpp 2008-11-26 05:28:51 UTC (rev 2516) @@ -2125,15 +2125,15 @@ csString fname; fname.Format("/planeshift/userdata/cache/%s",msg.hash.GetDataSafe() ); - printf("Got audio file '%s' to play.\n", msg.hash.GetDataSafe() ); + printf(">>Got audio file '%s' to play, in '%s'.\n", msg.hash.GetDataSafe(), fname.GetDataSafe() ); // Check for cached version if (!msg.databuf.IsValid()) { - printf("Checking if file exists locally already.\n"); + printf(">>Checking if file exists locally already.\n"); if (!vfs->Exists(fname)) // doesn't exist so we need to request it { - printf("Requesting file from server.\n"); + printf(">>Requesting file '%s' from server.\n", msg.hash.GetDataSafe() ); psCachedFileMessage request(0,msg.hash,NULL); // cheating here to send the hash back in the filename field request.SendMessage(); } @@ -2145,11 +2145,11 @@ } else { - printf("Received file from server. Putting in cache.\n"); + printf(">>Received file from server. Putting in cache.\n"); // Save sound file if (!vfs->WriteFile(fname,msg.databuf->GetData(), msg.databuf->GetSize() )) { - Error2("Could not write cached file '%s'.",fname.GetData()); + Error2(">>Could not write cached file '%s'.",fname.GetData()); return; } // Play sound file Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-11-25 23:13:26 UTC (rev 2515) +++ trunk/src/common/net/messages.cpp 2008-11-26 05:28:51 UTC (rev 2516) @@ -7123,11 +7123,13 @@ psCachedFileMessage::psCachedFileMessage( uint32_t client, const char *pathname, iDataBuffer *contents) { + printf("::Building cached file message for '%s'.\n", pathname); + // We send the hash along with it to save as the filename on the client - if (pathname[0] == '/') + if (pathname[0] == '(') // timestamp always starts with '(' { hash = csMD5::Encode(pathname).HexString(); - // printf("Hashed %s to %s.\n", pathname, hash.GetData() ); + printf("::Hashed %s to %s.\n", pathname, hash.GetData() ); } else hash = pathname; @@ -7147,6 +7149,8 @@ psCachedFileMessage::psCachedFileMessage( MsgEntry* me ) { hash = me->GetStr(); + printf("::Received cached message for file '%s'.\n", hash.GetDataSafe() ); + uint32_t size=0; char *ptr = (char *)me->GetBufferPointerUnsafe(size); if (ptr) Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2008-11-25 23:13:26 UTC (rev 2515) +++ trunk/src/server/chatmanager.cpp 2008-11-26 05:28:51 UTC (rev 2516) @@ -486,7 +486,7 @@ csFileTime oTime; psserver->vfs->GetFileTime(voiceFile,oTime); - timestamp.Format("%d/%d/%d %d:%d:%d ", + timestamp.Format("(%d/%d/%d %d:%d:%d) ", oTime.mon, oTime.day, oTime.year, oTime.hour, oTime.min, oTime.sec); Modified: trunk/src/server/database/mysql/item_stats.sql =================================================================== --- trunk/src/server/database/mysql/item_stats.sql 2008-11-25 23:13:26 UTC (rev 2515) +++ trunk/src/server/database/mysql/item_stats.sql 2008-11-26 05:28:51 UTC (rev 2516) @@ -148,6 +148,8 @@ (57,'B','Sphere',0.00,5.00,1,0,'BULK,BLUE','STACKABLE,GLYPH',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,101,94,0,0,0,'0',5,2000.00,'GLYPH','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2), (58,'B','Water',0.00,10.00,1,0,'BULK,BLUE','STACKABLE,GLYPH',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,101,95,0,0,0,'0',5,2000.00,'GLYPH','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2), (59,'B','Chest',1.00,10.00,70,65,'BULK','CONTAINER',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,4.00,2.00,0.20,0.20,0.20,0.00,111,112,0,0,0,'3c',3,200.00,'CONTAINER','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2), + (3014,'B','Juiceberry fruit',1.00,25.00,1,0,'BULK','STACKABLE',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,113,114,0,0,0,'0',3,0.00,'FOOD','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2), + (3015,'B','Lapar',1.00,25.00,1,0,'BULK','STACKABLE',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,113,114,0,0,0,'0',3,0.00,'FOOD','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2), (60,'B','Egg',1.00,25.00,1,0,'BULK','STACKABLE',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,113,114,0,0,0,'0',3,0.00,'FOOD','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2); INSERT INTO `item_stats` VALUES (61,'B','Milk',1.00,25.00,1,0,'BULK','STACKABLE',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,113,114,0,0,0,'0',3,0.00,'FOOD','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2), (62,'B','Flour',1.00,25.00,1,0,'BULK','STACKABLE',0.10,-1,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,113,114,0,0,0,'0',3,0.00,'FOOD','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,0,'0','nosound',50,'','',NULL,NULL,-1,2), Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2008-11-25 23:13:26 UTC (rev 2515) +++ trunk/src/server/database/mysql/quest_scripts.sql 2008-11-26 05:28:51 UTC (rev 2516) @@ -506,3 +506,40 @@ P: laanx g: Not sure if she is a he or a she, but s/he likes very spiky temples apparently."); + + + +INSERT INTO quest_scripts VALUES("208","207","# Quest Acquire Lapar +# ID 1214 +# Quest Description: Smith needs some juiceberry fruit before he will sell you any lapar. +# Player lockout: 43200 +# 12 hours +# Quest Lockout: 1800 +# 30 minutes +# Syntax update 5.11.2008 +# Updated with menu system 11/2008. + +P: Give me Lapar. +Menu: I\'m looking for some Lapar. + +Smith: Very well $sir, I have some lapar you can have, but it will cost you. [Levrus chuckles.] Shall we say two hundred tria, and three juiceberry fruit? (/planeshift/data/voice/Levrusacquirelapar/1verywellsir.spx) +P: No. P: Yes. +Menu: No, that is too much! Are you kidding me old man? Menu: You hold your lapar dear old man, but I\'ll pay your price. + +Smith: That is my price $playerrace, come back if you change your mind. (/planeshift/data/voice/Levrusacquirelapar/2thatismyprice.spx) +Smith: Excellent! Bring me the fruit, and I\'ll have some lapar ready for you. (/planeshift/data/voice/Levrusacquirelapar/3excellentbringmethefruit.spx) +Assign Quest. + +... NoRepeat +# Step 2 +Player Gives Smith 3 Juiceberry fruit. +Smith: Very nice, now for the tria, all two hundred of them please. [Levrus holds out his hand with a smile.] (/planeshift/data/voice/Levrusacquirelapar/4verynicenowforthetria.spx) +Complete Acquire Lapar Step 2. + +... +# Step 3 +Require Completion of Acquire Lapar Step 2. +Player Gives Smith 200 tria. +Smith: [The Smith takes the coins and stuffs them into his coin-pouch.] Very well, one bottle of Lapar for the $playerrace. [Smith hands you a bottle.] Use it wisely, it is not as abundant as water. [Smith chuckles as he turns his attention elsewhere.] (/planeshift/data/voice/Levrusacquirelapar/5verywellonebottle.spx) +Give 1 Lapar. Give 600 Exp. +Complete Acquire Lapar Step 3."); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-11-28 03:53:51
|
Revision: 2531 http://planeshift.svn.sourceforge.net/planeshift/?rev=2531&view=rev Author: mgist Date: 2008-11-28 03:53:41 +0000 (Fri, 28 Nov 2008) Log Message: ----------- - More pslaunch fixes and tweaks. - Merged psupdater into pslaunch as the --console option. Modified Paths: -------------- trunk/src/common/paws/pawstextbox.cpp trunk/src/pslaunch/Jamfile trunk/src/pslaunch/pawslauncherwindow.cpp trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/updater.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/common/paws/pawstextbox.cpp =================================================================== --- trunk/src/common/paws/pawstextbox.cpp 2008-11-28 02:03:26 UTC (rev 2530) +++ trunk/src/common/paws/pawstextbox.cpp 2008-11-28 03:53:41 UTC (rev 2531) @@ -480,6 +480,11 @@ csArray<csString> cutMessages; size_t pos = message.Length(); + if(pos == 0) + { + cutMessages.Push(""); + } + while(pos > 0) { size_t last = message.FindLast("\n"); @@ -488,11 +493,17 @@ cutMessages.Push(message); break; } + if(last == 0) + { + cutMessages.Push(message.Slice(1, pos)); + break; + } if(last != message.Length()-1) { cutMessages.Push(message.Slice(last+1, pos)); cutMessages.Push(""); } + cutMessages.Push(""); message.Truncate(last); pos = last; } @@ -588,16 +599,16 @@ } MessageLine* line = messages.Get(messages.GetSize()-1); - - if(line->text.FindLast("\n")== line->text.Length()-1) - { - AddMessage(data); - return; - } - line->text.Append(data); line = adjusted.Get(adjusted.GetSize()-1); line->text.Append(data); + + // Trim \n from the end and add a new line. + if(line->text.FindLast("\n") == line->text.Length()-1) + { + line->text.Truncate(line->text.Length()-1); + AddMessage(""); + } } void pawsMessageTextBox::OnUpdateData(const char *dataname,PAWSData& value) Modified: trunk/src/pslaunch/Jamfile =================================================================== --- trunk/src/pslaunch/Jamfile 2008-11-28 02:03:26 UTC (rev 2530) +++ trunk/src/pslaunch/Jamfile 2008-11-28 03:53:41 UTC (rev 2531) @@ -1,48 +1,18 @@ SubDir TOP src pslaunch ; -Application psupdater : - [ Filter [ Wildcard *.cpp *.h ] : pslaunch.cpp pawslauncherwindow.cpp pslaunch.h pawslauncherwindow.h globals.h ] : console -; - -ExternalLibs psupdater : CRYSTAL ; -LinkWith psupdater : xdelta3 psutil xpnet ; - -if $(HAVE_STATIC_PLUGINS) = "yes" -{ - -SubVariant updaterStatic ; -Application psupdater_static : [ Filter [ Wildcard *.cpp *.h ] : pslaunch.cpp pawslauncherwindow.cpp pslaunch.h pawslauncherwindow.h globals.h ] : console ; -CFlags psupdater_static : [ FDefines CS_STATIC_LINKED ] ; -LFlags psupdater_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; -MsvcDefine psupdater_static : CS_STATIC_LINKED ; -LinkWith psupdater_static : xdelta3 psutil xpnet ; - -LinkStaticPlugins psupdater_static : - vfs -: -: CRYSTAL -; - -ExternalLibs psupdater_static : CRYSTAL ; - -SubVariant ; -} - -SubVariant pslauncher ; Application pslaunch : - [ Filter [ Wildcard *.cpp *.h ] : updater.cpp updater.h ] : + [ Wildcard *.cpp *.h ] ; ExternalLibs pslaunch : CRYSTAL ; CompileGroups pslaunch : client ; LinkWith pslaunch : xdelta3 paws psutil fparser xpnet ; -SubVariant ; if $(HAVE_STATIC_PLUGINS) = "yes" { -SubVariant launcherStatic ; -Application pslaunch_static : [ Filter [ Wildcard *.cpp *.h ] : updater.cpp updater.h ] : ; +SubVariant static ; +Application pslaunch_static : [ Wildcard *.cpp *.h ] ; CFlags pslaunch_static : [ FDefines CS_STATIC_LINKED ] ; LFlags pslaunch_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; MsvcDefine pslaunch_static : CS_STATIC_LINKED ; Modified: trunk/src/pslaunch/pawslauncherwindow.cpp =================================================================== --- trunk/src/pslaunch/pawslauncherwindow.cpp 2008-11-28 02:03:26 UTC (rev 2530) +++ trunk/src/pslaunch/pawslauncherwindow.cpp 2008-11-28 03:53:41 UTC (rev 2531) @@ -150,12 +150,26 @@ } else if(ID == SETTINGS_CANCEL_BUTTON) { + FindWidget("SettingsAudio")->Hide(); + FindWidget("SettingsControls")->Hide(); + FindWidget("SettingsGeneral")->Show(); + FindWidget("SettingsGraphics")->Hide(); + FindButton(SETTINGS_AUDIO_BUTTON)->SetState(false, false); + FindButton(SETTINGS_CONTROLS_BUTTON)->SetState(false, false); + FindButton(SETTINGS_GRAPHICS_BUTTON)->SetState(false, false); launcherSettings->Hide(); launcherMain->Show(); launcherMain->OnGainFocus(); } else if(ID == SETTINGS_OK_BUTTON) { + FindWidget("SettingsAudio")->Hide(); + FindWidget("SettingsControls")->Hide(); + FindWidget("SettingsGeneral")->Show(); + FindWidget("SettingsGraphics")->Hide(); + FindButton(SETTINGS_AUDIO_BUTTON)->SetState(false, false); + FindButton(SETTINGS_CONTROLS_BUTTON)->SetState(false, false); + FindButton(SETTINGS_GRAPHICS_BUTTON)->SetState(false, false); launcherSettings->Hide(); launcherMain->Show(); launcherMain->OnGainFocus(); Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2008-11-28 02:03:26 UTC (rev 2530) +++ trunk/src/pslaunch/pslaunch.cpp 2008-11-28 03:53:41 UTC (rev 2531) @@ -31,6 +31,7 @@ #include "globals.h" #include "pslaunch.h" #include "pawslauncherwindow.h" +#include "updater.h" #include "paws/pawsbutton.h" #include "paws/pawstextbox.h" @@ -215,28 +216,25 @@ } else if(infoShare->GetPerformUpdate()) { + if(!infoShare->GetUpdateNeeded()) + { + infoShare->SetPerformUpdate(false); + infoShare->Sync(true); + } + pawsMessageTextBox* updateProgressOutput = (pawsMessageTextBox*)paws->FindWidget("UpdaterOutput"); - if(infoShare->GetUpdateNeeded()) + while(!infoShare->ConsoleIsEmpty()) { - while(!infoShare->ConsoleIsEmpty()) + csString message = infoShare->ConsolePop(); + if(message.FindFirst("\n") == 0) { - csString message = infoShare->ConsolePop(); - if(message.FindFirst("\n") == 0) - { - updateProgressOutput->AddMessage(message); - } - else - { - updateProgressOutput->AppendLastMessage(message); - } + updateProgressOutput->AddMessage(message); } + else + { + updateProgressOutput->AppendLastMessage(message); + } } - else - { - updateProgressOutput->Hide(); - paws->FindWidget("LauncherMain")->Show(); - infoShare->SetPerformUpdate(false); - } } else if(paws->FindWidget("LauncherUpdater")->IsVisible()) { @@ -336,23 +334,21 @@ int main(int argc, char* argv[]) { - // Set to true to exit the app. - bool exitApp = false; - - while(!exitApp) + // Select between GUI and console mode. + bool console = false; + for(int i=0; i<argc; i++) { - // Set up CS - iObjectRegistry* object_reg = csInitializer::CreateEnvironment (argc, argv); - - if(!object_reg) + csString s(argv[i]); + if(s.CompareNoCase("--console") || s.CompareNoCase("-console")) { - printf("Object Reg failed to Init!\n"); - exit(1); + console = true; } + } - // Request needed plugins for updater. - csInitializer::SetupConfigManager(object_reg, LAUNCHER_CONFIG_FILENAME); - csInitializer::RequestPlugins(object_reg, CS_REQUEST_VFS, CS_REQUEST_END); + if(console) + { + // Set up CS + psUpdater* updater = new psUpdater(argc, argv); // Convert args to an array of csString. csArray<csString> args; @@ -361,136 +357,187 @@ args.Push(argv[i]); } - InfoShare *infoShare = new InfoShare(); - infoShare->SetPerformUpdate(false); - infoShare->SetUpdateNeeded(false); + // Initialize updater engine. + UpdaterEngine* engine = new UpdaterEngine(args, updater->GetObjectRegistry(), "pslaunch"); - // Mount the VFS paths. - csRef<iVFS> vfs = csQueryRegistry<iVFS>(object_reg); - if (!vfs->Mount ("/planeshift/", "$^")) - { - printf("Failed to mount /planeshift!\n"); - return false; - } + printf("\nPlaneShift Updater Version %1.2f for %s.\n\n", UPDATER_VERSION, engine->GetConfig()->GetCurrentConfig()->GetPlatform()); - csRef<iConfigManager> configManager = csQueryRegistry<iConfigManager> (object_reg); - csString configPath = csGetPlatformConfigPath("PlaneShift"); - configPath.ReplaceAll("/.crystalspace/", "/."); - configPath = configManager->GetStr("PlaneShift.UserConfigPath", configPath); - FileUtil fileUtil(vfs); - csRef<FileStat> filestat = fileUtil.StatFile(configPath); - if (!filestat.IsValid() && CS_MKDIR(configPath) < 0) - { - printf("Could not create required %s directory!\n", configPath.GetData()); - return false; - } + // Run the update process! + updater->RunUpdate(engine); - if (!vfs->Mount("/planeshift/userdata", configPath + "$/")) + // Maybe this fixes a bug. + fflush(stdout); + + if(!engine->GetConfig()->IsSelfUpdating()) { - printf("Could not mount %s as /planeshift/userdata!\n", configPath.GetData()); - return false; + printf("\nUpdater finished, press enter to exit.\n"); + getchar(); } - // Initialize updater engine. - UpdaterEngine* engine = new UpdaterEngine(args, object_reg, "pslaunch", infoShare); + // Terminate updater! + delete engine; + delete updater; + engine = NULL; + updater = NULL; + } + else + { + // Set to true to exit the app. + bool exitApp = false; - // If we're self updating, continue self update. - if(engine->GetConfig()->IsSelfUpdating()) + while(!exitApp) { - exitApp = engine->SelfUpdate(engine->GetConfig()->IsSelfUpdating()); - } + // Set up CS + iObjectRegistry* object_reg = csInitializer::CreateEnvironment (argc, argv); - // If we don't have to exit the app, create GUI thread and run updater. - if(!exitApp) - { - // Set to true by GUI if we have to launch the client. - bool execPSClient = false; - // Ping stuff. + if(!object_reg) + { + printf("Object Reg failed to Init!\n"); + exit(1); + } - // Request needed plugins for GUI. - csInitializer::RequestPlugins(object_reg, CS_REQUEST_FONTSERVER, CS_REQUEST_IMAGELOADER, - CS_REQUEST_OPENGL3D, CS_REQUEST_END); + // Request needed plugins for updater. + csInitializer::SetupConfigManager(object_reg, LAUNCHER_CONFIG_FILENAME); + csInitializer::RequestPlugins(object_reg, CS_REQUEST_VFS, CS_REQUEST_END); - // Start up GUI. - csRef<Runnable> gui; - gui.AttachNew(new psLauncherGUI(object_reg, infoShare, &execPSClient)); - csRef<Thread> guiThread; - guiThread.AttachNew(new Thread(gui)); - guiThread->Start(); - - //Begin update checking. - if(engine) - engine->CheckForUpdates(); + // Convert args to an array of csString. + csArray<csString> args; + for(int i=0; i<argc; i++) + { + args.Push(argv[i]); + } - // Wait for the gui to exit. - while(guiThread->IsRunning()) + InfoShare *infoShare = new InfoShare(); + infoShare->SetPerformUpdate(false); + infoShare->SetUpdateNeeded(false); + + // Mount the VFS paths. + csRef<iVFS> vfs = csQueryRegistry<iVFS>(object_reg); + if (!vfs->Mount ("/planeshift/", "$^")) { - csSleep(500); - if(infoShare->GetCheckIntegrity()) - { - engine->CheckIntegrity(); - csSleep(1000); - infoShare->SetCheckIntegrity(false); - } + printf("Failed to mount /planeshift!\n"); + return false; + } + csRef<iConfigManager> configManager = csQueryRegistry<iConfigManager> (object_reg); + csString configPath = csGetPlatformConfigPath("PlaneShift"); + configPath.ReplaceAll("/.crystalspace/", "/."); + configPath = configManager->GetStr("PlaneShift.UserConfigPath", configPath); + FileUtil fileUtil(vfs); + csRef<FileStat> filestat = fileUtil.StatFile(configPath); + if (!filestat.IsValid() && CS_MKDIR(configPath) < 0) + { + printf("Could not create required %s directory!\n", configPath.GetData()); + return false; } - // Free updater. - delete engine; - engine = NULL; + if (!vfs->Mount("/planeshift/userdata", configPath + "$/")) + { + printf("Could not mount %s as /planeshift/userdata!\n", configPath.GetData()); + return false; + } - // Free the GUI. - guiThread = NULL; - gui = NULL; + // Initialize updater engine. + UpdaterEngine* engine = new UpdaterEngine(args, object_reg, "pslaunch", infoShare); - // Clean up everything else. - csInitializer::DestroyApplication(object_reg); - object_reg = NULL; - delete infoShare; - infoShare = NULL; - - if (execPSClient) + // If we're self updating, continue self update. + if(engine->GetConfig()->IsSelfUpdating()) { - // Execute psclient process. + exitApp = engine->SelfUpdate(engine->GetConfig()->IsSelfUpdating()); + } + // If we don't have to exit the app, create GUI thread and run updater. + if(!exitApp) + { + // Set to true by GUI if we have to launch the client. + bool execPSClient = false; + // Ping stuff. + + // Request needed plugins for GUI. + csInitializer::RequestPlugins(object_reg, CS_REQUEST_FONTSERVER, CS_REQUEST_IMAGELOADER, + CS_REQUEST_OPENGL3D, CS_REQUEST_END); + + // Start up GUI. + csRef<Runnable> gui; + gui.AttachNew(new psLauncherGUI(object_reg, infoShare, &execPSClient)); + csRef<Thread> guiThread; + guiThread.AttachNew(new Thread(gui)); + guiThread->Start(); + + //Begin update checking. + if(engine) + engine->CheckForUpdates(); + + // Wait for the gui to exit. + while(guiThread->IsRunning()) + { + csSleep(500); + if(infoShare->GetCheckIntegrity()) + { + engine->CheckIntegrity(); + csSleep(1000); + infoShare->SetCheckIntegrity(false); + } + + } + + // Free updater. + delete engine; + engine = NULL; + + // Free the GUI. + guiThread = NULL; + gui = NULL; + + // Clean up everything else. + csInitializer::DestroyApplication(object_reg); + object_reg = NULL; + delete infoShare; + infoShare = NULL; + + if (execPSClient) + { + // Execute psclient process. + #ifdef CS_PLATFORM_WIN32 - // Info for CreateProcess. - STARTUPINFO siStartupInfo; - DWORD dwExitCode; - PROCESS_INFORMATION piProcessInfo; - memset(&siStartupInfo, 0, sizeof(siStartupInfo)); - memset(&piProcessInfo, 0, sizeof(piProcessInfo)); - siStartupInfo.cb = sizeof(siStartupInfo); + // Info for CreateProcess. + STARTUPINFO siStartupInfo; + DWORD dwExitCode; + PROCESS_INFORMATION piProcessInfo; + memset(&siStartupInfo, 0, sizeof(siStartupInfo)); + memset(&piProcessInfo, 0, sizeof(piProcessInfo)); + siStartupInfo.cb = sizeof(siStartupInfo); - CreateProcess(NULL, "psclient.exe", 0, 0, false, - CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo); - GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); - while (dwExitCode == STILL_ACTIVE) - { - csSleep(1000); + CreateProcess(NULL, "psclient.exe", 0, 0, false, + CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo); GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); + while (dwExitCode == STILL_ACTIVE) + { + csSleep(1000); + GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); + } + exitApp = dwExitCode ? 0 : !0; + CloseHandle(piProcessInfo.hProcess); + CloseHandle(piProcessInfo.hThread); +#else + if(fork() == 0) + { + execl("./psclient", "./psclient", (char*)0); + } + else + { + int status; + wait(&status); + exitApp = status ? 0 : !0; + } +#endif } - exitApp = dwExitCode ? 0 : !0; - CloseHandle(piProcessInfo.hProcess); - CloseHandle(piProcessInfo.hThread); -#else - if(fork() == 0) - { - execl("./psclient", "./psclient", (char*)0); - } else { - int status; - wait(&status); - exitApp = status ? 0 : !0; - } -#endif + exitApp = true; + } } - else - { - exitApp = true; - } } } Modified: trunk/src/pslaunch/updater.cpp =================================================================== --- trunk/src/pslaunch/updater.cpp 2008-11-28 02:03:26 UTC (rev 2530) +++ trunk/src/pslaunch/updater.cpp 2008-11-28 03:53:41 UTC (rev 2531) @@ -17,20 +17,12 @@ * */ -/* -* This is the file for the console updater only. Everything in here needs to be -* written again for the launcher! -*/ - #include <psconfig.h> #include "updaterconfig.h" #include "updaterengine.h" #include "updater.h" - -CS_IMPLEMENT_APPLICATION - iObjectRegistry* psUpdater::object_reg = NULL; psUpdater::psUpdater(int argc, char* argv[]) @@ -99,41 +91,3 @@ engine->CheckForUpdates(); return; } - -int main(int argc, char* argv[]) -{ - // Set up CS - psUpdater* updater = new psUpdater(argc, argv); - - // Convert args to an array of csString. - csArray<csString> args; - for(int i=0; i<argc; i++) - { - args.Push(argv[i]); - } - - // Initialize updater engine. - UpdaterEngine* engine = new UpdaterEngine(args, updater->GetObjectRegistry(), "psupdater"); - - printf("\nPlaneShift Updater Version %1.2f for %s.\n\n", UPDATER_VERSION, engine->GetConfig()->GetCurrentConfig()->GetPlatform()); - - // Run the update process! - updater->RunUpdate(engine); - - // Maybe this fixes a bug. - fflush(stdout); - - if(!engine->GetConfig()->IsSelfUpdating()) - { - printf("\nUpdater finished, press enter to exit.\n"); - getchar(); - } - - // Terminate updater! - delete engine; - delete updater; - engine = NULL; - updater = NULL; - - return 0; -} Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2008-11-28 02:03:26 UTC (rev 2530) +++ trunk/src/pslaunch/updaterengine.cpp 2008-11-28 03:53:41 UTC (rev 2531) @@ -215,6 +215,7 @@ fflush(stdout); PrintOutput("Update finished!\n"); + infoShare->Sync(false); } else PrintOutput("No updates needed!\n"); @@ -324,7 +325,7 @@ csRef<iDocumentSystem> xml = csPtr<iDocumentSystem> (new csTinyDocumentSystem); if (!xml) { - PrintOutput("Could not load the XML Document System\n"); + printf("Could not load the XML Document System\n"); return NULL; } @@ -332,7 +333,7 @@ csRef<iDataBuffer> buf = vfs->ReadFile(nodeName); if (!buf || !buf->GetSize()) { - PrintOutput("Couldn't open xml file '%s'!\n", nodeName); + printf("Couldn't open xml file '%s'!\n", nodeName); return NULL; } @@ -350,7 +351,7 @@ const char* error = configdoc->Parse(buf); if (error) { - PrintOutput("XML Parsing error in file '%s': %s.\n", nodeName, error); + printf("XML Parsing error in file '%s': %s.\n", nodeName, error); return NULL; } @@ -358,7 +359,7 @@ csRef<iDocumentNode> root = configdoc->GetRoot (); if (!root) { - PrintOutput("Couldn't get config file rootnode!"); + printf("Couldn't get config file rootnode!"); return NULL; } @@ -747,7 +748,7 @@ #endif // Binary patch. - PrintOutput("Patching file %s: ", newFilePath.GetData()); + PrintOutput("\nPatching file %s: ", newFilePath.GetData()); if(!PatchFile(oldFP->GetData(), diffFP->GetData(), newFP->GetData())) { PrintOutput("Failed!\n"); @@ -872,7 +873,7 @@ bool success = true; if(!root.IsValid()) { - PrintOutput("Unable to get root node!\n"); + printf("Unable to get root node!\n"); success = false; } else @@ -880,7 +881,7 @@ confignode = root->GetNode("config"); if (!confignode.IsValid()) { - PrintOutput("Couldn't find config node in configfile!\n"); + printf("Couldn't find config node in configfile!\n"); success = false; } } @@ -894,7 +895,7 @@ return; } - PrintOutput("Attempting to restore updaterinfo.xml!\n"); + printf("Attempting to restore updaterinfo.xml!\n"); fileUtil->RemoveFile("/this/updaterinfo.xml", true); downloader = new Downloader(vfs); downloader->SetProxy(config->GetProxy().host.GetData(), config->GetProxy().port); @@ -909,14 +910,14 @@ root = GetRootNode(UPDATERINFO_CURRENT_FILENAME); if(!root) { - PrintOutput("Unable to get root node!\n"); + printf("Unable to get root node!\n"); return; } confignode = root->GetNode("config"); if (!confignode) { - PrintOutput("Couldn't find config node in configfile!\n"); + printf("Couldn't find config node in configfile!\n"); return; } } @@ -924,7 +925,7 @@ // Load updater config if (!config->GetCurrentConfig()->Initialize(confignode)) { - PrintOutput("Failed to Initialize mirror config current!\n"); + printf("Failed to Initialize mirror config current!\n"); return; } @@ -947,19 +948,19 @@ root = GetRootNode(UPDATERINFO_CURRENT_FILENAME); if(!root) { - PrintOutput("Unable to get root node!\n"); + printf("Unable to get root node!\n"); } confignode = root->GetNode("config"); if (!confignode) { - PrintOutput("Couldn't find config node in configfile!\n"); + printf("Couldn't find config node in configfile!\n"); } // Load updater config if (!config->GetCurrentConfig()->Initialize(confignode)) { - PrintOutput("Failed to Initialize mirror config current!\n"); + PrintOutput("\nFailed to Initialize mirror config current!\n"); return; } @@ -987,7 +988,7 @@ csRef<iDocumentNode> r = GetRootNode("/zip/integrity.xml"); if(!r) { - PrintOutput("Unable to get root node!\n"); + printf("Unable to get root node!\n"); failed = true; } @@ -996,7 +997,7 @@ csRef<iDocumentNode> md5sums = r->GetNode("md5sums"); if (!md5sums) { - PrintOutput("Couldn't find md5sums node!\n"); + printf("Couldn't find md5sums node!\n"); failed = true; } @@ -1052,7 +1053,7 @@ } else { - PrintOutput("\nThe following files failed the check:\n"); + PrintOutput("\nThe following files failed the check:\n\n"); for(size_t i=0; i<failedSize; i++) { PrintOutput("%s\n", failed.Get(i)->GetAttributeValue("path")); @@ -1118,7 +1119,7 @@ // Restore file. fileUtil->RemoveFile(downloadpath, true); fileUtil->MoveFile(downloadpath + ".bak", downloadpath, true, false, true); - PrintOutput("Failed!\n"); + PrintOutput(" Failed!\n"); continue; } } @@ -1135,7 +1136,7 @@ } #endif fileUtil->RemoveFile(downloadpath + ".bak", true); - PrintOutput("Success!\n"); + PrintOutput(" Success!\n"); } fileUtil->RemoveFile("/this/updaterinfo.xml.bak", true); PrintOutput("\nDone!\n"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-11-29 11:07:36
|
Revision: 2548 http://planeshift.svn.sourceforge.net/planeshift/?rev=2548&view=rev Author: weltall2 Date: 2008-11-29 11:07:33 +0000 (Sat, 29 Nov 2008) Log Message: ----------- additional char to csstring work Modified Paths: -------------- trunk/src/client/clientvitals.cpp trunk/src/common/paws/pawsmanager.cpp trunk/src/common/paws/pawsmanager.h Modified: trunk/src/client/clientvitals.cpp =================================================================== --- trunk/src/client/clientvitals.cpp 2008-11-29 09:07:12 UTC (rev 2547) +++ trunk/src/client/clientvitals.cpp 2008-11-29 11:07:33 UTC (rev 2548) @@ -44,7 +44,7 @@ void psClientVitals::HandleDRData(psStatDRMessage& msg, const char *labelname ) { - char buff[100]; + csString buff; // Skip out of date stat dr updates if (counterSet && (unsigned char)(msg.counter - counter) > 127) @@ -61,84 +61,84 @@ if (msg.statsDirty & DIRTY_VITAL_HP) { vitals[VITAL_HITPOINTS].value = msg.hp; - sprintf(buff,"fVitalValue%d:%s",VITAL_HITPOINTS,labelname); + buff.Format("fVitalValue%d:%s",VITAL_HITPOINTS,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_HITPOINTS].value); } if (msg.statsDirty & DIRTY_VITAL_HP_RATE) { vitals[VITAL_HITPOINTS].drRate = msg.hp_rate; - sprintf(buff,"fVitalRate%d:%s",VITAL_HITPOINTS,labelname); + buff.Format("fVitalRate%d:%s",VITAL_HITPOINTS,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_HITPOINTS].drRate); } if (msg.statsDirty & DIRTY_VITAL_MANA) { vitals[VITAL_MANA].value = msg.mana; - sprintf(buff,"fVitalValue%d:%s",VITAL_MANA,labelname); + buff.Format("fVitalValue%d:%s",VITAL_MANA,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_MANA].value); } if (msg.statsDirty & DIRTY_VITAL_MANA_RATE) { vitals[VITAL_MANA].drRate = msg.mana_rate; - sprintf(buff,"fVitalRate%d:%s",VITAL_MANA,labelname); + buff.Format("fVitalRate%d:%s",VITAL_MANA,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_MANA].drRate); } if (msg.statsDirty & DIRTY_VITAL_PYSSTAMINA) { vitals[VITAL_PYSSTAMINA].value = msg.pstam; - sprintf(buff,"fVitalValue%d:%s",VITAL_PYSSTAMINA,labelname); + buff.Format("fVitalValue%d:%s",VITAL_PYSSTAMINA,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_PYSSTAMINA].value); } if (msg.statsDirty & DIRTY_VITAL_PYSSTAMINA_RATE) { vitals[VITAL_PYSSTAMINA].drRate = msg.pstam_rate; - sprintf(buff,"fVitalRate%d:%s",VITAL_PYSSTAMINA,labelname); + buff.Format("fVitalRate%d:%s",VITAL_PYSSTAMINA,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_PYSSTAMINA].drRate); } if (msg.statsDirty & DIRTY_VITAL_MENSTAMINA) { vitals[VITAL_MENSTAMINA].value = msg.mstam; - sprintf(buff,"fVitalValue%d:%s",VITAL_MENSTAMINA,labelname); + buff.Format("fVitalValue%d:%s",VITAL_MENSTAMINA,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_MENSTAMINA].value); } if (msg.statsDirty & DIRTY_VITAL_MENSTAMINA_RATE) { vitals[VITAL_MENSTAMINA].drRate = msg.mstam_rate; - sprintf(buff,"fVitalRate%d:%s",VITAL_MENSTAMINA,labelname); + buff.Format("fVitalRate%d:%s",VITAL_MENSTAMINA,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_MENSTAMINA].drRate); } if (msg.statsDirty & DIRTY_VITAL_EXPERIENCE) { experiencePoints = msg.exp; - sprintf(buff,"fExpPts:%s",labelname); + buff.Format("fExpPts:%s",labelname); PawsManager::GetSingleton().Publish(buff,(float)experiencePoints/200.0F); } if (msg.statsDirty & DIRTY_VITAL_PROGRESSION) { progressionPoints = msg.prog; - sprintf(buff,"fProgrPts:%s",labelname); + buff.Format("fProgrPts:%s",labelname); PawsManager::GetSingleton().Publish(buff,progressionPoints); } } void psClientVitals::HandleDeath(const char *labelname ) { - char buff[100]; + csString buff; vitals[VITAL_HITPOINTS].drRate = 0.0; - sprintf(buff,"fVitalRate%d:%s",VITAL_HITPOINTS,labelname); + buff.Format("fVitalRate%d:%s",VITAL_HITPOINTS,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_HITPOINTS].drRate); vitals[VITAL_HITPOINTS].value = 0.0; - sprintf(buff,"fVitalValue%d:%s",VITAL_HITPOINTS,labelname); + buff.Format("fVitalValue%d:%s",VITAL_HITPOINTS,labelname); PawsManager::GetSingleton().Publish(buff,vitals[VITAL_HITPOINTS].value); } @@ -148,7 +148,7 @@ float delta = (now-lastDRUpdate)/1000.0; lastDRUpdate = now; - char buff[100]; + csString buff; // iterate over all fields and predict their values based on their recharge rate for ( int x = 0; x < VITAL_COUNT; x++ ) @@ -163,7 +163,7 @@ if (oldvalue != vitals[x].value) // need to republish info { - sprintf(buff,"fVitalValue%d:%s",x,labelname); + buff.Format("fVitalValue%d:%s",x,labelname); PawsManager::GetSingleton().Publish(buff,vitals[x].value); } } Modified: trunk/src/common/paws/pawsmanager.cpp =================================================================== --- trunk/src/common/paws/pawsmanager.cpp 2008-11-29 09:07:12 UTC (rev 2547) +++ trunk/src/common/paws/pawsmanager.cpp 2008-11-29 11:07:33 UTC (rev 2548) @@ -1328,7 +1328,7 @@ } } -void PawsManager::Publish(const char *dataname,PAWSData& data) +void PawsManager::Publish(const csString & dataname,PAWSData& data) { PAWSSubscriptionsHash::Iterator iter = subscriptions.GetIterator(dataname); if (!iter.HasNext()) // no one has subscribed yet, so just save value @@ -1349,7 +1349,7 @@ } } -void PawsManager::Publish(const char *dataname,const char *datavalue) +void PawsManager::Publish(const csString & dataname,const char *datavalue) { PAWSData data; data.type = PAWS_DATA_STR; @@ -1357,7 +1357,7 @@ Publish(dataname,data); } -void PawsManager::Publish(const char *dataname,bool datavalue) +void PawsManager::Publish(const csString & dataname,bool datavalue) { PAWSData data; data.type = PAWS_DATA_BOOL; @@ -1365,7 +1365,7 @@ Publish(dataname,data); } -void PawsManager::Publish(const char *dataname,int datavalue) +void PawsManager::Publish(const csString & dataname,int datavalue) { PAWSData data; data.type = PAWS_DATA_INT; @@ -1373,7 +1373,7 @@ Publish(dataname,data); } -void PawsManager::Publish(const char *dataname,unsigned int datavalue) +void PawsManager::Publish(const csString & dataname,unsigned int datavalue) { PAWSData data; data.type = PAWS_DATA_UINT; @@ -1381,7 +1381,7 @@ Publish(dataname,data); } -void PawsManager::Publish(const char *dataname,float datavalue) +void PawsManager::Publish(const csString & dataname,float datavalue) { PAWSData data; data.type = PAWS_DATA_FLOAT; @@ -1389,7 +1389,7 @@ Publish(dataname,data); } -void PawsManager::Publish(const char *dataname) +void PawsManager::Publish(const csString & dataname) { PAWSData data; Publish(dataname,data); Modified: trunk/src/common/paws/pawsmanager.h =================================================================== --- trunk/src/common/paws/pawsmanager.h 2008-11-29 09:07:12 UTC (rev 2547) +++ trunk/src/common/paws/pawsmanager.h 2008-11-29 11:07:33 UTC (rev 2548) @@ -314,25 +314,25 @@ void Subscribe(const char *dataname,iPAWSSubscriber *listener); /// Announce a change in a named element to all subscribers. - void Publish(const char *dataname,PAWSData& data); + void Publish(const csString & dataname,PAWSData& data); /// Publish a string to all subscribers. - void Publish(const char *dataname,const char *datavalue); + void Publish(const csString & dataname,const char *datavalue); /// Publish a boolean value to all subscribers. - void Publish(const char *dataname,bool datavalue); + void Publish(const csString & dataname,bool datavalue); /// Publish an int to all subscribers. - void Publish(const char *dataname,int datavalue); + void Publish(const csString & dataname,int datavalue); /// Publish an unsigned int to all subscribers. - void Publish(const char *dataname,unsigned int datavalue); + void Publish(const csString & dataname,unsigned int datavalue); /// Publish a float to all subscribers. - void Publish(const char *dataname,float datavalue); + void Publish(const csString & dataname,float datavalue); /// Publish nothing to all subscribers. (Used for one-time named signals.) - void Publish(const char *dataname); + void Publish(const csString & dataname); /// Return a list of all subscribers. csArray<iPAWSSubscriber*> ListSubscribers(const char *dataname); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <va...@us...> - 2008-11-30 07:03:25
|
Revision: 2560 http://planeshift.svn.sourceforge.net/planeshift/?rev=2560&view=rev Author: varslot Date: 2008-11-30 07:03:20 +0000 (Sun, 30 Nov 2008) Log Message: ----------- Fixed build issues for statically linked server and npcclient. Modified Paths: -------------- trunk/src/npcclient/Jamfile trunk/src/server/Jamfile Modified: trunk/src/npcclient/Jamfile =================================================================== --- trunk/src/npcclient/Jamfile 2008-11-30 00:04:50 UTC (rev 2559) +++ trunk/src/npcclient/Jamfile 2008-11-30 07:03:20 UTC (rev 2560) @@ -31,13 +31,12 @@ SubVariant static ; Application psnpcclient_static : main.cpp command.cpp $(extrafiles) : console independent noinstall nohelp ; CFlags psnpcclient_static : [ FDefines CS_STATIC_LINKED ] ; -LFlags psnpcclient_static : -lcrystalspace_staticplugins-1.3 ; +LFlags psnpcclient_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; MsvcDefine psnpcclient_static : CS_STATIC_LINKED ; LinkWith psnpcclient_static : dbmysqlstatic libpsnpcclient ; LinkStaticPlugins psnpcclient_static : bindoc - cpersist csddsimg csfont csopcode Modified: trunk/src/server/Jamfile =================================================================== --- trunk/src/server/Jamfile 2008-11-30 00:04:50 UTC (rev 2559) +++ trunk/src/server/Jamfile 2008-11-30 07:03:20 UTC (rev 2560) @@ -16,7 +16,7 @@ SubVariant static ; Application psserver_static : [ Wildcard *.cpp *.h ] $(extrafiles) : console independent noinstall nohelp ; CFlags psserver_static : [ FDefines CS_STATIC_LINKED ] ; -LFlags psclient_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; +LFlags psserver_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) ; MsvcDefine psserver_static : CS_STATIC_LINKED ; LinkWith psserver_static : dbmysqlstatic bulkobjects fparser psnet psengine psutil psrpgrules ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2008-12-03 22:27:28
|
Revision: 2617 http://planeshift.svn.sourceforge.net/planeshift/?rev=2617&view=rev Author: weltall2 Date: 2008-12-03 22:27:25 +0000 (Wed, 03 Dec 2008) Log Message: ----------- even more fixes of uint/int to INSTANCE_ID and removing of hardcoded instance numbers to use the defines in psconst Modified Paths: -------------- trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/common/net/npcmessages.cpp trunk/src/common/net/npcmessages.h trunk/src/npcclient/networkmgr.cpp trunk/src/npcclient/npc.cpp trunk/src/npcclient/npcclient.cpp trunk/src/npcclient/npcclient.h trunk/src/npcclient/npcoperations.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitem.h trunk/src/server/bulkobjects/psnpcloader.cpp trunk/src/server/npcmanager.cpp trunk/src/server/progressionmanager.cpp trunk/src/server/psproxlist.cpp trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/common/net/messages.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -4543,7 +4543,7 @@ playerID = PID(me->GetUInt32()); groupID = me->GetUInt32(); ownerEID = EID(me->GetUInt32()); - instance = me->GetInt32(); + instance = me->GetUInt32(); if (!me->IsEmpty()) { @@ -4591,7 +4591,7 @@ msg->Add(playerID.Unbox()); } -void psPersistActor::SetInstance(int instance) +void psPersistActor::SetInstance(INSTANCE_ID instance) { msg->Reset(posInstance); msg->Add(instance); Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/common/net/messages.h 2008-12-03 22:27:25 UTC (rev 2617) @@ -2906,7 +2906,7 @@ /** * Used to insert instance into the message buffer after creation. */ - void SetInstance(int instance); + void SetInstance(INSTANCE_ID instance); csString name; csString guild; @@ -2926,7 +2926,7 @@ EID ownerEID; bool control; uint32_t flags; - int instance; + INSTANCE_ID instance; int posPlayerID; // Remember the position the playerID in the generated message int posInstance; // Remember the position of the instance field in the generated message Modified: trunk/src/common/net/npcmessages.cpp =================================================================== --- trunk/src/common/net/npcmessages.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/common/net/npcmessages.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -700,7 +700,7 @@ msg->Add((int16_t)elems); } -void psAllEntityPosMessage::Add(EID id, csVector3& pos, iSector*& sector, int instance, csStringHashReversible* msgstrings) +void psAllEntityPosMessage::Add(EID id, csVector3& pos, iSector*& sector, INSTANCE_ID instance, csStringHashReversible* msgstrings) { msg->Add(id.Unbox()); msg->Add(pos.x); @@ -719,7 +719,7 @@ msg->Add( (int32_t)instance ); } -EID psAllEntityPosMessage::Get(csVector3& pos, iSector*& sector, int& instance, csStringHashReversible* msgstrings, iEngine *engine) +EID psAllEntityPosMessage::Get(csVector3& pos, iSector*& sector, INSTANCE_ID& instance, csStringHashReversible* msgstrings, iEngine *engine) { EID eid(msg->GetUInt32()); pos.x = msg->GetFloat(); @@ -745,7 +745,7 @@ { sector = NULL; } - instance = msg->GetInt32(); + instance = msg->GetUInt32(); return eid; } @@ -758,7 +758,7 @@ { csVector3 pos; iSector* sector; - int instance; + INSTANCE_ID instance; EID eid = Get(pos, sector, instance, access_ptrs->msgstrings, access_ptrs->engine); Modified: trunk/src/common/net/npcmessages.h =================================================================== --- trunk/src/common/net/npcmessages.h 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/common/net/npcmessages.h 2008-12-03 22:27:25 UTC (rev 2617) @@ -250,10 +250,10 @@ void SetLength(int size,int client); /// Add a new entity's position to the data buffer - void Add(EID id, csVector3 & pos, iSector* & sector, int instance, csStringHashReversible* msgstrings); + void Add(EID id, csVector3 & pos, iSector* & sector, INSTANCE_ID instance, csStringHashReversible* msgstrings); /// Get the next entity and position from the buffer - EID Get(csVector3 & pos, iSector* & sector, int & instance, csStringHashReversible* msgstrings, iEngine* engine); + EID Get(csVector3 & pos, iSector* & sector, INSTANCE_ID & instance, csStringHashReversible* msgstrings, iEngine* engine); }; /** Modified: trunk/src/npcclient/networkmgr.cpp =================================================================== --- trunk/src/npcclient/networkmgr.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/npcclient/networkmgr.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -399,7 +399,7 @@ { csVector3 pos; iSector* sector; - int instance; + INSTANCE_ID instance; EID id = updates.Get(pos, sector, instance, npcclient->GetNetworkMgr()->GetMsgStrings(), engine); npcclient->SetEntityPos(id, pos, sector, instance); Modified: trunk/src/npcclient/npc.cpp =================================================================== --- trunk/src/npcclient/npc.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/npcclient/npc.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -356,7 +356,7 @@ csVector3 loc; iSector* sector; float rot; - int instance = -1; + INSTANCE_ID instance = INSTANCE_ALL; if (GetActor()) { Modified: trunk/src/npcclient/npcclient.cpp =================================================================== --- trunk/src/npcclient/npcclient.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/npcclient/npcclient.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -782,7 +782,7 @@ } } -void psNPCClient::SetEntityPos(EID eid, csVector3& pos, iSector* sector, int instance) +void psNPCClient::SetEntityPos(EID eid, csVector3& pos, iSector* sector, INSTANCE_ID instance) { gemNPCObject *obj = FindEntityID(eid); Modified: trunk/src/npcclient/npcclient.h =================================================================== --- trunk/src/npcclient/npcclient.h 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/npcclient/npcclient.h 2008-12-03 22:27:25 UTC (rev 2617) @@ -278,7 +278,7 @@ * SetEntityPos finds the given ID entity, and updates * its position in mesh and linmove. */ - void SetEntityPos(EID id, csVector3& pos, iSector* sector, int instance); + void SetEntityPos(EID id, csVector3& pos, iSector* sector, INSTANCE_ID instance); /** * Find the NPC* attached to the entity with the specified character ID Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/npcclient/npcoperations.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -2096,7 +2096,7 @@ csVector3 myPos,myNewPos,targetPos; float myRot,dummyrot; - int myInstance, targetInstance; + INSTANCE_ID myInstance, targetInstance; iSector * mySector, *myNewSector, *targetSector; csVector3 forward; Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/bulkobjects/psitem.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -151,7 +151,7 @@ guardingCharacterID = 0; location.loc_sectorinfo=NULL; - location.worldInstance=0; + location.worldInstance= DEFAULT_INSTANCE; location.loc_x=0.0f; location.loc_y=0.0f; location.loc_z=0.0f; Modified: trunk/src/server/bulkobjects/psitem.h =================================================================== --- trunk/src/server/bulkobjects/psitem.h 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/bulkobjects/psitem.h 2008-12-03 22:27:25 UTC (rev 2617) @@ -276,7 +276,7 @@ psSectorInfo *loc_sectorinfo; float loc_x,loc_y,loc_z; float loc_yrot; - int worldInstance; + INSTANCE_ID worldInstance; } location; /// 0% means item does not reduce decay at all. 100% means item does not decay. @@ -918,7 +918,7 @@ uint32 itemID; ///< Item csVector3 pos; ///< Position psSectorInfo* sector; ///< Sector - int worldInstance; ///< Instance ID to spawn in + INSTANCE_ID worldInstance; ///< Instance ID to spawn in int interval; ///< Interval in msecs int maxrnd; ///< Maximum random interval modifier in msecs float range; ///< Range in which to spawn item Modified: trunk/src/server/bulkobjects/psnpcloader.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcloader.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/bulkobjects/psnpcloader.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -349,7 +349,7 @@ csString sector; INSTANCE_ID instance; - instance = 0; + instance = DEFAULT_INSTANCE; const char * inst_str = xmlnode->GetAttributeValue("instance"); if( inst_str ) { instance = strtoul(inst_str,NULL,10); Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/npcmanager.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -1548,7 +1548,7 @@ iSector * targetSector; csVector3 targetPoint; float yRot = 0.0; - int instance; + INSTANCE_ID instance; owner->GetActor()->GetPosition(targetPoint,yRot,targetSector); instance = owner->GetActor()->GetInstance(); psSectorInfo* sectorInfo = CacheManager::GetSingleton().GetSectorInfoByName(targetSector->QueryObject()->GetName()); Modified: trunk/src/server/progressionmanager.cpp =================================================================== --- trunk/src/server/progressionmanager.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/progressionmanager.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -2955,7 +2955,7 @@ // Do teleport actor->StopMoving(true); - actor->SetInstance(0); + actor->SetInstance(DEFAULT_INSTANCE); actor->SetPosition(csVector3(x,y,z),yrot,sector); actor->GetCharacterData()->SaveLocationInWorld(); actor->MulticastDRUpdate(); Modified: trunk/src/server/psproxlist.cpp =================================================================== --- trunk/src/server/psproxlist.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/psproxlist.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -77,7 +77,7 @@ iSector *sector; firstFrame = true; self->GetPosition (oldPos, rot, sector); - oldInstance = 0; + oldInstance = DEFAULT_INSTANCE; } ProximityList::~ProximityList() Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/usermanager.cpp 2008-12-03 22:27:25 UTC (rev 2617) @@ -1448,7 +1448,7 @@ float angle; object->GetPosition(pos, angle, sector); - int instance = object->GetInstance(); + INSTANCE_ID instance = object->GetInstance(); csString sector_name = (sector) ? sector->QueryObject()->GetName() : "(null)"; @@ -2286,7 +2286,7 @@ psserver->combatmanager->StopAttack(targeter->GetActor()); } -void UserManager::Teleport( Client *client, float x, float y, float z, int instance, float rot, const char* sectorname ) +void UserManager::Teleport( Client *client, float x, float y, float z, INSTANCE_ID instance, float rot, const char* sectorname ) { csVector3 pos( x,y,z ); csRef<iEngine> engine = csQueryRegistry<iEngine> (psserver->GetObjectReg()); Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2008-12-03 22:01:05 UTC (rev 2616) +++ trunk/src/server/usermanager.h 2008-12-03 22:27:25 UTC (rev 2617) @@ -332,7 +332,7 @@ * @param rot The rotation to use. * @param sector The sector name to move to. */ - void Teleport( Client *client, float x, float y, float z, int instance, float rot, const char* sectorname ); + void Teleport( Client *client, float x, float y, float z, INSTANCE_ID instance, float rot, const char* sectorname ); void HandleMOTDRequest(MsgEntry *me,Client *client); void HandleUserCommand(MsgEntry *me,Client *client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-12-04 23:49:51
|
Revision: 2627 http://planeshift.svn.sourceforge.net/planeshift/?rev=2627&view=rev Author: Vengeance2001 Date: 2008-12-04 23:49:48 +0000 (Thu, 04 Dec 2008) Log Message: ----------- Started auto-give functionality for popup menus. Other miscellaneous improvements as I saw them. Note that I created a new message class called psSimpleStringMessage which allows you to specify the MSGTYPE in the call, but use a generic class for building and parsing the message on each end. It holds a single string and that's it, but there are many cases where we need only that. I plan to consolidate some of the other message types to use this once auto-give is finished. Modified Paths: -------------- trunk/src/client/cmdusers.cpp trunk/src/client/gui/pawsnpcdialog.cpp trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/server/database/mysql/quest_scripts.sql trunk/src/server/exchangemanager.cpp trunk/src/server/exchangemanager.h Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2008-12-04 23:25:30 UTC (rev 2626) +++ trunk/src/client/cmdusers.cpp 2008-12-04 23:49:48 UTC (rev 2627) @@ -258,7 +258,7 @@ } else { - msgqueue->SendMessage(msg->msg); + msg->SendMessage(); delete msg; } } @@ -339,7 +339,7 @@ sprintf(buff,"<R TYPE=\"SELL\"/>"); // If no target specified by user use active target } psGUIMerchantMessage exchange(psGUIMerchantMessage::REQUEST,buff); - msgqueue->SendMessage(exchange.msg); + exchange.SendMessage(); } else if ( words[0] == "/buddy" ) { @@ -354,7 +354,7 @@ else //else send the data to the server for parsing { psUserCmdMessage cmdmsg(cmd); - msgqueue->SendMessage(cmdmsg.msg); + cmdmsg.SendMessage(); } } else if (words[0] == "/buy") @@ -368,19 +368,19 @@ sprintf(buff,"<R TYPE=\"BUY\"/>"); // If no target specified by user use active target } psGUIMerchantMessage exchange(psGUIMerchantMessage::REQUEST,buff); - msgqueue->SendMessage(exchange.msg); + exchange.SendMessage(); } else if (words[0] == "/trade") { psExchangeRequestMsg exchange(true); - msgqueue->SendMessage(exchange.msg); + exchange.SendMessage(); } else if (words[0] == "/give") { psExchangeRequestMsg exchange(false); - msgqueue->SendMessage(exchange.msg); + exchange.SendMessage(); } else if (words[0] == "/ignore") @@ -502,13 +502,13 @@ words[0] == "/repair" ) { psWorkCmdMessage work(cmd); - msgqueue->SendMessage(work.msg); + work.SendMessage(); } else if (words[0] == "/picklock") { psLockpickMessage lockpick(""); - msgqueue->SendMessage(lockpick.msg); + lockpick.SendMessage(); } else if(words[0] == "/targetinfo") @@ -524,7 +524,7 @@ csString pText; psAdviceMessage advice(0,words[1].GetDataSafe(),pPerson.GetDataSafe(), pText.GetDataSafe()); - msgqueue->SendMessage(advice.msg); + advice.SendMessage(); return NULL; } @@ -544,7 +544,7 @@ chatWindow->BadWordsFilter(pText); //if enabled apply it psAdviceMessage advice(0,words[0].GetDataSafe(),pPerson.GetDataSafe(), pText.GetDataSafe()); - msgqueue->SendMessage(advice.msg); + advice.SendMessage(); return NULL; } @@ -562,7 +562,7 @@ chatWindow->BadWordsFilter(pText); //if enabled apply it psAdviceMessage advice(0,words[0],pPerson, pText); - msgqueue->SendMessage(advice.msg); + advice.SendMessage(); return NULL; } @@ -631,7 +631,8 @@ psPETCommandMessage cmd(0, command, target.GetData(), options.GetData()); - msgqueue->SendMessage(cmd.msg); + cmd.SendMessage(); + return NULL; } @@ -650,12 +651,12 @@ csString newCmd; newCmd.Format("/pickup eid:%u", mappedID.Unbox()); psUserCmdMessage cmdmsg(newCmd); - msgqueue->SendMessage(cmdmsg.msg); + cmdmsg.SendMessage(); } else { psUserCmdMessage cmdmsg(cmd); - msgqueue->SendMessage(cmdmsg.msg); + cmdmsg.SendMessage(); } } @@ -681,13 +682,13 @@ else if (words[0] == "/introduce") { psCharIntroduction introduce; - msgqueue->SendMessage(introduce.msg); + introduce.SendMessage(); } else if (words[0] == "/unstick") { psUserCmdMessage cmdmsg(cmd); - msgqueue->SendMessage(cmdmsg.msg); + cmdmsg.SendMessage(); psengine->GetCharControl()->GetMovementManager()->StopAllMovement(); } else if (words[0] == "/drop") @@ -709,7 +710,7 @@ { psSlotMovementMsg moneydropmsg( CONTAINER_INVENTORY_MONEY, moneySlot, CONTAINER_WORLD, 0, quantity ); - msgqueue->SendMessage(moneydropmsg.msg); + moneydropmsg.SendMessage(); return NULL; } else if (words[2] == "any") @@ -738,12 +739,12 @@ } } psCmdDropMessage cmddrop(quantity, itemName, any, guard); - msgqueue->SendMessage(cmddrop.msg); + cmddrop.SendMessage(); } else { psUserCmdMessage cmdmsg(cmd); - msgqueue->SendMessage(cmdmsg.msg); + cmdmsg.SendMessage(); } return NULL; // don't display anything here Modified: trunk/src/client/gui/pawsnpcdialog.cpp =================================================================== --- trunk/src/client/gui/pawsnpcdialog.cpp 2008-12-04 23:25:30 UTC (rev 2626) +++ trunk/src/client/gui/pawsnpcdialog.cpp 2008-12-04 23:49:48 UTC (rev 2627) @@ -58,10 +58,20 @@ pawsTextBox *trig = dynamic_cast<pawsTextBox *>(widget->GetSelectedRow()->FindWidgetXMLBinding("trig")); printf("Player says '%s'.\n", trig->GetText() ); + csString trigger(trig->GetText()); + // Send the server the original trigger - csString cmd; - cmd.Format("/tellnpc %s", trig->GetText() ); - psengine->GetCmdHandler()->Publish(cmd); + csString cmd; + if (trigger.GetAt(0) != '<') + { + cmd.Format("/tellnpc %s", trigger.GetData() ); + psengine->GetCmdHandler()->Publish(cmd); + } + else + { + psSimpleStringMessage gift(0,MSGTYPE_EXCHANGE_AUTOGIVE,trigger); + gift.SendMessage(); + } // Now send the chat window and chat bubbles the nice menu text csString text(fld->GetText()); size_t dot = text.FindFirst('.'); // Take out the numbering to display Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-12-04 23:25:30 UTC (rev 2626) +++ trunk/src/common/net/messages.cpp 2008-12-04 23:49:48 UTC (rev 2627) @@ -7177,9 +7177,16 @@ { psDialogMenuMessage::DialogResponse new_response; + csString escTriggerText(triggerText); + if (triggerText.GetAt(0) == '<') // escape xml characters before putting in xml + { + escTriggerText.ReplaceAll("<","<"); + escTriggerText.ReplaceAll(">",">"); + } + new_response.id = id; new_response.menuText = menuText; - new_response.triggerText = triggerText; + new_response.triggerText = escTriggerText; new_response.flags = flags; new_response.menuText.ReplaceAll("$name",playerName); @@ -7231,3 +7238,21 @@ return text; } + +PSF_IMPLEMENT_MSG_FACTORY(psSimpleStringMessage,MSGTYPE_SIMPLE_STRING); + + +psSimpleStringMessage::psSimpleStringMessage( uint32_t client,MSG_TYPES type, const char *string) +{ + msg.AttachNew(new MsgEntry(strlen(string)+1)); + msg->SetType(type); + msg->clientnum = client; + msg->Add(string); + valid=!(msg->overrun); +} + +psSimpleStringMessage::psSimpleStringMessage( MsgEntry* me ) +{ + str = me->GetStr(); + valid = !(me->overrun); +} Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-12-04 23:25:30 UTC (rev 2626) +++ trunk/src/common/net/messages.h 2008-12-04 23:49:48 UTC (rev 2627) @@ -108,6 +108,7 @@ MSGTYPE_EXCHANGE_ACCEPT, MSGTYPE_EXCHANGE_STATUS, MSGTYPE_EXCHANGE_END, + MSGTYPE_EXCHANGE_AUTOGIVE, MSGTYPE_EXCHANGE_MONEY, MSGTYPE_GUIMERCHANT, MSGTYPE_GROUPCMD, @@ -247,7 +248,8 @@ MSGTYPE_INTRODUCTION, MSGTYPE_CACHEFILE, - MSGTYPE_DIALOG_MENU + MSGTYPE_DIALOG_MENU, + MSGTYPE_SIMPLE_STRING }; class psMessageCracker; @@ -5118,4 +5120,32 @@ csArray<DialogResponse> responses; }; +/** + * Class to send a single arbitrary string to the client or server. + */ +class psSimpleStringMessage : public psMessageCracker +{ + +public: + csString str; + + psSimpleStringMessage( uint32_t client,MSG_TYPES type, const char *string); + psSimpleStringMessage( MsgEntry* me ); + + PSF_DECLARE_MSG_FACTORY(); + + /** + * @brief Converts the message into human readable string. + * + * @param access_ptrs A struct to a number of access pointers. + * @return Return a human readable string for the message. + */ + virtual csString ToString(AccessPointers * access_ptrs) + { + return csString("not implemented"); + } + +}; + + #endif Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2008-12-04 23:25:30 UTC (rev 2626) +++ trunk/src/server/database/mysql/quest_scripts.sql 2008-12-04 23:49:48 UTC (rev 2627) @@ -43,7 +43,7 @@ # # Quest: "Sandwich Quest" # -INSERT INTO quest_scripts VALUES("2","2","P: can bring you +INSERT INTO quest_scripts VALUES("2","2","P: can bring you sandwich Menu: Is there anything I can bring you? Merchant: I'm kinda hungry.. bring me a sandwich and hurry if you want a hexa and a mug for your trouble.(/planeshift/data/voice/merchant/clawatit.wav) @@ -65,15 +65,17 @@ # # Quest: "Falchion Quest" # -INSERT INTO quest_scripts VALUES("3","3","P: can bring you +INSERT INTO quest_scripts VALUES("3","3","P: can bring you falchion +Menu: Is there anything you need? -Merchant: Kill the enkidukai who wanders in the forest and bring me his steel falchion.(Don't think I need anything right now.) +Merchant: Kill the enkidukai who wanders in the forest and bring me his steel falchion. Assign Quest ... Player gives Merchant Steel Falchion +Menu: Give the merchant a Steel Falchion. M: Many thanks, brave stranger. This will come in handy if the fans misbehave. Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2008-12-04 23:25:30 UTC (rev 2626) +++ trunk/src/server/exchangemanager.cpp 2008-12-04 23:49:48 UTC (rev 2627) @@ -1310,9 +1310,10 @@ { clients = pClnts; - psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeRequest),MSGTYPE_EXCHANGE_REQUEST, REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGETACTOR); - psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeAccept),MSGTYPE_EXCHANGE_ACCEPT, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); - psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeEnd),MSGTYPE_EXCHANGE_END, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeRequest),MSGTYPE_EXCHANGE_REQUEST, REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGETACTOR); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeAccept) ,MSGTYPE_EXCHANGE_ACCEPT, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleExchangeEnd) ,MSGTYPE_EXCHANGE_END, REQUIRE_READY_CLIENT|REQUIRE_ALIVE); + psserver->GetEventManager()->Subscribe(this, new NetMessageCallback<ExchangeManager>(this,&ExchangeManager::HandleAutoGive) ,MSGTYPE_EXCHANGE_AUTOGIVE, REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGETACTOR); } ExchangeManager::~ExchangeManager() @@ -1322,6 +1323,7 @@ psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_EXCHANGE_REQUEST); psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_EXCHANGE_ACCEPT); psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_EXCHANGE_END); + psserver->GetEventManager()->Unsubscribe(this, MSGTYPE_EXCHANGE_AUTOGIVE); } } void ExchangeManager::StartExchange( Client* client, bool withPlayer ) @@ -1468,28 +1470,16 @@ } } -void ExchangeManager::HandleMessage(MsgEntry *me,Client *client) +void ExchangeManager::HandleAutoGive(MsgEntry *me,Client *client) { - switch ( me->GetType() ) - { - case MSGTYPE_EXCHANGE_END: - { - HandleExchangeEnd(me, client); - break; - } + psSimpleStringMessage give(me); - case MSGTYPE_EXCHANGE_REQUEST: - { - HandleExchangeRequest(me, client); - break; - } + printf("Got autogive of '%s'\n", give.str.GetDataSafe() ); +} - case MSGTYPE_EXCHANGE_ACCEPT: - { - HandleExchangeAccept(me, client); - break; - } - } +void ExchangeManager::HandleMessage(MsgEntry *me,Client *client) +{ + // not used anymore } Modified: trunk/src/server/exchangemanager.h =================================================================== --- trunk/src/server/exchangemanager.h 2008-12-04 23:25:30 UTC (rev 2626) +++ trunk/src/server/exchangemanager.h 2008-12-04 23:49:48 UTC (rev 2627) @@ -337,6 +337,7 @@ void HandleExchangeRequest(MsgEntry *me,Client *client); void HandleExchangeAccept (MsgEntry *me,Client *client); void HandleExchangeEnd (MsgEntry *me,Client *client); + void HandleAutoGive (MsgEntry *me,Client *client); /** Utility function to handle exchange objects */ Exchange * GetExchange(int id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2008-12-05 22:10:06
|
Revision: 2630 http://planeshift.svn.sourceforge.net/planeshift/?rev=2630&view=rev Author: Vengeance2001 Date: 2008-12-05 22:09:55 +0000 (Fri, 05 Dec 2008) Log Message: ----------- Changed INSTANCE_ID typename to InstanceID for consistency with naming standards. Modified Paths: -------------- trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/common/net/npcmessages.cpp trunk/src/common/net/npcmessages.h trunk/src/common/util/psconst.h trunk/src/npcclient/gem.cpp trunk/src/npcclient/gem.h trunk/src/npcclient/networkmgr.cpp trunk/src/npcclient/npc.cpp trunk/src/npcclient/npcclient.cpp trunk/src/npcclient/npcclient.h trunk/src/npcclient/npcoperations.cpp trunk/src/server/actionmanager.cpp trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h trunk/src/server/bankmanager.h trunk/src/server/bulkobjects/psactionlocationinfo.cpp trunk/src/server/bulkobjects/psactionlocationinfo.h trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/bulkobjects/pscharacterloader.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitem.h trunk/src/server/bulkobjects/psnpcloader.cpp trunk/src/server/creationmanager.cpp trunk/src/server/entitymanager.cpp trunk/src/server/entitymanager.h trunk/src/server/gem.cpp trunk/src/server/gem.h trunk/src/server/npcmanager.cpp trunk/src/server/progressionmanager.cpp trunk/src/server/psproxlist.cpp trunk/src/server/psproxlist.h trunk/src/server/psserverchar.cpp trunk/src/server/spawnmanager.cpp trunk/src/server/spawnmanager.h trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h trunk/src/server/workmanager.cpp Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/common/net/messages.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -4591,7 +4591,7 @@ msg->Add(playerID.Unbox()); } -void psPersistActor::SetInstance(INSTANCE_ID instance) +void psPersistActor::SetInstance(InstanceID instance) { msg->Reset(posInstance); msg->Add(instance); Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/common/net/messages.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -2908,7 +2908,7 @@ /** * Used to insert instance into the message buffer after creation. */ - void SetInstance(INSTANCE_ID instance); + void SetInstance(InstanceID instance); csString name; csString guild; @@ -2928,7 +2928,7 @@ EID ownerEID; bool control; uint32_t flags; - INSTANCE_ID instance; + InstanceID instance; int posPlayerID; // Remember the position the playerID in the generated message int posInstance; // Remember the position of the instance field in the generated message Modified: trunk/src/common/net/npcmessages.cpp =================================================================== --- trunk/src/common/net/npcmessages.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/common/net/npcmessages.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -700,7 +700,7 @@ msg->Add((int16_t)elems); } -void psAllEntityPosMessage::Add(EID id, csVector3& pos, iSector*& sector, INSTANCE_ID instance, csStringHashReversible* msgstrings) +void psAllEntityPosMessage::Add(EID id, csVector3& pos, iSector*& sector, InstanceID instance, csStringHashReversible* msgstrings) { msg->Add(id.Unbox()); msg->Add(pos.x); @@ -719,7 +719,7 @@ msg->Add( (int32_t)instance ); } -EID psAllEntityPosMessage::Get(csVector3& pos, iSector*& sector, INSTANCE_ID& instance, csStringHashReversible* msgstrings, iEngine *engine) +EID psAllEntityPosMessage::Get(csVector3& pos, iSector*& sector, InstanceID& instance, csStringHashReversible* msgstrings, iEngine *engine) { EID eid(msg->GetUInt32()); pos.x = msg->GetFloat(); @@ -758,7 +758,7 @@ { csVector3 pos; iSector* sector; - INSTANCE_ID instance; + InstanceID instance; EID eid = Get(pos, sector, instance, access_ptrs->msgstrings, access_ptrs->engine); Modified: trunk/src/common/net/npcmessages.h =================================================================== --- trunk/src/common/net/npcmessages.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/common/net/npcmessages.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -250,10 +250,10 @@ void SetLength(int size,int client); /// Add a new entity's position to the data buffer - void Add(EID id, csVector3 & pos, iSector* & sector, INSTANCE_ID instance, csStringHashReversible* msgstrings); + void Add(EID id, csVector3 & pos, iSector* & sector, InstanceID instance, csStringHashReversible* msgstrings); /// Get the next entity and position from the buffer - EID Get(csVector3 & pos, iSector* & sector, INSTANCE_ID & instance, csStringHashReversible* msgstrings, iEngine* engine); + EID Get(csVector3 & pos, iSector* & sector, InstanceID & instance, csStringHashReversible* msgstrings, iEngine* engine); }; /** Modified: trunk/src/common/util/psconst.h =================================================================== --- trunk/src/common/util/psconst.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/common/util/psconst.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -66,7 +66,7 @@ #define PROX_LIST_STEP_SIZE 10 // grow by this much each attempt #define DEFAULT_INSTANCE 0 // Instance 0 is where 99% of things happen -typedef uint32 INSTANCE_ID; +typedef uint32 InstanceID; #define INSTANCE_ALL 0xffffffff #define ASSIST_MAX_DIST 25 // Maximum distance that the /assist command will work Modified: trunk/src/npcclient/gem.cpp =================================================================== --- trunk/src/npcclient/gem.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/npcclient/gem.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -63,7 +63,7 @@ delete pcmesh; } -void gemNPCObject::Move(const csVector3& pos, float rotangle, const char* room, INSTANCE_ID instance) +void gemNPCObject::Move(const csVector3& pos, float rotangle, const char* room, InstanceID instance) { SetInstance(instance); Move(pos,rotangle,room); @@ -217,7 +217,7 @@ return true; } -void gemNPCObject::SetPosition(csVector3& pos, iSector* sector, INSTANCE_ID* instance) +void gemNPCObject::SetPosition(csVector3& pos, iSector* sector, InstanceID* instance) { psGameObject::SetPosition(this, pos, sector); Modified: trunk/src/npcclient/gem.h =================================================================== --- trunk/src/npcclient/gem.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/npcclient/gem.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -79,7 +79,7 @@ iMeshWrapper *GetMeshWrapper(); void Move(const csVector3& pos, float rotangle, const char* room); - void Move(const csVector3& pos, float rotangle, const char* room, INSTANCE_ID instance); + void Move(const csVector3& pos, float rotangle, const char* room, InstanceID instance); EID GetEID() { return eid; } npcMesh* pcmesh; @@ -102,9 +102,9 @@ virtual NPC *GetNPC() { return NULL; } - virtual void SetPosition(csVector3& pos, iSector* sector = NULL, INSTANCE_ID* instance = NULL); - virtual void SetInstance( INSTANCE_ID instance ) { this->instance = instance; } - virtual INSTANCE_ID GetInstance(){ return instance; }; + virtual void SetPosition(csVector3& pos, iSector* sector = NULL, InstanceID* instance = NULL); + virtual void SetInstance( InstanceID instance ) { this->instance = instance; } + virtual InstanceID GetInstance(){ return instance; }; protected: psNPCClient *npcclient; @@ -115,7 +115,7 @@ int type; bool visible; bool invincible; - INSTANCE_ID instance; + InstanceID instance; }; Modified: trunk/src/npcclient/networkmgr.cpp =================================================================== --- trunk/src/npcclient/networkmgr.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/npcclient/networkmgr.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -399,7 +399,7 @@ { csVector3 pos; iSector* sector; - INSTANCE_ID instance; + InstanceID instance; EID id = updates.Get(pos, sector, instance, npcclient->GetNetworkMgr()->GetMsgStrings(), engine); npcclient->SetEntityPos(id, pos, sector, instance); Modified: trunk/src/npcclient/npc.cpp =================================================================== --- trunk/src/npcclient/npc.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/npcclient/npc.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -356,7 +356,7 @@ csVector3 loc; iSector* sector; float rot; - INSTANCE_ID instance = INSTANCE_ALL; + InstanceID instance = INSTANCE_ALL; if (GetActor()) { Modified: trunk/src/npcclient/npcclient.cpp =================================================================== --- trunk/src/npcclient/npcclient.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/npcclient/npcclient.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -782,7 +782,7 @@ } } -void psNPCClient::SetEntityPos(EID eid, csVector3& pos, iSector* sector, INSTANCE_ID instance) +void psNPCClient::SetEntityPos(EID eid, csVector3& pos, iSector* sector, InstanceID instance) { gemNPCObject *obj = FindEntityID(eid); Modified: trunk/src/npcclient/npcclient.h =================================================================== --- trunk/src/npcclient/npcclient.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/npcclient/npcclient.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -278,7 +278,7 @@ * SetEntityPos finds the given ID entity, and updates * its position in mesh and linmove. */ - void SetEntityPos(EID id, csVector3& pos, iSector* sector, INSTANCE_ID instance); + void SetEntityPos(EID id, csVector3& pos, iSector* sector, InstanceID instance); /** * Find the NPC* attached to the entity with the specified character ID Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/npcclient/npcoperations.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -2096,7 +2096,7 @@ csVector3 myPos,myNewPos,targetPos; float myRot,dummyrot; - INSTANCE_ID myInstance, targetInstance; + InstanceID myInstance, targetInstance; iSector * mySector, *myNewSector, *targetSector; csVector3 forward; Modified: trunk/src/server/actionmanager.cpp =================================================================== --- trunk/src/server/actionmanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/actionmanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -91,7 +91,7 @@ { psSectorInfo *sector; float pos_x, pos_y, pos_z, yrot; - INSTANCE_ID instance; + InstanceID instance; Client *clientPtr = psserver->GetNetManager()->GetClient( (int)client ); if ( clientPtr && info ) { Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/adminmanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -1692,7 +1692,7 @@ csString name, ipAddress, securityLevel, sectorName; PID playerId; AccountID accountId; - INSTANCE_ID instance = DEFAULT_INSTANCE; + InstanceID instance = DEFAULT_INSTANCE; float timeConnected = 0.0f, loc_x = 0.0f, loc_y = 0.0f, loc_z = 0.0f, loc_yrot = 0.0f; bool banned = false; @@ -1962,7 +1962,7 @@ csVector3 pos; float angle; iSector* sector = 0; - INSTANCE_ID instance; + InstanceID instance; client->GetActor()->GetPosition(pos, angle, sector); instance = client->GetActor()->GetInstance(); @@ -2396,7 +2396,7 @@ csVector3 targetPoint; float yRot = 0.0; iSector *targetSector; - INSTANCE_ID targetInstance; + InstanceID targetInstance; if ( !GetTargetOfTeleport(client, msg, data, targetSector, targetPoint, yRot, subject, targetInstance) ) { psserver->SendSystemError(client->GetClientNum(), "Cannot teleport %s to %s", data.player.GetData(), data.target.GetData() ); @@ -2408,7 +2408,7 @@ csVector3 oldpos; float oldyrot; iSector *oldsector; - INSTANCE_ID oldInstance; + InstanceID oldInstance; subject->GetPosition(oldpos,oldyrot,oldsector); oldInstance = subject->GetInstance(); @@ -3523,7 +3523,7 @@ } -bool AdminManager::GetTargetOfTeleport(Client *client, psAdminCmdMessage& msg, AdminCmdData& data, iSector * & targetSector, csVector3 & targetPoint, float &yRot, gemObject *subject, INSTANCE_ID &instance) +bool AdminManager::GetTargetOfTeleport(Client *client, psAdminCmdMessage& msg, AdminCmdData& data, iSector * & targetSector, csVector3 & targetPoint, float &yRot, gemObject *subject, InstanceID &instance) { instance = DEFAULT_INSTANCE; @@ -3769,7 +3769,7 @@ } } -bool AdminManager::MoveObject(Client *client, gemObject *target, csVector3& pos, float yrot, iSector* sector, INSTANCE_ID instance) +bool AdminManager::MoveObject(Client *client, gemObject *target, csVector3& pos, float yrot, iSector* sector, InstanceID instance) { // This is a powerful feature; not everyone is allowed to use all of it csString response; @@ -3859,7 +3859,7 @@ csVector3 pos; float angle; psSectorInfo* sectorInfo = NULL; - INSTANCE_ID instance; + InstanceID instance; client->GetActor()->GetCharacterData()->GetLocationInWorld(instance, sectorInfo, pos.x, pos.y, pos.z, angle ); iSector* sector = NULL; @@ -4186,12 +4186,12 @@ psActionLocation *action = gemAction->GetAction(); // check if the actionlocation is linked to real item - INSTANCE_ID instance_id = action->GetInstanceID(); - if (instance_id == INSTANCE_ALL) + InstanceID InstanceID = action->GetInstanceID(); + if (InstanceID == INSTANCE_ALL) { - instance_id = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic + InstanceID = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic } - target = GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); + target = GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); if (!target) { psserver->SendSystemError(me->clientnum,"There is no item associated with this action location."); @@ -4236,12 +4236,12 @@ psActionLocation *action = gemAction->GetAction(); // check if the actionlocation is linked to real item - INSTANCE_ID instance_id = action->GetInstanceID(); - if (instance_id == INSTANCE_ALL) + InstanceID InstanceID = action->GetInstanceID(); + if (InstanceID == INSTANCE_ALL) { - instance_id = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic + InstanceID = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic } - target = GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); + target = GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); if (!target) { psserver->SendSystemError(me->clientnum,"There is no item associated with this action location."); @@ -4323,12 +4323,12 @@ psActionLocation *action = gemAction->GetAction(); // check if the actionlocation is linked to real item - INSTANCE_ID instance_id = action->GetInstanceID(); - if (instance_id == INSTANCE_ALL) + InstanceID InstanceID = action->GetInstanceID(); + if (InstanceID == INSTANCE_ALL) { - instance_id = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic + InstanceID = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic } - target = GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); + target = GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); if (!target) { psserver->SendSystemError(me->clientnum,"There is no item associated with this action location."); @@ -4381,13 +4381,13 @@ psActionLocation *action = gemAction->GetAction(); // check if the actionlocation is linked to real item - INSTANCE_ID instance_id = action->GetInstanceID(); - if (instance_id == INSTANCE_ALL) + InstanceID InstanceID = action->GetInstanceID(); + if (InstanceID == INSTANCE_ALL) { - instance_id = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic + InstanceID = action->GetGemObject()->GetEID().Unbox(); // FIXME: Understand and comment on conversion magic } - target = GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); + target = GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); if (!target) { psserver->SendSystemError(me->clientnum,"There is no item associated with this action location."); @@ -6516,7 +6516,7 @@ csVector3 pos; float yrot; iSector* sec; - INSTANCE_ID instance; + InstanceID instance; // Update respawn to the NPC's current position or your current position? if (!data.type.IsEmpty() && data.type.CompareNoCase("here")) @@ -7037,7 +7037,7 @@ gemItem* gItem = dynamic_cast<gemItem*>(object); if (gItem) { - INSTANCE_ID instance = object->GetInstance(); + InstanceID instance = object->GetInstance(); iSector* sector = object->GetSector(); csVector3 pos(data.x, data.y, data.z); Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/adminmanager.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -134,7 +134,7 @@ bool uniqueName, uniqueFirstName,help,insert; float radius, range; unsigned short stackCount; - INSTANCE_ID instance; + InstanceID instance; bool instanceValid; RangeSpecifier rangeSpecifier; @@ -207,10 +207,10 @@ /** Get sector and coordinates of target of teleportation described by 'msg'. Return success */ - bool GetTargetOfTeleport(Client *client, psAdminCmdMessage& msg, AdminCmdData& data, iSector * & targetSector, csVector3 & targetPoint, float &yRot, gemObject *subject, INSTANCE_ID &instance); + bool GetTargetOfTeleport(Client *client, psAdminCmdMessage& msg, AdminCmdData& data, iSector * & targetSector, csVector3 & targetPoint, float &yRot, gemObject *subject, InstanceID &instance); /** Handles movement of objects for teleport and slide. */ - bool MoveObject(Client *client, gemObject *target, csVector3& pos, float yrot, iSector* sector, INSTANCE_ID instance); + bool MoveObject(Client *client, gemObject *target, csVector3& pos, float yrot, iSector* sector, InstanceID instance); /** This function sends a warning message from a GM to a player, and displays it in * big, red, un-ignorable text on the screen and in the chat window. Modified: trunk/src/server/bankmanager.h =================================================================== --- trunk/src/server/bankmanager.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bankmanager.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -56,7 +56,7 @@ bool latePayment; int lateBy; bool updateDate; - INSTANCE_ID instance; + InstanceID instance; }; Modified: trunk/src/server/bulkobjects/psactionlocationinfo.cpp =================================================================== --- trunk/src/server/bulkobjects/psactionlocationinfo.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/psactionlocationinfo.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -333,19 +333,19 @@ gemItem *psActionLocation::GetRealItem() { // Check if the actionlocation is linked to real item - INSTANCE_ID instance_id = GetInstanceID(); - if (instance_id==INSTANCE_ALL) + InstanceID InstanceID = GetInstanceID(); + if (InstanceID==INSTANCE_ALL) { if (GetGemObject()->GetItem()) { - instance_id = (int)GetGemObject()->GetItem()->GetUID(); + InstanceID = (int)GetGemObject()->GetItem()->GetUID(); } } // id 0 is not valid - if (instance_id == 0) + if (InstanceID == 0) return NULL; - return GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); + return GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); } @@ -594,13 +594,13 @@ // Set lock instance ID if any // cannot use GetAttributeValueAsInt since it uses atoi, which will barf on values > 0x7fffffff - INSTANCE_ID instance_id = 0; + InstanceID InstanceID = 0; const char * lockid_str = entranceNode->GetAttributeValue( "LockID" ); if( lockid_str ) { - instance_id = strtoul(lockid_str,NULL,10); + InstanceID = strtoul(lockid_str,NULL,10); } - SetInstanceID(instance_id); - if ( instance_id != 0 ) + SetInstanceID(InstanceID); + if ( InstanceID != 0 ) { isLockable = true; } Modified: trunk/src/server/bulkobjects/psactionlocationinfo.h =================================================================== --- trunk/src/server/bulkobjects/psactionlocationinfo.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/psactionlocationinfo.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -80,8 +80,8 @@ /// Returns instance ID of referenced in action location response string /// This is either a container ID or a lock ID - INSTANCE_ID GetInstanceID() const { return instanceID; } - void SetInstanceID(INSTANCE_ID newID) { instanceID = newID; } + InstanceID GetInstanceID() const { return instanceID; } + void SetInstanceID(InstanceID newID) { instanceID = newID; } /// Returns the enter script in entrance action location response string csString GetEnterScript() const { return enterScript; } @@ -195,7 +195,7 @@ bool isReturn; /// This is either a container ID or a lock ID - INSTANCE_ID instanceID; + InstanceID instanceID; /// String containing the entrance type csString entranceType; Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -962,7 +962,7 @@ } } -void psCharacter::UpdateRespawn(csVector3 pos, float yrot, psSectorInfo *sector, INSTANCE_ID instance) +void psCharacter::UpdateRespawn(csVector3 pos, float yrot, psSectorInfo *sector, InstanceID instance) { spawn_loc.loc_sector = sector; spawn_loc.loc = pos; @@ -2319,7 +2319,7 @@ } -void psCharacter::GetLocationInWorld(INSTANCE_ID &instance,psSectorInfo *§orinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) +void psCharacter::GetLocationInWorld(InstanceID &instance,psSectorInfo *§orinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) { sectorinfo=location.loc_sector; loc_x=location.loc.x; @@ -2329,7 +2329,7 @@ instance = location.worldInstance; } -void psCharacter::SetLocationInWorld(INSTANCE_ID instance, psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot) +void psCharacter::SetLocationInWorld(InstanceID instance, psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot) { psSectorInfo *oldsector = location.loc_sector; Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/pscharacter.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -683,7 +683,7 @@ psSectorInfo *loc_sector; csVector3 loc; float loc_yrot; - INSTANCE_ID worldInstance; + InstanceID worldInstance; } location; unsigned int advantage_bitfield[PSCHARACTER_ADVANTAGE_32BIT_BITFIELDS]; @@ -956,7 +956,7 @@ /** Update a npc's default spawn position with given data. */ - void UpdateRespawn(csVector3 pos, float yrot, psSectorInfo *sector, INSTANCE_ID instance); + void UpdateRespawn(csVector3 pos, float yrot, psSectorInfo *sector, InstanceID instance); /** @@ -1039,8 +1039,8 @@ void SetTraitForLocation(PSTRAIT_LOCATION location,psTrait *trait); psTrait *GetTraitForLocation(PSTRAIT_LOCATION location); - void GetLocationInWorld(INSTANCE_ID &instance,psSectorInfo *§orinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot); - void SetLocationInWorld(INSTANCE_ID instance,psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot); + void GetLocationInWorld(InstanceID &instance,psSectorInfo *§orinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot); + void SetLocationInWorld(InstanceID instance,psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot); void SaveLocationInWorld(); /// Construct an XML format string of the player's texture choices. Modified: trunk/src/server/bulkobjects/pscharacterloader.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacterloader.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/pscharacterloader.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -341,7 +341,7 @@ values.FormatPush("%u",chardata->BankMoney().GetOctas()); float x,y,z,yrot; psSectorInfo *sectorinfo; - INSTANCE_ID instance; + InstanceID instance; chardata->GetLocationInWorld(instance,sectorinfo,x,y,z,yrot); values.FormatPush("%10.2f",x); values.FormatPush("%10.2f",y); Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/psitem.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -141,7 +141,7 @@ flags = 0; crafter_id = 0; guild_id = 0; - parent_item_instance_id = 0; + parent_item_InstanceID = 0; // container_in_location=(unsigned int)-1; base_stats=NULL; @@ -240,7 +240,7 @@ // Item Unique ID # SetUID(row.GetUInt32("id")); CS_ASSERT(uid != 0); - parent_item_instance_id = row.GetUInt32("parent_item_id"); + parent_item_InstanceID = row.GetUInt32("parent_item_id"); loc_in_parent = (INVENTORY_SLOT_NUMBER) row.GetInt("location_in_parent"); // Stack count (will be 0 if NULL - either means this is a non stackable item) @@ -380,7 +380,7 @@ row.GetInt("parent_item_id") == 0)) // No owner and no slot { float x,y,z,yrot; - INSTANCE_ID instance; + InstanceID instance; instance = row.GetUInt32("loc_instance"); // printf("KWF: Item instance=%d\n", instance); @@ -442,7 +442,7 @@ void psItem::Save(bool children) { - CS_ASSERT(!(loc_in_parent == -1 && owning_character && parent_item_instance_id==0)); + CS_ASSERT(!(loc_in_parent == -1 && owning_character && parent_item_InstanceID==0)); if (loaded && !pendingsave) { @@ -610,25 +610,25 @@ targetQuery->AddField("item_stats_id_standard",GetBaseStats()->GetUID()); // Container stuff - if (!parent_item_instance_id) // if not in container + if (!parent_item_InstanceID) // if not in container { targetQuery->AddFieldNull("parent_item_id"); // id of object containing this one targetQuery->AddField("location_in_parent",loc_in_parent); // slot number, or -1 if out in the world } else // in container { - targetQuery->AddField("parent_item_id",parent_item_instance_id); + targetQuery->AddField("parent_item_id",parent_item_InstanceID); targetQuery->AddField("location_in_parent",loc_in_parent); } float locx,locy,locz,locyrot; psSectorInfo *sectorinfo; - INSTANCE_ID instance; + InstanceID instance; GetLocationInWorld(instance,§orinfo,locx,locy,locz,locyrot); - if (!sectorinfo || parent_item_instance_id) + if (!sectorinfo || parent_item_InstanceID) { targetQuery->AddFieldNull("loc_x"); targetQuery->AddFieldNull("loc_y"); @@ -728,12 +728,12 @@ INVENTORY_SLOT_NUMBER psItem::GetLocInParent(bool adjustSlot) { - if (adjustSlot && parent_item_instance_id) + if (adjustSlot && parent_item_InstanceID) { - psItem *container = owning_character->Inventory().FindItemID(parent_item_instance_id); + psItem *container = owning_character->Inventory().FindItemID(parent_item_InstanceID); if (!container) { -// Error3("Bad container id %d in item %d.",parent_item_instance_id,uid); +// Error3("Bad container id %d in item %d.",parent_item_InstanceID,uid); return loc_in_parent; } int slot = container->GetLocInParent(false); @@ -881,7 +881,7 @@ return 0; } -void psItem::GetLocationInWorld(INSTANCE_ID &instance,psSectorInfo **sectorinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) const +void psItem::GetLocationInWorld(InstanceID &instance,psSectorInfo **sectorinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) const { instance = location.worldInstance; *sectorinfo = location.loc_sectorinfo; @@ -891,7 +891,7 @@ loc_yrot = location.loc_yrot; } -void psItem::SetLocationInWorld(INSTANCE_ID instance,psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot) +void psItem::SetLocationInWorld(InstanceID instance,psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot) { location.worldInstance = instance; location.loc_sectorinfo = sectorinfo; @@ -1051,7 +1051,7 @@ owning_character->Inventory().Unequip(this); SetOwningCharacter(owner); - parent_item_instance_id = parent_id; + parent_item_InstanceID = parent_id; loc_in_parent = (INVENTORY_SLOT_NUMBER)(slot%100); if (IsEquipped() && owning_character) @@ -2171,7 +2171,7 @@ schedule = NULL; } -psScheduledItem::psScheduledItem(int id,uint32 itemID,csVector3& position, psSectorInfo* sector,INSTANCE_ID instance, int interval,int maxrnd, +psScheduledItem::psScheduledItem(int id,uint32 itemID,csVector3& position, psSectorInfo* sector,InstanceID instance, int interval,int maxrnd, float range) { spawnID = id; @@ -2382,7 +2382,7 @@ for (size_t i = 0; i < client->GetCharacterData()->Inventory().GetInventoryIndexCount(); i++) { psItem *child = client->GetCharacterData()->Inventory().GetInventoryIndexItem(i); - if (parent_item_instance_id == uid) + if (parent_item_InstanceID == uid) { outgoing.AddContents(child->GetName(), child->GetImageName(), child->GetPurifyStatus(), slot++, Modified: trunk/src/server/bulkobjects/psitem.h =================================================================== --- trunk/src/server/bulkobjects/psitem.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/psitem.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -276,7 +276,7 @@ psSectorInfo *loc_sectorinfo; float loc_x,loc_y,loc_z; float loc_yrot; - INSTANCE_ID worldInstance; + InstanceID worldInstance; } location; /// 0% means item does not reduce decay at all. 100% means item does not decay. @@ -327,7 +327,7 @@ * */ /// Points to the object that contains this object, or NULL if there is none. - INSTANCE_ID parent_item_instance_id; + InstanceID parent_item_InstanceID; /** Dual use. Indicates either the slot within the parent item if contained, or the slot in the player's inventory/equipment/bulk if appropriate. @@ -591,8 +591,8 @@ /// Returns the item that contains this item, or NULL if it's not contained by another item. uint32 GetContainerID() const - { return parent_item_instance_id; } - void SetContainerID(uint32 parentId) { parent_item_instance_id = parentId; } + { return parent_item_InstanceID; } + void SetContainerID(uint32 parentId) { parent_item_InstanceID = parentId; } /** Returns the location of this item in it's parent item or in the players equipment, bulk or bank as appropriate. @@ -704,8 +704,8 @@ float GetVisibleDistance(); - void GetLocationInWorld(INSTANCE_ID &instance,psSectorInfo **sectorinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) const; - void SetLocationInWorld(INSTANCE_ID instance,psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot); + void GetLocationInWorld(InstanceID &instance,psSectorInfo **sectorinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) const; + void SetLocationInWorld(InstanceID instance,psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot); psSectorInfo* GetSector() const { return location.loc_sectorinfo; } @@ -891,7 +891,7 @@ class psScheduledItem { public: - psScheduledItem(int spawnID,uint32 itemID,csVector3& position, psSectorInfo* sector,INSTANCE_ID instance, int interval,int maxrnd, + psScheduledItem(int spawnID,uint32 itemID,csVector3& position, psSectorInfo* sector,InstanceID instance, int interval,int maxrnd, float range); psItem* CreateItem(); @@ -918,7 +918,7 @@ uint32 itemID; ///< Item csVector3 pos; ///< Position psSectorInfo* sector; ///< Sector - INSTANCE_ID worldInstance; ///< Instance ID to spawn in + InstanceID worldInstance; ///< Instance ID to spawn in int interval; ///< Interval in msecs int maxrnd; ///< Maximum random interval modifier in msecs float range; ///< Range in which to spawn item Modified: trunk/src/server/bulkobjects/psnpcloader.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcloader.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/bulkobjects/psnpcloader.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -347,7 +347,7 @@ csVector3 pos, rot; csString sector; - INSTANCE_ID instance; + InstanceID instance; instance = DEFAULT_INSTANCE; const char * inst_str = xmlnode->GetAttributeValue("instance"); Modified: trunk/src/server/creationmanager.cpp =================================================================== --- trunk/src/server/creationmanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/creationmanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -786,7 +786,7 @@ float x,y,z,yrot; const char *sectorname; - INSTANCE_ID newinstance; + InstanceID newinstance; sectorname = "tutorial"; psSectorInfo *sectorinfo = CacheManager::GetSingleton().GetSectorInfoByName(sectorname); Modified: trunk/src/server/entitymanager.cpp =================================================================== --- trunk/src/server/entitymanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/entitymanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -242,7 +242,7 @@ // Adjust Position of Familiar from owners pos owner->GetPosition( pos, yrot, sector ); - INSTANCE_ID instance = owner->GetInstance(); + InstanceID instance = owner->GetInstance(); familiarID = this->CopyNPCFromDatabase( masterFamiliarID, pos.x + 1.5, pos.y, pos.z + 1.5, yrot, sector->QueryObject()->GetName(), instance, familiarname, "Familiar" ); if ( familiarID == 0 ) @@ -578,7 +578,7 @@ float yrot; psSectorInfo *sectorinfo; iSector *sector; - INSTANCE_ID instance; + InstanceID instance; chardata->GetLocationInWorld(instance,sectorinfo,pos.x,pos.y,pos.z,yrot); sector=FindSector(sectorinfo->name); if (sector==NULL) @@ -664,7 +664,7 @@ return true; } -PID EntityManager::CopyNPCFromDatabase(PID master_id, float x, float y, float z, float angle, const csString & sector, INSTANCE_ID instance, const char *firstName, const char *lastName) +PID EntityManager::CopyNPCFromDatabase(PID master_id, float x, float y, float z, float angle, const csString & sector, InstanceID instance, const char *firstName, const char *lastName) { psCharacter * npc = NULL; PID new_id; @@ -703,7 +703,7 @@ float yrot; psSectorInfo *sectorinfo; iSector *sector; - INSTANCE_ID instance; + InstanceID instance; chardata->GetLocationInWorld(instance, sectorinfo,pos.x,pos.y,pos.z,yrot); sector = FindSector(sectorinfo->name); @@ -718,7 +718,7 @@ return CreateNPC(chardata, instance, pos, sector, yrot, updateProxList); } -EID EntityManager::CreateNPC(psCharacter *chardata, INSTANCE_ID instance, csVector3 pos, iSector* sector, float yrot, bool updateProxList) +EID EntityManager::CreateNPC(psCharacter *chardata, InstanceID instance, csVector3 pos, iSector* sector, float yrot, bool updateProxList) { if (chardata==NULL) return false; @@ -785,7 +785,7 @@ } gemObject *EntityManager::MoveItemToWorld(psItem *chrItem, - INSTANCE_ID instance, + InstanceID instance, psSectorInfo *sectorinfo, float loc_x, float loc_y, @@ -814,7 +814,7 @@ csVector3 newpos; float yrot; iSector *isec; - INSTANCE_ID instance; + InstanceID instance; iteminstance->GetLocationInWorld(instance, §orinfo,newpos.x,newpos.y,newpos.z,yrot); if (sectorinfo==NULL) @@ -1187,7 +1187,7 @@ iSector * targetSector; csVector3 targetPoint; float yRot = 0.0; - INSTANCE_ID instance; + InstanceID instance; gemActor *subject = dynamic_cast< gemActor * > (source); Modified: trunk/src/server/entitymanager.h =================================================================== --- trunk/src/server/entitymanager.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/entitymanager.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -100,10 +100,10 @@ bool CreatePlayer(Client* client); bool DeletePlayer(Client* client); - PID CopyNPCFromDatabase(PID master_id, float x, float y, float z, float angle, const csString & sector, INSTANCE_ID instance, const char *firstName = NULL, const char *lastName = NULL); + PID CopyNPCFromDatabase(PID master_id, float x, float y, float z, float angle, const csString & sector, InstanceID instance, const char *firstName = NULL, const char *lastName = NULL); EID CreateNPC(PID npcID, bool updateProxList = true); EID CreateNPC(psCharacter *chardata, bool updateProxList = true); - EID CreateNPC(psCharacter *chardata, INSTANCE_ID instance, csVector3 pos, iSector* sector, float yrot, bool updateProxList = true); + EID CreateNPC(psCharacter *chardata, InstanceID instance, csVector3 pos, iSector* sector, float yrot, bool updateProxList = true); gemNPC *CreateFamiliar(gemActor *owner); gemNPC *CreatePet( Client* client, int familiarid ); @@ -113,7 +113,7 @@ gemObject *CreateItem(psItem *& iteminstance, bool transient); gemObject *MoveItemToWorld(psItem *keyItem, - INSTANCE_ID instance, + InstanceID instance, psSectorInfo *sectorinfo, float loc_x, float loc_y, Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/gem.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -445,7 +445,7 @@ { csVector3 pos,pos2; float yrot; - INSTANCE_ID instance,oldInstance; + InstanceID instance,oldInstance; iSector *sector; obj->GetPosition(pos,yrot,sector); instance = obj->GetInstance(); @@ -587,7 +587,7 @@ gemObject::gemObject(const char* name, const char* factname, const char* filename, - INSTANCE_ID myInstance, + InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -1191,7 +1191,7 @@ gemActiveObject::gemActiveObject( const char* name, const char* factname, const char* filename, - INSTANCE_ID myInstance, + InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -1403,7 +1403,7 @@ gemItem::gemItem(csWeakRef<psItem> item, const char* factname, const char* filename, - INSTANCE_ID instance, + InstanceID instance, iSector* room, const csVector3& pos, float rotangle, @@ -1439,7 +1439,7 @@ cel->RemoveItemEntity(this); } -void gemItem::SetPosition(const csVector3& pos,float angle, iSector* sector, INSTANCE_ID instance) +void gemItem::SetPosition(const csVector3& pos,float angle, iSector* sector, InstanceID instance) { this->pos = pos; this->yRot = angle; @@ -1653,7 +1653,7 @@ gemActor::gemActor( psCharacter *chardata, const char* factname, const char* filename, - INSTANCE_ID myInstance, + InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -2632,7 +2632,7 @@ questtester = false; // Always off by default } -void gemActor::SetInstance(INSTANCE_ID worldInstance) +void gemActor::SetInstance(InstanceID worldInstance) { this->worldInstance = worldInstance; } @@ -2961,13 +2961,13 @@ return true; } -void gemActor::GetLastSuperclientPos(csVector3& pos, INSTANCE_ID& instance) const +void gemActor::GetLastSuperclientPos(csVector3& pos, InstanceID& instance) const { pos = lastSentSuperclientPos; instance = lastSentSuperclientInstance; } -void gemActor::SetLastSuperclientPos(const csVector3& pos, INSTANCE_ID instance) +void gemActor::SetLastSuperclientPos(const csVector3& pos, InstanceID instance) { lastSentSuperclientPos = pos; lastSentSuperclientInstance = instance; @@ -3418,7 +3418,7 @@ gemNPC::gemNPC( psCharacter *chardata, const char* factname, const char* filename, - INSTANCE_ID instance, + InstanceID instance, iSector* room, const csVector3& pos, float rotangle, @@ -3950,7 +3950,7 @@ gemContainer::gemContainer(csWeakRef<psItem> item, const char* factname, const char* filename, - INSTANCE_ID myInstance, + InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/gem.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -253,7 +253,7 @@ { public: - gemObject(const char* name, const char* factname,const char* filename,INSTANCE_ID myinstance,iSector* room, + gemObject(const char* name, const char* factname,const char* filename,InstanceID myinstance,iSector* room, const csVector3& pos,float rotangle,int clientnum); /// This ctor is only for use in making keys for the BinaryTree @@ -287,8 +287,8 @@ const char *GetName(); void SetName(const char* n); - void SetInstance(INSTANCE_ID newInstance) { worldInstance = newInstance; } - INSTANCE_ID GetInstance() { return worldInstance; } + void SetInstance(InstanceID newInstance) { worldInstance = newInstance; } + InstanceID GetInstance() { return worldInstance; } void RegisterCallback(iDeleteObjectCallback * receiver) { receivers.Push(receiver); } void UnregisterCallback(iDeleteObjectCallback * receiver) { receivers.Delete(receiver); } @@ -344,8 +344,8 @@ virtual void BroadcastTargetStatDR(ClientConnectionSet *clients) { } virtual void SendTargetStatDR(Client *client) { } virtual psNPCDialog *GetNPCDialogPtr() { return 0; } - virtual void GetLastSuperclientPos(csVector3& pos, INSTANCE_ID& instance) const { } - virtual void SetLastSuperclientPos(const csVector3& pos, INSTANCE_ID instance) { } + virtual void GetLastSuperclientPos(csVector3& pos, InstanceID& instance) const { } + virtual void SetLastSuperclientPos(const csVector3& pos, InstanceID instance) { } virtual void AddLootableClient(int cnum) { } virtual void RemoveLootableClient(int cnum) { } virtual bool IsLootableClient(int cnum) { return false; } @@ -366,7 +366,7 @@ ProximityList *proxlist; ///< Proximity List for this object csString name; ///< Name of this object, used mostly for debugging static GEMSupervisor *cel; ///< Static ptr back to main collection of all objects - INSTANCE_ID worldInstance; ///< Only objects which match instances can see each other + InstanceID worldInstance; ///< Only objects which match instances can see each other csVector3 pos; ///< Position in 3d space float yRot; ///< Left-Right rotation, in radians iSector *sector; ///< Ptr to the CS sector inhabited @@ -398,7 +398,7 @@ gemActiveObject( const char* name, const char* factname, const char* filename, - INSTANCE_ID myInstance, + InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -433,7 +433,7 @@ gemItem(csWeakRef<psItem> item, const char* factname, const char* filename, - INSTANCE_ID myInstance, + InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -447,7 +447,7 @@ virtual void Broadcast(int clientnum, bool control); virtual void Send( int clientnum, bool control, bool super_clients); - virtual void SetPosition(const csVector3& pos,float angle, iSector* sector, INSTANCE_ID instance); + virtual void SetPosition(const csVector3& pos,float angle, iSector* sector, InstanceID instance); virtual bool IsPickable(); virtual bool IsLockable(); @@ -477,7 +477,7 @@ gemContainer(csWeakRef<psItem> item, const char* factname, const char* filename, - INSTANCE_ID myInstance, + InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, @@ -655,7 +655,7 @@ psLinearMovement* pcmove; gemActor(psCharacter *chardata, const char* factname,const char* filename, - INSTANCE_ID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); + InstanceID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); virtual ~gemActor(); @@ -719,7 +719,7 @@ virtual float DrainMana(float adjust, bool absolute); void SetPosition(const csVector3& pos,float angle, iSector* sector); - void SetInstance(INSTANCE_ID worldInstance); + void SetInstance(InstanceID worldInstance); void UpdateValidLocation(const csVector3& pos, float vel_y, float yrot, iSector* sector, bool force = false); @@ -756,8 +756,8 @@ void Resurrect(); virtual bool UpdateDR(); - virtual void GetLastSuperclientPos(csVector3& pos, INSTANCE_ID& instance) const; - virtual void SetLastSuperclientPos(const csVector3& pos, INSTANCE_ID instance); + virtual void GetLastSuperclientPos(csVector3& pos, InstanceID& instance) const; + virtual void SetLastSuperclientPos(const csVector3& pos, InstanceID instance); virtual void BroadcastTargetStatDR(ClientConnectionSet *clients); virtual void SendTargetStatDR(Client *client); @@ -897,7 +897,7 @@ public: gemNPC(psCharacter *chardata, const char* factname,const char* filename, - INSTANCE_ID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); + InstanceID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); virtual ~gemNPC(); @@ -964,7 +964,7 @@ { public: - gemPet(psCharacter *chardata, const char* factname,const char* filename,INSTANCE_ID instance,iSector* room, + gemPet(psCharacter *chardata, const char* factname,const char* filename,InstanceID instance,iSector* room, const csVector3& pos,float rotangle,int clientnum,uint32 id) : gemNPC(chardata,factname,filename,instance,room,pos,rotangle,clientnum) { this->persistanceLevel = "Temporary"; Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/npcmanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -1548,7 +1548,7 @@ iSector * targetSector; csVector3 targetPoint; float yRot = 0.0; - INSTANCE_ID instance; + InstanceID instance; owner->GetActor()->GetPosition(targetPoint,yRot,targetSector); instance = owner->GetActor()->GetInstance(); psSectorInfo* sectorInfo = CacheManager::GetSingleton().GetSectorInfoByName(targetSector->QueryObject()->GetName()); Modified: trunk/src/server/progressionmanager.cpp =================================================================== --- trunk/src/server/progressionmanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/progressionmanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -3520,7 +3520,7 @@ csVector3 pos; float yrot; psSectorInfo *sectorinfo; - INSTANCE_ID instance; + InstanceID instance; character->GetLocationInWorld(instance,sectorinfo,pos.x,pos.y,pos.z,yrot); // Put effect in front of actor or target where we drop stuff Modified: trunk/src/server/psproxlist.cpp =================================================================== --- trunk/src/server/psproxlist.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/psproxlist.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -374,7 +374,7 @@ iSector *sector; self->GetPosition (pos, rot, sector); - INSTANCE_ID instance = self->GetInstance(); + InstanceID instance = self->GetInstance(); if (self->IsUpdateReq (pos, oldPos) || instance != oldInstance || firstFrame) { Modified: trunk/src/server/psproxlist.h =================================================================== --- trunk/src/server/psproxlist.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/psproxlist.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -63,7 +63,7 @@ int clientnum; bool firstFrame; csVector3 oldPos; - INSTANCE_ID oldInstance; + InstanceID oldInstance; /** Adds 'interestedobject' to 'objectsThatWatchMe' */ void AddWatcher(gemObject *interestedobject, float range); Modified: trunk/src/server/psserverchar.cpp =================================================================== --- trunk/src/server/psserverchar.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/psserverchar.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -216,11 +216,11 @@ if ( action->IsContainer() ) { // Get container instance - uint32 instance_id = action->GetInstanceID(); - gemItem* realItem = GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); + uint32 InstanceID = action->GetInstanceID(); + gemItem* realItem = GEMSupervisor::GetSingleton().FindItemEntity( InstanceID ); if (!realItem) { - Error3("Invalid instance ID %u in action location %s", instance_id, action->name.GetDataSafe()); + Error3("Invalid instance ID %u in action location %s", InstanceID, action->name.GetDataSafe()); return; } Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/spawnmanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -821,7 +821,7 @@ float angle; csString sector; int delay = respawn->GetRespawnDelay(); - INSTANCE_ID instance; + InstanceID instance; respawn->DetermineSpawnLoc(obj->GetCharacterData(),pos,angle,sector,instance); @@ -859,7 +859,7 @@ } } -void SpawnManager::Respawn(INSTANCE_ID instance, csVector3& where, float rot, csString& sector, PID playerID) +void SpawnManager::Respawn(InstanceID instance, csVector3& where, float rot, csString& sector, PID playerID) { psSectorInfo* spawnsector = CacheManager::GetSingleton().GetSectorInfoByName(sector); if (spawnsector==NULL) @@ -1078,7 +1078,7 @@ const char *sector, LootEntrySet *loot_id, int dead_time, - INSTANCE_ID instance) + InstanceID instance) { id = idval; minspawntime = minspawn; @@ -1114,7 +1114,7 @@ return originalplayer; } -void SpawnRule::DetermineSpawnLoc(psCharacter *ch, csVector3& pos, float& angle, csString& sectorname, INSTANCE_ID& instance) +void SpawnRule::DetermineSpawnLoc(psCharacter *ch, csVector3& pos, float& angle, csString& sectorname, InstanceID& instance) { // ignore fixed point if there are ranges in this rule @@ -1250,7 +1250,7 @@ float angle, csString& sectorname, PID newplayer, - INSTANCE_ID newinstance) + InstanceID newinstance) : psGameEvent(0,delayticks,"psRespawnGameEvent") { spawnmanager=mgr; Modified: trunk/src/server/spawnmanager.h =================================================================== --- trunk/src/server/spawnmanager.h 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/spawnmanager.h 2008-12-05 22:09:55 UTC (rev 2630) @@ -132,7 +132,7 @@ float fixedspawnz; float fixedspawnrot; csString fixedspawnsector; - INSTANCE_ID fixedinstance; + InstanceID fixedinstance; /// Spawn ranges for the current rule BinaryRBTree<SpawnRange> ranges; @@ -157,7 +157,7 @@ const char *sector, LootEntrySet *loot_id, int dead_time, - INSTANCE_ID instance); + InstanceID instance); int GetID() { return id; }; void SetID(int idval) { id = idval; }; @@ -169,7 +169,7 @@ PID CheckSubstitution(PID originalplayer); /// Pick a spot for the entity to respawn - void DetermineSpawnLoc(psCharacter *ch, csVector3& pos, float& angle, csString& sectorname, INSTANCE_ID& instance); + void DetermineSpawnLoc(psCharacter *ch, csVector3& pos, float& angle, csString& sectorname, InstanceID& instance); /// Add a spawn range to current rule void AddRange(SpawnRange *range); @@ -377,7 +377,7 @@ * This function is called periodically by the server and will respawn * NPCs as appropriate. */ - void Respawn(INSTANCE_ID instance, csVector3& where, float rot, csString& sector, PID playerID); + void Respawn(InstanceID instance, csVector3& where, float rot, csString& sector, PID playerID); /// Adds all items to the world. /** Called at the server startup to add all the items to the game. @@ -414,7 +414,7 @@ float rot; csString sector; PID playerID; - INSTANCE_ID instance; + InstanceID instance; public: psRespawnGameEvent(SpawnManager *mgr, @@ -423,7 +423,7 @@ float angle, csString& sector, PID newplayer, - INSTANCE_ID newinstance); + InstanceID newinstance); virtual void Trigger(); // Abstract event processing function }; Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2008-12-05 17:57:44 UTC (rev 2629) +++ trunk/src/server/usermanager.cpp 2008-12-05 22:09:55 UTC (rev 2630) @@ -910,16 +910,16 @@ } // Check for a lock - uint32 instance_id = action->GetInstanceID(); - if ( instance_id != 0 ) + uint32 instanceID = action->GetInstanceID(); + if ( instanceID != 0 ) { // find lock to to test if locked - gemItem* realItem = GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); + gemItem* realItem = GEMSupervisor::GetSingleton().FindItemEntity( instanceID ); if (!realItem) { - if (secure) psserver->SendSystemInfo(client->GetClientNum(),"Invalid instance ID %u in action location %s", instance_id, action->name.GetDataSafe()); - Error3("Invalid instance ID %u in action location %s", instance_id, action->name.GetDataSafe()); + if (secure) psserver->SendSystemInfo(client->GetClientNum(),"Invalid instance ID %u in action location %s", instanceID, action->name.GetDataSafe()); + Error3("Invalid instance ID %u in action location %s", instanceID, action->name.GetDataSafe()); return; } @@ -961,7 +961,7 @@ // Send player to unique instance else if (entranceType == "ActionID") { - INSTANCE_ID instance = action->id; + InstanceID instance = action->id; if (secure) psserver->SendSystemInfo(client->GetClientNum(),"Teleporting to sector %s", sectorName.GetData()); Teleport( client, pos.x, pos.y, pos.z, instance, rot, sectorName ); } @@ -1460,7 +1460,7 @@ float angle; object->GetPosition(pos, angle, sector); - INSTANCE_ID instance = object->GetInstance(); + InstanceID instance = object->GetInstance(); csString sector_name = (sector) ? sector->QueryObject()->GetName() : "(null)"; @@ -2298,7 +2298,7 @@ psserver->combatmanager->StopAttack(targeter->GetActor()); } -void UserManager::Teleport( Client *client, float x, float y, float z, INSTANCE_ID instance, float rot, const char* sectorname ) +void UserManager::Teleport( Client *client, float x, float y, float z, InstanceID instance, float rot, co... [truncated message content] |