diff options
-rw-r--r-- | Changelog.txt | 7 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | conf-tmpl/atcommand_athena.conf | 6 | ||||
-rw-r--r-- | src/map/atcommand.c | 91 | ||||
-rw-r--r-- | src/map/atcommand.h | 2 | ||||
-rw-r--r-- | src/map/npc.c | 2 |
6 files changed, 106 insertions, 4 deletions
diff --git a/Changelog.txt b/Changelog.txt index 133b50eff..a299675fd 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,10 @@ Date Added -11/20 +11/20 + * Initialized "day" variable in npc.c. [Valaris] + * Added @whozeny. Shows list of top 50 online players and their zeny sorted from highest to lowest. [Valaris] + * Added @happyhappyjoyjoy. Makes all players on server do a random emote. [Valaris] + * Removed -funroll-loops from compile. (Do not re-add!) [Valaris] + * Skill updates [celest] * Added check for max vending_max_value when reading config [kobra_k88] * Skill updates [celest] - Napalm vulcan, Enchant Deadly Poison, Slow Poison (based on jAthena 1066) @@ -16,7 +16,7 @@ else MAKE = make endif -OPT = -g -O2 -ffast-math -funroll-loops +OPT = -g -O2 -ffast-math ifeq ($(findstring CYGWIN,$(PLATFORM)), CYGWIN) OS_TYPE = -DCYGWIN diff --git a/conf-tmpl/atcommand_athena.conf b/conf-tmpl/atcommand_athena.conf index e65219fa4..de6937ed8 100644 --- a/conf-tmpl/atcommand_athena.conf +++ b/conf-tmpl/atcommand_athena.conf @@ -119,6 +119,9 @@ mountpeco: 20 who: 20 whois: 20 +// Returns list of top 50 logged in characters and their zeny based on zeny sorted from highest amount to lowest. +whozeny: 20 + // Returns list of logged in characters with their job. who2: 20 @@ -291,6 +294,9 @@ useskill: 40 // make another player killable charkillable: 40 +// makes everyone on server do a random emote +happyhappyjoyjoy:40 + //--------------------- // 50: Sub-GM+ commands diff --git a/src/map/atcommand.c b/src/map/atcommand.c index fedde3ad0..b93fc3c34 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -5,6 +5,7 @@ #include <ctype.h> #include <math.h> + #include "../common/socket.h" #include "../common/timer.h" #include "../common/nullpo.h" @@ -53,6 +54,8 @@ ATCOMMAND_FUNC(whomap); ATCOMMAND_FUNC(whomap2); ATCOMMAND_FUNC(whomap3); ATCOMMAND_FUNC(whogm); // by Yor +ATCOMMAND_FUNC(whozeny); // [Valaris] +ATCOMMAND_FUNC(happyhappyjoyjoy); // [Valaris] ATCOMMAND_FUNC(save); ATCOMMAND_FUNC(load); ATCOMMAND_FUNC(speed); @@ -466,7 +469,8 @@ static AtCommandInfo atcommand_info[] = { { AtCommand_ChangeSex, "@changesex", 1, atcommand_changesex }, // by MC Cameri { AtCommand_Mute, "@mute", 99, atcommand_mute }, // [celest] { AtCommand_Mute, "@red", 99, atcommand_mute }, // [celest] - + { AtCommand_WhoZeny, "@whozeny", 20, atcommand_whozeny }, // [Valaris] + { AtCommand_HappyHappyJoyJoy, "@happyhappyjoyjoy", 40, atcommand_happyhappyjoyjoy }, // [Valaris] #ifndef TXT_ONLY // sql-only commands { AtCommand_CheckMail, "@checkmail", 1, atcommand_listmail }, // [Valaris] { AtCommand_ListMail, "@listmail", 1, atcommand_listmail }, // [Valaris] @@ -1596,6 +1600,91 @@ int atcommand_whogm( return 0; } +int compare (const void * a, const void * b) +{ + return ( *(int*)b - *(int*)a ); +} + +int atcommand_whozeny( + const int fd, struct map_session_data* sd, + const char* command, const char* message) +{ + char output[200]; + struct map_session_data *pl_sd; + int i, j, count,c; + char match_text[100]; + char player_name[24]; + int zeny[clif_countusers()]; + char counted[clif_countusers()]; + + memset(output, '\0', sizeof(output)); + memset(match_text, '\0', sizeof(match_text)); + memset(player_name, '\0', sizeof(player_name)); + + if (sscanf(message, "%99[^\n]", match_text) < 1) + strcpy(match_text, ""); + for (j = 0; match_text[j]; j++) + match_text[j] = tolower(match_text[j]); + + count = 0; + for (i = 0; i < fd_max; i++) { + if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) { + memcpy(player_name, pl_sd->status.name, 24); + for (j = 0; player_name[j]; j++) + player_name[j] = tolower(player_name[j]); + if (strstr(player_name, match_text) != NULL) { // search with no case sensitive + zeny[count]=pl_sd->status.zeny; + count++; + } + } + } + + qsort(zeny, count, sizeof(int), compare); + for (c = 0; c < count && c < 50; c++) { + if(!zeny[c]) + continue; + for (i = 0; i < fd_max; i++) { + if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth && !counted[i] && zeny[c]) { + if(pl_sd->status.zeny==zeny[c]) { + sprintf(output, "Name: %s | Zeny: %d", pl_sd->status.name, pl_sd->status.zeny); + clif_displaymessage(fd, output); + zeny[c]=0; + counted[i]=1; + } + } + } + } + + if (count == 0) + clif_displaymessage(fd, msg_table[28]); // No player found. + else if (count == 1) + clif_displaymessage(fd, msg_table[29]); // 1 player found. + else { + sprintf(output, msg_table[30], count); // %d players found. + clif_displaymessage(fd, output); + } + + return 0; +} + +int atcommand_happyhappyjoyjoy( + const int fd, struct map_session_data* sd, + const char* command, const char* message) +{ + + struct map_session_data *pl_sd; + int i,e; + + for (i = 0; i < fd_max; i++) { + if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) { + e=rand()%40; + clif_emotion(&pl_sd->bl,e); + } + } + + return 0; +} + /*========================================== * *------------------------------------------ diff --git a/src/map/atcommand.h b/src/map/atcommand.h index acab72531..60301515c 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -196,6 +196,8 @@ enum AtCommandType { AtCommand_UpTime, AtCommand_ChangeSex, AtCommand_Mute, // [celest] + AtCommand_WhoZeny, // [Valaris] + AtCommand_HappyHappyJoyJoy, // [Valaris] // SQL-only commands start #ifndef TXT_ONLY AtCommand_CheckMail, // [Valaris] diff --git a/src/map/npc.c b/src/map/npc.c index 72daea571..eea869aa5 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -392,7 +392,7 @@ int npc_event_do_clock(int tid,unsigned int tick,int id,int data) time_t timer; struct tm *t; char buf[64]; - char *day; + char *day=""; int c=0; time(&timer); |