Guest User

Untitled

a guest
Mar 6th, 2018
879
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 33.90 KB | None | 0 0
  1. =======================================================================
  2. ВЫДАЁМ ПРЕДМЕТ АКТОРУ
  3. =======================================================================
  4. function название функции (first_speaker, second_speaker)
  5. dialogs.relocate_item_section(second_speaker, "название предмета", "in")
  6. end
  7. Размещается в файлах скрипт.
  8.  
  9. Выдача поршня вставляется под строку действия.
  10. название скрипта.название функции
  11.  
  12. Примечание, что бы выдать два одинаковых предмета пишем
  13.  
  14. function название функции (first_speaker, second_speaker)
  15. dialogs.relocate_item_section(second_speaker, "название предмета", "in",2)
  16. end
  17.  
  18. Если надо больше меняем цифру 2 на нужную нам.
  19. =========================================================================
  20. ОТБИРАЕМ ПРЕДМЕТ У АКТОРА.
  21. =========================================================================
  22. function название функции(first_speaker, second_speaker)
  23. dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
  24. end
  25.  
  26. размещается в файлах скрипт
  27.  
  28. выдача поршня вставляется под строку действия
  29. название скрипта.название функции
  30.  
  31. Примечание, что бы отобрать два одинаковых предмета пишем
  32.  
  33. function название функции(first_speaker, second_speaker)
  34. dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета",2)
  35. end
  36.  
  37. Если надо больше меняем цифру 2 на нужную нам.
  38. =======================================================================
  39. СПАВНИМ ВЕЩЬ В РЮКЗАК гг
  40. =======================================================================
  41. function название функции()
  42. local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
  43. end
  44.  
  45. В диалог
  46. название скрипта.название функции
  47.  
  48. ===========================================================================
  49. ПРОВЕРКА НАЛИЧИЯ У АКТОРА ПРЕДМЕТА
  50. ===========================================================================
  51. Вариант первый
  52. function Название функции()
  53. if db.actor:object("название предмета") then
  54. return true
  55. end
  56. return false
  57. end
  58.  
  59. в диалог
  60.  
  61. имя скрипта.название функции
  62.  
  63. <---------как вариант(пользуются ПЫС)------------------>
  64.  
  65. function название функции(first_speaker, second_speaker)
  66. return first_speaker:object("название предмета") ~= nil
  67. end
  68.  
  69. в диалог
  70.  
  71. имя скрипта.название функции
  72. ===========================================================================
  73. ПРОВЕРКА ВЕЩЕЙ У ГГ
  74. ===========================================================================
  75. function Название функции(first_speaker, second_speaker)
  76. return first_speaker:object("название предмета") ~= nil or
  77. first_speaker:object("название предмета") ~= nil or
  78. first_speaker:object("название предмета") ~= nil
  79. end
  80.  
  81. в диалог
  82.  
  83. имя скрипта.название функции
  84.  
  85. описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
  86. ============================================================================
  87. ПРОВЕРКА ДЕНЕГ У ГГ
  88. ============================================================================
  89. Вариант первый(используют ПЫС)
  90.  
  91. function название функции(first_speaker, second_speaker)
  92. return first_speaker:money() >= 2000
  93. end
  94.  
  95. в диалог
  96.  
  97. имя скрипта.название функции
  98.  
  99. <-----------Вариант два-------------->
  100. Использовал на ТЧ, но и в ЗП работает
  101.  
  102. function название функции()
  103. return db.actor:money()>=10000
  104. end
  105. в диалог
  106.  
  107. имя скрипта.название функции
  108.  
  109. =========================================================================
  110. СПАВН ПРЕДМЕТА
  111. =========================================================================
  112. function spawn_vintar()
  113. alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
  114. end
  115.  
  116. В диалог
  117.  
  118. название скрипта.название функции
  119.  
  120. ==========================================================================
  121. МГНОВЕННАЯ СМЕРТЬ ГГ
  122. ==========================================================================
  123.  
  124. function название функции(npc, actor)
  125. npc:kill(actor)
  126. end
  127.  
  128. В диалог
  129.  
  130. название скрипта.название функции
  131. ===========================================================================
  132. ПРОВЕРКА КОЛ_ВА ОДИНАКОВЫХ ПРЕДМЕТОВ
  133. ===========================================================================
  134. function название функции(first_speaker, second_speaker)
  135. local item_sections = {"Предмет"}
  136. local needed = количество одинаковых предметов, ставится цифра без знаков
  137. local count = 0
  138. local item_section
  139. local function calc(temp, item)
  140. if item:section() == item_section then
  141. count = count + 1
  142. end
  143. end
  144. for k,v in pairs(item_sections) do
  145. item_section = v
  146. get_story_object("actor"):iterate_inventory(calc, actor)
  147. end
  148. return count >= needed
  149. end
  150.  
  151. в диалог
  152. имя скрипта.название функции
  153. ==========================================================================
  154. ЛЕЧЕНИЕ ГГ
  155. ==========================================================================
  156. Вставим этот актион в диалог
  157.  
  158. dialogs.medic_magic_potion
  159. ==========================================================================
  160. ВЫДАЧА ДЕНЕГ от НПС ГГ
  161. ==========================================================================
  162.  
  163. function название функции(first_speaker, second_speaker)
  164. dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000)
  165. end
  166.  
  167. В диалог
  168.  
  169. название скрипта.название функции
  170. ==========================================================================
  171.  
  172. "У ГГ хорошее здоровье"
  173.  
  174. function actor_good(first_speaker, second_speaker)
  175. if db.actor.health > 0.75 or --уровень здоровья, при котором диалог уже будет появляться(от 0 до 1)
  176. db.actor.radiation < 0.1 or -- уровень радиации,при котором диалог уже будет появляться(от 0 до 1)
  177. db.actor.bleeding < 0.1 then --уровень кровотечения, при котором диалог уже будет появляться(от 0 до 1)
  178. return true
  179. end
  180. return false
  181. end
  182.  
  183. "определённая группировка враждебна к ГГ"
  184.  
  185. Код
  186. function if_enemy_to_actor(first_speaker, second_speaker)
  187. local npc = dialogs.who_is_npc(first_speaker, second_speaker)
  188. local actor = dialogs.who_is_actor(first_speaker, second_speaker)
  189. return xr_conditions.is_faction_enemy_to_actor(actor, npc, {"Название группировки"})
  190. end
  191.  
  192. если надо когда группировка не враждебна к актору, то return not
  193. если надо когда группировка друзья,то return xr_conditions.is_faction_friend_to_actor(actor, npc, {"Название группировки"})
  194. когда нейтралы, return xr_conditions.is_faction_neutral_to_actor(actor, npc, {"Название группировки"})
  195.  
  196. ==========================================================================
  197. ПОРШЕНЬ НА ОДНОРАЗОВОЕ ПРОЧТЕНИЕ ДИАЛОГА.
  198. ==========================================================================
  199. прописываем в файле info_какойто.xml
  200.  
  201. в конце ветки диалога запишем
  202. Название поршня
  203. в начале диалога под id квеста запишем
  204. название поршня
  205. ===========================================================================
  206. ПОРШЕНЬ НА СКРЫТИЕ ДИАЛОГА ДО ПРОЧТЕНИЯ ОПРЕДЕЛЁНОГО ДИАЛОГА.
  207. ===========================================================================
  208.  
  209. прописываем в файле info_какойто.xml
  210.  
  211. В конце диалога после которого должна появиться новая ветка
  212. название поршня
  213.  
  214. в начале новой ветки под id прописываем
  215. название поршня
  216. теперь новый диалог недоступен пока мы не прочтём первый
  217. ================================================================================
  218. ==========
  219. ПОРШЕНЬ НА ЗАПРЕТ ДИАЛОГА ЕСЛИ В ПРЕДИДУЩЕМ МЫ ПОСТАВИЛИ УСЛОВИЕ ПО КОТОРОМУ ЕГО НЕ БУДЕТ
  220. ================================================================================
  221. ==========
  222.  
  223. прописываем в файле info_какойто.xml
  224.  
  225. В конце определяющего диалога ставим
  226. название поршня
  227.  
  228. под id квеста(диалога) который не должен появиться прописываем
  229. название поршня
  230. Теперь диалог не появится.
  231. ===============================================================================
  232.  
  233. ---------------------------------------------- ---------------------------------
  234. npc здох
  235.  
  236. function dead_body_spawn()
  237. npc=alife():create("чувак 1",vector():set(-243.6, -0.67, 309.62), 366014, 20)
  238. npc:kill(npc)
  239. end
  240. ----------------------------------------------------------------------------------
  241. ------------------------------------ -------------------------------------------------
  242. Забираем всё бабло у ГГ
  243.  
  244. function gop_stop_actor(actor, npc)
  245. local actor = db.actor
  246. all_money_actor = actor:money()
  247. if actor and npc then
  248. dialogs.relocate_money(npc, all_money_actor, "out")
  249. end
  250. end
  251. ------------------------------------------------------------------------------------------
  252. ============================= ==========Телепортация актора===============================
  253. Чтобы ГГ после диалога телепортировался в нужную точку, то можно воспользоваться функцией
  254.  
  255.  
  256.  
  257.  
  258.     function teleport_actor(actor, npc, p)
  259.  
  260.     local point = patrol(p[1])
  261.  
  262.     local look = patrol(p[2])
  263.  
  264.  
  265. db.actor:set_actor_position(point:point(0))
  266. local dir = look:point(0):sub(point:point(0))
  267. db.actor:set_actor_direction(-dir:getH())
  268. end
  269. Это функция есть в файле xr_effects.script. Как она работает? Как-то так (кусочек файла sr_cutscene.script):
  270.  
  271. xr_effects.teleport_actor(db.actor, nil, {self.st.point, self.st.look})
  272.  
  273. По всей видимости можно вместо фигурных скобочек указывать нужные координаты класса вектор.
  274.  
  275. А можно просто воспользоваться функцие set_actor_position и set_actor_direction по отдельности. Первую- для установки позиции, вторая - для установки взгляда. Здесь вызов идет вот-так:
  276.  
  277. db.actor:set_actor_position(patrol("t_walk_2"):point(0))
  278.  
  279. , а если проще, то можно писать просто координаты.
  280. Эти функции работают ТОЛЬКО в пределах уровня на котором находиться ГГ!!!
  281. ---------------------------------------------------------------------------------------------------------
  282.  
  283. Автор: Неизвестен
  284. ---------------------------------------------------------------------------------------------------------
  285. Вот еще:
  286. Закрыть спойлер
  287. "Функции"
  288. "Спавн НПС(или предмета)"
  289. Код
  290. function spawn_x14 ()
  291. alife():create("Секция",vector():set(-7.32,-34.48,13.18),1542,2799)
  292. end
  293. ---------------------------------------------
  294. "Проверка на взятие предмета и выдача инфопоршня"
  295. Функции типа "Проверка на взятие предмета..." я лично использую в квестах тегами
  296. Код
  297. <function_complete>файл.функция</function_complete>
  298. Код
  299. function search_weapon_complete1(actor, npc)
  300. if db.actor ~= nil then
  301. if db.actor:object("ПРЕДМЕТ") then
  302. db.actor:give_info_portion("ПОРШЕНЬ")
  303. return true
  304. end
  305. end
  306. return false
  307. end
  308. ---------------------------------------------
  309. "Проверка на взятие нескольких разных предметов и выдача инфопоршня"
  310. Код
  311. local t_wpn = {"ПРЕДМЕТ1", "ПРЕДМЕТ1", "ПРЕДМЕТ1"}
  312. function search_ALL_weapons_complete()
  313. local gg = db.actor
  314. if gg then
  315. for i=1,#t_wpn do
  316. if not gg:object(t_wpn) then
  317. return false
  318. end
  319. end
  320. gg:give_info_portion("ПОРШЕНЬ")
  321. return true
  322. end
  323. return false
  324. end
  325. ---------------------------------------------
  326. "Проверка на взятие N-колличества одного и того же предмета(например 10 аптечек)"
  327. Основная функция:
  328. Код
  329. function Actor_Has_ListItems(sSection,iNum)
  330. if not iNum then iNum = 1 end
  331. local oActor = db.actor
  332. local iCnt = 0
  333. if oActor and sSection then
  334. oActor:iterate_inventory(
  335. function (dummy, oItem)
  336. if oItem:section() == sSection then
  337. iCnt = iCnt + 1
  338. if iCnt >= iNum then
  339. return true --/> актор имеет N предметов
  340. end
  341. end
  342. end
  343. ,nil)
  344. end
  345. return iCnt >= iNum --/> имеет ли актор N предметов
  346. endВызов:
  347. Код
  348. function search_2_bumazhki_sidr_complete()
  349. return this.Actor_Has_ListItems("medkit", 10)
  350. end
  351. ---------------------------------------------
  352. "Проверка на взятие предмета(обычная)"
  353. Код
  354. function search_weapon_complete(actor, npc)
  355. if db.actor ~= nil then
  356. return db.actor:object("wpn_vintorez")~=nil
  357. end
  358. return false
  359. end
  360. ---------------------------------------------
  361. "Вызов .РРЕ эфекта через диалог(Типа Удар в морду)"
  362. Код
  363. function punch()
  364. -- set_inactivate_input_time(30)
  365. local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]])
  366. snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
  367. level.add_cam_effector("camera_effects\fusker.anm", 999, false, "")
  368. end
  369. ---------------------------------------------
  370. "Уменьшение(Увеличение)репутации ГГ"
  371. Отнимаем:
  372. Код
  373. function reputation_down_10(stalker, player)
  374. db.actor:change_character_reputation(db.actor:character_reputation() - 10)
  375. end
  376. Плюсуем:
  377. Код
  378. function reputation_up_10(stalker, player)
  379. db.actor:change_character_reputation(db.actor:character_reputation() + 10)
  380. end
  381. ---------------------------------------------
  382. "Уменьшение здоровья"
  383. Код
  384. function malo_hp()
  385. db.actor.health = -0.3 --Минус 30% дезек
  386. end
  387. ---------------------------------------------
  388. "Удаление нескольких одинаковых предметов(например удалим 7 аптечек)"
  389. Код
  390. function Delete_2_bumazhki_sidora_from_Actor()
  391. local cnt = db.actor:object_count()
  392. local ch=0
  393. for i=0, cnt-1 do
  394. local item = db.actor:object(i)
  395. if item:section() == "medkit" then
  396. local sobj = alife():object(item:id())
  397. if sobj then
  398. alife():release(sobj,true)
  399. ch = ch+1
  400. if ch == 7 then --7 - кол-во удаляемых аптечек
  401. break end
  402. end
  403. end
  404. end
  405. end
  406. -----------------------------------------------------------------------
  407. "Функция рамдомного удаления предметов из инвентаря ГГ"
  408. Код
  409. function ReleaseRandomItem(num)
  410. local actor = db.actor
  411. local cnt = actor:object_count()
  412. if cnt<num then return end
  413. for i=1,num do
  414. local item = actor:object(math.random(0, cnt-1))
  415. local sobj = alife():object(item:id())
  416. if sobj then alife():release(sobj,true)
  417. cnt = actor:object_count()
  418. end
  419. end
  420. end
  421. вызывать так:
  422. Код
  423. ReleaseRandomItem(5) -- 5 - число удаляемых предметов
  424. Вызов через диалог:
  425. Код
  426. function RRI()
  427. имя_файла.ReleaseRandomItem(5)
  428. end
  429. Пример:
  430. Код
  431. <action>имя_файла.RRI</action>
  432. ---------------------------------------------
  433. "Заходим на локацию и меняем группировку"
  434. Код
  435. function join_monolith (actor, npc) -- ставить на дельта апдейт
  436. printf ("ACTOR NOW IN имя группировки COMMUNITY")
  437. if db.actor and level_id.имя уровня then -- пример l01_escape и т.п
  438. db.actor:set_character_community ("имя группировки", 0, 0)
  439. end
  440. end
  441. ---------------------------------------------
  442. "Удаление всего и вся из инвентаря - и пда, и болт, и фонарик, и бинокль, и детектор"
  443. Код
  444. function test_index()
  445. local cnt = db.actor:object_count()
  446. for i=0, cnt-1 do
  447. local item = db.actor:object(i)
  448. local sobj = alife():object(item:id())
  449. if sobj then
  450. alife():release(sobj,true)
  451. end
  452. end
  453. end
  454. ---------------------------------------------
  455. "Таймер"
  456. "Вариант без вывода на худ"
  457. Код
  458. local iTimer
  459. function Start_Timer_5_minutes() --/ (пере)запуск таймера (из диалога)
  460. iTimer = time_global() + 5*1000 --/ взводим таймер на 5cek
  461. end
  462.  
  463. function Timer_N_minutes() --/ вызывается из ':update' сталкер-биндера
  464. if iTimer and iTimer < time_global() then --/ проверка текущего значения
  465. iTimer = nil --/ выключаем таймер
  466. скрипт.функция() --/ выполняем действие
  467. end
  468. end
  469. "Вариант с выводом на худ"
  470. Код
  471. local iTimer
  472. local last
  473. function start_timer_minutes_test(seconds)
  474. if last~= nil then
  475. iTimer = time_global()+last --/ взводим таймер на остаток времени last
  476. else
  477. iTimer = time_global() + 7*1000 --/ взводим таймер например 7 сек.
  478. end
  479. end
  480.  
  481. function timer_n_minutes_test() --/ вызывается из ':update' сталкер-биндера
  482. if iTimer then
  483. last=iTimer-time_global() -- присваиваем переменной остаток времени до конца работы таймера
  484. if iTimer < time_global() then
  485. iTimer = nil --/ выключаем таймер
  486. last=nil
  487. СКРИПТ.ФУНКЦИЯ--/ выполняем действие
  488. end
  489. end
  490. end
  491.  
  492. -- выводим значение таймера в обратном отсчете на худ
  493. function hud_static() --/ вызывается из ':update' сталкер-биндера
  494. local hud = get_hud()
  495. local st
  496. if iTimer then
  497. st = hud:GetCustomStatic("hud_timer")
  498. if st==nil then
  499. hud:AddCustomStatic("hud_timer", true)
  500. st = hud:GetCustomStatic("hud_timer")
  501. end
  502. if last~=nil then
  503. local hours = math.floor(last/3600000)
  504. local minutes = math.floor(last/60000 - hours*60)
  505. local seconds = math.floor(last/1000 - hours*3600 - minutes*60)
  506. local text = string.format("%02d:%02d:%02d",hours,minutes,seconds) -- выводим время в формате 00:00:00
  507. --local text=string.format("%.f",last/1000)
  508. st:wnd():SetTextST(text)
  509. end
  510. else
  511. if hud:GetCustomStatic("hud_timer")~=nil then
  512. hud:RemoveCustomStatic("hud_timer")
  513. end
  514. end
  515. end
  516. ---------------------------------------------
  517. "Расчет попадания в НПС(Выводится информации - в какую часть тела попал)"
  518. Автор:Николай ФеНиКс(ФеНиКс)
  519. Код
  520. if bone_index > 0 and who then
  521. if who:id() == db.actor:id() then --/ для актора
  522. local oActiveItem = db.actor:object("wpn_svd")
  523. if oActiveItem then --/ у актера проверяемое оружие
  524. local kuda = ""
  525. if bone_index == 14 or bone_index == 15 then
  526. kuda = "Ранен в глаз"
  527. elseif bone_index == 13 then
  528. kuda = "Ранен в голову"
  529. elseif bone_index == 16 then
  530. kuda = "Ранен в челюсть"
  531. elseif bone_index == 17 then
  532. kuda = "Ранен в шею"
  533. elseif bone_index == 9 or bone_index == 10 or bone_index == 11 or bone_index == 18 then
  534. kuda = "Ранен в грудь"
  535. elseif bone_index >= 1 and bone_index <= 8 then
  536. kuda = "Ранен в ногу"
  537. elseif bone_index >= 19 and bone_index <= 42 then
  538. kuda = "Ранен в руку"
  539. end
  540. news_manager.send_tip(db.actor, kuda, nil, nil, 2000)
  541. end
  542. end
  543. end
  544. Вставлять функцию в мотиватор в функцию hit_callbak.
  545. Например, после этого:
  546. Код
  547. if self.st.hit then
  548. xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index)
  549. end
  550. ---------------------------------------------
  551. "Функция для квестов(типа убить группу сталкеров, например, пятерых)"
  552. Код
  553. function mochim_five_nps()
  554. if has_alife_info("первый_грохнут") and
  555. has_alife_info("второй_грохнут") and
  556. has_alife_info("третий_грохнут") and
  557. has_alife_info("четвертый_грохнут") and
  558. has_alife_info("и_пятый_наконец") then
  559. return true
  560. else
  561. return false
  562. end
  563. end
  564. Использование:
  565. В теле квеста пишем complete'ы:
  566. Код
  567. <infoportion_complete>esc_kvest_secret_merc_kill_poslannick</infoportion_complete>
  568. <function_complete>имя_файла.mochim_five_nps</function_complete>
  569. После выполнения условий функции mochim_five_nps выдается поршень esc_kvest_secret_merc_kill_poslannick и задание обновляется.
  570. ---------------------------------------------
  571. "Спавн предмета или НПС с меткой в ПДА"
  572. Код
  573. local ObjId=0
  574. function pda_killer_spawn()
  575. local obj= alife():create("pda_merc_killer_glav",vector():set(-223.700,-7.678,-129.688),17000,281)
  576. local text = "Текст метки"
  577. level.map_add_object_spot_ser(obj.id, "blue_location", text) --/blue_location - тип метки
  578. ObjId=obj.id
  579. end
  580. Эту метку можно удалить так:
  581. Код
  582. function delete_spot()
  583. for a=1,65534 do --Перебор айди
  584. local obj = alife():object(a)
  585. if obj and obj:section_name() == "pda_merc_killer_glav" then --/pda_merc_killer_glav -- Секция предмета или НПС
  586. level.map_remove_object_spot(obj.id,"blue_location")
  587. break
  588. end
  589. end
  590. end
  591. ---------------------------------------------
  592. "Вешаем метку в ПДА по Sid'у(Например на Волка)"
  593. Код
  594. local obj = alife():story_object( 6 ) -- 6 - сид Волка
  595. local obj_id = obj.id
  596. function add_spot_on_map(obj_id,type,text)
  597. if obj_id then
  598. if not text then text = "no_text" end
  599. level.map_add_object_spot_ser(obj_id, type, text)
  600. end
  601. end
  602. Вызываем:
  603. Код
  604. function add_spot_on_map2(obj_id,type,text)
  605. имя_файла.add_spot_on_map(obj.id,"green_location","Текст")
  606. end
  607. Метку можно убрать вот так:
  608. Код
  609. local obj = alife():story_object( 6 )
  610. local obj_id = obj.id
  611. function remove_spot_from_map(obj_id,type)
  612. if obj_id and level.map_has_object_spot(obj_id, type) ~= 0 then
  613. level.map_remove_object_spot(obj_id, type)
  614. end
  615. end
  616. эту вызывать:
  617. Код
  618. function remove_spot()
  619. this.remove_spot_from_map(obj.id,"green_location")
  620. end
  621. ---------------------------------------------
  622. "Вывод сообщения на экран"
  623. Код
  624. function kvest_search_2_bumazhki_sidr_complete()
  625. news_manager.send_tip(db.actor, "%c[255,255,128,128]Автор сообщения\n%c[default]Текст сообщения", 0, "wolf", 17000)
  626. end
  627. ---------------------------------------------
  628. "Еще способ вывода сообщения"
  629. Код
  630. local text = "Здесь текст"
  631. function test()
  632. news_manager.send_tip(db.actor, text, 0, "trader", 20000)
  633. end
  634. ---------------------------------------------
  635. "Заставляем диалог появиться самому на примере Волка(подходим к Волку и диалог появляется сам)"
  636. Спавним рестриктор на координатах Волка с радиусом метра 2.Делаем логику рестриктору:
  637. Код
  638. [logic]
  639. active = sr_idle
  640.  
  641. [sr_idle]
  642. on_actor_inside = %+esc_on_talk% ;Выдача поршня
  643. ;Или так(Выбрать одно):
  644. on_actor_inside = %=on_talk%" ;Функция
  645. Если выбрали поршень, то создаем его:
  646. Код
  647. <info_portion id="esc_on_talk">
  648. <action>СКРИПТ.on_talk</action>
  649. </info_portion>
  650. Вызываем функцию и видим диалог:
  651. Код
  652. function on_talk()
  653. local npc = level_object_by_sid(006)
  654. db.actor:run_talk_dialog(npc)
  655. end
  656. ---------------------------------------------
  657. "Делаем некоторых НПС бессмертными"
  658. Код
  659. function immotral()
  660. local npc1 = level_object_by_sid(006) --волк
  661. local npc2 = level_object_by_sid(092) --проводник
  662. local npc3 = level_object_by_sid(032)-- кузнецов
  663. local npc4= level_object_by_sid(100) --Серый
  664. if npc1 then npc1.health = 1 end
  665. if npc2 then npc2.health = 1 end
  666. if npc3 then npc3.health = 1 end
  667. if npc4 then npc4.health = 1 end
  668. endВ голову дохнут.
  669. ---------------------------------------------
  670. "Отправляем НПС в другую группировку(например Волка)"
  671. Код
  672. function name()
  673. local npc = level_object_by_sid(006)
  674. npc:set_character_community("имя группировки", 0, 0)
  675. end
  676. Если разговариваем с самим Волком, то вызываем эту функцию:
  677. Код
  678. function name(actor, npc)
  679. npc:set_character_community("имя группировки", 0, 0)
  680. end
  681. ---------------------------------------------
  682. "Удалим предмет из игры (или сталкера из игры(Удалим Волка))"
  683. Код
  684. function dell_kluk_final()
  685. local se_obj = alife():object("esc_wolf")
  686. if se_obj then
  687. alife():release(se_obj, true)
  688. end
  689. end
  690. ---------------------------------------------
  691. "При вызове происходит использование антирада"
  692. Код
  693. function do_something()
  694. local item = db.actor:object("antirad")
  695. if antirad then
  696. db.actor:eat(item)
  697. end
  698. end
  699. Должно быть так:
  700. Код
  701. function do_something()
  702. local item = db.actor:object("antirad")
  703. if item then
  704. db.actor:eat(item)
  705. end
  706. end
  707. ---------------------------------------------
  708. "Проверка:Какой костюм одет(не одет)(например, Экзоскелет)"
  709. Надет ли костюм
  710. Код
  711. function check_outfit()
  712. local outfit = db.actor:item_in_slot(6)
  713. if outfit:section() == "exo_outfit" then --/Если в 6 слоте присутствует "exo_outfit" тогда
  714. return true --/"exo_outfit" одет
  715. else
  716. return false --/"exo_outfit" не одет
  717. end
  718. end
  719. Не надет ли костюм
  720. Код
  721. function check_outfit()
  722. local outfit = db.actor:item_in_slot(6)
  723. if outfit:section() == "exo_outfit" then --/Если в 6 слоте присутствует "exo_outfit" тогда
  724. return true --/"exo_outfit" не одет
  725. else
  726. return false --/"exo_outfit" одет
  727. end
  728. end
  729. ---------------------------------------------
  730. "Наносим хит предмету"
  731. Код
  732. function hit_nanesti()
  733. for a=1,65635,1 do
  734. local obj=level.object_by_id(a)
  735. if obj and string.find(obj:name(),"ПРЕДМЕТ") then
  736. local h = hit ();
  737. h.power = 10000;
  738. h.direction = vector():set (0, 0, 0);
  739. h.impulse = 0;
  740. h.draftsman = obj;
  741. h.type = hit.explosion;
  742. obj:hit (h);
  743. end
  744. end
  745. end
  746. ---------------------------------------------
  747. "Проверяет, находится ли, например, Волк на локации Кордон"
  748. Код
  749. function rest()
  750. local npc = level_object_by_sid(006) --волк
  751. if npc and level.name() == "l01_escape" then
  752. return true
  753. else
  754. return false
  755. end
  756. end
  757. ---------------------------------------------
  758. "Проверка:Например на Кордоне находится ГГ или нет"
  759. Код
  760. function go_to_marsh_complete()
  761. if level_name == "l01escape" then
  762. return true
  763. else
  764. return false
  765. end
  766. end
  767. ---------------------------------------------
  768. Еще функции (Для ТЧ).
  769.  
  770. "Функции"
  771.  
  772. "Убить НПС"
  773.  
  774. Код
  775. function kill_stalker(actor, npc)
  776. npc:kill(npc)
  777. end
  778.  
  779. "Как, через скрипт, сделать НПС врагом?"
  780.  
  781. Код
  782. function enemy(actor, npc)
  783. npc:set_relation (game_object.enemy, db.actor)
  784. end
  785.  
  786. "Как создать функцию вызова звукового сигнала и проиграть ее в голове ГГ?"
  787.  
  788. Код
  789. function any_sound()
  790. local snd = sound_object([[characters_voice\human_03\stalker\talk\leaves\leaves_42]])
  791. snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0)
  792. end
  793.  
  794. "Еще один способ спавна НПС (или предмета)."
  795.  
  796. Код
  797. function НАЗВАНИЕ_create()
  798. local x=
  799. local y=
  800. local z=
  801. local level_vertex=
  802. local game_vertex_id=
  803. alife():create("НАЗВАНИЕ",vector():set(x,y,z),level_vertex,game_vertex_id)
  804. end
  805.  
  806. "Как запустить много функций одной связкой?"
  807.  
  808. Например:
  809. Код
  810. function all_spawn()
  811. НАЗВАНИЕ_create()
  812. any_sound()
  813. end
  814.  
  815. function НАЗВАНИЕ_create()
  816. local x=
  817. local y=
  818. local z=
  819. local level_vertex=
  820. local game_vertex_id=
  821. alife():create("НАЗВАНИЕ",vector():set(x,y,z),level_vertex,game_vertex_id)
  822. end
  823.  
  824. function any_sound()
  825. local snd = sound_object([[characters_voice\human_03\stalker\talk\leaves\leaves_42]])
  826. snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0)
  827. end
  828. ---------------------------------------------
  829. "Различные скриптовые проверки (для совсем «зелёных»):"
  830. (Для SCoP)
  831.  
  832. 1. Проверка на то, что ГГ находится в укрытии от выброса:
  833. Код
  834. function название_функции()
  835. if surge_manager.actor_in_cover() then
  836. --действие
  837. end
  838. end
  839.  
  840. 2. Проверка на то, что ГГ НЕ находится в укрытии от выброса:
  841. Код
  842. function название_функции()
  843. if not surge_manager.actor_in_cover() then
  844. --действие
  845. end
  846. end
  847.  
  848. 3. Проверка на то, что ГГ жив:
  849. Код
  850. function название_функции()
  851. if db.actor:alive() then
  852. --действие
  853. end
  854. end
  855.  
  856. 4. Проверка на то, что ГГ мёртв:
  857. Код
  858. function название_функции()
  859. if not db.actor:alive() then
  860. --действие
  861. end
  862. end
  863.  
  864. 5. Проверка на то, что в данный момент идёт выброс:
  865. Код
  866. function название_функции()
  867. if surge_manager.is_started() then
  868. --действие
  869. end
  870. end
  871.  
  872. 6. Проверка на то, что в данный момент нет выброса:
  873. Код
  874. function название_функции()
  875. if surge_manager.is_finished() then
  876. --действие
  877. end
  878. end
  879.  
  880. 7. Проверка на наличие заданного кол-а денег у ГГ:
  881. Код
  882. function название_функции()
  883. local money = 1000 - заданное кол-во денег
  884. if db.actor:money() >= money then
  885. --действие
  886. end
  887. end
  888.  
  889. 8. Проверка на отсутствие заданного кол-а денег у ГГ:
  890. Код
  891. function название_функции()
  892. local money = 1000 - заданное кол-во денег
  893. if db.actor:money() < money then
  894. --действие
  895. end
  896. end
  897.  
  898. 9. Проверка на то, что у ГГ совсем нет денег:
  899. Код
  900. function название_функции()
  901. if db.actor:money() == 0 then
  902. --действие
  903. end
  904. end
  905.  
  906. 10. Проверка на то, что ГГ имеет при себе какой-либо предмет:
  907. Код
  908. function название_функции()
  909. if db.actor:object("предмет") ~= nil then
  910. --действие
  911. end
  912. end
  913.  
  914. 11. Проверка на то, что ГГ НЕ имеет при себе какой-либо предмет:
  915. Код
  916. function название_функции()
  917. if db.actor:object("предмет") == nil then
  918. --действие
  919. end
  920. end
Advertisement
Add Comment
Please, Sign In to add comment