View Single Post
  #7  
Old 06-25-2006, 05:55 PM
unicorn97211
Sarnak
 
Join Date: May 2006
Posts: 37
Default Latest Diff

Here is the latest diffs after making the recommended changes.

Code:
--- C:\Code\EQEmu800\zone\attack.cpp	Wed Jun 07 18:29:26 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\attack.cpp	Sun Jun 25 22:25:28 2006
@@ -1727,10 +1727,18 @@
 	
 	if (other == myowner)
 		return;
-	if (owner) { // Other has a pet, add him and it
+	if (owner) { // Other is a pet, add him and it
 		hate_list.Add(other, hate, 0, bFrenzy, !iBuffTic);
+		// EverHood 6/12/06
+		// Can't add a feigned owner to hate list
+		if(owner->IsClient()){
+			if(!owner->CastToClient()->GetFeigned()){
 		hate_list.Add(owner, 1, damage, false, !iBuffTic);
 	}
+		}else{
+			hate_list.Add(owner, 1, damage, false, !iBuffTic);
+		}
+	}
 	else { // Other has no pet, add other
 		hate_list.Add(other, hate, damage, false, !iBuffTic);
 	}
@@ -2068,9 +2077,21 @@
 		else
 			hate = damage; // normal aggro for everything else
 		
-		mlog(COMBAT__HITS, "Generating hate %d towards %s", hate, attacker->GetName());
-		// now add done damage to the hate list
+		// EverHood 6/12/06
+		if(attacker->IsClient()){
+			// check if attacker is feigned
+			if(attacker->CastToClient()->GetFeigned()){
+				hate = -1; // no hate for feigned attackers
+			}
+		}
+		
+		if(hate != -1){
+			// attacker generated some hate so 
+			// add damage done by attacker to the hate list
+			// mlog(COMBAT__HITS, "Generating %d hate towards %s", hate, attacker->GetName());
 		AddToHateList(attacker, hate, damage, true, false, iBuffTic);
+		}
+
 	}
     
 	if(damage > 0) {
--- C:\Code\EQEmu800\zone\client.cpp	Fri May 12 19:35:58 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\client.cpp	Sun Jun 25 17:55:21 2006
@@ -143,6 +143,8 @@
 	ooc_timer(1000),
 	shield_timer(500),
 	fishing_timer(8000),
+	// EverHood 6/16/06
+	forget_timer(0),
 #ifdef REVERSE_AGGRO
 	scanarea_timer(AIClientScanarea_delay),
 #endif
@@ -1763,13 +1765,25 @@
 }
 
 void Client::SetFeigned(bool in_feigned) {
+	feigned=in_feigned;
 	if (in_feigned)
 	{
+// EverHood 6/12/06
+// Live doesn't kill pets when owner feigns anymore
+// Hasn't since mobs quit agroing pets.
+// If you're worried necros will Feign and let pet solo
+// mobs turn this on in Features.h.
+// *Note: If a necro pet can solo an xp bearing mob while owner is FD
+//		  that mob needs it's stats bumped.
+#ifdef KILL_PET_ON_FEIGN
 		SetPet(0);
+#endif
 		SetHorseId(0);
 		entity_list.ClearFeignAggro(this);
+		forget_timer.Start(FeignMemoryDuration);
+	}else{
+		forget_timer.Disable();
 	}
-	feigned=in_feigned;
  }
 
 void Client::LogMerchant(Client* player, Mob* merchant, Merchant_Sell_Struct* mp, const Item_Struct* item, bool buying)
--- C:\Code\EQEmu800\zone\client.h	Wed Jun 07 18:29:26 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\client.h	Sun Jun 25 22:29:31 2006
@@ -512,7 +512,9 @@
 	inline void	SetBecomeNPCLevel(int8 level) { npclevel = level; }
 	bool	LootToStack(uint32 itemid);
 	void	SetFeigned(bool in_feigned);
-	inline bool    GetFeigned()	{ return(GetAppearance() != eaDead ? false : feigned); }
+	// EverHood 6/16/06
+	/// this cures timing issues cuz dead animation isn't done but server side feigning is?
+	inline bool    GetFeigned()	{return(feigned); }
 	EQStreamInterface* Connection() { return eqs; }
 #ifdef PACKET_PROFILER
 	void DumpPacketProfile() { if(eqs) eqs->DumpPacketProfile(); }
@@ -768,6 +770,9 @@
 	Timer	ooc_timer;
 	Timer	shield_timer;
 	Timer	fishing_timer;
+	// EverHood 6/16/06
+	// our 2 min everybody forgets you timer
+	Timer	forget_timer;
 #ifdef REVERSE_AGGRO
 	Timer	scanarea_timer;
 #endif
--- C:\Code\EQEmu800\zone\client_process.cpp	Mon Apr 17 06:59:14 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\client_process.cpp	Sun Jun 25 01:29:00 2006
@@ -533,7 +533,8 @@
 #ifdef REVERSE_AGGRO
 	//At this point, we are still connected, everything important has taken
 	//place, now check to see if anybody wants to aggro us.
