localized_npc.txt 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. /// Sets the language of the player account.
  39. /// @param langid Languange identifier (0 for default)
  40. function script setlang {
  41. set ##_langid_, getarg(0);
  42. return;
  43. }
  44. //////////////////////////////////////////////////////////////
  45. /// Returns the language identifier of the player
  46. function script getlang {
  47. return ##_langid_;
  48. }
  49. //////////////////////////////////////////////////////////////
  50. /// Sets a localized text entry.
  51. /// Does not need a RID attached.
  52. /// @param name Message identifier
  53. /// @param langid Language identifier (0 for default)
  54. /// @param text Text message
  55. function script setmes2 {
  56. set $@mes2_name$, getarg(0);
  57. set $@mes2_langid, getarg(1);
  58. set $@mes2_text$, getarg(2);
  59. set $@mes2_var$, "$@__"+ $@mes2_name$ +"_"+ $@mes2_langid +"$";
  60. //debugmes "setmes2 \""+ $@mes2_var$ +"\", \""+ $@mes2_text$ +"\";";
  61. // set the localized text
  62. setd $@mes2_var$, $@mes2_text$;
  63. return;
  64. }
  65. //////////////////////////////////////////////////////////////
  66. /// Sets a localized text entry.
  67. /// Does not need a RID attached.
  68. /// @param name Message identifier
  69. /// @param langid Language identifier (0 for default)
  70. /// @return Text message
  71. function script getmes2 {
  72. set $@mes2_name$, getarg(0);
  73. set $@mes2_langid, getarg(1);
  74. set $@mes2_var$, "$@__"+ $@mes2_name$ +"_"+ $@mes2_langid +"$";
  75. set $@mes2_text$, getd($@mes2_var$);
  76. //debugmes "getmes2(\""+ $@mes2_var$ +"\")=\""+ $@mes2_text$ +"\"";
  77. return $@mes2_text$;
  78. }
  79. //////////////////////////////////////////////////////////////
  80. /// mes for localized text.
  81. /// index should be a unique string, made up only of characters
  82. /// that are valis as a variable name
  83. /// @param index Message identifier
  84. function script mes2 {
  85. set @mes2_index$, getarg(0);
  86. if( getstrlen(@mes2_index$) == 0 )
  87. return; // invalid index
  88. // print localized text
  89. set @mes2_text$, callfunc("getmes2",@mes2_index$,##_langid_);
  90. if( getstrlen(@mes2_text$) == 0 )
  91. {
  92. if( ##_langid_ != 0 )
  93. {// revert to default language
  94. set @mes2_text$, callfunc("getmes2",@mes2_index$,0);
  95. if( getstrlen(@mes2_text$) != 0 )
  96. mes @mes2_text$; // default text
  97. }
  98. } else
  99. mes @mes2_text$; // localized text
  100. return;
  101. }
  102. //////////////////////////////////////////////////////////////
  103. /// Sample localized NPC
  104. prontera,155,183,4 script LocalizedNPC 705,{
  105. // Get text for specific languages
  106. set @menu1$, callfunc("getmes2","LNPC_lang",0);
  107. set @menu2$, callfunc("getmes2","LNPC_lang",1);
  108. do {
  109. // get text that fallbacks to language 0
  110. callfunc "mes2", "LNPC_name";
  111. // localized mes
  112. callfunc "mes2", "LNPC_lang";
  113. callfunc "mes2", "LNPC_text";
  114. next;
  115. switch(select(@menu1$,@menu2$,"Cancel"))
  116. {
  117. case 1:
  118. case 2:
  119. // Set player language
  120. callfunc "setlang",@menu-1;
  121. break;
  122. }
  123. } while( @menu != 3 );
  124. close;
  125. end;
  126. OnInterIfInitOnce:
  127. // Load the localized text.
  128. // This can be anywhere, as long as it's executed before the coresponding getmes2/mes2 calls
  129. // 0 - English (default)
  130. // 1 - Portuguese
  131. callfunc "setmes2", "LNPC_name", 0, "[LocalizedNPC]";
  132. callfunc "setmes2", "LNPC_lang", 0, "EN";
  133. callfunc "setmes2", "LNPC_lang", 1, "PT";
  134. callfunc "setmes2", "LNPC_text", 0, "Something in english";
  135. callfunc "setmes2", "LNPC_text", 1, "Algo em português";
  136. end;
  137. }