|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
02-11-2012, 03:42 AM
|
Fire Beetle
|
|
Join Date: Mar 2010
Posts: 10
|
|
#practices command
Hey,
For some odd reason or another, I remembered wanting to add practice points to one of my characters a couple months back and couldn't find a GM command that would do that.
Granted, EQEmu has already implemented a wide variety of commands that will set a target's skills to a specific value -- so this command may seem a bit superfluous -- but sometimes the GMs may want to give the player a bit of a bonus in the form of a practice point or two.
This code will do that, allowing a GM to either add practice points to a player or to set their existing total to a desired amount. Because no one in their right mind would ever want more than a few thousand practices, I limited the parameters of value to 5000.
#practices [add/set] [value]
I didn't have any problems compiling it, and (to my surprise) the damn thing actually seems to work. So I thought I'd post the diffs on the slim chance that somebody would find them useful, or maybe even get committed to the SVN repository. The major drawback to this command is that the player will need to zone (or re-login) in order to see the effects of this command when training from a guildmaster.
I've done some rudimentary error-checking (such as using "#practices set 0" and then trying to practice from the guildmaster before zoning) and everything seems okay. The display does a bit of a line-wrap for practices above 999, but it doesn't seem to affect anything (and maybe it would be better to change the 5000 limit down to 500, which is still more practices than any character would acquire in their lifetime).
Here's hoping somebody besides me finds some use for it, heh.
Madrigal
client.cpp patch
Code:
Index: client.cpp
===================================================================
--- client.cpp (revision 2100)
+++ client.cpp (working copy)
@@ -5349,6 +5349,13 @@
SendCrystalCounts();
}
+void Client::AddPractices(uint32 Practices)
+{
+ m_pp.points += Practices;
+
+ Save();
+}
+
// Processes a client request to inspect a SoF client's equipment.
void Client::ProcessInspectRequest(Client* requestee, Client* requester) {
if(requestee && requester) {
client.h patch
Code:
Index: client.h
===================================================================
--- client.h (revision 2100)
+++ client.h (working copy)
@@ -475,6 +475,9 @@
void SetEbonCrystals(uint32 Crystals) { m_pp.currentEbonCrystals = Crystals; }
void AddCrystals(uint32 Radiant, uint32 Ebon);
void SendCrystalCounts();
+ void SetPractices(uint32 Practices) { m_pp.points = Practices; }
+ int32 GetPractices() { return m_pp.points; }
+ void AddPractices(uint32 Practices);
void AddEXP(uint32 in_add_exp, int8 conlevel = 0xFF, bool resexp = false);
void SetEXP(uint32 set_exp, uint32 set_aaxp, bool resexp=false);
command.cpp patch
Code:
ndex: command.cpp
===================================================================
--- command.cpp (revision 2100)
+++ command.cpp (working copy)
@@ -328,6 +328,7 @@
command_add("qglobal","[on/off/view] - Toggles qglobal functionality on an NPC",100,command_qglobal) ||
command_add("loc","- Print out your or your target's current location and heading",0,command_loc) ||
command_add("goto","[x] [y] [z] - Teleport to the provided coordinates or to your target",10,command_goto) ||
+ command_add("practices","[add/set] [value] - Adds or sets practices to a player. Must zone afterward to take effect.",100,command_practices) ||
#ifdef BUGTRACK
command_add("bugtrack","[bug description] - Report a bug",0,command_bug) ||
#endif
@@ -4683,6 +4684,44 @@
c->MovePC(zone->GetZoneID(), zone->GetInstanceID(), atof(sep->arg[1]), atof(sep->arg[2]), atof(sep->arg[3]), 0.0f);
}
+void command_practices(Client *c, const Seperator *sep)
+{
+ Client *t=c;
+
+ if(c->GetTarget() && c->GetTarget()->IsClient())
+ t=c->GetTarget()->CastToClient();
+
+ if ((strcasecmp( sep->arg[1], "add" ) == 0 ) && (sep->IsNumber(2)))
+ {
+ if ((atoi(sep->arg[2]) < 1) || (atoi(sep->arg[2]) > 5000))
+ c->Message(0, "Error: #practices add <value> must range from 1 to 5000.");
+ else if (((t->GetPractices()) + (atoi(sep->arg[2]))) > 5000)
+ c->Message(0, "Error: Target has too many practices already. Keep the total to 5000 or less.");
+ else
+ {
+ t->AddPractices(atoi(sep->arg[2]));
+ t->Save();
+ if (atoi(sep->arg[2]) == 1)
+ t->Message(0, "You have gained 1 practice!");
+ else
+ t->Message(0, "You have gained %i practices!", atoi(sep->arg[2]));
+ }
+ }
+ else if ((strcasecmp( sep->arg[1], "set" ) == 0 ) && (sep->IsNumber(2)))
+ {
+ if ((atoi(sep->arg[2]) < 0) || (atoi(sep->arg[2]) > 5000))
+ c->Message(0, "Error: #practices set <value> must range from 0 to 5000.");
+ else
+ {
+ t->SetPractices(atoi(sep->arg[2]));
+ t->Save();
+ t->Message(0, "Your total practices have been set to %i.", atoi(sep->arg[2]));
+ }
+ }
+ else
+ c->Message(0, "Usage: #practices <add|set> <value>");
+}
+
#ifdef BUGTRACK
void command_bug(Client *c, const Seperator *sep)
{
command.h patch
Code:
Index: command.h
===================================================================
--- command.h (revision 2100)
+++ command.h (working copy)
@@ -316,6 +316,7 @@
void command_picklock(Client *c, const Seperator *sep);
void command_qtest(Client *c, const Seperator *sep);
void command_mysql(Client *c, const Seperator *sep);
+void command_practices(Client *c, const Seperator *sep);
#ifdef EMBPERL
void command_embperl_plugin(Client *c, const Seperator *sep);
|
|
|
|
|
|
|
02-11-2012, 05:18 AM
|
Fire Beetle
|
|
Join Date: Mar 2010
Posts: 10
|
|
Although the above code still works, I tightened up the targeting in command.cpp so that improper targets (NPCs, etc.) will result in an error message rather than target-defaulting to the player who issued the command.
command.cpp patch
Code:
Index: command.cpp
===================================================================
--- command.cpp (revision 2100)
+++ command.cpp (working copy)
@@ -328,6 +328,7 @@
command_add("qglobal","[on/off/view] - Toggles qglobal functionality on an NPC",100,command_qglobal) ||
command_add("loc","- Print out your or your target's current location and heading",0,command_loc) ||
command_add("goto","[x] [y] [z] - Teleport to the provided coordinates or to your target",10,command_goto) ||
+ command_add("practices","[add/set] [value] - Adds or sets practices to a player. Must zone afterward to take effect.",100,command_practices) ||
#ifdef BUGTRACK
command_add("bugtrack","[bug description] - Report a bug",0,command_bug) ||
#endif
@@ -4683,6 +4684,47 @@
c->MovePC(zone->GetZoneID(), zone->GetInstanceID(), atof(sep->arg[1]), atof(sep->arg[2]), atof(sep->arg[3]), 0.0f);
}
+void command_practices(Client *c, const Seperator *sep)
+{
+ Client *t=c;
+
+ if(c->GetTarget() && c->GetTarget()->IsClient())
+ {
+ t=c->GetTarget()->CastToClient();
+ if ((strcasecmp( sep->arg[1], "add" ) == 0 ) && (sep->IsNumber(2)))
+ {
+ if ((atoi(sep->arg[2]) < 1) || (atoi(sep->arg[2]) > 5000))
+ c->Message(0, "Error: #practices: add <value> must range from 1 to 5000.");
+ else if (((t->GetPractices()) + (atoi(sep->arg[2]))) > 5000)
+ c->Message(0, "Error: #practices: Target has too many practices already.");
+ else
+ {
+ t->AddPractices(atoi(sep->arg[2]));
+ t->Save();
+ if (atoi(sep->arg[2]) == 1)
+ t->Message(0, "You have gained 1 practice!");
+ else
+ t->Message(0, "You have gained %i practices!", atoi(sep->arg[2]));
+ }
+ }
+ else if ((strcasecmp( sep->arg[1], "set" ) == 0 ) && (sep->IsNumber(2)))
+ {
+ if ((atoi(sep->arg[2]) < 0) || (atoi(sep->arg[2]) > 5000))
+ c->Message(0, "Error: #practices: set <value> must range from 0 to 5000.");
+ else
+ {
+ t->SetPractices(atoi(sep->arg[2]));
+ t->Save();
+ t->Message(0, "Your total practices have been set to %i.", atoi(sep->arg[2]));
+ }
+ }
+ else
+ c->Message(0, "Usage: #practices <add|set> <value>");
+ }
+ else
+ c->Message(0, "Error: #practices: Target must be a player.");
+}
+
#ifdef BUGTRACK
void command_bug(Client *c, const Seperator *sep)
{
|
|
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 01:38 PM.
|
|
|
|
|
|
|
|
|
|
|
|
|