Sfoglia il codice sorgente

* common/mmo.h: changed base_level and job_level to unsigned int to increase max levels
* char/char.c: added a NULL check for the file in parse_friend_txt
* map/atcommand.c/.h: added @clearweather (thanks to Dexity)
* map/charcommand.c/.h: added #spiritball
* map/mob.c: fixed a compiler warning (ln was an int and was supposed to be an unsigned long int)

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

codemaster 20 anni fa
parent
commit
6cfcb5f217
8 ha cambiato i file con 81 aggiunte e 4 eliminazioni
  1. 5 0
      Changelog.txt
  2. 3 0
      src/char/char.c
  3. 1 1
      src/common/mmo.h
  4. 23 0
      src/map/atcommand.c
  5. 1 0
      src/map/atcommand.h
  6. 45 2
      src/map/charcommand.c
  7. 1 0
      src/map/charcommand.h
  8. 2 1
      src/map/mob.c

+ 5 - 0
Changelog.txt

@@ -1,5 +1,10 @@
 Date	Added
 12/14
+	* common/mmo.h: changed base_level and job_level to unsigned int to increase max levels [Codemaster]
+	* char/char.c: added a NULL check for the file in parse_friend_txt [Codemaster]
+	* map/atcommand.c/.h: added @clearweather (thanks to Dexity) [Codemaster]
+	* map/charcommand.c/.h: added #spiritball [Codemaster]
+	* map/mob.c: fixed a compiler warning (ln was an int and was supposed to be an unsigned long int) [Codemaster]
         * Added nullpo_retb to nullpo.c - does a break; if null [celest]
         * Replaced some parts in skill.c with nullpo checks [celest]
         * Corrected some typos - penaly -> penalty [celest]

+ 3 - 0
src/char/char.c

@@ -577,6 +577,9 @@ int parse_friend_txt(struct mmo_charstatus *p)
 	
 	// Open the file and look for the ID
 	fp = fopen(friends_txt, "r");
+
+	if(fp == NULL)
+		return 1;
 	
 
 	while(fgets(line, sizeof(line)-1, fp)) {

+ 1 - 1
src/common/mmo.h

@@ -129,7 +129,7 @@ struct mmo_charstatus {
 	short head_top,head_mid,head_bottom;
 
 	char name[24];
-	unsigned char base_level,job_level;
+	unsigned int base_level,job_level;
 	short str,agi,vit,int_,dex,luk;
 	unsigned char char_num,sex;
 

+ 23 - 0
src/map/atcommand.c

@@ -206,6 +206,7 @@ ATCOMMAND_FUNC(trade); // by MouseJstr
 ATCOMMAND_FUNC(send); // by davidsiaw
 ATCOMMAND_FUNC(setbattleflag); // by MouseJstr
 ATCOMMAND_FUNC(unmute); // [Valaris]
+ATCOMMAND_FUNC(clearweather); // Dexity
 ATCOMMAND_FUNC(uptime); // by MC Cameri
 ATCOMMAND_FUNC(changesex); // by MC Cameri
 ATCOMMAND_FUNC(mute); // celest
@@ -455,6 +456,7 @@ static AtCommandInfo atcommand_info[] = {
 	{ AtCommand_Send,				"@send",			60, atcommand_send },
 	{ AtCommand_SetBattleFlag,		"@setbattleflag",	60, atcommand_setbattleflag },
 	{ AtCommand_UnMute,				"@unmute",			60, atcommand_unmute }, // [Valaris]
+	{ AtCommand_Clearweather,         "@clearweather",   99, atcommand_clearweather }, // Dexity 
 	{ AtCommand_UpTime,				"@uptime",			 0, atcommand_uptime }, // by MC Cameri
 	{ AtCommand_ChangeSex,			"@changesex",		 1, atcommand_changesex }, // by MC Cameri
 	{ AtCommand_Mute,				"@mute",			99, atcommand_mute }, // [celest]
@@ -7686,6 +7688,27 @@ atcommand_leaves(
 	clif_specialeffect(&sd->bl,effno,2);
 	return 0;
 }
+
+/*==========================================
+ * Clearing Weather Effects by Dexity
+ *------------------------------------------
+ */
+int
+atcommand_clearweather(
+   const int fd, struct map_session_data* sd,
+   const char* command, const char* message)
+{
+	int effno = 0;
+	nullpo_retr(-1, sd);
+	map[sd->bl.m].flag.rain=0;
+	map[sd->bl.m].flag.snow=0;
+	map[sd->bl.m].flag.sakura=0;
+	map[sd->bl.m].flag.fog=0;
+	map[sd->bl.m].flag.leaves=0;
+	clif_specialeffect(&sd->bl,effno,2);
+	return 0;
+} 
+
 /*==========================================
  * 
  *------------------------------------------

+ 1 - 0
src/map/atcommand.h

@@ -187,6 +187,7 @@ enum AtCommandType {
 	AtCommand_Send,
 	AtCommand_SetBattleFlag,
 	AtCommand_UnMute,
+	AtCommand_Clearweather, // by Dexity
 	AtCommand_UpTime, // by MC Cameri
 	AtCommand_ChangeSex, // by MC Cameri
 	AtCommand_Mute, // [celest]

+ 45 - 2
src/map/charcommand.c

@@ -42,6 +42,7 @@ CCMD_FUNC(option);
 CCMD_FUNC(save);
 CCMD_FUNC(stats_all);
 CCMD_FUNC(reset);
+CCMD_FUNC(spiritball);
 
 #ifdef TXT_ONLY
 /* TXT_ONLY */
@@ -70,6 +71,7 @@ static CharCommandInfo charcommand_info[] = {
 	{ CharCommandReset,					"#reset",					60, charcommand_reset },
 	{ CharCommandSave,					"#save",					60, charcommand_save },
 	{ CharCommandStatsAll,				"#statsall",				40, charcommand_stats_all },
+	{ CharCommandSpiritball,			"#spiritball",				40, charcommand_spiritball },
 
 #ifdef TXT_ONLY
 /* TXT_ONLY */
@@ -248,8 +250,8 @@ int charcommand_config_read(const char *cfgName) {
 			charcommand_config_read(w2);
 		else if (strcmpi(w1, "command_symbol") == 0 && w2[0] > 31 &&
 		         w2[0] != '/' && // symbol of standard ragnarok GM commands
-		         w2[0] != '%' && // symbol of party chat speaking
-				 w2[0] != '@')	 // symbol for @commands
+		         w2[0] != '%'	// symbol of party chat speaking
+			)
 			command_symbol = w2[0];
 	}
 	fclose(fp);
@@ -701,3 +703,44 @@ int charcommand_stats_all(const int fd, struct map_session_data* sd, const char*
 	return 0;
 }
 
+/*==========================================
+ * CharSpiritBall Function by PalasX
+ *------------------------------------------
+ */
+int charcommand_spiritball(const int fd, struct map_session_data* sd,const char* command, const char* message)
+{
+	struct map_session_data *pl_sd;
+	char character[100];
+	int spirit = 0;
+
+	memset(character, '\0', sizeof(character));
+
+	if(!message || !*message || sscanf(message, "%d %99[^\n]", &spirit, character) < 2 || spirit < 0 || spirit > 1000) {
+		clif_displaymessage(fd, "Usage: @spiritball <number: 0-1000>) <CHARACTER_NAME>.");
+		return -1;
+	}
+
+	if((pl_sd = map_nick2sd(character)) != NULL) {
+		if (spirit >= 0 && spirit <= 0x7FFF) {
+			if (pl_sd->spiritball != spirit || spirit > 999) {
+				if (pl_sd->spiritball > 0)
+					pc_delspiritball(pl_sd, pl_sd->spiritball, 1);
+				pl_sd->spiritball = spirit;
+				clif_spiritball(pl_sd);
+				// no message, player can look the difference
+				if (spirit > 1000)
+					clif_displaymessage(fd, msg_table[204]); // WARNING: more than 1000 spiritballs can CRASH your server and/or client!
+			} else {
+				clif_displaymessage(fd, msg_table[205]); // You already have this number of spiritballs.
+				return -1;
+			}
+		} else {
+			clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
+			return -1;
+		}
+	} else {
+		clif_displaymessage(fd, msg_table[3]); // Character not found.
+		return -1;
+	}
+	return 0;
+}

+ 1 - 0
src/map/charcommand.h

@@ -11,6 +11,7 @@ enum CharCommandType {
 	CharCommandOption,
 	CharCommandSave,
 	CharCommandStatsAll,
+	CharCommandSpiritball,
 
 #ifdef TXT_ONLY
 /* TXT_ONLY */

+ 2 - 1
src/map/mob.c

@@ -4185,7 +4185,8 @@ void mob_reload(void)
 static int mob_read_sqldb(void)
 {
 	char line[1024];
-	int i,class,ln=0;
+	int i,class;
+	long unsigned int ln=0;
 	char *str[55],*p,*np;
 	
 	memset(mob_db,0,sizeof(mob_db));