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

Jass 初学 技能转换成功

[复制链接]
发表于 2008-3-21 03:19:46 | 显示全部楼层 |阅读模式
Jass 初学 技能转换成功
要求:英雄在指定等级30级可以自动学到某个厉害技能.并在50级提升此技能一个等级.70级也上升
         如果英雄拿到某物品后则转换这个技能,变成另外一个技能,卸下此物品就回到原先的那个技能.
        拿了物品后 转变好的技能如果英雄到50级,也会提升该技能等级.(不是原先那技能)
    卸下物品,则原先的技能也已经提升了.
Jass 如下:
[codes=jass]globals
// Generated
    trigger                 gg_trg_dingfeng            = null
    trigger                 gg_trg_dingfeng1           = null
endglobals

//===========================================================================
// Trigger: dingfeng
//===========================================================================
function Trig_dingfeng_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == GetUnitTypeId(gg_unit_O000_0205) ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng_Func001Func002Func004C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A052', GetTriggerUnit()) == 2 ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'shcw') == false ) ) then
        return false
    endif
    if ( not ( GetHeroLevel(GetTriggerUnit()) >= 70 ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng_Func001Func002C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A052', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'shcw') == false ) ) then
        return false
    endif
    if ( not ( GetHeroLevel(GetTriggerUnit()) >= 50 ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng_Func001C takes nothing returns boolean
    if ( not ( GetHeroLevel(GetTriggerUnit()) >= 30 ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'shcw') == false ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A052', GetTriggerUnit()) < 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng_Actions takes nothing returns nothing
    if ( Trig_dingfeng_Func001C() ) then
        call UnitAddAbilityBJ( 'A052', GetTriggerUnit() )
        call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetOwningPlayer(GetTriggerUnit())) + "领悟了终级技能:|Cff00ff00残月!" ) )
    else
        if ( Trig_dingfeng_Func001Func002C() ) then
            call IncUnitAbilityLevelSwapped( 'A052', GetTriggerUnit() )
            call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetOwningPlayer(GetTriggerUnit())) + "|Cff00ff00残月的等级已经提升了!" ) )
        else
            if ( Trig_dingfeng_Func001Func002Func004C() ) then
                call IncUnitAbilityLevelSwapped( 'A052', GetTriggerUnit() )
                call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetOwningPlayer(GetTriggerUnit())) + "|Cff00ff00残月的等级已经提升了!" ) )
                call DestroyTrigger( GetTriggeringTrigger() )
            else
            endif
        endif
    endif
endfunction

//===========================================================================
function InitTrig_dingfeng takes nothing returns nothing
    set gg_trg_dingfeng = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_dingfeng, EVENT_PLAYER_HERO_LEVEL )
    call TriggerAddCondition( gg_trg_dingfeng, Condition( function Trig_dingfeng_Conditions ) )
    call TriggerAddAction( gg_trg_dingfeng, function Trig_dingfeng_Actions )
endfunction

//===========================================================================
// Trigger: dingfeng1
//===========================================================================
function Trig_dingfeng1_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == GetUnitTypeId(gg_unit_O000_0205) ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng1_Func001Func002Func004C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A054', GetTriggerUnit()) == 2 ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'shcw') == true ) ) then
        return false
    endif
    if ( not ( GetHeroLevel(GetTriggerUnit()) >= 70 ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng1_Func001Func002C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A054', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'shcw') == true ) ) then
        return false
    endif
    if ( not ( GetHeroLevel(GetTriggerUnit()) >= 50 ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng1_Func001C takes nothing returns boolean
    if ( not ( GetHeroLevel(GetTriggerUnit()) >= 30 ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'shcw') == true ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A054', GetTriggerUnit()) < 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_dingfeng1_Actions takes nothing returns nothing
    if ( Trig_dingfeng1_Func001C() ) then
        call UnitAddAbilityBJ( 'A054', GetTriggerUnit() )
        call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetOwningPlayer(GetTriggerUnit())) + "领悟了终级技能:|Cff00ff00冷月!" ) )
    else
        if ( Trig_dingfeng1_Func001Func002C() ) then
            call IncUnitAbilityLevelSwapped( 'A054', GetTriggerUnit() )
            call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetOwningPlayer(GetTriggerUnit())) + "|Cff00ff00冷月的等级已经提升了!" ) )
        else
            if ( Trig_dingfeng1_Func001Func002Func004C() ) then
                call IncUnitAbilityLevelSwapped( 'A054', GetTriggerUnit() )
                call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetOwningPlayer(GetTriggerUnit())) + "|Cff00ff00冷月的等级已经提升了!" ) )
                call DestroyTrigger( GetTriggeringTrigger() )
            else
            endif
        endif
    endif
endfunction

//===========================================================================
function InitTrig_dingfeng1 takes nothing returns nothing
    set gg_trg_dingfeng1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_dingfeng1, EVENT_PLAYER_HERO_LEVEL )
    call TriggerAddCondition( gg_trg_dingfeng1, Condition( function Trig_dingfeng1_Conditions ) )
    call TriggerAddAction( gg_trg_dingfeng1, function Trig_dingfeng1_Actions )
endfunction

//===========================================================================
function InitCustomTriggers takes nothing returns nothing
    call InitTrig_dingfeng(  )
    call InitTrig_dingfeng1(  )
endfunction[/codes]
写好此技能后然后用 [ 工程升级 代码(ANeg) ] 这个技能 编辑 残月,冷月 代码 A052,A054 即可 把工程升级技能编辑到武器(代码:shcw)上 大功告成
此Jass我用在地图中可以当专署武器使用
英雄在升到终极技能后拿到专署武器后终极技能转变成另外更厉害的终极技能.
请高人看下 是否有更加简单的编写程序 请指出.
发表于 2008-3-21 13:10:46 | 显示全部楼层
感觉用触发也能做的。何必定Jass呢。LZ的代码还可以尽量的进行一些优化
回复

使用道具 举报

发表于 2008-3-23 19:57:58 | 显示全部楼层
路过,学习ing~~~
回复

使用道具 举报

发表于 2008-3-24 14:41:56 | 显示全部楼层
那是那是,可以优化。
回复

使用道具 举报

发表于 2008-3-29 11:30:42 | 显示全部楼层
if ( not ( GetUnitAbilityLevelSwapped('A052', GetTriggerUnit()) == 2 ) ) then
            return false
      endif

LZ不厚道哦,这明显是触发写的,转成J的

if ( not  写J的没人会这么写,除非有病
回复

使用道具 举报

发表于 2008-3-29 11:32:12 | 显示全部楼层
有时候还是会的,比如不想写太长的and语句………………
回复

使用道具 举报

发表于 2008-3-29 11:33:33 | 显示全部楼层
猪头大哥你真能圆场,这明显是触发写的

NOT的意思是这条的反意思,一般很少用到,更不可能整个判断都是这种写法,不符合我们的写J习惯
回复

使用道具 举报

发表于 2008-3-29 11:36:55 | 显示全部楼层
这个的确是的,lz那个条件很明显是用T转的(条件语句以及那么多bj函数),但是也不能否定这种可能性嘛~~
再说本来lz说的就是转换嘛~~
对于初学来说,能够做出来已经算不错了嘛~~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 04:32 , Processed in 0.039517 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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