|
|
 |
 |
 |
 |
|
 |
 |
|
 |
 |
|
 |
|
Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum) |

06-19-2006, 06:57 PM
|
|
tested on veeshan with a 70 necro in FG by the way.
|

06-19-2006, 10:49 PM
|
Dragon
|
|
Join Date: Jan 2004
Location: LasShithole, NV
Posts: 520
|
|
with my sk, pull with snare.. FD let other mobs path back, the one that is snared is locked in place.. once others are back at spawn point stand and snared mob follows you.
__________________
Perfect quote from another site: it's immature pricks who refuse to read the numerous stickies in every forum pointing out what to do and what not to do that get flamed. Grow up and learn to do your fucking homework before opening your cake hole, junior. EQEmu doesn't like you anymore, and that's why you're getting errors. So go away.
__________________
|
 |
|
 |

06-20-2006, 01:47 AM
|
Fire Beetle
|
|
Join Date: Apr 2006
Posts: 3
|
|
My account on Live is no longer active so I cannot possibly test any of this, but from memory as a necro...
When I would snare and then FD, mobs with a static spawn point would linger a moment (a predictable amount of time according to the specific mob involved) and then return. Occasionally there are specific mobs that want to "hold hands" for a little (or a lot) longer before they give up.
A relevant instance of this, from memory, was hunting the guards in Felwithe, specifically the first split. Snare one (with Dooming Darkness). Both guards always came. FD in the entrance hall once they were nearly on top of you. They both linger a moment and then they both turn to leave, but one of them moves far faster then the other. (Note: Occasionally the snared mob would stay just a little longer than the unsnared mob before attempting to return to spawn.) This enabled one to be back at spawn before the other ever reaches halfway back. Stand. Kill the snared one who immediately comes back for you and you've got your mobs split.
Having said all of that, I have also had instances where static spawn mobs still taking damage would refuse to go back at all. They wouldn't attack me, but they'd just stand there for quite some time after their buddies had all gone back home. They would usually return to spawn after my snare ran out. I believe (and have absolutely no facts to back this hypothesis up) that this phenomenon is related to the fact that our snares are also DOTs and that they stick around because of the damage and not because of the snare itself. Or maybe a combination of the two? But this was a rare occurrence on static spawned mobs. Nearly all of them after a period of time give up and go back home.
The same cannot be said for "roaming" mobs. Don't confuse this with "patrolling" mobs. Roaming mobs nearly always stayed right on top of me after a snare followed by a FD. This was useful for soloing in places like the Grey where most of the mobs around the perimeter of the zone roam around. I could snare one and it (usually a few) would come running. I could FD and whichever mob I had snared would stay put while after a few moments its friends would begin to roam around again. The bad thing is that the roaming mobs don't like to forget you as easily as patrolling or static spawned mobs, so I usually had to wait until my snare had worn off to stand back up and even then the mob's friends would sometimes come back to haunt me, seemingly from clear across the zone even!
Patrolling mobs would sometimes stay with me, but most often not and they tended to be a little slower than the other types of mobs about returning to their patrol when snared. They behaved much like statically spawned mobs.
From memory, there were also entire zones (or segments of a zone) that seemed to behave just a little different from what I would expect. Mobs that took significantly longer to forget about me or mobs that liked to cuddle longer than what I would expect. There are places where "mob mentality" rules and no matter what you do, you're coming home with multiples. It was all very complex and involved character level, pathing in that location, terrain (or line-of-sight), mob assist, and so on and so forth. There have been a million guides written up about the nuances of leveling whichever character in this or that particular place.
Anyhow. This is all from memory and having not played in a couple years that memory could be a little rusty. It will nonetheless give those who still have live accounts something more substantial to test on, rather than testing on a few mobs in very specific (unique) locations and calling it the night.
|
 |
|
 |
 |
|
 |

06-20-2006, 02:02 PM
|
Demi-God
|
|
Join Date: Mar 2004
Posts: 1,066
|
|
Quote:
believe (and have absolutely no facts to back this hypothesis up) that this phenomenon is related to the fact that our snares are also DOTs and that they stick around because of the damage and not because of the snare itself. Or maybe a combination of the two? But this was a rare occurrence on static spawned mobs.
|
While I'm not 100% certain either, I'm going to have to take the other side and say it's because of the snare. Most snares take enough speed off a mob that if it reduces to walk-speed, it's standing still. Once a mob is no longer chasing you, it slows back down to walk-speed. It can't return to its spawn point because it can't move when it's on walk speed with the snare still effective.
It made for a nice revenge when a monk tried to FD train a skeleton on me. I positioned myself on top of the monk, rooted the skeleton, cast Ensnare on it, then backed up and proceeded to sit and begin camping out. While the countdown was in progress, I informed the monk that once I was camped out of the picture, the skelly would be on walk speed, and my Ensnare would effectively make the skelly stand still. I then informed Mr. Monk that the Ensnare was 14 minutes long, so he'd best get comfortable. Ain't I a stinker 
__________________
<idleRPG> Rogean ate a plate of discounted, day-old sushi. This terrible calamity has slowed them 0 days, 15:13:51 from level 48.
|
 |
|
 |
 |
|
 |

06-21-2006, 01:56 PM
|
Sarnak
|
|
Join Date: May 2006
Posts: 37
|
|
Unified Diff
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 18 10:30:31 2006
@@ -1727,10 +1727,14 @@
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->CastToClient()->GetFeigned()){
hate_list.Add(owner, 1, damage, false, !iBuffTic);
}
+ }
else { // Other has no pet, add other
hate_list.Add(other, hate, damage, false, !iBuffTic);
}
@@ -1741,8 +1745,9 @@
myowner->hate_list.Add(other, 1, 0, bFrenzy);
}
if (!wasengaged) {
- if(IsNPC() && other->CastToClient())
+ if(IsNPC() && other->CastToClient()){
parse->Event(EVENT_AGGRO, this->GetNPCTypeID(), 0, CastToNPC(), other);
+ }
AI_Event_Engaged(other, iYellForHelp);
adverrorinfo = 8293;
}
@@ -2068,9 +2073,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 18 03:11:40 2006
@@ -143,6 +143,8 @@
ooc_timer(1000),
shield_timer(500),
fishing_timer(8000),
+ // EverHood 6/16/06
+ forget_timer(120000),
#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(120000);
+ }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 Mon Jun 19 14:52:37 2006
@@ -512,7 +512,11 @@
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); }
+
+ //inline bool GetFeigned() { return(GetAppearance() != eaDead ? false : feigned); }
EQStreamInterface* Connection() { return eqs; }
#ifdef PACKET_PROFILER
void DumpPacketProfile() { if(eqs) eqs->DumpPacketProfile(); }
@@ -768,11 +772,13 @@
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
Timer tribute_timer;
-
#ifdef PACKET_UPDATE_MANAGER
UpdateManager update_manager;
#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 18 02:07:29 2006
@@ -534,8 +534,11 @@
//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 check prox agro if we are not feigned
+ if(!feigned){
entity_list.CheckClientAggro(this);
}
+ }
#endif
if (client_state != CLIENT_LINKDEAD && (client_state == CLIENT_ERROR || client_state == DISCONNECTED || client_state == CLIENT_KICKED || !eqs->CheckState(ESTABLISHED))) {
@@ -576,7 +579,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 your aggressions.");
+ }
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 18 09:54:40 2006
@@ -2475,8 +2475,24 @@
{
iterator.GetData()->CastToNPC()->RemoveFromHateList(targ);
if (iterator.GetData()->CastToMob()->GetLevel() >= 35)
- iterator.GetData()->CastToNPC()->SetFeignMemory(targ->CastToMob()->GetName());
+ // EverHood 6/14/06
+ // the mob that hated us is 35+ so 3 outta 5 chance
+ // he adds us to its feign memory
+ if(((float)rand()/RAND_MAX)*100 < 40){
+ iterator.GetData()->CastToNPC()->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\MobAI.cpp Wed May 31 21:13:32 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\MobAI.cpp Sun Jun 18 13:33:22 2006
@@ -942,6 +942,10 @@
SetAppearance(eaStanding, false);
SetMoving(false);
SendPosition();
+ // EverHood - wipe feign memory since we reached our first waypoint
+ if(cur_wp==1){
+ ClearFeignMemory();
+ }
}
else
{ // not at waypoint yet, so keep moving
@@ -969,6 +973,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();
|
 |
|
 |
 |
|
 |

06-21-2006, 01:57 PM
|
Sarnak
|
|
Join Date: May 2006
Posts: 37
|
|
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:
|
 |
|
 |

06-21-2006, 02:01 PM
|
Sarnak
|
|
Join Date: May 2006
Posts: 37
|
|
Above are the diffs for the Feign Death changes. I just resubscribed to live to do testing on the issue of "can snared mobs walk". I will be testing several mobs in several zones and will post my results. Should we start a seperate thread for this debate since it's not covered by the proposed fixes listed in this one? (The FD fixes in this thread do not effect movement speed in any way)
I used WinMerge for the first time to generate the unified diff so if I did something wrong , let me know.
|
Thread Tools |
|
Display Modes |
Hybrid Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 01:18 AM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |