Thank you to the following people weather they know it or not. I either used your code to get this working or you gave me great help or both!
TrailMyx, MadDog, Cerveza, _C2_, Ultima, Uncle Dave for some snippits from his taming script.
I will start off by saying I used the Tutorial section as my template for this, thanks are already in place for those who helped so far. I am sure more will come.
The only thing I ask is if the code is working, please let me know it works before you suggest a "Better Way". I am really trying to learn on my own here by reading code and using snippits. I appreciate ALL help and it is helping me more than you know, but I need to know if my original code is working properly before I do it a better way. Thank you.
If you feel or know there is a change in what I have so far, please let me know by quoting the code to change in its original form, then what it should be changed to and why. Possibly highlighting the changed areas. Please do not get ahead of what I already have here if it can be helped, I am learning and want to learn, I dont want this done for me. If/When I get stuck I will post a question for that area. But suggestions to my current work in progress is greatly appreciated, as well as corrections if needed.
Again, please remember, I am learning. Once I get all the subs and check areas in place and working, I will then fill in and correct the areas one at a time.
Edit 5/29 7:00pm EST: Think I MAY have fixed the taming problem, give it a go and let me know how it turns out.
Edit 5/29 3:00am EST: Trying Maddogs Subs for taming from his Jhelom Taming Script.
Edit 5/28 12:00 pm: Fixed a lot of syntax errors, think I fixed the problem that was only turning in one pet at moonglow at a time. Things I need to work on, one make sure it works, which I cant check now. And have someone verify some of my syntax, to make sure it is correct.
Are the following lines/subs correct in syntax? Including and most important, the followers portion.
Sub turnin
gosub Gate ; gates you and pets to moonglow zoo box
donationbox:
set #lTargetID TIGFQMD ; sets the ID of the donation box
set #lTargetTYPE CUD ; Sets Type of ID of the donation box
turninpets:
event macro 1 0 a transfer ;
wait 1s
event macro 22 0 ;
if #followers >=%2 ;<---IS this correct????
{ ;
goto turninpets
}
gosub ReturnToTame
return
Or would it work better with the original Mount checking code which is..
set %varUseMount True ;Variable if you are using a mount or not.
if #UseMount = #TRUE ;if you are using a horse, this will set the
{ ;turn in amount to 4.
set %varTurnins ( %varTurnins - 1 ) ;
} ;This script not set for mounts with more than
Which would make it look like this
Sub turnin
gosub Gate ; gates you and pets to moonglow zoo box
donationbox:
set #lTargetID TIGFQMD ; sets the ID of the donation box
set #lTargetTYPE CUD ; Sets Type of ID of the donation box
turninpets:
event macro 1 0 a transfer ;
wait 1s
event macro 22 0 ;
if #followers >=%varTurnins ;<---IS this correct????
{ ;
goto turninpets
}
gosub ReturnToTame
return
Now the other problem I am having is, when it runs out of tamables its not moving around like it is supposed to, can someone check that area and see if all is in place?
;==================================================================================================
; Script Name: Coragin's Animal Tame and Donate Script
; Author: Coragin
; Version: 1.1 Beta
; Shard OSI / FS: OSI
; Revision Date: 5/29/2009 7pm
; Purpose: Tame wolves, Polar Bears and Slimes and gate them to moonglow for turn in.
; will also tame white wolves as they can also be donated.
;==================================================================================================
; Special Instructions: Set up a Runebook as follows
; Book Name: Zoo
; Slot One: Your Home (Name Rune HOME or Home)(Can also set this to an Inn, just name it Home)
; Slot Two: Rune for Donation Box at Moonglow Zoo (Name this rune Zoo 1)
; Slot Three: Rune for your first taming location. Call it Zoo 2.
; Slot Four: Rune for your first taming location. Call it Taming 1.
; Other Slots: Additional Rune locations for taming. Taming 2, Taming 3, Taming 4 ect ect
; Supports only 4 FOUR Taming locations!
; Will ALWAYS return to taming area ONE!
; When you start the script recall to your first taming area rune!!!
;
; I take no credit for the Sub-Routines used that were written by others, if your Sub is
; being used and I have not given credit, please let me know and I will correct it.
;
; Thanks: Cerveza, TM, C2 & ScriptUO.com for all their help and tutorials!
; Thanks to TrailMyx, for his Runebook Subs I am using in this script.
;==================================================================================================
gosub TM_AddUnderscore #CHARNAME ;This is required by TM's Runebook Subs
set %charname #RESULT ;This is required by TM's Runebook Subs
gosub InitAnimalTaming ;this will go in beginning at setup
gosub AnimalType
set %varTunrins #maxFol ;sets the amount of turn ins to max control slots
set %name a ;What pet will be renamed to
set %wait 15 ;Adjust this if you are running into lag issues
set %spot 1
set #lpc 100
set %tameable PG_VF_VE_GE_ZD_ ;Sets the ID of monsters && Animals to Tame
set %tamingtypes PG_VF_VE_GE_ZD_
set %varUseMount True ;Variable if you are using a mount or not.
if #UseMount = #TRUE ;if you are using a horse, this will set the
{ ;turn in amount to 4.
set %varTunrins ( %varTurnins - 1 ) ;
} ;This script not set for mounts with more than
gosub setup ;one control slot.
display yesno Would you like to add a short delay between taming/renaming to $ make the script appear less "Twinkle McNugget"? (Note: Script will be slower!)
if #dispres = YES
set %scriptdelay 60
if #dispres = NO
set %scriptdelay 0
chooseSkill Anim
set %initialtaming #skill
chooseSkill Anil
set %initiallore #skill
set %currenttaming %initialtaming
set %currentlore %initiallore
firstspot:
mainloop:
if #followers >=%varTunrins
{ ; This checks for control slots to be full for turn in
gosub turnin
} ;
gosub CheckForStatusBar
gosub AnimalType
gosub Tame ; This is for the Taming Section
goto mainloop
;====================================================================================================
;
; TESTING OF TAMING PORTION ALPHA! I take no credit for this area, copied from Maddog's Jhelom Taming.
;
;====================================================================================================
sub CheckForStatusBar
while #followers = N/A
{
event macro 8 2
wait 5
}
return
sub AnimalType
set %tamingtypes PG_VF_VE_GE_ZD_ ;Polar Bears, White Wolves, Slimes
return
sub Tame
findItem %tamingtypes G_12
;If not found, move to next spot
if #findCnt < 1
{
gosub NextSpot
return
}
set %tamingtarget #findid
WalkToTarget:
if #finddist > 2
{
event PathFind #findx #findy #findz
wait 20
goto WalkToTarget
}
;Attempt to tame animal (include safety timer)
AttemptToTame:
event macro 13 35 ;Use Taming Skill
target 5s ;Wait for targeting cursor
set #ltargetid %tamingtarget ;Set taming target to last target
set #ltargetkind 1
event macro 22 0 ;Target taming target
set %scantimer #scnt + 20 ;Saftey timer for poor scripting on my part!
ScanForSuccess:
scanjournal 1
if #scnt > %scantimer ;Check to see if saftey timer has expired
{
deletejournal
return
}
if seems_to_accept_you_as_master in #journal
{
deletejournal
goto PetRename
}
if animal_looks_tame_already in #journal
{
deletejournal
ignoreitem %tamingtarget
return
}
if fail_to_tame_the_creature in #journal
{
deletejournal
wait 5
goto AttemptToTame
}
if are_too_far_away_to_continue_taming in #journal
{
deletejournal
goto WalkToTarget
}
if animal_is_too_angry_to_continue_taming in #journal
{
deletejournal
ignoreitem %tamingtarget
return
}
finditem %tamingtarget
if #finddist > 2
{
event PathFind #findx #findy #findz
}
goto ScanForSuccess
return
sub NextSpot
if #followers >=2
{
event Macro 3 0 All follow me
}
if %rune = 1
{
gosub TM_TravelFromNamedRunebook GA 4 4 Zoo ; gate using Zoo runebook at rune 4
set %rune 2
return
}
if %rune = 2
{
gosub TM_TravelFromNamedRunebook GA 5 5 Zoo ; gate using Zoo runebook at rune 5
set %rune 3
return
}
if %rune = 3
{
gosub TM_TravelFromNamedRunebook GA 6 6 Zoo ; gate using Zoo runebook at rune 6
set %rune 4
return
}
if %rune = 4
{
gosub TM_TravelFromNamedRunebook GA 3 3 Zoo ; gate using Zoo runebook at rune 3
set %rune 1
return
}
return
sub PetRename
event macro 3 0 all follow me ; whisper all follow me so you dont have to chase the released pet
wait %scriptdelay
exevent RenamePet %tamingtarget %name ;Rename tamed target to "tamed"
wait %wait
return
;===================================================================
;
; This is the Sub for gating to moonglow and turning in pets.
;
;===================================================================
Sub turnin
gosub Gate ; gates you and pets to moonglow zoo box
donationbox:
set #lTargetID TIGFQMD ; sets the ID of the donation box
set #lTargetTYPE CUD ; Sets Type of ID of the donation box
turninpets:
event macro 1 0 a transfer ;
wait 1s
event macro 22 0
if #followers >=%1
{
goto turninpets:
}
gosub ReturnToTame
return
;================================================================================
;
; This will return you to taming area after a turn in.
;
;================================================================================
Sub ReturnToTame
if #followers >=%2
{
event macro 1 0 All follow me
}
gosub TM_TravelFromNamedRunebook GA 3 3 Zoo ; gate using Zoo runebook at rune 3
wait 5s
return
;================================================================================
;
; This is the Gate Sub for Gating to Moonglow && Checking to make sure you gated
;
;================================================================================
Sub Gate
event Macro 1 0 All follow me
gosub TM_TravelFromNamedRunebook GA 2 2 Zoo ; gate using Zoo runebook at rune 2
wait 5s
return
;=====================================================================================
;
; TM's Runebook Travel Sub
;
;=====================================================================================
sub TM_NewCastSpell
namespace push
namespace local NCS
set !lpc #LPC
set #LPC 100
set !whichspell %1
set !whichtarget %2
set !castretrymax %3
set !waitdelay %4
set !recovery_delay %5
set !castretry 0
set !temp_ltargetid #LTARGETID
set !temp_ltargetkind #LTARGETKIND
NewCastSpell_loop1:
if !castretrymax < 0
goto NewCastSpell_cont1
if !castretry > !castretrymax
goto NewCastSpell_end1
NewCastSpell_cont1:
gosub TM_AdvJournalSync SPELLCAST
set #LTARGETKIND 1
set #LTARGETID !whichtarget
set !tempmana #MANA
event macro 15 !whichspell ; cast the spell
wait !waitdelay
set !targettimeout #SCNT + 7
NewCastSpell_wait1:
gosub TM_AdvJournalScan SPELLCAST VALID you_have_not_yet mana your_spirit more_reagents
if #RESULT = #TRUE || #SCNT > !targettimeout
{
set !casttimeout #SCNT2 + !recovery_delay
repeat
until #SCNT2 > !casttimeout ; finish up cast delay
set !castretry !castretry + 1
goto NewCastSpell_loop1
}
if !whichtarget = NONE
goto NewCastSpell_skip1
if #TARGCURS = 1
goto NewCastSpell_targ1
goto NewCastSpell_wait1 ; wait for target cursor
NewCastSpell_targ1:
if !whichtarget = SELF
event macro 23
else
event macro 22
NewCastSpell_skip1:
wait 5
set !casttimeout #SCNT2 + !recovery_delay
NewCastSpell_skip2:
if !whichspell >= 0 && !whichspell <= 63 ; Magery
{
gosub TM_AdvJournalScan SPELLCAST VALID spell_fizzles there_is_already mana your_spirit more_reagents
}
else
{
set !cont #FALSE ; Chivalry, Necromancy, etc
finditem !whichtarget *
if !whichtarget in SELF_NONE || #FINDKIND <> -1
set !cont #TRUE
if #MANA >= !tempmana && !cont = #TRUE ; check if target is still there
set #RESULT #TRUE
else
set #RESULT #FALSE
}
repeat
until #SCNT2 > !casttimeout ; finish up cast delay
if #RESULT = #TRUE
{
if !castretrymax > -1
{
set !castretry !castretry + 1 ; %castretrymax of -1 will cast until successful
if !castretry > !castretrymax
goto NewCastSpell_end1
}
goto NewCastSpell_loop1
}
if #SCNT2 <= !casttimeout ; finish up cast delay
goto NewCastSpell_skip2
NewCastSpell_end1:
set #LTARGETID !temp_ltargetid
set #LTARGETKIND !temp_ltargetkind
set #LPC !lpc
namespace pop
return
;-------------------------------------------------------------------------------
; %1 = Method (RE, GA, SJ)
; %2 = index location within runebook (1-16)
; %3 = index location within runebook (1-16), try up to this point
; %4 = runebook item id
; returns #TRUE if error, #FALSE for no error
sub TM_TravelFromRunebook
namespace push
namespace local RFR
set #LTARGETKIND 1
set !method %1
set !locindex %2
set !locindexend %3
set !rbook %4
finditem !rbook C_ , #BACKPACKID
if !method notin RE_GA_SJ || #FINDKIND = -1
{
namespace pop
return #TRUE
}
if !locindex notin 1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16
{
namespace pop
return #TRUE
}
if !locindexend notin 1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16
{
namespace pop
return #TRUE
}
TravelFromRunebook_loop1:
set #LOBJECTID !rbook
set #LTARGETKIND 1
event macro 17 0
gosub GumpWait generic_gump generic_gump
set !runeclickx 140 ; page 1, rune 1
set !runeclickx ( #CONTPOSX + !runeclickx + ( 35 * ( ( !locindex - 1 ) / 2 ) ) )
if !locindex > 8
{
set !runeclickx 310 ; page 2, rune 1
set !runeclickx ( #CONTPOSX + !runeclickx + ( 35 * ( ( !locindex - 9 ) / 2 ) ) )
}
set !runeclicky #CONTPOSY + 196
click !runeclickx !runeclicky
wait 5
set !runeclicky #CONTPOSY + 24
set !runeclickx #CONTPOSX + 164 ; page 1 set to default
if !locindex % 2 = 0
{
set !runeclickx #CONTPOSX + 305 ; page 2 set to default
}
click !runeclickx !runeclicky
wait 5
set !oldx #CHARPOSX
set !oldy #CHARPOSY
if !method = RE
gosub TM_NewCastSpell 31 !rbook -1 10 10 ; recall until successful
if !method = GA
{
gosub TM_NewCastSpell 51 !rbook -1 10 20 ; gate until successful
set !temp_cnt #SCNT + 10
repeat
finditem KEF_OTF_JEF G_0
until #FINDKIND <> -1 || #SCNT > !temp_cnt
if #FINDKIND <> -1
{
set #LOBJECTID #FINDID
wait 10
event macro 17 0
wait 20
if #CONTNAME = generic_gump && #CONTSIZE = 420_280
{
gosub TM_AdvJournalSync SPELLCAST
set !clickx #CONTPOSX + 26
set !clicky #CONTPOSY + 261
click !clickx !clicky ; click ok
}
}
}
if !method = SJ
gosub TM_NewCastSpell 210 !rbook -1 10 30 ; sacred journey until successful
wait 30
set !tempscnt #SCNT + 10
WaitforTravel_loop1:
gosub TM_AdvJournalScan SPELLCAST VALID location_is_blocked something_is_blocking you_spirit_lacks
if #RESULT = #TRUE
{
gosub TM_AdvJournalSync SPELLCAST
set !locindex !locindex + 1
if !locindex > !locindexend
{
namespace pop
return #TRUE
}
goto TravelFromRunebook_loop1
}
if ( ( #CHARPOSX = !oldx && #CHARPOSY = !oldy ) && #SCNT < !tempscnt )
goto WaitforTravel_loop1
if #CONTNAME = generic_gump && #CONTSIZE = 452_236 ; RunUO close runebook
{
set !clickx #CONTPOSX + 120
set !clicky #CONTPOSY + 60
click !clickx !clicky mc r
wait 5
}
namespace pop
click 401 254 n
return #FALSE
;------------------------------------------------
; %1 method
; %2 starting index
; %3 ending index
; %4 runebook name
sub TM_TravelFromNamedRunebook
namespace push
namespace local TFNR
set !method %1
set !start_index %2
set !end_index %3
set !runbook_name %4
if !method notin RE_GA_SJ
{
namespace pop
return #TRUE
}
if !start_index notin 1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16
{
namespace pop
return #TRUE
}
if !end_index notin 1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16
{
namespace pop
return #TRUE
}
locatenamedrunebook:
finditem ZBN C_ , #BACKPACKID
if #FINDKIND <> -1
{
event property #FINDID
if !runbook_name in #PROPERTY
{
gosub TM_TravelFromRunebook !method !start_index !end_index #FINDID ; recall to location
}
else
{
ignoreitem #FINDID rbook
goto locatenamedrunebook
}
}
else
{
display ok Cannot locate specified runebook named , #SPC , !runbook_name
stop
}
ignoreitem reset rbook
namespace pop
return
;-------------------------------------------------------------------------------
sub TM_RandomRunebookTravel
namespace push
namespace local RRT
set !travelmethod %1
set !rune1 %2
set !rune2 %3
set !runebook %4
if !rune1 > !rune2
{
set !temp !rune2
set !rune2 !rune1
set !rune1 !temp
}
RunebookTravel_loop1:
set !random #RANDOM
set !rune ( ( !random % ( !rune2 - !rune1 + 1 ) ) + !rune1 )
gosub TM_TravelFromRunebook !travelmethod !rune !rune !runebook
if #RESULT = #TRUE
goto RunebookTravel_loop1
namespace pop
return
;-------------------------------------------------------------------------------
; %1 = Method (RE, GA, SJ)
; %2 = Object Findid
; returns #TRUE if error, #FALSE for no error
sub TM_TravelFromObject
namespace push
namespace local RFR
set !method %1
set !object %2
finditem !object C_ , #BACKPACKID
if !method notin RE_GA_SJ || #FINDKIND = -1
{
namespace pop
return #TRUE
}
set !oldx #CHARPOSX
set !oldy #CHARPOSY
TravelFromObject_loop1:
if !method = RE
gosub TM_NewCastSpell 31 !object -1 10 10 ; recall until successful
if !method = GA
{
gosub TM_NewCastSpell 51 !object -1 10 20 ; gate until successful
set !temp_cnt #SCNT + 10
repeat
finditem KEF_OTF_JEF G_0
until #FINDKIND <> -1 || #SCNT > !temp_cnt
if #FINDKIND <> -1
{
set #LOBJECTID #FINDID
wait 10
event macro 17 0
wait 20
if #CONTNAME = generic_gump && #CONTSIZE = 420_280
{
gosub TM_AdvJournalSync SPELLCAST
set !clickx #CONTPOSX + 26
set !clicky #CONTPOSY + 261
click !clickx !clicky ; click ok
}
}
}
if !method = SJ
gosub TM_NewCastSpell 210 !object -1 10 30 ; sacred journey until successful
wait 30
set !tempscnt #SCNT + 10
WaitforTravel2_loop1:
gosub TM_AdvJournalScan SPELLCAST VALID location_is_blocked something_is_blocking your_spirit_lacks
if #RESULT = #TRUE
{
gosub TM_AdvJournalSync SPELLCAST
set !locindex !locindex + 1
if !locindex > !locindexend
{
namespace pop
return #TRUE
}
goto TravelFromObject_loop1
}
if ( ( #CHARPOSX = !oldx && #CHARPOSY = !oldy ) && #SCNT < !tempscnt )
goto WaitforTravel2_loop1
namespace pop
return #FALSE
;-------------------------------------------------------------------------------
; %1 - Journal Name
; %2 - #LPC setting (optional)
; Brings !_jindex up to the most recent #journal entry
sub TM_AdvJournalSync
namespace push
namespace local TM_AdvJS_ , %1
set !_jindex #jindex + 1
if %0 > 1
set !lpc_set %2
namespace pop
set !TM_FunctionCalled #TRUE
return
;-------------------------------------------------------------------------------
; %1 - Journal Name
; %2 - NONE, ADVANCE , ( _VALID ) - advances jindex pointer, anything else
; %3, %4, %5, etc strings to match
; returns #TRUE for match, #FALSE for no match
; Will not advance !_jindex pointer to allow for scanning journal history for more than one search.
; Also searches for : , #SPC in journal entry to be sure someone isn't spamming the text
; About %2 arguments:
; NONE: defaults to basic journal scan (no SPAM checking, no #jindex pointer copy advancing)
; ADVANCE: no spam checking, advances #jindex copy
; VALID: invokes SPAM filtering, no advance of #jindex copy
; VALID_ADVANCE, VALIDADVANCE, ADVANCE_VALID, etc.: invokes SPAM filtering, advances of #jindex copy
sub TM_AdvJournalScan
namespace push
namespace local TM_AdvJS_ , %1
set !args %2
set !temp_lpc #LPC
if !lpc_set = N/A
set #LPC 1000
else
set #LPC !lpc_set
set !num_args %0
set !first_arg 3
if !_jindex = N/A
set !_jindex #jindex
if !charname = N/A
{
set !charname #CHARNAME
AdvJournalScan_loop1:
str pos !charname #SPC
if #STRRES <> 0
{
set !val #STRRES - 1
str left !charname !val
set !left #STRRES
set !val !val + 1
str del !charname 1 !val
set !charname !left , _ , #STRRES
goto AdvJournalScan_loop1
}
}
set !index !first_arg
repeat
set !temp_jindex !_jindex
set !text % . !index
while !temp_jindex <= #jindex
{
scanjournal !temp_jindex
str pos #JOURNAL !charname 1
set !namepos #STRRES
str count #JOURNAL !charname
set !namecnt #STRRES
str pos #JOURNAL :_ 1
set !smcpos #STRRES
str pos #JOURNAL !text 1
set !textpos #STRRES
if !textpos < !smcpos && !smcpos <> 0 || !smcpos = 1 || :_ notin #JOURNAL || VALID notin !args
set !pass #TRUE
else
set !pass #FALSE
if ( !text in #journal && ( ( !namepos = 1 && !namecnt <= 1 ) || !pass ) )
{
set !temp_jindex !temp_jindex + 1
if ADVANCE in !args
set !_jindex !temp_jindex
set #LPC !temp_lpc
namespace pop
set !TM_FunctionCalled #TRUE
return #TRUE
}
set !temp_jindex !temp_jindex + 1
}
set !index !index + 1
until !index - !first_arg > !num_args - !first_arg
set #LPC !temp_lpc
namespace pop
set !TM_FunctionCalled #TRUE
return #FALSE
;-------------------------------------------------------------------------------
; %1 = Gumpname 1
; %2 = Gumpname 2
; #TRUE gump occured before timeout
sub GumpWait
namespace push
namespace local GW
wait 10
set !timedelay #SCNT
while #SCNT <= !timedelay + 7
{
if #CONTNAME = %1 || #CONTNAME = %2
{
namespace pop
return #TRUE
}
}
namespace pop
return #FALSE