Code:
--- C:\Code\EQEmu800\zone\npc.cpp Wed May 31 21:13:32 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\npc.cpp Sun Jun 25 01:29:00 2006
@@ -233,8 +233,6 @@
pet_spell_id = 0;
delaytimer = false;
- feign_memory = "0";
- forgetchance = 0;
attack_event = false;
attack_speed = d->attack_speed;
@@ -481,30 +479,19 @@
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() && !feign_memory_list.empty()) {
+ std::list<int32>::iterator RememberedCharID;
+ for (RememberedCharID=feign_memory_list.begin(); RememberedCharID != feign_memory_list.end(); RememberedCharID++)
+ {
+ Client* remember_client = entity_list.GetClientByCharID(*RememberedCharID);
+ if (!remember_client->GetFeigned())
{
- if (!remember_client->CastToClient()->GetFeigned())
- {
- AddToHateList(remember_client,1);
- SetFeignMemory("0");
- forgetchance = 0;
- }
- else if (rand()%100 <= forgetchance)
- {
- SetFeignMemory("0");
- forgetchance = 0;
- }
- else
- {
- forgetchance += 1;
- }
+ AddToHateList(remember_client->CastToMob(),1);
+ feign_memory_list.remove(*RememberedCharID);
+ break;
}
- else
- {
- SetFeignMemory("0");
}
}
@@ -519,6 +506,22 @@
return true;
}
+ // EverHood 6/14/06 - FD memory
+ void NPC::AddFeignMemory(Client* attacker) {
+ feign_memory_list.push_back(attacker->CharacterID());
+ }
+ void NPC::RemoveFromFeignMemory(Client* attacker){
+ if(!feign_memory_list.empty()){
+ int32 attacker_charid = attacker->CharacterID();
+ feign_memory_list.remove(attacker_charid);
+ }
+ }
+ void NPC::ClearFeignMemory(){
+ if(!feign_memory_list.empty()){
+ feign_memory_list.clear();
+ }
+ }
+
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 25 01:29:00 2006
@@ -161,9 +161,11 @@
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;}
-
- inline const char* GetFeignMemory() { return feign_memory; }
+ // 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();
float org_x, org_y, org_z, org_heading;
@@ -251,8 +253,8 @@
int16 max_dmg;
int16 min_dmg;
- const char* feign_memory;
- int8 forgetchance;
+ // EverHood 6/14/06
+ std::list<int32> feign_memory_list;
//pet crap:
int16 pet_spell_id;