Threat System


Active Member

I had thought a threat system for my RPG map...
I need some help, feedback and suggestions on it.
So here how it is like...
First every hero has a threat value... they gain it from items or passives..

They are numbers like 2,3,4,20 etc...
like if A has 10, B has 20 and C has 5.

They have 2 use..

1. Deciding the attacked enemy
The enemy units line of sight(triggered) is updated like every 1-2seconds(value not thought better if any one could say me).

When it is updated it checks units with the highest threat and then attacks it.

like if A has 10, B has 20 and C has 5 threat value.
and A does a damage of 1000, B of 800 and C a healing of 1500.
Threat value of A is 1000*15 = 15000, of B is 800*20 = 16000 and of C is 1500*5 = 7500

And the enemy will attack B
*Here i need a help to check if the both units are in line of sight or not or if they have trees or wall or something between them.

2. The aggro during a fight
When 2-3 units are attacking an enemy unit.
There damage or there heal is multiplied by threat and is stored in a variable named threat value.

There is a trigger which runs every 4,5 or 6 seconds(There is a random loop executing it. It is done to make some randomness and put more effect. And suggestion on it will be welcomed).
The trigger can run in any of those 3 values it depends on your luck.
When it runs, the threat value is rested. And the enemy attacks the unit with the highest threat value.

Also there are some special spells which make this trigger run when there is a need for extra threat.
Displaying system

There is a system that stores the value and converts them to a percent to show players by multiboard.

like if A has 10, B has 20 and C has 5 threat value.
and A does a damage of 1000, B of 800 and C a healing of 1500.
Threat value of A is 1000*15 = 15000, of B is 800*20 = 16000 and of C is 1500*5 = 7500
Total threat value of system is 38500

Now there are 2 ways to represent this

On a full-scale

The threat percent for B is ((16000/38500)*100) = 41.55%
Even though this is more clear it has its problems
In a 2 men group the job of players is to keep threat below 50% who doesn't want to take threat but,
for a 3 men group the job of players is to keep threat below 33%.

Its technically 100/(no of players)
On a out of 100% scale
In This the threat percent for B is taken out of 38500/(no of players)

So, the threat percent is ((16000/(38500/3))*100) = 124.65%

So, here if you don't want to take threat you will need to keep it below 100% while if you want to take threat you need to keep it above 100%
The threat percent is updated on the screen every 1.5 or 2 seconds(suggestions if any).

*And, i am unsure which of the systems should i use among the two to represent this. Need help for that or any way to improve it.

Also there are many spell schools which have there own threat percents like a shadow spell causes more threat than a nature spell.

Well this is it... i know its not organized but hope you understand... I have tried my best to represent my idea here.


I didnt slap you, i high 5'd your face.
display should be via floating text unique to the local player for units in combat with the target, threat also should not be limited to heroes but include npcs, ie: mind control threat... threat should be updated upon a damage event not on regular intervals
threat should be determined by overall damage dealt to a target, which is dynamic, not a static method like the one you are using (determined by who has the best items/level/hero type/etc)

display should not be for the total group, but for each player on each unit

this is something i was working on a while back but it should put the main point across:

private struct Threat extends array
    unit unit
    real max
    real secondMax
    integer target
    integer second
    group targets
    boolean inCombat
    texttag text
    private method periodic takes nothing returns nothing
        local group g = this.targets
        local unit u
        local thistype i
        local real x = GetUnitX(this.unit) - 20
        local real y = GetUnitY(this.unit)
        local integer a
        call SetTextTagPos(this.text, x, y, 10 * 0.023 / 10)
            set u = FirstOfGroup(g)
            exitwhen u == null
            set i = GetUnitId(u)
            set a = R2I(LoadReal(bj_lastCreatedHashtable, this, GetUnitId(u))/this.max)
            if GetLocalPlayer() == GetOwningPlayer(u) then
                call SetTextTagVisibility(this.text, true)
                call SetTextTagText(this.text, SubString("|cffff0000" + SubString("''''''''''''''''''''", 0, a - 1) + "|r|cffffc1c1" + SubString("''''''''''''''''''''", a, 19) + "|r", 0, 19), -10)
            call GroupRemoveUnit(g, u)
            set u = null
        call DestroyGroup(g)
    implement T32x

