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

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


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

Начнем, пожалуй. Еще раз про прыжок:

 

bind_stalker.script, строчки 775-787:

		if 	(self.currY-self.lastY)/self.delta > 0.024 and
			delta > 0 and
			not has_alife_info("teleport_started") and
			not has_alife_info("actor_fly") and 
			not has_alife_info("acv_has_cheated") and
			not self.object:object("af_invul") and
			self.object:alive() and
			not db.no_cheat and
			danger.actor_not_in_danger("", "", false)
		then
--			get_console():execute("load ~~~ currY: "..self.currY..", lastY: "..self.lastY..", delta: "..self.delta..", speed: "..(self.currY-self.lastY)/self.delta)
			archievements.has_cheated_jump()
		end

- удаляем, по тому что нормально ЭТО все равно работать не будет.

Перемещение актора неизвестно относительно чего за неизвестно какое время сравниваем с константой.

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

 

Кто не знает, где взять bind_stalker - тема не для вас. Ждите, когда кто-нибудь все сделает красиво, и выложит.

 

P.S. И, да, хотя бы printf() и древний мусор закомментированный можно было бы разработчикам и убрать. ;)

  • Нравится 1

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


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

Так, для всех:

 

"Где взять" и "сделайте мне вот прям счаз и чтоб красиво !" - не сюда.

Именно что ждите, когда сделают.

Иначе будет опять 100500 версий странного, и ничего не работает.

 

Теперь чуток ликбеза: про распаковку db - используйте поиск по форуму. Когда распаковали, сохраните это все где-нибудь в дальнем углу, найдите нужный файл, киньте себе в gamedata, и исправьте.

Если запустилось, и все работает как надо - ура. Если не работает - удалите его, и ждите, когда сделают.

 

romale, по посмотреть - это касательно того, что выше и ниже. Сами условия я посмотрел - там нет ничего нужного. Только тормоза.

  • Спасибо 1

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


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

amk_offline_alife.script - в самом диком первоначальном глючном варианте. Отключаем нафиг:

105: local look_radius=100
124: local look_radius_box = 100
- изменяем на 0

function process_trade(npc)
строки 1521-1824 - удаляем.

Заодно и замки можно не покупать.

Иначе неписи не только все нычки обшманают и рюкзак актора заодно, но и всю Зону пропьют, а потом закономерно повиснут.

 

Строки не совпадают с последним патчем 2.09 фикс 2.

Строка 118: local look_radius=100 -- изменяем на 0

Строка 137: local look_radius_box = 100 -- изменяем на 0



Строка 1538: function process_trade(npc) -- оставляем

Строка 1846: end -- оставляем

Строки с 1539 по 1845 удаляем.

Для подстраховки:

После последнего
end который надо оставить идут следующие строки

-- Строим таблицы, если надо.
-- В них - макс. скорость, сила атаки, дистанция атаки.
-- Не забываем про иммунитеты.
-- Поучаем immunities_sect
-- В immunities_sect читаем fire_wound_immunity. Все повреждения множим на него.

Данная правка также удаляет новости о продаже оружия, и делает не нужной (просто её удаляет) правку на то, чтобы НПС при торговле оставляли себе 2 пачки патронов.

 

shahvkit

Изменено пользователем shahvkit
Добавление
  • Спасибо 1
  • Нравится 1
  • Согласен 3
  • Не согласен 3
  • Полезно 2

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


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

С "дырявым рюкзаком" - то же самое, что и с прыжком. То есть, он дырявый изначально по своей конструкции.
Попытка заткнуть на скорую руку: https://dl.dropboxusercontent.com/u/27871782/drrr.script - нужны тесты.

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

Изменено пользователем Eugen81
ссылка мертва

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


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

Про бессмертного .Шерстюка:

 

Я, конечно, не совсем понимаю, как можно здесь получить "всякое бывает" , но от злопамятности он лечится так:

if db.actor:has_info( "sherstuk_enemy" ) then db.actor:disable_info_portion( "sherstuk_enemy" ) end

 

Прописать можно да хоть туда-же, где кривые  стволы удаляются. Просто добавить перед, скажем, строчкой sak.add_tail()

  • Нравится 3
  • Согласен 1

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


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

xrs_utils.getStartTime(StartTime) - это вылет игры, если в геймдате лежит файл actor.ltx

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

 

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

Чтобы из рюкзака внезапно не начали исчезать вещи - смотрим дальше по теме.

 

По свежему "официальному" фиксу:

 

из положительного - оно перестало корежить user.ltx

Все опубликованные правки - в силе. Номера строк несколько сместились.

 

Если ПНВ пользуетесь аккуратно - можно не ставить. Если неаккуратно, но ставить все равно не хочется, то для правки ПНВ в старых файлах убрать строки в bind_stalker.script:

get_console():execute ("r2_sun_lumscale_amb 3")

get_console():execute ("r2_mblur 0.6")

и

get_console():execute ("r2_sun_lumscale_amb 1")

get_console():execute ("r2_mblur 0.")

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

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


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

Пытался сотворить что-то вроде инъекции в функцию function buy_quest_item(), прописав в опциях игры покупку предмета (дословно) "vodka, 10);", но, к сожалению, символ запятой экранируется при вводе, и инъекция кода не удается.

Tuxuu, вопрос с самого начала описан несколько загадочно.

 

внутри function buy_quest_item() после всяких плясок с бубном вызывается

sak.create_items_actor(buy_item, 1)

 

- то есть, создать актору 1 штуку упомянутого item. Через, кстати, кривой от рождения сякоскрипт.

 

Куда в какие опции чего вводилось ? 8-O

Изменено пользователем Eugen81
вставил цитату

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


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

Ага, а потом попытаться перейти на другую локу. Или просто s/l - вот тут то и начинается самая красота, типа "не найдена секция фФЧрчЪх" или еще что-нибудь в том же роде...

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


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

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

Игрок должен иметь возможность красться за стенами/прятаться в кустах.

 

Кроме того, уже соль по сравнению с оригиналом перенаселена, и безопасные расстояния между враждебными неписями не соблюдаются. С учетом этого тоже следует притупить.

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


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

item not found, id -

dialogs.script:

function dialog_is_enough(portion, count)
local pname = ""
for i=1,count do
pname = portion..tostring(i)
if not has_alife_info(pname) then return false end
end
return true
end



portion..tostring(i) - это слияние из "кого" и количества. И результаты должны быть прописаны.
Бр-р... еще один глюкодром.

Не надо ее вызывать вообще.
Попробовать обойтись сразу возвратом false/true.

То есть function trade_sidor_not_enough() return true end

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

 

Upd: то есть, в самом диалоге может быть разрешен обмен либо, наоборот, прекращение этой ветви диалога. Именно это надо смотреть.

Пока следует менять то, что процитировано, на

dialogs.script:

function dialog_is_enough()

return false

end
 

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

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


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

Гм, что-то вопрос про убиение "бессмертных" неписей как-то не стихает...

 

Во-первых, в этой правке нет ни каких глюков. Глюки есть в другом... Ну да ладно - в любом случае абсолютное большинство проблем решает правка радиуса алайфа. Та самая, старая добрая. Изменили, и делайте свои дела спокойно.

 

Но если уж так сильно приспичило, то:

local t = amk.read_stalker_params(obj)
t.health = 0
t.updhealth = 0
amk.write_stalker_params(t, obj)

smart_terrain.on_death( obj.id )

 

- прописываем вместо alife():release ... в хорошо всем знакомое удаление глючных стволов.

 

Если же речь идет о лечении непися от злопамятности, напоминаю, что можно непися не убивать, а просто удалить "злопамятную" info.

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


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

Ремонт - это надо от строк диалогов плясать. Сначала в text\rus искать, потом фразы в gameplay, потом функции.

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

 

По деньгам - да поправьте вы уже встроенный спавнер:

if not ini:section_exist(buy_item) then
  local money = tonumber( buy_item )
  if money then aem_manager.manage_money(money, "in")
  else news_manager.send_tip(db.actor, "Предмет \""..buy_item.."\" не найден.", nil, "nano", 30000)
  end
return
и вводите нужную сумму вместо предметов.

 

varan, поправка:

строка 367 оригинального файла, вместо alife():create("val_taynik_"..n, vector():set(b.position.x,b.position.y,b.position.z), b.lv, b.gv)

 

 

local s = "val_taynik_"..n

local obj = alife():create( s, vector():set( b.position.x, b.position.y, b.position.z ), b.lv, b.gv )

level.map_add_object_spot_ser( obj.id, "treasure", s )

 

Все. Переборов ни каких не надо.

  • Нравится 2

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


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

Ну читаем внимательно тему же. Есть же ответы. По "прыжковому", который в основном и срабатывает - 3-й пост в теме.

По рентгеновскому зрению - http://www.amk-team.ru/forum/index.php?showtopic=12839&p=848276

 

Теперь еще раз про убиение неписей, а то я внезапно обнаружил, что их тоже норовят удалять.

 

Ну вот у нас традиционный код в bind_stalker.script:

