Ver Fonte

Fixed wrong mvp format string for @mobinfo (would not show big mvp exp rewards correctly).
Added data length check to chrif_authok(), to detect a mismatch between charserver's and mapserver's mmo_charstatus structure size.
Corrected some typos in the cash shop code.

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

ultramage há 17 anos atrás
pai
commit
d84310bc4e
6 ficheiros alterados com 23 adições e 14 exclusões
  1. 1 1
      src/map/atcommand.c
  2. 8 0
      src/map/chrif.c
  3. 1 1
      src/map/clif.c
  4. 8 7
      src/map/npc.c
  5. 4 4
      src/map/pc.c
  6. 1 1
      src/map/pc.h

+ 1 - 1
src/map/atcommand.c

@@ -6962,7 +6962,7 @@ int atcommand_mobinfo(const int fd, struct map_session_data* sd, const char* com
 			clif_displaymessage(fd, atcmd_output);
 		// mvp
 		if (mob->mexp) {
-			sprintf(atcmd_output, " MVP Bonus EXP:%d  %02.02f%%", mob->mexp, (float)mob->mexpper / 100);
+			sprintf(atcmd_output, " MVP Bonus EXP:%u  %02.02f%%", mob->mexp, (float)mob->mexpper / 100);
 			clif_displaymessage(fd, atcmd_output);
 			strcpy(atcmd_output, " MVP Items:");
 			j = 0;

+ 8 - 0
src/map/chrif.c

@@ -543,6 +543,14 @@ void chrif_authok(int fd)
 	struct mmo_charstatus *status = (struct mmo_charstatus *)RFIFOP(fd, 20);
 	int char_id = status->char_id;
 	TBL_PC* sd;
+
+	//Check if both servers agree on the struct's size
+	if( RFIFOW(fd,2) - 20 != sizeof(struct mmo_charstatus) )
+	{
+		ShowError("chrif_authok: Data size mismatch! %d != %d\n", RFIFOW(fd,2) - 20, sizeof(struct mmo_charstatus));
+		return;
+	}
+
 	//Check if we don't already have player data in our server
 	//Causes problems if the currently connected player tries to quit or this data belongs to an already connected player which is trying to re-auth.
 	if ((sd = map_id2sd(account_id)) != NULL)

+ 1 - 1
src/map/clif.c

@@ -11723,7 +11723,7 @@ void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd)
 	{
 		struct item_data* id = itemdb_search(nd->u.shop.shop_item[i].nameid);
 		WFIFOL(fd,12+i*11) = nd->u.shop.shop_item[i].value;
-		WFIFOL(fd,16+i*11) = nd->u.shop.shop_item[i].value; // Discount Prize? Maybe a Discount item
+		WFIFOL(fd,16+i*11) = nd->u.shop.shop_item[i].value; // Discount Price? Maybe a Discount item
 		WFIFOB(fd,20+i*11) = itemtype(id->type);
 		WFIFOW(fd,21+i*11) = ( id->view_id > 0 ) ? id->view_id : id->nameid;
 	}

+ 8 - 7
src/map/npc.c

@@ -110,6 +110,7 @@ int npc_enable_sub(struct block_list *bl, va_list ap)
 	//aFree(name);
 	return 0;
 }
+
 int npc_enable(const char* name, int flag)
 {
 	struct npc_data* nd = strdb_get(npcname_db, name);
@@ -1022,7 +1023,7 @@ int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int po
 {
 	struct npc_data *nd = (struct npc_data *)map_id2bl(sd->npc_shopid);
 	struct item_data *item;
-	int i, prize, w;
+	int i, price, w;
 
 	if( !nd || nd->subtype != CASHSHOP )
 		return 1;
@@ -1060,16 +1061,16 @@ int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int po
 	if( w + sd->weight > sd->max_weight )
 		return 3;
 
-	prize = nd->u.shop.shop_item[i].value * amount;
-	if( points > prize )
-		points = prize;
+	price = nd->u.shop.shop_item[i].value * amount;
+	if( points > price )
+		points = price;
 
-	if( sd->cashPoints < prize - points )
+	if( sd->cashPoints < price - points )
 		return 6;
 	if( sd->kafraPoints < points )
 		return 6;
 
-	pc_paycash(sd, prize, points);
+	pc_paycash(sd, price, points);
 
 	if( !pet_create_egg(sd, nameid) )
 	{
@@ -1673,7 +1674,7 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const
 		if( value < 0 )
 		{
 			if( type == SHOP ) value = id->value_buy;
-			else value = 0; // Cashshop don't have a "buy prize" in the item_db
+			else value = 0; // Cashshop doesn't have a "buy price" in the item_db
 		}
 
 		if( type == SHOP && value*0.75 < id->value_sell*1.24 )

+ 4 - 4
src/map/pc.c

@@ -2702,10 +2702,10 @@ int pc_payzeny(struct map_session_data *sd,int zeny)
  * Cash Shop
  *------------------------------------------*/
 
-void pc_paycash(struct map_session_data *sd, int prize, int points)
+void pc_paycash(struct map_session_data *sd, int price, int points)
 {
 	char output[128];
-	int cash = prize - points;
+	int cash = price - points;
 	nullpo_retv(sd);
 
 	if( cash > 0 )
@@ -5500,9 +5500,9 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
 		return 1; //Nothing to change.
 	// check if we are changing from 1st to 2nd job
 	if (b_class&JOBL_2) {
-	  if (!(sd->class_&JOBL_2))
+		if (!(sd->class_&JOBL_2))
 			sd->change_level = sd->status.job_level;
-	  else if (!sd->change_level)
+		else if (!sd->change_level)
 			sd->change_level = 40; //Assume 40?
 		pc_setglobalreg (sd, "jobchange_level", sd->change_level);
 	}

+ 1 - 1
src/map/pc.h

@@ -178,7 +178,7 @@ int pc_getzeny(struct map_session_data*,int);
 int pc_delitem(struct map_session_data*,int,int,int);
 
 // Special Shop System
-void pc_paycash(struct map_session_data *sd, int prize, int points);
+void pc_paycash(struct map_session_data *sd, int price, int points);
 void pc_getcash(struct map_session_data *sd, int cash, int points);
 
 int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount);