模块:Hydrogina/sandbox/AllEnemyInfo
可在模块:Hydrogina/sandbox/AllEnemyInfo/doc创建此模块的帮助文档
p={}
global_enemy_info_list={}
tablehead=[[{| class="wikitable filterable sortable" style="text-align:center; display:table; white-space:normal;"
|-
! class="filterable-head" style="width:15%" |关卡
! class="filterable-head" style="width:15%" |敌人
! class="filterable-head" style="width:7%" data-sort-type="number"|数量
! class="filterable-head" style="width:7%" data-sort-type="number"|级别
! class="filterable-head" style="width:7%" |地位
! class="filterable-head" style="width:7%" data-sort-type="number"|生命值
! class="filterable-head" style="width:7%" data-sort-type="number"|攻击力
! class="filterable-head" style="width:7%" data-sort-type="number"|防御力
! class="filterable-head" style="width:8%" data-sort-type="number"|法术抗性
! class="filterable-head" style="width:8%" data-sort-type="number"|攻击间隔
! class="filterable-head" style="width:8%" data-sort-type="number"|重量等级
! class="filterable-head" style="width:8%" data-sort-type="number"|移动速度
! class="filterable-head" style="width:7%" data-sort-type="number"|攻击范围半径
! class="filterable-head" style="width:7%" data-sort-type="number"|生命恢复速度
]]
tableend="|}\n"
function ask_enemy(frame,enemy_name,enemy_level,enemy_prop)
local level_str='#LEVEL'..enemy_level
if(enemy_prop=="地位级别")then
level_str=""
end
local key=enemy_name..level_str..enemy_prop
local ask_str=global_enemy_info_list[key]
if(not ask_str)then
ask_str=frame:callParserFunction{
name = '#show:'..enemy_name..level_str, args={
'?'..enemy_prop..'#'
}}
if(ask_str=="")then
ask_str="—"
end
global_enemy_info_list[key]=ask_str
end
return ask_str
end
function get_enemy_prop(num)
enemy_prop_list={"","数量","级别","地位级别","最大生命值","攻击力","防御力","法术抗性","攻击间隔","重量等级","移动速度","攻击范围半径","生命恢复速度"}
return enemy_prop_list[num]
end
function spilt_ask(str)
hasprop=string.find(str, "(.*)")
if(hasprop)then
name=string.gsub(str,"(.*)","")
prop_str=string.sub(str, string.find(str, "(.*)"))
prop_str=string.sub(prop_str, 4,-4)
prop=mw.text.split(prop_str, ";", true)
else
name=str
prop=nil
end
return name,prop
end
function ask_battle(frame,askcondition)
battle_str=frame:callParserFunction{
name = '#ask:'..askcondition, args={
'?敌人类数',
format='plainlist',
propsep=';',
valuesep=';',
sep='@',
headers='hide',
link='none',
limit='1000',
order='asc'
}}
battle_table = mw.text.split(battle_str, "@", true)
battle_name={}
battle_enemynum={}
for i = 1, #battle_table do
battle_name[i],temp=spilt_ask(battle_table[i])
if(temp)then
battle_enemynum[i]=temp[1]
else
battle_enemynum[i]="0"
end
end
return battle_name ,battle_enemynum
end
function ask_battle_each(frame,battle_name,enemynum)
battle_str=frame:callParserFunction{
name = '#ask:[['..battle_name..']]', args={
"?敌人"..enemynum,
"?敌人"..enemynum.."数量",
"?敌人"..enemynum.."级别",
"?敌人"..enemynum.."地位级别",
"?敌人"..enemynum.."生命值",
"?敌人"..enemynum.."攻击力",
"?敌人"..enemynum.."防御力",
"?敌人"..enemynum.."法术抗性",
"?敌人"..enemynum.."攻击间隔",
"?敌人"..enemynum.."重量等级",
"?敌人"..enemynum.."移动速度",
"?敌人"..enemynum.."攻击范围半径",
"?敌人"..enemynum.."生命恢复速度",
limit="1000",
link="none",
format="template",
template="Hydrogina/sandbox/EnemyAskShow"
}}
battle_str=string.sub(battle_str, string.find(battle_str, "X.*X"))
battle_str=string.sub(battle_str, 2,-2)
ememyinfolist=mw.text.split(battle_str, ";", true)
for i = 1, #ememyinfolist do
if(ememyinfolist[i]=="")then
local enemy_name=ememyinfolist[1]
local enemy_level=ememyinfolist[3]
local enemy_prop=get_enemy_prop(i)
ememyinfolist[i]=ask_enemy(frame,enemy_name,enemy_level,enemy_prop)
--ememyinfolist[i]="NA"
else
if(i>3)then
ememyinfolist[i]="style='background:#2F2F2F;color:#FFF'|"..ememyinfolist[i]
end
end
end
ememyinfolist[1]="[["..ememyinfolist[1].."]]"
local rtn="|-\n|[["..battle_name.."]]"
for i = 1, #ememyinfolist do
rtn=rtn.."||"..ememyinfolist[i]
end
rtn=rtn.."\n"
return rtn
end
function maketable(frame,battle_name,battle_enemynum,levellimit,preloaddata,str_preload)
local rtn=""
for i = 1, #battle_name do
local battle_enemynum_i=tonumber(battle_enemynum[i])
if(battle_enemynum_i==0)then
strask_battle_each="|-\n|[["..battle_name[i].."]]||无||—||—||—||—||—||—||—||—||—||—||—||—\n"
rtn=rtn..strask_battle_each
else
for j=1,battle_enemynum_i do
strask_battle_each=ask_battle_each(frame,battle_name[i],j)
rtn=rtn..strask_battle_each
end
end
if( i == levellimit)then
break
end
end
if(preloaddata~="no")then
local fnd= mw.ustring.find( str_preload, tablehead, 1, true )
if(fnd)then
rtn=string.sub(str_preload, 1,fnd+#tablehead-1 )..rtn..string.sub(str_preload,fnd+#tablehead )
else
rtn=tablehead..rtn..tableend..str_preload
end
else
rtn=tablehead..rtn..tableend
end
return rtn
end
function get_preload(frame,preloadpath,battle_name,battle_enemynum)
local web=preloadpath
local str_preload=frame:expandTemplate{title = web, args = {}}
local new_battle_name={}
local new_battle_enemynum={}
for i = 1, #battle_name do
local fnd= mw.ustring.find( str_preload, "[["..battle_name[i].."]]", 1, true )
--local fnd=string.find (str_preload, "%[%["..battle_name[i].."]]")
if(not fnd)then
table.insert (new_battle_name, battle_name[i])
table.insert (new_battle_enemynum, battle_enemynum[i])
end
end
return new_battle_name,new_battle_enemynum,str_preload
end
function p.get(frame)
local args = (frame == mw.getCurrentFrame() and frame.args) or frame
local askcondition ='[[分类:普通难度关卡]]OR[[分类:剿灭关卡]]'
local levellimit =-1
local printlevellist ="no"
local preloaddata ="no"
local preloadpath ="模板:详细敌人一览"
if(args["askcondition"])then
askcondition=args["askcondition"]
end
if(args["levellimit"])then
levellimit=tonumber(args["levellimit"])
end
if(args["printlevellist"])then
printlevellist=args["printlevellist"]
end
if(args["preloaddata"])then
preloaddata=args["preloaddata"]
end
if(args["preloadpath"])then
preloadpath=args["preloadpath"]
end
-------------------------------------------------------------------------
battle_name,battle_enemynum=ask_battle(frame,askcondition)
local str_preload=""
if(preloaddata~="no")then
battle_name,battle_enemynum,str_preload=get_preload(frame,preloadpath,battle_name,battle_enemynum)
end
--[[
local rtn3=""
if(printlevellist=="yes")then
for i = 1, #battle_name do
rtn3=rtn3..i..":aa"..battle_name[i].."bb"..battle_enemynum[i].."cc\n\n"
end
rtn3=rtn3.."\n\n\n\n"
end
]]--
local rtn=""
rtn=maketable(frame,battle_name,battle_enemynum,levellimit,preloaddata,str_preload)
return rtn
end
return p