Перейти к контенту

[CoP] Ковыряемся в файлах


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

@Grif_on, не исключено, что ты используешь не то свойство. Попробуй назначить не строковый story_id в кастомдате, а числовой story_id, прописанный в свойствах объекта.
Примерно так:

[10997]
; cse_abstract properties
section_name = level_changer
name = val_to_desc_1
position = -44.5999984741211,1.79999995231628,-547.499877929688
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 1823
distance = 4.90000009536743
level_vertex_id = 119640
object_flags = 0xffffff3e

story_id = 11111 ;<--/ тут указать нужный уникальный номер

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 12.9620018005371,0,0
shape0:axis_y = 0,5.50719976425171,0
shape0:axis_z = 0,0,4.48839998245239
shape0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 3

; cse_alife_level_changer properties
dest_game_vertex_id = 3763
dest_level_vertex_id = 47755
dest_position = -404.020355224609,1.17996001243591,624.253295898438
dest_direction = 0.00435000006109476,-2.5,0.00658199982717633
dest_level_name = darkscape
dest_graph_point = desc_graph_point_actor_spawn_3
silent_mode = 1

; se_level_changer properties

 

[10998]
; cse_abstract properties
section_name = space_restrictor
name = close_level_changer
position = 140.048614501953,-1.00104403495789,48.9994010925293
direction = 0,0,0
; cse_alife_object properties
game_vertex_id = 1677
distance = 0
level_vertex_id = 309793
object_flags = 0xffffff3e
custom_data = <<END
 
[logic]
active = sr_idle@start
[sr_idle@start]
on_info = sr_idle@close1 %=disable_level_changer(11111)% ;<--/ числовой story_id объекта

[sr_idle@close1]
on_info = {+svoboda_leader_task_complete} sr_idle@end %=enable_level_changer(11111)% ;<--/ аналогично

[sr_idle@end]
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2.5191171169281

; cse_alife_space_restrictor properties
restrictor_type = 3

 

 

Изменено пользователем Kirgudu
Ссылка на комментарий

Привет.

Хочется получить число через вызов numpad.

Сам вызов

 

local numpad = ui_numpad.numpad(self)
numpad:ShowDialog(true)

 

 отрабатывает, а обратно введённое значение получить ... ну никак не могу.

Вызываю по клавише из main_menu (ЗП). Какие мысли у сообщества есть?


 

 

где можно изменить содержимое тайника Коряги на Юпитере

а зачем это надо?... если не секрет, конечно.

Изменено пользователем Serge!
Ссылка на комментарий

При наведении курсора на квестовый предмет появляется надпись "Поднять предмет(а)". Сам предмет заспавнен с начала игры. Можно-ли сделать так, чтобы до получения определенного инфопоршня эта надпись не появлялась и предмет невозможно было бы подобрать?

С#Н#Т#Р# (CoP 1.6.02)

Ссылка на комментарий

@Serge!, при создании окна ui_numpad.numpad(self) у объекта self подразумевается наличие метода OnNumberReceive.

Обычно это объект класса codepad, реализующего логическую схему ph_code. При нажатии Enter по окончании ввода отрабатывает метод numpad:OnButton_OK_clicked. В нем окно закрывается, получается текст из поля ввода и передается в метод OnNumberReceive объекта self, переданного в конструктор окна.

Если ты запускаешь окно из главного меню, то в класс main_menu нужно добавить метод main_menu:OnNumberReceive(text). Тогда введенное значение будет в него передаваться.

  • Спасибо 1
Ссылка на комментарий

Привет.
Появился ещё вопросик (предыдущий, благодаря Charsi решился легко и простенько)...
Как узнать тип патронов в конкретном стволе? Перечень возможных для данного типа ствола можно получить из описания его секции, но ведь их может быть несколько. При движковой команде на разрядку это решается. Как?


 

 

При наведении курсора на квестовый предмет появляется надпись "Поднять предмет(а)". Сам предмет заспавнен с начала игры. Можно-ли сделать так, чтобы до получения определенного инфопоршня эта надпись не появлялась и предмет невозможно было бы подобрать?

Отвечу ещё раз (прошлый ответ не всем понравился) поэтому чуть подробнее.

До получения инфопоршня (помним "Сам предмет заспавнен с начала игры.") выдаем для объекта
объект.set_tip_text("") -- возможно это можно и не делать. Не проверял, каюсь.
объект.set_nonscript_usable(false)

а после получения нужного инфопоршня
объект.set_tip_text_default()
объект.set_nonscript_usable(true)

Всё это, как говорил и раньше, надо править в логике работы с этим объектом. И что было не так?

Изменено пользователем Serge!
  • Спасибо 1
Ссылка на комментарий

 

 

Как узнать тип патронов в конкретном стволе

можно так (ф-ция принимает аргументом ID оружия):

function Get_ammo_type(wpn_id)
 local sobj = alife():object(wpn_id)
 if not sobj then  return nil end

 local np = net_packet()
 sobj:STATE_Write(np)
 local size = np:w_tell()
 np:r_seek(size - 1)
 local ammo_type = np:r_u8() -- 0 - 1-й тип боеприпасов, 1 - 2-й тип боеприпасов и т.д.
 return ammo_type
end
  • Спасибо 1
Ссылка на комментарий
можно так (ф-ция принимает аргументом ID оружия)

т.е. я понимаю так, что на выходе этой функции получу индекс поля ammo_class из секции текущего ствола? Или не так?

Если так, то это замечательно. Думал, что это возвожно через пакет, но не очень уверенно.

Попробую. Задумка такова: подбираешь ствол, сразу его чинишь (это просто) и разряжаешь (это тоже просто). Патроны от него суммирутся (вот здесь был затык) и попадают в инвентарь отдельно от ствола.

 

Подскажите как "работать" с enable/disable_level_changer (я так понял с помощью enable/disable_level_changer можно "разрешать/запрещать" переход

Я бы вынес логику из all.spawn в отдельный скприпт с дополнениями makdm и учётом предположений Charsi об оф/он лайне.

Изменено пользователем Serge!
Ссылка на комментарий

 

 

Или не так

Точно так.

Думаю, сваять скрипт разбора строки ammo_class на составные и получение соответствия индекса конкретному значению сможете сами ?


 

 

сразу его чинишь (это просто)

Я не уверен....

Ссылка на комментарий
сможете сами ?

сам пробовать конечно буду, но от подсказки никогда не откажусь. Я не изобретаю велосипед, а просто пытаюсь его усовершенствовать. Если получится.

 

Я не уверен....

Почему?

Я обычно в actor_binder:on_item_take (obj)

вставляю строчку obj:set_condition(1.0)

и получаю в инвентарь полностью кондиционный объект

Изменено пользователем Serge!
Ссылка на комментарий

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

1. Как заставить нпс озвучивать приветствие: заспавнил проводника с такой логикой:

[logic@mar_intro_guide]



active = walker@guider
prior = 200
suitable = {=check_npc_name(mar_intro_guide)} true
level_spot = guider

[walker@guider]
path_walk = guide_intro_walk
path_look = guide_intro_look
def_state_standing = guard_na

on_actor_dist_le = 10 | walker@guider_hello

meet = no_meet
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
use_camp = false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[walker@guider_hello]
path_walk = guide_intro_walk
path_look = guide_intro_look
def_state_standing = hello_wpn
meet = meet@guide
on_actor_dist_ge = 10 | walker@guider
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
use_camp = false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[meet@guide]
close_snd_hello = mar_csky_guider_meet_hello
close_snd_bye = nil
close_anim = nil
close_victim = actor
far_anim = guard_na
far_victim = actor
close_distance = 0
far_distance = 10
trade_enable = false
allow_break = false
close_snd_distance = 3
use = {=actor_enemy} false, true
meet_on_talking = false
meet_dialog = mar_csky_guider_intro_dialog

но он молчит как партизан и не воспроизводит mar_csky_guider_meet_hello, хотя в script_sound_marsh звуки прописаны, что я делаю не так?

2. Насчёт посиделок у костра. Можно ли как-нибудь сделать, чтоб сталкерки не только играли на гитаре, травили анекдоты, но и в это же время ели колбаску и пили водку у костра (как в ЧН).

Как я понял в ЗП нет анимпойнта sit_ass? (sit_low беру, но сталкерки сидят как бы в воздухе, смотрится некрасиво)
Как я понял для посиделок у костра можно не прописывать логику нпс? И ещё вопрос по скавадм: хочу у костра посадить 8 нпс, как лучше сделать, всех восмирых спавнить 1 сквадом или несколькими? (я новичок в этом деле, пожалуйста, не пинайте особо за тупые вопросы :) )

Изменено пользователем BFG
Ссылка на комментарий

Grif_on, Ну тогда "хаюшки", чтоль. :) 
Итак, на вопросы твои отвечу простыней, ибо сложность реализации в твоих вопросах идёт вразброс. Итак:
1. Анимпоинтов sit_ass и sit_knee в ЗП нет, но можно их вернуть. Вот ссылка, где товарищ Nuclia это делал даже для СДК: http://stalker-2.com.ua/downloads.php?cat_id=3&download_id=11

2. Логику для посиделок у костра можно не делать. Просто делать всё по инструкциям и симуляционные сквады лагеря будут заполнять без особых проблем. (Если нужны ссылки на уроки, то стучи в ЛС)

3. Чтобы сталкеры не только материли сапоги и "салобонов шугали", а ещё и кусали колбаску, то для этого надо делать логику.

[logic@esc_dog_leader]
suitable = {=check_npc_name(esc_dog_leader)} true  ;Проверка на то, что логика только для конкретного непися, если тебе нужно сделать условие для симулиционных сквадов, то поищи примеры в логике лагеря Скадовск.
prior = 100 ;Приоритет, для симуляционных ставь меньше 50 или, как здесь, указывай куда неписю идти, если случится выброс
active = animpoint@esc_dog_leader ;Активная секция логики, ну, с этим я думаю, ты знаком

[animpoint@esc_dog_leader]
cover_name = escape_podval_animpoint_dog ;Имя анимапоинта
avail_animations = animpoint_sit_high_weapon ;Имя анимации - в данном случае будет высоко сидеть с оружием на перевес 
on_info = {=surge_started} animpoint@surge ;Что делать, если Выброс нагрянул
on_info2 = {=is_heavy_rain} animpoint@home ;Что делать, если дождь пошёл (у меня непись уходил в подвальчик)
use_camp = false ;Это для симуляционных отрядов не указывай - этот параметр запрещает балаболить неписю в пределах Кэмп-зоны
meet = meet ;Секция разговора

[animpoint@home] ;Итак, у нас пошёл дождик и непись спустился в подвал...
cover_name = escape_podval_animpoint_dog_1
avail_animations = animpoint_sit_normal ;Сели на кровать...
on_info = {!is_heavy_rain} animpoint@esc_dog_leader ;Если дождь закончился, то уходим сторожить новичков у костра (Логика была написана для брата Волка - для Пса, который у меня остался в лагере новичков управляющим на время)
on_game_timer = 500 | animpoint@eat ;Итак, если прошло Nвремени (50 секунд), то пора бы пожрать колбаски
use_camp = false
meet = meet

[animpoint@eat] ;Хаваем
cover_name = escape_podval_animpoint_dog_1
avail_animations = animpoint_sit_normal_eat_bread
on_game_timer = 600 | animpoint@drink ;Минутку похавали, надо бы запить
use_camp = false
meet = meet

[animpoint@drink] ;"Не пьём, а лечимся!" (с)
cover_name = escape_podval_animpoint_dog_1
avail_animations = animpoint_sit_normal_drink_vodka
on_game_timer = 120 | animpoint@home ;После двух минут возвращаемся в секцию логики, откуда мы можем выйти наружу, либо снова похавать
use_camp = false
meet = meet

