Function Resist Event, for auto skip casting

Third party software discussion goes here.
User avatar
moguay
Posts: 170

Function Resist Event, for auto skip casting

Post#1 » Sun May 14, 2017 5:51 pm

A new function to optimise and help the NPC resist analysis.

After npc debuffing, if a spell is resisted 2 times on this the script skip automatically the futur casting.

I have not done a full-scale test yet, so find the test capture doing in the guildhall.
I let you imagine a bite, this is the kind of function that I like. And for badass the main event part of script.

Code: Select all

#Event Resist_Auto_Ban          "Your target resisted the #1# spell#*#"

Sub Event_Resist_Auto_Ban(line,SpellName)

    /if (${Target.Type.NotEqual[NPC]}) /return FALSE
   
    /declare ResistTargetName string local
    /declare ResistSpellName string local
    /declare ResistSpellState string local
   
    | Make clean string Name
    /call CleanString "${Target.Name}"
    /varset ResistTargetName ${Macro.Return}
    /call CleanString "${SpellName}"
    /varset ResistSpellName ${Macro.Return}
   
    | Only if target is Debuffed (SHM)
    /if (${NetWorst.Request[radius300 pc shm101]}) {
        /if (!${NPCDebuffList.Find[|${Target.Name}:${Target.ID}|]}) /return
    }
   
    | Init Resist Var
    /if (!${Defined[Resist_${ResistSpellName}]}) /declare Resist_${ResistSpellName} string global
   
    /if (!${Resist_${ResistSpellName}.Length}) {
        | Init the first Spell Resist try
        /varset Resist_${ResistSpellName} |${ResistTargetName}#1|
        /ini "./Bots_Data/Bot_${Me.CleanName}.ini" "ResistSpell" "RESIST_${ResistSpellName}" "${Resist_${ResistSpellName}}"
        /varset ResistSpellState 1
    } else /if (!${Resist_${ResistSpellName}.Find[|${ResistTargetName}#]}) {
        | Set the first Spell Resist try
        /varset Resist_${ResistSpellName} ${Resist_${ResistSpellName}}${ResistTargetName}#1|
        /ini "./Bots_Data/Bot_${Me.CleanName}.ini" "ResistSpell" "RESIST_${ResistSpellName}" "${Resist_${ResistSpellName}}"
        /varset ResistSpellState 1
    } else /if (!${Resist_${ResistSpellName}.Find[|${ResistTargetName}#1]}) {
        | Set the second Spell Resist try
        /call StringReplaceAll "Resist_${ResistSpellName}" "|${ResistTargetName}#1|" "|${ResistTargetName}#2|"
        /ini "./Bots_Data/Bot_${Me.CleanName}.ini" "ResistSpell" "RESIST_${ResistSpellName}" "${Resist_${ResistSpellName}}"
        /varset ResistSpellState 2
    } else /if (!${Resist_${ResistSpellName}.Find[|${ResistTargetName}#HOLD|]}) {
        | Hold the Spell Resist
        /call StringReplaceAll "Resist_${ResistSpellName}" "|${ResistTargetName}#2|" "|${ResistTargetName}#HOLD|"
        /ini "./Bots_Data/Bot_${Me.CleanName}.ini" "ResistSpell" "RESIST_${ResistSpellName}" "${Resist_${ResistSpellName}}"
        /varset ResistSpellState HOLD
    }
   
    /if (${Resist_${ResistSpellName}.Length}) {
        /if (${broadcast}==1) /${broadcastTell} [AutoResist] Change State: <${ResistSpellState}> for cast <${CastName}> and target [ ${Spawn[${CastTarget}].CleanName} ].
        /if (${broadcast}==1) /${chat} [AutoResist] Change State: <${ResistSpellState}> for cast <${CastName}> and target [ ${Spawn[${CastTarget}].CleanName} ].
    }
   
/return
Attachments
AutoResist.png
AutoResist.png (95.99 KiB) Viewed 721 times

User avatar
moguay
Posts: 170

Re: Function Resist Event, for auto skip casting

Post#2 » Fri May 19, 2017 8:50 pm

Today i have made a test on Chaos for caster resist, that work so fine
So, auto-learning, configuration and filters function.

So with this, finish the unnecessary cast on NPC, of course. :o
Actually if you use only a simple macro. This only gives you a glimpse of the funny possibilities.

Needed for implement, add:
- Event Resist: #Event Resist_Auto_Ban "Your target resisted the #1# spell#*#"
- Event Sham debuff (need to enable the Analysis): #Event ShmDebuff "[#1#] [Debuff]:#*#>>>#2#:#3#<<<#*#has been debuffed (Shaman)#*#"
- Cast filter: see for me Resist_Auto_Hold function, need to be implemented in or before your main cast function
- Some utilities function

You found on the capture a part of toons filter configuration file, and the macro function Updated

Code: Select all

Sub Event_Resist_Auto_Ban(line,SpellName)

    | Only on NPC target
    /if (!${Target.ID} || ${Target.Type.NotEqual[NPC]}) /return FALSE
   
    | Excluse Nuke spell effect
    /if ((${SpellName.Find[Strike]} || ${SpellName.Find[Blaze]}) && (${SpellName.Find[Recourse]} || ${SpellName.Find[Feedback]})) /return FALSE
   
    | Only if target is Debuffed (SHM)
    /if (${NetWorst.Request[radius300 pc shm101]}) {
        /if (!${NPCDebuffList.Find[|${Target.Name}:${Target.ID}|]}) /return
    }
   
    | Declare local var
    /declare TargetName string local ${Target.CleanName}
    /declare TargetID string local ${Target.ID}

    /declare ResistTargetName string local
    /declare ResistSpellName string local
    /declare ResistSpellState string local
   
    /declare iniSave bool local FALSE
   
    | Call string name reformat
    /call CleanString "${Target.Name}"
    /varset ResistTargetName ${Macro.Return}
    /call CleanString "${SpellName}"
    /varset ResistSpellName ${Macro.Return}
   
    | Declare global resist var
    /if (!${Defined[Resist_${ResistSpellName}]}) /declare Resist_${ResistSpellName} string global
   
    /if (!${Resist_${ResistSpellName}.Length}) {
        | Init the first Spell Resist try
        /varset Resist_${ResistSpellName} |${ResistTargetName}#${TargetID}#1|
        /varset iniSave TRUE
        /varset ResistSpellState 1
    } else /if (!${Resist_${ResistSpellName}.Find[|${ResistTargetName}#]} && !${Resist_${ResistSpellName}.Find[|${ResistTargetName}:${TargetID}#]}) {
        | Set the first Spell Resist try
        /varset Resist_${ResistSpellName} ${Resist_${ResistSpellName}}${ResistTargetName}#${TargetID}#1|
        /varset iniSave TRUE
        /varset ResistSpellState 1
    } else /if (${Resist_${ResistSpellName}.Find[|${ResistTargetName}#${TargetID}#1|]}) {
        | Set the second Spell Resist try
        /call StringReplaceAll "Resist_${ResistSpellName}" "|${ResistTargetName}#${TargetID}#1|" "|${ResistTargetName}#${TargetID}#2|"
        /varset iniSave TRUE
        /varset ResistSpellState 2
    } else /if (${Resist_${ResistSpellName}.Find[|${ResistTargetName}#${TargetID}#2|]}) {
        | Hold the Spell Resist (NB without TargetID for maintain all the time)
        /call StringReplaceAll "Resist_${ResistSpellName}" "|${ResistTargetName}#${TargetID}#2|" "|${ResistTargetName}#HOLD|"
        /varset iniSave TRUE
        /varset ResistSpellState HOLD
    }
   
    /if (${Defined[Resist_${ResistSpellName}]}) {
        /declare i int local
        /for i 1 to ${Math.Calc[${Resist_${ResistSpellName}.Count[|]}]}
            | Clean the list if NPC is Dead and the Spell not HOLD
            /if (${Resist_${ResistSpellName}.Arg[${i},|].Count[#]} == 2 && !${Spawn[id ${Resist_${ResistSpellName}.Arg[${i},|].Arg[2,#]}].ID}) {
                /varset iniSave TRUE
                /call ListDelbyArg "Resist_${ResistSpellName}" ${i} "|"
            }
        /next i
       
        | Clear the var if list if empty
        /if (${Resist_${ResistSpellName}.Equal[|]} || ${Resist_${ResistSpellName}.Equal[||]}) {
            /varset iniSave FALSE
            /deletevar Resist_${ResistSpellName}
        }
    }
   
    /if (${iniSave}) {
        | Broadcast and Save to ini
        /if (${ResistSpellState.Length}) {
            /if (${broadcast}==1) /${broadcastTell} [AutoResist] Change State: <${ResistSpellState}> for cast <${SpellName}> and target [${TargetName}].
            /if (${broadcast}==1) /${chat} [AutoResist] Change State: <${ResistSpellState}> for cast <${SpellName}> and target [${TargetName}].
        }
        /ini "./Bots_Data/Bot_${Me.CleanName}.ini" "ResistSpell" "RESIST_${ResistSpellName}" "${Resist_${ResistSpellName}}"
    }
   
/return

Sub Event_ShmDebuff(line,Sender,TargetName,TargetID)

    /if (!${Defined[NPCDebuffList]}) /declare NPCDebuffList string global
    /declare DebuffNPCName string local ${Spawn[id ${TargetID}].Name}
   
    /if (!${NPCDebuffList.Length}) {
        /varset NPCDebuffList |${DebuffNPCName}:${TargetID}|
    } else /if (!${NPCDebuffList.Find[|${DebuffNPCName}:${TargetID}|]}) {
        /varset NPCDebuffList ${NPCDebuffList}${DebuffNPCName}:${TargetID}|
    }
   
    /declare i int local
    /for i 1 to ${Math.Calc[${NPCDebuffList.Count[|]}]}
        | Clean the list if NPC is Dead
        /if (${NPCDebuffList.Arg[${i},|].Find[:]} && !${Spawn[id ${NPCDebuffList.Arg[${i},|].Arg[2,:]}].ID}) /call ListDelbyArg "NPCDebuffList" ${i} "|"
    /next i
    | Clear the var if list if empty
    /if (${NPCDebuffList.Equal[|]} || ${NPCDebuffList.Equal[||]}) /deletevar NPCDebuffList

/return

Sub Resist_Auto_Hold(ResistTargetName,ResistSpellName,Var)

    /if (${Spawn[${ResistTargetName}].Type.NotEqual[NPC]}) /return FALSE

    /declare ResistTargetID int local ${Spawn[${ResistTargetName}].ID}
    /declare ResistTargetCleanName string local ${Spawn[${ResistTargetName}].CleanName}
   
    /call CleanString "${ResistTargetName}"
    /varset ResistTargetName ${Macro.Return}
    /call CleanString "${ResistSpellName}"
    /varset ResistSpellName ${Macro.Return}
   
    /if (${Defined[Resist_${ResistSpellName}]} && ${Resist_${ResistSpellName}.Find[|${ResistTargetName}#HOLD|]}) {
        /if (${Var.Length} && ${Defined[${Var}]}) /varset ${Var} 0
       
        /if (${broadcast}==1) /${broadcastTell} [AutoResist] Skip casting <${ResistSpellName}> on [${ResistTargetCleanName}].
        /if (${broadcast}==1) ${broadcastMsg} [AutoResist] Skip casting <${ResistSpellName}> on [${ResistTargetCleanName}].
        /return TRUE
    }
    /if (${Ini[./Bots_Data/Bot_${Me.CleanName}.ini,ResistSpell,RESIST_${ResistSpellName}].Length} && ${Ini[./Bots_Data/Bot_${Me.CleanName}.ini,ResistSpell,RESIST_${ResistSpellName}].Find[|${ResistTargetName}#HOLD|]}) {
        /if (!${Defined[Resist_${ResistSpellName}]}) /declare Resist_${ResistSpellName} string global
        /varset Resist_${ResistSpellName} ${Ini[./Bots_Data/Bot_${Me.CleanName}.ini,ResistSpell,RESIST_${ResistSpellName}]}
        /if (${Var.Length} && ${Defined[${Var}]}) /varset ${Var} 0
       
        /if (${broadcast}==1) /${broadcastTell} [AutoResist] Skip casting <${ResistSpellName}> on [${ResistTargetCleanName}].
        /if (${broadcast}==1) ${broadcastMsg} [AutoResist] Skip casting <${ResistSpellName}> on [${ResistTargetCleanName}].
        /return TRUE
    }
/return FALSE


some utility function need:

Code: Select all

Sub CleanString(Name)
    /if (${Name.Find[,]}) {
        /if (!${Defined[i]}) /declare i int local
        /for i 1 to ${Name.Count[,]}
            /varset Name ${Name.Left[${Math.Calc[${Name.Find[,]}-1]}]}${Name.Right[-${Name.Find[,]}]}
        /next i
    }
    /if (${Name.Lower.Find[rk.]}) {
        /varset Name ${Name.Left[${Math.Calc[${Name.Find[Rk.]}-1]}]}
    }
    /varset Name ${Name.Replace[ ,].Replace[',].Replace[.,]}
/return ${Name}

Sub ListReplacebyArg(string sList,string sElement,string sArg,string sDiv)
    /if (!${Defined[sDiv]}) /declare sDiv string local |
    /varset ${sList} ${sDiv}${${sList}}${sDiv}${sDiv}
    /declare sright int local
    /declare sleft int local
    /declare splaceholder string local ${${sList}}
    /varset splaceholder ${splaceholder.Arg[${sArg},${sDiv}]}
    /varcalc sleft  ${${sList}.Find[${sDiv}${splaceholder}${sDiv}]}
    /varset splaceholder ${splaceholder}${sDiv}
    /varcalc sright ${sleft}+${splaceholder.Length}
    /varset ${sList} ${${sList}.Left[${sleft}]}${sElement}${sDiv}${${sList}.Right[-${sright}]}
    /varset ${sList} ${${sList}.Left[-2].Right[-1]}
    /if (${DebugList.Find[core]}) /echo List ${${sList}} sElement ${sElement} repladed arg ${sArg}
/return

Sub StringReplaceAll(string sList,string oldElement,string newElement)
    /declare i int local
    /declare sright int local
    /declare sleft int local
    /for i 1 to ${${sList}.Length}
        /if (${${sList}.Find[${oldElement}]}) {
            /varset ${sList} |${${sList}}||
            /varcalc sleft  ${${sList}.Find[${oldElement}]}-1
            /varcalc sright ${sleft}+${oldElement.Length}
            /varset ${sList} ${${sList}.Left[${sleft}]}${newElement}${${sList}.Right[-${sright}]}
            /varset ${sList} ${${sList}.Left[-2].Right[-1]}
        } else {
            /if (${DebugList.Find[core]}) /echo List ${${sList}} oldElement ${oldElement} replaced newElement ${newElement}
            /return
        }
    /next i
    /echo Error in StringReplaceAll
/return
Attachments
AutoResist_Filtred_Capture.png
AutoResist_Filtred_Capture.png (72.29 KiB) Viewed 697 times

Return to “Third party software”

Who is online

Users browsing this forum: No registered users and 1 guest