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

Ковыряем ОП-2


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

(изменено)

Вылеты "по памяти" - результат ошибок, а не собственно нехватки памяти.

Но если ставить - то ogse (см. шапку основной темы) или макронопатч.



Про слайдшоу - попробуйте, для начала, закомментировать в amk.script строчки

2717-2721, вот так:

 

-- if (obj) then
-- if (news_main and news_main.on_spawn) then
-- news_main.on_spawn(obj)
-- end
-- end

 

поскольку "официальные патчи" пекутся как пирожки - может быть на пару строк выше/ниже. Ищите по содержанию строк, а номера - для ориентировки.

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

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


Ссылка на сообщение

С взрывающимся рюкзаком Калмыка давайте попробуем для начала самое простое:

Некрасиво, зато универсально.

 

braad_test.script:

 

function mina_band(obj)

строка 614:

sim:release(sim:object(obj:id()))

 

делаем вот так:

--sim:release(sim:object(obj:id())) -- закомментиовано, чтоб не вылетало

level.hide_indicators() -- тоже чтоб не вылетало

level.add_pp_effector( "agr_u_fade.ppe", 8120802, false ) -- чтоб красивее было

 

 

function kalmyak_tele( actor, npc)

строка 714:

db.actor:give_info_portion("kalmyak_vstreca_start")

после нее вставляем:

level.show_indicators() -- возврат на место ПДА и прочего худа.

 

 

Надо тестить, по тому как полная нормальная правка - три функции собственно сценария, переделанный таймерный скрипит + правки в _g и bind_stalker. Переносить ВСЕ это в оп2, чтоб через неделю переделывать под очередной "патч" - гм...

  • Нравится 2

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


Ссылка на сообщение

Со звуками печально все. За подробностями см. http://www.amk-team.ru/forum/index.php?showtopic=8830&p=794407 и плюс-минус 2 страницы вокруг.

 

Да, предупреждаю сразу: кроме как в чистую соль это адаптировать не получится. Ну и последние исправления будут еще нужны.

 

Если коротко - звуки загружаются в неписей. В каждого. При входе в онлайн. В соответствии с конфигом.

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

 

Но работа - адова. Долгая, нудная, и неблагодарная.

 

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

 

Такая вот фигня. 8(

 

P.S. gamedata\sounds\taler - скорее всего, можно оставить один. И тот заткнуть заглушкой.

 

P.P.S: вот это конкретно для чистой соли, где звук уже более-менее отлажен.

http://www.amk-team.ru/forum/index.php?showtopic=8830&p=795433

 

Да, но трупов у костров не должно быть, иначе неписи повиснут. В принципе, эту схему вообще там нужно отключить, поскольку в wather_act ей место, куда она уже со всеми исправленными опечатками и переезжает последние пару-тройку месяцев. ;)

 

Пойдет ли на оп2 (с отключенным тасканием трупов) - зависит от того, что там со звуками делали.

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


Ссылка на сообщение

Параметр типа "Здоровье = +100 %" движком не воспринимается ни как. Только если скриптово.

Ну а что там могли скриптово намутить - вспоминаем недоброй памяти "рюкзачную радиацию" из чистой соли. Ну, или, хе-хе, "античиты" из собственно оп2.

 

Работает как угодно, кроме как можно было бы ожидать. В основном - в зависимости от погоды на Юпитере и взаимного расположения Луны и Марса относительно созвездия Козерога. ;)

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


Ссылка на сообщение

 

 

Re: Параметр типа "Здоровье = +100 %" движком не воспринимается ни как. Воспринимается, хотя, как и голод, отвратно и странно,

 

Не помню у движка двуязычности. Хотя издатель по России и 1C, но это не 1С-бухгалтерия. ;)

База - в попугаях. Проценты чего-то от процентов чего попало.

 

По огнестрелу - там надо кучу всего умножать на кучу другого несколькими разными способами, а потом брать лучшее. ;)

Есть подозрение, что оригинальные цифры тупо подбирались. (но мы его отметем как неорганизованное © ;)).

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


Ссылка на сообщение

Хе-хе, ну, конкурс среди нуждающихся в услугах переводчика с их родного индийского диалекта парсельтонга на человеческий - мы устраивать не будем. А то много кто внезапно для себя проиграет, и расстроится. ;)

Чарли Чаплин в свое время по этой причине отказался участвовать в конкурсе на лучшего Чарли Чаплина.

 

По убивствам - я бы на самом деле сначала в конфигах регенерацию неписей копнул. Это в свое время как раз Архара придумал: терминаторов, восстанавливающих здоровье от околонуля до полного меньше чем за секунду.

 

голова-торс-конечности - это 2 файла. 1 - config\creatures\* - там откомментировано, только называется bones

второй - иммунитеты брони, тоже по костям - для актора.

 

А сами рассчеты - не, подбирать под предпочитаемую погоду. Аффторы оригинала делали курсовые, ага. По всяким конечным автоматам, графическим алгоритмам и прочему. Что может наворотить в курсовой голодный студент - ну, все представляют. ;) ("главный вал из картона, по тому что до этого места все равно ни кто читать не будет" - это еще цветочки).

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


Ссылка на сообщение

подскажите пожалуйста как убавить процент попадания врага из оружия по мне?

поскольку здесь все-таки не совсем стол заказов, а сделай сам, придется делать самому. А как - сейчас поясню:

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


Ссылка на сообщение

 

 

стесняюсь спросить

 

Стесняюсь ответить. ;)

В общем, авторы не осилили сделать что-то типа такого:

 

local string_match = string.match

function log( ... ) _util.log( "ui_amk_options", ... ) end

local t_opt = {
    ["p"] = { "game_pause", "radio_amk_pause", 1 },
    ["r"] = { "show_rad", "radio_amk_rad", 1, bind_stalker.rdet_enable },
    ["h"] = { "suit_hud", "radio_amk_hud", 0 },
    ["m"] = { "din_music", "radio_amk_mus", 0 },
    ["a"] = { "keep_anoms", "radio_amk_anoms", 0 },
    ["d"] = { "ch_difficulty", nil, 0 },
    ["t"] = { "treasure_type", "radio_amk_treasure", 2 } }

function save_options()
    local fs = getFS()
    local flist = fs:file_list_open_ex("$game_saves$", bit_or(FS.FS_ListFiles, FS.FS_RootOnly), "game_options_*.sta" )
    local s = flist:GetAt( 0 ):NameFull()
    local opt = ""
    local n, fn
    for k, v in pairs( t_opt ) do
        n = v[3]
        if n == 0 then
            game_options[ v[1] ] = false
            fn = v[4]
            if fn then fn( false ) end
        else
            game_options[ v[1] ] = n
            fn = v[4]
            if fn then fn( n ) end
        end
        opt = opt .. k .. tostring( n )
    end
    n = "game_options_" .. opt .. ".sta"
    if s ~= n then fs:file_rename( fs:update_path("$game_saves$", s ),
        fs:update_path("$game_saves$", n ), true)
    end
end


class "amk_options" ( CUIScriptWnd )

function amk_options:__init( owner ) super()
    log( "info", "amk_options, owner: %s", ( owner and "true" ) or "nil" )
    self.owner = owner
    self:InitControls()
    self:InitCallBacks()
end


function amk_options:__finalize() end
    

function amk_options:InitControls()
    self:Init( 0, 0, 1024, 768 )
    local xml = CScriptXmlInit()
    xml:ParseFile( "ui_amk_options_wnd.xml" )
    xml:InitStatic( "background", self )
    self.form = xml:InitStatic( "form", self )
    xml:InitStatic( "form:caption", self.form )
    xml:InitStatic( "form:picture", self.form )
    xml:InitStatic( "form:info_pic", self.form )
    ctrl = xml:Init3tButton( "form:btn_quit", self.form )
    self:Register( ctrl, "btn_quit" )

    for k, v in pairs( t_opt ) do
        if v[2] then
            local b = xml:InitTab( ( "form:" .. v[2] ), self.form )
            self:Register( b, v[2] )
            self[ v[2] ] = b
            b:SetNewActiveTab( v[3] )
    end    end
    self:Register( xml:Init3tButton( "form:btn_okay", self.form ), "btn_okay" )
end


function amk_options:InitCallBacks()
    self:AddCallback( "btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self )
    self:AddCallback( "btn_okay", ui_events.BUTTON_CLICKED, self.on_okay, self )
end


function amk_options:on_quit()
    if self.owner then self:GetHolder():start_stop_menu( self.owner, true ) end
    self:GetHolder():start_stop_menu( self, true )
    if level.present() and actor and actor:alive() then get_console():execute( "main_menu off" ) end
end


function amk_options:on_okay()
    for k, v in pairs( t_opt ) do
        log( "info", "on_okay, %s: %s", k, tostring( v[2] ) )
        if v[2] then v[3] = self:GetTabControl( v[2] ):GetActiveIndex() end
    end
    save_options()
    self:on_quit()
end


function amk_options:OnKeyboard( dik, key_action )
    CUIScriptWnd.OnKeyboard( self, dik, key_action )
    if key_action == ui_events.WINDOW_KEY_PRESSED then    -- на выход повесим Esc
        if dik == DIK_keys.DIK_ESCAPE then self:on_quit() end
        if dik == DIK_keys.DIK_RETURN then self:on_okay() end
    end
    return true
end


function init()
    local fs = getFS()
    local flist = fs:file_list_open_ex("$game_saves$", bit_or(FS.FS_ListFiles, FS.FS_RootOnly), "game_options_*.sta" )
    local f_cnt = flist:Size()
    local s, n
    local opt = ""
    if f_cnt ~= 0 then s = flist:GetAt( 0 ):NameFull()
        log( "info", "init, file exist" )
        for k, v in pairs( t_opt ) do
            n = string_match( s, ( k .. "([%d]+)" ) )
            log( "info", "init, %s: %s", k, tostring( n ) )
            if n then
                n = n + 0
                if n ~= 0 then game_options[ v[1] ] = n
                    log( "info", "init, set %s: %s", v[1], n )
                else game_options[ v[1] ], v[3] = false, 0
                    log( "info", "init, set %s: false", v[1] )
                end
                v[3] = n + 0
            else game_options[ v[1] ], v[3] = false, 0
                log( "info", "init, set %s: false", v[1] )
        end    end
        return true
    end
    log( "info", "init, new file" )
    for k, v in pairs( t_opt ) do
        n = game_options[ v[1] ]
        if n then
            if n == true then n = 1 end
            v[3] = n
            log( "info", "init, %s: %s", v[1], n )
        elseif n == false then n, v[3] = 0, 0
            log( "info", "init, keep %s: false", v[1] )
        else
            n = v[3]
            if n ~= 0 then game_options[ v[1] ] = n
            log( "info", "init, set %s: %s", v[1], n )
            else game_options[ v[1] ] = false
            log( "info", "init, set %s: false", v[1] )
        end    end
        opt = opt .. k .. tostring( n )
    end
    local f1 = fs:update_path("$game_config$", "narod_opt.ltx" )
    local f2 = fs:update_path("$game_saves$", "game_options_" .. opt .. ".sta" )
    fs:file_copy( f1, f2 )

    return true
end

и решили размножить первое, что под руку попало.

 

Впрочем, поскольку содержимое все равно не влияет, спасибо что какой-нибудь gamedata.db0 не расплодили.

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


Ссылка на сообщение

Параметры:


trg_pos - вектор, позиция цели, объект или точка пространства
min_dist - минимальная дистанция до объекта, чтобы фото считалось удачным
max_dist - максимальная дистанция до объекта, чтобы фото считалось удачным
max_angle - максимальный угол отклонения позиции цели от направления взгляда на max_dist, в градусах, чтобы фото считалось удачным
use_scope - использовать ли прицел при съемке
trg_loc - если задано - только на данной локации. Обязано быть одним из значений, возвращаемых функцией level.name()
actor_danger - проверять ли данжер ГГ. Если true, то фото засчитывается только если ГГ не видят враги
Если не задано - объект может быть на любой локации]]

function foto_binder:obj_in_shot(trg_pos, min_dist, max_dist, max_angle, use_scope, trg_loc, actor_danger)

-- эффективный угол в пересчете на дистанцию в радианах
local disp = math.sin(math.rad(max_angle))*max_dist -- дисперсия

В общем, "как обычно".


Попытка посмотреть, как можно довести до самоубийства kostya_dialog.script:

"-- Вниманию оптимизаторов: в разделе docs ничего не оптимизировать! Даже не трогать порядок выполнения команд! Из-за использования disable в поршнях и некоторых глюков из-за параллельного выполнения процессов в движке не все работает так, как кажется на первый взгляд. Поэтому ничего здесь не трогайте."

Мда. После этого, + кучи this. + совершенно фееричного
func_by_string["fli_teleport_actor"] = function (params_string)
kostya_dialog.create_teleport(params_string, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertexу_id()) end
в amk - желание пропало. Так что зря отдельные несознательные личности выражались про "фигня этот античит". Не фигня, а круто: достаточно мельком глянуть, и все желание "читерить" сразу отбивает.

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


