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

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


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

за цену продажи рецептов у Информатора в Баре?

dialogs_bar.xml

 

Строки типа <precondition>sak_dialog.actor_has_money_150000</precondition> - проверка наличия денег

<action>sak_dialog.give_money_150000</action> - отъем денег.

Вызываемая функция должна, естественно, существовать.

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


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

amk_mod.script:

 

function start_blow_timer()
local basis = game_options.blow_time_basis
local shift = game_options.blow_time_shift
--local resuls = basis + (math_random()*shift) - (shift/2)
local resuls = basis+math_random(-shift, shift)
amk.g_start_timer("blow_shift", 0, 0, resuls)
if (news_main and news_main.next_blow) then news_main.next_blow(resuls) end
end

  • Нравится 1

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


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

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

Если коротко, то надо брать inventory.script, вставлять туда проверку на наличие требуемого предмета на поясе, и результат сохранять в переменной, описанной в начале (для простоты) скрипта без префикса local.

 

типа:

detector1_on_belt = false

function ... (все функции скрипта)

 

В скриптах детекторов (или еще чего-нибудь - что там надо) вместо проверки на предмет в слоте проверять

if inventory.detector1_on_belt then ...

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

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


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

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

Сравнение, которое здесь приведено:
первая строка с local что-то = nil - для мебели.
Кусок кода между --[[ и ]] - закомментирован. Добавлен код, проверяющий переменную, как здесь уже описывал, вместо наличия предмета в слоте.

 

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

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

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


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

посмотрел на предмет "! Cannot find saved game ~~~ watchdog 100.reason autosave Тайник Старого Жила - завершено" и иже с ними.

 

Мда. Похоже, это не лечится. Точнее, лечится, но не наскоком.

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

 

Короче, надо разгребать все, что наваяно в таймерах - то есть, вообще все подряд, и переписывать.

 

 

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

+ к этому - стандартное: брать минимальное количество квестов, минимальное количество ремкомплектов, не варить по нескольку артов сразу и т.д.

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

 

Такие дела...

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

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


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

snp.script:

	elseif section == "wpn_ognemet" then
		if not (has_alife_info("fli_have_3") or has_alife_info("dimak_toolkit_done")) then
			obj:set_condition(0.01)
		end

	elseif section == "wpn_vihlop" then
		if not (has_alife_info("bar_deactivate_radar_done") or has_alife_info("izumrud_electra_done")) then
			obj:set_condition(0.01)
		end

	elseif section == "wpn_vintorez" then
		if not has_alife_info("escape_meceniy_start") then
			obj:set_condition(0.01)
		end

- нафиг

...

Поломка огнемет, "Выхлоп", "Винторез".

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

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


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

amk.on_death(victim, who):

 

function on_death(victim, who)

if (news_main and news_main.on_death) then

news_main.on_death(victim, who)

end

 

...

function on_stalker_death(victim_, killer_)

...

if (rnd() < 0.5) then -- слишком часто приходят смс о смерти

do_news(m_string, "Погиб сталкер:", rnd(timer_stalker_death, timer_stalker_death * 3), 10, "death", nil, 1)

end

if (rnd() < prob) then ...

 

и т.д.

 

