// plugin_method_time.sma // Server Time/Date Stopwatch/Alarm Plugin // // Coded by [geist.method] // Haelfire (c) // "Powered by AdminMod" // // code snippets credit to their original author(s) // heh, yea, my code is sloppy and could stand to be cleaned up, but // at least it works ;) if you can improve upon it, please do... // // Usage: // say 'thetime' or a sentence with both 'the' and 'time' ie; // 'Hey, what's the time?'to display and speak server // time/date to all clients // // admin_stopwatch starts a simple counter, admin_stopwatch // stops it and displays the elapsed difference (also // speaks 'enabled'/'disabled') // // admin_alarmstatus displays current alarms // // admin_alarmXset sets alarm X with these params: // admin_alarmXset <hour> <minute> <repeat> <msg> // <hour> must be in 24 hour military time format, between 00-23 - 2 digits // <minute> must be an actual minute, between 00-59 - 2 digits // <repeat> either 1 to repeat daily, or 0 for a single occurance // <msg>(optional) the thing you want it to say, // (ie; "Laf. It's 8:00... time for bed, you silly bear.") // example: admin_alarm1set 23 59 1 Hello^nWorld! // alarm goes off every day at 11:59PM, saying // "Hello^nWorld" - ^n equals line return, no quotes // or another example; say your server is set to go down // at a certain time... an alarm set a few minutes // before with some kind of warning would be nice... right? // alarm msg is centersay with a random color, feel free to change ;) // // admin_alarmXdel deletes alarm X // // verify read/write access is allowed and vault file is set // // my next project is a pack of games // (blackjack, magic 8 ball, hangman.. stuff like that) // for the dead to play while they wait for // the round to end... good idea? ;) // // bugs? problems? questions? comments? hit me up at gideonv2@hotmail.com #include <core> #include <console> #include <string> #include <admin> #include <adminlib> #define ACCESS_ALARM 4096 // level required to access alarm functions new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.0"; new THour[MAX_DATA_LENGTH]; new TMinute[MAX_DATA_LENGTH]; new TValue[MAX_DATA_LENGTH]; new TWDay[MAX_DATA_LENGTH]; new TMonth[MAX_DATA_LENGTH]; new TDay[MAX_DATA_LENGTH]; new TYear[MAX_DATA_LENGTH]; new iDelay = 0; new Status; new Counter; new A1Hour[MAX_DATA_LENGTH]; new A1Minute[MAX_DATA_LENGTH]; new A2Hour[MAX_DATA_LENGTH]; new A2Minute[MAX_DATA_LENGTH]; new A1R[MAX_DATA_LENGTH]; new A2R[MAX_DATA_LENGTH]; new A1MSG[MAX_DATA_LENGTH]; new A2MSG[MAX_DATA_LENGTH]; public strnsplit(a[],b[],n,m) { new i; for(i=n;i<=m;i++) a[i-n]=b[i]; return 1; } public SpeakTime(WithSpeech) { new OUTSTRING[300]; new words[5][30]; new PlaceHolder[MAX_DATA_LENGTH]; new i; new maxplayers = maxplayercount(); new Team; new WONID; new SessionID; new Target[MAX_NAME_LENGTH]; new Text[MAX_DATA_LENGTH]; servertime(THour, MAX_DATA_LENGTH, "%I"); servertime(TMinute, MAX_DATA_LENGTH, "%M"); servertime(TValue, MAX_DATA_LENGTH, "%p"); servertime(TWDay, MAX_DATA_LENGTH, "%A"); servertime(TMonth, MAX_DATA_LENGTH, "%B"); servertime(TDay, MAX_DATA_LENGTH, "%d"); servertime(TYear, MAX_DATA_LENGTH, "%Y"); if(streq(THour, "12")==1) { strncpy(words[1], "twelve ", strlen("twelve "),MAX_DATA_LENGTH); } if(streq(THour, "11")==1) { strncpy(words[1], "eleven ", strlen("eleven "),MAX_DATA_LENGTH); } if(streq(THour, "10")==1) { strncpy(words[1], "ten ", strlen("ten "),MAX_DATA_LENGTH); } if(streq(THour, "09")==1) { strncpy(words[1], "nine ", strlen("nine "),MAX_DATA_LENGTH); } if(streq(THour, "08")==1) { strncpy(words[1], "eight ", strlen("eight "),MAX_DATA_LENGTH); } if(streq(THour, "07")==1) { strncpy(words[1], "seven ", strlen("seven "),MAX_DATA_LENGTH); } if(streq(THour, "06")==1) { strncpy(words[1], "six ", strlen("six "),MAX_DATA_LENGTH); } if(streq(THour, "05")==1) { strncpy(words[1], "five ", strlen("five "),MAX_DATA_LENGTH); } if(streq(THour, "04")==1) { strncpy(words[1], "four ", strlen("four "),MAX_DATA_LENGTH); } if(streq(THour, "03")==1) { strncpy(words[1], "three ", strlen("three "),MAX_DATA_LENGTH); } if(streq(THour, "02")==1) { strncpy(words[1], "two ", strlen("two "),MAX_DATA_LENGTH); } if(streq(THour, "01")==1) { strncpy(words[1], "one ", strlen("one "),MAX_DATA_LENGTH); } strnsplit(PlaceHolder, TMinute, 0, 1); if(PlaceHolder[0] == '1') { strnsplit(PlaceHolder, TMinute, 1, 2); if(PlaceHolder[0] == '0') { strncpy(words[2], "ten ", strlen("ten "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '1') { strncpy(words[2], "eleven ", strlen("eleven "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '2') { strncpy(words[2], "twelve ", strlen("twelve "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '3') { strncpy(words[2], "thirteen ", strlen("thirteen "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '4') { strncpy(words[2], "fourteen ", strlen("fourteen "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '5') { strncpy(words[2], "fifteen ", strlen("fifteen "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '6') { strncpy(words[2], "sixteen ", strlen("sixteen "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '7') { strncpy(words[2], "seventeen ", strlen("seventeen "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '8') { strncpy(words[2], "eighteen ", strlen("eighteen "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '9') { strncpy(words[2], "nineteen ", strlen("nineteen "),MAX_DATA_LENGTH); } } else { strnsplit(PlaceHolder, TMinute, 0, 2); if(PlaceHolder[0] == '2') { strncpy(words[2], "twenty ", strlen("twenty "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '3') { strncpy(words[2], "thirty ", strlen("thirty "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '4') { strncpy(words[2], "fourty ", strlen("fourty "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '5') { strncpy(words[2], "fifty ", strlen("fifty "),MAX_DATA_LENGTH); } else { if ( (PlaceHolder[0] == '0') && (PlaceHolder[1] != '0') ) { strncpy(words[2], "boop ", strlen("boop "),MAX_DATA_LENGTH); } } strnsplit(PlaceHolder, TMinute, 1, 2); if(PlaceHolder[0] == '1') { strncpy(words[3], "one ", strlen("one "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '2') { strncpy(words[3], "two ", strlen("two "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '3') { strncpy(words[3], "three ", strlen("three "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '4') { strncpy(words[3], "four ", strlen("four "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '5') { strncpy(words[3], "five ", strlen("five "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '6') { strncpy(words[3], "six ", strlen("six "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '7') { strncpy(words[3], "seven ", strlen("seven "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '8') { strncpy(words[3], "eight ", strlen("eight "),MAX_DATA_LENGTH); } if(PlaceHolder[0] == '9') { strncpy(words[3], "nine ", strlen("nine "),MAX_DATA_LENGTH); } } if(streq(TValue, "AM")==1) { strncpy(words[4], "am", strlen("am"),MAX_DATA_LENGTH); } if(streq(TValue, "PM")==1) { strncpy(words[4], "pm", strlen("pm"),MAX_DATA_LENGTH); } if (WithSpeech == 2) { snprintf(OUTSTRING, MAX_DATA_LENGTH, "speak ^"fvox/buzz buzz buzz alert time_is_now %s%s%s%s safe_day^"", words[1], words[2], words[3], words[4]); for(i=1; i<=maxplayers; i++) { strinit(Target); if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) { execclient(Target,OUTSTRING); } } } if (WithSpeech == 1) { snprintf(OUTSTRING, MAX_DATA_LENGTH, "speak ^"fvox/bell time_is_now %s%s%s%s^"", words[1], words[2], words[3], words[4]); for(i=1; i<=maxplayers; i++) { strinit(Target); if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) { execclient(Target,OUTSTRING); } } } snprintf(Text, MAX_TEXT_LENGTH, "[ Current Server Time: %s:%s %s ]", THour, TMinute, TValue); say(Text); snprintf(Text, MAX_TEXT_LENGTH, "[ %s, %s %s %s ]", TWDay, TMonth, TDay, TYear); say(Text); return PLUGIN_CONTINUE; } public HandleSay(HLCommand,HLData,HLUserName,UserIndex) { new Command[MAX_COMMAND_LENGTH]; new Data[MAX_DATA_LENGTH]; new User[MAX_NAME_LENGTH]; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); strstripquotes(Data); if ( (strcasestr(Data, "the") != -1) && (strcasestr(Data, "time") != -1) ) { if (systemtime() < iDelay) { SpeakTime(0); return PLUGIN_CONTINUE; } else { SpeakTime(1); iDelay = systemtime(); iDelay += 60; } } return PLUGIN_CONTINUE; } public admin_stopwatch() { new Elapsed; new ElapsedM; new ElapsedS; new i; new maxplayers = maxplayercount(); new Team; new WONID; new SessionID; new Target[MAX_NAME_LENGTH]; new Text[MAX_DATA_LENGTH]; if (Status == 0) { Status = 1; Elapsed = 0; ElapsedM = 0; ElapsedS = 0; Counter = systemtime(); say("[ Stopwatch activated ]"); for(i=1; i<=maxplayers; i++) { strinit(Target); if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) { execclient(Target, "speak ^"fvox/fuzz activated^""); return PLUGIN_HANDLED; } } } else { Status = 0; Elapsed = systemtime(); Elapsed = (Elapsed - Counter); ElapsedM = (Elapsed / 60); ElapsedS = (Elapsed - (ElapsedM * 60) ); say("[ Stopwatch deactivated ]"); snprintf(Text, MAX_TEXT_LENGTH, "[ Time elapsed: %i minute(s) %i second(s) ]", ElapsedM, ElapsedS); say(Text); for(i=1; i<=maxplayers; i++) { strinit(Target); if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) { execclient(Target, "speak ^"fvox/fuzz deactivated^""); } } } return PLUGIN_HANDLED; } public admin_alarmstatus() { new Text[MAX_DATA_LENGTH]; new ValuesA[MAX_DATA_LENGTH]; new ValuesC[MAX_DATA_LENGTH]; get_alarms(); if(streq(A1R, "1")==1) { ValuesA = "Yes"; } else { ValuesA = "No"; } if(streq(A2R, "1")==1) { ValuesC = "Yes"; } else { ValuesC = "No"; } selfmessage("--- Current Alarm Status ---"); selfmessage("Alarm# Hour:Min Repeat Msg"); snprintf(Text, MAX_TEXT_LENGTH, "#1) %s:%s %s ^"%s^"", A1Hour, A1Minute, ValuesA, A1MSG); selfmessage(Text); snprintf(Text, MAX_TEXT_LENGTH, "#2) %s:%s %s ^"%s^"", A2Hour, A2Minute, ValuesC, A2MSG); selfmessage(Text); return PLUGIN_HANDLED; } public admin_alarm1set(HLCommand,HLData,HLUserName,UserIndex) { new H[MAX_NUMBER_LENGTH]; new M[MAX_NUMBER_LENGTH]; new Rep[MAX_NUMBER_LENGTH]; new Msg[MAX_DATA_LENGTH]; new Command[MAX_COMMAND_LENGTH]; new Data[MAX_DATA_LENGTH]; new User[MAX_NAME_LENGTH]; new TempN = 0; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); strgsep(Data, " ", "^"", H, MAX_NUMBER_LENGTH, M, MAX_NUMBER_LENGTH, Rep, MAX_NUMBER_LENGTH, Msg, MAX_DATA_LENGTH); TempN = strtonum(H); if ( (strlen(H)==0) || (strlen(H)==1) || (strlen(H) > 2) || (TempN > 23) || (TempN < 0) ) { selfmessage( "Alarm Set Error: Hour Required <00-23>"); selfmessage( "Format: admin_alarm1set <hour> <minute> <repeat> <msg>"); return PLUGIN_HANDLED; } TempN = strtonum(M); if ( (strlen(M)==0) || (strlen(M)==1) || (strlen(H) > 2) || (TempN > 59) || (TempN < 0) ) { selfmessage( "Alarm Set Error: Minute Required <00-59>"); selfmessage( "Format: admin_alarm1set <hour> <minute> <repeat> <msg>"); return PLUGIN_HANDLED; } if(strlen(Rep)==0) { selfmessage( "Alarm Set Error: Repeat Value Required <0-1>"); selfmessage( "Format: admin_alarm1set <hour> <minute> <repeat> <msg>"); return PLUGIN_HANDLED; } set_vaultdata("ALARM_1_HOUR", H); set_vaultdata("ALARM_1_MINUTE", M); set_vaultdata("ALARM_1_R", Rep); if(strlen(Msg)==0) { set_vaultdata("ALARM_1_MSG", "(unset)"); } else { set_vaultdata("ALARM_1_MSG", Msg); } selfmessage( "Alarm 1 Set."); return PLUGIN_HANDLED; } public admin_alarm1del() { set_vaultdata("ALARM_1_HOUR", "Unset"); set_vaultdata("ALARM_1_MINUTE", "Unset"); set_vaultdata("ALARM_1_R", "Unset"); set_vaultdata("ALARM_1_MSG", "(unset)"); selfmessage( "Alarm 1 Deleted."); return PLUGIN_HANDLED; } public admin_alarm2set(HLCommand,HLData,HLUserName,UserIndex) { new H[MAX_NUMBER_LENGTH]; new M[MAX_NUMBER_LENGTH]; new Rep[MAX_NUMBER_LENGTH]; new Command[MAX_COMMAND_LENGTH]; new Data[MAX_DATA_LENGTH]; new User[MAX_NAME_LENGTH]; new Msg[MAX_DATA_LENGTH]; new TempN = 0; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); strgsep(Data, " ", "^"", H, MAX_NUMBER_LENGTH, M, MAX_NUMBER_LENGTH, Rep, MAX_NUMBER_LENGTH, Msg, MAX_DATA_LENGTH); TempN = strtonum(H); if ( (strlen(H)==0) || (strlen(H)==1) || (strlen(H) > 2) || (TempN > 23) || (TempN < 0) ) { selfmessage( "Alarm Set Error: Hour Required <00-23>"); selfmessage( "Format: admin_alarm2set <hour> <minute> <repeat> <msg>"); return PLUGIN_HANDLED; } TempN = strtonum(M); if ( (strlen(M)==0) || (strlen(M)==1) || (strlen(H) > 2) || (TempN > 59) || (TempN < 0) ) { selfmessage( "Alarm Set Error: Minute Required <00-59>"); selfmessage( "Format: admin_alarm2set <hour> <minute> <repeat> <msg>"); return PLUGIN_HANDLED; } if(strlen(Rep)==0) { selfmessage( "Alarm Set Error: Repeat Value Required <0-1>"); selfmessage( "Format: admin_alarm2set <hour> <minute> <repeat> <msg>"); return PLUGIN_HANDLED; } set_vaultdata("ALARM_2_HOUR", H); set_vaultdata("ALARM_2_MINUTE", M); set_vaultdata("ALARM_2_R", Rep); if(strlen(Msg)==0) { set_vaultdata("ALARM_2_MSG", "(unset)"); } else { set_vaultdata("ALARM_2_MSG", Msg); } selfmessage( "Alarm 2 Set."); return PLUGIN_HANDLED; } public admin_alarm2del() { set_vaultdata("ALARM_2_HOUR", "Unset"); set_vaultdata("ALARM_2_MINUTE", "Unset"); set_vaultdata("ALARM_2_R", "Unset"); set_vaultdata("ALARM_2_MSG", "(unset)"); selfmessage( "Alarm 2 Deleted."); return PLUGIN_HANDLED; } public get_alarms() { get_vaultdata("ALARM_1_HOUR", A1Hour, MAX_DATA_LENGTH); if(strlen(A1Hour)==0) { set_vaultdata("ALARM_1_HOUR", "Unset"); get_vaultdata("ALARM_1_HOUR", A1Hour, MAX_DATA_LENGTH); } get_vaultdata("ALARM_1_MINUTE", A1Minute, MAX_DATA_LENGTH); if(strlen(A1Minute)==0) { set_vaultdata("ALARM_1_MINUTE", "Unset"); get_vaultdata("ALARM_1_MINUTE", A1Minute, MAX_DATA_LENGTH); } get_vaultdata("ALARM_1_R", A1R, MAX_DATA_LENGTH); if(strlen(A1R)==0) { set_vaultdata("ALARM_1_R", "Unset"); get_vaultdata("ALARM_1_R", A1R, MAX_DATA_LENGTH); } get_vaultdata("ALARM_1_MSG", A1MSG, MAX_DATA_LENGTH); if(strlen(A1MSG)==0) { set_vaultdata("ALARM_1_MSG", "(unset)"); get_vaultdata("ALARM_1_MSG", A1MSG, MAX_DATA_LENGTH); } get_vaultdata("ALARM_2_HOUR", A2Hour, MAX_DATA_LENGTH); if(strlen(A2Hour)==0) { set_vaultdata("ALARM_2_HOUR", "Unset"); get_vaultdata("ALARM_2_HOUR", A2Hour, MAX_DATA_LENGTH); } get_vaultdata("ALARM_2_MINUTE", A2Minute, MAX_DATA_LENGTH); if(strlen(A2Minute)==0) { set_vaultdata("ALARM_2_MINUTE", "Unset"); get_vaultdata("ALARM_2_MINUTE", A2Minute, MAX_DATA_LENGTH); } get_vaultdata("ALARM_2_R", A2R, MAX_DATA_LENGTH); if(strlen(A2R)==0) { set_vaultdata("ALARM_2_R", "Unset"); get_vaultdata("ALARM_2_R", A2R, MAX_DATA_LENGTH); } get_vaultdata("ALARM_2_MSG", A2MSG, MAX_DATA_LENGTH); if(strlen(A2MSG)==0) { set_vaultdata("ALARM_2_MSG", "(unset)"); get_vaultdata("ALARM_2_MSG", A2MSG, MAX_DATA_LENGTH); } return PLUGIN_CONTINUE; } public alarm_check(Timer,Repeat,HLUser,HLParam) { new Holder[MAX_DATA_LENGTH]; new Holder2[MAX_DATA_LENGTH]; new Red; new Green; new Blue; Red = random(256); Green = random(256); Blue = random(256); servertime(Holder, MAX_DATA_LENGTH, "%H"); servertime(Holder2, MAX_DATA_LENGTH, "%M"); get_alarms(); if(streq(Holder, A1Hour)==1) { if(streq(Holder2, A1Minute)==1) { if(streq(A1R, "1")==1) { say("[ Alarm 1 Activated! <reset> ]"); } else { say("[ Alarm 1 Activated! <unset> ]"); admin_alarm1del(); } if(streq(A1MSG, "(unset)")!=1) { centersay(A1MSG,10,Red,Green,Blue); } SpeakTime(2); } } if(streq(Holder, A2Hour)==1) { if(streq(Holder2, A2Minute)==1) { if(streq(A2R, "1")==1) { say("[ Alarm 2 Activated! <reset> ]"); } else { say("[ Alarm 2 Activated! <unset> ]"); admin_alarm2del(); } if(streq(A2MSG, "(unset)")!=1) { centersay(A2MSG,10,Red,Green,Blue); } SpeakTime(2); } } return PLUGIN_CONTINUE; } public plugin_init() { plugin_registerinfo("Server Time/Date Plugin", "Speaks the current server time.", STRING_VERSION); plugin_registercmd("say", "HandleSay", ACCESS_ALL); plugin_registercmd("admin_stopwatch", "admin_stopwatch", ACCESS_ALARM, "admin_stopwatch: Starts/stops stopwatch function."); plugin_registercmd("admin_alarmstatus", "admin_alarmstatus", ACCESS_ALARM); plugin_registercmd("admin_alarm1set", "admin_alarm1set", ACCESS_ALARM); plugin_registercmd("admin_alarm1del", "admin_alarm1del", ACCESS_ALARM); plugin_registercmd("admin_alarm2set", "admin_alarm2set", ACCESS_ALARM); plugin_registercmd("admin_alarm2del", "admin_alarm2del", ACCESS_ALARM); plugin_registerhelp("say",ACCESS_ALL,"say thetime: Speaks/displays current server time."); set_timer("alarm_check",60,99999); return PLUGIN_CONTINUE; }