Procházet zdrojové kódy

* Made it so players that are at the max level do not receive EXP. This makes it so a player at the max level (ie - 99) cannot join a party and feed all of his or her EXP to the other party members [Codemaster]

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5422 54d463be-8e91-2dee-dedb-b68131a5f0ec
codemaster před 19 roky
rodič
revize
421a6e7f9c
2 změnil soubory, kde provedl 37 přidání a 20 odebrání
  1. 3 0
      Changelog-Trunk.txt
  2. 34 20
      src/map/pc.c

+ 3 - 0
Changelog-Trunk.txt

@@ -5,6 +5,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.  EV
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 
 2006/03/01
+	* Made it so players that are at the max level do not receive EXP.
+	  This makes it so a player at the max level (ie - 99) cannot join a party
+	  and feed all of his or her EXP to the other party members [Codemaster]
 	* Mapregsql will now fully depend on mmysql_handle. [Lance]
 	* Optimized strcharinfo to use switch. [Lance]
 	* Some cleanup of the mob skill reading. Added error reporting for unknown

+ 34 - 20
src/map/pc.c

@@ -4628,30 +4628,44 @@ int pc_gainexp(struct map_session_data *sd,unsigned int base_exp,unsigned int jo
 			}
 		}
 	}
-	
-	//Overflow checks... think we'll ever really need'em? [Skotlex]
-	if (base_exp > 0 && sd->status.base_exp > UINT_MAX - base_exp)
-		sd->status.base_exp = UINT_MAX;
-	else if (base_exp < 0 && sd->status.base_exp > base_exp)
-		sd->status.base_exp = 0;
-	else
-		sd->status.base_exp += base_exp;
-	
-	while(pc_checkbaselevelup(sd)) ;
 
-	clif_updatestatus(sd,SP_BASEEXP);
+	// Do not give the player any EXP if they are at the highest level
+	// Prevents them from sharing excess EXP in a party
+	if(pc_maxbaselv(sd) > sd->status.base_level)
+	{	
+		//Overflow checks... think we'll ever really need'em? [Skotlex]
+		if (base_exp > 0 && sd->status.base_exp > UINT_MAX - base_exp)
+			sd->status.base_exp = UINT_MAX;
+		else if (base_exp < 0 && sd->status.base_exp > base_exp)
+			sd->status.base_exp = 0;
+		else
+			sd->status.base_exp += base_exp;
 	
-	//Overflow checks... think we'll ever really need'em? [Skotlex]
-	if (job_exp > 0 && sd->status.job_exp > UINT_MAX - job_exp)
-		sd->status.job_exp = UINT_MAX;
-	else if (job_exp < 0 && sd->status.job_exp > job_exp)
-		sd->status.job_exp = 0;
-	else
-		sd->status.job_exp += job_exp;
+		while(pc_checkbaselevelup(sd)) ;
+
+		clif_updatestatus(sd,SP_BASEEXP);
+	} else {
+		base_exp = 0;
+	}
+
+	// Do not give the player any EXP if they are at the highest level
+	// Prevents them from sharing excess EXP in a party	
+	if(pc_maxjoblv(sd) > sd->status.job_level)
+	{
+		//Overflow checks... think we'll ever really need'em? [Skotlex]
+		if (job_exp > 0 && sd->status.job_exp > UINT_MAX - job_exp)
+			sd->status.job_exp = UINT_MAX;
+		else if (job_exp < 0 && sd->status.job_exp > job_exp)
+			sd->status.job_exp = 0;
+		else
+			sd->status.job_exp += job_exp;
 
-	while(pc_checkjoblevelup(sd)) ;
+		while(pc_checkjoblevelup(sd)) ;
 
-	clif_updatestatus(sd,SP_JOBEXP);
+		clif_updatestatus(sd,SP_JOBEXP);
+	} else {
+		job_exp = 0;
+	}
 
 	if(sd->state.showexp){
 		sprintf(output,