EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   General::Server Discussion (https://www.eqemulator.org/forums/forumdisplay.php?f=601)
-   -   So you're server doesn't have fear (https://www.eqemulator.org/forums/showthread.php?t=25137)

Cvinion 04-29-2008 05:58 PM

So you're server doesn't have fear
 
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.

Code:

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,rany,ranz))
                {
                        curfp = true;
                        break;
                }
        }
        if (curfp)
        {
                fear_walkto_x = ranx;
                fear_walkto_y = rany;
                fear_walkto_z = ranz;
        }
        else //Break fear
        {
                BuffFadeByEffect(SE_Fear);
        }
}

Code:

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;
}

Code:

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;
}

Code:

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

Wiz !!!!
 
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....WizFear.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

Quote:

Originally Posted by jenco420 (Post 149227)
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

Quote:

Originally Posted by Derision (Post 149232)
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.

Code:

        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:

Code:

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

Quote:

Originally Posted by Wiz (Post 149505)

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

Quote:

Originally Posted by Derision (Post 149508)
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

Quote:

Originally Posted by KingMort (Post 149618)
*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

Quote:

Originally Posted by KingMort (Post 149618)
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

Quote:

Originally Posted by KLS (Post 149626)
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

Quote:

Originally Posted by Wiz (Post 149505)
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:

Code:

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


All times are GMT -4. The time now is 01:21 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.