diff options
-rw-r--r-- | Changelog.txt | 7 | ||||
-rw-r--r-- | conf-tmpl/atcommand_athena.conf | 5 | ||||
-rw-r--r-- | src/map/atcommand.c | 99 | ||||
-rw-r--r-- | src/map/atcommand.h | 1 |
4 files changed, 111 insertions, 1 deletions
diff --git a/Changelog.txt b/Changelog.txt index f48c06ecf..5c80d282f 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,12 @@ Date Added +02/06 + * Coded new command: @MOBINFO <monster name|monster N> [Lupus] + the command has also 2 aliases: @monsterinfo, @mi + It shows all Monster stats, Element, Race and stuff + It shows all items with their drop chance + It also shows MVP bonuses (MVP EXP, MVP Drops) + 02/05 * increased the max_files allowed in a grf [1054: MouseJstr] * Changed the way char deletion works for SQL [1051: Ajarn] diff --git a/conf-tmpl/atcommand_athena.conf b/conf-tmpl/atcommand_athena.conf index 78cee226f..4bb17dbca 100644 --- a/conf-tmpl/atcommand_athena.conf +++ b/conf-tmpl/atcommand_athena.conf @@ -50,6 +50,11 @@ serverdate: 0 server_time: 0 servertime: 0 +// Show Monster info (rates, stats, drops, MVP stuff) +mobinfo: 0 +monsterinfo: 0 +mi: 0 + // Display your ignore list (people from which you ignore wisps) ignorelist: 0 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 4e6d5c456..0d387b580 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -254,6 +254,7 @@ ACMD_FUNC(sound); ACMD_FUNC(undisguiseall); ACMD_FUNC(disguiseall); ACMD_FUNC(changelook); +ACMD_FUNC(mobinfo); //by Lupus /*========================================== *AtCommandInfo atcommand_info[]構造体の定義 @@ -528,7 +529,9 @@ static AtCommandInfo atcommand_info[] = { { AtCommand_DisguiseAll, "@disguiseall", 99, atcommand_disguiseall }, { AtCommand_ChangeLook, "@changelook", 99, atcommand_changelook }, { AtCommand_AutoLoot, "@autoloot", 10, atcommand_autoloot }, // Upa-Kun - + { AtCommand_MobInfo, "@mobinfo", 1, atcommand_mobinfo }, // [Lupus] + { AtCommand_MobInfo, "@monsterinfo", 1, atcommand_mobinfo }, // [Lupus] + { AtCommand_MobInfo, "@mi", 1, atcommand_mobinfo }, // [Lupus] // add new commands before this line { AtCommand_Unknown, NULL, 1, NULL } }; @@ -8913,4 +8916,98 @@ int atcommand_refreshonline( return 0; } +/*========================================== + * Show Monster DB Info v 1.0 + * originally by [Lupus] eAthena + *------------------------------------------ + */ +int atcommand_mobinfo( + const int fd, struct map_session_data* sd, + const char* command, const char* message) { + static char msize[3][8]={"Small","Medium","Large"}; + static char mrace[12][12]={"Formless","Undead","Beast","Plant","Insect","Fish","Demon","Demi-Human","Angel","Dragon","Boss","Non-Boss"}; + static char melement[11][12]={"None","Neutral","Water","Earth","Fire","Wind","Poison","Holy","Dark","Ghost","Undead"}; + char monster[100]; + char output[200]; + char output2[200]; + struct item_data *item_data; + int mob_id; + int i,j; + + nullpo_retr(-1, sd); + memset(monster, '\0', sizeof(monster)); + memset(output, '\0', sizeof(output)); + + if (!message || !*message || + sscanf(message, "%99s", monster) < 1) { + clif_displaymessage(fd, msg_table[143]); // Give a monster name/id please. + return -1; + } + // If monster identifier/name argument is a name + if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number) + mob_id = mobdb_checkid(atoi(monster)); + + if (mob_id == 0) { + clif_displaymessage(fd, msg_table[40]); // Invalid monster ID or name. + return -1; + } + sprintf(output, "N:%04i '%s'/'%s' %s", + mob_id,mob_db[mob_id].name,mob_db[mob_id].jname, mob_db[mob_id].mexp?"MVP!":""); + clif_displaymessage(fd, output); + sprintf(output, " Level:%i HP:%i SP:%i Base EXP:%i Job EXP:%i", + mob_db[mob_id].lv, mob_db[mob_id].max_hp, mob_db[mob_id].max_sp, mob_db[mob_id].base_exp, mob_db[mob_id].job_exp); + clif_displaymessage(fd, output); + sprintf(output, " DEF:%i MDEF:%i STR:%i AGI:%i VIT:%i INT:%i DEX:%i LUK:%i", + mob_db[mob_id].def, mob_db[mob_id].mdef, mob_db[mob_id].str, mob_db[mob_id].agi, mob_db[mob_id].vit, mob_db[mob_id].int_, mob_db[mob_id].dex, mob_db[mob_id].luk); + clif_displaymessage(fd, output); + if (mob_db[mob_id].element<20) { + //Element - None, Level 0 + i = 0; j = 0; + } else { + i = mob_db[mob_id].element%20+1; + j = mob_db[mob_id].element/20; + } + sprintf(output, " ATK:%i~%i Range:%i~%i~%i Size:%s Race:%s Element:%s(%i Lv)", + mob_db[mob_id].atk1,mob_db[mob_id].atk2, mob_db[mob_id].range, mob_db[mob_id].range2 ,mob_db[mob_id].range3, + msize[mob_db[mob_id].size],mrace[mob_db[mob_id].race], melement[i],j); + clif_displaymessage(fd, output); + if (mob_db[mob_id].mexp) { + //if MVP, then + sprintf(output, " MVP Bonus EXP:%i %02.02f%%", + mob_db[mob_id].mexp, (float)mob_db[mob_id].mexpper / 100); + clif_displaymessage(fd, output); + + strcpy(output," MVP Items:"); + for (i=0; i<3; i++) { + if ( mob_db[mob_id].mvpitem[i].nameid<=0 || mob_db[mob_id].mvpitem[i].p<=0) + continue; + if( (item_data = itemdb_search(mob_db[mob_id].mvpitem[i].nameid)) == NULL) + continue; + + sprintf(output2, " - %s %02.02f%%", + item_data->name, (float)mob_db[mob_id].mvpitem[i].p / 100); + strcat(output,output2); + } + clif_displaymessage(fd, output); + } + strcpy(output," Drops:"); + j=0; + for (i=0; i<8; i++) { + if ( mob_db[mob_id].dropitem[i].nameid<=0 || mob_db[mob_id].dropitem[i].p<=0) + continue; + if( (item_data = itemdb_search(mob_db[mob_id].dropitem[i].nameid)) == NULL) + continue; + sprintf(output2, " - %s %02.02f%%", + item_data->name, (float)mob_db[mob_id].dropitem[i].p / 100); + strcat(output,output2); + if (++j>=3) { + j=0; + clif_displaymessage(fd, output); + strcpy(output," "); + } + } + clif_displaymessage(fd, output); + return 0; +} + #endif /* end sql only */ diff --git a/src/map/atcommand.h b/src/map/atcommand.h index 7616b725f..cb260db19 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -237,6 +237,7 @@ enum AtCommandType { AtCommand_DisguiseAll, AtCommand_ChangeLook, AtCommand_AutoLoot, //by Upa-Kun + AtCommand_MobInfo, //by Lupus // end AtCommand_Unknown, |