Mudlet - influencer/harvester

by Unknown

Back to Mechanic's Corner.

Unknown2010-07-08 06:45:22
Spurred by another thread, I pulled the balance/eq "chasing", the harvesting module, and the influencing module out of Stygian and refactored them, packaging it all up only with what was needed for it to function.

It's an influencing/harvesting bundle. If you don't harvest, you can of course delete the folders in the script editor labeled "demonnic harvesting". Do not delete anything within the "demonnic basic/shared" folders, as that is where I put the underlying functions (the chaser, a system echo function, etc)

I was using the code for this harvester and influencer just last night, so it should work perfectly out of the box. That having been said, I -did- refactor it, and though it was largely automated, there could be something that was missed. If you -do- find something, please let me know, and I'll fix it as soon as possible. If you try it out and it does work, let me know that too please.

Information time!

Aliases you'll want to know:


CODE
minf :

This is to influence all denizens of one 'type' in a room. In this case, 'type' means the letter portion of their unique id (widowrider123475 orc1987263 what have you). Therefore, if you want to empower all widowriders in the room, you would invoke it thus:  minf widowrider empower e


inf :

This is the single entity influence command. It works about like minf does, except the target is a specific denizen, not a 'type' of denizen. To influence the first illithoid with empower: inf illithoid empower n

cinf:

Cancels influencing.

chaseres:

This will reset the balance/equilibrium queues, if something's gone wrong. This would mainly be used in this case to stop herb harvesting. use "cinf" to cancel influencing.

har :

This is the alias used to start herb harvesting. If you call it as simply "har" then it will attempt to harvest every type of herb in the room. It harvests down to 5 left in the room. 10 left if the herb is hibernating.

debug:

toggles debug mode on and off

debugc :

let's you specify what categories to listen to on the debugger. If the optional category is given, it will toggle the state for that category (add it to listen, or remove it if it is added). If it is called as just "debugc" then it will print out what categories you are watching.
"chaser", "influencer", and "harvester" are the three categories I believe exist in this bundle. DO NOT TURN THIS ON IN COMBAT. It is -incredibly- spammy.



So... here it is:

Unknown2010-07-08 07:24:58
This is great, thanks Demonnic! Can't wait to play with these new toys.
Unknown2010-07-08 18:08:39
Hmm I tried to use the influencing script but it didn't work out.

Doing 'inf comptroller beg w' for instance, there is no response from the system (not even a blank line)

Doing 'minf comptroller beg w' did this:
CODE
minf comptroller beg w
config pagelength 200
Your current pagelength: 200
3715h, 4804m, 5258e, 10p, 16125en, 22500w ex-
ih

config pagelength 40
3715h, 4804m, 5258e, 10p, 16125en, 22500w ex-

Your current pagelength: 40
3715h, 4804m, 5258e, 10p, 16125en, 22500w ex-

Lua error:
Catarin2010-07-08 19:10:07
Shou: If you are already capturing your stats somehow and storing them in a variable (max hp, current hp, etc.) you'll need to set the influencer to read those values instead of demonnic.maxEgo and demonnic.curEgo or you can just have your capture script populate those two variables with the proper variables. Also need to initialize at least one variable.

Can add this:

if not demonnic.targetList then demonnic.targetList = {} end

to the top of the Influencer script.

This should at least get it running. I haven't tried influencing something yet to see if there are any other uninitialized variables out there but it's a good bet any problems you run into could be due to that.

NOTE: Wandered out of my manse to try it out and it works like a charm for begging and empowering both single and multiple targets. Nice script thumup.gif
Unknown2010-07-08 22:09:42
There must be something wrong with my client - I added the line that you suggested Catarin, but the same error keeps occurring. I also removed any previous scripts in the client, so I don't have any other prompt capture scripts. Can I copy+paste something to better show what the problem is?
Catarin2010-07-08 23:10:38
QUOTE (Shou @ Jul 8 2010, 04:09 PM) <{POST_SNAPBACK}>
There must be something wrong with my client - I added the line that you suggested Catarin, but the same error keeps occurring. I also removed any previous scripts in the client, so I don't have any other prompt capture scripts. Can I copy+paste something to better show what the problem is?


