Sfoglia il codice sorgente

Fixed some minor inconsistencies in homunculus packets, in an attempt to make the lvl99 aura show to owner onSpawn.
Still doesn't work as there appears to be a complex packet order dependency...

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@11851 54d463be-8e91-2dee-dedb-b68131a5f0ec

ultramage 17 anni fa
parent
commit
2b186ae7b8
3 ha cambiato i file con 7 aggiunte e 9 eliminazioni
  1. 2 2
      src/map/clif.c
  2. 1 2
      src/map/mercenary.c
  3. 4 5
      src/map/status.c

+ 2 - 2
src/map/clif.c

@@ -1203,7 +1203,7 @@ int clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag)
 	WBUFL(buf,59)=hd->homunculus.exp;
 	WBUFL(buf,63)=hd->exp_next;
 	WBUFW(buf,67)=hd->homunculus.skillpts;
-	WBUFW(buf,69)=1; // FIXME: Attackable? When exactly is a homun not attackable? [Skotlex]
+	WBUFW(buf,69)=2; // FIXME: undocumented flag, seems to be '2' all the time [ultramage]
 	clif_send(buf,packet_len(0x22e),&sd->bl,SELF);
 	return 0;
 }
@@ -7832,9 +7832,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 	if(merc_is_hom_active(sd->hd)) {
 		map_addblock(&sd->hd->bl);
 		clif_spawn(&sd->hd->bl);
+		clif_send_homdata(sd,0,0);
 		clif_hominfo(sd,sd->hd,1);
 		clif_hominfo(sd,sd->hd,0); //for some reason, at least older clients want this sent twice
-		clif_send_homdata(sd,0,0);
 		clif_homskillinfoblock(sd);
 		if (battle_config.hom_setting&0x8)
 			status_calc_bl(&sd->hd->bl, SCB_SPEED); //Homunc mimic their master's speed on each map change

+ 1 - 2
src/map/mercenary.c

@@ -716,11 +716,10 @@ int merc_hom_recv_data(int account_id, struct s_homunculus *sh, int flag)
 	{
 		map_addblock(&hd->bl);
 		clif_spawn(&hd->bl);
+		clif_send_homdata(sd,SP_ACK,0);
 		clif_hominfo(sd,hd,1);
 		clif_hominfo(sd,hd,0); // send this x2. dunno why, but kRO does that [blackhole89]
 		clif_homskillinfoblock(sd);
-		clif_hominfo(sd,hd,0);
-		clif_send_homdata(sd,SP_ACK,0);
 		merc_hom_init_timers(hd);
 	}
 	return 1;

+ 4 - 5
src/map/status.c

@@ -2404,6 +2404,7 @@ int status_calc_homunculus(struct homun_data *hd, int first)
 	struct status_data b_status, *status;
 	struct s_homunculus *hom;
 	int skill;
+	int amotion;
 
 	memcpy(&b_status, &hd->base_status, sizeof(struct status_data));
 	hom = &hd->homunculus;
@@ -2468,17 +2469,15 @@ int status_calc_homunculus(struct homun_data *hd, int first)
 
 	status->aspd_rate = 1000;
 
-	skill = (1000 -4*status->agi -status->dex)
-			*hd->homunculusDB->baseASPD/1000;
-
-	status->amotion = cap_value(skill,battle_config.max_aspd,2000);
+	amotion = (1000 -4*status->agi -status->dex) * hd->homunculusDB->baseASPD/1000;
+	status->amotion = cap_value(amotion,battle_config.max_aspd,2000);
 	status->adelay = status->amotion; //It seems adelay = amotion for Homunculus.
 
 	status_calc_misc(&hd->bl, status, hom->level);
 	status_cpy(&hd->battle_status, status);
 	status_calc_bl(&hd->bl, SCB_ALL); //Status related changes.
 
-	if (memcmp(&b_status, status, sizeof(struct status_data)))
+	if( memcmp(&b_status, status, sizeof(struct status_data)) && !first )
 		clif_hominfo(hd->master,hd,0) ;
 
 	return 1;