Browse Source

* Updates to the language system, thanks to Lighta and Akinari for their input! (follow-up r17251, r17252)
* 'summon' command now takes milliseconds instead of seconds, as documented in script_commands.txt. (bugreport:7527)
* Fixed a max level bug with Homunculi. (bugreport:7525, credits to Akinari)

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

euphyy 12 năm trước cách đây
mục cha
commit
5040cffaf6

+ 6 - 6
conf/msg_conf/map_msg.conf

@@ -443,12 +443,12 @@
 // Homunculus messages
 450: You already have a homunculus
 
-//msg sys
-460: Unknow syntaxe, usage : @langtype eng|rus|spn|chn|mal|ind|frn
-461: Langtype is now = %s=>%d
-462: The choosen langage is currently disable please choose another
-463: Msg_conf have been reloaded
-464: Available langages:
+// Message System
+460: Please enter a valid language (usage: @langtype <language>).
+461: Language is now set to %s.
+462: This language is currently disabled.
+463: Message configuration has been reloaded.
+464: ---- Available languages:
 
 // Messages of others (not for GM commands)
 // ----------------------------------------

+ 0 - 0
conf/msg_conf/map_msg_ind.conf → conf/msg_conf/map_msg_idn.conf


+ 11 - 1
doc/atcommands.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Current Version: =====================================
-//= 20130406
+//= 20130413
 //===== Description: =========================================
 //= List of available atcommands and their functions.
 //============================================================
@@ -976,6 +976,14 @@ Displays the message above the NPC's head (like the 'npctalk' script command).
 | 5. Administrative Commands |
 ==============================
 
+@langtype <language>
+
+Changes the language attached to the player's account (#langtype).
+If no parameter is given, a list of available languages is displayed.
+All languages are defined in '/src/common/msg_conf.h'.
+
+---------------------------------------
+
 @email <current@email.tld> <new@email.tld>
 
 Changes the email address attached the player's account.
@@ -1134,6 +1142,7 @@ Reloads the specified database.
 
 @reloadatcommand
 @reloadbattleconf
+@reloadmsgconf
 @reloadstatusdb
 @reloadpcdb
 @reloadmotd
@@ -1141,6 +1150,7 @@ Reloads the specified database.
 Reloads the specified configuration file.
 -atcommand: Atcommand Settings
 -battleconf: Battle Settings (may require relog)
+-msgconf: Message Configuration
 -statusdb: Status Settings
 -pcdb: Player Settings
 -motd: Message of the Day

+ 3 - 3
src/common/msg_conf.c

@@ -46,7 +46,7 @@ int _msg_config_read(const char* cfgName,int size, char ** msg_table)
 		if (strcmpi(w1, "import") == 0)
 			_msg_config_read(w2,size,msg_table);
 		else {
-			 msg_number = atoi(w1);
+			msg_number = atoi(w1);
 			if (msg_number >= 0 && msg_number < size) {
 				if (msg_table[msg_number] != NULL)
 					aFree(msg_table[msg_number]);
@@ -77,7 +77,7 @@ void _do_final_msg(int size, char ** msg_table){
  */
 int msg_langstr2langtype(char * langtype){
 	int lang=-1;
-	if(!strncmpi(langtype, "eng",2)) lang=0;
+	if (!strncmpi(langtype, "eng",2)) lang = 0;
 	else if (!strncmpi(langtype, "rus",2)) lang = 1;
 	else if (!strncmpi(langtype, "spn",2)) lang = 2;
 	else if (!strncmpi(langtype, "grm",2)) lang = 3;
@@ -116,7 +116,7 @@ int msg_checklangtype(int lang, bool display){
 	else if(lang < 0 || test > LANG_MAX) return -1; //false range
 	else if (LANG_ENABLE&test) return 1;
 	else if(display) {
-		ShowDebug("Unsuported langtype=%d\n",lang);
+		ShowDebug("Unsupported langtype '%d'.\n",lang);
 	}
 	return -2;
 }

+ 5 - 4
src/common/msg_conf.h

@@ -14,12 +14,13 @@ enum lang_types {
 	LANG_GRM = 0x04,
 	LANG_CHN = 0x08,
 	LANG_MAL = 0x10,
-	LANG_IND = 0x20,
+	LANG_IDN = 0x20,
 	LANG_FRN = 0x40,
 	LANG_MAX
 };
-// What languages are enabled? bitmask FF mean all
-//#define LANG_ENABLE 0xFF
+// Multilanguage System.
+// Define which languages to enable (bitmask).
+// 0xFF will enable all, while 0x00 will enable English only.
 #define LANG_ENABLE 0x00
 
 const char* _msg_txt(int msg_number,int size, char ** msg_table);
@@ -27,7 +28,7 @@ int _msg_config_read(const char* cfgName,int size, char ** msg_table);
 void _do_final_msg(int size, char ** msg_table);
 int msg_langstr2langtype(char * langtype);
 const char* msg_langtype2langstr(int langtype);
-//verify that the choosen langtype is enable
+// Verify that the choosen langtype is enabled.
 int msg_checklangtype(int lang, bool display);
 
 #ifdef	__cplusplus

+ 31 - 23
src/map/atcommand.c

@@ -8782,7 +8782,8 @@ ACMD_FUNC(cart) {
 }
 
 /* Channel System [Ind] */
-ACMD_FUNC(join) {
+ACMD_FUNC(join)
+{
 	struct raChSysCh *channel;
 	char name[RACHSYS_NAME_LENGTH], pass[RACHSYS_NAME_LENGTH];
 	DBMap* channel_db = clif_get_channel_db();
@@ -8833,7 +8834,8 @@ ACMD_FUNC(join) {
 	return 0;
 }
 
-static inline void atcmd_channel_help(struct map_session_data *sd, const char *command, bool can_create) {
+static inline void atcmd_channel_help(struct map_session_data *sd, const char *command, bool can_create)
+{
 	int fd = sd->fd;
 	clif_displaymessage(fd, msg_txt(sd,1414));// ---- Available options:
 	if( can_create ) {
@@ -8865,7 +8867,8 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
 	clif_displaymessage(fd, atcmd_output);
 }
 
-ACMD_FUNC(channel) {
+ACMD_FUNC(channel)
+{
 	struct raChSysCh *channel;
 	char key[RACHSYS_NAME_LENGTH], sub1[RACHSYS_NAME_LENGTH], sub2[RACHSYS_NAME_LENGTH], sub3[RACHSYS_NAME_LENGTH];
 	unsigned char k = 0;
@@ -9028,7 +9031,8 @@ ACMD_FUNC(channel) {
 	return 0;
 }
 
-ACMD_FUNC(fontcolor) {
+ACMD_FUNC(fontcolor)
+{
 	unsigned char k;
 
 	if( !message || !*message ) {
@@ -9070,42 +9074,46 @@ ACMD_FUNC(fontcolor) {
 	return 0;
 }
 
-ACMD_FUNC(langtype){
+ACMD_FUNC(langtype)
+{
 	char langtype[8];
 	int lang=-1;
 	memset(langtype, '\0', sizeof(langtype));
 
 	if(sscanf(message, "%3s", langtype) < 1){
-		clif_displaymessage(fd,msg_txt(sd,460));
+		clif_displaymessage(fd,msg_txt(sd,460)); // Please enter a valid language (usage: @langtype <language>).
 	}
 
-	lang = msg_langstr2langtype(langtype); //switch langstr to associate langtype
-	if( msg_checklangtype(lang,false) == 1 ){ //verify it's enable and affect it
+	lang = msg_langstr2langtype(langtype); //Switch langstr to associated langtype
+	if( msg_checklangtype(lang,false) == 1 ){ //Verify it's enabled and set it
 		char output[100];
-		pc_setaccountreg(sd, "#langtype", lang); //for login/char
+		pc_setaccountreg(sd, "#langtype", lang); //For login/char
 		sd->langtype = lang;
-		sprintf(output,msg_txt(sd,461),langtype,lang); //for debug
-		clif_displaymessage(fd,output); //"English is now set as default language"
-	}
-	else {
-		int i=0, test=0; char output[512]; //shoud be fine for 50 lang
-		clif_displaymessage(fd,msg_txt(sd,462));
-		clif_displaymessage(fd,msg_txt(sd,464));
+		sprintf(output,msg_txt(sd,461),msg_langtype2langstr(lang)); // Language is now set to %s.
+		clif_displaymessage(fd,output);
+		return 0;
+	} else if (lang != -1) {
+ 		clif_displaymessage(fd,msg_txt(sd,462)); // This langage is currently disabled.
+		return -1;
+	} else {
+		int i=0, test=0; char output[100];
+		clif_displaymessage(fd,msg_txt(sd,464)); // Available languages:
 		while(test!=-1){ //out of range
 			test = msg_checklangtype(i,false);
-			if(test == 1)
-				sprintf(output,"%s%s => %d\n",output,msg_langtype2langstr(i),i);
+			if(test == 1) {
+				sprintf(output,"%s\n",msg_langtype2langstr(i));
+				clif_displaymessage(fd,output);
+			}
 			i++;
 		}
-		clif_displaymessage(fd,output);
+		return -1;
 	}
-
-	return 0;
 }
 
-ACMD_FUNC(reloadmsgconf){
+ACMD_FUNC(reloadmsgconf)
+{
 	map_msg_reload();
-	clif_displaymessage(fd, msg_txt(sd,463));
+	clif_displaymessage(fd, msg_txt(sd,463)); // Message configuration has been reloaded.
 	return 0;
 }
 

+ 1 - 1
src/map/homunculus.c

@@ -310,7 +310,7 @@ int merc_hom_levelup(struct homun_data *hd)
 		return 0;
 	}
 
-	if((m_class&HOM_REG) && (hd->homunculus.level >= battle_config.hom_max_level || ((m_class&HOM_S) && hd->homunculus.level >= battle_config.hom_S_max_level) || !hd->exp_next || hd->homunculus.exp < hd->exp_next))
+	if(((m_class&HOM_REG) && hd->homunculus.level >= battle_config.hom_max_level) || ((m_class&HOM_S) && hd->homunculus.level >= battle_config.hom_S_max_level) || !hd->exp_next || hd->homunculus.exp < hd->exp_next)
 		return 0;
 
 	hom = &hd->homunculus;

+ 8 - 6
src/map/map.c

@@ -3697,7 +3697,9 @@ void set_server_type(void)
 	SERVER_TYPE = ATHENA_SERVER_MAP;
 }
 
-//Msg System
+/*======================================================
+ * Message System
+ *------------------------------------------------------*/
 struct msg_data {
 	char* msg[MAP_MAX_MSG];
 };
@@ -3719,8 +3721,8 @@ void map_do_init_msg(void){
 		msg_config_read(MSG_CONF_NAME_CHN,4);	// Chinese
 	if( LANG_ENABLE&LANG_MAL )
 		msg_config_read(MSG_CONF_NAME_MAL,5);	// Malaysian
-	if( LANG_ENABLE&LANG_IND )
-		msg_config_read(MSG_CONF_NAME_IND,6);	// Indonesian
+	if( LANG_ENABLE&LANG_IDN )
+		msg_config_read(MSG_CONF_NAME_IDN,6);	// Indonesian
 	if( LANG_ENABLE&LANG_FRN )
 		msg_config_read(MSG_CONF_NAME_FRN,7);	// French
 }
@@ -3764,9 +3766,9 @@ const char* map_msg_txt(struct map_session_data *sd, int msg_number){
 		tmp = _msg_txt(msg_number,MAP_MAX_MSG,mdb->msg);
 		if(strcmp(tmp,"??"))
 			return tmp;
-		ShowDebug("msgnmber %d not found for langtype=%d, trying fallback2\n",lang);
+		ShowDebug("Message #%d not found for langtype %d.\n",msg_number,lang);
 	}
-	ShowDebug("langtype=%d choosed not loaded, trying fallback\n",lang);
+	ShowDebug("Selected langtype %d not loaded, trying fallback...\n",lang);
 	if(lang != 0 && (mdb = map_lang2msgdb(0)) != NULL) //fallback
 		return _msg_txt(msg_number,MAP_MAX_MSG,mdb->msg);
 	return "??";
@@ -3813,7 +3815,7 @@ int do_init(int argc, char *argv[])
 	MSG_CONF_NAME_GRM = "conf/msg_conf/map_msg_grm.conf";	// German
 	MSG_CONF_NAME_CHN = "conf/msg_conf/map_msg_chn.conf";	// Chinese
 	MSG_CONF_NAME_MAL = "conf/msg_conf/map_msg_mal.conf";	// Malaysian
-	MSG_CONF_NAME_IND = "conf/msg_conf/map_msg_ind.conf";	// Indonesian
+	MSG_CONF_NAME_IDN = "conf/msg_conf/map_msg_idn.conf";	// Indonesian
 	MSG_CONF_NAME_FRN = "conf/msg_conf/map_msg_frn.conf";	// French
 	/* Multilanguage */
 

+ 4 - 4
src/map/map.h

@@ -748,7 +748,7 @@ void do_reconnect_map(void); //Invoked on map-char reconnection [Skotlex]
 void map_addmap2db(struct map_data *m);
 void map_removemapdb(struct map_data *m);
 
-//option readed in cli
+//Options read in cli
 extern char *INTER_CONF_NAME;
 extern char *LOG_CONF_NAME;
 extern char *MAP_CONF_NAME;
@@ -757,14 +757,14 @@ extern char *ATCOMMAND_CONF_FILENAME;
 extern char *SCRIPT_CONF_NAME;
 extern char *MSG_CONF_NAME_EN;
 extern char *GRF_PATH_FILENAME;
-//other lang supported
+//Other languages supported
 char *MSG_CONF_NAME_RUS;
+char *MSG_CONF_NAME_SPN;
 char *MSG_CONF_NAME_GRM;
 char *MSG_CONF_NAME_CHN;
 char *MSG_CONF_NAME_MAL;
-char *MSG_CONF_NAME_IND;
+char *MSG_CONF_NAME_IDN;
 char *MSG_CONF_NAME_FRN;
-char *MSG_CONF_NAME_SPN;
 
 //Useful typedefs from jA [Skotlex]
 typedef struct map_session_data TBL_PC;

+ 1 - 1
src/map/script.c

@@ -13276,7 +13276,7 @@ BUILDIN_FUNC(summon)
 		md->special_state.ai = AI_ATTACK;
 		if( md->deletetimer != INVALID_TIMER )
 			delete_timer(md->deletetimer, mob_timer_delete);
-		md->deletetimer = add_timer(tick+(timeout>0?timeout*1000:60000),mob_timer_delete,md->bl.id,0);
+		md->deletetimer = add_timer(tick+(timeout>0?timeout:60000),mob_timer_delete,md->bl.id,0);
 		mob_spawn (md); //Now it is ready for spawning.
 		clif_specialeffect(&md->bl,344,AREA);
 		sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);

+ 1 - 1
src/map/skill.c

@@ -1043,7 +1043,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
 	case DC_UGLYDANCE:
 		rate = 5+5*skill_lv;
 		if(sd && (skill=pc_checkskill(sd,DC_DANCINGLESSON)))
-		    rate += 5+skill;
+			rate += 5+skill;
 		status_zap(bl, 0, rate);
 		break;
 	case SL_STUN: