找回密码
 点一下
查看: 2421|回复: 18

重发不是徒劳的,目的是讨论[光环]这个东西

  [复制链接]
发表于 2008-1-18 02:57:14 | 显示全部楼层 |阅读模式
效果果然比我先前弄那个强多了
应该是再没有什么问题了吧  

纠正一个误区
经过我的测试  
光环这种技能是 单位进入范围马上就会获得Buff  而单位离开范围并不会马上失去Buff

这个改版我是照 朱朱 的方法改的 在范围内添加假的Buff技能  效果很可观哦!

重生光环(改一).w3x

22 KB, 下载次数: 36

 楼主| 发表于 2008-1-18 03:01:07 | 显示全部楼层
问题果然是旧的不去新的不来

依照现在这个办法改了以后才发现
原来利用单位之间的距离来判断Buff的存在与否是个很错误的方法
尤其是在影响的单位多了的情况下 选取范围内的多个单位到触发英雄的距离
貌似一个变量是不行的吧。。
刚才我试过了 如果把小兵分两波 法师来回走一躺 两边总有几个技能效果不消失的……

饿。。这个技能貌似无法再这样做了
得换个思路 比如说 既然是光环 就让它和官方的光环一样有点延迟怎么样?
用普通的光环Buff判断技能的存在吧……
回复

使用道具 举报

发表于 2008-1-18 04:42:21 | 显示全部楼层
引用第1楼小滴于2008-01-18 03:01发表的  :
问题果然是旧的不去新的不来

依照现在这个办法改了以后才发现
原来利用单位之间的距离来判断Buff的存在与否是个很错误的方法
尤其是在影响的单位多了的情况下 选取范围内的多个单位到触发英雄的距离
.......
其实,偶的目的也是让它有延迟的.
(我上面所说的东西,只是我一时胡思乱想,楼主真的当真了啊...)
我说的那些东西,有一个很严重的Bug的..(假设光环影响为600)
比如,单位X,站在英雄A,和B之间.离A距离600,离B距离400.而A,B都有光环技能.
A----(600)------X---(400)---B
这样呢,X在光环作用之下.
之后X向B移动,比如走到了
A----(601)-----X---(399)---B
这时,触发了单位X远离A的事件,并没有触发单位X接近B的事件,于是,
X身上的光环白白消失了.

//算了,我也做一个去吧,再这样渣下去不是好事.
回复

使用道具 举报

发表于 2008-1-18 05:09:28 | 显示全部楼层
很好很好`
回复

使用道具 举报

发表于 2008-1-18 08:57:26 | 显示全部楼层
如果有兴趣,且不嫌我的代码太乱的话,看看这个吧,或许有些帮助.
//这里面多数函数非标准函数,都是我自己的函数库中提供的...
不过意思明显,也很好猜出来.
[codes=jass]
//! import zhuzhu.j
function  add_timed_ability  takes nothing returns nothing
    //读取数据:  英雄,光环影响单位组,魔法书,真正技能,范围,友敌,等级
    local unit     zhuzhu_aura_hero=GetTimerUnit("aura_hero")
    local group    zhuzhu_aura_group=GetTimerGroup("aura_group")  
    local integer  book=GetTimerInt("aura_book")
    local integer  abilityid=GetTimerInt("aura_abilityid")
    local integer  buffability=GetTimerInt("buffability")
    local real     zhuzhu_aura_r=GetTimerReal("aura_r")
    local boolean  allay=GetTimerBool("aura_allay")
    local integer  aura_level=GetTimerInt("aura_level")
   
    local real unit_x=GetUnitX(zhuzhu_aura_hero)
    local real unit_y=GetUnitY(zhuzhu_aura_hero)

    //把周围没有进行设置的单位移入影响单位组中,并添加技能
    set   gt_group=CreateGroup()
    call  GroupEnumUnitsInRange(gt_group,unit_x,unit_y,zhuzhu_aura_r,null)
    loop
        set gt_unit=FirstOfGroup(gt_group)
        exitwhen gt_unit==null
        call GroupRemoveUnit(gt_group,gt_unit)
        //只对没有被标记的英雄处理
        if  GetInt(gt_unit,I2S(abilityid))==0 then
           if  IsPlayerAlly( GetOwningPlayer(gt_unit),GetOwningPlayer(zhuzhu_aura_hero))==allay and GetInt(gt_unit,I2S(abilityid))<=0 then
                call GroupAddUnit(zhuzhu_aura_group,gt_unit)
                call UnitAddAbility(gt_unit,book)
                call UnitAddAbility(gt_unit,abilityid)
                call UnitAddAbility(gt_unit,buffability)
           endif
           if IsPlayerAlly( GetOwningPlayer(gt_unit),GetOwningPlayer(zhuzhu_aura_hero) )==allay then
                call SetUnitAbilityLevel(gt_unit,abilityid,aura_level)
                call SetUnitAbilityLevel(gt_unit,buffability,aura_level)
                call SetInt(gt_unit,I2S(abilityid),3)
           endif
        endif
   endloop
   call DestroyGroup(gt_group)
   
   set gt_group=CloneGroup(zhuzhu_aura_group)
   loop
       set gt_unit=FirstOfGroup(gt_group)
       exitwhen gt_unit==null
        if  GetInt(gt_unit,I2S(abilityid))<=0 then
           call UnitRemoveAbility(gt_unit,book)
           call UnitRemoveAbility(gt_unit,abilityid)
           call UnitRemoveAbility(gt_unit,buffability)
           call GroupRemoveUnit(zhuzhu_aura_group,gt_unit)
           call FlushKey(gt_unit,I2S(abilityid))
       else
           call AddInt(gt_unit,I2S(abilityid),-1)
       endif
       call GroupRemoveUnit(gt_group,gt_unit)
    endloop
    call DestroyGroup(gt_group)
endfunction


function zhuzhu_aura_conditions takes nothing returns boolean
    local unit     zhuzhu_aura_hero
    local timer    zhuzhu_aura_timer
    local group    zhuzhu_aura_group
    local integer  aura
   
    set aura=GetTriggerInt("aura_aura")
    set zhuzhu_aura_hero=GetTriggerUnit()

    //第一次学习技能时有效
    if  GetLearnedSkill() == aura and GetUnitAbilityLevel(zhuzhu_aura_hero,aura)==1 then
     
        set zhuzhu_aura_hero=GetTriggerUnit()
        set zhuzhu_aura_timer=CreateTimer()
        call TimerStart(zhuzhu_aura_timer,1,true,function add_timed_ability)
        set  zhuzhu_aura_group=CreateGroup()
        
       //读取并设置数据:  英雄,光环影响单位组,魔法书,真正技能,buff范围,友敌
        call SetUnit(zhuzhu_aura_timer,"aura_hero",zhuzhu_aura_hero)
        call SetGroup(zhuzhu_aura_timer,"aura_group",zhuzhu_aura_group)
        call SetInt(zhuzhu_aura_timer,"aura_book",GetTriggerInt("aura_book"))
        call SetInt(zhuzhu_aura_timer,"aura_abilityid",GetTriggerInt("aura_abilityid"))
        call SetInt(zhuzhu_aura_timer,"aura_buffability",GetTriggerInt("buffability"))
        call SetReal(zhuzhu_aura_timer,"aura_r",GetTriggerReal("aura_r"))
        call SetBool(zhuzhu_aura_timer,"aura_allay",GetTriggerBool("aura_allay"))
        //标记这个英雄
        call SetTimer(zhuzhu_aura_hero,I2S(GetTriggerInt("aura_abilityid")),zhuzhu_aura_timer)
    else
        set zhuzhu_aura_timer=GetTimer(zhuzhu_aura_hero,I2S(GetTriggerInt("aura_abilityid")))
    endif
    //光环等级升级
    if  GetLearnedSkill() == aura then
         call SetInt(zhuzhu_aura_timer,"aura_level",GetUnitAbilityLevel(zhuzhu_aura_hero,aura))
    endif
    return true
endfunction

function zhuzhu_aura_init takes integer aura,integer book,integer abilityid,integer buffability,real r,boolean allay returns nothing
      local trigger zhuzhu_aura
      local integer index
      
      //禁止这个魔法书
      set  index=0
      loop
            exitwhen index>15
           call SetPlayerAbilityAvailable(Player(index),book,false)
            set  index=index+1
      endloop
      
      set  zhuzhu_aura= CreateTrigger(  )
      call TriggerRegisterAnyUnitEventBJ( zhuzhu_aura, EVENT_PLAYER_HERO_SKILL )
      call TriggerAddCondition( zhuzhu_aura, Condition(function zhuzhu_aura_conditions ))
      
      //存储数据: 光环技能,魔法书,真正技能,范围,友敌
      call SetInt(zhuzhu_aura,"aura_aura",aura)
      call SetInt(zhuzhu_aura,"aura_book",book)
      call SetInt(zhuzhu_aura,"aura_abilityid",abilityid)
      call SetInt(zhuzhu_aura,"aura_buffability",buffability)
      call SetReal(zhuzhu_aura,"aura_r",r)
      call SetBool(zhuzhu_aura,"aura_allay",allay)
endfunction

function InitAura takes integer abilityid,integer book,integer buffability,real r,boolean allay returns nothing
     call zhuzhu_aura_init(abilityid,book,abilityid,buffability,r,allay)
endfunction
[/codes]
回复

使用道具 举报

发表于 2008-1-18 13:32:02 | 显示全部楼层
就算您修改的再好, 这BT技能的采用率也底得可以吧...   ?为什么要重发一贴呢.?
回复

使用道具 举报

发表于 2008-1-18 16:53:14 | 显示全部楼层
做的很好..可是还是有个问题那问题已经在你另外那帖里说过了。不过值得鼓励下..
回复

使用道具 举报

发表于 2008-1-18 21:24:43 | 显示全部楼层
[quote]引用第5楼沉默の罪恶于2008-01-18 13:32发表的  :
就算您修改的再好, 这BT技能的采用率也底得可以吧...   

   今日发帖排行榜
1     trigger     104
2     沉默の罪恶     85
3     黑暗灵蛇     32
4     灼眼のシャナ     20
5     迷途滴羊羔     18
回复

使用道具 举报

发表于 2008-1-18 21:31:55 | 显示全部楼层
楼主初来至此,在技能制作领域很有独特见解
再说,光环技能的制作,本来都是类似的东西.  这一个光环做好了,别的什么样的光环也就都可以做了.
如果说这个光环没用,那么和说所有光环都没有用,区别不是很大.

//我以前还做过一个弱智光环呢. 好像也很好玩的.
//站在光环范围里的敌方单位将快速损失魔法.如果是英雄,同时智力还会下降.
//智力下降的数量,与离光环英雄的距离,和光环技能的等级有关.
//也就是技能等级越高,离英雄越近,智力下降得就越严重.
回复

使用道具 举报

发表于 2008-1-18 21:55:52 | 显示全部楼层
朱朱姐姐 你故意贴出来气我的说.?
回复

使用道具 举报

发表于 2008-1-18 22:03:46 | 显示全部楼层

//我认错了......
//最近研究佛法研究呆了,差点没步李晓旭后尘...
回复

使用道具 举报

发表于 2008-1-18 22:40:18 | 显示全部楼层
这是一个重生循环检查buff的函数。

[jass]function RebornAura_Unit_Looping takes nothing returns nothing
   local integer tmIndex = GetTimerIndex(GetExpiredTimer())
   local unit u = SYS_TimerData_U00[tmIndex]
   local integer buf = SYS_TimerData_I00[tmIndex]
   local integer abl = SYS_TimerData_I01[tmIndex]
   local boolean HasBuf = GetUnitAbilityLevel(u,buf)>0
   local boolean HasAbl = GetUnitAbilityLevel(u,abl)>0
   local boolean UnitAlive = GetUnitState(u,UNIT_STATE_LIFE)>0.00
   if(HasBuf and not(HasAbl))then
      call UnitAddAbility(u,abl)
      call TimerStart(GetExpiredTimer(),0.03,false,function RebornAura_Unit_Looping)
   elseif(not(HasBuf)and HasAbl and UnitAlive)then
      call UnitRemoveAbility(u,abl)
      call ReleaseTimer(GetExpiredTimer())
   elseif(not(HasBuf) and not(HasAbl) and UnitAlive)then
      call ReleaseTimer(GetExpiredTimer())
   else
      call TimerStart(GetExpiredTimer(),0.03,false,function RebornAura_Unit_Looping)
   endif
   set u = null
endfunction

function RebornAura_Unit_Start takes unit u,integer buf,integer abl returns nothing
   local integer tmIndex
   local boolean HasBuf = GetUnitAbilityLevel(u,buf)>0
   local boolean HasAbl = GetUnitAbilityLevel(u,abl)>0
   if(not(HasBuf))then
      set tmIndex = GetTimerIndex(GetTimer())
      set SYS_TimerData_U00[tmIndex] = u
      set SYS_TimerData_I00[tmIndex] = buf
      set SYS_TimerData_I01[tmIndex] = abl
      call UnitAddAbility(u,abl)
      call TimerStart(SYS_Timer[tmIndex],1.00,false,function RebornAura_Unit_Looping)
   endif
   set u = null
endfunction

function Trig_RebornAura_Conditions takes nothing returns boolean
    if(GetSpellAbilityId()=='A000')then
        return true
    endif
    return false
endfunction

function Trig_RebornAura_Actions takes nothing returns nothing
    call RebornAura_Unit_Start(GetSpellTargetUnit(),'BUhf','AOr3')
endfunction

//===========================================================================
function InitTrig_RebornAura takes nothing returns nothing
    local trigger tg
    set tg = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(tg, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition(tg, Condition( function Trig_RebornAura_Conditions ) )
    call TriggerAddAction(tg, function Trig_RebornAura_Actions)
endfunction[/jass]
回复

使用道具 举报

 楼主| 发表于 2008-1-19 16:48:31 | 显示全部楼层
Jass盲只有我一个?!
回复

使用道具 举报

发表于 2008-1-19 17:02:29 | 显示全部楼层
引用第12楼小滴于2008-01-19 16:48发表的  :
Jass盲只有我一个?!
你不是一个人在战斗.
回复

使用道具 举报

 楼主| 发表于 2008-1-19 17:31:08 | 显示全部楼层
  不懂Jass就好象没有武器的战士啊     [s:129]  [s:129]
回复

使用道具 举报

发表于 2008-1-19 18:08:44 | 显示全部楼层
引用第13楼朱朱于2008-01-19 17:02发表的  :

你不是一个人在战斗.

恩啊~是很多很多人在战斗。。会JASS的少之又少..
对我而言JASS没什么用,因为我们学WE的大多都是J盲!
回复

使用道具 举报

发表于 2008-1-20 00:51:12 | 显示全部楼层
- -我的意见是检查范围内有光环buff但是没有重生技能的单位

- 给他们绑定一个Timer,当单位失去buff的时候就删掉重生不管了,这只需要检查buff
回复

使用道具 举报

发表于 2008-1-20 14:18:29 | 显示全部楼层
JASS对我而言~就是中国人说英语~表达方式不同~表达目的相同~
回复

使用道具 举报

发表于 2008-1-20 19:45:26 | 显示全部楼层
本来一样,只是用起来方便与否。

实际上jass直接写比触发器编辑器用起来顺手多了~

只是很多人还不习惯计算机那一套,觉得触发器编辑器那种没什么逻辑的东西方便看清楚。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 05:50 , Processed in 0.139933 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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