IF !ActionListEmpty() !See(NearestEnemyOf(Myself)) THEN RESPONSE #100 END IF HotKey(S) Global("GBStealth","LOCALS",0) THEN RESPONSE #100 DisplayStringHead(Myself,34120) // Hide In Shadows SetGlobal("GBStealth","LOCALS",1) END IF HotKey(S) !Global("GBStealth","LOCALS",0) THEN RESPONSE #100 DisplayStringHead(Myself,4188) // Leaving Shadows SetGlobal("GBStealth","LOCALS",0) END IF Global("GBUnseen","LOCALS",0) OR(2) StateCheck(Myself,STATE_INVISIBLE) StateCheck(Myself,STATE_IMPROVEDINVISIBILITY) THEN RESPONSE #100 SetGlobal("GBUnseen","LOCALS",1) END IF Global("GBUnseen","LOCALS",1) !StateCheck(Myself,STATE_INVISIBLE) !StateCheck(Myself,STATE_IMPROVEDINVISIBILITY) THEN RESPONSE #100 DisplayStringHead(Myself,75113) // You look familiar. Did I see you earlier? SetGlobal("GBUnseen","LOCALS",0) SetGlobal("GBBackStabbingNow","LOCALS",0) END IF Global("GBStealth","LOCALS",1) !Detect([EVILCUTOFF]) Global("GBUnseen","LOCALS",0) !StateCheck(Myself,STATE_INVISIBLE) !StateCheck(Myself,STATE_IMPROVEDINVISIBILITY) THEN RESPONSE #100 EquipMostDamagingMelee() SetGlobal("GBUnseen","LOCALS",1) Hide() END IF HotKey(B) Global("GBBackStab","LOCALS",0) THEN RESPONSE #100 DisplayStringHead(Myself,17591) // The thief will attempt to hide in shadows when an enemy is not in sight. As soon as the thief is hidden, he will attempt to backstab the closest enemy. (<script>) SetGlobal("GBBackStab","LOCALS",1) SetGlobal("GBStealth","LOCALS",1) END IF HotKey(B) !Global("GBBackStab","LOCALS",0) THEN RESPONSE #100 DisplayStringHead(Myself,3042) // The backstab seems to have failed. SetGlobal("GBBackStab","LOCALS",0) END IF Global("GBBackStab","LOCALS",1) See(NearestEnemyOf(Myself)) Global("GBUnseen","LOCALS",1) !Range(LastSeenBy(Myself),3) THEN RESPONSE #100 FollowObjectFormation(LastSeenBy(Myself),11,1) MakeUnselectable(3) END IF Global("GBBackStab","LOCALS",1) Global("GBUnseen","LOCALS",1) !ActuallyInCombat() See(NearestEnemyOf(Myself)) Range(LastSeenBy(Myself),3) THEN RESPONSE #100 Attack(NearestEnemyOf(Myself)) END IF See(NearestEnemyOf(Myself)) Range(LastSeenBy(Myself),<img src='http://www.shsforums.net/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='8)' /> Global("GBAmmoless","LOCALS",0) !HasItemSlot(Myself,SLOT_MISC19) HasItemSlot(Myself,SLOT_WEAPON) !InParty(LastSeenBy(Myself)) !Class(LastSeenBy(Myself),INNOCENT) Allegiance(LastSeenBy(Myself),EVILCUTOFF) THEN RESPONSE #100 SelectWeaponAbility(SLOT_WEAPON,0) Attack(LastSeenBy(Myself)) END IF See(NearestEnemyOf(Myself)) Range(LastSeenBy(Myself),<img src='http://www.shsforums.net/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='8)' /> OR(3) !HasItemSlot(Myself,SLOT_WEAPON) HasItemSlot(Myself,SLOT_MISC19) Global("GBAmmoless","LOCALS",1) !InParty(LastSeenBy(Myself)) !Class(LastSeenBy(Myself),INNOCENT) Allegiance(LastSeenBy(Myself),EVILCUTOFF) THEN RESPONSE #100 EquipMostDamagingMelee() Attack(LastSeenBy(Myself)) END IF OR(3) See(NearestEnemyOf(Myself)) See(TenthNearestEnemyOfType([0.0.0.CLERIC_ALL])) See(TenthNearestEnemyOfType([0.0.0.LONG_BOW])) !Range(LastSeenBy(Myself),<img src='http://www.shsforums.net/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='8)' /> !Range(LastAttackerOf(Myself),<img src='http://www.shsforums.net/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='8)' /> Global("GBAmmoless","LOCALS",0) !HasItemSlot(Myself,SLOT_MISC19) HasItemSlot(Myself,SLOT_WEAPON1) !InParty(LastSeenBy(Myself)) !Class(LastSeenBy(Myself),INNOCENT) Allegiance(LastSeenBy(Myself),EVILCUTOFF) THEN RESPONSE #100 SelectWeaponAbility(SLOT_WEAPON1,0) Attack(LastSeenBy(Myself)) END IF OR(3) See(NearestEnemyOf(Myself)) See(TenthNearestEnemyOfType([0.0.0.CLERIC_ALL])) See(TenthNearestEnemyOfType([0.0.0.LONG_BOW])) !Range(LastSeenBy(Myself),<img src='http://www.shsforums.net/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='8)' /> !Range(LastAttackerOf(Myself),<img src='http://www.shsforums.net/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='8)' /> OR(3) !HasItemSlot(Myself,SLOT_WEAPON1) HasItemSlot(Myself,SLOT_MISC19) Global("GBAmmoless","LOCALS",1) !GlobalTimerNotExpired("GBWizAlacrity","LOCALS") !InParty(LastSeenBy(Myself)) !Class(LastSeenBy(Myself),INNOCENT) Allegiance(LastSeenBy(Myself),EVILCUTOFF) THEN RESPONSE #100 EquipRanged() Attack(LastSeenBy(Myself)) END
Issues:
- sometimes when moving to the backstab position, it will prematurely attack
- setting any variable takes you out of stealth, which makes doing anything complex problematical
- hard to predict how long you'll have in stealth after the attack, you could become visible before you get in your swing (shortsword of backstabbing, anyone?)