Полезные методы и функции — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Полезные методы и функции — различия между версиями

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

Перейти к: навигация, поиск
(Отбираем предмет у ГГ)
Строка 114: Строка 114:
 
Если надо больше меняем цифру 2 на нужную нам.
 
Если надо больше меняем цифру 2 на нужную нам.
  
      СПАВНИМ ВЕЩЬ В РЮКЗАК ГГ
+
== Спавним вещь в инвентарь ГГ ==
 
<lua>function название функции()
 
<lua>function название функции()
 
local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
 
local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
Строка 123: Строка 123:
  
  
ПРОВЕРКА НАЛИЧИЯ У АКТОРА ПРЕДМЕТА
+
== Проверка предмета у ГГ ==
 
Вариант первый
 
Вариант первый
 
<lua>function Название функции()
 
<lua>function Название функции()
Строка 146: Строка 146:
 
<code><precondition>имя скрипта.название функции</precondition></code>
 
<code><precondition>имя скрипта.название функции</precondition></code>
  
ПРОВЕРКА ВЕЩЕЙ У ГГ
+
Диалоговый вариант.
 
<lua>function Название функции(first_speaker, second_speaker)
 
<lua>function Название функции(first_speaker, second_speaker)
 
     return first_speaker:object("название предмета") ~= nil or
 
     return first_speaker:object("название предмета") ~= nil or
Строка 159: Строка 159:
 
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
 
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
  
ПРОВЕРКА ДЕНЕГ У ГГ
+
== Проверка денег у ГГ==
 
Вариант первый(используют ПЫС)
 
Вариант первый(используют ПЫС)
  
Строка 180: Строка 180:
 
<code><precondition>имя скрипта.название функции</precondition></code>
 
<code><precondition>имя скрипта.название функции</precondition></code>
  
СПАВН ПРЕДМЕТА
+
== Спавн динамики ==
 
<lua>function spawn_vintar()
 
<lua>function spawn_vintar()
 
alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
 
alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
Строка 190: Строка 190:
  
  
МГНОВЕННАЯ СМЕРТЬ ГГ
+
== Убийство ГГ ==
 
<lua>function название функции(npc, actor)
 
<lua>function название функции(npc, actor)
 
     npc:kill(actor)
 
     npc:kill(actor)

Версия 19:39, 5 июля 2016


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

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)
    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>

ПРОВЕРКА КОЛ_ВА ОДИНАКОВЫХ ПРЕДМЕТОВ

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>

ЛЕЧЕНИЕ ГГ Вставим этот экшен в диалог:

<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>


ПРОВЕРКА СМЕРТИ NPC

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


В диалог:

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

Авторы

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

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

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

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