找回密码
 点一下
查看: 1987|回复: 8

請問dota os的spell steal怎做?

[复制链接]
发表于 2011-7-21 01:47:54 | 显示全部楼层 |阅读模式
如題..........請幫忙
发表于 2011-7-21 01:51:51 | 显示全部楼层
用中文描述,谢谢
回复

使用道具 举报

 楼主| 发表于 2011-7-21 02:38:01 | 显示全部楼层
呃,就是取得目標英雄最後使用的技能
回复

使用道具 举报

发表于 2011-7-21 02:49:54 | 显示全部楼层
引用第2楼陰毒老人于2011-07-21 02:38发表的  :
呃,就是取得目標英雄最後使用的技能
我不知道那个什么spell steal是什么,但是仅仅是“取得目標英雄最後使用的技能”的话可以在英雄选取后为每个英雄作记录,每次使用技能把技能名或ID跟使用的英雄绑定,会J的话可以用hashtable,YD的话有哈希表。。。原版WE的话…………暂时还没想到什么简便的方法,也许可以为每个英雄准备一个变量,每次英雄使用技能赋予对应的变量新值。。

以上是输入指令获取最后使用技能,如果这个是某个英雄的技能的话,把“在英雄选取后为每个英雄作记录”改为该英雄学习这个技能后开始记录,毕竟记录会占效率……
回复

使用道具 举报

发表于 2011-7-21 06:45:27 | 显示全部楼层
skill steal.w3x (14 KB, 下载次数: 33)
如果每个玩家只能有一个英雄的话,可以这样做。
回复

使用道具 举报

发表于 2011-7-21 08:35:23 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-7-21 16:03:52 | 显示全部楼层
啊不能編輯好麻煩=_=好像看懂4樓的了.....
回复

使用道具 举报

发表于 2011-7-21 18:35:03 | 显示全部楼层
  你敢使用编辑功能么  N连是犯法的
回复

使用道具 举报

 楼主| 发表于 2011-7-21 18:37:39 | 显示全部楼层
呃...剛去找hashtable的教學....自己試試弄了個....不過不知道為什麼沒效果.....

globals
  1. globals
  2.     integer   udg_sid        
  3.     hashtable CF_hash = InitHashtable()        
  4. endglobals
复制代码
這是每次施放技能後記錄在hashtable
  1. function Trig___________u_Actions takes nothing returns nothing
  2.     local integer pid = GetPlayerId(GetTriggerPlayer())  
  3.    //取得施放技能的player的playerid...啊..加上注解時才發現..是不是要改成GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
  4.     call SaveAbilityHandle(CF_hash, 0, pid, GetSpellAbility())          //存在hashtable....childkey是playerid....
  5. endfunction
  6. function InitTrig___________u takes nothing returns nothing
  7.     set gg_trg___________u = CreateTrigger()
  8.     call TriggerRegisterAnyUnitEventBJ( gg_trg___________u, EVENT_PLAYER_UNIT_SPELL_EFFECT )
  9.     call TriggerAddAction(gg_trg___________u, function Trig___________u_Actions)
  10. endfunction
复制代码
這是spell steal...
  1. function Trig___________004_Conditions takes nothing returns boolean
  2.     return (GetSpellAbilityId()=='A003')
  3. endfunction
  4. function Trig___________004_Actions takes nothing returns nothing
  5.     local integer pid = GetPlayerId(GetOwningPlayer(GetSpellTargetUnit()))        //取得目標的playerid
  6.     call UnitRemoveAbility(GetTriggerUnit(), udg_sid)                  //先移除上次偷的技能
  7.     set udg_sid = GetHandleId(LoadAbilityHandle(CF_hash, 0, pid))                  
  8.     call UnitAddAbility(GetTriggerUnit(), udg_sid)                       //再取得這次偷的技能
  9. endfunction
  10. function InitTrig___________004 takes nothing returns nothing
  11.     set gg_trg___________004 = CreateTrigger()
  12.     call TriggerRegisterAnyUnitEventBJ( gg_trg___________004, EVENT_PLAYER_UNIT_SPELL_EFFECT )
  13.     call TriggerAddCondition( gg_trg___________004, Condition( function Trig___________004_Conditions ) )
  14.     call TriggerAddAction( gg_trg___________004, function Trig___________004_Actions )
  15. endfunction
复制代码

以上......昨晚才開始找jass相關的教學看看.........所以....有什麼奇怪的錯誤請別見怪...





原來編輯在上面...我在回復,引用那邊看不到...以為沒開放編輯功能






呃...我把call SaveAbilityHandle(CF_hash, 0, pid, GetSpellAbility()) 改成 call SaveInteger(udg_hash, 0, pid, GetSpellAbilityId())

其他再跟著改....就成功了.....- -''''不過還是不懂上面哪裡出錯....是GetHandleId不能用來取得ability的id嗎?



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 00:04 , Processed in 0.136745 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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