summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/atcommand.c42
-rw-r--r--src/map/atcommand.h1
-rw-r--r--src/map/pc.c2
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);