搜索
查看: 7018|回复: 10

关于创建可攻击实体并检测攻击的问题

[复制链接]
发表于 2009-1-2 19:40:40 | 显示全部楼层 |阅读模式 来自 中国–广东–中山
可不可以在游戏中建立一个实体(是否可见并不重要),这个实体可以被开枪攻击,而且被攻击的时候会有提示?
又或者说,可不可以检测玩家瞄准某个特定坐标的行为?
 楼主| 发表于 2009-1-2 23:08:22 | 显示全部楼层 来自 中国–广东–中山
本帖最后由 apocalyptic 于 2009-1-2 23:12 编辑

经过一番努力,我已经建立了实体,也知道了该实体的index,可以做到当某人接触该实体的时候进行提示(例如显示提示信息),但暂时还没有办法让玩家在击中(包括子弹和手雷)该实体的时候进行提示。
回复

使用道具 举报

发表于 2009-1-3 10:18:12 | 显示全部楼层 来自 中国–广东–惠州–惠城区
本帖最后由 zwfgdlc 于 2009-1-3 10:19 编辑

http://forums.alliedmods.net/sho ... 69&postcount=24
先看看,举一反三
回复

使用道具 举报

 楼主| 发表于 2009-1-3 22:53:37 | 显示全部楼层 来自 中国–广东–中山
慢慢看,哈,先谢谢了。
回复

使用道具 举报

 楼主| 发表于 2009-1-3 23:53:30 | 显示全部楼层 来自 中国–广东–中山
http://forums.alliedmods.net/showpost.php?p=621069&postcount=24
先看看,举一反三
zwfgdlc 发表于 2009-1-3 10:18

我用以下的代码建立实体:
  1. public BulidFakePlayer(id)
  2. {
  3.         entity_get_vector(id,EV_VEC_origin,origin[id])
  4.         ent[id] = create_entity("info_target")
  5.         entity_set_string(ent[id],EV_SZ_classname,"fake_player")
  6.         entity_set_model(ent[id],"models/player/vip/vip.mdl")
  7.         entity_set_origin(ent[id],origin[id])
  8.        
  9.         entity_set_int(ent[id], EV_INT_solid, SOLID_TRIGGER)
  10.         entity_set_edict(ent[id], EV_ENT_owner, id)
  11.        
  12.         new Float:mina[3]
  13.         mina[0]=-10.0
  14.         mina[1]=-10.0
  15.         mina[2]=-10.0
  16.         new Float:maxa[3]
  17.         maxa[0]=10.0
  18.         maxa[1]=10.0
  19.         maxa[2]=10.0
  20.         entity_set_size(ent[id],mina,maxa)
  21.        
  22.         client_print(id,print_chat,"ent = %d",ent[id])
  23. }
复制代码
ent[id]只是表示index为id的玩家建立的实体,该实体显示VIP的MODEL,名为fake_player,建立完毕后在聊天区显示该实体的index。我在原有的插件中测试,该实体是存在的,可以触碰的。
但是我使用你提供的插件去测试,在fwPlaybackEvent部分,new ent = get_tr2(0, TR_pHit)中,ent读取到的是-1,pev_valid(ent)获得0,表示该实体不可用。
请问为何出现这种问题?如何解决?谢谢指导!
回复

使用道具 举报

发表于 2009-1-4 23:02:22 | 显示全部楼层 来自 中国–广东–惠州–惠城区
回复

使用道具 举报

 楼主| 发表于 2009-1-5 18:01:29 | 显示全部楼层 来自 中国–广东–中山
本帖最后由 apocalyptic 于 2009-1-5 18:12 编辑

距离胜利还差最后一步了。
  1. RegisterHam(Ham_Killed,     "func_breakable",  "func_Ham_Killed_Player")
  2. RegisterHam(Ham_TakeDamage, "func_breakable" , "func_Ham_TakeDamage")
复制代码
这两个都可以运行,可以检测破坏实体和实体消亡的事件。但似乎只对地图中的原有实体有效,对后来加入的实体(例如我建立的假人)无效,不管假人的classname是func_breakable这类普通的classname(例如cs_assault里面的玻璃和通风管盖子)还是fake_player这类自定义的classname,都无法检测到针对它的破坏动作(但可以检测到针对地图中原有func_breakable实体的破坏)。
我怀疑错误其实出在我建立实体的时候设置的下列实体属性,麻烦你帮我看看,谢谢!
  1. //建立实体
  2. ent[id] = create_entity("info_target")
  3. //设置classname
  4. entity_set_string(ent[id],EV_SZ_classname,"func_breakable")
  5. //设置外观模型
  6. entity_set_model(ent[id],"models/scientist.mdl")
  7. //设置坐标
  8. Vector[id][2]=Vector[id][2]-32
  9. entity_set_origin(ent[id],Vector[id])
  10. //固体属性
  11. entity_set_int(ent[id], EV_INT_solid, 3)
  12. //生命值
  13. entity_set_float(ent[id],EV_FL_health,100.00)
  14. //生命最大值
  15. entity_set_float(ent[id],EV_FL_max_health,100.00)
  16. //攻击伤害
  17. entity_set_float(ent[id],EV_FL_takedamage,1.0)
  18. //实体体积
  19. new Float:mina[3]
  20. mina[0]=-10.0
  21. mina[1]=-10.0
  22. mina[2]=0.0
  23. new Float:maxa[3]
  24. maxa[0]=10.0
  25. maxa[1]=10.0
  26. maxa[2]=72.0
  27. entity_set_size(ent[id],mina,maxa)
复制代码
补充一下,一般的func_breakable实体被枪击之后,不会被打穿(即其背后的墙壁不出现弹孔),但我建立的是可以被打穿的。
回复

使用道具 举报

发表于 2009-1-5 23:22:02 | 显示全部楼层 来自 中国–广东–深圳
本帖最后由 Nimo 于 2009-1-5 23:23 编辑

SOLID_BBOX
回复

使用道具 举报

发表于 2009-1-5 23:24:25 | 显示全部楼层 来自 中国–广东–深圳
你的EV_INT_solid不要设置成3
设置成2(SOLID_BBOX)看看,应该是实体的entry
回复

使用道具 举报

发表于 2009-1-5 23:27:09 | 显示全部楼层 来自 中国–广东–深圳
但暂时还没有办法让玩家在击中(包括子弹和手雷)该实体的时候进行提示。 ...
apocalyptic 发表于 2009-1-2 23:08


在think或者touch里面检测entry就可以判断是否是被子弹/手雷hit到了
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

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