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

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

 
 
Цитата

FATAL ERROR
 
[error]Expression    : no_assert
[error]Function      : CXML_IdToIndex<class CPhraseDialog>::GetById
[error]File          : D:\prog_repository\sources\trunk\xrServerEntities\xml_str_id_loader.h
[error]Line          : 112
[error]Description   : item not found, id
[error]Arguments     : jup_b16_biochemist_oasis_start
 

stack trace:

Пожалуйста подскажите, что означает данная ошибка? Если что, я не трогал обычные диалоги Озёрского. Только добавил свой. Или трогал? 

character_desc_jupiter.xml dialogs_jupiter.xml st_dialogs_jupiter.xml

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


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

Mindallius 

Игра не находит id какого-то профиля... или диалога... или квеста. В общем указанный id в .xml файле.

Проверяйте правильность написания идентификатора, либо добавьте его, если таковой отсутсвует.

Если проще, то игра где-то у тебя спрашивает строку в xml с айди jup_b16_biochemist_oasis_start, а таковой строки в твоих xmlках нет. Если это оригинал, то ты, видимо, название строки поменял, вот игра теперь и ругается.

 

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


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

Mindallius 

Игра не находит id какого-то профиля... или диалога... или квеста. В общем указанный id в .xml файле.

Проверяйте правильность написания идентификатора, либо добавьте его, если таковой отсутсвует.

Если проще, то игра где-то у тебя спрашивает строку в xml с айди jup_b16_biochemist_oasis_start, а таковой строки в твоих xmlках нет. Если это оригинал, то ты, видимо, название строки поменял, вот игра теперь и ругается.

 

Видимо да, я удалил все из орига. Но ведь вроде во всех модах так? Типо в гейм дате только новое, а старое в запакованных файлах

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


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

Видимо да, я удалил все из орига. Но ведь вроде во всех модах так? Типо в гейм дате только новое, а старое в запакованных файлах

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

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


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

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

спасибо. учту

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


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

Повторюсь, но мб кто нибуть подскажет ответ на сий вопрос?

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


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

Хотел бы спросить, как выдать предмет(пм допустим ) гг через диалог?  Желательно на примере, чтоб я меньше засорял данную тему

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

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


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

Здравствуйте, хочу обратиться с вопросом: каким образом можно осуществить в скрипте привязку нажатия кнопок к действию(в данном случае - проигрыванию anm файла)? 

Изучение мною скриптов ЗП показало, что в основном привязка клавиш используется для UI-интерфейсов, а попытки адаптировать(возможно, что из-за моей криворукости) успеха не добились. Я уже 2-й день мучаюсь над этим вопросом, пытаясь адаптировать один модец из Аномали. Может, есть примеры того, как в ЗП осуществляется привязка кнопки? 

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


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

Может, есть примеры того, как в ЗП осуществляется привязка кнопки?

Для этого правят движок.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


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

denis2000 значит, в стоке dik_to_bind в скриптах используется исключительно для UI? Спасибо за прояснение. 

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


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

На 4-ех тряпках стоит одинаковый description. Если я поменяю 3 нижних на другие (на v1, v2, v3, к примеру) и потом обновлю в самом конфиг-файле outfit.ltx, никаких глюков с и проблем с  отображением описания не будет?

image.png

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


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

На 4-ех тряпках стоит одинаковый description. Если я поменяю 3 нижних на другие (на v1, v2, v3, к примеру) и потом обновлю в самом конфиг-файле outfit.ltx, никаких глюков с и проблем с  отображением описания не будет?

image.png

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

 

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


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

значит, в стоке dik_to_bind в скриптах используется исключительно для UI?

Вообще не так. Эта движковая функция переводит код нажатой клавиши в код запрограммированного действия (например идти вперед). Вызвать ее можно в любом месте и передать в нее можно любое целое число в определенных пределах, но смысла будет ноль. А теперь посмотрите где и как ее используют:

class "load_dialog" (CUIScriptWnd)
...
function load_dialog:OnKeyboard(dik, keyboard_action)
	local bind = dik_to_bind(dik)
	...
end

То есть имеем некий объект load_dialog указанного класса CUIScriptWnd (скриптовое диалоговое окно) у которого есть событие OnKeyboard, а значит если этот объект отрисован на экране и активен, а в это время нажата какая то клавиша, то в указанную функцию будет передан код нажатой клавиши первым параметром, а далее переводим клавишу в код действия.

Так вот патченный/правленный движок имеет возможность колбека с передачей нажатой клавиши в любой момент в любую назначенную для этого функцию.


Apka Конфиг бинокля ссылается на текстуру по имени в scopes.xml/scopes_16.xml, они в свою очередь по имени например! в textures_descr\ui_ingame.xml, а уж там указан конкретный файл текстуры с размерами выкройки из нее.

