Howdy, Stranger!

It looks like you're new here. Sign in or register to get started.

Predator in PvP

ChelicrixkelChelicrixkel Member Posts: 9
Hi folks, I've recently returned to Imperian after about a four year hiatus. I'm currently playing a fast akrabi predator - Chelicrixkel "Kel" - and I have a few questions about the changes to the class over the past four years.

When I left the game, limb damage was "permanent" in a way. If I recall correctly, limb damage stayed on a limb pretty much until it was broken, few tactics to throw off a limb-focused adversary were available beyond good parrying - I used to put some small amount of limb damage on myself before fighting a monk or a predator to stagger his initial breaks. One could also attempt to anticipate when and where a break would land, and apply restoration to that limb hoping the curing tick would occur right after the break, minimising the time the limb was broken - this was a pretty hit or miss tactic as one could just be off salve balance for a while and gain no benefit.

For three of the four years that I was not playing Imperian, I was playing Aetolia. Over there, one could apply restoration to a damaged limb before it broke to cure the "asymptomatic limb damage" based on some proportion of one's current hp. This made setting up multiple breaks quite difficult indeed in Aetolia. During my stay there, I vaguely remember hearing something about a change to the way such "asymptomatic limb damage" was handled over here. However, I do not remember the details and if someone who knows could enlighten me, it'd aid my efforts greatly.

tl;dr:
Is limb damage permanent? Is there any way to cure limb damage before a break occurs?

Comments

  • KhizanKhizan Member Posts: 2,648 ✭✭✭✭✭

    Limb damage resets after the limb has gone one minute without being hit.

    This is to prevent easy pre-damage, and to reduce the time bomb nature of limb damage classes by lowering their ability to fight with hit-and-run style tactics.

    "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."

  • AhkanAhkan Member Posts: 2,375 ✭✭✭✭✭
    There is no pre-restore in Imperian. There only way to cure a limb break is once you already have it.

    Tracking limb breaks is incredibly easy now. There are messages at each 33%, 66% of limb damage that you can track and extrapolate on which hit you're capable of breaking a limb. 
  • ChelicrixkelChelicrixkel Member Posts: 9
    Khizan said:

    Limb damage resets after the limb has gone one minute without being hit.

    This is to prevent easy pre-damage, and to reduce the time bomb nature of limb damage classes by lowering their ability to fight with hit-and-run style tactics.

    So essentially I can code in a one minute timer for each of the six limbs that resets each time that limb is hit and clears all limb damage if it reaches 0
  • OzreasOzreas Member, Beta Testers Posts: 235 ✭✭✭✭
    Ahkan said:
    There is no pre-restore in Imperian. There only way to cure a limb break is once you already have it.

    Wroooong-o!
  • AzefelAzefel Member Posts: 730 ✭✭✭✭
    The only thing you have to count is the number of hits between the limb trembling (33%) and bruises (66%), because from bruises onwards, that number of hits (±1 depending on the target's health) will be how many hits it takes to break the limb.
  • KalonKalon Member Posts: 124 ✭✭✭
    Ozreas said:
    Ahkan said:
    There is no pre-restore in Imperian. There only way to cure a limb break is once you already have it.

    Wroooong-o!
    You two are using pre-restore in two different ways. Ahkan seems to be using it to refer to the ability to 'heal' limb damage before it causes a full break, as that is what the question his post was in response to wanted to know. You, on the other hand, use the term the way people in Imperian use it, to refer to the ability to apply restoration seconds before a lvl2 break so that the restoration ticks very quickly after the break occurs.
  • ChelicrixkelChelicrixkel Member Posts: 9
    Thanks for the responses folks. 

    I've recently "finished" the coding I want for knifeplay, and I thought I'd post it here in the hopes someone conversant in Lua and/or Mudlet has any insightful comments.

    Stance tracking script:
    [spoiler]
    Neurotoxin.knifeplay.stances = Neurotoxin.knifeplay.stances or {}
    Neurotoxin.knifeplay.myStance = Neurotoxin.knifeplay.myStance or "None"
    Neurotoxin.knifeplay.newStance = Neurotoxin.knifeplay.newStance or "None"
    Neurotoxin.knifeplay.comboHits = 3
    Neurotoxin.knifeplay.comboList = {}

    function checkStance(atk)
    if (Neurotoxin.knifeplay.comboHits >= 3) then
    if (Neurotoxin.knifeplay.stances[Neurotoxin.knifeplay.myStance][atk] ~= "impossible") then
    Neurotoxin.knifeplay.newStance = Neurotoxin.knifeplay.stances[Neurotoxin.knifeplay.myStance][atk]
    echo("\nStance tracking: "..atk.." will take us from " ..Neurotoxin.knifeplay.myStance.. " to " ..Neurotoxin.knifeplay.newStance)
    return true
    end
    return false
    else
    if (Neurotoxin.knifeplay.stances[Neurotoxin.knifeplay.newStance][atk] ~= "impossible") then
    echo("\nStance tracking: "..atk.." will take us from " ..Neurotoxin.knifeplay.newStance.. " to " ..Neurotoxin.knifeplay.stances[Neurotoxin.knifeplay.newStance][atk])
    Neurotoxin.knifeplay.newStance = Neurotoxin.knifeplay.stances[Neurotoxin.knifeplay.newStance][atk]
    return true
    end
    return false
    end
    end

    Neurotoxin.knifeplay.stances.None = {
    ["lateral"] = "Gyanis",
    ["vertical"] = "Laesan",
    ["swiftkick"] = "Gyanis",
    ["gouge"] = "Laesan",
    ["jab"] = "Vae-Sant",
    ["feint"] = "Ein-Fasit",
    ["pinprick"] = "Gyanis",
    ["raze"] = "Laesan",
    ["bleed"] = "impossible",
    ["flashkick"] = "Rizet",
    ["crescentcut"] = "Vae-Sant",
    ["lowhook"] = "Vae-Sant",
    ["slit"] = "impossible",
    ["trip"] = "Ein-Fasit",
    ["spinslash"] = "Vae-Sant",
    ["butterfly"] = "Rizet",
    }

    Neurotoxin.knifeplay.stances.Gyanis = {
    ["lateral"] = "Vae-Sant",
    ["vertical"] = "Laesan",
    ["swiftkick"] = "Laesan",
    ["gouge"] = "Ein-Fasit",
    ["jab"] = "Vae-Sant",
    ["feint"] = "Ein-Fasit",
    ["pinprick"] = "Rizet",
    ["raze"] = "Laesan",
    ["bleed"] = "Laesan",
    ["flashkick"] = "Rizet",
    ["crescentcut"] = "Ein-Fasit",
    ["lowhook"] = "Vae-Sant",
    ["slit"] = "Ein-Fasit",
    ["trip"] = "Vae-Sant",
    ["spinslash"] = "Vae-Sant",
    ["butterfly"] = "impossible",
    }

    Neurotoxin.knifeplay.stances["Vae-Sant"] = {
    ["lateral"] = "Ein-Fasit",
    ["vertical"] = "Laesan",
    ["swiftkick"] = "Ein-Fasit",
    ["gouge"] = "Gyanis",
    ["jab"] = "Gyanis",
    ["feint"] = "Laesan",
    ["pinprick"] = "Rizet",
    ["raze"] = "impossible",
    ["bleed"] = "Rizet",
    ["flashkick"] = "Laesan",
    ["crescentcut"] = "impossible",
    ["lowhook"] = "Gyanis",
    ["slit"] = "Ein-Fasit",
    ["trip"] = "impossible",
    ["spinslash"] = "Ein-Fasit",
    ["butterfly"] = "Gyanis",
    }

    Neurotoxin.knifeplay.stances.Rizet = {
    ["lateral"] = "Ein-Fasit",
    ["vertical"] = "Ein-Fasit",
    ["swiftkick"] = "impossible",
    ["gouge"] = "Vae-Sant",
    ["jab"] = "impossible",
    ["feint"] = "impossible",
    ["pinprick"] = "Vae-Sant",
    ["raze"] = "Vae-Sant",
    ["bleed"] = "Ein-Fasit",
    ["flashkick"] = "impossible",
    ["crescentcut"] = "Laesan",
    ["lowhook"] = "impossible",
    ["slit"] = "Gyanis",
    ["trip"] = "Gyanis",
    ["spinslash"] = "Laesan",
    ["butterfly"] = "Gyanis",
    }

    Neurotoxin.knifeplay.stances["Ein-Fasit"] = {
    ["lateral"] = "Laesan",
    ["vertical"] = "Vae-Sant",
    ["swiftkick"] = "Vae-Sant",
    ["gouge"] = "Rizet",
    ["jab"] = "Gyanis",
    ["feint"] = "Gyanis",
    ["pinprick"] = "impossible",
    ["raze"] = "Rizet",
    ["bleed"] = "impossible",
    ["flashkick"] = "Laesan",
    ["crescentcut"] = "Gyanis",
    ["lowhook"] = "Gyanis",
    ["slit"] = "Laesan",
    ["trip"] = "Gyanis",
    ["spinslash"] = "impossible",
    ["butterfly"] = "Laesan",
    }

    Neurotoxin.knifeplay.stances.Laesan = {
    ["lateral"] = "impossible",
    ["vertical"] = "impossible",
    ["swiftkick"] = "Rizet",
    ["gouge"] = "impossible",
    ["jab"] = "Gyanis",
    ["feint"] = "Ein-Fasit",
    ["pinprick"] = "Rizet",
    ["raze"] = "Ein-Fasit",
    ["bleed"] = "Vae-Sant",
    ["flashkick"] = "Vae-Sant",
    ["crescentcut"] = "Vae-Sant",
    ["lowhook"] = "Gyanis",
    ["slit"] = "Vae-Sant",
    ["trip"] = "Rizet",
    ["spinslash"] = "Ein-Fasit",
    ["butterfly"] = "Rizet",
    }
    [/spoiler]

    Combo selector:
    [spoiler]
    Neurotoxin.knifeplay.surged = false
    Neurotoxin.knifeplay.comboHits = 3
    Neurotoxin.knifeplay.comboList = {}
    Neurotoxin.knifeplay.sitaraToxin = "ciguatoxin"
    fighting = false

    function attackRaze()
    local needRaze = 0

    if (Neurotoxin.knifeplay.enemyRebounding == true and Neurotoxin.knifeplay.enemyShield == true) then
    needRaze = 2
    elseif (Neurotoxin.knifeplay.enemyRebounding or Neurotoxin.knifeplay.enemyShield == true) then
    needRaze = 1
    end
    for i=1, Neurotoxin.knifeplay.comboHits do
    if (needRaze > 0) then
    if (checkStance("raze") == true) then
    addToCombo("raze")
    needRaze = needRaze - 1
    elseif (needRaze == 1 and Neurotoxin.knifeplay.enemyShield == false) then
    if (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    else
    addToCombo("ein-fasit")
    Neurotoxin.knifeplay.newStance = "Ein-Fasit"
    end
    elseif (needRaze == 0) then
    if (checkStance("vertical") == true) then
    addToCombo("vertical")
    elseif (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    end
    end
    end


    function attackArm(side)


    for i=1, Neurotoxin.knifeplay.comboHits do
    if (checkStance("jab") == true) then
    addToCombo("jab " ..side)
    elseif (checkStance("vertical") == true) then
    addToCombo("vertical")
    elseif (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    end
    end


    function attackBothArms()

    local hitRight = false
    local hitLeft = false

    for i=1, Neurotoxin.knifeplay.comboHits do
    if (checkStance("jab") == true and hitRight == false) then
    addToCombo("jab right")
    hitRight = true
    elseif (checkStance("jab") == true and hitLeft == false) then
    addToCombo("jab right")
    hitLeft = true
    elseif (checkStance("vertical") == true) then
    addToCombo("vertical")
    elseif (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    end
    end


    function attackLeg(side)


    for i=1, Neurotoxin.knifeplay.comboHits do
    if (checkStance("lowhook") == true) then
    addToCombo("lowhook " ..side)
    elseif (checkStance("vertical") == true) then
    addToCombo("vertical")
    elseif (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    end
    end


    function attackBothLegs()
    local tripped = false
    local hitRight = false
    local hitLeft = false

    for i=1, Neurotoxin.knifeplay.comboHits do
    if (hitLeft == false and checkStance("lowhook") == true ) then
    addToCombo("lowhook left")
    hitLeft = true
    elseif (tripped == false and checkStance("trip") == true ) then
    addToCombo("trip")
    tripped = true
    elseif (hitRight == false and checkStance("lowhook") == true) then
    addToCombo("lowhook right")
    hitRight = true
    elseif (checkStance("vertical") == true) then
    addToCombo("vertical")
    elseif (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    end
    end

    function attackCrescentCut()

    for i=1, Neurotoxin.knifeplay.comboHits do
    if (checkStance("crescentcut") == true) then
    addToCombo("crescentcut")
    else
    addToCombo("gyanis")
    Neurotoxin.knifeplay.newStance = "Gyanis"
    end
    end
    end

    function attackTorso()

    for i=1, Neurotoxin.knifeplay.comboHits do
    if (checkStance("lateral") == true) then
    addToCombo("lateral")
    elseif (checkStance("vertical") == true) then
    addToCombo("vertical")
    elseif (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    end

    end

    function attackHead()

    for i=1, Neurotoxin.knifeplay.comboHits do
    if (checkStance("flashkick") == true) then
    addToCombo("flashkick")
    elseif (checkStance("vertical") == true) then
    addToCombo("vertical")
    elseif (checkStance("swiftkick") == true) then
    addToCombo("swiftkick")
    end
    end


    end

    function executeCombo()
    if (fighting == true and Neurotoxin.knifeplay.comboHits == 0 and  canAttack() == true) then
    if (checkRaze() == true) then
    if (Neurotoxin.knifeplay.surged == false) then
    Neurotoxin.knifeplay.comboHits = 3
    else
    Neurotoxin.knifeplay.comboHits = 4
    end
    Neurotoxin.knifeplay.comboList = {}
    attackRaze()
    end
    send("combo " ..table.concat(Neurotoxin.knifeplay.comboList, " ").. " "..target.. " " ..Neurotoxin.knifeplay.sitaraToxin)
    Neurotoxin.knifeplay.comboList = {}
    if (Neurotoxin.knifeplay.surged == false) then
    Neurotoxin.knifeplay.comboHits = 3
    else
    Neurotoxin.knifeplay.comboHits = 4
    end
    end
    end

    function addToCombo(command)
    if (Neurotoxin.knifeplay.comboHits > 0) then
    table.insert(Neurotoxin.knifeplay.comboList, command)
    Neurotoxin.knifeplay.comboHits = Neurotoxin.knifeplay.comboHits - 1
    echo("\n"..command.." added to combo, " ..Neurotoxin.knifeplay.comboHits.. " hits remainig in combo.")
    end
    end
    [/spoiler]
  • ChelicrixkelChelicrixkel Member Posts: 9
    Apparently I fail at using spoiler tags, if anyone feels like explaining what I did wrong in that post that'd be great.
  • EleEle Member Posts: 3
    This has given me some ideas for my system. I use a bit of a different approach for the decision of what moves can be used in what stance though, with a table for each move with flows, blocking stance as well as commands (both for the COMBO command and normal SITARA <skill> <target> style.

    Dynamically building the attacks from what stance you are currently in totally escaped me though. I'll have to give that a try for sure :)
  • FazleeFazlee Member Posts: 5
    edited July 2013
    This is how I have mine set up in CMUD.

    · Functions for each type of attack which check what stance you're in, perform the appropriate action, store a 'predicted' stance.

    · Aliases/macros chain together functions to perform a combo, e.g. my 'la' alias which hits the left arm as much as it can, does :

    #local $c $s $t
    #if @tarshield {$s=1}
    #if @tarrebound {$s=$s+1}
    #if (@rebound_timer && @rebound_timer&lt;2) {$s=$s+1}
    #switch $s

    Where raze, jab, and surge are functions for the respective attack types.
    Just my Knifeplay folder for reference: http://pastebin.com/B6P8zyuM
  • RobbRobb Member Posts: 3
    Just curious, in your stance tracker.  Why are Ein-Fasit and Vae-Sant in brackets, but the other stances aren't?
  • IniarIniar Member Posts: 3,213 ✭✭✭✭✭
    edited February 2014
    Anything that isn't a single word isn't interpreted as a single variable

    So doing 

    apple = "Sweet"

    is ok

    applepie = "Sweet"

    is ok, but

    apple pie = "Sweet"

    won't work. So,

    ["apple pie"] = "Sweet"

    Likewise, ["Ein-Fasit"] works, whereas Ein-Fasit doesn't
    wit beyond measure is a Sidhe's greatest treasure
Sign In or Register to comment.