ソースを参照

Add master id check in setunitdata script command. Fixes #887

Jittapan Pluemsumran 9 年 前
コミット
f2bad5e832
1 ファイル変更11 行追加1 行削除
  1. 11 1
      src/map/script.c

+ 11 - 1
src/map/script.c

@@ -17172,7 +17172,17 @@ BUILDIN_FUNC(setunitdata)
 			case UMOB_INT: md->status.int_ = (unsigned short)value; status_calc_misc(bl, &md->status, md->level); break;
 			case UMOB_DEX: md->status.dex = (unsigned short)value; status_calc_misc(bl, &md->status, md->level); break;
 			case UMOB_LUK: md->status.luk = (unsigned short)value; status_calc_misc(bl, &md->status, md->level); break;
-			case UMOB_SLAVECPYMSTRMD: md->state.copy_master_mode = value > 0 ? 1 : 0; if (value > 0) { TBL_MOB *md2 = map_id2md(md->master_id); md->status.mode = md2->status.mode; } break;
+			case UMOB_SLAVECPYMSTRMD:
+				md->state.copy_master_mode = value > 0 ? 1 : 0;
+				if (value > 0) {
+					if (!md->master_id) {
+						ShowWarning("buildin_setunitdata: Trying to set UMOB_SLAVECPYMSTRMD on mob without master!\n");
+						break;
+					}
+					TBL_MOB *md2 = map_id2md(md->master_id);
+					md->status.mode = md2->status.mode;
+				}
+				break;
 			case UMOB_DMGIMMUNE: md->ud.immune_attack = (bool)value > 0 ? 1 : 0; break;
 			case UMOB_ATKRANGE: md->status.rhw.range = (unsigned short)value; break;
 			case UMOB_ATKMIN: md->status.rhw.atk = (unsigned short)value; break;