Browse Source

support for spawn set expansion_flag decimalbit

/spawn set expansion_flag 1234 - partial fix issue #104
Image 4 years ago
parent
commit
1731b7cdf7

+ 30 - 8
EQ2/source/WorldServer/Commands/Commands.cpp

@@ -150,6 +150,7 @@ Commands::Commands(){
 	spawn_set_values["prefix"] = SPAWN_SET_VALUE_PREFIX;
 	spawn_set_values["suffix"] = SPAWN_SET_VALUE_SUFFIX;
 	spawn_set_values["lastname"] = SPAWN_SET_VALUE_LASTNAME;
+	spawn_set_values["expansion_flag"] = SPAWN_SET_VALUE_EXPANSION_FLAG;
 
 	zone_set_values["expansion_id"] = ZONE_SET_VALUE_EXPANSION_ID;
 	zone_set_values["name"] = ZONE_SET_VALUE_NAME;
@@ -193,7 +194,7 @@ bool Commands::SetSpawnCommand(Client* client, Spawn* target, int8 type, const c
 		return false;
 	int32 val = 0;
 	try{
-		if(type != SPAWN_SET_VALUE_NAME && !(type >= SPAWN_SET_VALUE_SPAWN_SCRIPT && type <= SPAWN_SET_VALUE_SUB_TITLE) && !(type >= SPAWN_SET_VALUE_PREFIX && type <= SPAWN_SET_VALUE_LASTNAME))
+		if(type != SPAWN_SET_VALUE_NAME && !(type >= SPAWN_SET_VALUE_SPAWN_SCRIPT && type <= SPAWN_SET_VALUE_SUB_TITLE) && !(type >= SPAWN_SET_VALUE_PREFIX && type <= SPAWN_SET_VALUE_EXPANSION_FLAG))
 			val = atoul(value);
 	}
 	catch(...){
@@ -476,10 +477,14 @@ bool Commands::SetSpawnCommand(Client* client, Spawn* target, int8 type, const c
 			}
 
 			case SPAWN_SET_VALUE_LASTNAME: {
-				 sprintf(tmp, "%s", target->GetLastName());
-				 target->SetLastName(value);
-				 client->GetCurrentZone()->SendUpdateTitles(target);
-				 break;
+				sprintf(tmp, "%s", target->GetLastName());
+				target->SetLastName(value);
+				client->GetCurrentZone()->SendUpdateTitles(target);
+				break;
+			}
+			case SPAWN_SET_VALUE_EXPANSION_FLAG: {
+				// nothing to do must reload spawns
+				break;
 			}
 
 			*temp_value = string(tmp);
@@ -487,6 +492,19 @@ bool Commands::SetSpawnCommand(Client* client, Spawn* target, int8 type, const c
 	}
 	else{
 		switch(type){
+		case SPAWN_SET_VALUE_EXPANSION_FLAG: {
+
+			if (target->GetDatabaseID() > 0)
+			{
+				char query[256];
+				_snprintf(query, 256, "update spawn set expansion_flag=%i where id=%i", atoul(value), target->GetDatabaseID());
+				if (database.RunQuery(query, strnlen(query, 256)))
+				{
+					client->Message(CHANNEL_COLOR_RED, "Ran query:%s", query);
+				}
+			}
+			break;
+		}
 			case SPAWN_SET_VALUE_NAME:{
 				target->SetName(value);
 				client->GetCurrentZone()->SendUpdateTitles(target);
@@ -3376,7 +3394,7 @@ void Commands::Process(int32 index, EQ2_16BitString* command_parms, Client* clie
 				if(set_type > 0)
 				{
 					// check if spawn set is NOT a char update, or not location, or isn't a number
-					if(!(set_type >= SPAWN_SET_VALUE_PREFIX) && !(set_type <= SPAWN_SET_VALUE_LASTNAME) && set_type != SPAWN_SET_VALUE_NAME && ((set_type < SPAWN_SET_VALUE_SPAWN_SCRIPT) || (set_type > SPAWN_SET_VALUE_SUB_TITLE)) && set_type != SPAWN_SET_VALUE_LOCATION && sep->IsNumber(1) == false)
+					if(!(set_type >= SPAWN_SET_VALUE_PREFIX) && !(set_type <= SPAWN_SET_VALUE_EXPANSION_FLAG) && set_type != SPAWN_SET_VALUE_NAME && ((set_type < SPAWN_SET_VALUE_SPAWN_SCRIPT) || (set_type > SPAWN_SET_VALUE_SUB_TITLE)) && set_type != SPAWN_SET_VALUE_LOCATION && sep->IsNumber(1) == false)
 					{
 						client->SimpleMessage(CHANNEL_COLOR_RED, "Invalid value for set command.");
 					}
@@ -3385,7 +3403,11 @@ void Commands::Process(int32 index, EQ2_16BitString* command_parms, Client* clie
 						string name = string(spawn->GetName());
 						if(SetSpawnCommand(client, spawn, set_type, sep->arg[1]))
 						{
-							if(set_type == SPAWN_SET_VALUE_NAME)
+							if (set_type == SPAWN_SET_VALUE_EXPANSION_FLAG)
+							{
+								client->SimpleMessage(CHANNEL_COLOR_YELLOW, "A /reload spawns is required to properly update the spawns with the xpack flag.");
+							}
+							else if(set_type == SPAWN_SET_VALUE_NAME)
 							{
 								client->SimpleMessage(CHANNEL_COLOR_YELLOW, "New name will not be effective until zone reload.");
 							}
@@ -3399,7 +3421,7 @@ void Commands::Process(int32 index, EQ2_16BitString* command_parms, Client* clie
 								client->Message(CHANNEL_COLOR_YELLOW, "Successfully set '%s' to '%s' for spawn '%s'", sep->arg[0], sep->arg[1], name.c_str());
 							}
 
-							if(set_type != SPAWN_SET_VALUE_FACTION)
+							if(set_type != SPAWN_SET_VALUE_FACTION && set_type != SPAWN_SET_VALUE_EXPANSION_FLAG)
 							{
 								client->GetCurrentZone()->ApplySetSpawnCommand(client, spawn, set_type, sep->arg[1]);
 							}

+ 1 - 0
EQ2/source/WorldServer/Commands/Commands.h

@@ -540,6 +540,7 @@ private:
 #define SPAWN_SET_VALUE_PREFIX              56
 #define SPAWN_SET_VALUE_SUFFIX              57
 #define SPAWN_SET_VALUE_LASTNAME            58
+#define SPAWN_SET_VALUE_EXPANSION_FLAG      59
 
 #define ZONE_SET_VALUE_EXPANSION_ID			0
 #define ZONE_SET_VALUE_NAME					1