Forráskód Böngészése

- 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)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6002 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 éve
szülő
commit
97af776e02
4 módosított fájl, 12 hozzáadás és 4 törlés
  1. 4 0
      Changelog-Trunk.txt
  2. 1 0
      src/map/map.h
  3. 3 2
      src/map/script.c
  4. 4 2
      src/map/status.c

+ 4 - 0
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]

+ 1 - 0
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]

+ 3 - 2
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;
 }

+ 4 - 2
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);	// ƒXƒLƒ‹ƒcƒŠ?‚ÌŒvŽZ
 	
 	sd->max_weight = max_weight_base[sd->status.class_]+sd->status.str*300;