diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/atcommand.c | 42 | ||||
-rw-r--r-- | src/map/atcommand.h | 1 | ||||
-rw-r--r-- | src/map/pc.c | 2 |
3 files changed, 43 insertions, 2 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index aea1f145b..d1f645d9c 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -233,6 +233,8 @@ ACMD_FUNC(marry); // by MouseJstr ACMD_FUNC(divorce); // by MouseJstr ACMD_FUNC(rings); // by MouseJstr +ACMD_FUNC(grind); // by MouseJstr + /*========================================== *AtCommandInfo atcommand_info[]構造体の定義 *------------------------------------------ @@ -483,6 +485,7 @@ static AtCommandInfo atcommand_info[] = { { AtCommand_Marry, "@marry", 40, atcommand_marry }, // [MouseJstr] { AtCommand_Divorce, "@divorce", 40, atcommand_divorce }, // [MouseJstr] { AtCommand_Rings, "@rings", 40, atcommand_rings }, // [MouseJstr] + { AtCommand_Grind, "@grind", 40, atcommand_grind }, // [MouseJstr] // add new commands before this line { AtCommand_Unknown, NULL, 1, NULL } @@ -2160,7 +2163,6 @@ int atcommand_alive( return 0; } return -1; - } /*========================================== @@ -7495,6 +7497,44 @@ atcommand_rings(const int fd, struct map_session_data* sd, } /*========================================== + * @grind by [MouseJstr] + *------------------------------------------ + */ +int +atcommand_grind(const int fd, struct map_session_data* sd, + const char* command, const char* message) +{ + struct map_session_data *pl_sd = NULL; + int skillnum; + int inf; + char target[255]; + nullpo_retr(-1, sd); + + if (!message || !*message) + return -1; + if(sscanf(message, "%s", target) != 1) { + clif_displaymessage(fd, "Usage: @grind <target>"); + return -1; + } + if((pl_sd=map_nick2sd(target)) == NULL) + return -1; + + for (skillnum = 1; skillnum < 500; skillnum++) { + sd->status.sp = sd->status.max_sp; + atcommand_alive(fd, sd, command, message); + + inf = skill_get_inf(skillnum); + + if ((inf == 2) || (inf == 1)) + skill_use_pos(sd, pl_sd->bl.x+5, pl_sd->bl.y+5, skillnum, 1); + else + skill_use_id(sd, pl_sd->bl.id, skillnum, 1); + } + + return 0; +} + +/*========================================== * It is made to rain. *------------------------------------------ */ diff --git a/src/map/atcommand.h b/src/map/atcommand.h index d3fa22a07..96838b7ae 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -216,6 +216,7 @@ enum AtCommandType { AtCommand_Marry, // by MouseJstr AtCommand_Divorce, // by MouseJstr AtCommand_Rings, // by MouseJstr + AtCommand_Grind, // by MouseJstr // end AtCommand_Unknown, diff --git a/src/map/pc.c b/src/map/pc.c index d975deaf5..3c37f7ce1 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5408,7 +5408,7 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage) if (sd->sc_data) { if (sd->sc_data[SC_ENDURE].timer == -1 && sd->sc_data[SC_BERSERK].timer == -1 && !sd->special_state.infinite_endure) pc_stop_walking(sd,3); - else if(sd->sc_data[SC_ENDURE].timer != -1 && src->type==BL_MOB && (--sd->sc_data[SC_ENDURE].val2) <= 0) + else if(sd->sc_data[SC_ENDURE].timer != -1 && (src != NULL && src->type==BL_MOB) && (--sd->sc_data[SC_ENDURE].val2) <= 0) skill_status_change_end(&sd->bl, SC_ENDURE, -1); } else pc_stop_walking(sd,3); |