From: pk910 Date: Wed, 2 Nov 2011 00:08:52 +0000 (+0100) Subject: added funcmd_8ball X-Git-Tag: v5.3~219 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=352400186a66dfed87f929bff89fc752f0de7091 added funcmd_8ball --- diff --git a/src/cmd_funcmds.c b/src/cmd_funcmds.c index 3eadbf8..860ac5f 100644 --- a/src/cmd_funcmds.c +++ b/src/cmd_funcmds.c @@ -23,10 +23,13 @@ #include "UserNode.h" #include "ChanNode.h" #include "lang.h" +#include "tools.h" static const struct default_language_entry msgtab[] = { {"FUN_DICE", "$b%s$b: A $b%d$b shows on the %d-sided die."}, /* {ARGS: "TestUser", 5, 6} */ {"FUN_DICE_NUM", "I do not understand $b%s$b. Please use a single number above 1."}, /* {ARGS: "bla"} */ + {"FUN_8BALL", "$b%s$b: %s"}, /* {ARGS: "TestUser", "Not a chance."} */ + {"FUN_8BALL_REPLIES", "Not a chance.|In your dreams.|Absolutely!|Could be, could be.|No!"}, {NULL, NULL} }; @@ -105,3 +108,36 @@ CMD_BIND(funcmd_dice) { } else funcmd_reply("FUN_DICE_NUM", argv[0]); } + +CMD_BIND(funcmd_8ball) { + FUNCMD_HEADER; + char *message = merge_argv(argv, 0, argc); + const char *const_replies = get_language_string(current_funcmd.user, "FUN_8BALL_REPLIES"); + char replies[MAXLEN]; + int i, reply_count = 1; + for(i = 0; const_replies[i]; i++) { + if(const_replies[i] == '|') + reply_count++; + replies[i] = const_replies[i]; + } + replies[i] = '\0'; + unsigned int crc32_val = (crc32(message)) % reply_count; + char *creply = (crc32_val == 0 ? replies : NULL); + reply_count = 0; + for(i = 0; replies[i]; i++) { + if(replies[i] == '|') { + if(creply) { + replies[i] = '\0'; + break; + } else { + reply_count++; + if(reply_count == crc32_val) { + creply = &replies[i+1]; + } + } + } + } + if(creply) { + funcmd_reply("FUN_8BALL", user->nick, creply); + } +} diff --git a/src/cmd_funcmds.h b/src/cmd_funcmds.h index 9aa69dc..000b918 100644 --- a/src/cmd_funcmds.h +++ b/src/cmd_funcmds.h @@ -24,5 +24,6 @@ void init_funcmds(); CMD_BIND(funcmd_ping); CMD_BIND(funcmd_pong); CMD_BIND(funcmd_dice); +CMD_BIND(funcmd_8ball); #endif \ No newline at end of file diff --git a/src/commands.c b/src/commands.c index 950479b..93e7d73 100644 --- a/src/commands.c +++ b/src/commands.c @@ -137,6 +137,7 @@ void register_commands() { USER_COMMAND("ping", funcmd_ping, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_FUNCMD); USER_COMMAND("pong", funcmd_pong, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_FUNCMD); USER_COMMAND("dice", funcmd_dice, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_FUNCMD); + USER_COMMAND("8ball", funcmd_8ball, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_FUNCMD); #undef USER_COMMAND