引用 | 編輯
弒血
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 |