block load { // Ratio maximum avant la restriction des armes es_xset serveur_ratio_limite 3 // Nombre de frags min a atteindre pour voir les avertissements apparaitre - et les sanctions ... - // si le ratio est superieur au ratio precedent es_xset serveur_frags_min_limite 8 // Nombre de frags max a atteindre pour voir les avertissements apparaitre - et les sanctions ... - // (quel que soit le ratio) es_xset serveur_frags_max_limite 20 // Arme a restreindre quand le ratio est atteint es_xset serveur_roxor_armes "weapon_deagle weapon_galil weapon_ak47 weapon_scout weapon_sg552 weapon_awp weapon_g3sg1 weapon_famas weapon_m4a1 weapon_aug weapon_sg550 weapon_m3 weapon_xm1014 weapon_mac10 weapon_tmp weapon_mp5navy weapon_ump45 weapon_p90 weapon_m249" // Creation du groupe qui contient les "roxors" es_xkeygroupcreate joueurs_info // Version es_xset anti_roxor_ver "Version 1.2" es_xmakepublic anti_roxor_ver // aide à la programmation et au debug en particulier : // - 0 : pas de debug // - 1 : debug actif (affichage de quelques donnees a la saisie du mot "debug" dans le chat) es_xset mode_debug_on 0 es_xsetinfo x41 0 es_xsetinfo y41 0 es_xsetinfo z41 0 es_xsetinfo x42 0 es_xsetinfo y42 0 es_xsetinfo z42 0 } // Au démarrage de la map : // - remise à zéro des "roxors" event es_map_start { es_xkeygroupdelete joueurs_info es_xkeygroupcreate joueurs_info } // A l'unload : // - suppression du groupe des "roxors" block unload { es_xkeygroupdelete joueurs_info } // A la mort d'un joueur : // - on met a jour le statut du joueur mort (normalement inutile, mais d'un point de vue logique son statut change) // - on met a jour le statut de l'attaquant // - on affiche un message a l'attaquant s'il devient "roxor" event player_death { es_xdoblock anti_roxor/maj_joueur es_xdoblock anti_roxor/maj_attaquant es_xdoblock anti_roxor/afficher_message_attaquant } // Au defuse : // - on met a jout le statut du joueur event bomb_defused { es_xdoblock anti_roxor/maj_joueur es_xdoblock anti_roxor/afficher_message_joueur } // A l'explosion : // - on met a jout le statut du joueur event bomb_exploded { es_xdoblock anti_roxor/maj_joueur es_xdoblock anti_roxor/afficher_message_joueur } block maj_joueur { if (event_var(es_steamid) == "bot") do { // Vérification si la clée du joueur qui meurt existe es_xset anti_roxor_la_clef_existe 0 es_exists anti_roxor_la_clef_existe key joueurs_info event_var(userid) // Si elle n'existe pas, la creer ifx false(anti_roxor_la_clef_existe) do { es_keycreate joueurs_info event_var(userid) es_keysetvalue joueurs_info event_var(userid) roxor 0 } // On recupere le nombre de fois ou l'attaquant est mort es_set nombre_morts_joueur event_var(es_userdeaths) // Si le joueur n'a pas fait de frag, on met son nombre de frag a 1 (sinon, division par zero :-/) if (server_var(nombre_morts_joueur) == 0) then nombre_morts_joueur 1 es_set ratio_joueur event_var(es_userkills) // On calcule le ratio du joueur es_math ratio_joueur / server_var(nombre_morts_joueur) es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(userid) roxor if(server_var(est_roxor) == 0) do { if(event_var(es_userkills) >= server_var(serveur_frags_min_limite)) do { if(server_var(ratio_joueur) >= server_var(serveur_ratio_limite)) do { es_keysetvalue joueurs_info event_var(userid) roxor 1 } } if(event_var(es_userkills) >= server_var(serveur_frags_max_limite)) do { es_keysetvalue joueurs_info event_var(userid) roxor 2 } } } else do { // Vérification si la clée du joueur qui meurt existe es_xset anti_roxor_la_clef_existe 0 es_exists anti_roxor_la_clef_existe key joueurs_info event_var(es_steamid) // Si elle n'existe pas, la creer ifx false(anti_roxor_la_clef_existe) do { es_keycreate joueurs_info event_var(es_steamid) es_keysetvalue joueurs_info event_var(es_steamid) roxor 0 } // On recupere le nombre de fois ou l'attaquant est mort es_set nombre_morts_joueur event_var(es_userdeaths) // Si le joueur n'a pas fait de frag, on met son nombre de frag a 1 (sinon, division par zero :-/) if (server_var(nombre_morts_joueur) == 0) then nombre_morts_joueur 1 es_set ratio_joueur event_var(es_userkills) // On calcul le ratio du joueur es_math ratio_joueur / server_var(nombre_morts_joueur) es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_steamid) roxor if(server_var(est_roxor) == 0) do { if(event_var(es_userkills) >= server_var(serveur_frags_min_limite)) do { if(server_var(ratio_joueur) >= server_var(serveur_ratio_limite)) do { es_keysetvalue joueurs_info event_var(es_steamid) roxor 1 } } if(event_var(es_userkills) >= server_var(serveur_frags_max_limite)) do { es_keysetvalue joueurs_info event_var(es_steamid) roxor 2 } } } } block maj_attaquant { if (event_var(es_attackersteamid) == "bot") do { // Vérification si la clée du joueur qui meurt existe es_xset anti_roxor_la_clef_existe 0 es_exists anti_roxor_la_clef_existe key joueurs_info event_var(attacker) // Si elle n'existe pas, la creer ifx false(anti_roxor_la_clef_existe) do { es_keycreate joueurs_info event_var(attacker) es_keysetvalue joueurs_info event_var(attacker) roxor 0 } // On recupere le nombre de fois ou l'attaquant est mort es_set nombre_morts_joueur event_var(es_attackerdeaths) // Si le joueur n'a pas fait de frag, on met son nombre de frag a 1 (sinon, division par zero :-/) if (server_var(nombre_morts_joueur) == 0) then nombre_morts_joueur 1 es_set nombre_frags_joueur event_var(es_attackerkills) es_math nombre_frags_joueur + 1 es_set ratio_joueur server_var(nombre_frags_joueur) // On calcul le ratio du joueur es_math ratio_joueur / server_var(nombre_morts_joueur) es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(attacker) roxor if(server_var(est_roxor) == 0) do { if(server_var(nombre_frags_joueur) >= server_var(serveur_frags_min_limite)) do { if(server_var(ratio_joueur) >= server_var(serveur_ratio_limite)) do { es_keysetvalue joueurs_info event_var(attacker) roxor 1 } } if(server_var(nombre_frags_joueur) >= server_var(serveur_frags_max_limite)) do { es_keysetvalue joueurs_info event_var(attacker) roxor 2 } } } else do { // Vérification si la clée du joueur qui meurt existe es_xset anti_roxor_la_clef_existe 0 es_exists anti_roxor_la_clef_existe key joueurs_info event_var(es_attackersteamid) // Si elle n'existe pas, la creer ifx false(anti_roxor_la_clef_existe) do { es_keycreate joueurs_info event_var(es_attackersteamid) es_keysetvalue joueurs_info event_var(es_attackersteamid) roxor 0 } // On recupere le nombre de fois ou l'attaquant est mort es_set nombre_morts_joueur event_var(es_attackerdeaths) // Si le joueur n'a pas fait de frag, on met son nombre de frag a 1 (sinon, division par zero :-/) if (server_var(nombre_morts_joueur) == 0) then nombre_morts_joueur 1 es_set nombre_frags_joueur event_var(es_attackerkills) es_xmath nombre_frags_joueur + 1 es_set ratio_joueur server_var(nombre_frags_joueur) // On calcul le ratio du joueur es_math ratio_joueur / server_var(nombre_morts_joueur) es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_attackersteamid) roxor if(server_var(est_roxor) == 0) do { if(server_var(nombre_frags_joueur) >= server_var(serveur_frags_min_limite)) do { if(server_var(ratio_joueur) >= server_var(serveur_ratio_limite)) do { es_keysetvalue joueurs_info event_var(es_attackersteamid) roxor 1 } } if(server_var(nombre_frags_joueur) >= server_var(serveur_frags_max_limite)) do { es_keysetvalue joueurs_info event_var(es_attackersteamid) roxor 2 } } } } block afficher_message_attaquant { es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_attackersteamid) roxor if(server_var(est_roxor) != 0) do { if(server_var(est_roxor) == 1) do { es_xdoblock anti_roxor/message_avertissement_1 es_menu 4 event_var(attacker) server_var(menu) } else do { if(server_var(est_roxor) == 2) do { es_xdoblock anti_roxor/message_avertissement_2 es_menu 4 event_var(attacker) server_var(menu) } } } } block afficher_message_joueur { es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_steamid) roxor if(server_var(est_roxor) != 0) do { if(server_var(est_roxor) == 1) do { if(event_var(weapon) in server_var(serveur_roxor_armes)) do { es_xdoblock anti_roxor/message_avertissement_1 es_menu 4 event_var(userid) server_var(menu) } } else do { if(server_var(est_roxor) == 2) do { if(event_var(weapon) in server_var(serveur_roxor_armes)) do { es_xdoblock anti_roxor/message_avertissement_2 es_menu 4 event_var(userid) server_var(menu) } } } } } block message_avertissement_1 { es_xset menu 0 es_format menu ".oO[ ATTENTION ]Oo.\n \n->1 Ton ratio est superieur ou egal a %1\n->2 et tu as deja tue plus de %2 ennemis !\n->3 TU DOIS PASSER AU GUN SAUF DEAGLE\n \nTape 'ratio' pour connaitre ton ratio" server_var(serveur_ratio_limite) server_var(serveur_frags_min_limite) } block message_avertissement_2 { es_xset menu 0 es_format menu ".oO[ ATTENTION ]Oo.\n \n->1 Tu as deja tue plus de %1 ennemis !\n->2 TU DOIS PASSER AU GUN SAUF DEAGLE\n \n" server_var(serveur_frags_max_limite) } event player_say { if (event_var(text) == "ratio") do { // On recupere le nombre de fois ou l'attaquant est mort es_set nombre_morts_joueur event_var(es_userdeaths) // Si le joueur n'a pas fait de frag, on met son nombre de frag a 1 (sinon, division par zero :-/) if (server_var(nombre_morts_joueur) == 0) then nombre_morts_joueur 1 es_set ratio_joueur event_var(es_userkills) // On calcul le ratio du joueur es_math ratio_joueur / server_var(nombre_morts_joueur) es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_steamid) roxor if(server_var(est_roxor) == 0) do { es_xset menu 0 es_format menu ".oO[ RATIO ]Oo.\n \nLe ratio c'est ton nombre de frags\ndivise par le nombre de fois ou t'es mort\n \n->1 Frags (K) : %1\n->2 Morts (D) : %2\n->3 Ton ratio (K/D) : %3\n \n0 Quit" event_var(es_userkills) event_var(es_userdeaths) server_var(ratio_joueur) es_menu 6 event_var(userid) server_var(menu) } else do { if(server_var(est_roxor) == 1) do { es_xset menu 0 es_format menu ".oO[ RATIO ]Oo.\n \nLe ratio c'est ton nombre de frags\ndivise par le nombre de fois ou t'es mort\n \n->1 Frags (K) : %1\n->2 Morts (D) : %2\n->3 Ton ratio (K/D) : %3\n \nATTENTION : Ton ratio a ete > ou = a %4\net tu as tue plus de %5 ennemis !\n\n TU DOIS PASSER AU GUN SAUF DEAGLE\n \n0 Quit" event_var(es_userkills) event_var(es_userdeaths) server_var(ratio_joueur) server_var(serveur_ratio_limite) server_var(serveur_frags_min_limite) es_menu 6 event_var(userid) server_var(menu) } else do { if(server_var(est_roxor) == 2) do { es_xset menu 0 es_format menu ".oO[ RATIO ]Oo.\n \nLe ratio c'est ton nombre de frags\ndivise par le nombre de fois ou t'es mort\n \n->1 Frags (K) : %1\n->2 Morts (D) : %2\n->3 Ton ratio (K/D) : %3\n \nATTENTION : Tu as tue plus de %4 ennemis !\n\n TU DOIS PASSER AU GUN SAUF DEAGLE\n \n0 Quit" event_var(es_userkills) event_var(es_userdeaths) server_var(ratio_joueur) server_var(serveur_frags_max_limite) es_menu 6 event_var(userid) server_var(menu) } } } } if (event_var(text) == "debug") do { if(server_var(mode_debug_on) == 1) do { // On recupere le nombre de fois ou l'attaquant est mort es_set nombre_morts_joueur event_var(es_userdeaths) // Si le joueur n'a pas fait de frag, on met son nombre de frag a 1 (sinon, division par zero :-/) if (server_var(nombre_morts_joueur) == 0) then nombre_morts_joueur 1 es_set ratio_joueur event_var(es_userkills) // On calcul le ratio du joueur es_math ratio_joueur / server_var(nombre_morts_joueur) es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_steamid) roxor es_xset menu 0 es_format menu "Debug\nroxor : %1\nratio : %2\nratio roxor : %3\nmin frags : %4\nmax frags : %5\n roxor mode : 2\nversion : %6\n \n0 Quit" server_var(est_roxor) server_var(ratio_joueur) server_var(serveur_ratio_limite) server_var(serveur_frags_min_limite) server_var(serveur_frags_max_limite) server_var(anti_roxor_ver) es_menu 6 event_var(userid) server_var(menu) } } } // Des qu'un joueur est blesse : // - kill l'attaquant si c'est un roxor qui enfreint les regles // sinon afficher le message d'avertissement event player_hurt { // On regarde si l'attaquant est un roxor es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_attackersteamid) roxor if(server_var(est_roxor) != 0) do { if(server_var(est_roxor) == 1) do { if(event_var(weapon) in server_var(serveur_roxor_armes)) do { es damage event_var(attacker) 100 es_getplayerlocation x41 y41 z41 event_var(attacker) es_getplayerlocation x42 y42 z42 event_var(attacker) es_math z41 + 700 es ma_effect 2 server_var(x41) server_var(y41) server_var(z41) smoke 99 20 es ma_effect 1 server_var(x42) server_var(y42) server_var(z42) server_var(x41) server_var(y41) server_var(z41) lightning NULL 0 0 0.7 10 10 0 6 196 243 253 255 30 es_emitsound entity server_var(eventscripts_lastgive) ambient/explosions/explode_5.wav 1.0 0.0 es ma_effect 7 A 0 server_var(x42) server_var(y42) server_var(z42) server_var(x41) server_var(y41) server_var(z41) lightning NULL 0 20 0.7 5 50 0.5 1 215 225 255 240 20 es ma_effect 1 server_var(x42) server_var(y42) server_var(z42) server_var(x41) server_var(y41) server_var(z41) lightning NULL 0 0 0.7 10 10 0 1 198 209 255 250 30 es_xmath z41 - 655 es ma_effect 10 A 0 server_var(x41) server_var(y41) server_var(z41) 1 350 lightning NULL 0 25 0.15 15 10 1 255 245 250 255 7 0 es ma_effect 10 A 0 server_var(x41) server_var(y41) server_var(z41) 15 375 lightning NULL 0 25 0.15 15 10 1 255 245 250 255 7 0 es ma_effect 10 A 0 server_var(x41) server_var(y41) server_var(z41) 50 400 lightning NULL 0 25 0.15 15 10 1 255 245 250 255 7 0 es ma_effect 18 A 0 server_var(x41) server_var(y41) server_var(z41) 999 999 es ma_effect 13 A 0 server_var(x42) server_var(y42) server_var(z42) blueglow 0.7 6 100000 es ma_effect 12 A 0 server_var(x42) server_var(y42) server_var(z42) lightning 20 20 32 35 10 es ma_effect 19 A 0 server_var(x42) server_var(y42) server_var(z42) smoke 12 70 es_xmath z41 + 20 es_xmath z42 - 65 es ma_effect 4 A 0.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 10 0 255 250 250 255 7 es_xmath z41 - 15 es ma_effect 4 A 2.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 10 0 255 250 250 240 7 es_xmath z41 - 15 es ma_effect 4 A 4.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 0 0 255 250 250 230 7 es_xmath z41 - 15 es ma_effect 4 A 6.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 0 0 255 200 200 220 7 es_xmath z41 - 15 es ma_effect 4 A 8.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 0 0 255 250 250 210 7 es_xmath z41 - 15 es ma_effect 4 A 10.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 6 2 30 0 0 255 200 200 200 7 es_xsetinfo x41 0 es_xsetinfo y41 0 es_xsetinfo z41 0 es_xsetinfo x42 0 es_xsetinfo y42 0 es_xsetinfo z42 0 es_msg #green event_var(es_attackername) est mort pour usage d'arme interdite avec un ratio > ou = a server_var(serveur_ratio_limite) et plus de server_var(serveur_frags_min_limite) frags ! es_xdoblock anti_roxor/message_avertissement_1 es_menu 4 event_var(attacker) server_var(menu) } } else do { if(server_var(est_roxor) == 2) do { if(event_var(weapon) in server_var(serveur_roxor_armes)) do { es damage event_var(attacker) 100 es_getplayerlocation x41 y41 z41 event_var(attacker) es_getplayerlocation x42 y42 z42 event_var(attacker) es_xmath z41 + 700 es ma_effect 2 server_var(x41) server_var(y41) server_var(z41) smoke 99 20 es ma_effect 1 server_var(x42) server_var(y42) server_var(z42) server_var(x41) server_var(y41) server_var(z41) lightning NULL 0 0 0.7 10 10 0 6 196 243 253 255 30 es_emitsound entity server_var(eventscripts_lastgive) ambient/explosions/explode_5.wav 1.0 0.0 es ma_effect 7 A 0 server_var(x42) server_var(y42) server_var(z42) server_var(x41) server_var(y41) server_var(z41) lightning NULL 0 20 0.7 5 50 0.5 1 215 225 255 240 20 es ma_effect 1 server_var(x42) server_var(y42) server_var(z42) server_var(x41) server_var(y41) server_var(z41) lightning NULL 0 0 0.7 10 10 0 1 198 209 255 250 30 es_math z41 - 655 es ma_effect 10 A 0 server_var(x41) server_var(y41) server_var(z41) 1 350 lightning NULL 0 25 0.15 15 10 1 255 245 250 255 7 0 es ma_effect 10 A 0 server_var(x41) server_var(y41) server_var(z41) 15 375 lightning NULL 0 25 0.15 15 10 1 255 245 250 255 7 0 es ma_effect 10 A 0 server_var(x41) server_var(y41) server_var(z41) 50 400 lightning NULL 0 25 0.15 15 10 1 255 245 250 255 7 0 es ma_effect 18 A 0 server_var(x41) server_var(y41) server_var(z41) 999 999 es ma_effect 13 A 0 server_var(x42) server_var(y42) server_var(z42) blueglow 0.7 6 100000 es ma_effect 12 A 0 server_var(x42) server_var(y42) server_var(z42) lightning 20 20 32 35 10 es ma_effect 19 A 0 server_var(x42) server_var(y42) server_var(z42) smoke 12 70 es_xmath z41 + 20 es_xmath z42 - 65 es ma_effect 4 A 0.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 10 0 255 250 250 255 7 es_xmath z41 - 15 es ma_effect 4 A 2.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 10 0 255 250 250 240 7 es_xmath z41 - 15 es ma_effect 4 A 4.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 0 0 255 250 250 230 7 es_xmath z41 - 15 es ma_effect 4 A 6.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 0 0 255 200 200 220 7 es_xmath z41 - 15 es ma_effect 4 A 8.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 2 2 30 0 0 255 250 250 210 7 es_xmath z41 - 15 es ma_effect 4 A 10.35 0 server_var(x41) server_var(y41) server_var(z41) 0 server_var(x42) server_var(y42) server_var(z42) crystalbeam NULL 0 25 6 2 30 0 0 255 200 200 200 7 es_xsetinfo x41 0 es_xsetinfo y41 0 es_xsetinfo z41 0 es_xsetinfo x42 0 es_xsetinfo y42 0 es_xsetinfo z42 0 es_msg #green event_var(es_attackername) est mort pour usage d'arme interdite avec plus de server_var(serveur_frags_max_limite) frags ! es_xdoblock anti_roxor/message_avertissement_2 es_menu 4 event_var(attacker) server_var(menu) } } } } } // Au spawn : // - on maj le joueur (peu gourmand en terme de calcul et permet de pallier a // d'eventuels bugs survenus notamment suite à des comptes de points exotiques, // comme donner un point a la pose de la bombe, deux points en cas de cut, ....) event player_spawn { //maj es_xdoblock anti_roxor/maj_joueur // On recupere le nombre de fois ou l'attaquant est mort es_set nombre_morts_joueur event_var(es_userdeaths) // Si le joueur n'a pas fait de frag, on met son nombre de frag a 1 (sinon, division par zero :-/) if (server_var(nombre_morts_joueur) == 0) then nombre_morts_joueur 1 es_set ratio_joueur event_var(es_userkills) // On calcul le ratio du joueur es_math ratio_joueur / server_var(nombre_morts_joueur) // On regarde si le joueur est un roxor es_xset est_roxor 0 es_keygetvalue est_roxor joueurs_info event_var(es_steamid) roxor if(server_var(est_roxor) == 1) do { es_xdoblock anti_roxor/message_avertissement_1 es_menu 4 event_var(userid) server_var(menu) } else do { if(server_var(est_roxor) == 2) do { es_xdoblock anti_roxor/message_avertissement_2 es_menu 4 event_var(userid) server_var(menu) } else do { es_tell event_var(userid) #multi #greenRatio :#lightgreen server_var(ratio_joueur) } } }