PDA

View Full Version : So you're server doesn't have fear


Cvinion
04-29-2008, 05:58 PM
So as it stands now Fear is the most overpowered spell in terms of EQEMU, and from my experience I have had multiple servers remove fear from the game, I was wondering what does the community think is a good fix for this fear problem that stands as a daunting task for the necromancer community.

Also I'de love to hear what other servers have done to fix, re-mold, or change the necromancer and his fear ability to better round off the class, I know some servers have some pretty amazing things working and im trying to brainstorm ideas.

So thank you in advance, to the community who is always there to help.

ChaosSlayer
04-29-2008, 06:26 PM
from what I know there is no fixing to fear unless world wide (all zones) fear nodes pathing is implemented, which is at beast very tideious work.
or some algoritm is writen which would cuase to mobs to intelegently "run way" wihotu goign throw walls

as far as necros go - on my server necro is redesigned in such way that it is not a class who makes its power stand on fear kiting :cool:

Cvinion
04-29-2008, 07:05 PM
Thanks, would you mind extrapolating a little on that so i can get some ideas?

Wiz
04-29-2008, 08:00 PM
On Shards of Dalaya we have fear code that only uses the base map files and will work in any zone with one. It would require a good deal of adaptation to work on non-SoD EQEmu but I'm willing to share it if you like.

jenco420
04-29-2008, 08:09 PM
dude that woulld be awsome as hell ~.~

Wiz
04-29-2008, 08:32 PM
Here are all the vital snippets. Like I said though, it'll take a good bit of adaption, but this contains everything you need to get fear working. With it a feared creature will flee in a random direction, avoiding walls, cliffs and pits.


void Mob::CalculateNewFearpoint()
{
int loop = 0;
float ranx, rany, ranz;
curfp = false;
while (loop < 100) //Max 100 tries
{
int ran = 250 - (loop*2);
loop++;
ranx = GetX()+rand()%ran-rand()%ran;
rany = GetY()+rand()%ran-rand()%ran;
ranz = FindGroundZ(ranx,rany);
if (ranz == -999999)
continue;
float fdist = ranz - GetZ();
if (fdist >= -12 && fdist <= 12 && CheckCoordLosNoZLeaps(GetX(),GetY(),GetZ(),ranx,ra ny,ranz))
{
curfp = true;
break;
}
}
if (curfp)
{
fear_walkto_x = ranx;
fear_walkto_y = rany;
fear_walkto_z = ranz;
}
else //Break fear
{
BuffFadeByEffect(SE_Fear);
}
}



float Mob::FindGroundZ(float new_x, float new_y, float z_offset)
{
float ret = -999999;
if (zone->map != 0)
{
NodeRef pnode = zone->map->SeekNode( zone->map->GetRoot(), new_x, new_y );
if (pnode != NODE_NONE)
{
VERTEX me;
me.x = new_x;
me.y = new_y;
me.z = z_pos+z_offset;
VERTEX hit;
FACE *onhit;
float best_z = zone->map->FindBestZ(pnode, me, &hit, &onhit);
if (best_z != -999999)
{
ret = best_z;
}
}
}
return ret;
}



bool Entity::CheckCoordLosNoZLeaps(float cur_x, float cur_y, float cur_z, float trg_x, float trg_y, float trg_z, float perwalk)
{
if(zone->map == NULL) {
return(true);
}
VERTEX myloc;
VERTEX oloc;
VERTEX hit;

myloc.x = cur_x;
myloc.y = cur_y;
myloc.z = cur_z+5;

oloc.x = trg_x;
oloc.y = trg_y;
oloc.z = trg_z+5;

if (myloc.x == oloc.x && myloc.y == oloc.y && myloc.z == oloc.z)
return true;

FACE *onhit;

if (!zone->map->LineIntersectsZoneNoZLeaps(myloc,oloc,perwalk,&hit,&onhit))
return true;
return false;
}



bool Map::LineIntersectsZoneNoZLeaps(VERTEX start, VERTEX end, float step_mag, VERTEX *result, FACE **on) {
float z = -999999;
VERTEX step;
VERTEX cur;
cur.x = start.x;
cur.y = start.y;
cur.z = start.z;

step.x = end.x - start.x;
step.y = end.y - start.y;
step.z = end.z - start.z;
float factor = step_mag / sqrt(step.x*step.x + step.y*step.y + step.z*step.z);

step.x *= factor;
step.y *= factor;
step.z *= factor;

int steps = 0;

if (step.x > 0 && step.x < 0.001f)
step.x = 0.001f;
if (step.y > 0 && step.y < 0.001f)
step.y = 0.001f;
if (step.z > 0 && step.z < 0.001f)
step.z = 0.001f;
if (step.x < 0 && step.x > -0.001f)
step.x = -0.001f;
if (step.y < 0 && step.y > -0.001f)
step.y = -0.001f;
if (step.z < 0 && step.z > -0.001f)
step.z = -0.001f;

NodeRef cnode, lnode;
lnode = NULL;
int i = 0;
//while we are not past end
//always do this once, even if start == end.
while(cur.x != end.x || cur.y != end.y || cur.z != end.z)
{
steps++;
cnode = SeekNode(GetRoot(), cur.x, cur.y);
if (cnode == NODE_NONE)
{
return(true);
}
VERTEX me;
me.x = cur.x;
me.y = cur.y;
me.z = cur.z;
VERTEX hit;
FACE *onhit;
float best_z = zone->map->FindBestZ(cnode, me, &hit, &onhit);
float diff = best_z-z;
diff *= sign(diff);
if (z == -999999 || best_z == -999999 || diff < 12.0)
z = best_z;
else
return(true);
//look at current location
if(cnode != NODE_NONE && cnode != lnode) {
if(LineIntersectsNode(cnode, start, end, result, on))
{
return(true);
}
lnode = cnode;
}

//move 1 step
if (cur.x != end.x)
cur.x += step.x;
if (cur.y != end.y)
cur.y += step.y;
if (cur.z != end.z)
cur.z += step.z;

//watch for end conditions
if ( (cur.x > end.x && end.x >= start.x) || (cur.x < end.x && end.x <= start.x) || (step.x == 0) ) {
cur.x = end.x;
}
if ( (cur.y > end.y && end.y >= start.y) || (cur.y < end.y && end.y <= start.y) || (step.y == 0) ) {
cur.y = end.y;
}
if ( (cur.z > end.z && end.z >= start.z) || (cur.z < end.z && end.z < start.z) || (step.z == 0) ) {
cur.z = end.z;
}
}

//walked entire line and didnt run into anything...
return(false);
}

krusher
04-29-2008, 10:08 PM
Long time no see man... How ya been?

Hope your well.

Krusher

TheLieka
04-29-2008, 10:25 PM
Thanks for the code Wiz. I can't wait to play with it. If I can get it "adapted", I'll post it up for everyone.

Thanks again!

Dax

GeorgeS
04-30-2008, 07:33 AM
Please have a look at the code - and see if it can be adapated to current, then this would be a great addition to base code.

Thanks Wiz

GeorgeS

moydock
04-30-2008, 06:39 PM
Yeah this would be incredible! Good luck on the adaption.

Derision
05-24-2008, 08:09 AM
I don't know if anyone has already integrated Wiz's fear code, however I spent a few hours last night
and this morning on it.

Patch against 1108: http://www.rama.demon.co.uk/wizfear.patch

Full 1108 source with Wiz's fear code: http://www.rama.demon.co.uk/EQEmu-0.7.0-1108-WithWizFear.tar.gz

I only did limited testing on it, so use at your own risk :)

Any bugs are my fault. Kudos to Wiz for releasing his source.

jenco420
05-24-2008, 10:29 AM
This works great acually =). Testing it out now on my server. Thanks man.

jenco420
05-24-2008, 11:25 AM
the only thing i'm having trouble with atm, is players acually getting feared. I'm looking into that now.

Derision
05-24-2008, 01:49 PM
the only thing i'm having trouble with atm, is players acually getting feared. I'm looking into that now.

I never tested PVP fear, but I've looked at the code a bit more. There is some
code to disallow client-to-client fear, however with that commented out, you get
a message saying your are feared, but you actually aren't.

I'm speculating that that the server needs to send an OP_Fear packet to the
client to tell it it's feared, however I don't see such an opcode anywhere in
the source or .conf files.

Maybe if someone had a packet trace of a player being feared from back when the 6.2 client or Titanium where the live clients, that may help, or maybe it is not an opcode issue at all.

xxarthurxx
05-24-2008, 04:07 PM
Wiz, i would just like to thank you for your generosity, really very kind :D

jenco420
05-24-2008, 05:04 PM
well fear is up and running on CKV_EQ if anyone wants to look at it.. The client side (i.e i get feared by naggy but nothing happens)is still not working but i'm sure one of us will figure it out eventually >.<

Maybe i'll just add back in the stun portion for PC fear /shrug

Wiz
05-28-2008, 06:15 PM
I never tested PVP fear, but I've looked at the code a bit more. There is some
code to disallow client-to-client fear, however with that commented out, you get
a message saying your are feared, but you actually aren't.

I'm speculating that that the server needs to send an OP_Fear packet to the
client to tell it it's feared, however I don't see such an opcode anywhere in
the source or .conf files.

Maybe if someone had a packet trace of a player being feared from back when the 6.2 client or Titanium where the live clients, that may help, or maybe it is not an opcode issue at all.

SOD has player fear, the packet is an apperancepacket that toggles "player loses control" on, but this is for an old client version, so I don't know if its applicable.


void LoseControl(bool interrupt_spells) { if (interrupt_spells) { InterruptSpell(); StopSong(); } Message_StringID(0,1461); SendAppearancePacket(14, 102); }
void RegainControl(bool interrupt_spells) { if (interrupt_spells) { InterruptSpell(); StopSong(); } SendAppearancePacket(14, 100); }


We've disabled the actual fear movement for the moment because its a lot more troublesome to keep players from going through walls than it is to do npcs, but if anyone wants to toy with it, it basically uses the same code with this movement function:


bool Client::FearMovement(float x, float y, float z)
{
if (IsRooted() || Casting())
{
SetRunAnimSpeed(0);
return true;
}
float nx = this->x_pos;
float ny = this->y_pos;
float nz = this->z_pos;
float vx, vy, vz;
float vb;
float speed = 0.35f;
float speed_mod = ((float)(speed*spellbonuses->movementspeed))/100.0f;
speed += speed_mod;

if (x_pos == x && y_pos == y)
{
SetRunAnimSpeed(0);
return false;
}

bool ret = true;

SetHeading(CalculateHeadingToTarget(x, y) * 8);

// --------------------------------------------------------------------------
// 1: get Vector AB (Vab = B-A)
// --------------------------------------------------------------------------
vx = x - nx;
vy = y - ny;
vz = z - nz;

speed *= 30; //First we recalc into clientside units. 1.2 = 36, etc.
SetRunAnimSpeed(speed);

//Now we recalc it into units per second moved.
speed *= 0.76;

//Divide by ten to account for movement happening every 0.1
speed /= 10;

// --------------------------------------------------------------------------
// 2: get unit vector
// --------------------------------------------------------------------------
vb = speed / sqrt (vx*vx + vy*vy);

if (vb >= 0.5) //Stop before we've reached the point in case it's too close to a wall
{
/*
x_pos = x;
y_pos = y;
if (zone->map == 0)
{
z_pos = z;
}
else
{
NodeRef pnode = zone->map->SeekNode( zone->map->GetRoot(), x_pos, y_pos );
if (pnode == NODE_NONE)
{
z_pos = z;
}
else
{
VERTEX me;
me.x = x_pos;
me.y = y_pos;
me.z = z + GetHeight();
VERTEX hit;
FACE *onhit;
float best_z = zone->map->FindBestZ(pnode, me, &hit, &onhit);
if (best_z != -999999 && fdiff(best_z,GetZ())<=12.0)
{
z_pos = best_z + 1;
}
else
{
z_pos = z;
}
}
}
*/
fear_walkto_x = x_pos;
fear_walkto_y = y_pos;
fear_walkto_z = z_pos;
ret = false;
}
else
{
// --------------------------------------------------------------------------
// 3: destination = start plus movementvector (unitvektor*speed)
// --------------------------------------------------------------------------
x_pos = x_pos + vx*vb;
y_pos = y_pos + vy*vb;
if (zone->map == 0)
{
z_pos = z_pos + vz*vb;
}
else
{
NodeRef pnode = zone->map->SeekNode( zone->map->GetRoot(), x_pos, y_pos );
if (pnode == NODE_NONE)
{
z_pos = z_pos + vz*vb;
}
else
{
VERTEX me;
me.x = x_pos;
me.y = y_pos;
me.z = z_pos + vz*vb + GetHeight();
VERTEX hit;
FACE *onhit;
float best_z = zone->map->FindBestZ(pnode, me, &hit, &onhit);
if (best_z != -999999 && fdiff(best_z,GetZ())<=12.0)
{
z_pos = best_z + 1;
}
else
{
z_pos = z_pos + vz*vb;
}
}
}
}
APPLAYER* app = new APPLAYER(OP_MobUpdate, sizeof(SpawnPositionUpdate_Struct));
SpawnPositionUpdate_Struct* spu = (SpawnPositionUpdate_Struct*)app->pBuffer;
MakeSpawnUpdate(spu);
app->priority = 6;
entity_list.QueueClients(this,app);
safe_delete(app);
return ret;
}


No guarantees on whether any of those packets will work with newer versions than 0.5.3

Wiz
05-28-2008, 06:24 PM
We also do player charm in a similar way, by toggling 'client loses control' and forcing movement with MobUpdate packets. I haven't found any other way to move a player, and while it isn't entirely smooth, it works fine.

Derision
05-28-2008, 06:27 PM
We've disabled the actual fear movement for the moment because its a lot more troublesome to keep players from going through walls than it is to do npcs,

Thanks Wiz. I'll have a look to see if those AppearancePackets work with 6.2/Titanium. Why is it more troublesome to keep players from going through walls than it is for NPCs ?

Wiz
05-28-2008, 06:31 PM
Thanks Wiz. I'll have a look to see if those AppearancePackets work with 6.2/Titanium. Why is it more troublesome to keep players from going through walls than it is for NPCs ?

Client movement is more unpredictable, partly because of lag / sync and partly because of the forced client physics - if a npc goes halfway into a wall it wont be affected, but a player might be teleported to the safe spot or fall through the world. The problem gets worse when you have .map files with LOS glitches that can send a player through a solid object.

I've got it working in 99% of all areas, but we still had some problem places, particularily in zones with imperfect .map files.

EDIT: Oh, in case it's not obvious, that movement function is meant to be called every 100ms. It gives a player roughly the same speed you get using the movement keys.

KingMort
05-30-2008, 04:07 PM
Wiz actually giving something back to the eqemu community ?

*BOGGLE*

*GASP*

Scorpious2k
05-30-2008, 04:22 PM
*GASP*

It's not the first time, nor is it a rare occurance. He just doesn't make a big deal about it when he does.

As for the fixes, has Derision's implementation been tested enough to put into the server code?

Wiz
05-30-2008, 04:24 PM
Wiz actually giving something back to the eqemu community ?

*BOGGLE*

*GASP*

Fly away, little troll.

KLS
05-30-2008, 04:58 PM
Yeah I tested it, changed a few things. It works surprisingly well on non eqg maps. Something is seriously wrong with the way we make the eqg .maps though.

Scorpious2k
05-30-2008, 06:40 PM
Yeah I tested it, changed a few things. It works surprisingly well on non eqg maps. Something is seriously wrong with the way we make the eqg .maps though.

OK, then I'll move it to source unless you have already done it.

Derision
06-01-2008, 01:33 PM
SOD has player fear, the packet is an apperancepacket that toggles "player loses control" on, but this is for an old client version, so I don't know if its applicable.


The same approach works with the 6.2 and Titanium clients:

http://www.rama.demon.co.uk/playerfear.patch

I'm posting this patch for anyone who wants to test and develop it some more (as I'm a bit burned out at the moment), and not suggesting it is ready to put on a 'live' server, as I really just hacked it in in what seemed appropriate places.

Movement is a little jerky, and player animations don't look right (they tend to walk very fast rather than running).

I tested by casting fear (as a GM) on another player, and also by putting Dragon Roar in Naggy's spell list and getting feared by him.

The patch is against version 1110

trevius
06-01-2008, 05:21 PM
So, fear was added into the 1110 eqemu code update. So far, it looks very well done. Also, mobs are now running at 20% health.

I notice that some mobs run everytime and some never run. What is it that decides wether a mob will run or not? I can't seem to find any particular common setting on the npc_types that say whether they should run or not. I do like the option of being able to set NPCs to run like live, but I don't think it is very good if I can't figure out how to turn it off lol. I have some zones with mobs that have high run speeds and having them run away could get quite messy.

And, if there isn't already an option to enable or disable running, maybe one could be added in similar to the "f" immune to fleeing or "D" immune to fear special attack codes.

Overall though, this looks like some excellent work! I had fear disabled in many zones because of it's previous exploitablility, but now I can finally enable it and let the chaos begin lol!

Throttle
06-01-2008, 05:30 PM
Certain types of mobs never run, such as undead and summoned-type mobs. I don't know if that's what you meant.

trevius
06-01-2008, 05:41 PM
I was thinking that body-type may have been what was deciding whether they should run or not. That may very well be the case. If so, it would be nice to still have another option other than changing the body type on all NPCs I don't want to run. I definitely don't want to have to set them all to summoned/undead.

I will have to do some more testing with it. Otherwise, I will have to consider either finding a way to disable running or add in a freebie item with clickie snare on it. Adding in running can completely change how much of my content was designed. Not that it is a bad thing, but it would be good to have an option imo.

John Adams
06-01-2008, 05:59 PM
I believe there's a combat rule for FleeHPRatio, default 25? Not sure if you are looking to stop fleeing altogether, but that might do it.

Otherwise, there used to be some defines in features.h in regards to fleeing you can disable and recompile.

KLS
06-01-2008, 06:18 PM
Basically when a mob checks if it want to flee it first checks the special attacks for 'f' if that exists it wont run.

Then it checks that it is able to run based on the fleeing timer, it's something like can only start fleeing every 2 seconds or something.

Then it checks if it's HP ratio is less than the hp ratio of the rule.

Then it checks if it's target is less than 20% hp if it is it cancels the impending flee.

trevius
06-01-2008, 06:35 PM
Thanks, so the "f" option not only makes the mob immune to fleeing damage, but it also disables the mob from fleeing all together? That is exactly what I needed, thanks! I will test that out!

And thanks JA! I didn't notice these at first:

RULE_BOOL ( Combat, EnableFearPathing, true)
RULE_INT ( Combat, FleeHPRatio, 25)

trevius
06-01-2008, 06:46 PM
Those new rules are another thing that should probably be added to the change log so ops know to add them in. So far, the new rules I am aware of are the following and all need to be added to have the options of adjusting them in 1110:

RULE_BOOL ( Combat, EnableFearPathing, true)
RULE_INT ( Combat, FleeHPRatio, 25)

RULE_INT ( Zone, MQWarpExemptStatus, -1 ) //Lieka: Required status level to exempt the MQWarpDetector. Set to -1 to disable this feature.
RULE_INT ( Zone, MQZoneExemptStatus, -1 ) //Lieka: Required status level to exempt the MQZoneDetector. Set to -1 to disable this feature.
RULE_INT ( Zone, MQGateExemptStatus, -1 ) //Lieka: Required status level to exempt the MQGateDetector. Set to -1 to disable this feature.
RULE_INT ( Zone, MQGhostExemptStatus, -1 ) //Lieka: Required status level to exempt the MGhostDetector. Set to -1 to disable this feature.
RULE_BOOL ( Zone, EnableMQWarpDetector, true ) //Lieka: Enable the MQWarp Detector. Set to False to disable this feature.
RULE_BOOL ( Zone, EnableMQZoneDetector, true ) //Lieka: Enable the MQZone Detector. Set to False to disable this feature.
RULE_BOOL ( Zone, EnableMQGateDetector, true ) //Lieka: Enable the MQGate Detector. Set to False to disable this feature.
RULE_BOOL ( Zone, EnableMQGhostDetector, true ) //Lieka: Enable the MQGhost Detector. Set to False to disable this feature.
RULE_REAL ( Zone, MQWarpDetectorDistance, 4900 ) //Lieka: Distance a player must travel between client to server location updates before a warp is registered. 30 allows for beyond GM speed without lag.
RULE_REAL ( Zone, MQWarpLagThreshold, 140 ) //Lieka: Distance beyond the Zone:MQWarpDetectorDistance that a player must travel within the MQWarpThresholdTimer amount of time before tripping the MQWarp detector. Set to 0 to disable this feature.
RULE_REAL ( Zone, MQWarpThresholdTimer, 90000 ) //Lieka: Amount of time before the warp_threshold resets to the Zone:MQWarpLagThreshold value. Default: 90000 (900 seconds/15 minutes). Set to -1 to disable this feature.


Note that this is directly from the ruletypes.h file and NOT the SQL you need to add directly to your rules table. But, this is a list of the newly added rules and adding them in manually or updating the change log with the correct sql statements shouldn't be too hard from this list. Also note that the setting in the rules listed here for "MQWarpDetectorDistance, 4900" should probably be more like 30 than 4900. I have mine set to 100 and it seems to be detecting nicely and probably minimum false positives.

Wiz
06-01-2008, 07:47 PM
Glad to see you got everything working properly. Enjoy your brand new functioning major spell line. :)

KLS
06-01-2008, 09:05 PM
You don't need to add the rules really, only if you want them to differ from the defaults which I suspect most people don't in this case. Immune Fleeing simply makes it so the npc wont run away when low hp, nothing less nothing more.

It seems with the upcoming changes to azone we should also be able to produce some reliable maps. I know it produces good tutorialb.eqg, lavastorm.eqg and eastwastes.sd3 maps which have all been problem maps in the past.

And yeah I usually include the rule changes but forgot this time, sorry. =(

trevius
06-01-2008, 09:39 PM
NP KLS. I am sure most of it works without the rules. I was just noting it to help keep everyone's server having up to date rules table.

And Wiz, thanks a ton for this code! I really love seeing other server admins sharing the custom code changes they have made. I think sharing like that can only help make this community and emulator better overall. It really is amazing how far this emulator has come in the past 6 years. I remember checking it out when it first started and it was barely even playable. There is no way it could have come so far these past few years without help from people like you, Wiz. So, again, thanks!

KLS, if there is any way you can think of that I could help with getting new map files created, let me know, please! Like, if you guys figure out a way to do it, but need help cranking out the 400+ zones worth of maps, I can help. I am pretty technical and am anal about making sure things are done correctly. I am VERY excited at the possibility of a new way to create .map files. I assume it will allow us to create them for all zones including the newest Titanium zones which currently lack maps. THAT would be amazing! There are quite a few zones that I would love to use on my custom server and so, obviously I can't wait to get my hands on the .map files for them! Exciting stuff hehe. LOL, I almost want to get one of them customized just so it is ready as soon as the .map file is available for it (dreadspire).

John Adams
06-02-2008, 02:45 AM
trevius, a way that I always get a complete list of current rules in the DB is to use 2 commands:

#rules reset - resets all rules to default values
#rules store default - saves the current ruleset to the DB as "default"


Works for me.

trevius
06-02-2008, 04:57 AM
Thanks! Never tried the commands in game for rules. That could be very helpful. Nice little tip there!

Aramid
06-02-2008, 09:16 PM
I just installed 1110 and was testing the added fear code and see that even when you have multiple mobs in camp and the first one you are fighting gets below the flee hp limit, it flees. Isn't only the last mob alive in the camp supposed to flee? I mean c'mon, what are the others gonna think when he tries to take off and there still there trying to kill you and he's running away? (There yellin at em.. Hey you pussy, get back here and die with honor!!! :grin: ) But seriously, on live is that not how it works or I am wrong, or do I need to change a setting somewhere?

John Adams
06-03-2008, 12:42 AM
I think mobs always fled if they were injured. Self-preservation. It's when YOU were below 10% that they would stand and fight til they kicked your ass in, no matter their health level. :D

trevius
06-03-2008, 05:43 AM
I think Aramid is correct.

Another thing I have noticed with this code is that snare doesn't seem to work the same as it did last time I played on live. Snare on a fleeing NPC on live would cause it to just turn around and stand there and not actually run at all. But, I have heard reports that all snares seem to do is slow them down slightly if at all.

Also, it appears that if you adjust the rule_values setting from 20 down to 10, it causes all sorts of weird bugs with mobs just warping around instead of running and causing all kinds of craziness lol. My players weren't very happy after a day of that! Finally, I just went ahead and disabled fleeing by setting the rule to -1 and that seemed to work for disabling it. I don't know why setting it to 10% hps would cause the strange issues I was getting reports on, but it definitely seemed bad.

Aramid
06-03-2008, 12:15 PM
My Wife still plays on Live (80 Warrior) and she said I was correct. Trev, you too are correct that if the mob was snared it would only turn around and not move, rooted of course would cause it to fight till the death.

Anyway, I wonder if it behaves this way on Wiz's system, Wiz?

John Adams
06-03-2008, 12:34 PM
I think you guys are having memory leaks. ;)

Certain mobs were set to run whenever they felt their life was in danger. Whether that be 50% health, 20% health or 1% health. If the mob was snared, it would turn to flee, but would do so slowly until it got to a certain percentage (perhaps 10%) then would stand there, snared. You are correct that a rooted mob would turn and fight - as an ex-Wizard, it used to piss me off when someone would root my snared mob trying to help, thus letting it hit me. Undead, afaik, never fled.

Take Drolvargs in Dreadlands and KC, definitely would try strolling away even if snared until they got to a percentage of health that caused them to stop in their tracks. Granted, this was some 6 years ago, so things might have changed. But this is how I made my career in EQLive as a wizard, so I am fairly confident I am not wrong about this.

Lastly, on the subject of "early runners" - you had SoW'd mobs that could run away at 50% and gather tons of their buddies to come get you (Nurga/Droga/Guk, anyone?). You had lower level mobs that you could easily beat (Orc Pawns) that would take off in a random direction after getting to 50% and you'd have to chase them down. I am pretty sure some of the Luclin+ mobs did not behave the same - so maybe my memories are of the old world (when life was good).

This is what I remember. If I'm wrong, I'm wrong. Shrug.

cavedude
06-03-2008, 12:54 PM
I think mobs always fled if they were injured. Self-preservation. It's when YOU were below 10% that they would stand and fight til they kicked your ass in, no matter their health level. :D

You are 100% correct, going back a few years. Back in the day when I first started I distinctly remember orcs fleeing from orc camps in Misty. The reason why, is often in the chaos I would forget about one, and it would eventually find me (usually when I was trying to heal)

However, it does appear this was changed at some point. Trying it out on Live this morning did not result in the same behavior I remember.

Astaldoath
06-04-2008, 02:55 AM
my server has fear, the kind thats a perma stun and it like it that way :D


sorry for not being helpful

John Adams
06-04-2008, 04:05 AM
You are 100% correct, going back a few years
Yeah, I probably should have qualified that I haven't played EQ since 2005 :)

Thanks CD.

Angelox
06-04-2008, 12:23 PM
I had updated to the newest source, but never played. I just was playing some to test a zone, and realized the mobs were running away again when dieing - this is soo cool! I thought I'd never see this on the emulator. This is very needed too, adds much to the game/play challenge.

Derision
06-11-2008, 06:04 PM
Just thinking out loud here, but when I played a Necro on live, I had some
favourite hunting spots where I knew if I feared a mob in a certain area, it
would run along a certain path.

E.g. in The Grey, a mob feared near the ZI (from Mons Letalis ?) would run along the zone wall to the left of the ZI.

I am thinking that a new table which defines a square area and links this to a grid, such that any mob feared in that box would run to the initial (or nearest) waypoint on the linked grid and run back and forward on that grid until fear wore off.

As long as there were not many such manually defined fear paths per zone, it shouldn't present much of an overhead, either in defining and linking the boxes and grids, or in doing the runtime calculations.

Thoughts ? (Maybe only Necros would be interested in this :) )

eq4me
06-11-2008, 07:03 PM
Thoughts ? (Maybe only Necros would be interested in this :) )

I'd like to see that implemented. One of my favorite solo tactics while fighting non-undead with my paladin was to "flash of light" mobs away, so I could heal up or deal with other mobs. That is only advisable If you know on which path they flee. :)