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

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

 
 
Только что, 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

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


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

Mindallius Пробуйте пустую логику рестриктора zat_b215_logic_jupiter.ltx:
 

[logic]
active = sr_idle@nil

[sr_idle@nil]

 

  • Спасибо 1

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

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


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

Все добра, вопрос такого плана, в логике нпс прописываю  use = false , а он все равно открыт для диалога, где я мог накосячить или что-то упустить.


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

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


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

Товарищи, вопрос. У меня есть нпс, три анимации. Как мне сделать так, чтобы нпс ходил циклично по этим поинтам, , на каждом из этих трёх поинтов он останавливался на какое-то время и проигрывалась определённая анимация на определённом поинте? Идея была, но я тупой, и изначально делал не так, а как надо - не знаю. вот схемка:

Спойлер

поинт1_walk ---> поинт1_look ("wp00|p=100|t=10000") ---> поинт2_walk ---> поинт2_look ("wp00|p=100|t=10000") ---> поинт3_walk ---> поинт3_look ("wp00|p=100|t=10000") ---> заново.

А в логике это нпс было так:

Спойлер

[logic@polkovnik_skpp_1]
active = walker@polkovnik_skpp_1
suitable = {=check_npc_name(polkovnik_skpp)} true
prior = 200

[walker@polkovnik_skpp_1]
path_walk = polkovnik_walk
path_look = polkovnik_look
def_state_standing = stoop_no_weap
on_info = nil walker@polkovnik_skpp_2
on_info1 = {!is_day} animpoint@polkovnik_skpp_1

[walker@polkovnik_skpp_2]
path_walk = polkovnik_2_walk
path_look = polkovnik_2_look
def_state_standing = stoop_no_weap
on_info = nil walker@polkovnik_skpp_3
on_info1 = {!is_day} animpoint@polkovnik_skpp_1

[walker@polkovnik_skpp_3]
path_walk = polkovnik_3_walk
path_look = polkovnik_3_look
def_state_standing = guard_chasovoy
on_info = nil walker@polkovnik_skpp_1
on_info1 = {!is_day} animpoint@polkovnik_skpp_1

[animpoint@polkovnik_skpp_1]
cover_name = esc_skpp_baze_polkovnik_animpoint
on_info = {=is_day} walker@polkovnik_skpp_1   

Я знаю, что с nil будет вылет, это я вставил, потому что не знаю какую инфу поставить, чтобы она пропускала к следующей секции.

 


Дополнено 50 минуты спустя
1 час назад, stalker032 сказал:

Товарищи, вопрос. У меня есть нпс, три анимации. Как мне сделать так, чтобы нпс ходил циклично по этим поинтам, , на каждом из этих трёх поинтов он останавливался на какое-то время и проигрывалась определённая анимация на определённом поинте? Идея была, но я тупой, и изначально делал не так, а как надо - не знаю. вот схемка:

  схема (Показать контент)

поинт1_walk ---> поинт1_look ("wp00|p=100|t=10000") ---> поинт2_walk ---> поинт2_look ("wp00|p=100|t=10000") ---> поинт3_walk ---> поинт3_look ("wp00|p=100|t=10000") ---> заново.

А в логике это нпс было так:

  логика (Показать контент)

[logic@polkovnik_skpp_1]
active = walker@polkovnik_skpp_1
suitable = {=check_npc_name(polkovnik_skpp)} true
prior = 200

[walker@polkovnik_skpp_1]
path_walk = polkovnik_walk
path_look = polkovnik_look
def_state_standing = stoop_no_weap
on_info = nil walker@polkovnik_skpp_2
on_info1 = {!is_day} animpoint@polkovnik_skpp_1

[walker@polkovnik_skpp_2]
path_walk = polkovnik_2_walk
path_look = polkovnik_2_look
def_state_standing = stoop_no_weap
on_info = nil walker@polkovnik_skpp_3
on_info1 = {!is_day} animpoint@polkovnik_skpp_1

[walker@polkovnik_skpp_3]
path_walk = polkovnik_3_walk
path_look = polkovnik_3_look
def_state_standing = guard_chasovoy
on_info = nil walker@polkovnik_skpp_1
on_info1 = {!is_day} animpoint@polkovnik_skpp_1

[animpoint@polkovnik_skpp_1]
cover_name = esc_skpp_baze_polkovnik_animpoint
on_info = {=is_day} walker@polkovnik_skpp_1   

Я знаю, что с nil будет вылет, это я вставил, потому что не знаю какую инфу поставить, чтобы она пропускала к следующей секции.

 

проблема решена.

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

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


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

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

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

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

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

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

Войти

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

Войти

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