Mods to Nyss Script

Scripts and support for your favorite MUD client.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Mods to Nyss Script

Postby Afu » Mon Nov 06, 2017 1:41 pm

For the record, this is just a collection of all the mods i have made, these are examples of how to modify the mudlet code.
Last edited by Afu on Tue Feb 13, 2018 9:31 pm, edited 1 time in total.
Vooku
Sojourner
Posts: 23
Joined: Tue Jul 24, 2007 5:02 pm

Re: Mods to Nyss Script

Postby Vooku » Mon Nov 06, 2017 2:35 pm

Awesome script. Saves a ton of copying/pasting.

Now we just need a @statworn *wink*
Vooku (50 Barb Shammy)
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Nov 08, 2017 2:15 pm

#1) fix the way statitems displays all jumbled: line 32 in @statitems echo(stats[1] .. "\n\n") -- added an extra return because a blank line saves the eyes
#2) fix assist: in the autoassist trigger, add a new regex to the bottom ^(.+) attacks .*
#3) stat everything in a bag! totally robbed nyss's group statter:

this is an alias
alias: @statbag
regex: ^@statbag ?(gsay)?$

Code: Select all

local stats

local togsay = matches[2]

if NyyLIB.statbags == nil then
   cecho("<red>[statbags is nil]\n\n")
   return
end

for k,v in pairs(NyyLIB.statbags) do
   stats = sqliditem(v)

   -- need to distinguish between multiple return values

   if #stats > 1 then
      for nx=1,#stats,1 do
         if string.find(stats[nx], v .. " 1") then
            stats[1] = stats[nx]
         end      
      end
      echo("[multiple return values]\n\n")
   end

   if togsay == "gsay" then
      if stats[1] ~= nil then
         mud:send("gsay * " .. stats[1])
      else
         mud:send("gsay * " .. v .. " : not found in database. identify and mmail to katumi")
      end
   else
      if stats[1] ~= nil then
         echo(stats[1] .. "\n\n")
      else
         echo(v .. " : not found in database. identify and mmail to katumi\n\n")
      end
   end
end


Triggers:
Name: Bags
regex: [ ]+(.+)

Code: Select all

local itemname=matches[2]


itemname = string.gsub(itemname, "%(magic%)", "")
itemname = string.gsub(itemname, "%(illuminating%)", "")
itemname = string.gsub(itemname, "%(glowing%)", "")
itemname = itemname:trim()

table.insert(NyyLIB.statbags, 1, itemname)
enableTrigger("Bagend")


Name: BAGID
regex: (.*) \(carried\) \:

Code: Select all

NyyLIB.statbags = {}
enableTrigger("Bags")


name: bagend
regex: ^$

Code: Select all

disableTrigger("Bags")
disableTrigger("Bagend")



You can change the code a little to stat people that u look at:

Gear capture trigger:
name: Lookstat
regex: ^\<.*\> (.*)$

Code: Select all

local itemname=matches[2]


itemname = itemname:trim()
itemname = string.gsub(itemname, "%(magic%)", "")
itemname = string.gsub(itemname, "%(illuminating%)", "")
itemname = string.gsub(itemname, "%(glowing%)", "")
itemname = itemname:trim()

table.insert(NyyLIB.lookstats, 1, itemname)
enableTrigger("Lookstatend")


name: Lookstatend
regex: ^$

Code: Select all

disableTrigger("Lookstat")
disableTrigger("Lookstatend")


name: LOOKID
regex: .* is a .+-sized level .*

Code: Select all

NyyLIB.lookstats = {}
enableTrigger("Lookstat")


alias
name: @statlook ?(say)?$
regex: ^@statlook ?(say)?$

Code: Select all

local stats

local togsay = matches[2]

if NyyLIB.lookstats == nil then
   cecho("<red>[lookstats is nil]\n\n")
   return
end

for k,v in pairs(NyyLIB.lookstats) do
   stats = sqliditem(v)

   -- need to distinguish between multiple return values

   if #stats > 1 then
      for nx=1,#stats,1 do
         if string.find(stats[nx], v .. " 1") then
            stats[1] = stats[nx]
         end      
      end
      echo("[multiple return values]\n\n")
   end

   if togsay == "say" then
      if stats[1] ~= nil then
         mud:send("say * " .. stats[1])
      else
         mud:send("say * " .. v .. " : not found in database. identify and mmail to katumi")
      end
   else
      if stats[1] ~= nil then
         echo(stats[1] .. "\n\n")
      else
         echo(v .. " : not found in database. identify and mmail to katumi\n\n")
      end
   end
end
Last edited by Afu on Tue Feb 13, 2018 9:31 pm, edited 1 time in total.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Thu Nov 09, 2017 6:13 pm

Added some easier train examples

created a tool to make identifying your zone easy:
alias: @zonen
regex: ^@zonen$

Code: Select all

mud:send ("say " .. map:getCurrentZone())


Code: Select all

-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
-- TODO: update inittrain path in Silverymoon

   testtrain = {
      {48518, "Shalyssa Lurialar"},
      {48850, "Forell Luckaun"},
      {48721, "Seipora Rein"}
   }

   dkloop = {
      {74698, "bankDeposit"},
      {74733, "captain"},
      {74696, "leader"},
      {74714, "leader"},
      {74731, "leader"},
      {74733, "archer"},
      {74746, "leader"},
      {74696, "soldier"},
      {74714, "soldier"},
      {74733, "archer"},
      {74731, "soldier"},
      {74733, "archer"},
      {74746, "soldier"},
      {74696, "soldier"},
      {74733, "archer"},
      {74714, "soldier"},
      {74733, "archer"},
      {74731, "soldier"},
      {74746, "soldier"},
      {74733, "archer"}
      
      
   }
   
   smtrain = {
      {84203, "bankDeposit"},
      {48882, "Willa O'Greensleeves"},
      {48873, "Aratha Sul"},
      {48524, "Lavis Ryl"},
      {48525, "Elaith Waterstill"},
      {48518, "Shalyssa Lurialar"},
      {48850, "Forell Luckaun"},
      {48721, "Seipora Rein"},
      {48681, "Corland Deepforge"},
      {48586, "Ersenas"},
      {49135, "Ultrumm"},
--      {49054, "Tathshandra Tyrar"},
--      {94648, "Otasit"},
      {49117, "devout priest"},
      {49036, "Dragor Keenblade"}
   }

   ashtrain = {
      {87415, "bankDeposit"},
--      {87411, "Stephan"},
--      {87402, "lich"},
      {87263, "gambler"},
      {87270, "bouncer"},
      {87271, "naked man"},
      {87272, "prostitute"},
      {87275, "aging prostitute"},
      {87276, "naked woman"},
      {87254, "Ashstone noble"},
      {87251, "Ashstone noble"},
      {87255, "Ashstone noble"},
      {87249, "Ashstone noble"},
      --{87314, "kindly priest"},
      {87253, "Ashstone noble"},
      {87258, "Ashstone noble"},
      {87257, "Ashstone noble"}
   }

   wdtrain = {
      {13402, "elite"},
      {13359, "elite"},
      {13343, "elite"},
      {13354, "master"},
      {13397, "master"}
--      {85354, "elite guard"},
--      {85358, "elite guard"},
--      {85356, "elite guard"},
--      {85410, "elite guard"},
--      {85421, "elite guard"},
--      {85349, "elite guard"}
   }

cmtrain = {
{44327, "crafty"},
{44328, "crafty"},
{44329, "crafty"},
{44330, "crafty"},
{44331, "crafty"},
{44332, "crafty"},
{44333, "crafty"},
{44334, "crafty"},
{44335, "crafty"},
{44336, "crafty"},
{44337, "crafty"},
{44338, "crafty"},
{44339, "crafty"},
{44340, "crafty"},
{44341, "crafty"},
{44342, "crafty"},
{44313, "orc"},
{44314, "orc"},
{44315, "orc"},
{44316, "orc"},
{44317, "orc"},
{44318, "orc"},
{44319, "orc"},
{44321, "orc"},
{44322, "orc"},
{44323, "orc"},
{44324, "orc"},
{44325, "orc"},
{44326, "orc"},
{71763, "bankDeposit"}
}

function configureTrain()
   -- disable any active triggers prior to enabling
   expandAlias("@resettrain", false)

   cecho("<green>[Laying train tracks...]\n")

   if trainList ~= nil then
      if _G[trainList] ~= nil then
         NyyLIB.smtrainstops = _G[trainList]
         trainList=nil
         return
      end
   end

   if map:getCurrentZone() == "Ashstone" then
      NyyLIB.smtrainstops = ashtrain
   elseif map:getCurrentZone() == "Silverymoon, Gem of the North" then
      NyyLIB.smtrainstops = smtrain
   elseif map:getCurrentZone() == "Northern Waterdeep Main City" then
      NyyLIB.smtrainstops = wdtrain
   elseif map:getCurrentZone() == "The Great Harbor of Waterdeep" then
      NyyLIB.smtrainstops = wdtrain
   elseif map:getCurrentZone() == "Dobluth Kyor - Main City" then
      NyyLIB.smtrainstops = dkloop
   elseif map:getCurrentZone() == "Viperstongue Outpost" then
      NyyLIB.smtrainstops = cmtrain
   end
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Thu Nov 09, 2017 6:16 pm

Now one would ask, why would I make a train of level 35-40 mobs?
Because i can kill these with a 10/20 and slowly burn through them.

But a level 30, can HIT them
every hit is exp and skillup

low levels should get exp from hitting things not from the mobs death.

thx drive thru
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Fri Nov 10, 2017 6:12 am

expanded exp for cm...if u better geared than me

Code: Select all

cmtrain = {
{44327, "bugbear"},
{44328, "bugbear"},
{44329, "bugbear"},
{44330, "bugbear"},
{44331, "bugbear"},
{44332, "bugbear"},
{44333, "bugbear"},
{44334, "bugbear"},
{44335, "bugbear"},
{44336, "bugbear"},
{44337, "bugbear"},
{44338, "bugbear"},
{44339, "bugbear"},
{44340, "bugbear"},
{44341, "bugbear"},
{44342, "bugbear"},
{44313, "orc"},
{44314, "orc"},
{44315, "orc"},
{44316, "orc"},
{44317, "orc"},
{44318, "orc"},
{44319, "orc"},
{44321, "orc"},
{44322, "orc"},
{44323, "orc"},
{44324, "orc"},
{44325, "orc"},
{44326, "orc"},
{41913, "duergar"},
{41914, "duergar"},
{41915, "duergar"},
{41916, "duergar"},
{41917, "duergar"},
{41930, "duergar"},
{41931, "duergar"},
{41932, "duergar"},
{41933, "duergar"},
{41934, "duergar"},
{41935, "duergar"},
{41936, "duergar"},
{41937, "duergar"},
{41938, "duergar"},
{41939, "duergar"},
{41940, "duergar"},
{41941, "duergar"},
{41942, "duergar"},
{41943, "duergar"},
{41944, "duergar"},
{41945, "duergar"},
{41946, "duergar"},
{41951, "duergar"},
{41952, "duergar"},
{41953, "duergar"},
{41954, "duergar"},
{41955, "duergar"},
{41957, "duergar"},
{44046, "duergar"},
{44048, "duergar"},
{44050, "duergar"},
{41934, "duergar"},
{41933, "duergar"},
{41932, "duergar"},
{41917, "duergar"},
{41918, "duergar"},
{41919, "duergar"},
{41920, "duergar"},
{41921, "duergar"},
{41922, "duergar"},
{41923, "duergar"},
{41924, "duergar"},
{41928, "duergar"},
{41929, "duergar"},
{41925, "duergar"},
{41926, "duergar"},
{41927, "duergar"},
{71763, "bankDeposit"}
}
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sun Nov 12, 2017 2:54 am

Rewrote the kick trigger

Code: Select all

-- if autokick enabled send kick
--TODO: should change to recognize group leader bashing (trains). Can't kick if mounted

randumber = math.random(3)
if randumber == 1 then
  mycommand = "headbutt"
elseif randumber == 2 then
  mycommand = "kc"
elseif randumber == 3 then
  mycommand = "shieldp"
end   

if charData:get("autokick") and not checkMask("ran") then
   if groupList:ingroup(matches[2]) or matches[2] == "Your" then
    mud:send(mycommand)
   end
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sun Nov 12, 2017 8:58 pm

Do what lil tells you to

regex:

Code: Select all

(Ashantia|Bele|Delmukeria|Eleari|Elenira|Eliri|Elniri|Emeile|Esara|Gava|Gurru|Ibele|Inama|Ixilliqim|Jiki|Kessarri|Korele|Lilabipple|Lilasena|Lilay|Lilaz|Lilebeple|Lileca|Lilele|Lilemma|Lilena|Lilesa|Lilia|Lilibepple|Lilibiple|Lilippople|Lilithelle|Lilixa|Lilna|Luma|Mersi|Runga|Ssessina|Ssuzzarra|Suzalize|Tule|Vorthra|Xerena|Elinshae|Minara|Emila|Rosera|Goruv|Paya|Soci) orders you to '(.*)'


code:

Code: Select all

mud:send("worship " .. matches[2])
mud:send(matches[3])
Nyyrazzilyss
Sojourner
Posts: 27
Joined: Tue May 19, 2015 6:30 am

Re: Mods to Nyss Script

Postby Nyyrazzilyss » Wed Nov 15, 2017 7:43 pm

A lot of the changes you've posted do work well, but just to mention a couple things

> Rewrote the kick trigger

The change you made having it alternate between kick, shieldpunch, or headbutt needs to also check class in it's decision making. The only class that has all 3 of those skills is warrior.

> created a tool to make identifying your zone easy:

The 'world' command was changed on the mud a year or two back to show you what zone you're current in.

> Do what lil tells you to

The regex on this trigger isn't left anchored to the start of the line.

emote Lilithelle orders you to 'give hole nyyrazzilyss'

would also trigger it

I'd probably also suggest if using something like that to make it a bit more complex by picking up any name, then checking the name against the included katumi database profilename for decision making

Thanks!
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Fri Nov 17, 2017 4:15 am

how to make a twoline version of this code, first you need 2 triggers instead of the big honkin one he uses:

regex:< (?:(\d+)h)?\/?(?:(\d+)H)? ?(?:(\d+)p)?\/?(?:(\d+)P)? ?(?:(\d+)v)?\/?(?:(\d+)V)? ?[\|]?((?:[a-z]+ [0-9+]+\|)+)? ?[\|]?((?:[0-9 ]\|)+) >

Code: Select all

-- < 416h/416H 110v/110V T: Zusuk TC: excellent E: ultrumm EC: nasty wounds EP: sit P: std >
-- < 1037h/1037H 134v/134V P: std >
-- < 824h/824H 547p/911P 111v/111V P: std >


NyyLIB = NyyLIB or {}

if matches[2] ~= "" then
   prompt:set("hp", tonumber(matches[2]))
end

if matches[3] ~= "" then
   prompt:set("maxhp", tonumber(matches[3]))
end

if matches[4] ~= "" then
   prompt:set("psp", tonumber(matches[4]))
else
   prompt:set("psp", nil)
end

if matches[5] ~= "" then
   prompt:set("maxpsp", tonumber(matches[5]))
else
   prompt:set("maxpsp", nil)
end

if matches[6] ~= "" then
   prompt:set("mv", tonumber(matches[6]))
end

if matches[7] ~= "" then
   prompt:set("maxmv", tonumber(matches[7]))
end

-- matches[8] is the powers prompt
if matches[8] ~= "" then
   prompt:decodePowers(matches[8])
end

-- matches[9] - spell slots

if matches[9] ~= "" then
   prompt:decodeSpellSlots(matches[9])
end

regex:< (?:T: ([A-Za-z ]+))? ?(?:TC: ([A-Za-z ]+))? ?(?:E: ([A-Za-z ]+))? ?(?:EC: ([A-Za-z ]+))? ?(?:EP: ([A-Za-z ]+))? (?:P: (.*)) >

Code: Select all

prompt:set("tank", matches[2]:trim())
prompt:set("tankcondition", matches[3]:trim())
prompt:set("enemy", matches[4]:trim())

if prompt:get("enemy") ~= "" then
   setEnemy( prompt:get("enemy") )
end

prompt:set("enemycondition", matches[5]:trim())
prompt:set("enemyposition", matches[6]:trim())
prompt:set("position", matches[7]:trim())

groupList:setHP(whoami(), prompt:get("hp"), prompt:get("maxhp") )

raiseEvent("promptEvent")


-- if no-one is known tanking, and the prompt shows combat look at the room

if groupList:whoTanking() == false and prompt:get("tank") ~= "" then
   groupList:incTanking(prompt:get("tank"))
   look:send()
end
Last edited by Afu on Fri Nov 17, 2017 4:43 am, edited 1 time in total.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Fri Nov 17, 2017 4:30 am

Yes nyss some of those things are true, but people need examples of how to fix these things.
We're not going to sit around waiting for you to do everything.
i982
Sojourner
Posts: 8
Joined: Wed Oct 25, 2017 10:53 am

Re: Mods to Nyss Script

Postby i982 » Fri Nov 17, 2017 7:43 am

for the two-line triggers. i tried them and it still returns in combat message, [Can't fwalk while in combat]
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sat Nov 18, 2017 7:57 am

regex

Code: Select all

< (?:(\d+)h)?\/?(?:(\d+)H)? ?(?:(\d+)p)?\/?(?:(\d+)P)? ?(?:(\d+)v)?\/?(?:(\d+)V)? ?[\|]?((?:[a-z]+ [0-9+]+\|)+)? ?[\|]?((?:[0-9 ]\|)+)? ?(?:T: ([A-Za-z ]+))? ?(?:TC: ([A-Za-z ]+))? ?(?:E: ([A-Za-z ]+))? ?(?:EC: ([A-Za-z ]+))? ?(?:EP: ([A-Za-z ]+))? ?(?:P: (.*))? >


changes to nyss script under captureprompt

Code: Select all

-- < 416h/416H 110v/110V T: Zusuk TC: excellent E: ultrumm EC: nasty wounds EP: sit P: std >
-- < 1037h/1037H 134v/134V P: std >
-- < 824h/824H 547p/911P 111v/111V P: std >


NyyLIB = NyyLIB or {}

if matches[2] ~= "" then
   prompt:set("hp", tonumber(matches[2]))
end

if matches[3] ~= "" then
   prompt:set("maxhp", tonumber(matches[3]))
end

if matches[4] ~= "" then
   prompt:set("psp", tonumber(matches[4]))
else
   prompt:set("psp", nil)
end

if matches[5] ~= "" then
   prompt:set("maxpsp", tonumber(matches[5]))
else
   prompt:set("maxpsp", nil)
end

if matches[6] ~= "" then
   prompt:set("mv", tonumber(matches[6]))
end

if matches[7] ~= "" then
   prompt:set("maxmv", tonumber(matches[7]))
end

-- matches[8] is the powers prompt
if matches[8] ~= "" then
   prompt:decodePowers(matches[8])
end

-- matches[9] - spell slots

if matches[9] ~= "" then
   prompt:decodeSpellSlots(matches[9])
end


if matches[10] ~= "" then
  prompt:set("tank", matches[10]:trim())
  prompt:set("tankcondition", matches[11]:trim())
  prompt:set("enemy", matches[12]:trim())

  if prompt:get("enemy") ~= "" then
     setEnemy( prompt:get("enemy") )
  end

  prompt:set("enemycondition", matches[13]:trim())
  prompt:set("enemyposition", matches[14]:trim())

  if groupList:whoTanking() == false and prompt:get("tank") ~= "" then
     groupList:incTanking(prompt:get("tank"))
     look:send()
  end

end
prompt:set("position", matches[15]:trim())

groupList:setHP(whoami(), prompt:get("hp"), prompt:get("maxhp") )

raiseEvent("promptEvent")


-- if no-one is known tanking, and the prompt shows combat look at the room
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sat Nov 18, 2017 8:46 am

the above did an exptrain for about 1 mob then said im still in combat, but hey, its close :)
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Mon Dec 04, 2017 4:25 am

how to unlock the map

< Removed by administrator - See below for details >
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Mon Dec 04, 2017 2:04 pm

reasons to lock the map: none

reasons to unlock the map: all that buggy getting lost code is no longer broken.

if you are going to hardcode a map that is hidden, dont give them the map and try to hide it.
Nyyrazzilyss
Sojourner
Posts: 27
Joined: Tue May 19, 2015 6:30 am

Re: Mods to Nyss Script

Postby Nyyrazzilyss » Mon Dec 04, 2017 2:42 pm

Afu wrote:how to unlock the map


How to do so was never hidden/or difficult to find, with the expectation that anyone with programming knowledge that wanted to would do so anyways, not matter how much it was obscured or hidden.

I had always asked however for instructions not to be made public. With easy access to instructions, people will unlock the map and never have any experience with finding new locations on Toril.

Anyone that wants this already knows how to do it. The only people that are going to need those instructions are the ones that shouldn't have them (a new player).

Posting them does nothing other then make new players less likely to play.
User avatar
Shevarash
FORGER CODER
Posts: 2944
Joined: Fri Dec 29, 2000 6:01 am

Re: Mods to Nyss Script

Postby Shevarash » Mon Dec 04, 2017 3:15 pm

I've removed the instructions on how to unlock the map. Here's a little background:

The mapper in Nyy's client is a great feature and we're glad that it's available to new and existing players. However, we'd like to keep some mystery for new and old players alike that haven't been to every zone yet. While we can't (and don't want to) control what happens on your client, our policy is to not provide instructions on how to unlock the map on our forums, or link officially to any package that does so.

That said, we will review this policy internally. Feedback on this issue is welcome. You can feel free to post your thoughts in this thread or start a new one.
Shevarash -- Code Forger of TorilMUD
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Mon Dec 04, 2017 6:16 pm

I have no problem with this, but here's what's happening.

when you have an locked map, the fastwalks dont work, they get lost because of gaps

if you think for one second having a big black box up there with one square in it is inviting, you're wrong.

I suggest showing there's a room there, and greying it out in the future, this speedwalk takes you through unexplored area, are you sure?

doubt he's got those kinda chops tho
Nyyrazzilyss
Sojourner
Posts: 27
Joined: Tue May 19, 2015 6:30 am

Re: Mods to Nyss Script

Postby Nyyrazzilyss » Mon Dec 04, 2017 7:27 pm

Afu wrote:when you have an locked map, the fastwalks dont work, they get lost because of gaps


That would be by design. If you don't know how to walk between two room, @fwalk won't know it either.

@fwalk should never path through an unknown area. It should just error indicating there isn't a known path. If for any reason it isn't, bug it with an example and I will fix.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Mon Dec 04, 2017 8:04 pm

lets not turn my nyss script mods into flames, i get it, thanks move on
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Fri Dec 08, 2017 9:31 pm

Alligator / Python farming in ghore

Caution, this does not check for mob condition.

New Folder: Farm

Triggers:

label: NorthernBoundary
substring: A Dividing Trail

Code: Select all

mud:send("south")


label: WesternBoundary
substring: A Trail West of the Alligator Marsh
substring: West of the Alligator Marsh

Code: Select all

mud:send("east")


label: SouthernBoundary
substring: A Trail South of the Alligator Marsh

Code: Select all

mud:send("north")


label: Roc
substring: ROARS

Code: Select all

mud:send("say aid of mage")
mud:send("kill roc")
mud:send("bash roc")


Label: DoneBleeding
substring: Your bleeding seems to be under control for the time being
substring: further won't help any

Code: Select all

enableTrigger("SearchCorpse")
--disableTrigger("DoneBleeding")
mud:send("search corpse")
--mud:send("holy shit! i think it worked!")


Label: StartBleeding
substring: Your wounds continue to bleed out of control
substring: You can't seem to stop the bleeding
substring: is dead

Code: Select all

disableTrigger("SearchCorpse")
mud:send("bandage self")


Label: SearchCorpse
substring: You don't find anything.

{code]mud:send("search corpse")[/code]

Label: FoundOne
substring: You find

Code: Select all

mud:send("get all corpse")
mud:send("put all hole")
mud:send("kick young")


Label: NoTarget
substring: Shieldpunch who

Code: Select all

mud:send("flee")


Label: KillGator
substring: You search exhaustively and conclude there is nothing to be found!
substring: You flee

Code: Select all

mud:send("kick young")


Label: KillPython
substring: Kick who

Code: Select all

mud:send("shieldpunch python")
Vooku
Sojourner
Posts: 23
Joined: Tue Jul 24, 2007 5:02 pm

Re: Mods to Nyss Script

Postby Vooku » Sat Dec 09, 2017 12:14 pm

Is searching the corpse right the kill missing from this?
Vooku (50 Barb Shammy)
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Tue Dec 12, 2017 2:17 pm

Vooku ^_^
No, it checks for bleeding on death, then begins searching.


new fun toy:


Alias:
Name: @die
Regex: ^@die$

Code: Select all

function die_sucka()
   mud:send("ASSASSINATE noble")
   --mud:send("tug suit")
   --tempTimer(1500,die_sucka)
end
tempTimer(1500,[[die_sucka()]])
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Thu Jan 04, 2018 5:47 am

Paladin changes to the 12/23 build
12/23/2017 NyyLIB011rc1b

Paladin:
in the
procPromptPal()

function, find his

Code: Select all

      if charData:get("autohands") then
         if percent < .5 then
            if timer:get("lay_on_hands") == nil and not timer:get("cooldown") then
               useMeleePower("lh")
               return
            end
         end
      end

right under that
put this:

Code: Select all

   
    -- hack for healing light
      if charData:get("autohands") and spell:getSlot(2) > 0 then
         if percent < .7 then
             cecho("** healing light fire **")
               spell:cast("HL")
               return
            end
         end
      -- AL
      if charData:get("autohands") and spell:getSlot(5) > 0 then
         if percent < .9 then
             cecho("** Aura of Life fire **")
               spell:cast("AL")
               return
            end
         end



^^ should prolly check for the buff once i got more than 1 slot for that 5th, ill fix soon :)
Last edited by Afu on Fri Jan 05, 2018 8:41 pm, edited 2 times in total.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Fri Jan 05, 2018 7:51 pm

Advanced lookup for version: 12/23/2017 NyyLIB011rc1b


Script:

Code: Select all

