root/npc/sample/localized_npc.txt @ 1

Revision 1, 4.8 kB (checked in by jinshiro, 17 years ago)
RevLine 
[1]1//===== eAthena Script =======================================
2//= Sample localized NPC
3//===== By: ==================================================
4//= eAthena Dev Team
5//===== Current Version: =====================================
6//= v1.0
7//===== Compatible With: =====================================
8//= eAthena with setd, getd
9//===== Description: =========================================
10//= Example of a localized NPC.
11//=
12//= There are many ways to do it, this is just one option.
13//= The player has a global account variable ##_langid_ that
14//= identifies the it's language.
15//=
16//= The default language should always have langid 0.
17//= When a message isn't found for the player's langid
18//= (strlen = 0), the message from langid 0 is used instead.
19//=
20//= Each message is identified by a string that must only
21//= contain valid variable name characters.
22//=
23//= void setlang(int langid)
24//= - sets the player's language
25//= int getlang(void)
26//= - returns the player's language
27//= void setmes2(string name,int langid,string text)
28//= - sets the localized text for name
29//= string getmes2(string name,int langid)
30//= - returns the localized text of name
31//= void mes2(string name)
32//= - displays the localized text of name
33//=
34//===== Additional Comments: =================================
35//= To use this globally, just put the functions in Global_Functions.txt
36//============================================================
37
38//////////////////////////////////////////////////////////////
39/// Sets the language of the player account.
40/// @param langid       Languange identifier (0 for default)
41function        script  setlang {
42        set ##_langid_, getarg(0);
43        return;
44}
45
46//////////////////////////////////////////////////////////////
47/// Returns the language identifier of the player
48function        script  getlang {
49        return ##_langid_;
50}
51
52//////////////////////////////////////////////////////////////
53/// Sets a localized text entry.
54/// Does not need a RID attached.
55/// @param name Message identifier
56/// @param langid       Language identifier (0 for default)
57/// @param text Text message
58function        script  setmes2 {
59        set $@mes2_name$, getarg(0);
60        set $@mes2_langid, getarg(1);
61        set $@mes2_text$, getarg(2);
62        set $@mes2_var$, "$@__"+ $@mes2_name$ +"_"+ $@mes2_langid +"$";
63
64        //debugmes "setmes2 \""+ $@mes2_var$ +"\", \""+ $@mes2_text$ +"\";";
65
66        // set the localized text
67        setd $@mes2_var$, $@mes2_text$;
68        return;
69}
70
71//////////////////////////////////////////////////////////////
72/// Sets a localized text entry.
73/// Does not need a RID attached.
74/// @param name Message identifier
75/// @param langid       Language identifier (0 for default)
76/// @return     Text message
77function        script  getmes2 {
78        set $@mes2_name$, getarg(0);
79        set $@mes2_langid, getarg(1);
80        set $@mes2_var$, "$@__"+ $@mes2_name$ +"_"+ $@mes2_langid +"$";
81        set $@mes2_text$, getd($@mes2_var$);
82
83        //debugmes "getmes2(\""+ $@mes2_var$ +"\")=\""+ $@mes2_text$ +"\"";
84
85        return $@mes2_text$;
86}
87
88//////////////////////////////////////////////////////////////
89/// mes for localized text.
90/// index should be a unique string, made up only of characters
91/// that are valis as a variable name
92/// @param index        Message identifier
93function        script  mes2    {
94        set @mes2_index$, getarg(0);
95
96        if( getstrlen(@mes2_index$) == 0 )
97                return; // invalid index
98
99        // print localized text
100        set @mes2_text$, callfunc("getmes2",@mes2_index$,##_langid_);
101        if( getstrlen(@mes2_text$) == 0 )
102        {
103                if( ##_langid_ != 0 )
104                {// revert to default language
105                        set @mes2_text$, callfunc("getmes2",@mes2_index$,0);
106                        if( getstrlen(@mes2_text$) != 0 )
107                                mes @mes2_text$; // default text
108                }
109        } else
110                mes @mes2_text$; // localized text
111        return;
112}
113
114//////////////////////////////////////////////////////////////
115/// Sample localized NPC
116prontera,155,183,4      script  LocalizedNPC    705,{
117        // Get text for specific languages
118        set @menu1$, callfunc("getmes2","LNPC_lang",0);
119        set @menu2$, callfunc("getmes2","LNPC_lang",1);
120        do {
121                // get text that fallbacks to language 0
122                callfunc "mes2", "LNPC_name";
123                // localized mes
124                callfunc "mes2", "LNPC_lang";
125                callfunc "mes2", "LNPC_text";
126                next;
127
128                switch(select(@menu1$,@menu2$,"Cancel"))
129                {
130                        case 1:
131                        case 2:
132                                // Set player language
133                                callfunc "setlang",@menu-1;
134                                break;
135                }
136        } while( @menu != 3 );
137        close;
138        end;
139
140OnInterIfInitOnce:
141        // Load the localized text.
142        // This can be anywhere, as long as it's executed before the coresponding getmes2/mes2 calls
143        //  0 - English (default)
144        //  1 - Portuguese
145        callfunc "setmes2", "LNPC_name", 0, "[LocalizedNPC]";
146        callfunc "setmes2", "LNPC_lang", 0, "EN";
147        callfunc "setmes2", "LNPC_lang", 1, "PT";
148        callfunc "setmes2", "LNPC_text", 0, "Something in english";
149        callfunc "setmes2", "LNPC_text", 1, "Algo em português";
150        end;
151}
Note: See TracBrowser for help on using the browser.