Но вот если это изменить, то см. выше про автосэйвы. 8(

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

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


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

amk.on_death() - строчка как раз из мотиватора.

Смотрим amk.script - там вызов news_main.on_death(), так что смотрим news_main.script

В нем добираемся до function on_stalker_death(), и там будут строчки с if rnd() ...  - как раз показывать или не показывать.

 

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

 

 

Мда, но я бы отключил amk_offline_alife (см. пост про ограбление тайников и прочу ересь), и сделал бы бессмертие неписям в онлайне.

  • Спасибо 1

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


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

death_manager.script:

 

после 486 строки:    if check_item_dependence(self.npc, k) == true then

добавить: if count_by_level[k] then

после create_items(self.npc, k, number, v)

добавить: else abort( "death_manager, invalid entry: %s", tostring(k) ) end

 

при вылете напишет, что ему не нравится в конфигах.

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


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

Денис, ты случайно не разбирался с кодом в wawka_dialog.script?

 

А что там можно сделать ? Сидеть, и тупо вычищать весь мусор и весь бред. Начиная с самой первой функции

local function v_have_good_wpn(itm)

    return db.actor:object(itm) and db.actor:object(itm):condition() and db.actor:object(itm):condition() > v_wpn_cond

itm = db.actor:object(itm)

if itm and itm.condition then return itm:condition() >= v_wpn_cond end  -- минимально разрешенная исправность

return false

end

 

и заканчивая последними

function give_af_armor_4(first_speaker, second_speaker)

    sak.out_item_namber("af_armor_4", 1)

end

function have_af_armor_4()

    return sak.have_item_namber("af_armor_4",1) ~= false

end

 

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

 

Такие дела...

 

1. Немерянное количество левых СМС, в том числе и откровенная самореклама

amk_mod.script:

function show_news()

оставить:

news_main.on_news()

amk.g_start_timer("show_news",0,0,math_random(30,60))

end

 

Кстати, и сэйвы биться реже будут.

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

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


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

К вопросу про неписей, которые убивают других неписей: gamedata\config\creatures\game_relations.ltx

;пороговые значения для отношения персонажей
attitude_neutal_threshold = -150    ;когда attitude меньше значения, то выставляется ALife::eRelationEnemy
 

Ставим так, чтобы не убивали, и спокойно делаем, что надо. Скажем attitude_neutal_threshold = -9150.

Потом возвращаем на место. 100500 раз, кстати, уже, где только не писалось.

  • Полезно 4

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


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

Чтобы закрыть вопрос с гаданиями:

 

Вообще, не думал, что это надо кому-то объяснять. Но придется.

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

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

 

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

 

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

 

Есть некоторое количество исключений, но они весьма редки.

 

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

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

 

В общем, см. правила, п 2.1

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

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


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

По телепортам: не факт, что они все в allspawn - скорее, наоборот.

Думаю, здесь имеет смысл взять bind_mteleport.script, найти в нем restrictor_teleport:update() (ищем без скобок), и вместо actor:set_actor_position() сделать, скажем, вывод названия тепелепорта. Или добавить перед ним запрос на телепортацию.

 

Заодно там же можно и проверку радиусов поменять на что-нибудь.

 

Аналогично, кстати, с рестрикторами - увеличить радиусы, и сделать вывод имени, когда радиус пересекается.

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

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


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

get_console():execute ("r2_mblur 0.6") - лишнее. Оно, конечно, прикольно, когда еще при движении усе расплывается, но, во-первых, бред, во-вторых - если не убрать во-вовремя - эффект остается "пожизненно". А пользователь гадает: что у него случилось с видеокартой.

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


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

Для чистой обезжиренной соли у меня конфиги ВСЕХ детекторов выглядят примерно так:

 

[det_artefact_indy]:identity_immunities

GroupControlSection = spawn_group

discovery_dependency =

$spawn = "devices\detector_advanced"

$prefetch = 32

class = D_SIMDET

cform = skeleton

visual = equipments\item_datchik1.ogf

description = det_art_indy_info

inv_name = "Простой детектор артефактов"

inv_name_short = "Простой детектор артефактов"

inv_grid_width = 1

inv_grid_height = 1

inv_grid_x = 12

inv_grid_y = 47

inv_weight = 0.3

cost = 15000

slot = 2

animation_slot = 1

belt = true

ef_detector_type= 1

radius = 10

 

То есть, по выбору можно на пояс либо вместо автоматов/винтовок.

Это чтобы вешались. И они таки действительно вешаются. По выбору.

 

На поясе или в слоте, естественно, должно быть место.

 

Чтобы работали - да, нужен еще и скрипт. Но это уже другой вопрос.

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

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


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

v92, можно адаптировать, да. Но с совместимостью по сэйвам будет понятно-что, и версия в общем-то промежуточная. Но сильно не спасет - ОП2 перегружен таймерами и записью ненужных переменных. Вот от этого в первую очередь надо избавляться. И уменьшать частоту выдачи новостей. Если 300 байт экономим, а потом килобайты пишем - ну, да, влезет на одну дурацкую новость или на один ОПшный квест больше... А толку ?

 

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

У меня таки поднять jump_height в конфигах артов - очень даже помогает. Для особо запущенных случаев - уменьшаем алайф до единиц метров, и к странно ведущим себя артам подходим в таком виде - чтобы вошел в онлайн, и успеть подобрать, пока не укатился.

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


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

ph_door.script - это и есть двери. Но если не работают (не появляются сообщения типа "открыть" и т.д.) - объект у вас повис, а потом в таком виде сохранился, и был убит при загрузке. А кроме них и еще неизвестно что уиерло.

  • Согласен 1

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


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

karavan150, еще раз: комментировать надо не функцию, а то, что у нее внутри. Иначе у тебя так и будет регулярно случаться "P.S. Проблемка. При сдаче квеста на ремящики и снятию ранга Монолитовца был вылет."

 

Это надо просто запомнить: function bla-bla-bla() end

Ну или function bla-bla-bla() return true end/function bla-bla-bla() return false end - для диалогов.

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

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


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

Традиционно это делается в netspawn(),

там где --[[local bad_object_names и т.д.

 

Тогда ничего не пищит.

 

Можно удаление даже готовое оставить, и по аналогии слепить создание.

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


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

for i, v in ipairs( {"agro_final_vert1", "agro_final_vert2", "agr_nii_heli", "agr_helicopter1", "agr_helicopter2", "agr_helicopter3", "agr_helicopter4" } ) do

v = alife():object( v )

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

end

for i, v in ipairs( { 4421, 4422, 4662, 4727, 4731, 4733, 4732 } ) do alife():create( v ) end

 

Можно, в принципе, еще сами списки подсократить - не все вертухи одинаково полезны. ;)

 

А совсем правильно - удаление всем списком на всех локах повесить на

if self.bCheckStart then ... self.bCheckStart = nil end, а спавн каждого конкретного верта - на условие. Но это опять работы много, и результат - до каждого следующего фикса/патча.

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

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


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

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

AMK-Team.ru

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