Svof

1242527293035

Comments

  • A bit late (as usual, I fear) to the start of November, I just released svof 33. This version features a single change by @Nylian which fixes touching passive tattoos on others during inking. Enjoy and if you want to contribute to the project as well, go ahead. If you need help for setup or locating the issue in the source code, I'll be happy to help.
  • Is there a way to stop trying to tattoo myself? I accidentally hit enter again and it started tattooing so I moved thinking it would stop but I ended up wasting some inks before I realised it was meant to keep restarting :(
  • I don't thinke svof needs the tattoo inker anymore. The in game ink command takes care of everything for you. I just delete it on every profile.

  • There are some minor QoL features that are not in the command yet, like queueing a number of tattoos (though I'm not sure anybody ever used this), but yes, there was discussion to remove most of the svof inker functionality that is provided by the game itself now. Someone just has to do the legwork :tongue:
  • AhmetAhmet Wherever I wanna be
    Zekeros said:
    Is there a way to stop trying to tattoo myself? I accidentally hit enter again and it started tattooing so I moved thinking it would stop but I ended up wasting some inks before I realised it was meant to keep restarting :(
    'ink none'
    Huh. Neat.
  • Klendathu said:
    Dominius said:
    Can anyone tell me how I can bring a variable of mine into the custom prompt of SVOF?
    https://svof.github.io/svof/index.html#adding-custom-tags-and-colours
    You can also create a script triggered off 'svo done with prompt' event and just echo anything you want after the prompt. 
  • AhmetAhmet Wherever I wanna be
    Dochitha said:
    Klendathu said:
    Dominius said:
    Can anyone tell me how I can bring a variable of mine into the custom prompt of SVOF?
    https://svof.github.io/svof/index.html#adding-custom-tags-and-colours
    You can also create a script triggered off 'svo done with prompt' event and just echo anything you want after the prompt. 
    You shouldn't do this because deleteLineP() won't work properly, as well as a few other quirks.
    Huh. Neat.
  • edited November 2017
    Anyone know of any prompt tags not in the documentation besides @battlerage?


    Edit: Just running through git I'm seeing....  @battlerage@monkpath, @monkstance, @monkfull, and @sunlight for grove users, 
  • Ahmet said:
    Dochitha said:
    Klendathu said:
    Dominius said:
    Can anyone tell me how I can bring a variable of mine into the custom prompt of SVOF?
    https://svof.github.io/svof/index.html#adding-custom-tags-and-colours
    You can also create a script triggered off 'svo done with prompt' event and just echo anything you want after the prompt. 
    You shouldn't do this because deleteLineP() won't work properly, as well as a few other quirks.
    How? Mine is working well for me...
  • Kogan said:
    Anyone know of any prompt tags not in the documentation besides @battlerage?


    Edit: Just running through git I'm seeing....  @battlerage@monkpath, @monkstance, @monkfull, and @sunlight for grove users, 
    @fashions for vodun/puppetry? Everyone makes their own but in essence its like Kai, only allowing skills with a certain number, would be useful for starters, no idea if there is a way to grab it from gmcp..
  • How do I adjust the functions called on defup/keepup? Say I have one of my class defences on keepup, but instead of straight up sending it I want to call a separate function. I wrap nearly all my abilities in these functions so I can update balance trackers, count how many times each ability was used, etc. I can't seem to find the action in the script anywhere, hoping I dont have to dig into this giant embedded file to accomplish it.

    Also, the svo got hit by event doesn't seem to trigger for denizens, trying to work out a decent systematic way to determine which critter is hitting which group member.

  • Upon further inspection it does look like the behavior I'm trying to modify does live in the external referenced files. It is a basicdef function in this svo.dict.lua file. To make defup call my wrapper functions I'd have to supply replacement entries in this big dictionary file. I guess I'm stuck on a more elementary question then. How do I call a function that I've defined in mudlet's scripts interface from an externally loaded file like dict.lua?


  • Same way as you'd normally do, it all gets loaded into the same VM. I'd recommend raising an event instead of hacking in your functions though.
  • To add to Vadi's point: If you add events, we can work on getting them into the main project. That means they don't get lost with an update and other people can use the changes as well.
  • Very helpful thank you,

    So here is my plan:
    I'm adding a 'controlled balance loss' flag to all my wrapper functions. That way when I respond to a balance lost svo event, if I have the flag I can start a timer with a known value, if not I'll start one with a different color and a guessed value. That will get me well behaved timers until I can get these event raising hooks into a future svo version. Over time I should be able to make wrappers for most abilities, leaving only the various stuns and disruptions for uncontrolled balance loss timers.

    Then, I'll clean up my balance/cooldowns/usage tracker to a release-able state and share it. To do that I'll have to fix my balances/abilities table alot. Right now I just hand-fill the balance times my character experiences for every action. I'll need to supply the 'standard' balance times for everything, then detect nimble/quick-witted/diadem/afflictions and apply multipliers to those standards for the timers. I'll also have to expand the table to include abilities outside of my own class. (so I probably need the class, trait and balance artefacts and a crap ton of lessons to accomplish this unless I get some help)

    Once I have a functional tracker in circulation based on my current setup of wrappers, we build a toggle into svo that can swap between 'raise events instead of send' 'raise events and send' and 'send only', perhaps those toggles need to exist for every ability separately. I like the wrapper functions because one of the actions I'd like to do inside them is to swap between 'svo.doadd' and 'queue add' depending on my ping time. Or does svo already do that for me?



    I also noticed another thing - 'homunculus look' is not triggering the homunculus balance loss event like it should, not sure why. maybe the resulting text from the look is throwing off the trigger.

  • While we're here, there is a bug in Priest SVOF in the "Failed Seek" trigger.  It doesn't include "art" as an option, leading to errors when attempting to report someone couldn't be found.  It should be as follows:

    if svo.defc.dragonform then return end

    if svo.locating and svo.locating.name then
        if svo.locating.clan == "party" then
            send(string.format(
            "pt %s could not be located",
            svo.locating.name
            ))
    elseif svo.locating.clan == "art" then
    send(string.format( "art %s could not be located",
    svo.locating.name
    ))
        elseif svo.locating.clan then
            send(string.format(
            "clan %s tell %s could not be located",
            svo.locating.clan, svo.locating.name
            ))
        end
        svo.locating = nil
    end

    -- You'll notice the "art" section added. 

    Thanks!
    Deucalion says, "Torinn is quite nice."
  • That would be amazing
    Deucalion says, "Torinn is quite nice."
  • KlendathuKlendathu Eye of the Storm
    Vadimuses said:
    I've been seeing people struggle with getting Svof setup for tinkering with. Would it be easier if all of the files were all inside Mudlet like in other systems? Given the much better editor, this makes more sense than it did in the past.
    A billion times yes.

    Tharos, the Announcer of Delos shouts, "It's near the end of the egghunt and I still haven't figured out how to pronounce Clean-dat-hoo."
  • I cant like that post enough. Please and thank you!!!!!! @Vadimuses
  • OK! I've got it on my todo list. I'd like to see more people being able to update the system so everyone can still enjoy using it
  • I'm trying to set up a kata tracker for Shukudo using gmcp to recognize form then to transition if kata count >= 12 (or 24 if in rain). How would I go about doing this? 
  • So for the time being, multiclassing is a nightmare.  The only thing I want to change when I switch classes is SVOF.  Everything else, my aliases, triggers, scripts, everything, can stay the same.  To do this with mudlet I have to have two different profiles, throw a whole bunch of stuff in to Modules, then install certain things that write files to disk per profile.  For example, Zulah's GUI doesn't work as a module because it has files specific to a profile.  SVO obviously doesn't either.  This is really annoying. But..

    Could I, theoretically, have multiple different class's SVOFs on one profile, then if I switch classes, deactivate one set, activate the other, restart mudlet, and call it good?  Or will that mess up something I don't know about?
    Deucalion says, "Torinn is quite nice."
  • Torinn said:
    So for the time being, multiclassing is a nightmare.  The only thing I want to change when I switch classes is SVOF.  Everything else, my aliases, triggers, scripts, everything, can stay the same.  To do this with mudlet I have to have two different profiles, throw a whole bunch of stuff in to Modules, then install certain things that write files to disk per profile.  For example, Zulah's GUI doesn't work as a module because it has files specific to a profile.  SVO obviously doesn't either.  This is really annoying. But..

    Could I, theoretically, have multiple different class's SVOFs on one profile, then if I switch classes, deactivate one set, activate the other, restart mudlet, and call it good?  Or will that mess up something I don't know about?
    @Dochitha can maybe explain how. Not sure how he handles it. I know he switches classes multiple times a day and never relogs to do so.
  • edited November 2017

    EDIT: I apologize for the formatting of this post. The spoiler thing seems to break and everything is falling apart so I've given up and am just leaving it like this.


    If you remove the <CLASS> SVOF folder from your mudlet profile and stick it someplace else, on loading up it'll request a class folder. You can navigate to the folder you put it in and select the class you want.

    It requires you to restart mudlet each time you switch class, but it works.

    Add an "if/then" statement to every single class alias and trigger you have, that prompts off an alias or trigger, that checks whether your class variable is set to w/e class you're using (myclass = "whatever") and it'll only use whatever aliases and variables have that class.

    I stuck it all into a spoiler cause it's spammy @Torinn (I gave up, clearly)

    For example: my Achaea profile only has AK 4.1, Bashing, Current, Log, Map, Map downlods, svo, and ZulahGUI. I cut Depthswalker SVO and Blademaster SVO and stuck those into a separate folder. Every time I log into Achaea mudlet, it asks me for one of those because svo requires it (I think) and I just navigate to the folder and pick the class I'm using for the day.

    Every alias and trigger I have looks like some variation of this:

    if myclass == "blademaster" then
      send("alleviate")
    end

    or this:

    if myclass == "depthswalker" then
      if matches[2] == "s" or matches[2] == "S" then
        send("shadow manifest scythe")
      elseif matches[2] == "d" or matches[2] == "D" then
        send("shadow manifest dagger")
      else
        send("shadow manifest " .. matches[2])
      end
    end

    Just need to make a trigger or alias that does something like this:

    myclass = "depthswalker"

    for example, I have something that triggers off of keneanung's bashing thingy that does this when it selects the attack type:

    if myclass = "blademaster"
    send("position scabbard")


  • edited November 2017
    @Voli That is really helpful.  Initially, do you install both DW and BM SVO packages, or just one? 

    Edit: I think I see.  In my profile's folder on disk (C:/Users/<user>/.config/mudlet/profiles/<profile>  there is a Priest svo folder.  So you're saying you put that in its own folder with the other SVO as well, then it doesn't matter what SVO you have on your profile when you start up SVO will ask what you want to use and you point it to one or the other.  Interesting!
    Deucalion says, "Torinn is quite nice."
  • edited November 2017
    Gmcp has the class info you need.

    myClass = Gmcp.Char.Status.class
    I have mine set to that event so I never have to worry about it

    I dont use SVO but have 4 classes. And I recycle my aliases/macros with them so i do something similar.

    If myClass == "Sentinel" then
        send("doublestrike "..targetting.." "..target.." "..venom)
    Elseif myClass == "Runewarden" then
       sendAll("order entourage kill "..target, "doubleslash "..target.." "..targetting.." "..venom1.." "..venom2)
    ....
    End

  • Kogan said:
    Torinn said:
    So for the time being, multiclassing is a nightmare.  The only thing I want to change when I switch classes is SVOF.  Everything else, my aliases, triggers, scripts, everything, can stay the same.  To do this with mudlet I have to have two different profiles, throw a whole bunch of stuff in to Modules, then install certain things that write files to disk per profile.  For example, Zulah's GUI doesn't work as a module because it has files specific to a profile.  SVO obviously doesn't either.  This is really annoying. But..

    Could I, theoretically, have multiple different class's SVOFs on one profile, then if I switch classes, deactivate one set, activate the other, restart mudlet, and call it good?  Or will that mess up something I don't know about?
    @Dochitha can maybe explain how. Not sure how he handles it. I know he switches classes multiple times a day and never relogs to do so.
    I am using svo Runewarden as my profile, since I am mostly a runie nowadays. When I switch class, I'd detect my class and send defense upkeep into serverside curing based on the class. That's to handle defenses part.

    On my triggers, I use a folder to contain all class related triggers. The folder itself is a filter, which has 
    if myClass == "Alchemist" then return true end. < lua function.
    Using this, I use a folder to automatically enable or disable group of triggers without using enableTrigger or disableTrigger functions.

    for Aliases, it's what others have posted, same key for different classes.

    local case = {}
    case.alchemist = function () send("imbibe mayology") end
    case.runewarden = function () send("say I will pulp you") end

    case[myclass]()

    So I'd use a table to hold the commands I want to send for as a function, and then fire the function at the end. The same can be used for aliases with multiple combinations like ^play(h|g|q|a|v|w)$, along with multiple classes, I handle it this way:

    local Runewarden = {}
    local Alchemist = {}

    and do the same thing, assigning then with a function
    Runewarden.h = function () send("things") end

    Then we need to know our class and call the functions based on class and matches[2]
    local class = {}
    class.Runewarden = Runewarden
    class.Alchemist = Alchemist

    class[mylass][matches[2]]() --assuming myclass is gmcp whatever your class is

    I hope this makes sense, I am not a programmer so there could be more efficient way, I just don't like if else cos they are too noisy... So I learned to use table, more readable to me.
  • @Torinn I use the Blademaster install cause it gets mindnet while depthswalker does not. As the one I have installed.

    It's a nice workaround if you don't know more sophisticated answers. The only reason I did it the way I did is cause the DEF list doesn't change. Fortunately, my way fixed that for me :P There may be other ways that are better to implement though


Sign In or Register to comment.