FCNPC.pwn 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /* ---------------------------------
  2. FCNPC Plugin Sample FS
  3. - File: FCNPC.pwn
  4. - Author: OrMisicL & ziggi
  5. ---------------------------------*/
  6. #define FILTERSCRIPT
  7. #include <a_samp>
  8. #tryinclude <FCNPC>
  9. #tryinclude "FCNPC"
  10. #tryinclude "../FCNPC"
  11. #if !defined _FCNPC_included
  12. #error Add FCNPC.inc to your scripts directory
  13. #endif
  14. #define START_NPCS 25
  15. forward CreateNPC();
  16. forward DestroyNPC(npcid);
  17. enum E_NPC {
  18. bool:E_VALID,
  19. E_MOVE_STAGE,
  20. };
  21. new gNpc[MAX_PLAYERS][E_NPC];
  22. new Float:gSpawns[][3] = {
  23. {1697.2258, -1706.5187, 13.5419}
  24. };
  25. new Float:gMovements[][3] = {
  26. {1697.7418, -1600.1525, 13.5469},
  27. {1797.9518, -1619.9912, 13.5469},
  28. {1814.1798, -1645.9603, 13.5469},
  29. {1815.2373, -1724.6650, 13.5469},
  30. {1696.7618, -1725.9985, 13.5469}
  31. };
  32. new gNpcCount;
  33. public OnFilterScriptInit()
  34. {
  35. // Create NPCs
  36. for (new i = 0; i < START_NPCS; i++) {
  37. SetTimer("CreateNPC", 3000 * i + random(10000), 0);
  38. }
  39. return 1;
  40. }
  41. public CreateNPC()
  42. {
  43. new name[MAX_PLAYER_NAME + 1];
  44. format(name, sizeof(name), "NPC_%d", gNpcCount);
  45. new npcid = FCNPC_Create(name);
  46. gNpc[npcid][E_MOVE_STAGE] = 0;
  47. gNpc[npcid][E_VALID] = true;
  48. FCNPC_Spawn(npcid, random(312), gSpawns[0][0], gSpawns[0][1], gSpawns[0][2]);
  49. gNpcCount++;
  50. }
  51. stock MoveNPC(npcid)
  52. {
  53. new mstage = gNpc[npcid][E_MOVE_STAGE];
  54. FCNPC_GoTo(npcid, gMovements[mstage][0], gMovements[mstage][1], gMovements[mstage][2], MOVE_TYPE_RUN);
  55. }
  56. public FCNPC_OnDeath(npcid, killerid, weaponid)
  57. {
  58. if (!gNpc[npcid][E_VALID]) {
  59. return 1;
  60. }
  61. new name[MAX_PLAYER_NAME + 1];
  62. GetPlayerName(killerid, name, sizeof(name));
  63. new msg[144];
  64. format(msg, sizeof(msg), "NPC %d was killed by %d (%s) with weapon %d", npcid, killerid, name, weaponid);
  65. SendClientMessageToAll(0xFF00FF00, msg);
  66. SetTimerEx("DestroyNPC", 2000, 0, "i", npcid);
  67. return 1;
  68. }
  69. public DestroyNPC(npcid)
  70. {
  71. FCNPC_Destroy(npcid);
  72. gNpc[npcid][E_VALID] = false;
  73. }
  74. public FCNPC_OnSpawn(npcid)
  75. {
  76. if (!gNpc[npcid][E_VALID]) {
  77. return 1;
  78. }
  79. // Give him some weapons and ammo
  80. FCNPC_SetWeapon(npcid, random(11) + 22);
  81. FCNPC_SetAmmo(npcid, 500);
  82. // Move the NPC
  83. MoveNPC(npcid);
  84. return 1;
  85. }
  86. public FCNPC_OnReachDestination(npcid)
  87. {
  88. if (!gNpc[npcid][E_VALID]) {
  89. return 1;
  90. }
  91. // Increase the moving stage
  92. gNpc[npcid][E_MOVE_STAGE]++;
  93. if (gNpc[npcid][E_MOVE_STAGE] >= sizeof(gMovements)) {
  94. gNpc[npcid][E_MOVE_STAGE] = 0;
  95. }
  96. MoveNPC(npcid);
  97. return 1;
  98. }
  99. public OnRconCommand(cmd[])
  100. {
  101. if (!strcmp(cmd, "npc", true)) {
  102. CreateNPC();
  103. }
  104. return 1;
  105. }