GearSwap を利用する場合、あらかじめWAR.lua などのユーザーファイルを利用者が作成しておくことになるが、作成したファイルは自動的にGearSwapによって読み込まれて自動着替えの際に内容が参照される。
このユーザーファイルの読み込み処理は refresh.lua の load_user_files() にて行われる。
function load_user_files(job_id,user_file)
local path,base_dir,filename
path,base_dir,filename = pathsearch({user_file})
if not path then
local long_job = res.jobs[job_id].english
local short_job = res.jobs[job_id].english_short
local tab = {player.name..'_'..short_job..'.lua',player.name..'-'..short_job..'.lua',
player.name..'_'..long_job..'.lua',player.name..'-'..long_job..'.lua',
player.name..'.lua',short_job..'.lua',long_job..'.lua','default.lua'}
path,base_dir,filename = pathsearch(tab)
end
-- Try to load data/<name>_<main job>.lua
local funct, err = loadfile(path)
setfenv(funct, user_env)
上記のコードにて loadfile によってユーザーファイルが読み込まれるが、その後、読み込んだ内容(funct)を setfenv している。これによりユーザーファイルに記述されたユーザー関数を実行するときの環境が user_env にセットされる。下記は user_env の内容である。ユーザー関数内ではこの user_env の中に含まれている変数や関数を利用できる。逆に言うと、グローバル変数であっても user_env に含まれていなければ利用することができない。
user_env = {gearswap = _G, _global = _global, _settings = _settings,_addon=_addon,
-- Player functions
equip = equip, cancel_spell=cancel_spell, change_target=change_target,cast_delay=cast_delay,print_set=print_set,set_combine=set_combine,disable=disable,enable=user_enable,
send_command=send_cmd_user,windower=user_windower,include=include_user,midaction=user_midaction,pet_midaction=user_pet_midaction,set_language=set_language,show_swaps = show_swaps,debug_mode=debug_mode,include_path=user_include_path,register_unhandled_command=user_unhandled_command,move_spell_target=move_spell_target,language=language,
-- Library functions
string=string,math=math,table=table,set=set,list=list,T=T,S=S,L=L,pack=pack,functions=functions,os=os,texts=texts,bit=bit,type=type,tostring=tostring,tonumber=tonumber,pairs=pairs,
ipairs=ipairs, print=print, add_to_chat=add_to_chat_user,unpack=unpack,next=next,
select=select,lua_base_path=windower.addon_path,empty=empty,file=file,
loadstring=loadstring,assert=assert,error=error,pcall=pcall,io=io,dofile=dofile,
debug=debug,coroutine=coroutine,setmetatable=setmetatable,getmetatable=getmetatable,rawset=rawset,rawget=rawget,require=include_user,
_libs=_libs,
-- Player environment things
buffactive=buffactive,
player=player,
world=world,
pet=pet,
fellow=fellow,
alliance=alliance,
party=alliance[1],
sets={naked = {main=empty,sub=empty,range=empty,ammo=empty,
head=empty,neck=empty,ear1=empty,ear2=empty,
body=empty,hands=empty,ring1=empty,ring2=empty,
back=empty,waist=empty,legs=empty,feet=empty}}
}
user_env['_G'] = user_env
requireはinclude_userに置き換えられている。inlcude_user() 関数は user_functions.lua で定義された関数であり、引数で指定されたファイルを loadfile() で読み込み、その環境を user_env に setfenv する処理になっている。
Mote-inlcude を使う場合、”決まり文句”として include('Mote-Include.lua') をするが、この include は user_env に定義されている通り、include_user() 関数のことである。
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.include('Mote-Include.lua')
end
0 件のコメント:
コメントを投稿