HsK
CCN@HsK

级别: 版主 
版区: CS插件区
x1701
x1108
|
分享:
▲
▼
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; } } } }
|