Guest User

Untitled

a guest
Mar 10th, 2012
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.23 KB | None | 0 0
  1. Создание NPC
  2.  
  3. Запись файла путей
  4.  
  5. Для начала нам необходимо записать файл путей для нашего npc. Для этого заходим на сервер, логинимся как ркон админ. Загружем фильтрскрипт npc_record ("/rcon loadfs npc_record" ) (если он не был загружен до этого). Скрипт npc_record содержит три основные команды:
  6. /vrecord - Начинает запись путей транспорта в указанный файл
  7. /ofrecord - Начинает запись путей пешехода в указанный файл
  8. /stoprecord - Останавливает запись файла
  9. В этом уроке мы будем делать NPC управляющего транспортом. Поэтому садимся в тачку и пишем /vrecord mynpc
  10. Далее катаемся по пути где будет ездить наш будущий npc
  11. Когда закончим останавливаем запись файла /stoprecord
  12.  
  13. Выходим из игры и идем в папку scriptfiles, там нас должен ожидать файл mynpc.rec. Перемещаем его в папку /npcmodes/recordings/
  14. Все запись путей для NPC закончена!
  15.  
  16. Управление NPC
  17.  
  18. Как вы наверно заметили в папке npcmodes много маленьких pwn скриптов. Они управляют поведением NPC. Теперь создадим скрипт который будет управлять нашим NPC. Скрипт будет следующего содержания:
  19.  
  20. Code
  21. #define RECORDING "mynpc" //Это имя файла путей, который мы только что записали
  22. #define RECORDING_TYPE 1//1 для водителя 2 для пешехода
  23. #include <a_npc>
  24. main(){}
  25. public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
  26. public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
  27. public OnNPCExitVehicle() StopRecordingPlayback();
  28.  
  29. Рассмотрим каждую строчку подробнее:
  30.  
  31. Code
  32. #define RECORDING "mynpc" //Это имя файла путей, который мы только что записали
  33.  
  34. Как говорит комментарий - это имя файла путей который мы записали. Имя указывается без расширения!
  35.  
  36. Code
  37. #define RECORDING_TYPE 1//1 для водителя 2 для пешехода
  38.  
  39. Это тип записи. Для NPC водителя указываем 1, для NPC пешехода 2
  40.  
  41. Code
  42. #include <a_npc>
  43.  
  44. Подключаем инклуд содержащий функции для работы с NPC
  45.  
  46. Code
  47. public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
  48.  
  49. Благодаря этой строчке, когда npc проедет весь свой путь, прописанный в его файле, воспроизведение начнется сначало.
  50.  
  51. Code
  52. public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
  53.  
  54. Эта строка начинает воспроизведение файла пути когда NPC садиться в транспорт
  55.  
  56. Code
  57. public OnNPCExitVehicle() StopRecordingPlayback();
  58.  
  59. Эта строка останавливает воспроизведение, если по какой то причине NPC покинет транспорт.
  60. Как видите все просто! Теперь компилируем скрипт mynpc.pwn и отправляем его в папку /npcmodes
  61.  
  62. Присоединение NPC
  63. Итак у нас уже есть готовый файл путей и скрипт управляющий NPC. Теперь нам нужно загрузить NPC в моде или фильтрскрипте. Для этих целей существует функция ConnectNPC
  64. Синтаксис:
  65. Quote
  66. Code
  67. ConnectNPC("Dave","mynpc");
  68.  
  69. где, Dave - имя NPC, благодаря которому можно различать между собой разных NPC и заставлять их выполнять различные действия.
  70. mynpc - имя скрипта (без расширения), управляющего NPC
  71. Итак, используя эту функцию загрузим NPC в моде:
  72.  
  73. Code
  74. public OnGameModeInit()
  75. {
  76. print("my gamemode");
  77. ConnectNPC("MyFirstNPC","mynpc");
  78. return 1;
  79. }
  80.  
  81. или в фс
  82.  
  83. Code
  84. public OnFilterScriptInit()
  85. {
  86. print("my filterscript");
  87. ConnectNPC("MyFirstNPC","mynpc");
  88. return 1;
  89. }
  90.  
  91. Теперь когда у нас есть маршрут по которому будет кататься NPC, нужно создать ему транспорт на котором он будет кататься:
  92.  
  93. Code
  94. new MyFirstNPCVehicle;
  95. public OnGameModeInit()
  96. {
  97. print("my gamemode");
  98. ConnectNPC("MyFirstNPC","mynpc");
  99. MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
  100. return 1;
  101. }
  102.  
  103. Положение транспорта не имеет значение, поскольку он будет телепортирован к NPC, когда начнется воспроизведение файла пути.
  104. Еще одна вещь, которую нужно сделать - это посадить NPC в транспорт. Это можно реализовать так:
  105.  
  106. Code
  107. public OnPlayerSpawn(playerid)
  108. {
  109. if(IsPlayerNPC(playerid)) //Если игрок - NPC.
  110. {
  111. new npcname[MAX_PLAYER_NAME];
  112. GetPlayerName(playerid, npcname, sizeof(npcname)); //Получаем имя NPC
  113. if(!strcmp(npcname, "MyFirstNPC", true)) //Проверяем если имя NPC - MyFirstNPC
  114. {
  115. PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Сажаем NPC в созданный для него транспорт
  116. }
  117. return 1;
  118. }
  119. //Остальной код для обычных игроков
  120. return 1;
  121. }
  122.  
  123. Дополнение специально для GF
  124.  
  125. Чтобы боты работали стабильно и их не выкидывало с сервера/из авто и т.д
  126. Ищем в моде данные паблики:
  127.  
  128. Code
  129. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  130. public OnPlayerConnect(playerid)
  131. public SetPlayerSpawn(playerid)
  132. public OnPlayerSpawn(playerid)
  133. public OnPlayerStateChange(playerid, newstate, oldstate)
  134. public OnPlayerExitVehicle(playerid, vehicleid)
  135. public OnPlayerRequestClass(playerid, classid)
  136. public OnPlayerUpdate(playerid)
  137.  
  138. И добавляем следующие:
  139.  
  140. Code
  141. if(IsPlayerNPC(playerid))return 1;
  142.  
  143. Источник: sa-mp.com
  144. Перевод: Kimi
Advertisement
Add Comment
Please, Sign In to add comment