Гость



Здесь есть всё:
Моды, уроки модостроения
Новости
Зарегайся.
Регистрация
Вход!

---


200

Какое оружие вы предпочитаете
Всего ответов: 56

 

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моды » Модостроение по Зов Припяти » Функции диологов
Функции диологов
61dimon161Дата: Вторник, 12.04.2011, 23:11 | Сообщение # 1
Мастер
Группа: Администраторы
Сообщений: 65
Награды: 5
Репутация: 10002
Статус: Offline
=======================================================================
ВЫДАЁМ ПРЕДМЕТ АКТОРУ
=======================================================================
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
------------------------------------------------------------------------------------------
============================= ==========Телепортация актора===============================
Чтобы ГГ после диалога телепортировался в нужную точку, то можно воспользоваться функцией[code]
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))

, а если проще, то можно писать просто координаты.
Эти функции работают ТОЛЬКО в пределах уровня на котором находиться ГГ!!!
======================================================================================================

 
Форум » Моды » Модостроение по Зов Припяти » Функции диологов
  • Страница 1 из 1
  • 1
Поиск:

 

Cайт мондига для сталкера и не толька
Xabara.net
AZP_TEAM AZP_TEAM



  Используются технологии uCoz