Overf1rst 1 426 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Тень Чернобыля. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 6 4 1 3 1 3 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта NachtSpinne 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта (изменено) NachtSpinne тутор от меня. былдо создано 3 нпс по этому тутору. Все работали корректно Спойлер Просмотр данного файла желателен через программу Notepad++ для корректного отображения скриптов и конфигов. <1. Снятие координата в которой заспавнится нпс> Функция спавна имеет вид alife():create(section,position,levelvertex,gamevertex) Где: section - имя того/чего спавним position,levelvertex,gamevertex - координаты, позиция вершины обьекта, и сектора карты. Заходим, предварительно распаковав, в каталог gamedata/scripts/, в файле ui_main_menu.script в конце дописываем: function main_menu:OnButton_credits_clicked() local text local vid local gvid local a = vector() local text a = db.actor:position() vid = db.actor:level_vertex_id() gvid = db.actor:game_vertex_id() text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid news_manager.send_tip(db.actor, text, nil, nil, 30000) end Теперь в игре идём на то место (или ногами или деморекордом), где будет спавниться обьект, выходим в меню игры, и жмём на клавишу СОЗДАТЕЛИ или ТИТРЫ (CREDITS) - соответственно нашему взоры не предстаёт никакой список создателей, а мы услышим звуковой сигнал, после чего выходим в игру из меню, и в строке сообщений высветиться вся инфа. Скриним или записываем координаты. Спавнить нпс мы будем рядом с деревней новичков (справа от выхода из бункера Сидоровича) возле кладбища. В нашем случае: position= -245, -19, -163 level_vertex= 12032 game_vertex= 47 Примечание через ~вводим demo_record и просматриваем в режиме бога всё что происходит вокруг Задание: снять координаты для 10 новых сталкеров в разных точках карты (escape) </конец обзаца> <2. Персонаж.> Для создания персонажа необходимо создать его профиль, описание и спаун-секцию. 2.1 Создание профиля персонажа Чтобы создать профиль персонажа, необходимо в файл «gamedata\config\gameplay\npc_profile.xml» добавить строки: <character id="esc_grave1_stalker_leader"> ;идентификатор профиля <class>esc_grave1_stalker_leader</class> ;идентификатор класса </character> </2> <Идентификатор профиля конструируется как> <префикс_уровня>_<идентификатор_сцены>_<группировка_персонажа>_<описательное_название>, например, zat_b7_stalker_raider_leader. Во избежание путаницы, класс персонажа указывается такой же, как идентификатор профиля. Класс персонажа используется для связи профиля и описания персонажа. </конец обзаца> <2.2. Создание описания персонажа> С одним профилем персонажа может быть ассоциировано несколько описаний персонажей. Это позволяет, добавив в игру несколько персонажей с одним и тем же профилем, получить в результате персонажей с различным набором вещей, разным внешним видом (visual), и т.д. Для того чтобы создать описание персонажа, необходимо в файл «gamedata\config\gameplay\character_desc_имя_уровня.xml» добавить следующую конструкцию: <!---------------------------------------esc_stream6oy------------------------------------------------> ;комментарий. в данном случае вписан краткое название/имя персонажа. <specific_character id="esc_grave1_stalker_leader" team_default = "1"> ;идентификатор описания. Во избежание путаницы идентификатор описания: a) аналогичен идентификаторам класса и профиля в случае, если с профилем ассоциируется только одно описание; b) конструируется как <дентификатор_профиля>_ _default_<номер> (начиная с нуля), если с профилем ассоциируется несколько описаний. <name>@Stream6oy</name> ;идентификатор строки имени. <icon>ui_npc_u_stalker_neytral_balon_1</icon> ;идентификатор текстуры иконки. <map_icon x="1" y="0"></map_icon> ;расположение иконки по оси координат х/у. <bio>esc_wolf_bio</bio> ;идентификатор строки биографии (можно любое. пысы отказались от этой фичи, поэтому можно не прописывать. <class>esc_grave1_stalker_leader</class> ;идентификатор класса. <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> ;группировка персонажа. <rank>600</rank> ;ранг. Число, определяющее относительную «крутизну» персонажа:0 - 300 – новичок (novice), 301 - 600 – опытный (experienced), 601 - 900 – ветеран (veteran), 901 - 999 – мастер (master) <reputation>5</reputation> ;репутация. <money min="2" max="256" infinitive="0"/> ;деньги. <visual>actors\neytral\stalker_prizrak</visual> ;внешний вид. Путь к файлу «*.ogf» от папки «gamedata\meshes», содержащему внешний вид (visual) персонажа. Указывается без начальной «обратной косой», без точки и без расширения файла.От внешнего вида зависит бронированность персонажа. <snd_config>characters_voice\human_01\stalker\</snd_config> ;папка озвучки. Существует три разных голоса human_01 - молодой, human_02 - более взрослый, human_02 - голос в противогазе <crouch_type>-1</crouch_type> ; <panic_treshold>0</panic_treshold> ; от 0 до 1, сли функция оценки вероятности победы падает ниже указанного порога, то сталкер впадает в панику. сли установить 0 - в панику он впадать вообще не будет. Если ы 1 - то будет бегать от крысы. <supplies> ;то что спавнится в инвенате [spawn] \n ;секция спавна назначенных предметов wpn_bm16 \n ;wpn - оружие ammo_12x70_buck \n ;ammo - партроны #include "gameplay\character_items.xml" ;#include (вероятность "выпадания" предметов из документа character_items.xml) #include "gameplay\character_food.xml" ;#include (вероятность "выпадания" предметов из документа character_food.xml) #include "gameplay\character_drugs.xml" ;#include (вероятность "выпадания" предметов из документа character_drugs.xml) </supplies> #include "gameplay\character_criticals_4.xml" ;#include (вероятность "выпадания" предметов из документа character_items.xml) <start_dialog>hello_dialog</start_dialog> ;Стартовый диалог персонажа. Более подробно в описании диалогов. </specific_character> </конец обзаца> <3. Прописывание в секцию персонажа > gamedata\config\creatures\spawn_sections.ltx ;--------имяуровня-------------- ;чтобы отделить одних сталкеров от других ;--------имягруппировки------------ ;чтобы точно понимать кто и где состоит [esc_grave1_stalker_leader]:stalker $spawn = "respawn\esc_grave1_stalker_leader" character_profile = esc_grave1_stalker_leader spec_rank = novice community = stalker </конец обзаца> <4. Назначение файла с логикой поведения нпс> Создаем по адресу gamedata\config\scripts файл с логикой в формате <префикс_уровня>_<идентификатор_сцены>_<группировка_персонажа>_<описательное_название>.ltx В нашем случае esc_grave1_stalker_leader.ltx и лежит он в папке esc Пример логики №1 (простой) Пример логики при которой нпс находится на точке в которую его поставили. После прописывания файла в аллспавн логику можно изменить. [logic] ;секция логики. здесь прописаны действия которые в последующих секциях выполняет нпс active = remark@start ;первая фцнкция которую выполнит нпс. remark (замечание или реакция с которой начинается логика нпс) отправляет через домен (@) на старт, т.е. выполняет какое-то действие (см. секцию [remark@start]) combat_ignore = combat_ignore ;логика боя. расписана в секции [combat_ignore] danger = danger_condition ; [remark@start] anim = wait ;анимация ремарка, по умолчанию wait (ожидание) target = nil ;цель (направление взгляда, куда смотрит) = в пустоту (nil) [combat_ignore] ;секция боя combat_ignore_cond = always ; [danger_condition] ;условия реакции на опасность ignore_distance = 0 ;игнорирование дистанции на опасность. в нашем случае - ноль. Расстояние в метрах. ignore_distance_corpse = 0 ; Пример логики №2 (более сложный) [logic] ; active = walker@start ; [walker@start] ; path_walk = stream6oy_walk ;stream6oy_walk - данные связываются с командой прописанной в файле way_l01_escape.ltx all.spawn В файле way_l01_escape.ltx (all.spawn) прописывется секция путей по которой сталкер будет ходить непрерывно возвращаясь [stream6oy_walk] ;секция ссылается на код прописанный в доке с логикой points = p0,p1 ;все пути (поинты) p0:name = name00 ;название нулевого поинта p0:position = -239, -20, -161 ;координаты нулевого поинта p0:game_vertex_id = 47 ;гейм-вертексы нулевого поинта p0:level_vertex_id = 15547 ;левел-вертексфы нулевого поинта p0:links = p1(1) ;переход (линия) от нулевого поинта к следующей точке (в нашем случае предыдущему поинту - p1) p1:name = name01 p1:position = -255, -16, -174 p1:game_vertex_id = 41 p1:level_vertex_id = 7836 p1:links = p2(2) ;переход/возврат к следующей/предыдущей точке Если в строке задать через запятую точки как показано в примере, то нпс будет каждый раз возвращаясь в р0 (нулевой поинт/точку) отправляться в очередную точку. p[0]:links = p1(1),p2(1),p3(1) Нужно заметить, что после равенства не нужно прописывать сам поинт из которого следует нпс. Задание: задать 5 разным персонажам логику из 1 примера и 5 из примера 1 </конец обзаца> <5. Прописываем нпс в конфиги> gamedata\config\game_story_ids.ltx В самый конец вписываем 6001 = "esc_grave1_stalker_leader" ;порядковый номер и профиль </конец обзаца> <6. Прописывание в all.spawn> [871] ;номер секции в которой будет нпс. если она будет повторяться, то игра вылетит. ; cse_abstract properties section_name = stalker ; name = esc_stream6oy ; position = -239, -20, -161 ; место появления на карте. можно целые числа. direction = 0, 0, 0 ; ; cse_alife_trader_abstract properties money = 256 ; character_profile = esc_grave1_stalker_leader ; ; cse_alife_object properties game_vertex_id = 47 ;точка появления в игре distance = 5 level_vertex_id = 15547 ;точка появления на уровне object_flags = 0xffffffbf custom_data = <<END [logic] ;секция с логикой cfg = scripts\esc_grave1_stalker_leader.ltx ;файл с логикой в скриптах который можно менять даже после компиляции all.spawn. НО только нпс из примера 1! [smart_terrains] none = true END story_id = 6001 ;(в конец) прописываем нпс в файл gamedata\config\game_story_ids.ltx ; cse_visual properties visual_name = actors\neytral\stalker_prizrak ;визуал. в нашем случае визуал призрака ; cse_alife_creature_abstract properties g_team = 0 g_squad = 1 g_group = 5 dynamic_out_restrictions = dynamic_in_restrictions = ; cse_alife_monster_abstract properties ; cse_alife_human_abstract properties equipment_preferences = 0, 2, 0, 2, 0 main_weapon_preferences = 1, 2, 2, 0 smart_terrain_id = 65535 ; cse_ph_skeleton properties ; se_stalker properties upd:health = 1 upd:timestamp = 0x302e3020 upd:creature_flags = 0x36 upd:position = -239, -20, -161 ;еще раз прописываем позицию место появления на карте. можно целые числа. upd:o_torso = 0, 0, 0 ; upd:g_squad = 1 upd:g_group = 5 ; cse_alife_human_stalker properties upd:start_dialog = ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; *Заметка: в секции [63] находится гг. Его можно переместить поменяв координаты в соответсвующих секциях описанных в изложенном материале. Если нужно поставить путь, то переходим к 7му пункту Задание по пункту 4 выполнить! </конец обзаца> <7.Логика> Углубленное изучение логики В секции all.spawn содержится строчка которая уводит на логику в файл esc_grave1_stalker_leader.ltx (gamedata\config\scripts) [logic] ;секция с логикой cfg = scripts\esc_grave1_stalker_leader.ltx ;папка где лежал все скрипты с логикой к уровню на кордоне. *Удивительно что остальные файлы с логикой пысы додумались расфасовать по подпапкам В котором содержится код с секцией логики. Скрипт logic управляет переключением схем. В customdata любого персонажа (кроме свободных) должна присутствовать сеция [logic]. Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script. В секции должно присутствовать одно из полей: active = активная схема, запускающаяся первой. после = обычно следует схема walker (ходок). cfg = имя_ltx_файла_с_настройками Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. Пример. Настройки простого walker-а: [logic] active = walker [walker] path_walk = walk1 ;путь движения нпс. если задана одна точка пути, то нпс не будет двигаться до определенных условий. в случае опасности, в прежнюю точку не вернется. path_look = look1 ;направление взгляда нпс. если задана одна точка пути, то нпс не будет двигаться до определенных условий. в случае опасности, в прежнюю точку не вернется. иные функции - анимация в стоячем положении, анимации в движущемся положении расматривается в пункте 7.1 [logic] ;секция логики active = walker@start ;что будет выполняться в нашем случае черезе домен (собака) прописано дейсвие которое будет выполняться [walker@start] ;действие path_walk = stream6oy_walk ;путь = пути в файле way_l01_escape.ltx (all.spawn) секция [stream6oy_walk] ===================================== Простая логика при которой нпс будет стоять на одном месте. Если его что-то спугнет, то он на точку не вернется. [logic] active = remark@start combat_ignore = combat_ignore danger = danger_condition [remark@start] anim = wait target = nil [combat_ignore] combat_ignore_cond = always [danger_condition] ignore_distance = 0 ignore_distance_corpse = 0 <7.1. Работа с WayPoint`ами > Иногда одной логики бывает не достаточно чтобы персонажи вели себя в виртуальном мире естественно. Если логика отвечает за события и реакции на события и раздражители, то данная тема скорее дополнит нпс характеристиками которые сделает поведение более естественным. ВНИМАНИЕ! ФЛАГИ НЕ БУДУТ РАБОТАТЬ если: 1. после строчки "p0:name = wp00|flag1|flag2" с прописанными флагами в секции [look] не прописать код "p0:flags = 0x1" 2. после строчки "p0:name = wp00|flag1|flag2" с прописанными флагами [look] прописать код "p0:flags = 0x1" то тоже ничего не сработает. 3. Игра вылетит если в секции [walk] после строчки "p0:name = wp00|flag1|flag2" был прописан код "p0:flags = 0x1", но не был прописан в секции [look]. 4. после "p0:name = wp00|flag1|flag2" не будет "p0:flags = 0x1", то нпс просто ходит покругу, однако, если в секции [walk] прописать флаг анимации, то она будет работать. [bar_a1_proveren_1_walk] points = p0,p1,p2 *p0:name = wp00 *p0:flags = 0x1 p0:position = 115.718330383301,-5.30424022674561,12.8380241394043 p0:game_vertex_id = 1005 p0:level_vertex_id = 33757 p0:links = p1(1),p2(1) *p1:name = wp01 *p1:flags = 0x2 p1:position = 114.466262817383,-5.30527496337891,19.9635791778564 p1:game_vertex_id = 1005 p1:level_vertex_id = 33621 p1:links = p0(1),p2(1) *p2:name = wp02 *p2:flags = 0x3 p2:position = 114.42066192627,-5.30447292327881,17.8189525604248 p2:game_vertex_id = 1005 p2:level_vertex_id = 33491 p2:links = p0(1),p1(1) [bar_a1_proveren_1_look] points = p0,p1,p2 *p0:name = wp00|a=choose|t=40000 *p0:flags = 0x1 p0:position = 115.913108825684,-5.30524301528931,11.6880483627319 p0:game_vertex_id = 934 p0:level_vertex_id = 76465 *p1:name = wp01|a=choose|t=40000 *p1:flags = 0x2 p1:position = 113.710746765137,-5.30527496337891,19.9635791778564 p1:game_vertex_id = 1005 p1:level_vertex_id = 33494 *p2:name = wp02|a=ward|t=10000 *p2:flags = 0x3 p2:position = 113.741851806641,-5.30447292327881,17.8189525604248 p2:game_vertex_id = 1005 p2:level_vertex_id = 33492 </конец обзаца> <8.1. Анимация > </конец обзаца> <> </конец обзаца> Секции нпс в allspawn на кордоне [93] esc_lager1 [98] esc_lager6 [94] esc_lager2 [95] esc_lager3 [97] esc_lager5 [100] esc_wolf [99] esc_lager7 [96] esc_lager4 Дополнено 5 минуты спустя Stalkervernite я поменял класс, скопировал секции настроек из мода файла m_rat.ltx и вроде даже победил все основные ошибки. Но вот последнюю ошибку никак не могу победить. Выглядит она вот так Expression : count != 0 Function : CControlAnimationBase::UpdateAnimCount File : E:\stalker\sources\trunk\xr_3da\xrGame\ai\Monsters\control_animation_base.cpp Line : 426 Description : Error! No animation: stand_idle_ for monster l01_escape_m_rat_e О боги моддинга, что не так? Все анимации есть, крыса в АЕ нормально работает. Где-то может быть прописан этот самый stand_idle_ который может быть логично будет удалить? Изменено 3 марта пользователем Pepel Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
oleg19966 263 Опубликовано 3 марта (изменено) Paracetamol знаю как можно в оригинале через AC/DC. Только что проверил - Волк спавнится на крыше как и положено. Не знаю, сработает ли через СДК и на ОГСР движке. Напиши в личку, если надо. Спойлер Изменено 3 марта пользователем oleg19966 Внимание! Ищу любые фиксы/исправления для оригинального ТЧ. Спойлер Или людей, которые желают помочь с этим делом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel Не найдена анимация stand_idle_ Тебе нужно взять анимацию крысы самой. Щас скину. Дополнено 0 минут спустя rat_anim_3m_soc.ogfrat_animation.omfrat_anim_3m_soc.omf Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 1 минуту назад, Stalkervernite сказал: Pepel Не найдена анимация stand_idle_ Тебе нужно взять анимацию крысы самой. Щас скину. Дополнено 0 минут спустя rat_anim_3m_soc.ogf 32 \u043a\u0411 · 0 загрузок rat_animation.omf 101 \u043a\u0411 · 0 загрузок rat_anim_3m_soc.omf 106 \u043a\u0411 · 0 загрузок но у меня же вроде крыса работает, я конвертнул огф, открыл в ае - все анимации открылись, но той изза которой ошибка выпадает, ее там нет. все анимации просмотрел - все работают. Правда этой анимации не было, я решил сохранить какуюто там анимацию, добавить ее, переименовать в недостающую и сохранить в огф. Но всё равно не работает. Эти файлы чем-то могут помочь? что с ними делать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel Пиши нормально. Ничего не понятно. Эти файлы в формате omf отвечают за билдовские анимации, у тебя были до этого анимации? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 1 минуту назад, Stalkervernite сказал: Pepel Пиши нормально. Ничего не понятно. Эти файлы в формате omf отвечают за билдовские анимации, у тебя были до этого анимации? стоп, а как узнать были они или нет? Я конвертнул ogf модель и открыл object в AE, там автоматически открылись какие-то motions, но нет той которая указана в логе как недостающая. И я теперь не знаю как быть. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel Да боже. Зачем ты конвертировал и заходил в Милкшейп. Просто возьми из олр. Вообщем вот пошаговое FAQ 1. Перекинь модель мыши и её анимацию в свою gamedata/meshes 2. В конфиге класс поменяй на любой. 3. Найди текстуру ей 4. Заспавни её, как тебе удобно хоть через ACDC Хоть через сдк. Разницы 0. И все 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта (изменено) 7 минут назад, Stalkervernite сказал: Pepel Да боже. Зачем ты конвертировал и заходил в Милкшейп. Просто возьми из олр. Вообщем вот пошаговое FAQ 1. Перекинь модель мыши и её анимацию в свою gamedata/meshes 2. В конфиге класс поменяй на любой. 3. Найди текстуру ей 4. Заспавни её, как тебе удобно хоть через ACDC Хоть через сдк. Разницы 0. И все причем тут милка? Примерно всё тоже самое я сделал изначально. У меня появилась ошибка о недостающей анимации. Изменено 3 марта пользователем Pepel Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel Ну ты какой-то бред делал, там в 4 шага вернуть эту крысу. Ты там че та делал экспортировал. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 1 минуту назад, Stalkervernite сказал: Pepel Ну ты какой-то бред делал, там в 4 шага вернуть эту крысу. Ты там че та делал экспортировал. в 4 шага я уже попробовал раньше сделать, до того как ты мне эту инструкцию написал. а еще я кучу раз словил вылеты и в дохрена файлов заглядывал где надо было вносить исправления. Дополнено 24 минуты спустя короче, всё сделал по плану, ничего не помогает. В движке крыса есть и всё вроде уже прописал правильно во всех документах, но вылет как был, так и остался. Expression : count != 0 Function : CControlAnimationBase::UpdateAnimCount File : E:\stalker\sources\trunk\xr_3da\xrGame\ai\Monsters\control_animation_base.cpp Line : 426 Description : Error! No animation: stand_idle_ for monster l01_escape_m_rat_e Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel Задай крысе в сдк анимацию тогда 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта Прописал в \gamedata\scripts\class_registrator.script cs_register (object_factory, "CRat", "se_monster.se_monster", "SM_CAT_S", "Rat_s") И в gamedata\config\creatures\m_rat.ltx class = SM_CAT_S Запустилось, но когда крысочку убили, у меня лог опять вылез такой Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...s\xray_sdk_0.4\gamedata\scripts\sim_statistic.script:12: attempt to index global 'xr_statistic' (a nil value) Как быть? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel ДА ТЕБЕ ПРЯМО ГОВОРЯТ УЖЕ ВСЕ ЧТО В XR_STATICS ПРОСТО ВОЗЬМИ И ДОБАВЬ СЕКЦИЮ КРЫСЕ. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 1 минуту назад, Stalkervernite сказал: Pepel ДА ТЕБЕ ПРЯМО ГОВОРЯТ УЖЕ ВСЕ ЧТО В XR_STATICS ПРОСТО ВОЗЬМИ И ДОБАВЬ СЕКЦИЮ КРЫСЕ. у меня давно добавлена Спойлер local killCountProps = { neutral_novice = 1, neutral_experienced = 2, neutral_veteran = 3, neutral_master = 4, monolith_novice = 1, monolith_experienced = 2, monolith_veteran = 3, monolith_master = 4, military_novice = 1, military_experienced = 2, military_veteran = 3, military_master = 4, killer_novice = 1, killer_experienced = 2, killer_veteran = 3, killer_master = 4, ecolog_novice = 1, ecolog_experienced = 2, ecolog_veteran = 3, ecolog_master = 4, dolg_novice = 1, dolg_experienced = 2, dolg_veteran = 3, dolg_master = 4, freedom_novice = 1, freedom_experienced = 2, freedom_veteran = 3, freedom_master = 4, bandit_novice = 1, bandit_experienced = 2, bandit_veteran = 3, bandit_master = 4, zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4, tushkano_weak = 1, flesh_weak = 1, flesh_normal = 2, flesh_strong = 3, boar_weak = 1, boar_normal = 2, boar_strong = 3, dog_weak = 1, dog_normal = 2, dog_strong = 3, pseudodog_weak = 1, pseudodog_normal = 2, pseudodog_strong = 3, psy_dog_weak = 1, psy_dog_normal = 2, psy_dog_strong = 3, snork_weak = 2, snork_normal = 3, snork_strong = 4, poltergeist_weak = 2, pseudo_gigant_weak = 4, controller_weak = 4, bloodsucker_weak = 1, bloodsucker_normal = 2, bloodsucker_strong = 3, burer_weak = 1 rat_weak = 1 } local sect_alias = { tushkano_normal = "tushkano_weak", tushkano_strong = "tushkano_weak", poltergeist_normal = "poltergeist_weak", poltergeist_strong = "poltergeist_weak", pseudo_gigant_normal = "pseudo_gigant_weak", pseudo_gigant_strong = "pseudo_gigant_weak", controller_normal = "controller_weak", controller_strong = "controller_weak", psy_dog_weak = "psy_dog", psy_dog_normal = "psy_dog", psy_dog_strong = "psy_dog", rad_psy_dog = "psy_dog",d burer_weak = "burer", rat_weak = "rat" } monster_classes = { [clsid.tushkano_s ] = "tushkano", [clsid.flesh_s ] = "flesh", [clsid.boar_s ] = "boar", [clsid.dog_s ] = "dog", [clsid.pseudodog_s ] = "pseudodog", [clsid.psy_dog_s ] = "psy_dog", [clsid.psy_dog_phantom_s] = "NIL", [clsid.snork_s ] = "snork", [clsid.poltergeist_s ] = "poltergeist", [clsid.gigant_s ] = "pseudo_gigant", [clsid.controller_s ] = "controller", [clsid.bloodsucker_s ] = "bloodsucker" [clsid.burer_s ] = "burer" [clsid.rat_s ] = "rat" } function addKillCount(npc) local props, sect = getNpcType(npc) if props == nil then return end local sect_name if sect_alias[sect] ~= nil then sect_name = sect_alias[sect] else sect_name = sect end if killCountProps[sect_name] == nil then --' print_table(sect_alias) --' abort("Statistic ERROR: required section [%s] not present, based [%s]", tostring(sect_name), tostring(sect)) return end actor_stats.add_points(props, sect_name, 1, killCountProps[sect_name]) db.actor:set_character_rank(db.actor:character_rank() + killCountProps[sect_name]) end function getNpcType(npc) if IsStalker(npc) then local community = "neutral" if npc:character_community() == "monolith" then community = "monolith" elseif npc:character_community() == "military" then community = "military" elseif npc:character_community() == "killer" then community = "killer" elseif npc:character_community() == "ecolog" then community = "ecolog" elseif npc:character_community() == "dolg" then community = "dolg" elseif npc:character_community() == "freedom" then community = "freedom" elseif npc:character_community() == "bandit" then community = "bandit" elseif npc:character_community() == "zombied" then community = "zombied" end local rank = ranks.get_obj_rank_name(npc) return "stalkerkills", community.."_"..rank else local community = monster_classes[get_clsid(npc)] if community == nil then abort("Statistic ERROR: cannot find monstr class for [%s]", npc:name()) end if community == "NIL" then return nil,nil end local rank = ranks.get_obj_rank_name(npc) return "monsterkills", community.."_"..rank end end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel xr_statistic.script 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 6 минут назад, Stalkervernite сказал: Pepel xr_statistic.script 5 \u043a\u0411 · 0 загрузок всё в принципе верно. запустилась норм. спасибо за помощь! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel Правда это мой файл xr_statics и там еще секции и зомби гражданского, мне лень было выпиливать это. Так что сам вырежи секции не нужные. Дополнено 1 минуту спустя На заметку тебе. Пиши хотя бы в личку, а не писать каждые 30 минут об ошибке, ты засоряешь данную тему. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 2 часа назад, Stalkervernite сказал: На заметку тебе. Пиши хотя бы в личку, а не писать каждые 30 минут об ошибке, ты засоряешь данную тему. ок. напишу. у меня как раз серьезная проблема - с твоим скриптом игра работает, а с моим почему-то отказывается, хотя особых изменений я не вижу. А вот сдк, наоборот - он с твоим скриптом работать не хочет. Не хочет сцену подгружать. Показывает ошибку и не работает, приходится выгружать через диспетчер, а вот с моим работает нормально. Давай разберемся? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта Pepel В моем файле statics была секция Зомби гражданского, и еще другая, не помню какая. Что тебе мешает взять чистый файл xr_statics и с моего файла от туда взять строчку с крысой? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 42 минуты назад, Stalkervernite сказал: Pepel В моем файле statics была секция Зомби гражданского, и еще другая, не помню какая. Что тебе мешает взять чистый файл xr_statics и с моего файла от туда взять строчку с крысой? короче, я немного запутался и ногу с головой сломал. Смотри какое дело: с моим файлом у меня в игре работает только до момента пока не умрет крыса. Дальше вот такая ошибка Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...s\xray_sdk_0.4\gamedata\scripts\sim_statistic.script:12: attempt to index global 'xr_statistic' (a nil value) Но если твой файл просто добавить как есть, то работает в игре нормально. Без ошибок. Казалось бы - коперни строки из твоего дока и все дела, но нифига не работает. Ошибка не исчезает. А второй момент - class = SM_CAT_S, из-за него сдк при попытке загрузить сцену крошится. Т.е. чтобы поставить крысу, мне нужно поменять сначала класс (я ставил SM_Rat), добавить открыть сдк, поставить крысу, make game, собрать спавн. И чтобы в игре после смерти крысы не было ошибки, вернуть класс SM_CAT_S Вот такая ошибка выходит если класс стоит SM_CAT_S и я пытаюсь открыть уровень Expression : assertion failed Function : CObjectFactory::add File : s:\sources\xrutils\xrse_factory\object_factory_inline.h Line : 84 Description : I == clsids().end() Дополнено 1 минуту спустя ссори что не в личку, просто думаю что лучше пусть ошибка индексируется гуглом и кому-то будет полезна эта вся инфа Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 257 Опубликовано 3 марта (изменено) Pepel m_rat.ltx Файл из creatures Из олр Изменено 3 марта пользователем Stalkervernite Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта 7 минут назад, Stalkervernite сказал: Pepel m_rat.ltx 13 \u043a\u0411 · 0 загрузок Дополнено 0 минут спустя Файл из creatures Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...s\xray_sdk_0.4\gamedata\scripts\sim_statistic.script:12: attempt to index global 'xr_statistic' (a nil value) + не работает сдк, т.к. стоит класс SM_CAT_S Дополнено 0 минут спустя жесть конечно Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 587 Опубликовано 3 марта 25 минут назад, Pepel сказал: attempt to index global 'xr_statistic' (a nil value) Проверь xr_statistic.script на синтаксические ошибки Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pepel 77 Опубликовано 3 марта Только что, N42 сказал: Проверь xr_statistic.script на синтаксические ошибки вот тоже смотрю. запятые могут быть этими ошибками? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты