TrailMyx's Advanced CLAw v756
TrailMyx's Advanced CLAw v756
gosub CheckHotKey
gosub HandleAdvancedCLAwFull
set %script_pause #FALSE
if #MENUBUTTON = EUOButtonSmaller
{
set #MENUBUTTON N/A
if %pane_font_size > 7
set %pane_font_size %pane_font_size - 1
gosub ChangeLeftPane %left_pane FORCE
if %left_window_zoom = #FALSE
gosub ChangeRightPane %right_pane FORCE
}
if #MENUBUTTON = EUOButtonLarger
{
set #MENUBUTTON N/A
if %pane_font_size < 12
set %pane_font_size %pane_font_size + 1
gosub ChangeLeftPane %left_pane FORCE
if %left_window_zoom = #FALSE
gosub ChangeRightPane %right_pane FORCE
}
if #MENUBUTTON = EUOButtonItemAttribLogic
{
set #MENUBUTTON N/A
gosub ChangeButtonState %button1 EUOButtonItemAttribLogic 244 248 31 21
set %button1 #RESULT
}
if #MENUBUTTON = EUOButtonSkillIntensityLogic
{
set #MENUBUTTON N/A
gosub ChangeButtonState %button2 EUOButtonSkillIntensityLogic 244 272 31 21
set %button2 #RESULT
}
if #MENUBUTTON = EUOButtonTalismanLogic
{
set #MENUBUTTON N/A
gosub ChangeButtonState %button3 EUOButtonTalismanLogic 244 296 31 21
set %button3 #RESULT
}
if #MENUBUTTON = EUOButtonUserLogic
{
set #MENUBUTTON N/A
gosub ChangeButtonState %button4 EUOButtonUserLogic 244 320 31 21
set %button4 #RESULT
}
if #MENUBUTTON = EUOButtonItemAttribOK
{
set #MENUBUTTON N/A
gosub HandleOKWithVal EUOComboItemAttrib START_ITEM_ATTRIBUTES %button1
EUOEditItemAttrib
}
if #MENUBUTTON = EUOButtonSkillIntensityOK
{
set #MENUBUTTON N/A
gosub HandleOKWithVal EUOComboSkillIntensity START_SKILLS %button2
EUOEditSkillIntensity
}
if #MENUBUTTON = EUOButtonTalismanOK
{
set #MENUBUTTON N/A
gosub HandleOKWithVal EUOComboTalisman START_TALISMAN %button3 EUOEditTalisman
}
if #MENUBUTTON = EUOButtonUserOK
{
set #MENUBUTTON N/A
namespace copy user_name_count from local USERNAMES
if !user_name_count > 0
gosub HandleOKWithVal EUOComboUser START_USER_SEARCH %button4
EUOEditUserDefinedIntensity
}
if #MENUBUTTON = EUOButtonSpecificItemOK
{
set #MENUBUTTON N/A
gosub HandleOKWithVal EUOComboSpecificItems START_SPECIFIC_ITEMS N/A N/A
}
if #MENUBUTTON = EUOButtonSlayerOK
{
set #MENUBUTTON N/A
gosub HandleOKWithVal EUOComboSlayer START_SLAYER_WEAPONS N/A N/A
}
if #MENUBUTTON = EUOButtonRightActive
{
set #MENUBUTTON N/A
gosub ChangeRightPane ACTIVE NULL
}
if #MENUBUTTON = EUOButtonLeftActive
{
set #MENUBUTTON N/A
gosub ChangeLeftPane ACTIVE NULL
}
if #MENUBUTTON = EUOButtonAddActiveRule
{
set #LPC 10000
set #MENUBUTTON N/A
gosub ChangeRightPane ACTIVE NULL
gosub AddNewMultiActiveRule ACTIVE
set !temp #RESULT
gosub ReDrawActiveRules
menu list select EUOListRightPane !temp
set #LPC 100
}
if #MENUBUTTON = EUOButtonActiveDelete
{
set #MENUBUTTON N/A
gosub DeleteMultiActiveRule EUOListRightPane ACTIVE
}
if #MENUBUTTON = EUOButtonLeftRules
{
set #MENUBUTTON N/A
gosub ChangeLeftPane RULES NULL
}
if #MENUBUTTON = EUOButtonHistory
{
set #MENUBUTTON N/A
gosub ChangeRightPane HISTORY NULL
}
if #MENUBUTTON = EUOButtonStats
{
set #MENUBUTTON N/A
gosub ChangeRightPane STATS NULL
}
if %DEBUG = #TRUE
{
namespace copy RULE* from local RULES
namespace copy active_rule_index from local RULES
namespace copy omit_rule_index from local RULES
namespace copy omit_rule_index from local RULES
namespace copy container_timer from local SCFN
namespace copy rule_counter from local SCFN
}
return
;-------------------------------------------------------------------------------
;---------------------- Configuration/Initialization -------------------------
;-------------------------------------------------------------------------------
sub InitializeScript
if %version_type = N/A
{
menu delete EUOButtonAND
menu delete EUOButtonOR
menu delete EUOButtonNOT
menu delete EUOButtonRuleOK
menu delete EUOButtonActiveDelete
menu delete EUOButtonActiveClear
menu delete EUOButtonPreview
menu delete EUOButtonActive
menu delete EUOButtonNewRule
menu delete EUOCheckBoxHideBodies
menu delete EUOButtonLeftMinMax
menu delete EUOCheckPreview
menu delete EUOCheckTurbo
menu delete EUOButtonOmit
}
menu delete EUOButtonAND
menu delete EUOButtonOR
menu delete EUOButtonNOT
menu delete EUOButtonRuleOK
menu delete EUOButtonActiveDelete
menu delete EUOButtonActiveClear
menu delete EUOLabelLeftTitle
menu delete EUOButtonKeep
menu delete EUOButtonPreviewCLR
set %id_user
set %id_gold POF_
set %id_gems UVF_NVF_RVF_HVF_EVF_BVF_VVF_GVF_ZVF_VUF_OVF_FVF_
set %id_magery_regs WZF_MZF_RZF_KZF_KUF_JZF_SZF_JUF__
set %id_necro_regs TZF_DUF_IUF_YZF_UZF_
set %id_tmaps SVH_
set %id_nets UDF_
set %id_bandage ZLF_
set %id_solen_items TTO_GMF_IJG_OKF_ ; ; Zoogi Fungus, pet balls, bracelet of
binding , picnic basket
set %id_archery_ammo RWF_LNK_ ; Arrows/bolts
set %id_hides DEG_EEG_
set %id_scales STO_
set %id_feathers VLK_
set %id_bones OZF_
set %id_meat VRD_PUD_ ; ribs, birds
set %id_ML_items
SY_QY_PY_JWS_DWS_GWS_FWS_EWS_LWS_RWS_SWS_QWS_XOF_CGM_FIL_XVK_QCK_OWK_ ; ML ITEMS
set %c_1 NXL_QXL_PXL_AYL_ZXL_CYL_BYL_WXL_ ; 1st circle magery
set %c_2 VXL_YXL_XXL_IYL_HYL_KYL_JYL_EYL_ ; 2nd circle magery
set %c_3 DYL_GYL_FYL_STL_RTL_UTL_TTL_OTL_ ; 3rd circle magery
set %c_4 NTL_QTL_PTL_AUL_ZTL_CUL_BUL_WTL_ ; 4th circle magery
set %c_5 VTL_YTL_XTL_IUL_HUL_KUL_JUL_EUL_ ; 5th circle magery
set %c_6 DUL_GUL_FUL_QUL_PUL_SUL_RUL_MUL_ ; 6th circle magery
set %c_7 LUL_OUL_NUL_YUL_XUL_AVL_ZUL_UUL_ ; 7th circle magery
set %c_8 TUL_WUL_VUL_GVL_FVL_IVL_HVL_CVL_ ; 8th circle magery
set %id_magery_scrolls %c_1 , %c_2 , %c_3 , %c_4 , %c_5 , %c_6 , %c_7 , %c_8
set %id_necro_scrolls
KYM_QYM_WYM_SYM_PYM_NYM_TYM_HYM_VYM_UYM_RYM_MYM_LYM_JYM_IYM_OYM_CZM_
set %id_spellweaving_scrolls
OCR_JCR_DCR_ZBR_FCR_LCR_GCR_ICR_NCR_UCR_KCR_CCR_HCR_ACR_BCR_ ; still need summon
fiend
set %id_colored_nets UDF_ ; gosub GrabOddColoredItem %body %container UDF 0 ;
Colored Special fishing nets
set %id_MIB HTD_ ; gosub GrabItemAndName %body %container HTD message ; MIBs
gosub DrawUserDefinedNames
gosub DrawComboBox EUOComboUser START_USER_SEARCH END_USER_SEARCH 68 320 173
if %global_destination <> #BACKPACKID
{
menu Font Size 8
menu Font BGColor BtnFace
menu delete EUOButtonLootPack
menu Button EUOButtonLootPack 568 148 67 25 UnSet Loot
}
finditem %global_destination *
if #FINDKIND = -1
{
display ok I cannot find your loot pack, you will need to reset it.
set %global_destination #BACKPACKID
menu Font Size 8
menu Font BGColor BtnFace
menu delete EUOButtonLootPack
menu Button EUOButtonLootPack 568 148 67 25 Set Loot
}
gosub ChangeRightPane ACTIVE FORCE
set !i 1
set !copy %name ; working copy
SetupLoop1:
str pos !copy $
if #STRRES <> 0
{
set !len #STRRES - 1
str left !copy !len
set %name . !i #STRRES ; create %name(!i)
set % . #STRRES !i ; this is the name(!i) index number
set !len !len + 1
str del !copy 1 !len
set !copy #STRRES
set %log . !i #TRUE
set !i !i + 1
goto SetupLoop1
}
set #RESULT !i - 1
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub GetIndex
set #RESULT % . %1
return #RESULT
;-------------------------------------------------------------------------------
sub LoadSetup
set #LPC 1000
menu set EUOStatus Loading setup...
menu get EUOEditSetupFile
gosub TM_FileSystem_LoadFile #MENURES
namespace push
namespace local RULES
if !rule_index >= 0
{
set !temp !rule_index - 1
for !i 0 !temp
{
set !ruleitemindex RULEITEM , !i
gosub AddSpace ! . !ruleitemindex
set !temprule #RESULT
set !rulelogicindex RULELOGIC , !i
set !ruleintensityindex RULEINTENSITY , !i
set !ruletextindex RULETEXT , !i
gosub GetButtonState ! . !rulelogicindex
set ! . !rulelogicindex #RESULT
if #RESULT = NA || ! . !ruleintensityindex = NA
set !text !temprule
else
set !text !temprule , #SPC , #RESULT , #SPC , ! . !ruleintensityindex
set ! . !ruletextindex !text
}
}
namespace pop
gosub DrawRuleChainStrings
gosub UpdateEvaluationInfo
namespace push
namespace local RULES
gosub TM_FileSystem_SaveVariable local RULES save_handle rule_index
if !rule_index >= 0
{
set !temp !rule_index - 1
for !i 0 !temp
{
set !ruleitemindex RULEITEM , !i
set !rulelogicindex RULELOGIC , !i
set !ruleintensityindex RULEINTENSITY , !i
gosub ConvertLogic ! . !rulelogicindex
set !temp ! . !rulelogicindex
set ! . !rulelogicindex #RESULT
gosub TM_FileSystem_SaveVariable local RULES save_handle !ruleitemindex
gosub TM_FileSystem_SaveVariable local RULES save_handle !rulelogicindex
gosub TM_FileSystem_SaveVariable local RULES save_handle !ruleintensityindex
set ! . !rulelogicindex !temp
}
}
gosub TM_FileSystem_SaveVariable local RULES save_handle active_rule_index
if !active_rule_index >= 0
{
set !temp !active_rule_index - 1
for !i 0 !temp
{
set !temp ACTIVERULE , !i
gosub TM_FileSystem_SaveVariable local RULES save_handle !temp
}
}
gosub SaveRuleChains
if RULECHAIN in !ruleitem
{
set ! . !ruleitem !rule_index
set % . !ruleitem #TRUE ; always assumes will be logged.
}
if %left_pane = RULES
menu List add EUOListLeftPane !text
if !type = OMIT
set !output OMIT: , #SPC , ! . !text
else
set !output ! . !text
AddNewMultiActiveRule_skip1:
set #LPC !temp_LPC
set #RESULT !listbox_text_ptr ; !rule_idx
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub DeleteMultiActiveRule
namespace push
namespace local RULES
set !pane %1
set !temp_LPC #LPC
set #LPC 10000
menu get !pane
if #MENURES = 0
goto DeleteMultiActiveRule_skip1
set !start #MENURES - 1
set !final !start
if OMIT in !listbox_text . !start
{
set !type OMIT
}
else
{
set !type ACTIVE
set !start !start - !omit_rule_index
}
set !tempindex !type , _rule_index
set !rule_idx ! . !tempindex
if !rule_idx = N/A || !rule_idx = 0
goto DeleteMultiActiveRule_skip1
for !i !start !rule_idx
{
set !deleted !type , RULE , !i
set !index !i + 1
set !temp !type , RULE , !index
set ! . !deleted ! . !temp
set ! . !temp N/A
}
set !rule_idx !rule_idx - 1
gosub ReDrawActiveRules
menu list select !pane !final
set ! . !tempindex !rule_idx
gosub BuildAntiRuleList
DeleteMultiActiveRule_skip1:
set #LPC !temp_LPC
namespace pop
return
;-------------------------------------------------------------------------------
sub ClearActiveRulesList
namespace push
namespace local RULES
set !temp_LPC #LPC
set #LPC 10000
set !listbox_text_ptr 0
for !i 0 !active_rule_index
{
set !temp ACTIVERULE , !i
set ! . !temp N/A
}
for !i 0 !omit_rule_index
{
set !temp OMITRULE , !i
set ! . !temp N/A
}
set !active_rule_index N/A
set !omit_rule_index N/A
gosub ReDrawActiveRules
ClearActiveRulesList_skip:
set #LPC !temp_LPC
namespace pop
return
;-------------------------------------------------------------------------------
;----------------- Data Structure - User Defined Names -----------------------
;-------------------------------------------------------------------------------
sub AddUserDefinedName
namespace push
namespace local USERNAMES
if !user_name_count = N/A
set !user_name_count 0
menu get EUOEditUserDefinedText
gosub ConvertStringToVariable #MENURES
set !name #RESULT
set !i 0
while !i < !user_name_count
{
if !user_name . !i = !name
{
display ok You already have this search specified.
namespace pop
return
}
set !i !i + 1
}
set !user_name . !user_name_count !name
set !user_name_count !user_name_count + 1
set #RESULT !user_name_count
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub DeleteUserDefinedName
namespace push
namespace local USERNAMES
if !user_name_count = N/A
{
namespace pop
return
}
menu get EUOComboUser
if #MENURES > 0
{
set !temp_index #MENURES - 1
for !i !temp_index !user_name_count
{
set !temp_next !i + 1
set !user_name . !i !user_name . !temp_next
}
}
if !user_name_count > 0
set !user_name_count !user_name_count - 1
namespace pop
return
;-------------------------------------------------------------------------------
; user names stored in !user_name
sub DrawUserDefinedNames
namespace push
namespace local USERNAMES
gosub GetIndex START_USER_SEARCH
set !start_index #RESULT
set !start_index !start_index + 1 ; look at next index
if !user_name0 = N/A
{
set %name . !start_index No , #SPC , selection
set % . !name !start_index
set !start_index !start_index + 1
goto DrawUserDefinedNames_skip1
}
set !i 0
while !user_name . !i <> N/A
{
set %name . !start_index !user_name . !i
set !name !user_name . !i
set % . !name !start_index
set !start_index !start_index + 1
set !i !i + 1
}
DrawUserDefinedNames_skip1:
set %name . !start_index END_USER_SEARCH
set % . END_USER_SEARCH !start_index
namespace pop
return
;-------------------------------------------------------------------------------
;------------------------- [History] List Management --------------------------
;-------------------------------------------------------------------------------
sub AddItemsToList
namespace push
namespace local %1
set !temp_LPC #LPC
set #LPC 10000
set !item %2
if !history_index = N/A
{
set !history_index -1
set !history_index_max -1
}
AddItemsToList_loop1:
str pos !item _
if #STRRES > 0
{
set !logit #FALSE
set !len #STRRES - 1
str left !item !len
set !history_index_max !history_index_max + 1
event property #STRRES
namespace copy match , #STRRES from local ITEMINFO
set !rule !match . #STRRES
if RULECHAIN in !temprule
{
set !logit % . !temprule
}
else
{
set !temprule % . !temprule
set !logit %log . !temprule
}
if !logit = #TRUE
set !historyid . !history_index_max #STRRES
set !len !len + 1
str del !item 1 !len
set !item #STRRES
if !logit = #TRUE
set !history . !history_index_max #PROPERTY , *** , #SPC , !rule , #SPC ,
*** , $
else
set !history_index_max !history_index_max - 1
goto AddItemsToList_loop1
}
set !history_index !history_index_max
set #LPC !temp_LPC
namespace pop
return
;-------------------------------------------------------------------------------
sub DropIndexedItem
namespace push
namespace local %1
set !temp !historyid . !history_index
if !pane = ACTIVE
{
gosub DrawActivePane RIGHT
set %right_pane ACTIVE
gosub ReDrawActiveRules
}
if !pane = HISTORY
{
gosub DrawHistoryPane
set %right_pane HISTORY
}
if !pane = PREVIEW
{
gosub DrawPreviewPane
set %right_pane PREVIEW
}
if !pane = STATS
{
gosub DrawStatsPane
set %right_pane STATS
}
}
set #LPC !temp_lpc
namespace pop
return
;-------------------------------------------------------------------------------
sub DrawActivePane
namespace push
namespace local ACTIVE
set !pane %1
if !pane = LEFT
{
menu delete EUOButtonLeftActive
menu Font Name Arial
menu Font Size 7
menu Button EUOButtonDelete 4 220 35 21 Delete
menu Button EUOButtonClear 44 220 35 21 Clear
menu Font BGColor White
menu Button EUOButtonLeftActive 52 32 43 17 Active
menu Font Size 8
menu Font Style b
menu Font BGColor BtnFace
if %left_window_zoom = #FALSE
menu Text EUOLabelLeftTitle 172 32 [Active Rules]
else
menu Text EUOLabelLeftTitle 445 32 [Active Rules]
menu Font Style
}
if !pane = RIGHT
{
menu delete EUOButtonRightActive
menu Font Name Arial
menu Font Size 7
menu Button EUOButtonActiveDelete 284 220 35 21 Delete
menu Button EUOButtonActiveClear 324 220 35 21 Clear
menu Font BGColor White
menu Button EUOButtonRightActive 328 32 43 17 Active
menu Font Size 8
menu Font Style b
menu Font BGColor BtnFace
menu delete EUOLabelRightTitle
menu Text EUOLabelRightTitle 468 32 [Active Rules]
menu Font Style
}
menu Font Size %pane_font_size
namespace pop
return
;-------------------------------------------------------------------------------
sub ReDrawActiveRules
namespace push
namespace local RULES
set !temp_LPC #LPC
set #LPC 10000
menu Font Size %pane_font_size
set !listbox_text_ptr 0
if %left_pane = ACTIVE
{
menu Font Name Arial
menu Font Style
menu Font BGColor Window
menu delete EUOListLeftPane
if %left_window_zoom = #FALSE
menu List Create EUOListLeftPane 4 48 269 169
else
menu List Create EUOListLeftPane 4 48 545 169
}
if %right_pane = ACTIVE && %left_window_zoom = #FALSE
{
menu Font Name Arial
menu Font Style
menu Font BGColor Window
menu delete EUOListRightPane
menu List Create EUOListRightPane 280 48 269 169
}
set !i 0
while !i >= 0 && !i < !omit_rule_index
{
set !temp OMITRULE , !i
set !rule ! . !temp
if !rule <> N/A
{
set !text RULETEXT , !rule
set !output OMIT: , #SPC , ! . !text
if %left_pane = ACTIVE
menu list add EUOListLeftPane !output
if %right_pane = ACTIVE
menu list add EUOListRightPane !output
set !listbox_text . !listbox_text_ptr !output
set !listbox_text_ptr !listbox_text_ptr + 1
}
set !i !i + 1
}
set !i 0
while !i >= 0 && !i < !active_rule_index
{
set !temp ACTIVERULE , !i
set !rule ! . !temp
if !rule <> N/A
{
set !text RULETEXT , !rule
set !output ! . !text
if %left_pane = ACTIVE
menu list add EUOListLeftPane !output
if %right_pane = ACTIVE
menu list add EUOListRightPane !output
set !listbox_text . !listbox_text_ptr !output
set !listbox_text_ptr !listbox_text_ptr + 1
}
set !i !i + 1
}
if %left_pane = ACTIVE
menu list Select EUOListLeftPane %leftpane_activepos
if %right_pane = ACTIVE
menu list Select EUOListRightPane %rightpane_activepos
if !pane = LEFT
{
menu delete EUOLabelLeftTitle
menu delete EUOButtonLeftActive
menu Font Name Arial
menu Font Size 7
menu Font BGColor BtnFace
menu Button EUOButtonLeftActive 52 32 43 17 Active
menu delete EUOButtonDelete
menu delete EUOButtonClear
}
if !pane = RIGHT
{
menu delete EUOLabelRightTitle
menu delete EUOButtonRightActive
menu Font Name Arial
menu Font Size 7
menu Font BGColor BtnFace
menu Button EUOButtonRightActive 328 32 43 17 Active
menu delete EUOButtonActiveDelete
menu delete EUOButtonActiveClear
}
menu Font Size %pane_font_size
namespace pop
return
;-------------------------------------------------------------------------------
sub DrawStatsPane
namespace push
namespace local STATS
menu delete EUOButtonStats
menu delete EUOLabelRightTitle
menu Font Size 7
menu Font BGColor White
menu Button EUOButtonStats 372 32 43 17 Stats
menu delete EUOListRightPane
menu Font BGColor Window
menu List Create EUOListRightPane 280 48 269 169
menu Font Size 8
menu Font Style b
menu Font BGColor BtnFace
menu Text EUOLabelRightTitle 468 32 [Stats]
menu Font Size %pane_font_size
menu Font BGColor White
menu Font Style
menu delete EUOListRightPane
menu List Create EUOListRightPane 280 48 269 169
set %time #SCNT - %program_start
gosub ConvertTimeHourMinSec %time
set %time Time , #SPC , Online: , #SPC , #RESULT
menu List Add EUOListRightPane %time
set %goldperhour ( %gold_count * 3600 ) / ( #SCNT - %program_start )
set %text Gold/hr: , #SPC , %goldperhour
menu List Add EUOListRightPane %text
set %text Average , #SPC , time , #SPC , between , #SPC , loots: , #SPC ,
%average_loot_time , #SPC , seconds
menu List Add EUOListRightPane %text
namespace push
namespace local RULES
if !rule_index = N/A
set %text 0
else
set %text !rule_index
set %text Rule , #SPC , count: , #SPC , %text
menu List Add EUOListRightPane %text
if !active_rule_index = N/A
set %text 0
else
set %text !active_rule_index
set %text Active , #SPC , rules: , #SPC , %text
menu List Add EUOListRightPane %text
if %version_type = FULL
{
if !rulechain_count = N/A
set %text 0
else
set %text !rulechain_count + 1
set %text Complex , #SPC , rules: , #SPC , %text
menu List Add EUOListRightPane %text
if !omit_rule_index = N/A
set %text 0
else
set %text !omit_rule_index
set %text Omit , #SPC , rules: , #SPC , %text
menu List Add EUOListRightPane %text
}
namespace pop
namespace pop
namespace copy container_timer from local SCFN
namespace copy rule_counter from local SCFN
set %text ( ( !container_timer * 1000 ) / !rule_counter )
set %text2 %text / 10
set %text %text % 10
set %text %text2 , #DOT , %text
set %time !container_timer / 10
set %time2 !container_timer % 10
set %time %time , #DOT , %time2
set %time3 %avg_RPC / %avg_window
set %text RET: , #SPC , %text , ms , #SPC , ( , !rule_counter , #SPC , RPC. ,
#SPC , in , #SPC , %time , sec.) , #SPC , AvgRPC: , #SPC , %time3
menu List Add EUOListRightPane %text
set %avg %avg_RPS / %avg_window
set %text %rulespersec , #SPC , RPS , #SPC , ( , %low_count , - , %high_count
, ) , #SPC , Avg: , #SPC , %avg
menu List Add EUOListRightPane %text
return
;-------------------------------------------------------------------------------
; %1 = input - Time to convert
; #RESULT - Time converted to #:##:## format
sub ConvertTimeHourMinSec
namespace push
namespace local ctime
set !hourpart %1 / 3600
set !secpart ( %1 % 3600 ) % 60
set !minpart ( ( %1 % 3600 ) / 60 )
if !hourpart >= 10
set #RESULT !hourpart , :
else
set #RESULT 0 , !hourpart , :
if !minpart < 10
set #RESULT #RESULT , 0
set #RESULT #RESULT , !minpart , :
if !secpart < 10
set #RESULT #RESULT , 0
set #RESULT #RESULT , !secpart
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub ReleaseStatsPane
namespace push
namespace local STATS
menu delete EUOLabelRightTitle
menu delete EUOButtonStats
menu Font Size 7
menu Font BGColor BtnFace
menu Button EUOButtonStats 372 32 43 17 Stats
namespace pop
return
;-------------------------------------------------------------------------------
sub DrawRulesPane
namespace push
namespace local RULES
set !temp_LPC #LPC
set #LPC 10000
menu Font Name Arial
menu Font BGColor BtnFace
menu Font Size 8
menu Font Style b
if %left_window_zoom = #FALSE
menu Text EUOLabelLeftTitle 172 32 [Rule Entry]
else
menu Text EUOLabelLeftTitle 445 32 [Rule Entry]
menu Font Style
menu Font Size 7
menu delete EUOButtonLeftRules
menu Button EUOButtonDelete 4 220 35 21 Delete
menu Button EUOButtonClear 44 220 35 21 Clear
menu Button EUOButtonAddActiveRule 192 220 31 21 Add
menu Check EUOCheckBoxLogItem 116 32 49 17 #false Log?
menu set EUOCheckBoxLogItem %log_check_state
if %version_type = FULL
{
menu Button EUOButtonNewRule 228 220 31 21 Rule
menu Button EUOButtonOmit 156 220 31 21 Omit
}
menu Font BGColor White
menu Button EUOButtonLeftRules 8 32 43 17 Rules
menu Font BGColor Window
menu Font Size %pane_font_size
set %left_pane RULES
if !rule_index <> N/A
{
menu delete EUOListLeftPane
if %left_window_zoom = #FALSE
menu List Create EUOListLeftPane 4 48 269 169
else
menu List Create EUOListLeftPane 4 48 545 169
set !temp !rule_index - 1
for !i 0 !temp
{
set !ruletextindex RULETEXT , !i
menu List add EUOListLeftPane ! . !ruletextindex
}
}
else
{
menu delete EUOListLeftPane
if %left_window_zoom = #FALSE
menu List Create EUOListLeftPane 4 48 269 169
else
menu List Create EUOListLeftPane 4 48 545 169
namespace clear
}
menu list Select EUOListLeftPane %leftpane_rulespos
set #LPC !temp_LPC
namespace pop
return
;-------------------------------------------------------------------------------
sub ReleaseRulesPane
namespace push
namespace local HISTORY
menu delete EUOButtonLeftRules
menu Font Name Arial
menu Font Size 7
menu Font BGColor BtnFace
menu Button EUOButtonLeftRules 8 32 43 17 Rules
menu delete EUOCheckBoxLogItem
menu delete EUOButtonOmit
menu delete EUOButtonNewRule
menu delete EUOLabelLeftTitle ; 204 32 (Rule Entry)
menu delete EUOButtonDelete
menu delete EUOButtonClear
menu delete EUOButtonAddActiveRule
namespace pop
return
;-------------------------------------------------------------------------------
sub GotoNextListItem
namespace push
namespace local %1
if %1 = HISTORY
set !function DrawHistoryPane
if %1 = PREVIEW
set !function DrawPreviewPane
if !history_index = N/A
{
namespace pop
return
}
set !history_index !history_index + 1
if !history_index > !history_index_max
set !history_index 0
if %right_pane = %1
gosub !function
namespace pop
return
;-------------------------------------------------------------------------------
sub GotoPrevListItem
namespace push
namespace local %1
if %1 = HISTORY
set !function DrawHistoryPane
if %1 = PREVIEW
set !function DrawPreviewPane
if !history_index = N/A
{
namespace pop
return
}
set !history_index !history_index - 1
if !history_index < 0
set !history_index !history_index_max
if %right_pane = %1
gosub !function
namespace pop
return
;-------------------------------------------------------------------------------
sub ReleaseHistoryPane
namespace push
namespace local HISTORY
menu delete EUOButtonLeftArrow
menu delete EUOButtonRightArrow
menu delete EUOButtonDrop
menu delete EUOLabelHistoryStatus
menu delete EUOLabelRightTitle
menu delete EUOButtonHistory
menu Font BGColor BtnFace
menu Font Name Arial
menu Font Size 7
menu Button EUOButtonHistory 284 32 43 17 History
namespace pop
return
;-------------------------------------------------------------------------------
sub DrawHistoryPane
namespace push
namespace local HISTORY
set !temp_LPC #LPC
set #LPC 10000
menu Font Name Arial
menu Font Size 8
menu Font Style b
menu Font BGColor BtnFace
menu Text EUOLabelRightTitle 468 32 [Loot History]
menu Font Style
TM_ReadVariables_skip1:
return
;-------------------------------------------------------------------------------
; Passes %fileout(n) as local, #RESULT
sub ReadItem
str pos !fileout
if #STRRES = 0
{
set !fileoutindex !fileoutindex + 1
if !fileout . !fileoutindex <> N/A
{
set !fileout !fileout , !fileout . !fileoutindex
str pos !fileout
}
else
{
return #TRUE
}
}
set !len #STRRES - 1
str left !fileout !len
set ! . %1 #STRRES
set !len !len + 1
str del !fileout 1 !len
set !fileout #STRRES
return #FALSE
;-------------------------------------------------------------------------------
; %2 - file name
sub TM_FileSystem_LoadFile
namespace push
namespace local TM_FileSystem
set !lpc #LPC
set #LPC 10000
set !filename %1
for !i 0 1000
set !fileout . !i N/A
call !filename
if !fileout0 = N/A
{
set #LPC !lpc
namespace pop
set !TM_Function_found #TRUE
return #TRUE ; error
}
set !index 0
gosub TM_ReadVariables ; assumes namespace TM_FileSystem
;-------------------------------------------------------------------------------
;--------- EasyUO Menu Designer Code Begin ---------
sub showEUOMenu1
menu Clear
menu Window Title %title
menu Window Color BtnFace
menu Window Size 652 421
menu Font Transparent #true
menu Font Align Right
menu Font Name Arial
menu Font Size 7
menu Font Style
menu Font Color WindowText
menu Font Transparent #false
menu Font Align Left
menu Text EUOLabel1 4 252 Item Attribute
menu Text EUOLabel2 4 276 Skill Intensity:
menu Text EUOLabel17 24 300 Talisman:
menu Text EUOLabel14 4 324 User Defined:
menu Text EUOLabel3 360 252 Specific Items:
menu Text EUOLabel12 352 276 Slayer Weapons:
menu Text EUOLabel9 364 300 Text;Text;Text
menu Text EUOLabel8 380 324 #FINDIDs:
menu Text EUOLabel4 380 348 Setup File:
menu Text EUOLabelHistoryStatus 460 224 0 of 0
menu Text EUOLabelItemsLooted 472 0 Items Looted:
menu Font Name MS Arial
menu Font Style b
menu Text EUOLabelLeftTitle 182 32 (Rule Entry)
menu Text EUOLabelRightTitle 469 32 (Loot History)
menu Text EUOLabel16 4 8 Status:
menu Font Size 9
menu Text EUOLabel5 460 376 Alt +
menu Text EUOLabel6 460 400 Alt +
menu Text EUOLabel10 524 376 Targeted Corpse/Box
menu Text EUOLabel11 524 396 Surrounding Corpses
menu Font Name Arial
menu Font Size 7
menu Font Style
menu Text EUOLabel15 12 348 User Entry:
menu Text EUOLabelGold 472 12 Gold:
menu Font BGColor Window
menu List Create EUOListLeftPane 4 48 269 169
menu List Create EUOListRightPane 280 48 269 169
menu Combo Create EUOComboItemAttrib 68 248 173
menu Combo Create EUOComboSkillIntensity 68 272 173
menu Combo Create EUOComboTalisman 68 296 173
menu Combo Create EUOComboUser 68 320 173
menu Combo Create EUOComboSpecificItems 428 248 173
menu Combo Create EUOComboSlayer 428 272 173
menu Edit EUOEditItemAttrib 276 248 29 10
menu Edit EUOEditSkillIntensity 276 272 29 10
menu Edit EUOEditTalisman 276 296 29 10
menu Edit EUOEditTextSearch 428 296 173
menu Edit EUOEditFindid 428 320 173
menu Edit EUOEditUserDefinedIntensity 276 320 29 10
menu Edit EUOEditUserDefinedText 68 344 173 Enter , #spc , user , #spc ,
defined , #spc , text , #spc , here.
menu Edit EUOEditSetupFile 428 344 173 c:\newclawsetup.txt
menu Edit EUOEditKey1 492 376 25 F1
menu Edit EUOEditKey2 492 396 25 F2
menu Font BGColor BtnFace
menu Check EUOCheckBoxGround 8 368 101 17 #false Loot Ground Items
menu Check EUOCheckBoxBOS 8 384 149 17 #true Send Gold via Bag of Sending
menu Check EUOCheckBoxAutomatic 8 400 141 17 #true Automatic Corpse Looting
menu Check EUOCheckBoxCarve 160 368 85 17 #false Carve Corpse
menu Check EUOCheckBoxLootAll 160 384 77 17 #false Loot all
menu Font Name MS Sans Serif
menu Font Size 9
menu Font BGColor ScrollBar
menu Edit EUOStatus 48 4 421 Status
menu Font Size 8
menu Font BGColor BtnFace
menu Button EUOButtonItemAttribLogic 244 248 31 21 >=
menu Button EUOButtonSkillIntensityLogic 244 272 31 21 >=
menu Button EUOButtonTalismanLogic 244 296 31 21 >=
menu Button EUOButtonUserLogic 244 320 31 21 >=
menu Button EUOButtonLeftArrow 300 220 27 21 <<
menu Button EUOButtonRightArrow 512 220 27 21 >>
menu Font Name Arial
menu Font Size 7
menu Button EUOButtonItemAttribOK 308 248 35 21 OK
menu Button EUOButtonSkillIntensityOK 308 272 35 21 OK
menu Button EUOButtonDrop 400 220 39 21 Drop
menu Button EUOButtonDelete 4 220 35 21 Delete
menu Button EUOButtonClear 44 220 35 21 Clear
menu Button EUOButtonSpecificItemOK 608 248 39 21 OK
menu Button EUOButtonSlayerOK 608 272 39 21 OK
menu Button EUOButtonTalismanOK 308 296 35 21 OK
menu Button EUOButtonUserOK 308 320 35 21 OK
menu Button EUOButtonAND 84 220 31 21 AND
menu Button EUOButtonOR 120 220 31 21 OR
menu Button EUOButtonNOT 156 220 31 21 NOT
menu Button EUOButtonRuleOK 192 220 31 21 OK
menu Button EUOButtonActiveDelete 284 220 35 21 Delete
menu Button EUOButtonActiveClear 324 220 35 21 Clear
menu Button EUOButtonRightActive 328 32 43 17 Active
menu Button EUOButtonPreview 416 32 43 17 Preview
menu Button EUOButtonKeep 400 220 39 21 Keep
menu Button EUOButtonPreviewCLR 364 220 31 21 CLR
menu Font BGColor White
menu Button EUOButtonHistory 284 32 43 17 History
menu Font Size 8
menu Font BGColor BtnFace
menu Button EUOButtonLoadSetup 568 52 67 25 Load Setup
menu Button EUOButtonSaveSetup 568 84 67 25 Save Setup
menu Button EUOButtonPause 568 116 67 25 Pause
menu Button EUOButtonLootPack 568 148 67 25 Set Loot
menu Font Size 7
menu Button EUOButtonUserEntryOK 248 344 27 17 OK
menu Button EUOButtonUserEntryDEL 276 344 27 17 DEL
menu Check EUOCheckBoxHideBodies 160 400 77 17 #false Hide Bodies
menu Button EUOButtonMinMax 632 4 19 17 M
menu Button EUOButtonNewRule 228 220 31 21 Rule
menu Button EUOButtonLeftActive 52 32 43 17 Active
menu Font BGColor White
menu Button EUOButtonLeftRules 8 32 43 17 Rules
menu Font BGColor BtnFace
menu Button EUOButtonAddActiveRule 192 220 31 21 Add
menu Button EUOButtonLeftMinMax 252 32 19 17 >>
menu Button EUOButtonStats 372 32 43 17 Stats
menu Check EUOCheckPreview 248 368 61 17 #false Preview
menu Check EUOCheckTurbo 248 384 49 17 #false Turbo
menu Button EUOButtonSmaller 552 32 15 13 <
menu Button EUOButtonLarger 568 32 15 13 >
menu Button EUOButtonOmit 156 220 31 21 Omit
menu Check EUOCheckBoxSound 600 28 49 17 #true Sound
menu Check EUOCheckBoxLogItem 116 32 49 17 #false Log?
menu Check EUOCheckBoxTextLog 604 296 49 17 #false Log?
menu Check EUOCheckBoxFINDIDLog 604 320 49 17 #false Log?
menu Button EUOButtonLittlePause 612 4 19 17 P
menu Show 421 270
return
;--------- EasyUO Menu Designer Code End ---------
;-------------------------------------------------------------------------------
;------------------------------ Loot Handling --------------------------------
;-------------------------------------------------------------------------------
sub OpenContainer
namespace push
namespace local OC
set !body %1
set !containers #CHARID , _ , %global_destination , _ , #BACKPACKID , _ ,
N/A_HS_IS_AV_XU
set !target_size %1
set !omit %2
set !timeout #SCNT + 5
set !valid #FALSE
repeat
set !sample_contid #CONTID
set !sample_contsize #CONTSIZE
if _ in !sample_contsize
{
str pos !sample_contsize _ 1
str del !sample_contsize 1 #STRRES
if #STRRES > !target_size && !sample_contid notin !omit
set !valid #TRUE
}
until #SCNT > !timeout || !valid = #TRUE
if !valid = #TRUE
set #RESULT !sample_contid
else
set #RESULT #FALSE
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub ProceedAndLoot
set %source %1
menu set EUOStatus Evaluating container...
gosub ScanContainerForMatch %source PACK ; Scan container and process
rules/rule chains
namespace copy loot_list from local SCFN
if !loot_list <> #TRUE
{
menu get EUOCheckPreview
if #MENURES = #TRUE
{
gosub AddItemsToList PREVIEW !loot_list
if %right_pane = PREVIEW
gosub DrawPreviewPane
}
else
{
gosub AddItemsToList HISTORY !loot_list
if %right_pane = HISTORY
gosub DrawHistoryPane
menu set EUOStatus Dragging rule items...
gosub TM_LootList !loot_list %source %global_destination
}
}
menu get EUOCheckBoxCarve
if #MENURES = #TRUE
{
wait 10
finditem %scissors C_ , #BACKPACKID
if #FINDKIND <> -1
{
set #LOBJECTID #FINDID
finditem %id_hides C_ , #BACKPACKID
if #FINDKIND <> -1
{
set #LTARGETID #FINDID
set #LTARGETKIND 1
event macro 17
target 5s
event macro 22
wait 20
}
}
}
return
;-------------------------------------------------------------------------------
sub TM_LootList
namespace push
namespace local LL
set !list %1
set !source %2
set !dest %3
LootList_loop1:
if !source = GROUND
finditem !list G_2
else
finditem !list C_ , !source
if #FINDKIND <> -1
{
set !fail #FALSE
set !findid #FINDID
set !findtype #FINDTYPE
set %items_looted %items_looted + 1
gosub TM_DragItem #FINDID #FINDTYPE #FINDSTACK !source !dest
if !findtype notin %BOS_ITEMS && !findtype notin %id_hides
ignoreitem !findid %ignoreitem_ptr
namespace copy fail from local DI
if !fail = #TRUE
{
namespace pop
return
}
goto LootList_loop1
}
namespace pop
return
;-------------------------------------------------------------------------------
sub TM_FastDragItem
namespace push
namespace local FDI
set !item %1
set #RESULT #FALSE
finditem !item *
if #FINDKIND <> -1
{
if %use_exevents = #TRUE
{
exevent drag #FINDID #FINDSTACK
wait %exevent_drag
exevent dropc %global_destination
wait %exevent_drop
set #RESULT #TRUE
}
else
{
if #CONTNAME <> paperdoll_gump
{
event macro 8 1
set !drag_cnt #SCNT + 4
repeat
until #CONTNAME = paperdoll_gump || #SCNT > !drag_cnt
}
set !clickx #CONTPOSX + 140
set !clicky #CONTPOSY + 220
wait %exevent_drop
event drag #FINDID
set !timeout #SCNT + 5
repeat
until #CONTNAME = drag_gump || #CONTNAME = stack_gump || #SCNT > !timeout
if #CONTNAME = stack_gump
msg $
click !clickx !clicky p
set !drag_cnt #SCNT + 4
repeat
until #CONTNAME <> drag_gump || #SCNT > !drag_cnt
}
}
namespace pop
return
;-------------------------------------------------------------------------------
; uses %exevent_drag , %exevent_drop
sub TM_DragItem
namespace push
namespace local DI
set !drag_item %1
set !drag_type %2
set !drag_stack %3
set !drag_source %4
set !drop_location %5
set !drag_time #SCNT + 400
set !drag_attempts 2
set !fail #FALSE
wait 10
repeat
namespace copy TM_HEAL from global TM_healer
if !TM_HEAL = #TRUE
wait 20
until !TM_HEAL <> #TRUE
if %use_exevents = #TRUE
{
exevent drag !drag_item !drag_stack
}
else
{
wait %exevent_drag
if #CONTNAME <> paperdoll_gump
{
event macro 8 1
set !drag_cnt #SCNT + 4
repeat
until #CONTNAME = paperdoll_gump || #SCNT > !drag_cnt
}
set !clickx #CONTPOSX + 140
set !clicky #CONTPOSY + 220
event drag !drag_item
}
wait %exevent_drag
gosub TM_AdvJournalScan DRAG VALID you_must_wait
if #RESULT = #TRUE
{
gosub TM_AdvJournalSync DRAG
wait %exevent_drag
goto DragItem_loop1
}
gosub TM_AdvJournalScan DRAG VALID you_did_not_earn that_is_too_far
that_is_out_of_sight you_can_not_pick
if #RESULT = #TRUE
{
gosub TM_AdvJournalSync DRAG
set #RESULT #FALSE
goto DragItem_skip1
}
if %use_exevents = #FALSE
{
gosub GumpWait drag_gump stack_gump
if #CONTNAME = stack_gump
{
msg !drag_stack , $
gosub GumpWait drag_gump drag_gump
}
click !clickx !clicky p
set !drag_cnt #SCNT + 4
repeat
until #CONTNAME <> drag_gump || #SCNT > !drag_cnt
}
else
{
if !drag_type in POF_ZLF_DEG_EEG ; gold, bandages, hides
exevent dropc #BACKPACKID
else
exevent dropc !drop_location
}
wait %exevent_drop
if !drag_source = GROUND
finditem !drag_item G_2
else
finditem !drag_item C_ , !drag_source
if #FINDKIND <> -1
{
set !drag_attempts !drag_attempts - 1
if !drag_attempts <= 0
{
set #RESULT #TRUE
goto DragItem_skip1
}
goto DragItem_loop1
}
set %total_items_looted %total_items_looted + 1
set #RESULT #TRUE
DragItem_skip1:
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub CheckForBagOfSending
if ( ( #WEIGHT > ( #MAXWEIGHT - 10 ) ) || ( #WEIGHT > %overweight_config ) )
{
menu get EUOCheckBoxBOS ; should I send the gold via bag of sending?
if #MENURES = #TRUE
{
if %weightwarn = #FALSE
{
gosub SendItems %BOS_ITEMS
}
}
else
{
if %weightwarn = #FALSE
{
display ok You are nearly overweight
set %weightwarn #TRUE
}
}
}
else
{
set %weightwarn #FALSE
}
return
;-------------------------------------------------------------------------------
sub SendItems
namespace push
namespace local SI
set !bos_items %1
set !temp_LOBJECTID #LOBJECTID
set !temp_LTARGETID #LTARGETID
set !temp_LTARGETKIND #LTARGETKIND
wait 20
repeat
namespace copy TM_HEAL from global TM_healer
if !TM_HEAL = #TRUE
wait 20
until !TM_HEAL <> #TRUE
SendItems_loop1:
finditem CKF C_ , #BACKPACKID
if #FINDKIND <> -1
{
event property #FINDID
if sending notin #PROPERTY
{
ignoreitem #FINDID BOS
goto SendItems_loop1
}
set !bagofsending #FINDID
SendItems_loop2:
finditem !bos_items C_ , #BACKPACKID
if #FINDKIND <> -1
{
set !item #FINDID
event property !bagofsending
str len #PROPERTY
set #STRRES #STRRES - 1
str left #PROPERTY #STRRES
gosub GetIntensityRight #STRRES
namespace copy intensity from local GIR
if !intensity = 0 ; as in zero charges
{
ignoreitem !bagofsending BOS
goto SendItems_loop1
}
exevent popup !bagofsending
gosub GumpWait normal_gump normal_gump
set !clickx #CONTPOSX + 30
set !clicky #CONTPOSY + 28
click !clickx !clicky dmc
target 10s
set #LTARGETID !item
set #LTARGETKIND 1
event macro 22 0
wait 10
set %weightwarn #FALSE
goto SendItems_loop2
}
else
{
if #WEIGHT = N/A
gosub OpenStatusBar
if ( #WEIGHT > ( #MAXWEIGHT - 10 ) ) || ( #WEIGHT > %userweightmax )
{
display ok You are nearly overweight, but you have no selected$items
to send. Please unload manually.
set %weightwarn #TRUE
goto SendItems_skip
}
}
}
else
{
display ok No valid bags of sending in your main pack.$Please unload
manually.
set %weightwarn #TRUE
goto SendItems_skip
}
set %weightwarn #FALSE
SendItems_skip:
set #LOBJECTID !temp_LOBJECTID
set #LTARGETID !temp_LTARGETID
set #LTARGETKIND !temp_LTARGETKIND
set !TM_loot_in_progress #FALSE
namespace copy !TM_loot_in_progress to global TM_loot
namespace pop
return
;-------------------------------------------------------------------------------
sub UpdateLootInfo
set %loot_time #SCNT2 - %loot_time
set %loot_time_sec %loot_time / 10
set %loot_time_dec %loot_time % 10
if %items_looted = 1
set %looted_text
else
set %looted_text s
set %looted_text %items_looted , #SPC , item , %looted_text , #SPC , Looted!
if %eval_items = 1
set %eval_text
else
set %eval_text s
set %eval_text %eval_items , #SPC , item , %eval_text , #SPC , evaluated , #SPC
, in , #SPC , %loot_time_sec , #DOT , %loot_time_dec , #SPC , seconds. , #SPC ,
%looted_text
menu set EUOStatus %eval_text
return
;-------------------------------------------------------------------------------
sub UpdateEvaluationInfo
menu Font Name Arial
menu Font Size 7
menu Font BGColor BtnFace
menu delete EUOLabelItemsLooted
namespace copy history_index_max from local HISTORY
if !history_index_max = N/A
set !temp 0
else
set !temp !history_index_max + 1
set %total_items_evaluated %total_items_evaluated + %eval_items
set %text Items , #SPC , Looted: , #SPC , ( , !temp , / , %total_items_looted ,
/ , %total_items_evaluated , )
menu Text EUOLabelItemsLooted 472 0 %text ; 504
menu delete EUOLabelGold
set %text Gold: , #SPC , ( , %gold_count , / , %running_gold_count , )
menu Text EUOLabelGold 472 12 %text
return
;-------------------------------------------------------------------------------
;------------------------- Rule Evaluation - LITE ----------------------------
;-------------------------------------------------------------------------------
sub ScanContainerForMatch
namespace push
namespace local SCFN
set !container %1
set !groundorcontainer %2
set !temp_LPC #LPC
if !groundorcontainer = GROUND
set #LPC 100
else
set #LPC 10000
set !loot_list #TRUE
namespace push
namespace local ITEMINFO
namespace clear
namespace pop
if #FINDCNT >= 1
{
if !lootall = #TRUE
{
for #FINDINDEX 1 #FINDCNT
{
if #FINDID <> #CHARID
{
set !findid #FINDID
set %eval_items %eval_items + 1
gosub AddToList loot_list findid
}
else
{
ignoreitem #FINDID ME
}
}
ignoreitem reset ME
goto ScanContainerForMatch_skip1
}
if %avg_RPC = N/A
set %avg_RPC !rule_counter * %avg_window
else
set %avg_RPC ( %avg_RPC - ( %avg_RPC / %avg_window ) + !rule_counter )
set #LPC !temp_LPC
namespace pop
return
;-------------------------------------------------------------------------------
sub ParseItemAttributes
namespace push
namespace local PIA
namespace clear
set !item %1
event property !item
set !str #PROPERTY
set !linecount 0
ParseItem_loop1:
str pos !str $ 1
if #STRRES <> 0
{
set !linecount !linecount + 1
set !len #STRRES - 1
str left !str !len
gosub NewAddUnderscore #STRRES
set !substr #RESULT
gosub GetIntensityRight !substr !item
if !intensity = N/A
gosub GetIntensityLeft !substr !item
if !linecount = 1
set !title #RESULT
if % . #RESULT <> N/A
{
if !intensity <> N/A
set ! . #RESULT !intensity
else
set ! . #RESULT yes
}
if #FINDTYPE in DWR_EWR_GWR
{
set #RESULT N/A
if killer in !substr
set #RESULT Any_Killer_Talisman
if protection in !substr
set #RESULT Any_Protection_Talisman
if bonus in !substr && exceptional notin !substr
set #RESULT Any_Bonus_Talisman
if exceptional_bonus in !substr
set #RESULT Any_Exceptional_Bonus_Talisman
if #RESULT <> N/A && !intensity <> N/A
set ! . #RESULT !intensity
}
set !len !len + 1
str del !str 1 !len
set !str #STRRES
goto ParseItem_loop1
}
namespace pop
return
;-------------------------------------------------------------------------------
sub EvaluateRulesList
namespace push
namespace local RULES
set !findid %1
set !findtype %2
set !fail #FALSE
gosub ParseItemAttributes !findid !findtype
gosub SetupExceptionsList
if %version_type = FULL || %version_type = N/A
{
set !i !omit_rule_index - 1
while !i >= 0
{
set !rule OMITRULE , !i
set !temp ! . !rule
set !temp RULEITEM . !temp
if RULECHAIN notin ! . !temp
gosub EvaluateRule ! . !rule !findid !findtype
else
gosub EvaluateRuleChain ! . !temp !findid !findtype 0
if #RESULT = #TRUE
{
set !fail #TRUE
goto EvaluateRulesList_skip1
}
set !i !i - 1
}
set !i !active_rule_index - 1
while !i >= 0
{
set !rule ACTIVERULE , !i
set !temp ! . !rule
set !temp RULEITEM . !temp
if RULECHAIN notin ! . !temp
gosub EvaluateRule ! . !rule !findid !findtype
else
gosub EvaluateRuleChain ! . !temp !findid !findtype 0
if #RESULT = #TRUE
{
set !match . !findid !i ; record the rule that matched.
namespace copy match , !findid to local ITEMINFO
break
}
set !i !i - 1
}
goto EvaluateRulesList_skip1
}
if %TURBO = #TRUE
{
str count #PROPERTY $
if #STRRES <= 2
goto EvaluateRule_skip1
}
; ------------------ Various intensity megafunction scans
gosub CheckRangeMegaFunction Any_Skill START_SKILLS END_SKILLS
gosub CheckRangeMegaFunction Any_Resist Physical_Resist Energy_Resist
gosub CheckRangeMegaFunction Any_Slayer START_SLAYER_WEAPONS END_SLAYER_WEAPONS
; ------------------ Various summation megafunction scans
gosub SumRangeMegaFunction Sum_of_Resists Physical_Resist Energy_Resist
gosub SumRangeMegaFunction Sum_of_STR_DEX_INT Strength_Bonus Intelligence_Bonus
gosub SumRangeMegaFunction Sum_of_Skills Anatomy Wrestling
EvaluateRule_skip1:
namespace copy rule_counter to local SCFN
if !loot_match
set #RESULT #TRUE
else
set #RESULT #FALSE
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub CheckRangeMegaFunction ; stay in RULES namespace
if ( ( !index = % . %1 ) && ( !loot_match = #FALSE ) )
{
namespace copy rulelogic to local PIA
set !intensity ! . !ruleintensityindex
namespace copy intensity to local PIA
namespace push
namespace local PIA
set #RESULT #FALSE
for !ix % . %2 % . %3
{
set !tx name , !ix
set !tx % . !tx
set ! . !tx
if ( ( ! . !tx !rulelogic !intensity ) || ( ! . !tx = yes ) )
{
set #RESULT #TRUE
break
}
}
namespace pop
set !loot_match #RESULT
}
return #FALSE
;-------------------------------------------------------------------------------
sub SumRangeMegaFunction ; stay in RULES namespace
if ( ( !index = % . %1 ) && ( !loot_match = #FALSE ) )
{
namespace push
namespace local PIA
set #RESULT 0
for !ix % . %2 % . %3
{
set !tx name , !ix
set !tx % . !tx
set #RESULT #RESULT + ! . !tx
}
namespace pop
if #RESULT !rulelogic ! . !ruleintensityindex
set !loot_match #TRUE
}
return #FALSE
;-------------------------------------------------------------------------------
sub AddToList
if ! . %1 = #TRUE
set ! . %1 ! . %2 , _
else
set ! . %1 ! . %1 , ! . %2 , _
return
;-------------------------------------------------------------------------------
sub CheckItemTextMegaFunction
menu get EUOEditTextSearch
set !temptext #MENURES
str right !temptext 1
if #STRRES <> #SMC
set !temptext !temptext , #SMC
CheckItemTextMegaFunction_loop1:
str pos !temptext #SMC
if #STRRES > 1
{
set !len #STRRES - 1
str left !temptext !len
if #STRRES in #PROPERTY
{
set !match . #FINDID TEXT: , #SPC , #STRRES ; record the rule that
matched.
namespace copy match , #FINDID to local ITEMINFO
return #TRUE
}
set !len !len + 1
str del !temptext 1 !len
set !temptext #STRRES
goto CheckItemTextMegaFunction_loop1
}
return #FALSE
;-------------------------------------------------------------------------------
sub CheckItemFINDIDMegaFunction
menu get EUOEditFINDID
str len #MENURES
if #FINDTYPE in #MENURES && #STRRES > 0
{
set !match . #FINDID FINDID: , #SPC , #FINDTYPE ; record the rule that
matched.
namespace copy match , #FINDID to local ITEMINFO
return #TRUE
}
return #FALSE
;-------------------------------------------------------------------------------
sub SetupExceptionsList
namespace push
namespace local PIA
if one-handed in #PROPERTY
set ! . One_Handed_Weapon yes
if two-handed in #PROPERTY
set ! . Two_Handed_Weapon yes
if mage , #SPC , weapon in #PROPERTY
set ! . Mage_Weapon yes
namespace pop
return
;-------------------------------------------------------------------------------
sub HandleOKWithVal
namespace push
namespace local RULEENTRY
set !combo %1
set !first_index %2
set !logicbutton %3
set !intensity %4
menu get !combo
if #MENURES > 0
{
gosub GetIndex !first_index ; get the first index in this section
set !index #RESULT + #MENURES
set !tempname name , !index
set !tempname % . !tempname
set !tempname_us !tempname
gosub AddSpace !tempname
set !tempname #RESULT
if !logicbutton <> 5 && !logicbutton <> N/A ; may not have an intensity...
{
gosub GetButtonState !logicbutton ; OK button
set !buttontext #RESULT ; >= = <= < >
menu get !intensity
set !val #MENURES
set !ruleentry !tempname , #SPC , !buttontext , #SPC , !val
}
else
{
set !ruleentry !tempname
set !val NA
set !buttontext NA
}
gosub AddNewRule !tempname_us !buttontext !val !ruleentry
}
namespace pop
return
;-------------------------------------------------------------------------------
sub GetIntensityRight
namespace push
namespace local GIR
set !str %1
set !item %2
str len !str
set !ptr #STRRES
set !intensity N/A
GetIntensityRight_loop1:
str mid !str !ptr 1
if #STRRES in 0_1_2_3_4_5_6_7_8_9_+_- , %
{
if ( #STRRES in 0_1_2_3_4_5_6_7_8_9_- ) && ( #STRRES <> _ )
{
if !intensity = N/A
set !intensity #STRRES
else
set !intensity #STRRES , !intensity
}
set !ptr !ptr - 1
if !ptr > 0
goto GetIntensityRight_loop1
}
str mid !str 1 !ptr
set #RESULT #STRRES
namespace copy intensity to local PIA
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
sub GetIntensityLeft
namespace push
namespace local GIL
set !str %1
set !item %2
str len !str
set !len #STRRES
set !ptr 1
set !intensity N/A
GetIntensityLeft_loop1:
str mid !str !ptr 1
if #STRRES in 0_1_2_3_4_5_6_7_8_9_+_- , %
{
if ( #STRRES in 0_1_2_3_4_5_6_7_8_9_- ) && ( #STRRES <> _ )
{
if !intensity = N/A
set !intensity #STRRES
else
set !intensity !intensity , #STRRES
}
set !ptr !ptr + 1
if !ptr <= !len
goto GetIntensityLeft_loop1
}
str mid !str !ptr !len
set #RESULT #STRRES
namespace copy intensity to local PIA
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
; %1 - string to mung, removes spaces, minuses and colons
sub ConvertStringToVariable
namespace push
namespace local CSTV
set !string %1
set !args % , #SMC , #DOT , #SPC , !@#$%^&*()+={}|\][:"<>?~`'
ConvertStringToVariable_loop2:
str left !args 1
set !arg #STRRES
ConvertStringToVariable_loop1:
str pos !string !arg
if #STRRES <> 0
{
if !warn = N/A && !arg <> #SPC
{
display ok You may not include special characters here:$ , !args
set !warn #TRUE
}
set !val #STRRES - 1
str left !string !val
set !left #STRRES
set !val !val + 1
str del !string 1 !val
set !string !left , _ , #STRRES
goto ConvertStringToVariable_loop1
}
str del !args 1 1
set !args #STRRES
str len !args
if #STRRES > 0
goto ConvertStringToVariable_loop2
set #RESULT !string
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
; %1 - string to mung, removes spaces, minuses and colons
sub AddUnderscore
namespace push
namespace local AU
set !tempstring %1
AddUnderscore_loop1:
str pos !tempstring #SPC
if #STRRES <> 0
{
set !val #STRRES - 1
str left !tempstring !val
set !left #STRRES
set !val !val + 1
str del !tempstring 1 !val
set !tempstring !left , _ , #STRRES
goto AddUnderscore_loop1
}
set #RESULT !tempstring
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
; %1 - string to mung, removes spaces, minuses and colons
sub NewAddUnderscore
namespace push
namespace local AU
set !tempstring %1
NewAddUnderscore_loop1:
str pos !tempstring #SPC
if #STRRES <> 0
{
set !val #STRRES - 1
str left !tempstring !val
set !left #STRRES
set !val !val + 1
str del !tempstring 1 !val
set !tempstring !left , _ , #STRRES
goto NewAddUnderscore_loop1
}
str pos !tempstring :
if #STRRES <> 0
{
set !val #STRRES - 1
str left !tempstring !val
set !left #STRRES
set !val !val + 1
str del !tempstring 1 !val
set !tempstring !left , _ , #STRRES
goto NewAddUnderscore_loop1
}
set #RESULT !tempstring
namespace pop
return #RESULT
;-------------------------------------------------------------------------------
; %1 - string to mung
sub AddSpace
namespace push
namespace local AS
set !tempstring %1
AddSpace_loop1:
str pos !tempstring _
if #STRRES <> 0
{
set !val #STRRES - 1
str left !tempstring !val
set !left #STRRES
set !val !val + 1
str del !tempstring 1 !val
set !tempstring !left , #SPC , #STRRES
goto AddSpace_loop1
}
set #RESULT !tempstring
namespace pop
return #RESULT