summaryrefslogtreecommitdiff
path: root/doc/sample/localized_npc.txt
blob: 82a08fa35fd5d0dacd9e2247c249aaa2b03712f6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
//===== Hercules Script ======================================
//= Sample localized NPC
//===== By: ==================================================
//= Hercules Dev Team
//===== Current Version: =====================================
//= v1.1
//===== 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	{
	##_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	{
	.@mes2_name$  = getarg(0);
	.@mes2_langid = getarg(1);
	.@mes2_text$  = getarg(2);
	.@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	{
	.@mes2_name$  = getarg(0);
	.@mes2_langid = getarg(1);
	.@mes2_var$   = "$@__"+ .@mes2_name$ +"_"+ .@mes2_langid +"$";
	.@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	{
	.@mes2_index$ = getarg(0);

	if( getstrlen(.@mes2_index$) == 0 )
		return; // invalid index

	// print localized text
	.@mes2_text$ = callfunc("getmes2",.@mes2_index$,##_langid_);
	if( getstrlen(.@mes2_text$) == 0 ) {
		if( ##_langid_ != 0 ) {
			// revert to default language
			.@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	4_M_GEF_SOLDIER,{
	// Get text for specific languages
	.@menu1$ = callfunc("getmes2","LNPC_lang",0);
	.@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;
}