找回密码
 点一下
查看: 1996|回复: 7

【求助】关于动态注册的问题

[复制链接]
发表于 2007-11-19 00:41:05 | 显示全部楼层 |阅读模式
我自己做了个动态注册的演示:羊进圈选英雄
一个人的时候很好,但人一多就出问题了:一次出来10多个,不知道怎么回事
[codes=jass]function I2H takes integer i  returns handle
    return i
    return null
endfunction

function H2I takes handle h  returns integer
    return h
    return 0
endfunction

function I2RE takes integer i  returns rect
    return i
    return null
endfunction



//==============================================================
function SetHeroType takes rect rec,integer herotype returns nothing
    call StoreInteger(udg_GC,"HeroType",I2S(H2I(rec)),herotype)
endfunction

//====================================================================
function choose_Conditions takes nothing returns boolean
    local unit u=GetTriggerUnit()
    return ( GetUnitTypeId(u) == 'nshe' )   
endfunction

function choose_Actions takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local rect out = I2RE(GetStoredInteger(udg_GC,I2S(H2I(u)),"OutRect"))
    local integer i=1
    local integer n=4
    local string rec
    local integer herotype
    local unit hero
    loop
        exitwhen   i>n
        if  RectContainsUnit(udg_Rect,u)==true then
            set rec=I2S(H2I(udg_Rect))
        endif
        set i=i+1
    endloop
    set herotype = GetStoredInteger(udg_GC,"HeroType",rec)
    call CreateNUnitsAtLoc( 1, herotype, GetOwningPlayer(u), GetRectCenter(out), bj_UNIT_FACING )
    set hero= bj_lastCreatedUnit
    call RemoveUnit( u )
    call PanCameraToTimedLocForPlayer( GetOwningPlayer(hero), GetUnitLoc(hero), 0 )
endfunction

//===========================================================================
function SelectHero takes unit u,rect in,rect out returns nothing
    local trigger choose = CreateTrigger()
    call  StoreInteger(udg_GC,I2S(H2I(u)),"OutRect",H2I(out))
    call TriggerRegisterEnterRectSimple( choose, in )
    call TriggerAddCondition( choose, Condition( function choose_Conditions ) )
    call TriggerAddAction( choose, function choose_Actions )
endfunction[/codes]
[trigger]对战初始化
    事件
        地图初始化
    条件
    动作
        可见度 - 创建一个状态为 允许 的可见度修正器给 玩家1(红色) ,设置 可见 在 (可用地图区域)
        游戏缓存 - 创建游戏缓存,使用文件名: JASS.w3v
        设置 GC = (最后创建的游戏缓存)
        设置 RectOut = 矩形区域 out <预设>
        设置 Rect[1] = 矩形区域 1 <预设>
        设置 Rect[2] = 矩形区域 2 <预设>
        设置 Rect[3] = 矩形区域 3 <预设>
        设置 Rect[4] = 矩形区域 4 <预设>
[/trigger]
[trigger]s
    事件
        时间 - 游戏开始 0.00 秒
    条件
    动作
        自定义代码: call SetHeroType(udg_Rect[1],'Hpal')
        自定义代码: call SetHeroType(udg_Rect[2],'Hamg')
        自定义代码: call SetHeroType(udg_Rect[3],'Hmkg')
        自定义代码: call SetHeroType(udg_Rect[4],'Hblm')
        玩家组 - 选取 (所有 用户 控制的玩家) 内所有玩家做动作
            Loop - 动作
                单位 - 创建 1 个 绵羊 给 (选取玩家) 在 ((选取玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
                设置 Unit_Chooser = 最后创建的单位 [R]
                选择 - 选择 Unit_Chooser 对 (选取玩家)
                自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[1],udg_RectOut)
                自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[2],udg_RectOut)
                自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[3],udg_RectOut)
                自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[4],udg_RectOut)
                设置 Unit_Chooser = 没有单位
[/trigger]

羊选英雄.w3x

22 KB, 下载次数: 15

发表于 2007-11-20 18:20:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-11-20 19:36:34 | 显示全部楼层
原来如此啊,这样改确实就不出来n多的英雄了
受教啦:)
回复

使用道具 举报

发表于 2007-11-20 19:41:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-11-20 20:07:22 | 显示全部楼层
哦,酱紫啊
我自己改的时候还把触发存在了单位里,结果还有个gettriggeringtrigger可以用。。。。
但要是几个触发同时触发的话会不会产生混淆呢?
回复

使用道具 举报

发表于 2007-11-20 20:24:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-11-20 21:34:40 | 显示全部楼层
哦,有点感觉了,抓住ing
回复

使用道具 举报

发表于 2008-8-1 10:33:19 | 显示全部楼层
我也收益了
最近写了"技能使用一定次数后升级"的JASS
发现注册了N个技能, 使用一个技能就加N次的效果~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-9 07:10 , Processed in 0.137521 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表