找回密码
 点一下
查看: 1441|回复: 10

[Jass]关于玩家单位索引号的正确使用方式

[复制链接]
发表于 2015-1-13 17:59:10 | 显示全部楼层 |阅读模式
本帖最后由 RoyalFlare 于 2015-1-18 18:46 编辑

  1. A18
  2.     事件
  3.         单位 - 任意单位进入 (可用地图区域)
  4.     条件
  5.     动作
  6.         触发器 - 为 A5 <预设> 添加事件: (单位 - (触发单位) 接受伤害)
复制代码


  1. A5
  2.     事件
  3.     条件
  4.         (单位所受伤害) 不等于 0.00
  5.         ((伤害来源) 的 蝗虫 技能等级) 等于 1
  6.         ((触发单位) 是 ((伤害来源) 的所有者) 的敌对单位) 等于 TRUE
  7.     动作
  8.         触发器 - 关闭 A18 <预设>
  9.         设置 X_DW = YX[(((伤害来源) 的所有者) 的玩家索引号)]
  10.         如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
  11.             If - 条件
  12.                 ((伤害来源) 的类型) 等于 FrostArrow
  13.             Then - 动作
  14.                 单位 - 命令 X_DW 对 (触发单位) 造成 ((1.00 + ((转换 (X_DW 的英雄等级) 为实数) x 0.20)) x (转换 (智力 对 X_DW (包括 加成)) 为实数)) 点伤害(不是 攻击伤害, 不是远程攻击) 攻击类型: 法术 伤害类型: 普通 武器类型: 无
  15.             Else - 动作
  16.                 不做任何动作
  17.         触发器 - 开启 A18 <预设>
复制代码


  1. function Trig_bdjy1_Conditions takes nothing returns boolean
  2.     if ( not ( GetUnitTypeId(GetAttacker()) == 'E00P' ) ) then
  3.         return false
  4.     endif
  5.     return true
  6. endfunction
  7. function Trig_bdjy1_Actions takes nothing returns nothing
  8.         local real i
  9.         local location dian= GetUnitLoc(GetAttackedUnitBJ())
  10.         local unit bb
  11.     if ((GetRandomInt(1, 30) == 1)) then
  12.         set i = 270.00
  13.         call DisplayTextToPlayer( GetOwningPlayer(GetAttacker()), 0, 0, "冰冻箭雨" )
  14.         set bb=CreateUnitAtLoc( GetOwningPlayer(GetAttacker()),'e006',   dian, GetUnitPropWindowBJ(GetAttacker()) )
  15.         //call CreateNUnitsAtLoc( 1, 'e006', Player(0), dian, GetUnitPropWindowBJ(GetAttacker()) )
  16.         call UnitApplyTimedLifeBJ( 6.00, 'BHwe', bb )
  17.         call IssuePointOrderByIdLoc( bb, 852593, PolarProjectionBJ(dian, 256, i) )
  18.         call EnableTrigger( gg_trg_A5 )
  19.     else
  20.     endif
  21.     call RemoveLocation (dian)
  22.     set dian=null
  23.     set bb=null
  24. endfunction

  25. function InitTrig_bdjy1 takes nothing returns nothing
  26.     set gg_trg_bdjy1 = CreateTrigger(  )
  27.     call TriggerRegisterAnyUnitEventBJ( gg_trg_bdjy1, EVENT_PLAYER_UNIT_ATTACKED )
  28.     call TriggerAddCondition( gg_trg_bdjy1, Condition( function Trig_bdjy1_Conditions ) )
  29.     call TriggerAddAction( gg_trg_bdjy1, function Trig_bdjy1_Actions )
  30. endfunction
