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

Ковыряемся в файлах ОП 2.1


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

Oversized netpacket before write! [8202 > 8192]
...

s\op-2.1\gamedata\scripts\binders\binder_safe.script:61 ...

 

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

 

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


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

@Alexander_Vesker, я тут подумал (хотя думать - вредно, от этого мысли в голове появляются), можно попробовать как-то так:

    local ini

    local pos = actor:position()  -- actor должен быть определен где-то раньше, пока его нет в игре - не вызывать
    for k, v in pairs( db.creatures ) do    -- что есть в онлайне
        if t_mobs[v:clsid()] then -- табличку с классами монстров не забываем прописать
            if ( not v:alive() ) and ( ( v:story_id() == 4294967296 ) or ( v:story_id() == -1 ) )  - не уникальные
              and v:position():distance_to_sqr( pos ) < 2500 then  -- 50 метров ограничение
                     v = sim:object( v:id() )  -- local sim = alife() где-то должно быть
                    if v and v.looted then sim:release( v ) end  -- .looted ставим в on_use монстров
            end
        elseif v:clsid() == c_npc then  -- класс сталкеров прописать
            if ( not v:alive() ) and ( ( v:story_id() == 4294967296 ) or ( v:story_id() == -1 ) )    -- не уникальные
              and v:position():distance_to_sqr( pos ) < 2500 then  -- ну и далее по тексту
                     v = sim:object( v:id())
                    if v and v.looted then sim:release( v ) end  -- .looted ставим в on_use сталкеров
    end    end    end

 

в bind_monsters/bind_stalker дописать типа

function stalker_binder:use_callback(obj, who)
    if self.object:alive() then
...
    else
...
        local v = alife():object( obj:id() )
        if v then v.looted = true end
    end
 ...
end

 

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

 

@Гасан Салихов, говорил же уже - попробовать двигаться в направлении вылета, регулярно применяя котика.

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

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


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

По поводу вылета [10.02.19 11:50:24.247]  [LUA]  1 : [Lua] ...iles (x86)\op-2.1\gamedata\scripts\cycle_task.script(548) : check_task_props

...

[10.02.19 11:50:24.247] [error]Arguments     : Input object is nil!

 

Посмотрел сейчас файл, в котором я лично откручивал тормоза.

Строка выглядит так:        end

Вывод слегка очевиден.

 

И, да, если напрячь телепатию, и погадать на кофейной гуще, то весь кусок должен выглядеть примерно так:
 

Скрытый текст



--' Проверка свойств задания на доступность к выдаче
function CCycleTask:check_task_props(task_desc)
    --' Проверка по активным заданиям данного типа у вендора
    if self.active_task_by_type[task_desc.complex_type] ~= nil then
        task_desc.enabled_props = false
        return
    end

    --' Проверка по разовости
    if task_desc.status == self.status.once then
        task_desc.enabled_props = false
        return
    end

    --' Проверка по блоку приоритета по времени ожидания
    if self.current_vendor_locked_prior[task_desc.complex_type] and self.current_vendor_locked_prior[task_desc.complex_type] >= task_desc.prior then
        task_desc.enabled_props = false
        return
    end

    --' Проверка по кондлисту
    if task_desc.condlist and xr_logic.pick_section_from_condlist(db.actor, task_desc.condlist) == nil then
        task_desc.enabled_props = false
        return
    end

    --' Проверка по таймауту
    if task_desc.next_time then
        if task_desc.next_time >= game.hours() then
            task_desc.enabled_props = false
            return
        else
            task_desc.next_time = nil    --' Время ожидания вышло
        end
    end

    --' Проверка по цели
    if task_desc.type == self.type.eliminate_lager then
        local strn = task_desc.target and alife():object( task_desc.target )
        if strn then
            local g = strn.gulag
            if g and g:get_population_comed() >= 1 then
                task_desc.enabled_props = true
                return
            end
        else log( "cycle_tasks, invalid target: "
            .. ( ( task_desc.target and tostring( task_desc.target ) ) or "n/a" ) )
        end
        task_desc.enabled_props = false
        return

    elseif task_desc.type == self.type.defend_lager then

        if xr_gulag.getGulagState(task_desc.defend_target) == 1 and server_object(task_desc.target).gulag:get_population_comed() > 0 then
        --if xr_gulag.getGulagState(task_desc.defend_target) == 0 then --' Раскомментить вместо выше для отладки этого типа ЦЗ
            --' В смарте есть народ и на него действительно нападают
            task_desc.enabled_props = true
            return
        end
        task_desc.enabled_props = false
        return

    elseif task_desc.type == self.type.kill_stalker then
        --' Нету целей
        if task_desc.target_objects == nil then
            task_desc.selected_target = nil
            task_desc.enabled_props = false
            return
        end

        --' Проверим, живы ли наши цели и могут ли выйти в онлайн
        local oo
        if task_desc.selected_target then
            oo = server_object(task_desc.selected_target)
            if oo == nil or oo.alive == nil or not oo:alive() then
                task_desc.selected_target = nil
            end
        end
        for k,v in pairs(task_desc.target_objects) do
            oo = server_object(v)
            if oo == nil or oo.alive == nil or not oo:alive() or not oo:can_switch_online() then
                table.remove(task_desc.target_objects, k)
            end
        end

        --' Не осталось целей
        if #task_desc.target_objects == 0 then
            task_desc.selected_target = nil
            task_desc.enabled_props = false
            return
        end

        --' Выбираем текущую цель задания
        if not task_desc.selected_target then
            task_desc.selected_target = table.random(task_desc.target_objects)
        end
        task_desc.enabled_props = true
        return
    else
        task_desc.enabled_props = true
        return    
    end
end


 

Впрочем, и даже это - тоже неправильно, и переписывать надо ВСЕ.

  • Полезно 1

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


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

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

Но, тема НА СТОЛЬКО всем мешала, что в итоге все-таки пришлось закрыть.

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

 

@Alexander_Vesker, От меня что требуется? С нуля заново переписать мод? У меня для этого более другой есть, и там есть чем заняться, хотя все работает, и никаких айвенгов там никто не убивает за их отсутствием. Более того, исправления всех сцен в ТД для соли выкладывались 8 лет назад, ни тогда, ни за все это время они оказались никому не нужны, за исключением требований все это удалить, как нарушающие аффтырьские права всех, кого попало. Не собираюсь делать все заново, и не обязан.

 

Кстати, да, если уж на столько припекло - game_relations.ltx, attitude_neutal_threshold = -9900,

0 для human на всех строках и столбцах в [monster_relations], и получаем щасте, потом вертаем взад.

 

Аналогично - с "переставшим работать" котиком в неизвестно каких сборках для неизвестно чего, особенно со всякими "озвучками" и прочим блэкджеком. Идем на ютубю на сами-знаете какой канал, и видим, что таки работает. Код был выложен, все расписано. Не знаю, что еще надо.

 

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

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


Ссылка на сообщение
(изменено)
2 часа назад, Alexander_Vesker сказал:

как помирить квад долга и можно как то удалить рестрикторы в ТД где остановка перед входом в лабу х-18.

Проблема в том, что я понятия не имею, кого там надо с кем мирить и зачем.

 

Что касается рестрикторов - смотрим на карте по меткам, как называются, и удаляем обычным

local obj = alife():object( "имя" )

if obj then alife():release( obj, true ) end

желательно - находясь на другой локации.

Опять же не представляю, зачем это надо и что получится в результате. Например, может получиться как с той антенной Кленова или еще нечто в том же духе. Проверяйте.

 

И вот код для убиения врагов, ПОКА ЕЩЕ независимый от всех правок и патчей:

Скрытый текст

 


function kill_em_all()
	local actor = db.actor()
	if not actor then return end	-- еще не загрузилась игра

	local max_dist = 70 * 70	-- 70 - максимальная дистанция, за которой не трогаем

	local t = {}

	for k, v in pairs( {	-- вписываем классы
		clsid.bloodsucker_s,
		clsid.boar_s,
		clsid.dog_s,
		clsid.flesh_s,
		clsid.pseudodog_s,
		clsid.burer_s,
		clsid.cat_s,
		clsid.chimera_s,
		clsid.controller_s,
		clsid.fracture_s,
		clsid.poltergeist_s,
		clsid.gigant_s,
		clsid.zombie_s,
		clsid.snork_s,
		clsid.tushkano_s,
		clsid.psy_dog_s,

		clsid.script_stalker,
		} ) do t[v] = true	-- заполняем так на случай, если кто-то переименует
	end

	local t_exlusive = {	-- часть имени, с которым не трогаем
	"controller_mini",
	"quest_venom",
	"boar_child",
	"chimera_quest",
	"dog_quest",
	"kontrik_electro",
	"cat_quest",
	"tank_zasada",
	"quest_karlito",
	}

	local pos = actor:position()

	for k, v in pairs( db.creatures ) do	-- что есть в онлайне
		if t[v:clsid()]	-- подходит по классу
		  and v:alive()	-- живое
		  and ( ( v:story_id() == 4294967296 ) or ( v:story_id() == -1 ) )	-- не уникальное
		  and v:position():distance_to_sqr( pos ) < max_dist	-- подходит по расстоянию
		then
			for ii, vv in ipairs( t_exlusive ) do	-- не в исключениях
				if string.find( v:name(), vv ) then v = false; break end
			end

			if v then	-- прошло все проверки
				if v:clsid() == clsid.script_stalker then	-- непись
					if v:relation( actor ) == game_object.enemy then	-- враг
						v:kill( actor )	-- убиваем
					end
				else v:kill( actor )	-- монстр, убиваем
				end
			end
		end
	end
end

 

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

Изменено пользователем Dennis_Chikin
  • Спасибо 1
  • Полезно 2

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


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

@Nightshade2,     if true then ...

вообще-то

Пусть меняют, что хотят.

 

Хотя да,  я уверен, что в следующих патчах и еще половину команд вырежут, чтобы только поорать про "читеров криворуких".

"stranger"  - ну, не заметил, что его там было, вписал еще раз. Это то самое, которое "мир с бандитами" и прочими Химерами.

arhara_dialog.friend_community() и тому подобное.

 

P.S. Кстати, я бы, в целях "борьбы с читерами" еще бы и все буквы во всех операторах  LUA местами переставил - благо, прецедент с перестановкой местами всех аргументов в функциях и изменением типа аргументов в более другом моде уже был - чтобы сделать несовместимым код с кодом того, у кого собственно и был взят.

 

  • Нравится 2

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


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

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

AMK-Team.ru

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