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: