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

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

Кто нибудь знает как получить точно кол-во патронов как в стволе так и в гранатомёте одновременно?

Соль в чём, есть ствол с гранатомётом. Патроны заряжены и туда и туда. При использовании нет-пакетов\стандартных функций возвращаются тока патроны из текущего режима (тоесть если режим стрельбы - то вернётся размер магазина, если режим гранатометания, вернёт кол-во гранат в стволе)

 

Я думаю, может можно как то через нет пакет\скриптовые функции переключить ствол в нужный режим, узнать кол-во патронов, переключить в другой режим и там тоже узнать. Но вот вопрос, если я изменю например в нет пакете параметр updgrenade_mode (отвечает за то, включён ли режим гранатомёта), в игре ствол автоматически изменится на новый режим? Или нужно переводить его в online\offline. Может можно это как то обойти?

 

Игра ЗП.

 

UPD: В принципе уже так срочно не надо, нашёл как обойти проблему, но если у кого то есть какие то мыслишки, буду рад.

 

***

 

Насколько вредно частое чтение нет-пакета? В идеале - на каждый апдейт читается нет пакет 1 объекта.

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

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

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

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

Хорошо. Вопрос по теме- заспавненый мной непись исчез после того как я ушел на другую локу, в чем причина? Как прописывал непися я выкладывал на предыдущей странице. подскажите, что делать?

Саму торговлю содрал с бармена в отдельную папку shop_esc_chemodan.ltx, а в паке trader_chemodan прописал вот так :

 

[trader]

buy_condition = trader_generic_buy

sell_condition = {+esc_kill_bandits_quest_done} trader_after_fabric_sell, trader_start_sell

buy_supplies = {+esc_kill_bandits_quest_done} supplies_after_fabric, supplies_start

#include "shop_esc_chemodan_npc\chemodan_buy.ltx"

#include "shop_esc_chemodan_npc\chemodan_supl.ltx"

#include "shop_esc_chemodan_npc\chemodan_trade.ltx"

smeh..gif
Ссылка на комментарий
*Shoker*: Насколько вредно частое чтение нет-пакета?
Ни насколько, даже на износ твоего жесткого диска это не влияет, а для ОЗУ подобные чтива тем более по барабану. ;-)

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

Не следует, также, ожидать наличия "одновременных" методов получения 'всего и вся'.

Да и неплохо бы тебе все же различать клиентские объекты с серверными и особенности для каждого класса.

Нет-пакеты читают/меняют параметры серверных объектов и ожидать "автоматически изменится" для клиентского объекта - заблуждение. Не зря же, например, при переодевании костюма тому же НПС - его переводят в оффлан и обратно.

Конечно некоторый "автоматизм" заложен и между клиентским и серверным объектами происходят процессы "net_Export/net_Import", но ... их алгоритм во многом нам и неизвестен и неподвластен.

 

smeh

Чтобы твой НПС не уходил в "неизвестность" - почитай про гулаги, работы и т.п.

Чтобы твой НПС начал торговать - почитай про схему торговли и, посмотрев как сделано у торговцев в оригинале иль модах, делай по аналогии.

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

Ссылка на комментарий
Artos, к сожалению не получается, ствол так и спавнится убитым в хлам, upd:condition ставили и 1 и 255, все равно, в чем еще может быть причина?
%D0%90%D0%B0%D0%B7.gif
Ссылка на комментарий

Ааз, приведи тут полную секцию твоего АК, которую добавляешь в all.spawn. Посмотрим так сказать в 'реалии'.

Ну а еще в чем может быть причина - это только погадалки. Например, если в моде имеются скрипты, которые работают с нет-пакетами и некорректно их изменяют. Или, вместо cse_alife_item_weapon_magazined используется cse_alife_item_weapon_magazined_w_gl (или наоборот), что приводит к путанице 'upd.grenade_mode' и 'upd.condition'.

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

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

Ссылка на комментарий
Artos, хорошо, сегодня не смогу, это не на моем компе, а завтра выложу, изменяем all.spawn OGSE 0692.
%D0%90%D0%B0%D0%B7.gif
Ссылка на комментарий

Ааз, заодно уточни:

1. Начинаете игру и когда ГГ оказывается у ствола - после подбора видно по характеристикам, что ствол "убитый". Или еще какие-то манипуляции с оружием есть в моде?

2. Если такой же ствол скриптом заспавнить в игру - с ним те же проблемы или нет, т.е. этот полностью исправный?

 

P.S. Чтобы не терять время, как будет возможность кинь в ЛС секцию из all.spawn'a (как прописываете), секцию конфига этого ствола (если конечно таковая в конфигах есть) и собственно модель с тектурами, которую прописываете.

Учитывая, что похоже многие модификации АК74 делают на классе LR300, похоже именно из-за 'подмены' класса вместо 'upd.condition' считывается иной байт (upd.weapon_flags), т.к. для класса 'WP_AK74' впереди считывается 'upd.grenade_mode' и только потом 'upd.condition' .

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

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

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

Люди,вот такой вопрос:подключаю локацию из чн в зп через прогу от амк.Воспользовавшись прогами от kalinin11 для массовой замены вертексов можно ли сохранить спавн?

 

Не забывай пробелы. Cyclone

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

В принципе да. Тебе по сути надо просто у всех предметов изменить только game_vertex, level_vertex вроде можешь не трогать.

Тоесть ты подключаешь локацию, далее настраиваешь ACDC, разбираешь свой спавн с новой локацией, потом обычным ACDC разбираешь спавн от той игры, откуда переносил локацию, копируешь всё что нужны в отдельный файл. А дальше меняешь game_vertex-ы, и изменённые данные из файла переносишь в свой all.spawn... По идее должно работать. А вообще может сейчас есть и более удобные методы.

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

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

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

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

Как правильно удалить предмет из тайника? Нужно ли проводить какие нибудь манипуляции перед alife():release?

Freedom

Ссылка на комментарий
Как правильно удалить предмет из тайника? Нужно ли проводить какие нибудь манипуляции перед alife():release?

 

Если в это время из него ни кто ничего не вытаскивает - в любой момент можно.

 

А вот с удалением неписей из онлайна, включая трупы, пронаблюдал забавный эффект: "- Critical: SMapLocation binded to non-existent object id=xxxxx", причем id - внезапно, патроны, и только они, заспавненные через профиль.

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

Dennis_Chikin, уже не первый раз читаю упоминания о проблемах с патронами ... Ребыта-а-а, разбирайтесь со сторонним скриптом, манипулирующем у вас патронами помимо штатных иль движка.

А "твой забавный эффект" происходит от того, что, например, при убийстве НПС и его удалении, нередко бывает что, покойник стрелял из автомата и этот автомат (принадлежащий ему) продолжает неккоторое время еще стрелять ... Вот и эффект "посмертный и забавный", приводящий к ругани в логах и вылетам ...

 

 

_Призрак_, правило довольно просто для всех объектов: можешь удалять любой объект, который не задействован другими скриптами или объектами. Под 'задействован' подразумеваются наличие коиентского объекта у удаляемого серверного и трансфер этого объекта, вхождение в 'разрешенные/запрещенные' рестрикторы, отыгрышь партиклов ...

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

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

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

В окне инвентаря, в списке имеющихся предметов - выбрали мышей к примеру патроны. После этого можно как-то скриптово получить этот выбранный объект ? В описании game_object нашел:

int object_count() -- количество объектов в инвентаре

game_object* object(string) -- возвращает объект из инвентаря по секции

game_object* object(number) -- возвращает объект из инвентаря по индексу

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

AndreySol, никак. Сие (выбор и пр.) все происходит внутри движка и внешним скриптам не за что зацепиться.

Индексы, возвращаемые game_object* object(number) - никак не завязаны на выборе предмета в окне.

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

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

Есть переменная, которая ссылается на функцию. Как узнать имя функции на которую ссылается это переменная?

Freedom

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

Ответ на уже не раз встречающиеся вопросы по поводу "порчи" новых стволов при спавне через all.spawn:

 

Нередко модмейкеры пробуют подменить имеющиеся в all.sapwn'е стволы своими моделями или заспавнить новые и ... допускают ошибки.

Например, в игре имеется "АК74 Стрелка", который 'положен' в подземельях Агропрома. При попытке заменить его на свой ствол - почему-то исправность оружия становиться "в хлам", патронов "сотни" и т.п. непонятки.

Почему такое присходит?

1. Секция этого автомата [wpn_ak74_m1].

Класс, на котором сделаны автоматы АК74 в оригинальной игре - 'WP_AK74', что соответстует серверному классу 'cse_alife_item_weapon_magazined_w_gl'.

Это соответствие секции и класса прописано в хеш-таблице обычных версий ACDC и при старте игры из скомпилированного all.spawn'а в игру спавнится объект "оружие с подствольным гранатометом".

 

2. Посмотрев наработки по 'новым' моделям, можно заметить, что многие "автоматы АК" сделаны на классе 'WP_LR300' или даже 'WP_SHOTG', а им соответствуют серверные классы 'cse_alife_item_weapon_magazined' и 'cse_alife_item_weapon_shotgun'.

Естественно в игре на базе этих классов будут созданы объекты БЕЗ подствольников ...

 

3. Итак, если модмейкер, оставив прежнее наименование секции, не исправил в ACDC используемый класс для модифицированного оружия (универсальный ACDC сканирует и определяет это сам!), то в спавн запаковываются данные для "автомата Стрелка" с подствольником(!).

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

