Selaa lähdekoodia

Converted ZC_NPCSPRITE_CHANGE to struct

Lemongrass3110 6 kuukautta sitten
vanhempi
commit
a58584c3ff
6 muutettua tiedostoa jossa 34 lisäystä ja 24 poistoa
  1. 19 15
      src/map/clif.cpp
  2. 1 3
      src/map/clif.hpp
  3. 2 2
      src/map/homunculus.cpp
  4. 1 1
      src/map/mob.cpp
  5. 8 0
      src/map/packets.hpp
  6. 3 3
      src/map/script.cpp

+ 19 - 15
src/map/clif.cpp

@@ -1484,23 +1484,27 @@ static void clif_set_unit_walking( struct block_list& bl, map_session_data* tsd,
 	}
 }
 
-/// Changes sprite of an NPC object (ZC_NPCSPRITE_CHANGE).
-/// 01b0 <id>.L <type>.B <value>.L
-/// type:
-///     unused
-void clif_class_change_target(struct block_list *bl,int class_,int type, enum send_target target, map_session_data *sd)
-{
-	nullpo_retv(bl);
+/// Changes sprite of a non player object.
+/// 01b0 <id>.L <type>.B <value>.L (ZC_NPCSPRITE_CHANGE)
+void clif_class_change( block_list& bl, int32 class_, enum send_target target, map_session_data* sd ){
+	if( pcdb_checkid( class_ ) ){
+		// player classes yield missing sprites
+		return;
+	}
 
-	if(!pcdb_checkid(class_))
-	{// player classes yield missing sprites
-		unsigned char buf[16];
-		WBUFW(buf,0)=0x1b0;
-		WBUFL(buf,2)=bl->id;
-		WBUFB(buf,6)=type;
-		WBUFL(buf,7)=class_;
-		clif_send(buf,packet_len(0x1b0),(sd == nullptr ? bl : &(sd->bl)),target);
+	PACKET_ZC_NPCSPRITE_CHANGE p = {};
+
+	p.packetType = HEADER_ZC_NPCSPRITE_CHANGE;
+	p.GID = bl.id;
+	// Unused
+	p.type = 0;
+	p.class_ = class_;
+
+	if( sd != nullptr ){
+		bl = sd->bl;
 	}
+
+	clif_send( &p, sizeof( p ), &bl, target );
 }
 
 void clif_servantball( map_session_data& sd, struct block_list* target, enum send_target send_target ){

+ 1 - 3
src/map/clif.hpp

@@ -925,9 +925,7 @@ void clif_storageclose( map_session_data& sd );
 int clif_insight(struct block_list *bl,va_list ap);	// map_forallinmovearea callback
 int clif_outsight(struct block_list *bl,va_list ap);	// map_forallinmovearea callback
 
-void clif_class_change_target(struct block_list *bl,int class_, int type, enum send_target target, map_session_data *sd);
-#define clif_class_change(bl, class_, type) clif_class_change_target(bl, class_, type, AREA, nullptr)
-#define clif_mob_class_change(md, class_) clif_class_change(&md->bl, class_, 1)
+void clif_class_change( block_list& bl, int32 class_, enum send_target target = AREA, map_session_data* sd = nullptr );
 
 void clif_skillinfoblock(map_session_data *sd);
 void clif_skillup(map_session_data *sd, uint16 skill_id, int lv, int range, int upgradable);

+ 2 - 2
src/map/homunculus.cpp

@@ -627,7 +627,7 @@ int hom_evolution(struct homun_data *hd)
 	hom->luk += 10*rnd_value(min->luk, max->luk);
 	hom->intimacy = battle_config.homunculus_evo_intimacy_reset;
 
-	clif_class_change(&hd->bl, hd->homunculusDB->evo_class, 0);
+	clif_class_change( hd->bl, hd->homunculusDB->evo_class );
 
 	// status_Calc flag&1 will make current HP/SP be reloaded from hom structure
 	hom->hp = hd->battle_status.hp;
@@ -677,7 +677,7 @@ int hom_mutate(struct homun_data *hd, int homun_id)
 		return 0;
 	}
 
-	clif_class_change(&hd->bl, homun_id, 0);
+	clif_class_change( hd->bl, homun_id );
 
 	// status_Calc flag&1 will make current HP/SP be reloaded from hom structure
 	hom = &hd->homunculus;

+ 1 - 1
src/map/mob.cpp

@@ -3495,7 +3495,7 @@ int mob_class_change (struct mob_data *md, int mob_id)
 	mob_stop_walking(md, 0);
 	unit_skillcastcancel(&md->bl, 0);
 	status_set_viewdata(&md->bl, mob_id);
-	clif_mob_class_change(md,md->vd->class_);
+	clif_class_change( md->bl, md->vd->class_ );
 	status_calc_mob(md,SCO_FIRST);
 
 	if (battle_config.monster_class_change_recover) {

+ 8 - 0
src/map/packets.hpp

@@ -1386,6 +1386,14 @@ struct PACKET_CZ_REQUEST_MOVENPC{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_REQUEST_MOVENPC, 0x232);
 
+struct PACKET_ZC_NPCSPRITE_CHANGE{
+	int16 packetType;
+	uint32 GID;
+	uint8 type;
+	uint32 class_;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_NPCSPRITE_CHANGE, 0x1b0);
+
 // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
 #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
 	#pragma pack( pop )

+ 3 - 3
src/map/script.cpp

@@ -15001,7 +15001,7 @@ BUILDIN_FUNC(undisguise)
  */
 BUILDIN_FUNC(classchange)
 {
-	int _class, type = 1;
+	int32 _class;
 	struct npc_data* nd = nullptr;
 	TBL_PC *sd = map_id2sd(st->rid);
 	send_target target = AREA;
@@ -15024,11 +15024,11 @@ BUILDIN_FUNC(classchange)
 		}
 	}
 	if (target != SELF)
-		clif_class_change(&nd->bl,_class,type);
+		clif_class_change( nd->bl, _class );
 	else if (sd == nullptr)
 		return SCRIPT_CMD_FAILURE;
 	else
-		clif_class_change_target(&nd->bl,_class,type,target,sd);
+		clif_class_change( nd->bl, _class, target, sd );
 
 	return SCRIPT_CMD_SUCCESS;
 }