Ссылка на сообщение
(изменено)

 

Увеличил выпадение денег с нпс, теперь от 1000 до 10000.

Конкретно за эту правку какой файл отвечает?

 

lootmoney.script, он там один.

 

if npc_rank ~= nil then

if npc_rank == "novice" and deadmoney >=150 then deadmoney=math.random(100,1050)

elseif npc_rank == "experienced" and deadmoney >=300 then deadmoney=math.random(1510,3079)

elseif npc_rank == "veteran" and deadmoney >=450 then deadmoney=math.random(3800,6530)

elseif npc_rank == "master" and deadmoney >=600 then deadmoney=math.random(6540,10000)

end

end

 

Первая и последняя строчки - как обычно: "чтобы было".

 

Посмотрел lootmoney.script внимательнее. Не, так не пойдет. Вот как-то так: (lua под рукой нет, будете делать - проверяйте)

 

 

function lootmoney( npc )
 local m
 if npc and npc:character_community() ~= "arena_enemy" then -- убрал лишние проверки
  m = npc:money() or 0
  if m ~= 0 then npc:give_money( -m ) end -- чистим деньги у непися
 else return -- откуда-то прилетел глючный вызов. Интересно, откуда ? Ничего не делаем.
 end
 if monnoroch_options.money_real == 1 then -- зачем-то перевернули смысл опции -- должно быть 0 - тогда тогда деньги берутся отсюда, 1 - отдается сколько -- было у непися. Ну да ладно...
  local npc_rank = ranks.get_obj_rank_name( npc ) -- уровень непися -- здесь был полный глюкодром. Переделал все.
  if npc_rank == "experienced" then m = math.random( 1510, 3079 )
  elseif npc_rank == "veteran" then m = math.random( 3800, 6530 )
  elseif npc_rank == "master" then m = math.random( 6540, 10000 )
  else m = math.random( 100, 1050 ) -- для непися-новичка
  end
 end
 -- формируем и выводим сообщение
 local s = "%c[255,255,0,0]Мёртвый сталкер:%c[default]" .. npc:character_name()
  .. "\\n%c[255,255,0,0]Обнаружено денег на счёте:%c[default]"
  .. m .. "руб."
 db.actor:give_game_news( s, "ui\\ui_iconsTotal", Frect():set( 0, 0, 83, 47 ), 1, 4000 )
 db.actor:give_money( m ) -- даем денег актору
 game_stats.money_quest_update( m ) -- останки "рангового" мода
 if ui_mm_opt_main.GetOption( "autograb_body" ) then -- автообыск трупа
  start_transfer_all_desired( npc )
 end
end

 

Изменено пользователем Dennis_Chikin
  • Спасибо 1
  • Нравится 1

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


Ссылка на сообщение

Погодное: туман действительно весьма сильно жрет.
Кроме того, что, да, ничего не видно, а сами неписи настроены так, чтобы туман полностью игнорировать.

в config\weathers\* во всех фалах, где есть строчки
fog_density =
- меняем значения на 0.01

Особенно актуально для отключения слайд-шоу в X16.

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

far_plane = - дальность отрисовки - вообще не трогаем, либо не уменьшаем ниже 280, иначе полезут глюки с отрисовкой рельефа (глючные карты: болото, АТП, бар, ЧАЭС)

  • Полезно 1

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


Ссылка на сообщение
(изменено)

Вот скрипт откомментированный. Опять плакал.

local weight_normal = 90
local weight_max = 0
local items_dropped_max = 10

local kolco = {from = 0.5, to = 1.5}
local visota = {from = 0.5, to = 1.5}

local sim
local actor
local weight_rukzak
local weight_item
local ini
local items = {}
local items_dropped = {}
local slot0_id, slot1_id, slot2_id -- предмет в слотах игнорируется, но вес его учитывается
local slot6_id -- одетый бронежилет игнорируется, но вес его учитывается

function do_vbr()	-- выбрасывание предметов, удалить все нафиг, оставив саму функцию
			-- и последний end
	sim = alife()
	actor = db.actor
	weight_max = weight_normal+add_weight()	-- 90 кг. (см. выше + погода на марсе)
	if weight_max > 350 then weight_max = 350 end	-- максимальное значение веса
	if sim and actor then	-- проверка ни о чем вообще, по тому как в любом случае вылетит раньше
		calc_inventory_weight()	-- делается странное
		-- get_console():execute("load ~~~ вес всего, что на и у ГГ: "..weight_rukzak.." от "..weight_max)

		-- сравнивается громкость чихания тушкана на ЧАЭС с погодой на марсе
		if weight_rukzak > weight_max then
			-- выбрасываем предметы рандомно
			local items_count = #items
			local iterations = 0
			local items_dropped_count = 0
			local i
			
			db.actor:give_info_portion("biznes_remove_special_item")
			while weight_rukzak > weight_max
				and iterations < items_count
				and items_dropped_count < items_dropped_max
			do
				i = math.random(items_count) -- случайный предмет
				if not items_dropped[i] then -- если он еще не был выброшен
					items_dropped[i] = true
					items_dropped_count = items_dropped_count + 1
					actor:drop_item_and_teleport(items[i][1], actor:position():add(calc_vector_add()))
					weight_rukzak = weight_rukzak - items[i][2]
					iterations = iterations + 1
				end
			end
			db.actor:disable_info_portion("biznes_remove_special_item")
			
			news_manager.send_tip(db.actor, "Из-за перегруза порвался рюкзак.", nil, "nano", 30000)
		end
	end
end


function calc_inventory_weight()	-- делается странное, удалить до последнего end
	items = {}
	items_dropped = {}
	weight_rukzak = 0
	ini = system_ini()

	-- сохраняются id предметов в слотах
	slot0_id = (db.actor:item_in_slot(0) and db.actor:item_in_slot(0):id()) or -1
	slot1_id = (db.actor:item_in_slot(1) and db.actor:item_in_slot(1):id()) or -1
	slot2_id = (db.actor:item_in_slot(2) and db.actor:item_in_slot(2):id()) or -1
	slot6_id = (db.actor:item_in_slot(6) and db.actor:item_in_slot(6):id()) or -1

	db.actor:inventory_for_each(process_calc) -- перебираются предметы в инвентаре,
	-- медленно и печально. Кстати, функция работает на самом деле странно, и ни кто не знает
	-- что она делает на самом деле.
end


function process_calc( item, npc )	-- перебор предметов в инвентаре, можно удалять.
	if item then
		local section = item:section()
		if section ~= "arc_ballast"	-- очередная дурная проверка. все, что могло
			-- повиснуть и вылететь - уже повисло и вылетело.
			and ini:section_exist(section)
			and ini:line_exist(section, "inv_weight")
		then
			weight_item = ini:r_float(section, "inv_weight")
			--get_console():execute("load ~~~ в рюкзаке: "..section.." весом: "..weight_item)
			if weight_item > 0 then
				local item_id = item:id()
				-- игнорируем предмет в слотах, на поясе, одетый бронежилет или "защищённый" предмет
				if  slot0_id ~= item_id
					and slot1_id ~= item_id
					and slot2_id ~= item_id
					and slot6_id ~= item_id
					and not inventory.on_belt(section)
					and protected_items.actor_items_keep(section) == false
				then 
					table.insert(items, {item, weight_item})
					table.insert(items_dropped, false)
				end
				-- но вес его учитываем
				weight_rukzak = weight_rukzak + weight_item
			end
		end
	end
end


function calc_vector_add()	-- как бы, случайный вектор. Не трогаем.
	local a = math.random() * 2 * math.pi
	local r = kolco.from + math.random() * math.abs(kolco.to - kolco.from)
	local x = math.cos(a) * r
	local z = math.sin(a) * r
	local y = visota.from + math.random() * math.abs(visota.to - visota.from)
	return vector():set(x, y, z)
end


function add_weight()	-- вычисление погоды на марсе, якобы связанное с надетым на ГГ костюмом
	-- не трогаем, по тому как мало ли где еще это случайное число требуется.
	local item = db.actor:item_in_slot(6)
	if not item then return 0 end

	local ini = system_ini()
	local section = item:section()
	if not (ini:section_exist(section) and ini:line_exist(section, "additional_inventory_weight")) then return 0 end

	local diff = level.get_game_difficulty()
	local cond = item:condition()
	return ini:r_float(section, "additional_inventory_weight")*(cond+(1-cond)*(3-diff)/3)
end


