From: <wel...@us...> - 2009-02-03 12:57:20
|
Revision: 2969 http://planeshift.svn.sourceforge.net/planeshift/?rev=2969&view=rev Author: weltall2 Date: 2009-02-03 12:57:16 +0000 (Tue, 03 Feb 2009) Log Message: ----------- Committed a missing svn db file from last commit and added an editable life events part separated from the char creation data. Improved also some comments. Modified Paths: -------------- trunk/src/client/gui/pawschardescription.cpp trunk/src/client/gui/pawschardescription.h trunk/src/client/gui/pawsdetailwindow.cpp trunk/src/common/net/messages.h trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/bulkobjects/pscharacterloader.cpp trunk/src/server/database/mysql/factions.sql trunk/src/server/usermanager.cpp Modified: trunk/src/client/gui/pawschardescription.cpp =================================================================== --- trunk/src/client/gui/pawschardescription.cpp 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/client/gui/pawschardescription.cpp 2009-02-03 12:57:16 UTC (rev 2969) @@ -46,7 +46,7 @@ pawsCharDescription::pawsCharDescription() { - ooc_editing = false; + editingtype = DESC_IC; } pawsCharDescription::~pawsCharDescription() @@ -90,10 +90,13 @@ if (msg.requestor == "pawsCharDescription") { - if(ooc_editing) + if(editingtype == DESC_IC) + description->SetText(msg.desc); + else if(editingtype == DESC_OOC) description->SetText(msg.desc_ooc); else - description->SetText(msg.desc); + description->SetText(msg.creationinfo); + psengine->GetMsgHandler()->Unsubscribe( this, MSGTYPE_CHARACTERDETAILS ); } return; @@ -107,7 +110,7 @@ case BTN_OK: { csString newTxt(description->GetText()); - psCharacterDescriptionUpdateMessage descUpdate(newTxt,ooc_editing); + psCharacterDescriptionUpdateMessage descUpdate(newTxt,editingtype); psengine->GetMsgHandler()->SendMessage(descUpdate.msg); Hide(); Modified: trunk/src/client/gui/pawschardescription.h =================================================================== --- trunk/src/client/gui/pawschardescription.h 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/client/gui/pawschardescription.h 2009-02-03 12:57:16 UTC (rev 2969) @@ -32,7 +32,7 @@ bool PostSetup(); /// used to change the description to be edited - void SetOOCDescription(bool editOOC) { ooc_editing = editOOC; } + void SetDescriptionType(DESCTYPE type) { editingtype = type; } void RequestDetails(); void Show(); @@ -42,7 +42,7 @@ private: pawsMultilineEditTextBox *description; pawsMultiLineTextBox *creationinfo; - bool ooc_editing; + DESCTYPE editingtype; }; CREATE_PAWS_FACTORY( pawsCharDescription ); Modified: trunk/src/client/gui/pawsdetailwindow.cpp =================================================================== --- trunk/src/client/gui/pawsdetailwindow.cpp 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/client/gui/pawsdetailwindow.cpp 2009-02-03 12:57:16 UTC (rev 2969) @@ -267,8 +267,14 @@ { pawsCharDescription *editWindow = (pawsCharDescription*) PawsManager::GetSingleton().FindWidget("DescriptionEdit"); editWindow->PostSetup(); - //if the OOC description tab is selected this will be true and the occ description will be shown - editWindow->SetOOCDescription(lastTab == (pawsButton*)FindWidget( "ShowDescrOOC" )); + //show the right description depending on the tab selected + if(lastTab == (pawsButton*)FindWidget( "ShowDescr" )) + editWindow->SetDescriptionType(DESC_IC); + else if(lastTab == (pawsButton*)FindWidget( "ShowDescrOOC" )) + editWindow->SetDescriptionType(DESC_OOC); + else + editWindow->SetDescriptionType(DESC_CC); + editWindow->Show(); break; } @@ -318,7 +324,8 @@ else if(widget->GetID() == BTN_DESCRCC) { description->SetText(storedcreationinfo); - editButton->Hide(); //hide the edit button it's useless here + if(details_editable) editButton->Show(); //if it's editable show the button + else editButton->Hide(); } else { Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/common/net/messages.h 2009-02-03 12:57:16 UTC (rev 2969) @@ -3608,24 +3608,31 @@ csString requestor; /// Identifies which part of system initiated this }; +enum DESCTYPE +{ + DESC_IC = 1, ///< Normal character description + DESC_OOC, ///< Out of Character description + DESC_CC ///< Character life additional data provided by players +}; + class psCharacterDescriptionUpdateMessage : public psMessageCracker { public: - psCharacterDescriptionUpdateMessage(csString& newValue, bool oocdesc) + psCharacterDescriptionUpdateMessage(csString& newValue, DESCTYPE desctype) { - msg.AttachNew(new MsgEntry( newValue.Length() +1 + sizeof(oocdesc) )); + msg.AttachNew(new MsgEntry( newValue.Length() +1 + sizeof(uint8_t) )); msg->SetType(MSGTYPE_CHARDESCUPDATE); msg->clientnum = 0; msg->Add(newValue); - msg->Add(oocdesc); + msg->Add( (uint8_t)desctype); } psCharacterDescriptionUpdateMessage(MsgEntry *me) { - newValue = me->GetStr(); - oocdesc = me->GetBool(); + newValue = me->GetStr(); + desctype = (DESCTYPE) me->GetUInt8(); } PSF_DECLARE_MSG_FACTORY(); @@ -3639,7 +3646,7 @@ virtual csString ToString(AccessPointers * access_ptrs); csString newValue; - bool oocdesc; + DESCTYPE desctype; }; //------------------------------------------------------------------------------ Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-03 12:57:16 UTC (rev 2969) @@ -248,6 +248,8 @@ SetCreationInfo(row["creation_info"]); //loads the info gathered in the creation in order to allow the player //to review them + SetLifeDescription(row["description_life"]); //Loads the life events added by players + attributes.SetStat(PSITEMSTATS_STAT_STRENGTH,(unsigned int)row.GetFloat("base_strength"), false); attributes.SetStat(PSITEMSTATS_STAT_AGILITY,(unsigned int)row.GetFloat("base_agility"), false); attributes.SetStat(PSITEMSTATS_STAT_ENDURANCE,(unsigned int)row.GetFloat("base_endurance"), false); @@ -3754,7 +3756,7 @@ const char* psCharacter::GetDescription() { - return description; + return description.GetDataSafe(); } void psCharacter::SetDescription(const char* newValue) @@ -3773,7 +3775,7 @@ const char* psCharacter::GetOOCDescription() { - return oocdescription; + return oocdescription.GetDataSafe(); } void psCharacter::SetOOCDescription(const char* newValue) @@ -3793,7 +3795,7 @@ //returns the stored char creation info of the player const char* psCharacter::GetCreationInfo() { - return creationinfo; + return creationinfo.GetDataSafe(); } void psCharacter::SetCreationInfo(const char* newValue) @@ -3810,6 +3812,26 @@ psserver->SendSystemError(GetActor()->GetClient()->GetClientNum(), "Warning! creation info trimmed."); } +//returns the stored custom life event info of the player +const char* psCharacter::GetLifeDescription() +{ + return lifedescription.GetDataSafe(); +} + +void psCharacter::SetLifeDescription(const char* newValue) +{ + lifedescription = newValue; + bool bChanged = false; + while (lifedescription.Find("\n\n\n\n") != (size_t)-1) + { + bChanged = true; + lifedescription.ReplaceAll("\n\n\n\n", "\n\n\n"); + } + + if (bChanged && GetActor() && GetActor()->GetClient()) + psserver->SendSystemError(GetActor()->GetClient()->GetClientNum(), "Warning! custom life events trimmed."); +} + //TODO: Make this not return a temp csString, but fix in place csString NormalizeCharacterName(const csString & name) { Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-02-03 12:57:16 UTC (rev 2969) @@ -1133,6 +1133,11 @@ /// This is used to store the informations from the char creation. Players shouldn't be able to edit this. void SetCreationInfo(const char* newValue); + /// This is used to get the stored informations from the custom life events made by players + const char* GetLifeDescription(); + /// This is used to store the informations sent by players for their custom life events + void SetLifeDescription(const char* newValue); + /// This is used by the math scripting engine to get various values. double GetProperty(const char *ptr); double CalcFunction(const char * functionName, const double * params); @@ -1165,27 +1170,24 @@ PSCHARACTER_WORKSTATE work_state; psWorkGameEvent * workEvent; - csString description; ///<Player description - csString oocdescription; ///<Player OOC description - csString creationinfo; ///<Creation manager informations + csString description; ///<Player description + csString oocdescription; ///<Player OOC description + csString creationinfo; ///<Creation manager informations + csString lifedescription; ///<Custom life events informations - /// Kill Exp - int kill_exp; + int kill_exp; ///< Kill Exp - float attackValueModifier; ///< Attack value is multiplied by this - float defenseValueModifier; ///< Defense value is multiplied by this - float meleeDefensiveDamageModifier; /// Melee damage to this character is multiplied by this + float attackValueModifier; ///< Attack value is multiplied by this + float defenseValueModifier; ///< Defense value is multiplied by this + float meleeDefensiveDamageModifier; ///< Melee damage to this character is multiplied by this - /// The PowerLevel math script - MathScript* powerScript, *maxRealmScript; + MathScript* powerScript, *maxRealmScript; ///< The PowerLevel math script - /// The stamina calc script - MathScript* staminaCalc; + MathScript* staminaCalc; ///< The stamina calc script protected: - /// String value copied from the database containing the last login time - csString lastlogintime; + csString lastlogintime;///< String value copied from the database containing the last login time //Stats for this character unsigned int deaths; Modified: trunk/src/server/bulkobjects/pscharacterloader.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacterloader.cpp 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/server/bulkobjects/pscharacterloader.cpp 2009-02-03 12:57:16 UTC (rev 2969) @@ -324,7 +324,7 @@ values.FormatPush("%s",chardata->GetDescription()); values.FormatPush("%s",chardata->GetOOCDescription()); values.FormatPush("%s",chardata->GetCreationInfo()); - values.FormatPush("%s","");//placeholder life description + values.FormatPush("%s",chardata->GetLifeDescription()); values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_STRENGTH, false)); values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_AGILITY, false)); values.FormatPush("%d",chardata->Stats().GetStat(PSITEMSTATS_STAT_ENDURANCE, false)); @@ -809,7 +809,7 @@ targetUpdate->AddField("description",chardata->GetDescription()); targetUpdate->AddField("description_ooc",chardata->GetOOCDescription()); targetUpdate->AddField("creation_info",chardata->GetCreationInfo()); - targetUpdate->AddField("description_life",""); //placeholder life description + targetUpdate->AddField("description_life",chardata->GetLifeDescription()); // Done building the fields struct, now // SAVE it to the DB. Modified: trunk/src/server/database/mysql/factions.sql =================================================================== --- trunk/src/server/database/mysql/factions.sql 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/server/database/mysql/factions.sql 2009-02-03 12:57:16 UTC (rev 2969) @@ -11,6 +11,7 @@ id int(8) unsigned NOT NULL auto_increment, faction_name varchar(40) NOT NULL DEFAULT '' , `faction_description` text, + faction_character BLOB NOT NULL DEFAULT '', faction_weight float(6,3) NOT NULL DEFAULT '1.000' , PRIMARY KEY (id) ); @@ -20,7 +21,7 @@ # Dumping data for table 'factions' # -INSERT INTO factions VALUES("1","orcs","faction orcs will garantie you are hated by every one except orcs","1.000"); -INSERT INTO factions VALUES("2","merchants","faction merchants will offer you a nice deal from time to time","1.000"); -INSERT INTO factions VALUES("3","liberals","faction liberals will make you popular by all those who value freedom and such stuff","2.000"); -INSERT INTO factions VALUES("4","conservatives","faction conservatives are for those who value tradition and steady life style","2.000"); +INSERT INTO factions VALUES("1","orcs","faction orcs will garantie you are hated by every one except orcs","","1.000"); +INSERT INTO factions VALUES("2","merchants","faction merchants will offer you a nice deal from time to time","","1.000"); +INSERT INTO factions VALUES("3","liberals","faction liberals will make you popular by all those who value freedom and such stuff","","2.000"); +INSERT INTO factions VALUES("4","conservatives","faction conservatives are for those who value tradition and steady life style","","2.000"); Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-03 09:21:39 UTC (rev 2968) +++ trunk/src/server/usermanager.cpp 2009-02-03 12:57:16 UTC (rev 2969) @@ -673,6 +673,7 @@ csString charName = charData->GetCharFullName(); csString raceName; + csString creationinfo; PSCHARACTER_GENDER gender; psRaceInfo* charrinfo = CacheManager::GetSingleton().GetRaceInfoByMeshName(meshName); if (charrinfo != NULL) @@ -693,7 +694,14 @@ full = true; // GMs can view the stats list //send creation info only if the player is requesting his info - csString creationinfo = ( isSelf || full )? charData->GetCreationInfo() : ""; + if( isSelf || full) + { + if(requestor != "pawsCharDescription") //only send all if the requestor is the normal description window + creationinfo.Format("%s\n\n%s\n\n%s", charData->GetCreationInfo(), " ", charData->GetLifeDescription()); + else + creationinfo = charData->GetLifeDescription(); + } + csString desc_ooc = charData->GetOOCDescription(); if (full) @@ -833,10 +841,12 @@ if (!charData) return; - if(descUpdate.oocdesc) + if(descUpdate.desctype == DESC_IC) + charData->SetDescription(descUpdate.newValue); + else if(descUpdate.desctype == DESC_OOC) charData->SetOOCDescription(descUpdate.newValue); - else - charData->SetDescription(descUpdate.newValue); + else if(descUpdate.desctype == DESC_CC) + charData->SetLifeDescription(descUpdate.newValue); Debug3(LOG_USER, client->GetClientNum(), "Character description updated for %s (%s)\n", charData->GetCharFullName(), ShowID(client->GetAccountID())); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-05 19:15:30
|
Revision: 2976 http://planeshift.svn.sourceforge.net/planeshift/?rev=2976&view=rev Author: weltall2 Date: 2009-02-05 19:15:24 +0000 (Thu, 05 Feb 2009) Log Message: ----------- Completed the work on new descriptions: added the ability to add dynamic life events based on the faction points, fixed some issues on the pawsdetailwindow and added some sample data to factions.sql. Thanks to Xillix for part of the sample data. Modified Paths: -------------- trunk/src/client/gui/pawsdetailwindow.cpp trunk/src/common/rpgrules/factions.h trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/cachemanager.cpp trunk/src/server/database/mysql/factions.sql trunk/src/server/usermanager.cpp Modified: trunk/src/client/gui/pawsdetailwindow.cpp =================================================================== --- trunk/src/client/gui/pawsdetailwindow.cpp 2009-02-05 09:24:25 UTC (rev 2975) +++ trunk/src/client/gui/pawsdetailwindow.cpp 2009-02-05 19:15:24 UTC (rev 2976) @@ -220,7 +220,9 @@ "epic descriptions of all sorts, quote great authors and even recite your own unpublished " "novels with no limitation whatsoever."); if(!storedoocdescription.Length()) //if the player didn't input anything in ooc description inform him - storedoocdescription = PawsManager::GetSingleton().Translate("Here you can place any OOC information except to advertise companies, products, or services from the real world.\n\nTo disable this feature delete everything in the window by using the Modify Description button."); + storedoocdescription = PawsManager::GetSingleton().Translate("Here you can place any OOC " + "information except to advertise companies, products, or services from the real world.\n\n" + "To disable this feature delete everything in the window by using the Modify Description button."); } else { @@ -228,7 +230,7 @@ } //checks what tabs should be shown - UpdateTabsVisibility(msg.skills.GetSize() != 0, storedcreationinfo.Length() != 0, + UpdateTabsVisibility(msg.skills.GetSize() != 0, storedcreationinfo.Length() != 0 || details_editable, storedoocdescription.Length() != 0 || details_editable); for(int i=0; i<6; i++) Modified: trunk/src/common/rpgrules/factions.h =================================================================== --- trunk/src/common/rpgrules/factions.h 2009-02-05 09:24:25 UTC (rev 2975) +++ trunk/src/common/rpgrules/factions.h 2009-02-05 19:15:24 UTC (rev 2976) @@ -23,6 +23,15 @@ #include <csutil/hash.h> #include <csutil/csstring.h> +/** This struct stores the values and text used for the dynamically + * generated life events based on factions + */ +struct FactionLifeEvent +{ + int value; ///< Value from which this life event is attribuited + csString event_description; ///< The text of this life event +}; + /** An ingame faction group. * */ @@ -32,6 +41,8 @@ csString description; int id; float weight; + csHash<FactionLifeEvent*, int> PositiveFactionEvents; ///< Stores the Positive faction values life events + csHash<FactionLifeEvent*, int> NegativeFactionEvents; ///< Stores the Negative faction values life events bool operator==(Faction& other) const { return name == other.name; } bool operator<(Faction& other) const Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-05 09:24:25 UTC (rev 2975) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-05 19:15:24 UTC (rev 2976) @@ -3812,12 +3812,58 @@ psserver->SendSystemError(GetActor()->GetClient()->GetClientNum(), "Warning! creation info trimmed."); } +//Generates and returns the dynamic life events from factions +bool psCharacter::GetFactionEventsDescription(csString & factionDescription) +{ + //iterates all the various factions in this character + csHash<FactionStanding*, int>::GlobalIterator iter(GetActor()->GetFactions()->GetStandings().GetIterator()); + while(iter.HasNext()) + { + FactionStanding* standing = iter.Next(); + int score = 0; //used to store the current score + if(standing->score > 0) //positive factions + { + csHash<FactionLifeEvent*, int>::GlobalIterator scoreIter = standing->faction->PositiveFactionEvents.GetIterator(); + score = standing->score; + while (scoreIter.HasNext()) + { + FactionLifeEvent* lifevt = scoreIter.Next(); + if(score > lifevt->value) //check if the score is enough to attribuite this life event + { + factionDescription += lifevt->event_description; //add the life event to the description + factionDescription += "\n"; + break; //nothing else to do as we found what we needed so bail out + } + } + } + else //negative factions + { + csHash<FactionLifeEvent*, int>::GlobalIterator scoreIter = standing->faction->NegativeFactionEvents.GetIterator(); + score = abs(standing->score); //we store values as positive to make things easier and faster so take the + //absolute value + while (scoreIter.HasNext()) + { + FactionLifeEvent* lifevt = scoreIter.Next(); + if(score > lifevt->value) + { + factionDescription += lifevt->event_description; + factionDescription += "\n"; + break; + } + } + } + } + return (factionDescription.Length() > 0); //if the string contains something it means some events were attribuited +} + //returns the stored custom life event info of the player const char* psCharacter::GetLifeDescription() { return lifedescription.GetDataSafe(); } + + void psCharacter::SetLifeDescription(const char* newValue) { lifedescription = newValue; Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-02-05 09:24:25 UTC (rev 2975) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-02-05 19:15:24 UTC (rev 2976) @@ -1118,24 +1118,50 @@ unsigned int GetTimeConnected() { return timeconnected; } - /// This is used to get the stored the player description + /** @brief This is used to get the stored player description. + * @return Returns a pointer to the stored player description. + */ const char* GetDescription(); - /// This is used to store the player description. + + /** @brief This is used to store the player description. + * @param newValue: A pointer to the new string to set as player description. + */ void SetDescription(const char* newValue); - /// This is used to get the stored the player OOC description + /** @brief This is used to get the stored player OOC description. + * @return Returns a pointer to the stored player OOC description. + */ const char* GetOOCDescription(); - /// This is used to store the player OOC description. + + /** @brief This is used to store the player OOC description. + * @param newValue: A pointer to the new string to set as player OOC description. + */ void SetOOCDescription(const char* newValue); - /// This is used to get the stored informations from the char creation + /** @brief This is used to get the stored informations from the char creation. + * @return Returns a pointer to the stored informations from the char creation. + */ const char* GetCreationInfo(); - /// This is used to store the informations from the char creation. Players shouldn't be able to edit this. + + /** @brief This is used to store the informations from the char creation. Players shouldn't be able to edit this. + * @param newValue: A pointer to the new string to set as char creation data. + */ void SetCreationInfo(const char* newValue); - /// This is used to get the stored informations from the custom life events made by players + /** @brief Gets dynamic life events generated from the factions of the character. + * @param factionDescription: where to store the dynamically generated data. + * @return Returns true if there were some dynamic life events founds else false. + */ + bool GetFactionEventsDescription(csString & factionDescription); + + /** @brief This is used to get the stored informations from the custom life events made by players. + * @return Returns a pointer to the stored informations from the custom life events made by players. + */ const char* GetLifeDescription(); - /// This is used to store the informations sent by players for their custom life events + + /** @brief This is used to store the informations sent by players for their custom life events. + * @param newValue: A pointer to the new string to set as custom life events. + */ void SetLifeDescription(const char* newValue); /// This is used by the math scripting engine to get various values. Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2009-02-05 09:24:25 UTC (rev 2975) +++ trunk/src/server/cachemanager.cpp 2009-02-05 19:15:24 UTC (rev 2976) @@ -2325,6 +2325,41 @@ f->name = result_factions[x]["faction_name"]; f->description = result_factions[x]["faction_description"]; f->weight = atof( result_factions[x]["faction_weight"] ); + // Parses the script for factions dynamic life events and populates the arrays for it + // used to store the script to be parsed to generate dynamic life events + csString factionCharacterEvents = result_factions[x]["faction_character"]; + // Parsing of the script + while(factionCharacterEvents.Length()) + { + //get the value from the string + size_t cutpos = factionCharacterEvents.FindFirst(' ', 0); + if(cutpos == (size_t) -1) //script error or finished parsing bail out + break; + size_t cutpos2 = factionCharacterEvents.FindFirst('\n', 0); + if(cutpos2 == (size_t) -1) //script error or finished parsing bail out + break; + + //get the value of the faction which will trigger the text + int value = atoi(factionCharacterEvents.Slice(0,cutpos).GetDataSafe()); + if(value == 0) //script error or finished parsing bail out + break; + + //take out the string we need + csString entry_text = factionCharacterEvents.Slice(cutpos+1, cutpos2); + + //prepare the struct containing the parsed data + FactionLifeEvent * factionevt = new FactionLifeEvent; + factionevt->event_description = entry_text; + factionevt->value = abs(value); //we want a positive value for checking later + if(value > 0) //check what cshash should get the parsed data + f->PositiveFactionEvents.Put(0, factionevt); //this was a positive value + else + f->NegativeFactionEvents.Put(0, factionevt); //this was a negative value + + //prepare for the next line + factionCharacterEvents = factionCharacterEvents.Slice(cutpos2+1); + } + // Stored two different ways factions.Insert(f,TREE_OWNS_DATA); factions_by_id.Put(f->id,f); Modified: trunk/src/server/database/mysql/factions.sql =================================================================== --- trunk/src/server/database/mysql/factions.sql 2009-02-05 09:24:25 UTC (rev 2975) +++ trunk/src/server/database/mysql/factions.sql 2009-02-05 19:15:24 UTC (rev 2976) @@ -21,7 +21,27 @@ # Dumping data for table 'factions' # -INSERT INTO factions VALUES("1","orcs","faction orcs will garantie you are hated by every one except orcs","","1.000"); -INSERT INTO factions VALUES("2","merchants","faction merchants will offer you a nice deal from time to time","","1.000"); -INSERT INTO factions VALUES("3","liberals","faction liberals will make you popular by all those who value freedom and such stuff","","2.000"); -INSERT INTO factions VALUES("4","conservatives","faction conservatives are for those who value tradition and steady life style","","2.000"); +INSERT INTO factions VALUES("1","orcs","faction orcs will garantie you are hated by every one except orcs", +"20 Orcs loved you. +10 Orcs simpatized with you. +-20 Orcs hated you. +-10 Orcs where annoyed by you. +","1.000"); +INSERT INTO factions VALUES("2","merchants","faction merchants will offer you a nice deal from time to time", +"20 Merchants find you invaluable to find and fix bugs. +10 Merchants are starting to like you. +-20 Merchants have hired weltall to kill because of your bugs. +-10 Merchants don't fell good when you are around. +","1.000"); +INSERT INTO factions VALUES("3","liberals","faction liberals will make you popular by all those who value freedom and such stuff", +"20 Liberals think you are open minded and worth talking to. +10 Liberals view you as someone they can occasionally count on. +-20 Liberals see you as the opposition. +-10 Liberals think you are too sympathetic to their enemies to be trusted. +","2.000"); +INSERT INTO factions VALUES("4","conservatives","faction conservatives are for those who value tradition and steady life style", +"20 Conservatives put their faith in you. +10 Conservatives look to you with hope you'll one day be dependable to them. +-20 Conservatives see you as an enemy of their ideology. +-10 Conservatives think you are too easily influenced by their enemies to be counted on. +","2.000"); Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-05 09:24:25 UTC (rev 2975) +++ trunk/src/server/usermanager.cpp 2009-02-05 19:15:24 UTC (rev 2976) @@ -697,8 +697,23 @@ if( isSelf || full) { if(requestor != "pawsCharDescription") //only send all if the requestor is the normal description window - creationinfo.Format("%s\n\n%s\n\n%s", charData->GetCreationInfo(), " ", charData->GetLifeDescription()); - else + { + csString factiondescription; //used to store temporarily the faction dynamic data + + creationinfo += charData->GetCreationInfo(); + + if(creationinfo.Length() > 0) //only add separators in case there is something to separate + creationinfo += "\n\n"; + + //get the dynamically generated faction based life events + if(charData->GetFactionEventsDescription(factiondescription)) + { + creationinfo += factiondescription; + creationinfo += "\n"; + } + creationinfo += charData->GetLifeDescription(); + } + else //if the player requested to edit send only what he can actually edit creationinfo = charData->GetLifeDescription(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-05 19:22:44
|
Revision: 2977 http://planeshift.svn.sourceforge.net/planeshift/?rev=2977&view=rev Author: weltall2 Date: 2009-02-05 19:22:41 +0000 (Thu, 05 Feb 2009) Log Message: ----------- fixed spaces/tabs Modified Paths: -------------- trunk/src/client/gui/pawsdetailwindow.cpp trunk/src/common/rpgrules/factions.h trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/cachemanager.cpp trunk/src/server/usermanager.cpp Modified: trunk/src/client/gui/pawsdetailwindow.cpp =================================================================== --- trunk/src/client/gui/pawsdetailwindow.cpp 2009-02-05 19:15:24 UTC (rev 2976) +++ trunk/src/client/gui/pawsdetailwindow.cpp 2009-02-05 19:22:41 UTC (rev 2977) @@ -162,8 +162,8 @@ { psCharacterDetailsMessage msg(me); - if ( msg.requestor!="pawsDetailWindow" - && msg.requestor!="behaviorMsg" + if ( msg.requestor!="pawsDetailWindow" + && msg.requestor!="behaviorMsg" && msg.requestor!="ShowDetailsOp") return; @@ -245,7 +245,7 @@ { skills[cat].Append(msg.skills[s].text); } - SelectTab((pawsWidget*)lastTab); + SelectTab((pawsWidget*)lastTab); } } @@ -262,7 +262,7 @@ } bool pawsDetailWindow::SelectTab( pawsWidget* widget ) -{ +{ switch ( widget->GetID() ) { case BTN_EDIT: @@ -286,7 +286,7 @@ case BTN_MAGIC: case BTN_JOBS: case BTN_VARIOUS: - { + { int id = widget->GetID() - 1000; if(id >= 0 && id < 6) { Modified: trunk/src/common/rpgrules/factions.h =================================================================== --- trunk/src/common/rpgrules/factions.h 2009-02-05 19:15:24 UTC (rev 2976) +++ trunk/src/common/rpgrules/factions.h 2009-02-05 19:22:41 UTC (rev 2977) @@ -2,7 +2,7 @@ * factions.h * written by Keith Fulton <ke...@pa...> * - * Copyright (C) 2003 Atomic Blue (in...@pl..., http://www.atomicblue.org) + * Copyright (C) 2003 Atomic Blue (in...@pl..., http://www.atomicblue.org) * * * This program is free software; you can redistribute it and/or @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - */ + */ #ifndef __FACTIONS_H__ #define __FACTIONS_H__ @@ -52,7 +52,7 @@ /** This struct stores the particular score of a particular player to a * particular faction. - * + * */ struct FactionStanding { @@ -69,8 +69,8 @@ { protected: /// A list of all the standings with each faction - csHash<FactionStanding*, int> factionstandings; - + csHash<FactionStanding*, int> factionstandings; + /// A list of all the factions in this set csHash<Faction*, int> factions_by_id; @@ -80,17 +80,17 @@ * @param factionset The global list of factions. */ FactionSet(const char *csv_list,csHash<Faction*, int, CS::Memory::AllocatorMalloc> &factionset); - + ~FactionSet(); - + bool GetFactionStanding(int factionID,int& standing, float& weight); - + /** Updates a faction standing. * If the factionID is not in the current list of standings a new standing * is added. * * @param factionID The ID of the faction to update. - * @param delta The amount to change the faction score by. If the faction is + * @param delta The amount to change the faction score by. If the faction is * not in the current list this will be the starting score. */ void UpdateFactionStanding(int factionID,int delta); @@ -108,7 +108,7 @@ * Check given faction. */ bool CheckFaction(Faction * faction, int value); - + }; Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-05 19:15:24 UTC (rev 2976) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-02-05 19:22:41 UTC (rev 2977) @@ -3834,7 +3834,7 @@ factionDescription += "\n"; break; //nothing else to do as we found what we needed so bail out } - } + } } else //negative factions { @@ -3844,13 +3844,13 @@ while (scoreIter.HasNext()) { FactionLifeEvent* lifevt = scoreIter.Next(); - if(score > lifevt->value) + if(score > lifevt->value) { factionDescription += lifevt->event_description; factionDescription += "\n"; break; } - } + } } } return (factionDescription.Length() > 0); //if the string contains something it means some events were attribuited Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2009-02-05 19:15:24 UTC (rev 2976) +++ trunk/src/server/cachemanager.cpp 2009-02-05 19:22:41 UTC (rev 2977) @@ -127,7 +127,7 @@ ItemStatFlagArray.Push(statflag); effectID = 0; - + commandManager = NULL; } @@ -205,13 +205,13 @@ { delete commandManager; - + quests_by_id.DeleteAll(); - - + + { csHash<csPDelArray<CombinationConstruction>*,uint32>::GlobalIterator it(tradeCombinations_IDHash.GetIterator ()); - + while (it.HasNext ()) { csPDelArray<CombinationConstruction>* newArray = it.Next (); @@ -326,7 +326,7 @@ } sectorinfo_by_id.Empty(); } - // ToDo: unload everything else + // ToDo: unload everything else } void CacheManager::RemoveInstance( psItem * & item ) @@ -541,13 +541,13 @@ { return false; } - + if ( !types.Count() ) { Error1("No movement types to load."); return false; } - + for (unsigned int i=0; i<types.Count(); i++) { psMovement* newmove = new psMovement; @@ -637,7 +637,7 @@ Notify2(LOG_COMBAT,"Testing Armor VS Weapon table ('1d','Claymore'): %f\n",GetArmorVSWeaponResistance("1d","Claymore")); Notify2(LOG_COMBAT,"Testing Armor VS Weapon table ('2b','Sabre'): %f\n",GetArmorVSWeaponResistance("2b","Sabre")); - + Notify2( LOG_STARTUP, "%lu Armor vs Weapon Loaded", result.Count() ); return true; } @@ -669,7 +669,7 @@ { return false; } - + for(unsigned int currentRow = 0; currentRow < result.Count(); currentRow++) { iResultRow& row = result[currentRow]; @@ -817,9 +817,9 @@ Result result(db->Select("select * from trade_combinations order by pattern_id, result_id, item_id")); if (!result.IsValid()) { - Error1("No data in trade_combinations could be found"); - } - else + Error1("No data in trade_combinations could be found"); + } + else { // Loop through all the combinations for (currentrow=0; currentrow<result.Count(); currentrow++) @@ -877,9 +877,9 @@ Result result(db->Select("select * from trade_transformations order by pattern_id, item_id")); if (!result.IsValid()) { - Error1("No data in trade_transformations could be found"); - } - else + Error1("No data in trade_transformations could be found"); + } + else { for (currentrow=0; currentrow<result.Count(); currentrow++) { @@ -920,7 +920,7 @@ // First get transformation hash table using the patternid csHash<csPDelArray<psTradeTransformations> *,uint32>* transHash; transHash = tradeTransformations_IDHash.Get(patternid,NULL); - if (!transHash) + if (!transHash) { // Error2("No data in trade_transformations for pattern %d", patternid); return NULL; @@ -941,9 +941,9 @@ Result result(db->Select("select id from trade_patterns order by id")); if (!result.IsValid()) { - Error1("No data in trade_patterns could be found"); - } - else + Error1("No data in trade_patterns could be found"); + } + else { for (int currentrow=0; currentrow<(int)result.Count(); currentrow++) { @@ -955,9 +955,9 @@ Result result (db->Select( query ) ); if (!result.IsValid()) { - Error1("No distinct item ids found in trade_transformations"); - } - else + Error1("No distinct item ids found in trade_transformations"); + } + else { // Push each result item ID into array for (int transrow=0; transrow<(int)result.Count(); transrow++) @@ -970,9 +970,9 @@ Result result2 (db->Select( query ) ); if (!result2.IsValid()) { - Error1("No distinct item ids found in trade_combinations"); - } - else + Error1("No distinct item ids found in trade_combinations"); + } + else { // Push each result item ID into array for (int combsrow=0; combsrow<(int)result2.Count(); combsrow++) @@ -1008,9 +1008,9 @@ Result result(db->Select("select * from trade_processes order by process_id, subprocess_number")); if (!result.IsValid()) { - Error1("No data in trade_processes could be found"); - } - else + Error1("No data in trade_processes could be found"); + } + else { for (currentrow=0; currentrow<result.Count(); currentrow++) { @@ -1027,7 +1027,7 @@ newProcess = new psTradeProcesses; if (!newProcess->Load(result[currentrow])) { - Error1("Failure to load processes"); + Error1("Failure to load processes"); delete newProcess; continue; } @@ -2050,7 +2050,7 @@ { CPrintf(CON_ERROR, "Duplicate item_stats ID where id='%u' found.\n", itemstats->GetUID()); } - + delete itemstats; return NULL; } else @@ -2082,20 +2082,20 @@ { return NULL; } - + psItemStats *itemstats = itemStats_IDHash.Get(id,NULL); if(itemstats) { return itemstats; } - + Result result(db->Select("SELECT * from item_stats where stat_type in ('B','U','R') and id='%u'", id)); if (!result.IsValid() || result.Count() == 0) { return NULL; } - + itemstats = new psItemStats; bool loaded = itemstats->ReadItemStats(result[0]); // Prevent name conflicts @@ -2346,7 +2346,7 @@ //take out the string we need csString entry_text = factionCharacterEvents.Slice(cutpos+1, cutpos2); - + //prepare the struct containing the parsed data FactionLifeEvent * factionevt = new FactionLifeEvent; factionevt->event_description = entry_text; @@ -2516,7 +2516,7 @@ continue; } */ - + // printf("Loaded world item %d: %s\n", item->GetUID(), item->GetName() ); loadeditems++; @@ -2574,7 +2574,7 @@ CPrintf(CON_ERROR, "Failed to load item_stats with id='%s' and name='%s'\n", result[currentrow]["id"],result[currentrow]["name"]); } - + delete newitem; return false; } else @@ -2600,7 +2600,7 @@ psItemStats *newItem; - if ( db->Command( sql.GetData(), id ) == QUERY_FAILED) + if ( db->Command( sql.GetData(), id ) == QUERY_FAILED) { Error4("Error while copying item stats for id %d.\nSQL:%s\nError:%s\n",id,db->GetLastQuery(),db->GetLastError()); return NULL; @@ -2625,12 +2625,12 @@ { return NULL; } - + if ( result.Count() != 1 ) { return NULL; } - + newItem = new psItemStats; if ( !newItem->ReadItemStats( result[0] ) ) { @@ -2885,7 +2885,7 @@ { return a; } - + // Load on demand if not found a = new psGuildAlliance(); if (a->Load(id)) Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-02-05 19:15:24 UTC (rev 2976) +++ trunk/src/server/usermanager.cpp 2009-02-05 19:22:41 UTC (rev 2977) @@ -699,7 +699,7 @@ if(requestor != "pawsCharDescription") //only send all if the requestor is the normal description window { csString factiondescription; //used to store temporarily the faction dynamic data - + creationinfo += charData->GetCreationInfo(); if(creationinfo.Length() > 0) //only add separators in case there is something to separate @@ -1658,8 +1658,8 @@ int nGID = client->GetActor()->GetGroupID(); if ( (nGID == 0) || (nGID != targetClient->GetActor()->GetGroupID()) ) { - psserver->SendSystemInfo( clientnum,"You can only assist members of your guild or players you're grouped with." ); - return; + psserver->SendSystemInfo( clientnum,"You can only assist members of your guild or players you're grouped with." ); + return; } } @@ -2157,7 +2157,7 @@ { csArray<csString> filters = DecodeCommandArea(client, target); csArray<csString>::Iterator it(filters.GetIterator()); - while (it.HasNext()) + while (it.HasNext()) { HandleRotate(client, it.Next(), action); } @@ -2178,7 +2178,7 @@ { float oldxrot, oldyrot, oldzrot; rotItem->GetRotation(oldxrot, oldyrot, oldzrot); - // rotation is stored in radians, + // rotation is stored in radians, // we are converting the angles to degrees oldxrot = oldxrot*180/PI; oldyrot = oldyrot*180/PI; @@ -2223,7 +2223,7 @@ zrot = 0; } - // rotate an item only if the client is guarding it, + // rotate an item only if the client is guarding it, // or has the right to rotate all items if (psserver->HasAccess(client, "rotate all")|| rotItem->GetItem()->GetGuardingCharacterID() == client->GetPID()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-15 21:11:38
|
Revision: 3039 http://planeshift.svn.sourceforge.net/planeshift/?rev=3039&view=rev Author: weltall2 Date: 2009-02-15 21:11:33 +0000 (Sun, 15 Feb 2009) Log Message: ----------- Some clean ups and fixes to various commands, removed also old not working renmants by loyni Modified Paths: -------------- trunk/src/client/cmdgroups.cpp trunk/src/client/cmdguilds.cpp trunk/src/client/cmdutil.cpp trunk/src/common/net/messages.cpp trunk/src/server/groupmanager.cpp Modified: trunk/src/client/cmdgroups.cpp =================================================================== --- trunk/src/client/cmdgroups.cpp 2009-02-15 20:51:54 UTC (rev 3038) +++ trunk/src/client/cmdgroups.cpp 2009-02-15 21:11:33 UTC (rev 3039) @@ -48,7 +48,6 @@ cmdsource->Subscribe("/groupremove",this); // remove player from group (leader only) cmdsource->Subscribe("/leavegroup",this); // name group level something (ranks) cmdsource->Subscribe("/groupmembers",this); // see list of members (optional level #) - cmdsource->Subscribe("/confirmgroupjoin", this ); } psGroupCommands::~psGroupCommands() @@ -58,7 +57,6 @@ cmdsource->Unsubscribe("/groupremove",this); // remove player from group (leader only) cmdsource->Unsubscribe("/leavegroup",this); cmdsource->Unsubscribe("/groupmembers",this); - cmdsource->Unsubscribe("/confirmgroupjoin", this ); } const char *psGroupCommands::HandleCommand(const char *cmd) @@ -72,5 +70,3 @@ { } - - Modified: trunk/src/client/cmdguilds.cpp =================================================================== --- trunk/src/client/cmdguilds.cpp 2009-02-15 20:51:54 UTC (rev 3038) +++ trunk/src/client/cmdguilds.cpp 2009-02-15 21:11:33 UTC (rev 3039) @@ -47,8 +47,8 @@ iObjectRegistry* obj ) : psCmdBase(mh,ch,obj) { - cmdsource->Subscribe("/guildinfo",this); // create new guild (requires list of names) - cmdsource->Subscribe("/newguild",this); // create new guild (requires list of names) + cmdsource->Subscribe("/guildinfo",this); // displays + cmdsource->Subscribe("/newguild",this); // create new guild cmdsource->Subscribe("/endguild",this); // disband guild cmdsource->Subscribe("/guildinvite",this); // ask player to join guild cmdsource->Subscribe("/guildremove",this); // remove player from guild @@ -109,16 +109,20 @@ psGUIGuildMessage msg(psGUIGuildMessage::SUBSCRIBE_GUILD_DATA, "<x/>"); msg.SendMessage(); if ( words.GetCount() == 2 ) - { + { + if ((words[1]!="yes")&&(words[1]!="no")) + return "Syntax: /guildinfo yes|no"; + pawsCheckBox* onlineOnly = (pawsCheckBox*)PawsManager::GetSingleton().FindWidget("GuildWindow")->FindWidget("OnlineOnly"); + onlineOnly->SetState(words[1]=="yes"); csString command; command.Format("<r onlineonly=\"%s\"/>", (const char*)words[1] ); psGUIGuildMessage msg2(psGUIGuildMessage::SET_ONLINE, command ); - msg2.SendMessage(); - } + msg2.SendMessage(); + } else { csString command; - pawsCheckBox* onlineOnly = (pawsCheckBox*)PawsManager::GetSingleton().FindWidget("GuildWindow")->FindWidget("OnlineOnly"); + pawsCheckBox* onlineOnly = (pawsCheckBox*)PawsManager::GetSingleton().FindWidget("GuildWindow")->FindWidget("OnlineOnly"); command.Format("<r onlineonly=\"%s\"/>", onlineOnly->GetState() ? "yes":"no"); psGUIGuildMessage msg2(psGUIGuildMessage::SET_ONLINE, command ); msg2.SendMessage(); Modified: trunk/src/client/cmdutil.cpp =================================================================== --- trunk/src/client/cmdutil.cpp 2009-02-15 20:51:54 UTC (rev 3038) +++ trunk/src/client/cmdutil.cpp 2009-02-15 21:11:33 UTC (rev 3039) @@ -242,7 +242,8 @@ //Write to the file psengine->GetVFS()->WriteFile (filename.GetData(), s.GetData(), s.Length()); - return "Saved graphic bug report (" + filename + "). Please take your time and read 'Bug Report' under 'Help Us' on www.hydlaa.com"; + return csString().Format("Saved graphic bug report (graphicbug%u.cam). " + "Report it to http://hydlaaplaza.com/flyspray/", reportNum); } Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2009-02-15 20:51:54 UTC (rev 3038) +++ trunk/src/common/net/messages.cpp 2009-02-15 21:11:33 UTC (rev 3039) @@ -943,11 +943,6 @@ player = words[1]; return; } - if (command == "/confirmguildjoin") - { - accept = words[1]; // yes or no - return; - } if (command == "/guildlevel") { level = words.GetInt(1); @@ -1013,11 +1008,6 @@ msgtext.AppendFmt("Player: '%s'",player.GetDataSafe()); return msgtext; } - if (command == "/confirmguildjoin") - { - msgtext.AppendFmt("Accept: '%s'",accept.GetDataSafe()); - return msgtext; - } if (command == "/guildlevel") { msgtext.AppendFmt("Level: %d LevelName: '%s'",level,levelname.GetDataSafe()); @@ -1172,14 +1162,9 @@ player = words[1]; return; } - if (command == "/confirmgroupjoin") - { - accept = words[1]; // yes or no - return; - } if (command == "/disband" || - command == "/leavegroup" || - command == "/groupmembers") + command == "/leavegroup" || + command == "/groupmembers") { return; } @@ -1197,11 +1182,6 @@ msgtext.AppendFmt("Player: '%s'", player.GetDataSafe()); return msgtext; } - if (command == "/confirmgoupjoin") - { - msgtext.AppendFmt("Accept: '%s'", accept.GetDataSafe()); - return msgtext; - } if (command == "/disband" || command == "/leavegroup" || command == "/groupmembers") Modified: trunk/src/server/groupmanager.cpp =================================================================== --- trunk/src/server/groupmanager.cpp 2009-02-15 20:51:54 UTC (rev 3038) +++ trunk/src/server/groupmanager.cpp 2009-02-15 21:11:33 UTC (rev 3039) @@ -306,7 +306,7 @@ } else { - Error1("Command not supported by server."); + Error2("Group command %s is not supported by server.", msg.command.GetDataSafe()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-02-16 20:41:29
|
Revision: 3043 http://planeshift.svn.sourceforge.net/planeshift/?rev=3043&view=rev Author: mgist Date: 2009-02-16 20:41:26 +0000 (Mon, 16 Feb 2009) Log Message: ----------- - Changed the server to not load meshes, but to use a null mesh instead. This requires that bbox's should always be specified in the database (raceinfo). If they aren't then sane defaults are used. Modified Paths: -------------- trunk/src/common/net/messages.cpp trunk/src/common/net/messages.h trunk/src/server/bulkobjects/psraceinfo.cpp trunk/src/server/bulkobjects/psraceinfo.h trunk/src/server/creationmanager.cpp trunk/src/server/database/mysql/race_info.sql trunk/src/server/entitymanager.cpp trunk/src/server/gem.cpp trunk/src/server/gem.h Modified: trunk/src/common/net/messages.cpp =================================================================== --- trunk/src/common/net/messages.cpp 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/common/net/messages.cpp 2009-02-16 20:41:26 UTC (rev 3043) @@ -4444,7 +4444,6 @@ const char* name, const char* guild, const char* factname, - const char* filename, const char* race, unsigned short int gender, const char* helmGroup, @@ -4482,7 +4481,6 @@ msg->Add( guild ); msg->Add( factname ); - msg->Add( filename ); msg->Add( race ); msg->Add ( gender ); msg->Add( helmGroup ); @@ -4519,7 +4517,6 @@ guild.Clear(); factname = csString ( me->GetStr() ); - filename = csString ( me->GetStr() ); race = csString ( me->GetStr() ); gender = me->GetInt16(); helmGroup = csString ( me->GetStr() ); @@ -4557,7 +4554,6 @@ msgtext.AppendFmt(" Name: '%s'",name.GetDataSafe()); msgtext.AppendFmt(" Guild: '%s'",guild.GetDataSafe()); msgtext.AppendFmt(" Factname: '%s'",factname.GetDataSafe()); - msgtext.AppendFmt(" Filename: '%s'",filename.GetDataSafe()); msgtext.AppendFmt(" Race: '%s'",race.GetDataSafe()); msgtext.AppendFmt(" Top: (%.3f,%.3f,%.3f)",top.x,top.y,top.z); msgtext.AppendFmt(" Bottom: (%.3f,%.3f,%.3f)",bottom.x,bottom.y,bottom.z); Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/common/net/messages.h 2009-02-16 20:41:26 UTC (rev 3043) @@ -2877,7 +2877,6 @@ const char* name, const char* guildName, const char* factname, - const char* filename, const char* raceName, unsigned short int gender, const char* helmGroup, @@ -2916,7 +2915,6 @@ csString name; csString guild; csString factname; - csString filename; csString race; unsigned short int gender; csString helmGroup; // Used for helm groupings. Modified: trunk/src/server/bulkobjects/psraceinfo.cpp =================================================================== --- trunk/src/server/bulkobjects/psraceinfo.cpp 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/server/bulkobjects/psraceinfo.cpp 2009-02-16 20:41:26 UTC (rev 3043) @@ -116,7 +116,6 @@ row.GetUInt32("cstr_id_mesh"),name.GetData() ); } mesh_name = meshname; - meshFileName.Format("/planeshift/models/%s/%s.cal3d",mesh_name,mesh_name); const char *textname=CacheManager::GetSingleton().FindCommonString(row.GetUInt32("cstr_id_base_texture")); if (textname==NULL) @@ -149,6 +148,8 @@ csRef<iDocument> doc = xml->CreateDocument(); + csString meshFileName; + meshFileName.Format("/planeshift/models/%s/%s.cal3d",mesh_name,mesh_name); csRef<iDataBuffer> buf (vfs->ReadFile (meshFileName.GetData())); if (!buf || !buf->GetSize ()) { @@ -193,13 +194,6 @@ return true; } - -csString psRaceInfo::GetMeshFileName() -{ - return meshFileName; -} - - float psRaceInfo::GetBaseAttribute(PSITEMSTATS_STAT attrib) { if (attrib<0 || attrib>=PSITEMSTATS_STAT_COUNT) Modified: trunk/src/server/bulkobjects/psraceinfo.h =================================================================== --- trunk/src/server/bulkobjects/psraceinfo.h 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/server/bulkobjects/psraceinfo.h 2009-02-16 20:41:26 UTC (rev 3043) @@ -54,7 +54,6 @@ { protected: unsigned short attributes[PSITEMSTATS_STAT_COUNT]; - csString meshFileName; public: psRaceInfo(); @@ -77,8 +76,6 @@ int natural_armor_id; float runMinSpeed,runBaseSpeed,runMaxSpeed; float walkMinSpeed,walkBaseSpeed,walkMaxSpeed; - - csString GetMeshFileName(); float GetBaseAttribute(PSITEMSTATS_STAT attrib); Modified: trunk/src/server/creationmanager.cpp =================================================================== --- trunk/src/server/creationmanager.cpp 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/server/creationmanager.cpp 2009-02-16 20:41:26 UTC (rev 3043) @@ -864,15 +864,8 @@ if ( trait ) chardata->SetTraitForLocation( trait->location, trait ); -// printf("Uploaded Skin Colour: %d\n", upload.selectedSkinColour ); - - - csString filename; - filename.Format("/planeshift/models/%s/%s.cal3d",raceinfo->mesh_name,raceinfo->mesh_name); - gemActor *actor = new gemActor( chardata, raceinfo->mesh_name, - filename, newinstance, EntityManager::GetSingleton().FindSector(sectorinfo->name), csVector3(x,y,z),yrot, Modified: trunk/src/server/database/mysql/race_info.sql =================================================================== --- trunk/src/server/database/mysql/race_info.sql 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/server/database/mysql/race_info.sql 2009-02-16 20:41:26 UTC (rev 3043) @@ -51,41 +51,41 @@ /*!40000 ALTER TABLE `race_info` DISABLE KEYS */; INSERT INTO `race_info` (`id`,`name`,`cstr_id_mesh`,`sex`,`size_x`,`size_y`,`size_z`,`cstr_id_base_texture`,`initial_cp`,`start_str`,`start_end`,`start_agi`,`start_int`,`start_will`,`start_cha`,`base_physical_regen_still`,`base_physical_regen_walk`,`base_mental_regen_still`,`base_mental_regen_walk`,`armor_id`,`helm`,`race`) VALUES - (0,'StoneBreaker',125,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',0), - (1,'Enkidukai',127,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',1), - (2,'Ynnwn',103,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',2), - (3,'Ylian',102,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',3), - (4,'Xacha',125,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',4), - (5,'Nolthrir',125,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',5), - (6,'Dermorian',108,'M',0,0,0,19,100,50,50,50,50,50,50,1.2,0.8,10,10,0,'',6), - (7,'Hammerwielder',125,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',7), - (8,'Diaboli',125,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',8), - (9,'Kran',105,'N',0,0,0,19,100,50,50,50,50,50,50,2.0,1.5,10,10,0,'',9); + (0,'StoneBreaker',125,'M',0.8,1.2,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',0), + (1,'Enkidukai',127,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',1), + (2,'Ynnwn',103,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',2), + (3,'Ylian',102,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',3), + (4,'Xacha',125,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',4), + (5,'Nolthrir',125,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',5), + (6,'Dermorian',108,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.2,0.8,10,10,0,'',6), + (7,'Hammerwielder',125,'M',0.8,1.2,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',7), + (8,'Diaboli',125,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',8), + (9,'Kran',105,'N',0.8,1.4,0.6,19,100,50,50,50,50,50,50,2.0,1.5,10,10,0,'',9); INSERT INTO `race_info` (`id`,`name`,`cstr_id_mesh`,`sex`,`size_x`,`size_y`,`size_z`,`cstr_id_base_texture`,`initial_cp`,`start_str`,`start_end`,`start_agi`,`start_int`,`start_will`,`start_cha`,`base_physical_regen_still`,`base_physical_regen_walk`,`base_mental_regen_still`,`base_mental_regen_walk`,`armor_id`,`helm`,`race`) VALUES - (10,'Lemur',125,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',10), - (11,'Klyros',125,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'ylianm',11), - (12,'Enkidukai',128,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',1), - (13,'StoneBreaker',126,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'ylianm',0), - (14,'Ynnwn',130,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',2), - (15,'Ylian',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',3), - (16,'Xacha',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',4), - (17,'Nolthrir',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',5), - (18,'Dermorian',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.2,0.8,10,10,0,'',6), - (19,'Hammerwielder',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',7); + (10,'Lemur',125,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',10), + (11,'Klyros',125,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'ylianm',11), + (12,'Enkidukai',128,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',1), + (13,'StoneBreaker',126,'F',0.8,1.2,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'ylianm',0), + (14,'Ynnwn',130,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',2), + (15,'Ylian',125,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',3), + (16,'Xacha',125,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',4), + (17,'Nolthrir',125,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',5), + (18,'Dermorian',125,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.2,0.8,10,10,0,'',6), + (19,'Hammerwielder',125,'F',0.8,1.2,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',7); INSERT INTO `race_info` (`id`,`name`,`cstr_id_mesh`,`sex`,`size_x`,`size_y`,`size_z`,`cstr_id_base_texture`,`initial_cp`,`start_str`,`start_end`,`start_agi`,`start_int`,`start_will`,`start_cha`,`base_physical_regen_still`,`base_physical_regen_walk`,`base_mental_regen_still`,`base_mental_regen_walk`,`armor_id`,`helm`,`race`) VALUES - (20,'Diaboli',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',8), - (21,'Lemur',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',10), - (22,'Klyros',125,'F',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',11), - (23,'Rogue',187,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',12), - (24,'Clacker',117,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',13), - (25,'Rat',118,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',14), - (26,'Grendol',119,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',15), - (27,'Gobble',120,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',16), - (28,'Consumer',121,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',17), - (29,'Trepor',122,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',18); + (20,'Diaboli',125,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',8), + (21,'Lemur',125,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',10), + (22,'Klyros',125,'F',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',11), + (23,'Rogue',187,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',12), + (24,'Clacker',117,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',13), + (25,'Rat',118,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',14), + (26,'Grendol',119,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',15), + (27,'Gobble',120,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',16), + (28,'Consumer',121,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',17), + (29,'Trepor',122,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',18); INSERT INTO `race_info` (`id`,`name`,`cstr_id_mesh`,`sex`,`size_x`,`size_y`,`size_z`,`cstr_id_base_texture`,`initial_cp`,`start_str`,`start_end`,`start_agi`,`start_int`,`start_will`,`start_cha`,`base_physical_regen_still`,`base_physical_regen_walk`,`base_mental_regen_still`,`base_mental_regen_walk`,`armor_id`,`helm`,`race`) VALUES - (30,'Ulbernaut',123,'M',0,0,0,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',19), - (31,'Tefusang',124,'M',0,0,0,19,100,50,50,50,50,50,50,2.0,1.5,10,10,0,'',20); + (30,'Ulbernaut',123,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,1.5,1.0,10,10,0,'',19), + (31,'Tefusang',124,'M',0.8,1.4,0.6,19,100,50,50,50,50,50,50,2.0,1.5,10,10,0,'',20); /*!40000 ALTER TABLE `race_info` ENABLE KEYS */; Modified: trunk/src/server/entitymanager.cpp =================================================================== --- trunk/src/server/entitymanager.cpp 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/server/entitymanager.cpp 2009-02-16 20:41:26 UTC (rev 3043) @@ -552,7 +552,6 @@ bool EntityManager::CreatePlayer (Client* client) { - csString filename; psCharacter *chardata=psServer::CharacterLoader.LoadCharacterData(client->GetPID(),true); if (chardata==NULL) { @@ -571,8 +570,6 @@ return false; } - filename.Format("/planeshift/models/%s/%s.cal3d",raceinfo->mesh_name,raceinfo->mesh_name); - csVector3 pos; float yrot; psSectorInfo *sectorinfo; @@ -589,7 +586,7 @@ } - gemActor *actor = new gemActor(chardata,raceinfo->mesh_name,filename, + gemActor *actor = new gemActor(chardata,raceinfo->mesh_name, instance,sector,pos,yrot, client->GetClientNum()); @@ -731,8 +728,7 @@ return false; } - gemNPC *actor = new gemNPC(chardata, raceinfo->mesh_name, raceinfo->GetMeshFileName(), - instance, sector, pos, yrot, 0); + gemNPC *actor = new gemNPC(chardata, raceinfo->mesh_name, instance, sector, pos, yrot, 0); if ( !actor->IsValid() ) { @@ -847,24 +843,15 @@ // Cannot stack, so make a new one // Get the mesh for this object meshname = iteminstance->GetMeshName(); - csString meshfile(meshname); - if (!meshfile.IsEmpty()) - { - meshfile.ReplaceAll("#", "/"); - csString tmp; - tmp.Format("/planeshift/%s.meshfact", meshfile.GetData()); - meshfile = tmp; - } - gemItem *obj; if (iteminstance->GetIsContainer()) { - obj = new gemContainer(iteminstance,meshname,meshfile,instance,isec,newpos,xrot,yrot,zrot,0); + obj = new gemContainer(iteminstance,meshname,instance,isec,newpos,xrot,yrot,zrot,0); } else { - obj = new gemItem(iteminstance,meshname,meshfile,instance,isec,newpos,xrot,yrot,zrot,0); + obj = new gemItem(iteminstance,meshname,instance,isec,newpos,xrot,yrot,zrot,0); } // Won't create item if gemItem entity was not created @@ -875,10 +862,6 @@ // don't create removal events for items in e.g guildhalls iteminstance->ScheduleRemoval(); } - - csReversibleTransform revTransform; - iMeshWrapper *mesh = obj->GetMeshWrapper(); - csBox3 box = mesh->GetTransformedBoundingBox(revTransform); obj->Move(newpos,yrot,isec); Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/server/gem.cpp 2009-02-16 20:41:26 UTC (rev 3043) @@ -121,6 +121,7 @@ //----------------------------------------------------------------------------- GEMSupervisor *gemObject::cel = NULL; +csRef<iMeshFactoryWrapper> gemObject::nullfact = NULL; GEMSupervisor::GEMSupervisor(iObjectRegistry *objreg, psDatabase *db) @@ -586,7 +587,6 @@ gemObject::gemObject(const char* name, const char* factname, - const char* filename, InstanceID myInstance, iSector* room, const csVector3& pos, @@ -599,7 +599,6 @@ this->valid = true; this->name = name; this->factname = factname; - this->filename = filename; this->yRot = rotangle; this->worldInstance = myInstance; @@ -611,12 +610,7 @@ prox_distance_desired=DEF_PROX_DIST; prox_distance_current=DEF_PROX_DIST; - if (!InitMesh(name,factname,filename,pos,rotangle,room)) - { - Error1("Could not create gemObject because mesh could not be Init'd."); - Error4("Name: %s Factory: %s File: %s\n", name, factname, filename ); - return; - } + InitMesh(name,pos,rotangle,room); if (!InitProximityList(DEF_PROX_DIST,clientnum)) { @@ -676,139 +670,21 @@ } -bool gemObject::InitMesh(const char *name, - const char *factname, - const char *filename, +void gemObject::InitMesh(const char *name, const csVector3& pos, const float rotangle, iSector* room) { - pcmesh = new gemMesh(psserver->GetObjectReg(), this, cel); - - // Replace helm group token with the default race. - psString fact_name(factname); - fact_name.ReplaceAllSubString("$H", "stonebm"); - factname = fact_name; - - psString file_name(filename); - file_name.ReplaceAllSubString("$H", "stonebm"); - filename = file_name; - csRef<iEngine> engine = csQueryRegistry<iEngine> (psserver->GetObjectReg()); - csRef<iVFS> vfs = csQueryRegistry<iVFS> (psserver->GetObjectReg()); + if(!nullfact) + nullfact = engine->CreateMeshFactory("crystalspace.mesh.object.null", "Dummy", false); - csRef<iMeshWrapper> mesh; - csRef<iMeshFactoryWrapper> meshFact = engine->GetMeshFactories()->FindByName(factname); - if(meshFact.IsValid()) - { - mesh = meshFact->CreateMeshWrapper(); - } + csRef<iMeshWrapper> mesh = engine->CreateMeshWrapper(nullfact, name); - if(!mesh.IsValid()) - { - bool failed = true; + pcmesh = new gemMesh(psserver->GetObjectReg(), this, cel); + pcmesh->SetMesh(mesh); - if(vfs->Exists(filename)) - { - failed = false; - while(!failed) - { - csRef<iDocument> doc = ParseFile(psserver->GetObjectReg(), filename); - if (!doc) - { - Error2("Couldn't parse file %s", filename); - failed = true; - break; - } - - csRef<iDocumentNode> root = doc->GetRoot(); - if (!root) - { - Error2("The file(%s) doesn't have a root", filename); - failed = true; - break; - } - - csRef<iDocumentNode> meshNode; - csRef<iDocumentNode> libNode = root->GetNode("library"); - if (libNode) - { - meshNode = libNode->GetNode("meshfact"); - - if(libNode->GetNode("shaders")) - libNode->RemoveNode(libNode->GetNode("shaders")); - - if(libNode->GetNode("textures")) - libNode->RemoveNode(libNode->GetNode("textures")); - - if(libNode->GetNode("materials")) - libNode->RemoveNode(libNode->GetNode("materials")); - } - else - meshNode = root->GetNode("meshfact"); - if (!meshNode) - { - Error2("The file(%s) doesn't have a meshfact node", filename); - failed = true; - break; - } - - csRef<iDocumentNode> params = meshNode->GetNode("params"); - if(meshNode->GetNode("params")) - { - if(params->GetNode("material")) - params->RemoveNode(params->GetNode("material")); - - params->RemoveNodes(params->GetNodes("animation")); - - csRef<iDocumentNodeIterator> meshes = params->GetNodes("mesh"); - while(meshes->HasNext()) - { - csRef<iDocumentNode> mesh = meshes->Next(); - csRef<iDocumentAttribute> att = mesh->GetAttribute("material"); - mesh->RemoveAttribute(mesh->GetAttribute("material")); - } - } - - csRef<iThreadedLoader> loader (csQueryRegistry<iThreadedLoader> (psserver->GetObjectReg())); - csRef<iThreadReturn> ret = loader->LoadNode(root); - ret->Wait(); - engine->SyncEngineListsNow(loader); - meshFact = engine->GetMeshFactories()->FindByName(factname); - if(meshFact.IsValid()) - { - mesh = meshFact->CreateMeshWrapper(); - } - failed = !mesh.IsValid(); - break; - } - } - else - { - Error2("The file(%s) could not be found", filename); - } - - if(failed) - { - Error3("Could not set mesh with factname=%s and filename=%s. Trying dummy model", factname, filename); - factname = "stonebm"; - filename = "/planeshift/models/stonebm/stonebm.cal3d"; - if (!pcmesh->SetMesh(factname, filename)) - { - Error3("Could not use dummy CVS mesh with factname=%s and filename=%s", factname, filename); - return false; - } - } - } - - if(!pcmesh->GetMesh()) - { - pcmesh->SetMesh(mesh); - } - Move(pos,rotangle,room); - - return true; } iMeshWrapper *gemObject::GetMeshWrapper() @@ -1194,13 +1070,12 @@ gemActiveObject::gemActiveObject( const char* name, const char* factname, - const char* filename, InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, int clientnum) - : gemObject(name,factname,filename,myInstance,room,pos,rotangle,clientnum) + : gemObject(name,factname,myInstance,room,pos,rotangle,clientnum) { //if entity is not set, object is not a success // if (entity != NULL) @@ -1408,7 +1283,6 @@ gemItem::gemItem(csWeakRef<psItem> item, const char* factname, - const char* filename, InstanceID instance, iSector* room, const csVector3& pos, @@ -1416,7 +1290,7 @@ float yrotangle, float zrotangle, int clientnum) - : gemActiveObject(item->GetName(),factname,filename,instance,room,pos,yrotangle,clientnum) + : gemActiveObject(item->GetName(),factname,instance,room,pos,yrotangle,clientnum) { itemdata=item; xRot=xrotangle; @@ -1562,7 +1436,6 @@ gemContainer::gemContainer(csWeakRef<psItem> item, const char* factname, - const char* filename, InstanceID myInstance, iSector* room, const csVector3& pos, @@ -1570,7 +1443,7 @@ float yrotangle, float zrotangle, int clientnum) - : gemItem(item,factname,filename,myInstance,room,pos,xrotangle,yrotangle,zrotangle,clientnum) + : gemItem(item,factname,myInstance,room,pos,xrotangle,yrotangle,zrotangle,clientnum) { } @@ -1953,15 +1826,14 @@ gemActor::gemActor( psCharacter *chardata, const char* factname, - const char* filename, InstanceID myInstance, iSector* room, const csVector3& pos, float rotangle, int clientnum) : - gemObject(chardata->GetCharFullName(),factname,filename,myInstance,room,pos,rotangle,clientnum), + gemObject(chardata->GetCharFullName(),factname,myInstance,room,pos,rotangle,clientnum), psChar(chardata), factions(NULL), DRcounter(0), lastDR(0), lastV(0), lastSentSuperclientPos(0, 0, 0), -lastSentSuperclientInstance(-1), numReports(0), reportTargetId(0), isFalling(false), invincible(false), visible(true), viewAllObjects(false), meshcache(factname), +lastSentSuperclientInstance(-1), numReports(0), reportTargetId(0), isFalling(false), invincible(false), visible(true), viewAllObjects(false), movementMode(0), isAllowedToMove(true), atRest(true), pcmove(NULL), nevertired(false), infinitemana(false), instantcast(false), safefall(false), givekillexp(false) { @@ -2578,7 +2450,6 @@ name, guildName, factname, - filename, psChar->GetRaceInfo()->name, psChar->GetRaceInfo()->gender, helmGroup, @@ -2792,33 +2663,10 @@ csVector3 size; psRaceInfo *raceinfo = psChar->GetRaceInfo(); raceinfo->GetSize(size); - float width = 0.0f; - float height = 0.0f; - float depth = 0.0f; + float width = size.x; + float height = size.y; + float depth = size.z; - if(!(size.x && size.y && size.z)) - { - // Now Determine CD bounding boxes for upper and lower colliders - csRef<iSpriteCal3DState> cal3d; - cal3d = scfQueryInterface<iSpriteCal3DState> ( GetMeshWrapper()->GetMeshObject ()); - if (cal3d) - { - cal3d->SetAnimCycle("stand",1); - } - const csBox3& box = GetMeshWrapper()->GetMeshObject()->GetObjectModel()->GetObjectBoundingBox(); - - width = box.MaxX() - box.MinX(); - height = box.MaxY() - box.MinY(); - depth = box.MaxZ() - box.MinZ(); - } - - if(size.x != 0) - width = size.x; - if(size.y != 0) - height = size.y; - if(size.z != 0) - depth = size.z; - // Add a fudge factor to the depth to allow for feet // sticking forward while running depth *= 1.33F; @@ -2829,17 +2677,17 @@ if (width < 0.2) { Warning4(LOG_ANY, "Width %.2f to small for %s(%s)", width, GetName(), ShowID(pid)); - width = 0.2F; + width = 0.8F; } if (depth < 0.2*1.33) { Warning4(LOG_ANY, "Depth %.2f to small for %s(%s)", depth, GetName(), ShowID(pid)); - depth = 0.2F*1.33F; + depth = 0.6F*1.33F; } if (height < 0.2F) { Warning4(LOG_ANY, "Height %.2f to small for %s(%s)", height, GetName(), ShowID(pid)); - height = 0.2F; + height = 1.4F; } float legSize; @@ -3660,56 +3508,44 @@ bool gemActor::SetMesh(const char* meshname) { - csString newmesh; - newmesh.Format("/planeshift/models/%s/%s.cal3d", meshname, meshname ); - - if ( psserver->vfs->Exists(newmesh) ) + if(pcmesh->GetMesh()) { + if(CacheManager::GetSingleton().GetRaceInfoByMeshName(meshname) != NULL) + { + factname = meshname; + UpdateProxList(true); + return true; + } + } + else + { // Get current position to give to the newly set mesh csVector3 pos; float angle; iSector* sector; GetPosition(pos,angle,sector); - if ( pcmesh->SetMesh(meshname,newmesh) ) - { - if (pcmove) - { - delete pcmove; - pcmove = NULL; - } - InitLinMove(pos, angle, sector); + csRef<iEngine> engine = csQueryRegistry<iEngine>(psserver->GetObjectReg()); + csRef<iMeshWrapper> newmesh = engine->CreateMeshWrapper(meshname); + pcmesh->SetMesh(newmesh); - SetPosition(pos,angle,sector); - MulticastDRUpdate(); - - if ( pcmesh->GetMesh() ) - { - factname = meshname; - filename = newmesh; - - UpdateProxList(true); - return true; - } - } - - // Setting the mesh failed. Resetting back to the original mesh assuming - // that the mesh factory for the original mesh is already loaded. - if (!pcmesh->SetMesh(meshcache, 0)) + if (pcmove) { - // Last attempt with the full file name - newmesh.Format("/planeshift/models/%s/%s.cal3d", meshcache.GetData(), meshcache.GetData()); - if (!pcmesh->SetMesh(meshcache, newmesh)) - { - //Previously was CS_ASSERT(ResetMesh());, CS_ASSERT disappears in release mode - CS_ASSERT(false); - } + delete pcmove; + pcmove = NULL; } + InitLinMove(pos, angle, sector); + SetPosition(pos,angle,sector); MulticastDRUpdate(); + if ( pcmesh->GetMesh() ) + { + factname = meshname; + UpdateProxList(true); + return true; + } } - return false; } @@ -3717,13 +3553,12 @@ gemNPC::gemNPC( psCharacter *chardata, const char* factname, - const char* filename, InstanceID instance, iSector* room, const csVector3& pos, float rotangle, int clientnum) - : gemActor(chardata,factname,filename,instance,room,pos,rotangle,clientnum) + : gemActor(chardata,factname,instance,room,pos,rotangle,clientnum) { npcdialog = NULL; superClientID = 0; @@ -4180,7 +4015,6 @@ name, guildName, factname, - filename, psChar->GetRaceInfo()->name, psChar->GetRaceInfo()->gender, helmGroup, Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2009-02-16 17:33:48 UTC (rev 3042) +++ trunk/src/server/gem.h 2009-02-16 20:41:26 UTC (rev 3043) @@ -23,6 +23,7 @@ //============================================================================= // Crystal Space Includes //============================================================================= +#include <iengine/mesh.h> #include <iutil/vfs.h> #include <csutil/csobject.h> #include <csutil/csstring.h> @@ -253,7 +254,7 @@ { public: - gemObject(const char* name, const char* factname,const char* filename,InstanceID myinstance,iSector* room, + gemObject(const char* name, const char* factname,InstanceID myinstance,iSector* room, const csVector3& pos,float rotangle,int clientnum); /// This ctor is only for use in making keys for the BinaryTree @@ -372,8 +373,8 @@ iSector *sector; ///< Ptr to the CS sector inhabited bool is_alive; ///< Flag indicating whether object is alive or not csString factname; ///< Name of CS Mesh Factory used to create this object - csString filename; ///< VFS Filename of mesh EID eid; ///< Entity ID (unique identifier for object) + static csRef<iMeshFactoryWrapper> nullfact; ///< Null factory for our mesh instances. csArray<iDeleteObjectCallback*> receivers; ///< List of objects which are to be notified when this object is deleted. @@ -382,8 +383,7 @@ bool InitProximityList(float radius,int clientnum); - bool InitMesh(const char *name,const char *factname,const char *filename, - const csVector3& pos,const float rotangle,iSector* room); + void InitMesh(const char *name, const csVector3& pos, const float rotangle, iSector* room); }; //----------------------------------------------------------------------------- @@ -397,7 +397,6 @@ gemActiveObject( const char *name ); gemActiveObject( const char* name, const char* factname, - const char* filename, InstanceID myInstance, iSector* room, const csVector3& pos, @@ -434,7 +433,6 @@ public: gemItem(csWeakRef<psItem> item, const char* factname, - const char* filename, InstanceID myInstance, iSector* room, const csVector3& pos, @@ -502,7 +500,6 @@ public: gemContainer(csWeakRef<psItem> item, const char* factname, - const char* filename, InstanceID myInstance, iSector* room, const csVector3& pos, @@ -682,7 +679,7 @@ public: psLinearMovement* pcmove; - gemActor(psCharacter *chardata, const char* factname,const char* filename, + gemActor(psCharacter *chardata, const char* factname, InstanceID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); virtual ~gemActor(); @@ -925,7 +922,7 @@ NpcDialogMenu *initial_triggers; public: - gemNPC(psCharacter *chardata, const char* factname,const char* filename, + gemNPC(psCharacter *chardata, const char* factname, InstanceID myInstance,iSector* room,const csVector3& pos,float rotangle,int clientnum); virtual ~gemNPC(); @@ -993,8 +990,8 @@ { public: - 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) + gemPet(psCharacter *chardata, const char* factname,InstanceID instance,iSector* room, + const csVector3& pos,float rotangle,int clientnum,uint32 id) : gemNPC(chardata,factname,instance,room,pos,rotangle,clientnum) { this->persistanceLevel = "Temporary"; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-02-16 21:04:07
|
Revision: 3044 http://planeshift.svn.sourceforge.net/planeshift/?rev=3044&view=rev Author: mgist Date: 2009-02-16 21:04:04 +0000 (Mon, 16 Feb 2009) Log Message: ----------- - Fixed npcclient compile errors. Also changed item objects to use a nullmesh instead of loading the real object. - Fixed psserver nullmesh bbox. Modified Paths: -------------- trunk/src/npcclient/gem.cpp trunk/src/npcclient/gem.h trunk/src/server/gem.cpp Modified: trunk/src/npcclient/gem.cpp =================================================================== --- trunk/src/npcclient/gem.cpp 2009-02-16 20:41:26 UTC (rev 3043) +++ trunk/src/npcclient/gem.cpp 2009-02-16 21:04:04 UTC (rev 3044) @@ -24,6 +24,8 @@ #include <iengine/movable.h> #include <iengine/engine.h> #include <imap/loader.h> +#include <imesh/nullmesh.h> +#include <imesh/object.h> //============================================================================= // Project Library Includes @@ -43,6 +45,8 @@ //----------------------------------------------------------------------------- +csRef<iMeshFactoryWrapper> gemNPCObject::nullfact = NULL; + psNpcMeshAttach::psNpcMeshAttach(gemNPCObject* objectToAttach) : scfImplementationType(this) { object = objectToAttach; @@ -97,116 +101,133 @@ ) { pcmesh = new npcMesh(npcclient->GetObjectReg(), this, npcclient); - - // Replace helm group token with the default race. - psString fact_name(factname); - fact_name.ReplaceAllSubString("$H", "stonebm"); - factname = fact_name; - psString file_name(filename); - file_name.ReplaceAllSubString("$H", "stonebm"); - filename = file_name; + csRef<iEngine> engine = csQueryRegistry<iEngine> (npcclient->GetObjectReg()); + csRef<iMeshWrapper> mesh; - csRef<iEngine> engine = csQueryRegistry<iEngine> (npcclient->GetObjectReg()); - csRef<iVFS> vfs = csQueryRegistry<iVFS> (npcclient->GetObjectReg()); + if(csString("").Compare(filename)) + { + if(!nullfact) + { + nullfact = engine->CreateMeshFactory("crystalspace.mesh.object.null", "Dummy", false); + csRef<iNullFactoryState> nullstate = scfQueryInterface<iNullFactoryState> (nullfact->GetMeshObjectFactory()); + csBox3 bbox; + bbox.AddBoundingVertex(pos); + nullstate->SetBoundingBox(bbox); + } - csRef<iMeshWrapper> mesh; - csRef<iMeshFactoryWrapper> meshFact = engine->GetMeshFactories()->FindByName(factname); - if(meshFact.IsValid()) - { - mesh = meshFact->CreateMeshWrapper(); + mesh = engine->CreateMeshWrapper(nullfact, name); } - - if(!mesh.IsValid()) + else { - bool failed = true; - if(vfs->Exists(filename)) + // Replace helm group token with the default race. + psString fact_name(factname); + fact_name.ReplaceAllSubString("$H", "stonebm"); + factname = fact_name; + + psString file_name(filename); + file_name.ReplaceAllSubString("$H", "stonebm"); + filename = file_name; + + csRef<iVFS> vfs = csQueryRegistry<iVFS> (npcclient->GetObjectReg()); + + csRef<iMeshFactoryWrapper> meshFact = engine->GetMeshFactories()->FindByName(factname); + if(meshFact.IsValid()) { - failed = false; - while(!failed) + mesh = meshFact->CreateMeshWrapper(); + } + + if(!mesh.IsValid()) + { + bool failed = true; + if(vfs->Exists(filename)) { - csRef<iDocument> doc = ParseFile(npcclient->GetObjectReg(), filename); - if (!doc) + failed = false; + while(!failed) { - Error2("Couldn't parse file %s", filename); - failed = true; - break; - } + csRef<iDocument> doc = ParseFile(npcclient->GetObjectReg(), filename); + if (!doc) + { + Error2("Couldn't parse file %s", filename); + failed = true; + break; + } - csRef<iDocumentNode> root = doc->GetRoot(); - if (!root) - { - Error2("The file(%s) doesn't have a root", filename); - failed = true; - break; - } + csRef<iDocumentNode> root = doc->GetRoot(); + if (!root) + { + Error2("The file(%s) doesn't have a root", filename); + failed = true; + break; + } - csRef<iDocumentNode> meshNode; - csRef<iDocumentNode> libNode = root->GetNode("library"); - if (libNode) - { - meshNode = libNode->GetNode("meshfact"); + csRef<iDocumentNode> meshNode; + csRef<iDocumentNode> libNode = root->GetNode("library"); + if (libNode) + { + meshNode = libNode->GetNode("meshfact"); - if(libNode->GetNode("shaders")) - libNode->RemoveNode(libNode->GetNode("shaders")); + if(libNode->GetNode("shaders")) + libNode->RemoveNode(libNode->GetNode("shaders")); - if(libNode->GetNode("textures")) - libNode->RemoveNode(libNode->GetNode("textures")); + if(libNode->GetNode("textures")) + libNode->RemoveNode(libNode->GetNode("textures")); - if(libNode->GetNode("materials")) - libNode->RemoveNode(libNode->GetNode("materials")); - } - else - meshNode = root->GetNode("meshfact"); - if (!meshNode) - { - Error2("The file(%s) doesn't have a meshfact node", filename); - failed = true; - break; - } + if(libNode->GetNode("materials")) + libNode->RemoveNode(libNode->GetNode("materials")); + } + else + meshNode = root->GetNode("meshfact"); + if (!meshNode) + { + Error2("The file(%s) doesn't have a meshfact node", filename); + failed = true; + break; + } - csRef<iDocumentNode> params = meshNode->GetNode("params"); - if(meshNode->GetNode("params")) - { - if(params->GetNode("material")) - params->RemoveNode(params->GetNode("material")); + csRef<iDocumentNode> params = meshNode->GetNode("params"); + if(meshNode->GetNode("params")) + { + if(params->GetNode("material")) + params->RemoveNode(params->GetNode("material")); - params->RemoveNodes(params->GetNodes("animation")); + params->RemoveNodes(params->GetNodes("animation")); - csRef<iDocumentNodeIterator> meshes = params->GetNodes("mesh"); - while(meshes->HasNext()) + csRef<iDocumentNodeIterator> meshes = params->GetNodes("mesh"); + while(meshes->HasNext()) + { + csRef<iDocumentNode> mesh = meshes->Next(); + csRef<iDocumentAttribute> att = mesh->GetAttribute("material"); + mesh->RemoveAttribute(mesh->GetAttribute("material")); + } + } + + csRef<iThreadedLoader> loader (csQueryRegistry<iThreadedLoader> (npcclient->GetObjectReg())); + csRef<iThreadReturn> ret = loader->LoadNode(root); + ret->Wait(); + engine->SyncEngineListsNow(loader); + meshFact = engine->GetMeshFactories()->FindByName(factname); + if(meshFact.IsValid()) { - csRef<iDocumentNode> mesh = meshes->Next(); - csRef<iDocumentAttribute> att = mesh->GetAttribute("material"); - mesh->RemoveAttribute(mesh->GetAttribute("material")); + mesh = meshFact->CreateMeshWrapper(); } + failed = !mesh.IsValid(); + break; } + } - csRef<iThreadedLoader> loader (csQueryRegistry<iThreadedLoader> (npcclient->GetObjectReg())); - csRef<iThreadReturn> ret = loader->LoadNode(root); - ret->Wait(); - engine->SyncEngineListsNow(loader); - meshFact = engine->GetMeshFactories()->FindByName(factname); - if(meshFact.IsValid()) + if(failed) + { + Error3("Could not set mesh with factname=%s and filename=%s. Trying dummy model", factname, filename); + factname = "stonebm"; + filename = "/planeshift/models/stonebm/stonebm.cal3d"; + if (!pcmesh->SetMesh(factname, filename)) { - mesh = meshFact->CreateMeshWrapper(); + Error3("Could not use dummy CVS mesh with factname=%s and filename=%s", factname, filename); + return false; } - failed = !mesh.IsValid(); - break; } } - - if(failed) - { - Error3("Could not set mesh with factname=%s and filename=%s. Trying dummy model", factname, filename); - factname = "stonebm"; - filename = "/planeshift/models/stonebm/stonebm.cal3d"; - if (!pcmesh->SetMesh(factname, filename)) - { - Error3("Could not use dummy CVS mesh with factname=%s and filename=%s", factname, filename); - return false; - } - } } if(!pcmesh->GetMesh()) @@ -251,7 +272,10 @@ SetInstance( mesg.instance ); Debug3(LOG_CELPERSIST, eid.Unbox(), "Actor %s(%s) Received\n", mesg.name.GetData(), ShowID(mesg.entityid)); - InitMesh( mesg.factname, mesg.filename, mesg.pos, mesg.yrot, mesg.sectorName ); + + csString filename; + filename.Format("/planeshift/models/%s/%s.cal3d", mesg.factname, mesg.factname); + InitMesh( mesg.factname, filename, mesg.pos, mesg.yrot, mesg.sectorName ); InitLinMove( mesg.pos, mesg.yrot, mesg.sectorName, mesg.top, mesg.bottom, mesg.offset ); InitCharData( mesg.texParts, mesg.equipment ); } @@ -305,7 +329,7 @@ Error2("Item %s has bad data! Check cstr_id_gfx_mesh for this item!\n", mesg.name.GetData()); } - InitMesh( mesg.factname.GetDataSafe(), mesg.filename.GetDataSafe(), mesg.pos, mesg.yRot, mesg.sector ); + InitMesh( mesg.factname.GetDataSafe(), "", mesg.pos, mesg.yRot, mesg.sector ); if (mesg.flags & psPersistItem::NOPICKUP) flags |= NOPICKUP; } Modified: trunk/src/npcclient/gem.h =================================================================== --- trunk/src/npcclient/gem.h 2009-02-16 20:41:26 UTC (rev 3043) +++ trunk/src/npcclient/gem.h 2009-02-16 21:04:04 UTC (rev 3044) @@ -21,10 +21,9 @@ //============================================================================= // Crystal Space Includes //============================================================================= +#include <iengine/mesh.h> #include <csutil/csobject.h> -struct iMeshWrapper; - //============================================================================= // Project Library Includes //============================================================================= @@ -109,6 +108,7 @@ protected: psNPCClient *npcclient; + static csRef<iMeshFactoryWrapper> nullfact; csString name; EID eid; Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-02-16 20:41:26 UTC (rev 3043) +++ trunk/src/server/gem.cpp 2009-02-16 21:04:04 UTC (rev 3044) @@ -671,13 +671,19 @@ void gemObject::InitMesh(const char *name, - const csVector3& pos, - const float rotangle, - iSector* room) + const csVector3& pos, + const float rotangle, + iSector* room) { csRef<iEngine> engine = csQueryRegistry<iEngine> (psserver->GetObjectReg()); if(!nullfact) + { nullfact = engine->CreateMeshFactory("crystalspace.mesh.object.null", "Dummy", false); + csRef<iNullFactoryState> nullstate = scfQueryInterface<iNullFactoryState> (nullfact->GetMeshObjectFactory()); + csBox3 bbox; + bbox.AddBoundingVertex(pos); + nullstate->SetBoundingBox(bbox); + } csRef<iMeshWrapper> mesh = engine->CreateMeshWrapper(nullfact, name); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-02-16 21:20:14
|
Revision: 3047 http://planeshift.svn.sourceforge.net/planeshift/?rev=3047&view=rev Author: mgist Date: 2009-02-16 21:20:10 +0000 (Mon, 16 Feb 2009) Log Message: ----------- - bbox value fix. Modified Paths: -------------- trunk/src/npcclient/gem.cpp trunk/src/server/gem.cpp Modified: trunk/src/npcclient/gem.cpp =================================================================== --- trunk/src/npcclient/gem.cpp 2009-02-16 21:15:50 UTC (rev 3046) +++ trunk/src/npcclient/gem.cpp 2009-02-16 21:20:10 UTC (rev 3047) @@ -112,7 +112,7 @@ nullfact = engine->CreateMeshFactory("crystalspace.mesh.object.null", "Dummy", false); csRef<iNullFactoryState> nullstate = scfQueryInterface<iNullFactoryState> (nullfact->GetMeshObjectFactory()); csBox3 bbox; - bbox.AddBoundingVertex(pos); + bbox.AddBoundingVertex(csVector3(0.0f)); nullstate->SetBoundingBox(bbox); } Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-02-16 21:15:50 UTC (rev 3046) +++ trunk/src/server/gem.cpp 2009-02-16 21:20:10 UTC (rev 3047) @@ -681,7 +681,7 @@ nullfact = engine->CreateMeshFactory("crystalspace.mesh.object.null", "Dummy", false); csRef<iNullFactoryState> nullstate = scfQueryInterface<iNullFactoryState> (nullfact->GetMeshObjectFactory()); csBox3 bbox; - bbox.AddBoundingVertex(pos); + bbox.AddBoundingVertex(csVector3(0.0f)); nullstate->SetBoundingBox(bbox); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-02-19 05:33:25
|
Revision: 3057 http://planeshift.svn.sourceforge.net/planeshift/?rev=3057&view=rev Author: kougaro Date: 2009-02-19 05:33:17 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Fix for PS#2579 Modified Paths: -------------- trunk/src/client/gui/inventorywindow.cpp trunk/src/server/bulkobjects/pscharinventory.cpp Modified: trunk/src/client/gui/inventorywindow.cpp =================================================================== --- trunk/src/client/gui/inventorywindow.cpp 2009-02-19 05:24:51 UTC (rev 3056) +++ trunk/src/client/gui/inventorywindow.cpp 2009-02-19 05:33:17 UTC (rev 3057) @@ -132,21 +132,22 @@ } // If you add something here, DO NOT FORGET TO CHANGE 'INVENTORY_EQUIP_COUNT'!!! - SetupSlot("lefthand"); - SetupSlot("righthand"); - SetupSlot("leftfinger"); - SetupSlot("rightfinger"); - SetupSlot("helm"); - SetupSlot("neck"); - SetupSlot("back"); - SetupSlot("arms"); - SetupSlot("gloves"); - SetupSlot("boots"); - SetupSlot("legs"); - SetupSlot("belt"); - SetupSlot("bracers"); - SetupSlot("torso"); - SetupSlot("mind"); + if(!(SetupSlot("lefthand") && + SetupSlot("righthand") && + SetupSlot("leftfinger") && + SetupSlot("rightfinger") && + SetupSlot("helm") && + SetupSlot("neck") && + SetupSlot("back") && + SetupSlot("arms") && + SetupSlot("gloves") && + SetupSlot("boots") && + SetupSlot("legs") && + SetupSlot("belt") && + SetupSlot("bracers") && + SetupSlot("torso") && + SetupSlot("mind"))) + return false; pawsListBox * bulkList = dynamic_cast <pawsListBox*> (FindWidget("BulkList")); if (bulkList) Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2009-02-19 05:24:51 UTC (rev 3056) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2009-02-19 05:33:17 UTC (rev 3057) @@ -473,7 +473,7 @@ } } - return true; + return false; } bool psCharacterInventory::EquipItem(psItem *item, INVENTORY_SLOT_NUMBER slot) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-02-19 08:45:30
|
Revision: 3059 http://planeshift.svn.sourceforge.net/planeshift/?rev=3059&view=rev Author: kougaro Date: 2009-02-19 08:45:25 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Improved fix for PS#2579, addition of a target word for the /drop command, and a few comments in messages.h Modified Paths: -------------- trunk/src/client/cmdusers.cpp trunk/src/common/net/messages.h trunk/src/server/bulkobjects/pscharinventory.cpp Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2009-02-19 05:43:30 UTC (rev 3058) +++ trunk/src/client/cmdusers.cpp 2009-02-19 08:45:25 UTC (rev 3059) @@ -337,7 +337,8 @@ GEMClientObject *object = NULL; // if the command's target is not precised, get the object currently targeted - if (words[1] == "x" || words[1] == "y" || words[1] == "z" || words[1] == "reset" || atoi(words[1])) + if (words[1] == "x" || words[1] == "y" || words[1] == "z" || + words[1] == "reset" || words[1]=="target" || atoi(words[1])) object = psengine->GetCharManager()->GetTarget(); else object = FindEntityWithName(words[1]); @@ -734,7 +735,9 @@ unsigned int i = 1; - if (quantity = atoi(words[1])) + // if the first word is a number, use that for quantity + quantity = atoi(words[1]); + if (quantity) { i++; } Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2009-02-19 05:43:30 UTC (rev 3058) +++ trunk/src/common/net/messages.h 2009-02-19 08:45:25 UTC (rev 3059) @@ -985,6 +985,8 @@ virtual csString ToString(AccessPointers * access_ptrs); }; +//-------------------------------------------------------------------------- + /** * Guild commands sent from client to server. */ @@ -1104,7 +1106,12 @@ virtual csString ToString(AccessPointers * access_ptrs); }; +//-------------------------------------------------------------------------- +/** + * User commands. + * Those are processed by UserManager + */ class psUserCmdMessage : public psMessageCracker { public: @@ -1127,6 +1134,12 @@ virtual csString ToString(AccessPointers * access_ptrs); }; +//-------------------------------------------------------------------------- + +/** + * Work commands. + * Those are processed by WorkManager + */ class psWorkCmdMessage : public psMessageCracker { public: @@ -1150,6 +1163,12 @@ virtual csString ToString(AccessPointers * access_ptrs); }; +//-------------------------------------------------------------------------- + +/** + * Admin commands. + * Those are processed by AdminManager + */ class psAdminCmdMessage : public psMessageCracker { public: @@ -1171,6 +1190,8 @@ virtual csString ToString(AccessPointers * access_ptrs); }; +//-------------------------------------------------------------------------- + class psDisconnectMessage : public psMessageCracker { public: @@ -1191,6 +1212,8 @@ virtual csString ToString(AccessPointers * access_ptrs); }; +//-------------------------------------------------------------------------- + class psUserActionMessage : public psMessageCracker { public: @@ -1267,6 +1290,7 @@ uint32_t options; }; +//-------------------------------------------------------------------------- /** * Messages that are sent to/from the ActionManager @@ -1682,7 +1706,6 @@ csString xml; }; - //--------------------------------------------------------------------------- /// Indicates that an OverrideAction is being done and not a loop as covered in DR msgs. @@ -3900,6 +3923,7 @@ int containerID; }; +//-------------------------------------------------------------------------- class psQuestRewardMessage : public psMessageCracker { @@ -3939,6 +3963,8 @@ csString newValue; }; +//-------------------------------------------------------------------------- + class psExchangeMoneyMsg : public psMessageCracker { public: Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2009-02-19 05:43:30 UTC (rev 3058) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2009-02-19 08:45:25 UTC (rev 3059) @@ -422,6 +422,9 @@ CS_ASSERT(proposedSlot != PSCHARACTER_SLOT_NONE); CS_ASSERT(item != NULL); // attempting either is probably bad + if(proposedSlot < PSCHARACTER_SLOT_NONE) + return false; + if (stackCount == 0) stackCount = item->GetStackCount(); @@ -473,7 +476,7 @@ } } - return false; + return true; } bool psCharacterInventory::EquipItem(psItem *item, INVENTORY_SLOT_NUMBER slot) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-02-19 15:57:01
|
Revision: 3060 http://planeshift.svn.sourceforge.net/planeshift/?rev=3060&view=rev Author: Vengeance2001 Date: 2009-02-19 15:56:54 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Big PAWS update. See history.txt for a (partial) list of changes and improvements. All changes (I think) are backwards-compatible with existing PAWS xmls and skins. Modified Paths: -------------- trunk/src/client/gui/pawsbuddy.cpp trunk/src/client/gui/pawsbuddy.h trunk/src/client/gui/pawscharcreatemain.cpp trunk/src/client/gui/pawscreditswindow.cpp trunk/src/client/gui/pawsgameboard.cpp trunk/src/client/gui/pawsilluminationwindow.cpp trunk/src/client/gui/pawspetitionwindow.cpp trunk/src/client/gui/pawspetitionwindow.h trunk/src/client/gui/pawsquestwindow.cpp trunk/src/client/gui/pawsquestwindow.h trunk/src/client/gui/pawsslot.cpp trunk/src/client/gui/psmainwidget.cpp trunk/src/client/gui/shortcutwindow.cpp trunk/src/client/gui/shortcutwindow.h trunk/src/client/psengine.cpp trunk/src/common/paws/pawsborder.cpp trunk/src/common/paws/pawsbutton.cpp trunk/src/common/paws/pawsframedrawable.cpp trunk/src/common/paws/pawsframedrawable.h trunk/src/common/paws/pawsimagedrawable.h trunk/src/common/paws/pawslistbox.cpp trunk/src/common/paws/pawsmanager.cpp trunk/src/common/paws/pawsmanager.h trunk/src/common/paws/pawsprogressbar.cpp trunk/src/common/paws/pawspromptwindow.cpp trunk/src/common/paws/pawsspinbox.cpp trunk/src/common/paws/pawsspinbox.h trunk/src/common/paws/pawsstringpromptwindow.cpp trunk/src/common/paws/pawsstringpromptwindow.h trunk/src/common/paws/pawsstyles.cpp trunk/src/common/paws/pawstabwindow.cpp trunk/src/common/paws/pawstabwindow.h trunk/src/common/paws/pawstextbox.cpp trunk/src/common/paws/pawstexturemanager.cpp trunk/src/common/paws/pawstexturemanager.h trunk/src/common/paws/pawstextwrap.cpp trunk/src/common/paws/pawstree.cpp trunk/src/common/paws/pawswidget.cpp trunk/src/common/paws/pawswidget.h trunk/src/common/paws/pawsyesnobox.cpp trunk/src/common/paws/pawsyesnobox.h trunk/src/common/util/psxmlparser.cpp trunk/src/tools/pawseditor/pawseditorapp.cpp Modified: trunk/src/client/gui/pawsbuddy.cpp =================================================================== --- trunk/src/client/gui/pawsbuddy.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawsbuddy.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -155,7 +155,7 @@ } -bool pawsBuddyWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) +bool pawsBuddyWindow::OnButtonReleased( int mouseButton, int keyModifier, pawsWidget* widget ) { switch ( widget->GetID() ) { Modified: trunk/src/client/gui/pawsbuddy.h =================================================================== --- trunk/src/client/gui/pawsbuddy.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawsbuddy.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -42,7 +42,7 @@ bool PostSetup(); void HandleMessage( MsgEntry* me ); - bool OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ); + bool OnButtonReleased( int mouseButton, int keyModifier, pawsWidget* widget ); void OnListAction( pawsListBox* widget, int status ); void OnStringEntered(const char *name,int param,const char *value); Modified: trunk/src/client/gui/pawscharcreatemain.cpp =================================================================== --- trunk/src/client/gui/pawscharcreatemain.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawscharcreatemain.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -957,7 +957,6 @@ void pawsCreationMain::Draw() { - ClipToParent(); pawsWidget::Draw(); Modified: trunk/src/client/gui/pawscreditswindow.cpp =================================================================== --- trunk/src/client/gui/pawscreditswindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawscreditswindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -260,7 +260,7 @@ void pawsCreditsWindow::Draw() { pawsWidget::Draw(); - ClipToParent(); + ClipToParent(false); if ( csGetTicks() - initialTime >= scrollRate ) { Modified: trunk/src/client/gui/pawsgameboard.cpp =================================================================== --- trunk/src/client/gui/pawsgameboard.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawsgameboard.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -569,7 +569,7 @@ if (state != EMPTY_TILE) { csRect frame = screenFrame; - ClipToParent(); + ClipToParent(false); image->Draw(frame); } } Modified: trunk/src/client/gui/pawsilluminationwindow.cpp =================================================================== --- trunk/src/client/gui/pawsilluminationwindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawsilluminationwindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -223,7 +223,7 @@ pawsWidget::Draw(); // The close button X overrides the clip region so we have to set it back here - ClipToParent(); + ClipToParent(false); // if (editMode && !mouseDown) update "new selection" each nth frame if (editMode && !mouseDown && !colorPending) Modified: trunk/src/client/gui/pawspetitionwindow.cpp =================================================================== --- trunk/src/client/gui/pawspetitionwindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawspetitionwindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -175,7 +175,7 @@ pawsControlledWindow::Hide(); } -bool pawsPetitionWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) +bool pawsPetitionWindow::OnButtonReleased(int mouseButton, int keyModifier, pawsWidget* widget) { // We know that the calling widget is a button. int button = widget->GetID(); Modified: trunk/src/client/gui/pawspetitionwindow.h =================================================================== --- trunk/src/client/gui/pawspetitionwindow.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawspetitionwindow.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -72,7 +72,7 @@ bool PostSetup(); /// Handle button clicks - bool OnButtonPressed(int mouseButton, int keyModifier, pawsWidget* reporter); + bool OnButtonReleased(int mouseButton, int keyModifier, pawsWidget* reporter); void OnListAction( pawsListBox* selected, int status ); Modified: trunk/src/client/gui/pawsquestwindow.cpp =================================================================== --- trunk/src/client/gui/pawsquestwindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawsquestwindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -54,7 +54,8 @@ #define CANCEL_BUTTON 1204 #define TAB_UNCOMPLETED_QUESTS_OR_EVENTS 1000 #define TAB_COMPLETED_QUESTS_OR_EVENTS 1001 -#define FLIP_TAB_BUTTON 1300 +#define QUEST_TAB_BUTTON 300 +#define EVENT_TAB_BUTTON 301 ////////////////////////////////////////////////////////////////////// // Construction/Destruction @@ -148,7 +149,7 @@ // get pointer to active listbox: eventList = (pawsListBox*)eventTab->GetActiveTab(); - topTab = NULL; + currentTab = NULL; description = (pawsMessageTextBox*)FindWidget("Description"); notes = (pawsMultilineEditTextBox*)FindWidget("Notes"); @@ -215,7 +216,7 @@ populateQuestLists = true; // Reset window - if (!topTab || topTab == questTab) + if (!currentTab || currentTab == questTab) { PopulateQuestTab(); } @@ -274,7 +275,7 @@ notes->Clear(); populateGMEventLists = true; - if (!topTab || topTab == eventTab) + if (!currentTab || currentTab == eventTab) { PopulateGMEventTab(); } @@ -303,7 +304,7 @@ case TAB_COMPLETED_QUESTS_OR_EVENTS: case TAB_UNCOMPLETED_QUESTS_OR_EVENTS: { - if (topTab == questTab) + if (currentTab == questTab) { questID = -1; completedQuestList->Select(NULL); @@ -323,13 +324,13 @@ // These cases are for the discard funciton, and it's confirmation prompt case DISCARD_BUTTON: { - if (topTab == eventTab && questID != -1) + if (currentTab == eventTab && questID != -1) { PawsManager::GetSingleton().CreateYesNoBox( "Are you sure you want to discard the selected event?", this); questIDBuffer = questID; } - else if (topTab == questTab && questID != -1) + else if (currentTab == questTab && questID != -1) { PawsManager::GetSingleton().CreateYesNoBox( "Are you sure you want to discard the selected quest?", this ); @@ -339,9 +340,9 @@ } case CONFIRM_YES: { - if (topTab == questTab) + if (currentTab == questTab) DiscardQuest(questIDBuffer); - else if (topTab == eventTab) + else if (currentTab == eventTab) DiscardGMEvent(questIDBuffer); questID = -1; @@ -359,12 +360,12 @@ // These cases are for the edit window child of this case SAVE_BUTTON: { - if (topTab == eventTab) + if (currentTab == eventTab) { PawsManager::GetSingleton().CreateWarningBox( "Notes for GM-Events not yet implemented. Sorry.", this); } - else if (topTab == questTab && questID != -1) + else if (currentTab == questTab && questID != -1) { bool found = false; for (size_t i=0; i < quest_notes.GetSize(); i++) @@ -391,19 +392,20 @@ } case CANCEL_BUTTON: { - if (topTab == questTab) + if (currentTab == questTab) { ShowNotes(); } break; } - case FLIP_TAB_BUTTON: + case QUEST_TAB_BUTTON: + case EVENT_TAB_BUTTON: { - if (topTab) - topTab->Hide(); +// if (currentTab) +// currentTab->Hide(); - if (!topTab || topTab == eventTab) + if (!currentTab || currentTab == eventTab) { PopulateQuestTab(); } @@ -412,7 +414,7 @@ PopulateGMEventTab(); } - description->Clear(); + description->Clear(); notes->Clear(); break; @@ -452,9 +454,9 @@ size_t topLine = 0; int idColumn; - if (topTab == questTab) + if (currentTab == questTab) idColumn = QCOL_ID; - else if (topTab == eventTab) + else if (currentTab == eventTab) idColumn = EVCOL_ID; else return; @@ -465,7 +467,7 @@ pawsTextBox *field = (pawsTextBox*)row->GetColumn(idColumn); questID = atoi(field->GetText()); - if (topTab == questTab) // GM Events dont support notes, yet! + if (currentTab == questTab) // GM Events dont support notes, yet! { numOfQuests = quest_notes.GetSize(); for (size_t i=0; i < numOfQuests; i++) @@ -588,12 +590,12 @@ uncompletedQuestList->SelfPopulateXML(uncompletedQuests); populateQuestLists = false; } - topTab = questTab; + currentTab = questTab; questTab->SetTab(TAB_UNCOMPLETED_QUESTS_OR_EVENTS); completedQuestList->Select(NULL); uncompletedQuestList->Select(NULL); - topTab->Show(); + currentTab->Show(); } void pawsQuestListWindow::PopulateGMEventTab(void) @@ -605,11 +607,11 @@ uncompletedEventList->SelfPopulateXML(uncompletedEvents); populateGMEventLists = false; } - topTab = eventTab; + currentTab = eventTab; eventTab->SetTab(TAB_UNCOMPLETED_QUESTS_OR_EVENTS); completedEventList->Select(NULL); uncompletedEventList->Select(NULL); - topTab->Show(); + currentTab->Show(); } Modified: trunk/src/client/gui/pawsquestwindow.h =================================================================== --- trunk/src/client/gui/pawsquestwindow.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawsquestwindow.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -154,7 +154,7 @@ bool populateGMEventLists; /// current top tab - pawsTabWindow* topTab; + pawsTabWindow* currentTab; pawsMessageTextBox* description; Modified: trunk/src/client/gui/pawsslot.cpp =================================================================== --- trunk/src/client/gui/pawsslot.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/pawsslot.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -169,7 +169,7 @@ stackCountLabel->Hide(); pawsWidget::Draw(); - ClipToParent(); + ClipToParent(false); csRect frame = screenFrame; // Deal with frames that are taller than they are high (left/right hand Modified: trunk/src/client/gui/psmainwidget.cpp =================================================================== --- trunk/src/client/gui/psmainwidget.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/psmainwidget.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -525,7 +525,7 @@ for(size_t i = 0; i < onscreen.GetSize();i++) { - ClipToParent(); + ClipToParent(false); onscreen[i]->Draw(); } } Modified: trunk/src/client/gui/shortcutwindow.cpp =================================================================== --- trunk/src/client/gui/shortcutwindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/shortcutwindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -52,7 +52,7 @@ #define DEFAULT_COMMAND_FILE "/planeshift/data/options/shortcutcommands_def.xml" #define BUTTON_PADDING 2 -#define BUTTON_SPACING 2 +#define BUTTON_SPACING 8 #define WINDOW_PADDING 5 #define SCROLLBAR_SIZE 12 @@ -154,7 +154,7 @@ button = new pawsButton; button->SetSound("gui.shortcut"); AddChild(button); - button->SetBackground("Shortcut Button"); + button->SetBackground("Scaling Button Up"); matrix[i][k] = button; } } @@ -276,7 +276,8 @@ } } -bool pawsShortcutWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) +// bool pawsShortcutWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) +bool pawsShortcutWindow::OnButtonReleased( int mouseButton, int keyModifier, pawsWidget* widget ) { if (!subWidget) subWidget = PawsManager::GetSingleton().FindWidget("ShortcutEdit"); Modified: trunk/src/client/gui/shortcutwindow.h =================================================================== --- trunk/src/client/gui/shortcutwindow.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/gui/shortcutwindow.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -47,7 +47,8 @@ virtual bool PostSetup(); bool OnMouseDown( int button, int modifiers, int x, int y ); - bool OnButtonPressed(int mouseButton, int keyModifier, pawsWidget* reporter); + // bool OnButtonPressed(int mouseButton, int keyModifier, pawsWidget* reporter); + bool OnButtonReleased(int mouseButton, int keyModifier, pawsWidget* reporter); bool OnScroll( int direction, pawsScrollBar* widget ); void OnResize(); void StopResize(); Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/client/psengine.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -421,7 +421,7 @@ csString skinPath; skinPath += cfgmgr->GetStr("PlaneShift.GUI.Skin.Dir","/planeshift/art/skins/"); skinPath += cfgmgr->GetStr("PlaneShift.GUI.Skin.Selected","default"); - skinPath += ".zip"; + // skinPath += ".zip"; // Don't require the .zip on there, so unzipped skin directories don't need to be named with .zip // This .zip could be a file or a dir csString slash(CS_PATH_SEPARATOR); Modified: trunk/src/common/paws/pawsborder.cpp =================================================================== --- trunk/src/common/paws/pawsborder.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsborder.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -121,8 +121,8 @@ if ( !usingGraphics ) { - if ( !justTitle ) - DrawFrame(frame); + //if ( !justTitle ) + // DrawFrame(frame); return; } Modified: trunk/src/common/paws/pawsbutton.cpp =================================================================== --- trunk/src/common/paws/pawsbutton.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsbutton.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -24,7 +24,7 @@ #include <ivideo/fontserv.h> #include <iutil/evdefs.h> - +#include "pawsmainwidget.h" #include "pawsmanager.h" #include "pawsbutton.h" #include "pawstexturemanager.h" @@ -294,7 +294,7 @@ bool pawsButton::OnMouseEnter() { - if(changeOnMouseOver) + if (changeOnMouseOver) { SetState(true, false); } @@ -304,7 +304,7 @@ bool pawsButton::OnMouseExit() { - if(changeOnMouseOver) + if (changeOnMouseOver) { SetState(false, false); } @@ -358,11 +358,12 @@ { if (keybinding && keyCode == keybinding) { - OnMouseDown(0,0,0,0); + OnMouseUp(-1,0,0,0); return true; } return false; } + bool pawsButton::OnMouseUp( int button, int modifiers, int x, int y ) { if (!enabled) @@ -373,13 +374,24 @@ if (!toggle) SetState(false, false); + if (button != -1) // triggered by keyboard + { + // Check to make sure mouse is still in this button + pawsWidget* newWidget = PawsManager::GetSingleton().GetMainWidget()->WidgetAt(x, y); + if (newWidget != this) + { + printf("Not still in button so not pressed.\n"); + return true; + } + } + if (notify != NULL) { - notify->OnButtonReleased( button, this ); + notify->OnButtonReleased( button, modifiers, this ); } else if ( parent ) { - return parent->OnButtonReleased( button, this ); + return parent->OnButtonReleased( button, modifiers, this ); } return false; Modified: trunk/src/common/paws/pawsframedrawable.cpp =================================================================== --- trunk/src/common/paws/pawsframedrawable.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsframedrawable.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -136,32 +136,39 @@ int w1, w2; switch (type) { + // NOTE: For these tiled backgrounds, the border images are OUTSIDE of the + // x,y,newWidth,newHeight rectangle, so cursors and text are + // placed properly. + case FDT_HORIZONTAL: w1 = pieces[FDP_LEFT].drawable->GetWidth(); w2 = pieces[FDP_RIGHT].drawable->GetWidth(); - DrawPiece(FDP_LEFT, x, y, w1, newHeight, alpha, false, false); - DrawPiece(FDP_RIGHT, x+newWidth-w2, y, w2, newHeight, alpha, false, false); - DrawPiece(FDP_MIDDLE, x+w1, y, newWidth-w1-w2, newHeight, alpha, true, false); + DrawPiece(FDP_LEFT, x-w1, y, w1, newHeight, alpha, false, false); + DrawPiece(FDP_RIGHT, x+newWidth, y, w2, newHeight, alpha, false, false); + DrawPiece(FDP_MIDDLE, x, y, newWidth, newHeight, alpha, true, false); break; case FDT_VERTICAL: w1 = pieces[FDP_TOP].drawable->GetHeight(); w2 = pieces[FDP_BOTTOM].drawable->GetHeight(); - DrawPiece(FDP_TOP, x, y, newWidth, w1, alpha); - DrawPiece(FDP_BOTTOM, x, y+newHeight-w2, newWidth, w2, alpha); - DrawPiece(FDP_MIDDLE, x, y+w1, newWidth, newHeight-w1-w2, alpha); + DrawPiece(FDP_TOP, x, y-w1, newWidth, w1, alpha); + DrawPiece(FDP_BOTTOM, x, y+newHeight, newWidth, w2, alpha); + DrawPiece(FDP_MIDDLE, x, y, newWidth, newHeight, alpha); break; case FDT_FULL: { - int midLeft = x + pieces[FDP_TOP_LEFT].drawable->GetWidth(); - int midTop = y + pieces[FDP_TOP_LEFT].drawable->GetHeight(); - int midRight = x + newWidth - pieces[FDP_BOTTOM_RIGHT].drawable->GetWidth(); - int midBottom = y + newHeight - pieces[FDP_BOTTOM_RIGHT].drawable->GetHeight(); - DrawPiece(FDP_TOP_LEFT, x, y, alpha); + int midLeft = x; + int midTop = y ; + int midRight = x + newWidth; + int midBottom = y + newHeight; + + DrawPiece(FDP_TOP_LEFT, x - pieces[FDP_TOP_LEFT].drawable->GetWidth(), y - pieces[FDP_TOP_LEFT].drawable->GetHeight(), alpha); DrawPiece(FDP_TOP, midLeft, midTop-pieces[FDP_TOP].drawable->GetHeight(), midRight-midLeft, pieces[FDP_TOP].drawable->GetHeight(), alpha, true, false); - DrawPiece(FDP_TOP_RIGHT, midRight, y, alpha); + DrawPiece(FDP_TOP_RIGHT, midRight, y - pieces[FDP_TOP_RIGHT].drawable->GetHeight(), alpha); + DrawPiece(FDP_LEFT, midLeft-pieces[FDP_LEFT].drawable->GetWidth(), midTop, pieces[FDP_LEFT].drawable->GetWidth(), midBottom-midTop, alpha, false, true); DrawPiece(FDP_MIDDLE, midLeft, midTop, midRight-midLeft, midBottom-midTop, alpha, true, true); DrawPiece(FDP_RIGHT, midRight, midTop, pieces[FDP_RIGHT].drawable->GetWidth(), midBottom-midTop, alpha, false, true); + DrawPiece(FDP_BOTTOM_LEFT, midLeft-pieces[FDP_BOTTOM_LEFT].drawable->GetWidth(), midBottom, alpha); DrawPiece(FDP_BOTTOM, midLeft, midBottom, midRight-midLeft, pieces[FDP_BOTTOM].drawable->GetHeight(), alpha, true, false); DrawPiece(FDP_BOTTOM_RIGHT, midRight, midBottom, alpha); @@ -208,12 +215,37 @@ int r = pieces[FDP_TOP_RIGHT].drawable->GetHeight() + pieces[FDP_RIGHT].drawable->GetHeight() + pieces[FDP_BOTTOM_RIGHT].drawable->GetHeight(); return csMax<int>(l, csMax<int>(m, r)); } - case FDT_COUNT: + default: break; } return 0; } +void pawsFrameDrawable::ExpandClipRect(csRect &clipRect) +{ + switch (type) + { + case FDT_HORIZONTAL: + clipRect.xmin -= pieces[FDP_LEFT].drawable->GetWidth(); + clipRect.xmax += pieces[FDP_RIGHT].drawable->GetWidth(); + break; + + case FDT_VERTICAL: + clipRect.ymin -= pieces[FDP_TOP].drawable->GetHeight(); + clipRect.ymax += pieces[FDP_BOTTOM].drawable->GetHeight(); + break; + + case FDT_FULL: + clipRect.xmin -= pieces[FDP_LEFT].drawable->GetWidth(); + clipRect.xmax += pieces[FDP_RIGHT].drawable->GetWidth(); + clipRect.ymin -= pieces[FDP_TOP].drawable->GetHeight(); + clipRect.ymax += pieces[FDP_BOTTOM].drawable->GetHeight(); + + default: + break; + } +} + int pawsFrameDrawable::GetDefaultAlpha() const { return defaultAlphaValue; Modified: trunk/src/common/paws/pawsframedrawable.h =================================================================== --- trunk/src/common/paws/pawsframedrawable.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsframedrawable.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -90,6 +90,8 @@ int GetWidth() const; int GetHeight() const; + void ExpandClipRect(csRect &clipRect); + int GetDefaultAlpha() const; }; Modified: trunk/src/common/paws/pawsimagedrawable.h =================================================================== --- trunk/src/common/paws/pawsimagedrawable.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsimagedrawable.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -72,6 +72,7 @@ int GetWidth() const; int GetHeight() const; + void ExpandClipRect(csRect &clipRect) {}; int GetDefaultAlpha() const; Modified: trunk/src/common/paws/pawslistbox.cpp =================================================================== --- trunk/src/common/paws/pawslistbox.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawslistbox.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -122,8 +122,10 @@ rows.DeleteAll(); totalRows = 0; - if ( scrollBar ) scrollBar->Hide(); - if ( horzscrollBar ) horzscrollBar->Hide(); + if (scrollBar) + scrollBar->Hide(); + if (horzscrollBar) + horzscrollBar->Hide(); } @@ -155,10 +157,26 @@ 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" ); + cInfo.xmlbinding = colNode->GetAttributeValue("xmlbinding"); + + cInfo.widgetNode = colNode->GetNode("widget"); + if (!cInfo.widgetNode) + { + csRef<iDocumentNodeIterator> it = colNode->GetNodes(); + while (it->HasNext()) + { + csRef<iDocumentNode> n = it->Next(); + if (strncmp(n->GetValue(),"paws",4)==0) // must start with "paws" + { + cInfo.widgetNode = n; + break; + } + } + } + CS_ASSERT_MSG("Did not find widget or paws node in column definition.",cInfo.widgetNode != NULL); + rowWidth+= cInfo.width; colInfo.Push(cInfo); @@ -1166,6 +1184,8 @@ void pawsListBoxRow::AddColumn( int column, ColumnDef* def ) { csString factory = def[column].widgetNode->GetAttributeValue("factory"); + if (factory.Length() == 0) + factory = def[column].widgetNode->GetValue(); pawsWidget* widget = PawsManager::GetSingleton().CreateWidget( factory ); if (!widget) Modified: trunk/src/common/paws/pawsmanager.cpp =================================================================== --- trunk/src/common/paws/pawsmanager.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsmanager.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -143,7 +143,7 @@ Error2("Failed to load skin %s!", skin); } - // Mount base skin to satisfy unskined elements + // Mount base skin to satisfy unskinned elements if(skinBase) { if(!LoadAdditionalSkin(skinBase)) @@ -680,20 +680,17 @@ continue; // This is a widget so read it's factory to create it. - if ( strcmp( node->GetValue(), "widget" ) == 0 ) + pawsWidget * widget = LoadWidget(node); + if (widget) { - pawsWidget * widget = LoadWidget(node); - if (widget) - { - widget->SetFilename(widgetFile); - mainWidget->AddChild(widget); - } - else - { - Error2("Could not load child widget in file %s",fullPath.GetDataSafe()); - return false; - } + widget->SetFilename(widgetFile); + mainWidget->AddChild(widget); } + else + { + Error2("Could not load child widget in file %s",fullPath.GetDataSafe()); + return false; + } } return true; } @@ -717,23 +714,25 @@ continue; // This is a widget so read it's factory to create it. - if ( strcmp( node->GetValue(), "widget" ) == 0 ) - { - pawsWidget * widget = LoadWidget(node); - if (widget) - loadedWidgets.Push(widget); - else - errors = true; - } + pawsWidget * widget = LoadWidget(node); + if (widget) + loadedWidgets.Push(widget); + else + errors = true; } return (!errors); } -pawsWidget * PawsManager::LoadWidget( csRef<iDocumentNode> widgetNode ) +pawsWidget * PawsManager::LoadWidget(iDocumentNode *widgetNode ) { pawsWidget * widget; + csString factory; - csString factory = widgetNode->GetAttributeValue( "factory" ); + if ( strcmp( widgetNode->GetValue(), "widget" ) == 0 ) // old syntax is <widget factory="bla"....> + factory = widgetNode->GetAttributeValue( "factory" ); + else + factory = widgetNode->GetValue(); // new syntax is using factory name as tag name directly: <pawsChatWindow ....> + if ( factory.Length() == 0 ) { Error1("Could not read factory from XML file. Error in XML"); Modified: trunk/src/common/paws/pawsmanager.h =================================================================== --- trunk/src/common/paws/pawsmanager.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsmanager.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -133,7 +133,7 @@ /** @brief Loads a widget from given XML node. * @return NULL on failure. */ - pawsWidget * LoadWidget( csRef<iDocumentNode> widgetNode ); + pawsWidget *LoadWidget(iDocumentNode *widgetNode); /** @brief Loads widgets from a definition file without assigning a parent. * Modified: trunk/src/common/paws/pawsprogressbar.cpp =================================================================== --- trunk/src/common/paws/pawsprogressbar.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsprogressbar.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -75,7 +75,7 @@ void pawsProgressBar::Draw() { - ClipToParent(); + ClipToParent(false); int alpha = 255; if (parent Modified: trunk/src/common/paws/pawspromptwindow.cpp =================================================================== --- trunk/src/common/paws/pawspromptwindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawspromptwindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -45,7 +45,7 @@ bool pawsPromptWindow::PostSetup() { - SetBackground("Small Blank Background"); + SetBackground("Scaling Widget Background"); UseBorder("line"); label = new pawsTextBox(); @@ -53,14 +53,16 @@ okButton = new pawsButton(); AddChild(okButton); - okButton->SetUpImage("Standard Button"); + okButton->SetUpImage("Scaling Button Up"); + okButton->SetDownImage("Scaling Button Down"); okButton->SetRelativeFrameSize(80, 25); okButton->SetText(PawsManager::GetSingleton().Translate("OK")); okButton->SetSound("gui.ok"); cancelButton = new pawsButton(); AddChild(cancelButton); - cancelButton->SetUpImage("Standard Button"); + cancelButton->SetUpImage("Scaling Button Up"); + cancelButton->SetDownImage("Scaling Button Down"); cancelButton->SetRelativeFrameSize(80, 25); cancelButton->SetText(PawsManager::GetSingleton().Translate("Cancel")); cancelButton->SetSound("gui.cancel"); Modified: trunk/src/common/paws/pawsspinbox.cpp =================================================================== --- trunk/src/common/paws/pawsspinbox.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsspinbox.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -244,7 +244,7 @@ } -bool pawsSpinBox::OnButtonReleased( int button, pawsWidget* widget) +bool pawsSpinBox::OnButtonReleased( int button, int keyModifier, pawsWidget* widget) { if ( widget == upButton || widget == downButton ) { @@ -254,7 +254,7 @@ } if ( parent ) - return parent->OnButtonReleased( button, widget ); + return parent->OnButtonReleased( button, keyModifier,widget ); return false; } Modified: trunk/src/common/paws/pawsspinbox.h =================================================================== --- trunk/src/common/paws/pawsspinbox.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsspinbox.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -61,7 +61,7 @@ virtual float GetValue(); virtual bool OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ); - virtual bool OnButtonReleased( int button, pawsWidget* widget); + virtual bool OnButtonReleased( int button, int keyModifier, pawsWidget* widget); virtual void OnLostFocus(); Modified: trunk/src/common/paws/pawsstringpromptwindow.cpp =================================================================== --- trunk/src/common/paws/pawsstringpromptwindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsstringpromptwindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -70,7 +70,7 @@ this->param = param; } -bool pawsStringPromptWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) +bool pawsStringPromptWindow::OnButtonReleased( int mouseButton, int keyModifier, pawsWidget* widget ) { if (action==NULL) return false; Modified: trunk/src/common/paws/pawsstringpromptwindow.h =================================================================== --- trunk/src/common/paws/pawsstringpromptwindow.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsstringpromptwindow.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -52,7 +52,7 @@ pawsStringPromptWindow(); //from pawsWidget: - bool OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ); + bool OnButtonReleased( int mouseButton, int keyModifier, pawsWidget* widget ); virtual bool OnKeyDown( int keyCode, int keyChar, int modifiers ); static pawsStringPromptWindow * Create( Modified: trunk/src/common/paws/pawsstyles.cpp =================================================================== --- trunk/src/common/paws/pawsstyles.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsstyles.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -128,6 +128,6 @@ void pawsStyles::ApplyStyle(iDocumentNode * style, iDocumentNode * target) { - CopyXMLNode(style, target, 2); + CopyXMLNode(style, target, 3); } Modified: trunk/src/common/paws/pawstabwindow.cpp =================================================================== --- trunk/src/common/paws/pawstabwindow.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawstabwindow.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -30,15 +30,19 @@ bool pawsTabWindow::PostSetup() { lastButton = (pawsButton*)FindWidget(1000); - if (!lastButton) lastButton = (pawsButton*)FindWidget(1200); + if (!lastButton) + lastButton = (pawsButton*)FindWidget(1200); lastButton->SetState(true); - activeTab = FindWidget(1100); - if (!activeTab) activeTab = FindWidget(1200); - for ( size_t z = 0; z < children.GetSize(); z++ ) - { - if ( strcmp(children[z]->GetType(), "pawsButton")) + activeTab = FindWidget(1100); + if (!activeTab) + activeTab = FindWidget(1200); + + // Hide all the panels so we can show the active one after + for ( size_t z = 0; z < children.GetSize(); z++ ) + { + if ( strcmp(children[z]->GetType(), "pawsButton") != 0) children[z]->Hide(); - } + } activeTab->Show(); PawsManager::GetSingleton().SetCurrentFocusedWidget(activeTab); Resize(); @@ -48,28 +52,33 @@ bool pawsTabWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) { pawsButton* buttonWidget = ( pawsButton* ) widget; - if (buttonWidget->GetID() < 1200) + if (buttonWidget->GetParent() == this && buttonWidget->GetID() < 1200) // only auto-flip for tabs that are owned by this TabWindow { - pawsWidget* newWidget = FindWidget(buttonWidget->GetID()+100); - if (newWidget) - { - lastButton->SetState(false); - activeTab->Hide(); - newWidget->Show(); - buttonWidget->SetState(true); - PawsManager::GetSingleton().SetCurrentFocusedWidget(parent); - activeTab=newWidget; - lastButton=buttonWidget; - parent->OnButtonPressed(mouseButton, keyModifier, widget); - return true; - } - return false; + pawsWidget* newWidget = FindWidget(buttonWidget->GetID()+100); + if (newWidget) + { + lastButton->SetState(false); + activeTab->Hide(); + newWidget->Show(); + buttonWidget->SetState(true); + PawsManager::GetSingleton().SetCurrentFocusedWidget(parent); + activeTab=newWidget; + lastButton=buttonWidget; + parent->OnButtonPressed(mouseButton, keyModifier, widget); + return true; } + return false; + } + if (buttonWidget->GetParent() == this) // only handle buttons owned by this TabWindow + { lastButton->SetState(false); buttonWidget->SetState(true); lastButton=buttonWidget; - parent->OnButtonPressed(mouseButton, keyModifier, widget); - return true; + } + + // In any case, pass up the chain to the parent of this tab. + parent->OnButtonPressed(mouseButton, keyModifier, widget); + return true; } void pawsTabWindow::SetTab(int id) Modified: trunk/src/common/paws/pawstabwindow.h =================================================================== --- trunk/src/common/paws/pawstabwindow.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawstabwindow.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -23,6 +23,10 @@ #include "pawsbutton.h" +/** + * This window is supposed to be a generic widget for using tabs to show and hide subwindows + * automatically. + */ class pawsTabWindow : public pawsWidget { public: @@ -39,7 +43,6 @@ protected: pawsWidget* activeTab; - pawsButton* lastButton; }; Modified: trunk/src/common/paws/pawstextbox.cpp =================================================================== --- trunk/src/common/paws/pawstextbox.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawstextbox.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -431,7 +431,7 @@ { pawsWidget::Draw(); - ClipToParent(); + ClipToParent(false); int yPos = 0; @@ -658,7 +658,8 @@ { /// See how many characters can be drawn on a single line. int canDrawLength = GetFont()->GetLength( dummy, screenFrame.Width()-offSet ); - + CS_ASSERT_MSG("iFont->GetLength returned 0. Infinite loop detected.", canDrawLength != 0); + /// If it can fit the entire string then return. if ( canDrawLength == (int)strlen( dummy ) ) { @@ -827,7 +828,7 @@ pawsWidget::Draw(); - ClipToParent(); + ClipToParent(false); if (cursorPosition>text.Length()) cursorPosition=text.Length(); @@ -1292,7 +1293,7 @@ void pawsMultiLineTextBox::Draw() { pawsWidget::Draw(); - pawsWidget::ClipToParent(); + pawsWidget::ClipToParent(false); int drawX = screenFrame.xmin+margin; int drawY = screenFrame.ymin+margin; Modified: trunk/src/common/paws/pawstexturemanager.cpp =================================================================== --- trunk/src/common/paws/pawstexturemanager.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawstexturemanager.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -127,7 +127,7 @@ void pawsTextureManager::AddPawsImage(iPawsImage * element) { - printf("Adding pawsImage called %s\n", element->GetName() ); + // printf("Adding pawsImage called %s\n", element->GetName() ); elementList.Put(element->GetName(), element); } Modified: trunk/src/common/paws/pawstexturemanager.h =================================================================== --- trunk/src/common/paws/pawstexturemanager.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawstexturemanager.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -46,9 +46,10 @@ virtual void Draw(csRect rect, int alpha=-1) = 0; virtual void Draw(int x, int y, int newWidth, int newHeight, int alpha=-1) = 0; - virtual int GetWidth() const = 0; - virtual int GetHeight() const = 0; - + virtual int GetWidth() const = 0; + virtual int GetHeight() const = 0; + virtual void ExpandClipRect(csRect &clipRect) = 0; + virtual int GetDefaultAlpha() const = 0; }; Modified: trunk/src/common/paws/pawstextwrap.cpp =================================================================== --- trunk/src/common/paws/pawstextwrap.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawstextwrap.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -468,7 +468,7 @@ } pawsWidget::Draw(); - pawsWidget::ClipToParent(); + pawsWidget::ClipToParent(false); for (size_t line = topLine; line <= (topLine+canDrawLines); line++ ) { Modified: trunk/src/common/paws/pawstree.cpp =================================================================== --- trunk/src/common/paws/pawstree.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawstree.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -1101,14 +1101,14 @@ SetScrollBarMax(); } - ClipToParent(); + ClipToParent(true); DrawBackground(); graphics2D->SetClipRect(screenFrame.xmin, screenFrame.ymin, screenFrame.xmax, screenFrame.ymax); if (decor) decor->Decorate(); - ClipToParent(); + ClipToParent(false); DrawChildren(); } Modified: trunk/src/common/paws/pawswidget.cpp =================================================================== --- trunk/src/common/paws/pawswidget.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawswidget.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -165,7 +165,11 @@ { if ( pressedWidget->GetName()!=NULL && GetCloseName()!=NULL && strcmp( pressedWidget->GetName(),GetCloseName())==0 ) { - Close(); + if (modifiers == (CSMASK_CTRL | CSMASK_ALT)) + ReloadWidget(); + else + Close(); + return true; } else @@ -280,6 +284,9 @@ atr = node->GetAttribute("style"); + if (name=="ChatWindow") + printf("In chat window...\n"); + if (atr) PawsManager::GetSingleton().ApplyStyle(atr->GetValue(), node); else @@ -519,7 +526,7 @@ csString title = titleNode->GetAttributeValue("text"); csString image = titleNode->GetAttributeValue("resource"); csString align = titleNode->GetAttributeValue("align"); - csString close = titleNode->GetAttributeValue( "close_button" ); + csString close = titleNode->GetAttributeValue("close_button"); bool shadowTitle = titleNode->GetAttributeValueAsBool("shadow", true); SetTitle( title, image, align, close, shadowTitle ); @@ -700,6 +707,9 @@ return false; } + if (name=="ChatWindow") + printf("Chat found."); + if ( ! LoadChildren(node) ) return false; @@ -740,7 +750,7 @@ pawsWidget* widget; // Get an iterator over all the child widgets - csRef<iDocumentNodeIterator> childIter = node->GetNodes ("widget"); + csRef<iDocumentNodeIterator> childIter = node->GetNodes(); while ( childIter->HasNext() ) { @@ -772,14 +782,15 @@ { csString factory = childWidgetNode->GetAttributeValue( "factory" ); - if ( factory.Length() == 0 ) + if (factory.Length() == 0) { - Error1("Could not read factory from XML file. Error in XML"); - return false; + factory=childWidgetNode->GetValue(); + if (strncmp(factory,"paws",4) != 0) + continue; } - + widget = PawsManager::GetSingleton().CreateWidget( factory ); - CS_ASSERT( widget ); + CS_ASSERT_MSG("Creating widget from factory name failed.", widget!=NULL); AddChild( widget ); } @@ -1060,13 +1071,15 @@ void pawsWidget::Draw() { // Setup our clipping rect so we know where we can draw - ClipToParent(); + ClipToParent(true); // If we can't draw anywhere, then don't try. Our children can't be drawn either. if (clipRect.IsEmpty()) return; DrawBackground(); + + ClipToParent(false); DrawChildren(); // Draw the masking image @@ -1497,7 +1510,7 @@ return true; } } - else if ((button == csmbRight) || (button == csmbLeft && modifiers & CSMASK_CTRL)) + else if ((button == csmbRight) || (button == csmbLeft && modifiers == CSMASK_CTRL)) { if (!contextMenu && !contextMenuFile.IsEmpty()) { @@ -1545,7 +1558,9 @@ if ( parent ) return parent->OnMouseUp( button, modifiers, x, y ); else + { return false; + } } bool pawsWidget::OnDoubleClick( int button, int modifiers, int x, int y ) @@ -2290,7 +2305,7 @@ MoveTo(targetX, targetY); } -void pawsWidget::ClipToParent() +void pawsWidget::ClipToParent(bool allowForBackgroundBorder) { if ( !parent ) { @@ -2313,6 +2328,11 @@ else clipRect = screenFrame; + if (allowForBackgroundBorder && bgImage) + { + bgImage->ExpandClipRect(clipRect); + } + // Calculate intersection of our frame and parent frame clipRect.Intersect(parent->ClipRect()); @@ -2706,7 +2726,8 @@ csRef<iDocumentNode> child = defaults->Next(); if (!strcmp(child->GetValue(),"defaultstyle")) { - defaultWidgetStyles.Put(child->GetAttributeValue("factory"),child->GetAttributeValue("style")); + printf("Adding style %s for widget %s.\n",child->GetAttributeValue("style"),child->GetAttributeValue("widget")); + defaultWidgetStyles.Put(child->GetAttributeValue("widget"),child->GetAttributeValue("style")); } } return true; @@ -2716,15 +2737,24 @@ { static csString style; + if (name=="ChatWindow") + printf("Finding default style for factory '%s'\n", factoryName); + style = defaultWidgetStyles.Get(factoryName,csString("not found")); if (style == "not found" && parent != NULL) { + if (name=="ChatWindow") + printf("No default style found for factory '%s'. Checking parent.\n", factoryName); // walk up the chain of parents return parent->FindDefaultWidgetStyle(factoryName); } if (style == "not found") return NULL; else + { + if (name=="ChatWindow") + printf("Default style '%s' found for factory '%s'\n", style.GetData(), factoryName); return style; + } } Modified: trunk/src/common/paws/pawswidget.h =================================================================== --- trunk/src/common/paws/pawswidget.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawswidget.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -837,7 +837,7 @@ if ( parent ) return parent->OnButtonPressed( button, keyModifier, widget ); - return false; + return true; } /** Called whenever a button is released. @@ -845,9 +845,10 @@ * @param widget The widget the button belongs to. * @return bool Parent's result or FALSE if no parent. */ - virtual bool OnButtonReleased( int button, pawsWidget* widget) + virtual bool OnButtonReleased( int button, int keyModifier, pawsWidget* widget) { - if ( parent ) return parent->OnButtonReleased( button, widget ); + if ( parent ) + return parent->OnButtonReleased( button, keyModifier, widget ); return false; } @@ -1105,7 +1106,7 @@ * it calculates the intersection between either it's border or * screenframe and parent clip. Updates clipRect for future drawing. */ - void ClipToParent(); + void ClipToParent(bool allowForBackgroundBorder); /** This returns the current clipping rectangle. * @return csRect clipRect Modified: trunk/src/common/paws/pawsyesnobox.cpp =================================================================== --- trunk/src/common/paws/pawsyesnobox.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsyesnobox.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -91,9 +91,9 @@ notify = widget; } -bool pawsYesNoBox::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) +bool pawsYesNoBox::OnButtonReleased( int mouseButton, int keyModifier, pawsWidget* widget ) { - // The parent is responisble for handling the button presses. + // The parent is responsible for handling the button presses. if ( notify ) { PawsManager::GetSingleton().SetModalWidget( 0 ); Modified: trunk/src/common/paws/pawsyesnobox.h =================================================================== --- trunk/src/common/paws/pawsyesnobox.h 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/paws/pawsyesnobox.h 2009-02-19 15:56:54 UTC (rev 3060) @@ -41,7 +41,7 @@ pawsYesNoBox(); virtual ~pawsYesNoBox(); - bool OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ); + bool OnButtonReleased( int mouseButton, int keyModifier, pawsWidget* widget ); void SetNotify( pawsWidget* widget ); bool PostSetup(); Modified: trunk/src/common/util/psxmlparser.cpp =================================================================== --- trunk/src/common/util/psxmlparser.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/common/util/psxmlparser.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -404,7 +404,7 @@ { csRef<iDocumentNode> child = nodeIter->Next(); csRef<iDocumentNode> targetChild = target->GetNode(child->GetValue()); - if (targetChild==NULL) + if (targetChild==NULL || mode==3) // Mode 3 means don't merge tags but just insert multiples, so we create a new one here every time { targetChild = target->CreateNodeBefore(child->GetType()); if (targetChild == NULL) Modified: trunk/src/tools/pawseditor/pawseditorapp.cpp =================================================================== --- trunk/src/tools/pawseditor/pawseditorapp.cpp 2009-02-19 08:45:25 UTC (rev 3059) +++ trunk/src/tools/pawseditor/pawseditorapp.cpp 2009-02-19 15:56:54 UTC (rev 3060) @@ -232,7 +232,7 @@ csString zip; zip += cfgmgr->GetStr("Planeshift.GUI.Skin.Dir","/planeshift/art/skins/"); zip += name; - zip += ".zip"; + // zip += ".zip"; // Not doing this anymore so that we can use directories unzipped without naming them .zip :) //const char *zip = "/this/art/skins/cvs.zip"; csString slash(CS_PATH_SEPARATOR); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-02-20 05:45:29
|
Revision: 3067 http://planeshift.svn.sourceforge.net/planeshift/?rev=3067&view=rev Author: Vengeance2001 Date: 2009-02-20 05:45:25 +0000 (Fri, 20 Feb 2009) Log Message: ----------- Fixed Help window and vertical alignment of text items. Modified Paths: -------------- trunk/src/client/gui/pawshelp.cpp trunk/src/common/paws/pawstextbox.cpp trunk/src/common/paws/pawstree.cpp trunk/src/npcclient/npc.cpp Modified: trunk/src/client/gui/pawshelp.cpp =================================================================== --- trunk/src/client/gui/pawshelp.cpp 2009-02-20 05:44:31 UTC (rev 3066) +++ trunk/src/client/gui/pawshelp.cpp 2009-02-20 05:45:25 UTC (rev 3067) @@ -52,24 +52,19 @@ { helpText = dynamic_cast<pawsMultiLineTextBox*>(FindWidget("HelpText")); if (!helpText) - return false; + return false; // creates tree: - helpTree = new pawsSimpleTree; + helpTree = dynamic_cast<pawsSimpleTree*>(FindWidget("HelpTree")); if (helpTree == NULL) { Error1("Could not create widget pawsSimpleTree"); return false; } - AddChild(helpTree); - helpTree->SetRelativeFrame(27,29,GetActualWidth(198),GetActualHeight(224)); helpTree->SetNotify(this); - helpTree->SetAttachFlags(ATTACH_TOP | ATTACH_BOTTOM | ATTACH_LEFT); helpTree->SetScrollBars(false, true); - helpTree->Resize(); - helpTree->SetDefaultColor(psengine->GetG2D()->FindRGB(255,255,255)); - helpTree->InsertChildL("", "RootTopic", "", ""); + helpTree->InsertChildL("", "RootTopic", "", ""); LoadHelps(helpDoc->GetRoot()->GetNode("help"), "RootTopic"); Modified: trunk/src/common/paws/pawstextbox.cpp =================================================================== --- trunk/src/common/paws/pawstextbox.cpp 2009-02-20 05:44:31 UTC (rev 3066) +++ trunk/src/common/paws/pawstextbox.cpp 2009-02-20 05:45:25 UTC (rev 3067) @@ -43,7 +43,7 @@ pawsTextBox::pawsTextBox() : textX(0), textY(0) { horizAdjust = horizLEFT; - vertAdjust = vertTOP; + vertAdjust = vertCENTRE; vertical = false; grayed = false; @@ -89,7 +89,9 @@ VertAdjust(vertBOTTOM); else VertAdjust(vertTOP); - } + } + else + VertAdjust(vertCENTRE); // default is centered vertically unless specified otherwise csRef<iDocumentAttribute> textAttribute = textNode->GetAttribute("string"); if ( textAttribute ) @@ -105,6 +107,9 @@ { int width, height; + if (!screenFrame.Height()) + SetSizeByText(); + if (horizAdjust==horizRIGHT || horizAdjust==horizCENTRE || vertAdjust==vertBOTTOM || vertAdjust==vertCENTRE) CalcTextSize(width, height); @@ -193,7 +198,7 @@ CalcTextPos(); } -void pawsTextBox::CalcTextSize(int & width, int & height) +void pawsTextBox::CalcTextSize(int& width, int& height) { if (vertical) { @@ -303,9 +308,9 @@ } else { - DrawWidgetText( (const char*)text, - screenFrame.xmin + margin + textX, - screenFrame.ymin + margin + textY ); + DrawWidgetText( (const char*)text, + screenFrame.xmin + margin + textX, + screenFrame.ymin + margin + textY ); } } Modified: trunk/src/common/paws/pawstree.cpp =================================================================== --- trunk/src/common/paws/pawstree.cpp 2009-02-20 05:44:31 UTC (rev 3066) +++ trunk/src/common/paws/pawstree.cpp 2009-02-20 05:45:25 UTC (rev 3067) @@ -604,7 +604,7 @@ if (xmlRoot == NULL) { Error1("<widget> tag not found"); - return false; + return true; } factory = xmlRoot->GetAttributeValue("factory"); Modified: trunk/src/npcclient/npc.cpp =================================================================== --- trunk/src/npcclient/npc.cpp 2009-02-20 05:44:31 UTC (rev 3066) +++ trunk/src/npcclient/npc.cpp 2009-02-20 05:45:25 UTC (rev 3067) @@ -114,7 +114,7 @@ { this->name = name; this->pid = pid; - this->type = type; + this->type = type->GetName(); this->region_name = region_name; this->debugging = debugging; this->disabled = disabled; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-22 17:19:44
|
Revision: 3094 http://planeshift.svn.sourceforge.net/planeshift/?rev=3094&view=rev Author: weltall2 Date: 2009-02-22 17:19:38 +0000 (Sun, 22 Feb 2009) Log Message: ----------- fixed a little glitch in gm showing when no one is assigned, removed some leftover code Modified Paths: -------------- trunk/src/client/gui/pawspetitiongmwindow.cpp trunk/src/server/adminmanager.cpp Modified: trunk/src/client/gui/pawspetitiongmwindow.cpp =================================================================== --- trunk/src/client/gui/pawspetitiongmwindow.cpp 2009-02-22 16:00:31 UTC (rev 3093) +++ trunk/src/client/gui/pawspetitiongmwindow.cpp 2009-02-22 17:19:38 UTC (rev 3094) @@ -676,7 +676,7 @@ // Set the data for this row: petitionList->NewRow(i); SetText(i, PGMCOL_LVL, "%d", info.escalation); - SetText(i, PGMCOL_GM, "%s", info.assignedgm.GetData()); + SetText(i, PGMCOL_GM, "%s", info.assignedgm.GetDataSafe()); SetText(i, PGMCOL_PLAYER, "%s", info.player.GetData()); SetText(i, PGMCOL_ONLINE, "%s", (info.online ? "yes" : "no")); SetText(i, PGMCOL_STATUS, "%s", info.status.GetData()); Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-02-22 16:00:31 UTC (rev 3093) +++ trunk/src/server/adminmanager.cpp 2009-02-22 17:19:38 UTC (rev 3094) @@ -1051,6 +1051,11 @@ value = words.GetInt(3); return true; } + else if (command == "/forcepickup") //will pickup also no pickup items - be careful with this - + { + player = words[1]; + return true; + } return false; } @@ -1449,6 +1454,10 @@ { AssignFaction(me, msg, data, client, targetclient); } + else if (data.command == "/forcepickup") + { + ForcePickup(me, msg, data, targetobject, client); + } } void AdminManager::HandleLoadQuest(psAdminCmdMessage& msg, AdminCmdData& data, Client* client) @@ -1905,7 +1914,10 @@ gmSettings |= (1 << 8); if (client->GetActor()->givekillexp) gmSettings |= (1 << 9); + if (client->GetActor()->attackable) + gmSettings |= (1 << 10); + psGMGuiMessage gmMsg(client->GetClientNum(), gmSettings); gmMsg.SendMessage(); } @@ -2018,7 +2030,8 @@ "questtester = %s\n" "infinitemana = %s\n" "instantcast = %s\n" - "givekillexp = %s\n", + "givekillexp = %s\n" + "attackable = %s", (actor->GetInvincibility())?"on":"off", (!actor->GetVisibility())?"on":"off", (actor->GetViewAllObjects())?"on":"off", @@ -2028,7 +2041,8 @@ (actor->questtester)?"on":"off", (actor->infinitemana)?"on":"off", (actor->instantcast)?"on":"off", - (actor->givekillexp)?"on":"off"); + (actor->givekillexp)?"on":"off", + (actor->attackable)?"on":"off"); return; } else if (data.attribute == "invincible" || data.attribute == "invincibility") @@ -2151,6 +2165,18 @@ else actor->givekillexp = onoff; } + else if (data.attribute == "attackable") + { + if (toggle) + { + actor->attackable = !actor->attackable; + onoff = actor->attackable; + } + else if (actor->attackable == onoff) + already = true; + else + actor->attackable = onoff; + } else if (!data.attribute.IsEmpty()) { psserver->SendSystemInfo(me->clientnum, "%s is not a supported attribute", data.attribute.GetData() ); @@ -4823,6 +4849,9 @@ info.assignedgm = (*rs)[i][6]; info.online = (clients->Find(info.player) ? true : false); + if(!info.assignedgm.Length()) //put something in there so it looks nice + info.assignedgm = ""; + // Append to the message: petitions.Push(info); } @@ -4918,6 +4947,9 @@ info.assignedgm = (*rs)[i][6]; info.online = (clients->Find(info.player) ? true : false); + if(!info.assignedgm.Length()) //put something in there so it looks nice + info.assignedgm = ""; + // Append to the message: petitions.Push(info); } @@ -6582,7 +6614,7 @@ bool npc = (target->GetClientID() == 0); //sends the heading - psserver->SendSystemInfo(me->clientnum,"Inventory for %s %s:\nTotal weight is %d / %d\nTotal money is %d\n", + psserver->SendSystemInfo(me->clientnum,"Inventory for %s %s:\nTotal weight is %d / %d\nTotal money is %d", npc?"NPC":"player", target->GetName(), (int)target->GetCharacterData()->Inventory().GetCurrentTotalWeight(), (int)target->GetCharacterData()->Inventory().MaxWeight(), @@ -7976,7 +8008,6 @@ } if(targetobject) //just to be sure psserver->SendSystemInfo(client->GetClientNum(),"Targeted: %s", targetobject->GetName()); - gemActor *myact = targetobject->GetActorPtr(); } void AdminManager::DisableQuest(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client ) @@ -8057,3 +8088,15 @@ AdjustFactionStandingOfTarget(client->GetClientNum(), target, data.name, data.value); } + +void AdminManager::ForcePickup(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, gemObject* targetobject, Client *client ) +{ + if ((!data.player || !data.player.Length()) && !targetobject) + { + psserver->SendSystemInfo(client->GetClientNum(),"Syntax: \"/forcepickup [me/target/eid/pid/area/name]\""); + return; + } + if(targetobject) //just to be sure + psserver->SendSystemInfo(client->GetClientNum(),"Targeted: %s", targetobject->GetName()); + gemActor *myact = targetobject->GetActorPtr(); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-02-27 09:35:25
|
Revision: 3115 http://planeshift.svn.sourceforge.net/planeshift/?rev=3115&view=rev Author: kougaro Date: 2009-02-27 09:35:21 +0000 (Fri, 27 Feb 2009) Log Message: ----------- Various comments fixes, mostly making them appear correctly for doxygen Modified Paths: -------------- trunk/src/npcclient/pathfind.h trunk/src/npcclient/tribe.h trunk/src/npcclient/tribeneed.h trunk/src/npcclient/walkpoly.h trunk/src/server/workmanager.h Modified: trunk/src/npcclient/pathfind.h =================================================================== --- trunk/src/npcclient/pathfind.h 2009-02-27 05:20:36 UTC (rev 3114) +++ trunk/src/npcclient/pathfind.h 2009-02-27 09:35:21 UTC (rev 3115) @@ -41,8 +41,8 @@ struct iEngine; struct iDocumentNode; -/******************************************************************************* -* Keeps pathfinding maps for all regions. +/***************************************************************************//** +* Keeps pathfinding maps for one region. *******************************************************************************/ class psPFMap { @@ -53,6 +53,9 @@ psAMap * aMap; }; +/***************************************************************************//** +* Keeps pathfinding maps for all regions. +*******************************************************************************/ class psPFMaps { public: @@ -66,34 +69,33 @@ csList<psPFMap*> regions; - // sector name ---> psPFMap + /// sector name ---> psPFMap csHash<psPFMap*, csString> regionMap; iObjectRegistry * objReg; csRef<iEngine> engine; }; -/******************************************************************************* +/***************************************************************************//** * Edge from one A* node to another A* node. * Each connection in A* graph is bidirectional, so each edge * in this graph is kept as two psAEdges (from two different directions) *******************************************************************************/ - class psAEdge { public: psAEdge(psANode * neighbour, float cost); psANode * neighbour; - float cost; /** How hard is it for a NPC to walk along this edge - influenced + float cost; /**< How hard is it for a NPC to walk along this edge - influenced by length and terrain properties */ }; -/** Empty subclass that unites psACluster and psAHierarchyNode */ -/*class psAHierarchyNode +/* Empty subclass that unites psACluster and psAHierarchyNode +class psAHierarchyNode { };*/ -/***************************************************************** +/*************************************************************//** * Cluster is group of A* nodes or group of smaller clusters. * Keeps list of all exits from cluster. *****************************************************************/ @@ -114,7 +116,7 @@ csList <psANode*> exits; }; -/*********************************************************************************** +/*******************************************************************************//** * All A* nodes are split into three groups during run of the A* algorithm: * unknown - we haven't discovered these nodes yet in this search * open - we discovered these nodes already, but maybe not all their neighbours @@ -123,7 +125,7 @@ enum psAState {AState_open, AState_closed, AState_unknown}; -/**************************************************************************** +/************************************************************************//** * Describes one A* node and keeps temporary state for the current run * of A* algorithm. This temporary state is valid for one run of A* only. * We don't clean it before each A* run, rather we keep number of the A* @@ -178,8 +180,8 @@ psWalkPoly * poly1, * poly2; static int nextID; - /** The following variables are temporary A* state valid for one A* run only */ - int ARunNum; /** number of the A* run */ + /* The following variables are temporary A* state valid for one A* run only */ + int ARunNum; /**< number of the A* run */ psAState state; psANode * prevInOpen, * nextInOpen; /** */ psANode * bestPrev; @@ -207,7 +209,7 @@ void Dump(); void ResetNodes(); - //calculates cost from first to last node, ignores 'dest' + ///calculates cost from first to last node, ignores 'dest' float CalcCost(); protected: Modified: trunk/src/npcclient/tribe.h =================================================================== --- trunk/src/npcclient/tribe.h 2009-02-27 05:20:36 UTC (rev 3114) +++ trunk/src/npcclient/tribe.h 2009-02-27 09:35:21 UTC (rev 3115) @@ -45,20 +45,20 @@ public: struct Resource { - int id; /// Database id + int id; ///< Database id csString name; int amount; }; struct Memory { - int id; /// Database id + int id; ///< Database id csString name; csVector3 pos; iSector* sector; - csString sector_name; /// Keep the sector name until sector is loaded + csString sector_name; ///< Keep the sector name until sector is loaded float radius; - NPC* npc; /// Privat memory if NPC is set + NPC* npc; ///< Privat memory if NPC is set iSector* GetSector(); }; Modified: trunk/src/npcclient/tribeneed.h =================================================================== --- trunk/src/npcclient/tribeneed.h 2009-02-27 05:20:36 UTC (rev 3114) +++ trunk/src/npcclient/tribeneed.h 2009-02-27 09:35:21 UTC (rev 3115) @@ -24,17 +24,17 @@ //============================================================================= #include "tribe.h" + /** * Represent the base class for all tribe need types. */ class psTribeNeed { public: - psTribeNeedSet *parentSet; // Point to the need set that this need is part of - psTribe::TribeNeed needType; // Set by each need type to one of the tribe needs - float current_need; // Represent current need. Will be used to sort - // each need. - csString name; // Name of need used for debug prints. + psTribeNeedSet *parentSet; ///< Point to the need set that this need is part of + psTribe::TribeNeed needType; ///< Set by each need type to one of the tribe needs + float current_need; ///< Represent current need. Will be used to sort each need. + csString name; ///< Name of need used for debug prints. /** * Construct a basic need with the given needType and needName for debuging. @@ -44,9 +44,7 @@ { } - virtual ~psTribeNeed() - { - } + virtual ~psTribeNeed() {}; /** * @return The tribe this need is a part of @@ -288,7 +286,7 @@ virtual void ResetNeed() { current_need = 0.5; // Constant need to do nothing, - // just to make sure its abou everyone + // just to make sure its about everyone // without any need at all. } }; Modified: trunk/src/npcclient/walkpoly.h =================================================================== --- trunk/src/npcclient/walkpoly.h 2009-02-27 05:20:36 UTC (rev 3114) +++ trunk/src/npcclient/walkpoly.h 2009-02-27 09:35:21 UTC (rev 3115) @@ -190,19 +190,19 @@ class psWalkPolyCont { public: - csVector3 begin, end; /** what part of the edge */ - psWalkPoly * poly; /** the polygon that touches us */ + csVector3 begin, end; ///< what part of the edge + psWalkPoly * poly; ///< the polygon that touches us }; -/** Vertex of psWalkPoly, also containing info about edge to the next vertex +/** Vertex of psWalkPoly, also containing info about edge to the next vertex. Contains list of contacts with neighbour psWalkPolys */ class psWalkPolyVert { public: csVector3 pos; - ps2DLine line; // normal equation of edge from this vertex to the following one + ps2DLine line; ///< normal equation of edge from this vertex to the following one csArray<psWalkPolyCont> conts; - csString info; // debug only + csString info; ///< debug only bool touching, stuck; bool followingEdge; Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2009-02-27 05:20:36 UTC (rev 3114) +++ trunk/src/server/workmanager.h 2009-02-27 09:35:21 UTC (rev 3115) @@ -242,7 +242,7 @@ */ bool LoadLocalVars(Client* client, gemObject *target=NULL); - /** Send clear client view message to remove items from autocontainers. +/* /** Send clear client view message to remove items from autocontainers. * * @param slotID The slot number to clear. * @param containerID The container ID that has item that needs to be cleared. @@ -256,22 +256,22 @@ void HandleProduction(gemActor *actor,const char *type,const char *reward); protected: - csPDelArray<NaturalResource> resources; /// list of all natural resources in game. - MathScriptEngine *script_engine; /// Scripting engine handles all RPG calculations. - MathScript *calc_repair_time; /// This is the calculation for how long a repair takes. - MathScript *calc_repair_result; /// This is the calculation for how many points of quality are added in a repair. - MathScript *calc_mining_chance; /// This is the calculation for chance of successful mining. - MathScriptVar *var_time_Worker; /// Variable representing worker in time calculation - MathScriptVar *var_time_Object; /// Variable representing the repaired object in time calculation - MathScriptVar *var_time_Result; /// Variable representing the answer in time calculation - MathScriptVar *var_result_Worker; /// Variable representing worker in result calculation - MathScriptVar *var_result_Object; /// Variable representing the repaired object in result calculation - MathScriptVar *var_result_Result; /// Variable representing the answer in result calculation - MathScriptVar *var_mining_distance; /// Distance from mine to the actual mining. - MathScriptVar *var_mining_probability; /// Probability of successful mining - MathScriptVar *var_mining_quality; /// Quality of mining equipment - MathScriptVar *var_mining_skill; /// Mining skill - MathScriptVar *var_mining_total; /// Final result + csPDelArray<NaturalResource> resources; ///< list of all natural resources in game. + MathScriptEngine *script_engine; ///< Scripting engine handles all RPG calculations. + MathScript *calc_repair_time; ///< This is the calculation for how long a repair takes. + MathScript *calc_repair_result; ///< This is the calculation for how many points of quality are added in a repair. + MathScript *calc_mining_chance; ///< This is the calculation for chance of successful mining. + MathScriptVar *var_time_Worker; ///< Variable representing worker in time calculation + MathScriptVar *var_time_Object; ///< Variable representing the repaired object in time calculation + MathScriptVar *var_time_Result; ///< Variable representing the answer in time calculation + MathScriptVar *var_result_Worker; ///< Variable representing worker in result calculation + MathScriptVar *var_result_Object; ///< Variable representing the repaired object in result calculation + MathScriptVar *var_result_Result; ///< Variable representing the answer in result calculation + MathScriptVar *var_mining_distance; ///< Distance from mine to the actual mining. + MathScriptVar *var_mining_probability; ///< Probability of successful mining + MathScriptVar *var_mining_quality; ///< Quality of mining equipment + MathScriptVar *var_mining_skill; ///< Mining skill + MathScriptVar *var_mining_total; ///< Final result void HandleLockPick(MsgEntry* me,Client *client); void HandleWorkCommand(MsgEntry* me,Client *client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-03-07 05:29:06
|
Revision: 3146 http://planeshift.svn.sourceforge.net/planeshift/?rev=3146&view=rev Author: kougaro Date: 2009-03-07 05:29:03 +0000 (Sat, 07 Mar 2009) Log Message: ----------- Fixed some parsing issues in /rotate, also rewrote the parsing for /guard. some other small improvements in usermanager, plus some comments Modified Paths: -------------- trunk/src/client/cmdusers.cpp trunk/src/client/cmdusers.h trunk/src/client/gui/pawsexchangewindow.h trunk/src/server/gem.cpp trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2009-03-07 05:07:27 UTC (rev 3145) +++ trunk/src/client/cmdusers.cpp 2009-03-07 05:29:03 UTC (rev 3146) @@ -333,30 +333,40 @@ else if (words[0] == "/rotate") { if ( words.GetCount() < 2 ) - return "Usage: /rotate [target] [x|reset] [y|reset] [z|reset] or /rotate [x|y|z] [angle|reset]"; + return "Usage: /rotate [target] [x|reset] [y|reset] [z|reset] or /rotate [x|y|z]"; - GEMClientObject *object = NULL; + bool targetGiven = false; + + csString targetString; // if the command's target is not precised, get the object currently targeted if (words[1] == "x" || words[1] == "y" || words[1] == "z" || - words[1] == "reset" || words[1]=="target" || atoi(words[1])) - object = psengine->GetCharManager()->GetTarget(); + words[1] == "reset" || words[1] == "0" || atoi(words[1])) + targetString = FormatTarget(); else - object = FindEntityWithName(words[1]); + { + targetString = FormatTarget(words[1]); + targetGiven = true; + } - csString newCmd; - // obtain the EID of the command's target - if (object) + if (!targetString.IsEmpty()) { - EID mappedID = object->GetEID(); - newCmd.Format("/rotate eid:%u %s", mappedID.Unbox(), words.GetTail(2).GetDataSafe()); + csString newCmd; + newCmd.Append("/rotate "); + newCmd.Append(targetString); + newCmd.Append(" "); + + if(targetGiven) + newCmd.Append(words.GetTail(2).GetDataSafe()); + else + newCmd.Append(words.GetTail(1).GetDataSafe()); + + Error2("Rotate : %s", newCmd.GetDataSafe()); + psUserCmdMessage cmdmsg(newCmd); + cmdmsg.SendMessage(); } - // for the area keyword else - { - newCmd.Format("/rotate %s %s", words[1].GetDataSafe(), words.GetTail(2).GetDataSafe()); - } - psUserCmdMessage cmdmsg(cmd); - cmdmsg.SendMessage(); + return "You need to precise a target or to select one"; + } else if (words[0] == "/sell") @@ -667,32 +677,58 @@ return NULL; } - else if (words[0] == "/pickup") + else if (words[0] == "/guard") { - GEMClientObject *object = NULL; + unsigned int onoff = 0; + csString targetString; if (words[1].IsEmpty()) - object = psengine->GetCharManager()->GetTarget(); + targetString = FormatTarget(); + else if (words[1] == "on" || words[1] == "off") + { + onoff = 1; + targetString = FormatTarget(); + } else - object = FindEntityWithName(words[1]); - if (object) { - psengine->GetCharManager()->SetTarget(object,"select"); - EID mappedID = object->GetEID(); + targetString = FormatTarget(words[1]); + if(!words[2].IsEmpty()) + onoff = 2; + } + + if (!targetString.IsEmpty()) + { csString newCmd; - newCmd.Format("/pickup eid:%u", mappedID.Unbox()); + newCmd.Append("/guard "); + newCmd.Append(targetString); + if(onoff > 0) + newCmd.Append(" "); + newCmd.Append(words[onoff]); psUserCmdMessage cmdmsg(newCmd); cmdmsg.SendMessage(); } - else if (words[1].IsEmpty()) - { + else return "You need to precise a target or to select one"; - } + } + + else if (words[0] == "/pickup") + { + csString targetString; + if (words[1].IsEmpty()) + targetString = FormatTarget(); else + targetString = FormatTarget(words[1]); + + if (!targetString.IsEmpty()) { - psUserCmdMessage cmdmsg(cmd); + csString newCmd; + newCmd.Append("/pickup "); + newCmd.Append(targetString); + psUserCmdMessage cmdmsg(newCmd); cmdmsg.SendMessage(); } + else + return "You need to precise a target or to select one"; } else if ( words[0] == "/game" ) @@ -951,8 +987,6 @@ return psengine->GetCharManager()->SetTarget((bestObject == startingEntity) ? loopObject : bestObject,"select"); } - - GEMClientObject* psUserCommands::FindEntityWithName(const char *name) { psCelClient* cel = psengine->GetCelClient(); @@ -984,3 +1018,34 @@ return NULL; } + +csString psUserCommands::FormatTarget(const csString& target) +{ + GEMClientObject *targetObject = NULL; + + if(target == "target" || target.IsEmpty()) + targetObject = psengine->GetCharManager()->GetTarget(); + else if (target.StartsWith("area:",true) || + target.StartsWith("eid:",true) || + target.StartsWith("itemid:",true) || + target.StartsWith("pid:",true) || + target == "me") + return target; + else + { + targetObject = FindEntityWithName(target); + } + + csString targetString; + + if (targetObject) + { + psengine->GetCharManager()->SetTarget(targetObject,"select"); + EID mappedID = targetObject->GetEID(); + targetString.Format("eid:%u", mappedID.Unbox()); + return targetString; + } + + targetString.Empty(); + return targetString; +} Modified: trunk/src/client/cmdusers.h =================================================================== --- trunk/src/client/cmdusers.h 2009-03-07 05:07:27 UTC (rev 3145) +++ trunk/src/client/cmdusers.h 2009-03-07 05:29:03 UTC (rev 3146) @@ -81,6 +81,19 @@ GEMClientObject* FindEntityWithName(const char *name); + + /** @brief Returns a target string formatted to be sent in a message + * + * This function would be called on a target input by the player, + * and will return a string indicating the same target, formatted + * to be sent in a net message to the server. If this can't be done, + * it will send back an empty string (error) + * + * @param target The target to be formatted + * + * @return Returns the formatted target, or an empty string + */ + csString FormatTarget(const csString& target = "target"); void UpdateTarget(SearchDirection searchDirection, EntityTypes entityType); Modified: trunk/src/client/gui/pawsexchangewindow.h =================================================================== --- trunk/src/client/gui/pawsexchangewindow.h 2009-03-07 05:07:27 UTC (rev 3145) +++ trunk/src/client/gui/pawsexchangewindow.h 2009-03-07 05:29:03 UTC (rev 3146) @@ -66,7 +66,7 @@ /** Sends psExchangeAcceptMsg message to the server. */ void SendAccept(); - /** Sends a psExchangeRejectMsg message to the server. */ + /** Sends a psExchangeEndMsg message to the server. */ void SendEnd(); protected: Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-07 05:07:27 UTC (rev 3145) +++ trunk/src/server/gem.cpp 2009-03-07 05:29:03 UTC (rev 3146) @@ -3365,7 +3365,7 @@ else if (msg_id == "exchange") psserver->exchangemanager->StartExchange(actor->GetClient(), true); else if (msg_id == "attack") - psserver->usermanager->Attack(actor->GetCharacterData()->getStance("Normal"), actor->GetClient(), actor->GetClientID()); + psserver->usermanager->Attack(actor->GetCharacterData()->getStance("Normal"), actor->GetClient()); } void gemActor::SetAction(const char *anim,csTicks& timeDelay) @@ -3826,7 +3826,7 @@ psserver->usermanager->SendCharacterDescription(actor->GetClient(), GetCharacterData(), false, false, "behaviorMsg"); else if (msg_id == "attack") - psserver->usermanager->Attack(actor->GetCharacterData()->getStance("Normal"), actor->GetClient(), actor->GetClientID()); + psserver->usermanager->Attack(actor->GetCharacterData()->getStance("Normal"), actor->GetClient()); else if (msg_id == "loot") psserver->usermanager->Loot(actor->GetClient()); } Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-03-07 05:07:27 UTC (rev 3145) +++ trunk/src/server/usermanager.cpp 2009-03-07 05:29:03 UTC (rev 3146) @@ -1051,7 +1051,6 @@ mesg.SendMessage(); } - void UserManager::NotifyBuddies(Client * client, bool logged_in) { csString name (client->GetName()); @@ -1107,8 +1106,6 @@ } } - - void UserManager::RollDice(psUserCmdMessage& msg,Client *client) { int total=0; @@ -1117,78 +1114,77 @@ msg.dice = 100; if (msg.sides > 10000) msg.sides = 10000; - if (msg.dtarget > msg.sides) - msg.dtarget = msg.sides; + if (msg.dtarget > msg.sides) + msg.dtarget = msg.sides; if (msg.dice < 1) msg.dice = 1; if (msg.sides < 1) msg.sides = 1; - if (msg.dtarget < 0) - msg.dtarget = 0; + if (msg.dtarget < 0) + msg.dtarget = 0; for (int i = 0; i<msg.dice; i++) { // must use msg.sides instead of msg.sides-1 because rand never actually // returns max val, and int truncation never results in max val as a result - if (msg.dtarget) - total += ((psserver->rng->Get(msg.sides) + 1 >= (uint)msg.dtarget)? 1: 0); - else - total = total + psserver->rng->Get(msg.sides) + 1; - } if (msg.dtarget) + total += ((psserver->rng->Get(msg.sides) + 1 >= (uint)msg.dtarget)? 1: 0); + else + total += psserver->rng->Get(msg.sides) + 1; + } + if (msg.dtarget) + { + if (msg.dice > 1) { - if (msg.dice > 1) - { - psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, - "Player %s has rolled %d %d-sided dice and had %d of them come up %d or greater.", - client->GetName(), - msg.dice, - msg.sides, - total, - msg.dtarget); + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, + "Player %s has rolled %d %d-sided dice and had %d of them come up %d or greater.", + client->GetName(), + msg.dice, + msg.sides, + total, + msg.dtarget); - newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); - } - else - { - psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE,((total)? - "Player %s has rolled a %d-sided dice and had it come up %d or greater.": - "Player %s has rolled a %d-sided dice and had it come up less than %d."), - client->GetName(), - msg.sides, - msg.dtarget); - - newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); - } + newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); } else { - if (msg.dice > 1) - { - psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, - "Player %s has rolled %d %d-sided dice for a %d.", - client->GetName(), - msg.dice, - msg.sides, - total); + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE,((total)? + "Player %s has rolled a %d-sided dice and had it come up %d or greater.": + "Player %s has rolled a %d-sided dice and had it come up less than %d."), + client->GetName(), + msg.sides, + msg.dtarget); - newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); - } - else - { - psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, - "Player %s has rolled a %d-sided die for a %d.", - client->GetName(), - msg.sides, - total); + newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); + } + } + else + { + if (msg.dice > 1) + { + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, + "Player %s has rolled %d %d-sided dice for a %d.", + client->GetName(), + msg.dice, + msg.sides, + total); - newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); - } + newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); } + else + { + psSystemMessage newmsg(client->GetClientNum(),MSG_INFO_BASE, + "Player %s has rolled a %d-sided die for a %d.", + client->GetName(), + msg.sides, + total); + + newmsg.Multicast(client->GetActor()->GetMulticastClients(),0, 10); + } + } } - void UserManager::ReportPosition(psUserCmdMessage& msg,Client *client) { @@ -1345,7 +1341,7 @@ void UserManager::HandleAttack(psUserCmdMessage& msg,Client *client) { - Attack(client->GetCharacterData()->getStance(msg.stance), client, client->GetClientNum()); + Attack(client->GetCharacterData()->getStance(msg.stance), client); } void UserManager::HandleStopAttack(psUserCmdMessage& msg,Client *client) @@ -1353,8 +1349,7 @@ psserver->combatmanager->StopAttack(client->GetActor()); } -//TODO : remove clientnum, check calling functions -void UserManager::Attack(Stance stance, Client *client,int clientnum) +void UserManager::Attack(Stance stance, Client *client) { if (!client->IsAlive() || client->IsFrozen()) { @@ -1630,11 +1625,7 @@ psLootEvent evt( chr->GetPID(), currmember->GetCharacterData()->GetPID(), - 0, - 0, - 0, - eachmoney.GetTotal() - ); + 0, 0, 0, eachmoney.GetTotal()); evt.FireEvent(); } else @@ -1660,14 +1651,9 @@ client->GetCharacterData()->AdjustMoney(remmoney, false); psserver->GetCharManager()->SendPlayerMoney(client); - psLootEvent evt( - chr->GetPID(), + psLootEvent evt(chr->GetPID(), client->GetCharacterData()->GetPID(), - 0, - 0, - 0, - remmoney.GetTotal() - ); + 0, 0, 0, remmoney.GetTotal()); evt.FireEvent(); } } @@ -1682,14 +1668,9 @@ client->GetCharacterData()->AdjustMoney(m, false); psserver->GetCharManager()->SendPlayerMoney(client); - psLootEvent evt( - chr->GetPID(), - client->GetCharacterData()->GetPID(), - 0, - 0, - 0, - m.GetTotal() - ); + psLootEvent evt(chr->GetPID(), + client->GetCharacterData()->GetPID(), + 0, 0, 0, m.GetTotal()); evt.FireEvent(); } } @@ -1883,80 +1864,70 @@ void UserManager::HandleGuard(psUserCmdMessage& msg, Client *client) { - Guard(client, msg.target, msg.action); -} - -void UserManager::Guard(Client *client, csString target, csString action) -{ - if (target.StartsWith("area:")) + gemObject* object; + if (msg.target.StartsWith("area:")) { - csArray<csString> filters = DecodeCommandArea(client, target); - csArray<csString>::Iterator it(filters.GetIterator()); - while (it.HasNext()) { - Guard(client, it.Next(), action); + csArray<csString> targetList = DecodeCommandArea(client, msg.target); + csArray<csString>::Iterator targets(targetList.GetIterator()); + while (targets.HasNext()) + { + object = FindObjectByString(targets.Next(), client->GetActor()); + Guard(client, object, msg.action); } - return; } - else if (target.StartsWith("eid:", true)) + else if(msg.target.StartsWith("eid:")) { - gemObject* object= NULL; - bool onoff = false; - bool toggle = false; - GEMSupervisor *gem = GEMSupervisor::GetSingletonPtr(); - csString eid_str = target.Slice(4); - EID eID = EID(strtoul(eid_str.GetDataSafe(), NULL, 10)); - if (eID.IsValid()) - { - object = gem->FindObject(eID); - if (action == "on") //The player provided an on so set ignore - onoff = true; - else if (action == "off") //The player provided an off so unset ignore - onoff = false; - else //The player didn't provide anything so toggle the option - toggle = true; + object = FindObjectByString(msg.target, client->GetActor()); + Guard(client, object, msg.action); + } + else + psserver->SendSystemError(client->GetClientNum(), + "Unknown target : %s", msg.target.GetData()); +} - if (object && object->GetItem()) +void UserManager::Guard(Client *client, gemObject *object, csString action) +{ + bool onoff = false; + bool toggle = false; + if (action == "on") //The player provided an on so set ignore + onoff = true; + else if (action == "off") //The player provided an off so unset ignore + onoff = false; + else //The player didn't provide anything so toggle the option + toggle = true; + + psItem* guardItem; + + if(object) + guardItem = object->GetItem(); + + if (guardItem) + { + if(onoff || (toggle && guardItem->GetGuardingCharacterID() == 0)) + { + // TODO : Add that check in the security table + if(client->GetSecurityLevel() > 22) //GM2 { - if(onoff || (toggle && object->GetItem()->GetGuardingCharacterID() == 0)) - { - if(client->GetSecurityLevel() > 22) //GM2 - { - object->GetItem()->SetGuardingCharacterID(client->GetPID()); - psserver->SendSystemError(client->GetClientNum(), "You have guarded %s", object->GetName()); - } - else - { - psserver->SendSystemError(client->GetClientNum(), "You can't guard %s", object->GetName()); - } - } - else - { - if(object->GetItem()->GetGuardingCharacterID() == client->GetPID() || client->GetSecurityLevel() > 22) - { - object->GetItem()->SetGuardingCharacterID(0); - psserver->SendSystemError(client->GetClientNum(), "You have unguarded %s", object->GetName()); - } - else - { - psserver->SendSystemError(client->GetClientNum(), "You can't unguard %s", object->GetName()); - } - } + guardItem->SetGuardingCharacterID(client->GetPID()); + psserver->SendSystemError(client->GetClientNum(), "You have guarded %s", object->GetName()); } else + psserver->SendSystemError(client->GetClientNum(), "You can't guard %s", object->GetName()); + } + else + { + if(guardItem->GetGuardingCharacterID() == client->GetPID() || client->GetSecurityLevel() > 22) { - psserver->SendSystemError(client->GetClientNum(), - "Item not found %s", target.GetData()); + guardItem->SetGuardingCharacterID(0); + psserver->SendSystemError(client->GetClientNum(), "You have unguarded %s", object->GetName()); } + else + psserver->SendSystemError(client->GetClientNum(), "You can't unguard %s", object->GetName()); } } - else if(client->GetTargetObject()) - { - gemObject* object= client->GetTargetObject(); - Guard(client, object->GetEID().Show(), action); - } else psserver->SendSystemError(client->GetClientNum(), - "Item not found %s", target.GetData()); + "Item not found %s", object->GetName()); } void UserManager::HandleRotate(psUserCmdMessage& msg, Client *client) @@ -1964,11 +1935,11 @@ gemObject* rotationTarget; if (msg.target.StartsWith("area:")) { - csArray<csString> filters = DecodeCommandArea(client, msg.target); - csArray<csString>::Iterator it(filters.GetIterator()); - while (it.HasNext()) + csArray<csString> targetList = DecodeCommandArea(client, msg.target); + csArray<csString>::Iterator targets(targetList.GetIterator()); + while (targets.HasNext()) { - rotationTarget = FindObjectByString(msg.target, client->GetActor()); + rotationTarget = FindObjectByString(targets.Next(), client->GetActor()); Rotate(client, rotationTarget, msg.action); } return; @@ -1991,6 +1962,15 @@ if (rotItem) { + // rotate an item only if the client is guarding it, + // or has the right to rotate all items + if (!(rotItem->GetItem()->GetGuardingCharacterID() == client->GetPID()) && + !psserver->CheckAccess(client, "rotate all")) + { + psserver->SendSystemInfo(client->GetClientNum(), "You can't rotate %s", rotItem->GetItem()->GetName()); + return; + } + float oldxrot, oldyrot, oldzrot; rotItem->GetRotation(oldxrot, oldyrot, oldzrot); // rotation is stored in radians, @@ -2004,57 +1984,46 @@ if (words[0] == "x") { if (words[1] != "reset") - xrot = oldxrot + atoi(words[1]); + xrot = oldxrot + atof(words[1]); else xrot = 0; } else if (words[0] == "y") { if (words[1] != "reset") - yrot = oldyrot + atoi(words[1]); + yrot = oldyrot + atof(words[1]); else yrot = 0; } else if (words[0] == "z") { if (words[1] != "reset") - zrot = oldzrot + atoi(words[1]); + zrot = oldzrot + atof(words[1]); else zrot = 0; } else { if (words[0] != "reset") - xrot = oldxrot + atoi(words[1]); + xrot = oldxrot + atof(words[0]); else xrot = 0; if (words[1] != "reset") - yrot = oldyrot + atoi(words[1]); + yrot = oldyrot + atof(words[1]); else yrot = 0; if (words[2] != "reset") - zrot = oldzrot + atoi(words[1]); + zrot = oldzrot + atof(words[2]); else zrot = 0; } - - // rotate an item only if the client is guarding it, - // or has the right to rotate all items - if (rotItem->GetItem()->GetGuardingCharacterID() == client->GetPID() || - psserver->CheckAccess(client, "rotate all")) - { - // rotation is given in degrees, converting that to radians - xrot = xrot/180*PI; - yrot = yrot/180*PI; - zrot = zrot/180*PI; - rotItem->SetRotation(xrot, yrot, zrot); - rotItem->UpdateProxList(true); - psserver->SendSystemInfo(client->GetClientNum(), "You have rotated %s", rotItem->GetItem()->GetName()); - } - else - { - psserver->SendSystemInfo(client->GetClientNum(), "You can't rotate %s", rotItem->GetItem()->GetName()); - } + // rotation is given in degrees, converting that to radians + xrot = xrot/180*PI; + yrot = yrot/180*PI; + zrot = zrot/180*PI; + rotItem->SetRotation(xrot, yrot, zrot); + rotItem->UpdateProxList(true); + psserver->SendSystemInfo(client->GetClientNum(), "You have rotated %s", rotItem->GetItem()->GetName()); } else { @@ -2245,7 +2214,7 @@ // If we switch targets while in combat, start attacking the new // target, unless we no longer have a target. if (targeted) - Attack(targeter->GetCharacterData()->GetCombatStance(), targeter, targeter->GetClientNum()); + Attack(targeter->GetCharacterData()->GetCombatStance(), targeter); else psserver->combatmanager->StopAttack(targeter->GetActor()); } Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-03-07 05:07:27 UTC (rev 3145) +++ trunk/src/server/usermanager.h 2009-03-07 05:29:03 UTC (rev 3146) @@ -60,7 +60,7 @@ class AdviceManager; class StatSet; -/** Used to manage incomming user commands from a client. Most commands are in +/** Used to manage incoming user commands from a client. Most commands are in * the format of /command param1 param2 ... paramN */ class UserManager : public MessageManager @@ -119,14 +119,14 @@ */ void SendCharacterDescription(Client * client, psCharacter * charData, bool full, bool simple, const csString & requestor); - void Attack(Stance stance, Client *client,int clientnum); + void Attack(Stance stance, Client *client); void SendPlayerMoney(Client *client); /** @brief Handles a /loot command from a player to loot something. * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param client The client that request the /who */ void HandleLoot(psUserCmdMessage& msg,Client *client); @@ -149,7 +149,7 @@ * * Sends the name/guild/rank of all players in the world. * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param client The client that request the /who */ void Who(psUserCmdMessage& msg, Client* client); @@ -176,7 +176,7 @@ * * This does a database hit to add/remove to the buddy table. * - * @param msg The incomming user command message. + * @param msg The incoming user command message. * @param client The client that request the /buddy. */ void Buddy(psUserCmdMessage& msg,Client *client); @@ -190,7 +190,7 @@ /** @brief Calculates a dice roll from a player based on number of die and sides. * - * @param msg The incomming user command message. + * @param msg The incoming user command message. * @param client The client that request the command. */ void RollDice(psUserCmdMessage& msg,Client *client); @@ -198,7 +198,7 @@ /** @brief Sends the player their current position and sector. * - * @param msg The incomming user command message. + * @param msg The incoming user command message. * @param client The client that request the command. */ void ReportPosition(psUserCmdMessage& msg,Client *client); @@ -206,14 +206,14 @@ /* @brief Moves a player back to the default start point for their race. * - * @param msg The incomming user command message. + * @param msg The incoming user command message. * @param client The client that request the command.. * void MoveToSpawnPos(psUserCmdMessage& msg,Client *client,int clientnum); */ /** @brief Moves a player back to his last valid position. * - * @param msg The incomming user command message. + * @param msg The incoming user command message. * @param client The client that request the command. */ void HandleUnstick(psUserCmdMessage& msg,Client *client); @@ -233,14 +233,14 @@ /** @brief Command to start attacking something. Starts the combat manager * working. * - * @param msg The incomming user command message. + * @param msg The incoming user command message. * @param client The client that request the command. */ void HandleAttack(psUserCmdMessage& msg,Client *client); /** @brief Command to stop attacking your target * - * @param msg The incomming user command message. + * @param msg The incoming user command message. * @param client The client that request the command. */ void HandleStopAttack(psUserCmdMessage& msg,Client *client); @@ -299,21 +299,21 @@ /** @brief Give a tip from the database to the client * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param the client who sit */ void GiveTip(psUserCmdMessage& msg, Client *client); /** @brief Sends the MOTD to the client * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param the client who sit */ void GiveMOTD(psUserCmdMessage& msg, Client *client); /** @brief Handles a player command to show the popup dialog menu of the currently targeted NPC, if any. * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param client The client that issued the command. */ void ShowNpcMenu(psUserCmdMessage& msg, Client *client); @@ -321,14 +321,14 @@ /** * @brief Handles a player command to sit down * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param the client who sit */ void HandleSit(psUserCmdMessage& msg, Client *client); /** @brief Handles the /admin command * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param the client who sit */ void HandleAdminCommand(psUserCmdMessage& msg, Client *client); @@ -336,14 +336,14 @@ /** * @brief Handles a player command to stand up * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param the client who stand */ void HandleStand(psUserCmdMessage& msg, Client *client); /** @brief Handles a player command to die * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param the client who stand */ void HandleDie(psUserCmdMessage& msg, Client *client); @@ -357,7 +357,7 @@ /** @brief Handles a player command to start banking with the targeted entity. * - * @param msg The incomming user command message + * @param msg The incoming user command message * @param client The client that issued the command. */ void HandleBanking(psUserCmdMessage& msg, Client *client); @@ -377,10 +377,14 @@ /** @brief Handles a player command to guard/unguard an item. * + * If the action parameter is empty, the guarding status + * of the item will be toggled. + * * @param client The client that issued the command. - * @param target description of the item to be guarded/unguarded. + * @param object pointer to the item to be guarded/unguarded. + * @param action value can be "on" or "off" */ - void Guard(Client *client, csString target, csString action); + void Guard(Client *client, gemObject *object, csString action); /// Handle the /rotate command, send it to Rotate() void HandleRotate(psUserCmdMessage& msg, Client *client); @@ -402,7 +406,7 @@ /** @brief Handles an /Assist command comming from the client. * - * @param msg The incomming command message + * @param msg The incoming command message * @param client A pointer to the client struct. */ void Assist( psUserCmdMessage& msg, Client* client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-03-07 09:46:50
|
Revision: 3153 http://planeshift.svn.sourceforge.net/planeshift/?rev=3153&view=rev Author: kennygraunke Date: 2009-03-07 09:46:45 +0000 (Sat, 07 Mar 2009) Log Message: ----------- - Fixes for -Wformat -Wformat-security warnings. Modified Paths: -------------- trunk/src/client/cmdutil.cpp trunk/src/client/gui/pawswritingwindow.cpp trunk/src/npcclient/tribeneed.cpp trunk/src/npcclient/walkpoly.cpp trunk/src/pslaunch/download.cpp trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/combatmanager.cpp trunk/src/server/gem.cpp trunk/src/server/npcmanager.cpp trunk/src/server/spawnmanager.cpp trunk/src/server/weathermanager.cpp trunk/src/server/workmanager.cpp Modified: trunk/src/client/cmdutil.cpp =================================================================== --- trunk/src/client/cmdutil.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/client/cmdutil.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -242,7 +242,7 @@ //Write to the file psengine->GetVFS()->WriteFile (filename.GetData(), s.GetData(), s.Length()); - return csString().Format("Saved graphic bug report (graphicbug%u.cam). " + return csString().Format("Saved graphic bug report (graphicbug%lu.cam). " "Report it to http://hydlaaplaza.com/flyspray/", reportNum); } Modified: trunk/src/client/gui/pawswritingwindow.cpp =================================================================== --- trunk/src/client/gui/pawswritingwindow.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/client/gui/pawswritingwindow.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -161,7 +161,7 @@ return; fileName.Format("/planeshift/userdata/books/%s", value); - Error1(fileName.GetData()); + Error2("%s", fileName.GetData()); if (!vfs->Exists(fileName)) { psSystemMessage msg(0, MSG_ERROR, "File not found!" ); Modified: trunk/src/npcclient/tribeneed.cpp =================================================================== --- trunk/src/npcclient/tribeneed.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/npcclient/tribeneed.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -67,7 +67,7 @@ { log.AppendFmt("\n%20s %.2f -> %s",needs[i]->name.GetDataSafe(),needs[i]->current_need,psTribe::TribeNeedName[needs[i]->GetNeedType()]); } - Debug1( LOG_TRIBES, GetTribe()->GetID(), log ); + Debug2(LOG_TRIBES, GetTribe()->GetID(), "%s", log.GetData()); needs[0]->ResetNeed(); return needs[0]->GetNeedType(); Modified: trunk/src/npcclient/walkpoly.cpp =================================================================== --- trunk/src/npcclient/walkpoly.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/npcclient/walkpoly.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -3018,7 +3018,7 @@ } prof.AddCons("generate", watch.Stop()); - printf(prof.Dump("msec", "WalkPoly generation profile").GetData()); + printf("%s", prof.Dump("msec", "WalkPoly generation profile").GetData()); printf("ran out of seeds\n"); DumpPolys(); Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/pslaunch/download.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -115,7 +115,7 @@ if(!URL) { - url.AppendFmt(file); + url.Append(file); } csString destpath = dest; Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -129,8 +129,7 @@ if (!result.IsValid()) { - Error1("Cannot load disallowed words into dictionary from database.\n"); - Error1( db->GetLastError() ); + Error2("Cannot load disallowed words into dictionary from database.\n%s", db->GetLastError()); return false; } @@ -2407,7 +2406,7 @@ 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() ); + printf("Added %lu triggers to menu.\n", (unsigned long) add->triggers.GetSize()); } void NpcDialogMenu::ShowMenu( Client *client ) @@ -2428,11 +2427,11 @@ if (!prereq.IsEmpty()) { - printf("Item %d Prereq : %s\n",i, prereq.GetDataSafe()); + printf("Item %lu Prereq : %s\n", (unsigned long) i, prereq.GetDataSafe()); } else { - printf("Item %d has no prereqs.\n", i); + printf("Item %lu has no prereqs.\n", (unsigned long) i); } if (triggers[i].prerequisite) Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -319,7 +319,7 @@ owner->GetCharName(), ShowID(owner->GetPID()), slot); - Bug1(error); + Bug2("%s", error); return false; } Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/bulkobjects/psitem.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -395,10 +395,8 @@ psSectorInfo *itemsector=CacheManager::GetSingleton().GetSectorInfoByID(row.GetInt("loc_sector_id")); if (!itemsector) { - csString error; - error.Format("Item %s(%s) Could not be loaded\nIt is in sector id %s which does not resolve\n", - GetName(), row["id"], row["loc_sector_id"] ); - Error1( error ); + Error4("Item %s(%s) Could not be loaded\nIt is in sector id %s which does not resolve\n", + GetName(), row["id"], row["loc_sector_id"]); return false; } Modified: trunk/src/server/combatmanager.cpp =================================================================== --- trunk/src/server/combatmanager.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/combatmanager.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -893,7 +893,7 @@ item->GetDamage(PSITEMSTATS_DAMAGETYPE_SLASH),item->GetDamage(PSITEMSTATS_DAMAGETYPE_BLUNT),item->GetDamage(PSITEMSTATS_DAMAGETYPE_PIERCE)); debug.AppendFmt( "IAH: %1.6f AHR: %1.6f Blocked: %1.6f", IAH->GetValue(), AHR->GetValue(), blocked->GetValue()); debug.AppendFmt( "QOH: %1.6f Damage: %1.1f\n", QOH->GetValue(), damage->GetValue()); - Debug1(LOG_COMBAT, event->attacker->GetClientID(),debug.GetData()); + Debug2(LOG_COMBAT, event->attacker->GetClientID(), "%s", debug.GetData()); } Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/gem.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -3708,7 +3708,7 @@ printf("Skipping completed or irrelevant quest: %s\n", q->GetName() ); continue; } - printf("Checking quest %u: %s. ", i, q->GetName() ); + printf("Checking quest %lu: %s. ", (unsigned long) i, q->GetName() ); int last_response = quests[i]->last_response; printf("Got last response %d\n", last_response); @@ -3719,7 +3719,7 @@ } else { - printf("Got last_response==-1 for quest %d.\n",i); + printf("Got last_response==-1 for quest %lu.\n", (unsigned long) i); } } Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/npcmanager.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -423,8 +423,7 @@ buffer = cmd ? "That command is not allowed to be executed remotely" : "No command by that name. Please try again."; } - printf(buffer); - printf("\n"); + printf("%s\n", buffer.GetData()); psServerCommandMessage retn(me->clientnum, buffer); retn.SendMessage(); Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/spawnmanager.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -841,7 +841,7 @@ (float)delay/1000.0, pos.x, pos.y, pos.z, sector.GetData() ); - Notify1(LOG_SPAWN,msg); + Notify2(LOG_SPAWN, "%s", msg.GetData()); } @@ -1278,7 +1278,7 @@ status.Format("Despawn event triggered for non-existant NPC %s!", ShowID(entity)); psserver->GetLogCSV()->Write(CSV_STATUS, status); - Error1(status); + Error2("%s", status.GetData()); return; } spawnmanager->RemoveNPC(object); Modified: trunk/src/server/weathermanager.cpp =================================================================== --- trunk/src/server/weathermanager.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/weathermanager.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -201,7 +201,7 @@ "Duration: %d Fade: %d Sector: %s ...", delayticks,eventtype,eventvalue,duration, fade,sector); - Notify1(LOG_WEATHER,note.GetDataSafe()); + Notify2(LOG_WEATHER, "%s", note.GetDataSafe()); event = new psWeatherGameEvent(this, delayticks, Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-03-07 09:12:57 UTC (rev 3152) +++ trunk/src/server/workmanager.cpp 2009-03-07 09:46:45 UTC (rev 3153) @@ -820,11 +820,11 @@ debug.AppendFmt( "Roll: %1.3f\n",roll); if (workEvent->client) { - Debug1(LOG_TRADE, workEvent->client->GetClientNum(),debug.GetData()); + Debug2(LOG_TRADE, workEvent->client->GetClientNum(), "%s", debug.GetData()); } else { - Debug1(LOG_TRADE, 0 ,debug.GetData()); + Debug2(LOG_TRADE, 0, "%s", debug.GetData()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-03-08 20:09:43
|
Revision: 3158 http://planeshift.svn.sourceforge.net/planeshift/?rev=3158&view=rev Author: kennygraunke Date: 2009-03-08 20:09:34 +0000 (Sun, 08 Mar 2009) Log Message: ----------- - Compile fixes from Lanarel. (C++ and its compilers are horrendously broken. This is the most straightforward code ever and works fine here.) Modified Paths: -------------- trunk/src/common/util/mathscript.cpp trunk/src/server/gem.cpp Modified: trunk/src/common/util/mathscript.cpp =================================================================== --- trunk/src/common/util/mathscript.cpp 2009-03-08 04:07:25 UTC (rev 3157) +++ trunk/src/common/util/mathscript.cpp 2009-03-08 20:09:34 UTC (rev 3158) @@ -109,7 +109,7 @@ line.SubString(assignee, 0, assignAt); assignee.Trim(); - bool validAssignee = isupper(assignee[0]); + bool validAssignee = isupper(assignee.GetAt(0)); for (size_t i = 1; validAssignee && i < assignee.Length(); i++) { if (!isalnum(assignee[i]) && assignee[i] != '_') @@ -369,12 +369,12 @@ { if (tokens[i] == ":") { - if (i+1 == tokens.GetSize() || !isalpha(tokens[i+1][0])) + if (i+1 == tokens.GetSize() || !isalpha(tokens[i+1].GetAt(0))) { Error4("Parse error in MathExpression >%s: %s<: Expected property or method after ':' operator; found >%s<.", name, exp, tokens[i+1].GetData()); return false; } - if (!isupper(tokens[i-1][0])) + if (!isupper(tokens[i-1].GetAt(0))) { Error4("Parse error in MathExpression >%s: %s<: ':' Expected variable before ':' operator; found >%s<.", name, exp, tokens[i-1].GetData()); return false; @@ -422,7 +422,7 @@ else // not dealing with a colon { // Record any string literals and replace them with their table index. - if (tokens[i][0] == '"' || tokens[i][0] == '\'') + if (tokens[i].GetAt(0) == '"' || tokens[i].GetAt(0) == '\'') { // remove quote (scanner already omitted the closing quote) tokens[i].DeleteAt(0); @@ -431,7 +431,7 @@ } // Jot down any variable names (tokens starting with [A-Z]) - if (isupper(tokens[i][0])) + if (isupper(tokens[i].GetAt(0))) requiredVars.Add(tokens[i]); } } @@ -488,7 +488,7 @@ { Error3("Error in >%s<: Required variable >%s< not supplied in environment.", name, varName.GetData()); CS_ASSERT(false); - return 0.0/0.0; + return 0.0; } values[i++] = var->GetValue(); } @@ -503,7 +503,7 @@ { Error3("Error in >%s<: Type inference requires >%s< to be an iScriptableVar, but it isn't.", name, objName.GetData()); CS_ASSERT(false); - return 0.0/0.0; + return 0.0; } } Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-08 04:07:25 UTC (rev 3157) +++ trunk/src/server/gem.cpp 2009-03-08 20:09:34 UTC (rev 3158) @@ -648,12 +648,14 @@ //if (prop == "mesh") //{ //} - return 0.0/0.0; + CS_ASSERT(false); + return 0.0; } double gemObject::CalcFunction(const char *f, const double *params) { - return 0.0/0.0; + CS_ASSERT(false); + return 0.0; } void gemObject::Disconnect() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-03-09 21:07:45
|
Revision: 3163 http://planeshift.svn.sourceforge.net/planeshift/?rev=3163&view=rev Author: kougaro Date: 2009-03-09 21:07:23 +0000 (Mon, 09 Mar 2009) Log Message: ----------- Fix PS#613 - Patch by Vornne, plus a small fix in adminmanager Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/common/util/pspath.cpp trunk/src/npcclient/npcoperations.cpp trunk/src/server/adminmanager.cpp trunk/src/server/combatmanager.cpp trunk/src/server/gem.cpp trunk/src/server/psproxlist.cpp Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-03-09 02:56:45 UTC (rev 3162) +++ trunk/src/client/pscelclient.cpp 2009-03-09 21:07:23 UTC (rev 3163) @@ -1249,19 +1249,16 @@ float GEMClientObject::RangeTo(GEMClientObject * obj, bool ignoreY) { - csVector3 pos1 = this->GetPosition(); - csVector3 pos2 = obj->GetPosition(); - if ( ignoreY ) { + csVector3 pos1 = this->GetPosition(); + csVector3 pos2 = obj->GetPosition(); return ( sqrt( (pos1.x - pos2.x)*(pos1.x - pos2.x)+ (pos1.z - pos2.z)*(pos1.z - pos2.z))); } else { - return ( sqrt( (pos1.x - pos2.x)*(pos1.x - pos2.x)+ - (pos1.y - pos2.y)*(pos1.y - pos2.y)+ - (pos1.z - pos2.z)*(pos1.z - pos2.z))); + return ( cel->GetWorld()->Distance(this->GetMesh() , obj->GetMesh())); } } Modified: trunk/src/common/util/pspath.cpp =================================================================== --- trunk/src/common/util/pspath.cpp 2009-03-09 02:56:45 UTC (rev 3162) +++ trunk/src/common/util/pspath.cpp 2009-03-09 21:07:23 UTC (rev 3163) @@ -230,8 +230,6 @@ if (precalculationValid) return; PrecalculatePath(world,engine); - - precalculationValid = true; } float DistancePointLine(const csVector3 &p, const csVector3 &l1, const csVector3 &l2, float & t) @@ -250,8 +248,13 @@ csVector3 l1(points[i]->pos); csVector3 l2(points[i+1]->pos); - world->WarpSpace(points[i]->GetSector(engine),sector,l1); - world->WarpSpace(points[i+1]->GetSector(engine),sector,l2); + // If sectors are not connected, return a very big value. + if (!world->WarpSpace(points[i]->GetSector(engine),sector,l1) || + !world->WarpSpace(points[i+1]->GetSector(engine),sector,l2)) + { + dist = 9999999.99f; + break; + } float t = 0.0; float d = DistancePointLine(pos,l1,l2,t); @@ -558,8 +561,13 @@ { csVector3 pos1(points[ii]->pos),pos2(points[ii+1]->pos); - world->WarpSpace(points[ii+1]->GetSector(engine),points[ii]->GetSector(engine),pos2); - + if (!world->WarpSpace(points[ii+1]->GetSector(engine),points[ii]->GetSector(engine),pos2)) + { + Error4("In path \'%s\', sectors of points %lu and %lu are not connected by a portal!", name.GetDataSafe(), (unsigned long)ii, (unsigned long)ii+1); + precalculationValid = false; + return; + } + float dist = (pos2-pos1).Norm(); points[ii]->startDistance[FORWARD] = totalDistance; @@ -576,6 +584,7 @@ { points[ii]->startDistance[REVERSE] = totalDistance - points[ii]->startDistance[FORWARD]; } + precalculationValid = true; } void psLinearPath::GetInterpolatedPosition (int index, float fraction, csVector3& pos) Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2009-03-09 02:56:45 UTC (rev 3162) +++ trunk/src/npcclient/npcoperations.cpp 2009-03-09 21:07:23 UTC (rev 3163) @@ -179,7 +179,11 @@ { npcMesh* pcmesh = npc->GetActor()->pcmesh; - npcclient->GetWorld()->WarpSpace(oldSector, newSector, oldPos); + if (!npcclient->GetWorld()->WarpSpace(oldSector, newSector, oldPos)) + { + npc->Printf("CheckMovedOk: new and old sectors are not connected by a portal!"); + return false; + } if ((oldPos - newPos).SquaredNorm() < 0.01f) // then stopped dead, presumably by collision { @@ -288,8 +292,11 @@ psGameObject::GetPosition(npc->GetActor(),pos,rot,sector); - npcclient->GetWorld()->WarpSpace(sector, destsect, pos); - + if (!npcclient->GetWorld()->WarpSpace(sector, destsect, pos)) + { + npc->Printf("Current and TurnTo destination sectors are not connected!"); + return; + } forward = dest-pos; npc->Printf(6,"Forward is %s",toString(forward).GetDataSafe()); @@ -2057,7 +2064,11 @@ toString(targetPos,targetSector).GetDataSafe()); // We need to work in the target sector space - npcclient->GetWorld()->WarpSpace(targetSector, mySector, targetPos); + if (!npcclient->GetWorld()->WarpSpace(targetSector, mySector, targetPos)) + { + npc->Printf("ChaseOperation: target's sector is not connected to ours!"); + return true; // This operation is complete + } // This prevents NPCs from wanting to occupy the same physical space as something else csVector3 displacement = targetPos - myPos; @@ -2138,7 +2149,11 @@ targetInstance = targetActor->GetInstance(); // We work in our sector's space - npcclient->GetWorld()->WarpSpace(targetSector, mySector, targetPos); + if (!npcclient->GetWorld()->WarpSpace(targetSector, mySector, targetPos)) + { + npc->Printf("ChaseOperation: target's sector is not connected to ours!"); + return; + } // This prevents NPCs from wanting to occupy the same physical space as something else csVector3 displacement = targetPos - myPos; Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-03-09 02:56:45 UTC (rev 3162) +++ trunk/src/server/adminmanager.cpp 2009-03-09 21:07:23 UTC (rev 3163) @@ -3784,7 +3784,7 @@ { // This is a powerful feature; not everyone is allowed to use all of it csString response; - if (client->GetActor() != (gemActor*)target && psserver->CheckAccess(client, "move others")) + if (client->GetActor() != (gemActor*)target && !psserver->CheckAccess(client, "move others")) return false; if ( dynamic_cast<gemItem*>(target) ) // Item? Modified: trunk/src/server/combatmanager.cpp =================================================================== --- trunk/src/server/combatmanager.cpp 2009-03-09 02:56:45 UTC (rev 3162) +++ trunk/src/server/combatmanager.cpp 2009-03-09 21:07:23 UTC (rev 3163) @@ -926,7 +926,10 @@ attacker->GetPosition(attackPos, attackSector); target->GetPosition(targetPos, targetSector); - EntityManager::GetSingleton().GetWorld()->WarpSpace(targetSector, attackSector, targetPos); + if(!(EntityManager::GetSingleton().GetWorld()->WarpSpace(targetSector, attackSector, targetPos))) + { + return false; + } csVector3 diff = targetPos - attackPos; if (!diff.x) Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-09 02:56:45 UTC (rev 3162) +++ trunk/src/server/gem.cpp 2009-03-09 21:07:23 UTC (rev 3163) @@ -730,21 +730,9 @@ bool gemObject::IsNear(gemObject *obj, float radius) { - // Find the current position of the specified entity - csVector3 pos1,pos2; - float yrot1,yrot2; - iSector *sector1,*sector2; + float distance = proxlist->RangeTo(obj); - GetPosition(pos1,yrot1,sector1); - obj->GetPosition(pos2,yrot2,sector2); - - EntityManager::GetSingleton().GetWorld()->WarpSpace(sector2, sector1, pos2); - - float squaredDistance = (pos1.x - pos2.x)*(pos1.x - pos2.x)+ - (pos1.y - pos2.y)*(pos1.y - pos2.y)+ - (pos1.z - pos2.z)*(pos1.z - pos2.z); - - if ( squaredDistance < radius*radius) + if ( distance < radius) return true; else return false; @@ -4098,13 +4086,3 @@ } } - -#if 0 // This function is redundant with npc->Say() -void gemNPC::NPCTalk(const csString & text) -{ - psSystemMessage talkMsg(0, MSG_INFO, text); - psserver->GetEventManager()->Broadcast(talkMsg.msg); - talkMsg.Multicast(GetMulticastClients(), 0, CHAT_SAY_RANGE ); -} -#endif - Modified: trunk/src/server/psproxlist.cpp =================================================================== --- trunk/src/server/psproxlist.cpp 2009-03-09 02:56:45 UTC (rev 3162) +++ trunk/src/server/psproxlist.cpp 2009-03-09 21:07:23 UTC (rev 3163) @@ -431,6 +431,14 @@ #ifdef PSPROXDEBUG CPrintf(CON_DEBUG, "[float ProximityList::RangeTo( gemObject* entity )]\n"); #endif + + // If in different instances, except for the common 'all' instance, return a very big value. + if (object->GetInstance() != INSTANCE_ALL && self->GetInstance() != INSTANCE_ALL && + object->GetInstance() != self->GetInstance()) + { + return 9999999.99f; + } + // Find the current position of the specified entity csVector3 pos1; csVector3 pos2; @@ -448,18 +456,21 @@ CPrintf(CON_DEBUG, "Entity %s is at (%f,%f,%f)\n", GetEntity()->GetName(), pos2.x, pos2.y, pos2.z); #endif - EntityManager::GetSingleton().GetWorld()->WarpSpace(sector2, sector1, pos2); - if ( ignoreY ) { + if(EntityManager::GetSingleton().GetWorld()->WarpSpace(sector2, sector1, pos2)) + { return ( sqrt( (pos1.x - pos2.x)*(pos1.x - pos2.x)+ (pos1.z - pos2.z)*(pos1.z - pos2.z))); + } + else + { + return 9999999.99f; // No transformation found, so just set larg distance. + } } else { - return ( sqrt( (pos1.x - pos2.x)*(pos1.x - pos2.x)+ - (pos1.y - pos2.y)*(pos1.y - pos2.y)+ - (pos1.z - pos2.z)*(pos1.z - pos2.z))); + return EntityManager::GetSingleton().GetWorld()->Distance(pos1, sector1, pos2, sector2); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-03-11 05:32:14
|
Revision: 3176 http://planeshift.svn.sourceforge.net/planeshift/?rev=3176&view=rev Author: Vengeance2001 Date: 2009-03-11 05:31:59 +0000 (Wed, 11 Mar 2009) Log Message: ----------- Took out several redundant and crappy functions in pawsListBox, and added in a utility function GetSelectedText which does what most people need the listbox to return most often. Also fixed several warnings in the new build, including a relatively bad mana checking bug. Read your warnings! Modified Paths: -------------- trunk/src/client/gui/pawscharparents.cpp trunk/src/client/gui/pawsconfigkeys.cpp trunk/src/client/gui/pawsconfigwindow.cpp trunk/src/client/gui/pawsconfigwindow.h trunk/src/client/gui/pawsgmgui.cpp trunk/src/client/gui/pawsguildwindow.cpp trunk/src/client/gui/pawslife.cpp trunk/src/client/gui/pawspetitiongmwindow.cpp trunk/src/client/gui/pawspetitionwindow.cpp trunk/src/common/paws/pawslistbox.cpp trunk/src/common/paws/pawslistbox.h trunk/src/common/paws/pawsmanager.cpp trunk/src/common/paws/pawswidget.cpp trunk/src/common/paws/pawswidget.h trunk/src/eedit/eeditshortcutstoolbox.cpp trunk/src/server/bulkobjects/psactionlocationinfo.h trunk/src/server/bulkobjects/psspell.cpp Modified: trunk/src/client/gui/pawscharparents.cpp =================================================================== --- trunk/src/client/gui/pawscharparents.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawscharparents.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -291,7 +291,7 @@ // check religion selected pawsListBox* religionBox = (pawsListBox*)FindWidget("Religions"); - if (!religionBox->GetSelected()) + if (!religionBox->GetSelectedRow()) { psSystemMessage error(0,MSG_ERROR,"Please choose a religion"); error.FireEvent(); Modified: trunk/src/client/gui/pawsconfigkeys.cpp =================================================================== --- trunk/src/client/gui/pawsconfigkeys.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawsconfigkeys.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -87,7 +87,7 @@ if ( !CreateTree() ) return false; - UseBorder("line"); + // UseBorder("line"); if ( !FindFingeringWindow() ) return false; @@ -97,6 +97,7 @@ bool pawsConfigKeys::CreateTree() { + /*********** pawsTreeNode * root; CS_ASSERT(tree == NULL); @@ -114,7 +115,11 @@ root = tree->GetRoot(); if (root != NULL) CreateTreeWidgets(root); + ****************/ + if (!LoadFromFile("data/gui/configkeys.xml") ) + return false; + return true; } Modified: trunk/src/client/gui/pawsconfigwindow.cpp =================================================================== --- trunk/src/client/gui/pawsconfigwindow.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawsconfigwindow.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -46,8 +46,8 @@ // config window layout: #define SPACING 10 // space between parts of window -#define SECT_WND_WIDTH 400 // width of section config window on the right -#define SECT_WND_HEIGHT 300 // height of section config window on the right +// #define SECT_WND_WIDTH 500 // width of section config window on the right +// #define SECT_WND_HEIGHT 300 // height of section config window on the right ////////////////////////////////////////////////////////////////////// // Construction/Destruction @@ -55,10 +55,11 @@ pawsConfigWindow::pawsConfigWindow() { - sectionTree = NULL; - currSectWnd = NULL; - okButton = resetButton = NULL; - notify = NULL; + sectionTree = NULL; + sectionParent = NULL; + currSectWnd = NULL; + okButton = resetButton = NULL; + notify = NULL; object_reg = PawsManager::GetSingleton().GetObjectRegistry(); } @@ -67,10 +68,15 @@ sectionTree = dynamic_cast <pawsSimpleTree*> (FindWidget("ConfigTree")); if (sectionTree == NULL) return false; + sectionTree->SetNotify(this); sectionTree->SetScrollBars(false, true); sectionTree->UseBorder("line"); + sectionParent = FindWidget("PanelParent"); + if (sectionParent == NULL) + return false; + // sets up buttons: okButton = FindWidget("OKButton"); if (okButton == NULL) @@ -172,14 +178,10 @@ Error1("Widget is not pawsConfigSectionWindow"); return false; } - AddChild(newCurrSectWnd); - newCurrSectWnd->UseBorder("line"); - newCurrSectWnd->SetSectionName(sectName); - newCurrSectWnd->SetRelativeFrame( - sectionTree->DefaultFrame().xmax + GetActualWidth(SPACING), - GetActualHeight(SPACING), - GetActualWidth(SECT_WND_WIDTH), - GetActualHeight(SECT_WND_HEIGHT)); + sectionParent->AddChild(newCurrSectWnd); + newCurrSectWnd->SetRelativeFrame(8,8,sectionParent->GetActualWidth()-16 , sectionParent->GetActualHeight()-16 ); + + // newCurrSectWnd->UseBorder("line"); if (!strcmp(sectName, "configsound") && !psengine->GetSoundStatus()) { PawsManager::GetSingleton().CreateWarningBox( "Your sound settings are disabled!"); @@ -190,6 +192,11 @@ Error1("pawsConfigSectionWindow failed to initialize"); return false; } + + // Ignore sizing info loaded from file and override to fit tab here + newCurrSectWnd->SetSectionName(sectName); + newCurrSectWnd->SetRelativeFrame(8,8,sectionParent->GetActualWidth()-16 , sectionParent->GetActualHeight()-16 ); + if (!newCurrSectWnd->LoadConfig()) { Error1("pawsConfigSectionWindow could not load configuration"); Modified: trunk/src/client/gui/pawsconfigwindow.h =================================================================== --- trunk/src/client/gui/pawsconfigwindow.h 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawsconfigwindow.h 2009-03-11 05:31:59 UTC (rev 3176) @@ -118,10 +118,11 @@ pawsConfigSectionWindow * FindSectionWindow(const csString & sectName); // Finds section window (in the 'sectWnds' list) for section 'sectName' - iObjectRegistry* object_reg; + iObjectRegistry *object_reg; csArray<sectWnd_t> sectWnds; - pawsSimpleTree* sectionTree; + pawsSimpleTree *sectionTree; + pawsWidget *sectionParent; pawsConfigSectionWindow * currSectWnd; pawsWidget * okButton, * resetButton; pawsWidget * notify; Modified: trunk/src/client/gui/pawsgmgui.cpp =================================================================== --- trunk/src/client/gui/pawsgmgui.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawsgmgui.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -425,7 +425,7 @@ case 1262: // Add Linked Location if ( AddEdit ) { - pawsListBoxRow* row = actionList->GetSelected(); + pawsListBoxRow* row = actionList->GetSelectedRow(); if (!row) return true; @@ -444,7 +444,7 @@ { AddEdit->Close(); - pawsListBoxRow* row = actionList->GetSelected(); + pawsListBoxRow* row = actionList->GetSelectedRow(); if (!row) return true; @@ -493,7 +493,7 @@ case 1264: // Delete Location if ( AddEdit ) { - pawsListBoxRow* row = actionList->GetSelected(); + pawsListBoxRow* row = actionList->GetSelectedRow(); if (!row) return true; @@ -941,7 +941,7 @@ const char* pawsGmGUIWindow::GetSelectedName() { - pawsListBoxRow* row = playerList->GetSelected(); + pawsListBoxRow* row = playerList->GetSelectedRow(); if (!row) return "Error"; @@ -952,7 +952,7 @@ int pawsGmGUIWindow::GetSelectedGender() { - pawsListBoxRow* row = playerList->GetSelected(); + pawsListBoxRow* row = playerList->GetSelectedRow(); if (!row) return PSCHARACTER_GENDER_NONE; @@ -970,13 +970,11 @@ const char* pawsGmGUIWindow::GetSelectedSector() { - pawsListBoxRow* row = playerList->GetSelected(); - if (!row) + const char *val = playerList->GetSelectedText(4); + if (!val) return "Error"; - - pawsTextBox* box = (pawsTextBox*)row->GetColumn(4); - - return box->GetText(); + else + return val; } Modified: trunk/src/client/gui/pawsguildwindow.cpp =================================================================== --- trunk/src/client/gui/pawsguildwindow.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawsguildwindow.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -946,7 +946,7 @@ case REMOVE_GUILD_CONFIRM: { csString command; - command.Format("/allianceremove %s", allianceMemberList->GetTextCellValue(allianceMemberList->GetSelection(), 0).GetData()); + command.Format("/allianceremove %s", allianceMemberList->GetSelectedText(0)); psengine->GetCmdHandler()->Execute(command); retVal = true; break; @@ -954,7 +954,7 @@ case SET_ALLIANCE_LEADER_CONFIRM: { csString command; - command.Format("/allianceleader %s", allianceMemberList->GetTextCellValue(allianceMemberList->GetSelection(), 0).GetData()); + command.Format("/allianceleader %s", allianceMemberList->GetSelectedText(0)); psengine->GetCmdHandler()->Execute(command); retVal = true; break; @@ -1007,19 +1007,8 @@ } guildMemberInfo * pawsGuildWindow::FindSelectedMemberInfo() -{ - pawsListBoxRow * row; - pawsTextBox * name; - - row = memberList->GetSelected(); - if (row == NULL) - return NULL; - - name = dynamic_cast<pawsTextBox*> (row->GetColumn(0)); - if (name == NULL) - return NULL; - - return FindMemberInfo(name->GetText()); +{ + return FindMemberInfo(memberList->GetSelectedText(0)); } int pawsGuildWindow::FindMemberInListBox(const csString & name) Modified: trunk/src/client/gui/pawslife.cpp =================================================================== --- trunk/src/client/gui/pawslife.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawslife.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -205,7 +205,7 @@ if ( status==LISTBOX_HIGHLIGHTED ) { - row = widget->GetSelected(); + row = widget->GetSelectedRow(); if (!row ) return; Modified: trunk/src/client/gui/pawspetitiongmwindow.cpp =================================================================== --- trunk/src/client/gui/pawspetitiongmwindow.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawspetitiongmwindow.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -364,7 +364,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { psSystemMessage error(0,MSG_INFO,PawsManager::GetSingleton().Translate("You must select a petition from the list in order to cancel it.")); @@ -372,8 +372,8 @@ return true; } - if (csString("In Progress") == ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_STATUS)))->GetText() - && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_GM)))->GetText())) + if (csString("In Progress") == petitionList->GetSelectedText(PGMCOL_STATUS) + && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM))) { currentRow = sel; @@ -396,7 +396,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { psSystemMessage error(0,MSG_INFO,PawsManager::GetSingleton().Translate("You must select a petition from the list in order to assign yourself.")); @@ -404,7 +404,7 @@ return true; } - if (csString("Open") == ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_STATUS)))->GetText()) + if (csString("Open") == petitionList->GetSelectedText(PGMCOL_STATUS)) { currentRow = sel; @@ -426,7 +426,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { psSystemMessage error(0,MSG_INFO,PawsManager::GetSingleton().Translate("You must select a petition from the list in order to deassign yourself.")); @@ -434,8 +434,8 @@ return true; } - if (csString("In Progress") == ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_STATUS)))->GetText() - && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_GM)))->GetText()) + if (csString("In Progress") == petitionList->GetSelectedText(PGMCOL_STATUS) + && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM)) || psengine->GetCelClient()->GetMainPlayer()->GetType() >= 25) { currentRow = sel; @@ -458,7 +458,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { psSystemMessage error(0,MSG_INFO,PawsManager::GetSingleton().Translate("You must select a petition from the list in order to close it.")); @@ -466,8 +466,8 @@ return true; } - if (csString("In Progress") == ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_STATUS)))->GetText() - && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_GM)))->GetText())) + if (csString("In Progress") == petitionList->GetSelectedText(PGMCOL_STATUS) + && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM))) { currentRow = sel; @@ -488,7 +488,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { psSystemMessage error(0,MSG_INFO,PawsManager::GetSingleton().Translate("You must select a petition from the list in order to escalate it.")); @@ -496,9 +496,9 @@ return true; } - if (psengine->GetCelClient()->GetMainPlayer()->GetType() + 1 >= atof(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_LVL)))->GetText())) + if (psengine->GetCelClient()->GetMainPlayer()->GetType() + 1 >= atof(petitionList->GetSelectedText(PGMCOL_LVL))) { - float level = atof(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_LVL)))->GetText()); + float level = atof(petitionList->GetSelectedText(PGMCOL_LVL)); if ( level == 10 ) { psSystemMessage error(0,MSG_INFO,"Cannot escalate above 10"); @@ -521,7 +521,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { psSystemMessage error(0,MSG_INFO,PawsManager::GetSingleton().Translate("You must select a petition from the list in order to descalate it.")); @@ -529,9 +529,9 @@ return true; } - if (psengine->GetCelClient()->GetMainPlayer()->GetType() + 1 >= atof(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_LVL)))->GetText())) + if (psengine->GetCelClient()->GetMainPlayer()->GetType() + 1 >= atof(petitionList->GetSelectedText(PGMCOL_LVL))) { - float level = atof(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_LVL)))->GetText()); + float level = atof(petitionList->GetSelectedText(PGMCOL_LVL)); if ( level == 0 ) { psSystemMessage error(0,MSG_INFO,"Cannot descalate below 0"); @@ -555,13 +555,13 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) psengine->SetTargetPetitioner("None"); else { - if (csString("In Progress") == ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_STATUS)))->GetText()) - psengine->SetTargetPetitioner(((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PGMCOL_PLAYER)))->GetText()); + if (csString("In Progress") == petitionList->GetSelectedText(PGMCOL_STATUS)) + psengine->SetTargetPetitioner(petitionList->GetSelectedText(PGMCOL_PLAYER)); else psengine->SetTargetPetitioner("None"); } @@ -643,7 +643,7 @@ if (petitionList->GetRowCount() <= 0) petitionList->Select(NULL); - int selRow = petitionList->GetSelection(); + int selRow = petitionList->GetSelectedRowNum(); if (selRow != -1) { csString escalation = petitionList->GetTextCellValue(selRow, PGMCOL_LVL); @@ -706,7 +706,7 @@ { if (status == LISTBOX_HIGHLIGHTED) { - size_t sel = petitionList->GetSelection(); + size_t sel = petitionList->GetSelectedRowNum(); if (sel >= petitionMessage.petitions.GetSize()) return; petText->Clear(); Modified: trunk/src/client/gui/pawspetitionwindow.cpp =================================================================== --- trunk/src/client/gui/pawspetitionwindow.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/client/gui/pawspetitionwindow.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -187,7 +187,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { psSystemMessage error(0,MSG_INFO,PawsManager::GetSingleton().Translate("You must select a petition from the list in order to cancel it.")); @@ -215,7 +215,7 @@ if (petCount > 0) { // Get the currently selected row: - int sel = petitionList->GetSelection(); + int sel = petitionList->GetSelectedRowNum(); if (sel < 0) { // no petition selected, create new one @@ -309,13 +309,13 @@ if (petitionList->GetRowCount() <= 0) petitionList->Select(NULL); - if (petitionList->GetSelection() >= 0) + if (petitionList->GetSelectedRowNum() >= 0) { selectedPet.escalation = 0; - selectedPet.player = ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PCOL_GM)))->GetText(); - selectedPet.status = ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PCOL_STATUS)))->GetText(); - selectedPet.created = ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PCOL_CREATED)))->GetText(); - selectedPet.petition = ((pawsTextBox*)(petitionList->GetSelected()->GetColumn(PCOL_PETITION)))->GetText(); + selectedPet.player = petitionList->GetSelectedText(PCOL_GM); + selectedPet.status = petitionList->GetSelectedText(PCOL_STATUS); + selectedPet.created = petitionList->GetSelectedText(PCOL_CREATED); + selectedPet.petition = petitionList->GetSelectedText(PCOL_PETITION); } else { @@ -371,7 +371,7 @@ { if (status == LISTBOX_HIGHLIGHTED) { - size_t sel = petitionList->GetSelection(); + size_t sel = petitionList->GetSelectedRowNum(); if ( sel >= petitionMessage.petitions.GetSize() ) { return; Modified: trunk/src/common/paws/pawslistbox.cpp =================================================================== --- trunk/src/common/paws/pawslistbox.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/common/paws/pawslistbox.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -331,7 +331,7 @@ } -pawsListBoxRow* pawsListBox::GetSelected() +pawsListBoxRow* pawsListBox::GetSelectedRow() { if ( selected == -1 ) return NULL; @@ -707,13 +707,7 @@ return true; } -pawsListBoxRow* pawsListBox::GetSelectedRow() -{ - if ( selected == -1 ) return 0; - return GetRow( selected ); -} - pawsListBoxRow* pawsListBox::GetRow( size_t x ) { if ( x != (size_t)-1 && x < rows.GetSize() ) @@ -1127,6 +1121,19 @@ CalculateDrawPositions(); } +const char *pawsListBox::GetSelectedText(size_t columnId) +{ + pawsListBoxRow *row = GetSelectedRow(); + if (!row) + return NULL; + + pawsTextBox *box = (pawsTextBox *)GetSelectedRow()->GetColumn(columnId); + if (!box) + return NULL; + + return box->GetText(); +} + //----------------------------------------------------------------------------- // class pawsListBoxRow //----------------------------------------------------------------------------- Modified: trunk/src/common/paws/pawslistbox.h =================================================================== --- trunk/src/common/paws/pawslistbox.h 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/common/paws/pawslistbox.h 2009-03-11 05:31:59 UTC (rev 3176) @@ -165,13 +165,15 @@ /** Get the row that is currently selected. * @return A pointer to the selected row or NULL. */ - pawsListBoxRow* GetSelectedRow(); int GetSelection() { return selected; } /// Get selected row - pawsListBoxRow* GetSelected(); + pawsListBoxRow* GetSelectedRow(); + /// Get text from specified column in the selected row + const char *GetSelectedText(size_t columnId); + /// Returns number of selected row (-1 if none is selected) int GetSelectedRowNum(); Modified: trunk/src/common/paws/pawsmanager.cpp =================================================================== --- trunk/src/common/paws/pawsmanager.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/common/paws/pawsmanager.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -432,6 +432,7 @@ if ( widget != NULL ) { + // Enforce modality by only allowing button clicks within the modal widget if there is one. if ( modalWidget != NULL ) { // Check to see if the widget is a child of the modal widget. Modified: trunk/src/common/paws/pawswidget.cpp =================================================================== --- trunk/src/common/paws/pawswidget.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/common/paws/pawswidget.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -861,8 +861,9 @@ void pawsWidget::SetRelativeFrame( int x, int y, int width, int height ) { + // Must set width and height first so children don't get squeezed + SetRelativeFrameSize( width, height ); SetRelativeFramePos( x, y ); - SetRelativeFrameSize( width, height ); } void MoveRect(csRect & rect, int x, int y) @@ -2726,7 +2727,7 @@ csRef<iDocumentNode> child = defaults->Next(); if (!strcmp(child->GetValue(),"defaultstyle")) { - printf("Adding style %s for widget %s.\n",child->GetAttributeValue("style"),child->GetAttributeValue("widget")); + //printf("Adding style %s for widget %s.\n",child->GetAttributeValue("style"),child->GetAttributeValue("widget")); defaultWidgetStyles.Put(child->GetAttributeValue("widget"),child->GetAttributeValue("style")); } } Modified: trunk/src/common/paws/pawswidget.h =================================================================== --- trunk/src/common/paws/pawswidget.h 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/common/paws/pawswidget.h 2009-03-11 05:31:59 UTC (rev 3176) @@ -969,8 +969,11 @@ /** Returns the actual width assuming the passed value was in 800x600 * resolution. */ - int GetActualWidth( int myValue ) + int GetActualWidth( int myValue=-1 ) { + if (myValue == -1) + return screenFrame.Width(); + if (!resizeToScreen) return myValue; @@ -987,8 +990,11 @@ /** Returns the actual Height assuming the passed value was in 800x600 * resolution. */ - int GetActualHeight( int myValue ) + int GetActualHeight( int myValue=-1 ) { + if (myValue == -1) + return screenFrame.Height(); + if (!resizeToScreen) return myValue; Modified: trunk/src/eedit/eeditshortcutstoolbox.cpp =================================================================== --- trunk/src/eedit/eeditshortcutstoolbox.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/eedit/eeditshortcutstoolbox.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -124,7 +124,7 @@ void EEditShortcutsToolbox::OnListAction(pawsListBox * selected, int status) { - pawsListBoxRow * row = shortcutsList->GetSelected(); + pawsListBoxRow * row = shortcutsList->GetSelectedRow(); if (!row) return; Modified: trunk/src/server/bulkobjects/psactionlocationinfo.h =================================================================== --- trunk/src/server/bulkobjects/psactionlocationinfo.h 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/server/bulkobjects/psactionlocationinfo.h 2009-03-11 05:31:59 UTC (rev 3176) @@ -44,7 +44,7 @@ class CacheManager; class gemActionLocation; class gemItem; -class iDocumentNode; +struct iDocumentNode; class MathExpression; /** Modified: trunk/src/server/bulkobjects/psspell.cpp =================================================================== --- trunk/src/server/bulkobjects/psspell.cpp 2009-03-11 03:49:13 UTC (rev 3175) +++ trunk/src/server/bulkobjects/psspell.cpp 2009-03-11 05:31:59 UTC (rev 3176) @@ -68,9 +68,9 @@ castingEffect = row["casting_effect"]; realm = row.GetInt("realm"); maxPower = row.GetInt("max_power"); - offensive = row.GetInt("offensive"); + offensive = row.GetInt("offensive")!=0; targetTypes = row.GetInt("target_type"); - excludeTarget = row.GetInt("exclude_target"); + excludeTarget = row.GetInt("exclude_target")!=0; // if spell is defensive then you must be able to cast it on friends, otherwise the entry is wrong. csString errorMsg; @@ -241,7 +241,7 @@ if (!caster->GetActor()->infinitemana) { float manaCost = ManaCost(kFactor); - if (caster->GetMana() < manaCost); + if (caster->GetMana() < manaCost) { reason.Format("You don't have the mana to cast %s.", name.GetData()); return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-03-11 22:31:23
|
Revision: 3182 http://planeshift.svn.sourceforge.net/planeshift/?rev=3182&view=rev Author: kennygraunke Date: 2009-03-11 22:31:11 +0000 (Wed, 11 Mar 2009) Log Message: ----------- - Changed from psString::Interpolate(MathEnvironment *env) to MathEnvironment::InterpolateString(csString & str). This should remove the fparser dependency from dbmysql. which seemed like a bad thing. - Should fix bug 2802. Modified Paths: -------------- trunk/src/common/util/mathscript.cpp trunk/src/common/util/mathscript.h trunk/src/common/util/mathscript_unittest.cpp trunk/src/common/util/psstring.cpp trunk/src/common/util/psstring.h trunk/src/server/scripting.cpp Modified: trunk/src/common/util/mathscript.cpp =================================================================== --- trunk/src/common/util/mathscript.cpp 2009-03-11 22:05:11 UTC (rev 3181) +++ trunk/src/common/util/mathscript.cpp 2009-03-11 22:31:11 UTC (rev 3182) @@ -98,6 +98,28 @@ } } +void MathEnvironment::InterpolateString(csString & str) const +{ + csString varName; + size_t pos = (size_t)-1; + while ((pos = str.Find("${", pos+1)) != SIZET_NOT_FOUND) + { + size_t end = str.Find("}", pos+2); + if (end == SIZET_NOT_FOUND) + continue; // invalid - unterminated ${ + if (end <= pos+3) + continue; // invalid - empty ${} + + str.SubString(varName, pos+2, end-(pos+2)); + MathVar *var = Lookup(varName); + if (!var) + continue; // invalid - required variable not in environment. leave it as is. + + str.DeleteAt(pos, end-pos+1); + str.Insert(pos, var->ToString()); + } +} + MathStatement* MathStatement::Create(const csString & line, const char *name) { size_t assignAt = line.FindFirst('='); Modified: trunk/src/common/util/mathscript.h =================================================================== --- trunk/src/common/util/mathscript.h 2009-03-11 22:05:11 UTC (rev 3181) +++ trunk/src/common/util/mathscript.h 2009-03-11 22:31:11 UTC (rev 3182) @@ -146,6 +146,9 @@ void DumpAllVars() const; + /// Perform string interpolation, i.e. replacing ${...} with the appropriate variable. + void InterpolateString(csString & str) const; + protected: const MathEnvironment *parent; csHash<MathVar*, csString> variables; Modified: trunk/src/common/util/mathscript_unittest.cpp =================================================================== --- trunk/src/common/util/mathscript_unittest.cpp 2009-03-11 22:05:11 UTC (rev 3181) +++ trunk/src/common/util/mathscript_unittest.cpp 2009-03-11 22:31:11 UTC (rev 3182) @@ -23,7 +23,6 @@ // Project Includes //============================================================================= #include "util/mathscript.h" -#include "util/psstring.h" //============================================================================= // Library Includes @@ -228,21 +227,21 @@ TEST(MathScriptTest, InterpolateTest) { - psString msg("Xordan hits you for ${elite} damage..."); + csString msg("Xordan hits you for ${elite} damage..."); MathEnvironment env; env.Define("elite", 1337); - msg.Interpolate(&env); + env.InterpolateString(msg); EXPECT_STREQ("Xordan hits you for 1337.000000 damage...", msg.GetData()); msg = "${elite} times, because he's just that ${elite}"; - msg.Interpolate(&env); + env.InterpolateString(msg); EXPECT_STREQ("1337.000000 times, because he's just that 1337.000000", msg.GetData()); msg = "${elite}"; - msg.Interpolate(&env); + env.InterpolateString(msg); EXPECT_STREQ("1337.000000", msg.GetData()); msg = "${} ${elite} ${}"; - msg.Interpolate(&env); + env.InterpolateString(msg); EXPECT_STREQ("${} 1337.000000 ${}", msg.GetData()); } Modified: trunk/src/common/util/psstring.cpp =================================================================== --- trunk/src/common/util/psstring.cpp 2009-03-11 22:05:11 UTC (rev 3181) +++ trunk/src/common/util/psstring.cpp 2009-03-11 22:31:11 UTC (rev 3182) @@ -26,7 +26,6 @@ #include "util/psstring.h" #include "util/strutil.h" #include "util/psconst.h" -#include "util/mathscript.h" bool psString::FindString(const char *border, unsigned int & pos, unsigned int & end) { @@ -240,28 +239,6 @@ SubString(line,start,end-start); } -void psString::Interpolate(const MathEnvironment *env) -{ - csString varName; - size_t pos = (size_t)-1; - while ((pos = Find("${", pos+1)) != SIZET_NOT_FOUND) - { - size_t end = Find("}", pos+2); - if (end == SIZET_NOT_FOUND) - continue; // invalid - unterminated ${ - if (end <= pos+3) - continue; // invalid - empty ${} - - SubString(varName, pos+2, end-(pos+2)); - MathVar *var = env->Lookup(varName); - if (!var) - continue; // invalid - required variable not in environment. leave it as is. - - DeleteAt(pos, end-pos+1); - Insert(pos, var->ToString()); - } -} - int psString::ReplaceAllSubString( const char* what, const char* with, bool wholeWord ) { int where = FindSubString(what,0,XML_CASE_INSENSITIVE,wholeWord); Modified: trunk/src/common/util/psstring.h =================================================================== --- trunk/src/common/util/psstring.h 2009-03-11 22:05:11 UTC (rev 3181) +++ trunk/src/common/util/psstring.h 2009-03-11 22:31:11 UTC (rev 3182) @@ -57,8 +57,6 @@ void GetWordNumber(int which,psString& buff); void GetLine(size_t start,csString& line); - /// Perform string interpolation, i.e. replacing ${...} with the appropriate variable. - void Interpolate(const MathEnvironment *env); bool ReplaceSubString(const char* what, const char* with); int ReplaceAllSubString(const char* what, const char* with, bool wholeWord=false); Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2009-03-11 22:05:11 UTC (rev 3181) +++ trunk/src/server/scripting.cpp 2009-03-11 22:31:11 UTC (rev 3182) @@ -377,13 +377,13 @@ { if (target && target->GetClientID()) { - psString finalText(text); - finalText.Interpolate(env); + csString finalText(text); + env->InterpolateString(finalText); psserver->SendSystemInfo(target->GetClientID(), finalText); - psString finalUndo(undo); - finalUndo.Interpolate(env); + csString finalUndo(undo); + env->InterpolateString(finalUndo); MsgCancel *cancel = new MsgCancel(target->GetClientID(), finalUndo); asp->Add(cancel, "<msg text=\"%s\" undo=\"%s\"/>", finalText.GetData(), finalUndo.GetData()); @@ -1038,8 +1038,8 @@ if (actor && actor->GetClientID()) { - psString finalText(text); - finalText.Interpolate(env); + csString finalText(text); + env->InterpolateString(finalText); psserver->SendSystemInfo(actor->GetClientID(), finalText); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-03-12 18:40:17
|
Revision: 3192 http://planeshift.svn.sourceforge.net/planeshift/?rev=3192&view=rev Author: kougaro Date: 2009-03-12 18:40:09 +0000 (Thu, 12 Mar 2009) Log Message: ----------- Made a wrapper for the main player name in psengine, changed various call in the client to use it Modified Paths: -------------- trunk/src/client/chatbubbles.cpp trunk/src/client/gui/chatwindow.cpp trunk/src/client/gui/pawsbuddy.cpp trunk/src/client/gui/pawschardescription.cpp trunk/src/client/gui/pawsconfigwindow.cpp trunk/src/client/gui/pawsdetailwindow.cpp trunk/src/client/gui/pawsignore.cpp trunk/src/client/gui/pawspetitiongmwindow.cpp trunk/src/client/gui/pawsquestwindow.cpp trunk/src/client/psengine.cpp trunk/src/client/psengine.h trunk/src/common/paws/pawstextbox.cpp Modified: trunk/src/client/chatbubbles.cpp =================================================================== --- trunk/src/client/chatbubbles.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/chatbubbles.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -280,7 +280,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 || chatMsg.iChatType == CHAT_NPCINTERNAL) - chatMsg.sPerson = psengine->GetCelClient()->GetMainPlayer()->GetName(); + chatMsg.sPerson = psengine->GetMainPlayerName(); // Get the first name of the person (needed for NPCs with both the first and the last name) csString firstName; Modified: trunk/src/client/gui/chatwindow.cpp =================================================================== --- trunk/src/client/gui/chatwindow.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/chatwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -536,7 +536,7 @@ } else if (words[0] == "/tellnpcinternal") { - pPerson = psengine->GetCelClient()->GetMainPlayer()->GetName(); + pPerson = psengine->GetMainPlayerName(); size_t space = pPerson.FindFirst(' '); if (space != SIZET_NOT_FOUND) pPerson.DeleteAt(space,pPerson.Length()-space); @@ -656,7 +656,7 @@ BadWordsFilter(text); // If a character says his/her own name, presume it's an introduction - csString name(psengine->GetCelClient()->GetMainPlayer()->GetName()); + csString name(psengine->GetMainPlayerName()); name.Truncate(name.FindFirst(' ')); name.Downcase(); @@ -685,7 +685,7 @@ { csString filename; filename.Format("/planeshift/userdata/logs/%s_%s", - psengine->GetCelClient()->GetMainPlayer()->GetName(), + psengine->GetMainPlayerName(), logFileName[channel]); filename.ReplaceAll(" ", "_"); @@ -705,14 +705,14 @@ "================================================\r\n" "%s %s\r\n" "------------------------------------------------\r\n", - buf, psengine->GetCelClient()->GetMainPlayer()->GetName() + buf, psengine->GetMainPlayerName() ); #else buffer.Format( "================================================\n" "%s %s\n" "------------------------------------------------\n", - buf, psengine->GetCelClient()->GetMainPlayer()->GetName() + buf, psengine->GetMainPlayerName() ); #endif logFile[channel]->Write(buffer.GetData(), buffer.Length()); @@ -1091,7 +1091,7 @@ msg.type == MSG_LOOT) chatType = CHAT_SYSTEM_BASE; - WordArray playerName(psengine->GetCelClient()->GetMainPlayer()->GetName()); + WordArray playerName(psengine->GetMainPlayerName()); bool hasCharName = noCaseMsg.Find(playerName[0].Downcase().GetData()) != (size_t)-1; ChatOutput(buff.GetData(), colour, chatType, true, hasCharName); @@ -1147,7 +1147,7 @@ if ( !havePlayerName ) // save name for auto-complete later { - noCasePlayerName.Replace(psengine->GetCelClient()->GetMainPlayer()->GetName()); + noCasePlayerName.Replace(psengine->GetMainPlayerName()); noCasePlayerName.Downcase(); // Create lowercase string noCasePlayerForename = GetWordNumber(noCasePlayerName, 1); chatTriggers.Push(noCasePlayerForename); @@ -1314,13 +1314,13 @@ { if ( msg.sText.StartsWith("/me ") ) { - WordArray tName(psengine->GetCelClient()->GetMainPlayer()->GetName()); + WordArray tName(psengine->GetMainPlayerName()); buff.Format("%s %s",tName[0].GetData(), ((const char *)msg.sText)+4); } else if ( msg.sText.StartsWith("/my ") ) { - WordArray tName(psengine->GetCelClient()->GetMainPlayer()->GetName()); + WordArray tName(psengine->GetMainPlayerName()); buff.Format("%s's %s",tName[0].GetData(), ((const char *)msg.sText)+4); } @@ -1411,7 +1411,7 @@ } } - WordArray playerName(psengine->GetCelClient()->GetMainPlayer()->GetName()); + WordArray playerName(psengine->GetMainPlayerName()); bool hasCharName = msg.sText.Downcase().Find(playerName[0].Downcase().GetData()) != (size_t)-1; if (!buff.IsEmpty()) @@ -1425,9 +1425,9 @@ { csString autoResponse, clientmsg(awayText); if ( clientmsg.StartsWith("/me ") ) - clientmsg.Format("%s %s", psengine->GetCelClient()->GetMainPlayer()->GetName(), ((const char *)awayText)+4); + clientmsg.Format("%s %s", psengine->GetMainPlayerName(), ((const char *)awayText)+4); else if ( clientmsg.StartsWith("/my ") ) - clientmsg.Format("%s's %s",psengine->GetCelClient()->GetMainPlayer()->GetName(), ((const char *)awayText)+4); + clientmsg.Format("%s's %s",psengine->GetMainPlayerName(), ((const char *)awayText)+4); autoResponse.Format("/tell %s [auto-reply] %s", (const char*)msg.sPerson, clientmsg.GetData()); const char* errorMessage = cmdsource->Publish(autoResponse.GetData()); Modified: trunk/src/client/gui/pawsbuddy.cpp =================================================================== --- trunk/src/client/gui/pawsbuddy.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/pawsbuddy.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -110,7 +110,7 @@ offlineBuddies.DeleteAll(); // Load aliases - LoadAliases(psengine->GetCelClient()->GetMainPlayer()->GetName()); + LoadAliases(psengine->GetMainPlayerName()); for (size_t x = 0; x < mesg.buddies.GetSize(); x++ ) { @@ -256,7 +256,7 @@ // Remove from the alias list. It may fail on the server, but we don't have enough // information to remove the alias when the buddy was actually removed. if (aliases.DeleteAll(value)) - SaveAliases(psengine->GetCelClient()->GetMainPlayer()->GetName()); + SaveAliases(psengine->GetMainPlayerName()); } else if (!strcmp(name, "EditBuddy")) { @@ -417,7 +417,7 @@ // Add/replace in the aliases table and save it. aliases.PutUnique(name, newAlias); - SaveAliases(psengine->GetCelClient()->GetMainPlayer()->GetName()); + SaveAliases(psengine->GetMainPlayerName()); // Update the listbox FillBuddyList(); Modified: trunk/src/client/gui/pawschardescription.cpp =================================================================== --- trunk/src/client/gui/pawschardescription.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/pawschardescription.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -133,7 +133,7 @@ csString DescriptionData; //the data taken from char description //make up the filename - FileName.Format("/planeshift/userdata/descriptions/%s_description.txt", psengine->GetCelClient()->GetMainPlayer()->GetName()); + FileName.Format("/planeshift/userdata/descriptions/%s_description.txt", psengine->GetMainPlayerName()); FileName.ReplaceAll(" ", "_"); DescriptionData = description->GetText(); //get the text to save @@ -154,7 +154,7 @@ csString DescriptionData; //the data taken from char description //make up the filename - FileName.Format("/planeshift/userdata/descriptions/%s_description.txt", psengine->GetCelClient()->GetMainPlayer()->GetName()); + FileName.Format("/planeshift/userdata/descriptions/%s_description.txt", psengine->GetMainPlayerName()); FileName.ReplaceAll(" ", "_"); if (!vfs->Exists(FileName)) //check if there is a file saved Modified: trunk/src/client/gui/pawsconfigwindow.cpp =================================================================== --- trunk/src/client/gui/pawsconfigwindow.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/pawsconfigwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -73,10 +73,10 @@ sectionTree->SetScrollBars(false, true); sectionTree->UseBorder("line"); - sectionParent = FindWidget("PanelParent"); +/* sectionParent = FindWidget("PanelParent"); if (sectionParent == NULL) return false; - +*/ // sets up buttons: okButton = FindWidget("OKButton"); if (okButton == NULL) Modified: trunk/src/client/gui/pawsdetailwindow.cpp =================================================================== --- trunk/src/client/gui/pawsdetailwindow.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/pawsdetailwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -204,7 +204,7 @@ storedcreationinfo = msg.creationinfo; //check if the player is looking at his/her/its own description - if (msg.name == psengine->GetCelClient()->GetMainPlayer()->GetName()) + if (msg.name == psengine->GetMainPlayerName()) { details_editable = true; if(!storedescription.Length()) //if the player didn't input anything inform him Modified: trunk/src/client/gui/pawsignore.cpp =================================================================== --- trunk/src/client/gui/pawsignore.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/pawsignore.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -166,7 +166,7 @@ { pawsChatWindow* chat = (pawsChatWindow*)PawsManager::GetSingleton().FindWidget("ChatWindow"); - if (!strcmp(name, psengine->GetCelClient()->GetMainPlayer()->GetName())) + if (!strcmp(name, psengine->GetMainPlayerName())) { if ( chat ) chat->ChatOutput(PawsManager::GetSingleton().Translate("You can not ignore yourself.")); Modified: trunk/src/client/gui/pawspetitiongmwindow.cpp =================================================================== --- trunk/src/client/gui/pawspetitiongmwindow.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/pawspetitiongmwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -373,7 +373,7 @@ } if (csString("In Progress") == petitionList->GetSelectedText(PGMCOL_STATUS) - && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM))) + && ((csString)psengine->GetMainPlayerName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM))) { currentRow = sel; @@ -435,7 +435,7 @@ } if (csString("In Progress") == petitionList->GetSelectedText(PGMCOL_STATUS) - && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM)) + && ((csString)psengine->GetMainPlayerName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM)) || psengine->GetCelClient()->GetMainPlayer()->GetType() >= 25) { currentRow = sel; @@ -467,7 +467,7 @@ } if (csString("In Progress") == petitionList->GetSelectedText(PGMCOL_STATUS) - && ((csString)psengine->GetCelClient()->GetMainPlayer()->GetName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM))) + && ((csString)psengine->GetMainPlayerName()).StartsWith(petitionList->GetSelectedText(PGMCOL_GM))) { currentRow = sel; Modified: trunk/src/client/gui/pawsquestwindow.cpp =================================================================== --- trunk/src/client/gui/pawsquestwindow.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/gui/pawsquestwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -84,7 +84,7 @@ questID = -1; filename = "/planeshift/userdata/questnotes_"; - filename.Append(psengine->GetCelClient()->GetMainPlayer()->GetName()); + filename.Append(psengine->GetMainPlayerName()); filename.Append(".xml"); filename.ReplaceAllSubString(" ", "_"); Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/psengine.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -1151,6 +1151,13 @@ netmanager->Disconnect(); } +//---------------------------------------------------------------------------- + +const char* psEngine::GetMainPlayerName() +{ + return GetCelClient()->GetMainPlayer()->GetName(); +} + // ---------------------------------------------------------------------------- void psEngine::AddLoadingWindowMsg(const csString & msg) Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/client/psengine.h 2009-03-12 18:40:09 UTC (rev 3192) @@ -284,6 +284,9 @@ /// Get the number of characters this player should have. int GetNumChars() { return numOfChars; } + + /// Get the main character's name + const char* GetMainPlayerName(); /// Force the next frame to get drawn. Used when updating LoadWindow. void ForceRefresh() { elapsed = 0; } Modified: trunk/src/common/paws/pawstextbox.cpp =================================================================== --- trunk/src/common/paws/pawstextbox.cpp 2009-03-12 07:34:06 UTC (rev 3191) +++ trunk/src/common/paws/pawstextbox.cpp 2009-03-12 18:40:09 UTC (rev 3192) @@ -640,7 +640,7 @@ void pawsMessageTextBox::SplitMessage( const char* newText, int colour, int size ) { - if ( strlen(newText) > 0 ) + if ( !newText && strlen(newText) > 0 ) { int maxWidth; int maxHeight; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-03-13 05:41:03
|
Revision: 3193 http://planeshift.svn.sourceforge.net/planeshift/?rev=3193&view=rev Author: Vengeance2001 Date: 2009-03-13 05:40:52 +0000 (Fri, 13 Mar 2009) Log Message: ----------- Implemented the riddle prompt functionality from the quest popup menus. Use: Menu: ?=Question Reminder to get it. Talk to the Merchant to get this puzzle quest and try it. "blue" is the correct answer to the riddle. Modified Paths: -------------- trunk/src/client/gui/pawsactivemagicwindow.cpp trunk/src/client/gui/pawsglyphwindow.cpp trunk/src/client/gui/pawsguildwindow.cpp trunk/src/client/gui/pawslootwindow.cpp trunk/src/client/gui/pawsnpcdialog.cpp trunk/src/client/gui/pawsnpcdialog.h trunk/src/common/paws/pawslistbox.cpp trunk/src/common/paws/pawslistbox.h trunk/src/eedit/eeditloadeffecttoolbox.cpp trunk/src/server/database/mysql/quest_scripts.sql trunk/src/server/database/mysql/quests.sql trunk/src/server/questmanager.cpp Modified: trunk/src/client/gui/pawsactivemagicwindow.cpp =================================================================== --- trunk/src/client/gui/pawsactivemagicwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/client/gui/pawsactivemagicwindow.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -81,7 +81,7 @@ } case psGUIActiveMagicMessage::Remove: { - for (int i = 0; i < list->GetRowCount(); i++) + for (size_t i = 0; i < list->GetRowCount(); i++) { pawsListBoxRow *row = list->GetRow(i); pawsTextBox *name = dynamic_cast<pawsTextBox*>(row->GetColumn(0)); Modified: trunk/src/client/gui/pawsglyphwindow.cpp =================================================================== --- trunk/src/client/gui/pawsglyphwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/client/gui/pawsglyphwindow.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -236,7 +236,8 @@ pawsGlyphSlot * pawsGlyphWindow::FindFreeSlot(int wayNum) { - int rowNum, colNum; + size_t rowNum; + int colNum; pawsListBox * way; pawsListBoxRow * row; pawsGlyphSlot * slot; Modified: trunk/src/client/gui/pawsguildwindow.cpp =================================================================== --- trunk/src/client/gui/pawsguildwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/client/gui/pawsguildwindow.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -575,10 +575,8 @@ } void pawsGuildWindow::SetupLevelNameButtons() -{ - int i; - - for (i=0; i < levelList->GetRowCount(); i++) +{ + for (size_t i=0; i < levelList->GetRowCount(); i++) { pawsListBoxRow * row = levelList->GetRow(i); pawsButton * cell = dynamic_cast <pawsButton*> (row->GetColumn(0)); @@ -592,7 +590,7 @@ size_t pawsGuildWindow::GetLevel( const char* levelName ) { - for( size_t z = 0; z < levels.GetSize(); z++ ) + for (size_t z = 0; z < levels.GetSize(); z++ ) { if ( levels[z] == levelName ) return z; @@ -1017,7 +1015,7 @@ pawsTextBox * nameTextBox; csString nameInList; - for (int i=0; i < memberList->GetRowCount(); i++) + for (size_t i=0; i < memberList->GetRowCount(); i++) { row = memberList->GetRow(i); nameTextBox = dynamic_cast <pawsTextBox*> (row->GetColumn(0)); Modified: trunk/src/client/gui/pawslootwindow.cpp =================================================================== --- trunk/src/client/gui/pawslootwindow.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/client/gui/pawslootwindow.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -112,7 +112,7 @@ lootList->SelfPopulateXML(message.lootxml); // Set up the row ids. - for(int i = 0;i < lootList->GetRowCount();i++) + for (size_t i = 0;i < lootList->GetRowCount();i++) { pawsListBoxRow* row = lootList->GetRow(i); if(!row) @@ -136,7 +136,7 @@ psLootRemoveMessage msg(me); - for (int i=0; i < lootList->GetRowCount(); i++) + for (size_t i=0; i < lootList->GetRowCount(); i++) { pawsListBoxRow* row = lootList->GetRow(i); if (!row) @@ -148,8 +148,8 @@ { lootList->Remove(row->GetID()); - int count = lootList->GetRowCount(); - if (count <= 0) // Clear and close when empty + size_t count = lootList->GetRowCount(); + if (count == 0) // Clear and close when empty { lootList->Clear(); Hide(); Modified: trunk/src/client/gui/pawsnpcdialog.cpp =================================================================== --- trunk/src/client/gui/pawsnpcdialog.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/client/gui/pawsnpcdialog.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -31,6 +31,7 @@ #include "pawsnpcdialog.h" + pawsNpcDialogWindow::pawsNpcDialogWindow() { responseList = NULL; @@ -62,30 +63,45 @@ // Send the server the original trigger 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 - if (dot != SIZET_NOT_FOUND) - { - text.DeleteAt(0,dot+1); - } - cmd.Format("/tellnpcinternal %s", text.GetData() ); - psengine->GetCmdHandler()->Publish(cmd); - responseList->Clear(); + if (trigger.GetAt(0) == '=') // prompt window signal + { + pawsStringPromptWindow::Create(csString(trigger.GetData()+1), + csString(""), + false, 320, 30, this, trigger.GetData()+1 ); + } + else + { + if (trigger.GetAt(0) != '<') + { + cmd.Format("/tellnpc %s", trigger.GetData() ); + psengine->GetCmdHandler()->Publish(cmd); + } + else + { + psSimpleStringMessage gift(0,MSGTYPE_EXCHANGE_AUTOGIVE,trigger); + gift.SendMessage(); + } + DisplayTextBubbles(fld->GetText()); + } Hide(); } } +void pawsNpcDialogWindow::DisplayTextBubbles(const char *sayWhat) +{ + // Now send the chat window and chat bubbles the nice menu text + csString text(sayWhat); + size_t dot = text.FindFirst('.'); // Take out the numbering to display + if (dot != SIZET_NOT_FOUND) + { + text.DeleteAt(0,dot+1); + } + csString cmd; + cmd.Format("/tellnpcinternal %s", text.GetData() ); + psengine->GetCmdHandler()->Publish(cmd); + responseList->Clear(); +} + void pawsNpcDialogWindow::HandleMessage( MsgEntry* me ) { if ( me->GetType() == MSGTYPE_DIALOG_MENU ) @@ -97,6 +113,47 @@ SelfPopulateXML(mesg.xml); + AdjustForPromptWindow(); + Show(); } } + +void pawsNpcDialogWindow::AdjustForPromptWindow() +{ + csString str; + + for (size_t i=0; i<responseList->GetRowCount(); i++) + { + str = responseList->GetTextCellValue(i,0); + size_t where = str.Find("?="); + if (where != SIZET_NOT_FOUND) // we have a prompt choice + { + pawsTextBox *hidden = (pawsTextBox *)responseList->GetRow(i)->GetColumn(1); + if (where != SIZET_NOT_FOUND) + { + str.DeleteAt(where,1); // take out the ? + hidden->SetText(str.GetData() + where); // Save the question prompt, starting with the =, in the hidden column + str.DeleteAt(where,1); // take out the = + + // now change the visible menu choice to something better + pawsTextBox *prompt = (pawsTextBox *)responseList->GetRow(i)->GetColumn(0); + + csString menuPrompt(str); + menuPrompt.Insert(where,"<Answer "); + menuPrompt.Append('>'); + prompt->SetText(menuPrompt); + } + } + } +} + +void pawsNpcDialogWindow::OnStringEntered(const char *name,int param,const char *value) +{ + printf("Got name=%s, value=%s\n", name, value); + + csString cmd; + cmd.Format("/tellnpc %s", value ); + psengine->GetCmdHandler()->Publish(cmd); + DisplayTextBubbles(value); +} Modified: trunk/src/client/gui/pawsnpcdialog.h =================================================================== --- trunk/src/client/gui/pawsnpcdialog.h 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/client/gui/pawsnpcdialog.h 2009-03-13 05:40:52 UTC (rev 3193) @@ -19,17 +19,18 @@ #ifndef PAWS_NPC_DIALOG #define PAWS_NPC_DIALOG -#include "paws/pawswidget.h" #include "net/subscriber.h" -#include "gui/pawscontrolwindow.h" +#include "paws/pawswidget.h" +#include "paws/pawsstringpromptwindow.h" + class pawsListBox; -/** The buddy window that shows your current list of in game 'friends'. - * This allows you to send them a tell or add/remove buddies. +/** This window shows the popup menu of available responses + * when talking to an NPC. */ -class pawsNpcDialogWindow: public pawsWidget, public psClientNetSubscriber +class pawsNpcDialogWindow: public pawsWidget, public psClientNetSubscriber, public iOnStringEnteredAction { public: pawsNpcDialogWindow(); @@ -39,9 +40,13 @@ void OnListAction( pawsListBox* widget, int status ); + void OnStringEntered(const char *name,int param,const char *value); + private: - pawsListBox* responseList; + void AdjustForPromptWindow(); + void DisplayTextBubbles(const char *sayWhat); + pawsListBox* responseList; }; Modified: trunk/src/common/paws/pawslistbox.cpp =================================================================== --- trunk/src/common/paws/pawslistbox.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/common/paws/pawslistbox.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -1265,9 +1265,9 @@ } } -int pawsListBox::GetRowCount() +size_t pawsListBox::GetRowCount() { - return (int)rows.GetSize(); + return rows.GetSize(); } pawsTextBox * pawsListBox::GetTextCell(int rowNum, int colNum) Modified: trunk/src/common/paws/pawslistbox.h =================================================================== --- trunk/src/common/paws/pawslistbox.h 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/common/paws/pawslistbox.h 2009-03-13 05:40:52 UTC (rev 3193) @@ -189,7 +189,7 @@ void AddRow( pawsListBoxRow* row ); /// Get number of rows in listboz - int GetRowCount(); + size_t GetRowCount(); /// Get a particular row pawsListBoxRow* GetRow( size_t x ); Modified: trunk/src/eedit/eeditloadeffecttoolbox.cpp =================================================================== --- trunk/src/eedit/eeditloadeffecttoolbox.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/eedit/eeditloadeffecttoolbox.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -104,7 +104,7 @@ void EEditLoadEffectToolbox::SelectEffect(const csString & effectName) { - for (int a=0; a<effectList->GetRowCount(); ++a) + for (size_t a=0; a<effectList->GetRowCount(); ++a) { if (effectList->GetTextCellValue(a, 0) == effectName) effectList->GetTextCell(a, 0)->SetColour(0x00ffff); Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/server/database/mysql/quest_scripts.sql 2009-03-13 05:40:52 UTC (rev 3193) @@ -989,3 +989,22 @@ Complete One Thousand Year Sammich Step 29."); +# +# Quest to test riddle prompts +# +INSERT INTO quest_scripts VALUES("210","209","P:can I help +Menu: I\'ll solve a riddle for a tria. + +Merchant: Ok that is fun. I like riddles. What is my favorite color? + +Assign Quest + +... + +P: *. P: blue +Menu: That isn\'t a riddle, little man. Menu: ?=Favorite color + +M: I don\'t care what you think of my riddle! What is my favorite color? +M: Yes blue is my favorite color! Isn\'t it a wonderful color? Here is your reward. +Give 1 tria. +"); Modified: trunk/src/server/database/mysql/quests.sql =================================================================== --- trunk/src/server/database/mysql/quests.sql 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/server/database/mysql/quests.sql 2009-03-13 05:40:52 UTC (rev 3193) @@ -66,6 +66,7 @@ ('206','QuestMaster2 Quest 6','Test Quest for the Quest Test Case: Quest lockouts','0',0,'0',0,-1,0,'Test3',''), ('207','Acquire Lapar','Test Quest for Audio with Smith','0',0,'0',0,-1,0,'TestAudio',''), ('208','One Thousand Year Sammich','Long complex demo quest','0',0,NULL,0,0,0,'Test4',''); + ('209','Puzzle Quest','Answer the merchant\'s question with BLUE to complete this quest.','0',0,NULL,0,0,0,'Newbie',''); /*!40000 ALTER TABLE `quests` ENABLE KEYS*/; UNLOCK TABLES; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/; Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-03-12 18:40:09 UTC (rev 3192) +++ trunk/src/server/questmanager.cpp 2009-03-13 05:40:52 UTC (rev 3193) @@ -950,7 +950,7 @@ response.DeleteAt(response.Length()-1); } - // This isn't truely a "any trigger" but will work + // This isn't truly a "any trigger" but will work if (response == "*") response = "error"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-03-14 06:58:33
|
Revision: 3201 http://planeshift.svn.sourceforge.net/planeshift/?rev=3201&view=rev Author: mgist Date: 2009-03-14 06:58:21 +0000 (Sat, 14 Mar 2009) Log Message: ----------- - Fixed PS for CS loader changes. - Fixed running through portals using the background world loading. Modified Paths: -------------- trunk/src/client/psengine.cpp trunk/src/client/zonehandler.cpp trunk/src/common/effects/pseffectmanager.cpp trunk/src/common/effects/pseffectobjsimpmesh.cpp trunk/src/common/engine/loader.cpp trunk/src/common/engine/loader.h trunk/src/common/engine/psregion.cpp trunk/src/common/engine/psregion.h trunk/src/common/paws/pawsgenericview.cpp trunk/src/common/paws/pawsobjectview.cpp trunk/src/common/util/texfactory.cpp trunk/src/npcclient/gem.cpp trunk/src/npcclient/npcmesh.cpp trunk/src/server/gemmesh.cpp Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/client/psengine.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -653,6 +653,8 @@ return 1; } + vfs->ChDir("/planeshift/maps/"); + csRef<iThreadManager> tm = csQueryRegistry<iThreadManager>(object_reg); tm->Wait(modelPrecaches); } Modified: trunk/src/client/zonehandler.cpp =================================================================== --- trunk/src/client/zonehandler.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/client/zonehandler.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -207,8 +207,22 @@ FlagRegions(zone); } - if (psengine->ThreadedWorldLoading() || world->NeedsLoading(zone->transitional)) + bool catchUp = psengine->ThreadedWorldLoading(); + if(catchUp) { + csVector3 pos; + float yrot; + iSector* sector; + + celclient->GetMainPlayer()->GetLastPosition (pos, yrot, sector); + + pos -= msg.pos; + catchUp = msg.oldSector.Compare("SectorWhereWeKeepEntitiesResidingInUnloadedMaps") || + (abs(pos.x) > 1.0f || abs(pos.x) > 1.0f || abs(pos.x) > 1.0f); + } + + if (catchUp || (world && world->NeedsLoading(zone->transitional))) + { SetMapLoadNeeded(true); sectorToLoad = msg.newSector; haveNewPos = true; Modified: trunk/src/common/effects/pseffectmanager.cpp =================================================================== --- trunk/src/common/effects/pseffectmanager.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/effects/pseffectmanager.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -134,8 +134,9 @@ #ifndef DONT_DO_EFFECTS view = parentView; - csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader> (psCSSetup::object_reg); - return csPtr<iThreadReturn>(loader->LoadLibraryFile(fileName, effectsCollection)); + csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader> (psCSSetup::object_reg); + csRef<iVFS> vfs = csQueryRegistry<iVFS> (psCSSetup::object_reg); + return csPtr<iThreadReturn>(loader->LoadLibraryFile(vfs->GetCwd(), fileName, effectsCollection)); #endif } Modified: trunk/src/common/effects/pseffectobjsimpmesh.cpp =================================================================== --- trunk/src/common/effects/pseffectobjsimpmesh.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/effects/pseffectobjsimpmesh.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -160,10 +160,8 @@ bool psEffectObjSimpMesh::PostSetup() { - csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader> (psCSSetup::object_reg); - csRef<iThreadReturn> itr = loader->LoadLibraryFile(fileName, effectsCollection); - itr->Wait(); - engine->SyncEngineListsNow(loader); + csRef<iLoader> loader = csQueryRegistry<iLoader> (psCSSetup::object_reg); + loader->LoadLibraryFile(fileName, effectsCollection); return true; } Modified: trunk/src/common/engine/loader.cpp =================================================================== --- trunk/src/common/engine/loader.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/engine/loader.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -42,6 +42,7 @@ this->loadRange = loadRange; engine = csQueryRegistry<iEngine> (object_reg); + loader = csQueryRegistry<iLoader> (object_reg); tloader = csQueryRegistry<iThreadedLoader> (object_reg); vfs = csQueryRegistry<iVFS> (object_reg); svstrings = csQueryRegistryTagInterface<iShaderVarStringSet>(object_reg, "crystalspace.shader.variablenameset"); @@ -101,8 +102,7 @@ node = root->GetNode("plugins"); if(node.IsValid()) { - csRef<iThreadReturn> itr = tloader->LoadNode(node); - itr->Wait(); + loader->Load(node); } node = root->GetNode("shaders"); @@ -113,7 +113,7 @@ { node = nodeItr->Next(); node = node->GetNode("file"); - tloader->LoadShader(node->GetContentsValue()); + tloader->LoadShader(vfs->GetCwd(), node->GetContentsValue()); } } @@ -969,7 +969,7 @@ if(ready && !mesh->status) { - mesh->status = tloader->LoadNode(mesh->data); + mesh->status = tloader->LoadNode(vfs->GetCwd(), mesh->data); } if(mesh->status && mesh->status->IsFinished()) @@ -1001,7 +1001,7 @@ if(ready && !meshfact->status) { - meshfact->status = tloader->LoadNode(meshfact->data); + meshfact->status = tloader->LoadNode(vfs->GetCwd(), meshfact->data); return false; } @@ -1084,7 +1084,7 @@ if(!texture->status.IsValid()) { - texture->status = tloader->LoadNode(texture->data); + texture->status = tloader->LoadNode(vfs->GetCwd(), texture->data); return false; } @@ -1218,9 +1218,7 @@ if(!texture) { - csRef<iThreadReturn> itr = tloader->LoadTexture(name, filename, CS_TEXTURE_3D, txtmgr, true, false); - itr->Wait(); - texture = scfQueryInterfaceSafe<iTextureWrapper>(itr->GetResultRefPtr()); + texture = loader->LoadTexture(name, filename, CS_TEXTURE_3D, txtmgr, true, false); if(className) { texture->SetTextureClass(className); Modified: trunk/src/common/engine/loader.h =================================================================== --- trunk/src/common/engine/loader.h 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/engine/loader.h 2009-03-14 06:58:21 UTC (rev 3201) @@ -254,6 +254,7 @@ iObjectRegistry* object_reg; csRef<iEngine> engine; csRef<iTextureManager> txtmgr; + csRef<iLoader> loader; csRef<iThreadedLoader> tloader; csRef<iVFS> vfs; csRef<iShaderVarStringSet> svstrings; Modified: trunk/src/common/engine/psregion.cpp =================================================================== --- trunk/src/common/engine/psregion.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/engine/psregion.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -59,7 +59,7 @@ engine = csQueryRegistry<iEngine> (object_reg); vfs = csQueryRegistry<iVFS>(object_reg); xml = csQueryRegistry<iDocumentSystem>(object_reg); - loader = csQueryRegistry<iThreadedLoader>(object_reg); + loader = csQueryRegistry<iLoader>(object_reg); } psRegion::~psRegion() @@ -120,17 +120,12 @@ // Now load the map into the selected region vfs->ChDir(worlddir); - vfs->SetSyncDir(vfs->GetCwd()); engine->SetVFSCacheManager(); csTicks start = csGetTicks(); Debug2(LOG_LOAD, 0,"Loading map file %s", worlddir.GetData()); - csRef<iThreadReturn> itr = loader->LoadMap(worldNode, CS_LOADER_KEEP_WORLD, collection); - itr->Wait(); - vfs->ChDir(worlddir); // Workaround a CS cwd bug. - engine->SyncEngineListsNow(loader); - if(!itr->WasSuccessful()) + if(!loader->LoadMap(worldNode, CS_LOADER_KEEP_WORLD, collection)) { Error3("LoadMap failed: %s, %s.",worlddir.GetData(),worldfile.GetData() ); Error2("Region name was: %s", regionName.GetData()); Modified: trunk/src/common/engine/psregion.h =================================================================== --- trunk/src/common/engine/psregion.h 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/engine/psregion.h 2009-03-14 06:58:21 UTC (rev 3201) @@ -37,7 +37,7 @@ struct iDocumentNode; struct iDocumentSystem; struct iEngine; -struct iThreadedLoader; +struct iLoader; struct iObjectRegistry; struct iVFS; @@ -132,7 +132,7 @@ csRef<iEngine> engine; csRef<iVFS> vfs; csRef<iDocumentSystem> xml; - csRef<iThreadedLoader> loader; + csRef<iLoader> loader; }; #endif // __PSREGION_H__ Modified: trunk/src/common/paws/pawsgenericview.cpp =================================================================== --- trunk/src/common/paws/pawsgenericview.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/paws/pawsgenericview.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -82,7 +82,7 @@ VFS->ChDir (map); VFS->SetSyncDir(VFS->GetCwd()); engine->SetCacheManager(NULL); - csRef<iThreadReturn> itr = loader->LoadMapFile("world", CS_LOADER_KEEP_WORLD, collection); + csRef<iThreadReturn> itr = loader->LoadMapFile(map, "world", CS_LOADER_KEEP_WORLD, collection); itr->Wait(); if(!itr->WasSuccessful()) { Modified: trunk/src/common/paws/pawsobjectview.cpp =================================================================== --- trunk/src/common/paws/pawsobjectview.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/paws/pawsobjectview.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -147,9 +147,8 @@ // Now load the map into the selected region VFS->ChDir (map); - VFS->SetSyncDir(VFS->GetCwd()); engine->SetCacheManager(NULL); - csRef<iThreadReturn> itr = loader->LoadMapWait(worldNode, CS_LOADER_KEEP_WORLD, col); + csRef<iThreadReturn> itr = loader->LoadMapWait(map, worldNode, CS_LOADER_KEEP_WORLD, col); if (!itr->WasSuccessful()) return false; @@ -196,11 +195,8 @@ if ( !meshfact ) { - csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader> (PawsManager::GetSingleton().GetObjectRegistry()); - csRef<iThreadReturn> itr = loader->LoadMeshObjectFactory (fileName); - itr->Wait(); - meshfact = scfQueryInterfaceSafe<iMeshFactoryWrapper>(itr->GetResultRefPtr()); - engine->SyncEngineListsNow(loader); + csRef<iLoader> loader = csQueryRegistry<iLoader> (PawsManager::GetSingleton().GetObjectRegistry()); + meshfact = loader->LoadMeshObjectFactory (fileName); } if ( !meshfact ) Modified: trunk/src/common/util/texfactory.cpp =================================================================== --- trunk/src/common/util/texfactory.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/common/util/texfactory.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -235,11 +235,9 @@ } // if still not found here, attempt to load - csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader> (object_reg); + csRef<iLoader> loader = csQueryRegistry<iLoader> (object_reg); if (!loader) return NULL; // or something else - csRef<iThreadReturn> itr = loader->LoadImage(name, CS_IMGFMT_TRUECOLOR); - itr->Wait(); - csRef<iImage> image = scfQueryInterfaceSafe<iImage>(itr->GetResultRefPtr()); + csRef<iImage> image = loader->LoadImage(name, CS_IMGFMT_TRUECOLOR); if (image && image->GetWidth()!=32) // Save in cache { Modified: trunk/src/npcclient/gem.cpp =================================================================== --- trunk/src/npcclient/gem.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/npcclient/gem.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -202,10 +202,8 @@ } } - csRef<iThreadedLoader> loader (csQueryRegistry<iThreadedLoader> (npcclient->GetObjectReg())); - csRef<iThreadReturn> ret = loader->LoadNode(root); - ret->Wait(); - engine->SyncEngineListsNow(loader); + csRef<iLoader> loader (csQueryRegistry<iLoader> (npcclient->GetObjectReg())); + loader->Load(root); meshFact = engine->GetMeshFactories()->FindByName(factname); if(meshFact.IsValid()) { Modified: trunk/src/npcclient/npcmesh.cpp =================================================================== --- trunk/src/npcclient/npcmesh.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/npcclient/npcmesh.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -55,8 +55,7 @@ csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader>(objectReg); - csRef<iThreadReturn> ret = loader->LoadFile(fileName); - ret->Wait(); + csRef<iThreadReturn> ret = loader->LoadFileWait(vfs->GetCwd(), fileName); csRef<iMeshFactoryWrapper> imesh_fact = 0; Modified: trunk/src/server/gemmesh.cpp =================================================================== --- trunk/src/server/gemmesh.cpp 2009-03-14 06:53:41 UTC (rev 3200) +++ trunk/src/server/gemmesh.cpp 2009-03-14 06:58:21 UTC (rev 3201) @@ -55,9 +55,8 @@ csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader>(objectReg); - csRef<iThreadReturn> ret = loader->LoadFile(fileName); - ret->Wait(); - engine->SyncEngineListsNow(loader); // PS#2666 - server crash on /morph + csRef<iThreadReturn> ret = loader->LoadFileWait(vfs->GetCwd(), fileName); + csRef<iMeshFactoryWrapper> imesh_fact = 0; if ( ret->WasSuccessful() ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-03-15 05:42:18
|
Revision: 3214 http://planeshift.svn.sourceforge.net/planeshift/?rev=3214&view=rev Author: mgist Date: 2009-03-15 05:42:07 +0000 (Sun, 15 Mar 2009) Log Message: ----------- - Made sure *_common map files are parsed before other map files. - Fixed a bbox parsing bug on meshobj using a paramsfile. Modified Paths: -------------- trunk/src/client/psengine.cpp trunk/src/common/engine/loader.cpp Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-03-14 20:23:35 UTC (rev 3213) +++ trunk/src/client/psengine.cpp 2009-03-15 05:42:07 UTC (rev 3214) @@ -557,18 +557,39 @@ } } + csRef<iThreadManager> tm = csQueryRegistry<iThreadManager>(object_reg); if(threadedWorldLoading) { csString path; csRef<iStringArray> maps = vfs->FindFiles("/planeshift/world/"); + + // Do the _common maps first. + for(size_t i=0; i<maps->GetSize(); ++i) + { + csRef<iDataBuffer> tmp = vfs->GetRealPath(maps->Get(i)); + if(csString(tmp->GetData()).Find("common") != (size_t)-1) + { + path.AppendFmt("%s, ", tmp->GetData()); + csString vpath(maps->Get(i)); + vpath.Append("/world"); + mapPrecaches.Push(Loader::GetSingleton().PrecacheData(vpath.GetData(), false)); + } + } + tm->Wait(mapPrecaches); + + // Now everything else. for(size_t i=0; i<maps->GetSize(); ++i) { csRef<iDataBuffer> tmp = vfs->GetRealPath(maps->Get(i)); - path.AppendFmt("%s, ", tmp->GetData()); - csString vpath(maps->Get(i)); - vpath.Append("/world"); - mapPrecaches.Push(Loader::GetSingleton().PrecacheData(vpath.GetData(), false)); + if(csString(tmp->GetData()).Find("common") == (size_t)-1) + { + path.AppendFmt("%s, ", tmp->GetData()); + csString vpath(maps->Get(i)); + vpath.Append("/world"); + mapPrecaches.Push(Loader::GetSingleton().PrecacheData(vpath.GetData(), false)); + } } + vfs->Mount("/planeshift/maps/", path); } @@ -654,8 +675,6 @@ } vfs->ChDir("/planeshift/maps/"); - - csRef<iThreadManager> tm = csQueryRegistry<iThreadManager>(object_reg); tm->Wait(modelPrecaches); } Modified: trunk/src/common/engine/loader.cpp =================================================================== --- trunk/src/common/engine/loader.cpp 2009-03-14 20:23:35 UTC (rev 3213) +++ trunk/src/common/engine/loader.cpp 2009-03-15 05:42:07 UTC (rev 3214) @@ -339,12 +339,13 @@ m->alwaysLoaded = true; } - if(node2->GetNode("move")) + csRef<iDocumentNode> move = node2->GetNode("move"); + if(move.IsValid()) { - node2 = node2->GetNode("move")->GetNode("v"); - m->pos = csVector3(node2->GetAttributeValueAsFloat("x"), - node2->GetAttributeValueAsFloat("y"), node2->GetAttributeValueAsFloat("z")); - node2 = node2->GetParent()->GetParent(); + move = move->GetNode("v"); + m->pos = csVector3(move->GetAttributeValueAsFloat("x"), + move->GetAttributeValueAsFloat("y"), move->GetAttributeValueAsFloat("z")); + move = move->GetParent(); } if(node2->GetNode("paramsfile")) @@ -412,8 +413,8 @@ csRef<iDocumentNode> bboxdata = keys->Next(); if(csString("bbox").Compare(bboxdata->GetAttributeValue("name"))) { - csRef<iDocumentNode> position = node2->GetParent()->GetParent()->GetNode("move"); - if(position) + csRef<iDocumentNode> position = move; + if(position.IsValid()) { m->hasBBox = true; csVector3 pos; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-03-15 11:43:17
|
Revision: 3216 http://planeshift.svn.sourceforge.net/planeshift/?rev=3216&view=rev Author: mgist Date: 2009-03-15 11:42:55 +0000 (Sun, 15 Mar 2009) Log Message: ----------- - Linked load range to camera clip distance. - Fixed some problems with the actor falling through the ground when logging in. Modified Paths: -------------- trunk/src/client/pscamera.cpp trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h trunk/src/client/psengine.cpp trunk/src/client/psengine.h trunk/src/client/zonehandler.cpp trunk/src/common/engine/loader.cpp trunk/src/common/engine/loader.h Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/client/pscamera.cpp 2009-03-15 11:42:55 UTC (rev 3216) @@ -46,6 +46,8 @@ #include "util/psstring.h" #include "util/strutil.h" +#include "engine/loader.h" + #include "gui/psmainwidget.h" #include "net/messages.h" @@ -176,6 +178,8 @@ distanceCfg.maxFPS = 30; distanceCfg.minDist = 30; + fixedDistClip = 200; + useCameraCD = false; useNPCCam = false; @@ -1756,6 +1760,9 @@ // control distance we see shadows as well psShadowManager *shadowManager = psengine->GetCelClient()->GetShadowManager(); shadowManager->SetShadowRange(dist); + + // control load distance. + psengine->GetLoader()->SetLoadRange(dist+dist/10); } float psCamera::GetDistanceClipping() Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/client/pscelclient.cpp 2009-03-15 11:42:55 UTC (rev 3216) @@ -248,6 +248,16 @@ } psPersistActor mesg( me, GetClientDR()->GetMsgStrings(), psengine->GetEngine() ); + // If this is the first actor to be sent... + if ( local_player == NULL ) + { + // Trigger a world load, as we now know where we are. + Loader::GetSingleton().UpdatePosition(mesg.pos, mesg.sectorName, true); + + // Set the sector. + mesg.sector = psengine->GetEngine()->FindSector(mesg.sectorName); + } + // We already have an entity with this id so we must have missed the remove object message // so delete and remake it. GEMClientObject* found = (GEMClientObject *) FindObject(mesg.entityid); @@ -282,9 +292,6 @@ local_player = actor; SetMainActor( local_player ); - // Now that we know where we are, trigger a world load around us. - Loader::GetSingleton().UpdatePosition(mesg.pos, mesg.sectorName, true); - // This triggers the server to update our proxlist local_player->SendDRUpdate(PRIORITY_LOW,GetClientDR()->GetMsgStrings()); } @@ -763,21 +770,24 @@ } } -void psCelClient::Update() +void psCelClient::Update(bool loaded) { - for(size_t i =0; i < entities.GetSize();i++) + // Update loader. + if(local_player) { - entities[i]->Update(); + Loader::GetSingleton().UpdatePosition(local_player->Pos(), + local_player->GetSector()->QueryObject()->GetName(), false); } - // Update loader. - if(local_player) + if(loaded) { - Loader::GetSingleton().UpdatePosition(local_player->Pos(), - local_player->GetSector()->QueryObject()->GetName(), false); + for(size_t i =0; i < entities.GetSize();i++) + { + entities[i]->Update(); + } + + shadowManager->UpdateShadows(); } - - shadowManager->UpdateShadows(); } void psCelClient::HandleMessage(MsgEntry *me) Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/client/pscelclient.h 2009-03-15 11:42:55 UTC (rev 3216) @@ -198,7 +198,7 @@ /// Add all new entities on the queue. void ForceEntityQueues(); - void Update(); + void Update(bool loaded); /** Attach a client object to a Crystal Space object. Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/client/psengine.cpp 2009-03-15 11:42:55 UTC (rev 3216) @@ -905,7 +905,7 @@ } if (celclient) - celclient->Update(); + celclient->Update(HasLoadedMap()); if (effectManager) effectManager->Update(); Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/client/psengine.h 2009-03-15 11:42:55 UTC (rev 3216) @@ -241,7 +241,7 @@ bool LoadSoundSettings(bool forceDef); /// Checks if the client has loaded its map - bool HasLoadedMap() { return loadedMap; } + inline bool HasLoadedMap() const { return loadedMap; } /// Sets the HasLoadedMap value void SetLoadedMap(bool value) { loadedMap = value; } Modified: trunk/src/client/zonehandler.cpp =================================================================== --- trunk/src/client/zonehandler.cpp 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/client/zonehandler.cpp 2009-03-15 11:42:55 UTC (rev 3216) @@ -217,7 +217,7 @@ celclient->GetMainPlayer()->GetLastPosition (pos, yrot, sector); pos -= msg.pos; - catchUp = msg.oldSector.Compare("SectorWhereWeKeepEntitiesResidingInUnloadedMaps") || + catchUp = msg.oldSector.IsEmpty() || msg.oldSector.Compare("SectorWhereWeKeepEntitiesResidingInUnloadedMaps") || (abs(pos.x) > 1.0f || abs(pos.x) > 1.0f || abs(pos.x) > 1.0f); } @@ -423,7 +423,7 @@ int executed = 2; if(background) { - if(Loader::GetSingleton().GetLoadingCount() == 0) + if(Loader::GetSingleton().HasValidPosition() && Loader::GetSingleton().GetLoadingCount() == 0) { executed = 0; psengine->GetEngine()->PrecacheDraw(); Modified: trunk/src/common/engine/loader.cpp =================================================================== --- trunk/src/common/engine/loader.cpp 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/common/engine/loader.cpp 2009-03-15 11:42:55 UTC (rev 3216) @@ -40,6 +40,8 @@ this->object_reg = object_reg; this->gfxFeatures = gfxFeatures; this->loadRange = loadRange; + + validPosition = false; engine = csQueryRegistry<iEngine> (object_reg); loader = csQueryRegistry<iLoader> (object_reg); @@ -658,6 +660,8 @@ void Loader::UpdatePosition(const csVector3& pos, const char* sectorName, bool force) { + validPosition = true; + // Check already loading meshes. for(size_t i=0; i<(loadingMeshes.GetSize() < 50 ? loadingMeshes.GetSize() : 50); ++i) { @@ -980,8 +984,9 @@ engine->SyncEngineListsNow(tloader); mesh->object->GetMovable()->SetSector(mesh->sector->object); mesh->object->GetMovable()->UpdateMove(); + csColliderHelper::InitializeCollisionWrapper(cdsys, mesh->object); engine->PrecacheMesh(mesh->object); - csColliderHelper::InitializeCollisionWrapper(cdsys, mesh->object); + mesh->loading = false; } Modified: trunk/src/common/engine/loader.h =================================================================== --- trunk/src/common/engine/loader.h 2009-03-15 07:06:29 UTC (rev 3215) +++ trunk/src/common/engine/loader.h 2009-03-15 11:42:55 UTC (rev 3216) @@ -53,12 +53,16 @@ THREADED_CALLABLE_DECL2(Loader, PrecacheData, csThreadReturn, const char*, path, bool, recursive, THREADEDL, false, false); void UpdatePosition(const csVector3& pos, const char* sectorName, bool force); - iThreadedLoader* GetLoader() { return tloader; } + inline iThreadedLoader* GetLoader() { return tloader; } - size_t GetLoadingCount() { return loadingMeshes.GetSize(); } + inline size_t GetLoadingCount() { return loadingMeshes.GetSize() + finalisableMeshes.GetSize(); } iObjectRegistry* GetObjectRegistry() const { return object_reg; } + inline void SetLoadRange(float r) { loadRange = r; } + + inline bool HasValidPosition() const { return validPosition; } + private: class MeshObj; class Portal; @@ -263,6 +267,7 @@ csRef<iCollideSystem> cdsys; csRef<iSyntaxService> syntaxService; uint gfxFeatures; + bool validPosition; csRef<Sector> lastSector; csVector3 lastPos; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-03-15 14:18:00
|
Revision: 3219 http://planeshift.svn.sourceforge.net/planeshift/?rev=3219&view=rev Author: Khakilord Date: 2009-03-15 14:17:57 +0000 (Sun, 15 Mar 2009) Log Message: ----------- Reduced network queue size for each client on the server to a reasonable number. Modified Paths: -------------- trunk/src/common/net/netbase.h trunk/src/server/client.cpp Modified: trunk/src/common/net/netbase.h =================================================================== --- trunk/src/common/net/netbase.h 2009-03-15 13:29:56 UTC (rev 3218) +++ trunk/src/common/net/netbase.h 2009-03-15 14:17:57 UTC (rev 3219) @@ -1,7 +1,7 @@ /* * netbase.h by Matze Braun <Mat...@gm...> * - * Copyright (C) 2001 Atomic Blue (in...@pl..., http://www.atomicblue.org) + * Copyright (C) 2001 Atomic Blue (in...@pl..., http://www.atomicblue.org) * * * This program is free software; you can redistribute it and/or @@ -35,6 +35,7 @@ #define NUM_BROADCAST 0xffffffff #define MAXQUEUESIZE 20000 +#define MAXCLIENTQUEUESIZE 5000 #define MAXPACKETHISTORY 400 #define NETAVGCOUNT 400 #define RESENDAVGCOUNT 200 @@ -44,7 +45,7 @@ // The whole seconds that the SendTo function will block each cycle waiting for the write state to change on the socket #define SENDTO_SELECT_TIMEOUT_SEC 0 // The microseconds (1/10^6 s) that the SendTo function will block each cycle waiting for the write state to change on the socket -#define SENDTO_SELECT_TIMEOUT_USEC 10000 +#define SENDTO_SELECT_TIMEOUT_USEC 10000 /* Include platform specific socket settings */ #ifdef USE_WINSOCK @@ -105,14 +106,14 @@ */ NetBase(int outqueuelen=100); virtual ~NetBase(); - + /** * This adds another message queue (for other threads) * These queues are for reading off. * Selection of the messages is done by a minimum and maximum ObjID - */ + */ bool AddMsgQueue (MsgQueue *,objID minID=0,objID maxID=0xffffffff); - + /** this removes a queue */ void RemoveMsgQueue(MsgQueue *); @@ -132,7 +133,7 @@ * Mulitcast a message, to all client nums */ virtual void Multicast (MsgEntry* me, const csArray<PublishDestination>& multi, int except, float range) = 0; - + /** * Is this connection ready to use? */ @@ -168,13 +169,13 @@ /** Binds the socket to the specified address (only needed on server */ bool Bind(const char* addr, int port); - bool Bind(int addr, int port); + bool Bind(int addr, int port); /** - * This class describes connections to other computers - so it contains + * This class describes connections to other computers - so it contains * TCP/IP address, a buffer for splitted packets, msgnum and others, but not * things like name of the client or character type - */ + */ class Connection; enum broadcasttype @@ -188,7 +189,7 @@ }; csTicks GetPing(void) { return netInfos.GetAveragePingTicks();} - + psNetMsgProfiles * GetProfs() { return profs; } /// The timeout to use when waiting for new incoming packets. @@ -230,13 +231,13 @@ * @param type The type of message to not filter. */ void RemoveFilterLogMessage(int type); - + /** * Clear all message type from the LogMessage message filter list * */ void LogMessageFilterClear(); - + /** * Invert the LogMessage filter */ @@ -251,7 +252,7 @@ * Toggle the global send LogMessage filter */ void ToggleSendMessageFilter() { logmsgfiltersetting.send = !logmsgfiltersetting.send; } - + /** * Set the filter hex messages flag. */ @@ -264,7 +265,7 @@ /** return a random ID that can be used for messages */ uint32_t GetRandomID(); - + protected: /** * Check if the given message type should be loged or not. @@ -273,15 +274,15 @@ * */ bool FilterLogMessage(int type,char dir); - + protected: /* the following protected stuff is thought of being used in the inherited * network classes */ /** Wrapper to encapsulate the sendto call and provide for retry if the buffer is full. - * - * + * + * */ int SendTo (LPSOCKADDR_IN addr, const void *data, unsigned int size) { @@ -292,7 +293,7 @@ #ifdef DEBUG if (!addr || !data) - Error1("wrong args"); + Error1("wrong args"); #endif // #define ENDIAN_DEBUG @@ -306,19 +307,19 @@ ptr = (const char *)data; len = ((40<size) ? 40 : size); fprintf(f,"\n------------\nSending %d bytes:\n",len); - for ( i = 0 ; i < len ; i++ ) /* Print the hex dump for len chars. */ - fprintf(f,"%02x " ,(*(ptr+i)&0xff)); - for ( i = len ; i < 16 ; i++ ) /* Pad out the dump field to the ASCII */ - fprintf(f, " " ); /* field. */ - fprintf(f, " " ); - for ( i = 0 ; i < len ; i++ ) /* Now print the ASCII field. */ - { - c=0x7f&(*(ptr+i)); /* mask out bit 7 */ - if (!(isprint(c))) /* If not printable */ + for ( i = 0 ; i < len ; i++ ) /* Print the hex dump for len chars. */ + fprintf(f,"%02x " ,(*(ptr+i)&0xff)); + for ( i = len ; i < 16 ; i++ ) /* Pad out the dump field to the ASCII */ + fprintf(f, " " ); /* field. */ + fprintf(f, " " ); + for ( i = 0 ; i < len ; i++ ) /* Now print the ASCII field. */ + { + c=0x7f&(*(ptr+i)); /* mask out bit 7 */ + if (!(isprint(c))) /* If not printable */ fprintf(f, "." ); /* print a dot */ else { - fprintf(f, "%c" ,c); - } /* else display it */ + fprintf(f, "%c" ,c); + } /* else display it */ } fprintf(f,"\n-----------------\n"); fclose(f); @@ -351,7 +352,7 @@ */ SOCK_SELECT(mysocket+1,NULL,&wfds,NULL,&timeout); - // Try and send again. + // Try and send again. sentbytes=SOCK_SENDTO(mysocket, data, size, 0, (LPSOCKADDR) addr, sizeof (SOCKADDR_IN) ); } @@ -387,7 +388,7 @@ if(pipe_fd[0] > 0) FD_SET (pipe_fd[0], &set); #endif - + // Backup the timeval struct in case select changes it as on Linux struct timeval prevTimeout = timeout; @@ -397,7 +398,7 @@ timeout = prevTimeout; return 0; } - + #ifndef CS_PLATFORM_WIN32 if(FD_ISSET(pipe_fd[0], &set)) { @@ -405,9 +406,9 @@ read(pipe_fd[0], throwaway, 32); } #endif - + timeout = prevTimeout; - + if(!FD_ISSET(mysocket, &set)) return 0; @@ -477,7 +478,7 @@ * the psMessageBytes struct and MsgEntry struct if complete. */ csPtr<MsgEntry> CheckCompleteMessage(uint32_t client,uint32_t id); - + /** * This receives only fully reassembled messages and adds to appropriate * queues. @@ -537,27 +538,27 @@ int totaltransferin, totaltransferout; /** total packages transferred by this object */ int totalcountin, totalcountout; - + /** Moving averages */ typedef struct { unsigned int senders; unsigned int messages; csTicks time; } SendQueueStats_t; - + SendQueueStats_t sendStats[NETAVGCOUNT]; csTicks lastSendReport; unsigned int avgIndex; - + size_t resends[RESENDAVGCOUNT]; unsigned int resendIndex; - + psNetMsgProfiles * profs; private: /** my socket */ SOCKET mysocket; - + /** a pipe to wake up from the select call when data is ready to be written */ SOCKET pipe_fd[2]; @@ -568,7 +569,7 @@ * is not good at all */ csRandomGen* randomgen; - + /** mutex used for the random generator */ CS::Threading::Mutex mutex; @@ -629,7 +630,7 @@ ~Connection(); bool isValid() const { return valid; } - + uint32_t GetNextPacketID() {return sequence++;} }; Modified: trunk/src/server/client.cpp =================================================================== --- trunk/src/server/client.cpp 2009-03-15 13:29:56 UTC (rev 3218) +++ trunk/src/server/client.cpp 2009-03-15 14:17:57 UTC (rev 3219) @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ - + #include <psconfig.h> //============================================================================= // Crystal Space Includes @@ -52,7 +52,7 @@ #include "adminmanager.h" Client::Client () - : accumulatedLag(0), zombie(false), allowedToDisconnect(true), ready(false), mute(false), + : accumulatedLag(0), zombie(false), allowedToDisconnect(true), ready(false), mute(false), accountID(0), playerID(0), securityLevel(0), superclient(false), name(""), waypointEffectID(0), waypointIsDisplaying(false), pathEffectID(0), pathPath(NULL), pathIsDisplaying(false), @@ -64,18 +64,18 @@ advisorPoints = 0; lastInviteTime = 0; spamPoints = 0; - clientnum = 0; + clientnum = 0; detectedCheatCount = 0; nextFloodHistoryIndex = 0; - + isAdvisor = false; - isFrozen = false; + isFrozen = false; lastInviteResult = true; hasBeenWarned = false; - hasBeenPenalized = false; + hasBeenPenalized = false; valid = false; - + // pets[0] is a special case for the players familiar. pets.Insert(0, PID(0)); } @@ -92,7 +92,7 @@ Client::valid=true; outqueue = csPtr<NetPacketQueueRefCount> - (new NetPacketQueueRefCount (MAXQUEUESIZE)); + (new NetPacketQueueRefCount (MAXCLIENTQUEUESIZE)); if (!outqueue) ERRORHALT("No Memory!"); @@ -111,7 +111,7 @@ { GetActor()->RemoveFromGroup(); } - + // Only save if an account has been found for this client. if (accountID.IsValid()) { @@ -163,7 +163,7 @@ { return true; } - + return allowedToDisconnect; } @@ -189,11 +189,11 @@ } } -void Client::SetFamiliar( gemActor *familiar ) -{ +void Client::SetFamiliar( gemActor *familiar ) +{ if ( familiar ) { - pets[0] = familiar->GetPID(); + pets[0] = familiar->GetPID(); } else { @@ -201,7 +201,7 @@ } } -gemActor* Client::GetFamiliar() +gemActor* Client::GetFamiliar() { if (pets[0].IsValid()) { @@ -210,12 +210,12 @@ return NULL; } -void Client::AddPet( gemActor *pet ) -{ - pets.Push(pet->GetPID()); +void Client::AddPet( gemActor *pet ) +{ + pets.Push(pet->GetPID()); } -void Client::RemovePet( size_t index ) -{ +void Client::RemovePet( size_t index ) +{ pets.DeleteIndex(index); } @@ -295,7 +295,7 @@ Result result(db->Select("SELECT SUM(time_connected_sec) FROM characters WHERE account_id = %d", accountID.Unbox())); if (result.IsValid()) totalTimeConnected += result[0].GetUInt32("SUM(time_connected_sec)"); - + return totalTimeConnected; } @@ -404,7 +404,7 @@ { csString tmp; const char *sMsg = NULL; - + // Am I a GM? if (IsGM()) { @@ -453,7 +453,7 @@ { if (lastAttacker) { - tmp.Format("You must be grouped with %s to attack %s.", + tmp.Format("You must be grouped with %s to attack %s.", lastAttacker->GetName(), foe->GetName()); } else @@ -614,24 +614,24 @@ uint32_t Client::WaypointGetEffectID() { - if (waypointEffectID == 0) - waypointEffectID = CacheManager::GetSingleton().NextEffectUID(); + if (waypointEffectID == 0) + waypointEffectID = CacheManager::GetSingleton().NextEffectUID(); return waypointEffectID; } uint32_t Client::PathGetEffectID() { - if (pathEffectID == 0) - pathEffectID = CacheManager::GetSingleton().NextEffectUID(); + if (pathEffectID == 0) + pathEffectID = CacheManager::GetSingleton().NextEffectUID(); return pathEffectID; } uint32_t Client::LocationGetEffectID() { - if (locationEffectID == 0) - locationEffectID = CacheManager::GetSingleton().NextEffectUID(); + if (locationEffectID == 0) + locationEffectID = CacheManager::GetSingleton().NextEffectUID(); return locationEffectID; } @@ -639,10 +639,10 @@ void Client::SetAdvisorBan(bool ban) { db->Command("UPDATE accounts SET advisor_ban = %d WHERE id = %d", (int) ban, accountID.Unbox()); - + if (isAdvisor) psserver->GetAdviceManager()->RemoveAdvisor(clientnum, clientnum); - + psserver->SendSystemError(clientnum, "You have been %s from advising by a GM.", ban ? "banned" : "unbanned"); } @@ -652,7 +652,7 @@ Result result(db->Select("SELECT advisor_ban FROM accounts WHERE id = %d", accountID.Unbox())); if (result.IsValid()) 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. |