Browse Source

First revision for marking signs. Issue #403. TODO: Refresh after marking, and timed remarking.

Devn00b 5 months ago
parent
commit
1ea4536d05

+ 11 - 0
EQ2/source/WorldServer/Sign.cpp

@@ -294,15 +294,26 @@ void Sign::HandleUse(Client* client, string command)
 			client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are too far away!");
 		}
 	}
+	
 	else if (client && command.length() > 0)
 	{
 		EntityCommand* entity_command = FindEntityCommand(command);
 
+
+		//devn00b: Add support for marking objects
+		if (strcmp(entity_command->command.c_str(), "mark") == 0) {
+			LogWrite(SIGN__DEBUG, 0, "Sign", "ActivateMarkReqested Sign - Command: '%s' (Should read mark)", entity_command->command.c_str());
+			int32 char_id = client->GetCharacterID();
+			database.SaveSignMark(char_id, GetWidgetID(), database.GetCharacterName(char_id), client);
+			return;
+		}
+
 		if (entity_command)
 		{
 			LogWrite(SIGN__DEBUG, 0, "Sign", "ActivateQuestRequired Sign - Command: '%s'", entity_command->command.c_str());
 			client->GetCurrentZone()->ProcessEntityCommand(entity_command, client->GetPlayer(), client->GetPlayer()->GetTarget());
 		}
+
 	}
 
 }

+ 25 - 1
EQ2/source/WorldServer/WorldDatabase.cpp

@@ -3109,7 +3109,6 @@ void WorldDatabase::LoadSpecialZones(){
 			zone->Init();
 
 			zone->SetAlwaysLoaded(atoi(row[2]) == 1);
-//			zone->SetCityZone(atoi(row[3]) == 1);
 		}
 	}
 }
@@ -8403,4 +8402,29 @@ int32	WorldDatabase::GetAccountAge(int32 account_id) {
 
 	acct_age = curr_time - acct_created;
 	return acct_age;
+}
+
+void WorldDatabase::SaveSignMark(int32 char_id, int32 sign_id, char* char_name, Client* client) {
+
+	if (!database_new.Query("update spawn_signs set char_id=%u, char_name='%s' where widget_id=%u", char_id, char_name, sign_id)) {
+		LogWrite(SIGN__DEBUG, 0, "Sign", "ERROR in WorldDatabase::SaveSignMark");
+		return;
+	}
+
+}
+
+string WorldDatabase::GetSignMark(int32 char_id, int32 sign_id, char* char_name) {
+	Query query;
+	MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT char_name from spawn_signs where widget_id=%u", sign_id);
+	char* charname = 0;
+
+	if (result && mysql_num_rows(result) > 0) {
+		MYSQL_ROW row = mysql_fetch_row(result);
+
+		charname = new char[strlen(row[0]) + 1];
+		memset(charname, 0, strlen(row[0]) + 1);
+		strcpy(charname, row[0]);
+	}
+
+	return charname;
 }

+ 4 - 0
EQ2/source/WorldServer/WorldDatabase.h

@@ -298,6 +298,10 @@ public:
 	int32   LoadHouseContainers(int32 item_id = 0);
 	void	LoadBrokerItemStats();
 
+	void	SaveSignMark(int32 char_id, int32 sign_id, char* char_name, Client* client);
+	string	GetSignMark(int32 char_id, int32 sign_id, char* char_name); // returns the string containing the character name
+
+
 	map<int32, vector<LevelArray*> >*	LoadSpellClasses();
 	void	LoadTransporters(ZoneServer* zone);
 	void	LoadTransportMaps(ZoneServer* zone);