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

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

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:405: attempt to concatenate field '?' (a nil value)

Это на ЧАЭС 1.

 

 

 

Клиент: Синхронизация...

* phase time: 11 ms

* phase cmem: 285151 K

* [win32]: free[2174888 K], reserved[107276 K], committed[1912076 K]

* [ D3D ]: textures[1071362 K]

* [x-ray]: crt heap[285151 K], process heap[8507 K], game lua[3052 K], engine lua[218 K], render[931 K]

* [x-ray]: economy: strings[1895 K], smem[53698 K]

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

Вот такая ерунда при переходе на N-ную локацию.

Помогите пожалуйста!

 

[9549]

; cse_abstract properties

section_name = level_changer

name = level_changer_stancia_2_to_stancia

position = -40.413513183594,-0.028096795082092,55.799430847168

direction = -0.23880127072334,0,-0.97106844186783

 

; cse_alife_object properties

game_vertex_id = 2517

distance = 0

level_vertex_id = 66413

object_flags = 0xffffff3e

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 15.4235229492188,0,0

shape0:axis_y = 0,15.0454006195068,0

shape0:axis_z = 0,0,5.50719976425171

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

; cse_alife_level_changer properties

dest_game_vertex_id = 2376

dest_level_vertex_id = 67229

dest_position = 135.100006103516,-0.101432323455811,-74.8999938964844

dest_direction = 0,0,0

dest_level_name = l12_stancia

 

 

 

[9550]

; cse_abstract properties

section_name = level_changer

name = level_changer_stancia_2_to_yantar_old

position = 844.41125488281,-0.097796887159348,463.79565429688

direction = -0.43719217181206,0,0.89936810731888

 

; cse_alife_object properties

game_vertex_id = 2650

distance = 0

level_vertex_id = 263841

object_flags = 0xffffff3e

story_id = 6013

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 15.4235229492188,0,0

shape0:axis_y = 0,15.0454006195068,0

shape0:axis_z = 0,0,5.50719976425171

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

; cse_alife_level_changer properties

dest_game_vertex_id = 4339

dest_level_vertex_id = 4843

dest_position = -266,6.67631340026855,24

dest_direction = 0,0,0

dest_level_name = yantar_old

 

 

Изменено пользователем strchi
777T15074.png
Ссылка на комментарий

1) Нажатие кнопки где? Это имеет большое значение

2) Сам сброс реализовать технически не очень трудно, но тут тоже много параметров. Во первых сбрасывать куда - на землю или в отдельный рюкзачёк. И потом, там тоже есть свои тонкости.

Ну и в 3) За тебя это врятле кто сделает, это всё таки хоть и простое но уже требующее времени дело. Здесь тебе могут тока подсказать основные функции, а как их задействовать и откуда вызывать уже самому придётся разбираться.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Есть ли для оружия ф-ция, которая возвращает список патронов, которые можно для него использовать ? Или надо самому парсить ammo_class из соответствующего ltx-файла ?

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

*Shoker*,1)Кнопка на клаве.2)При нажатие кнопки зади ГГ спав рюкзака в котором будет весь инвентарь.

 

Будут дальше безграмотные и/или бессмысленные вопросы - сообщения будут удаляться. --/Artos

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

AndreySol, нет такой штатной функции дабы получать списое используемых оружием патронов.

 

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

Если же не будет что-то получаться - вот тогда и задавай конкретные информативные и грамотно написанные вопросы.

 

Добавлено через 4 мин.:

kota, как узнать координаты точки о которой ничего неизвестно?

Или в SDK обределяй точки для переходов или скриптами "аля-информер" смотри сам при заходе на требуемую локацию.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Такой вопрос: при попадании из оружия в радиоприемник требуется определить, с какого расстояния было осуществлено попадание. При расстоянии равном или больше 100 метров - выдать поршень. Кто-нибудь сталкивался?

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

Опять глюк, помогите пожалуйста.

Я ставлю на радар переход на нестандартную локацию, в моем случаи Х-8 и получаю вылет при загрузке игры, в начале при кешировании объектов без лога.

777T15074.png
Ссылка на комментарий

Капрал Хикс, повесь в биндер объекта hit_callback. В вызываемой функции считай расстояние. Как-то так, я думаю:

function generic_physics_binder:hit_callback(obj, amount, local_direction, who, bone_index)
     local dist = self.object:position():distance_to(who:position())
     if dist > 100 then
          db.actor:give_info_portion(...)
     end
end

 

Добавлено через 5 мин.:

Полтергейст, а оно разное от объекта к объекту. Зависит от наличия/отсутствия строковых параметров у объекта - кастом дата, character_profile и т.д. Разбирай пакет полностью.

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

Капрал Хикс, можно сделать через логику для радио.

Вот это пишешь в логику:

on_hit = hit
[hit]
on_info = {=chek_dictance} %+infoportion%

Где:

chek_dictance - функция в файле xr_condition следующего вида:

function chek_dictance ()
    local sid = 4 -- это Шустырй, нужно поставить свой story_id в секцию спавна радио и прописать его сюда
    local object = alife():story_object(sid)
    local object_pos = object.position()
    return actor_pos:distance_to_sqr(object_pos) >= 10000
end

infoportion - инфопоршен, который будет выдан, если функция chek_dictance вернет true.

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

Есть еще более простое решение (штатной логикой) по выдаче инфопоршня при попадании актором в приемник:

on_hit = hit
[hit]
on_actor_dist_ge_nvis = 100 | %+my_infoportion%

- этот вариант проще.

Инфопоршень будет выдан если приемник получит повреждение и актор ближе 100м, хотя ... хит может быть и не от актора.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Извините, что встреваю...

Можно попробовать применить и такой вариант (если работаешь на ЗП).

on_hit = hit
[hit]
on_info = {=hit_by_actor =dist_to_actor_ge(100)} %+my_infoportion%
 

Поправьте, если ошибаюсь.

 

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

KD87

а оно разное от объекта к объекту. Зависит от наличия/отсутствия строковых параметров у объекта - кастом дата, character_profile и т.д. Разбирай пакет полностью.

У меня чистая игра 1.0006, могу ли я использовать parse_stalker_packet из amk.script для разбора пакетов? В AMK в se_stalker после чтения/записи онлайн работ идёт чтение/запись числа, а в чистой 1.0006 вместо них идёт 2 bool значения.

Вот сама функция:

function parse_stalker_packet(ret,stpk,updpk,size)
     parse_human_packet(ret,stpk,updpk)
     parse_skeleton_packet(ret,stpk,updpk)
     ret.hellodlg=updpk:r_stringZ()
     ret.stunk1={}
     for i=stpk:r_tell(),size-1,1 do
         table.insert(ret.stunk1,[b]stpk:r_u8()[/b])
     end
     return ret
end

 

 

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

 

Штатная функция самой игры ( alife():remove_all_restrictions(se_obj, 2)) не работает - просто виснет.

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

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

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

1. Выделенный тобою фрагмент из АМК-кода не относится к требуемому тебе. Это всего лишь неопределенный остаток байтов (stunk) от основной части пакета, который АМК-код не разбирает, а оставляет бинарным куском.

2. Тебе требуется брать параметры dynamic_out_restrictions и dynamic_in_restrictions из секции cse_alife_creature_abstract пакета.

В АМК-варианте это в функции parse_creature_packet и параметры обзываются: crvu32u16u1 и crvu32u16u2 .

Так что получив таблицу из parse_stalker_packet, бери эти параметры из нее.

 

Но имей ввиду, запихивать или очищаять"ручками" рестрикторы серверному объекту следует и аккуратно и в случае реальной необходимости, а не абы ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Полтергейст, формат нет-пакетов одинаковый в патчах 1.0002-1.0006, можешь использовать функции амк.

Неудивительно, что виснет. Первый аргумент метода - id объекта, а не он сам. Также есть еще метод remove_all_restrictions() для клиентского объекта. Правда, в таком случае удаляются и out-рестрикторы.

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

Jurok, не уверен на 100%, но ... врядли предложенный тобою вариант будет применим именно к приемнику или ему подобному объекту.

Особенность в том, что hit_by_actor работает с забинденными объектами, точнее с теми что зарегистрированны в db.storage, куда всякая всячина не заносится ... и соответственно не имеет таблички hit

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos

если у тебя виснет для непися штатная функция то ... я бы посоветовал разобраться именно с этим

В том и странность: функция remove_all_restrictions виснет, но если удалять отдельно каждый рестриктор через alife():remove_in_restriction(...), то всё нормально. Для клиентского объекта функция add_restrictions тоже виснет, в то время, как alife():add_in_restriction(...) работает как надо.

 

KD87

Дело в том, что удаление рестрикторов я делаю в функции net_destroy. Если я вызову remove_all_restrictions(), то ничего не произойдёт - игра просто напишет, что объект, для которого эта функция вызвана, не найден.

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

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

Попробуй хотя бы через увод непися в оффлайн чистить ему рестрикторы.

А вообще занимаемся погадалками-предполагалками ... Или опиши более информативно ситуацию или ... гадай самостоятельно.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

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

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

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

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

Войти

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

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

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