Перейти к содержанию

Рекомендуемые сообщения

 
 
  • Мастер! 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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_ который может быть логично будет удалить?

Изменено пользователем Pepel

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Paracetamol знаю как можно в оригинале через AC/DC. Только что проверил - Волк спавнится на крыше как и положено. Не знаю, сработает ли через СДК и на ОГСР движке. Напиши в личку, если надо.

Спойлер

ss_Олег_03-03-24_15-49-27_(l01_escape).jpg

 

Изменено пользователем oleg19966

Внимание! Ищу любые фиксы/исправления для оригинального ТЧ.

Спойлер

Или людей, которые желают помочь с этим делом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Не найдена анимация stand_idle_

Тебе нужно взять анимацию крысы самой.

Щас скину.


Дополнено 0 минут спустя

rat_anim_3m_soc.ogfrat_animation.omfrat_anim_3m_soc.omf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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 загрузок

но у меня же вроде крыса работает, я конвертнул огф, открыл в ае - все анимации открылись, но той изза которой ошибка выпадает, ее там нет. все анимации просмотрел - все работают. Правда этой анимации не было, я решил сохранить какуюто там анимацию, добавить ее, переименовать в недостающую и сохранить в огф. Но всё равно не работает. Эти файлы чем-то могут помочь? что с ними делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Пиши нормально. Ничего не понятно. Эти файлы в формате omf отвечают за билдовские анимации, у тебя были до этого анимации? 

  • Аплодисменты 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
1 минуту назад, Stalkervernite сказал:

Pepel Пиши нормально. Ничего не понятно. Эти файлы в формате omf отвечают за билдовские анимации, у тебя были до этого анимации? 

стоп, а как узнать были они или нет? Я конвертнул ogf модель и открыл object в AE, там автоматически открылись какие-то motions, но нет той которая указана в логе как недостающая. И я теперь не знаю как быть. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Да боже. Зачем ты конвертировал и заходил в Милкшейп. Просто возьми из олр.

Вообщем вот пошаговое FAQ

1. Перекинь модель мыши и её анимацию в свою gamedata/meshes

2. В конфиге класс поменяй на любой.

3. Найди текстуру ей

4. Заспавни её, как тебе удобно хоть через ACDC Хоть через сдк. Разницы 0. И все

  • Спасибо 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
7 минут назад, Stalkervernite сказал:

Pepel Да боже. Зачем ты конвертировал и заходил в Милкшейп. Просто возьми из олр.

Вообщем вот пошаговое FAQ

1. Перекинь модель мыши и её анимацию в свою gamedata/meshes

2. В конфиге класс поменяй на любой.

3. Найди текстуру ей

4. Заспавни её, как тебе удобно хоть через ACDC Хоть через сдк. Разницы 0. И все

причем тут милка? Примерно всё тоже самое я сделал изначально. У меня появилась ошибка о недостающей анимации.

Изменено пользователем Pepel

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Ну ты какой-то бред делал, там в 4 шага вернуть эту крысу. Ты там че та делал экспортировал. 

  • Аплодисменты 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Задай крысе в сдк анимацию тогда

  • Мастер! 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Прописал в \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)

Как быть?:u1F62D:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel ДА ТЕБЕ ПРЯМО ГОВОРЯТ УЖЕ ВСЕ ЧТО В XR_STATICS ПРОСТО ВОЗЬМИ И ДОБАВЬ СЕКЦИЮ КРЫСЕ. 

  • Жму руку 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
   
6 минут назад, Stalkervernite сказал:

всё в принципе верно. запустилась норм. спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Правда это мой файл xr_statics и там еще секции и зомби гражданского, мне лень было выпиливать это. Так что сам вырежи секции не нужные.


Дополнено 1 минуту спустя

На заметку тебе. Пиши хотя бы в личку, а не писать каждые 30 минут об ошибке, ты засоряешь данную тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
2 часа назад, Stalkervernite сказал:

На заметку тебе. Пиши хотя бы в личку, а не писать каждые 30 минут об ошибке, ты засоряешь данную тему.

ок. напишу. у меня как раз серьезная проблема - с твоим скриптом игра работает, а с моим почему-то отказывается, хотя особых изменений я не вижу. А вот сдк, наоборот - он с твоим скриптом работать не хочет. Не хочет сцену подгружать. Показывает ошибку и не работает, приходится выгружать через диспетчер, а вот с моим работает нормально. Давай разберемся?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel В моем файле statics была секция Зомби гражданского, и еще другая, не помню какая. Что тебе мешает взять чистый файл xr_statics и с моего файла от туда взять строчку с крысой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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 минуту спустя

ссори что не в личку, просто думаю что лучше пусть ошибка индексируется гуглом и кому-то будет полезна эта вся инфа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel m_rat.ltx

Файл из creatures

Из олр

Изменено пользователем Stalkervernite

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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 минут спустя

:u1F602:жесть конечно:u1F62D:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
25 минут назад, Pepel сказал:

attempt to index global 'xr_statistic' (a nil value)

Проверь xr_statistic.script на синтаксические ошибки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
Только что, N42 сказал:

Проверь xr_statistic.script на синтаксические ошибки

вот тоже смотрю. запятые могут быть этими ошибками?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн