Skip to content

Aff trackers

I figure we may as well have a thread for these.

I started rewriting my system a while ago (calling what I currently have a system is probably insulting), but I realised a little ways in that just because its ugly and would probably get me fired if my employer ever saw the state of it, doesn't mean it needs replacing (right Microsoft?)

The tracker (or the general framework of one) is all I got done, but maybe someone will find it useful, so I'll throw it up here as well. Its for mushclient (in python). It definitely will not work out of the box and there are some slightly advanced concepts, but someone may be interested.

http://pastebin.com/CxdhNa5S

«1

Comments

  • I also have put paresis in there instead of numbness a couple of times apparently. This is what happens when you play too many ire games.
  • And reposting my shoddy framework from the Mudlet scripting thread along with the required database. Just the script itself here, so you'll have to make the triggers and aliases to use it. As well as generate a 'sys' variable and 'sys.tracker' variable, since this is a built in thing to my overall system.

    Also, you need a 30s timer that does

    --The collection timer removes unaltered tracker profiles

    for k,v in pairs (sys.tracker) do

    if k ~= "curebuffer" and k ~= "aff" and k ~= "me" then

    sys.tracker[k].collect = sys.tracker[k].collect + 1

    if sys.tracker[k].collect == 2 then

    sys.tracker[k] = nil

    end

    end

    end



    I suck at this or something. I'll export a cleaner xml when I go through and finish some major updates I have planned (and fix a myriad collection of awfully done things).

  • The top part, for maidenhair, works. The bottom part, for kelp, is crashing my client. Any ideas on what the discrepancy is or how I could simplify it?

    %2 quickly eats a maidenhair leaf.=#if ((stricmp(target,"%2") == 0) && (cigu = 1) && (metr = 0) && (iodi = 0) && (stry = 0)) {#set cigu = 0};#elseif ((stricmp (target,"%2") == 0) && (cigu = 0) && (metr = 1) && (iodi = 0) && (stry = 0)) {#set metr = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 0) && (metr = 0) && (iodi = 1) && (stry = 0)) {#set iodi = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 0) && (metr = 0) && (iodi = 0) && (stry = 1)) {#set stry = 0};#elseif ((stricmp (target,"%2") == 0) && (cigu = 1) && (metr = 1) && (iodi = 0) && (stry = 0)) {#set metr = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 1) && (metr = 0) && (iodi = 1) && (stry = 0)) {#set cigu = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 1) && (metr = 0) && (iodi = 0) && (stry = 1)) {#set cigu = 0};#elseif ((stricmp (target,"%2") == 0) && (cigu = 1) && (metr = 1) && (iodi = 1) && (stry = 0)) {#set metr = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 1) && (metr = 1) && (iodi = 0) && (stry = 1)) {#set metr = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 1) && (metr = 1) && (iodi = 1) && (stry = 1)) {#set metr = 0};#elseif ((stricmp (target,"%2") == 0) && (cigu = 0) && (metr = 1) && (iodi = 1) && (stry = 0)) {#set iodi = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 0) && (metr = 1) && (iodi = 0) && (stry = 1)) {#set metr = 0};#elseif ((stricmp(target,"%2") == 0) && (cigu = 0) && (metr = 1) && (iodi = 1) && (stry = 1)) {#set iodi = 0};#elseif ((stricmp (target,"%2") == 0) && (cigu = 0) && (metr = 0) && (iodi = 1) && (stry = 1)) {#set iodi = 0}

    %2 quickly eats a piece of kelp.=#if ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 0) && (hemo = 0) && (buti = 0)) {#set arse = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 0) && (buti = 0)) {#set ethe = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 0) && (buti = 0)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 0) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 0) && (hemo = 0) && (buti = 1)) {#set buti = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 0) && (hemo = 0) && (buti = 0)) {#set ethe = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 1) && (hemo = 0) && (buti = 0)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 0) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 0) && (hemo = 0) && (buti = 1)) {#set arse = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 0)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 0) && (hemo = 0) && (buti = 1)) {#set ethe = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 0)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 0) && (buti = 1)) {#set ethe = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 0)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 0) && (buti = 1)) {#set ethe = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 0) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 0) && (buti = 1)) {#set ethe = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 0)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 0) && (hemo = 1) && (buti = 1)) {#set hemo = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 0) && (buti = 1)) {#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 0) && (ethe = 1) && (merc = 1) && (hemo = 1) && (buti = 1)) {#set hemo = 0}
    (Ring): Lartus says, "I heard Theophilus once threw a grenade and killed ten people."
    (Ring): Lartus says, "Then it exploded."

    (Ring): Zsetsu says, "Everyone's playing checkers, but Theophilus is playing chess."
  • IniarIniar Australia
    My eyes :(
    wit beyond measure is a Sidhe's greatest treasure
  • Mathiaus taught me I didn't need all 31 combinations of kelp afflictions hahah... It looks much neater now.

    %2 quickly eats a piece of kelp.=#if ((stricmp(target,"%2") == 0) && (merc = 1)){#set merc = 0};#elseif ((stricmp(target,"%2") == 0) && (ethe = 1)){#set ethe = 0};#elseif ((stricmp(target,"%2") == 0) && (arse = 1)){#set arse = 0};#set brom = 0
    (Ring): Lartus says, "I heard Theophilus once threw a grenade and killed ten people."
    (Ring): Lartus says, "Then it exploded."

    (Ring): Zsetsu says, "Everyone's playing checkers, but Theophilus is playing chess."
  • IniarIniar Australia
    I still remember when Khizan taught me how to code, funnily enough, in CMUD. There were a large number of nested IFs in my first attempt. Almost as many as my tears. :D
    wit beyond measure is a Sidhe's greatest treasure
  • IniarIniar Australia
    Or was it MM2K. I even tried AL at one point.
    wit beyond measure is a Sidhe's greatest treasure
  • Iniar said:

    I still remember when Khizan taught me how to code, funnily enough, in CMUD. There were a large number of nested IFs in my first attempt. Almost as many as my tears. :D

    The fact that Khizan taught you how to code explains so much now....:)
  • IniarIniar Australia
    We're using 'teach' and 'code' in the loosest sense of the word :( it was more like Khizan saying "Stop being dumb." (Still dumb, huehuehue)
    wit beyond measure is a Sidhe's greatest treasure
  • edited January 2015
    On top of that, you want to learn how to do multiline triggers at some point. If you see them eat kelp, check the next line for 3p messages before curing anything, also never actually guess butisol or hemotoxin, since they have 3p messages. Just properly tracking 3p afflictions and building a stack with that as a secondary goal, you can usually track several affs deep before you have to make any actual assumptions. It makes a significant difference in your early game, especially as a toxin-only class like knights.

    3p messages here: http://forums.imperian.com/discussion/comment/23393/#Comment_23393
    image
  • Ultrix said:

    Iniar said:

    I still remember when Khizan taught me how to code, funnily enough, in CMUD. There were a large number of nested IFs in my first attempt. Almost as many as my tears. :D

    The fact that Khizan taught you how to code explains so much now....:)

     
    I've helped a surprising amount of people learn to code things in this game! Hell, my free MM2k system from back in the day was the start of a surprising amount of fighters. 

    My priority list in doing so looks kind of like this:

    1. It works.
    2. It's easy for a non-coder to understand.
    3. It's easy for a non-coder to implement.
    4.  
    5.  
    6.  
    7.   
    8.  
    9.  
    10.  
    11.  
    12.  
    13.  
    14.  
    15.  
    16.  
    17.  
    18.  
    19.  
    20. It's pretty.

    "On the battlefield I am a god. I love war. The steel, the smell, the corpses. I wish there were more. On the first day I drove the Northmen back alone at the ford. Alone! On the second I carried the bridge! Me! Yesterday I climbed the Heroes! I love war! I… I wish it wasn’t over."

  • Dicene said:

    On top of that, you want to learn how to do multiline triggers at some point. If you see them eat kelp, check the next line for 3p messages before curing anything, also never actually guess butisol or hemotoxin, since they have 3p messages. Just properly tracking 3p afflictions and building a stack with that as a secondary goal, you can usually track several affs deep before you have to make any actual assumptions. It makes a significant difference in your early game, especially as a toxin-only class like knights.

    3p messages here: http://forums.imperian.com/discussion/comment/23393/#Comment_23393

    That is what I am stuck on now. AL client can't do multi-line triggers. Or at least I haven't figured out how. \n doesn't work except for when I send the command.
    (Ring): Lartus says, "I heard Theophilus once threw a grenade and killed ten people."
    (Ring): Lartus says, "Then it exploded."

    (Ring): Zsetsu says, "Everyone's playing checkers, but Theophilus is playing chess."
  • I don't have multiline triggers, either, and I have developed a few ugly workarounds.

    Curing butisol with kelp looks like this....

    Ultrix quickly eats a piece of kelp.
    Ultrix's skin color returns to normal and her sweating subsides.
    H:520/520 M:480/480 B:1 <e- pp> <db> D:0 F:0 K:0

    Since I can't multiline trigger that, my triggers would probably go something like this...

    /action {Ultrix quickly eats a piece of kelp.} {kelpeaten = 1}

    /action {Ultrix's skin color returns to normal and her sweating subsides } {if (kelpeaten) {kelpeaten = 0}; target_cure(butisol) }

    /action {H:520/520 M:480/480 B:1 <e- pp> <db> D:0 F:0 K:0} {/if (kelpeaten) {<do non-butisol/hemotoxin shit here>; kelpeaten = 0} }

    The problem with relying on this is that you end up doing a whole lot of crap on your prompt, so I'd gate that with one check that you set along with kelpeaten and the like so that you don't run a ton of checks constantly.




    "On the battlefield I am a god. I love war. The steel, the smell, the corpses. I wish there were more. On the first day I drove the Northmen back alone at the ford. Alone! On the second I carried the bridge! Me! Yesterday I climbed the Heroes! I love war! I… I wish it wasn’t over."

  • edited January 2015
    Ah. AL Client. That's probably your problem right there. =P I'm not having any luck finding any documentation on AL, so I'll have to give pseudo-code here.

    First, with the code you provided after Mathiaus helped you cut down on conditionals. If you have a common condition(the stricmp portion), instead of checking it on each elseif, nest your ifs:

    %2
    quickly eats a piece of kelp.=#if ((stricmp(target,"%2") == 0) {#if (merc = 1){#set merc = 0};#elseif (ethe = 1){#set ethe = 0};#elseif (arse = 1){#set arse = 0};#set brom = 0}

    In lieu of multiline triggers, you could have triggers that enable/disable each other actively. I don't really know if that's doable in AL either.

    Most barebones way I can think to handle it would be doing something like:

    %2 quickly eats a piece of kelp.
    #if ((stricmp(target,"%2") == 0) {
      #set herb = "kelp"
    }

    %2's colour returns to %3 face.
    #if ((stricmp(target,"%2") == 0) {
      #set aff = "hemotoxin"
    }

    <whatever your prompt trigger looks like>
    #if ((stricmp(herb, "kelp") == 0){
      #if ((stricmp(aff, "hemotoxin") == 0){
        #set hemo = 0
      };#elseif ((strcmp(aff, "butisol") == 0){
        #set buti = 0
      };#else{
        #if (merc = 1) {
          #set merc = 0
        };#elseif (ethe = 1){
          #set ethe = 0
        };#elseif (arse = 1){
          #set arse = 0
        };
        #set brom = 0
      };
    };

    Oh, and if you're looking to do any significant coding, you'll have a much easier time in a more modern client like MUSH or Mudlet. The above code would take the following in Mudlet; note the significantly improved readability:

    On a multiline trigger that matches the following:
    ^(\w+) quickly eats (?:a|an|some) (.*)\.$
    1 line spacer
    ^(.+)$

    local name = multimatches[1][2]
    local herb = multimatches[1][3]
    local secondLine = multimatches[3][1]
    local aff

    if not name:matches(target) then return end --stops the trigger right here on non-targets.

    if secondLine:match("colour returns to") then
      aff = "hemotoxin"
    elseif secondLine:match("sweating subsides") then
      aff = "butisol"
    end

    if aff then
      t[aff] = false
    else
      if herb:match("kelp") then
        if t["weariness"] then
          t["weariness"] = false
        elseif t["clumsiness"] then
          t["clumsiness"] = false
        elseif t["asthma"] then
          t["asthma"] = false
        end
      end
    end
    image
  • IniarIniar Australia
    I use Mudlet and don't use multiline triggers unless the second line is completely non-specific yet relevant to track. Affliction tracking certainly didn't fall into that category.
    wit beyond measure is a Sidhe's greatest treasure
  • If I'm not mistaken, you keep a table of all the big things that happen(envenom/dsl/rebounding or herb/3p) sort of events, then parse them all when you see the prompt? I can't think of a situation where our methods don't end at the same results, it's just that we have different preferences on how to go about getting it done. =P And with how long it took me to get a really solid handle on the potential power of Mudlet's trigger engine, I'll be damned if I don't make extensive use of it now. =D
    image
  • Khizan said:

    Ultrix said:

    Iniar said:

    I still remember when Khizan taught me how to code, funnily enough, in CMUD. There were a large number of nested IFs in my first attempt. Almost as many as my tears. :D

    The fact that Khizan taught you how to code explains so much now....:)

     
    I've helped a surprising amount of people learn to code things in this game! Hell, my free MM2k system from back in the day was the start of a surprising amount of fighters. 

    Wait, what do you mean "start of" ?

    I think there are two of us holdouts left. The other guy lives in a capitalistic third-world country, so he has a built-in excuse :(
    “We abjure labels. We fight for money and an indefinable pride. The politics, the ethics, the moralities, are irrelevant."
    image
  • MathiausMathiaus Pennsylvania
    Multilines keep my tracking more solid than anything else. Hard to imagine coding an aff tracker without them.
    image
  • I think the way Iniar does it, you end up with a table like:
    stuff that happened before prompt = {
      "envenom aconite",
      "I dsl baasche",
      "baasche shrug"
      "envenom hemotoxin",
      "I dsl baasche",
      "baasche herb kelp",
      "baasche 3p hemotoxin",
    }

    That's going to be just as accurate in the end, I just really don't like doing things that way. =P
    image
  • MathiausMathiaus Pennsylvania
    I'm guessing it's something like:

    if prompt[target.." 3p hemotoxin"] then
      afflictions["hemotoxin"] = false
    end

    or something like that set in the prompt script would do it, especially since dsl is so spammy with extra things you can't assume you have all the multilines captured.
    image
  • edited January 2015
    You can, using a nested trigger, with an unlimited fire length that matches all necessary lines, then breaks when prompt is received.
     (In Mudlet)
    image
  • Prompt checking. Setting toxin1 and toxin2 for what I slash with (still trying to figure out how to go about this). But I want to clear it upon rebounding. If I hit rebounding, I check to see what toxin1 and toxin2 are and then the clear them to equal 0, also clearing the affliction I gave. It's crashing my client again.

    %1/%2 %3/%4=#if ((rb = 1) && (stricmp(toxin1,"acon") == 0) && (acon = 1)){#set acon = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"acon") == 0) && (acon = 1)) {#set acon = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"metr") == 0) && (metr = 1)){#set metr = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"metr") == 0) && (metr = 1)) {#set metr = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"hemo") == 0) && (hemo = 1)) {#set hemo = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"hemo") == 0) && (hemo = 1)) {#set hemo = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"cigu") == 0) && (cigu = 1)) {#set cigu = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"cigu") == 0) && (cigu = 1)) {#set cigu = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"brom") == 0) && (brom = 1)) {#set brom = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"brom") == 0) && (brom = 1)) {#set brom = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"iodi") == 0) && (iodi = 1)) {#set iodi = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"iodi") == 0) && (iodi = 1)) {#set iodi = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"arse") == 0) && (arse = 1)) {#set arse = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"arse") == 0) && (arse = 1)) {#set arse = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"atro") == 0) && (atro = 1)) {#set atro = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"atro") == 0) && (atro = 1)) {#set atro = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"botu") == 0) && (botu = 1)) {#set botu = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"botu") == 0) && (botu = 1)) {#set botu = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"cyan") == 0) && (cyan = 1)) {#set cyan = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"cyan") == 0) && (cyan = 1)) {#set cyan = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"xero") == 0) && (xero = 1)) {#set xero = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"xero") == 0) && (xero = 1)) {#set xero = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"lind") == 0) && (lind = 1)) {#set lind = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"lind") == 0) && (lind = 1)) {#set lind = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"calo") == 0) && (calo = 1)) {#set calo = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"calo") == 0) && (calo = 1)) {#set calo = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"lumi") == 0) && (lumi = 1)) {#set lumi = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"lumi") == 0) && (lumi = 1)) {#set lumi = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"maza") == 0) && (maza = 1)) {#set maza = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"maza") == 0) && (maza = 1)) {#set maza = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"meba") == 0) && (meba = 1)) {#set meba = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"meba") == 0) && (meba = 1)) {#set meba = 0;#set toxin2 = 0};#elseif ((rb = 1) && (stricmp(toxin1,"noct") == 0) && (noct = 1)) {#set noct = 0;#set toxin1 = 0};#elseif ((rb = 1) && (stricmp(toxin2,"noct") == 0) && (noct = 1)) {#set noct = 0;#set toxin2 = 0}
    (Ring): Lartus says, "I heard Theophilus once threw a grenade and killed ten people."
    (Ring): Lartus says, "Then it exploded."

    (Ring): Zsetsu says, "Everyone's playing checkers, but Theophilus is playing chess."
  • IniarIniar Australia
    edited January 2015
    I have a few issues with this one:

    most importantly, are you absolutely sure you want to clear an affliction, given that the person may already have it?

    a la;

    send -> dsl iniar aconite aconite
    Ahkan dsls Iniar with aconite (3rd party)
    Iniar rebounding up
    Theo dsls Iniar with aconite
    Theo hits rebounding
    code removes aconite

    wit beyond measure is a Sidhe's greatest treasure
  • edited January 2015
    The way you handle that is by making the slash set variables that do something like this....

    You envenom a sabre with aconite -> dsl_toxin1 = aconite
    You slash Iniar                  -> afflict1 = get_aff(aconite)
    <prompt>                         -> target_afflicted(afflict1)

    You envenom a sabre with aconite -> dsl_toxin1 = aconite
    You slash Iniar                  -> afflict1 = get_aff(aconite)
    You rebound!                     -> afflict1 = ''
    <prompt>                         -> target_afflicted(afflict1)

    "On the battlefield I am a god. I love war. The steel, the smell, the corpses. I wish there were more. On the first day I drove the Northmen back alone at the ford. Alone! On the second I carried the bridge! Me! Yesterday I climbed the Heroes! I love war! I… I wish it wasn’t over."

  • IniarIniar Australia
    That is almost exactly how I do it. Including aff curing.
    wit beyond measure is a Sidhe's greatest treasure
  • I prefer to capture the DSL line + the next 2 lines in a multi line. And then I feed the the 2 following lines through pattern matching. Not necessarily better or worse than any of the previous, just the way I do it.
  • IniarIniar Australia
    edited January 2015
    The nice thing about coding is that there is often more than one way that works. Unlike mathematics. :(

    E: that's not entirely true either. :|
    wit beyond measure is a Sidhe's greatest treasure
  • Despite all this affliction tracking mumbo jumbo there is a lot of spam web. 
  • Dicene said:

    On top of that, you want to learn how to do multiline triggers at some point. If you see them eat kelp, check the next line for 3p messages before curing anything, also never actually guess butisol or hemotoxin, since they have 3p messages. Just properly tracking 3p afflictions and building a stack with that as a secondary goal, you can usually track several affs deep before you have to make any actual assumptions. It makes a significant difference in your early game, especially as a toxin-only class like knights.

    3p messages here: http://forums.imperian.com/discussion/comment/23393/#Comment_23393

    That is what I am stuck on now. AL client can't do multi-line triggers. Or at least I haven't figured out how. \n doesn't work except for when I send the command.

    Holy crap, someone else who uses AL Client!


    One thing that AL client has taught me is that you don't need anything fancy to make anything work, you just need to think around it. 


    By the way! The reason your client is crashing so much is because AL Client is absolutely horrible with huge nested if statements. It will sometimes work, and sometimes not. You have to split it up into functions.

    The simplest trick of doing this is to set a "dummy aliases" where your code runs. Simply, once you get to some part of your elseif statements, simply end with an "else" statement that activates an alias like "Afftrackingpart2" which will contain the next portion of your code.

    Not only does this help ease the stress on AL Client itself, but it portions out your code to make debugging way easier.


    As for rebounding, the way I do it in AL Client is to have a separate variable which captures the toxin I slash with. If it sees the message "the attack has rebounded onto you", then it simply removes those from the list. Simple and clean.
  • I can't do multi-lines. That's what's killing me. The prompt thing is so damn confusing to me.

    Plus I don't get how to distinguish between toxin1 and toxin2 one a dsl since the messages are exactly the same.
    (Ring): Lartus says, "I heard Theophilus once threw a grenade and killed ten people."
    (Ring): Lartus says, "Then it exploded."

    (Ring): Zsetsu says, "Everyone's playing checkers, but Theophilus is playing chess."
Sign In or Register to comment.