-	if(ret && scanarea_timer.Check()) {
+	// Everhood 6/15/06 - only if client is not feigned
+	if(ret && !GetFeigned() && scanarea_timer.Check()) {
 		entity_list.CheckClientAggro(this);
 	}
 #endif	
@@ -576,7 +577,12 @@
 		}
 		OnDisconnect(true);
 	}
-	
+	// EverHood Feign Death 2 minutes and zone forgets you
+	if (forget_timer.Check()) {
+		forget_timer.Disable();
+		entity_list.ClearZoneFeignAggro(this);
+		Message(0,"Your enemies have forgotten you!");
+	}
 	
 	return ret;
 }
--- C:\Code\EQEmu800\zone\entity.cpp	Wed May 31 21:13:32 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\entity.cpp	Sun Jun 25 21:28:04 2006
@@ -2471,12 +2471,31 @@
 	iterator.Reset();
 	while(iterator.MoreElements())
 	{
-		if (iterator.GetData()->CastToNPC()->CheckAggro(targ))
+		if (iterator.GetData()->CheckAggro(targ))
 		{
-			iterator.GetData()->CastToNPC()->RemoveFromHateList(targ);
-			if (iterator.GetData()->CastToMob()->GetLevel() >= 35)
-				iterator.GetData()->CastToNPC()->SetFeignMemory(targ->CastToMob()->GetName());
+			iterator.GetData()->RemoveFromHateList(targ);
+			// EverHood 6/24/06
+			// For client targets if the mob that hated us is 35+ 
+			// there is a 3 outta 5 chance he adds us to feign memory
+			if(targ->IsClient()){
+				if (iterator.GetData()->GetLevel() >= 35){
+					if(MakeRandomInt(1,100)<=60){
+						iterator.GetData()->AddFeignMemory(targ->CastToClient());
 		}
+				}
+			}
+		}
+		iterator.Advance();
+	}
+}
+// EverHood 6/17/06
+void EntityList::ClearZoneFeignAggro(Client* targ)
+{
+	LinkedListIterator<NPC*> iterator(npc_list);
+	iterator.Reset();
+	while(iterator.MoreElements())
+	{
+		iterator.GetData()->RemoveFromFeignMemory(targ);
 		iterator.Advance();
 	}
 }
--- C:\Code\EQEmu800\zone\entity.h	Wed May 31 21:13:32 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\entity.h	Sun Jun 18 02:07:29 2006
@@ -251,6 +251,8 @@
 
     void    Process();
 	void	ClearFeignAggro(Mob* targ);
+	// Everhood 6/17/06
+	void	ClearZoneFeignAggro(Client* targ);
 	
 	bool	Fighting(Mob* targ);
 	void    RemoveFromHateLists(Mob* mob, bool settoone = false);
--- C:\Code\EQEmu800\zone\features.h	Sat Mar 18 21:09:26 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\features.h	Sun Jun 25 22:35:20 2006
@@ -207,7 +207,8 @@
 	AIassistcheck_delay = 3000,		//now often a fighting NPC will yell for help
 	ClientProximity_interval = 1000,
 	Tribute_duration = 600000,
-	ZoneTimerResolution = 3			//sleep time between zone main loop runs (milliseconds)
+	ZoneTimerResolution = 3,			//sleep time between zone main loop runs (milliseconds)
+	FeignMemoryDuration = 120000 // EverHood - Duration player must feign death to clear zonewide agro.
 };
 
 enum {	//some random constants
@@ -262,7 +263,7 @@
 #define MIN_FACTION -1500
 
 //The Level Cap:
-#define LEVEL_CAP 65		//hard cap is 127
+#define LEVEL_CAP 70	//hard cap is 127
 
 //the square of the maximum range at whihc you could possibly use NPC services (shop, tribute, etc)
 #define USE_NPC_RANGE2 200*200		//arbitrary right now
--- C:\Code\EQEmu800\zone\MobAI.cpp	Wed May 31 21:13:32 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\MobAI.cpp	Sun Jun 25 21:55:28 2006
@@ -938,16 +938,30 @@
 				if (cur_wp_x == GetX() && cur_wp_y == GetY()) 
 				{	// are we there yet? then stop
 					mlog(AI__WAYPOINTS, "We have reached waypoint %d (%.3f,%.3f,%.3f) on grid %d", cur_wp, GetX(), GetY(), GetZ(), GetGrid());
 					SetWaypointPause();
 					SetAppearance(eaStanding, false);
 					SetMoving(false);
 					SendPosition();
+					// EverHood - wipe feign memory since we reached our first waypoint
+					if(cur_wp==1){
+						ClearFeignMemory();
+					}
 				} 
@@ -969,6 +983,8 @@
      {
 		if(moved) {
 			mlog(AI__WAYPOINTS, "Reached guard point (%.3f,%.3f,%.3f)", guard_x, guard_y, guard_z);
+			// EverHood 6/18/06
+			ClearFeignMemory();
 			moved=false;
 			SetMoving(false);
 			SendPosition();
Reply With Quote