public SentryThink(ent) { if(!is_valid_ent(ent)) return PLUGIN_CONTINUE; static Float:SentryOrigin[3]; new id, target, firemods, sentryid, Float:TargetOrigin[3]; id = entity_get_int(ent, EV_INT_iuser2); target = entity_get_edict(ent, EV_ENT_euser1); firemods = entity_get_int(ent, EV_INT_iuser1); sentryid = get_sentry_id_by_ent(id, ent); if(pev_valid(ent)) entity_get_vector(ent, EV_VEC_origin, SentryOrigin); if(pev_valid(target)) entity_get_vector(target, EV_VEC_origin, TargetOrigin); if(gTurretsAmmo[id][sentryid] <= 0 ) { entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1); return PLUGIN_CONTINUE } if(firemods && pev_valid(ent)) { if(fm_is_ent_visible(target, ent) && pev_valid(target)) { sentry_turntotarget(ent, SentryOrigin, TargetOrigin); //Formatuje Origin Celu do calkowitosci static torigin[3] torigin[0] = floatround(TargetOrigin[0]) torigin[1] = floatround(TargetOrigin[1]) torigin[2] = floatround(TargetOrigin[2]+5.0) //- || - Wiezyczki do calkowitosci static sorigin[3] sorigin[0] = floatround(SentryOrigin[0]) sorigin[1] = floatround(SentryOrigin[1]) sorigin[2] = floatround(SentryOrigin[2]+22.5) if(gTurretsType[id][sentryid] == 1) emit_sound(ent, CHAN_AUTO, "TD/firemw.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); if(gTurretsType[id][sentryid] == 2) { switch(random_num(1, 2)) { case 1: emit_sound(ent, CHAN_AUTO, "TD/laser.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); case 2: emit_sound(ent, CHAN_AUTO, "TD/laser2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); } } if(gTurretsType[id][sentryid] == 3) emit_sound(ent, CHAN_AUTO, "TD/plasmamiss.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); //Zadaje Obrazenia "za gracza" new Float:dmg dmg = random_float(float(gTurretsDamage[id][sentryid][0]), float(gTurretsDamage[id][sentryid][1])) ExecuteHamB(Ham_TakeDamage, target, id, id, dmg, DMG_BULLET, 1); gTurretsAmmo[id][sentryid]--; if(gTurretsType[id][sentryid] == 1) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_TRACER); write_coord(sorigin[0]); write_coord(sorigin[1]); write_coord(sorigin[2]); write_coord(torigin[0]); write_coord(torigin[1]); write_coord(torigin[2]); message_end(); //msg_dlight(sorigin, 10, {255, 255, 0}, 3, 2) } else if(gTurretsType[id][sentryid] == 2) { message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) //message begin write_byte(TE_BEAMPOINTS) write_coord(sorigin[0]); write_coord(sorigin[1]); write_coord(sorigin[2]); write_coord(torigin[0]); write_coord(torigin[1]); write_coord(torigin[2]); write_short(gSpriteLaserBeam) // sprite index write_byte(0) // starting frame write_byte(0) // frame rate in 0.1's write_byte(1) // life in 0.1's write_byte( 3 * gTurretsLevel[id][sentryid]) // line width in 0.1's write_byte(1) // noise amplitude in 0.01's if(gTurretsLevel[id][sentryid] == 1) { write_byte(255) // Red write_byte(255) // Green write_byte(255) // Blue write_byte(255) // brightness) } else if(gTurretsLevel[id][sentryid] == 2) { write_byte(0) // Red write_byte(255) // Green write_byte(0) // Blue write_byte(255) // brightness) } else if(gTurretsLevel[id][sentryid] == 3) { write_byte(255) // Red write_byte(255) // Green write_byte(0) // Blue write_byte(255) // brightness) } else if(gTurretsLevel[id][sentryid] == 4) { write_byte(255) // Red write_byte(0) // Green write_byte(0) // Blue write_byte(255) // brightness) } else if(gTurretsLevel[id][sentryid] == 5) { write_byte(0) // Red write_byte(0) // Green write_byte(255) // Blue write_byte(255) // brightness) } write_byte(5) // scroll speed in 0.1's message_end() /* if(gTurretsLevel[id][sentryid] == 1) msg_dlight(sorigin, 10, {255, 255, 255}, 3, 2) if(gTurretsLevel[id][sentryid] == 2) msg_dlight(sorigin, 10, {0, 255, 0}, 3, 2) if(gTurretsLevel[id][sentryid] == 3) msg_dlight(sorigin, 10, {255, 255, 0}, 3, 2) if(gTurretsLevel[id][sentryid] == 4) msg_dlight(sorigin, 10, {255, 0, 0}, 3, 2) if(gTurretsLevel[id][sentryid] == 5) msg_dlight(sorigin, 10, {0, 0, 255}, 3, 2) */ } else if(gTurretsType[id][sentryid] == 3) { message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) //message begin write_byte(TE_BEAMPOINTS) write_coord(sorigin[0]); write_coord(sorigin[1]); write_coord(sorigin[2]); write_coord(torigin[0]); write_coord(torigin[1]); write_coord(torigin[2]); write_short(gSpriteLaserBeam) // sprite index write_byte(0) // starting frame write_byte(0) // frame rate in 0.1's write_byte(1) // life in 0.1's write_byte(15) // line width in 0.1's write_byte(16) // noise amplitude in 0.01's write_byte((255-(15*gTurretsLevel[id][sentryid]))) // Red write_byte((255-(15*gTurretsLevel[id][sentryid]))) // Green write_byte((255-(15*gTurretsLevel[id][sentryid]))) // Blue write_byte(255) // brightness) write_byte(5) // scroll speed in 0.1's message_end() //msg_dlight(sorigin, 10, {255, 255, 255}, 3, 2) } if(gTurretsType[id][sentryid] == 1) { entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.45); } else if(gTurretsType[id][sentryid] == 2) { entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.95); } else if(gTurretsType[id][sentryid] == 3) { entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.15); } return PLUGIN_CONTINUE } else { firemods = 0; entity_set_int(ent, EV_INT_iuser1, 0); entity_set_edict(ent, EV_ENT_euser1, 0); emit_sound(ent, CHAN_AUTO, "TD/sentrygun_stops.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1); } } new enemy if(!pev_valid(enemy) || (get_distance_f(SentryOrigin, TargetOrigin) > gTurretsRange[id][sentryid])) { enemy = getTurretClosestMonster(ent) } if(pev_valid(enemy) && (get_distance_f(SentryOrigin, TargetOrigin) < gTurretsRange[id][sentryid])) { emit_sound(ent, CHAN_AUTO, "TD/sentrygun_starts.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); entity_get_vector(enemy, EV_VEC_origin, TargetOrigin); entity_set_int(ent, EV_INT_iuser1, 1); entity_set_edict(ent, EV_ENT_euser1, enemy); entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1); } if(!firemods) { new controler1 controler1 = entity_get_byte(ent, EV_BYTE_controller1)+1; if(controler1 > 255) controler1 = 0; entity_set_byte(ent, EV_BYTE_controller1, controler1); new controler2 controler2 = entity_get_byte(ent, EV_BYTE_controller2); if(controler2 > 127 || controler2 < 127) entity_set_byte(ent, EV_BYTE_controller2, 127); entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1); } return PLUGIN_CONTINUE } stock bool:UTIL_In_FOV(id, ent) { if((get_pdata_int(id, 510) & (1<<16)) && (Find_Angle(id, ent) > 0.0)) return true; return false; }