引用 | 编辑
弑血
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: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 |
引用 | 编辑
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 |