Graff46 625 Опубликовано 16 Октября 2018 @lordmuzer, Появился. А текстуру я взял у стандартной кнопки, у нее все есть. Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 16 Октября 2018 @lordmuzer, не заработало, но я без кнопки обошелся Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 2 Ноября 2018 @AndreySol,@Змея, Можно и записывать. Если еспользуйте X-Ray extensions, то там есть отдельная ф-ция. Логику можно задать в секции НПС или нет-пакетом. Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 3 Ноября 2018 @Fenrir02, https://xray-engine.org/index.php?title=X-Ray_extensions Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 3 Ноября 2018 @Fenrir02, Эти методы применимы к клиентскому объекту фонаря. db.actor:object('device_torch'):switch_torch( true или false) -- включить или выключить фонарик db.actor:object('device_torch'):is_torch_enabled() --Возвратит true или false в зависимости включен-ли фонарь 1 2 Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 12 Ноября 2018 (изменено) @Romann, Жаркам может свои биндеры сделать? В секции аномалии нужно смотреть ключ "script_binding" Или так: Скрытый текст local thermal_zones_tbl = { zone_field_thermal = true, zone_field_thermal_weak = true, zone_field_thermal_average = true, zone_field_thermal_strong = true, zone_mine_thermal = true, zone_mine_thermal_weak = true, zone_mine_steam = true, zone_mine_steam_weak = true, zone_mine_steam_average = true, zone_zharka_static = true, zone_zharka_static_weak = true, zone_zharka_static_average = true, zone_zharka_static_strong = true } function anomaly_zone_binder:update(delta, obj) object_binder.update(self, delta) --Система замерзания, чтоб греться у термо аномалий. if thermal_zones_tbl[self.object:section()] then if db.actor:position():distance_to(self.object:position()) <= 4 then if not has_alife_info("EugeniumFreezingSystemWarm") then db.actor:give_info_portion("EugeniumFreezingSystemWarm") end end --Система замерзания, чтоб греться у термо аномалий. ... ... ... end Но я бы отдельный биндер сделал... Изменено 12 Ноября 2018 пользователем Graff46 1 Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 16 Ноября 2018 @_Sk8_AsTeR_, Это шейдеры надо править. Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 17 Ноября 2018 Что делает эта ф-ция? Скрытый текст function mob_capture(mob, reset_actions) if reset_actions == nil then abort("mob_capture: reset_actions parameter's value is not specified") end if reset_actions then reset_action(mob, script_name()) else if not mob:get_script() then mob:script(true, script_name()) end end end И что делают эти классы\методы? reset_action(mob, script_name()) mob:script(true, script_name()) Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 18 Ноября 2018 @Norman Eisenherz, В x-ray extensions вроде можно скриптами включать\отключать ПНВ Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 28 Ноября 2018 @Fenrir02, Как предметы указывать будите? (ид, имя секции, .... ?) @stalkergoshawk, Если x-ray extensions есть в движке, то у серверного объекта есть свойство angle, к нему нужно приравнять вектор, который укажет направление. alife():create("stalker", vector():set(0,0,0,), 0, 0).angle = vector():set(0, 1.5, 0) Если x-ray extensions нет, то нэт-пакетами. Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 28 Ноября 2018 @stalkergoshawk, function set_dir(id, dir) -- установка дирекции (поворота) объекта через нэт-пакет (нужны правки скриптов с типами объектов) local sobj = alife2:object(id) if sobj then local pk = get_netpk(sobj, 0) if pk:isOk() then return pk:setCallback( { direction = dir } ) end end return false end Нужно подключить модуль m_netpk.script Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 28 Ноября 2018 (изменено) @Fenrir02, Скрытый текст function release_random_item(num) local Tabl = {["section"] = true, ["section2"] = true} -- таблица необрабатываемых предметов по их секциям local actor = db.actor local cnt = actor:object_count() if cnt < num then return end for i=1, num do local item = actor:object(math.random(0, cnt-1)) local sobj = alife():object(item:id()) if sobj and not Tabl[sobj:section_name()] then alife():release(sobj,true) cnt = actor:object_count() end end end Изменено 28 Ноября 2018 пользователем Graff46 1 1 Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 29 Ноября 2018 @stalkergoshawk, Где то в этой теме . Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 15 Декабря 2018 @AndreySol, Принимает серверный объект, вот строка из луа_хелп: function release(alife_simulator*, cse_abstract*, boolean); Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 18 Декабря 2018 @Zagolski, Остались. Обратная совместимость нужна когда пишите модули для общего пользования. Если table.geth нет (не определена Луа новее 5.2 вроде), то её можно написать самому. Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 7 Января 2019 Возможно ли чтение\запись нэт-пакетов актора? Такое не работает local act = alife():object(0) local pk = m_netpk.get(act) Но так работает: local packet = net_packet() act:STATE_Write(packet) Может кто "карту смещений" нэт-пакета для актора предоставить? Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 7 Января 2019 (изменено) Вот что удалось наработать: 1. В m_netpk.script есть разбор ГГ на нэт-пакет, но при попытке передать ГГ скрипту - вылет. 2. Я используя наработки m_netpk.script написал ф-цию для чтения пакета ГГ. Скрытый текст function actnet() local c = { -- Взято из m_netpk.script { name = 'game_vertex_id', type = 'u16', default = -1 }, { name = 'distance', type = 'f32', default = 0.0 }, { name = 'direct_control', type = 'u32', default = 1 }, { name = 'level_vertex_id', type = 'u32', default = -1 }, { name = 'object_flags', type = 'h32', default = 0 }, --{ name = 'custom_data', type = 'sz', default = '' }, --/#-# if only 'string' { name = 'custom_data', type = 'sz', default = "" }, --/#!# used helpers { name = 'story_id', type = 's32', default = -1 }, { name = 'spawn_story_id', type = 's32', default = -1 }, { name = 'money', type = 'u32', default = 0 }, { name = 'specific_character', type = 'sz', default = '' }, { name = 'trader_flags', type = 'h32', default = 1 }, { name = 'character_profile', type = 'sz', default = '' }, { name = 'community_index', type = 'h32', default = -1 }, { name = 'rank', type = 'h32', default = -2147483647 }, { name = 'reputation', type = 'h32', default = -2147483647 }, { name = 'character_name', type = 'sz', default = '' }, --{ name = 'cse_alife_trader_abstract__unk2', type = 'u8', default = 0, ver = 4 }, --/ SCoP --{ name = 'cse_alife_trader_abstract__unk3', type = 'u8', default = 0, ver = 4 } --/ SCoP { name = 'skeleton_name', type = 'sz', default = '$editor', hook = 'idle' }, { name = 'skeleton_flags', type = 'u8', default = 0 }, { name = 'source_id', type = 'h16', default = -1 }, { name = 'bones_mask', type = 'u8v8', default = {0,0,0,0,0,0,0,0} }, -- на этом вылет { name = 'root_bone', type = 'u16', default = 0 }, { name = 'bbox_min', type = 'f32v3', default = vector() }, { name = 'bbox_max', type = 'f32v3', default = vector() }, { name = 'bones_count', type = 'u16', default = 0 }, --/#~# changed name ('bone_count') { name = 'ph_position', type = 'q8v3', default = {0,0,0}, }, { name = 'ph_rotation', type = 'q8v4', default = {0,0,0,0} }, { name = 'enabled', type = 'b8', default = true } } local act = alife():object(0) local packet = net_packet() act:STATE_Write(packet) local str = "" for _, v in ipairs(c) do str = str.."\n".. v.name..":".. tostring(m_netpk['_r_'..v.type](packet) ) end nt.logfile(str) -- Запись в файл end 3. Есть ошибки в работе: Вылет при попытке чтения методом :r_vec3(vector()), ошибки в парсинге. Возможно 1-я ошибка возникает из 2-ой. Я читал пакет до того места где надо читать векторы и вот что получил: Скрытый текст game_vertex_id:3283 -- Верно distance:64.400001525879 -- Наверное Верно direct_control:1 -- Наверное Верно level_vertex_id:79894 -- Верно object_flags:-65 -- Наверное Верно ********************* custom_data*************** custom_data:[dont_spawn_character_supplies] [spawn] ;wpn_binoc detector_simple device_torch vodka vodka story_id:-1 spawn_story_id:-1 ******************************************************* money:1869898593 -- Не верно! У ГГ было 40р.! specific_character:rs\hero\stalker_novice -- Побито! должно быть : "actors\hero\stalker_novice" trader_flags:0 -- Наверное Верно character_profile: -- Нет ничего community_index:4161536 -- Не вено (нет столько группировок) rank:0 -- Вроде не верно reputation:-16777216 -- Вроде не верно character_name:я -- Верно skeleton_name: -- ? skeleton_flags:0 -- ? source_id:0 -- ? Изменено 7 Января 2019 пользователем Graff46 Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 7 Января 2019 (изменено) @Kirgudu, Я делал из примера m_netpk.script . Вот сейчас переделал: Скрытый текст function actnet() local c = { { name = 'game_vertex_id', type = 'u16', default = -1 }, { name = 'distance', type = 'f32', default = 0.0 }, { name = 'direct_control', type = 'u32', default = 1 }, { name = 'level_vertex_id', type = 'u32', default = -1 }, { name = 'object_flags', type = 'h32', default = 0 }, --{ name = 'custom_data', type = 'sz', default = '' }, --/#-# if only 'string' { name = 'custom_data', type = 'sz', default = "" }, --/#!# used helpers { name = 'story_id', type = 's32', default = -1 }, { name = 'spawn_story_id', type = 's32', default = -1 }, --{ name = 'money', type = 's8', default = 0 }, --{ name = 'specific_character', type = 'sz', default = '' }, --{ name = 'trader_flags', type = 'h32', default = 1 }, { name = 'visual_name', type = 'sz', default = '' }, { name = 'visual_flags', type = 'u8', default = 0 }, { name = 'g_team', type = 'u8', default = -1 }, { name = 'g_squad', type = 'u8', default = -1 }, { name = 'g_group', type = 'u8', default = -1 }, { name = 'health', type = 'f32', default = 1.0 }, { name = 'dynamic_out_restrictions', type = 'l32u16v', default = {} }, { name = 'dynamic_in_restrictions', type = 'l32u16v', default = {} }, { name = 'killer_id', type = 'h16', default = -1 }, { name = 'game_death_time', type = 'u8v8', default = {0,0,0,0,0,0,0,0} }, { name = 'character_profile', type = 'sz', default = '' }, { name = 'community_index', type = 'h32', default = -1 }, { name = 'rank', type = 'h32', default = -2147483647 }, { name = 'reputation', type = 'h32', default = -2147483647 }, { name = 'character_name', type = 'sz', default = '' }, --{ name = 'cse_alife_trader_abstract__unk2', type = 'u8', default = 0, ver = 4 }, --/ SCoP --{ name = 'cse_alife_trader_abstract__unk3', type = 'u8', default = 0, ver = 4 } --/ SCoP { name = 'skeleton_name', type = 'sz', default = '$editor', hook = 'idle' }, { name = 'skeleton_flags', type = 'u8', default = 0 }, { name = 'source_id', type = 'h16', default = -1 }, { name = 'bones_mask', type = 'u8v8', default = {0,0,0,0,0,0,0,0} }, { name = 'root_bone', type = 'u16', default = 0 }, --[[ { name = 'bbox_min', type = 'f32v3', default = vector() }, { name = 'bbox_max', type = 'f32v3', default = vector() }, { name = 'bones_count', type = 'u16', default = 0 }, --/#~# changed name ('bone_count') { name = 'ph_position', type = 'q8v3', default = {0,0,0}, }, { name = 'ph_rotation', type = 'q8v4', default = {0,0,0,0} }, { name = 'enabled', type = 'b8', default = true } ]] } local act = alife():object(0) local packet = net_packet() act:STATE_Write(packet) local str = "" for _, v in ipairs(c) do str = str.."\n".. v.name..": ".. tostring(m_netpk['_r_'..v.type](packet) ) end nt.logfile(str) end Как дохожу до векторов - вылет. Вот результат смещений : Скрытый текст game_vertex_id: 3283 distance: 64.400001525879 direct_control: 1 level_vertex_id: 79894 object_flags: -65 custom_data: [dont_spawn_character_supplies] [spawn] ;wpn_binoc detector_simple device_torch vodka vodka story_id: -1 spawn_story_id: -1 visual_name: actors\hero\stalker_novice visual_flags: 0 g_team: 0 g_squad: 0 g_group: 0 health: 1 dynamic_out_restrictions: table: 0FE10940 dynamic_in_restrictions: table: 14A0F5F8 killer_id: 65535 game_death_time: table: 14A05EA8 -- возможно тут пошло не так character_profile: ( -- пошло точно всё ни так , и дальше тоже community_index: 1667301376 rank: 7499636 reputation: 0 character_name: actor -- а тут норм. и предыдущий возможно тоже skeleton_name: skeleton_flags: 0 source_id: 0 bones_mask: table: 437421A0 root_bone: 64450 Может подскажите чего по смещениям? Изменено 7 Января 2019 пользователем Graff46 Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 7 Января 2019 @Kirgudu, Посидел я повнимательнее и собрал смещения : Скрытый текст function actnet() local c = { { name = 'game_vertex_id', type = 'u16', default = -1 }, { name = 'distance', type = 'f32', default = 0.0 }, { name = 'direct_control', type = 'u32', default = 1 }, { name = 'level_vertex_id', type = 'u32', default = -1 }, { name = 'object_flags', type = 'h32', default = 0 }, --{ name = 'custom_data', type = 'sz', default = '' }, --/#-# if only 'string' { name = 'custom_data', type = 'sz', default = "" }, --/#!# used helpers { name = 'story_id', type = 's32', default = -1 }, { name = 'spawn_story_id', type = 's32', default = -1 }, { name = 'visual_name', type = 'sz', default = '' }, { name = 'visual_flags', type = 'u8', default = 0 }, { name = 'g_team', type = 'u8', default = -1 }, { name = 'g_squad', type = 'u8', default = -1 }, { name = 'g_group', type = 'u8', default = -1 }, { name = 'health', type = 'f32', default = 1.0 }, { name = 'dynamic_out_restrictions', type = 'l32u16v', default = {} }, { name = 'dynamic_in_restrictions', type = 'l32u16v', default = {} }, { name = 'killer_id', type = 'h16', default = -1 }, { name = 'game_death_time', type = 'u8v8', default = {0,0,0,0,0,0,0,0} }, { name = 'money', type = 'u32', default = 0 }, { name = 'specific_character', type = 'sz', default = '' }, { name = 'trader_flags', type = 'h32', default = 1 }, { name = 'character_profile', type = 'sz', default = '' }, { name = 'community_index', type = 'h32', default = -1 }, { name = 'rank', type = 'h32', default = -2147483647 }, { name = 'reputation', type = 'h32', default = -2147483647 }, { name = 'character_name', type = 'sz', default = '' }, --{ name = 'cse_alife_trader_abstract__unk2', type = 'u8', default = 0, ver = 4 }, --/ SCoP --{ name = 'cse_alife_trader_abstract__unk3', type = 'u8', default = 0, ver = 4 }, --/ SCoP { name = 'skeleton_name', type = 'sz', default = '$editor', hook = 'idle' }, { name = 'skeleton_flags', type = 'u8', default = 0 }, { name = 'source_id', type = 'h16', default = -1 }, { name = 'bones_mask', type = 'u8v8', default = {0,0,0,0,0,0,0,0} }, { name = 'root_bone', type = 'u16', default = 0 }, --[[ { name = 'bbox_min', type = 'f32v3', default = vector() }, { name = 'bbox_max', type = 'f32v3', default = vector() }, { name = 'bones_count', type = 'u16', default = 0 }, --/#~# changed name ('bone_count') { name = 'ph_position', type = 'q8v3', default = {0,0,0}, }, { name = 'ph_rotation', type = 'q8v4', default = {0,0,0,0} }, { name = 'enabled', type = 'b8', default = true }, --/#~# changed type 'u8' { name = 'holder_id', type = 'h16', default = -1 }, { name = 'actor_state', type = 'h16' }, { name = 'actor_accel_header', type = 'h16' }, { name = 'actor_accel_data', type = 'h32' }, { name = 'actor_velocity_header', type = 'h16' }, { name = 'actor_velocity_data', type = 'h32' }, { name = 'actor_radiation', type = 'f32' }, { name = 'actor_weapon', type = 'u8' }, { name = 'num_items', type = 'u16' } --/#?# ]] } local act = alife():object(0) local packet = net_packet() act:STATE_Write(packet) local str = "" for _, v in ipairs(c) do str = str.."\n".. v.name..": ".. tostring(m_netpk['_r_'..v.type](packet) ) end nt.logfile(str) end Всё работает, но до первого вектора! Поделиться этим сообщением Ссылка на сообщение
Graff46 625 Опубликовано 7 Января 2019 @Graff46, Всё работает! Просто конструкция tostring([ type: userdata]) не допустима в Луа, пришлось добавить условие: local str = "" local dd = "" for _, v in ipairs(c) do dd = m_netpk['_r_'..v.type](packet) if type(dd) == "userdata" then dd = "userdata" end -- Вот условие str = str.."\n".. v.name..": ".. tostring(dd) end nt.logfile(str) Поделиться этим сообщением Ссылка на сообщение