View Single Post
  #14  
Old 06-21-2006, 01:57 PM
unicorn97211
Sarnak
 
Join Date: May 2006
Posts: 37
Default Unified Diff (Cont)

Code:
--- C:\Code\EQEmu800\zone\npc.cpp	Wed May 31 21:13:32 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\npc.cpp	Mon Jun 19 14:52:37 2006
@@ -481,30 +481,22 @@
     if (IsStunned()||IsMezzed())
 	    return true;
 
-	//Feign Death Memory
-	if (forget_timer.Check() && strstr(GetFeignMemory(),"0") == NULL) {
-		Client* remember_client = entity_list.GetClientByName(GetFeignMemory());
-		if (remember_client != 0)
+	// EverHood - 6/14/06
+	// Improved Feign Death Memory
+	if (forget_timer.Check()) {
+		LinkedListIterator<const char*> iterator(feign_memory_list);
+		iterator.Reset();
+		while(iterator.MoreElements())
 		{
+			Client* remember_client = entity_list.GetClientByName(iterator.GetData());
 			if (!remember_client->CastToClient()->GetFeigned())
 			{
 				AddToHateList(remember_client,1);
-				SetFeignMemory("0");
-				forgetchance = 0;
+				iterator.RemoveCurrent();
+				// Personal humor
+				Emote("realizes %s wasn't really dead",remember_client->GetName());
 			}
-			else if (rand()%100 <= forgetchance)
-			{
-				SetFeignMemory("0");
-				forgetchance = 0;
-			}
-			else
-			{
-				forgetchance += 1;
-			}
-		}
-		else
-		{
-			SetFeignMemory("0");
+			iterator.Advance();
 		}
 	}
 	
@@ -519,6 +511,32 @@
     return true;
 }
 
+	// EverHood 6/14/06 - FD memory 
+	void   NPC::AddFeignMemory(Client* attacker) {
+		feign_memory_list.Insert(attacker->CastToMob()->GetName());
+		Emote("is suspicious of %ss unexpected death.",attacker->GetName());
+	}
+	void   NPC::RemoveFromFeignMemory(Client* attacker){
+		LinkedListIterator<const char*> iterator(feign_memory_list);
+		iterator.Reset();
+		while(iterator.MoreElements())
+		{
+			if(iterator.GetData() == attacker->GetName()){
+				// Leaving this debug in is kinda interesting...
+				this->CastToMob()->Emote("loses interest in %s.",attacker->GetName());
+				iterator.RemoveCurrent();
+			}
+			iterator.Advance();
+		}
+	}
+	void   NPC::ClearFeignMemory(){
+		if(feign_memory_list.Count()>0){
+			feign_memory_list.Clear();
+			// Leaving this debug in is kinda interesting...
+			this->CastToMob()->Emote("is no longer suspicious of the dead.");
+		}
+	}
+
 int32 NPC::CountLoot() {
 	return(itemlist.size());
 }
--- C:\Code\EQEmu800\zone\npc.h	Sun Mar 19 20:04:48 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\npc.h	Sun Jun 18 01:55:57 2006
@@ -161,7 +161,15 @@
     bool    IsOnHatelist(Mob*p) { return hate_list.IsOnHateList(p);}
 
 	void	SetNPCFactionID(sint32 in) { npc_faction_id = in; database.GetFactionIdsForNPC(npc_faction_id, &faction_list, &primary_faction); }
-	void	SetFeignMemory(const char* num) {feign_memory = num;}
+	// EverHood 6/14/06
+	// Mobs need to be able to remember more than one feigned attacker
+	void	AddFeignMemory(Client* attacker);
+	void	RemoveFromFeignMemory(Client* attacker);
+	void	ClearFeignMemory();
+
+	void	SetFeignMemory(const char* num) {
+		feign_memory = num;
+	}
 
 	inline const char*    GetFeignMemory()	{ return feign_memory; }
 
@@ -251,7 +259,11 @@
 	
 	int16	max_dmg;
 	int16	min_dmg;
+	// EverHood 6/14/06
+	LinkedList<const char*> feign_memory_list;
+
 	const char*	feign_memory;
+
 	int8    forgetchance;
 	
 	//pet crap:
Reply With Quote