Selaa lähdekoodia

Follow up to e276970
* Fixed an issue with ATK/MATK params. Thanks to Lord Ganja.

aleos89 9 vuotta sitten
vanhempi
commit
c389a6c456
4 muutettua tiedostoa jossa 329 lisäystä ja 91 poistoa
  1. 231 42
      doc/script_commands.txt
  2. 72 36
      src/map/script.c
  3. 24 12
      src/map/script.h
  4. 2 1
      src/map/status.h

+ 231 - 42
doc/script_commands.txt

@@ -7156,68 +7156,257 @@ Note: When adjusting a unit's stat (STR, AGI, etc) the unit's respective statuse
 	  affect a unit's status and will have to directly be modified.
 
 Parameters (indexes) for monsters are:
-	UMOB_SIZE		UMOB_Y			UMOB_HAIRSTYLE		UMOB_WEAPON		UMOB_LUK				UMOB_MDEF		UMOB_ELELEVEL
-	UMOB_LEVEL		UMOB_SPEED		UMOB_HAIRCOLOR		UMOB_LOOKDIR	UMOB_SLAVECPYMSTRMD		UMOB_HIT		UMOB_AMOTION
-	UMOB_HP			UMOB_MODE		UMOB_HEADBOTTOM		UMOB_STR		UMOB_DMGIMMUNE			UMOB_FLEE		UMOB_ADELAY
-	UMOB_MAXHP		UMOB_AI			UMOB_HEADMIDDLE		UMOB_AGI		UMOB_ATKRANGE			UMOB_PDODGE		UMOB_DMOTION
-	UMOB_MASTERAID	UMOB_SCOPTION	UMOB_HEADTOP		UMOB_VIT		UMOB_ATK				UMOB_CRIT
-	UMOB_MAPID		UMOB_SEX		UMOB_CLOTHCOLOR		UMOB_INT		UMOB_MATK				UMOB_RACE
-	UMOB_X			UMOB_CLASS		UMOB_SHIELD			UMOB_DEX		UMOB_DEF				UMOB_ELETYPE
+	UMOB_SIZE
+	UMOB_LEVEL
+	UMOB_HP
+	UMOB_MAXHP
+	UMOB_MASTERAID
+	UMOB_MAPID
+	UMOB_X
+	UMOB_Y
+	UMOB_SPEED
+	UMOB_MODE
+	UMOB_AI
+	UMOB_SCOPTION
+	UMOB_SEX
+	UMOB_CLASS
+	UMOB_HAIRSTYLE
+	UMOB_HAIRCOLOR
+	UMOB_HEADBOTTOM
+	UMOB_HEADMIDDLE
+	UMOB_HEADTOP
+	UMOB_CLOTHCOLOR
+	UMOB_SHIELD
+	UMOB_WEAPON
+	UMOB_LOOKDIR
+	UMOB_STR
+	UMOB_AGI
+	UMOB_VIT
+	UMOB_INT
+	UMOB_DEX
+	UMOB_LUK
+	UMOB_SLAVECPYMSTRMD
+	UMOB_DMGIMMUNE
+	UMOB_ATKRANGE
+	UMOB_ATKMIN
+	UMOB_ATKMAX
+	UMOB_MATKMIN
+	UMOB_MATKMAX
+	UMOB_DEF
+	UMOB_MDEF
+	UMOB_HIT
+	UMOB_FLEE
+	UMOB_PDODGE
+	UMOB_CRIT
+	UMOB_RACE
+	UMOB_ELETYPE
+	UMOB_ELELEVEL
+	UMOB_AMOTION
+	UMOB_ADELAY
+	UMOB_DMOTION
 
 -----
 
 Parameter (indexes) for homunculi are:
-	UHOM_SIZE		UHOM_MAPID		UHOM_CANMOVETICK		UHOM_DMGIMMUNE	UHOM_FLEE		UHOM_ADELAY
-	UHOM_LEVEL		UHOM_X			UHOM_STR				UHOM_ATKRANGE	UHOM_PDODGE		UHOM_DMOTION
-	UHOM_HP			UHOM_Y			UHOM_AGI				UHOM_ATK		UHOM_CRIT
-	UHOM_MAXHP		UHOM_HUNGER		UHOM_VIT				UHOM_MATK		UHOM_RACE
-	UHOM_SP			UHOM_INTIMACY	UHOM_INT				UHOM_DEF		UHOM_ELETYPE
-	UHOM_MAXSP		UHOM_SPEED		UHOM_DEX				UHOM_MDEF		UHOM_ELELEVEL
-	UHOM_MASTERCID	UHOM_LOOKDIR	UHOM_LUK				UHOM_HIT		UHOM_AMOTION
+	UHOM_SIZE
+	UHOM_LEVEL
+	UHOM_HP
+	UHOM_MAXHP
+	UHOM_SP
+	UHOM_MAXSP
+	UHOM_MASTERCID
+	UHOM_MAPID
+	UHOM_X
+	UHOM_Y
+	UHOM_HUNGER
+	UHOM_INTIMACY
+	UHOM_SPEED
+	UHOM_LOOKDIR
+	UHOM_CANMOVETICK
+	UHOM_STR
+	UHOM_AGI
+	UHOM_VIT
+	UHOM_INT
+	UHOM_DEX
+	UHOM_LUK
+	UHOM_DMGIMMUNE
+	UHOM_ATKRANGE
+	UHOM_ATKMIN
+	UHOM_ATKMAX
+	UHOM_MATKMIN
+	UHOM_MATKMAX
+	UHOM_DEF
+	UHOM_MDEF
+	UHOM_HIT
+	UHOM_FLEE
+	UHOM_PDODGE
+	UHOM_CRIT
+	UHOM_RACE
+	UHOM_ELETYPE
+	UHOM_ELELEVEL
+	UHOM_AMOTION
+	UHOM_ADELAY
+	UHOM_DMOTION
 
 -----
 
 Parameter (indexes) for pets are:
-	UPET_SIZE		UPET_Y				UPET_AGI		UPET_ATK		UPET_CRIT
-	UPET_LEVEL		UPET_HUNGER			UPET_VIT		UPET_MATK		UPET_RACE
-	UPET_HP			UPET_INTIMACY		UPET_INT		UPET_DEF		UPET_ELETYPE
-	UPET_MAXHP		UPET_SPEED			UPET_DEX		UPET_MDEF		UPET_ELELEVEL
-	UPET_MASTERAID	UPET_LOOKDIR		UPET_LUK		UPET_HIT		UPET_AMOTION
-	UPET_MAPID		UPET_CANMOVETICK	UPET_DMGIMMUNE	UPET_FLEE		UPET_ADELAY
-	UPET_X			UPET_STR			UPET_ATKRANGE	UPET_PDODGE		UPET_DMOTION
+	UPET_SIZE
+	UPET_LEVEL
+	UPET_HP
+	UPET_MAXHP
+	UPET_MASTERAID
+	UPET_MAPID
+	UPET_X
+	UPET_Y
+	UPET_HUNGER
+	UPET_INTIMACY
+	UPET_SPEED
+	UPET_LOOKDIR
+	UPET_CANMOVETICK
+	UPET_STR
+	UPET_AGI
+	UPET_VIT
+	UPET_INT
+	UPET_DEX
+	UPET_LUK
+	UPET_DMGIMMUNE
+	UPET_ATKRANGE
+	UPET_ATKMIN
+	UPET_ATKMAX
+	UPET_MATKMIN
+	UPET_MATKMAX
+	UPET_DEF
+	UPET_MDEF
+	UPET_HIT
+	UPET_FLEE
+	UPET_PDODGE
+	UPET_CRIT
+	UPET_RACE
+	UPET_ELETYPE
+	UPET_ELELEVEL
+	UPET_AMOTION
+	UPET_ADELAY
+	UPET_DMOTION
 
 -----
 
 Parameter (indexes) for mercenaries are:
-	UMER_SIZE		UMER_KILLCOUNT		UMER_VIT		UMER_MATK		UMER_RACE
-	UMER_HP			UMER_LIFETIME		UMER_INT		UMER_DEF		UMER_ELETYPE
-	UMER_MAXHP		UMER_SPEED			UMER_DEX		UMER_MDEF		UMER_ELELEVEL
-	UMER_MASTERCID	UMER_LOOKDIR		UMER_LUK		UMER_HIT		UMER_AMOTION
-	UMER_MAPID		UMER_CANMOVETICK	UMER_DMGIMMUNE	UMER_FLEE		UMER_ADELAY
-	UMER_X			UMER_STR			UMER_ATKRANGE	UMER_PDODGE		UMER_DMOTION
-	UMER_Y			UMER_AGI			UMER_ATK		UMER_CRIT
+	UMER_SIZE
+	UMER_HP
+	UMER_MAXHP
+	UMER_MASTERCID
+	UMER_MAPID
+	UMER_X
+	UMER_Y
+	UMER_KILLCOUNT
+	UMER_LIFETIME
+	UMER_SPEED
+	UMER_LOOKDIR
+	UMER_CANMOVETICK
+	UMER_STR
+	UMER_AGI
+	UMER_VIT
+	UMER_INT
+	UMER_DEX
+	UMER_LUK
+	UMER_DMGIMMUNE
+	UMER_ATKRANGE
+	UMER_ATKMIN
+	UMER_ATKMAX
+	UMER_MATKMIN
+	UMER_MATKMAX
+	UMER_DEF
+	UMER_MDEF
+	UMER_HIT
+	UMER_FLEE
+	UMER_PDODGE
+	UMER_CRIT
+	UMER_RACE
+	UMER_ELETYPE
+	UMER_ELELEVEL
+	UMER_AMOTION
+	UMER_ADELAY
+	UMER_DMOTION
 
 -----
 
 Parameter (indexes) for elementals are:
-	UELE_SIZE		UELE_X				UELE_STR			UELE_ATKRANGE	UELE_PDODGE		UELE_DMOTION
-	UELE_HP			UELE_Y				UELE_AGI			UELE_ATK		UELE_CRIT
-	UELE_MAXHP		UELE_LIFETIME		UELE_VIT			UELE_MATK		UELE_RACE
-	UELE_SP			UELE_MODE			UELE_INT			UELE_DEF		UELE_ELETYPE
-	UELE_MAXSP		UELE_SPEED			UELE_DEX			UELE_MDEF		UELE_ELELEVEL
-	UELE_MASTERCID	UELE_LOOKDIR		UELE_LUK			UELE_HIT		UELE_AMOTION
-	UELE_MAPID		UELE_CANMOVETICK	UELE_DMGIMMUNE		UELE_FLEE		ELE_ADELAY
+	UELE_SIZE
+	UELE_HP
+	UELE_MAXHP
+	UELE_SP
+	UELE_MAXSP
+	UELE_MASTERCID
+	UELE_MAPID
+	UELE_X
+	UELE_Y
+	UELE_LIFETIME
+	UELE_MODE
+	UELE_SPEED
+	UELE_LOOKDIR
+	UELE_CANMOVETICK
+	UELE_STR
+	UELE_AGI
+	UELE_VIT
+	UELE_INT
+	UELE_DEX
+	UELE_LUK
+	UELE_DMGIMMUNE
+	UELE_ATKRANGE
+	UELE_ATKMIN
+	UELE_ATKMAX
+	UELE_MATKMIN
+	UELE_MATKMAX
+	UELE_DEF
+	UELE_MDEF
+	UELE_HIT
+	UELE_FLEE
+	UELE_PDODGE
+	UELE_CRIT
+	UELE_RACE
+	UELE_ELETYPE
+	UELE_ELELEVEL
+	UELE_AMOTION
+	UELE_ADELAY
+	UELE_DMOTION
 
 -----
 
 Parameter (indexes) for NPCs are:
-	UNPC_DISPLAY	UNPC_LOOKDIR		UNPC_PLUSALLSTAT	UNPC_HIT		UNPC_AMOTION
-	UNPC_LEVEL		UNPC_STR			UNPC_DMGIMMUNE		UNPC_FLEE		UNPC_ADELAY
-	UNPC_HP			UNPC_AGI			UNPC_ATKRANGE		UNPC_PDODGE		UNPC_DMOTION
-	UNPC_MAXHP		UNPC_VIT			UNPC_ATK			UNPC_CRIT
-	UNPC_MAPID		UNPC_INT			UNPC_MATK			UNPC_RACE
-	UNPC_X			UNPC_DEX			UNPC_DEF			UNPC_ELETYPE
-	UNPC_Y			UNPC_LUK			UNPC_MDEF			UNPC_ELELEVEL
+	UNPC_DISPLAY
+	UNPC_LEVEL
+	UNPC_HP
+	UNPC_MAXHP
+	UNPC_MAPID
+	UNPC_X
+	UNPC_Y
+	UNPC_LOOKDIR
+	UNPC_STR
+	UNPC_AGI
+	UNPC_VIT
+	UNPC_INT
+	UNPC_DEX
+	UNPC_LUK
+	UNPC_PLUSALLSTAT
+	UNPC_DMGIMMUNE
+	UNPC_ATKRANGE
+	UNPC_ATKMIN
+	UNPC_ATKMAX
+	UNPC_MATKMIN
+	UNPC_MATKMAX
+	UNPC_DEF
+	UNPC_MDEF
+	UNPC_HIT
+	UNPC_FLEE
+	UNPC_PDODGE
+	UNPC_CRIT
+	UNPC_RACE
+	UNPC_ELETYPE
+	UNPC_ELELEVEL
+	UNPC_AMOTION
+	UNPC_ADELAY
+	UNPC_DMOTION
 
 *Notes:
 		- *_SIZE: small (0); medium (1); large (2)

+ 72 - 36
src/map/script.c

@@ -2326,8 +2326,10 @@ void script_hardcoded_constants(void) {
 	script_set_constant("UMOB_SLAVECPYMSTRMD",UMOB_SLAVECPYMSTRMD,false);
 	script_set_constant("UMOB_DMGIMMUNE",UMOB_DMGIMMUNE,false);
 	script_set_constant("UMOB_ATKRANGE",UMOB_ATKRANGE,false);
-	script_set_constant("UMOB_ATK",UMOB_ATK,false);
-	script_set_constant("UMOB_MATK",UMOB_MATK,false);
+	script_set_constant("UMOB_ATKMIN",UMOB_ATKMIN,false);
+	script_set_constant("UMOB_ATKMAX",UMOB_ATKMAX,false);
+	script_set_constant("UMOB_MATKMIN",UMOB_MATKMIN,false);
+	script_set_constant("UMOB_MATKMAX",UMOB_MATKMAX,false);
 	script_set_constant("UMOB_DEF",UMOB_DEF,false);
 	script_set_constant("UMOB_MDEF",UMOB_MDEF,false);
 	script_set_constant("UMOB_HIT",UMOB_HIT,false);
@@ -2365,8 +2367,10 @@ void script_hardcoded_constants(void) {
 	script_set_constant("UHOM_LUK",UHOM_LUK,false);
 	script_set_constant("UHOM_DMGIMMUNE",UHOM_DMGIMMUNE,false);
 	script_set_constant("UHOM_ATKRANGE",UHOM_ATKRANGE,false);
-	script_set_constant("UHOM_ATK",UHOM_ATK,false);
-	script_set_constant("UHOM_MATK",UHOM_MATK,false);
+	script_set_constant("UHOM_ATKMIN",UHOM_ATKMIN,false);
+	script_set_constant("UHOM_ATKMAX",UHOM_ATKMAX,false);
+	script_set_constant("UHOM_MATKMIN",UHOM_MATKMIN,false);
+	script_set_constant("UHOM_MATKMAX",UHOM_MATKMAX,false);
 	script_set_constant("UHOM_DEF",UHOM_DEF,false);
 	script_set_constant("UHOM_MDEF",UHOM_MDEF,false);
 	script_set_constant("UHOM_HIT",UHOM_HIT,false);
@@ -2402,8 +2406,10 @@ void script_hardcoded_constants(void) {
 	script_set_constant("UPET_LUK",UPET_LUK,false);
 	script_set_constant("UPET_DMGIMMUNE",UPET_DMGIMMUNE,false);
 	script_set_constant("UPET_ATKRANGE",UPET_ATKRANGE,false);
-	script_set_constant("UPET_ATK",UPET_ATK,false);
-	script_set_constant("UPET_MATK",UPET_MATK,false);
+	script_set_constant("UPET_ATKMIN",UPET_ATKMIN,false);
+	script_set_constant("UPET_ATKMAX",UPET_ATKMAX,false);
+	script_set_constant("UPET_MATKMIN",UPET_MATKMIN,false);
+	script_set_constant("UPET_MATKMAX",UPET_MATKMAX,false);
 	script_set_constant("UPET_DEF",UPET_DEF,false);
 	script_set_constant("UPET_MDEF",UPET_MDEF,false);
 	script_set_constant("UPET_HIT",UPET_HIT,false);
@@ -2438,8 +2444,10 @@ void script_hardcoded_constants(void) {
 	script_set_constant("UMER_LUK",UMER_LUK,false);
 	script_set_constant("UMER_DMGIMMUNE",UMER_DMGIMMUNE,false);
 	script_set_constant("UMER_ATKRANGE",UMER_ATKRANGE,false);
-	script_set_constant("UMER_ATK",UMER_ATK,false);
-	script_set_constant("UMER_MATK",UMER_MATK,false);
+	script_set_constant("UMER_ATKMIN",UMER_ATKMIN,false);
+	script_set_constant("UMER_ATKMAX",UMER_ATKMAX,false);
+	script_set_constant("UMER_MATKMIN",UMER_MATKMIN,false);
+	script_set_constant("UMER_MATKMAX",UMER_MATKMAX,false);
 	script_set_constant("UMER_DEF",UMER_DEF,false);
 	script_set_constant("UMER_MDEF",UMER_MDEF,false);
 	script_set_constant("UMER_HIT",UMER_HIT,false);
@@ -2476,8 +2484,10 @@ void script_hardcoded_constants(void) {
 	script_set_constant("UELE_LUK",UELE_LUK,false);
 	script_set_constant("UELE_DMGIMMUNE",UELE_DMGIMMUNE,false);
 	script_set_constant("UELE_ATKRANGE",UELE_ATKRANGE,false);
-	script_set_constant("UELE_ATK",UELE_ATK,false);
-	script_set_constant("UELE_MATK",UELE_MATK,false);
+	script_set_constant("UELE_ATKMIN",UELE_ATKMIN,false);
+	script_set_constant("UELE_ATKMAX",UELE_ATKMAX,false);
+	script_set_constant("UELE_MATKMIN",UELE_MATKMIN,false);
+	script_set_constant("UELE_MATKMAX",UELE_MATKMAX,false);
 	script_set_constant("UELE_DEF",UELE_DEF,false);
 	script_set_constant("UELE_MDEF",UELE_MDEF,false);
 	script_set_constant("UELE_HIT",UELE_HIT,false);
@@ -2509,8 +2519,10 @@ void script_hardcoded_constants(void) {
 	script_set_constant("UNPC_PLUSALLSTAT",UNPC_PLUSALLSTAT,false);
 	script_set_constant("UNPC_DMGIMMUNE",UNPC_DMGIMMUNE,false);
 	script_set_constant("UNPC_ATKRANGE",UNPC_ATKRANGE,false);
-	script_set_constant("UNPC_ATK",UNPC_ATK,false);
-	script_set_constant("UNPC_MATK",UNPC_MATK,false);
+	script_set_constant("UNPC_ATKMIN",UNPC_ATKMIN,false);
+	script_set_constant("UNPC_ATKMAX",UNPC_ATKMAX,false);
+	script_set_constant("UNPC_MATKMIN",UNPC_MATKMIN,false);
+	script_set_constant("UNPC_MATKMAX",UNPC_MATKMAX,false);
 	script_set_constant("UNPC_DEF",UNPC_DEF,false);
 	script_set_constant("UNPC_MDEF",UNPC_MDEF,false);
 	script_set_constant("UNPC_HIT",UNPC_HIT,false);
@@ -17109,8 +17121,10 @@ BUILDIN_FUNC(getunitdata)
 			getunitdata_sub(UMOB_SLAVECPYMSTRMD, md->state.copy_master_mode);
 			getunitdata_sub(UMOB_DMGIMMUNE, md->ud.immune_attack);
 			getunitdata_sub(UMOB_ATKRANGE, md->status.rhw.range);
-			getunitdata_sub(UMOB_ATK, md->status.rhw.atk);
-			getunitdata_sub(UMOB_MATK, md->status.rhw.atk2);
+			getunitdata_sub(UMOB_ATKMIN, md->status.rhw.atk);
+			getunitdata_sub(UMOB_ATKMAX, md->status.rhw.atk2);
+			getunitdata_sub(UMOB_MATKMIN, md->status.matk_min);
+			getunitdata_sub(UMOB_MATKMAX, md->status.matk_max);
 			getunitdata_sub(UMOB_DEF, md->status.def);
 			getunitdata_sub(UMOB_MDEF, md->status.mdef);
 			getunitdata_sub(UMOB_HIT, md->status.hit);
@@ -17153,8 +17167,10 @@ BUILDIN_FUNC(getunitdata)
 			getunitdata_sub(UHOM_LUK, hd->base_status.luk);
 			getunitdata_sub(UHOM_DMGIMMUNE, hd->ud.immune_attack);
 			getunitdata_sub(UHOM_ATKRANGE, hd->battle_status.rhw.range);
-			getunitdata_sub(UHOM_ATK, hd->battle_status.rhw.atk);
-			getunitdata_sub(UHOM_MATK, hd->battle_status.rhw.atk2);
+			getunitdata_sub(UHOM_ATKMIN, hd->base_status.rhw.atk);
+			getunitdata_sub(UHOM_ATKMAX, hd->base_status.rhw.atk2);
+			getunitdata_sub(UHOM_MATKMIN, hd->base_status.matk_min);
+			getunitdata_sub(UHOM_MATKMAX, hd->base_status.matk_max);
 			getunitdata_sub(UHOM_DEF, hd->battle_status.def);
 			getunitdata_sub(UHOM_MDEF, hd->battle_status.mdef);
 			getunitdata_sub(UHOM_HIT, hd->battle_status.hit);
@@ -17195,8 +17211,10 @@ BUILDIN_FUNC(getunitdata)
 			getunitdata_sub(UPET_LUK, pd->status.luk);
 			getunitdata_sub(UPET_DMGIMMUNE, pd->ud.immune_attack);
 			getunitdata_sub(UPET_ATKRANGE, pd->status.rhw.range);
-			getunitdata_sub(UPET_ATK, pd->status.rhw.atk);
-			getunitdata_sub(UPET_MATK, pd->status.rhw.atk2);
+			getunitdata_sub(UPET_ATKMIN, pd->status.rhw.atk);
+			getunitdata_sub(UPET_ATKMAX, pd->status.rhw.atk2);
+			getunitdata_sub(UPET_MATKMIN, pd->status.matk_min);
+			getunitdata_sub(UPET_MATKMAX, pd->status.matk_max);
 			getunitdata_sub(UPET_DEF, pd->status.def);
 			getunitdata_sub(UPET_MDEF, pd->status.mdef);
 			getunitdata_sub(UPET_HIT, pd->status.hit);
@@ -17236,8 +17254,10 @@ BUILDIN_FUNC(getunitdata)
 			getunitdata_sub(UMER_LUK, mc->base_status.luk);
 			getunitdata_sub(UMER_DMGIMMUNE, mc->ud.immune_attack);
 			getunitdata_sub(UMER_ATKRANGE, mc->base_status.rhw.range);
-			getunitdata_sub(UMER_ATK, mc->base_status.rhw.atk);
-			getunitdata_sub(UMER_MATK, mc->base_status.rhw.atk2);
+			getunitdata_sub(UMER_ATKMIN, mc->base_status.rhw.atk);
+			getunitdata_sub(UMER_ATKMAX, mc->base_status.rhw.atk2);
+			getunitdata_sub(UMER_MATKMIN, mc->base_status.matk_min);
+			getunitdata_sub(UMER_MATKMAX, mc->base_status.matk_max);
 			getunitdata_sub(UMER_DEF, mc->base_status.def);
 			getunitdata_sub(UMER_MDEF, mc->base_status.mdef);
 			getunitdata_sub(UMER_HIT, mc->base_status.hit);
@@ -17279,8 +17299,10 @@ BUILDIN_FUNC(getunitdata)
 			getunitdata_sub(UELE_LUK, ed->base_status.luk);
 			getunitdata_sub(UELE_DMGIMMUNE, ed->ud.immune_attack);
 			getunitdata_sub(UELE_ATKRANGE, ed->base_status.rhw.range);
-			getunitdata_sub(UELE_ATK, ed->base_status.rhw.atk);
-			getunitdata_sub(UELE_MATK, ed->base_status.rhw.atk2);
+			getunitdata_sub(UELE_ATKMIN, ed->base_status.rhw.atk);
+			getunitdata_sub(UELE_ATKMAX, ed->base_status.rhw.atk2);
+			getunitdata_sub(UELE_MATKMIN, ed->base_status.matk_min);
+			getunitdata_sub(UELE_MATKMAX, ed->base_status.matk_max);
 			getunitdata_sub(UELE_DEF, ed->base_status.def);
 			getunitdata_sub(UELE_MDEF, ed->base_status.mdef);
 			getunitdata_sub(UELE_HIT, ed->base_status.hit);
@@ -17317,8 +17339,10 @@ BUILDIN_FUNC(getunitdata)
 			getunitdata_sub(UNPC_PLUSALLSTAT, nd->stat_point);
 			getunitdata_sub(UNPC_DMGIMMUNE, nd->ud.immune_attack);
 			getunitdata_sub(UNPC_ATKRANGE, nd->status.rhw.range);
-			getunitdata_sub(UNPC_ATK, nd->status.rhw.atk);
-			getunitdata_sub(UNPC_MATK, nd->status.rhw.atk2);
+			getunitdata_sub(UNPC_ATKMIN, nd->status.rhw.atk);
+			getunitdata_sub(UNPC_ATKMAX, nd->status.rhw.atk2);
+			getunitdata_sub(UNPC_MATKMIN, nd->status.matk_min);
+			getunitdata_sub(UNPC_MATKMAX, nd->status.matk_max);
 			getunitdata_sub(UNPC_DEF, nd->status.def);
 			getunitdata_sub(UNPC_MDEF, nd->status.mdef);
 			getunitdata_sub(UNPC_HIT, nd->status.hit);
@@ -17436,8 +17460,10 @@ BUILDIN_FUNC(setunitdata)
 			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_DMGIMMUNE: md->ud.immune_attack = (bool)value > 0 ? 1 : 0; break;
 			case UMOB_ATKRANGE: md->status.rhw.range = (unsigned short)value; break;
-			case UMOB_ATK: md->status.rhw.atk = (unsigned short)value; break;
-			case UMOB_MATK: md->status.rhw.atk2 = (unsigned short)value; break;
+			case UMOB_ATKMIN: md->status.rhw.atk = (unsigned short)value; break;
+			case UMOB_ATKMAX: md->status.rhw.atk2 = (unsigned short)value; break;
+			case UMOB_MATKMIN: md->status.matk_min = (unsigned short)value; break;
+			case UMOB_MATKMAX: md->status.matk_max = (unsigned short)value; break;
 			case UMOB_DEF: md->status.def = (defType)value; break;
 			case UMOB_MDEF: md->status.mdef = (defType)value; break;
 			case UMOB_HIT: md->status.hit = (short)value; break;
@@ -17485,8 +17511,10 @@ BUILDIN_FUNC(setunitdata)
 			case UHOM_LUK: hd->base_status.luk = (unsigned short)value; status_calc_misc(bl, &hd->base_status, hd->homunculus.level); break;
 			case UHOM_DMGIMMUNE: hd->ud.immune_attack = (bool)value > 0 ? 1 : 0; break;
 			case UHOM_ATKRANGE: hd->base_status.rhw.range = (unsigned short)value; break;
-			case UHOM_ATK: hd->base_status.rhw.atk = (unsigned short)value; break;
-			case UHOM_MATK: hd->base_status.rhw.atk2 = (unsigned short)value; break;
+			case UHOM_ATKMIN: hd->base_status.rhw.atk = (unsigned short)value; break;
+			case UHOM_ATKMAX: hd->base_status.rhw.atk2 = (unsigned short)value; break;
+			case UHOM_MATKMIN: hd->base_status.matk_min = (unsigned short)value; break;
+			case UHOM_MATKMAX: hd->base_status.matk_max = (unsigned short)value; break;
 			case UHOM_DEF: hd->base_status.def = (defType)value; break;
 			case UHOM_MDEF: hd->base_status.mdef = (defType)value; break;
 			case UHOM_HIT: hd->base_status.hit = (short)value; break;
@@ -17532,8 +17560,10 @@ BUILDIN_FUNC(setunitdata)
 			case UPET_LUK: pd->status.luk = (unsigned short)value; status_calc_misc(bl, &pd->status, pd->pet.level); break;
 			case UPET_DMGIMMUNE: pd->ud.immune_attack = (bool)value > 0 ? 1 : 0; break;
 			case UPET_ATKRANGE: pd->status.rhw.range = (unsigned short)value; break;
-			case UPET_ATK: pd->status.rhw.atk = (unsigned short)value; break;
-			case UPET_MATK: pd->status.rhw.atk2 = (unsigned short)value; break;
+			case UPET_ATKMIN: pd->status.rhw.atk = (unsigned short)value; break;
+			case UPET_ATKMAX: pd->status.rhw.atk2 = (unsigned short)value; break;
+			case UPET_MATKMIN: pd->status.matk_min = (unsigned short)value; break;
+			case UPET_MATKMAX: pd->status.matk_max = (unsigned short)value; break;
 			case UPET_DEF: pd->status.def = (defType)value; break;
 			case UPET_MDEF: pd->status.mdef = (defType)value; break;
 			case UPET_HIT: pd->status.hit = (short)value; break;
@@ -17578,8 +17608,10 @@ BUILDIN_FUNC(setunitdata)
 			case UMER_LUK: mc->base_status.luk = (unsigned short)value; status_calc_misc(bl, &mc->base_status, mc->db->lv); break;
 			case UMER_DMGIMMUNE: mc->ud.immune_attack = (bool)value > 0 ? 1 : 0; break;
 			case UMER_ATKRANGE: mc->base_status.rhw.range = (unsigned short)value; break;
-			case UMER_ATK: mc->base_status.rhw.atk = (unsigned short)value; break;
-			case UMER_MATK: mc->base_status.rhw.atk2 = (unsigned short)value; break;
+			case UMER_ATKMIN: mc->base_status.rhw.atk = (unsigned short)value; break;
+			case UMER_ATKMAX: mc->base_status.rhw.atk2 = (unsigned short)value; break;
+			case UMER_MATKMIN: mc->base_status.matk_min = (unsigned short)value; break;
+			case UMER_MATKMAX: mc->base_status.matk_max = (unsigned short)value; break;
 			case UMER_DEF: mc->base_status.def = (defType)value; break;
 			case UMER_MDEF: mc->base_status.mdef = (defType)value; break;
 			case UMER_HIT: mc->base_status.hit = (short)value; break;
@@ -17626,8 +17658,10 @@ BUILDIN_FUNC(setunitdata)
 			case UELE_LUK: ed->base_status.luk = (unsigned short)value; status_calc_misc(bl, &ed->base_status, ed->db->lv); break;
 			case UELE_DMGIMMUNE: ed->ud.immune_attack = (bool)value > 0 ? 1 : 0; break;
 			case UELE_ATKRANGE: ed->base_status.rhw.range = (unsigned short)value; break;
-			case UELE_ATK: ed->base_status.rhw.atk = (unsigned short)value; break;
-			case UELE_MATK: ed->base_status.rhw.atk2 = (unsigned short)value; break;
+			case UELE_ATKMIN: ed->base_status.rhw.atk = (unsigned short)value; break;
+			case UELE_ATKMAX: ed->base_status.rhw.atk2 = (unsigned short)value; break;
+			case UELE_MATKMIN: ed->base_status.matk_min = (unsigned short)value; break;
+			case UELE_MATKMAX: ed->base_status.matk_max = (unsigned short)value; break;
 			case UELE_DEF: ed->base_status.def = (defType)value; break;
 			case UELE_MDEF: ed->base_status.mdef = (defType)value; break;
 			case UELE_HIT: ed->base_status.hit = (short)value; break;
@@ -17668,8 +17702,10 @@ BUILDIN_FUNC(setunitdata)
 			case UNPC_LUK: nd->params.luk = (unsigned short)value; status_calc_misc(bl, &nd->status, nd->level); break;
 			case UNPC_PLUSALLSTAT: nd->stat_point = (unsigned int)value; break;
 			case UNPC_ATKRANGE: nd->status.rhw.range = (unsigned short)value; break;
-			case UNPC_ATK: nd->status.rhw.atk = (unsigned short)value; break;
-			case UNPC_MATK: nd->status.rhw.atk2 = (unsigned short)value; break;
+			case UNPC_ATKMIN: nd->status.rhw.atk = (unsigned short)value; break;
+			case UNPC_ATKMAX: nd->status.rhw.atk2 = (unsigned short)value; break;
+			case UNPC_MATKMIN: nd->status.matk_min = (unsigned short)value; break;
+			case UNPC_MATKMAX: nd->status.matk_max = (unsigned short)value; break;
 			case UNPC_DEF: nd->status.def = (defType)value; break;
 			case UNPC_MDEF: nd->status.mdef = (defType)value; break;
 			case UNPC_HIT: nd->status.hit = (short)value; break;

+ 24 - 12
src/map/script.h

@@ -330,8 +330,10 @@ enum unitdata_mobtypes {
 	UMOB_SLAVECPYMSTRMD,
 	UMOB_DMGIMMUNE,
 	UMOB_ATKRANGE,
-	UMOB_ATK,
-	UMOB_MATK,
+	UMOB_ATKMIN,
+	UMOB_ATKMAX,
+	UMOB_MATKMIN,
+	UMOB_MATKMAX,
 	UMOB_DEF,
 	UMOB_MDEF,
 	UMOB_HIT,
@@ -370,8 +372,10 @@ enum unitdata_homuntypes {
 	UHOM_LUK,
 	UHOM_DMGIMMUNE,
 	UHOM_ATKRANGE,
-	UHOM_ATK,
-	UHOM_MATK,
+	UHOM_ATKMIN,
+	UHOM_ATKMAX,
+	UHOM_MATKMIN,
+	UHOM_MATKMAX,
 	UHOM_DEF,
 	UHOM_MDEF,
 	UHOM_HIT,
@@ -408,8 +412,10 @@ enum unitdata_pettypes {
 	UPET_LUK,
 	UPET_DMGIMMUNE,
 	UPET_ATKRANGE,
-	UPET_ATK,
-	UPET_MATK,
+	UPET_ATKMIN,
+	UPET_ATKMAX,
+	UPET_MATKMIN,
+	UPET_MATKMAX,
 	UPET_DEF,
 	UPET_MDEF,
 	UPET_HIT,
@@ -445,8 +451,10 @@ enum unitdata_merctypes {
 	UMER_LUK,
 	UMER_DMGIMMUNE,
 	UMER_ATKRANGE,
-	UMER_ATK,
-	UMER_MATK,
+	UMER_ATKMIN,
+	UMER_ATKMAX,
+	UMER_MATKMIN,
+	UMER_MATKMAX,
 	UMER_DEF,
 	UMER_MDEF,
 	UMER_HIT,
@@ -484,8 +492,10 @@ enum unitdata_elemtypes {
 	UELE_LUK,
 	UELE_DMGIMMUNE,
 	UELE_ATKRANGE,
-	UELE_ATK,
-	UELE_MATK,
+	UELE_ATKMIN,
+	UELE_ATKMAX,
+	UELE_MATKMIN,
+	UELE_MATKMAX,
 	UELE_DEF,
 	UELE_MDEF,
 	UELE_HIT,
@@ -518,8 +528,10 @@ enum unitdata_npctypes {
 	UNPC_PLUSALLSTAT,
 	UNPC_DMGIMMUNE,
 	UNPC_ATKRANGE,
-	UNPC_ATK,
-	UNPC_MATK,
+	UNPC_ATKMIN,
+	UNPC_ATKMAX,
+	UNPC_MATKMIN,
+	UNPC_MATKMAX,
 	UNPC_DEF,
 	UNPC_MDEF,
 	UNPC_HIT,

+ 2 - 1
src/map/status.h

@@ -1934,7 +1934,8 @@ struct status_data {
 		hp, sp,  // see status_cpy before adding members before hp and sp
 		max_hp, max_sp;
 	short
-		str, agi, vit, int_, dex, luk,
+		str, agi, vit, int_, dex, luk;
+	unsigned short
 		batk,
 #ifdef RENEWAL
 		watk,