function vbr()	-- выбрасывание предметов в случайные промежуки времени
	if  db.vbr > time_global() or	-- классическая ошибка: люто, бешено, производим странные
		-- проверки в КАЖДОМ апдейте !
		db.actor:is_talking() or	-- а это - чтобы не вылетало, если копаемся
		has_alife_info("ui_car_body") or	-- в тайнике, разговариваем или
		has_alife_info("actor_fly") or		-- сработал телепорт
		has_alife_info("teleport_started") or
		db.no_cheat or
		not db.actor:alive() or
		(db.actor:active_slot() == 4 and device().fov < 60)
	then return end

	db.vbr = next_vbr()	-- вычисляется как бы время следующего срабатывания, но
				-- см. комментарий первой строки
	do_vbr()	-- выбросить случайный предмет

	-- итого, все сносим и вставляем строку	db.vbr = time_global() + 120000
	-- или db.vbr = time_global() + 300000  -- или еще больше. Без разницы.
end


function weight_ok()	-- танцы с бубном.
	weight_max = weight_normal+add_weight()
	if weight_max > 350 then weight_max = 350 end
	calc_inventory_weight()
	return weight_rukzak <= weight_max
	-- снести все, и вставить return true
end


function next_vbr()	-- как бы вычисление случайного времени. Можно оставить.
	return time_global()+300000+math.random(-60000,60000)
end


function vibros()
end

 

Не рвущийся рюкзак. Инструкция.

Изменено пользователем Eugen81
  • Полезно 1

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


Ссылка на сообщение

В оригинальном скрипте была ошибка. Я ее в свое время правил.

Попала ли правка в оп2 - не смотрел. Если спавнится - слава слонопотаму.

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


Ссылка на сообщение

В общем так: чтобы неписи не говорили одновременно, и не устраивали адские групповые коцерты типа "окуджава под аккомпанимент балалайки в сопровождениии милого августина на губной гармошке" - этим делом рулит xr_kamp.script.

 

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

 

 

Группы задаются в логике, типа:

[logic@esc_lager_kamp1] ; сидящие днём у костра
active = kamp1@esc_lager

[kamp1@esc_lager]
center_point = camp_center
path_walk = camp_center_task
soundgroup = esc_lager
meet = meet@lager
Да, а кривые комментарии в звуках приводят к тому, что либо неписи возбуждаются, и начинают воевать, либо к тому, что сам звук проигрывается странно.

 

P.S. И по ходу еще ни кто так и не проверил, как формат звука влияет на тормоза с лагами. Вполне может быть такая же фигня, как с кривыми текстурами.

  • Нравится 1

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


Ссылка на сообщение

Нет, это не шмон, а оттаскивание.

Шмон - в wather_act.

 

НИ не нужна, но менять там (в обоих) что-либо надо крайне аккуратно. Все на соплях и при помощи "какой-то матери" .

  • Нравится 1

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


Ссылка на сообщение

Bricklayer, менять нужно файлы диалогов, откуда это вызывается.

В akill.script максимум убрать строки 3482-3486, чтобы не мешало фиксам по "тихой/дикой/еще какой попало фотоохоте".

 

поиск в config\gameplay по "ohota_wolf_have" и т.д.

Ну вот конкретно по "foto_ohota_white_wolf".

Только не в tasks_akill.xml, а где-то еще должно быть.

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


Ссылка на сообщение

К пулестойкости - это именно проценты. Из рассчета, что 100% - полная имунность к повреждениям от пуль как ГГ, так и костюма. 0% - Костюм огребает от пули полностью, ГГ - в зависимости от защитных свойств костюма.

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

 

Про здоровье/выносливость - см. выше. Радиаций, на самом деле, 3 разных (2 оригинальные, имунность в процентах и выведение в +процентах к процентам + рюкзачная скриптовая). dc

 

Heretic, нет, защита не плюсуется. 50% от артов + 50% от костюма - это не 100% защиты.

Кроме того, защита костюмов именно от пулевых - это отдельный конфиг, с раскладкой по костям.

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


Ссылка на сообщение

romale, да там этих проверок столько "наоптимизировали"...

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

Alfa2012, нарушаем ? Тема не для погадалок.
Есть предположение - показываем код/конфиг/success story. А что касается "по памяти" - вообще идем в "справочник вылетов", и читаем.

 

P.S. Всем: таки просьба не путать темы, и "где найти", "как пройти", "а мне не нравится" - постить в более соответствующую. Здесь и так уже ориентироваться сложно становится.
 

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

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