Изменено пользователем denis2000
  • Спасибо 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


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

Так вот патченный/правленный движок имеет возможность колбека с передачей нажатой клавиши в любой момент в любую назначенную для этого функцию.

Теперь понял. Можете подсказать, какие секции / разделы движка CoC (там эта правка есть) следует изучать, чтобы увидеть эту правку? Еще раз благодарю. 

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


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

Совершенно нубский вопрос, но всё же: как сделать вызов скрипта при поднятии определённого предмета? Условно говоря, мы поднимаем уникальный предмет (к примеру wpn_pm_unique), и при его наличии в инвентаре у ГГ, запускается скрипт из другого файла, спавнящий кровососа. Функцию спавна кровососа я знаю, а вот как написать функцию его вызова при наличии у ГГ нужного предмета, так и не понял. От "большого ума" пробовал написать и повесить на апдейт в bind_stalker такую функцию:

Спойлер

function podnyal_pm()
if db.actor:object("wpn_pm_unique") then
new_spawn.krovosos_create
end
return
end

 

- ожидаемо получил вылет с "bind_stalker.script: attempt to index a nil value".



ASUS z87-k, I5-4670 @3.40GHz, MSI GTX 1050ti, 16gb ОЗУ, SSD 100gb, 2xHDD 500gb,
Windows 10 Pro. Аномали на ультрах летает. Вместе с компом по комнате.

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


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

Сталкер из прошлого Хоть вы меня и минусили, но я не злопамятный, расскажу как делал я. Знаю два варианта. Первый через логику спайсрестриктора, а второй через логику смарт терейна спавн монстра или кого угодно при условии наличия определенного предмета у гг.

  • Спасибо 1

Адаптации ганслингера на моды зов припяти
Всегда на связи в телеге @Mervin62
 

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


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

Сталкер из прошлого Нужно две скобки добавить, ведь это и есть вызов функции в Lua

Например:
test.print - Это ССЫЛКА на ФУНКЦИЮ
test.print() - Это ВЫЗОВ функции

  • Спасибо 1

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


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

Сталкер из прошлого Через спайсрестриктор нужно указывать точку спавна, а в смарттерейне просто указываете условие спавна, все просто. Оба варианта рабочие проверенно не раз.

Изменено пользователем Mervin62
  • Спасибо 1

Адаптации ганслингера на моды зов припяти
Всегда на связи в телеге @Mervin62
 

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


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

Нужно две скобки добавить

Ага, это забыл, только всё равно вылет тот же идёт, scripts\bind_stalker.script:241: attempt to index a nil value.

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



ASUS z87-k, I5-4670 @3.40GHz, MSI GTX 1050ti, 16gb ОЗУ, SSD 100gb, 2xHDD 500gb,
Windows 10 Pro. Аномали на ультрах летает. Вместе с компом по комнате.

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


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

, а действие какое-то (

Это я делал так же через sr или логику нпс,  но тогда надо писать следующую секцию логики этого нпс.

  • Спасибо 1

Адаптации ганслингера на моды зов припяти
Всегда на связи в телеге @Mervin62
 

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


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

scripts\bind_stalker.script:241: attempt to index a nil value.

Нету функции значит. Либо опечатка либо её в файле нету. Всё же в логе сказано.

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


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

там эта правка есть

Пример реализации дополнительных коллбеков (press/hold/release button) на X-Ray 1.6:

Спойлер

 

1. Регистрируем дополнительные пользовательские события. Открываем xrGame/game_object_space.h, ищем перечисление ECallbackType и дописываем перед идентификатором с индексом -1 (на моём примере будет как-то так):


// ... 
eWeaponNoAmmoAvailable,

// New callbacks
eKeyPress,
eKeyRelease,
eKeyHold,

eDummy = u32(-1),

2. Экспортируем свежесозданные события в скриптовой биндер, открываем xrGame/script_game_object_script.cpp:


// New Callbacks
value("key_press", int(GameObject::eKeyPress)),
value("key_release", int(GameObject::eKeyRelease)),
value("key_hold", int(GameObject::eKeyHold)),

value("map_location_added", int(GameObject::eMapLocationAdded))

3. Вызыем события в нужный момент времени (в моём случае они вызываются из класса CLevel и привязываются к биндеру актора). Открываем xrGame/Level_input.cpp.
Вероятнее всего, для успешной компиляции Вам потребуется подключить дополнительные хеадеры - вставляем после строчки #include "stdafx.h"


#include "game_object_space.h"
#include "script_callback_ex.h"
#include "script_game_object.h"

Теперь нам нужно пройти по соответствующим функциям, отвечающим за обработку нажатия, отпуска и держания клавиш:
1) Функция CLevel::IR_OnKeyboardPress - коллбек нажатия. После строки


