summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt4
-rw-r--r--src/map/map.h1
-rw-r--r--src/map/script.c5
-rw-r--r--src/map/status.c6
4 files changed, 12 insertions, 4 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 1e1138de7..2d34210be 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,10 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/04/11
+ * Added special_state changebase to identify when a character has a
+ special-view associated with some equipment to correctly revert the look
+ when you take off said equipment (fixes tuxedo/wedding dress when you use
+ modify_wedding_display: yes) [Skotlex]
* Removed the piece of code that "guesses" that job classes between 24 and
68 are advanced classes from mob_avail reading since they conflict with
NJ/GS. Use the correct class numbers from now on! [Skotlex]
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;