View Single Post
  #20  
Old 08-29-2014, 07:00 PM
noudess
Discordant
 
Join Date: Sep 2012
Location: Upstate NY
Posts: 274
Default

Latest diff. Working as far as I've tested.

This is a straight diff against MY repo, which is old, so some of it will need to be manually interpreted. I believe you guys have moved files around in the directories, and functions around within the files.

Still I don't think it would be too bad. This stuff was spread out between two files and functions (the main functionality of it). I put it all in one function in client_packet.cpp and deleted the no longer used Function.

Code:
=== modified file 'zone/StringIDs.h'
--- zone/StringIDs.h	2013-05-02 18:37:13 +0000
+++ zone/StringIDs.h	2014-08-29 21:30:44 +0000
@@ -273,6 +273,29 @@
 #define SPELL_REFLECT				9082	//%1's spell has been reflected by %2.
 #define NEW_SPELLS_AVAIL			9149	//You have new spells available to you.  Check the merchants near your guild master.
 #define AE_RAMPAGE					11015	//%1 goes on a WILD RAMPAGE!
+
+#define WONT_SELL_CLASS1			1155 	//It's %B3(13) like you that are ruining the continent...get OUT!
+#define WONT_SELL_CLASS2			1156 	//Isn't there some kind of ordinance against %B3(13) crawling out from under their rocks?
+#define WONT_SELL_CLASS3			1157 	//%B3(13) like you don't have any place in my shop..now make way for welcome customers.
+#define WONT_SELL_CLASS4			1158 	//I thought scumbag %B3(13) like you just stole whatever they need.  Now GET OUT!
+#define WONT_SELL_CLASS5			1159 	//I don't have anything to do with %B3(13)..move along.
+
+#define WONT_SELL_RACE1				1154 	//I don't like to speak to %B3(12) much less sell to them!
+#define WONT_SELL_RACE2				1161 	//It's not enough that you %B3(12) have ruined your own land. Now get lost!
+#define WONT_SELL_RACE3				1162 	//I have something here that %B3(12) use..let me see...it's the EXIT, now get LOST!
+#define WONT_SELL_RACE4				1163 	//Don't you %B3(12) have your own merchants?  Whatever, I'm not selling anything to you!
+
+#define WONT_SELL_NONSTDRACE1		1160 	//I don't have anything to do with your little gang..move along.
+#define WONT_SELL_NONSTDRACE2		1164 	//Members of your little "club" have ruined things around here..get lost!
+#define WONT_SELL_NONSTDRACE3		1165 	//I don't have anything to do with your damned club..move along.
+
+#define WONT_SELL_DEEDS_1			1166 	//Creatures like you make me sick..the things you do..get out of here Pagan!
+#define WONT_SELL_DEEDS_2			1167 	//After all the things you've done..the things you believe in..leave my shop!
+#define WONT_SELL_DEEDS_3			1168 	//Actions speak louder than beliefs, and I despise both your actions and all you believe in.
+#define WONT_SELL_DEEDS_4			1169 	//Get out of here now!
+#define WONT_SELL_DEEDS_5			1170 	//I am tolerant by nature..but infidels like you push me past my limit..get out!
+#define WONT_SELL_DEEDS_6			1171 	//I cannot abide you or your actions against all that is right..BE GONE!
+
 #define FACE_ACCEPTED				12028	//Facial features accepted.
 #define SPELL_LEVEL_TO_LOW			12048	//You will have to achieve level %1 before you can scribe the %2.
 #define ATTACKFAILED				12158	//%1 try to %2 %3, but %4!

=== modified file 'zone/client.h'
--- zone/client.h	2014-07-25 14:55:13 +0000
+++ zone/client.h	2014-08-29 21:26:55 +0000
@@ -577,7 +577,6 @@
     FACTION_VALUE   GetFactionLevel(uint32 char_id, uint32 npc_id, uint32 p_race, uint32 p_class, uint32 p_deity, int32 pFaction, Mob* tnpc);
 	int32	GetCharacterFactionLevel(int32 faction_id);
 	int32  GetModCharacterFactionLevel(int32 faction_id);
-	bool	HatedByClass(uint32 p_race, uint32 p_class, uint32 p_deity, int32 pFaction);
 
 	void	SetFactionLevel(uint32 char_id, uint32 npc_id, uint8 char_class, uint8 char_race, uint8 char_deity);
 	void    SetFactionLevel2(uint32 char_id, int32 faction_id, uint8 char_class, uint8 char_race, uint8 char_deity, int32 value, uint8 temp);

=== modified file 'zone/client_packet.cpp'
--- zone/client_packet.cpp	2014-08-15 18:12:09 +0000
+++ zone/client_packet.cpp	2014-08-29 21:42:18 +0000
@@ -90,7 +90,19 @@
 extern DBAsync *dbasync;
 
 typedef void (Client::*ClientPacketProc)(const EQApplicationPacket *app);
-
+
+static const char *wontsellhardcoded[]={
+"%s says 'It's %s like you that are ruining the continent...get OUT!'",
+"%s says 'Isn't there some kind of ordinance against %s crawling out from under their rocks?'",
+"%s says '%s like you don't have any place in my shop..now make way for welcome customers.'",
+"%s says 'I thought scumbag %s like you just stole whatever they need.  Now GET OUT!'",
+"%s says 'I don't have anything to do with %s..move along.'",
+"%s says 'I don't like to speak to %s much less sell to them!'",
+"%s says 'It's not enough that you %s have ruined your own land. Now get lost!'",
+"%s says 'I have something here that %s use..let me see...it's the EXIT, now get LOST!'",
+"%s says 'Don't you %s have your own merchants?  Whatever, I'm not selling anything to you!"
+};
+
 //Use a map for connecting opcodes since it dosent get used a lot and is sparse
 map<uint32, ClientPacketProc> ConnectingOpcodes;
 //Use a static array for connected, for speed
@@ -5431,6 +5443,7 @@
 	//Merchant_Click_Struct* mco=(Merchant_Click_Struct*)outapp->pBuffer;
 	int merchantid=0;
 	Mob* tmp = entity_list.GetMob(mc->npcid);
+	int primaryfaction;
 
 	if (tmp == 0 || !tmp->IsNPC() || tmp->GetClass() != MERCHANT)
 		return;
@@ -5462,30 +5475,11 @@
 		Message(0,"You cannot use a merchant right now.");
 		action = 0;
 	}
-	int factionlvl = GetFactionLevel(CharacterID(), tmp->CastToNPC()->GetNPCTypeID(), GetRace(), GetClass(), GetDeity(), tmp->CastToNPC()->GetPrimaryFaction(), tmp);
+	primaryfaction=tmp->CastToNPC()->GetPrimaryFaction();
+	int factionlvl = GetFactionLevel(CharacterID(), tmp->CastToNPC()->GetNPCTypeID(), GetRace(), GetClass(), GetDeity(), primaryfaction, tmp);
 	if(factionlvl >= 7)
 	{
-		char playerp[16] = "players";
-		if(HatedByClass(GetRace(), GetClass(), GetDeity(), tmp->CastToNPC()->GetPrimaryFaction()))
-			strcpy(playerp,GetClassPlural(this));
-		else
-			strcpy(playerp,GetRacePlural(this));
-
-		uint8 rand_ = rand() % 4;
-		switch(rand_){
-			case 1:
-				Message(0,"%s says 'It's not enough that you %s have ruined your own lands. Now get lost!'", tmp->GetCleanName(), playerp);
-				break;
-			case 2:
-				Message(0,"%s says 'I have something here that %s use... let me see... it's the EXIT, now get LOST!'", tmp->GetCleanName(), playerp);
-				break;
-			case 3:
-				Message(0,"%s says 'Don't you %s have your own merchants? Whatever, I'm not selling anything to you!'", tmp->GetCleanName(), playerp);
-				break;
-			default:
-				Message(0,"%s says 'I don't like to speak to %s much less sell to them!'", tmp->GetCleanName(), playerp);
-				break;
-		}
+		MerchantRejectMessage(tmp, primaryfaction);
 		action = 0;
 	}
 	if (tmp->Charmed())
@@ -13820,3 +13814,103 @@
 	// SideNote: Watching the slot translations, Unknown1 is showing '141' as well on certain item swaps.
 	// Manually looting a corpse results in a from '34' to '68' value for equipment items, '0' to '0' for inventory.
 }
+
+void Client::MerchantRejectMessage(Mob *merchant, int primaryfaction) 
+{
+uint16 race;
+uint16 pclass;
+uint16 deity;
+uint32 messageid;
+uint32 whichhardcoded;
+char   constructed_message[256];
+uint16 numhardcoded=sizeof(wontsellhardcoded)/sizeof(char *);
+int32  tmpFactionValue;
+FactionMods fmods;
+int32  lowestvalue;
+string tempstr;
+
+	// Pick which type of string to display from (4) types
+	//
+	// NONSTDRACE: Something like wolf form std messages
+	// DEEDS: Personal Faction issues std messages
+	// RCD: Race/Class std messages
+	// DEITY: Non standard to eqstr Deity messages
+	race=GetRace();
+	pclass=GetClass();
+	deity=GetDeity();
+
+	if (race > PLAYER_RACE_COUNT) // wolf form, etc.
+		{
+		messageid=MakeRandomInt(1,3);
+		switch (messageid)
+			{
+			case 1:
+				messageid=WONT_SELL_NONSTDRACE1;
+				break;
+			case 2:
+				messageid=WONT_SELL_NONSTDRACE2;
+				break;
+			case 3:
+				messageid=WONT_SELL_NONSTDRACE3;
+				break;
+			}
+		merchant->Say_StringID(messageid);
+		}
+	else
+		{
+		// If a faction is involved, get the data.
+		if(primaryfaction > 0)
+			{
+			if (database.GetFactionData(&fmods, pclass, race, deity,
+															primaryfaction))
+				{
+				tmpFactionValue = GetCharacterFactionLevel(primaryfaction);
+				lowestvalue=min(tmpFactionValue, min(fmods.class_mod, 
+									min(fmods.race_mod, fmods.deity_mod)));
+				}
+			}
+		// If no faction, or deeds score the worst, use deeds message
+		if (primaryfaction <= 0 || lowestvalue == tmpFactionValue)
+			{
+			messageid=MakeRandomInt(WONT_SELL_DEEDS_1, WONT_SELL_DEEDS_6);
+			merchant->Say_StringID(messageid);
+			}
+		// If Diety is the biggest motivator, use some custom messages
+		else if (lowestvalue == fmods.deity_mod)
+			{
+			// These messages use a %B3 format in eq_str.txt and I can't
+			// figure out how to send race/class,  So, hard coded those
+			// formats in am array at top, and using sprintf and GENERIC_SAY.
+			whichhardcoded=MakeRandomInt(0, numhardcoded-1);
+			tempstr = "worshippers of " + GetDeityName(deity);
+			Message(0,  (char *)wontsellhardcoded[whichhardcoded], 
+				merchant->GetCleanName(), tempstr.c_str());
+			}
+		else if (lowestvalue == fmods.race_mod)
+			{
+			messageid=MakeRandomInt(1,4);
+			switch (messageid)
+				{
+				case 1:
+					messageid=WONT_SELL_RACE1;
+					break;
+				case 2:
+					messageid=WONT_SELL_RACE2;
+					break;
+				case 3:
+					messageid=WONT_SELL_RACE3;
+					break;
+				case 4:
+					messageid=WONT_SELL_RACE4;
+					break;
+				}
+			merchant->Say_StringID(messageid, itoa(race));
+			}
+		else if (lowestvalue == fmods.class_mod)
+			{
+			messageid=MakeRandomInt(WONT_SELL_CLASS1,WONT_SELL_CLASS5);
+			merchant->Say_StringID(messageid, itoa(pclass));
+			}
+		}
+}
+