--[[local bad_object_names = {"wpn_lr30053522", "wpn_lr30058409" }
local i, se_name, se_obj

for i, se_name in ipairs(bad_object_names) do
  se_obj = alife():object(se_name)
  if se_obj then
    news_manager.send_tip(db.actor,"Удалили глючный ствол:"..se_name,nil,nil,1000)
    alife():release(se_obj, true)
  end
end]]
Поскольку удалять неписей не есть хорошо, то будем просто убивать:

 

local obj = alife():object( "невинноубиваемый" )

local t = amk.read_stalker_params(obj)

t.health = 0

t.updhealth = 0

amk.write_stalker_params(t, obj)

smart_terrain.on_death( obj.id )

 

Имена невинноубиваемых брать поиском по профилям (config\gameplay), а по найденному профилю искать в allspawn. распакованный выложен в теме.

 

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


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

prjnik, ага, годно.

С той поправкой, что костюм нудиста в соли и оп1 всем принудительно зрение ставит 60 метров (в оп2 руки так и не дошли посмотреть), и примерно на это же расстояние расставлены всяческие сценки (типа вояки под мостом vs. свиноферма/дом Лиса, снайпер на насыпи vs. костер Петрухи, наемнике в сцене с Халявой vs. Кузнецвов, костер Беса-Крота-Лиса vs. бандиты в ТД и т.д.

 

Ну а "прозрачность" рельефа - это из сочетания скоростей нарастания/падения шкалы видимости (time_quant/decrease_value), прозрачности материалов и transparency_threshold vs. visibility_threshold.

  • Нравится 1

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


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

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

Иначе при попытке разговора более чем с 2-х метров клавиатура отрубается.

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


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

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

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

Расставить всех неписей по другим местам - это, конечно, нереально. Ограничения на момент начала стрельбы - сделать проще, но, во-первых, нужно поправить несколько ошибок оригинала, достаточно много работы, и - это все-таки паллиатив. Толку, если по пресловутому чиху тушкана непись решит сорваться в бой, а потом уже не успокоится, пока не сдохнет ?

 

Так что начинать все-таки со зрения. Кстати, кто-нибудь уже пробовал ?

 

Да, по раненым - здесь должен работать тот же фикс, что и для оригинальной соли (цитирую самого себя):

 

"Системы нет, поскольку код проверки сам по себе несколько... э-эээ, рэндомный.
До того, как это дело поправят (читай, выхода новых сборок) - все сводится к повезет/неповезет.

Чтобы получить больше раненых - уберите в xr_wounded.Cwound_manager:hit_callback()
if self.npc:critically_wounded() == true then return end

и увеличьте def.hp* с 10 до сколько надо. Впрочем, и это сработает не для всех."

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


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

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

Tuxuu, все так изучали, на ходу. Поправим.

if not ini:section_exist(buy_item) then -- это проверка на наличие в конфигах секции, которую ввели. Кстати, проверочка неаккуратная, и если ввести что-нибудь не то - будет плохо. Ну да ладно: при должной внимательности она работает.
not  - это как раз означает "не найдено".

 

local money = tonumber( buy_item )  -- И тогда проверяем, не похоже ли введенное на деньги

if money then ... -- если похоже - добавляем деньги, если не похоже - ругаемся

return  -- и заканчиваем здесь что-либо делать.

end

 

А дальше идет спавн предмета.

Если здесь добавить проверку elseif string.sub(buy_item,1,3)=="ip_"

-- она сработает, только если в конфигах есть предмет, начинающийся с ip_,  а если такого нет - до нее просто не дойдет.

 

Что делать ? Переносим в самое начало:

if string.sub(buy_item,1,3)="ip_" then  -- да, здесь не elseif, а просто if

db.actor:give_info_portion(string.sub(buy_item,4,string.len(buy_item)))  -- добавляем info

return  -- уходим отсюда

end

 

if not ini:section_exist(buy_item) then ... -- ну а если не info, то пошли уже проверки из оригинала

 

upd: синтаксическую ошибку сразу не заметил. Кстати, если после правки случился вылет - скорее всего именно ошибка в синтаксисе. Так и пишите "вылетело", а не "не получается".

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


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

if string.sub(buy_item, 0, 2) = "ip_"

Ошибка в синтаксисе.

if string.sub(buy_item, 1, 3 ) == "ip_" then

db.actor:give_info_portion(string.sub(buy_item, 4 ))

return  -- и в логике

end

 

Рекомендую скачать чистый Lua-компилятор (http://www.lua.org), и после изменения скриптов проверять им.

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


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

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

AMK-Team.ru

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