//作用:物品仓库
//此技能用不死族的[腐臭蜂群]作为模板来改 //把[所定允许]改为 ground,debris,item,player,air,self //(复制以上的内容,按住Shift双击[所定允许],粘贴进去) //[影响区域],[最终区域],[距离],[伤害]都改为0 //把[射箭技巧]去掉 //当然,你也可以通过修改一个“通魔”技能来完成,但会有一个小小的BUG: //以英雄带在身上的物品为目标放入仓库时,有时无法完成
//当英雄以自己为目标时,则为把身上的所有物品放到仓库里 //以物品为目标时,拾起该物品放到仓库里(物品可以是英雄携带的,也可以是地上的) //以空地为目标时,取出物品,取物品的顺序与放入的相反,后放入的先取出
function Trig_Storage_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'AUcs' endfunction
function Trig_Storage_Actions takes nothing returns nothing local integer M=100 //最多100个物品 local integer N=12 //支持12位玩家 // M,N必须满足这个关系:M*N*4<8192-N
local item ITEM=GetSpellTargetItem() local unit UNIT=GetSpellAbilityUnit() local integer i=GetPlayerId(GetOwningPlayer(UNIT)) local integer c local integer ic local location loc local string str="==error on storage=="
if (UNIT==GetSpellTargetUnit()) then //以自己为目标,存储身上的所有物品 if ( UnitInventoryCount(UNIT)==0 ) then set str="|cffffcc00你没有物品可以放到仓库里" else set ic=0 loop //我是使用了bj_meleeTwinkedHeroes这个变量来保存物品里...尽其所用 //这个变量是在Blizzard.j里定义的,第499行 integer array bj_meleeTwinkedHeroes //如果你的地图有标准对战成份,那么就自己定义一个全局变量吧。。
exitwhen bj_meleeTwinkedHeroes[i*N]==M or ic>5 set c=bj_meleeTwinkedHeroes[i*N] set ITEM=UnitItemInSlot(UNIT,ic) if ( ITEM!=null ) then set bj_meleeTwinkedHeroes[i*N]=c+1 set bj_meleeTwinkedHeroes[N+c*3+0+i*M]=GetItemTypeId(ITEM) set bj_meleeTwinkedHeroes[N+c*3+1+i*M]=GetItemUserData(ITEM) set bj_meleeTwinkedHeroes[N+c*3+2+i*M]=GetItemCharges(ITEM) set bj_meleeTwinkedHeroes[N+c*3+3+i*M]=R2I(GetItemLifeBJ(ITEM)) call RemoveItem(ITEM) endif set ic=ic+1 endloop if ( bj_meleeTwinkedHeroes[i*N]==M ) then set str="|cffffcc00仓库已满,无法再放入物品" else set str="仓库现共有物品数:"+I2S(bj_meleeTwinkedHeroes[i*N]) endif endif
elseif ( ITEM!=null ) then //以单个物品为目标,存储 if ( bj_meleeTwinkedHeroes[i*N]==M ) then set str="|cffff0000仓库已满,无法再放入物品" else set c=bj_meleeTwinkedHeroes[i*N] set bj_meleeTwinkedHeroes[i*N]=c+1 set bj_meleeTwinkedHeroes[N+c*3+0+i*M]=GetItemTypeId(ITEM) set bj_meleeTwinkedHeroes[N+c*3+1+i*M]=GetItemUserData(ITEM) set bj_meleeTwinkedHeroes[N+c*3+2+i*M]=GetItemCharges(ITEM) set bj_meleeTwinkedHeroes[N+c*3+3+i*M]=R2I(GetItemLifeBJ(ITEM)) call RemoveItem(ITEM) set str="仓库现共有物品数:"+I2S(c+1) endif
else //以空地为目标,提取物品 set ic=6-UnitInventoryCount(UNIT) if ( ic==0 ) then set str="|cffffcc00英雄的物品栏已满,无法再提取物品" else if ( bj_meleeTwinkedHeroes[i*N]==0 ) then set str="|cffff0000仓库已空,没有物品可提取 " else set loc=GetSpellTargetLoc() loop exitwhen bj_meleeTwinkedHeroes[i*N]==0 or ic==0 set c=bj_meleeTwinkedHeroes[i*N]-1 set bj_meleeTwinkedHeroes[i*N]=c set ITEM=CreateItem(bj_meleeTwinkedHeroes[N+c*3+0+i*M],GetLocationX(loc)+50,GetLocationY(loc)+50) call SetItemUserData(ITEM,bj_meleeTwinkedHeroes[N+c*3+1+i*M]) call SetItemCharges( ITEM,bj_meleeTwinkedHeroes[N+c*3+2+i*M]) call SetItemLifeBJ( ITEM,I2R(bj_meleeTwinkedHeroes[N+c*3+3+i*M])) call UnitAddItem(UNIT,ITEM) set ic=ic-1 endloop call RemoveLocation(loc) if (bj_meleeTwinkedHeroes[i*N]==0) then set str="|cffffcc00仓库里的物品已经被全部提出" else set str="仓库还剩下物品数:"+I2S(bj_meleeTwinkedHeroes[i*N]) endif endif endif endif call DisplayTimedTextToPlayer(Player(i),0,0,5,str) endfunction
//=========================================================================== function InitTrig_Storage takes nothing returns nothing set gg_trg_Storage = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Storage, EVENT_PLAYER_UNIT_SPELL_CAST ) call TriggerAddCondition( gg_trg_Storage, Condition( function Trig_Storage_Conditions ) ) call TriggerAddAction( gg_trg_Storage, function Trig_Storage_Actions ) endfunction |