this is part of a threat system that i made a while back, im not even sure that it compiles cuz i havent looked at it in a while (for personal use and not optimized/changed for public use)


Active Member
I will use an multi-board to represent for each hero.
Got no idea about npc or player may be a floating text above them will like you said. And only the player which could control it could see it.

I don't want to make it on damage...

Cause if i make a mage with a huge damage spell... He should use it form time to time so... If i do it on damage it will draw instant aggro even if his total dps is less.


I didnt slap you, i high 5'd your face.
well the point is to balance the damage for damage dealers and make non-damage dealers create modified threat, ie: a tank creates 300% x his damage in threat, but deals very little damage, whereas a caster deals 10 x the tanks damage but has his threat reduced by 75%, and healers get minor threat on everything when they heal, etc...
what you wanted to make isnt a threat system, its slightly improved AI, threat is a dynamic high quality AI


Active Member
making threat on damage will make the enemy move between two targets while not attacking any.

Any suggestion on the two ways to display threat? Which one should i use??

And way to detect trees or any path blockers between the two units?


I didnt slap you, i high 5'd your face.
no it doesnt... whoever has dealt the most total damage over the duration of the fight has the most threat, its not instantaneous threat its accumulative, starting at 0 and getting higher and higher
General chit-chat
Help Users
  • No one is chatting at the moment.
  • tom_mai78101 tom_mai78101:
    I have a GIF though
  • tom_mai78101 tom_mai78101:
    In the GIF, I've configured it so the lower the "Main Value" is, the better. I had to compress it pretty far down though.
  • tom_mai78101 tom_mai78101:
    And this is the thread with the video that shows the wall clip.
  • tom_mai78101 tom_mai78101:
    Hmm, about the Headline News, I noticed threads are being moved into the subforum (Health News, Environmental News, etc.). When that happens, the TH Forum Home page loses the articles, and instead would show old articles posted 1 or 2 weeks ago.
  • tom_mai78101 tom_mai78101:
    What do we do with the Home page?
  • Ghan Ghan:
    I added those forums to the filter for that widget.
  • tom_mai78101 tom_mai78101:
    Oh nice. They're back. Thanks.
  • tom_mai78101 tom_mai78101:
    Now I think it makes more sense for me to put news in their own subforums, without worry.
  • The Helper The Helper:
    Awesome Ghan thanks! I was purposely not moving the first 15 news articles in Headline news to the different subforums but I guess I don't have to do that now?
  • tom_mai78101 tom_mai78101:
    Question: Is there a way to remove thread redirects? It creates a copy of the moved thread and takes up space, and I am leaning towards wanting to remove them in the Headline News. But if they have an expiration date, I guess I'm fine with it.
  • The Helper The Helper:
    If you move a thread please leave a permanent redirect. You can delete any redirects after 6 months. The redirects are left to help Search Engines find the moved content.
  • tom_mai78101 tom_mai78101:
    What if you move the permanent redirect, not the thread?
  • The Helper The Helper:
    I think that works but I have not messed with it. You can delete redirects though if you have to that will not delete the original thread
  • The Helper The Helper:
    if a redirect ends up in the same forum as the post it goes to though I think the redirect drops or fails or something but they are not bugged out and when you are working on an indirect the original post is safe.
  • The Helper The Helper:
    Happy Early Friday :)
    Happy Friday :)
  • tom_mai78101 tom_mai78101:
    Fun Friday for me
  • tom_mai78101 tom_mai78101:
    Happy Fun Friday to all.
  • The Helper The Helper:
    Happy Sunday everyone!!!
    Happy Sunday!!!
  • jonas jonas:
    Happy monday :p
  • jonas jonas:
    Everyone hates mondays?
  • The Helper The Helper:
    Happy Tuesday!
  • jonas jonas:
    Happy belated tuesday

    Members online

    No members online now.


    Hive Workshop NUON Dome World Editor Tutorials

    Network Sponsors

    Apex Steel Pipe - Buys and sells Steel Pipe.