Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- =======================================================================
- ВЫДАЁМ ПРЕДМЕТ АКТОРУ
- =======================================================================
- function название функции (first_speaker, second_speaker)
- dialogs.relocate_item_section(second_speaker, "название предмета", "in")
- end
- Размещается в файлах скрипт.
- Выдача поршня вставляется под строку действия.
- название скрипта.название функции
- Примечание, что бы выдать два одинаковых предмета пишем
- function название функции (first_speaker, second_speaker)
- dialogs.relocate_item_section(second_speaker, "название предмета", "in",2)
- end
- Если надо больше меняем цифру 2 на нужную нам.
- =========================================================================
- ОТБИРАЕМ ПРЕДМЕТ У АКТОРА.
- =========================================================================
- function название функции(first_speaker, second_speaker)
- dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
- end
- размещается в файлах скрипт
- выдача поршня вставляется под строку действия
- название скрипта.название функции
- Примечание, что бы отобрать два одинаковых предмета пишем
- function название функции(first_speaker, second_speaker)
- dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета",2)
- end
- Если надо больше меняем цифру 2 на нужную нам.
- =======================================================================
- СПАВНИМ ВЕЩЬ В РЮКЗАК гг
- =======================================================================
- function название функции()
- local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
- end
- В диалог
- название скрипта.название функции
- ===========================================================================
- ПРОВЕРКА НАЛИЧИЯ У АКТОРА ПРЕДМЕТА
- ===========================================================================
- Вариант первый
- function Название функции()
- if db.actor:object("название предмета") then
- return true
- end
- return false
- end
- в диалог
- имя скрипта.название функции
- <---------как вариант(пользуются ПЫС)------------------>
- function название функции(first_speaker, second_speaker)
- return first_speaker:object("название предмета") ~= nil
- end
- в диалог
- имя скрипта.название функции
- ===========================================================================
- ПРОВЕРКА ВЕЩЕЙ У ГГ
- ===========================================================================
- function Название функции(first_speaker, second_speaker)
- return first_speaker:object("название предмета") ~= nil or
- first_speaker:object("название предмета") ~= nil or
- first_speaker:object("название предмета") ~= nil
- end
- в диалог
- имя скрипта.название функции
- описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
- ============================================================================
- ПРОВЕРКА ДЕНЕГ У ГГ
- ============================================================================
- Вариант первый(используют ПЫС)
- function название функции(first_speaker, second_speaker)
- return first_speaker:money() >= 2000
- end
- в диалог
- имя скрипта.название функции
- <-----------Вариант два-------------->
- Использовал на ТЧ, но и в ЗП работает
- function название функции()
- return db.actor:money()>=10000
- end
- в диалог
- имя скрипта.название функции
- =========================================================================
- СПАВН ПРЕДМЕТА
- =========================================================================
- function spawn_vintar()
- alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
- end
- В диалог
- название скрипта.название функции
- ==========================================================================
- МГНОВЕННАЯ СМЕРТЬ ГГ
- ==========================================================================
- function название функции(npc, actor)
- npc:kill(actor)
- end
- В диалог
- название скрипта.название функции
- ===========================================================================
- ПРОВЕРКА КОЛ_ВА ОДИНАКОВЫХ ПРЕДМЕТОВ
- ===========================================================================
- function название функции(first_speaker, second_speaker)
- local item_sections = {"Предмет"}
- local needed = количество одинаковых предметов, ставится цифра без знаков
- local count = 0
- local item_section
- local function calc(temp, item)
- if item:section() == item_section then
- count = count + 1
- end
- end
- for k,v in pairs(item_sections) do
- item_section = v
- get_story_object("actor"):iterate_inventory(calc, actor)
- end
- return count >= needed
- end
- в диалог
- имя скрипта.название функции
- ==========================================================================
- ЛЕЧЕНИЕ ГГ
- ==========================================================================
- Вставим этот актион в диалог
- dialogs.medic_magic_potion
- ==========================================================================
- ВЫДАЧА ДЕНЕГ от НПС ГГ
- ==========================================================================
- function название функции(first_speaker, second_speaker)
- dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000)
- end
- В диалог
- название скрипта.название функции
- ==========================================================================
- "У ГГ хорошее здоровье"
- function actor_good(first_speaker, second_speaker)
- if db.actor.health > 0.75 or --уровень здоровья, при котором диалог уже будет появляться(от 0 до 1)
- db.actor.radiation < 0.1 or -- уровень радиации,при котором диалог уже будет появляться(от 0 до 1)
- db.actor.bleeding < 0.1 then --уровень кровотечения, при котором диалог уже будет появляться(от 0 до 1)
- return true
- end
- return false
- end
- "определённая группировка враждебна к ГГ"
- Код
- function if_enemy_to_actor(first_speaker, second_speaker)
- local npc = dialogs.who_is_npc(first_speaker, second_speaker)
- local actor = dialogs.who_is_actor(first_speaker, second_speaker)
- return xr_conditions.is_faction_enemy_to_actor(actor, npc, {"Название группировки"})
- end
- если надо когда группировка не враждебна к актору, то return not
- если надо когда группировка друзья,то return xr_conditions.is_faction_friend_to_actor(actor, npc, {"Название группировки"})
- когда нейтралы, return xr_conditions.is_faction_neutral_to_actor(actor, npc, {"Название группировки"})
- ==========================================================================
- ПОРШЕНЬ НА ОДНОРАЗОВОЕ ПРОЧТЕНИЕ ДИАЛОГА.
- ==========================================================================
- прописываем в файле info_какойто.xml
- в конце ветки диалога запишем
- Название поршня
- в начале диалога под id квеста запишем
- название поршня
- ===========================================================================
- ПОРШЕНЬ НА СКРЫТИЕ ДИАЛОГА ДО ПРОЧТЕНИЯ ОПРЕДЕЛЁНОГО ДИАЛОГА.
- ===========================================================================
- прописываем в файле info_какойто.xml
- В конце диалога после которого должна появиться новая ветка
- название поршня
- в начале новой ветки под id прописываем
- название поршня
- теперь новый диалог недоступен пока мы не прочтём первый
- ================================================================================
- ==========
- ПОРШЕНЬ НА ЗАПРЕТ ДИАЛОГА ЕСЛИ В ПРЕДИДУЩЕМ МЫ ПОСТАВИЛИ УСЛОВИЕ ПО КОТОРОМУ ЕГО НЕ БУДЕТ
- ================================================================================
- ==========
- прописываем в файле info_какойто.xml
- В конце определяющего диалога ставим
- название поршня
- под id квеста(диалога) который не должен появиться прописываем
- название поршня
- Теперь диалог не появится.
- ===============================================================================
- ---------------------------------------------- ---------------------------------
- npc здох
- function dead_body_spawn()
- npc=alife():create("чувак 1",vector():set(-243.6, -0.67, 309.62), 366014, 20)
- npc:kill(npc)
- end
- ----------------------------------------------------------------------------------
- ------------------------------------ -------------------------------------------------
- Забираем всё бабло у ГГ
- function gop_stop_actor(actor, npc)
- local actor = db.actor
- all_money_actor = actor:money()
- if actor and npc then
- dialogs.relocate_money(npc, all_money_actor, "out")
- end
- end
- ------------------------------------------------------------------------------------------
- ============================= ==========Телепортация актора===============================
- Чтобы ГГ после диалога телепортировался в нужную точку, то можно воспользоваться функцией
- function teleport_actor(actor, npc, p)
- local point = patrol(p[1])
- local look = patrol(p[2])
- db.actor:set_actor_position(point:point(0))
- local dir = look:point(0):sub(point:point(0))
- db.actor:set_actor_direction(-dir:getH())
- end
- Это функция есть в файле xr_effects.script. Как она работает? Как-то так (кусочек файла sr_cutscene.script):
- xr_effects.teleport_actor(db.actor, nil, {self.st.point, self.st.look})
- По всей видимости можно вместо фигурных скобочек указывать нужные координаты класса вектор.
- А можно просто воспользоваться функцие set_actor_position и set_actor_direction по отдельности. Первую- для установки позиции, вторая - для установки взгляда. Здесь вызов идет вот-так:
- db.actor:set_actor_position(patrol("t_walk_2"):point(0))
- , а если проще, то можно писать просто координаты.
- Эти функции работают ТОЛЬКО в пределах уровня на котором находиться ГГ!!!
- ---------------------------------------------------------------------------------------------------------
- Автор: Неизвестен
- ---------------------------------------------------------------------------------------------------------
- Вот еще:
- Закрыть спойлер
- "Функции"
- "Спавн НПС(или предмета)"
- Код
- function spawn_x14 ()
- alife():create("Секция",vector():set(-7.32,-34.48,13.18),1542,2799)
- end
- ---------------------------------------------
- "Проверка на взятие предмета и выдача инфопоршня"
- Функции типа "Проверка на взятие предмета..." я лично использую в квестах тегами
- Код
- <function_complete>файл.функция</function_complete>
- Код
- function search_weapon_complete1(actor, npc)
- if db.actor ~= nil then
- if db.actor:object("ПРЕДМЕТ") then
- db.actor:give_info_portion("ПОРШЕНЬ")
- return true
- end
- end
- return false
- end
- ---------------------------------------------
- "Проверка на взятие нескольких разных предметов и выдача инфопоршня"
- Код
- local t_wpn = {"ПРЕДМЕТ1", "ПРЕДМЕТ1", "ПРЕДМЕТ1"}
- function search_ALL_weapons_complete()
- local gg = db.actor
- if gg then
- for i=1,#t_wpn do
- if not gg:object(t_wpn) then
- return false
- end
- end
- gg:give_info_portion("ПОРШЕНЬ")
- return true
- end
- return false
- end
- ---------------------------------------------
- "Проверка на взятие N-колличества одного и того же предмета(например 10 аптечек)"
- Основная функция:
- Код
- function Actor_Has_ListItems(sSection,iNum)
- if not iNum then iNum = 1 end
- local oActor = db.actor
- local iCnt = 0
- if oActor and sSection then
- oActor:iterate_inventory(
- function (dummy, oItem)
- if oItem:section() == sSection then
- iCnt = iCnt + 1
- if iCnt >= iNum then
- return true --/> актор имеет N предметов
- end
- end
- end
- ,nil)
- end
- return iCnt >= iNum --/> имеет ли актор N предметов
- endВызов:
- Код
- function search_2_bumazhki_sidr_complete()
- return this.Actor_Has_ListItems("medkit", 10)
- end
- ---------------------------------------------
- "Проверка на взятие предмета(обычная)"
- Код
- function search_weapon_complete(actor, npc)
- if db.actor ~= nil then
- return db.actor:object("wpn_vintorez")~=nil
- end
- return false
- end
- ---------------------------------------------
- "Вызов .РРЕ эфекта через диалог(Типа Удар в морду)"
- Код
- function punch()
- -- set_inactivate_input_time(30)
- local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]])
- snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
- level.add_cam_effector("camera_effects\fusker.anm", 999, false, "")
- end
- ---------------------------------------------
- "Уменьшение(Увеличение)репутации ГГ"
- Отнимаем:
- Код
- function reputation_down_10(stalker, player)
- db.actor:change_character_reputation(db.actor:character_reputation() - 10)
- end
- Плюсуем:
- Код
- function reputation_up_10(stalker, player)
- db.actor:change_character_reputation(db.actor:character_reputation() + 10)
- end
- ---------------------------------------------
- "Уменьшение здоровья"
- Код
- function malo_hp()
- db.actor.health = -0.3 --Минус 30% дезек
- end
- ---------------------------------------------
- "Удаление нескольких одинаковых предметов(например удалим 7 аптечек)"
- Код
- function Delete_2_bumazhki_sidora_from_Actor()
- local cnt = db.actor:object_count()
- local ch=0
- for i=0, cnt-1 do
- local item = db.actor:object(i)
- if item:section() == "medkit" then
- local sobj = alife():object(item:id())
- if sobj then
- alife():release(sobj,true)
- ch = ch+1
- if ch == 7 then --7 - кол-во удаляемых аптечек
- break end
- end
- end
- end
- end
- -----------------------------------------------------------------------
- "Функция рамдомного удаления предметов из инвентаря ГГ"
- Код
- function ReleaseRandomItem(num)
- local actor = db.actor
- local cnt = actor:object_count()
- if cnt<num then return end
- for i=1,num do
- local item = actor:object(math.random(0, cnt-1))
- local sobj = alife():object(item:id())
- if sobj then alife():release(sobj,true)
- cnt = actor:object_count()
- end
- end
- end
- вызывать так:
- Код
- ReleaseRandomItem(5) -- 5 - число удаляемых предметов
- Вызов через диалог:
- Код
- function RRI()
- имя_файла.ReleaseRandomItem(5)
- end
- Пример:
- Код
- <action>имя_файла.RRI</action>
- ---------------------------------------------
- "Заходим на локацию и меняем группировку"
- Код
- function join_monolith (actor, npc) -- ставить на дельта апдейт
- printf ("ACTOR NOW IN имя группировки COMMUNITY")
- if db.actor and level_id.имя уровня then -- пример l01_escape и т.п
- db.actor:set_character_community ("имя группировки", 0, 0)
- end
- end
- ---------------------------------------------
- "Удаление всего и вся из инвентаря - и пда, и болт, и фонарик, и бинокль, и детектор"
- Код
- function test_index()
- local cnt = db.actor:object_count()
- for i=0, cnt-1 do
- local item = db.actor:object(i)
- local sobj = alife():object(item:id())
- if sobj then
- alife():release(sobj,true)
- end
- end
- end
- ---------------------------------------------
- "Таймер"
- "Вариант без вывода на худ"
- Код
- local iTimer
- function Start_Timer_5_minutes() --/ (пере)запуск таймера (из диалога)
- iTimer = time_global() + 5*1000 --/ взводим таймер на 5cek
- end
- function Timer_N_minutes() --/ вызывается из ':update' сталкер-биндера
- if iTimer and iTimer < time_global() then --/ проверка текущего значения
- iTimer = nil --/ выключаем таймер
- скрипт.функция() --/ выполняем действие
- end
- end
- "Вариант с выводом на худ"
- Код
- local iTimer
- local last
- function start_timer_minutes_test(seconds)
- if last~= nil then
- iTimer = time_global()+last --/ взводим таймер на остаток времени last
- else
- iTimer = time_global() + 7*1000 --/ взводим таймер например 7 сек.
- end
- end
- function timer_n_minutes_test() --/ вызывается из ':update' сталкер-биндера
- if iTimer then
- last=iTimer-time_global() -- присваиваем переменной остаток времени до конца работы таймера
- if iTimer < time_global() then
- iTimer = nil --/ выключаем таймер
- last=nil
- СКРИПТ.ФУНКЦИЯ--/ выполняем действие
- end
- end
- end
- -- выводим значение таймера в обратном отсчете на худ
- function hud_static() --/ вызывается из ':update' сталкер-биндера
- local hud = get_hud()
- local st
- if iTimer then
- st = hud:GetCustomStatic("hud_timer")
- if st==nil then
- hud:AddCustomStatic("hud_timer", true)
- st = hud:GetCustomStatic("hud_timer")
- end
- if last~=nil then
- local hours = math.floor(last/3600000)
- local minutes = math.floor(last/60000 - hours*60)
- local seconds = math.floor(last/1000 - hours*3600 - minutes*60)
- local text = string.format("%02d:%02d:%02d",hours,minutes,seconds) -- выводим время в формате 00:00:00
- --local text=string.format("%.f",last/1000)
- st:wnd():SetTextST(text)
- end
- else
- if hud:GetCustomStatic("hud_timer")~=nil then
- hud:RemoveCustomStatic("hud_timer")
- end
- end
- end
- ---------------------------------------------
- "Расчет попадания в НПС(Выводится информации - в какую часть тела попал)"
- Автор:Николай ФеНиКс(ФеНиКс)
- Код
- if bone_index > 0 and who then
- if who:id() == db.actor:id() then --/ для актора
- local oActiveItem = db.actor:object("wpn_svd")
- if oActiveItem then --/ у актера проверяемое оружие
- local kuda = ""
- if bone_index == 14 or bone_index == 15 then
- kuda = "Ранен в глаз"
- elseif bone_index == 13 then
- kuda = "Ранен в голову"
- elseif bone_index == 16 then
- kuda = "Ранен в челюсть"
- elseif bone_index == 17 then
- kuda = "Ранен в шею"
- elseif bone_index == 9 or bone_index == 10 or bone_index == 11 or bone_index == 18 then
- kuda = "Ранен в грудь"
- elseif bone_index >= 1 and bone_index <= 8 then
- kuda = "Ранен в ногу"
- elseif bone_index >= 19 and bone_index <= 42 then
- kuda = "Ранен в руку"
- end
- news_manager.send_tip(db.actor, kuda, nil, nil, 2000)
- end
- end
- end
- Вставлять функцию в мотиватор в функцию hit_callbak.
- Например, после этого:
- Код
- if self.st.hit then
- xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index)
- end
- ---------------------------------------------
- "Функция для квестов(типа убить группу сталкеров, например, пятерых)"
- Код
- function mochim_five_nps()
- if has_alife_info("первый_грохнут") and
- has_alife_info("второй_грохнут") and
- has_alife_info("третий_грохнут") and
- has_alife_info("четвертый_грохнут") and
- has_alife_info("и_пятый_наконец") then
- return true
- else
- return false
- end
- end
- Использование:
- В теле квеста пишем complete'ы:
- Код
- <infoportion_complete>esc_kvest_secret_merc_kill_poslannick</infoportion_complete>
- <function_complete>имя_файла.mochim_five_nps</function_complete>
- После выполнения условий функции mochim_five_nps выдается поршень esc_kvest_secret_merc_kill_poslannick и задание обновляется.
- ---------------------------------------------
- "Спавн предмета или НПС с меткой в ПДА"
- Код
- local ObjId=0
- function pda_killer_spawn()
- local obj= alife():create("pda_merc_killer_glav",vector():set(-223.700,-7.678,-129.688),17000,281)
- local text = "Текст метки"
- level.map_add_object_spot_ser(obj.id, "blue_location", text) --/blue_location - тип метки
- ObjId=obj.id
- end
- Эту метку можно удалить так:
- Код
- function delete_spot()
- for a=1,65534 do --Перебор айди
- local obj = alife():object(a)
- if obj and obj:section_name() == "pda_merc_killer_glav" then --/pda_merc_killer_glav -- Секция предмета или НПС
- level.map_remove_object_spot(obj.id,"blue_location")
- break
- end
- end
- end
- ---------------------------------------------
- "Вешаем метку в ПДА по Sid'у(Например на Волка)"
- Код
- local obj = alife():story_object( 6 ) -- 6 - сид Волка
- local obj_id = obj.id
- function add_spot_on_map(obj_id,type,text)
- if obj_id then
- if not text then text = "no_text" end
- level.map_add_object_spot_ser(obj_id, type, text)
- end
- end
- Вызываем:
- Код
- function add_spot_on_map2(obj_id,type,text)
- имя_файла.add_spot_on_map(obj.id,"green_location","Текст")
- end
- Метку можно убрать вот так:
- Код
- local obj = alife():story_object( 6 )
- local obj_id = obj.id
- function remove_spot_from_map(obj_id,type)
- if obj_id and level.map_has_object_spot(obj_id, type) ~= 0 then
- level.map_remove_object_spot(obj_id, type)
- end
- end
- эту вызывать:
- Код
- function remove_spot()
- this.remove_spot_from_map(obj.id,"green_location")
- end
- ---------------------------------------------
- "Вывод сообщения на экран"
- Код
- function kvest_search_2_bumazhki_sidr_complete()
- news_manager.send_tip(db.actor, "%c[255,255,128,128]Автор сообщения\n%c[default]Текст сообщения", 0, "wolf", 17000)
- end
- ---------------------------------------------
- "Еще способ вывода сообщения"
- Код
- local text = "Здесь текст"
- function test()
- news_manager.send_tip(db.actor, text, 0, "trader", 20000)
- end
- ---------------------------------------------
- "Заставляем диалог появиться самому на примере Волка(подходим к Волку и диалог появляется сам)"
- Спавним рестриктор на координатах Волка с радиусом метра 2.Делаем логику рестриктору:
- Код
- [logic]
- active = sr_idle
- [sr_idle]
- on_actor_inside = %+esc_on_talk% ;Выдача поршня
- ;Или так(Выбрать одно):
- on_actor_inside = %=on_talk%" ;Функция
- Если выбрали поршень, то создаем его:
- Код
- <info_portion id="esc_on_talk">
- <action>СКРИПТ.on_talk</action>
- </info_portion>
- Вызываем функцию и видим диалог:
- Код
- function on_talk()
- local npc = level_object_by_sid(006)
- db.actor:run_talk_dialog(npc)
- end
- ---------------------------------------------
- "Делаем некоторых НПС бессмертными"
- Код
- function immotral()
- local npc1 = level_object_by_sid(006) --волк
- local npc2 = level_object_by_sid(092) --проводник
- local npc3 = level_object_by_sid(032)-- кузнецов
- local npc4= level_object_by_sid(100) --Серый
- if npc1 then npc1.health = 1 end
- if npc2 then npc2.health = 1 end
- if npc3 then npc3.health = 1 end
- if npc4 then npc4.health = 1 end
- endВ голову дохнут.
- ---------------------------------------------
- "Отправляем НПС в другую группировку(например Волка)"
- Код
- function name()
- local npc = level_object_by_sid(006)
- npc:set_character_community("имя группировки", 0, 0)
- end
- Если разговариваем с самим Волком, то вызываем эту функцию:
- Код
- function name(actor, npc)
- npc:set_character_community("имя группировки", 0, 0)
- end
- ---------------------------------------------
- "Удалим предмет из игры (или сталкера из игры(Удалим Волка))"
- Код
- function dell_kluk_final()
- local se_obj = alife():object("esc_wolf")
- if se_obj then
- alife():release(se_obj, true)
- end
- end
- ---------------------------------------------
- "При вызове происходит использование антирада"
- Код
- function do_something()
- local item = db.actor:object("antirad")
- if antirad then
- db.actor:eat(item)
- end
- end
- Должно быть так:
- Код
- function do_something()
- local item = db.actor:object("antirad")
- if item then
- db.actor:eat(item)
- end
- end
- ---------------------------------------------
- "Проверка:Какой костюм одет(не одет)(например, Экзоскелет)"
- Надет ли костюм
- Код
- function check_outfit()
- local outfit = db.actor:item_in_slot(6)
- if outfit:section() == "exo_outfit" then --/Если в 6 слоте присутствует "exo_outfit" тогда
- return true --/"exo_outfit" одет
- else
- return false --/"exo_outfit" не одет
- end
- end
- Не надет ли костюм
- Код
- function check_outfit()
- local outfit = db.actor:item_in_slot(6)
- if outfit:section() == "exo_outfit" then --/Если в 6 слоте присутствует "exo_outfit" тогда
- return true --/"exo_outfit" не одет
- else
- return false --/"exo_outfit" одет
- end
- end
- ---------------------------------------------
- "Наносим хит предмету"
- Код
- function hit_nanesti()
- for a=1,65635,1 do
- local obj=level.object_by_id(a)
- if obj and string.find(obj:name(),"ПРЕДМЕТ") then
- local h = hit ();
- h.power = 10000;
- h.direction = vector():set (0, 0, 0);
- h.impulse = 0;
- h.draftsman = obj;
- h.type = hit.explosion;
- obj:hit (h);
- end
- end
- end
- ---------------------------------------------
- "Проверяет, находится ли, например, Волк на локации Кордон"
- Код
- function rest()
- local npc = level_object_by_sid(006) --волк
- if npc and level.name() == "l01_escape" then
- return true
- else
- return false
- end
- end
- ---------------------------------------------
- "Проверка:Например на Кордоне находится ГГ или нет"
- Код
- function go_to_marsh_complete()
- if level_name == "l01escape" then
- return true
- else
- return false
- end
- end
- ---------------------------------------------
- Еще функции (Для ТЧ).
- "Функции"
- "Убить НПС"
- Код
- function kill_stalker(actor, npc)
- npc:kill(npc)
- end
- "Как, через скрипт, сделать НПС врагом?"
- Код
- function enemy(actor, npc)
- npc:set_relation (game_object.enemy, db.actor)
- end
- "Как создать функцию вызова звукового сигнала и проиграть ее в голове ГГ?"
- Код
- function any_sound()
- local snd = sound_object([[characters_voice\human_03\stalker\talk\leaves\leaves_42]])
- snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0)
- end
- "Еще один способ спавна НПС (или предмета)."
- Код
- function НАЗВАНИЕ_create()
- local x=
- local y=
- local z=
- local level_vertex=
- local game_vertex_id=
- alife():create("НАЗВАНИЕ",vector():set(x,y,z),level_vertex,game_vertex_id)
- end
- "Как запустить много функций одной связкой?"
- Например:
- Код
- function all_spawn()
- НАЗВАНИЕ_create()
- any_sound()
- end
- function НАЗВАНИЕ_create()
- local x=
- local y=
- local z=
- local level_vertex=
- local game_vertex_id=
- alife():create("НАЗВАНИЕ",vector():set(x,y,z),level_vertex,game_vertex_id)
- end
- function any_sound()
- local snd = sound_object([[characters_voice\human_03\stalker\talk\leaves\leaves_42]])
- snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0)
- end
- ---------------------------------------------
- "Различные скриптовые проверки (для совсем «зелёных»):"
- (Для SCoP)
- 1. Проверка на то, что ГГ находится в укрытии от выброса:
- Код
- function название_функции()
- if surge_manager.actor_in_cover() then
- --действие
- end
- end
- 2. Проверка на то, что ГГ НЕ находится в укрытии от выброса:
- Код
- function название_функции()
- if not surge_manager.actor_in_cover() then
- --действие
- end
- end
- 3. Проверка на то, что ГГ жив:
- Код
- function название_функции()
- if db.actor:alive() then
- --действие
- end
- end
- 4. Проверка на то, что ГГ мёртв:
- Код
- function название_функции()
- if not db.actor:alive() then
- --действие
- end
- end
- 5. Проверка на то, что в данный момент идёт выброс:
- Код
- function название_функции()
- if surge_manager.is_started() then
- --действие
- end
- end
- 6. Проверка на то, что в данный момент нет выброса:
- Код
- function название_функции()
- if surge_manager.is_finished() then
- --действие
- end
- end
- 7. Проверка на наличие заданного кол-а денег у ГГ:
- Код
- function название_функции()
- local money = 1000 - заданное кол-во денег
- if db.actor:money() >= money then
- --действие
- end
- end
- 8. Проверка на отсутствие заданного кол-а денег у ГГ:
- Код
- function название_функции()
- local money = 1000 - заданное кол-во денег
- if db.actor:money() < money then
- --действие
- end
- end
- 9. Проверка на то, что у ГГ совсем нет денег:
- Код
- function название_функции()
- if db.actor:money() == 0 then
- --действие
- end
- end
- 10. Проверка на то, что ГГ имеет при себе какой-либо предмет:
- Код
- function название_функции()
- if db.actor:object("предмет") ~= nil then
- --действие
- end
- end
- 11. Проверка на то, что ГГ НЕ имеет при себе какой-либо предмет:
- Код
- function название_функции()
- if db.actor:object("предмет") == nil then
- --действие
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment