PDA

View Full Version : SmartMonk Script



Yasutoshi
04-22-2014, 11:47 AM
I'm a new monk and one thing that I love is being able to use the right attack at the right time. The way I figure it, I know my maneuvers. Scrolling through a wall of text for a specific highlight to do the next maneuver was hurting my eyes. So, I wrote the beginnings of my first script called "SmartMonk".

Basically what it does is it sets a valid target and starts the opener. See the notes below.

Once a vulnerability is determined (punch, kick, grapple, or jab) it automatically up tiers to that attack and then goes back to the normal attack (which is now also up-tiered). It continues to attack, taking advantage of vulnerabilities until the monster is dead. Once dead, it autoloots with ;sloot. This means you only have to push the button one time. No button mash.

This is a one-button push script when you are ready to battle a monster. It keeps down the clutter of other assigned buttons. I also wrote this as a class which I feel gives more freedom and flexibility to modifying the script later on. I only wrote this over a few hours, but I've tested it with good success. It works with 1.8.7 and also 2.0 versions of Ruby.

Updated: Version 4.1.0

Read the notes in the script or when running the new script for the first time, type ;smartmonk setup



=begin
Script SmartMonk
Author Yasutoshi, Monk
Date May 18 2014
Version 4.1.0
Description Provides stancing and smart combat through unarmed vulnerabilities (punch, kick, grapple, jab)
Locks onto specific targets and continues fighting those targets, regardless of other monsters
entering into the rooms. Once the monster is killed, it loots using ;sloot.
Use: ;smartmonk punch OR ;smartmonk kick chest
Note: You can specify location to attack as well
Automatically finds and attacks monsters if they are in the same room. No need to specify
Only push button once and the script will handle the rest. No button mashing!

SETUP ;smartmonk setup
.................| Equipment Name (hands) refers to gloves/handwraps - use adjective + noun (ex. leather handwraps)
.................| Equipment Name (feet) refers to boots/footwraps - use adjective + noun (ex. leather footwraps)
.................| Member of Voln? (yes or no) If yes, when blesses run out auto blesses of feet/hands occurs automatically.
.................| Aimed Strikes (yes or no) If yes, then on the first up-tiered attack, your preferred attack will aim for a leg. On consecutive attacks, will aim for head.
.................| Default Brawling Attack can take (punch, kick, grapple, or jab)
.................| Default Attack Stance can take (offensive, advance, forward, guarded, defensive)
.................| Default Loot Script take (none, sloot, sloot2, sloot3, etc.)
.................
................. Note that blessable equipment needs to be specified based on the message received.
................. Example: some black leather footwraps show "Your leather footwraps returns to normal."
................. You need to specify leather footwraps in the box for the auto blessings to work then.
=end

VERSION = '4.1.0'
$TITLE = "SmartMonk: v. (#{VERSION})"

class SmartMonk

attr_accessor :variable, :debug

def initialize(variable, debug=0)
@msg = nil
@target = nil
@my_status = nil
@currently_tiered = false
@num_of_uptiered = 0
@debug = debug
@variable = variable
silence_me if @debug == 0
@variable[1] == 'setup' ? setup : start
end

def setup
gui
echo "..........| Settings Saved!"
echo "..........| Member of Voln? #{UserVars.smartmonk['sm_voln']}"
echo "..........| - If a voln member, when blesses run out, the following items will be blessed automatically -"
echo "..........| - You can turn this off by typing the word NO in the voln member box -"
echo "..........| Hand Equipment: #{UserVars.smartmonk['sm_hands']}"
echo "..........| Foot Equipment: #{UserVars.smartmonk['sm_feet']}"
echo "..........| - Default attack stance and martial arts move-"
echo "..........| Use Aimed Strikes?: #{UserVars.smartmonk['sm_ambush']}"
echo "..........| Preferred Stance: #{UserVars.smartmonk['sm_default_stance']}"
echo "..........| Preferred Attack: #{UserVars.smartmonk['sm_default_attack']}"
echo "..........| - If you don't want to use a loot script, specify the word none -"
echo "..........| Default Loot Script: #{UserVars.smartmonk['sm_loot_script']}"
end

def get_custom_settings
if (UserVars.smartmonk['sm_default_stance']) && (UserVars.smartmonk['sm_default_attack'])
@voln = UserVars.smartmonk['sm_voln']
@hand_equipment = UserVars.smartmonk['sm_hands']
@foot_equipment = UserVars.smartmonk['sm_feet']
@preferred_stance = UserVars.smartmonk['sm_default_stance']
@preferred_attack = UserVars.smartmonk['sm_default_attack']
@default_loot_script = UserVars.smartmonk['sm_loot_script']
else
@variable = nil
setup
end
end

def start
get_custom_settings
@target = GameObj.npcs.find { |npc| npc.status.nil? || npc.status == 'lying down' }
# ;exec echo GameObj.npcs.find { |npc| npc.status; echo "#{npc} #{npc.status}" }
# ;exec echo GameObj.npcs.find { |npc| npc.status == 'lying down'; }
if @target
echo "Monster = ##{@target.id}" if @debug == 1
open_attack
@msg = check_match_conditions
echo "start method and msg = #{@msg}" if @debug == 1
fight_on
else
exit
end
end

def check_match_conditions
return matchwait('returns to normal', 'It looks like somebody already','What were you referring to?', 'followup jab', 'followup punch', 'followup grapple', 'followup kick', 'Roundtime')
end

def attack_with(move)
if @variable[2]
multifput "stance offensive", "#{move} ##{@target.id} #{@variable[2]}"
elsif @variable[1]
multifput "stance offensive", "#{move} ##{@target.id}"
elsif @preferred_stance
multifput "stance #{@preferred_stance}", "#{move} ##{@target.id}"
else
multifput "stance offensive", "#{move} ##{@target.id}"
end
end

def ambush_or_attack_with(move)
if UserVars.smartmonk['sm_ambush'] == 'yes'
if (@currently_tiered == true) && (@num_of_uptiered == 0)
@num_of_uptiered += 1
multifput "stance #{@preferred_stance}", "#{move} ##{@target.id} right leg"
# You fail to find an opening for your strike.
elsif (@currently_tiered == true) && (@num_of_uptiered > 0)
multifput "stance #{@preferred_stance}", "#{move} ##{@target.id} head"
else
attack_with(move)
end
else
attack_with(move)
end
end

def open_attack
if @variable[1]
ambush_or_attack_with(@variable[1])
elsif @preferred_attack
ambush_or_attack_with(@preferred_attack)
else
ambush_or_attack_with("punch")
end
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
end

def loot_em
unless @default_loot_script == 'none'
start_scripts "#{@default_loot_script}"
end
end

def fight_on
# Bless items when they run out
if ( @msg =~ /Your #{@hand_equipment} returns to normal./ )
echo "Blessing ran out so refreshing if in voln." if @debug == 1
if @voln == 'yes'
waitrt?
fput "stance defensive"
fput "remove #{@hand_equipment}"
fput "sym of bless my #{@hand_equipment}"
fput "wear my #{@hand_equipment}"
attack_with("#{@preferred_attack}")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
else
attack_with("#{@preferred_attack}")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
end
elsif ( @msg =~ /Your #{@foot_equipment} returns to normal./ )
echo "Blessing ran out so refreshing if in voln." if @debug == 1
if @voln == 'yes'
waitrt?
fput "stance defensive"
fput "remove #{@foot_equipment}"
fput "sym of bless my #{@foot_equipment}"
fput "wear my #{@foot_equipment}"
attack_with("#{@preferred_attack}")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
else
attack_with("#{@preferred_attack}")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
end
# Check if target is dead
elsif @target.status == 'dead'
echo "Target Status = #{@target.status}" if @debug == 1
echo "Begin Search" if @debug == 1
fput "stance defensive"
loot_em
exit
# Jab Vulnerability was found
elsif ( @msg =~ /followup jab/ )
@currently_tiered = true
echo "Fight On - Jab and msg = #{@msg}" if @debug == 1
echo "Jab Vulnerability Found" if @debug == 1
ambush_or_attack_with("jab")
#attack_with("jab")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
# Punch Vulnerability was found
elsif ( @msg =~ /followup punch/ )
@currently_tiered = true
echo "Fight On - Punch and msg = #{@msg}" if @debug == 1
echo "Punch Vulnerability Found" if @debug == 1
ambush_or_attack_with("punch")
#attack_with("punch")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
# Grapple Vulnerability was found
elsif ( @msg =~ /followup grapple/ )
@currently_tiered = true
echo "Fight On - Grapple and msg = #{@msg}" if @debug == 1
echo "Grapple Vulnerability Found" if @debug == 1
ambush_or_attack_with("grapple")
#attack_with("grapple")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
# Kick Vulnerability was found
elsif ( @msg =~ /followup kick/ )
@currently_tiered = true
echo "Fight On - Kick and msg = #{@msg}" if @debug == 1
echo "Kick Vulnerability Found" if @debug == 1
ambush_or_attack_with("kick")
#attack_with("kick")
@msg = check_match_conditions
waitrt?
fput "stance defensive"
fight_on
# Monster already dead so search
elsif ( @msg =~ /It looks like somebody already did the job for you./ )
echo "Monster dead so search" if @debug == 1
fput "stance defensive" # do a stance check
loot_em
exit
# Monster ran or I got feared
elsif ( @msg =~ /What were you referring to?/ )
echo "Monster ran or perhaps I got feared so exiting"
fput "stance defensive" # do a stance check
exit
else
echo "nothing found attempting to continue" if @debug == 1
open_attack
end
end

def gui
Gtk.queue {
$MONK_WINDOW = Gtk::Window.new
$MONK_WINDOW.title = $TITLE
$MONK_WINDOW.set_border_width(10)
$MONK_BOX = Gtk::VBox.new(false)
$MONK_BOX.set_border_width(5)

$MONK_VERTICAL_BOX1 = Gtk::VBox.new(false, 0)

$MONK_WINDOW.add($MONK_BOX)
$MONK_NOTEBOOK = Gtk::Notebook.new
$MONK_NOTEBOOK.set_show_border(true)
$MONK_BOX.add($MONK_NOTEBOOK)
$MONK_NOTEBOOK.append_page($MONK_VERTICAL_BOX1, Gtk::Label.new(' Configuration Settings '))

$MONK_ENTRY = Hash.new
$MONK_TABLE_SIZE = Hash.new
}

Gtk.queue {
$MONK_TABLE1 = Gtk::Table.new(4, 1, false)
$MONK_TABLE1.row_spacings=2
$MONK_TABLE1.column_spacings=2
$MONK_VERTICAL_BOX1.pack_start($MONK_TABLE1, false, false, 0)
}

def self.add_label_entry(table, label, variable)
size = $MONK_TABLE_SIZE[table] || 0

label = Gtk::Label.new(label)
align = Gtk::Alignment.new 1, 0, 0, 0
align.set_padding(4, 0, 3, 4)
align.add(label)
table.attach(align, 0, 1, size, size + 1)

entry = Gtk::Entry.new
entry.text = UserVars.smartmonk[variable].to_s
entry.set_width_request(157)
table.attach(entry, 1, 2, size, size + 1)

$MONK_ENTRY[variable] = entry
$MONK_TABLE_SIZE[table] += 1
end

Gtk.queue {
$MONK_ENTRY = Hash.new
add_label_entry($MONK_TABLE1, " Equipment Name (hands)......| ", 'sm_hands')
add_label_entry($MONK_TABLE1, " Equipment Name (feet)......| ", 'sm_feet')
add_label_entry($MONK_TABLE1, " Member of Voln?......| ", 'sm_voln')
add_label_entry($MONK_TABLE1, " Use Aimed Strikes?:......| ", 'sm_ambush')
add_label_entry($MONK_TABLE1, " Default Brawling Attack......| ", 'sm_default_attack')
add_label_entry($MONK_TABLE1, " Default Attack Stance......| ", 'sm_default_stance')
add_label_entry($MONK_TABLE1, " Default Loot Script......| ", 'sm_loot_script')
}

Gtk.queue {
$MONK_WINDOW.signal_connect("delete_event") {
$MONK_SETUP_COMPLETED = true
}
}

Gtk.queue {
$MONK_WINDOW.show_all
}

$MONK_SETUP_COMPLETED = false
until($MONK_SETUP_COMPLETED)
sleep 1
end

UserVars.smartmonk ||= Hash.new
$MONK_ENTRY.keys.each { |key|
UserVars.smartmonk[key] = $MONK_ENTRY[key].text.strip.downcase
}
UserVars.save()

Gtk.queue {
$MONK_WINDOW.destroy
}
end

end

combat = SmartMonk.new(variable)




64696470

Thanks,

JD

Yasutoshi
05-01-2014, 12:03 AM
Version 2.0 updated above. Also posted to the repository. ;repo download smartmonk or ;repo info smartmonk will help you with information.

Tgo01
05-01-2014, 12:04 AM
If I had a monk I would find this most helpful.

m444w
05-01-2014, 10:24 AM
Nice work!

You can glean whether the @target is dead from @target.status though, and save yourself the headache of trying to match how every creature in the game dies.

Here is an example of doing this in ;hurl which I use to fix the broken autotargetting of hurl mechanics:

hurl.lic (https://gist.github.com/ondreian/48c69bc320e3787a9e87)

Middian
05-01-2014, 11:47 AM
Awesome thanks!

Yasutoshi
05-01-2014, 09:42 PM
Thanks for that information. I'll look it over and update and fix it on the next version.

Yasutoshi
05-01-2014, 10:24 PM
Script is now set to version 2.1.0 and updated as of 5/1/2014. It has the fix for the @target.status and now works with any monster (when dead).

Thanks for the feedback.

Yasutoshi
05-02-2014, 08:14 AM
Script updated to version 2.1.1. Fixed the issue with trust $SAFE variable not being found because I had it inside a custom class. Everything updated in first post and also updated/uploaded to the ;repo.

Tillmen
05-02-2014, 04:19 PM
Why do you want the script to be trusted?

Yasutoshi
05-03-2014, 12:01 AM
I'm not sure which scripting variables or features require trusted. Or, if adding saved character settings later on with a GUI update/configuration front end will require trust. So, I've added it in lieu of new feature requests. Doesnt' really matter. Anyone can view the code for themselves anyways.

Yasutoshi
05-03-2014, 08:15 AM
Updated to version 2.1.2.

Fixed roundtime echo'ing and added appropriate waitrt? methods to the script.

Yasutoshi
05-04-2014, 07:01 PM
Smartmonk 3.0.0 has been uploaded to the repository. It now has a setup.

SETUP

|| Setup must use the following format:
|| ;smartmonk setup [preferred stance] [preferred attack]
|| Ex. ;smartmonk setup offensive punch
|| Ex. ;smartmonk setup forward grapple
|| Once all settings are saved, you can just use ;smartmonk to attack.
|| At anytime you can override saved settings by using ;smartmonk [attack] or ;smartmonk [attack] [location]
|| Ex. ;smartmonk punch OR ;smartmonk kick chest OR ;smartmonk punch head

You can do quite a few things. For example:

;smartmonk setup advance grapple

This would make your default attack go to stance advance and use grapple as your standard opener. Up-tiering still uses the correct attack (grapple, punch, jab, kick).
Once you used the setup you only need to set a macro or alias for ;smartmonk and it will use your character settings going forward.

However, I kept in the overrides so you can do other things. For example:

;smartmonk punch

This will make punch your default opener attack and it will automatically switch you to stance offensive when attacking, overriding your character settings.

You can also do:

;smartmonk kick chest

This will also override the character settings and give you a precise strike (aimed) at the location.

If you want to do some fancy maneuvering or swap between a protected stance and offensive stance you can do:

;smartmonk setup forward punch
.. then create macros for ..
;k smartmonk\r;smartmonk\r
;k smartmonk\r;smartmonk punch\r

The first macro would stop the script in mid-use and switch to the forward punch opener after roundtime is over.
The second macro would stop the script in mid-use and switch to the offensive punch opener after roundtime is over.

If the script is not in use, you'll just get a script is not active message.

Mathari
05-07-2014, 11:30 AM
Thanks for this script. Nice work!

Two small-ish things:

1. SmartMonk freezes when you are calmed (or at least it did for me). You might want to add a check for that somewhere.

2. I get why you built looting into this script, but you might want to consider making the looting part optional (via the setup). I only say that because people might like to run this script with bigshot (I've been doing so), and they typically already have a loot script set in bigshot. Things sometimes mess up in that case, as both scripts try to loot critters. (Obviously, one easy way of fixing this is just to remove the loot script setting from bigshot; even so, it's worth considering giving people an option to just not have your script loot. EDIT: Actually, this "easy way of fixing this" doesn't actually fix it. Since SmartMonk calls sloot, if you're running it with bigshot and take the loot script out of bigshot to avoid the conflict, bigshot will sometimes run off before you can gather the loot.)

Hope this is helpful. Thanks again!

Yasutoshi
05-08-2014, 12:02 AM
Added version 4.0.1 which houses a new graphical user interface when you run ;smartmonk setup

Script SmartMonk
Author Yasutoshi, Monk
Date May 7 2014
Version 4.0.1
Description Provides stancing and smart combat through unarmed vulnerabilities (punch, kick, grapple, jab)
Locks onto specific targets and continues fighting those targets, regardless of other monsters
entering into the rooms. Once the monster is killed, it loots using ;sloot.
Use: ;smartmonk punch OR ;smartmonk kick chest
Note: You can specify location to attack as well
Automatically finds and attacks monsters if they are in the same room. No need to specify
Only push button once and the script will handle the rest. No button mashing!

Trust Script needs to be trusted. Make sure you ;trust smartmonk

SETUP ;smartmonk setup
.................| Equipment Name (hands) refers to gloves/handwraps (ex. leather handwraps)
.................| Equipment Name (feet) refers to boots/footwraps (ex. leather footwraps)
.................| Member of Voln? (yes or no) If yes, when blesses run out auto blesses of feet/hands occurs automatically.
.................| Default Brawling Attack can take (punch, kick, grapple, or jab)
.................| Default Attack Stance can take (offensive, advance, forward, guarded, defensive)
.................
................. Note that blessable equipment needs to be specified based on the message received.
................. Example: some black leather footwraps show "Your leather footwraps returns to normal."
................. You need to specify leather footwraps in the box for the auto blessings to work then.

This is a process in the works.

Read ;repo info smartmonk or the notes above to see how setup works.

6468

Yasutoshi
05-08-2014, 12:08 AM
Thanks for this script. Nice work!

Two small-ish things:

1. SmartMonk freezes when you are calmed (or at least it did for me). You might want to add a check for that somewhere.

2. I get why you built looting into this script, but you might want to consider making the looting part optional (via the setup). I only say that because people might like to run this script with bigshot (I've been doing so), and they typically already have a loot script set in bigshot. Things sometimes mess up in that case, as both scripts try to loot critters. (Obviously, one easy way of fixing this is just to remove the loot script setting from bigshot; even so, it's worth considering giving people an option to just not have your script loot. EDIT: Actually, this "easy way of fixing this" doesn't actually fix it. Since SmartMonk calls sloot, if you're running it with bigshot and take the loot script out of bigshot to avoid the conflict, bigshot will sometimes run off before you can gather the loot.)

Hope this is helpful. Thanks again!

I'll be doing both of these things now that I'm working on a GUI layout. In the GUI I'll add an option for you to enter what loot script you want or you can specify none. I'll have it ready for the next version. I just updated version 4.0.1 which has equipment locations for hands/feet and auto blessing. You can still override with specific attacks or called locations.

Edit: Just added the loot toggle in setup for 4.0.2 but need to test tomorrow before uploading. If everything works out, I'll have version 4.0.2 up tomorrow night.

Thanks.

Yasutoshi
05-08-2014, 06:50 AM
SmartMonk Version 4.0.2 now uploaded to repo:

Includes optional looting. Add none in the box if you don't want looting or add sloot or sloot2 or sloot3 etc. for which looting script you prefer.


6469
6470

Mathari
05-08-2014, 09:39 AM
SmartMonk Version 4.0.2 now uploaded to repo:

Includes optional looting. Add none in the box if you don't want looting or add sloot or sloot2 or sloot3 etc. for which looting script you prefer.
Good stuff. Thanks!

BTW, as Tillmen's earlier post intimated, so far nothing in the script actually needs trusting. I've been deleting the trust check from the script each time I DL it, since I'd prefer not to trust scripts that don't actually need trusting. Not a huge deal to me, though -- just putting this out there as information. I don't know when exactly trusting a script becomes required; the only times I've encountered it so far have been times when the script accessed other files.

Yasutoshi
05-08-2014, 12:12 PM
Good stuff. Thanks!

BTW, as Tillmen's earlier post intimated, so far nothing in the script actually needs trusting. I've been deleting the trust check from the script each time I DL it, since I'd prefer not to trust scripts that don't actually need trusting. Not a huge deal to me, though -- just putting this out there as information. I don't know when exactly trusting a script becomes required; the only times I've encountered it so far have been times when the script accessed other files.

Welcome.

Yeah I only put the trust thing in because I don't know what requires trust or not. I can remove it if someone can point me to an explanation of when or where it is required. I'd be happy to remove more unnecessary logic.

Tgo01
05-08-2014, 12:27 PM
I'm pretty sure the only time a script needs to be trusted is if the script accesses files on your computer or if the script uses lnet chat, there's probably other instances that the script needs to be trusted.

Most likely your script doesn't require needing to be trusted. You could always untrust it and run the script and see if it ever tells you the script needs to be trusted to work properly.

m444w
05-08-2014, 01:07 PM
Fairly sure stopping/starting other scripts (sloot in SmartMonk for example) requires trust.

Tillmen
05-08-2014, 07:33 PM
Fairly sure stopping/starting other scripts (sloot in SmartMonk for example) requires trust.

It doesn't. Hardly anything does.

Yasutoshi
05-08-2014, 09:46 PM
Version 4.0.3 uploaded to repo and attached.

Removed the trust section of the script as I've personally tested and confirmed that none of the existing features requires trust so far. If that changes down the road, I can always re-add. I don't think it will though.

I also fixed a minor issue with auto-blesses and the ordering.

Everything is working fine.

I've also been testing character status entries but calm doesn't seem to function properly:

echo Char.name
echo Char.calmed?
echo Char.sleeping?
echo Char.bound?
echo Char.status

.. shows ..

Yasutoshi
true
false
false
Order of Voln

.calmed? or checkcalmed both always come up true regardless if calmed. Also the status shows Order of Voln instead of the current state of the character.

What I'm looking for are character status entries for the character using the script. I don't want to see anything related to any other pcs in the room. Any help would be appreciated.

Tgo01
05-08-2014, 10:03 PM
I don't think there is anyway for Lich to check if you are calmed, it's not a status ailment that shows up on your character like stun or prone or poisoned. It doesn't show up with ;magic either.

I think the script would need to keep an eye out for the messaging "A calm washes over you." and set a flag that you are calmed then have it keep an eye out for the messaging "The feeling of calm leaves you." and "You are enraged by .* attack!" for when it falls off.

Lulfas
05-08-2014, 10:20 PM
Does the script stance dance, or just keep attacking?

Yasutoshi
05-08-2014, 10:32 PM
I think I figured it out. I read through some other scripts and then monkey patched my own status check. This seems to work:



def game_test
target = Array.new
status = Array.new
status.push 'dead' if dead?
status.push 'webbed' if webbed?
status.push 'stunned' if stunned?
if kneeling?
status.push 'kneeling'
elsif sitting?
status.push 'sitting'
elsif !standing?
status.push 'prone'
end
if status.empty?
target.push({name: Char.name, status: nil})
else
target.push({name: Char.name, status: status.join(' ')})
end
echo target[0][:name]
echo target[0][:status]
end


But, I think you are right about calmed.

Yasutoshi
05-08-2014, 11:55 PM
Does the script stance dance, or just keep attacking?

This script fights on until the creature is dead. It stance dances in between and also auto blesses if you specify equipment and are in voln. It also auto loots with whatever loot script you choose. I'm working on adding status checks to ensure that it does some further things like auto-stands you if you are knocked to the ground, kneeling, or sitting. And, addressing issues like being calmed.

Yasutoshi
05-10-2014, 01:42 PM
Fixed a couple of small variable issues. I'm not at home so I can't upload to repo. I'll upload tonight but the script is here.

Yasutoshi
05-10-2014, 07:28 PM
Version 4.0.5 uploaded to repo and posted here.

Fixed a couple of hash issues and variable issues. Because of this update, you will need to run ;smartmonk setup again after downloading.

Thanks!

Yasutoshi
05-20-2014, 12:40 PM
Updated SmartMonk due to the release of SmartHunt. Re-download please. :)

Alashir
05-20-2014, 12:46 PM
Wow, this is awesome. Thanks.

Yasutoshi
05-24-2014, 11:45 AM
Updated SmartMonk to ver. 4.1.0.

Make sure you run ;smartmonk setup


Fixed issues with finding mobs that were lying on the ground
Added "Use Aimed Strikes" (aim features)


If you put "yes" in Use Aimed Strikes the following will occur:

Your preferred attack will work as normal and you will attack normally. As soon as the first up-tiered attack vulnerability occurs, your next subsequent attack will be aiming for a leg. Each subsequent attack thereafter will aim for the head.

I recommend that you note the following things with this addition:

Your default attack should be one that you have at least one cman mastery in. If punch for instance, make sure you have punchmastery. Grapple (as noted by Zho) has some really good crit modifiers when aiming for a leg.

The best optimal setup for using aimed strikes is the following:


1 to 2 ranks of grapplemastery
2x CM per level
1x Ambush per level


I personally use 1 rank of punchmastery and allow punchmastery to help with up-tiers. Grapple mastery may be more advantageous to use. Trial and error.

65316532

Example images above. Start with normal attack and get a kick vulnerability. Kick out the leg of the wight. Punch out his brain. Dead.

Elgrim
10-14-2014, 09:14 AM
Question on this one. If you are using bigshot how do you plug this script into the hunting routine?

Thanks!

Elgrim
10-15-2014, 02:27 PM
Bump, pick me pick me!

Tgo01
10-15-2014, 02:48 PM
I don't think the person who wrote this script plays anymore and I don't use bigshot so I dunno :(

Viekn
10-15-2014, 03:23 PM
I don't think the person who wrote this script plays anymore and I don't use bigshot so I dunno :(

I know, I wish Yasutoshi did still play because personally I think this is the best UAC script available; although it's got some minor issues I'd like solved.

He also made the smarthunt script after smartmonk. I think smarthunt may be the way to get smartmonk to do other things like bigshot. But when I initially tested out using UAC (gave it up since then) and tried the smarthunt script, it said I needed a new version of Ruby. I thought since I was upgrading Ruby I might as well upgrade Lich, then everything went to pot and I've since downgraded back to Lich 4.4 instead of 4.6. (I have limited time to play so I just need my shit to work).

So long story short (too late) if you've got the updated version of Ruby, you may want to give smarthunt a try.