Code:
/*********************************************************
* A time announcing plugin - Version 0.8 *
*********************************************************
* *
* Name: plugin_riny_time *
* Author: Rinde (rinde@fiatnox.de) *
* Released: 07/12/02 *
* *
* *
* Commands: *
* *
* say "thetime": Display/speak current server's time *
* *
* *
* Changelog: *
* *
* Version 0.8 *
* *
* - Initial release *
* *
*********************************************************/
/* Includes */
#include <core>
#include <console>
#include <plugin>
#include <adminlib>
/* Global Variables */
new g_Version[]="0.8";
new g_LastSpeak;
/* Function Declarations */
forward HandleSay(HLCommand,HLData,HLUserName,UserIndex);
/* Event Handlers */
public plugin_init() {
plugin_registerinfo("Server Time/Date Plugin","Speaks the current server time.",g_Version);
plugin_registercmd("say","HandleSay",ACCESS_ALL);
plugin_registerhelp("say",ACCESS_ALL,"say thetime: Speaks/displays current server time.");
return PLUGIN_CONTINUE;
}
/* Command Handlers */
public HandleSay(HLCommand,HLData,HLUserName,UserIndex) {
new Data[MAX_DATA_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
strstripquotes(Data);
if(-1 < strcasestr(Data, "the") < strcasestr(Data, "time")) {
if(systemtime() - 60 < g_LastSpeak) {
SpeakTime(0);
} else {
SpeakTime(1);
g_LastSpeak = systemtime();
}
}
return PLUGIN_CONTINUE;
}
/* Support Functions */
SpeakTime(WithSpeech) {
new Text[MAX_DATA_LENGTH];
new word1[MAX_TEXT_LENGTH];
new word2[MAX_TEXT_LENGTH];
new word3[MAX_TEXT_LENGTH];
servertime(Text,MAX_TEXT_LENGTH,"[ Time: %H:%M ]");
say(Text);
servertime(Text,MAX_DATA_LENGTH,"[ %d.%m. %Y ]");
say(Text);
if(WithSpeech == 1) {
servertime(word1,MAX_TEXT_LENGTH,"%I");
servertime(word2,MAX_TEXT_LENGTH,"%M");
servertime(word3,MAX_TEXT_LENGTH,"%p");
numtoword(strtonum(word1),word1,MAX_TEXT_LENGTH);
numtoword(strtonum(word2),word2,MAX_TEXT_LENGTH);
snprintf(Text,MAX_DATA_LENGTH,"speak ^"fvox/bell time_is_now %s %s %s^"",word1,word2,word3);
speakto_all(Text);
}
}
new OnesLib[10][] = { "", "one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine " };
new TensLib[10][] = {"", "ten ", "twenty ", "thirty ", "fourty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety " } ;
new TeensLib[10][] = {"", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen " };
new HundredsLib[10][] = { "", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred ", "six hundred ", "seven hundred ", "eight hundred ", "nine hundred " };
new GroupNamesLib[5][] = {"", "thousand ", "million ", "billion ", "trillion " };
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;
}
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);
}
speakto_all(sSentence[]) {
new Target[MAX_NAME_LENGTH];
new i, num = 0;
new maxplayers = maxplayercount();
for(i=1; i<=maxplayers; i++) {
if(playerinfo(i,Target,MAX_NAME_LENGTH) && allowsound(Target)) {
speakto(Target,sSentence);
num++;
}
}
return num;
}
new Key[]="am_sound";
public 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>=1 ){/*damit wird automatisch immer der Sound auf 1 gesetzt,wenn kein setinfo vorhanden, bis 'stop' eingegeben wird*/
return 1;
}else{
return 0;
}
}
return 0;
}
weiss net, ob das mit dem sprechen funzt... aber angezeigt wird sie...