|
@@ -2780,7 +2780,7 @@ int status_calc_mob_(struct mob_data* md, uint8 opt)
|
|
}
|
|
}
|
|
|
|
|
|
if (flag&32)
|
|
if (flag&32)
|
|
- status_calc_slave_mode(md, map_id2md(md->master_id));
|
|
|
|
|
|
+ status_calc_slave_mode(*md);
|
|
|
|
|
|
if (flag&1) { // Increase from mobs leveling up [Valaris]
|
|
if (flag&1) { // Increase from mobs leveling up [Valaris]
|
|
int diff = md->level - md->db->lv;
|
|
int diff = md->level - md->db->lv;
|
|
@@ -8940,27 +8940,26 @@ static int status_calc_mode(struct block_list *bl, status_change *sc, int mode)
|
|
/**
|
|
/**
|
|
* Changes the mode of a slave mob
|
|
* Changes the mode of a slave mob
|
|
* @param md: Slave mob whose mode to change
|
|
* @param md: Slave mob whose mode to change
|
|
- * @param mmd: Master of slave mob
|
|
|
|
*/
|
|
*/
|
|
-void status_calc_slave_mode(struct mob_data *md, struct mob_data *mmd)
|
|
|
|
|
|
+void status_calc_slave_mode(mob_data& md)
|
|
{
|
|
{
|
|
switch (battle_config.slaves_inherit_mode) {
|
|
switch (battle_config.slaves_inherit_mode) {
|
|
case 1: //Always aggressive
|
|
case 1: //Always aggressive
|
|
- if (!status_has_mode(&md->status,MD_AGGRESSIVE))
|
|
|
|
- sc_start4(nullptr, &md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 0);
|
|
|
|
|
|
+ if (!status_has_mode(&md.status,MD_AGGRESSIVE))
|
|
|
|
+ sc_start4(nullptr, &md.bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 0);
|
|
break;
|
|
break;
|
|
case 2: //Always passive
|
|
case 2: //Always passive
|
|
- if (status_has_mode(&md->status,MD_AGGRESSIVE))
|
|
|
|
- sc_start4(nullptr, &md->bl, SC_MODECHANGE, 100, 1, 0, 0, MD_AGGRESSIVE, 0);
|
|
|
|
|
|
+ if (status_has_mode(&md.status,MD_AGGRESSIVE))
|
|
|
|
+ sc_start4(nullptr, &md.bl, SC_MODECHANGE, 100, 1, 0, 0, MD_AGGRESSIVE, 0);
|
|
break;
|
|
break;
|
|
case 4: // Overwrite with slave mode
|
|
case 4: // Overwrite with slave mode
|
|
- sc_start4(nullptr, &md->bl, SC_MODECHANGE, 100, 1, MD_CANMOVE|MD_NORANDOMWALK|MD_CANATTACK, 0, 0, 0);
|
|
|
|
|
|
+ sc_start4(nullptr, &md.bl, SC_MODECHANGE, 100, 1, MD_CANMOVE|MD_NORANDOMWALK|MD_CANATTACK, 0, 0, 0);
|
|
break;
|
|
break;
|
|
default: //Copy master
|
|
default: //Copy master
|
|
- if (status_has_mode(&mmd->status,MD_AGGRESSIVE))
|
|
|
|
- sc_start4(nullptr, &md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 0);
|
|
|
|
|
|
+ if (block_list* mbl = map_id2bl(md.master_id); mbl != nullptr && status_has_mode(status_get_status_data(*mbl), MD_AGGRESSIVE))
|
|
|
|
+ sc_start4(nullptr, &md.bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 0);
|
|
else
|
|
else
|
|
- sc_start4(nullptr, &md->bl, SC_MODECHANGE, 100, 1, 0, 0, MD_AGGRESSIVE, 0);
|
|
|
|
|
|
+ sc_start4(nullptr, &md.bl, SC_MODECHANGE, 100, 1, 0, 0, MD_AGGRESSIVE, 0);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|