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

技能替换成局部变量后无效....

[复制链接]
发表于 2011-3-4 11:52:56 | 显示全部楼层 |阅读模式
想把一个技能用jass的局部变量做成多人使用的.
但是自己用局部量变替换以后.保存没有问题.但是技能施放以后无效.
自己想不太明白.所以就发上来问问高手们是哪里出了问题.
需要说明的是 这个t中用到了自定义代码.如:    [jass]call KissGroupXuanqu( d[1], u[1] )[/jass] 是不是 局部变量不能够传递的问题?[trigger]YZ
    事件
        单位 - 任意单位 发动技能效果
    条件
        (施放技能) 等于 影掌压之术
        ((触发单位) 是 英雄) 等于 TRUE
    动作
        设置 u[1] = (触发单位)
        设置 d[1] = (技能施放点)
        设置 damage = (转换 ((u[1] 的智力值(包括 加成)) x (u[1] 的 影掌压之术  技能等级)) 为实数)
        循环动作[end]从 1 到 index, 运行 (Loop - 动作)
            Loop - 动作
                设置 d[2] = (从 d[1] 开始,距离 Form[end] ,方向为 Faci[end] 度的位移处)
                设置 u[2] = (新建 (u[1] 的所有者) 的 黑手马甲 在 d[2] 面向角度:Faci[end] 度)
                特殊效果 - 删除 (新建特效 Abilities\Spells\Other\Awaken\Awaken.mdl 在 d[2] 处)
                点 - 清除 d[2]
        等待 0.40 秒
        自定义代码:   call KissGroupXuanqu( udg_d[1], udg_u[1] )
        单位组 - 选取 (代码: gg) 内所有单位做动作
            Loop - 动作
                设置 u[2] = (新建 (u[1] 的所有者) 的 技能马甲 在(((选取单位) 所在X轴坐标),((选取单位) 所在Y轴坐标)),面向角度:0.00 度)
                单位 - 为 u[2] 添加 风暴之锤
                单位 - 对 u[2] 发布 人族山丘之王 - 风暴之锤 命令到目标: (选取单位)
                单位 - 命令 u[1] 对 (选取单位) 造成 damage 点伤害(是 攻击伤害, 不是远程攻击) 攻击类型: 英雄 伤害类型: 普通 武器类型: 无
        等待 0.40 秒
        循环动作[end]从 1 到 index, 运行 (Loop - 动作)
            Loop - 动作
                设置 d[2] = (从 d[1] 开始,距离 Form[end] ,方向为 Faci[end] 度的位移处)
                特殊效果 - 删除 (新建特效 Abilities\Spells\Items\AItb\AItbTarget.mdl 在 d[2] 处)
                点 - 清除 d[2]
        点 - 清除 d[1]
[/trigger]




[jass]
function Trig_YZ_DbfFG25jZs6EConditions takes nothing returns boolean
    return ((GetSpellAbilityId() == 'A000') and (IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true))
endfunction
function Trig_YZ_DbfFG25jZs6EFunc010A takes nothing returns nothing
    local unit array u
    local real damage
    set u[2] = CreateUnit(GetOwningPlayer(u[1]), 'e000', GetUnitX(GetEnumUnit()), GetUnitY(GetEnumUnit()), 0)
    call UnitAddAbility( u[2], 'A001' )
    call IssueTargetOrderById( u[2], 852095, GetEnumUnit() )
    call UnitDamageTarget( u[1], GetEnumUnit(), udg_damage, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
    set u[1]=null
    set u[2]=null
    endfunction
function Trig_YZ_DbfFG25jZs6EActions takes nothing returns nothing
    local unit array u
    local location array d
    local real damage
    local integer end
    local integer index
    local real array  Form
    local real array  Faci
    set u[1] = GetTriggerUnit()
    set d[1] = GetSpellTargetLoc()
    set damage = I2R(( GetHeroInt(u[1], true) * GetUnitAbilityLevel(u[1], 'A000') ))
    set end = 1
    loop
        exitwhen end > index
        set d[2] = PolarProjectionBJ(d[1], Form[end], Faci[end])
        set u[2] = CreateUnitAtLoc(GetOwningPlayer(u[1]), 'e007', d[2], Faci[end])
        call DestroyEffect( AddSpecialEffectLoc("Abilities\\Spells\\Other\\Awaken\\Awaken.mdl", d[2]) )
        call RemoveLocation( d[2] )
        set end = end + 1
    endloop
    call TriggerSleepAction(0.40)
    call KissGroupXuanqu( d[1], u[1] )
    call ForGroupBJ(            (gg), function Trig_YZ_DbfFG25jZs6EFunc010A )
    call TriggerSleepAction(0.40)
    set end = 1
    loop
        exitwhen end > index
        set d[2] = PolarProjectionBJ(d[1], Form[end], Faci[end])
        call DestroyEffect( AddSpecialEffectLoc("Abilities\\Spells\\Items\\AItb\\AItbTarget.mdl", d[2]) )
        call RemoveLocation( d[2] )
        set end = end + 1
    endloop
    call RemoveLocation( d[1] )
    set d[1]= null
    set d[2]=null
    set u[1]=null
    set u[2]=null
endfunction
//===========================================================================
function InitTrig_YZ_DbfFG25jZs6E takes nothing returns nothing
    set gg_trg_YZ_DbfFG25jZs6E = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( gg_trg_YZ_DbfFG25jZs6E, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition(gg_trg_YZ_DbfFG25jZs6E, Condition(function Trig_YZ_DbfFG25jZs6EConditions))
    call TriggerAddAction(gg_trg_YZ_DbfFG25jZs6E, function Trig_YZ_DbfFG25jZs6EActions)
endfunction
[/jass]
发表于 2011-3-4 12:09:04 | 显示全部楼层
call KissGroupXuanqu( udg_d[1], udg_u[1] )
这个是自定义函数吗?
U1没赋值
回复

使用道具 举报

 楼主| 发表于 2011-3-4 12:11:45 | 显示全部楼层
引用第1楼放牧钓鱼于2011-03-04 12:09发表的 :
call KissGroupXuanqu( udg_d[1], udg_u[1] )
这个是自定义函数吗?
U1没赋值


请问
U1没赋值
是因为 我用局部变量代替全局变量而造成的吗? 还是因为其它?
回复

使用道具 举报

发表于 2011-3-4 12:19:44 | 显示全部楼层
不是吧 你声明了 没赋值 但你后面的动作又运用自然没效的 你全局变量都转为局部变量了吗? index这个数是多少?
function Trig_YZ_DbfFG25jZs6EFunc010A takes nothing returns nothing

    local unit array u

    local real damage

    set u[2] = CreateUnit(GetOwningPlayer(u[1]), 'e000', GetUnitX(GetEnumUnit()), GetUnitY(GetEnumUnit()), 0)
回复

使用道具 举报

 楼主| 发表于 2011-3-4 12:55:05 | 显示全部楼层
引用第3楼放牧钓鱼于2011-03-04 12:19发表的 :
不是吧 你声明了 没赋值 但你后面的动作又运用自然没效的 你全局变量都转为局部变量了吗? index这个数是多少?
function Trig_YZ_DbfFG25jZs6EFunc010A takes nothing returns nothing

    local unit array u

.......


你全局变量都转为局部变量了吗?---刚才又回去看了下.没有...是我太粗心了.抱歉....

你声明了 没赋值 ----我去赋值后试了一下.把index改成其它数.确实有效了...谢谢.不过...特效很成问题.....因为

index这个数是多少? 我也不知道....关键是我看不出来...在变量的编辑中.T中.我都没有看到对index的赋值.在自定义脚本中也没有看到...我才疏学浅.还请高手帮我看一下吧.谢谢.我把地图发上来.

kof97 影掌压之术.w3x

47 KB, 下载次数: 8

回复

使用道具 举报

发表于 2011-3-4 13:25:38 | 显示全部楼层
说一下效果吧
回复

使用道具 举报

发表于 2011-3-4 15:20:51 | 显示全部楼层
kof97 影掌压之术.w3x (45 KB, 下载次数: 7) 改好了

function Trig_YZ_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000' and IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true
endfunction

function cat takes nothing returns nothing
    local unit u = CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'e000', GetUnitX(GetEnumUnit()), GetUnitY(GetEnumUnit()), 0)
    local real damage = I2R(( GetHeroInt(GetTriggerUnit(), true) * GetUnitAbilityLevel(GetTriggerUnit(), 'A000') ))
    call UnitAddAbility( u, 'A001' )
    call IssueTargetOrderById( u, 852095, GetEnumUnit() )
    call UnitDamageTarget( GetTriggerUnit(), GetEnumUnit(), damage, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
    set u=null
endfunction

function Trig_YZ_Actions takes nothing returns nothing
    local unit u2 = GetTriggerUnit()
    local unit u3
    local location d = GetSpellTargetLoc()
    local integer i
    local location d2
    set i = 1
    loop
        exitwhen i > udg_index
        set d2 = PolarProjectionBJ(d, udg_Form, udg_Faci)
        set u3 = CreateUnitAtLoc(GetOwningPlayer(u2), 'e007', d, udg_Faci)
        call DestroyEffect( AddSpecialEffectLoc("Abilities\\\\Spells\\\\Other\\\\Awaken\\\\Awaken.mdl",d2) )
        call RemoveLocation(d2)
        set i = i + 1
    endloop
    call TriggerSleepAction( 0.40 )
    call KissGroupXuanqu(d,u2)
    call ForGroup(gg, function cat)
    call TriggerSleepAction( 0.40 )
    set i = 1
    loop
        exitwhen i > udg_index
        set  d2 = PolarProjectionBJ(d, udg_Form, udg_Faci)
        call DestroyEffect( AddSpecialEffectLoc("Abilities\\\\Spells\\\\Items\\\\AItb\\\\AItbTarget.mdl",d2) )
        call RemoveLocation(d2)
        set i = i + 1
    endloop
    call RemoveLocation(d)
    set u2=null
    set u3=null
    set d=null
    set d2=null
endfunction

//===========================================================================
function InitTrig_YZ takes nothing returns nothing
    set gg_trg_YZ = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_YZ, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_YZ, Condition( function Trig_YZ_Conditions ) )
    call TriggerAddAction( gg_trg_YZ, function Trig_YZ_Actions )
endfunction
回复

使用道具 举报

发表于 2011-3-4 15:29:22 | 显示全部楼层
能力有效 有些变量不知道 所以没改
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 04:56 , Processed in 0.036423 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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