Dennis_Chikin 3 663 Опубликовано 18 Июня 2014 Ivan_USER, function check_armor() local armor = db.actor:item_in_slot(6) local weapon = db.actor:item_in_slot(2) if db.actor:active_slot()==2 and weapon then local tmp if armor then tmp = armor:section() else tmp = "none" end if (not string_find(tmp, "exo")) and weapon:section()=="wpn_m_134" then db.actor:drop_item(weapon) local tmpw = amk.spawn_item_in_inv("wpn_m_134") db.actor:transfer_item(weapon,db.actor) alife():release(tmpw) amk.send_tip(game.translate_string("wpn-m_134-no_exo_message"),"Minigun",0,8,"gen_info") end end Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 19 Июня 2014 (изменено) 1. В каком файлике надо покопаться чтобы увеличить выпадение тайников с трупов? 2. В каком файлике надо покопаться чтобы увеличить выпадение брони с трупов? treasure_manager.script: function CTreasure:use(npc) и далее по тексту. Все откомментировано. А по поводу "дайте мне", не удосужившись прочитать хотя-бы первый пост в теме - дальше пойдут модераториалы с занесением в историю. ============================================ Броники непосредственно в файле gamedata\scripts\death_manager.script local data_by_community = { и т.д., смотри комментарии перед этой строкой. При знаниях на уровне "у меня нет этих файлов" трогать крайне осторожно. Там и так чудес наверчено. Изменено 26 Апреля 2015 пользователем Eugen81 процитировал 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 19 Июня 2014 Может вопрос в другом: почему эта вероятность не работает..? Это вероятность НЕ выпадения. Ну и там еще дальше есть "античитовая строчка" - это чтобы совсем не наглели. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 21 Июня 2014 Еще раз внезапно про фотоохоту (bind_fot.script): if IAmAMonster[clsid] and db.actor:see(obj) then -- сначала смотрим тихую охоту Вот так достаточно. Все остальное в ней - лишнее. if (has_alife_info("silent_hunt_start") and not has_alife_info("silent_hunt_done")) and (silent_hunt_monsters[clsid] and not has_alife_info("monster_stealth_"..silent_hunt_monsters[clsid])) and self:obj_in_shot(obj:bone_position("bip01_head"), 0, 20, 3.0, true, nil, true ) первый параметр - что фотографировать. Можно заменить на obj:position(), кстати. Будет не голова, а центр (если не ошибаюсь). Второй - минимальное расстояние. Третий - максимальное расстояние. Четвертый - угол в странном и загадочном представлении. Не градусы, и не радианы, а попугаи. Пятый - прицел (правая мышекнопка). То есть, если вы его меняете, то и способ фотографирования меняется. Да еще, кстати, и угол предыдущий, возможно, требуется пересчитать. Это и есть ответ на вопрос "почему не работает". Шестой - nil - любая локация. Иначе - только конкретная. Последний - проверять, видит ли кто-то актора в это время, и не фотографировать. Все остальные фотографирования ниже - по такому же принципу. К вопросу об убивании ГГ за что попало и "чтобы было" - kostya_dialog.script: function zonedocs_gg_kill() db.actor:kill(db.actor) end Ну, вы поняли. Про алкоголь - amk_alcohol.script: function drink_vodka(obj) end function drink_vodka_chunk() end function update() end Больше в нем вообще ничего не нужно. По по-хорошему еще и эти вызовы везде поотрывать. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 21 Июня 2014 (изменено) ГГ перестал бегать, а также начал уставать от махания кувалдой. Ну чёрт с ней с усталостью, но бег-то можно как-то вернуть? Запрет бега - w_kuvalda.ltx: sprint_allowed = false. Про усталость - kostya_dialog.script: function kuv_hit(who) if who and who:id() == db.actor:id() and db.actor:active_slot() == 0 and db.actor:item_in_slot(0) and db.actor:item_in_slot(0):section() == "wpn_kuvalda" then db.actor.power = -level.get_game_difficulty()/10 end end Мда, Самый Гениальный Скриптер Всех Времен и Народов - все так же гениален. Изменено 26 Апреля 2015 пользователем Eugen81 процитировал 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 22 Июня 2014 romale, по алкоголю - если уж радикально, то точно так же грохнуть все вызовы, как и с кувалдой. Если в предвидении очередных "патчей" - оставить в скрипте 3 ПУСТЫЕ функции. про переходы - если уже создан - только удалить. Ну или, хе-хе, через нетпакет. Идем читать "справочник по функциям и классам". Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 22 Июня 2014 частота респавна - -- Обновление респавнера. В зависимости от настроек обновляется либо только в офлайне, либо и там и там. function se_respawn:execute() if self.already_once_spawned==true then return end if self.idle_spawn_min == -1 then return end if self.respawn_time < game.get_game_time() then local idle_time = game.CTime() local now = game.get_game_time() if fast_respawn then idle_time:setHMSms( math.random( 10, 12 ), 0, 0, 0 ) -- частый респаун else idle_time:setHMSms( math.random( 20, 24 ), 0, 0, 0 ) -- стандартный респаун end self.respawn_time = now + idle_time self:spawn() end end Мда... В общем, ( 10, 12 ) и ( 20, 24 ) - это часы. Но срабатывает изменение ПОСЛЕ того, как отработало прошлое значение. То есть, если изменили настройки, и кого-то убили - появится этот кто-то через 10 часов от его первого появления (то есть, если начали игру с настройками частыми, и играли всего 9 часов - то вот почти сразу же, как убили), а только потом уже заработает так, как поставлено. Причем, заметьте, проверка прошедшего времени между убийством и появлением вообще отсутствует. Впрочем, оно так и раньше было, но просто сами интервалы были больше. 1 2 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 22 Июня 2014 Люди, вы офигели ! Все ж было уже. Часть даже в первом посте собрал. Или просто издеваетесь ? Вылет по lightning в swtc - описан в этом самом первом посте, для тех, кому совсем уж лень искать; фонарь - в config\objects\light_night.ltx - с самого создания форума регулярно везде обсуждают-крутят туда-сюда; неубиваемые неписи - тоже с какой-то там соли (ну найдите вы их в конфигах, и поправьте иммунитеты/регенерацию. Убирание оружия тоже где-то код приводился - function use_snd(obj) if obj and not has_alife_info("biznes_remove_special_item") and tSound[obj:section()] then amk.remove_timer("zvuki") db.eat = true if db.eat_snd and db.eat_snd:playing() then db.eat_snd:stop() end db.eat_snd = xr_sound.get_safe_sound_object(tSound[obj:section()]) db.eat_snd:play_at_pos(db.actor, vector(), 0, sound_object.s2d) -- третья рука, прятание оружия при съедании. на новичке не убирается, далее по нарастающей local difficulty = level.get_game_difficulty() if difficulty > 0 then bind_stalker.hide_weapon() amk.start_timer("zvuki", difficulty*3, 0) else db.eat = nil end end end - оторвите там в нем кому что надо. Действительно, что-ли, треть форума в r/o отправить ? 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 23 Июня 2014 Стволы можно править в весьма широких пределах, но там ограничение точно такое же, как и у всех других предметов: если предмет прописан в allspawn, либо сделан сэйв с этим предметом в онлайне - у него не должно появляться новых свойств, и не должны исчезать старые (ага, номера слота это тоже касается). Про вес еще раз, медленно и печально: если у актора в инвентаре один предмет весом хоть в 10 тонн - не будет ни каких проблем, кроме усталости при каждом шаге (задается в свойствах костюмов, используем поиск по форуму, ковырялки в ШМ). Если у него 10тысяч предметов, пусть бы даже весом в 0 - будет тормозить, глючить, и вылетать. К сожалению, это не понимают не только пользователи, но и авторы квестов, даже если они Трижды Величайшие Скриптеры Всех Времен и Народов . И, да, в этом случае каждая проверка на что угодно - только усугубляет. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 23 Июня 2014 Поиском по тексту на получение/сдачу квестов в (устало) gamedata\config\text\rus\ Потом собственно по фразам находим эти идиотские проверочные функции, и отрываем. В принципе, еще можно по текстам смс попробовать, где аффторы обошлись без из{censored}ов вида "п" .. "е" .. "рва".. "я" .. "б" .. "укв" .. "а" .. " " .. "в эт" .. "ом сл" .. "ове", и сразу все оттуда и оторвать. Да, результаты изысканий стоит сюда выкладывать. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 23 Июня 2014 (изменено) bind_stalker.script: function actor_binder:death_callback(victim, who) -- все 4 строки ниже - нафиг. if victim:id() == db.actor:id() then difficulty_manager.deathStatCollect() archievements.on_actor_death(who) end из netpacket_pda_binder.script, кстати, строкуdifficulty_manager.deathStatChangeDifficulty() - тоже нафиг. А то Величашие Скриптеры Всех Времен и Народов с компанией только петь умеют про "жалких читеров, которые вместо того, чтобы поставить уровень новичек лезут своими кривыми руками". Пусть сначала себе зеркало купят, блин. P.S. Да, этот менеджер в соли был. Вот только там "реализьмы" не было. Изменено 25 Апреля 2015 пользователем Eugen81 сделал красиво. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 24 Июня 2014 сибирякe, одну вижу: elseif not drrr.weight_ok() then ..., и она счастливо получает свое true. А где еще одна ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 26 Июня 2014 (изменено) Как у кровососов некоторых убрать дымовую завесу, чтоб лагало поменьше и столб огня у других когда они дохнут? Радикально - на найти в конфигах секцию этих бешеных газовых плит, и оторвать оттуда все добавки. Оставить только [кровосос_извращенный]:кровосос_нормальный Тормозить на чтении конфигов, конечно, все равно будет (оптимизаторы - такие оптимизаторы), но хоть бреда поубавится. Изменено 25 Апреля 2015 пользователем Eugen81 Добавил цитату. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 29 Июня 2014 Как бы для чего надо - понятно. Но идея с детектором - не очень хороша. Лучше банально менюшкой. Чит - он есть - чит. Кроме того, менюшкой, с однократным сканом - и нагрузки меньше. Да, к вопросу о батарейках: либо через set_condition, либо биндер, и сохранять свой параметр. Ну или нетпакет. Так, как в костюме - это кривизна неземная. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 2 Июля 2014 Про погоду, кратко: Она скриптом меняется принудительно. Для осветления глобального надо либо править все конфиги, либо user.ltx Поиск в помощь. Потом может быть подробнее распишу. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 5 Июля 2014 Чтобы закрыть вопрос про радиацию на болоте раз и навсегда: bind_stalker.script, убрать строчку marsh_radiation.update() либо (менее выгодно, но проще в борьбе со следующими "патчами", "фиксами" и прочим): в самом marsh_radiation.script убрать все, и оставить строку: function update() end Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 7 Июля 2014 Если мы убираем тело функции, оставляя, как я предложил, само описание - достаточно только этого изменения, остальные файлы изменять не надо. Соответственно, всякие патчи/фиксы/другие правки, которые не затрагивают этот файл - можно использовать, что называется, не глядя. Хуже тем, что все лишние вызовы несколько подтормаживают. Если мы убираем функцию полностью - нужно убрать все ее вызовы отовсюду. Если оставить хоть один - будет вылет. Если убираем вызовы - функцию можно не трогать. Это просто мусор в файле, который ни на что не влияет. Плюс такого решения: чуть меньше тормозит, но чтобы заметить эффект - нужна массовая чистка, не только этой конкретной хрени, но и всего остального в том же духе. Кроме того, тогда стоит еще убирать сразу и обрамление типа всяких if чего-то там ... вызов() end. Недостаток - польза заметно меньше, чем затраченное время. Пример: смотрите посты 2, 3, 4. Вот в этом примере достаточно убрать только сам вызов, но проверки, которые перед ним - достаточно сильно тормозят, и ошибка была (и есть) именно в них. Поэтому лучше убрать несколько строк. В случае с кувалдой - при любом из методов задержка будет в несколько десятков раз меньше минимально заметного. Про телепорты всем отвечу, как время будет. config\misc\zone_teleport.ltx смотрите, строчки idle_particles = что-попало Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 9 Июля 2014 (изменено) Разбор очередного скрипта, на этот раз meceniy_work.script в части, что касается костюма нудиста и убирания оружия: -- Невидимость В Костюме local idle_time, game_time, outfit_act, prev_outfit_act, time_to_set_range -- local invisible = nil -- local warning90 = nil -- local gravisak = nil -- три довольно бессмысленные строки. Записывается так: local invisible, warning90, gravisak function set_invisible() -- включение невидимости outfit_act = db.actor:item_in_slot( 6 ) -- проверяется наличие надетого костюма if outfit_act and outfit_act:section() == "meceniy_outfit_new" then if not invisible then -- включается невидимость, если еще не включена invisible_on() invisible = true gravisak = nil time_to_set_range = time_global() -- похоже, 2 очередных "античита" fly_island.chaes_fail() kostya_dialog.stealth_fail_task() -- вывод предупреждения, если кончается время невидимости -- elseif game.get_game_time():diffSec( game_time ) >= idle_time*0.9 and not warning90 then -- give_warning90() -- warning90 = true -- отключение невидимости -- elseif game.get_game_time():diffSec( game_time ) >= idle_time then -- invisible_off() -- make_meceniy_outfit_used( outfit_act ) -- invisible = nil -- Нормальные люди делают это так: elseif warning90 then -- проверка для вывода предупреждения if game.get_game_time():diffSec( game_time ) >= idle_time * 0.9 then give_warning90() end -- проверка для выключения elseif game.get_game_time():diffSec( game_time ) >= idle_time then invisible_off() -- отключение невидимости -- make_meceniy_outfit_used( outfit_act ) -- порча костюма invisible = nil end -- ну или убрать все это, чтобы работал бесконечно -- ослепление неписей (поправлю сразу) if time_to_set_range <= time_global() then set_range( 2 ) time_to_set_range = time_global() + 1000 end elseif invisible then -- костюм снят invisible_off() -- отключение невидимости -- внимание, если кто-то уйдет в офлайн раньше - останется слепым ! -- make_meceniy_outfit_used( prev_outfit_act ) -- порча чего попало, или просто вылет invisible, idle_time, time_to_set_range = false, false, false -- поправил графоманию end -- if outfit_act and string.find( outfit_act:section(), "soldier_outfit" ) then -- if not gravisak then -- bind_stalker.hide_weapon() -- gravisak = true -- end -- elseif gravisak then -- bind_stalker.restore_weapon() -- gravisak = nil -- end -- здесь был бред про убирание оружия -- prev_outfit_act = outfit_act -- а это бред с порчей костюма end function invisible_on() -- включение невидимости -- даже исправлять не буду, по тому что проще проверки выше отключить, и навсегда о них забыть idle_time = 27 * 60 -- время невидимости game_time = game.get_game_time() -- текущее время warning90 = false -- убрать информацию о том, что было выведено предупреждение bind_stalker.hide_weapon() -- убрать оружие level.add_pp_effector ("teleport.ppe", 1111, false) -- спецэффекты level.set_pp_effector_factor(1111, 1.0) end function invisible_off() -- выключение невидимости if get_hud():GetCustomStatic( "cs_inviz" ) then -- убирает сообщение о невидимости get_hud():RemoveCustomStatic( "cs_inviz" ) end warning90 = false -- убирает информацию о выводе предупреждения bind_stalker.restore_weapon() -- включает оружие set_range( 80 ) -- выставляет неписям "видеть актора и врагов на расстоянии 80 метров" -- к воопросу о бешеных неписях. В солянке ставилось 60, и из этого рассчета -- расставлялись собственно неписи. end function give_warning90() get_hud():AddCustomStatic( "cs_inviz", true ):wnd():SetText( "Вас могут увидеть!" ) end function set_range( range ) -- принудительное выставление всему живому расстояния, -- на котором они всех видят -- переписал это медленнное и печальное глюкало сразу local cls_id local lobj_by_id = level.object_by_id -- чтобы тормозило хоть чуток меньше for k, v in pairs( db.creatures ) do -- в creatures живое добавляется v = lobj_by_id( k ) -- есть ли еще такой ? if v and v.alive then -- и имеет ли смысл для него что-либо проверять ? cls_id = v:clsid() -- класс объекта -- проверка, что непись или монстр, и он живой if ( IAmAStalker[cls_id] or IAmAMonster[cls_id] ) and v:alive() then v:set_range( range ) end end end end function make_meceniy_outfit_used( outfit ) -- замена одного костюма на другой local parent = outfit:parent() local obj = alife():object( outfit:id() ) -- отсюда и далее переписал глюкало if obj then alife():release( obj, true ) if parent then alife():create( "meceniy_outfit_used", vector(), 0, 0, parent:id() ) else alife():create( "meceniy_outfit_used", vector(), 0, 0, 0 ) end end end function have_meceniy_outfit() -- для диалогов: возвращается экза, если есть return db.actor:object( "meceniy_outfit_used" ) or db.actor:object( "meceniy_outfit_new" ) end function give_meceniy_outfit() -- для диалогов: удаляется экза if db.actor:object( "meceniy_outfit_used" ) then amk.remove_item_from_inventory_by_name( "meceniy_outfit_used", db.actor ) elseif db.actor:object( "meceniy_outfit_new" ) then amk.remove_item_from_inventory_by_name( "meceniy_outfit_new", db.actor ) else return end news_manager.relocate_item( db.actor, "out", "meceniy_outfit_new" ) -- новости: "потерян предмет" end Адаптации ни каких других вариантов невидимости делать не буду, потому что иначе полезет куча глюков из других мест, и пока их все выловишь - авторы еще 3 новых "патча" выпустят, а далее см. п1. Но вообще нормальные люди делают это через xr_combat и mob_combat, как и всяческие "переодевания" и прочие "амулеты наемников/монолитов/чего попало". Готовый вариант для 2.09-2 - https://yadi.sk/d/mU-QorGAmAiGK shahvkit Изменено 11 Декабря 2015 пользователем shahvkit Перевел код в луа, для читабельности комментов. 1 2 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 9 Июля 2014 Это часть файла, касающаяся невидимости. Там еще есть глючное зомбирование и какие-то телепорты (кстати, о птичках). Античит, полагаю, следует оторвать. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 663 Опубликовано 13 Июля 2014 (изменено) По идее защита от пуль должна стать 25%, а становится 0% Интересно, а еще у кого-нибудь такое есть ? Ну, то есть, удаление артов в inventory.script - оно их с пояса убирает (кстати отрываем в function update()убираем строчку check_immunities() ). А вот чтобы 0 было... Кстати, к вопросу о том, как перевесить что-то с пояса и обратно: смотрим этот же скрипт, и делаем по аналогии с, да хоть "идолом монолита" и т.д. По зачищенным постам: нет, не буду я смотреть ничего вида: "взял какой-то файл не знаю откуда, что-то в нем изменил и положил не знаю куда". И сомневаюсь, что кто-то будет. Что-то меняете - меняйте в файле из той игры, для которой меняете. И еще: вот очень жаль, что приходится писать руководство по "войнам правок", но раз уж так получается, повторюсь еще раз: если вы отрываете, скажем, откуда-нибудь тз диалогов какой-то очередной, допустим, "античит", то имело бы смысл зачистить оторванное в скриптах полностью, если бы вы вели полностью свою разработку. А так - завтра другая сторона выпускает 10 "патчей" вообще ничего не меняя, потом один с одной измененной буковкой, потом еще 10 одинаковых. И вы будете каждый раз все это просматривать, и в каждом делать совершенно не нужную работу. Вам оно надо ? Так что оторвали в одном файле - работает - так и оставьте. P.S. По поводу самого последнего патча и правкосборок - нет, xml'ы я тщательно просматривать тоже не буду. Проще протестировать, и поправить, ежели что не так. А на беглый взгляд - вроде, правильно все. Изменено 13 Июля 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение