Полезные методы и функции — S.T.A.L.K.E.R. Inside Wiki

Полезные методы и функции

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск


Вступление ГГ в группировку!

1.Создаем файл ваше_название_скприпта.script в папке gamedata/scripts 2. Открываем его и пишем: --меняем группировку ГГ

function new_group(actor, npc)
if npc:character_community() ~= "(dolg)" then 
	npc:set_character_community("dolg", 0, 0) 
end
end

Выдаём функцию при разговоре с НПС

НПС вступает в группировку

function ваше_название_функции(npc, actor)

Вызываем также, из любого диалога


Нельзя взять оружие без брони

Пишем функцию в любом скрипе:

 
function ваше_название_функции()
	local armor = db.actor:item_in_slot(6) -- слот брони
	local weapon = db.actor:item_in_slot(2) -- слот оружия (для пистолетов в оригинале слот 1)
	if db.actor:active_slot()==2 and weapon then -- за место 2 пишем слот оружия еще раз
		local tmp = armor and armor:section() or ""
		if not string.find(tmp, "пишем_название_брони") and (weapon:section()=="пишем_название_оружия") then
			-- пример:if (not string.find(tmp, "exo" )) and weapon:section()=="wpn_pkm" then
 
			-- скидываем оружие из слота в инвентарь
			-- выкидываем оружие, и тем самым освобождаем слот
			db.actor:drop_item(weapon)
			-- спавним ствол с той же секцией, чтобы он занял слот
			local tmpw =  alife():create(weapon:section(), db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
			-- подбираем выкинутый предмет обратно в инвентарь
			-- т.к. слот как бы занят он ляжет в рюкзак
			db.actor:transfer_item(weapon,db.actor)
			-- удаляем оружие в слоте
			alife():release(tmpw)
 
			-- выводим сообщение на экран о том, что нельзя брать оружие без определённой брони
			news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000)
		end
	end
end

Далее идем по пути gamedata/script/bind_stalker.script Функция:

function actor_binder:update(delta)

Сразу ниже неё пиши вызов в формате :

название_файла.название_функции

Можешь написать эту функцию в любом файле из папки scripts, а можешь создать свой файл и назвать, скажем, my_script, и написать там. Должно быть так : Код

function actor_binder:update(delta)
my_script.check_armor()


Удаление предмета с заданным именем из игры

function name_function()
local se_obj = alife():object("сюда_пишем_что_удалять_будем")
if se_obj then
	alife():release(se_obj, true)
end
end

ПРИМЕР --' убираем финального Клыка

function dell_kluk_final()
local se_obj = alife():object("final_kluk")
if se_obj then
	alife():release(se_obj, true)
end
end


Я добавлю может кому и пригодится.Болотный Доктор

Выдаём предмет ГГ

function название функции (first_speaker, second_speaker)
	dialogs.relocate_item_section(second_speaker, "название предмета", "in") 
end

Размещается в файлах скрипт.

Выдача поршня вставляется под строку действия.

<action>название скрипта.название функции</action>

Примечание, что бы выдать два одинаковых предмета пишем

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

размещается в файлах скрипт

выдача поршня вставляется под строку действия:

<action>название скрипта.название функции</action>

Примечание, что бы отобрать два одинаковых предмета пишем

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

В диалог:

<action>название скрипта.название функции</action>


Проверка предмета у ГГ

Вариант первый

function Название функции()
    if db.actor:object("название предмета") then
        return true
    end
    return false
end

в диалог:

<precondition>имя скрипта.название функции</precondition>

<---------Вариант второй)------------------>

function название функции(first_speaker, second_speaker)
    return first_speaker:object("название предмета") ~= nil
end

в диалог:

<precondition>имя скрипта.название функции</precondition>

Диалоговый вариант.

function Название функции(first_speaker, second_speaker)
    return first_speaker:object("название предмета") ~= nil or
             first_speaker:object("название предмета") ~= nil or
             first_speaker:object("название предмета") ~= nil
end

в диалог:

<precondition>имя скрипта.название функции</precondition>

описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора

Проверка кол-ва предметов у ГГ

function название функции(first_speaker, second_speaker)
	local item_sections = {
		["medkit"] = 5, -- к примеру 5 аптечек
		["bandage"] = 2} -- и два бинта
 
	local function calc(temp, item)
		local sect = item:section()
		if item_sections[sect] and item_sections[sect]>0 then
			if item_sections[sect]==1 then
				item_sections[sect] = nil
			else
				item_sections[sect] = item_sections[sect] - 1
			end
		end
	end
 
	db.actor:iterate_inventory(calc, db.actor)
	return next(item_sections)==nil
end 
 

В диалог:

<precondition>имя скрипта.название функции</precondition>

Проверка денег у ГГ

Вариант первый(используют ПЫС)

function название функции(first_speaker, second_speaker)
    return first_speaker:money() >= 2000
end

в диалог:

<precondition>имя скрипта.название функции</precondition>

<-----------Вариант два--------------> Использовал на ТЧ, но и в ЗП работает

function название функции()
return db.actor:money()>=10000
end

В диалог:

<precondition>имя скрипта.название функции</precondition>

Спавн динамики

function spawn_vintar()
alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
end

В диалог:

<action>название скрипта.название функции</action>


Убийство ГГ

function название функции(npc, actor)
    npc:kill(actor)
end

В диалог:

<action>название скрипта.название функции</action>


Лечение ГГ

Вставим этот экшен в диалог:

<action>dialogs.medic_magic_potion</action>

Выдача денег от НПС к ГГ

function название функции(first_speaker, second_speaker)
    dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000)
end

В диалог:

<action>название скрипта.название функции</action>


Выдача денег ГГ от НПС

function название функции(actor, npc)
   dialogs.relocate_money(npc,кол-во,"out")   
end

В диалог:

<action>название скрипта.название функции</action>


НПС становится врагом после определенной ветки диалога или другом

-5000 враг 5000 друг

function название скрипта(actor, npc)                                            
    npc:force_set_goodwill(-5000, actor)
end
<action>название скрипта.название функции</action>


Проверка инфопорции

function название функции проверки(actor,npc)
   return has_alife_info("инфо смерти")
end


В диалог:

<precondition>имя скрипта.название функции</precondition>

Авторы

Оригинальный вид статьи:

  • Rez@nyi
  • Меченый
  • Болотный Доктор

Переоформление, перестройка, дополнение статьи:

  • FantomICW
  • FX
Другие места
LANGUAGE