From c454443a0b631ee830f854ff12679bec733fc203 Mon Sep 17 00:00:00 2001 From: Cydh Ramdh Date: Wed, 16 Feb 2022 01:00:59 +0700 Subject: [PATCH] Added `@addfame` (#6588) * Added `@addfame` * Added alias `famepoint`, `famepoints` * Changed `sd` in `pc_addfame` to reference Co-authored-by: Lemongrass3110 Co-authored-by: Aleos --- conf/atcommands.yml | 4 ++++ conf/msg_conf/map_msg.conf | 5 +++++ src/map/atcommand.cpp | 31 +++++++++++++++++++++++++++++++ src/map/chrif.cpp | 18 ++++-------------- src/map/chrif.hpp | 2 +- src/map/clif.cpp | 8 ++++---- src/map/clif.hpp | 2 +- src/map/mob.cpp | 2 +- src/map/pc.cpp | 22 ++++++++++++---------- src/map/pc.hpp | 2 +- src/map/script.cpp | 6 +++--- src/map/skill.cpp | 10 +++++----- 12 files changed, 72 insertions(+), 40 deletions(-) diff --git a/conf/atcommands.yml b/conf/atcommands.yml index 232b28fb8b..38ef0e1e39 100644 --- a/conf/atcommands.yml +++ b/conf/atcommands.yml @@ -1010,6 +1010,10 @@ Body: - Command: reloadnpcfile Aliases: - reloadnpc + - Command: addfame + Aliases: + - famepoint + - famepoints Footer: Imports: diff --git a/conf/msg_conf/map_msg.conf b/conf/msg_conf/map_msg.conf index 59b211d65f..a5e8b40e8e 100644 --- a/conf/msg_conf/map_msg.conf +++ b/conf/msg_conf/map_msg.conf @@ -1779,5 +1779,10 @@ // @hatereset 1515: Reset 'Hatred' monsters. +// @addfame +1516: Usage: %s . +1517: Cannot add fame to class '%s'. +1518: %d points were added to '%s'. + //Custom translations import: conf/msg_conf/import/map_msg_eng_conf.txt diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 22ef142a72..8cc17c7cc2 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -10675,6 +10675,36 @@ ACMD_FUNC( stylist ){ #endif } +/** + * Add fame point(s) to a player + * Usage: @addfame + */ +ACMD_FUNC(addfame) +{ + nullpo_retr(-1, sd); + + int famepoint = 0; + + memset(atcmd_output, '\0', sizeof(atcmd_output)); + + if (!message || !*message || sscanf(message, "%11d", &famepoint) < 1 || famepoint == 0) { + sprintf(atcmd_output, msg_txt(sd, 1516), command); // Usage: %s . + clif_displaymessage(fd, atcmd_output); + return -1; + } + + if (!pc_addfame(*sd, famepoint)) { + sprintf(atcmd_output, msg_txt(sd, 1517), job_name(sd->status.class_)); // Cannot add fame to class '%s'. + clif_displaymessage(fd, atcmd_output); + return -1; + } + + sprintf(atcmd_output, msg_txt(sd, 1518), famepoint, sd->status.name); // %d points were added to '%s'. + clif_displaymessage(fd, atcmd_output); + + return 0; +} + #include "../custom/atcommand.inc" /** @@ -10996,6 +11026,7 @@ void atcommand_basecommands(void) { ACMD_DEF2("checkquest", quest), ACMD_DEF(refineui), ACMD_DEFR(stylist, ATCMD_NOCONSOLE|ATCMD_NOAUTOTRADE), + ACMD_DEF(addfame), }; AtCommandInfo* atcommand; int i; diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp index 35a9cfd21e..6fd092c350 100644 --- a/src/map/chrif.cpp +++ b/src/map/chrif.cpp @@ -1222,24 +1222,14 @@ int chrif_disconnectplayer(int fd) { /*========================================== * Request/Receive top 10 Fame character list *------------------------------------------*/ -int chrif_updatefamelist(struct map_session_data* sd) { - char type; - +int chrif_updatefamelist(map_session_data &sd, e_rank ranktype) { chrif_check(-1); - switch(sd->class_ & MAPID_UPPERMASK) { - case MAPID_BLACKSMITH: type = RANK_BLACKSMITH; break; - case MAPID_ALCHEMIST: type = RANK_ALCHEMIST; break; - case MAPID_TAEKWON: type = RANK_TAEKWON; break; - default: - return 0; - } - WFIFOHEAD(char_fd, 11); WFIFOW(char_fd,0) = 0x2b10; - WFIFOL(char_fd,2) = sd->status.char_id; - WFIFOL(char_fd,6) = sd->status.fame; - WFIFOB(char_fd,10) = type; + WFIFOL(char_fd,2) = sd.status.char_id; + WFIFOL(char_fd,6) = sd.status.fame; + WFIFOB(char_fd,10) = ranktype; WFIFOSET(char_fd,11); return 0; diff --git a/src/map/chrif.hpp b/src/map/chrif.hpp index c88144bc06..5a26413c38 100644 --- a/src/map/chrif.hpp +++ b/src/map/chrif.hpp @@ -68,7 +68,7 @@ int chrif_changemapserver(struct map_session_data* sd, uint32 ip, uint16 port); int chrif_searchcharid(uint32 char_id); int chrif_changeemail(int id, const char *actual_email, const char *new_email); int chrif_req_login_operation(int aid, const char* character_name, enum chrif_req_op operation_type, int32 timediff, int val1, int val2); -int chrif_updatefamelist(struct map_session_data *sd); +int chrif_updatefamelist(map_session_data &sd, e_rank ranktype); int chrif_buildfamelist(void); int chrif_save_scdata(struct map_session_data *sd); int chrif_char_offline(struct map_session_data *sd); diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 606d4c97d5..93e14cbcf7 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -19941,8 +19941,8 @@ void clif_parse_ranklist(int fd,struct map_session_data *sd) { /// 021c .L .L (ZC_ALCHEMIST_POINT) /// 0224 .L .L (ZC_TAEKWON_POINT) /// 097e .W .L .L (ZC_UPDATE_RANKING_POINT) -void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int point) { - int fd=sd->fd; +void clif_update_rankingpoint(map_session_data &sd, int rankingtype, int point) { + int fd = sd.fd; #if PACKETVER < 20130710 short cmd; switch(rankingtype){ @@ -19957,14 +19957,14 @@ void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int WFIFOHEAD(fd,packet_len(cmd)); WFIFOW(fd,0) = cmd; WFIFOL(fd,2) = point; - WFIFOL(fd,6) = sd->status.fame; + WFIFOL(fd,6) = sd.status.fame; WFIFOSET(fd, packet_len(cmd)); #else WFIFOHEAD(fd,packet_len(0x97e)); WFIFOW(fd,0) = 0x97e; WFIFOW(fd,2) = rankingtype; WFIFOL(fd,4) = point; - WFIFOL(fd,8) = sd->status.fame; + WFIFOL(fd,8) = sd.status.fame; WFIFOSET(fd,packet_len(0x97e)); #endif } diff --git a/src/map/clif.hpp b/src/map/clif.hpp index c968128c63..1a656e84f0 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -1128,7 +1128,7 @@ void clif_channel_msg(struct Channel *channel, const char *msg, unsigned long co #define clif_menuskill_clear(sd) (sd)->menuskill_id = (sd)->menuskill_val = (sd)->menuskill_val2 = 0; void clif_ranklist(struct map_session_data *sd, int16 rankingType); -void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int point); +void clif_update_rankingpoint(map_session_data &sd, int rankingtype, int point); void clif_crimson_marker(struct map_session_data *sd, struct block_list *bl, bool remove); diff --git a/src/map/mob.cpp b/src/map/mob.cpp index bd12630d58..6aa59814ed 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -3078,7 +3078,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { //TK_MISSION [Skotlex] if (++(sd->mission_count) >= 100 && (temp = mob_get_random_id(MOBG_BRANCH_OF_DEAD_TREE, static_cast(RMF_CHECK_MOB_LV|RMF_MOB_NOT_BOSS|RMF_MOB_NOT_SPAWN), sd->status.base_level))) { - pc_addfame(sd, battle_config.fame_taekwon_mission); + pc_addfame(*sd, battle_config.fame_taekwon_mission); sd->mission_mobid = temp; pc_setglobalreg(sd, add_str(TKMISSIONID_VAR), temp); sd->mission_count = 0; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 54e4d26600..7abc5c1d52 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -755,26 +755,28 @@ void pc_delabyssball( struct map_session_data& sd, int count ){ * Increases a player's fame points and displays a notice to him * @param sd Player * @param count Fame point +* @return true: on success, false: on error */ -void pc_addfame(struct map_session_data *sd,int count) +bool pc_addfame(map_session_data &sd, int count) { enum e_rank ranktype; - nullpo_retv(sd); - sd->status.fame += count; - if(sd->status.fame > MAX_FAME) - sd->status.fame = MAX_FAME; - switch(sd->class_&MAPID_UPPERMASK){ + sd.status.fame += count; + if (sd.status.fame > MAX_FAME) + sd.status.fame = MAX_FAME; + + switch(sd.class_&MAPID_UPPERMASK){ case MAPID_BLACKSMITH: ranktype = RANK_BLACKSMITH; break; case MAPID_ALCHEMIST: ranktype = RANK_ALCHEMIST; break; case MAPID_TAEKWON: ranktype = RANK_TAEKWON; break; default: - ShowWarning( "pc_addfame: Trying to add fame to class '%s'(%d).\n", job_name(sd->status.class_), sd->status.class_ ); - return; + ShowWarning( "pc_addfame: Trying to add fame to class '%s'(%d).\n", job_name(sd.status.class_), sd.status.class_ ); + return false; } - clif_update_rankingpoint(sd,ranktype,count); - chrif_updatefamelist(sd); + clif_update_rankingpoint(sd, ranktype, count); + chrif_updatefamelist(sd, ranktype); + return true; } /** diff --git a/src/map/pc.hpp b/src/map/pc.hpp index 50721d3871..f6862bd4a5 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -1516,7 +1516,7 @@ void pc_delservantball( struct map_session_data& sd, int count = 1 ); void pc_addabyssball( struct map_session_data& sd, int count = 1 ); void pc_delabyssball( struct map_session_data& sd, int count = 1 ); -void pc_addfame(struct map_session_data *sd,int count); +bool pc_addfame(map_session_data &sd, int count); unsigned char pc_famerank(uint32 char_id, int job); bool pc_set_hate_mob(struct map_session_data *sd, int pos, struct block_list *bl); diff --git a/src/map/script.cpp b/src/map/script.cpp index 92d8b667b7..c8b7589436 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -9457,13 +9457,13 @@ BUILDIN_FUNC(successrefitem) { { // Fame point system [DracoRPG] switch( sd->inventory_data[i]->weapon_level ){ case 1: - pc_addfame(sd, battle_config.fame_refine_lv1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point + pc_addfame(*sd, battle_config.fame_refine_lv1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point break; case 2: - pc_addfame(sd, battle_config.fame_refine_lv2); // Success to refine to +10 a lv2 weapon you forged = +25 fame point + pc_addfame(*sd, battle_config.fame_refine_lv2); // Success to refine to +10 a lv2 weapon you forged = +25 fame point break; case 3: - pc_addfame(sd, battle_config.fame_refine_lv3); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point + pc_addfame(*sd, battle_config.fame_refine_lv3); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point break; } } diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 3234ec4a28..14c675cec4 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -19160,13 +19160,13 @@ void skill_weaponrefine(struct map_session_data *sd, int idx) { // Fame point system [DracoRPG] switch(ditem->weapon_level){ case 1: - pc_addfame(sd, battle_config.fame_refine_lv1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point + pc_addfame(*sd, battle_config.fame_refine_lv1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point break; case 2: - pc_addfame(sd, battle_config.fame_refine_lv2); // Success to refine to +10 a lv2 weapon you forged = +25 fame point + pc_addfame(*sd, battle_config.fame_refine_lv2); // Success to refine to +10 a lv2 weapon you forged = +25 fame point break; case 3: - pc_addfame(sd, battle_config.fame_refine_lv3); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point + pc_addfame(*sd, battle_config.fame_refine_lv3); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point break; } } @@ -21770,7 +21770,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, t_itemid na clif_produceeffect(sd,0,nameid); clif_misceffect(&sd->bl,3); if (wlv >= 3 && ((ele? 1 : 0) + sc) >= 3) // Fame point system [DracoRPG] - pc_addfame(sd, battle_config.fame_forge); // Success to forge a lv3 weapon with 3 additional ingredients = +10 fame point + pc_addfame(*sd, battle_config.fame_forge); // Success to forge a lv3 weapon with 3 additional ingredients = +10 fame point } else { int fame = 0; tmp_item.amount = 0; @@ -21810,7 +21810,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, t_itemid na } if (fame) - pc_addfame(sd,fame); + pc_addfame(*sd, fame); //Visual effects and the like. switch (skill_id) { case AM_PHARMACY: