Added @addfame (#6588)

* Added `@addfame`
* Added alias `famepoint`, `famepoints`
* Changed `sd` in `pc_addfame` to reference

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
This commit is contained in:
Cydh Ramdh 2022-02-16 01:00:59 +07:00 committed by GitHub
parent a8e516730a
commit c454443a0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 72 additions and 40 deletions

View File

@ -1010,6 +1010,10 @@ Body:
- Command: reloadnpcfile
Aliases:
- reloadnpc
- Command: addfame
Aliases:
- famepoint
- famepoints
Footer:
Imports:

View File

@ -1779,5 +1779,10 @@
// @hatereset
1515: Reset 'Hatred' monsters.
// @addfame
1516: Usage: %s <fame points>.
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

View File

@ -10675,6 +10675,36 @@ ACMD_FUNC( stylist ){
#endif
}
/**
* Add fame point(s) to a player
* Usage: @addfame <amount>
*/
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 <fame points>.
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;

View File

@ -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;

View File

@ -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);

View File

@ -19941,8 +19941,8 @@ void clif_parse_ranklist(int fd,struct map_session_data *sd) {
/// 021c <points>.L <total points>.L (ZC_ALCHEMIST_POINT)
/// 0224 <points>.L <total points>.L (ZC_TAEKWON_POINT)
/// 097e <RankingType>.W <point>.L <TotalPoint>.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
}

View File

@ -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);

View File

@ -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<e_random_monster_flags>(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;

View File

@ -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;
}
/**

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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: