// Invisibility /* I will make it so... Place ables... (prox detectors) make players give off a sprite on them (only if they glow) possiablely help blinding them detectordetectordetectordetector detector detector detector detector MOTION DETECTOR!!! WOO #define TE_BEAMFOLLOW 22 // create a line of decaying beam segments until entity stops moving // short (entity:attachment to follow) // short (sprite index) // byte (life in 0.1's) // byte (line width in 0.1's) // byte,byte,byte (color) // byte (brightness) #define TE_KILLBEAM 99 // kill all beams attached to entity // short (entity) #define TE_KILLPLAYERATTACHMENTS 125 // will expire all TENTS attached to a player. // byte (entity index of player) */ #define DEDICATED 0 #include #include //#include #define SLOW_SPEED 100.0 #define DETECTOR_RANGE 1000 #define DETECTOR_COST 200 #define MAX_USES_SOUND 10 #define MAX_USES_MOTION 5 #define MAX_PLANTABLE 1 // each player can have1 //#define ULTIMATE_TIME 20 new bool:PlayerInvis[33] // //new bool:PlayerDied[33] //new Float:PlacedObject[2][3] // 0 = origin, 1 = target. 3 = coords // new bool:taskset new bool:task2 new bool:PlayerPlanted[33] new bool:PlayerDied[33] new PlacedObject[33][4]// id, xyztruefalse new bool:PlayerDetecter[33]// do you own a detecter? new bool:PlayerDetected[33] new bool:PlayerLined[33] new bool:PlayerProtected[33] new bool:PlayerProtectedJammer[33] new PlayerDetecterUses[33] // uses left new PlayerDetecterType[33] // what kind do you have. //1 = sound //2 = motion //3 = Jammer //4 = TeamJammer //5 = CloakKiller //6 = PlaceAble //all jammers are not used right now new bool:ultimateused[33] new bool:lastroundended new gmsgShake new beam new Float:MaxSpeedDefault = 240.0 public plugin_init() { register_plugin("The Invisable War","0.2","Impute") register_cvar("amx_invis_range","600") register_cvar("amx_place_range","300") register_clcmd("ultimate","make_invis",-1,"ultimate") register_clcmd("buy_detector","detectormenu",ADMIN_USER,"detectormenu ( opens a menu ) ") register_menucmd(register_menuid("\yBuy Item"),1023,"buy_detector") //register_clcmd("say","handle_say",ADMIN_USER,"say give .") register_clcmd("detect","detect",-1,"detect") register_event("DeathMsg","death","a") register_event("CurWeapon","change_weapon","be","1=1") register_event("ResetHUD","new_round","bc") register_event("SendAudio","end_round","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw") gmsgShake = get_user_msgid("ScreenShake") //gmsgFade = get_user_msgid("ScreenFade") //register_clcmd("amx_uninvis","admin_uninvis",-1,"amx_uninvis ") set_task(3.0,"ShowStatus",1) task2 = false taskset = false return PLUGIN_CONTINUE } public plugin_precache() { precache_sound("ambience/particle_suck1.wav") precache_sound("ambience/port_suckout1.wav") precache_sound("ambience/tu_ping.wav") precache_sound("ambience/hawk1.wav") precache_sound("x/x_shoot1.wav") beam = precache_model("sprites/laserbeam.spr") return PLUGIN_CONTINUE } //======================================================================================= //======================================================================================= public sqrt(num) { new div = num new result = 1 while (div > result) { div = (div + result) / 2 result = num / div } return div } public resetultimate(parm[2]){ new id = parm[0] ultimateused[id]=false //reseting[id]=false } public resetultimatejam(parm[2]){ new id = parm[0] ultimateused[id]=false PlayerProtected[id] = false //reseting[id]=false } public end_round() lastroundended = true public new_round(){ if(taskset) remove_task(1337) //task2=false taskset = false if (lastroundended){ new players[32] new player_num get_players(players, player_num) new id for(new i = DEDICATED; i < player_num; i++) { id = players[i] if(PlayerDied[id]) PlayerDetecterType[id] = 0 if(PlayerInvis[id] == true) { PlayerInvis[id] = false client_print(id,print_chat,"Auto-deactivated(new round) of your cloaking.") } PlayerDetected[id] = false PlayerPlanted[id] = false PlayerLined[id] = false PlayerProtected[id] = false } } } public client_connect(id){ PlayerInvis[id] = false PlayerDetecter[id] = false PlayerDetected[id] = false PlayerDetecterType[id] = 0 PlayerPlanted[id] = false PlayerProtected[id] = false //MaxSpeedDefault = get_user_maxspeed(id) return PLUGIN_CONTINUE } public client_disconnect(id){ PlayerInvis[id] = false PlayerDetecter[id] = false PlayerDetected[id] = false // PlayerHasPlaced[id] = false return PLUGIN_CONTINUE } public death() { new id = read_data(2) PlayerInvis[id] = false if (PlayerDetecter[id] == true) PlayerDetecter[id] = false if (PlayerDetected[id] == true) PlayerDetected[id] = false //PlayerHasPlaced[id] = false // all plantablse stay in place after death too. } public ShowStatus() { new players[32] new numberofplayers new id new team new i new j new pos = 0 new menu_body[512] //native set_hudmessage(red=200, green=100, blue=0, Float:x=-1.0, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2,channel=4); set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 1.0, 1.0, 0.1, 0.1, 4) get_players(players, numberofplayers, "a") for (i = 0; i < numberofplayers; ++i) { id = players[i] pos = 0 pos += format(menu_body[pos], 511-pos, ":: Status: ") if (PlayerInvis[id]) pos += format(menu_body[pos], 511-pos, "Cloaked,") else pos += format(menu_body[pos], 511-pos, "Uncloaked,") pos += format(menu_body[pos], 511-pos, " Item: ") if (!PlayerDetecter[id]) { switch(PlayerDetecterType[id]) { case 1: pos += format(menu_body[pos], 511-pos, " Ping,") case 2: pos += format(menu_body[pos], 511-pos, " Motion,") case 3: pos += format(menu_body[pos], 511-pos, " PDJ,") case 4: pos += format(menu_body[pos], 511-pos, " DDJ,") case 5: pos += format(menu_body[pos], 511-pos, " Cloak Killer,") case 6: pos += format(menu_body[pos], 511-pos, " PMD") default: pos += format(menu_body[pos], 511-pos, " No Item,") } } else pos += format(menu_body[pos], 511-pos, " No Item," pos += format(menu_body[pos], 511-pos, " Protection: ") if (PlayerProtected[id]) pos += format(menu_body[pos], 511-pos, " Protected") else if(PlayerProtectedJammer[id]) pos += format(menu_body[pos], 511-pos, " Jammer Field") else pos += format(menu_body[pos], 511-pos, " None") pos += format(menu_body[pos], 511-pos, " ::") show_hudmessage(id, menu_body) } set_task(1.0,"ShowStatus",1) return PLUGIN_HANDLED } //======================================================================================= //======================================================================================= public detectormenu(id){ if(!is_user_alive(id)) return PLUGIN_HANDLED if(PlayerDetecter[id] == true) { client_print(id,print_chat,"You already have a detector.") // return PLUGIN_HANDLED } new pos = 0 new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<9) new menu_body[512] pos += format(menu_body[pos], 511-pos, "\yBuy Item\R$ Cost^n^n") pos += format(menu_body[pos], 511-pos, "\w1. Ping Detector\y\R300^n") pos += format(menu_body[pos], 511-pos, "\w2. Motion Detector\y\R100^n") pos += format(menu_body[pos], 511-pos, "\w3. Personal Detector Jammer\y\R2000^n") pos += format(menu_body[pos], 511-pos, "\w4. Distance Detector Jammer\y\R1500^n") pos += format(menu_body[pos], 511-pos, "\w5. Cloak Distupter\y\R3000^n") pos += format(menu_body[pos], 511-pos, "\w6. Placeable Motion Detector\y\R1000^n") pos += format(menu_body[pos], 511-pos, "^n\w0. Exit") show_menu(id,keys,menu_body,-1) return PLUGIN_HANDLED } public buy_detector(id, key) { new usermoney = get_user_money(id) key += 1 PlayerProtected[id] = false switch(key) { case 1: // PING PONG { if (usermoney < 300) { client_print(id,print_chat,"You do not have enough money.") return PLUGIN_HANDLED } client_print(id,print_chat,"You have bought a ping detector.") PlayerDetecter[id] = true set_user_money(id,(usermoney-300),1) PlayerDetecterUses[id] = MAX_USES_SOUND// uses left PlayerDetecterType[id] = 1// what kind do you have. } case 2: // MOTION DETECTOR { if (usermoney < 100) { client_print(id,print_chat,"You do not have enough money.") return PLUGIN_HANDLED } client_print(id,print_chat,"You have bought a motion detector.") PlayerDetecter[id] = true set_user_money(id,(usermoney-100),1) PlayerDetecterUses[id] = MAX_USES_MOTION// uses left PlayerDetecterType[id] = 2// what kind do you have. } case 3: // PERSONAL JAMMER { if (usermoney < 2000) // 10 seconds? { client_print(id,print_chat,"You do not have enough money.") return PLUGIN_HANDLED } client_print(id,print_chat,"You have bought a personal detector jammer.") PlayerDetecter[id] = true set_user_money(id,(usermoney-2000),1) PlayerDetecterUses[id] = 2// uses left when used... it lasts for like 10 seconds PlayerDetecterType[id] = 3// what kind do you have. } case 4: // "team" jammer { if (usermoney < 1500) // cannot cloak with it, thus price { client_print(id,print_chat,"You do not have enough money.") return PLUGIN_HANDLED } client_print(id,print_chat,"You have bought a distance detector jammer.") PlayerDetecter[id] = true PlayerProtected[id] = true set_user_money(id,(usermoney-1500),1) PlayerDetecterUses[id] = 99// uses left unilimited PlayerDetecterType[id] = 4// what kind do you have. new param[2] param[0] = id if(!task2) set_task(2.0, "detectProtected", 1338, param, 1, "b") if(PlayerInvis[id]) { makeIDuninvis(param) } } case 5: // cloak killer { if (usermoney < 3000) // This is { client_print(id,print_chat,"You do not have enough money.") return PLUGIN_HANDLED } client_print(id,print_chat,"You have bought a cloak distupter.") PlayerDetecter[id] = true set_user_money(id,(usermoney-3000),1) PlayerDetecterUses[id] = 1// uses left PlayerDetecterType[id] = 5// what kind do you have. } case 6: // Place a detector? YES :) { // client_print(id,print_chat,"You cannot buy this. Its disabled.") // return PLUGIN_HANDLED if (PlayerPlanted[id]) { client_print(id,print_chat,"You have planted the max amount already.") return PLUGIN_HANDLED } if (usermoney < 1000) { client_print(id,print_chat,"You do not have enough money.") return PLUGIN_HANDLED } client_print(id,print_chat,"You have bought a placeable motion detector.") PlayerDetecter[id] = true set_user_money(id,(usermoney-1000),1) PlayerDetecterUses[id] = 1// uses left PlayerDetecterType[id] = 6// what kind do you have. } default: client_print(id,print_chat,"") } if(PlayerDetecterType[id] == 4) PlayerProtected[id] = true /* new usermoney = get_user_money(id) if (usermoney < DETECTOR_COST) return PLUGIN_HANDLED client_print(id,print_chat,"You have bought a motion detector.") PlayerDetecter[id] = true set_user_money(id,(usermoney-DETECTOR_COST),1)*/ return PLUGIN_HANDLED } public detect(id) { if(!is_user_alive(id) || ultimateused[id]) { return PLUGIN_HANDLED } if(PlayerDetecter[id] == false) { client_print(id,print_chat,"You do not have an item.") return PLUGIN_HANDLED } if(PlayerDetecterUses[id] < 1) { client_print(id,print_chat,"You used your detector to its limit.") PlayerDetecterType[id] = 0 PlayerDetecter[id] = false return PLUGIN_HANDLED } new parm[1] parm[0]=id new DOrigin[3], VOrigin[3] get_user_origin(id,DOrigin,1) new i,j new players[32] new player_num, distance get_players(players, player_num) new idV, idP /* if (get_cvar_num("sv_restrictultimate")==0 && !reseting[id] && !ultimateused[id]){ set_task(7.5,"resetultimate",2,parm,2) reseting[id]=true } */ ultimateused[id] = true switch(PlayerDetecterType[id]) { case 1: { set_task(1.0,"resetultimate",2,parm,2) emit_sound(id, CHAN_VOICE, "ambience/hawk1.wav", 0.2, ATTN_NORM, 0, PITCH_NORM) message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(28) // Light at detected spot write_short(id) write_coord(DOrigin[0]) // x write_coord(DOrigin[1]) // y write_coord(DOrigin[2]) // z write_coord(50) //radius write_byte(100) write_byte(0) write_byte(100) //color //write_byte(200) //bright write_byte(5) // life write_coord(1) // decay message_end() //*/ } case 2: { set_task(2.0,"resetultimate",2,parm,2) message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(28) // Light at detected spot write_short(id) write_coord(DOrigin[0]) // x write_coord(DOrigin[1]) // y write_coord(DOrigin[2]) // z write_coord(50) //radius write_byte(0) write_byte(0) write_byte(100) //color //write_byte(200) //bright write_byte(5) // life write_coord(1) // decay message_end() //*/ } case 3: { set_task(10.0,"resetultimatejam",2,parm,2) PlayerProtected[id] = true } case 4: set_task(0.1,"resetultimate",2,parm,2) case 5: { set_task(5.0,"resetultimate",2,parm,2) parm[0] = id emit_sound(id, CHAN_VOICE, "x/x_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) makeIDuninvis(parm) message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(14) // Light at detected spot write_coord(DOrigin[0]) // x write_coord(DOrigin[1]) // y write_coord(DOrigin[2]) // z write_byte(100) //radius write_byte(100) write_byte(10) message_end() } case 6: { set_task(2.0,"resetultimate",2,parm,2) PlayerPlanted[id] = true client_print(id,print_chat,"You have placed a motion detector at your position.") emit_sound(id, CHAN_VOICE, "ambience/tu_ping.wav", 0.2, ATTN_NORM, 0, PITCH_NORM) PlacedObject[id][0] = DOrigin[0] // mismatch? PlacedObject[id][1] = DOrigin[1] PlacedObject[id][2] = DOrigin[2] PlacedObject[id][3] = 1 // checked 1st on all below new param[2] param[0] = id PlayerDetecterUses[id] -= 1 if(!taskset) { taskset = true set_task(3.0, "detectEnemy", 1337, param, 1, "b") // Every second updates } // dont set it if one is already planted // D.. I dont want to make entities... return PLUGIN_HANDLED // no more to do } case 7: set_task(1.0,"resetultimate",2,parm,2) case 8: set_task(1.0,"resetultimate",2,parm,2) case 9: set_task(1.0,"resetultimate",2,parm,2) case 0: {} default: {} } PlayerDetecterUses[id] -= 1 //Get all the players, sure for(i = DEDICATED; i < player_num; i++) { idV = players[i] parm[0] = idV if(is_user_alive(idV) && (id != idV)) { get_user_origin(idV,VOrigin,1) distance = get_distance(DOrigin,VOrigin) if(distance <= get_cvar_num("amx_invis_range")) { if(PlayerProtected[idV] || PlayerProtectedJammer[idV]) { client_print(idV,print_chat,"A jammer has blocked a detect on .") // return PLUGIN_HANDLED }else { if(PlayerDetecterType[id] == 2) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(22) write_short(idV) write_short(beam) write_byte(10) write_byte(5) write_byte(254) write_byte(254) write_byte(254) write_byte(200) message_end() //////LIGHT message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(28) // Light at detected spot write_short(idV) write_coord(VOrigin[0]) // x write_coord(VOrigin[1]) // y write_coord(VOrigin[2]) // z write_coord(25) //radius write_byte(200) write_byte(200) write_byte(200) //color //write_byte(200) //bright write_byte(5) // life write_coord(1) // decay message_end() PlayerDetected[idV] = true PlayerLined[id] = true } if(PlayerInvis[idV] == true && PlayerDetecterType[id] == 1) { emit_sound(idV, CHAN_VOICE, "ambience/tu_ping.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } if(PlayerInvis[idV] == true && PlayerDetecterType[id] == 5) { makeIDuninvis(parm) } client_print(idV,print_chat,"You have been detected.") } }else // add to motion THING or some shit { if(PlayerDetected[idV] == true) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(99) write_short(idV) message_end() PlayerLined[idV] = false PlayerDetected[idV] = false } } } } if(PlayerDetecterUses[id] < 1) { PlayerDetecterType[id] = 0 PlayerDetecter[id] = false } return PLUGIN_HANDLED } public changespeed(parm[1]) { new id = parm[0] if(PlayerInvis[id]) set_user_maxspeed(id, SLOW_SPEED) } public make_invis(id) { if(!is_user_alive(id)) return PLUGIN_HANDLED if(PlayerDetecterType[id] == 4) { client_print(id,print_chat,"You cannot cloak with a distance jammer.") return PLUGIN_HANDLED } new parm[1] parm[0]=id if(PlayerInvis[id]) { // uninvis you then makeIDuninvis(parm) client_print(id,print_chat,"You have deactivated your cloaking.") return PLUGIN_HANDLED } makeIDinvis(parm) client_print(id,print_chat,"You have activated your cloaking.") return PLUGIN_HANDLED } public change_weapon(id) { new parm[1] parm[0]=id changespeed(parm) } /*public startDetect(id) { if (get_cvar_num("amx_enemy_detector") != 1) return PLUGIN_HANDLED new detectTime = get_cvar_num("mp_roundtime") * 600 + get_cvar_num("mp_freezetime") new param[2] param[0] = id set_task(0.1, "detectEnemy", 1337, param, 1, "a", detectTime) return PLUGIN_HANDLED } */ public makeIDinvis(parm[]) { new id = parm[0] new vorigin[3] get_user_origin(id,vorigin,1) PlayerInvis[id] = true set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture, 10) set_user_maxspeed(id, SLOW_SPEED) //Raddle Raddle message_begin(MSG_ONE,gmsgShake,{0,0,0},id) write_short( 1<<14 )// shake amount write_short( 1<<14 )// shake lasts this long write_short( 1<<14 )// shake noise frequency message_end() // Puff! message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(11) write_coord(vorigin[0]) write_coord(vorigin[1]) write_coord(vorigin[2]) message_end() emit_sound(id, CHAN_VOICE, "ambience/particle_suck1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) //invisEffect(id) } public makeIDuninvis(parm[]) { new id = parm[0] new vorigin[3] get_user_origin(id,vorigin,1) set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture, 255) set_user_maxspeed(id, MaxSpeedDefault) PlayerInvis[id] = false //Raddle Raddle message_begin(MSG_ONE,gmsgShake,{0,0,0},id) write_short( 1<<14 )// shake amount write_short( 1<<14 )// shake lasts this long write_short( 1<<14 )// shake noise frequency message_end() // Puff! message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(11) write_coord(vorigin[0]) write_coord(vorigin[1]) write_coord(vorigin[2]) message_end() emit_sound(id, CHAN_VOICE, "ambience/port_suckout1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) //invisEffect(id) } public detectProtected(param[]) { new DOrigin[3], VOrigin[3] //get_user_origin(id,DOrigin,1) new i,j new players[32] new player_num, distance get_players(players, player_num) new idV, idP for(i = DEDICATED; i < player_num; i++) { PlayerProtectedJammer[players[i]] = false } for(i = DEDICATED; i < player_num; i++) { idP = players[i] //parm[0] = idP if(PlayerDetecterType[idP] == 4) { get_user_origin(idP,DOrigin,1) for(j = DEDICATED; j < player_num; j++) { idV = players[j] get_user_origin(idV,VOrigin,1) //distance = if(!PlayerProtected[idV] /* && !PlayerProtectedJammer[idV] */&& get_distance(DOrigin,VOrigin) <= get_cvar_num("amx_invis_range")) { PlayerProtectedJammer[idV]=true //client_print(idV,print_chat,"You are under a jammer shield.") if(PlayerLined[idV]) { PlayerLined[idV]= false // no more line message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(99) write_short(idV) message_end() } // kill current line. } } } } return PLUGIN_CONTINUE } public detectEnemy(param[]) { // Used with plantable motion detectors. //new id = param[0] // got to mke it so It looks for all... shit new myorigin[3] new plist[32], pnum get_players(plist, pnum) new j = 0 new id, idV //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// if detic for(new i = DEDICATED; i < pnum; i++) // all current player -items- { id = plist[i] if(PlayerPlanted[id]) { myorigin[0] = PlacedObject[id][0] myorigin[1] = PlacedObject[id][1] myorigin[2] = PlacedObject[id][2] // gets the location of the item for(j = DEDICATED; j < pnum; j++) { idV = plist[j] if(!PlayerProtected[idV] && !PlayerProtectedJammer[idV]) { new enemyorigin[3] get_user_origin(idV, enemyorigin) new distance = get_distance(enemyorigin, myorigin) if (distance <= get_cvar_num("amx_place_range")) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(28) // Light at detected spot write_short(idV) write_coord(enemyorigin[0]) // x write_coord(enemyorigin[1]) // y write_coord(enemyorigin[2]) // z write_coord(25) //radius write_byte(200) write_byte(200) write_byte(200) //color //write_byte(200) //bright write_byte(5) // life write_coord(1) // decay message_end() PlayerDetected[idV] = true //////LIGHT //if(!PlayerLined[idV]) //{// message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(22) write_short(idV) write_short(beam) write_byte(10) write_byte(5) write_byte(254) write_byte(254) write_byte(254) write_byte(50) message_end() PlayerLined[idV]= true // } } } else if(PlayerLined[idV] && !PlayerDetected[idV]) { PlayerLined[idV]= false // no more line message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(99) write_short(idV) message_end() } // kill current line. } } } return PLUGIN_CONTINUE }