//===== eAthena Script ======================================= //= Sample localized NPC //===== By: ================================================== //= eAthena Dev Team //===== Current Version: ===================================== //= v1.0 //===== Compatible With: ===================================== //= eAthena with setd, getd //===== Description: ========================================= //= Example of a localized NPC. //= //= There are many ways to do it, this is just one option. //= The player has a global account variable ##_langid_ that //= identifies the it's language. //= //= The default language should always have langid 0. //= When a message isn't found for the player's langid //= (strlen = 0), the message from langid 0 is used instead. //= //= Each message is identified by a string that must only //= contain valid variable name characters. //= //= void setlang(int langid) //= - sets the player's language //= int getlang(void) //= - returns the player's language //= void setmes2(string name,int langid,string text) //= - sets the localized text for name //= string getmes2(string name,int langid) //= - returns the localized text of name //= void mes2(string name) //= - displays the localized text of name //= //===== Additional Comments: ================================= //= To use this globally, just put the functions in Global_Functions.txt //============================================================ ////////////////////////////////////////////////////////////// /// Sets the language of the player account. /// @param langid Languange identifier (0 for default) function script setlang { set ##_langid_, getarg(0); return; } ////////////////////////////////////////////////////////////// /// Returns the language identifier of the player function script getlang { return ##_langid_; } ////////////////////////////////////////////////////////////// /// Sets a localized text entry. /// Does not need a RID attached. /// @param name Message identifier /// @param langid Language identifier (0 for default) /// @param text Text message function script setmes2 { set $@mes2_name$, getarg(0); set $@mes2_langid, getarg(1); set $@mes2_text$, getarg(2); set $@mes2_var$, "$@__"+ $@mes2_name$ +"_"+ $@mes2_langid +"$"; //debugmes "setmes2 \""+ $@mes2_var$ +"\", \""+ $@mes2_text$ +"\";"; // set the localized text setd $@mes2_var$, $@mes2_text$; return; } ////////////////////////////////////////////////////////////// /// Sets a localized text entry. /// Does not need a RID attached. /// @param name Message identifier /// @param langid Language identifier (0 for default) /// @return Text message function script getmes2 { set $@mes2_name$, getarg(0); set $@mes2_langid, getarg(1); set $@mes2_var$, "$@__"+ $@mes2_name$ +"_"+ $@mes2_langid +"$"; set $@mes2_text$, getd($@mes2_var$); //debugmes "getmes2(\""+ $@mes2_var$ +"\")=\""+ $@mes2_text$ +"\""; return $@mes2_text$; } ////////////////////////////////////////////////////////////// /// mes for localized text. /// index should be a unique string, made up only of characters /// that are valis as a variable name /// @param index Message identifier function script mes2 { set @mes2_index$, getarg(0); if( getstrlen(@mes2_index$) == 0 ) return; // invalid index // print localized text set @mes2_text$, callfunc("getmes2",@mes2_index$,##_langid_); if( getstrlen(@mes2_text$) == 0 ) { if( ##_langid_ != 0 ) {// revert to default language set @mes2_text$, callfunc("getmes2",@mes2_index$,0); if( getstrlen(@mes2_text$) != 0 ) mes @mes2_text$; // default text } } else mes @mes2_text$; // localized text return; } ////////////////////////////////////////////////////////////// /// Sample localized NPC prontera,155,183,4 script LocalizedNPC 705,{ // Get text for specific languages set @menu1$, callfunc("getmes2","LNPC_lang",0); set @menu2$, callfunc("getmes2","LNPC_lang",1); do { // get text that fallbacks to language 0 callfunc "mes2", "LNPC_name"; // localized mes callfunc "mes2", "LNPC_lang"; callfunc "mes2", "LNPC_text"; next; switch(select(@menu1$,@menu2$,"Cancel")) { case 1: case 2: // Set player language callfunc "setlang",@menu-1; break; } } while( @menu != 3 ); close; end; OnInterIfInitOnce: // Load the localized text. // This can be anywhere, as long as it's executed before the coresponding getmes2/mes2 calls // 0 - English (default) // 1 - Portuguese callfunc "setmes2", "LNPC_name", 0, "[LocalizedNPC]"; callfunc "setmes2", "LNPC_lang", 0, "EN"; callfunc "setmes2", "LNPC_lang", 1, "PT"; callfunc "setmes2", "LNPC_text", 0, "Something in english"; callfunc "setmes2", "LNPC_text", 1, "Algo em português"; end; }