偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 5038|回复: 8

百格物品仓库系统-jass版

  [复制链接]
ou99孽缘 title=
发表于 2010-12-14 18:36:58
//作用:物品仓库

//此技能用不死族的[腐臭蜂群]作为模板来改
//把[所定允许]改为 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
ou99孽缘 title=
 楼主| 发表于 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 来自手机
能不能有演示图
快速回复 返回顶部 返回列表