upd:grenade_mode      = 0 (u8) <-- параметр только для оружия со встроенными подствольниками!
upd:condition         = 1 (u8)
upd:weapon_flags      = 0 (u8)
upd:ammo_elapsed      = 0 (u16)
upd:addon_flags       = 0 (u8)
upd:ammo_type         = 0 (u8)
upd:weapon_state      = 0 (u8)
upd:weapon_zoom       = 0 (u8)
upd:current_fire_mode = 0 (u8)

При старте игры, движек, прочитав НАСТОЯЩИЙ класс оружия из конфиг-файла, спавнит этот объект и прописывает ему значения параметров, взятые им из алл.спавна.

Если вместо класса оружия с подствольником, в конфиге будет стоять иной класс, то движек игры, не имея контроля окончания секции пакета для данного оружия прочитает это (для WP_LR300):

upd:condition         = 0 (u8)
upd:weapon_flags      = 1 (u8)
upd:ammo_elapsed      = 0 (u16)
upd:addon_flags       = 0 (u8)
upd:ammo_type         = 0 (u8)
upd:weapon_state      = 0 (u8)
upd:weapon_zoom       = 0 (u8)
upd:current_fire_mode = 0 (u8)
...

Несложно заметить, что первым будет читаться '0' => 'upd:condition' - состояние (исправность) ствола, хотя при компиляции спавна это было значение 'upd:grenade_mode' и т.д. Т.е. ВСЕ(!) параметры будут читаться со сдвигом вперед. Учитывая, что все значения числа и почти все нули - фатальной ошибки не произойдет, но произойдет подмена одних значений другими. Последний же байт будет невостребован.

Для класса 'WP_SHOTG' будет все то же самое, т.е. сдвиг чтения вперед, но в заключении байт 'upd:current_fire_mode' будет присвоен для 'upd:ammo_ids'.

 

Рекомендации по недопущению подобных ошибок:

1. Используйте версию универсального ACDC, способного сканировать именно ваши конфиги и автоматически распознающего классы для секций ваших объектов. Тогда в скомпилированный спавн пропишутся именно ваши байты ...

2. При использовании 'обычных' версий ACDC, контролируйте соответствие классов секций ваших объектов как в самом ACDC, так и в конфиг-файлах. Т.е. для секции [wpn_ak74_m1] требуется исправить класс: 'cse_alife_item_weapon_magazined' ( без '_w_gl' !).

3. При изменении класса объекта - не забывайте вносить необходимую поправку как в ACDC, так и соответственно в сам all.spawn.

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

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

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

_Призрак_

Из Lua никак не узнаешь.

Дело в том, что функции в Lua (как и table, thread и userdata ) являются так называемыми "first class" объектами, и они не имеют фиксированного имени.

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

Ну например для какой-то функции у тебя существует 3 имени. И есть, тоже например, функция, которая должна определить имя. Какое имя из двух оставшихся она должна возвратить???

Подходящее имя для функции попадает в стек только при её вызове. И вот тут уже можно определить и её имя, и имена всех функций вызвавших данную, т.к. они тоже уже находятся на стеке.

Для этого используется функция debug.getinfo . Например :

function f1(stack_level)
    f2(stack_level)
end

function f2(stack_level)
    f3(stack_level)
end

function f3(stack_level)
    local t = debug.getinfo(stack_level)
    print(t.name)
end

f1(0) --> getinfo
f1(1) --> f3
f1(2) --> f2
f1(3) --> f1

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

Gun12, ну почему никак? В частных случаях можно :)

 

my_var = my_func
for k,v in pairs(_G) do
    if v == my_var then
        print(k)
    end
end

получим имя, но нужно иметь ввиду отдельно еще ситуации когда функция не глобальная, или хуже того метод класса

 

 

 

Gun12,

Не стОит заниматься селекционным выведением в инкубаторных условиях...

я ж поэтому и написал, что в частных случаях ;)

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

Vita sine libertate, nihil

Vita sine litteris - mors est

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

RvP

Не стОит заниматься селекционным выведением в инкубаторных условиях. Твой вариант найдет оба имени. Какое из них будет "настоящим"? Да никакое. Это синонимы. Как минимум нужно соблюдать следующие условия :

1. В глобальном пространстве имен должно быть только одно имя для функции. Иначе найдутся и остальные.

2. Из первого следует что синонимы должны быть локальны. А это значит что использовать поиск нужно только в области видимости

этой локальной переменной.

3. Добавь сюда итерацию по всей _G, в отличии от простого и быстрого доступа по ключу, и ...

"Жизнь" подобного варианта нужно будет поддерживать искусственно.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...