You misunderstand me, it's not whether you have another script capturing your vitals that's the problem, it's the lack of the two variables the influencer script is looking for that' sthe problem. You have to have *some* variable that relates to your maximum ego and current ego, even if its static and never changes. The script is looking for a maxEgo and curEgo. So if you have nothing capturing your vitals I would just paste this into your influencer script

demonnic.maxEgo = 1000
demonnic.curEgo = 1000

Keep in mind this means the script will never automatically flee for you when your ego gets too low as it's just a static value.
Unknown2010-07-09 01:03:36
Crud, I forgot to leave the trigger portions in for that. I'll patch it up in a bit here and replace the xml in the original post.

Thanks for letting me know, as I said I ripped this from another profile and generalized it. Should be fixed shortish
Unknown2010-07-09 01:24:04
Ok, I added the ATCP event to keep track of your stats into the bundle. I tested it on both single and multiple targets. You can now actually just import and use it. Sorry about the earlier issue.
Unknown2010-07-09 01:28:02
QUOTE (Catarin @ Jul 8 2010, 03:10 PM) <{POST_SNAPBACK}>
Shou: If you are already capturing your stats somehow and storing them in a variable (max hp, current hp, etc.) you'll need to set the influencer to read those values instead of demonnic.maxEgo and demonnic.curEgo or you can just have your capture script populate those two variables with the proper variables. Also need to initialize at least one variable.

Can add this:

if not demonnic.targetList then demonnic.targetList = {} end

to the top of the Influencer script.

This should at least get it running. I haven't tried influencing something yet to see if there are any other uninitialized variables out there but it's a good bet any problems you run into could be due to that.

NOTE: Wandered out of my manse to try it out and it works like a charm for begging and empowering both single and multiple targets. Nice script thumup.gif



Thanks for pointing out the table that needed initializing, and I'm glad you like it.

That stuff in the 'base' section can be used for any kind of bal/eq queuing. I'll try to write it up soon, but the explanation is in the comments in the script.
Unknown2010-07-09 01:49:55
It's working perfectly now smile.gif This is really awesome - thanks demonnic and Catarin. Looking at what you coded I think I'm getting the gist of lua now. Going to try to write a auto-defense setup script next!
Unknown2010-07-09 02:41:50
Oh, and I believe the triggers for influencing may be incomplete... I've just been collecting them as I go. I originally wrote the mass influencer portion as an exercise. The harvester script was a pretty easy follow up to that. Then I scrapped it and rewrote the underpinning queue from scratch, as I wanted one queue to track and speed through both balance and eq rather than a seperate one for each. Since so many thing require bal but use eq, or vice versa.

Anyways, long story short I prolly don't have all the influencing triggers. If you discover lines it's missing (for things like when to move on to the next target due to a variety of reasons) please post them here, and I will add them to it and update the file as we go.
Unknown2010-07-09 03:13:42
Sure thing, I'll definitely post any missing lines if I come across them. I took part of the original script and then made another alias that allows me to define targets separately, and then automatically influence them using a shorter command instead of writing the entire line again. Very very simple - It may be useful if you're lazy like me!

CODE
alias: ^abeg (.*)$
demonnic.influencer.typeOfInfluence = beg
demonnic.influencer.actionExit = matches
demonnic.influencer.massInfluence = false
demonnic.influencer.actionNext = 1
demonnic.influencer.actionCancelled = false

  demonnic.influencer.actionList = {
    "Begging",
    "Supplication",
    "Wheedling"
  }
    demonnic_onInfluenceContinue()


Define the target using another alias.

I looked at your balance/eq chaser as well, and tried to do the defup queue as mentioned but I am slumped again. Based on what I observed this is what I deciphered so far:

CODE
demonnic_chaser(send("abjure waterwalk"), {consumesBal = false})
demonnic_chaser(send("abjure cloak"), {consumesBal = false})


But clearly it doesn't work. I was also wondering if it'd be possible to make a table with all my separate defences, then use the demonic_chaser function to call on all of them (instead of separately defining each defence like I have above)?
Unknown2010-07-09 03:47:47
QUOTE (Shou @ Jul 8 2010, 11:13 PM) <{POST_SNAPBACK}>
Sure thing, I'll definitely post any missing lines if I come across them. I took part of the original script and then made another alias that allows me to define targets separately, and then automatically influence them using a shorter command instead of writing the entire line again. Very very simple - It may be useful if you're lazy like me!

CODE
alias: ^abeg (.*)$
demonnic.influencer.typeOfInfluence = beg
demonnic.influencer.actionExit = matches
demonnic.influencer.massInfluence = false
demonnic.influencer.actionNext = 1
demonnic.influencer.actionCancelled = false

  demonnic.influencer.actionList = {
    "Begging",
    "Supplication",
    "Wheedling"
  }
    demonnic_onInfluenceContinue()


Define the target using another alias.

I looked at your balance/eq chaser as well, and tried to do the defup queue as mentioned but I am slumped again. Based on what I observed this is what I deciphered so far:

CODE
demonnic_chaser(send("abjure waterwalk"), {consumesBal = false})
demonnic_chaser(send("abjure cloak"), {consumesBal = false})


But clearly it doesn't work. I was also wondering if it'd be possible to make a table with all my separate defences, then use the demonic_chaser function to call on all of them (instead of separately defining each defence like I have above)?


That's because it doesn't take straight lua code. What you want is:

CODE
demonnic_chaser(], {consumesBal = false})
demonnic_chaser(], {consumesBal = false})



I haven't gone back and rewritten demonnic_chaser to accept an anonmyous function as an argument, only a string. Though I may do that at some point soon, cuz it really would be nicer than having to enclose the code in double square brackets.
Unknown2010-07-10 05:55:58
It should be noted that no, in fact, the auto-run feature isn't working.

Watch your Ego. If it gets low, use CINF to cancel the influencer and then move. I hadn't had to run in so long, so I hadn't realized it had stopped working. I'll be posting a fixed version sometime soon.
Unknown2010-07-10 13:12:03
QUOTE (demonnic @ Jul 10 2010, 01:55 AM) <{POST_SNAPBACK}>
It should be noted that no, in fact, the auto-run feature isn't working.

Watch your Ego. If it gets low, use CINF to cancel the influencer and then move. I hadn't had to run in so long, so I hadn't realized it had stopped working. I'll be posting a fixed version sometime soon.



And it's fixed. Lua is case sensitive, but apparently my ability to typo is not. Remove the three 'demonnic' directories and then reimport.


I should also point out that if your wrapwidth isn't set to 0, this probably won't work for you. Call me lazy, but I don't wanna spend a bunch of time accounting for shifting line breaks...
Unknown2010-07-10 15:37:56
Woohoo that was fast, thanks! pig.gif
Unknown2010-07-10 16:02:44
QUOTE (Shou @ Jul 10 2010, 11:37 AM) <{POST_SNAPBACK}>
Woohoo that was fast, thanks! pig.gif


It popped into the error console as soon as I loaded it up. it was busted in my original code. i had one line with Sdebug instead of SDebug . Ahh well. The error console has been very helpful.
Catarin2010-07-10 16:27:54
QUOTE (demonnic @ Jul 10 2010, 10:02 AM) <{POST_SNAPBACK}>
It popped into the error console as soon as I loaded it up. it was busted in my original code. i had one line with Sdebug instead of SDebug . Ahh well. The error console has been very helpful.


I love the debug console. So helpful!
Sakr2010-08-27 20:49:12
With Seduction it doesn't know when to stop influencing the target. How do I fix this?
Unknown2010-08-28 04:24:34
QUOTE (Falcon @ Aug 27 2010, 04:49 PM) <{POST_SNAPBACK}>
With Seduction it doesn't know when to stop influencing the target. How do I fix this?



You're right. I don't know how I missed that... but I don't have the line in there. If you'll capture the line and post it here, I'll add it to the package, as well as post up the pattern to use for it. Sorry for the oversight.