需求:
1、船、无限航道。
2、宠物一只,我用的是马。
3、绷带若干,鉴于技能低的时候消耗量大,自己多刷些带着。
4、有攻击魔法技能和足够的药材或者省药装。
操作:
1、将马带到船上,不要骑着。
2、运行脚本,第一次运行选择马,然后即可以开始提升动物知识和兽医。
改动:
1、把原来的施放魔法箭改成了小闪电,这样马会失血较多,从而利于绷带。
2、把原来的检测技能提升之后自动停船改成自动向前走,因为无限航道嘛。
脚本:
;====================================================================
;Configuration Section
;====================================================================
; There are only a few things you need to change, if any. I suggest trying as is with the cow first.
;
set %initcow IG_NG ;If you don't wanna use a cow let the script learn the animal type!
;set %initcow YG ; a bull
;
; Others to try if you have high eval/magery and your Magic Arrow kills the cow alot.
; DG - Walrus, about the same as a cow, hits you for about 6-10 HP
; M - snow leopard, 3x more HP, hits you for about 10-14 HP
; AH - Great Hart, 3x more HP, hits about 6-12 HP
;
set %lrcsuit #true ;If you got a suit and want to wear it set this to #true, but do you really need to use this?
; You only need Sulfuric Ash. Probably less then 1000. Not worth wearing a suit.
set %menuposx 540 ;You can adjust these two numbers to fit your
set %menuposy 440 ;setup and position of your windows.
;
set %healtimer 40 ;Adjusted for pub 19, increase this if heals take longer (10 = 1 sec)
;
set %slowconnection #false ; set to #true if you have a slow connection (modem, etc)
;
; If you want to use a fireball spell instead of a magic arrow and do more damage set to #true
set %usefireball #false
; If you're on a slow connection and miss the gainspot set this to 1 (or more)
; to backup that many spaces after a skill gain.
set %backupaftergain 0
;=====================================================SF===============
;End Configuration Section - Changing anything below this line voids your warranty
;====================================================================
gosub getGlobalVar 105 UserDefinedAnimalTypes #charid userAnimalTypes NOLOCK
if #result
{
set %initcow IG_NG_ , %userAnimalTypes
}
gosub FindAnimal
if %usefireball
{
set %regs KUF
set %spell 17
}
else
{
set %regs SZF
set %spell 29
}
set %version 1.8a
set %debug #false
chooseskill anil
set %scriptstart #scnt
set %castarrow #true
set %backupdone #false
set %boatongain #false
set %maxhits #maxHits - ( #maxHits / 10 )
set %forcepause #maxHits / 2
set %LoreSkillStart #skill
set %boaty #charposy
set %cow %initcow
set %retries 0
set %petaids 0
set %petaidssuccess 0
set %tarrows 0
set #menubutton N/A
set *20 ok ;for RK's HealthWatch script, tells if poisoned, hurt, ok
set *21 free
gosub StatusBarUp
if %slowconnection
{
set %wait1 20
set %wait2 20
set %wait3 20
set %wait4 30
}
else
{
set %wait1 5
set %wait2 10
set %wait3 15
set %wait4 20
}
set %peacewait 20
chooseskill vete
if #skilllock <> locked
{
Display YesNo Your Vet skill is not locked. This script works$
+best if vet is locked. Do you want to continue?$
$Press Yes to ignore this warning, No to halt script.$$
if #dispres = No
{
sound
halt
}
}
wait %wait1
chooseskill anil
if #skilllock <> up
{
Display Ok Your Animal Lore skill is not marked up.$
+It's kind of hard to gain otherwise! Please correct$
+and restart script.$$
sound
halt
}
gosub InitMenu
gosub CheckRequirements 9
;
; THE MAIN LOOP
;
mainloop:
gosub CheckForPause
gosub toggleWarMode #false
gosub MagicArrow
gosub toggleWarMode #false
gosub HealCow
gosub RKHealthwatchCheck
goto mainloop
halt
;
;
sub CheckRequirements
;purpose - Make sure we have everything needed to run this script
; 1 = cow, 2 = aids, 3 = regs, 9 = all
;
if %1 = 1 || %1 = 9
{
set %cnt 0
findcow:
set *21 busy
finditem %cow
IF #findkind = -1
{
if %cnt <> 3
{
set %cnt %cnt + 1
Event Macro 3 0 all follow me
wait %wait4
goto findcow
}
else
{
if %cow = %initcow
{
set #menubutton doPause
menu font color btnface
menu Font BGColor red
menu text scriptpause 50 66 Dude, where's your pet?
gosub CheckForPause
menu delete scriptpause
menu font bgcolor BLACK
menu font color red
menu font style n
set %cnt 0
goto findcow
}
else
{
set #menubutton doPause
menu font color btnface
menu Font BGColor red
menu text scriptpause 50 66 Dude you killed your pet!
gosub CheckForPause
menu delete scriptpause
menu font bgcolor BLACK
menu font color red
menu font style n
set %cow %initcow
set %cnt 0
goto findcow
}
}
}
if %cow = %initcow
set %cow #FINDID
}
set *21 free
set %bagcheck #true
findaids:
if %1 = 2 || %1 = 9
{
finditem ZLF C
if #findkind = -1
{
if %bagcheck
{
Event Macro 8 7
wait %wait4
set %bagcheck #false
goto findaids
}
set #menubutton doPause
menu font color btnface
menu Font BGColor red
menu text scriptpause 25 66 You need more bandaids! Visible?
gosub CheckForPause
menu delete scriptpause
menu font bgcolor BLACK
menu font color red
menu font style n
set %bagcheck #true
goto findaids
}
set %aids #FINDID
}
set %bagcheck #true
findregs:
if ( %1 = 3 || %1 = 9 ) && ! %lrcsuit
{
finditem %regs C
if #findkind = -1
{
if %bagcheck
{
Event Macro 8 7
wait %wait4
set %bagcheck #false
goto findregs
}
set #menubutton doPause
menu font color btnface
menu Font BGColor red
menu text scriptpause 25 66 You need more regs! Visible?
gosub CheckForPause
menu delete scriptpause
menu font bgcolor BLACK
menu font color red
menu font style n
set %bagcheck #true
goto findregs
}
}
return
sub HealCow
;purpose - heal your pet and get your gains here.
gosub CheckRequirements 1
tryagain:
set %boaty #charposy
gosub CheckRequirements 2
gosub CheckHealth
gosub CheckForPause
gosub GuardMe
gosub FollowMe
set #lobjectid %aids
deletejournal
set #ltargetid %cow
set #ltargetkind 1
set *21 pause
Event Macro 17 0
target 5s
Event Macro 22 0
wait %wait2
set *21 free
if not_damaged in #sysmsg
{
set %castarrow #true
deletejournal
return
}
if too_far_away in #sysmsg || cannot_see_that in #sysmsg
{
Event Macro 3 0 all follow me
wait %wait3 %wait2
Event Macro 3 0 all stay
wait %wait1 %wait2
goto tryagain
}
set %petaids %petaids + 1
gosub CheckForGain
if little_damage in #sysmsg || finish_apply in #sysmsg
{
set %castarrow #true
set %petaidssuccess %petaidssuccess + 1
deletejournal
gosub UpdateMenuStats 1
return
}
gosub UpdateMenuStats 1
if barely_help in #sysmsg
{
goto tryagain
}
if did_not_stay in #sysmsg
{
Event Macro 3 0 all follow me
wait %wait3
Event Macro 3 0 all stay
wait %wait1 %wait2
goto tryagain
}
return
sub GuardMe
;purpose - make sure the status bar is green
finditem %cow
if #findrep <> 2 && #findrep <> 3
{
Event Macro 3 0 all guard me
wait %wait2 %wait2
}
return
sub FollowMe
;purpose - call the pet if it gets out of range
finditem %cow
if #finddist > 2
{
Event Macro 3 0 all follow me
wait %wait4 %wait4
Event Macro 3 0 all stay
wait %wait1 %wait2
}
return
sub MagicArrow
;purpose - damage the pet so you have something to heal
if ! %castarrow
return
gosub CheckRequirements 3
gosub ToggleWarMode #true
set #ltargetid %cow
set #ltargetkind 1
if #finddist > 8
{
Event Macro 3 0 all follow me
wait %wait1 %wait2
Event Macro 3 0 all follow me
wait %wait1 %wait2
Event Macro 3 0 all stay
wait %wait1 %wait2
}
set *21 pause
Event Macro 15 %spell
target 5s
wait 3
Event Macro 22 0
Event Macro 3 0 all stop
wait %wait4
Event Macro 3 0 all follow me
wait %wait3
Event Macro 3 0 all stop
wait %wait2
Event Macro 3 0 all follow me
wait %wait3
gosub toggleWarMode #false
wait %wait1
Event Macro 3 0 all stop
wait %wait1
Event Macro 3 0 all follow me
wait %wait3
set *21 free
set %tarrows %tarrows + 1
gosub UpdateMenuStats 2
set %castarrow #false
gosub CheckRequirements 1
gosub RKHealthwatchCheck
return
sub CheckForGain
;purpose - check for gains and stop the boat on the gain spot.
if %boatongain
set %retries %retries + 1
set %currentskill #skill
set %scnt2 #scnt2 + %healtimer
CheckGain:
if #skill > %currentskill
{
if ! %boatongain
{
Event Macro 3 0 forward
set %boatongain #true
wait 1s
gosub backupaftergain
}
set %retries 0
gosub UpdateMenuStats 3
set %currentskill #skill
goto CheckGain
}
if %scnt2 < #scnt2
{
if %retries = 10
{
set %retries 0
set %boaty #charposy
Event Macro 3 0 slow forward
wait 1s
set %boatongain #false
set %backupdone #false
}
return
}
goto CheckGain
return ; not really needed but it bugs me not to see one
sub CheckHealth
;purpose - check our health and tell the pet to stop it or use RKHealthwatch
gosub StatusBarUp
if #hits < %maxhits
{
Event Macro 3 0 all stop
wait %wait1
gosub ToggleWarMode #false
if #hits < %forcepause
{
set #menubutton doPause
menu font color btnface
menu Font BGColor red
menu text scriptpause 30 66 Script paused for health reasons!
gosub CheckForPause
menu font bgcolor BLACK
menu font color red
menu font style n
menu delete scriptpause
}
}
gosub RKHealthwatchCheck
return
SUB RKHealthwatchCheck
;purpose - pause CEOAnimalLore so RK's Healthwatch can save your butt
;
PauseMe:
if *20 = ok
return
wait 5
gotoPauseMe
return
sub ToggleWarMode
;purpose - try and keep us outta war mode so we don't kill our pet
if %1 && G in #charstatus
return
if ! %1 && G notin #charstatus
return
set *21 pause
Event Macro 6 0
wait 5
set *21 free
return
sub InitMenu
;purpose - draw the inital menu window and put it up
;***main window setup***
menu clear
menu window size 240 150
menu window title CEO Animal Lore Version %version
menu window color black
;***set font color***
menu font bgcolor BLACK
menu font color red
menu font size 9
menu font style bu
;***display Titles***
menu text railtitle 40 0 CEOAnimalLore Statistics
menu font size 8
menu font style n
menu text txt 100 15 success/attempts
menu font size 9
menu text stattxt 58 30 Heals , #spc , :
menu text stattxt 25 45 Magic Arrow , #spc , :
;***skillgain section***
menu font style bu
menu font size 9
menu text sktxt 55 85 (tenths) skill gains rate/hr
menu font style n
menu text sktxt 10 100 Animal Lore
gosub UpdateMenuStats 9
menu font bgcolor teal
menu font color black
menu button doPause 70 120 100 20 Press to Pause
menu font bgcolor black
menu font color red
set #menubutton N/A
menu show %menuposx %menuposy
if ! %debug
menu hideeuo
wait 20
menu show %menuposx %menuposy
return
sub UpdateMenuStats
;purpose - update the menu stats
; 1=petaids, 2=magicarrows, 3=statgain, 9=all
if %1 = 1 || %1 = 9
{
menu delete shealtxt
menu text shealtxt 115 30 %petaidssuccess / %petaids
}
if %1 = 2 || %1 = 9
{
menu delete smagictxt
menu text smagictxt 115 45 %tarrows
}
if %1 = 3 || %1 = 9
{
menu delete loretxt
set %anilgain #skill - %LoreSkillStart
set %rate %anilgain * 3600 / ( #SCNT - %scriptstart )
menu text loretxt 84 100 #skill ---- %anilgain ---- %rate
}
return
sub StatusBarUp
;purpose - make sure the status bar is up on the char
IF #charname = N/A
{
Event Macro 8 2
wait %wait1
}
return
sub CheckForPause
;purpose - pause CEOAnimalLore
if #menubutton = N/A
return
doPause:
set *21 free ; Make sure RK HealthWatch can save you sitting on a boat doing nothing
IF #menubutton = doPause
{
Event Macro 3 0 all stop
wait 5
Event Macro 3 0 forward
wait 5
set #menubutton N/A
menu delete doPause
menu font bgcolor teal
menu font color black
menu button doResume 70 120 110 20 Press to Resume
menu font bgcolor black
menu font color red
goto doPause
}
IF #menubutton = doResume
{
set #menubutton N/A
menu delete doResume
menu font bgcolor teal
menu font color black
menu button doPause 70 120 100 20 Press to Pause
menu font bgcolor black
menu font color red
if ! %boatongain
Event Macro 3 0 slow forward
wait 5
return
}
wait 2s
goto doPause
return ; not really needed but it bugs me not to see one
sub FindAnimal
FA1:
finditem %initcow G_5
if #findkind <> -1
return
display YesNo Could not find a Cow, would you like to have the script learn a new animal type?$$
+Note: Animal must be within 5 paces for animal verification.
if #dispres = NO
{
display OK Script Halting, no animal to train with. Modify % , initcow or rerun script$
+and select "YES" to have the script learn the animal type you want to train.
halt
}
display ok Press OK and then target your animal.
set #ltargetid n/a
event macro 13 2
target 5s
FA2:
wait 5
if #targcurs = 1
goto FA2
wait 5
contpos -75 -75
set %tempid #ltargetid
finditem %tempid
if #findkind = -1
goto FA1
event property #findid
wait 5
display YesNO Type: #findtype $Name: #property $(Note: Name info will be blank if not client 4.x.x)$$Is this correct?$
if #dispres = NO
goto FA1
if %useranimaltypes = N/A
set %userAnimalTypes #findtype
else
set %userAnimalTypes %userAnimalTypes , _ , #findtype
gosub putGlobalVar 105 UserDefinedAnimalTypes #charid userAnimalTypes
set %initcow IG_NG_ , %userAnimalTypes
return
sub backupaftergain
if %backupdone || %backupaftergain = 0
return
for %backupcount 1 %backupaftergain
{
Event Macro 3 0 one back
wait 1s
}
set %backupdone #true
return
;========End of CEOAnimalLore=====
;==================================
; Script Name: CEO's * variable management subs (pseudo filesystem)
; Author: CEO
; Version: 1.0
; Client Tested with: 4.0.1b
; EUO version tested with: 1_41_103
; Shard OSI / FS: OSI
; Revision Date: 040219
; Public Release: 040219
; Globals Used: User specified (2 total)
; Purpose: Allows you to use a * variable as a pseudo-filesystem
;=======================================
; CEO's global variable management subs:
; getGlobalVar . putGlobalVar . delGlobalVar
;=======================================
Sub getGlobalVar
;ver 1.0 posted 19Feb04 by CEO
;purpose: Allows you to store multiple variables in one global variable unique to
; each player and script. getGlobaVar retrieves a value from a global variable.
;@returns: #result = #false if variable not found, #true if found
; % . %3 contains variable value
;%1 is the global/persistant variable to use ( %1 + 1 is used for locking)
;%2 is the script identifer or pseudo filename
;%3 is #charid or pseudo filename
;%4 is the variable to search for and return in %. %3
;%5 is for lock control. By default getGlobalVar uses a lock to return a value. In some cases you may want to
; retrieve a variable (mostly for speed) without needing a lock as long as you are aware of
any potentional conflicts, that very rarely may occur. Set this param to NOLOCK to access
global storage without a lock.
;sample usage:
; gosub getGlobalVar 50 MyScript #charid backpackid
; Using global var *50 finds the variable labeled MyScript#charidbackpackid and returns it in %backpackid
;
; gosub getGlobalVar 50 MyScript #charid clothstat NOLOCK
; Using global var *50 find the variable labeled MyScript#charidclothstat and returns it in %clothstat without using a lock
; Warning: do not use *1000. * %1 + 1 is used for locking and there is no *1001!
nameSpace push
nameSpace local #systime , _ , %2 , _ , %3 , _ , %4 , _ , GET
set !lpc #lpc
set #lpc 1000
set !lock %1 + 1
if ( %0 = 5 ) && ( %5 = NOLOCK )
goto getGlobalVar_skiplock
set !lockcount 0
getGlobalVar_waitforlock:
if * . !lock <> N/A && * . !lock <> #nsname
{
wait 1 4
set !lockcount !lockcount + 1
if !lockcount < 10
goto getGlobalVar_waitforlock
if * . !lock <> N/A
{
set !currentlock * . !lock
if !currentlock = N/A
goto getGlobalVar_waitforlock
str pos !currentlock _
set !strres #strres - 1
str left !currentlock !strres
set !systime #systime - #strres
if !systime < 10000 ; if over 10 seconds assume a broken lock and take it
{
set !lockcount 0
goto getGlobalVar_waitforlock
}
}
}
set * . !lock #nsname
wait 3 2
if * . !lock <> #nsname
{
set !lockcount 0
goto getGlobalVar_waitforlock
}
getGlobalVar_skiplock:
set !global * . %1
set !varName %2 , ^ , %3 , ^ , %4 , |
str pos !global !varName
set #result #strres <> 0
if #result
{
set !varNamePos #strres
str len !varName
set !delString !varNamePos + #strres - 1
str del !global 1 !delString
set !global #strres
str pos !global |
set !varNamePos #strres - 1
str left !global !varNamePos
set % . %4 #strres
}
if ( %0 < 5 || %5 <> NOLOCK ) && * . !lock = #nsname
set * . !lock N/A
set #lpc !lpc
nameSpace Clear
nameSpace Pop
return #result
Sub putGlobalVar
;ver 1.0 posted 19Feb04 by CEO
;purpose: Allows you to store multiple variables in one global variable unique to
; each player and script. putGlobaVar stores a value into a global variable.
;@returns: #result = #false if variable not found, #true if found
; % . %3 contains variable
;%1 is the global/persistant variable to use
;%2 is the script identifer or pseudo filename
;%3 #charid or other identifier
;%4 is the variable name of the variable to save into the* variable identified in %1
;sample usage:
; gosub putGlovalVar 50 MyScript #chardid backpackid
; Using global var *50 stores/updates the variable labeled MyScript#charidbackpackid with %backpackid
; Warning: do not use *1000. * %1 + 1 is used for locking and there is no *1001!
nameSpace push
nameSpace local #systime , _ , %2 , _ , %3 , _ , %4 , _ , PUT
set !lpc #lpc
set #lpc 1000
set !lock %1 + 1
set !lockcount 0
putGlobalVar_waitforlock:
if * . !lock <> N/A && * . !lock <> #nsname
{
wait 1 4
set !lockcount !lockcount + 1
if !lockcount < 10
goto putGlobalVar_waitforlock
if * . !lock <> N/A
{
set !currentlock * . !lock
if !currentlock = N/A
goto putGlobalVar_waitforlock
str pos !currentlock _
set !strres #strres - 1
str left !currentlock !strres
set !systime #systime - #strres
if !systime < 10000 ; if over 10 seconds assume a hung lock and take it
{
set !lockcount 0
goto putGlobalVar_waitforlock
}
}
}
set * . !lock #nsname
wait 4
set !global * . %1
set !varName %2 , ^ , %3 , ^ , %4 , |
str pos !global !varName
if #strres = 0
{
if * . !lock <> #nsname
{
set !lockcount 0
goto putGlobalVar_waitforlock
}
if |CEO*FILESYSTEM| notin !global
set !global |CEO*FILESYSTEM|
set * . %1 !global , !varName , % . %4 , |
set * . !lock N/A
set #lpc !lpc
nameSpace clear
nameSpace pop
return #true
}
set !varNamePos #strres
str len !varName
set !splitString !varNamePos + #strres - 1
str left !global !splitstring
set !globalPart1 #strres
str del !global 1 !splitString
set !global #strres
str len !global
set !globalLen #strres
str pos !global |
set !splitString !globalLen - #strres + 1
str right !global !splitstring
set !global #strres
if * . !lock <> #nsname
{
set !lockcount 0
goto putGlobalVar_waitforlock
}
set * . %1 !globalPart1 , % . %4 , !global
set * . !lock N/A
set #lpc !lpc
nameSpace clear
nameSpace pop
return #true