npc_test_duplicate.txt 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //===== rAthena Script =======================================
  2. //= Sample: Duplicate Test
  3. //===== By: ==================================================
  4. //= rAthena Dev Team
  5. //===== Last Updated: ========================================
  6. //= 20211112
  7. //===== Description: =========================================
  8. //= An example of how duplicate NPCs are handled:
  9. //= NPC variables are shared between all duplicates.
  10. //= Each duplicate knows its own map coordinates.
  11. //= Duplicates always override the source NPC's trigger area (even 0x0).
  12. //= 'OnInit' loads the middle Poring last, for some reason.
  13. //============================================================
  14. prontera,150,175,4 script Duplicate Test Script 909,{
  15. mes "Hi.";
  16. mes "My coords are "+ .map$ +", "+ .x +"/" +.y ;
  17. close;
  18. OnInit:
  19. getmapxy(.map$, .x, .y, BL_NPC);
  20. end;
  21. OnTouch:
  22. getmapxy(.map$, .x, .y, BL_NPC);
  23. emotion ET_SCISSOR;
  24. end;
  25. }
  26. prontera,155,175,4 duplicate(Duplicate Test Script) Duplicate Test2 909,2,2
  27. prontera,160,175,4 duplicate(Duplicate Test Script) Duplicate Test3 909,3,3
  28. //duplicate command script
  29. prontera,150,168,4 script Duplicate Command Test 909,{
  30. mes "Would you like to create a new NPC?";
  31. .@original_npc$ = "original_npc_unique_name";
  32. mes "Input Map Name";
  33. mes "recommended 'prontera'";
  34. input .@map$;
  35. clear;
  36. mes "Input x";
  37. mes "recommended '155'";
  38. input .@x,0;
  39. clear;
  40. mes "Input y";
  41. mes "recommended '168'";
  42. input .@y,0;
  43. clear;
  44. switch( .@s = select( "Provide no info:With name:With name and look:With name, look and dir:cancel" ) ){
  45. case 1:
  46. .@new_npc$ = duplicate( .@original_npc$, .@map$, .@x, .@y );
  47. break;
  48. case 2:
  49. mes "Input Duplicate NPC Name";
  50. input .@name$;
  51. clear;
  52. .@new_npc$ = duplicate( .@original_npc$, .@map$, .@x, .@y, .@name$ );
  53. break;
  54. case 3:
  55. mes "Input Duplicate NPC Name";
  56. input .@name$;
  57. clear;
  58. mes "Input look";
  59. mes "recommended '445'";
  60. input .@look,0;
  61. .@new_npc$ = duplicate( .@original_npc$, .@map$, .@x, .@y, .@name$, .@look );
  62. break;
  63. case 4:
  64. mes "Input Duplicate NPC Name";
  65. input .@name$;
  66. clear;
  67. mes "Input look";
  68. mes "recommended '445'";
  69. input .@look,0;
  70. clear;
  71. mes "Input dir";
  72. mes "between " + DIR_NORTH + " and " + DIR_NORTHEAST;
  73. input .@dir,DIR_NORTH,DIR_NORTHEAST;
  74. .@new_npc$ = duplicate( .@original_npc$, .@map$, .@x, .@y, .@name$, .@look, .@dir );
  75. break;
  76. default:
  77. mes "Ok, see you next time!";
  78. close;
  79. }
  80. if( getnpcid( 0, .@new_npc$ ) == 0 ){
  81. mes "Something went wrong!";
  82. mes "The new NPC could not be found!";
  83. close;
  84. }
  85. clear;
  86. mes "The new NPC is now at " + .@map$ + "," + .@x + "," + .@y;
  87. end;
  88. }
  89. prontera,150,165,0 script test npc::original_npc_unique_name 444,{
  90. getmapxy(.@map$, .@x, .@y, BL_NPC);
  91. mes "Hi.";
  92. mes "My Unique Name is: " + strnpcinfo(3);
  93. mes "My coords are "+ .@map$ +", "+ .@x +"/" +.@y ;
  94. close;
  95. }