EGameActions _curr = get_binded_action(key);

Пишем:


// New callback
if (CActor* pActor = smart_cast<CActor*>(CurrentEntity()))
{
	pActor->callback(GameObject::eKeyPress)(key);
}

2) Функция CLevel::IR_OnKeyboardRelease - коллбек релиза (отпускания) клавиши. После строки


if (game && game->OnKeyboardRelease(get_binded_action(key)) )		return;

Пишем:


// New callback
if (CActor* pActor = smart_cast<CActor*>(CurrentEntity()))
{
	pActor->callback(GameObject::eKeyRelease)(key);
}

3) Функция CLevel::IR_OnKeyboardHold - коллбек удержания клавиши. После строки


if(g_bDisableAllInput) return;

Пишем:


// New callback
if (CActor* pActor = smart_cast<CActor*>(CurrentEntity()))
{
	pActor->callback(GameObject::eKeyHold)(key);
}

4. Остаётся скриптовая обвязка. Мы посылаем событие из движка в скрипты, осталось их там принять и обработать.
Открываем bind_stalker.script:
1) Функция actor_binder:net_destroy(). После строки


self.object:set_callback(callback.hit, nil)

Дописываем:


self.object:set_callback(callback.key_press, nil)
self.object:set_callback(callback.key_release, nil)
self.object:set_callback(callback.key_hold, nil)

2) Функция actor_binder:reinit(). После строки


self.object:set_callback(callback.hit, self.hit_callback, self)

Дописываем:


self.object:set_callback(callback.key_press, self.OnKeyPress, self)
self.object:set_callback(callback.key_release, self.OnKeyRelease, self)
self.object:set_callback(callback.key_hold, self.OnKeyHold, self)

3) Раскрываем добавленные коллбеки: где-нибудь в конце файла (либо же попросту вне тела уже существующих функций) пишем


function actor_binder:OnKeyPress(Key)
	-- При нажатии на кнопку ENTER будет что-то происходить
	if (Key == DIK_keys.DIK_RETURN) then
		-- this.test_func()
	end
end

function actor_binder:OnKeyRelease(Key) 
end

function actor_binder:OnKeyHold(Key) 
end

 

 

 

 

Изменено пользователем BASE1707
  • Мастер! 1
  • Жму руку 1

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


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

Здраствуйте, пишу в данную тему очередной вопрос, ответ на который не очень  сложно найти. В общем , суть вопроса такая- я изменил точку спавна гг с обычного, на место возле бункера ученых, там где сталкеры сидят(юпитер). Но из-за катсцены с лоцманом при новой игре гг появляется на янове. Как отключить катсцену и сделать так чтобы гг появлялся там, где это указанно в all.spawn?


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

 

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

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


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

Здраствуйте, пишу в данную тему очередной вопрос, ответ на который не очень  сложно найти. В общем , суть вопроса такая- я изменил точку спавна гг с обычного, на место возле бункера ученых, там где сталкеры сидят(юпитер). Но из-за катсцены с лоцманом при новой игре гг появляется на янове. Как отключить катсцену и сделать так чтобы гг появлялся там, где это указанно в all.spawn?


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

 

ГГ необходимо выдать следующие инфопоршни:

db.actor:give_info_portion("jup_first_meet_made")
db.actor:give_info_portion("jup_b217_welcome_faded")
db.actor:give_info_portion("jup_b217_welcome_guide_talked")
db.actor:give_info_portion("jup_b217_pp_end_in_scene")
db.actor:give_info_portion("jup_b217_welcome_tech_talked")
db.actor:give_info_portion("jup_b217_guide_welcome_end")
db.actor:give_info_portion("jup_b217_tech_welcome_end")
db.actor:give_info_portion("jup_b217_tech_instruments_start")
db.actor:give_info_portion("jup_b217_stalker_tech_met")

 

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


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

ГГ необходимо выдать следующие инфопоршни:


db.actor:give_info_portion("jup_first_meet_made")
db.actor:give_info_portion("jup_b217_welcome_faded")
db.actor:give_info_portion("jup_b217_welcome_guide_talked")
db.actor:give_info_portion("jup_b217_pp_end_in_scene")
db.actor:give_info_portion("jup_b217_welcome_tech_talked")
db.actor:give_info_portion("jup_b217_guide_welcome_end")
db.actor:give_info_portion("jup_b217_tech_welcome_end")
db.actor:give_info_portion("jup_b217_tech_instruments_start")
db.actor:give_info_portion("jup_b217_stalker_tech_met")

 

А где их надо давать? В all/spawn?

 

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

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


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

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

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

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

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

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

Войти

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

Войти

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу