apocalyptic 发表于 2009-1-2 19:40:40

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

可不可以在游戏中建立一个实体(是否可见并不重要),这个实体可以被开枪攻击,而且被攻击的时候会有提示?
又或者说,可不可以检测玩家瞄准某个特定坐标的行为?

apocalyptic 发表于 2009-1-2 23:08:22

本帖最后由 apocalyptic 于 2009-1-2 23:12 编辑

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

zwfgdlc 发表于 2009-1-3 10:18:12

本帖最后由 zwfgdlc 于 2009-1-3 10:19 编辑

http://forums.alliedmods.net/showpost.php?p=621069&postcount=24
先看看,举一反三

apocalyptic 发表于 2009-1-3 22:53:37

慢慢看,哈,先谢谢了。

apocalyptic 发表于 2009-1-3 23:53:30

http://forums.alliedmods.net/showpost.php?p=621069&postcount=24
先看看,举一反三
zwfgdlc 发表于 2009-1-3 10:18 http://www.dt-club.net/forum/images/common/back.gif
我用以下的代码建立实体:public BulidFakePlayer(id)
{
        entity_get_vector(id,EV_VEC_origin,origin)
        ent = create_entity("info_target")
        entity_set_string(ent,EV_SZ_classname,"fake_player")
        entity_set_model(ent,"models/player/vip/vip.mdl")
        entity_set_origin(ent,origin)
       
        entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER)
        entity_set_edict(ent, EV_ENT_owner, id)
       
        new Float:mina
        mina=-10.0
        mina=-10.0
        mina=-10.0
        new Float:maxa
        maxa=10.0
        maxa=10.0
        maxa=10.0
        entity_set_size(ent,mina,maxa)
       
        client_print(id,print_chat,"ent = %d",ent)
}ent只是表示index为id的玩家建立的实体,该实体显示VIP的MODEL,名为fake_player,建立完毕后在聊天区显示该实体的index。我在原有的插件中测试,该实体是存在的,可以触碰的。
但是我使用你提供的插件去测试,在fwPlaybackEvent部分,new ent = get_tr2(0, TR_pHit)中,ent读取到的是-1,pev_valid(ent)获得0,表示该实体不可用。
请问为何出现这种问题?如何解决?谢谢指导!

zwfgdlc 发表于 2009-1-4 23:02:22

http://forums.alliedmods.net/showthread.php?t=77821&highlight=aimbot
我明白你想干什么了.

apocalyptic 发表于 2009-1-5 18:01:29

本帖最后由 apocalyptic 于 2009-1-5 18:12 编辑

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

Nimo 发表于 2009-1-5 23:22:02

本帖最后由 Nimo 于 2009-1-5 23:23 编辑

SOLID_BBOX

Nimo 发表于 2009-1-5 23:24:25

你的EV_INT_solid不要设置成3
设置成2(SOLID_BBOX)看看,应该是实体的entry

Nimo 发表于 2009-1-5 23:27:09

但暂时还没有办法让玩家在击中(包括子弹和手雷)该实体的时候进行提示。 ...
apocalyptic 发表于 2009-1-2 23:08 http://www.dt-club.net/forum/images/common/back.gif

在think或者touch里面检测entry就可以判断是否是被子弹/手雷hit到了
页: [1] 2
查看完整版本: 关于创建可攻击实体并检测攻击的问题