/*colored text messages! b2: Changelog: - bombspawned: UserIndex instead of UserName is used! - bombtimer: g_curbombtimer=999 is checked in bomb(...) function. */ #include <core> #include <console> #include <string> #include <admin> #include <adminlib> new STRING_VERSION[MAX_DATA_LENGTH] = "AM_2.50.59_11.02.04_v.7.0_b2_c"; #define ACCESS_CONSOLE 131072 #define CLEAN_SLATE 0 #pragma dynamic 8192 ////////////////////////////////////////////////////////////////// // STATUS OF FEATURES (Don't change anything below) // ////////////////////////////////////////////////////////////////// /*features enabled*/ enum operation { enable, disable, toggle }; /*single feature enable/disable = ID*/ #define MAX_FEATURES 26 #define HEADSHOT (1<<0) #define KILLS_IN_TIME (1<<1) #define KILLSTREAK (1<<2) #define FIRSTBLOOD (1<<3) #define LEAD (1<<4) #define TEAMATTACK (1<<5) #define KNIFEKILL (1<<6) #define GRENADEKILL (1<<7) #define ROUNDCOUNTER (1<<8) #define BOMBSPAWNED (1<<9) #define BOMBGET (1<<10) #define BOMBDROP (1<<11) #define BOMBPLANT (1<<12) #define STARTDEFUSE (1<<13) #define BOMBDEFUSED (1<<14) #define BOMBDETONATE (1<<15) #define BOMBTIMER (1<<16) #define TOUCHHOSTAGE (1<<17) #define RESCUEHOSTAGE (1<<18) #define KILLEDHOSTAGE (1<<19) #define SUICIDE (1<<20) #define LASTSCOUT (1<<21) #define BECAMEVIP (1<<22) #define KILLEDVIP (1<<23) #define ESCAPEVIP (1<<24) #define SCOREBOARD (1<<25) new g_Commands[MAX_FEATURES][]={ "headshot", //Line: 1076 -> Injure (948) "killsintime", //Line: 1103 -> Kill (909) "killstreak", //Line: 1133 -> Kill (909) "firstblood", //Line: 1154 -> Kill (909) "takenlead", //Line: 1165 -> Kill (909), World (1050) "teamattack", //Line: 1235 -> Injure (948) "knifekill", //Line: 1254 -> Kill (909) "grenadekill", //Line: 1254 -> Kill (909) "roundcounter", //Line: 1273 -> World (1050) "bombspawned", //Line: 1297 -> Playeraction (987) "bombget", //Line: 1297 -> Playeraction (987) "bombdrop", //Line: 1297 -> Playeraction (987) "bombplant", //Line: 1297 -> Playeraction (987) "startdefuse", //Line: 1297 -> Playeraction (987) "bombdefused", //Line: 1297 -> Playeraction (987) "bombdetonate", //Line: 1297 -> Playeraction (987) "bombtimer", //Line: 1297 -> Playeraction (987) "touchhostage", //Line: 1433 -> Playeraction (987) "reschostage", //Line: 1433 -> Playeraction (987) "killedhostage", //Line: 1433 -> Playeraction (987) "suicide", //Line: 1464 -> Suicide (897) "lastscout", //Line: 1480 -> Kill (909) "becamevip", //Line: 1531 -> Playeraction (987) "killedvip", //Line: 1531 -> Playeraction (987) "escapevip", //Line: 1531 -> Playeraction (987) "scoreboard" //Line: 1559 -> Teamaction (1030) }; new g_SubCommands[MAX_FEATURES][]={ "sound_1,sound_2,sound_3,msg_1,msg_2,msg_3", "sound_1,sound_2,sound_3,msg_1,msg_2,msg_3,timer,frag_1,frag_2,frag_3", "sound_1,sound_2,sound_3,msg_1,msg_2,msg_3,frag_1,frag_2,frag_3", "sound,msg", "sound_taken,msg_taken,sound_lost,msg_lost,sound_tied,msg_tied", "sound,msg,timer", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg", "sound,msg,menu" }; new g_SubVault[MAX_FEATURES][]={ "IMP_SOUND_0,IMP_SOUND_1,IMP_SOUND_2,IMP_MSG_0,IMP_MSG_1,IMP_MSG_2", "IMP_SOUND_3,IMP_SOUND_4,IMP_SOUND_5,IMP_MSG_3,IMP_MSG_4,IMP_MSG_5,IMP_KILLS_TIMER,IMP_KILLS_IN_TIME_1,IMP_KILLS_IN_TIME_2,IMP_KILLS_IN_TIME_3", "IMP_SOUND_6,IMP_SOUND_7,IMP_SOUND_8,IMP_MSG_6,IMP_MSG_7,IMP_MSG_8,IMP_KILLSTREAK_1,IMP_KILLSTREAK_2,IMP_KILLSTREAK_3", "IMP_SOUND_9,IMP_MSG_9", "IMP_SOUND_10,IMP_MSG_10,IMP_SOUND_11,IMP_MSG_11,IMP_SOUND_12,IMP_MSG_12", "IMP_SOUND_13,IMP_MSG_13,IMP_TA_TIMER", "IMP_SOUND_14,IMP_MSG_14", "IMP_SOUND_15,IMP_MSG_15", "IMP_SOUND_16,IMP_MSG_16", "IMP_SOUND_17,IMP_MSG_17", "IMP_SOUND_18,IMP_MSG_18", "IMP_SOUND_19,IMP_MSG_19", "IMP_SOUND_20,IMP_MSG_20", "IMP_SOUND_21,IMP_MSG_21", "IMP_SOUND_22,IMP_MSG_22", "IMP_SOUND_23,IMP_MSG_23", "IMP_SOUND_24,IMP_MSG_24", "IMP_SOUND_25,IMP_MSG_25", "IMP_SOUND_26,IMP_MSG_26", "IMP_SOUND_27,IMP_MSG_27", "IMP_SOUND_28,IMP_MSG_28", "IMP_SOUND_29,IMP_MSG_29", "IMP_SOUND_30,IMP_MSG_30", "IMP_SOUND_31,IMP_MSG_31", "IMP_SOUND_32,IMP_MSG_32", "IMP_SOUND_33,IMP_MSG_33,IMP_SCOREBOARD_MENU" }; /*sound of feature enabled*/ new g_Sounds; /*text message of feature enabled*/ new g_Messages; //////////////////////////////// // SOUND AND MESSAGE SETTINGS // //////////////////////////////// // = SID // #define ALL_SOUNDS 34 #define S_HEADSHOT1 0 #define S_HEADSHOT2 1 #define S_HEADSHOT3 2 #define S_DOUBLEKILL 3 #define S_MULTIKILL 4 #define S_MONSTERKILL 5 #define S_KILLINGSPREE 6 #define S_DOMINATING 7 #define S_GODLIKE 8 #define S_FIRSTBLOOD 9 #define S_TAKENLEAD 10 #define S_LOSTLEAD 11 #define S_TIEDLEAD 12 #define S_TEAMATTACK 13 #define S_KNIFEKILL 14 #define S_GRENADEKILL 15 #define S_ROUNDCOUNTER 16 #define S_BOMBSPAWNED 17 #define S_BOMBGET 18 #define S_BOMBDROP 19 #define S_BOMBPLANT 20 #define S_STARTDEFUSE 21 #define S_BOMBDEFUSED 22 #define S_BOMBDETONATE 23 #define S_BOMBTIMER 24 #define S_TOUCHHOSTAGE 25 #define S_RESCUEHOSTAGE 26 #define S_KILLEDHOSTAGE 27 #define S_PLAYERSUICIDE 28 #define S_LASTSCOUT 29 #define S_BECAMEVIP 30 #define S_KILLEDVIP 31 #define S_ESCAPEVIP 32 #define S_SCOREBOARD 33 /////////////////////////////////////////////////////// // STORING SOUNDS AND MESSAGES LOADED FROM VAULT.INI // /////////////////////////////////////////////////////// new g_Imp_Sounds[ALL_SOUNDS][MAX_TEXT_LENGTH]; new g_TextMsg[ALL_SOUNDS][MAX_TEXT_LENGTH]; /*END ADRESSES OF EACH SID FOR EACH FEATURE*/ new g_Features_SID[MAX_FEATURES][4]={ S_HEADSHOT3,S_MONSTERKILL,S_GODLIKE,S_FIRSTBLOOD,S_TIEDLEAD, S_TEAMATTACK,S_KNIFEKILL,S_GRENADEKILL,S_ROUNDCOUNTER,S_BOMBSPAWNED, S_BOMBGET,S_BOMBDROP,S_BOMBPLANT,S_STARTDEFUSE,S_BOMBDEFUSED, S_BOMBDETONATE,S_BOMBTIMER,S_TOUCHHOSTAGE,S_RESCUEHOSTAGE,S_KILLEDHOSTAGE, S_PLAYERSUICIDE,S_LASTSCOUT,S_BECAMEVIP,S_KILLEDVIP,S_ESCAPEVIP, S_SCOREBOARD }; ///////////////////////// // KEY FOR ALLOWSOUNDS // ///////////////////////// new Key[]="am_sound"; /*clean kill-arrays*/ #define CLEAN_SLATE 0 /*message id = MSGID*/ #define DIS_ALL_A 1 #define DIS_TARGET_A 2 #define DIS_ALL 3 #define DIS_TARGET 4 /*message type*/ #define TSAY 1 #define CSAY 2 #define P_TSAY 3 #define P_CSAY 4 #define P_MSAY 5 /*teams*/ #define ALL -1 #define TARGET 0 #define T 1 #define CT 2 #define SPEC 3 //////////////////////////////////////// // ROUND COUNTER (Big THX an SR71GOKU)// //////////////////////////////////////// static OnesLib[10][] = { "", "one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine " }; static TensLib[10][] = { "", "ten ", "twenty ", "thirty ", "fourty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety " }; static TeensLib[10][] = { "", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen " , "eighteen ", "nineteen " }; static HundredsLib[10][] = { "", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred ", "six hundred ", "seven hundred ", "eight hundred ", "nine hundred " }; static GroupNamesLib[5][] = { "", "thousand ", "million ", "billion ", "trillion " }; ////////////////////////////////////////////////////////////////////////////////////////// // OTHER STATIC SETTINGS // ////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// #define PREFERRED_DISPLAY DIS_ALL // WHICH MSG_ID IS USED AS DEFAULT #define PREFERRED_TYPE_ALL TSAY // WHICH MSG_TYPE_ALL IS USED AS DEFAULT #define PREFERRED_TYPE_PRIVATE P_TSAY // WHICH MSG_TYPE_PRIVATE IS USED AS DEFAULT ///////////////////////////////////////////// //////////////////////////////////////////////////// //HEADSHOT WEAPON DAMAGE ( > than max body damage)// //////////////////////////////////////////////////// #define MAX_WEAPONS 24 #define MIN_HS_DAMAGE 36 //MP5 and TMP atm. //PISTOLS #define DEAGLE 80 #define GLOCK 40 #define USP 40 #define ELITE 40 #define FIVESEVEN 40 #define P228 40 //SHOTGUNS (IMPOSSIBLE TO FIGURE OUT THE REAL HS DAMAGE!) #define M3 200 #define XM1014 200 //SMGS #define MP5 36 #define P90 40 #define TMP 36 #define MAC 38 #define UMP45 45 //RIFLES #define GALLIL 45 #define DEFENDER 45 #define AUG 50 #define SG552 50 #define AWP 155 #define M4A1 50 #define AK47 50 #define SCOUT 95 #define SG550 80 #define G3SG1 80 //MG #define M249 50 new g_WeaponName[MAX_WEAPONS][MAX_NAME_LENGTH] ={ "usp","glock18","deagle","mp5navy","gallil","defender","m4a1", "ak47","awp","aug","sg552","scout","m249", "p90","p228","tmp","mac10","ump45","fiveseven", "elite","m3","xm1014","sg550","g3sg1" }; new g_WeaponDamage[MAX_WEAPONS][MAX_NUMBER_LENGTH]={ USP,GLOCK,DEAGLE,MP5,GALLIL,DEFENDER,M4A1, AK47,AWP,AUG,SG552,SCOUT,M249, P90,P228,TMP,MAC,UMP45,FIVESEVEN, ELITE,M3,XM1014,SG550,G3SG1 }; /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////// // PLUGIN-VARIABLES // /////////////////////////////////////////////////// ////////////////////////////////// //Values loaded at plugin_init()// ////////////////////////////////// //from vault.ini new g_status_plugin=1; ///////////////////////////////// //KILLS IN TIME (No. of frags) // ///////////////////////////////// new g_kstimer; new g_DOUBLEKILL =2; new g_MULTIKILL =3; new g_MONSTERKILL =4; ///////////////////////////// //KILLSTREAK (No. of frags)// ///////////////////////////// new g_KILLINGSPREE =3; new g_DOMINATING =4; new g_GODLIKE =5; new g_menuenabled; new g_tatimer; //from server settings new g_bombtimer; new g_maxplayers; ////////////////////////////////////////// // Values set during gameplay by plugin // ////////////////////////////////////////// new g_rounds; new g_firstblood; new g_leader; new g_curbombtimer; new g_teamattack; new g_lastCT; new g_lastT; new g_BombPlanter[MAX_NAME_LENGTH]; new g_KillsInTime[MAX_PLAYERS]; new g_KillsTimer[MAX_PLAYERS]; new g_Killstreak[MAX_PLAYERS]; new g_KillsRound[MAX_PLAYERS]; new g_HSinRound[MAX_PLAYERS]; /////////////////////////////////////////////////////// public plugin_init(){ new Text[MAX_TEXT_LENGTH]; new sValue[MAX_TEXT_LENGTH]; new value; new error; getstrvar( "admin_vault_file", sValue, MAX_TEXT_LENGTH ); if(strlen(sValue)==0){ log("[IMPRESSIVE] FATAL ERROR: admin_vault_file not set in adminmod.cfg!"); error++; } if(!error){ plugin_registerinfo("Impressive-Script","The ultimative Logd-Script: Announces headshots with sound and many more.",STRING_VERSION); plugin_registercmd("imp_feature", "imp_feature", ACCESS_BAN, "imp_feature <feature> <sound/msg/both> <on/off/toogle>: activate/deactivate sound or/and message of feature."); plugin_registercmd("imp_set", "imp_set", ACCESS_BAN, "imp_set <feature> <subcommand> <value>: set needed values for some features"); plugin_registercmd("imp_plugin","imp_plugin",ACCESS_BAN, "imp_plugin <on/off>: de/activates the plugin."); /*ERROR CHECKS*/ value = getvar("mp_logdetail"); if(value!=3){ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] CRITICAL ERROR. mp_logdetail is not set to ^"3^" in server.cfg! ^"headshots^" can not be detected!"); log(Text); } load_vault_settings(); g_bombtimer = getvar("mp_c4timer"); g_maxplayers = maxplayercount(); /*REGISTER LOGD FUNCTIONS*/ plugin_registercmd("im_connect", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 51 admin_command im_connect" ); plugin_registercmd("im_disconnect", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 52 admin_command im_disconnect" ); plugin_registercmd("im_suicide", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 53 admin_command im_suicide" ); plugin_registercmd("im_kill", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 57 admin_command im_kill" ); plugin_registercmd("im_injure", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 58 admin_command im_injure" ); plugin_registercmd("im_playeraction", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 60 admin_command im_playeraction" ); plugin_registercmd("im_teamaction", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 61 admin_command im_teamaction" ); plugin_registercmd("im_world", "logd_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 62 admin_command im_world"); }else{ plugin_registerinfo("Impressive-Script","Plugin disabled! Please take a look in logfiles for more informations!",STRING_VERSION); snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] %i fatal errors. Plugin is disabled!",error); log(Text); } return PLUGIN_CONTINUE; } load_vault_settings(){ new Text[MAX_TEXT_LENGTH]; new sValue[MAX_TEXT_LENGTH]; new i; get_vaultnumdata("IMP_SOUNDS",g_Sounds); get_vaultnumdata("IMP_MESSAGES",g_Messages); get_vaultnumdata("IMP_PLUGIN",g_status_plugin); if(!g_status_plugin){ log("[IMPRESSIVE] PLUGIN IS DISABLED! ^"IMP_PLUGIN^" is not set in vault.ini!"); } get_vaultnumdata("IMP_KILLS_TIMER",g_kstimer); if(!g_kstimer){ log("[IMPRESSIVE] ^"killsintime^": ^"IMP_KILLS_TIMER^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"killsintime^": check-timer is set to %i sec!",g_kstimer); log(Text); } get_vaultnumdata("IMP_KILLS_IN_TIME_1",g_DOUBLEKILL); if(!g_DOUBLEKILL){ log("[IMPRESSIVE] ^"killsintime^": ^"IMP_KILLS_IN_TIME_1^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"killsintime^": %i frags are set to for first sound/msg!",g_DOUBLEKILL); log(Text); } get_vaultnumdata("IMP_KILLS_IN_TIME_2",g_MULTIKILL); if(!g_MULTIKILL){ log("[IMPRESSIVE] ^"killsintime^": ^"IMP_KILLS_IN_TIME_2^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"killsintime^": %i frags are set to for second sound/msg!",g_MULTIKILL); log(Text); } get_vaultnumdata("IMP_KILLS_IN_TIME_3",g_MONSTERKILL); if(!g_MONSTERKILL){ log("[IMPRESSIVE] ^"killsintime^": ^"IMP_KILLS_IN_TIME_3^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"killsintime^": %i frags are set to for third sound/msg!",g_MONSTERKILL); log(Text); } get_vaultnumdata("IMP_KILLSTREAK_1",g_KILLINGSPREE); if(!g_KILLINGSPREE){ log("[IMPRESSIVE] ^"killstreak^": ^"IMP_KILLSTREAK_1^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"killstreak^": %i frags are set to for first sound/msg!",g_KILLINGSPREE); log(Text); } get_vaultnumdata("IMP_KILLSTREAK_2",g_DOMINATING); if(!g_DOMINATING){ log("[IMPRESSIVE] ^"killstreak^": ^"IMP_KILLSTREAK_2^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"killstreak^": %i frags are set to for second sound/msg!",g_DOMINATING); log(Text); } get_vaultnumdata("IMP_KILLSTREAK_3",g_GODLIKE); if(!g_GODLIKE){ log("[IMPRESSIVE] ^"killstreak^": ^"IMP_KILLSTREAK_3^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"killstreak^": %i frags are set to for third sound/msg!",g_GODLIKE); log(Text); } get_vaultnumdata("IMP_TA_TIMER",g_tatimer); if(!g_tatimer){ log("[IMPRESSIVE] ^"teamattack^": ^"IMP_TA_WAIT^" is not set in vault.ini!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] ^"teamattack^": TA-check-timer is set to %i sec starting after round start!",g_tatimer); log(Text); } get_vaultnumdata("IMP_SCOREBOARD_MENU",g_menuenabled); if(g_menuenabled){ getstrvar( "amv_enable_beta", sValue, MAX_TEXT_LENGTH ); if(strstrx(sValue,"menu1")!=-1){ log("[IMPRESSIVE] ^"scoreboard^": menu-scoreboard is enabled !"); }else{ g_menuenabled=0; log("[IMPRESSIVE] ^"scoreboard^": can't enable menu-scoreboard! ^"amv_enable_beta 'menu1'^" not set in adminmod.cfg!"); } } /*LOAD SOUNDS AND MESSAGES*/ for(i=0;i<ALL_SOUNDS;i++){ strinit(sValue); snprintf(sValue,MAX_NAME_LENGTH,"IMP_SOUND_%i",i); get_vaultdata(sValue,g_Imp_Sounds[i],MAX_TEXT_LENGTH); if(!strlen(g_Imp_Sounds[i])){ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] No sound set! (IMP_SOUND_%i is empty!)",i); log(Text); }else{ if(!fileexists(g_Imp_Sounds[i])){ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] Wave file ^"%s^" not found on server!",g_Imp_Sounds[i]); log(Text); } } strinit(sValue); snprintf(sValue,MAX_NAME_LENGTH,"IMP_MSG_%i",i); get_vaultdata(sValue,g_TextMsg[i],MAX_TEXT_LENGTH); if(!strlen(g_TextMsg[i])){ snprintf(Text,MAX_TEXT_LENGTH,"[IMPRESSIVE] No message set! (IMP_MSG_%i is empty!)",i); log(Text); } } } public imp_plugin(HLCommand,HLData,HLUserName,UserIndex) { new Data[MAX_DATA_LENGTH]; convert_string(HLData,Data,MAX_DATA_LENGTH); g_status_plugin=check_param(Data); if(g_status_plugin){ selfmessage("[IMPRESSIVE] Plugin is enabled!"); }else{ selfmessage("[IMPRESSIVE] Plugin is disabled!"); } set_vaultnumdata("IMP_PLUGIN",g_status_plugin); return PLUGIN_HANDLED; } public imp_set(HLCommand,HLData,HLUserName,UserIndex) { new Data[MAX_DATA_LENGTH]; new User[MAX_NAME_LENGTH]; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); execclient(User,"clear"); strstripquotes(Data); set_timer("dis_set",1,0,Data); return PLUGIN_HANDLED; } public dis_set(Timer,Repeat,HLName,HLParam) { new Data[MAX_DATA_LENGTH]; new Text[MAX_TEXT_LENGTH]; new sCmd[MAX_COMMAND_LENGTH]; new sSubCmd[MAX_COMMAND_LENGTH]; new sValue[MAX_TEXT_LENGTH]; new sSubCmdFound[MAX_COMMAND_LENGTH]; new sSubVaultFound[MAX_COMMAND_LENGTH]; new sSubVaultValueFound[MAX_TEXT_LENGTH]; new ifeature; new iDelim; new i; convert_string(HLParam,Data,MAX_DATA_LENGTH); strsep(Data," ",sCmd,MAX_COMMAND_LENGTH,sSubCmd,MAX_COMMAND_LENGTH,sValue,MAX_TEXT_LENGTH); ifeature=get_feature(sCmd); if(!ifeature){ show_all_subcommands(); return PLUGIN_HANDLED; } if(strlen(g_SubCommands[ifeature])==0){ show_all_subcommands(); return PLUGIN_HANDLED; } if(strstrx(g_SubCommands[ifeature],sSubCmd)!=-1 && strlen(sValue)!=0){ selfmessage("================================="); selfmessage("[IMPRESSIVE] SETTINGS-CENTER:"); snprintf(Text,MAX_TEXT_LENGTH,"FEATURE: %s",g_Commands[ifeature]); selfmessage(Text); selfmessage("================================="); selfmessage("SUBCOMMANDS:^t^t^t^tVALUE"); iDelim=strcount(g_SubCommands[ifeature],','); if(iDelim==0){ get_vaultdata(g_SubVault[ifeature],sSubVaultValueFound,MAX_TEXT_LENGTH); set_vaultdata(g_SubVault[ifeature],sValue); snprintf(Text,MAX_TEXT_LENGTH,"* %s:^t^t^t^tchanged %s to %s",g_SubCommands[ifeature],sSubVaultValueFound,sValue); selfmessage(Text); }else{ for(i=0;i<=iDelim;i++){ extract_subvault(ifeature,i,sSubCmdFound,sSubVaultFound,sSubVaultValueFound); if(strcmp(sSubCmd,sSubCmdFound)==0){ set_vaultdata(sSubVaultFound,sValue); snprintf(Text,MAX_TEXT_LENGTH,"* %s:^t^t^t^tchanged %s to %s",sSubCmdFound,sSubVaultValueFound,sValue); selfmessage(Text); break; } } } load_vault_settings(); }else{ show_subcommands(ifeature); } return PLUGIN_HANDLED; } show_subcommands(ifeature){ new Text[MAX_TEXT_LENGTH]; new sSubCmd[MAX_TEXT_LENGTH]; new Dummy[MAX_COMMAND_LENGTH]; new sSubValue[MAX_TEXT_LENGTH]; new iDelimCmd; new i; selfmessage("================================="); selfmessage("[IMPRESSIVE] SETTINGS-CENTER:"); snprintf(Text,MAX_TEXT_LENGTH,"FEATURE: %s",g_Commands[ifeature]); selfmessage(Text); selfmessage("================================="); selfmessage("SUBCOMMANDS^t^t^t^tVALUE"); iDelimCmd=strcount(g_SubCommands[ifeature],','); if(iDelimCmd==0){ get_vaultdata(g_SubVault[ifeature],sSubValue,MAX_TEXT_LENGTH); snprintf(Text,MAX_TEXT_LENGTH,"* %s ->^t^t^t^t^t^t%s",g_SubCommands[ifeature],sSubValue); selfmessage(Text); }else{ for(i=0;i<=iDelimCmd;i++){ strinit(sSubCmd); strinit(sSubValue); extract_subvault(ifeature,i,sSubCmd,Dummy,sSubValue); snprintf(Text,MAX_TEXT_LENGTH,"* %s ->^t^t^t^t^t^t%s",sSubCmd,sSubValue); selfmessage(Text); } } selfmessage("==========(c) by Sir Drink a lot=========="); } extract_subvault(ifeature,iReturn,sSubCmd[],sSubVault[],sSubValue[]){ new sDummyCmd[MAX_TEXT_LENGTH]; new sDummyVault[MAX_TEXT_LENGTH]; new sSubCmdFound[MAX_COMMAND_LENGTH]; new sSubCmdVault[MAX_COMMAND_LENGTH]; new sVaultValue[MAX_TEXT_LENGTH]; new i; strcpy(sDummyCmd,g_SubCommands[ifeature],MAX_TEXT_LENGTH); strcpy(sDummyVault,g_SubVault[ifeature],MAX_TEXT_LENGTH); for(i=0;i<=iReturn;i++){ strinit(sSubCmdFound); strinit(sSubCmdVault); strsep(sDummyCmd,",",sSubCmdFound,MAX_COMMAND_LENGTH,sDummyCmd,MAX_TEXT_LENGTH); strsep(sDummyVault,",",sSubCmdVault,MAX_COMMAND_LENGTH,sDummyVault,MAX_TEXT_LENGTH); } get_vaultdata(sSubCmdVault,sVaultValue,MAX_TEXT_LENGTH); strcpy(sSubCmd,sSubCmdFound,MAX_COMMAND_LENGTH); strcpy(sSubVault,sSubCmdVault,MAX_COMMAND_LENGTH); strcpy(sSubValue,sVaultValue,MAX_TEXT_LENGTH); } show_all_subcommands(){ new Text[MAX_TEXT_LENGTH]; new SubCmd[MAX_TEXT_LENGTH]; new i; selfmessage("================================="); selfmessage("[IMPRESSIVE] SETTINGS-CENTER:"); selfmessage("================================="); selfmessage(" FEATURE:^t^t^t^t^tSUBCOMMANDS:"); for(i=0;i<MAX_FEATURES;i++){ if(strlen(g_SubCommands[i])==0){ strcpy(SubCmd,"none",MAX_TEXT_LENGTH); }else{ strcpy(SubCmd,g_SubCommands[i],MAX_TEXT_LENGTH); } snprintf(Text,MAX_TEXT_LENGTH," *%s: %s",g_Commands[i],SubCmd); selfmessage(Text); } selfmessage("==========(c) by Sir Drink a lot=========="); } public imp_feature(HLCommand,HLData,HLUserName,UserIndex) { new Data[MAX_DATA_LENGTH]; new User[MAX_NAME_LENGTH]; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); execclient(User,"clear"); strstripquotes(Data); set_timer("dis_feature",1,0,Data); return PLUGIN_HANDLED; } public dis_feature(Timer,Repeat,HLName,HLParam) { new Data[MAX_DATA_LENGTH]; new sToken1[MAX_COMMAND_LENGTH]; new sToken2[MAX_DATA_LENGTH]; new bSound = 0, bMessage = 0; new operation:Operation; new feature; new ID; convert_string(HLParam,Data,MAX_DATA_LENGTH); strsep(Data," ",sToken1,MAX_COMMAND_LENGTH,sToken2,MAX_DATA_LENGTH); /*HL-CONSOLE ALWAYS ADDS A SPACE AT THE END, IF YOU COPY/PASTE COMMANDS. LET'S REMOVE IT*/ strtrim(sToken1," ",1); if(!strlen(sToken1)) { show_config_all(); return PLUGIN_HANDLED; } ID = get_feature(sToken1); if(!(feature = 1<<ID)) { snprintf(Data,MAX_DATA_LENGTH,"[IMPRESSIVE] Feature ^"%s^" not found",sToken1); selfmessage(Data); return PLUGIN_HANDLED; } strinit(sToken1); strinit(Data); strsep(sToken2," ",sToken1,MAX_COMMAND_LENGTH,Data,MAX_DATA_LENGTH); strtrim(sToken1," ",1); if(!strlen(sToken1)) { selfmessage("================================="); selfmessage("[IMPRESSIVE] FEATURE-CENTER:"); selfmessage("================================="); show_config(feature,ID,1,0); show_config(feature,ID,0,1); selfmessage("==========(c) by Sir Drink a lot=========="); return PLUGIN_HANDLED; } strtrim(sToken1," ",1); if(!strcmp(sToken1,"sound")) { bSound = 1; } else if(!strcmp(sToken1,"msg")) { bMessage = 1; } else if(!strcmp(sToken1,"both")) { bMessage = bSound = 1; }else { snprintf(Data,MAX_DATA_LENGTH,"[IMPRESSIVE] ^"%s^" invalid! Only ^"sound/msg/all/set^" allowed!",sToken1); selfmessage(Data); return PLUGIN_HANDLED; } if(!strlen(Data)) { selfmessage("================================="); selfmessage("[IMPRESSIVE] FEATURE-CENTER:"); selfmessage("================================="); if(bSound){ show_config(feature,ID,1,0); } if(bMessage){ show_config(feature,ID,0,1); } selfmessage("==========(c) by Sir Drink a lot=========="); return PLUGIN_HANDLED; } strtrim(Data," ",1); if(!strcmp(Data,"on")) { Operation = enable; } else if(!strcmp(Data,"off")) { Operation = disable; } else if(!strcmp(Data,"toggle")) { Operation = toggle; } else { // Fehlermeldung & return selfmessage("[IMPRESSIVE] Only ^"on/off/toogle^" allowed!"); return PLUGIN_HANDLED; } if(bSound==1){ do_operation(g_Sounds, Operation, feature, bSound); set_vaultnumdata("IMP_SOUNDS",g_Sounds); show_config_all(); } if(bMessage==1){ do_operation(g_Messages, Operation, feature, bMessage); set_vaultnumdata("IMP_MESSAGES",g_Messages); show_config_all(); } return PLUGIN_CONTINUE; } do_operation(&variable, operation:Operation, feature, apply) { if(!apply) { return; } switch(Operation) { case enable: variable |= feature; case disable: variable &= ~feature; case toggle: variable ^= feature; } } get_feature(str[]) { new i; for(i=0;i<MAX_FEATURES;i++) { if(strstrx(str,g_Commands[i])!=-1) { return i; } } return 0; } show_config_all() { new i; new lastfeature = 1<<(MAX_FEATURES-1); new ID; selfmessage("================================="); selfmessage("[IMPRESSIVE] FEATURE-CENTER:"); selfmessage("================================="); selfmessage(" SOUND:^t^t^t^t^tMESSAGE:^t^t^t^t^tFEATURE:"); selfmessage("================================="); for(i = 1; i <= lastfeature; i<<=1) { show_config(i,ID); ID++; } selfmessage("==========(c) by Sir Drink a lot=========="); } show_config(feature, ID, bSound = 1, bMessage = 1) { new Text[MAX_TEXT_LENGTH]; new i; new start; if(bSound && bMessage){ if((g_Sounds & feature)&&(g_Messages & feature)){ snprintf(Text,MAX_TEXT_LENGTH,"* ACTIVATED -- ACTIVATED ^t^t-> %s",g_Commands[ID]); }else if((g_Sounds & feature)){ snprintf(Text,MAX_TEXT_LENGTH,"* ACTIVATED -- DEACTIVATED ^t^t-> %s",g_Commands[ID]); }else if((g_Messages & feature)){ snprintf(Text,MAX_TEXT_LENGTH,"* DEACTIVATED -- ACTIVATED ^t^t-> %s",g_Commands[ID]); }else{ snprintf(Text,MAX_TEXT_LENGTH,"* DEACTIVATED -- DEACTIVATED ^t^t-> %s",g_Commands[ID]); } selfmessage(Text); }else{ if(bSound){ if((g_Sounds & feature)) { snprintf(Text,MAX_TEXT_LENGTH,"* %s: SOUND is ACTIVATED!",g_Commands[ID]); }else{ snprintf(Text,MAX_TEXT_LENGTH,"* %s: SOUND is DEACTIVATED!",g_Commands[ID]); } selfmessage(Text); if(ID==0){ start=0; }else{ start=g_Features_SID[ID-1][0]+1; } for(i=start;i<=g_Features_SID[ID][0];i++){ snprintf(Text,MAX_TEXT_LENGTH,"* - IMP_SOUND_%i: %s",i,g_Imp_Sounds[i]); selfmessage(Text); strinit(Text); } } if(bMessage){ if((g_Messages & feature)) { snprintf(Text,MAX_TEXT_LENGTH,"* %s: MESSAGE is ACTIVATED!",g_Commands[ID]); }else{ snprintf(Text,MAX_TEXT_LENGTH,"* %s: MESSAGE is DEACTIVATED!",g_Commands[ID]); } selfmessage(Text); if(ID==0){ start=0; }else{ start=g_Features_SID[ID-1][0]+1; } for(i=start;i<=g_Features_SID[ID][0];i++){ snprintf(Text,MAX_TEXT_LENGTH,"* - IMP_MSG_%i: %s",i,g_TextMsg[i]); selfmessage(Text); strinit(Text); } } } } /////////////////////// /// LOGD - HANDLING /// /////////////////////// public logd_handler(HLCommand,HLData,HLUserName,UserIndex){ if(g_status_plugin){ new Command[MAX_COMMAND_LENGTH]; new Data[MAX_DATA_LENGTH]; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLData,Data,MAX_DATA_LENGTH); switch(Command[3]){ case 'c': connect(Data); case 'd': disconnect(Data); case 's': suicide(Data); case 'k': kill(Data); case 'i': injure(Data); case 'p': playeraction(Data); case 't': teamaction(Data); case 'w': worldaction(Data); } } return PLUGIN_CONTINUE; } connect(Data[]){ new UserIndex; UserIndex=strtonum(Data); reset_playerarray(UserIndex); check_lead(); } disconnect(Data[]){ new UserIndex; UserIndex=strtonum(Data); reset_playerarray(UserIndex); check_lead(); } suicide(Data[]){ new Weapon[MAX_NAME_LENGTH]; new sUserIndex[3]; new UserIndex; strbreak(Data,sUserIndex,Weapon,MAX_DATA_LENGTH); UserIndex=strtonum(sUserIndex); g_Killstreak[UserIndex]=CLEAN_SLATE; g_KillsRound[UserIndex]-=1; check_lead(); player_suicide(UserIndex); } kill(Data[]){ new Attacker[MAX_NAME_LENGTH]; new Victim[MAX_NAME_LENGTH]; new Weapon[MAX_NAME_LENGTH]; new sAttacker[3]; new sVictim[3]; new iAID; new iVID; new iTeamA; new iTeamV; strsplit(Data," ",sAttacker,3,sVictim,3,Weapon,MAX_NAME_LENGTH); iAID=strtonum(sAttacker); iVID=strtonum(sVictim); check_lead(); if(playerinfo(iAID,Attacker,MAX_NAME_LENGTH,_,_,iTeamA)){ if(playerinfo(iVID,Victim,MAX_NAME_LENGTH,_,_,iTeamV)){ if(iTeamA!=iTeamV){ g_Killstreak[iAID]+=1; g_KillsInTime[iAID]+=1; g_KillsRound[iAID]+=1; lastscout(); killsintime(Attacker,iAID); weaponkill(Attacker,Victim,Weapon); killstreak(Attacker,iAID); if(!g_firstblood){ g_firstblood=1; firstblood(Attacker); } }else{ g_KillsRound[iAID]-=1; g_Killstreak[iAID]-=1; } g_Killstreak[iVID]=CLEAN_SLATE; } } } injure(Data[]){ new Dummy[MAX_DATA_LENGTH]; new sAttacker[3]; new sVictim[3]; new Weapon[MAX_NAME_LENGTH]; new Attacker[MAX_NAME_LENGTH]; new Victim[MAX_NAME_LENGTH]; new iAID; new iVID; new iTeamA; new iTeamV; new sDamage[4]; new sHealth[4]; new iDamage; new iHealth; strsep(Data," ",sAttacker,3,sVictim,3,Weapon,MAX_NAME_LENGTH,Dummy,MAX_DATA_LENGTH); strsplit(Dummy,"#",sDamage,4,sDamage,4,sHealth,4,sHealth,4); iAID=strtonum(sAttacker); iVID=strtonum(sVictim); iDamage=strtonum(sDamage); iHealth=strtonum(sHealth); if(playerinfo(iAID,Attacker,MAX_NAME_LENGTH,_,_,iTeamA)){ if(playerinfo(iVID,Victim,MAX_NAME_LENGTH,_,_,iTeamV)){ if(iTeamA==iTeamV){ teamattack(Attacker); }else{ if(iHealth<=0){ if(iDamage>=MIN_HS_DAMAGE){ headshot(Attacker,Weapon,iDamage,iAID); } } } } } } playeraction(Data[]){ new sID[3]; new Player[MAX_NAME_LENGTH]; new Action[MAX_DATA_LENGTH]; new CurMap[MAX_NAME_LENGTH]; new iID; strbreak(Data,sID,Action,MAX_DATA_LENGTH); iID=strtonum(sID); if(playerinfo(iID,Player,MAX_NAME_LENGTH)){ currentmap(CurMap,MAX_NAME_LENGTH); if(strncmp(CurMap,"de_",3)==0){ if(strcmp(Action, "Spawned_With_The_Bomb") == 0) { bomb(Player,BOMBSPAWNED); }else if(strcmp(Action, "Got_The_Bomb") == 0) { bomb(Player,BOMBGET); }else if(strcmp(Action, "Dropped_The_Bomb") == 0) { bomb(Player,BOMBDROP); }else if(strcmp(Action, "Planted_The_Bomb") == 0) { bomb(Player,BOMBPLANT); }else if(strncmp(Action, "Begin_",6) == 0) { bomb(Player,STARTDEFUSE); }else if(strcmp(Action, "Defused_The_Bomb") == 0) { bomb(Player,BOMBDEFUSED); } }else if(strncmp(CurMap,"cs_",3)==0){ switch(Action[0]){ case 'T': hostage(Player,TOUCHHOSTAGE); case 'R': hostage(Player,RESCUEHOSTAGE); case 'K': hostage(Player,KILLEDHOSTAGE); } }else if(strncmp(CurMap,"as_",3)==0){ switch(Action[0]){ case 'B': player_vip(Player,BECAMEVIP); case 'V': player_vip(Player,KILLEDVIP); case 'E': player_vip(Player,ESCAPEVIP); } } } } teamaction(Data[]){ new Data1[MAX_DATA_LENGTH]; new Data2[MAX_DATA_LENGTH]; new Action[MAX_NAME_LENGTH]; new dummy[10]; new CTS[6]; new TS[6]; new iCTS; new iTS; strbreak(Data,Data1,Data2,MAX_DATA_LENGTH); strsplit(Data2, "# " ,Action,MAX_DATA_LENGTH,dummy,10,CTS,MAX_NUMBER_LENGTH,dummy,10,TS,MAX_NUMBER_LENGTH); if(strcmp(Action,"Target_Bombed")==0){ bomb("",BOMBDETONATE); } iCTS=strtonum(CTS); iTS=strtonum(TS); scoreboard(iCTS,iTS); return PLUGIN_CONTINUE; } worldaction(Data[]){ if(Data[8]=='R' || Data[0]=='G'){ new i; g_leader=0; g_rounds=0; for(i=0;i<=g_maxplayers;i++){ reset_playerarray(i); } }else if(Data[6]=='S') { g_firstblood=0; reset_playerarray(ALL); roundcounter(); check_lead(); g_teamattack=1; g_curbombtimer=0; set_timer("teamattack_rs",g_tatimer,0); }else if(Data[6]=='E'){ g_curbombtimer=999; } } ////////////////////////////////// // IMPRESSIVE FEATURE FUNCTIONS // ////////////////////////////////// //////////// /*HEADSHOT*/ //////////// headshot(Player[],Weapon[],iDamage,UserIndex){ if((g_Messages & HEADSHOT) || (g_Sounds & HEADSHOT)){ new a; new i; new Text[MAX_TEXT_LENGTH]; for(i=0;i<MAX_WEAPONS;i++){ if (strcmp(Weapon,g_WeaponName[i])==0 && iDamage >= g_WeaponDamage[i][0]){ snprintf(Text,MAX_TEXT_LENGTH,"%s: Headshot with %s (%i HP)",Player,Weapon,iDamage); display_all_a(Text,ALL,print_chat); a= random(3); if(a==0){ a=S_HEADSHOT1; }else if(a==1){ a=S_HEADSHOT2; }else{ a=S_HEADSHOT3; } g_HSinRound[UserIndex]+=1; prepare_message(Player,a,HEADSHOT); sound_all_a(ALL,a,HEADSHOT); } } } } ///////////////// /*KILLS IN TIME*/ ///////////////// killsintime(Player[],UserIndex){ if((g_Messages & KILLS_IN_TIME) || (g_Sounds & KILLS_IN_TIME)){ if(g_KillsTimer[UserIndex]==0){ set_timer("count_kills_in_time",g_kstimer,0,Player); } } } public count_kills_in_time(Timer,Repeat,HLName,HLParam) { new Player[MAX_NAME_LENGTH]; new UserIndex; convert_string(HLParam,Player,MAX_NAME_LENGTH); get_userindex(Player,UserIndex); if(g_KillsInTime[UserIndex]==g_DOUBLEKILL){ prepare_message(Player,S_DOUBLEKILL,KILLS_IN_TIME); sound_all_a(ALL,S_DOUBLEKILL,KILLS_IN_TIME); }else if(g_KillsInTime[UserIndex]==g_MULTIKILL){ prepare_message(Player,S_MULTIKILL,KILLS_IN_TIME); sound_all_a(ALL,S_MULTIKILL,KILLS_IN_TIME); }else if(g_KillsInTime[UserIndex]>=g_MONSTERKILL){ prepare_message(Player,S_MONSTERKILL,KILLS_IN_TIME); sound_all_a(ALL,S_MONSTERKILL,KILLS_IN_TIME); } g_KillsTimer[UserIndex]=CLEAN_SLATE; g_KillsInTime[UserIndex]=CLEAN_SLATE; return PLUGIN_CONTINUE; } ////////////// /*KILLSTREAK*/ ////////////// killstreak(Player[],UserIndex){ if((g_Messages & KILLSTREAK) || (g_Sounds & KILLSTREAK)){ if(g_Killstreak[UserIndex] == g_KILLINGSPREE){ prepare_message(Player,S_KILLINGSPREE,KILLSTREAK); sound_all_a(ALL,S_KILLINGSPREE,KILLSTREAK); }else if(g_Killstreak[UserIndex] == g_DOMINATING){ prepare_message(Player,S_DOMINATING,KILLSTREAK); sound_all_a(ALL,S_DOMINATING,KILLSTREAK); }else if(g_Killstreak[UserIndex] >= g_GODLIKE){ prepare_message(Player,S_GODLIKE,KILLSTREAK); sound_all_a(ALL,S_GODLIKE,KILLSTREAK); } } } ////////////// /*FIRSTBLOOD*/ ////////////// firstblood(Player[]){ if((g_Messages & FIRSTBLOOD) || (g_Sounds & FIRSTBLOOD)){ prepare_message(Player,S_FIRSTBLOOD,FIRSTBLOOD); sound_all_a(ALL,S_FIRSTBLOOD,FIRSTBLOOD); } } ////////////////////////////////// /*TAKENLEAD, LOSTLEAD, TIEDLEAD */ ////////////////////////////////// check_lead(){ if((g_Messages & LEAD) || (g_Sounds & LEAD)){ new Target[MAX_NAME_LENGTH]; new frags; new maxfrags; new leader; new i; new iDead; /*FIND THE LEADER*/ for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Target,MAX_NAME_LENGTH)){ get_userFrags( Target, frags ); if(frags>maxfrags){ maxfrags=frags; leader=i; }else if(frags==maxfrags){ leader=0; } } } if(maxfrags!=0){ if(leader!=0){ if(g_leader!=leader){ /*New Leader: display message to all, play sound to player*/ if(playerinfo(leader,Target,MAX_NAME_LENGTH)){ prepare_message(Target,S_TAKENLEAD,LEAD); sound_target_a(Target,S_TAKENLEAD,LEAD); } /*Old Leader: display message and play sound to old leader*/ if(g_leader!=0){ if(playerinfo(g_leader,Target,MAX_NAME_LENGTH)){ prepare_message(Target,S_LOSTLEAD,LEAD,DIS_TARGET_A,TARGET,PREFERRED_TYPE_PRIVATE); sound_target_a(Target,S_LOSTLEAD,LEAD); } } g_leader=leader; } }else{ /*Old Leader: display message to all and play sound to old leader*/ if(g_leader!=0){ if(playerinfo(g_leader,Target,MAX_NAME_LENGTH)){ prepare_message(Target,S_LOSTLEAD,LEAD); sound_target_a(Target,S_LOSTLEAD,LEAD); } } /*All tied for lead: display message and play sound to all who are tied for the lead*/ for(i=1;i<=g_maxplayers;i++){ if(g_leader!=i){ /*EXCEPT THE OLD LEADER*/ if(playerinfo(i,Target,MAX_NAME_LENGTH,_,_,_,iDead)){ /*Don't play, if player is dead, else repeat every time*/ if(!iDead){ get_userFrags( Target, frags ); if(frags==maxfrags){ prepare_message(Target,S_TIEDLEAD,LEAD,DIS_TARGET_A,TARGET,PREFERRED_TYPE_PRIVATE); sound_target_a(Target,S_TIEDLEAD,LEAD); } } } } } g_leader=0; } } } } /////////////// /*TEAM ATTACK*/ /////////////// teamattack(Player[]){ if((g_Messages & TEAMATTACK) || (g_Sounds & TEAMATTACK)){ prepare_message(Player,S_TEAMATTACK,TEAMATTACK,DIS_TARGET,ALL,P_MSAY); sound_target_a(Player,S_TEAMATTACK,TEAMATTACK); if(g_teamattack){ slay(Player); } } } public teamattack_rs(Timer,Repeat,HLName,HLParam) { g_teamattack=0; } //////////////////////////////////////////////////// /*KILLS WITH SPECIAL WEPAONS (e.g. knife or grenade)*/ //////////////////////////////////////////////////// weaponkill(Player[],Victim[],Weapon[]){ if(strcmp(Weapon,"knife")==0){ if((g_Messages & KNIFEKILL) || (g_Sounds & KNIFEKILL)){ prepare_message(Player,S_KNIFEKILL,KNIFEKILL,PREFERRED_DISPLAY,ALL,PREFERRED_TYPE_ALL,Victim); sound_all_a(ALL,S_KNIFEKILL,KNIFEKILL); } }else if(strcmp(Weapon,"grenade")==0){ if((g_Messages & GRENADEKILL) || (g_Sounds & GRENADEKILL)){ prepare_message(Player,S_GRENADEKILL,GRENADEKILL,PREFERRED_DISPLAY,ALL,PREFERRED_TYPE_ALL,Victim); sound_all_a(ALL,S_GRENADEKILL,GRENADEKILL); } } } ///////////////// /*ROUND COUNTER*/ ///////////////// roundcounter(){ if((g_Messages & ROUNDCOUNTER) || (g_Sounds & ROUNDCOUNTER)){ new Text[MAX_TEXT_LENGTH]; new strRounds[MAX_NUMBER_LENGTH]; g_rounds++; numtoword(g_rounds,strRounds,MAX_NUMBER_LENGTH); snprintf(Text,MAX_DATA_LENGTH,"round %s",strRounds); set_timer("speak_round",2,0,Text); numtostr(g_rounds,strRounds); prepare_message(strRounds,S_ROUNDCOUNTER,ROUNDCOUNTER); sound_all_a(ALL,S_ROUNDCOUNTER,ROUNDCOUNTER); } } public speak_round(Timer,Repeat,HLName,HLParam) { new Output[MAX_DATA_LENGTH]; convert_string(HLParam,Output,MAX_DATA_LENGTH); speak_all_a(ALL,Output,ROUNDCOUNTER); } //////////////////////////////////////////////////////////// /* BOMB EVENTS (everything, which can happen at de_ maps) */ //////////////////////////////////////////////////////////// bomb(Target[],ID){ switch(ID){ case BOMBSPAWNED:{ if((g_Messages & BOMBSPAWNED) || (g_Sounds & BOMBSPAWNED)){ prepare_message(Target,S_BOMBSPAWNED,BOMBSPAWNED,DIS_ALL_A,T,PREFERRED_TYPE_PRIVATE); sound_target_a(Target,S_BOMBSPAWNED,BOMBSPAWNED); glow(Target,250,10,10); new iUser; get_userindex(Target,iUser); numtostr(iUser,Target); set_timer("glow_off",10,0,Target); } } case BOMBGET:{ if((g_Messages & BOMBGET) || (g_Sounds & BOMBGET)){ prepare_message(Target,S_BOMBGET,BOMBGET,DIS_ALL_A,T,PREFERRED_TYPE_PRIVATE); sound_target_a(Target,S_BOMBGET,BOMBGET); } } case BOMBDROP:{ if((g_Messages & BOMBDROP) || (g_Sounds & BOMBDROP)){ prepare_message(Target,S_BOMBDROP,BOMBDROP,DIS_ALL_A,T,PREFERRED_TYPE_PRIVATE); sound_target_a(Target,S_BOMBDROP,BOMBDROP); } } case BOMBPLANT:{ strinit(g_BombPlanter); strcpy(g_BombPlanter,Target,MAX_NAME_LENGTH); if((g_Messages & BOMBPLANT) || (g_Sounds & BOMBPLANT)){ prepare_message(Target,S_BOMBPLANT,BOMBPLANT); sound_all_a(ALL,S_BOMBPLANT,BOMBPLANT); } if(g_curbombtimer!=999){ if((g_Messages & BOMBTIMER) || (g_Sounds & BOMBTIMER)){ new wait; if(g_bombtimer>=30){ wait=g_bombtimer-30; g_curbombtimer=30; }else if(20 <= g_bombtimer < 30){ wait=g_bombtimer-20; g_curbombtimer=20; } set_timer("bombtimer",wait,0); } } } case STARTDEFUSE:{ if((g_Messages & STARTDEFUSE) || (g_Sounds & STARTDEFUSE)){ prepare_message(Target,S_STARTDEFUSE,STARTDEFUSE,DIS_ALL_A,CT,PREFERRED_TYPE_PRIVATE); sound_target_a(Target,S_STARTDEFUSE,STARTDEFUSE); } } case BOMBDEFUSED:{ if((g_Messages & BOMBDEFUSED) || (g_Sounds & BOMBDEFUSED)){ prepare_message(Target,S_BOMBDEFUSED,BOMBDEFUSED); sound_all_a(ALL,S_BOMBDEFUSED,BOMBDEFUSED); } } case BOMBDETONATE:{ if((g_Messages & BOMBDETONATE) || (g_Sounds & BOMBDETONATE)){ prepare_message(g_BombPlanter,S_BOMBDETONATE,BOMBDETONATE); sound_all_a(ALL,S_BOMBDETONATE,BOMBDETONATE); } } } } public glow_off(Timer,Repeat,HLName,HLParam) { new Target[MAX_NAME_LENGTH]; new strUser[3]; new iUser; convert_string(HLParam,strUser,MAX_NAME_LENGTH); iUser=strtonum(strUser); if(playerinfo(iUser,Target,MAX_NAME_LENGTH)){ glow(Target,0,0,0); } } public bombtimer(Timer,Repeat,HLName,HLParam) { if(g_curbombtimer!=999){ new Text[MAX_TEXT_LENGTH]; new C4Timer[MAX_NUMBER_LENGTH]; new wait; numtoword(g_curbombtimer,C4Timer,MAX_NUMBER_LENGTH); if(g_curbombtimer>5){ snprintf(Text,MAX_TEXT_LENGTH,"detonation in %s seconds",C4Timer); prepare_message(Text,S_BOMBTIMER,BOMBTIMER); speak_all_a(ALL,Text,BOMBTIMER); sound_all_a(ALL,S_BOMBTIMER,BOMBTIMER); }else if(g_curbombtimer!=0){ snprintf(Text,MAX_TEXT_LENGTH,"%s",C4Timer); prepare_message(Text,S_BOMBTIMER,BOMBTIMER); speak_all_a(ALL,Text,BOMBTIMER); sound_all_a(ALL,S_BOMBTIMER,BOMBTIMER); } switch(g_curbombtimer){ case 30:{ g_curbombtimer=20; wait=10; } case 20:{ g_curbombtimer=10; wait=10; } case 10:{ g_curbombtimer=5; wait=4; } case 5: { g_curbombtimer=4; wait=1; } case 4: { g_curbombtimer=3; wait=1; } case 3: { g_curbombtimer=2; wait=1; } case 2: { g_curbombtimer=1; wait=1; } case 1: { g_curbombtimer=0; wait=1; } } set_timer("bombtimer",wait,0); } return PLUGIN_CONTINUE; } /////////////////////////////////////////////////////////////// /* HOSTAGE EVENTS (everything, which can happen at cs_ maps) */ /////////////////////////////////////////////////////////////// hostage(Target[],ID){ switch(ID){ case TOUCHHOSTAGE:{ if((g_Messages & TOUCHHOSTAGE) || (g_Sounds & TOUCHHOSTAGE)){ prepare_message(Target,S_TOUCHHOSTAGE,TOUCHHOSTAGE,DIS_ALL_A,CT,PREFERRED_TYPE_PRIVATE); sound_all_a(CT,S_TOUCHHOSTAGE,TOUCHHOSTAGE); } } case RESCUEHOSTAGE:{ if((g_Messages & RESCUEHOSTAGE) || (g_Sounds & RESCUEHOSTAGE)){ prepare_message(Target,S_RESCUEHOSTAGE,RESCUEHOSTAGE,DIS_ALL_A,CT,PREFERRED_TYPE_PRIVATE); sound_all_a(ALL,S_RESCUEHOSTAGE,RESCUEHOSTAGE); } } case KILLEDHOSTAGE:{ if((g_Messages & KILLEDHOSTAGE) || (g_Sounds & KILLEDHOSTAGE)){ prepare_message(Target,S_KILLEDHOSTAGE,KILLEDHOSTAGE); sound_all_a(ALL,S_KILLEDHOSTAGE,KILLEDHOSTAGE); } } } } //////////////////// /* PLAYER SUICIDE */ //////////////////// player_suicide(UserIndex){ if((g_Messages & SUICIDE) || (g_Sounds & SUICIDE)){ new Player[MAX_NAME_LENGTH]; if(get_playername(UserIndex,Player)){ prepare_message(Player,S_PLAYERSUICIDE,SUICIDE); sound_all_a(ALL,S_PLAYERSUICIDE,SUICIDE); } } } //////////////// /* LAST SCOUT */ //////////////// lastscout(){ if((g_Messages & LASTSCOUT) || (g_Sounds & LASTSCOUT)){ new Target[MAX_NAME_LENGTH]; new iTeam; new iDead; new i; new lastT; new lastCT; new iT; new iCT; for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Target,MAX_NAME_LENGTH,_,_,iTeam,iDead)){ if(!iDead){ if(iTeam==T){ iT++; lastT=i; }else if(iTeam==CT){ iCT++; lastCT=i; } if(iT >= 2 && iCT >= 2){ iT=0; iCT=0; break; } } } } if(iT==1 && iCT>0 && g_lastT==0){ if(playerinfo(lastT,Target,MAX_NAME_LENGTH)){ prepare_message(Target,S_LASTSCOUT,LASTSCOUT,DIS_ALL_A,T,PREFERRED_TYPE_PRIVATE); sound_all_a(T,S_LASTSCOUT,LASTSCOUT); g_lastT=1; } } if(iCT==1 && iT>0 && g_lastCT==0){ if(playerinfo(lastCT,Target,MAX_NAME_LENGTH)){ prepare_message(Target,S_LASTSCOUT,LASTSCOUT,DIS_ALL_A,CT,PREFERRED_TYPE_PRIVATE); sound_all_a(CT,S_LASTSCOUT,LASTSCOUT); g_lastCT=1; } } } } /////////////////////////////////////////////////////////// /* VIP EVENTS (everything, which can happen at as_ maps) */ /////////////////////////////////////////////////////////// player_vip(Target[],ID){ switch(ID){ case BECAMEVIP:{ if((g_Messages & BECAMEVIP) || (g_Sounds & BECAMEVIP)){ prepare_message(Target,S_BECAMEVIP,BECAMEVIP,DIS_TARGET_A,CT,PREFERRED_TYPE_PRIVATE); sound_target_a(Target,S_BECAMEVIP,BECAMEVIP); } } case KILLEDVIP:{ if((g_Messages & KILLEDVIP) || (g_Sounds & KILLEDVIP)){ prepare_message(Target,S_KILLEDVIP,KILLEDVIP); sound_all_a(ALL,S_KILLEDVIP,KILLEDVIP); } } case ESCAPEVIP:{ if((g_Messages & ESCAPEVIP) || (g_Sounds & ESCAPEVIP)){ prepare_message(Target,S_ESCAPEVIP,ESCAPEVIP); sound_all_a(ALL,S_ESCAPEVIP,ESCAPEVIP); } } } } //////////////// /* SCOREBOARD */ //////////////// scoreboard(iCT,iT){ if((g_Messages & SCOREBOARD) || (g_Sounds & SCOREBOARD)){ new Text[512]; new Target[MAX_NAME_LENGTH]; new Player[5][3]; new Frags[5][4]; new iFrags; new i; new j; new k; new x; /*FIND THE 5 Best Players*/ for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Target,MAX_NAME_LENGTH)){ if(g_KillsRound[i]!=0){ /*Check Frag Array*/ for(j=0;j<5;j++){ if(g_KillsRound[i]>Frags[j][0]){ if(j<5){ /*shift stored values -1*/ for(k=4;k>j;k--){ Frags[k]=Frags[k-1]; Player[k]=Player[k-1]; } Frags[j][0]=g_KillsRound[i]; Player[j][0]=i; x++; break; }else{ Frags[j][0]=g_KillsRound[i]; Player[j][0]=i; x++; break; } } } } } } if(g_menuenabled){ snprintf(Text,MAX_TEXT_LENGTH,"\wCT: \y%i -- \rT: \y%i^nBest in round:",iCT,iT); for(i=0;i<3;i++){ if(Player[i][0]!=0){ if(playerinfo(Player[i][0],Target,MAX_NAME_LENGTH)){ snprintf(Text,MAX_TEXT_LENGTH,"%s^n\y%s -- %i (%i)",Text,Target,Frags[i],g_HSinRound[Player[i][0]]); } } } if(g_leader!=0){ if(playerinfo(g_leader,Target,MAX_NAME_LENGTH)){ get_userFrags(Target,iFrags); snprintf(Text,MAX_TEXT_LENGTH,"%s^n^n\yBest of map:^n\w%s -- %i",Text,Target,iFrags); } } display_all_a(Text,ALL,P_MSAY); }else{ snprintf(Text,MAX_TEXT_LENGTH,"CT: %i -- T: %i^nBest in round:",iCT,iT); if(Player[0][0]!=0){ if(playerinfo(Player[0][0],Target,MAX_NAME_LENGTH)){ snprintf(Text,MAX_TEXT_LENGTH,"%s^n%s -- %i (%i)",Text,Target,Frags[0],g_HSinRound[Player[0][0]]); } } if(g_leader!=0){ if(playerinfo(g_leader,Target,MAX_NAME_LENGTH)){ get_userFrags(Target,iFrags); snprintf(Text,MAX_TEXT_LENGTH,"%s^nBest of map:^n%s -- %i",Text,Target,iFrags); } } display_all_a(Text,ALL,PREFERRED_TYPE_PRIVATE); } } } ////////////////////// // HELPER FUNCTIONS // ////////////////////// prepare_message(Part1[],SID,ID,MSGID=PREFERRED_DISPLAY,TEAM=ALL,TYPE=PREFERRED_TYPE_ALL,Part2[]=""){ if((g_Messages & ID)){ new Text[MAX_TEXT_LENGTH]; snprintf(Text,MAX_TEXT_LENGTH,g_TextMsg[SID],Part1,Part2); if(MSGID==DIS_ALL_A){ display_all_a(Text,TEAM,TYPE); }else if (MSGID==DIS_TARGET_A){ display_target_a(Text,Part1,TYPE); }else if (MSGID==DIS_ALL){ display_all(Text,TYPE); }else if (MSGID==DIS_TARGET){ display_target(Text,Part1,TYPE); } } } reset_playerarray(UserIndex){ if(UserIndex!=-1){ g_KillsInTime[UserIndex]=CLEAN_SLATE; g_KillsTimer[UserIndex]=CLEAN_SLATE; g_Killstreak[UserIndex]=CLEAN_SLATE; g_HSinRound[UserIndex]=CLEAN_SLATE; g_KillsRound[UserIndex]=CLEAN_SLATE; }else{ new i; for(i=1;i<=g_maxplayers;i++){ g_KillsInTime[i]=CLEAN_SLATE; g_KillsTimer[i]=CLEAN_SLATE; g_KillsRound[i]=CLEAN_SLATE; g_HSinRound[i]=CLEAN_SLATE; } } } stock get_playername(UserIndex,PlayerName[]){ if(playerinfo(UserIndex,PlayerName,MAX_NAME_LENGTH)){ return 1; } return 0; } stock do_numtoword(iNum,str[],iLevel,iLength) { /* If there is more than one group of 3, then take care of the others first. */ if(iNum >= 1000) do_numtoword(iNum / 1000,str,iLevel + 1,iLength); /* Grab the the first 3 digits only */ iNum %= 1000; /* Isolate each digit */ new _hundreds = iNum / 100; new _tens = (iNum / 10) % 10; new _ones = iNum % 10; /* Take care of the teen numbers */ if(_tens == 1 && _ones != 0) { snprintf(str,iLength,"%s%s%s%s",str,HundredsLib[_hundreds],TeensLib[_ones],GroupNamesLib[iLevel]); } else { snprintf(str,iLength,"%s%s%s%s%s",str,HundredsLib[_hundreds], TensLib[_tens], OnesLib[_ones],GroupNamesLib[iLevel]); } if(iLevel==0) str[strlen(str)-1] = 0; /* Gets rid of the trailing space*/ return 1; } stock numtoword(iNum,str[],iLength) { /* Empties the first char of the string */ str[0] = 0; str[iLength-1] = 0; if(iNum == 0) { snprintf(str,iLength,"zero"); return 1; } if(iNum < 0) { iNum *= -1; snprintf(str,iLength,"negative "); } return do_numtoword(iNum,str,0,iLength); } ////////////////////////////// // SOUND AND MESSAGE OUTPUT // ////////////////////////////// allowsound(User[]){ new Info[MAX_NUMBER_LENGTH]; new iInfo; new Authid[MAX_AUTHID_LENGTH]; get_userAuthID(User,Authid,MAX_AUTHID_LENGTH); if(strcmp(Authid,"BOT")!=0){ get_userinfo(User,Key,Info,MAX_NUMBER_LENGTH); iInfo=strtonum(Info); if(strlen(Info)==0 || iInfo > 0){/*damit wird automatisch immer der Sound auf 1 gesetzt,wenn kein setinfo vorhanden, bis 'stop' eingegeben wird*/ return 1; } } return 0; } /*MESSAGE OUTPUT*/ /*CHECK FOR ALLOWSOUND*/ stock display_all_a(Text[],iTeam,iType){ new Target[MAX_NAME_LENGTH]; new iTeamB; new i; for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Target,MAX_NAME_LENGTH,_,_,iTeamB)){ if(allowsound(Target)){ if(iTeam!=-1){ if(iTeam==iTeamB){ if(iType!=P_MSAY){ messageex(Target,Text,print_type:iType); }else{ if(g_menuenabled){ menu(Target,Text,1023,8); }else{ messageex(Target,Text,print_tty); } } } }else{ if(iType!=P_MSAY){ messageex(Target,Text,print_type:iType); }else{ if(g_menuenabled){ menu(Target,Text,1023,8); }else{ messageex(Target,Text,print_tty); } } } } } } } stock display_target_a(Text[],Target[],iType){ if(allowsound(Target)){ if(iType!=P_MSAY){ messageex(Target,Text,print_type:iType); }else{ if(g_menuenabled){ menu(Target,Text,1023,8); }else{ messageex(Target,Text,print_tty); } } } } /*NO CHECK FOR ALLOWSOUND*/ stock display_all(Text[],iType){ if(iType==TSAY){ typesay(Text,12,random(250),random(250),random(250)); }else{ centersay(Text,12,random(250),random(250),random(250)); } } stock display_target(Text[],Target[],iType){ if(iType!=P_MSAY){ messageex(Target,Text,print_type:iType); }else{ if(g_menuenabled){ menu(Target,Text,1023,8); }else{ messageex(Target,Text,print_tty); } } } /*SOUND OUTPUT*/ /*CHECK FOR ALLOWSOUND*/ stock sound_all_a(iTeam,SID,ID){ if((g_Sounds & ID)){ new Target[MAX_NAME_LENGTH]; new iTeamB; new i; for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Target,MAX_NAME_LENGTH,_,_,iTeamB)){ if(allowsound(Target)){ if(iTeam!=-1){ if(iTeam==iTeamB){ playsound(Target,g_Imp_Sounds[SID]); } }else{ playsound(Target,g_Imp_Sounds[SID]); } } } } } } stock sound_target_a(Target[],SID,ID){ if((g_Sounds & ID)){ if(allowsound(Target)){ playsound(Target,g_Imp_Sounds[SID]); } } } /*NO CHECK FOR ALLOWSOUND*/ stock sound_target(Target[],SID,ID){ if((g_Sounds & ID)){ playsound(Target,g_Imp_Sounds[SID]); } } /*HL-SPEECH OUTPUT*/ stock speak_all_a(iTeam,Output[],ID){ if((g_Sounds & ID)){ new Target[MAX_NAME_LENGTH]; new iTeamB; new i; for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Target,MAX_NAME_LENGTH,_,_,iTeamB)){ if(allowsound(Target)){ if(iTeam!=-1){ if(iTeam==iTeamB){ speakto(Target,Output); } }else{ speakto(Target,Output); } } } } } } stock speak_target_a(Target[],Output[],ID){ if((g_Sounds & ID)){ if(allowsound(Target)){ speakto(Target,Output); } } }