Explorar el Código

- Re-committed r16974/trunk/src/ (pid:161281).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16996 54d463be-8e91-2dee-dedb-b68131a5f0ec
momacabu hace 12 años
padre
commit
2e3e383ba2
Se han modificado 2 ficheros con 26 adiciones y 0 borrados
  1. 6 0
      src/map/clif.c
  2. 20 0
      src/map/pc.c

+ 6 - 0
src/map/clif.c

@@ -9243,6 +9243,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 		clif_spawn(&sd->md->bl);
 		clif_mercenary_info(sd);
 		clif_mercenary_skillblock(sd);
+		status_calc_bl(&sd->md->bl, SCB_SPEED); // Mercenary mimic their master's speed on each map change
 	}
 
 	if( sd->ed ) {
@@ -9252,6 +9253,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 		clif_elemental_updatestatus(sd,SP_HP);
 		clif_hpmeter_single(sd->fd,sd->ed->bl.id,sd->ed->battle_status.hp,sd->ed->battle_status.matk_max);
 		clif_elemental_updatestatus(sd,SP_SP);
+		status_calc_bl(&sd->ed->bl, SCB_SPEED); //Elemental mimic their master's speed on each map change
 	}
 
 	if(sd->state.connect_new) {
@@ -13967,6 +13969,10 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd)
 	safestrncpy(msg.send_name, sd->status.name, NAME_LENGTH);
 	safestrncpy(msg.dest_name, (char*)RFIFOP(fd,4), NAME_LENGTH);
 	safestrncpy(msg.title, (char*)RFIFOP(fd,28), MAIL_TITLE_LENGTH);
+	
+	if (msg.title[0] == '\0') {
+		return; // Message has no length and somehow client verification was skipped.
+	}
 
 	if (body_len)
 		safestrncpy(msg.body, (char*)RFIFOP(fd,69), body_len + 1);

+ 20 - 0
src/map/pc.c

@@ -7119,6 +7119,19 @@ int pc_percentheal(struct map_session_data *sd,int hp,int sp)
 	return 0;
 }
 
+static int jobchange_killclone(struct block_list *bl, va_list ap)
+{
+	struct mob_data *md;
+		int flag;
+	md = (struct mob_data *)bl;
+	nullpo_ret(md);
+	flag = va_arg(ap, int);
+
+	if (md->master_id && md->special_state.clone && md->master_id == flag)
+		status_kill(&md->bl);
+	return 1;
+}
+
 /*==========================================
  * Called when player changes job
  * Rewrote to make it tidider [Celest]
@@ -7228,6 +7241,13 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
 	//Update skill tree.
 	pc_calc_skilltree(sd);
 	clif_skillinfoblock(sd);
+	
+	if (sd->ed)
+		elemental_delete(sd->ed, 0);
+	if (sd->state.vending)
+		vending_closevending(sd);
+	
+	map_foreachinmap(jobchange_killclone, sd->bl.m, BL_MOB, sd->bl.id);
 
 	//Remove peco/cart/falcon
 	i = sd->sc.option;