NPC出现问题!!

Home Home
引用 | 编辑 弑血
2012-09-23 11:47
楼主
推文 x0
上次 请教了 husano&HsK大大他们 BOT攻击NPC问题之后~

问题出现了,我也不知道 怎么去解,请求大大帮我一把表情 谢谢表情

       new id = -1
       new Float:vec[3]
       new ent = find_ent_by_class(-1, "demon_ai")
       pev(ent, pev_origin, vec)
       while((id = engfunc(EngFunc_FindEntityInSphere,id,vec,9999.0)))
       {
           new classname[32]
           pev(ent,pev_classname,classname,31)
           if (equal(classname, "demon_ai"))
           {
           //使BOT面向NPC的指令
           new Float:angle[3]
           aim_at_origin(id, vec, angle)
           angle[0] = 0.0
           entity_set_vector(id, EV_VEC_angles, angle)
        }
我用此设定给BOT 可是...NPC周围的建筑物,会朝着NPC移动..(傻眼)!!!

有没有什么办法? 让target不会朝着NPC。
我也试着使用 is_user_alive(id)过。可是...每当有人死亡的时候。BOT并不再继续面向NPC!!!
救救我!!!表情

献花 x0
引用 | 编辑 HsK
2012-09-23 13:35
1楼
  
上次给你那段应该没太大问题的..

献花 x0
引用 | 编辑 HsK
2012-09-23 13:42
2楼
  
new ent, Float:botOrigin[3], Float:view_ofs[3];  
pev(id, pev_origin, botOrigin);
pev(id, pev_view_ofs, view_ofs);
xs_vec_add(botOrigin, view_ofs, botOrigin); // 取得bot眼部 origin

while ((pev_valid(ent = fm_find_ent_by_class(ent, "npc_classname")))) // 取得 npc_classname id
{
  new Float:origin[3];
  pev(ent, pev_origin, origin); // 取得 npc origin

  engfunc(EngFunc_TraceLine, botOrigin, origin, 1, id, 0); // bot眼部origin 和 npc origin 的一线直线
  new Float:fraction;
  get_tr2(0, TR_flFraction, fraction);
  if (fraction == 1.0 || get_tr2(0, TR_pHit) == ent) // 如果 bot 可看到 npc
  {
      get_tr2(0, TR_vecEndPos, origin); // origin 为看到 npc 的最终 origin
      //执行攻击指令
      break;
  }
  else // 如果 bot 不可从npc origin看到 npc, 进行小量修复
  {
      for (new i = 0; i < 5; i++)
      {
          new Float:mins[3], Float:maxs[3];
          pev(ent, pev_mins, mins);
          pev(ent, pev_maxs, maxs);
          pev(ent, pev_origin, origin);

          // 随机看看 npc entity 的其他点
          origin[0] += random_float (mins[0], maxs[0]);
          origin[1] += random_float (mins[1], maxs[1]);
          origin[2] += random_float (mins[2], maxs[2]);    

          engfunc(EngFunc_TraceLine, botOrigin, origin, 1, id, 0);    
          get_tr2(0, TR_flFraction, fraction);
          if (fraction >= 1.0 && get_tr2(0, TR_pHit) == ent) // 如果 bot 可看到 npc
          {
              get_tr2(0, TR_vecEndPos, origin);
              //执行攻击指令
              break;
          }
      }
  }
}

献花 x0
引用 | 编辑 弑血
2012-09-23 16:13
3楼
  
HsK大大
抱歉喔 表情
你的我有加入了,可是 没有效果。
不知道 为什么 表情

献花 x0
引用 | 编辑 HsK
2012-09-23 16:37
4楼
  
下面是引用 s8720419 于 2012-09-23 16:13 发表的 : 到引言文
HsK大大
抱歉喔 表情
你的我有加入了,可是 没有效果。
不知道 为什么 表情




上次说过


未test
有错自己修复......




这只是概念 xDD''

献花 x1
引用 | 编辑 弑血
2012-09-24 11:04
5楼
  
修改完成 表情

献花 x0
引用 | 编辑 husano896
2012-09-26 18:00
6楼
  
下面是引用 s8720419 于 2012-09-23 11:47 发表的 NPC出现问题!!: 到引言文
(吃)




new id = -1
new Float:vec[3]
new ent = find_ent_by_class(-1, "demon_ai")
pev(ent, pev_origin, vec)
while((id = engfunc(EngFunc_FindEntityInSphere,id,vec,9999.0)))
嗯...这段看的出来是以NPC为主 下去让在NPC周围的BOT侦测




但是有个小问题 ent的ID根本未改变 所以只要NPC存在
if (equal(classname, "demon_ai")) 这段判定式百分之百成立


写法应该是


复制程式
while((id = engfunc(EngFunc_FindEntityInSphere,id,vec,9999.0)))
{
 if (is_user_connected(id) && is_user_bot(id) && is_user_alive(id))
 {
  //使转头的指令(指令的使用目标为ent)
 }
}


献花 x1