Turret don't working with find enemy
Hello everyone, I try making turret but I need making find enemy with targetname
but I get error how I can fix it? :? error in create_tracer(ent, origin_npc, tName) #include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <xs> #include <hl> #include <hl_wpnmod> #define NPC_CLASS "npc_turret" #define NPC_MODEL "models/turret.mdl" #define NPC_HP 350 enum { NPC_IDLE = 0, NPC_ATTACK, NPC_HIT, NPC_ATTACK_GRENADE, NPC_DIE, NPC_TURN } new const g_sound_spawn[] = "turret/tu_deploy.WAV" new const g_sound_fire[] = "turret/tu_fire1.wav" new const g_sound_die[] = "turret/tu_die3.WAV" new const anim_dead[] = {5, 5, 5, 5, 5} new g_blood, g_bloodspray new Float:angles[3] new Float:origin_npc[3], Float:origin_player[3], Float:distansion new player_id new cvar_angles_pitch new cvar_angles_yaw new cvar_angles_roll new Float:y_stupid[3] public plugin_init() { register_plugin("[NPC] Turret", "0.1", "batcon") RegisterHam(Ham_TakeDamage, "info_target", "npc_TakeDamage") register_think(NPC_CLASS,"npc_think") cvar_angles_pitch = register_cvar("npc_angles_pitch", "0") cvar_angles_yaw = register_cvar("npc_angles_yaw", "0") cvar_angles_roll = register_cvar("npc_angles_roll", "0") register_clcmd("turret", "spawn_npc") register_clcmd("round?", "round_end_kill") } public plugin_precache() { engfunc(EngFunc_PrecacheModel, NPC_MODEL) precache_sound(g_sound_spawn) precache_sound(g_sound_die) precache_sound(g_sound_fire) g_blood = precache_model("sprites/blood.spr") g_bloodspray = precache_model("sprites/bloodspray.spr") static mapname[64] get_mapname(mapname, sizeof(mapname)) if(equal(mapname, "horror")) { y_stupid[0] = -1020.0 y_stupid[1] = 54.0 y_stupid[2] = 64.0 } if(equal(mapname, "hlsub5")) { y_stupid[0] = 1100.0 y_stupid[1] = 3140.0 y_stupid[2] = 616.0 } } public menu(id) { new i_Menu = menu_create("\y[Creative NPC]:", "comand_menu") menu_additem(i_Menu, "\y[Creative NPC]", "1", 0) menu_additem(i_Menu, "\y[Delete NPC]", "2", 0) menu_additem(i_Menu, "\y[Delete all NPC]", "3", 0) menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL) menu_display(id, i_Menu, 0) return PLUGIN_HANDLED } public comand_menu(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new s_Data[6], s_Name[64], i_Access, i_Callback menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback) new i_Key = str_to_num(s_Data) switch(i_Key) { case 1: { spawn_npc(id) } case 2: { delet_npc(id) } case 3: { } } menu_destroy(menu) return PLUGIN_HANDLED } public spawn_npc(id) { new g_npc = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) player_id = id angles[0] = get_pcvar_float(cvar_angles_pitch) angles[1] = get_pcvar_float(cvar_angles_yaw) angles[2] = get_pcvar_float(cvar_angles_roll) engfunc(EngFunc_SetModel, g_npc, NPC_MODEL) engfunc(EngFunc_SetSize, g_npc, { -16.0, -16.0, 0.0 }, { 16.0, 16.0, 62.0 }) static Float:Origin[3] Origin[0] = y_stupid[0] Origin[1] = y_stupid[1] Origin[2] = y_stupid[2] entity_set_origin(g_npc, Origin) set_pev(g_npc, pev_classname, NPC_CLASS) set_pev(g_npc, pev_solid, SOLID_SLIDEBOX) set_pev(g_npc, pev_movetype, MOVETYPE_TOSS) set_pev(g_npc, pev_takedamage, DAMAGE_AIM) set_pev(g_npc, pev_health, float(NPC_HP)) set_pev(g_npc, pev_deadflag, DEAD_NO) set_pev(g_npc, pev_nextthink, get_gametime() + 0.1) set_pev(g_npc, pev_angles, angles) set_pev(g_npc, pev_gravity, 35.0) npc_ability(g_npc, NPC_IDLE, 0) entity_set_byte(g_npc, EV_BYTE_controller2, 157) entity_set_byte(g_npc, EV_BYTE_controller3, 157) entity_set_byte(g_npc, EV_BYTE_controller4, 157) Util_PlayAnimation(g_npc, 3) set_pev(g_npc, pev_nextthink, get_gametime() + 0.8) emit_sound(g_npc, CHAN_VOICE, g_sound_spawn, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) } public npc_TakeDamage(victim, weapon, attacker, Float:damage, damagetype) { static classname[32] pev(victim, pev_classname, classname, charsmax(classname)) if(equal(classname, NPC_CLASS)) { if(pev(victim, pev_health) <= 100.0) { npc_ability(victim, NPC_DIE, attacker) } } return HAM_HANDLED } public npc_think(ent) { if(!is_valid_ent(ent)) return FMRES_IGNORED if(pev(ent, pev_iuser4) == 1) return HAM_IGNORED distansion = get_distance_f(origin_npc, origin_player) pev(ent, pev_origin, origin_npc) pev(player_id, pev_origin, origin_player) if(distansion < 670.0) { npc_ability(ent, NPC_ATTACK, player_id) } else { npc_ability(ent, NPC_IDLE, 0) } return FMRES_HANDLED } public npc_ability(ent, ability, index) { switch(ability) { case NPC_IDLE: { Util_PlayAnimation(ent, 2) set_pev(ent, pev_nextthink, get_gametime() + 0.0) } case NPC_DIE: { Util_PlayAnimation(ent, anim_dead[random(sizeof anim_dead)]) set_pev(ent, pev_iuser4, 1) set_pev(ent, pev_solid, SOLID_NOT) set_pev(ent, pev_takedamage, DAMAGE_NO) set_task(8.0, "delet", ent) set_pev(ent, pev_nextthink, get_gametime() + 9999.0) emit_sound(ent, CHAN_VOICE, g_sound_die, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) return HAM_IGNORED } case NPC_TURN: { Util_PlayAnimation(ent, 0) set_pev(ent, pev_nextthink, get_gametime() + 3.0) return FMRES_HANDLED } case NPC_ATTACK: { Util_PlayAnimation(ent, 1) set_pev(ent, pev_nextthink, get_gametime() + 0.15) set_task(0.0, "attackhit", ent) pev(index, pev_origin, origin_player) aim_at_origin(ent, origin_player, angles) angles[0] = 0.0 set_pev(ent, pev_angles, angles) } case NPC_HIT: { static victim static Float:Origin[3], Float:VicOrigin[3] victim = FindClosesEnemy(ent) pev(ent, pev_origin, Origin) pev(victim, pev_origin, VicOrigin) new tName[33] new g_ifinder emit_sound(ent, CHAN_BODY, g_sound_fire, 1.0, ATTN_NORM, 0, PITCH_NORM) pev(ent, pev_targetname, tName, sizeof(tName)-1) if(equal(tName, "npc_barneyzombie")) if (ent != g_ifinder && equal(tName, "npc_barneyzombie")) { create_tracer(ent, origin_npc, tName) } return FMRES_HANDLED } } return HAM_HANDLED } public delet_npc(id) { new ent, body, classname[32]; get_user_aiming(id, ent, body); if(is_valid_ent(ent)) { pev(ent, pev_classname, classname, charsmax(classname)) if(equal(classname, NPC_CLASS)) { remove_entity(ent) } } } public delet(ent) { remove_entity(ent) } public attackhit(ent) { npc_ability(ent, NPC_HIT, player_id) } public round_end_kill(ent) { remove_entity_name(NPC_CLASS) } stock create_tracer(ent, Float:start[3], Float:end[3]) { new start_[3], end_[3] FVecIVec(start, start_) FVecIVec(end, end_) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_TRACER) write_coord(start_[0]) write_coord(start_[1]) write_coord(start_[2]) write_coord(end_[0]) write_coord(end_[1]) write_coord(end_[2]) message_end() static tr, Float:End_Origin[3], Target engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr) get_tr2(tr, TR_vecEndPos, End_Origin) Target = get_tr2(tr, TR_pHit) if(is_user_alive(Target)) { static Float:Origin[3] pev(Target, pev_origin, Origin) // Show some blood :) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) write_coord(floatround(Origin[0])) write_coord(floatround(Origin[1])) write_coord(floatround(Origin[2])) write_short(g_bloodspray) write_short(g_blood) write_byte(70) write_byte(random_num(1,12)) message_end() ExecuteHamB(Ham_TakeDamage, Target, 0, Target, 4.0, DMG_BULLET) } make_bullet(ent, End_Origin) } stock make_bullet(ent, Float:TOrigin[3]) { // Show sparcles message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) write_coord(floatround(TOrigin[0])) write_coord(floatround(TOrigin[1])) write_coord(floatround(TOrigin[2])) write_short(ent) write_byte(41) message_end() } stock Util_PlayAnimation(index, sequence, Float: framerate = 1.0) { set_pev(index, pev_animtime, get_gametime()) set_pev(index, pev_framerate, framerate) set_pev(index, pev_frame, 0.0) set_pev(index, pev_sequence, sequence) } stock aim_at_origin(id, Float:target[3], Float:angles[3]) { static Float:vec[3] pev(id, pev_origin, vec) vec[0] = target[0] - vec[0] vec[1] = target[1] - vec[1] vec[2] = target[2] - vec[2] engfunc(EngFunc_VecToAngles, vec, angles) angles[0] *= -1.0, angles[2] = 0.0 } public npc_turntotarget(ent, Float:Ent_Origin[3], target, Float:Vic_Origin[3]) { if(target) { new Float:newAngle[3] entity_get_vector(ent, EV_VEC_angles, newAngle) new Float:x = Vic_Origin[0] - Ent_Origin[0] new Float:z = Vic_Origin[1] - Ent_Origin[1] new Float:radians = floatatan(z/x, radian) newAngle[1] = radians * (100 / 3.14) if (Vic_Origin[0] < Ent_Origin[0]) newAngle[1] -= 100.0 entity_set_vector(ent, EV_VEC_angles, newAngle) } } stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[]) { new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(id, pev_origin, vOrigin) pev(id, pev_view_ofs,vUp) xs_vec_add(vOrigin,vUp,vOrigin) pev(id, pev_v_angle, vAngle) vAngle[0] = 0.0 angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForw ard) angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight) angle_vector(vAngle,ANGLEVECTOR_UP,vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } public FindClosesEnemy(entid) { new Float:Dist new Float:maxdistance=4000.0 new indexid=0 for(new i=1;i<=get_maxplayers();i++){ if(is_user_alive(i) && is_valid_ent(i) && can_see_fm(entid, i)) { Dist = entity_range(entid, i) if(Dist <= maxdistance) { maxdistance=Dist indexid=i return indexid } } } return 0 } public bool:can_see_fm(entindex1, entindex2) { if (!entindex1 || !entindex2) return false if (pev_valid(entindex1) && pev_valid(entindex1)) { new flags = pev(entindex1, pev_flags) if (flags & EF_NODRAW || flags & FL_NOTARGET) { return false } new Float:lookerOrig[3] new Float:targetBaseOrig[3] new Float:targetOrig[3] new Float:temp[3] pev(entindex1, pev_origin, lookerOrig) pev(entindex1, pev_view_ofs, temp) lookerOrig[0] += temp[0] lookerOrig[1] += temp[1] lookerOrig[2] += temp[2] pev(entindex2, pev_origin, targetBaseOrig) pev(entindex2, pev_view_ofs, temp) targetOrig[0] = targetBaseOrig [0] + temp[0] targetOrig[1] = targetBaseOrig [1] + temp[1] targetOrig[2] = targetBaseOrig [2] + temp[2] engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the had of seen player if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater)) { return false } else { new Float:flFraction get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the body of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] - 17.0 engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the legs of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } } } } } return false } |
Re: Turret don't working with find enemy
Use [PHP] tag please
|
| All times are GMT -4. The time now is 20:54. |
Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.