-- bit of a hack but its what i do :)
-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
function gizl(args)
--function sqliditem(xitemname)
   local recs, row

   local retval = {}
  words = args:split("\ ")
   -- remove trailing (poisoned) from name   
   --xitemname=string.gsub(xitemname, "%(poisoned%)", "")
   --xitemname= xitemname:trim()

   --xitemname=string.gsub(xitemname, "'", "''")
   if words[6] ~= nil then
     cecho("\nWhat are you crazy? ill give you 5\n")
     recs = assert(NyyLIB.conn:execute([[SELECT item_name, short_stats FROM items WHERE short_stats LIKE '%]] .. words[1] .. [[%' AND short_stats like '%]] .. words[2] .. [[%' AND short_stats like '%]] .. words[3] .. [[%' AND short_stats like '%]] .. words[4] .. [[%' AND short_stats like '%]] .. words[5] .. [[%']]))      
     return
   elseif words[5] ~= nil then
     recs = assert(NyyLIB.conn:execute([[SELECT item_name, short_stats FROM items WHERE short_stats LIKE '%]] .. words[1] .. [[%' AND short_stats like '%]] .. words[2] .. [[%' AND short_stats like '%]] .. words[3] .. [[%' AND short_stats like '%]] .. words[4] .. [[%' AND short_stats like '%]] .. words[5] .. [[%']]))      
   elseif words[4] ~= nil then
     recs = assert(NyyLIB.conn:execute([[SELECT item_name, short_stats FROM items WHERE short_stats LIKE '%]] .. words[1] .. [[%' AND short_stats like '%]] .. words[2] .. [[%' AND short_stats like '%]] .. words[3] .. [[%' AND short_stats like '%]] .. words[4] .. [[%']]))      
   elseif words[3] ~= nil then
     recs = assert(NyyLIB.conn:execute([[SELECT item_name, short_stats FROM items WHERE short_stats LIKE '%]] .. words[1] .. [[%' AND short_stats like '%]] .. words[2] .. [[%' AND short_stats like '%]] .. words[3] .. [[%']]))      
  elseif words[2] ~= nil then
     recs = assert(NyyLIB.conn:execute([[SELECT item_name, short_stats FROM items WHERE short_stats LIKE '%]] .. words[1] .. [[%' AND short_stats like '%]] .. words[2] .. [[%']]))   
   else
     recs = assert(NyyLIB.conn:execute([[SELECT item_name, short_stats FROM items WHERE short_stats LIKE '%]] .. words[1] .. [[%']]))
  end
   
   row = recs:fetch({})

   while row do
      retval[#retval+1] = row[2]
      row = recs:fetch({})
   end

   recs:close()
   
   return(retval)
end


alias
@advfind
regex:@advfind (.*)

Code: Select all

local data

cecho("<red>[Attempting to identify " .. matches[2] .. "]\n")

data = gizl(matches[2])

for k,v in pairs(data) do
   cecho("\n<green>" .. v .. "\n")
end

cecho ("<red>[" .. #data .. " matches in database]\n")
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Fri Jan 05, 2018 7:54 pm

can also modify to be much more specific, change all the short_stats to long_stats
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Thu Jan 11, 2018 9:19 pm

regex: ^([A-Za-z]+) tells you '(worm|well|hole|wormhole|hol) ([A-Za-z]+)( .*)?'

code

Code: Select all

if matches[4] == "me" or matches[4] == "please" then
  send("worm " .. matches[2])
else
  send("worm " .. matches[4])
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 17, 2018 4:21 am

trying to work out a better bard script

...

this is my working idea
in the singer script

Code: Select all

      if prompt:get("psp") == prompt:get("maxpsp") and charData:get("_switch") == 0 and not charData:get("forcerenew") then
         if charData:get("_song") ~= charData:get("song") then
            if charData:get("_song") ~= ""  and charData:get("song") ~= "" then
               cecho("<red>\n[Max mana : switching songs]\n")
               if charData:get("_song") == "song of harming" or charData:get("_song") == "song of offensive disruption" then
                  music(charData:get("_instrument"), charData:get("_song"), charData:get("effect") )
               else
                  music(charData:get("_instrument"), charData:get("_song"), "")
               end
            elseif charData:get("_song") == "" and charData:get("song") == "song of renewal" then
               --   if max psp and singing renew switch to heal (or regen)

               if charData:get("level") >= 31 then
                  cecho("<red>\n[Max mana : switching songs to heal]\n")
                  music(charData:get("lute"), "song of healing", "")
               else
                  cecho("<red>\n[Max mana : switching songs to regen]\n")
                  music(charData:get("lute"), "song of regeneration", "")
               end
            end
         end
      end


replace with something like this

Code: Select all

      if prompt:get("psp") == prompt:get("maxpsp") and charData:get("_switch") == 0 and not charData:get("forcerenew") then
         if charData:get("_song") ~= charData:get("song") then
            if charData:get("_song") ~= ""  and charData:get("song") ~= "" then
               cecho("<red>\n[Max mana : switching songs]\n")
               if charData:get("_song") == "song of harming" or charData:get("_song") == "song of offensive disruption" then
                  music(charData:get("_instrument"), charData:get("_song"), charData:get("effect") )
               else
                  music(charData:get("_instrument"), charData:get("_song"), "")
               end
            elseif charData:get("_song") == "" and charData:get("song") == "song of renewal" then
               --   if max psp and singing renew switch to heal (or regen)

               if table.contains( {"awful", "pretty hurt", "nasty wounds", "small wounds"}, tankcondition ) then
                  cecho("<red>\n[Max mana : switching songs to heal]\n")
                  music(charData:get("lute"), "song of healing", "")
               end
            end
         end
      end




also needs one before the final end

Code: Select all

if not charData:get("_switch") and table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds", "small wounds"}, tankcondition ) and charData:get("song") == "song of offensive harmony" then
    music(charData:get("lute"), "song of healing", "")
    return
end


Code: Select all

if not charData:get("_switch") and table.contains( {"excellent", "few scratches"}, tankcondition ) and charData:get("song") == "song of healing" then
    music(charData:get("drum"), "song of offensive harmony", "")
    return
end
Last edited by Afu on Wed Jan 17, 2018 4:52 am, edited 5 times in total.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 17, 2018 4:36 am

my paladin changes so far, just for solo



Code: Select all

function procPromptPal()
   local hp=prompt:get("hp")
   local maxhp=prompt:get("maxhp")
   local percent=hp/maxhp
   
   if not checkMask("pal") then
      return
   end
   
   if inCombat() then
      -- melee powers
      
      if charData:get("autohands") then
         if percent < .5 then
            if timer:get("lay_on_hands") == nil and not timer:get("cooldown") then
               useMeleePower("lh")
               return
            end
         end
      end

      if charData:get("autohands") and percent < .7 and spell:getSlot(2) > 0 then
         spell:cast("HL")
         return
      end

      if charData:get("autohands") and maxhp < 800 and spell:getSlot(5) > 0 and percent < .95 then
         spell:cast("AL")
         return
      end      
      -- abort if stunned

      if buff:get("stun") then
         return
      end
      
      -- taunts : need to change usage

      if charData:get("autodivchal") then
         if timer:get("divine_challenge") == nil and not timer:get("cooldown") then
            useMeleePower("dc")
            return
         end
      end

      if charData:get("autonemesis") then
         if timer:get("true_nemesis") == nil and not timer:get("cooldown") then
            if prompt:get("tank") ~= "" and prompt:get("tank") ~= whoami() then
               useMeleePower("tn")
               return
            end
         end
      end

      -- divine smite

      if charData:get("autodivsmite") then
         if timer:get("divine_smite") == nil and not timer:get("cooldown") then
            useMeleePower("ds")
            return
         end
      end

      -- 1h/shield melee powers
      if isIconActive("bolstering_strike") then
         if charData:get("autorcharge") then
               if timer:get("radiant_charge") == nil and not timer:get("cooldown") then
                  if prompt:get("enemyposition") == "std" then
                     useMeleePower("rc")
                     return
                  end
               end
         end

         if charData:get("autossmite") then
            if timer:get("shielding_smite") == nil and not timer:get("cooldown") then
               useMeleePower("ss")
               return
            end
         end

         if maxhp-hp > 100 then
            if charData:get("autobstrike") then
               if timer:get("bolstering_strike") == nil and not timer:get("cooldown") then
                  useMeleePower("bs")
                  return
               end
            end
         end

         if charData:get("autowsmite") then
            if timer:get("wrathful_smite") == nil and not timer:get("cooldown") then
               useMeleePower("ws")
               return
            end
         end

         if charData:get("autoesmite") then
            if timer:get("enervating_smite") == nil and not timer:get("cooldown") then
               useMeleePower("es")
               return
            end
         end

         --if charData:get("autobstrike") then
            --if timer:get("bolstering_strike") == nil and not timer:get("cooldown") then
            --   useMeleePower("bs")
            --   return
            --end
         --end
      end
   
      -- 2h powers
      if isIconActive("valiant_strike") then

         if charData:get("autothsmite") and prompt:get("enemyposition") == "std" then
            if timer:get("thunderous_smite") == nil and not timer:get("cooldown") then
               useMeleePower("ts")
               return
            end
         end

         if charData:get("autovstrike") then
            if timer:get("valiant_strike") == nil and not timer:get("cooldown") then
               useMeleePower("vs")
               return
            end
         end

         if charData:get("autobsmite") then
            if timer:get("brilliant_smite") == nil and not timer:get("cooldown") then
               useMeleePower("brs")
               return
            end
         end

         if charData:get("autotesmite") then
            if timer:get("terrifying_smite") == nil and not timer:get("cooldown") then
               useMeleePower("trs")
               return
            end
         end

         if charData:get("autowsmite") then
            if timer:get("whirlwind_smite") == nil and not timer:get("cooldown") then
               useMeleePower("wws")
               return
            end
         end
      end
   end
end

function SpellsPal()
   return
end


function divine_challenge(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end
   
   if xcommand == buttons.INIT then
      if charData:get("autodivchal") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autodivchal", xcommand)
   end
end

function true_nemesis(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end
   
   if xcommand == buttons.INIT then
      if charData:get("autonemesis") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autonemesis", xcommand)
   end
end

function divine_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end
   
   if xcommand == buttons.INIT then
      if charData:get("autodivsmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autodivsmite", xcommand)
   end
end

function PopulateButtonCooldown(fname, xvalue)
   local label=findlabel(fname)

   -- Make sure button is still active
   if label ~= nil then
      if xvalue  > 0 then
         -- label:echo([[<p style="font-size:20px"><b><center><font color="]] .. charData:get("numcolor", true) .. [[">]] .. timedisplay(xvalue) .. [[</font></center></b></p>]])      
         label:echo([[<p style="font-size:20px"><b><center><font color="]] .. charData:get("numcolor", true) .. [[">]] .. xvalue .. [[</font></center></b></p>]])      
      else
         label:echo([[<p style="font-size:14px"><b><center><font color="white">   </font></center></b></p>]])
      end
   end
end

function lay_on_hands(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end
   
   if xcommand == buttons.INIT then
      if charData:get("autohands") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autohands", xcommand)
   end
end


function bolstering_strike(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autobstrike") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton("bolstering_strike", "autobstrike", xcommand)
   end
end

function radiant_charge(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autorcharge") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton("radiant_charge", "autorcharge", xcommand)
   end
end

function shielding_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autossmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton("shielding_smite", "autossmite", xcommand)
   end
end

function enervating_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autoesmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton("enervating_smite", "autoesmite", xcommand)
   end
end

function wrathful_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autowsmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton("wrathful_smite", "autowsmite", xcommand)
   end
end

-- 2h melee powers

function valiant_strike(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autovstrike") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autovstrike", xcommand)
   end
end

function thunderous_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autothsmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autothsmite", xcommand)
   end
end

function brilliant_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autobsmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autobsmite", xcommand)
   end
end

function terrifying_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autotesmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autotesmite", xcommand)
   end
end

function whirlwind_smite(fname, xcommand)
   -- if xcommand > 0, function being called re: timer
   
   if xcommand >= 0 then
      PopulateButtonCooldown(fname, xcommand)
   end

   if xcommand == buttons.INIT then
      if charData:get("autowsmite") then
         setLabelImage(fname, fname .. "-on.png")
      else
         setLabelImage(fname, fname .. "-off.png")
      end
      return
   end

   if xcommand == buttons.CLICK then
      shiftSkillButton(fname, "autowhsmite", xcommand)
   end
end
Last edited by Afu on Wed Jan 17, 2018 5:48 am, edited 2 times in total.
i982
Sojourner
Posts: 8
Joined: Wed Oct 25, 2017 10:53 am

Re: Mods to Nyss Script

Postby i982 » Wed Jan 17, 2018 5:02 am

here is what i got. how does it look in one piece?

Code: Select all

            function SingerScript(event)
   if checkMask("singer") then
local tankcondition= prompt:get("tankcondition")
local psp=prompt:get("psp")
local maxpsp=prompt:get("maxpsp")

      -- cast harmonious blessing if down and not moving
      if charData:get("autobless") then
         if not buff:get("harmonious_blessing") then
            if getSpellCount("harmonious_blessing") > 0 then
               if not spell:getMoving() then
                  spell:cast("hbl")
               end
            end
         end
      end


-- gonna switch if psp is still pretty good and im playing the wrong song based on the prompt conditions
-- ie, i dont wanna sing heal if tank is excellent, few scratches or small wounds

    if table.contains( {"awful", "pretty hurt", "nasty wounds"}, tankcondition ) and charData:get("song") == "song of offensive harmony" then
      music(charData:get("lute"), "song of healing", "")
      --return
    end

    if table.contains( {"excellent", "few scratches"}, tankcondition ) and charData:get("song") == "song of healing" then
      music(charData:get("drum"), "song of offensive harmony", "")
      --return
    end
 -- end mod to normal script
 
      if prompt:get("psp") == prompt:get("maxpsp") and charData:get("_switch") == 0 and not charData:get("forcerenew") then
         if charData:get("_song") ~= charData:get("song") then
            if charData:get("_song") ~= ""  and charData:get("song") ~= "" then
               cecho("<red>\n[Max mana : switching songs]\n")
               if charData:get("_song") == "song of harming" or charData:get("_song") == "song of offensive disruption" then
                  music(charData:get("_instrument"), charData:get("_song"), charData:get("effect") )
               else
                  music(charData:get("_instrument"), charData:get("_song"), "")
               end
            elseif charData:get("_song") == "" and charData:get("song") == "song of renewal" then
               --   if max psp and singing renew switch to heal or offensive harmony
               if charData:get("level") >= 31 then
            if table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds"}, tankcondition ) then
              music(charData:get("lute"), "song of healing", "")
                 else
              music(charData:get("drum"), "song of offensive harmony", "")
            end
               else
             if table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds"}, tankcondition ) then
                  music(charData:get("lute"), "song of regeneration", "")
                   else
              music(charData:get("drum"), "song of offensive harmony", "")
             end
               end
            end
         end
      end
   end
end
Last edited by i982 on Wed Jan 17, 2018 6:36 am, edited 2 times in total.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 17, 2018 5:04 am

No You missed it, needs to be something like this

Code: Select all

-- this function will be called on all mud prompts
function SingerScript(event)
   if checkMask("singer") then

      -- cast harmonious blessing if down and not moving
      if charData:get("autobless") then
         if not buff:get("harmonious_blessing") then
            if getSpellCount("harmonious_blessing") > 0 then
               if not spell:getMoving() then
                  spell:cast("hbl")
               end
            end
         end
      end

      if prompt:get("psp") == prompt:get("maxpsp") and charData:get("_switch") == 0 and not charData:get("forcerenew") then
         if charData:get("_song") ~= charData:get("song") then
            if charData:get("_song") ~= ""  and charData:get("song") ~= "" then
               cecho("<red>\n[Max mana : switching songs]\n")
               if charData:get("_song") == "song of harming" or charData:get("_song") == "song of offensive disruption" then
                  music(charData:get("_instrument"), charData:get("_song"), charData:get("effect") )
               else
                  music(charData:get("_instrument"), charData:get("_song"), "")
               end
            elseif charData:get("_song") == "" and charData:get("song") == "song of renewal" then
               --   if max psp and singing renew switch to heal (or regen)

               if charData:get("level") >= 31 then
                  cecho("<red>\n[Max mana : switching songs to heal]\n")
                  music(charData:get("lute"), "song of healing", "")
               else
                  cecho("<red>\n[Max mana : switching songs to regen]\n")
                  music(charData:get("lute"), "song of regeneration", "")
               end
            end
         end
      end
   end

if not charData:get("_switch") and table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds", "small wounds"}, tankcondition ) and charData:get("song") == "song of offensive harmony" then
    music(charData:get("lute"), "song of healing", "")
    return
end

if not charData:get("_switch") and table.contains( {"excellent", "few scratches"}, tankcondition ) and charData:get("song") == "song of healing" then
    music(charData:get("drum"), "song of offensive harmony", "")
    return
end

end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 17, 2018 5:39 am

ok i think i have it

from line 211 -- the begining of the singer script function to the end
replace all the code with this:

Code: Select all

function SingerScript(event)
   if checkMask("singer") then

      -- cast harmonious blessing if down and not moving
      if charData:get("autobless") then
         if not buff:get("harmonious_blessing") then
            if getSpellCount("harmonious_blessing") > 0 then
               if not spell:getMoving() then
                  spell:cast("hbl")
               end
            end
         end
      end


-- gonna switch if psp is still pretty good and im playing the wrong song based on the prompt conditions
-- ie, i dont wanna sing heal if tank is excellent, few scratches or small wounds

    if table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds"}, tankcondition ) and charData:get("song") == "song of offensive harmony" then
      music(charData:get("lute"), "song of healing", "")
      --return
    end

    if table.contains( {"excellent", "few scratches", "small wounds"}, tankcondition ) and charData:get("song") == "song of healing" then
      music(charData:get("drum"), "song of offensive harmony", "")
      --return
    end
 -- end mod to normal script
 
      if prompt:get("psp") == prompt:get("maxpsp") and charData:get("_switch") == 0 and not charData:get("forcerenew") then
         if charData:get("_song") ~= charData:get("song") then
            if charData:get("_song") ~= ""  and charData:get("song") ~= "" then
               cecho("<red>\n[Max mana : switching songs]\n")
               if charData:get("_song") == "song of harming" or charData:get("_song") == "song of offensive disruption" then
                  music(charData:get("_instrument"), charData:get("_song"), charData:get("effect") )
               else
                  music(charData:get("_instrument"), charData:get("_song"), "")
               end
            elseif charData:get("_song") == "" and charData:get("song") == "song of renewal" then
               --   if max psp and singing renew switch to heal or offensive harmony
               if charData:get("level") >= 31 then
            if table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds"}, tankcondition ) then
              music(charData:get("lute"), "song of healing", "")
                 else
              music(charData:get("drum"), "song of offensive harmony", "")
            end
               else
             if table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds"}, tankcondition ) then
                  music(charData:get("lute"), "song of regeneration", "")
                   else
              music(charData:get("drum"), "song of offensive harmony", "")
             end
               end
            end
         end
      end
   end
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 17, 2018 6:33 am

finished bard script, thanks areh

Code: Select all

function SingerScript(event)
   if checkMask("singer") then
  local tankcondition = prompt:get("tankcondition")
   local psp = prompt:get("psp")
   local maxpsp = prompt:get("maxpsp")
   
      -- cast harmonious blessing if down and not moving
      if charData:get("autobless") then
         if not buff:get("harmonious_blessing") then
            if getSpellCount("harmonious_blessing") > 0 then
               if not spell:getMoving() then
                  spell:cast("hbl")
               end
            end
         end
      end


-- gonna switch if psp is still pretty good and im playing the wrong song based on the prompt conditions
-- ie, i dont wanna sing heal if tank is excellent, few scratches or small wounds
    if psp > 50 then
      if table.contains( {"awful", "pretty hurt", "nasty wounds"}, tankcondition ) and charData:get("song") == "song of offensive harmony" then
        music(charData:get("lute"), "song of healing", "")
        --return
      end
      if table.contains( {"excellent", "few scratches"}, tankcondition ) and charData:get("song") == "song of healing" then
        music(charData:get("drum"), "song of offensive harmony", "")
        --return
      end
      end
 -- end mod to normal script
 
      if prompt:get("psp") == prompt:get("maxpsp") and charData:get("_switch") == 0 and not charData:get("forcerenew") then
         if charData:get("_song") ~= charData:get("song") then
            if charData:get("_song") ~= ""  and charData:get("song") ~= "" then
               cecho("<red>\n[Max mana : switching songs]\n")
               if charData:get("_song") == "song of harming" or charData:get("_song") == "song of offensive disruption" then
                  music(charData:get("_instrument"), charData:get("_song"), charData:get("effect") )
               else
                  music(charData:get("_instrument"), charData:get("_song"), "")
               end
            elseif charData:get("_song") == "" and charData:get("song") == "song of renewal" then
               --   if max psp and singing renew switch to heal or offensive harmony
               if charData:get("level") >= 31 then
            if table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds"}, tankcondition ) then
              music(charData:get("lute"), "song of healing", "")
                 else
              music(charData:get("drum"), "song of offensive harmony", "")
            end
               else
             if table.contains( {"awful", "pretty hurt", "nasty wounds", "few wounds"}, tankcondition ) then
                  music(charData:get("lute"), "song of regeneration", "")
                   else
              music(charData:get("drum"), "song of offensive harmony", "")
             end
               end
            end
         end
      end
   end
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sun Jan 21, 2018 2:57 pm

Modified the paladin script again, added DB



Code: Select all

function procPromptPal()
   local hp=prompt:get("hp")
   local maxhp=prompt:get("maxhp")
   local percent=hp/maxhp
   local rn
   
   if not checkMask("pal") then
      return
   end
   
   if inCombat() then
      -- melee powers
      if charData:get("autohands") then
         if percent < .5 then
            if timer:get("lay_on_hands") == nil and not timer:get("cooldown") then
               useMeleePower("lh")
               return
            end
         end
      end

      if charData:get("autohands") and percent < .7 and spell:getSlot(2) > 0 then
         spell:cast("HL")
         return
      end
                -- arbitrary number 750 because thats how many hp i have max without al
      if charData:get("autohands") and maxhp < 750 and spell:getSlot(5) > 0 and percent < .95 then
         spell:cast("AL")
         return
      end      
      -- abort if stunned

      if buff:get("stun") then
         return
      end
      
      -- taunts : need to change usage

      if charData:get("autodivchal") then
         if timer:get("divine_challenge") == nil and not timer:get("cooldown") then
            useMeleePower("dc")
            return
         end
      end

      if charData:get("autonemesis") then
         if timer:get("true_nemesis") == nil and not timer:get("cooldown") then
            if prompt:get("tank") ~= "" and prompt:get("tank") ~= whoami() then
               useMeleePower("tn")
               return
            end
         end
      end

      -- divine smite

      if charData:get("autodivsmite") then
         if timer:get("divine_smite") == nil and not timer:get("cooldown") then
            useMeleePower("ds")
            return
         end
      end

      -- 1h/shield melee powers
      if isIconActive("bolstering_strike") then
         if charData:get("autorcharge") then
               if timer:get("radiant_charge") == nil and not timer:get("cooldown") then
                  if prompt:get("enemyposition") == "std" then
                     useMeleePower("rc")
                     return
                  end
               end
         end

         if charData:get("autossmite") then
            if timer:get("shielding_smite") == nil and not timer:get("cooldown") then
               useMeleePower("ss")
               return
            end
         end

         if maxhp-hp > 100 then
            if charData:get("autobstrike") then
               if timer:get("bolstering_strike") == nil and not timer:get("cooldown") then
                  useMeleePower("bs")
                  return
               end
            end
         end

         if charData:get("autowsmite") then
            if timer:get("wrathful_smite") == nil and not timer:get("cooldown") then
               useMeleePower("ws")
               return
            end
         end

         if charData:get("autoesmite") then
            if timer:get("enervating_smite") == nil and not timer:get("cooldown") then
               useMeleePower("es")
               return
            end
         end

         --if charData:get("autobstrike") then
            --if timer:get("bolstering_strike") == nil and not timer:get("cooldown") then
            --   useMeleePower("bs")
            --   return
            --end
         --end
      end

     if charData:get("autodivsmite") and spell:getSlot(4) > 0 then
        rn = math.random(1000)
        if rn > 980 then
         spell:cast("DB")
         return
       end
     end
      
      -- 2h powers
      if isIconActive("valiant_strike") then

         if charData:get("autothsmite") and prompt:get("enemyposition") == "std" then
            if timer:get("thunderous_smite") == nil and not timer:get("cooldown") then
               useMeleePower("ts")
               return
            end
         end

         if charData:get("autovstrike") then
            if timer:get("valiant_strike") == nil and not timer:get("cooldown") then
               useMeleePower("vs")
               return
            end
         end

         if charData:get("autobsmite") then
            if timer:get("brilliant_smite") == nil and not timer:get("cooldown") then
               useMeleePower("brs")
               return
            end
         end

         if charData:get("autotesmite") then
            if timer:get("terrifying_smite") == nil and not timer:get("cooldown") then
               useMeleePower("trs")
               return
            end
         end

         if charData:get("autowsmite") then
            if timer:get("whirlwind_smite") == nil and not timer:get("cooldown") then
               useMeleePower("wws")
               return
            end
         end
      end
   end
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Tue Jan 23, 2018 9:16 pm

Health Bar and Xp Bar -- modified the mudlet health bar on forums -- thanks Vooku


Image


Add to the bottom of nyss - Capture Prompt --
updated red to show pain of death


Code: Select all

Giz = Giz or {}

--- new code for hp bar
--- new code for hp bar

local cur_hp, max_hp = tonumber(matches[2]), tonumber(matches[3])

Giz.hpbar = Geyser.Gauge:new({
  name="Giz.hpbar", -- name
  x="0%", y="4%", -- position
  width="10%", -- how far across the screen
   height="20px", -- how tall
})
Giz.hpbar.front:setStyleSheet([[background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #98f041, stop: 0.1 #8cf029, stop: 0.49 #66cc00, stop: 0.5 #52a300, stop: 1 #66cc00);
    border-top: 1px black solid;
    border-left: 1px black solid;
    border-bottom: 1px black solid;
    border-radius: 7;
      font-size:18px;
    padding: 3px;
]])
Giz.hpbar.back:setStyleSheet([[background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #cc3300, stop: 0.1 #cc6600, stop: 0.49 #ff0000, stop: 0.5 #993300, stop: 1 #993300);
    border-width: 1px;
    border-color: black;
    border-style: solid;
    border-radius: 7;
      font-size:18px;
    padding: 3px;
]])


Giz.hpbar:setValue(cur_hp,max_hp)


xp bar goes in the exp trigger, search for next level

Code: Select all

-- Your guildmaster says 'You have just begun the trek to your next level!' - l1/0%

--if NyyLIB.xpwindow == nil then
--   return
--end

--local xppercent = 100 - tonumber(matches[3])

--NyyLIB.xpwindow:echo([[<p style="font-size:20px"><b><center><font color="red">L:]] .. charData:get("level") .. " " .. xppercent .. [[%</font></center></b></p>]])   

--if NyyLIB.delxpline then
--   eraseLine()
--   NyyLIB.delxpline = false
--end
--- new code for xp bar
Giz = Giz or {}

if tonumber(charData:get("level")) > 49 then
  local cur_xp = 100
else
  local cur_xp = 100 - tonumber(matches[3])
end
local max_xp = 100
   -- vote button
Giz.xpbar = Geyser.Gauge:new({
  name="Giz.xpbar", -- name
  x="0%", y="1%", -- position
  width="10%", -- how far across the screen
   height="20px", -- how tall
})
Giz.xpbar.front:setStyleSheet([[background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffff99, stop: 0.1 #ffff99, stop: 0.49 #ffff00, stop: 0.5 #cccc00, stop: 1 #ffff00);
    border-top: 1px black solid;
    border-left: 1px black solid;
    border-bottom: 1px black solid;
    border-radius: 7;
    padding: 3px;
]])
Giz.xpbar.back:setStyleSheet([[background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #cc3300, stop: 0.1 #cc6600, stop: 0.49 #ff0000, stop: 0.5 #993300, stop: 1 #993300);
    border-width: 1px;
    border-color: black;
    border-style: solid;
    border-radius: 7;
    padding: 3px;
]])
Giz.xpbar:setValue(cur_xp,max_xp)
Last edited by Afu on Wed Jan 24, 2018 6:29 pm, edited 2 times in total.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 24, 2018 2:24 am

Nondetect timer for Obibble

I think i got this right, i tested it with another buff.
Basically add this to GUI Group at or near line 82

Code: Select all

   if buff:get("Nondetection", xchar) then
      buffdisplay = buffdisplay .. createBuffDisplay(xchar, "Nondetection", "non")
   end


going to need a trigger to null it when it drops before timer ends

Code: Select all

buff:del(whoami(), "Nondetection")
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 24, 2018 5:11 am

rewrote the @cd command to be more informative for Vooku

@target mobname
@cd n|s|e|w|d|u

Code: Select all

function countdown()
   NyyLIB.countdown = NyyLIB.countdown - 1
   
   if NyyLIB.countdown > 0 then
      mud:send("GSAY moving " .. NyyLIB.countdir .. " in " .. NyyLIB.countdown .. " seconds and killing " .. NyyLIB.target)
      tempTimer(1, [[countdown()]])
   else
      expandAlias("movea " .. NyyLIB.countdir, false)

      if NyyLIB.target ~= nil then
         mud:send("KILL " .. NyyLIB.target)
      else
         mud:send("HITALL all")
      end
   end
end

if matches[2] == nil then
   if NyyLIB.target == nil then
      cecho("<red>[Countdown script: No target set]\n")
      return
   else
      cecho("<red>[Countdown script: " .. NyyLIB.target .. "]\n")
      cecho("\nMove Dir:" .. matches[2] .. "\n")
   end
else
   -- disable rescue
   if checkMask("fighter") then
      if charData:get("rescuetype") ~= "off" then
         buttons:change("rescuetype", "off", "rescue")
      end
   end

   NyyLIB.countdown = 6
  NyyLIB.countdir = NyyLIB.fulldirs[matches[2]:trim()]

   countdown()
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Jan 24, 2018 6:47 pm

Updated Sounds: http://static1.grsites.com/archive/sounds/cartoon/cartoon011.wav
save as spring.wav in the sounds folder of the nyss profile

add this to your stability boots!

trigger: You spring from the ground like a leopard
type: substring

if you want to hear on others:
trigger: springs from the ground like a leopard, coming up into a fighting stance
type: substring

Code: Select all

sound("spring.wav")


or
if you dont wanna rename it..

Code: Select all

sound("cartoon011.wav")
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Thu Jan 25, 2018 5:17 pm

Mislead timer

Image


Ok, this one is kinda complicated

First make a new timer, and activate it.
Name It: Animated Timers

Next make a new script object:
Name: xTimers

Code: Select all

demonnic.anitimer = demonnic.anitimer or {}
demonnic.anitimer.timers = demonnic.anitimer.timers or {}
demonnic.anitimer.activeTimers = demonnic.anitimer.activeTimers or {}

function demonnic.anitimer:new(name, cons, time, container, showTime, timerCaption, ...)
  --demonic.antitimer.timers[name] = {}
  local args = {...}
  if container == "" then
    container = nil
  end
  if showTime == nil then
    showTime = true
  end
  if timerCaption == nil then
    timerCaption=""
  end
  if demonnic.anitimer.timers[name] then
    demonnic.anitimer.timers[name].max = time
    demonnic.anitimer.timers[name].current = time
    demonnic.anitimer.timers[name].showTime = showTime
    demonnic.anitimer.timers[name].timerCaption = timerCaption
    demonnic.anitimer.timers[name].text = (demonnic.anitimer.timers[name].showTime and string.format("%.1f %s", time, timerCaption or "")) or (timerCaption or "")
   
    for k,v in pairs(cons) do
      demonnic.anitimer.timers[name].gauge[k] = v
    end
   
    demonnic.anitimer.timers[name].gauge:setValue(time, time, demonnic.anitimer.timers[name].text)
   
    if container then
      container:add(demonnic.anitimer.timers[name].gauge)
    else
      Geyser:add(demonnic.anitimer.timers[name].gauge)
    end
    demonnic.anitimer.timers[name].gauge:show()
  else
    demonnic.anitimer.timers[name] = {}
    demonnic.anitimer.timers[name].gauge = Geyser.Gauge:new(cons, container)
    demonnic.anitimer.timers[name].max = time
    demonnic.anitimer.timers[name].current = time
    demonnic.anitimer.timers[name].showTime = showTime
    demonnic.anitimer.timers[name].text = (demonnic.anitimer.timers[name].showTime and string.format("%.1f %s", time, timerCaption or "")) or (timerCaption or "")
    demonnic.anitimer.timers[name].gauge:setValue(time, time, demonnic.anitimer.timers[name].text)
    demonnic.anitimer.timers[name].watch = createStopWatch()
  end

  if #args > 0 then
    demonnic.anitimer.timers[name].gauge:setStyleSheet(unpack(args))
  end
 
  if not table.contains(demonnic.anitimer.activeTimers, name) then
    table.insert(demonnic.anitimer.activeTimers, name)
  end
 
  resetStopWatch(demonnic.anitimer.timers[name].watch)
  startStopWatch(demonnic.anitimer.timers[name].watch)
end

function demonnic.anitimer:getTime(name)
  local max = demonnic.anitimer.timers[name].max
  local current = getStopWatchTime(demonnic.anitimer.timers[name].watch)
  local newValue = max - current
  return newValue
end

function demonnic.anitimer:showTimers()
  demonnic:echo("<yellow>List of animated timers which have been created")
  for timer,_ in pairs(demonnic.anitimer.timers) do
    demonnic:echo(string.format("   %s", timer))
  end
  local actives = ""
  for _,timer in ipairs(demonnic.anitimer.activeTimers) do
    if actives == "" then
      actives = timer
    else
      actives = string.format("%s, %s", actives, timer)
    end
  end
  demonnic:echo("<yellow>Active timers: <red>" .. actives)
end

function demonnic.anitimer:update(name)
  demonnic.anitimer.timers[name].current = demonnic.anitimer:getTime(name)
  local time = demonnic.anitimer.timers[name].current
  demonnic.anitimer.timers[name].text = (demonnic.anitimer.timers[name].showTime and string.format("%.1f %s", time, demonnic.anitimer.timers[name].timerCaption or "")) or (demonnic.anitimer.timers[name].timerCaption or "")
  demonnic.anitimer.timers[name].gauge:setValue(demonnic.anitimer.timers[name].current, demonnic.anitimer.timers[name].max, demonnic.anitimer.timers[name].text)
end

function demonnic.anitimer:stop(name)
 
   if not demonnic.anitimer.timers[name] then
     return nil
   end
   
  stopStopWatch(demonnic.anitimer.timers[name].watch)
  demonnic.anitimer.timers[name].gauge:hide()
 
  for i,v in pairs(demonnic.anitimer.activeTimers) do
    if demonnic.anitimer.timers[v] == demonnic.anitimer.timers[name] then
      table.remove(demonnic.anitimer.activeTimers, i)
      return
    end
  end
end

function demonnic.anitimer:animate()
  for i,v in pairs(demonnic.anitimer.activeTimers) do
    name = v
    demonnic.anitimer:update(name)
    if demonnic.anitimer:getTime(name) <= 0 then
      demonnic.anitimer.timers[name].gauge:hide()
      table.remove(demonnic.anitimer.activeTimers, i)
      stopStopWatch(demonnic.anitimer.timers[name].watch)
    end
  end
end


Next a new alias

Name: @mtimer
regex: ^@mtimer$

Code: Select all

demonnic.newContainer = demonnic.newContainer or Geyser.Container:new({x=0, y=0, height=400, width = 200})
myCss1 = [[
border-width: 4px;
border-radius: 7;
border-color: red;
background-color: green;
]]
myCss2 = [[
border-width: 4px;
border-radius: 7;
border-color: green;
background-color: red;
]]
demonnic.anitimer:new("Test1", {x=10, y="10%", height = 30, width = 300, color="red"}, tonumber(buff:get("mislead")))
--demonnic.anitimer:new("Test2", {x = 0, y="50%", height = 20, width = "100%"}, tonumber(buff:get("mislead")), demonnic.newContainer, true, myCss1, myCss2)
--demonnic.anitimer:new("Test3", {x = 500, y = 300, height = 40, width = 100}, tonumber(buff:get("mislead")), "", myCss2, myCss1)
--demonnic.anitimer:new("Test4", {x="1%", y="15%", height = 20, width = "100%"}, tonumber(buff:get("mislead")), demonnic.newContainer, true)


Next a trigger

substring: A sphere of swirling shadows envelops you...

Code: Select all

mud:send("status")
tempTimer(3, [[expandAlias("@mtimer")]])
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sat Jan 27, 2018 6:24 pm

Fixed wormhole for Areh

Trigger:
Regex: ^([A-Za-z]+) tells you '(worm|well|hole|wormhole|hol) ([A-Za-z]+)( .*)?'

Code: Select all

-- ^([A-Za-z]+) tells you '(worm|well|hole|wormhole|hol) ([A-Za-z]+)( .*)?'

-- ^([A-Za-z]+) ASSOC::? '(worm|well|hole|wormhole|hol) ([A-Za-z]+)( .*)?'

local sender = matches[2]
local target = matches[4]



--if charData:get("disableworm") then
--   if checkMask("psi") then
      --mud:send("t " .. matches[2] .. " " .. string.title(matches[2]) .. ", lack of voting on TMC (http://www.mudconnect.com/cgi-bin/vote_rank.cgi?mud=TorilMud,+the+Sojourner%27s+Home) has disabled this trigger. 30+ people are online free daily, but not willing to vote.")
---      return
--   end
--end
if matches[4] == "me" then

      mud:send("worm " .. target)

      tempTimer(1.5, [[mud:send("med")]])

      look:send()
else
      mud:send("worm " .. sender)

      tempTimer(1.5, [[mud:send("med")]])

      look:send()

end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Tue Jan 30, 2018 9:50 pm

Nelson Laugh on Stability boots missed bash!

save this in the sound directory under the profile

http://www.wavsource.com/snds_2018-01-14_3453803176249356/tv/simpsons/nelson/haha.wav

regex: You nimbly avoid .* attempt to knock you down and attack as .* falls past!

code:

Code: Select all

sound("haha.wav")
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Changed the main train script

Postby Afu » Sat Feb 03, 2018 1:07 am

Less spam, pauses on pain or exhaustion.


Code: Select all

-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
-- various functions used with the xp trains

function NextTrainStop()
   local currentroom = map:getRoom()
   local hp=prompt:get("hp")
   local maxhp=prompt:get("maxhp")
   local percent=hp/maxhp
   local mv=prompt:get("mv")
   local maxmv=prompt:get("maxmv")
   local mpercent=mv/maxmv

   callNextTrain=nil

   -- if currently tanking anything, don't move
   if inCombat() then
      cecho("<red>[Still in combat - not leaving room]\n")
      return
   end   
   
  if percent < .5 or mpercent < .5 then
   tempTimer(5*60, [[NextTrainStop()]])
   cecho("\n<cyan>Waiting 5 minutes to heal or regain moves\n")
   return
   end
   
   -- look has been sent but not received - recall function after 1 second if grouped player fighting
   if type(groupList:whoTanking()) == "table" and not look:get() then
      for k,v in pairs( groupList:whoTanking() ) do
         if groupList:ingroup(k) and v ~= 0 then
            --echoDebug("<red>[look sent and not received]\n")
            tempTimer(1, [[NextTrainStop()]])
            return
         end
      end
   end

   if NyyLIB.smtrainposition == nil then
      assert(currentroom, "[Error: room id is nil]")

      --if map:getCurrentZone() == "Ashstone" then
      --   getPath(currentroom, 87415)
      --   mud:send("gcmd [Stopping train and returning to bank (87415)" .. " <." .. compressSpeedwalk() .. ">]")
      --   expandAlias("@fwalk 87415", false)
      --else
      --   getPath(currentroom, 48603)
      --   mud:send("gcmd [Stopping train and returning to inn (48603)" .. " <." .. compressSpeedwalk() .. ">]")
      --   expandAlias("@fwalk 48603", false)
      --end

      expandAlias("@resettrain", false)
   else
      NyyLIB.smtrainposition = NyyLIB.smtrainposition + 1

      if NyyLIB.smtrainposition > #NyyLIB.smtrainstops then
         NyyLIB.smtrainposition = 1

         --printStats(3)

         --expandAlias("@stats write", false)

         --mud:send("gcmd [Resetting Stats]")
         --resetStats()
      end

      NyyLIB.nextstop = NyyLIB.smtrainstops[NyyLIB.smtrainposition][1]
      enableTrigger("trainstation")

      assert(currentroom, "[Error: room id is nil]")
      if getPath(currentroom, NyyLIB.nextstop) then

         local str = NyyLIB.smtrainstops[NyyLIB.smtrainposition][2]
         local nextmob = string.gsub(" "..str, "%W%l", string.upper):sub(2)

         mud:send("gcmd Moving to --> " .. nextmob .. " <--")
      end
      NyyLIB.traintarget=false
   
      if currentroom ~= NyyLIB.nextstop then
         --echoDebug("<red>[queueing fwalk in 3 seconds]\n")
         tempTimer(3, [[expandAlias("@fwalk " .. NyyLIB.nextstop)]])
      end
   end
end

Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Mon Feb 12, 2018 6:11 am

remake of the exp bot, first you'll need some of my macros:

Code: Select all

-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
function Standing()
  if prompt:get("position") ~= "std" then
     return(false)
   else
     return(true)
  end
end

function Bashed()
  if prompt:get("enemyposition") ~= "std" then
     return(true)
   else
     return(false)
  end
end

function Tanking()
  if prompt:get("tank") ~= "" and prompt:get("tank") ~= whoami() then
    return(false)
  else
    return(true)
  end
end

function twoHanded()
  if charData:get("twohanded") then
     return(true)
   else
     return(false)
   end
end

function timerset(timer,time)
  timer:set(timer,time)
end

function slotOne()
  if spell:getSlot(1) > 0 then
    return(true)
  end
  return(false)
end

function slotTwo()
  if spell:getSlot(2) > 0 and charData:get("level") >= 10 then
    return(true)
  end
  return(false)
end

function slotThree()
  if spell:getSlot(3) > 0 and charData:get("level") >= 20 then
    return(true)
  end
  return(false)
end

function slotFour()
  if spell:getSlot(4) > 0 and charData:get("level") >= 30 then
    return(true)
  end
  return(false)
end

function slotFive()
  if spell:getSlot(5) > 0 and charData:get("level") >= 40 then
    return(true)
  end
  return(false)
end

function gCool()
  -- global cooldown
   timer:set("gcool", 5)
end

function getCooldown()
  return(tonumber(timer:get("gcool")))
end

function doTurnin()
  charData:set("needs_turnin", true)
   tempTimer(60, [[NextTrainStop()]])   
   mud:send("enter tower")
   cecho("\n<cyan>Waiting 60 seconds for turnin to complete\n")
   mud:send("gcmd waiting 60 seconds for turnin to complete")
end

function Turnin()
  return(charData:get("needs_turnin"))
end

function doneTurnin()
  charData:set("needs_turnin", false)
end


then you need these trains:

Code: Select all

-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
-- TODO: update inittrain path in Silverymoon

   testtrain = {
      {48518, "Shalyssa Lurialar"},
      {48850, "Forell Luckaun"},
      {48721, "Seipora Rein"}
   }
   
swamppit = {
{41966, "doTurnin"},
{41973, "young"},
{41980, "young"},
{41966, "young"},
{41979, "young"},
{41974, "young"},
{41965, "young"},
{41964, "young"},
{41975, "young"},
{41978, "young"},
{41979, "young"},
{41978, "young"},
{41979, "young"},
{41978, "young"},
{41979, "young"},
{41966, "young"},
{41973, "young"},
{41980, "young"},
{41966, "young"},
{41979, "young"},
{41974, "young"},
{41965, "young"},
{41964, "huge"},
{41975, "young"},
{41978, "young"},
{41979, "young"},
{41978, "young"},
{41979, "young"},
{41978, "young"},
{41979, "young"},
{41966, "young"},
{41973, "young"},
{41980, "young"},
{41966, "young"},
{41979, "young"},
{41974, "young"},
{41965, "young"},
{41964, "huge"},
{41975, "young"},
{41978, "young"},
{41979, "young"},
{41978, "young"},
{41979, "young"},
{41978, "young"},
{41979, "young"}
}

forcs = {
{79386, "orog"},
{79387, "orog"},
{79388, "orog"},
{79389, "orog"},
{79390, "orog"},
{79391, "orog"},
{79392, "orog"},
{79393, "orog"},
{79394, "orog"},
{79395, "orog"},
{79396, "orog"},
{79397, "orog"},
{79398, "orog"},
{79399, "orog"},
{79400, "orog"},
{79401, "orog"},
{79402, "orog"},
{79403, "orog"},
{79404, "orog"},
{79405, "orog"},
{79406, "orog"},
{79407, "orog"},
{79408, "orog"},
{79409, "orog"},
{79410, "orog"},
{79411, "orog"},
{79410, "orc"},
{79409, "orc"},
{79408, "orc"},
{79407, "orc"},
{79406, "orc"},
{79405, "orc"},
{79404, "orc"},
{79403, "orc"},
{79402, "orc"},
{79401, "orc"},
{79400, "orc"},
{79399, "orc"},
{79398, "orc"},
{79397, "orc"},
{79396, "orc"},
{79395, "orc"},
{79394, "orc"},
{79393, "orc"},
{79392, "orc"},
{79391, "orc"},
{79390, "orc"},
{79389, "orc"},
{79388, "orc"},
{79386, "orc"},
{79387, "orc"},
{79386, "orc"}
}

   pship = {
      {85876, "newbs"},
      {85870, "naval"},
      {85879, "slaver"},
      {85889, "first"},
      {85880, "turds"},
      {85886, "navigator"},
      {85880, "turds"},
      {85890, "miplit"}   
    }
   
   dkloop = {
      {74698, "bankDeposit"},
         --{74687, "traveler"},
      {74862, "durdyn"},
      {74855, "chef"},         
      {74860, "soldier"},
      {74859, "cook"},
      {74846, "mistress"},
         --{74687, "duergar"},
      {74843, "cook"},
      {74733, "archer"},
      {74746, "leader"},
      {74696, "soldier"},
      {74714, "soldier"},
         --{74687, "trader"},         
      {74696, "leader"},
      {74733, "archer"},
         --{74687, "diplomat"},
      {74731, "soldier"},
      {74733, "archer"},
      {74746, "soldier"},
      {74731, "leader"},
      {74696, "soldier"},
      {74733, "archer"},
      {74714, "soldier"},
      {74733, "archer"},
      {74714, "leader"},
      {74731, "soldier"},
      --{74733, "captain"},
      {74746, "soldier"},
      {74719, "tubby"},
      {74733, "archer"},
      --{74723, "archivist"},         
         {74750, "dummy"}
   }
   
   smtrain = {
      {84203, "bankDeposit"},
      {48882, "Willa O'Greensleeves"},
      {48873, "Aratha Sul"},
      {48524, "Lavis Ryl"},
      {48525, "Elaith Waterstill"},
      {48518, "Shalyssa Lurialar"},
      {48850, "Forell Luckaun"},
      {48721, "Seipora Rein"},
      {48681, "Corland Deepforge"},
      {48586, "Ersenas"},
      {49135, "Ultrumm"},
--      {49054, "Tathshandra Tyrar"},
--      {94648, "Otasit"},
      {49117, "devout priest"},
      {49036, "Dragor Keenblade"}
   }

   ashtrain = {
      {87415, "bankDeposit"},
      {87263, "gambler"},
      {87262, "gambler"},         
      {87270, "bouncer"},
      {87271, "naked man"},
      {87272, "prostitute"},
      {87275, "aging prostitute"},
      {87276, "naked woman"},
      {87275, "aging prostitute"},
      {87272, "prostitute"},
      {87270, "bouncer"},
      {87263, "gambler"},
      {87262, "gambler"},         
      {87254, "Ashstone noble"},
      {87251, "Ashstone noble"},
      {87255, "Ashstone noble"},
      {87249, "Ashstone noble"},
      {87253, "Ashstone noble"},
      {87258, "Ashstone noble"},
      {87257, "Ashstone noble"},
      {87258, "Ashstone noble"},
      {87253, "Ashstone noble"},
      {87249, "Ashstone noble"},
      {87255, "Ashstone noble"},
      {87251, "Ashstone noble"},
      {87254, "Ashstone noble"}
   }

   wdtrain = {
      {13402, "elite"},
      {13359, "elite"},
      {13343, "elite"},
      {13354, "master"},
      {13397, "master"}
--      {85354, "elite guard"},
--      {85358, "elite guard"},
--      {85356, "elite guard"},
--      {85410, "elite guard"},
--      {85421, "elite guard"},
--      {85349, "elite guard"}
   }
cmtrain = {
{44327, "bugbear"},
{44328, "bugbear"},
{44329, "bugbear"},
{44330, "bugbear"},
{44331, "bugbear"},
{44344, "bugbear"},
{44345, "bugbear"},
{44346, "bugbear"},
{44347, "bugbear"},
{44348, "bugbear"},
{44349, "bugbear"},
{44350, "bugbear"},
{44349, "bugbear"},
{44348, "bugbear"},
{44347, "bugbear"},
{44346, "bugbear"},
{44345, "bugbear"},
{44344, "bugbear"},
{44331, "bugbear"},
{44332, "bugbear"},
{44333, "bugbear"},
{44334, "bugbear"},
{44335, "bugbear"},
{44340, "bugbear"},
{44341, "bugbear"},
{44342, "bugbear"},
{44343, "bugbear"},
{44342, "bugbear"},
{44341, "bugbear"},
{44340, "bugbear"},
{44335, "bugbear"},
{44336, "bugbear"},
{44337, "bugbear"},
{44338, "bugbear"},
{44339, "bugbear"},
{44338, "bugbear"},
{44337, "bugbear"},
{44336, "bugbear"},
{44335, "bugbear"},
{44334, "bugbear"},
{44333, "bugbear"},
{44332, "bugbear"},
{44331, "bugbear"},
{44330, "bugbear"},
{44329, "bugbear"},
{44328, "bugbear"},
{44327, "bugbear"},
{44313, "orc"},
{44314, "orc"},
{44315, "orc"},
{44316, "orc"},
{44317, "orc"},
{44318, "orc"},
{44319, "orc"},
{44320, "orc"},
{44321, "orc"},
{44322, "orc"},
{44323, "orc"},
{44322, "orc"},
{44321, "orc"},
{44324, "orc"},
{44325, "orc"},
{44326, "orc"},
{44325, "orc"},
{44324, "orc"},
{44325, "orc"},
{44324, "orc"},
{44321, "orc"},
{44320, "orc"},
{44319, "orc"},
{44318, "orc"},
{44317, "orc"},
{44316, "orc"},
{44315, "orc"},
{44314, "orc"},
{44313, "orc"}
}

function configureTrain()
   -- disable any active triggers prior to enabling
   expandAlias("@resettrain", false)

   cecho("<green>[Laying train tracks...]\n")

   if trainList ~= nil then
      if _G[trainList] ~= nil then
         NyyLIB.smtrainstops = _G[trainList]
         trainList=nil
         return
      end
   end

   if map:getCurrentZone() == "Ashstone" then
      NyyLIB.smtrainstops = ashtrain
   elseif map:getCurrentZone() == "Silverymoon, Gem of the North" then
      NyyLIB.smtrainstops = smtrain
   elseif map:getCurrentZone() == "Northern Waterdeep Main City" then
      NyyLIB.smtrainstops = wdtrain
   elseif map:getCurrentZone() == "The Great Harbor of Waterdeep" then
      NyyLIB.smtrainstops = wdtrain
   elseif map:getCurrentZone() == "Dobluth Kyor - Main City" then
      NyyLIB.smtrainstops = dkloop
   elseif map:getCurrentZone() == "The Comarian Mines" then
      NyyLIB.smtrainstops = cmtrain
   elseif map:getCurrentZone() == "The Spirit Raven" then
      NyyLIB.smtrainstops = pship
   elseif map:getCurrentZone() == "Ghore - City of Trolls" then
      NyyLIB.smtrainstops = swamppit   
    elseif map:getCurrentZone() == "Faang - City of Ogres" then
       NyyLIB.smtrainstops = forcs
   end
end


and the trainscripts script:

Code: Select all

-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
-- various functions used with the xp trains

function NextTrainStop()
   local currentroom = map:getRoom()
   local hp=prompt:get("hp")
   local maxhp=prompt:get("maxhp")
   local percent=hp/maxhp
   local mv=prompt:get("mv")
   local maxmv=prompt:get("maxmv")
   local mpercent=mv/maxmv
  local searching = charData:get("needs_search")
   
   callNextTrain=nil

   -- if currently tanking anything, don't move
   if inCombat() or gCool() or Turnin() then
      cecho("<red>[Still in combat - not leaving room]\n")
      return
   end   
   if searching then
   tempTimer(30, [[NextTrainStop()]])   
   cecho("\n<cyan>Waiting 30 seconds for search to complete\n")
   mud:send("gcmd waiting 30 seconds for search to complete")
   return   
   end
   
  if percent < .5 or mpercent < .5 then
   tempTimer(5*60, [[NextTrainStop()]])
   cecho("\n<cyan>Waiting 5 minutes to heal or regain moves\n")
   return
   end
   
   -- look has been sent but not received - recall function after 1 second if grouped player fighting
   if type(groupList:whoTanking()) == "table" and not look:get() then
      for k,v in pairs( groupList:whoTanking() ) do
         if groupList:ingroup(k) and v ~= 0 then
            --echoDebug("<red>[look sent and not received]\n")
            tempTimer(5, [[NextTrainStop()]])
            return
         end
      end
   end

   if NyyLIB.smtrainposition == nil then
      assert(currentroom, "[Error: room id is nil]")

      --if map:getCurrentZone() == "Ashstone" then
      --   getPath(currentroom, 87415)
      --   mud:send("gcmd [Stopping train and returning to bank (87415)" .. " <." .. compressSpeedwalk() .. ">]")
      --   expandAlias("@fwalk 87415", false)
      --else
      --   getPath(currentroom, 48603)
      --   mud:send("gcmd [Stopping train and returning to inn (48603)" .. " <." .. compressSpeedwalk() .. ">]")
      --   expandAlias("@fwalk 48603", false)
      --end

      expandAlias("@resettrain", false)
   else
      NyyLIB.smtrainposition = NyyLIB.smtrainposition + 1

      if NyyLIB.smtrainposition > #NyyLIB.smtrainstops then
         NyyLIB.smtrainposition = 1

         --printStats(3)

         --expandAlias("@stats write", false)

         --mud:send("gcmd [Resetting Stats]")
         --resetStats()
      end

      NyyLIB.nextstop = NyyLIB.smtrainstops[NyyLIB.smtrainposition][1]
      enableTrigger("trainstation")

      assert(currentroom, "[Error: room id is nil]")
      if getPath(currentroom, NyyLIB.nextstop) then

         local str = NyyLIB.smtrainstops[NyyLIB.smtrainposition][2]
         local nextmob = string.gsub(" "..str, "%W%l", string.upper):sub(2)

         mud:send("gcmd Moving to --> " .. nextmob .. " <--")
      end
      NyyLIB.traintarget=false
   
      if currentroom ~= NyyLIB.nextstop then
         --echoDebug("<red>[queueing fwalk in 3 seconds]\n")
         tempTimer(3, [[expandAlias("@fwalk " .. NyyLIB.nextstop)]])
      end
   end
end

function StartFight()
   if prompt:get("tank") ~= "" then
      return
   end
   
   -- train was just stopped
   if NyyLIB.smtrainposition == nil then
      return
   end
      
   local mobtarget = string.split(NyyLIB.smtrainstops[NyyLIB.smtrainposition][2], " ")[1]

   if NyyLIB.traintarget then
      setEnemy(mobtarget)

      mud:send("gcmd Attacking --> " ..  string.title(mobtarget) .. " <--")

      -- rogue, anti-paladin - apply poison
      if checkMask("venomer") then
         sendPoison()
      end   

      -- rogue: start with assassinate
      if checkMask("rog") then
         if not sendAssassinate(mobtarget) then
            mud:send("bs " .. mobtarget)
         end

         return
      end
      
      if charData:get("twohanded") then
      if checkMask("pal") then
      if not timer:get("thunder_smite") then -- autobash
        mud:send("TS " .. mobtarget)
            timer:set("*thunder smite*",15)
            timer:set("gcool", 5)
            --local comtosend = "KILL " .. mobtarget
            mud:send("KILL " .. mobtarget)
            cecho("\n<cyan>*thunder smite* "  .. mobtarget .. "<--\n")
            charData:set("holywords", 0)
            charData:set("searing", 0)            
        return
         else
           local timeleft = tonumber(timer:get("thunder_smite"))
        local comtosend = "TS " .. mobtarget
            tempTimer(timeleft, [[mud:send(comtosend)]])
            timer:set("*thunder smite*",15+timeleft)
            timer:set("gcool", 5+timeleft)
        cecho("\n<cyan>*thunder smite* "  .. mobtarget .. " in " .. timeleft .. " seconds\n")
            charData:set("holywords", 0)
            charData:set("searing", 0)                     
      end
      end
    else      
      if checkMask("pal") and not timer:get("radiant_charge") then -- autobash
        mud:send("RC " .. mobtarget)
            timer:set("radiant_charge", 13)
            timer:set("gcool",5)
            
        cecho("\n<cyan>*radiant charge* "  .. mobtarget .. "\n")
        return
      end
      end
      
      if charData:get("twohanded") then
      if checkMask("blk") and not timer:get("dominating_smite") then -- autobash
        mud:send("SS " .. mobtarget)
        timer:set("shattering_smite", 13)    -- 1h bash Strike with all weapons for 128% (Weapon, Shield, One handed) Mod: +28%   
        timer:set("gcool", 5)
        cecho("\n<cyan>*shattering_smite* "  .. mobtarget .. "\n")
        return
      end
    else      
      if checkMask("blk") and not timer:get("dominating_smite") then -- autobash
        mud:send("DS " .. mobtarget)
        timer:set("dominating_smite", 13)
        timer:set("gcool", 5)
            mud:send("KILL " .. mobtarget)
        cecho("\n<cyan>*dominating_smite* "  .. mobtarget .. "\n")
        return
      end
      end
      -- warrior classed - start with bash, bodyslam, mounted charge
      if checkMask("traintanks") then
         if checkMask("fighter") and not checkMask("ran") then
            if mount:get() == nil then
               if whorace(whoami()) == "Ogre" then
                  mud:send("BS " .. mobtarget) -- bodyslam
               elseif checkMask("blk") then
                 expandAlias("kill " .. mobtarget)
               else
                  mud:send("kill " .. mobtarget)
               end
            else
               mud:send("mount")
               mount:charge(mobtarget)
            end
            return
         end
      
         if checkMask("ran") and not timer:get("sweeping_strike") then
            meleePowerUsed=false
            useMeleePower("SS " .. mobtarget)
            tempTimer(2, [[StartFight()]])
            return
         end
      end         

      --spell:setMoving(false)
      mud:send("kill " .. mobtarget)
   else
      cecho("\n<red>[Target is damaged or already dead - Moving to next target]\n")
      NextTrainStop()
   end
end

function bankDeposit()
   --expandAlias("dep", false)

   if groupList:size() > 1 then
      --botWarning()
   end
end

function botWarning()
   --mud:send("gsay * [       Warning! Use at own risk!       ]")
   --mud:send("gsay * Toril discourages use of robots. Use may be")
   --mud:send("gsay * permitted if at or near keys, but not for")
   --mud:send("gsay * long periods of time. This may result in")
   --mud:send("gsay * arbitrary punishment, including aggressive")
   --mud:send("gsay * mob loads, caging, freezing or deletion.")
   --mud:send("gsay * [       Warning! Use at own risk!       ]")
end


and then a few triggers for searching corpses in ghore..
3 triggers on this:
substring: a young alligator is dead! R.I.P.
substring: stop the bleeding
substring: a huge python is dead! R.I.P.

Code: Select all

charData:set("needs_search", true)
mud:send("bandage me")


substring: You search exhaustively and conclude there is nothing to be found!
substring: You find a raw alligator steak!
substring: Search what?

Code: Select all

mud:send("get steak corpse")
mud:send("put steak hole")
charData:set("needs_search", false)
--expandAlias("kill young")


substring: An experienced troll hunter stands here licking his chops.

Code: Select all

mud:send("get steak hole")
[code]

substring: You get a raw alligator steak from a portable hole.
[code]mud:send("give steak troll")[/code]

substring: The a portable hole does not contain the steak.

[code]
mud:send("down")
doneTurnin()
[/code]

substring: A small roc flies in.
substring: A small roc spreads its wings and ROARS, filling your heart with terror!

[code]
mud:send("kill roc")
[/code]

regex: Bandaging .* further won't help any
substring: You don't find anything.

[code]
mud:send("search corpse")
charData:set("needs_search", true)
[/code]

substring: A raw alligator steak lays here in the mud.

[code]
mud:send("get steak")
mud:send("put steak hole")
[/code]

substring: You find a flayed piece of snakeskin!

[code]
mud:send("get flayed corpse")
charData:set("needs_search", false)


i think thats it, lemme know if u cant get the steak one working, rest is pretty straight forward.
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sun Feb 25, 2018 6:27 am

the single assist function redux

Code: Select all

function sendAssist(xchar)
   --if xchar ~= nil then
   --   cecho("<green>[sendASsist: " .. xchar .. "]\n")
   --end

   if NyyLIB.castertrain then
      return
   end

   -- if hp not listed send group
   if groupList:getHP(xchar) == 0 then
      group:send()
   end

   if charData:get("autoassist") == false then
      return
   end

   -- already in combat: why assist again?
   if inCombat() then
      return
   end

   -- sm caster train is active : flee to mem?
   if isActive("SMTrainCaster", "trigger") ~= 0 then
      if not fightreturn then
         if prompt:get("position") == "sit" then
            mud:send("ST")
         end

         -- send flee
         fleeMem()
         return
      end
   end

   echoDebug("<red>[assist]")

   if checkMask("rog") then
      local enemytarget = getEnemy()

      -- invis target, don't have di
      if enemytarget == "Someone" or enemytarget == "someone" then
         return
      end

      if enemytarget == "nightmare" then
         return
      end

      if enemytarget ~= "" then
         if enemytarget == "mage" or enemytarget == "wight" then
            if not buff:get("globe_of_invulnerability") then
               return
            end
         end
      end
   end

   if assistSent == nil then
      assistSent = true

      -- currently sitting: send stand first TODO is this sending multiple times?

      if prompt:get("position") == "sit" then
         mud:send("ST")
      end

      sendPoison()

      if checkMask("rog") then
         local enemytarget = getEnemy()

         if enemytarget ~= "" then
            -- if wraith kill, not backstab

            if timer:get("wraithform") then
               mud:send("KILL " .. enemytarget)
               return
            end

            if sendAssassinate(enemytarget) then
               return
            end

            -- nonpowers backstab for practice
            local backstab


            if prompt:get("hp") > 1000 then
               backstab = "backstab " .. enemytarget
            else
               backstab = "bs " .. enemytarget
            end

            cecho("\n<red>[" .. backstab .. "]\n")
            mud:send(backstab)
         end

         look:send()

         return
      end

      -- mount before assisting
      --if mount:get() ~= nil and not mount:getMounted() then
         --send("mount " .. mount:get() )
         --mud:send("mount")
      --end

      -- if memorizing stand before sending assist
      if spell:getMem() or memsent then
         mud:send("ST")
      end

      if checkMask("ran") then
         local enemytarget = getEnemy()

         if enemytarget ~= "" then
               cecho("\n<red>[kill " .. enemytarget .. "]\n")
               mud:send("KILL " .. enemytarget)
               look:send()
               return
         end
      end
      if whorace(whoami()) == "Ogre" then
         local enemytarget = getEnemy()

         if enemytarget ~= "" then
               cecho("\n<red>[bs " .. enemytarget .. "]\n")
               mud:send("bs " .. enemytarget)
               look:send()
               return
         end
      end

      if whorace(whoami()) == "Halfling" then
         local enemytarget = getEnemy()

         if enemytarget ~= "" then
               cecho("\n<red>[hs " .. enemytarget .. "]\n")
               mud:send("hamstring " .. enemytarget)
               --mud:send("kill " .. enemytarget)
               look:send()
               return
         end
      end
            
      echoDebug("<red>[assist " .. xchar .. "]\n")

      mud:send("assist " .. xchar)
   end
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Sat Mar 03, 2018 2:16 pm

Voku asked for this one..

i could make it better if i wasnt exausted and going to work..

prolly revisit later

Trigger: Finditem
regex: (.+)\.(.*) inside.*
regex: (.+)\.(.*) worn.*

Code: Select all

expandAlias("@id " .. matches[3])
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Mar 21, 2018 4:52 am

made this little diddy

how it works:
lets say you want to find all items with dam > 3 for finger
with this alias you would type
@dbfind dam > 3 finger

Results:
SQL:select items.item_name, items.short_stats, item_slots.slot_abbr, items.item_id, items.item_type,
item_attribs.attrib_abbr, item_attribs.attrib_value from items, item_attribs, item_slots where
items.item_id == item_attribs.item_id and items.item_id == item_slots.item_id and item_slots.
slot_abbr like '%finger%' and item_attribs.attrib_abbr like '%dam%' and item_attribs.attrib_value >
3

a dragonhunter ring (Finger) Dam:5 * Magic No_Burn !Neut * Wt:1 Val:1000p * Zone: CM (Q) * Last ID:
2012-12-16

a silvery ring of solarian truesteel (Finger or Tail) Dam:4 Svsp:-3 Fire:5% SENSE * Magic No_Burn *
Wt:1 Val:0p * Zone: KV (Q) * Last ID: 2008-11-22

a band of killing frost (Finger) Armor:-6 Dam:4 * Magic No_Burn No_Loc * Wt:1 Val:0p * Zone: Magma
(R) * Last ID: 2006-09-05

a ring of seaweed set with a black pearl (Finger or Tail) Dam:4 Blud:-5% Pier:-5% Rang:-5% Slas:-5%
Unarm:-5% * Float No_Burn No_Loc !Mage !Priest * Wt:0 Val:0p * Zone: Ice (UI) * Last ID: 2013-05-21

a ring of seaweed set with a white pearl (Finger or Tail) Dam:4 * Float No_Burn No_Loc !Mage
!Priest * Wt:0 Val:0p * Zone: Unknown (Q) * Last ID: 2013-10-18
[5 matches in database]


alias:
Name:@dbfind
Regex:^@dbfind (.*)$

Code: Select all

local data

--cecho("<red>[Attempting to identify " .. matches[2] .. "]\n")
local args = matches[2]
local temp = args:split("\ ")
local attr = temp[1]
local oppr = temp[2]
local amt = temp[3]
local slot = temp[4]

data = statlookup(attr, oppr, amt,slot)

for k,v in pairs(data) do
   cecho("\n<green>" .. v .. "\n")
end

cecho ("<red>[" .. #data .. " matches in database]\n")


Script can be placed anywhere, i just made a new one in the base, above nysslib so it doesnt get delted

Code: Select all

function statlookup (stat, operator, amount, slot)
   local recs, row
   local retval = {}
   
--select items.item_name, items.short_stats, item_slots.slot_abbr, items.item_id, items.item_type, item_attribs.attrib_abbr, item_attribs.attrib_value
--from items, item_attribs, item_slots where items.item_id == item_attribs.item_id
--and items.item_id == item_slots.item_id
--and items.item_name like "%a black-hafted broadsword stained with blood%"
--and item_attribs.attrib_abbr like "%dam%"
--and item_attribs.attrib_value > 2
  sql = "select items.item_name, items.short_stats, item_slots.slot_abbr, items.item_id, items.item_type, item_attribs.attrib_abbr, item_attribs.attrib_value "
   sql = sql .. "from items, item_attribs, item_slots where items.item_id == item_attribs.item_id "
   sql = sql .. "and items.item_id == item_slots.item_id "
   sql = sql .. "and item_slots.slot_abbr like '%" .. slot .. "%' "
   sql = sql .. "and item_attribs.attrib_abbr like '%" .. stat .. "%' "
   sql = sql .. "and item_attribs.attrib_value " .. operator .. " " .. amount
   
   cecho("<cyan>SQL:" .. sql .. "\n")

   recs = assert(NyyLIB.conn:execute(sql))
   row = recs:fetch({})

   while row do
      retval[#retval+1] = row[2]
      row = recs:fetch({})
   end

   recs:close()
   
   return(retval)
       
end
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Warriors

Postby Afu » Mon Apr 02, 2018 10:07 pm

Built this little diddy for Afu

basic setup code

first, fix the two handed debacle
trigger #1 name - irrelavant
matching: You are using:

Code: Select all

charData:set("twohanded", false)
initClass()  -- show any buttons needed
enableTrigger("twhohand2")
--cecho("<cyan> set onehanded")


trigger #2 name - twohand2
matching: <wielding twohanded>

Code: Select all

charData:set("twohanded", true)
--cecho("<cyan> set twohand")
initClass()
disableTrigger("twohand2")


adds these new set variables

[autoros] true true|false use Rain of Steel during combat
[autoua] true true|false use Unyielding Avalanche during combat
[autosc] true true|false use Skullcrusher during combat
[autoss] true true|false use Spinning Sweep during combat
[autocv] true true|false use Cleave during combat
[autora] true true|false use Relentless Assault during combat
[autobs] true true|false use Brutal Strike during combat
[autods] true true|false use Defensive Strike during combat
[autosb] true true|false use Shield Bash during combat
[autocs] true true|false use Comeback Strike during combat
[autowu] true true|false use Warriors Ultimatum during combat
[autocc] true true|false use Combat Challenge during combat
[autoiw] true true|false use Iron Warrior during combat
[autosod] true true|false use Storm of Destruction during combat
[autodsd] true true|false use Diamond Shield Defense during combat
[autohd] true true|false use Heroic Defiance during combat
[autout] true true|false use Unstoppable during combat
[autoub] true true|false use Unbreakable during combat
[autonop] true true|false use No Opening during combat


Code: Select all

-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
function Standing()
  if prompt:get("position") ~= "std" then
     return(false)
   else
     return(true)
  end
end

function Bashed()
  if prompt:get("enemyposition") ~= "std" then
     return(true)
   else
     return(false)
  end
end

function Tanking()
  if prompt:get("tank") ~= "" and prompt:get("tank") ~= whoami() then
    return(false)
  else
    return(true)
  end
end

function twoHanded()
  if charData:get("twohanded") then
     return(true)
   else
     return(false)
   end
end

function timerset(timer,time)
  timer:set(timer,time)
end

function slotOne()
  if spell:getSlot(1) > 0 then
    return(true)
  end
  return(false)
end

function slotTwo()
  if spell:getSlot(2) > 0 and charData:get("level") >= 10 then
    return(true)
  end
  return(false)
end

function slotThree()
  if spell:getSlot(3) > 0 and charData:get("level") >= 20 then
    return(true)
  end
  return(false)
end

function slotFour()
  if spell:getSlot(4) > 0 and charData:get("level") >= 30 then
    return(true)
  end
  return(false)
end

function slotFive()
  if spell:getSlot(5) > 0 and charData:get("level") >= 40 then
    return(true)
  end
  return(false)
end

function gCool()
  -- global cooldown
   timer:set("gcool", 5)
end

function getCooldown()
  if timer:get("gcool") then
     return(true)
   else
    return(false)
   end
end

function doTurnin()
  if charData:get("level") > 25 then
  charData:set("needs_turnin", true)
   tempTimer(60, [[NextTrainStop()]])   
   mud:send("enter tower")
   --mud:send("enter boat")
   cecho("\n<cyan>Waiting 60 seconds for turnin to complete\n")
   --mud:send("gcmd waiting 60 seconds for turnin to complete")
   end
end

function Turnin()
  return(charData:get("needs_turnin"))
end

function doneTurnin()
  charData:set("needs_turnin", false)
end

function almostDead()
local mobcond=prompt:get("enemycondition")
  if mobcond ~= "awful" then
   return false
  else
   return true
  end
end



Replace in the char data script
Find:

Code: Select all

{ "autogreen", "ran", {"true", "false"}, "false", "use greenfire during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      }



replace with:


Code: Select all

   { "autoros", "war", {"true", "false"}, "false", "use Rain of Steel during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autoua", "war", {"true", "false"}, "false", "use Unyielding Avalanche during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autosc", "war", {"true", "false"}, "false", "use Skullcrusher during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autoss", "war", {"true", "false"}, "false", "use Spinning Sweep during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autocv", "war", {"true", "false"}, "false", "use Cleave during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autora", "war", {"true", "false"}, "false", "use Relentless Assault during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autobs", "war", {"true", "false"}, "false", "use Brutal Strike during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autods", "war", {"true", "false"}, "false", "use Defensive Strike during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autosb", "war", {"true", "false"}, "false", "use Shield Bash during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autocs", "war", {"true", "false"}, "false", "use Comeback Strike during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autowu", "war", {"true", "false"}, "false", "use Warriors Ultimatum during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autocc", "war", {"true", "false"}, "false", "use Combat Challenge during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autoiw", "war", {"true", "false"}, "false", "use Iron Warrior during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autosod", "war", {"true", "false"}, "false", "use Storm of Destruction during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autodsd", "war", {"true", "false"}, "false", "use Diamond Shield Defense during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autohd", "war", {"true", "false"}, "false", "use Heroic Defiance during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },      
   { "autout", "war", {"true", "false"}, "false", "use Unstoppable during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autoub", "war", {"true", "false"}, "false", "use Unbreakable during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },
   { "autonop", "war", {"true", "false"}, "false", "use No Opening during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      },            
   { "autogreen", "ran", {"true", "false"}, "false", "use greenfire during combat",
         "\n<green>[@ will be used during combat.]\n",
         "\n<red>[@ will not be used.]\n"
      }



Finally add this function in the top of the Warrior Script

Code: Select all

function procPromptWar()
   local hp=prompt:get("hp")
   local maxhp=prompt:get("maxhp")
   local percent=hp/maxhp
   local rn
   
   
   if not checkMask("war") or not Standing() or getCooldown() or not inCombat() then
      return
   end
   
    -- Unstoppable
   if percent < .7 then
      if not timer:get("unstoppable") then
          mud:send("UT")
          cecho("\n<cyan>*unstoppable*\n")            
          timer:set("unstoppable", 5*61)
          timer:set("gcool", 3)            
       return
      end            
  end
   
    if percent < .8 then
      if not timer:get("iron_warrior") then
          mud:send("IW")
          cecho("\n<cyan>*iron_warrior*\n")            
          timer:set("unstoppable", 7*61)
          timer:set("gcool", 3)            
       return
      end            
  end
               
   if not twoHanded() then -- One Handed
       -- Shield Bash
         if not timer:get("shield_bash") and not Bashed() and charData:get("autosb") then
            send("SB")
            timer:set("gcool", 3)
            timer:set("shield_bash", 14)
            cecho("\n<cyan>*shield bash*")
            return
        end
         -- Comeback Strike
         if not timer:get("comeback_strike") and percent < .85 and charData:get("autocs") then
            send("CS")
            timer:set("gcool", 3)
            timer:set("comeback_strike", 14)
            cecho("\n<cyan>*comeback_strike*")
            return
        end
         -- Defensive Strike
         if not timer:get("defensive_strike") and charData:get("autods") then
            send("DS")
            timer:set("gcool", 3)
            timer:set("defensive_strike", 14)
            cecho("\n<cyan>*defensive strike*")
            return
        end
         -- Relentless Assault
         if not timer:get("relentless_assault") and charData:get("autora") and not Bashed() then
            send("SB")
            timer:set("gcool", 3)
            timer:set("relentless_assault", 40)
            cecho("\n<cyan>*relentless_assault*")
            return
        end
         -- Brutal Strike
         if not timer:get("brutal_strike") and charData:get("autobs") then
            send("BS")
            timer:set("gcool", 3)
            timer:set("brutal_strike", 40)
            cecho("\n<cyan>*brutal_strike*")
            return
        end      
    else -- Two Handed Stuff
        -- Spinning Sweep
         if not timer:get("spinning_sweep") and not Bashed() and charData:get("autoss") then
            send("SS")
            timer:set("gcool", 3)
            timer:set("spinning_sweep", 14)
            cecho("\n<cyan>*spinning sweep*")
            return
        end
         
         -- Unyielding Avalanche
         if not timer:get("unyielding_avalanche")  and charData:get("autoua") then
            send("UA")
            timer:set("gcool", 3)
            timer:set("unyielding_avalanche", 30)
            cecho("\n<cyan>*unyielding_avalanche*")
            return
        end
         
         -- Skullcrusher
         if not timer:get("skullcrusher")  and charData:get("autosc") then
            send("SK")
            timer:set("gcool", 3)
            timer:set("skullcrusher", 30)
            cecho("\n<cyan>*skullcrusher*")
            return
        end      
      -- Cleave
         if not timer:get("cleave")  and charData:get("autosv") then
            send("CV")
            timer:set("gcool", 3)
            timer:set("cleave", 14)
            cecho("\n<cyan>*cleave*")
            return
        end      
         
      -- Storm of Destruction
         if not timer:get("storm_of_destruction") and charData:get("autosod")  and not Bashed() then
            send("SOD")
            timer:set("gcool", 3)
            timer:set("storm_of_destruction", 7*61)
            cecho("\n<cyan>*storm_of_destruction*")
            return
        end      
   end  -- End two Handed
end

gronka
Sojourner
Posts: 2
Joined: Mon Jul 16, 2018 10:05 pm

Re: Mods to Nyss Script

Postby gronka » Tue Jul 17, 2018 2:44 pm

Some lower level mobs for the train in SM. use xcel to seperate the levels out or manually delete it. Have fun!

room and name level
{48931, "patron"}, 10
{48711, "ranger"}, 11
{48711, "druid"}, 11
{48747, "guard"}, 13
{48747, "warrior"}, 13
{48743, "guard"}, 13
{48743, "warrior"}, 13
{48650, "commoner"}, 17
{48740, "commoner"}, 17
{48724, "commoner"}, 17
{48481, "commoner"}, 17
{48927, "commoner"}, 17
{48615, "commoner"}, 17
{48907, "commoner"}, 17
{48762, "commoner"}, 17
{48725, "commoner"}, 17
{48809, "commoner"}, 17
{48783, "commoner"}, 17
{48485, "commoner"}, 19
{48730, "commoner"}, 19
{48718, "commoner"}, 19
{48713, "commoner"}, 19
{48480, "commoner"}, 19
{48929, "commoner"}, 19
{48920, "commoner"}, 19
{48909, "commoner"}, 19
{48759, "commoner"}, 19
{48770, "commoner"}, 19
{48798, "commoner"}, 19
{48772, "commoner"}, 19
{48917, "halfling"}, 20
{48766, "guide"}, 21
{48766, "patron"}, 21
{48575, "commoner"}, 25
{48840, "commoner"}, 25
{48575, "commoner"}, 25
{48840, "commoner"}, 25
{48663, "commoner"}, 27
{48697, "commoner"}, 27
{48663, "commoner"}, 27
{48558, "commoner"}, 27
{48834, "commoner"}, 27
{48812, "commoner"}, 27
{48811, "commoner"}, 27
{48737, "commoner"}, 27
{48729, "commoner"}, 27
{48483, "commoner"}, 27
{48916, "commoner"}, 27
{48912, "commoner"}, 27
{48726, "commoner"}, 27
{48808, "commoner"}, 27
{48786, "commoner"}, 27
{48773, "commoner"}, 27
{48663, "commoner"}, 27
{48558, "commoner"}, 27
{48834, "commoner"}, 27
{48812, "commoner"}, 27
{48811, "commoner"}, 27
{48658, "cleric"}, 32
{48665, "commoner"}, 33
{48739, "commoner"}, 33
{48484, "commoner"}, 33
{48629, "commoner"}, 33
{48736, "commoner"}, 35
{48717, "commoner"}, 35
{48704, "commoner"}, 35
{48617, "commoner"}, 35
{48611, "commoner"}, 35
{48785, "commoner"}, 35
{48479, "soldier"}, 36
{48644, "commoner"}, 38
{48666, "commoner"}, 39
{48699, "commoner"}, 39
{48732, "commoner"}, 39
{48722, "commoner"}, 39
{48919, "commoner"}, 39
{48614, "commoner"}, 39
{48605 "commoner"}, 39
{48758, "commoner"}, 39
{48799, "commoner"}, 39
{48761, "macbeck"}, 56
Afu
Sojourner
Posts: 71
Joined: Sun Oct 01, 2017 3:58 pm

Re: Mods to Nyss Script

Postby Afu » Wed Sep 19, 2018 4:28 pm

SM Trap Prac
this works in room:
[Silverymoon, Gem of the North ] [ 48829 SMTrapper ] [ 0] The Stagstand Tavern


The Stagstand Tavern
This tavern is popular with hunters, its dark wooden walls are
adorned with deer antlers. Bright banners hang from the ceiling, each
lit by their own lantern. One has a silver arrow with green fletching,
another a green oak leaf, and a third a bestial claws with long talons.
A fire burns in the stone hearth throwing dancing shadows about the
room while men sit and drink. The center of the floor has been kept
clear of tables and is often used by people for dancing. A short
counter on the far side of the room houses the barkeep.
Exits: - South


trigger:
A tired hunter gives you a hunter's trap.
You don't detect anything strange on a hunter's trap.
A tired hunter places a hunter's trap on the ground in front of you

Code: Select all

tempTimer(15,[[send("detecttrap trap")]])


trigger:
You detect a trap on a hunter's trap!
You try to disarm a trap on a hunter's trap, but nothing seems to happen..
You cannot concentrate enough at the moment...rest a bit.

Code: Select all

tempTimer(15, [[send("disarmtrap trap")]])


trigger:
You trigger a trap on a hunter's trap!
You disarm a trap on a hunter's trap!

Code: Select all

send("drop trap")
send("give 25 c hunter")

Return to “MUD Client Help”

Who is online

Users browsing this forum: No registered users and 1 guest