ou99孽缘 发表于 2010-12-14 18:36:58

百格物品仓库系统-jass版

//作用:物品仓库

//此技能用不死族的[腐臭蜂群]作为模板来改
//把[所定允许]改为 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==M or ic>5
                              set c=bj_meleeTwinkedHeroes
                              set ITEM=UnitItemInSlot(UNIT,ic)
                              if ( ITEM!=null ) then
                                        set bj_meleeTwinkedHeroes=c+1
                                        set bj_meleeTwinkedHeroes=GetItemTypeId(ITEM)
                                        set bj_meleeTwinkedHeroes=GetItemUserData(ITEM)
                                        set bj_meleeTwinkedHeroes=GetItemCharges(ITEM)
                                        set bj_meleeTwinkedHeroes=R2I(GetItemLifeBJ(ITEM))
                                        call RemoveItem(ITEM)
                              endif
                              set ic=ic+1
                        endloop
                        if (bj_meleeTwinkedHeroes==M ) then
                            set str="|cffffcc00仓库已满,无法再放入物品"
                        else
                              set str="仓库现共有物品数:"+I2S(bj_meleeTwinkedHeroes)
                        endif
                endif

      elseif ( ITEM!=null ) then //以单个物品为目标,存储
                if ( bj_meleeTwinkedHeroes==M ) then
                        set str="|cffff0000仓库已满,无法再放入物品"
                else
                        set c=bj_meleeTwinkedHeroes
                        set bj_meleeTwinkedHeroes=c+1
                        set bj_meleeTwinkedHeroes=GetItemTypeId(ITEM)
                        set bj_meleeTwinkedHeroes=GetItemUserData(ITEM)
                        set bj_meleeTwinkedHeroes=GetItemCharges(ITEM)
                        set bj_meleeTwinkedHeroes=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==0 ) then
                              set str="|cffff0000仓库已空,没有物品可提取 "
                        else
                              set loc=GetSpellTargetLoc()
                              loop
                                        exitwhen bj_meleeTwinkedHeroes==0 or ic==0
                                        set c=bj_meleeTwinkedHeroes-1
                                        set bj_meleeTwinkedHeroes=c
                                        set ITEM=CreateItem(bj_meleeTwinkedHeroes,GetLocationX(loc)+50,GetLocationY(loc)+50)
                                        call SetItemUserData(ITEM,bj_meleeTwinkedHeroes)
                                        call SetItemCharges( ITEM,bj_meleeTwinkedHeroes)
                                        call SetItemLifeBJ(ITEM,I2R(bj_meleeTwinkedHeroes))
                                        call UnitAddItem(UNIT,ITEM)
                                        set ic=ic-1
                              endloop
                              call RemoveLocation(loc)
                              if (bj_meleeTwinkedHeroes==0) then
                                        set str="|cffffcc00仓库里的物品已经被全部提出"
                              else
                                        set str="仓库还剩下物品数:"+I2S(bj_meleeTwinkedHeroes)
                              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

ou99孽缘 发表于 2010-12-14 18:44:45

{:6_320:}
路过

轮回の爱 发表于 2011-1-15 11:27:07

{:6_331:}{:6_332:}{:6_324:}{:6_335:}走在贴吧边,赚到一毛钱,直接把它收进腰兜里面。

yxax007008 发表于 2011-4-16 02:05:48

很显然....我只看的懂国语,下面那什么的,是函...数?

gw96123 发表于 2011-10-16 01:52:29

,,,,,,,,,,,,,,

zhyz 发表于 2012-12-4 18:53:38

能不能有演示图
页: [1]
查看完整版本: 百格物品仓库系统-jass版