Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Спавн и логика
denis2000Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                    local reason = string.format(fmt, ...)
                    error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
makdmДата: Вс, 27.09.2015, 12:38 | Сообщение # 1201
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

СерёгаПепел, логика ph_idle

Код
[logic]
active = ph_idle@enable

[ph_idle@enable]
nonscript_usable = true
tips = st_search_treasure
on_use = ph_idle@enable_1 %+zat_b18_actor_enemy%

[ph_idle@enable_1]
nonscript_usable = true
tips = st_search_treasure


Терпение......
И все получится!
 
СерёгаПепелДата: Вс, 27.09.2015, 13:14 | Сообщение # 1202
Гражданский
Пользователи
Сообщений: 17
Награды: 0
Репутация: [ 8 ]

makdm, а эту логику приделать к рюкзаку?

Вступи в Смерть, объедини Зону!
 
OtamanUaДата: Сб, 17.10.2015, 12:26 | Сообщение # 1203
Удаленные



Здравствуйте, вообщем надоело, что на Болотах ЧН остаются ренегаты, на северном хуторе, дороге в Агропром и т.д. В файле faction_csky.ltx изменил уровни экспансии, теперь все захватывают кроме Северного хутора. Уже специально прописал отдельный уровень экспансии для этого:

[expansion_3]
base_squad_number = 20
respawn_idle_time = 10; 20
respawn_hours = 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
precondition_target_order = order
precondition_target = mar_smart_terrain_12_2

Теперь задание появляется его захватить и отряды выдвигаются на его захват, но вот беда, они идут ровно до ближайшего свободного смарта по пути на северный хутор, занимают его и ВСЁ! И не идут дальше, а новые отряды не появляются для его захвата... Помогите решить проблему пожалуйста.

===

И еще, что то не раздуплюсь как спавнить сквады. В ЗП спавнил все было нормально, а в ЧН что-то не выходит. Вобщем первым делом создаем НПЦ, или берем уже готовые (сим_дефолт_сталкер_0). Потом создаем сквад в сквад_дескр_локация как-то так:
[лока_сквад_кек]
auto_id = true
faction = групировка
npc = сим_дефолт_сталкер_0, сим_дефолт_сталкер_0

Дальше как я понял надо вказать его в файле группировки: faction_групировка.лтх, после [start_position] написать:
лока_сквад_кек = смарт_терейн

И получаю вылет с отсылкой на скрипты... Не подскажете а чем проблема? Может его нужно еще где-то регистрировать, этот сквад?


Сообщение отредактировал OtamanUa - Сб, 17.10.2015, 12:26
 
denis2000Дата: Сб, 17.10.2015, 16:53 | Сообщение # 1204
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата OtamanUa ()
И получаю вылет с отсылкой на скрипты... Не подскажете а чем проблема?

Выкладываем лог. И подробно правки.
А по первой части вопроса - по моему есть несколько модов в которых захват баз противника реализован не хотите поковырять их?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Сб, 31.10.2015, 11:29 | Сообщение # 1205
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

В аддоне Время Альянса есть кодовые рюкзаки. При неверном коде они взрываются.

Попробовал сделать на их базе персональные рюкзаки неписей. Код разминирования у непися в квестовой записке. Записку можно снять с трупа. Или получить как награду за квест. Недостаток этого способа очевиден. Зная код, например, запомнив с прошлого прохождения, можно разминировать рюкзак до получения записки. Я попробовал сделать так.

[cut=Тестовый рюкзак][logic]
active = ph_idle

[ph_idle]
on_info = {+test_open} ph_idle@open

[ph_idle@notes]
on_info = {=actor_has_item(test_open_notes)} ph_code@open, ph_idle@random

[ph_idle@random]
on_info = {~50} ph_idle@1, ph_idle@2

[ph_idle@1]
on_info = {~50} ph_code@default_1, ph_code@default_2

[ph_idle@2]
on_info = {~50} ph_code@default_3, ph_code@default_4

[ph_code@default_1]
code = 111
on_code = ph_idle@open %+test_open =destroy_object(story:test_open_notes)%
on_info = {+test_open} ph_idle@open
on_info2 = {=actor_has_item(test_open_notes)} ph_code@open
tips = st_mine_treasure_open
explode = true

[ph_code@default_2]
code = 222
on_code = ph_idle@open %+test_open =destroy_object(story:test_open_notes)%
on_info = {+test_open} ph_idle@open
on_info2 = {=actor_has_item(test_open_notes)} ph_code@open
tips = st_mine_treasure_open
explode = true

[ph_code@default_3]
code = 333
on_code = ph_idle@open %+test_open =destroy_object(story:test_open_notes)%
on_info = {+test_open} ph_idle@open
on_info2 = {=actor_has_item(test_open_notes)} ph_code@open
tips = st_mine_treasure_open
explode = true

[ph_code@default_4]
code = 444
on_code = ph_idle@open %+test_open =destroy_object(story:test_open_notes)%
on_info = {+test_open} ph_idle@open
on_info2 = {=actor_has_item(test_open_notes)} ph_code@open
tips = st_mine_treasure_open
explode = true

[ph_code@open]
code = 9211
on_code = ph_idle@open %+test_open =remove_item(test_open_notes)%
on_info = {+test_open} ph_idle@open
tips = st_mine_treasure_open
explode = true

[ph_idle@open]
nonscript_usable = true
tips = st_mine_treasure_use[/cut]

test_open -- инфопорция открытия
test_open_notes -- записка с кодом

При данной схеме до получения записки выбирается один код из четырех. Разминировать рюкзак можно, но сложно. Тем более, что выбор кода производится при каждом входе рюкзака в онлайн. Число кодов можно увеличить.

Возник вопрос. Можно ли сгенерировать случайное число? Например, от 001 до 999. И использовать его для кодового рюкзака. И отобразить это число в записке. В записке будет строка вида. Код разминирования - 377.

Как это правильно сделать?
 
makdmДата: Сб, 31.10.2015, 12:40 | Сообщение # 1206
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
Зная код, например, запомнив с прошлого прохождения, можно разминировать рюкзак до получения записки


sergej5500, мод "Время Альянса" морально устарел в плане скриптов.
Смотреть нужно мод "Припять. Точка Отсчёта"
Там эта проблема решена.
Т.е. мало знать код от тайника. Нужно ещё этот код получить честным путём.
В логику тайника добавлены параметры и изменена функция открытия рюкзака.
Если просто тупо ввести даже правильный код, то рюкзак взорвётся, если код ещё не получен по игре.

Возьмите готовое решение и не мучайтесь.


Терпение......
И все получится!


Сообщение отредактировал makdm - Сб, 31.10.2015, 12:49
 
sergej5500Дата: Вт, 17.11.2015, 23:17 | Сообщение # 1207
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер.

Адаптировал на чистый Зов Припяти схему mob_companion из мода Припять - Точка Отсчёта.

[cut=mob_companion.script]--[[ Схема Компаньон для связки Актор - Монстр
makdm, 2014 для COP 1.6.0.2.
]]--

class "mob_companion"

function mob_companion:__init( obj, storage )
self.object = obj
self.st = storage
self.opened_doors = {}
end

function mob_companion:reset_scheme()
mob_state_mgr.set_state( self.object, db.actor, self.st.state )
xr_logic.mob_capture( self.object, true )
self.assist_point = nil
self.object:disable_talk()
end

function mob_companion:update(delta)

if not xr_logic.mob_captured( self.object ) then
self:reset_scheme()
return
end
if self.object:alive() and self.st.can_open_door then

local opened_doors = self:try_to_open_door()
utils.copy_table( self.opened_doors, opened_doors )

local closed_doors = self:try_to_close_door()
for id,v in pairs( closed_doors ) do
self.opened_doors[ id ] = nil
end

end
self:mob_move_to_actor()
end

function mob_companion:mob_move_to_actor()
local select_new_pt = false
local actor_position = db.actor:position()
local dist_from_self_to_actor = self.object:position():distance_to( actor_position )
local dist_from_assist_pt_to_actor = nil

if self.assist_point then
dist_from_assist_pt_to_actor = level.vertex_position( self.assist_point ):distance_to( actor_position )
end
if dist_from_self_to_actor >= self.st.desired_distance and
( not dist_from_assist_pt_to_actor or dist_from_assist_pt_to_actor >= self.st.desired_distance * 2 ) then
select_new_pt = true
end

if select_new_pt then
self.assist_point = self:select_position()
end
if not self.assist_point then
return
end

if self.object:level_vertex_id() ~= self.assist_point then
action( self.object, move( move.run_fwd, level.vertex_position( self.assist_point ) ) )
return
end

if self.st.target and self.st.target == "actor" then
local look_pt = utils.vector_copy_by_val( actor_position ):sub( self.object:position() )
look_pt:normalize()
action( self.object, look( look.direction, look_pt ), cond( cond.look_end ) )
end
action( self.object, anim( self.st.cur_anim_set, 0 ) )
end

function mob_companion:select_position()
local node_1_vertex_id = nil
local node_1_distance = nil
local node_2_vertex_id = nil
local node_2_distance = nil
local actor = db.actor
local desired_direction = nil

desired_direction = vector_rotate_y( actor:direction(), math.random( 50, 60 ) )
node_1_vertex_id = level.vertex_in_direction(actor:level_vertex_id(),desired_direction, self.st.desired_distance)
if self.object:accessible(node_1_vertex_id) ~= true or node_1_vertex_id == actor:level_vertex_id() then
node_1_vertex_id = nil
end
desired_direction = vector_rotate_y( actor:direction(), -math.random( 50, 60 ) )
node_2_vertex_id = level.vertex_in_direction( actor:level_vertex_id(), desired_direction, self.st.desired_distance )

if self.object:accessible(node_2_vertex_id) ~= true or node_2_vertex_id == actor:level_vertex_id() then
node_2_vertex_id = nil
end
if node_1_vertex_id ~= nil then
node_1_distance = self.object:position():distance_to_sqr( level.vertex_position( node_1_vertex_id ) )
else
node_1_distance = -1
end
if node_2_vertex_id ~= nil then
node_2_distance = self.object:position():distance_to_sqr( level.vertex_position( node_2_vertex_id ) )
else
node_2_distance = -1
end
if node_1_distance == -1 and node_2_distance == -1 then
return nil
end
if node_1_distance == -1 then
return node_2_vertex_id
end
if node_2_distance == -1 then
return node_1_vertex_id
end
if node_1_distance < node_2_distance then
return node_1_vertex_id
else
return node_2_vertex_id
end
end

function mob_companion:try_to_open_door()
local opened_doors = {}
local npc_position = self.object:position()
for id,position in pairs( db.level_doors ) do
if npc_position:distance_to_sqr( position ) <= 4 then
if db.storage[id].ph_door ~= nil then
local action = db.storage[ id ].ph_door.door_action
if action.st.not_for_npc == false and action.st.closed == true then
action:use_callback()
opened_doors[ id ] = true
end
end
end
end
return opened_doors
end

function mob_companion:try_to_close_door()
local npc_position = self.object:position()
local closed_doors = {}
for id, v in pairs( self.opened_doors ) do
if npc_position:distance_to_sqr( db.level_doors[ id ] ) > 4 then
if db.storage[id].ph_door ~= nil then
local action = db.storage[ id ].ph_door.door_action
if action.st.not_for_npc == false and action.st.closed ~= true then
action:use_callback()
closed_doors[ id ] = true
end
end
end
end
return closed_doors
end
----------------------------------------------------------------------------------------------------------------------------------------------
--binder
----------------------------------------------------------------------------------------------------------------------------------------------
function add_to_binder( npc, ini, scheme, section, storage )
local new_action = mob_companion( npc, storage )
xr_logic.subscribe_action_for_events( npc, storage, new_action )
end

function set_scheme( npc, ini, scheme, section, gulag_name )
local storage = xr_logic.assign_storage_and_bind( npc, ini, scheme, section )
storage.logic = xr_logic.cfg_get_switch_conditions( ini, section, npc )
storage.state = mob_state_mgr.get_state( ini, section, npc )
-- расстояние следования рядом с actor, если не указывать, то 2 метра
storage.desired_distance = utils.cfg_get_number( ini, section, "desired_distance", npc, false, 2 )
-- направление взгляда, когда рядом с actor, если не указывать, то куда смотрел, туда и будет смотреть
storage.target = utils.cfg_get_string( ini, section, "target", npc, false, "", nil )
-- может ли монстр сам открывать двери, если не указывать, то не может
storage.can_open_door = utils.cfg_get_bool( ini, section, "can_open_door", npc, false, false )
-- анимация, когда рядом со стоящим actor, если не указывать, то просто стоит рядом
local suggested_anim_set = utils.cfg_get_string( ini, section, "animation", npc, false, "", "stand_idle" )
storage.cur_anim_set = anim[ suggested_anim_set ]

--[[ --Возможные анмации
const attack = 7;
const capture_prepare = 1;
const danger = 0;
const eat = 4;
const free = 1;
const lie_idle = 3;
const look_around = 8;
const panic = 2;
const rest = 6;
const sit_idle = 2;
const sleep = 5;
const stand_idle = 0;
const turn = 9;
]]--
end[/cut]

Для проверки заспавнил непися с кастом-датой.

[cut=Логика][logic]
active = walker

[walker]
path_walk = esc_test_npc_walk
path_look = esc_test_npc_look
def_state_standing = sit_ass
def_state_moving = walk
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
meet = no_meet
invulnerable = true
on_info = {+addon_test_info} companion

[companion]
combat_ignore_cond = {=fighting_dist_ge(30)} true, false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
def_state_moving = assault
def_state_moving1 = assault
def_state_standing = hide_na
post_combat_time = 0,0
meet = no_meet
invulnerable = true[/cut]

Обнаружил такую вещь. Тест проводился на смарте, занятом нейтральными сквадами сталкеров.

[cut=Скрины]





[/cut]

Тестовый непись атаковал нейтралов, перебил сквад, охраняющий лагерь и долго пытался убить бессмертных неписей: торговца, техника и т.д.

Далее я заспавнил тестовый сквад из одного непися и поставил его под схему companion на этом же смарте. Непись повел себя аналогично.

[cut=Скрины]




[/cut]

На скринах видно, как тестовый непись (сквад) пытается убить бессмертного сталкера.

В обоих случаях тестовые неписи принадлежали группировке stalker_alies. Прочие неписи - обычные сталкеры. Между группировками прописан взаимный нейтралитет.

Вопрос такой. Почему неписи нападают на сталкеров, нейтральных к игроку.


Сообщение отредактировал sergej5500 - Вт, 17.11.2015, 23:19
 
denis2000Дата: Ср, 18.11.2015, 11:46 | Сообщение # 1208
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Ни в схеме ни в логике не видно предпосылок к такому поведению. Единственное что смущает, пояснение в заголовке: Схема Компаньон для связки Актор - Монстр. Но насколько я вижу, она довольно универсальна. Для проверки попробуйте использовать стандартную схему companion.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Чт, 19.11.2015, 00:10 | Сообщение # 1209
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер.

На Кордоне сделал непися, сидящего за "решеткой".






[cut=Логика сталкера][logic@esc_b1_stalker2_trader]
active = animpoint@esc_b1_stalker2_trader
suitable = {=check_npc_name(esc_b1_stalker2_trader)} true
can_select_weapon = false
level_spot = trader
prior = 200

[animpoint@esc_b1_stalker2_trader]
cover_name = esc_b6_plennic_animpoint
meet = meet@trader
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
on_actor_in_zone = esc_b1_trader_task_1 | walker@esc_b1_stalker2_trader
on_info = {+esc_b1_stalker2_trader_svoboden} walker@esc_b1_stalker2_trader_2

[walker@esc_b1_stalker2_trader]
path_walk = plennic_walk
path_look = plennic_look
meet = meet@trader
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
on_actor_not_in_zone = esc_b1_trader_task_1 | animpoint@esc_b1_stalker2_trader
on_info = {+esc_b1_stalker2_trader_svoboden} walker@esc_b1_stalker2_trader_2

[walker@esc_b1_stalker2_trader_2]
path_walk = plennic_2_walk
path_look = plennic_2_look
meet = meet@trader
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[meet@trader]
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = false
use = {!actor_has_weapon !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil[/cut]

Рестриктор esc_b1_trader_task_1 имеет форму параллелепипеда и параллелен решетке. Подойдя к решетке на 1 метр, игрок оказывается в зоне рестриктора. Непись после этого должен покинуть анимпойнт и подойти к решетке. На точку plennic_walk. Вместо этого непись встает примерно посреди комнаты и смотрит на игрока. В результате с пленником нельзя поговорить.

Как подправить логику, чтобы непись не зависал в двух метрах от решетки?
 
makdmДата: Чт, 19.11.2015, 06:52 | Сообщение # 1210
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, может дело не в логике, а в отсутствии АИ-сетки вдоль решётки? Проверял?

Цитата sergej5500 ()
Адаптировал на чистый Зов Припяти схему mob_companion из мода Припять - Точка Отсчёта.

Схема написана для монстров, чтобы они, если не враги ГГ, то следовали за ГГ в качестве защитника, а если враги, то атаковали бы ГГ по всей локации.


Терпение......
И все получится!


Сообщение отредактировал makdm - Чт, 19.11.2015, 06:57
 
sergej5500Дата: Чт, 19.11.2015, 09:23 | Сообщение # 1211
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата makdm ()
может дело не в логике, а в отсутствии АИ-сетки вдоль решётки? Проверял?


Анимпойнт я ставил в СДК. И точки walk тоже. Сетка там есть. В отношении этого непися пока вижу один вариант. Спавнить его как несквадового НПС с кастом-датой. Тогда он не "виснет". Но это нарушает "идеологию" Зова Припяти. Неписи "должны" быть сквадовыми.

Цитата makdm ()
Схема написана для монстров


В вашем аддоне Припять - Точка Отсчета под этой схемой находится несколько НПС в Припяти. Логику я скопировал у одного из них.
 
makdmДата: Чт, 19.11.2015, 14:47 | Сообщение # 1212
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, попробуй в путях прописать номер работы.
Вместо

path_walk = plennic_walk
path_look = plennic_look

сделай точки

path_walk = plennic_1_walk
path_look = plennic_1_look

Должно помочь.


Терпение......
И все получится!
 
ShyrДата: Вс, 03.01.2016, 22:37 | Сообщение # 1213
Отмычка
Пользователи
Сообщений: 38
Награды: 4
Репутация: [ 20 ]

Ребята, помогите, пожалуйста: пытаюсь создать и заспавнить своего непися на кордоне через скрипт (не алл. спавн_ом), однако ничего не выходит. Целый день убил, но так и не разобрался, как и что делать
 
sergej5500Дата: Вс, 03.01.2016, 23:02 | Сообщение # 1214
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Shyr,

Для начала выложите все свои правки, относящиеся к этому неписю. Версию Сталкера, спавн-секцию НПС, логику, скрипт спавна и т.д. И что именно не выходит. НПС не спавнится или инра вылетает?
 
ShyrДата: Вс, 03.01.2016, 23:21 | Сообщение # 1215
Отмычка
Пользователи
Сообщений: 38
Награды: 4
Репутация: [ 20 ]

sergej5500, CoP, ver. 1.6.02, SGM 2.2.
вот, создавал его с нуля с помощью "NPCcreator"
[cut=igor.xml]
<?xml version='1.0' encoding="windows-1251" ?>
<xml>
<specific_character id="igor" team_default = "1">
<name>Игорь</name>
<icon>ui_inGame2_renegade_4</icon>
<map_icon x="0" y="0"></map_icon>
<bio>esc_wolf_bio</bio>
<class>igor</class>
<community>stalker</community>
<terrain_sect>stalker_terrain</terrain_sect>
<money min="4000 " max="120000" infinitive="0"></money>
<rank>100</rank>
<reputation>0</reputation>
<visual>actors\stalker_neutral\stalker_neutral_6_antigas\</visual>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<panic_treshold>0</panic_treshold>
<supplies>
[spawn] \n
wpn_pkm \n
ammo_pkm_100 = 100 \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_4.xml"
#include "gameplay\character_undying.xml"
<start_dialog>hello_dialog</start_dialog>
</specific_character>
</xml>[/cut]

[cut=igor_profile.xml] <?xml version='1.0' encoding="UTF-8"?>
<xml>
<character id="igor">
<class>igor</class>
<specific_character>igor</specific_character>
</character>
</xml>
[/cut]
[cut=igor_spawn.ltx][igor_spawn]:stalker
$spawn = "respawn\igor_spawn"
character_profile = igor
spec_rank = regular
community = stalker
[/cut]
[cut=igor.script]function spawn_igor()
alife():create("igor_spawn",vector():set(-164.01528930664,-25.436372756958,-350.54428100586),84137,1930)
end
[/cut]
пробовал как отдельно документы по игровым папкам раскладывать, так и вписывать в уже существующие игровые файлы.


Сообщение отредактировал Shyr - Вс, 03.01.2016, 23:23
 
Поиск: