aromatizer 4 483 Опубликовано 8 Апреля 2016 Логично: если оружие было разряжено при взятии, то незачем разряжать уже разряженное оружие при выбрасывании. Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 8 Апреля 2016 Зарядить оружие можно только поместив его в слот. Значит, при перемещении оружия из слота в инвентарь, оно тоже должно разряжаться. Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 (изменено) Помогите с похожей проблемой: добавил авторазряжалку в ТТ2 и она весьма не кстати разряжает гравипушку(wpn_gravigun) на классе WP_SVD и огнемет(wpn_flame) на классе WP_LR300. Как понял, скрипт работает именно с классами оружия, а не по названию. Поправте, пожалуста, код, чтобы он не разряжал гравипушку и огнемет. Авторазряжалка: -- 08.04.2016 -- KroshkaRoo aka Romz-- TS MOD для SoC вообще и ОГСЕ в частности.--TS MOD для COP-- накопировано и накнопано Tonny S. (aka Tonny на AMK-форуме)--часть функций или их частей выковыряна из AMK, скриптов SAK и др.--[[--для использования авторазряжалки следует:- в скрипте bind_stalker.script:- function actor_binder:net_spawn(data)в конец добавитьts_mod_soc.ts_on_net_spawn() --TS_MOD--- function actor_binder:take_item_from_box(box, item)в конец добавитьts_mod_soc.ts_on_item_take(item) --TS_MOD--- function actor_binder:on_item_take (obj)в конец добавитьts_mod_soc.ts_on_item_take(item) --TS_MOD--- function actor_binder:on_item_drop (obj)ts_mod_soc.ts_on_item_drop(obj) --TS_MOD--- в скрипте _g.script- function start_game_callback()в конец добавитьts_mod_soc.ts_init_module() --TS_MOD----]]--local notest_time = 0local weapon_classes_w_ammo = {}--список аммо для каждой секции. по сути кэшlocal weapon_ammo = {}--лог в текстовый файлfunction ts_log(src,msg)local g_time = game.get_game_time()local t = game.CTime()t:set(2012,5,1,0,0,1,1)local t_diff = g_time:diffSec(t)local f=io.open("ts_log.txt","a")--local c_time = time_global()f:write(string.format("(%s) = %s => %s " ,t_diff,src,msg),"\n" )f:close()--[[--if get_console() thenlocal msg_no_ws = string.gsub("=="..src.."==>"..msg, "%s", "_")get_console():execute(msg_no_ws)end--]]--endfunction ts_init_module()weapon_classes_w_ammo = {[clsid.wpn_ak74] = true,[clsid.wpn_ak74_s] = true,[clsid.wpn_bm16] = true,[clsid.wpn_bm16_s] = true,[clsid.wpn_fn2000] = true,[clsid.wpn_fort] = true,[clsid.wpn_grenade_launcher] = true,[clsid.wpn_groza] = true,[clsid.wpn_groza_s] = true,[clsid.wpn_hpsa] = true,[clsid.wpn_hpsa_s] = true,[clsid.wpn_lr300] = true,[clsid.wpn_lr300_s] = true,[clsid.wpn_pm] = true,[clsid.wpn_pm_s] = true,[clsid.wpn_rg6] = true,[clsid.wpn_rg6_s] = true,[clsid.wpn_rpg7] = true,[clsid.wpn_rpg7_s] = true,[clsid.wpn_shotgun] = true,[clsid.wpn_shotgun_s] = true,[clsid.wpn_stat_mgun] = true,[clsid.wpn_svd] = true,[clsid.wpn_svd_s] = true,[clsid.wpn_svu] = true,[clsid.wpn_svu_s] = true,[clsid.wpn_usp45] = true,[clsid.wpn_usp45_s] = true,[clsid.wpn_val] = true,[clsid.wpn_val_s] = true,[clsid.wpn_vintorez] = true,[clsid.wpn_vintorez_s] = true,[clsid.wpn_binocular] = false,[clsid.wpn_binocular_s] = false,[clsid.wpn_grenade_f1] = false,[clsid.wpn_grenade_fake] = false,[clsid.wpn_grenade_rgd5] = false,[clsid.wpn_grenade_rpg7] = false,[clsid.wpn_knife] = false,[clsid.wpn_knife_s] = false,[clsid.wpn_mounted] = false}--for k,v in pairs(weapon_classes_w_ammo) doendfunction is_weapon_w_ammo(object)local id = get_clsid(object)if id then-- if weapon_classes_w_ammo[id] then ts_log("is_weapon_w_ammo\t\t", "ID "..tostring(id).. " object "..object:name()) endreturn weapon_classes_w_ammo[id] == trueelse-- ts_log("is_weapon_w_ammo\t\t","ERR.is_weapon_w_ammo:id=nil")return falseendendfunction ts_get_weapon_ammo_type(sobj)local stpk=net_packet()cse_alife_item_weapon.STATE_Write( sobj, stpk )local size=stpk:w_tell()stpk:r_seek(size-1)return stpk:r_u8()end-- упрощённый вызов новостиfunction ts_tip(news_caption, msg, showtime, timeout)local news_text = "#системная ошибка. перезагрузите ваш PDA"local texture = "ui\\ui_iconsTotal"if msg thennews_text = msgendif timeout == nil then timeout = 0 endif showtime == nil then showtime = 5 endif timeout == 0 thenlocal player = xr_sound.get_safe_sound_object([[device\pda\pda_tip]])-- ' Играем дефолтный звукplayer:play(db.actor, timeout, sound_object.s2d)endlocal ts_news = news_caption.."\\n"..news_textdb.actor:give_game_news(ts_news, texture, Frect():set( 0, 658, 83, 47), timeout*1000, showtime*1000)end--взято с OGSMfunction spawn_ammo_in_inv(section,number,npc)if npc==nil thennpc=db.actorend-- ts_log("spawn_ammo_in_inv","sect ["..tostring(section).."] npc ["..npc:name().."]" .."\n".."position [ x = "..tostring(npc:position().x)..", y = "..tostring(npc:position().y)..", z = "..tostring(npc:position().z).."]".."\n".." level_vertex_id ["..tostring(npc:level_vertex_id()).."]" .."\n".." game_vertex_id ["..tostring(npc:game_vertex_id()).."]" .."\n".." npc ID ["..tostring(npc:id()).."]" .."\n".." number ["..tostring(number).."]")if number > 0 thenreturn se_respawn.create_ammo(section,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id(),number)endendfunction ts_ammo_discharge(wpn)local name = wpn:name()local ammo_count = wpn:get_ammo_in_magazine()if ammo_count>0 thenlocal ammo_type = ts_get_weapon_ammo_type( alife():object(wpn:id()))-- ts_log("ts_ammo_discharge\t\t", name.." ammo_count = "..ammo_count.." ammo_type = "..ammo_type)local section_ammo = ts_ammo_by_num(wpn:section(),ammo_type)if section_ammo~=nil and string.find(section_ammo,"ammo") thenlocal str1 = string.format(" Боеприпас %s (%d шт.)",game.translate_string(string.gsub(section_ammo,"_","-").."_s"), ammo_count)-- ts_log("ts_ammo_discharge\t\t",str1)ts_tip("Патроны",str1)spawn_ammo_in_inv(section_ammo, ammo_count, nil)wpn:unload_magazine()elseif section_ammo == nil thensection_ammo = ""endts_log("ts_ammo_discharge\t\t", "Object = "..name.." Ammo section fail: "..section_ammo)endendendfunction parse_names_mod( s )local t = {}--отсечка коментарияlocal pos = string.find(s,";")local ps = ""if pos ~= nil and pos > 0 thenps = string.sub(s,1, pos - 1)elseps = sendfor name in string.gfind( ps, "([%w_.\\-]+)%p*" ) dotable.insert( t, name )endreturn tend--найти аммо по номеруfunction ts_ammo_by_num(section, num)local ammo_listif weapon_ammo[section] ~= nil and weapon_ammo[section] ~= "" thenammo_list = weapon_ammo[section]-- ts_log("ts_ammo_by_num",section.." => Found: "..ammo_list)elselocal ltx = system_ini()ammo_list = ltx:r_string(section,"ammo_class")weapon_ammo[section] = ammo_list-- ts_log("ts_ammo_by_num",section.." => Loaded: "..ammo_list)end-- for n,v in pairs(parse_names(ammo_list)) do ts_log("ts_ammo_by_num","....."..n.." -> "..v) endlocal t=parse_names_mod(ammo_list)local cnt = table.getn(t)if cnt == 0 thenreturn nilelseif num >= cnt thenreturn t[1]elsereturn t[num+1]endendfunction test_discharge_weapon(ItemObj)if ItemObj == nil thenreturn falseend-- ts_log("test_discharge_weapon\t",ItemObj:name())if notest_time == 0 thennotest_time = game.time()+6000elseif notest_time>game.time() thenreturn falseelseif is_weapon_w_ammo(ItemObj) thenlocal ItemId = ItemObj:id()local PistolSlot = db.actor:item_in_slot(1)if PistolSlot then-- ts_log("test_discharge_weapon\t", "item "..PistolSlot:name().." in slot 1")IdPistol = PistolSlot:id()endlocal AutomaticSlot = db.actor:item_in_slot(2)if AutomaticSlot then-- ts_log("test_discharge_weapon\t", "item "..AutomaticSlot:name().." in slot 2")IdAutomat = AutomaticSlot:id()endif ItemId ~= IdPistol and ItemId ~= IdAutomat thents_ammo_discharge(ItemObj)else-- ts_log("test_discharge_weapon\t", "item "..ItemObj:name().." in slot")endendendfunction ts_on_net_spawn()-- ts_log("ts_on_net_spawn","..")notest_time = 0endfunction ts_on_item_take(obj)if notest_time>game.time() thenreturn falseend-- ts_log("ts_on_item_take\t\t","...")if obj ~= nil then-- ts_log("ts_on_item_take\t\t", obj:name())test_discharge_weapon(obj)endendfunction ts_on_item_drop(obj)if not db.actor:has_info("ui_inventory") thenreturn falseendif notest_time>game.time() thenreturn falseend-- ts_log("ts_on_item_drop\t\t","...")if obj ~= nil then-- ts_log("ts_on_item_drop\t\t", obj:name())test_discharge_weapon(obj)endend Попытки перевести гравипушку и огнемет на классы из исключений в таблице не увенчались успехом. Может быть, возможно перевести скрипт на работу именно с названием оружия. Так сказать, пожертвовать универсальностью в пользу исключения неприятных моментов( в моде ТТ2 огнемет зарядить может только Шуруп). Изменено 11 Мая 2016 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 навскидку Навскидку мне не поможет: не знаком с программированием. Поэтому и выложил скрипт целиком в надежде получить готовое решение. А при взятии стволов из ящиков оно у вас нормально работает? Вроде нормально, а в чем подвох? Оружие в ящик перекладывается с инвентаря ГГ, т.е. уже разряженное при попадании в него. Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 тайники в которых может быть оружие не побывавшее в инвентаре ГГ. Только что проверил: разряжается оружие при взятии из тайника. Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 Так одно дело прочитать, а вот дотунькать что имелось ввиду- совсем другое.) Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 (изменено) Оружие, для которого не требуется авторазряжание, встречается в модах в единичных случаях, подобных мной описанному. В ТТ2 это два оружия на весь мод, и навряд ли в других модах его наберется более пяти единиц. Возможно, рациональнее избавиться от таблицы и перенести перечень оружия, не требующего авторазряжания, в тело функции? Конечно, если это корректно. Авторазряжалка избавляет от рутинной ручной разрядки оружия в инвентаре и, по сути, исправляет недоработку разработчиков. Естественно, в модах с магазинным питанием она не нужна и даже вредна. Чет, не хочет у меня работать: или вылет или не разряжает все оружие. Вылет: Expression : fatal errorFunction : CScriptEngine::lua_errorFile : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cppLine : 73Description :Arguments : LUA error: d:\games\tt2+aa2\gamedata\scripts\_g.script:1248: attempt to index global 'ts_mod_soc' (a nil value) Изменено 11 Мая 2016 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 (изменено) Так скопипастил- и не работает. А вылеты уже из-за метода ненаучного тыка. А может быть, правильнее не смешивать мух с тараканами и перевести скрипт на работу по наименовании секции а не класса? Получим одну большую портянку с перечнем всего оружия, но безпроблемную адаптацию к другим модам. Ну это я так, чисто гипотетически. Изменено 11 Мая 2016 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 (изменено) Т.е. для моего печального случая с ТТ2 решения нет? Оставить надежду навсегда? Изменено 11 Мая 2016 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 11 Мая 2016 (изменено) Я всегда знал что варианты решения есть всегда и их больше, чем один. Разобрался с авторазряжалкой: надо было не целиком копипастить выложенную функцию, а вставить код в уже существующую. Спасибо всем за помощь. Вот рабочий скрипт: -- 08.04.2016 -- KroshkaRoo aka Romz-- TS MOD для SoC вообще и ОГСЕ в частности.--TS MOD для COP-- накопировано и накнопано Tonny S. (aka Tonny на AMK-форуме)--часть функций или их частей выковыряна из AMK, скриптов SAK и др.-- 2016.05.12 Добавлена таблица исключений для оружия не нуждающегося в авторазряжании. Авторы: Zander_driver и dsh-- Оружие, перекладываемое из инвентаря и выброшенное/выбитое из рук не разряжается.--[[--для использования авторазряжалки следует:- в скрипте bind_stalker.script:- function actor_binder:net_spawn(data)в конец добавитьts_mod_soc.ts_on_net_spawn() --TS_MOD--- function actor_binder:take_item_from_box(box, item)в конец добавитьts_mod_soc.ts_on_item_take(item) --TS_MOD-- этот вызов не нужен Zander_driver- function actor_binder:on_item_take (obj)в конец добавитьts_mod_soc.ts_on_item_take(item) --TS_MOD--- function actor_binder:on_item_drop (obj)ts_mod_soc.ts_on_item_drop(obj) --TS_MOD--- в скрипте _g.script- function start_game_callback()в конец добавитьts_mod_soc.ts_init_module() --TS_MOD----]]--local notest_time = 0local weapon_classes_w_ammo = {}--список аммо для каждой секции. по сути кэшlocal weapon_ammo = {}--сюда занести секции оружия которое не надо разряжать. Zander_driver, dshlocal ex_sects = {[ "wpn_gravigun" ] = true,[ "wpn_flame" ] = true}--лог в текстовый файлfunction ts_log(src,msg)local g_time = game.get_game_time()local t = game.CTime()t:set(2012,5,1,0,0,1,1)local t_diff = g_time:diffSec(t)local f=io.open("ts_log.txt","a")--local c_time = time_global()f:write(string.format("(%s) = %s => %s " ,t_diff,src,msg),"\n" )f:close()--[[--if get_console() thenlocal msg_no_ws = string.gsub("=="..src.."==>"..msg, "%s", "_")get_console():execute(msg_no_ws)end--]]--endfunction ts_init_module()weapon_classes_w_ammo = {[clsid.wpn_ak74] = true,[clsid.wpn_ak74_s] = true,[clsid.wpn_bm16] = true,[clsid.wpn_bm16_s] = true,[clsid.wpn_fn2000] = true,[clsid.wpn_fort] = true,[clsid.wpn_grenade_launcher] = true,[clsid.wpn_groza] = true,[clsid.wpn_groza_s] = true,[clsid.wpn_hpsa] = true,[clsid.wpn_hpsa_s] = true,[clsid.wpn_lr300] = true,[clsid.wpn_lr300_s] = true,[clsid.wpn_pm] = true,[clsid.wpn_pm_s] = true,[clsid.wpn_rg6] = true,[clsid.wpn_rg6_s] = true,[clsid.wpn_rpg7] = true,[clsid.wpn_rpg7_s] = true,[clsid.wpn_shotgun] = true,[clsid.wpn_shotgun_s] = true,[clsid.wpn_stat_mgun] = true,[clsid.wpn_svd] = true,[clsid.wpn_svd_s] = true,[clsid.wpn_svu] = true,[clsid.wpn_svu_s] = true,[clsid.wpn_usp45] = true,[clsid.wpn_usp45_s] = true,[clsid.wpn_val] = true,[clsid.wpn_val_s] = true,[clsid.wpn_vintorez] = true,[clsid.wpn_vintorez_s] = true,[clsid.wpn_binocular] = false,[clsid.wpn_binocular_s] = false,[clsid.wpn_grenade_f1] = false,[clsid.wpn_grenade_fake] = false,[clsid.wpn_grenade_rgd5] = false,[clsid.wpn_grenade_rpg7] = false,[clsid.wpn_knife] = false,[clsid.wpn_knife_s] = false,[clsid.wpn_mounted] = false}--for k,v in pairs(weapon_classes_w_ammo) doendfunction is_weapon_w_ammo(object)local id = get_clsid(object)if id then-- if weapon_classes_w_ammo[id] then ts_log("is_weapon_w_ammo\t\t", "ID "..tostring(id).. " object "..object:name()) endreturn weapon_classes_w_ammo[id] == trueelse-- ts_log("is_weapon_w_ammo\t\t","ERR.is_weapon_w_ammo:id=nil")return falseendendfunction ts_get_weapon_ammo_type(sobj)local stpk=net_packet()cse_alife_item_weapon.STATE_Write( sobj, stpk )local size=stpk:w_tell()stpk:r_seek(size-1)return stpk:r_u8()end-- упрощённый вызов новостиfunction ts_tip(news_caption, msg, showtime, timeout)local news_text = "#системная ошибка. перезагрузите ваш PDA"local texture = "ui\\ui_iconsTotal"if msg thennews_text = msgendif timeout == nil then timeout = 0 endif showtime == nil then showtime = 5 endif timeout == 0 thenlocal player = xr_sound.get_safe_sound_object([[device\pda\pda_tip]])-- ' Играем дефолтный звукplayer:play(db.actor, timeout, sound_object.s2d)endlocal ts_news = news_caption.."\\n"..news_textdb.actor:give_game_news(ts_news, texture, Frect():set( 0, 658, 83, 47), timeout*1000, showtime*1000)end--взято с OGSMfunction spawn_ammo_in_inv(section,number,npc)if npc==nil thennpc=db.actorend-- ts_log("spawn_ammo_in_inv","sect ["..tostring(section).."] npc ["..npc:name().."]" .."\n".."position [ x = "..tostring(npc:position().x)..", y = "..tostring(npc:position().y)..", z = "..tostring(npc:position().z).."]".."\n".." level_vertex_id ["..tostring(npc:level_vertex_id()).."]" .."\n".." game_vertex_id ["..tostring(npc:game_vertex_id()).."]" .."\n".." npc ID ["..tostring(npc:id()).."]" .."\n".." number ["..tostring(number).."]")if number > 0 thenreturn se_respawn.create_ammo(section,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id(),number)endendfunction ts_ammo_discharge(wpn)local name = wpn:name()local wpsec = wpn:section()if ex_sects[ wpsec ] then return end --не разряжаем оружие из таблицы исключений. dshlocal ammo_count = wpn:get_ammo_in_magazine()if ammo_count>0 thenlocal ammo_type = ts_get_weapon_ammo_type( alife():object(wpn:id()))-- ts_log("ts_ammo_discharge\t\t", name.." ammo_count = "..ammo_count.." ammo_type = "..ammo_type)local section_ammo = ts_ammo_by_num(wpn:section(),ammo_type)if section_ammo~=nil and string.find(section_ammo,"ammo") thenlocal str1 = string.format(" Боеприпас %s (%d шт.)",game.translate_string(string.gsub(section_ammo,"_","-").."_s"), ammo_count)-- ts_log("ts_ammo_discharge\t\t",str1)ts_tip("Патроны",str1)spawn_ammo_in_inv(section_ammo, ammo_count, nil)wpn:unload_magazine()elseif section_ammo == nil thensection_ammo = ""endts_log("ts_ammo_discharge\t\t", "Object = "..name.." Ammo section fail: "..section_ammo)endendendfunction parse_names_mod( s )local t = {}--отсечка коментарияlocal pos = string.find(s,";")local ps = ""if pos ~= nil and pos > 0 thenps = string.sub(s,1, pos - 1)elseps = sendfor name in string.gfind( ps, "([%w_.\\-]+)%p*" ) dotable.insert( t, name )endreturn tend--найти аммо по номеруfunction ts_ammo_by_num(section, num)local ammo_listif weapon_ammo[section] ~= nil and weapon_ammo[section] ~= "" thenammo_list = weapon_ammo[section]-- ts_log("ts_ammo_by_num",section.." => Found: "..ammo_list)elselocal ltx = system_ini()ammo_list = ltx:r_string(section,"ammo_class")weapon_ammo[section] = ammo_list-- ts_log("ts_ammo_by_num",section.." => Loaded: "..ammo_list)end-- for n,v in pairs(parse_names(ammo_list)) do ts_log("ts_ammo_by_num","....."..n.." -> "..v) endlocal t=parse_names_mod(ammo_list)local cnt = table.getn(t)if cnt == 0 thenreturn nilelseif num >= cnt thenreturn t[1]elsereturn t[num+1]endendfunction test_discharge_weapon(ItemObj)if ItemObj == nil thenreturn falseend-- ts_log("test_discharge_weapon\t",ItemObj:name())if notest_time == 0 thennotest_time = game.time()+6000elseif notest_time>game.time() thenreturn falseelseif is_weapon_w_ammo(ItemObj) thenlocal ItemId = ItemObj:id()local PistolSlot = db.actor:item_in_slot(1)if PistolSlot then-- ts_log("test_discharge_weapon\t", "item "..PistolSlot:name().." in slot 1")IdPistol = PistolSlot:id()endlocal AutomaticSlot = db.actor:item_in_slot(2)if AutomaticSlot then-- ts_log("test_discharge_weapon\t", "item "..AutomaticSlot:name().." in slot 2")IdAutomat = AutomaticSlot:id()endif ItemId ~= IdPistol and ItemId ~= IdAutomat thents_ammo_discharge(ItemObj)else-- ts_log("test_discharge_weapon\t", "item "..ItemObj:name().." in slot")endendendfunction ts_on_net_spawn()-- ts_log("ts_on_net_spawn","..")notest_time = 0endfunction ts_on_item_take(obj)if notest_time>game.time() thenreturn falseend-- ts_log("ts_on_item_take\t\t","...")if obj ~= nil then-- ts_log("ts_on_item_take\t\t", obj:name())test_discharge_weapon(obj)endendfunction ts_on_item_drop(obj)if not db.actor:has_info("ui_inventory") thenreturn falseendif notest_time>game.time() thenreturn falseend-- ts_log("ts_on_item_drop\t\t","...")if obj ~= nil then-- ts_log("ts_on_item_drop\t\t", obj:name())test_discharge_weapon(obj)endend Изменено 11 Мая 2016 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 12 Мая 2016 (изменено) А dsh на предыдущей странице писал что таблицы надо заполнять вот так: local quest_nps = {["esc_wolf" ] = true, ["esc_fox" ] = true, ["esc_shustryi" ] = true } Изменено 12 Мая 2016 пользователем aromatizer 1 Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 13 Мая 2016 (изменено) Например, чтобы можно было использовать костёр на локации Возможно, тебе пригодится вот это:https://yadi.sk/d/vut19xuZrgzNB Чье, откуда и как- не помню. Случайно наткнулся у себя на винте и вспомнил твой пост. Изменено 13 Мая 2016 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 30 Мая 2016 (изменено) Если в СЗ тоже будут подробные комментарии, то мод однозначно станет востребованной платформой для создания других проектов. Во многих модах есть интересные решения, но, не оставляя описания для чего то или это и как оно работает, авторы фактически заживо хоронят свой труд, ибо весьма не многие обладают знаниями, позволяющими разобраться в коде самостоятельно и использовать его в других модах. Изменено 30 Мая 2016 пользователем aromatizer 2 Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 31 Октября 2018 (изменено) 22 часа назад, Serge_888 сказал: Делал для ЗП магазинный гранатомёт с отъёмным магазином Эта штука называется XM29 OICW. Через сквозной оптический прицел будет весело пулять гранатами. Например, как здесь: https://yadi.sk/i/sGH6mXoELpbt3Q Изменено 31 Октября 2018 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 19 Апреля 2019 1 час назад, Fenrir02 сказал: переходить в оффлайн, находясь при этом в радиусе switch_distance актора Если такое происходит на граничной дистанции, то это нормально: там есть гистерезис на вход/выход. Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 16 Августа 2020 2 часа назад, mdm64 сказал: есть довольно много больших диалогов и другой текстовой информации Предлагаю пару простых вариантов: 1. В gamedata/config/alife.ltx: time_factor = 3 или меньше. Это уменьшит скорость течения времени в игре. 2. Ставить игру на паузу при чтении текстов. Соответственно, надпись "пауза" переместить так, чтобы не мешала. 1 Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 16 Августа 2020 (изменено) 2 часа назад, mdm64 сказал: У меня обычно стоит time_factor = 10, и то потери игрового времени напрягают Не понял: переведи. А так-то time_factor = 10 предназначен для того, чтобы игрок быстрее бежал вперед, а не вдумчиво читал простыни текстов.) Думается мне, что оптимальное значение time_factor = 3. Изменено 16 Августа 2020 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 17 Августа 2020 (изменено) 19 часов назад, mdm64 сказал: контрреволюционно выглядит ситуация, когда ГГ за 3-10 минут выносит хорошо вооружённую многочисленную базу, тратя на переход из одного здания в другое несколько секунд. Контрреволюционно и печально не то, что за 3 -10 минут, а то, что хорошо вооружённую многочисленную базу выносит в одиночку: такой экшон будет интересен разве что детишкам. Изменено 17 Августа 2020 пользователем aromatizer 3 Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 17 Августа 2020 (изменено) Поэтому-то созданная игра и является зеркалом души разработчика. Изменено 18 Августа 2020 пользователем aromatizer Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение
aromatizer 4 483 Опубликовано 22 Августа 2020 (изменено) 19 минут назад, Капрал Хикс сказал: буду модифицировать под звуки в костюме с противогазом Как сделаешь, выложи пожалуйста: давненько сам подумывал о такой полезной фиче. Кстати, что думаешь на счет озвучки необходимости перезарядки оружия, когда закончились патроны в магазине? Изменено 22 Августа 2020 пользователем aromatizer 1 Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Поделиться этим сообщением Ссылка на сообщение