[animpoint@surge] ;Если выброс, то идём в подвальчик, вроде как укрытие
cover_name = escape_podval_animpoint_dog_1
avail_animations = animpoint_sit_normal
on_info = {=surge_complete} animpoint@esc_dog_leader
use_camp = false
meet = meet

[meet] ;Секция разговора
close_anim = nil ;Не нарушаем текущую анимацию, т.е. не встаём для разговоров, а как сидели, так и сидим
close_victim = nil
far_anim = nil
far_victim = nil
close_distance = 0
far_distance = 0
use = {=actor_enemy} false, true
allow_break = false

 

 

4. Если у тебя новички сидят у костра "декорацией", то лучше делать одним сквадом, а вот если у тебя, допустим, один однажды уйдёт Хто Знает куда за хабаром, а другой следом, а третий к Сидору и т.д., то лучше каждого в отдельный сквад, либо те, которые уходят - в разные, а которые у костра всю жизнь просидят (утрирую, конечно, хе-хе) тех можно в один.

5. Ну и логику попробуй переписать сам по этой статейке: http://stalkerin.gameru.net/wiki/index.php?title=Настройка_логики._Часть_1#.D0.A1.D1.85.D0.B5.D0.BC.D0.B0_meet . Но навскидку посоветую Far_distance прировнять к нулю.

  • Спасибо 1

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

Ссылка на комментарий

Grif_on, вообще НПС-ы и так пьют и едят в смарткаверах, которые идут как авто работы (имя_смарта_animpoint_номер) и накрыты кампом (camp), никакой логики не нужно. Если этого не происходит, возможно ты добавлял новые визуалы (модели) нпс-ов, которые нужно добавить в файл gamedata\scripts\xr_animpoint_predicates.script (по аналогии с существующими). Тех визуалов, которые в масках, добавлять туда не нужно (чтобы колбасу в шлем не тыкали :) )

Изменено пользователем Clayman
  • Спасибо 2
Ссылка на комментарий
можно так (ф-ция принимает аргументом ID оружия):

можно, но не всегда. Некоторые авторы пополняют в своих модах пакеты, дописывая новые данные. У меня, например, чтобы такая функция отработала корректно пришлось позиционировать на np:r_seek(size - 2), т.к. в конец пакета дописывался ещё один байт. Гарантию, что в каком-нибудь другом будет по другому, никто дать не может.

Поэтому вопрос остается. Нет ли чего более универсального для определения текущего типа патронов в стволе?

Как-то ведь это делается для отображения на экране.

Изменено пользователем Serge!
Ссылка на комментарий
Некоторые авторы пополняют в своих модах пакеты, дописывая новые данные...

Поэтому вопрос остается. Нет ли чего более универсального для определения текущего типа патронов в стволе?

Есть, конечно - вместо частной ф-ции, используемой на "чистых" стволах, использовать к примеру модуль нет-пакетов от Artos.

Изменено пользователем AndreySol
Ссылка на комментарий

Подниму вопрос о Dialog Editor (если эта тема поднималась, не пинайте сильно).

Сабж удобный и практичный, сложнейшие диалоги создаются за считанные минуты, но - отсутствует такой важный момент, как добавление precondition (скриптовую проверку) в сам диалог, а не в его ветки.

Конечно, можно потом добавить в xml файл precondition на диалог вручную и все работает. Но когда в этом-же файле создается новый диалог, то нажимае в эдиторе кнопочку Save, все вручную созданные прекондишны на диалоги удаляются. А помнить где их все нужно добавлять - утомительно.

Кто-то решал эту проблему?

Ссылка на комментарий

 

 

но - отсутствует такой важный момент, как добавление precondition (скриптовую проверку) в сам диалог, а не в его ветки.

В программе с левой стороны список доступных диалогов. Если выбрать сам диалог (не ветку) - возможность добавить precondition сохраняется.

3023969.jpg

Или это не то?

С#Н#Т#Р# (CoP 1.6.02)

Ссылка на комментарий

Нет, к сожалению это не то. precondition добавляется все равно только в фразу с id "0", в сам диалог (после тега <dialog id="....) не ставится. Только ручками, так что проблема остается.

Ссылка на комментарий

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

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...