diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/map.h | 1 | ||||
-rw-r--r-- | src/map/script.c | 5 | ||||
-rw-r--r-- | src/map/status.c | 6 |
3 files changed, 8 insertions, 4 deletions
diff --git a/src/map/map.h b/src/map/map.h index 603d21701..0fa350f8b 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -507,6 +507,7 @@ struct map_session_data { unsigned no_gemstone : 1;
unsigned infinite_endure : 1;
unsigned intravision : 1; // Maya Purple Card effect allowing to see Hiding/Cloaking people [DracoRPG]
+ unsigned changebase : 1; //Specifies when you are wearing a change-base piece of equipment.
} special_state;
int char_id, login_id1, login_id2, sex;
unsigned short class_; //This is the internal job ID used by the map server to simplify comparisons/queries/etc. [Skotlex]
diff --git a/src/map/script.c b/src/map/script.c index 706408af4..66e77d9c8 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -6335,9 +6335,10 @@ int buildin_changebase(struct script_state *st) return 0;
}
- //If you are already using a special view (disguises?) prevent overriding it. [Skotlex]
- if (sd->vd.class_ == sd->status.class_)
+ if(!sd->disguise && !sd->special_state.changebase) {
status_set_viewdata(&sd->bl, vclass);
+ sd->special_state.changebase =1; //Character on suit.
+ }
return 0;
}
diff --git a/src/map/status.c b/src/map/status.c index 7555a25aa..9b7ed47f0 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -627,9 +627,11 @@ int status_calc_pc(struct map_session_data* sd,int first) b_matk2 = sd->matk2;
b_mdef = sd->mdef;
b_mdef2 = sd->mdef2;
- b_class = sd->vd.class_;
b_base_atk = sd->base_atk;
-
+ b_class = sd->vd.class_;
+ if (sd->special_state.changebase) //Clear suit. (if equipment is still on, vd.class_ will revert back to b_class's value)
+ sd->vd.class_ = sd->status.class_;
+
pc_calc_skilltree(sd); // スキルツリ?の計算
sd->max_weight = max_weight_base[sd->status.class_]+sd->status.str*300;
|