=== modified file 'zone/client_packet.h'
--- zone/client_packet.h	2013-05-02 18:37:13 +0000
+++ zone/client_packet.h	2014-08-29 17:40:36 +0000
@@ -288,3 +288,4 @@
 	void Handle_OP_MercenaryTimerRequest(const EQApplicationPacket *app);
 	void Handle_OP_OpenInventory(const EQApplicationPacket *app);
 	void Handle_OP_OpenContainer(const EQApplicationPacket *app);
+	void MerchantRejectMessage(Mob *merchant, int primaryfaction);

=== modified file 'zone/faction.cpp'
--- zone/faction.cpp	2013-07-09 15:28:09 +0000
+++ zone/faction.cpp	2014-08-29 20:53:09 +0000
@@ -1036,29 +1038,3 @@
 	}
 	return true;
 }
-
-bool Client::HatedByClass(uint32 p_race, uint32 p_class, uint32 p_deity, int32 pFaction)
-{
-	
-	bool Result = false;
-	_ZP(Client_GetFactionLevel);
-
-	int32 tmpFactionValue;
-	FactionMods fmods;
-
-    //First get the NPC's Primary faction
-	if(pFaction > 0)
-	{
-		//Get the faction data from the database
-		if(database.GetFactionData(&fmods, p_class, p_race, p_deity, pFaction))
-		{
-			tmpFactionValue = GetCharacterFactionLevel(pFaction);
-			tmpFactionValue += GetFactionBonus(pFaction);
-			tmpFactionValue += GetItemFactionBonus(pFaction);
-			CalculateFaction(&fmods, tmpFactionValue);
-			if(fmods.class_mod < fmods.race_mod)
-				Result = true;
-		}
-	}
-	return Result;
-}

=== modified file 'zone/mob.cpp'
--- zone/mob.cpp	2014-07-22 19:15:11 +0000
+++ zone/mob.cpp	2014-08-27 20:13:08 +0000
@@ -30,6 +30,7 @@
 #include "../common/rulesys.h"
 #include "../common/emu_opcodes.h"
 #include "../common/eq_packet_structs.h"
+#include "../common/deity.h"
 #include "zonedb.h"
 #include "../common/packet_dump.h"
 #include "../common/packet_functions.h"
@@ -4598,3 +4599,31 @@
 }
 
 
+string Mob::GetDeityName(uint8 deity)
+
+{
+	string name;
+
+	switch (deity)
+		{
+		case DEITY_AGNOSTIC:	name="AGNOSTIC"; break;
+		case DEITY_BRELL:		name="BRELL"; break;
+		case DEITY_CAZIC:		name="CAZIC"; break;
+		case DEITY_EROLLSI:		name="EROLLSI"; break;
+		case DEITY_BRISTLE:		name="BRISTLE"; break;
+		case DEITY_INNY:		name="INNY"; break;
+		case DEITY_KARANA:		name="KARANA"; break;
+		case DEITY_MITH:		name="MITH"; break;
+		case DEITY_PREXUS:		name="PREXUS"; break;
+		case DEITY_QUELLIOUS:	name="QUELLIOUS"; break;
+		case DEITY_RALLOS:		name="RALLOS"; break;
+		case DEITY_SOLUSEK:		name="SOLUSEK"; break;
+		case DEITY_TRIBUNAL:	name="TRIBUNAL"; break;
+		case DEITY_TUNARE:		name="TUNARE"; break;
+		case DEITY_BERTOX:		name="BERTOX"; break;
+		case DEITY_RODCET:		name="RODCET"; break;
+		case DEITY_VEESHAN:		name="VEESHAN"; break;
+		} 
+	
+	return name;
+}

=== modified file 'zone/mob.h'
--- zone/mob.h	2014-07-22 19:15:11 +0000
+++ zone/mob.h	2014-08-27 19:53:40 +0000
@@ -732,6 +732,7 @@
 	virtual void SetTarget(Mob* mob);
 	virtual inline float		GetHPRatio() const { return max_hp == 0 ? 0 : ((float)cur_hp/max_hp*100); }
 
+	string GetDeityName(uint8 deity);
 	bool IsLoggingEnabled() const { return(logging_enabled); }
 	void EnableLogging() { logging_enabled = true; }
 	void DisableLogging() { logging_enabled = false; }
Reply With Quote