复制代码



  1. function Trig_bdjy2_Conditions takes nothing returns boolean
  2.     return ((GetUnitTypeId(GetDyingUnit()) == 'e006'))
  3. endfunction

  4. function Trig_bdjy2_Actions takes nothing returns nothing
  5.     call DisableTrigger(gg_trg_A5)
  6. endfunction
  7. //===========================================================================
  8. function InitTrig_bdjy2 takes nothing returns nothing
  9.     set gg_trg_bdjy2 = CreateTrigger()
  10.     call DisableTrigger(gg_trg_bdjy2)
  11.     call TriggerRegisterAnyUnitEventBJ( gg_trg_bdjy2, EVENT_PLAYER_UNIT_DEATH )
  12.     call TriggerAddCondition(gg_trg_bdjy2, Condition(function Trig_bdjy2_Conditions))
  13.     call TriggerAddAction(gg_trg_bdjy2, function Trig_bdjy2_Actions)
  14. endfunction
复制代码

原谅我用了这麽蠢的TJ混合编辑方式,还没有T转J合并代码 先发上来提问1下,在论坛呆了有1段时间了,对于动态注册事件略有了解,请问我应该如何捕捉伤害来源的所有者的玩家单位索引号(技能多人化)? 根据神之墓地人皇的技能为蓝本模拟的冰冻箭雨技能 移植变量中发现的小问题.貌似我的问题总是得不到解决啊
O}LH$A2W{83RN@W$C`BAJ13.gif
@希瓦 @chyj4747 @ckpig @zhuzeitou @actboy168 @o0木子0o
发表于 2015-1-15 01:43:04 | 显示全部楼层
前面触发就不看了。。

所以你的问题是如何从马甲获取施法单位么?是的话把施法单位绑定给马甲就行了啊
其实我一直没懂玩家单位索引号是个什么东西。。
回复

使用道具 举报

发表于 2015-1-15 11:32:39 | 显示全部楼层
没看你的Code,但是获取伤害来源的玩家索引,用以下代码就好了吧
GetConvertedPlayerId(GetOwningPlayer(GetEventDamageSource()))
// 范围1-16
GetPlayerId(GetOwningPlayer(GetEventDamageSource()))
// 范围0-15
回复

使用道具 举报

 楼主| 发表于 2015-1-15 16:25:06 | 显示全部楼层
在触发器中实现多人化释放技能 必须绑定施法单位的玩家索引号啊
不过在vJass和cJass里写又是另外1回事了
回复

使用道具 举报

发表于 2015-1-21 13:16:46 | 显示全部楼层
多人化和玩家索引有啥必然联系吗?
回复

使用道具 举报

发表于 2015-1-28 15:05:49 | 显示全部楼层
好厉害的样子这个代码有翻译么?看不懂啊
回复

使用道具 举报

发表于 2015-1-28 15:05:55 | 显示全部楼层
好厉害的样子这个代码有翻译么?看不懂啊
回复

使用道具 举报

发表于 2015-2-25 01:36:08 | 显示全部楼层
本帖最后由 bbs887 于 2015-2-25 01:40 编辑

用玩家索引 只是区分 玩家跟玩家之间的单位 ·如果你想做到多玩家并且多单位··那么玩家索引太局限了!!

所以 LZ 可以试着 这个写 比如哈希表 ····
单位获得物品
获得的物品=XXX
储存 call SaveReal(HT,StringHash(   GetHandleId(触发单位)  ),StringHash(  "真实伤害"   ),100)



单位受到攻击事件set damage = LoadReal( HT,StringHash(   GetHandleId(攻击单位)  ),StringHash(  "真实伤害"   )  )

命令 攻击单位 对 被攻击单位 造成 damage 点········伤害


这样做·就可以任何单位都不会冲突了!

回复

使用道具 举报

 楼主| 发表于 2015-2-25 16:00:19 | 显示全部楼层
@bbs887 我个人习惯用Return Bug+GameCache...
HashTable不熟悉

点评

用法一样的啊。。  详情 回复 发表于 2015-2-25 16:45
回复

使用道具 举报

发表于 2015-2-25 16:45:22 | 显示全部楼层
RoyalFlare 发表于 2015-2-25 16:00
@bbs887 我个人习惯用Return Bug+GameCache...
HashTable不熟悉

用法一样的啊。。
回复

使用道具 举报

发表于 2015-2-25 17:51:58 来自手机 | 显示全部楼层
看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 22:01 , Processed in 0.304401 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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