ЧИТЕР - КЛУБ
|
|
Vaiteria | Дата: Сб, 01.10.2011, 23:22 | Сообщение # 1 |
Отмеченная Зоной
Пользователи
Сообщений: 1641
| Эта тема для тех, кто хочет своими силами внести в игру свой собственный интерес. Играя в модификации к Сталкеру многие из Вас привыкали к определённому типу оружия, и каково было удивление, когда установив дополнение Вы обнаруживаете что Ваш любимый автомат наносит урона меньше чем обычная двухстволка)) Или критически не хватает денег в начале игры, или Альфовцы не дают выйти со Скадовска, а у Вас в руках всего лишь АК-74.
Спрашивайте, задавайте вопросы, предлагайте свои варианты!
Не забывайте указывать платформу игры и версию установленного мода (если установлен). Если написали пост, но не указали версию - Отредактируйте свой пост (кнопочка "редактировать" под Вашим постом)
Настройки ГГ: [cut=Рюкзак и деньги ГГ при старте новой игры]Способ работает для ЧН\ЗП Рюкзак ГГ хранится в файле gamedata\configs\gameplay\character_desc_general.xml Первыми строчками идёт описание ГГ:
Код <specific_character id="actor" no_random = "1"> <name>st_actor_name</name> <icon>ui_inGame2_Hero</icon> <map_icon x="2" y="5"></map_icon> <team>Actor</team> <supplies> [spawn] \n device_torch \n wpn_binoc \n wpn_knife \n helm_respirator \n stalker_outfit \n grenade_rgd5 = 2 \n wpn_fort_actor \n ammo_9x18_fmj = 3 \n wpn_ak74u \n ammo_5.45x39_fmj = 3 \n bandage = 2 \n antirad = 1 \n medkit = 2 \n bread = 1 \n kolbasa = 1 \n conserva = 2 \n detector_simple \n detector_battery_1 \n </supplies> <money min="2500" max="2500" infinitive="0"/> <class>actor</class> <community>actor</community> <rank>0</rank> <reputation>0</reputation> <visual>actors\stalker_hero\stalker_hero_1</visual> </specific_character> В списке supplies, после строчки [spawn] \n перечислены все предметы, которые будут у ГГ в начале игры. И в этот список можно добавить любой предмет, например добавим ГГ 12 GPS-Проводников и один ремкомплект (добавляем после последней строчки - detector_battery_1 \n):
Код guidebook_mono = 12 \n repair_arms_box \n В SGM поставлена чистка инструментов при начале новой игры и если вы добавите их в список - в рюкзаке они не появятся, т.к. их почистит скрипт. Чтобы отключить чистку инструментов (Внимание: Если вы удалите эту строчку, то инструменты заспавнятся в двойном экземпляре!) необходимо удалить (или заккоментировать знаками --) строчку release_items_by_section("toolkit") в файле scripts\sgm_utils.script (для SGM < v2.2: scripts\sgm_info.script). Cписок предметов на добавление можно взять из файла gamedata\configs\(Список обьектов).txt Также здесь можно поправить кол-во денег у ГГ на начало игры. За это отвечает строчка:
Код <money min="2500" max="2500" infinitive="0"/> min, max - Минимальное и максимальное кол-во денег соответсвенно (деньги выдаются случайно, в промежутке от min до max) infinitive - Сделать деньги бесконечными, 1\0 - Да\Нет соответсвенно.[/cut] [cut=Изменение имени ГГ]Найдем аттрибут st_actor_name в файле configs\text\rus\st_characters.xml:
Код <string id="st_actor_name"> <text>Александр Дегтярев</text> </string> И меняем имя на необходимое. В диалогах к ГГ будут обращаться по старому имени (Александр Дегтярев), поэтому лучше пройтись поиском по файлам и поискать еще упоминания старого имени. Нужна Новая Игра![/cut] [cut=Терминатор в Зоне (бессмертие)]Открываем файл configs\creatures\actor.ltx и правим в нем следующие интересные строчки:
Код [actor_condition] satiety_v = 0.0 ; Скорость уменьшения сытости со временем radiation_v = 100 ; Скорость уменьшения радиации satiety_power_v = 100 ; Увеличение силы при уменьшении сытости satiety_health_v = 0.0001 ; Увеличение здоровья при уменьшении сытости satiety_critical = 0.0 ; Критическое значения сытости (в процентах от 0-1) когда здоровье начианает уменьшаться radiation_health_v = 0.0 ; Уменьшение здоровья при воздействии радиации morale_v = 100 ; Скорость восстановления морали psy_health_v = 100 ; Скорость восстановления psy-здоровья alcohol_v = -100 ; Скорость вывода алкоголя из организма health_hit_part = 0.0 ; Процент хита, уходящий на отнимание здоровья power_hit_part = 0.0 ; Процент хита, уходящий на отнимание силы max_power_leak_speed = 0.0 ; Накопление усталости (макс граница, до которой восстанавливается сила) в секунду игрового времени bleeding_v = 0.0 ; Потеря крови при номинальной ране в секунду wound_incarnation_v = 100 ; Скорость заживления раны min_wound_size = 0.0002 ; Минимальный размер раны, после которого она считается зажившей [/cut] [cut=Спавн предмета в рюкзак ГГ]Открываем файл scripts\ui_main_menu.script Для SGM: Ищем:
Код elseif db.actor~=nil and dik==DIK_keys.DIK_F5 then self:mod_options() Добавляем ниже:
Код elseif db.actor~=nil and dik==DIK_keys.DIK_F6 then give_object_to_actor("Предмет")
Для чистой игры (ТЧ\ЧН\ЗП) и модов на них (Универсальный способ): Ищем:
Код if dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() Добавляем ниже:
Код elseif db.actor~=nil and dik==DIK_keys.DIK_F6 then alife():create("Предмет",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
Все. В игре жмем ESC=>F6=>ESC и у нас в рюкзаке будет лежать предмет. PS: "Предмет" - секция предмета, берем из файла configs\(список объектов).txt[/cut]
Надстройки и заплатки на SGM: [cut=Изменение численности Альфы]Отряды Альфы: Отряды Альфы хранятся в файле configs\misc\squad_descr_extended.ltx Почти весь файл посвящен Альфовцам. К Альфе относятся все секции содержащие в себе слова alfa (например: pri_alfa_squad_2_master, zat_alfa_squad_1_novice). В секциях нас интересует только одна строчка параметра npc:
Код npc = alfa_novice_commander,alfa_novice_specnaz1,alfa_novice_specnaz2,alfa_novice_sniper1,alfa_novice_sniper2,alfa_novice_shotgunner Как видно из значений, в этом (zat_alfa_squad_1_novice) отряде 6 NPC: Командир, 2 Штурмовика, 2 Снайпера и 1 Шотганнер. Вы можете удалить ненужных NPC и добавить новых, но запомните, главное чтобы остался хотя бы 1 NPC в отряде, иначе будет вылет. Настройки спавна Альфы: Отряды Альфы спавнятся и перемещаются посредством smart_terrain. Параметры smart_terrain хранятся в файлах configs\scripts\\smart\_sim_.ltx За кол-во отрядов на smart_terrain отвечает параметр max_population. Чтобы понизить (или повысить) кол-во отрядов Альфы на локации, необходимо уменьшить (или увеличить) значение параметра max_population (max_population должен быть больше 0). Но в этих файлах могут храниться настройки не только Альфы, поэтому вначале поищите в файле строчки содержащие alfa, а потом уже правьте. Также в этих файлах есть строчки вида:
Код spawn_num = {+opt_activate_alfa_force =check_actor_rank(200:350)} 1, 0 Которая непосредственно и производит спавн бойцов. В фигурных скобках хранятся условия для произведения спавна: +opt_activate_alfa_force проверка на то, что у нас разршен спавн Альфы в настройках, а =check_actor_rank(200:350) проверяет наш ранг ГГ (200 < Наш Ранг < 350); При выполнении условий, будет произведен спавн 1 отряда, а при не выполнении - не будет (0 отрядов).[/cut] [cut=Перевооружаем Альфу]Бойцы Альфы описаны в файле configs\gameplay\character_desc_extended.xml Файл с комментариями, Все Альфовцы в самом конце, после большого комментария, который сложно не заметить:
Код <!------------------------------------------=============-------------------------------------------------> <!------------------------------------------'Отряд Альфа'-------------------------------------------------> <!------------------------------------------=============-------------------------------------------------> Их вооружение описывается в теге supplies, подобно рюкзаку ГГ. Так что, как править его смотрите в первом спойлере темы Для примера снабдим штурмовика alfa_novice_specnaz1 автоматом LR-300 с напяленными прицелом и глушителем: Первоначальная секция:
Код <supplies> [spawn] \n device_torch \n wpn_lr300_m1 \n ammo_5.56x45_ss190 = 1 \n wpn_hpsa \n ammo_9x19_fmj = 1 \n grenade_rgd5 = 1 \n wpn_binoc = 1 \n #include "gameplay\character_items_4.xml" #include "gameplay\character_food.xml" #include "gameplay\character_drugs_3.xml" </supplies> Измененная:
Код <supplies> [spawn] \n device_torch \n wpn_lr300 = 1, scope, silencer \n ammo_5.56x45_ss190 = 1 \n wpn_hpsa \n ammo_9x19_fmj = 1 \n grenade_rgd5 = 1 \n wpn_binoc = 1 \n #include "gameplay\character_items_4.xml" #include "gameplay\character_food.xml" #include "gameplay\character_drugs_3.xml" </supplies> [/cut] [cut=Где изменить порог починки стволов и брони]У техников: Параметр bad_cond (введен в мод дополнением от Енота) в файле configs\misc\engineer\stalkers_upgrade_info.ltx В ремкомплектах: В файле scripts\ui_mod_elements.script нужно поправить строчки вида:
Код pistol_in_slot:condition()<0.7 rifle_in_slot:condition()<0.7 outfit_in_slot:condition()<0.7 helm_in_slot:condition()<0.7 [/cut] [cut=Достижение на показ SGM тайников]В SGM есть достижение, которое отмечает новые SGM-тайники на миникарте, но 60 тайников "слишком много" для нашего счастья. Давайте исправим это недоразумение на 15. Откроем файл scripts/ui_mod_pda.script и находим функцию achievements_pathfinder_update:
Код function achievements_pathfinder_update() local pre=read_mod_param("stat_taynikov") if pre~=nil and pre>=60 and dont_has_alife_info("sgm_achievements_pathfinder") then give_info("sgm_achievements_pathfinder") inc_mod_param("stat_dostigeniy",1) news_manager.send_tip(db.actor,"st_achievement_pathfinder_text",0,"sgm_achievement_pathfinder",10000,nil,"st_achievement_ti p _ t it l e " ) end end В этой функции нам нужна только 1 строчка: if pre~=nil and pre>=60 and dont_has_alife_info("sgm_achievements_pathfinder") then Меняем 60 на 15 и сохраняем файл. Для полноты картины следует поправить и описание, открываем файл configs\text\rus\SGM_personal_pda.xml и ищем в нем аттрибут st_achievements_need_pathfinder:
Код <string id="st_achievements_need_pathfinder"> <text>Найденых SGM тайников - 60.</text> </string> Тут также правим 60 на 15 и сохраняемся. Все, достижение отредактировано. PS: Остальные SGM-достижения редактируются в этих-же файлах.[/cut] [cut=Как прописать предметы в личный хабар?]Поднимаем флешку (например Назара), но не активируем ее, а сохраняемся и выходим из игры. Находим секцию флешки в файле configs\misc\items\sgm_deserves.ltx
Код [dv_rasvet_nazar_case]:deserve_flash,identity_immunities $spawn = "devices\rasvet_nazar_case" inv_name = st_rasvet_nazar_case_title inv_name_short = st_rasvet_nazar_case_title description = st_rasvet_nazar_case_descr create_deserve_x = 406.352 create_deserve_y = 5.948 create_deserve_z = -118.637 create_deserve_lv = 1357309 create_deserve_gv = 531 deserve_title = st_rasvet_nazar_unpack_title deserve_descr = st_rasvet_nazar_unpack_descr deserve_items = wpn_sig550,ammo_dumdum,20,af_night_star,drug_engine,money_meshochek_1000_5000 И в последнюю строчку (deserve_items) добавляем то, что хотим. Писать в одну строчку, через запятую (в конце запятая не ставится). Сохраняемся, заходим в игру и используем флешку.[/cut] [cut=Бесконечные патроны]Открываем файл scripts\sgm_modules.script и дописываем в самый конец, после копирайта:
Код function get_ammo_for_reload() -- Обработчик для xr_motivator.script if not db.actor then return nil end if db.actor <img src="/.s/sm/2/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject("ammo_5.45x39_fmj") == nil then create_ammo("ammo_5.45x39_fmj",db.actor <img src="/.s/sm/2/tongue.gif" border="0" align="absmiddle" alt="tongue" /> osition(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id(),30) end end Открываем файл scripts\xr_motivator.script и ищем в нем функцию motivator_binder:update, а уже в ней правим блок:
Код if time_global() - self.last_update > 1000 then sr_light.check_light(object) sgm_modules.get_ammo_for_reload() -- Бесконечные патроны 5.45*39 self.last_update = time_global() end Мы добавили в этот блок строчку sgm_modules.get_ammo_for_reload(), которая и будет проверять наличие (точнее отсутствие) патронов 5.35*39 в нашем рюкзаке, и если она их не найдет - она их нам даст [/cut] [cut=Если пропал НПС с квестовой взрывчаткой в Припяти]В файле scripts\ui_main_menu.script ищем:
Код elseif db.actor~=nil and dik==DIK_keys.DIK_F5 then self:mod_options() Добавляем ниже:
Код elseif db.actor~=nil and dik==DIK_keys.DIK_F6 then give_info("pri_a19_lab_x8_investigated") give_info("pri_a22_scene_done") give_object_to_actor("pri_a25_explosive_charge_item") В игре жмем Esc-F6-Esc и в рюкзаке взрывчатка и метка квеста на двери.[/cut] [cut=Если Нужно выдать одну или несколько инфопорций]В файле scripts\ui_main_menu.script ищем:
Код elseif db.actor~=nil and dik==DIK_keys.DIK_F5 then self:mod_options() Добавляем ниже:
Код elseif db.actor~=nil and dik==DIK_keys.DIK_F6 then give_info("Имя первой инфопорции") give_info("Имя второй инфопорции")... В игре жмем Esc-F6-Esc.[/cut] [cut=Настройки Мода (через файл mod_params.ltx)]Мод можно дополнительно настроить в файле configs\mod_parameters\mod_params.ltx Хотя многих описанных ниже параметров в v2.2 не осталось, они все же используются модом, так что, вникаем
Цена за утилизованные предметы: utilizator_cash_multiplier = 5 ; Множитель на стоимость переработанных утилизатором предметов. Чем больше значение, тем больше денег за переработку получит ГГ
Состояние брони снятой с трупа: marauder_outfit_cond_from = 99 ; Минимальное состояние брони (99 marauder_outfit_cond_before = 100 ; Максимальное состояние брони (100 . marauder_outfit_cond_before > marauder_outfit_cond_from
Грабёж ГГ во фриплее: freeplay_robbery_actor = false ; (true (да) или false (нет)) - Грабить ли ГГ по наступлению фриплея
Респаун баз: respawn_bases_permition = true ; (true (да) или false (нет)) - Производить ли респаун баз(вносимых модом),после их частичного разгрома
Детали для работы с механиками: need_mechanic_details = true ; (true (да) или false (нет)) - Нужны ли детали для работы с механиками.
Отключаем принудиловку сна: max_no_dream_time = 0 ; (Используется если параметр need_actor_dream равен true) - Через каждые max_no_dream_time часов, ГГ будет принудительно засыпать need_actor_dream = false ; (true (да) или false (нет)) - Нужно ли ГГ спать как минимум раз в max_no_dream_time часов
Ранг ГГ: headshot_rank_on_display = true ; (true (да) или false (нет)) - Отображать ли рядом со счетчиком ранга ГГ, счетчик хедшотов. Работает со включенной опцией мода "Вывести на HUD инф. о ранге"
Аномалии: create_anomaly_permition = false ; (true (да) или false (нет)) - Спаунить ли новые аномалии, после начала новой игры. (Если изменить на false, аномалии мода исчезнут, даже если вы уже прошли половину игры). очень жрёт ресурсы, лучше отключить для слабых машин.
Мины: create_mines_permition = true ; (true (да) или false (нет)) - Спаунить ли новые мины, после начала новой игры. (Изменять только до начала новой игры) очень жрёт ресурсы, лучше отключить для слабых машин. mine_traps_radius = 2 ; - Дистанция между ГГ и миной, сокращая которую мина детонирует, можно уменьшить расстояние детонации мины до 2 метров.
Это на ваше усмотрение: can_release_base_members = false ; (true (да) или false (нет)) - Убирать ли торговцев и телохранителей с базы, после её разгрома.
100% Выпадение частей мутантов:
Код [booty_params] boar_prob = 1.0 ; Шанс выпадения части тела кабана. bloodsucker_prob = 1.0 ; Шанс выпадения части тела кровососа. dog_prob = 1.0 ; Шанс выпадения части тела слепого пса. pseudodog_prob = 1.0 ; Шанс выпадения части тела псевдо-собаки. flesh_prob = 1.0 ; Шанс выпадения части тела плоти. chimera_prob = 1.0 ; Шанс выпадения части тела химеры. pseudo_gigant_prob = 1.0 ; Шанс выпадения части тела псевдо-гиганта. burer_prob = 1.0 ; Шанс выпадения части тела бюрера. controller_prob = 1.0 ; Шанс выпадения части тела контроллера. snork_prob = 1.0 ; Шанс выпадения части тела снорка. [/cut]
Мелочи: [cut=Правки по оружию]Характеристики оружия хранятся в ltx-файлах папки \configs\weapons\ Наиболее интересные параметры: visual - Внешний вид cost - Цена (торговцы умножают её на некоторый коэффициент) inv_weight - Вес sprint_allowed - Возможность бега с этим оружием ammo_mag_size - Размер магазина ammo_class - Типы используемых патронов, перечисляем через запятую grenade_launcher_status - Подствольный гранатомет (0 - нет; 1 - есть, несъемный; 2 - есть возможность установить) grenade_class - Тип используемых подствольных гранат, перечисляем через запятую silencer_status - Съемный глушитель (0 - нет; 1 - есть, несъемный; 2 - есть возможность установить) scope_status - Съемный прицел (0 - нет; 1 - есть, несъемный; 2 - есть возможность установить) zoom_enabled - Зум (приближение) scope_zoom_factor - Величина зума scope_texture - Текстура прицельной сетки hit_power - Сила выстрела (менять все четыре значения, чем больше значение - тем больше убойность. Максимальная убойность у гаусса 4.0, можно и больше, но оно вам нужно ) silencer_hit_power - Убойность с глушителем fire_distance - Максимальная дистанция для выстрела в метрах cam_relax_speed - Скорость возврата в исходное положение после выстрела (чем меньше, тем быстрее можно прицелится после выстрела) misfire_condition_k - Порог, после которого оружие может заклинивать (от 0 до 1, чем меньше, тем надежнее ствол) condition_shot_dec - Увеличение износа при каждом выстреле (от 0 до 1, чем меньше, тем меньше изнашивается ствол) fire_modes - Режимы стрельбы (-1 - очередью, 1 - одиночный, 2 - с отсечкой по 2 патрона)[/cut] [cut=Установка детектора целей на интегрированный прицел на примере "Монгола"]Если вписать scope_alive_detector = scope_detector в конфиг оружия то этот параметр будет успешно проигнорирован. Выход в добавлении этой строки в любую секцию апгрейда (например [up_sect_firsta_l85]) и добавление этого апгрейда в ствол по умолчанию (installed_upgrades = up_firsta_l85)[/cut]
[cut=История обновления шапки][table][tr][td]Дата [/td][td]Описание изменений [/td][td]Автор [/td][/tr][tr][td]31.05.12[/td][td]Спойлеры отсортированы по категориям. Статьи подредактированы и приведены к стандарту по оформлению[/td][td]ХОВАН[/td][/tr][tr][td]19.11.12[/td][td]Добавлено описание выдачи инфопорции.[/td][td]denis2000[/td][/tr][/table][/cut]
Здесь обсуждаются вопросы, которые напрямую связаны с читерством в игре. Посты, не связанные напрямую с читерством, будут считаться оффтопом и будут предприняты действия согласно Правилам сайта ( п. 4.12). Ответы на "плохие вопросы" также являются оффтопом; под каждым постом есть кнопочка "Доложить" - лучше нажимайте на нее.
|
|
|
Эти 0 пользователя(ей) поблагодарили Vaiteria за это полезное сообщение: |
|
|
Earth2Space | Дата: Вс, 14.07.2013, 18:11 | Сообщение # 811 |
Механик-водитель 6-го моторизованного квада
Долг
Сообщений: 344
| FantomICW, у меня функции с пробелами не всегда находит. Например, если в сткрипте в функции между словами стоит 2 пробела.
Стол заказов | Правки движка | O.G.S.E. 0.6.9.3
Сообщение отредактировал Earth2Space - Вс, 14.07.2013, 18:11 |
|
|
Эти 0 пользователя(ей) поблагодарили Earth2Space за это полезное сообщение: |
|
|
htm | Дата: Вс, 14.07.2013, 19:14 | Сообщение # 812 |
Гражданский
Пользователи
Сообщений: 11
| Earth2Space, Игра выключена. Уже понял, файл на системном диске находится(он у меня не битый на части) Цитата (Миротворец) Значит не там или не так правил. Сделай скрины правок и приведи их. Дело в том, что я поставил снова старый файл без изменений. После вылетает жук.
Сообщение отредактировал htm - Вс, 14.07.2013, 19:14 |
|
|
Эти 0 пользователя(ей) поблагодарили htm за это полезное сообщение: |
|
|
totenchem | Дата: Вс, 14.07.2013, 19:45 | Сообщение # 813 |
Генералиссимус
Вольные сталкеры
Сообщений: 3375
| Цитата (denis2000) Отвечаете за свои слова? Цитата (Vaiteria) Способ работает для ЧН\ЗП Добавлено (14.07.2013, 19:45) --------------------------------------------- FantomICW, Глеб никак не найду,я играю на этом моде S.T.A.L.K.E.R_Народная Солянка-Поиски Чернобыльского Шахматиста_[Mod],может там что-то по другому сделано,но я никак не найду.
|
|
|
Эти 0 пользователя(ей) поблагодарили totenchem за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 14.07.2013, 19:54 | Сообщение # 814 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| totenchem, предоставь, пожалуйста, файл scripts/bind_stalker.script И еще. Вы с denis2000, похоже, говорите о разных подсказках в шапке. Денис, наверное, имеет ввиду Цитата (Vaiteria) [ Спавн предмета в рюкзак ГГ ] Этот способ может вполне заменить приведенный Дмитрием. Способ с правкой bind_stalker.script правильней с точки зрения модостроителя (у ГГ при НИ сразу есть нужные вещи). Но нам ведь сейчас главное - зачитерить предметы...
Сообщение отредактировал FantomICW - Вс, 14.07.2013, 19:55 |
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
totenchem | Дата: Вс, 14.07.2013, 22:10 | Сообщение # 815 |
Генералиссимус
Вольные сталкеры
Сообщений: 3375
| FantomICW, [cut=вот что просил]-- файл из мода "Народной солянки 2009" от 14.06. -- Адаптирован для Менеджера оружия. Rulix aka Bak от 2.07.09 -- Адатировал: Idler.
local upd_time local upd_time1 local upd_time2 local upd_time3 local upd_time4
local table_sort = table.sort local math_ceil = math.ceil
function init(obj) xr_motivator.AddToMotivator(obj) end
function actor_init(npc) npc:bind_object(actor_binder(npc)) -- level_tasks.add_location(707,"blue_location","Лукаш") -- level_tasks.add_location(702,"blue_location","Макс") -- level_tasks.add_location(728,"blue_location","Повар") end
local det_suit_id = nil local game_difficulty_by_num = { [0] = "gd_novice", [1] = "gd_stalker", [2] = "gd_veteran", [3] = "gd_master" }
lasthealth = 0 lasttime = 0 post_process = 0 local weapon_hide = false -- local arts = false ---------------------------------------------------------------------------------------------------------------------- class "actor_binder" (object_binder) ---------------------------------------------------------------------------------------------------------------------- function actor_binder:__init (obj) super(obj) self.bCheckStart = false self.weather_manager = level_weathers.WeatherManager() self.actor_detector = xr_detector.actor_detector() self.is_saved = false end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_spawn(data) --amk.updateGameTime() spawn_level_changer.remove_old_teleport() printf("actor net spawn") -- skunk.dbglog("actor net spawn") zamok.restore() babah.collectBombs() level.show_indicators()
self.bCheckStart = true self.weapon_hide = false -- спрятано или нет оружие при разговоре. weapon_hide = false -- устанавливаем глобальный дефолтовый флаг.
if object_binder.net_spawn(self,data) == false then -- skunk.dbglog("actor net spawn 1") return false end
-- skunk.dbglog("actor net spawn 2") db.add_actor(self.object) if self.st.disable_input_time == nil then level.enable_input() end
self.weather_manager:reset() -- game_stats.initialize ()
if(actor_stats.add_to_ranking~=nil)then actor_stats.add_to_ranking(self.object:id()) end
--' Загружаем настройки дропа death_manager.init_drop_settings() -- added by xStream for AMK miniSDK if xrs_ai then xrs_ai.actor_net_spawn(self) end
if rx_ai then rx_ai.actor_net_spawn() end amk.on_game_load(obj) art_hit.net_spawn() --===============================
--[[local bad_object_names = {"wpn_lr30053522", "wpn_lr30058409" } --"wpn_lr30025601", "wpn_lr30028817","wpn_lr30033589" 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]]
--=============================== sak.add_tail() braad_test.false_info() -- end of addition meceniy_work.main() meceniy_utils.net_spawn_callback() -- kostya_level -- spawn_teleport.spawn_teleport_exit() spawn_teleport.spawn_teleport_hospital() bind_det_arts.start_update() netpacket_pda_id = netpacket_pda_create.create_pda() return true end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_destroy()
-- added by xStream for AMK miniSDK amk.on_game_save(obj) -- end of addition
if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end -- game_stats.shutdown () db.del_actor(self.object)
sr_light.clean_up ()
self.object:set_callback(callback.inventory_info, nil) self.object:set_callback(callback.article_info, nil) self.object:set_callback(callback.on_item_take, nil) self.object:set_callback(callback.on_item_drop, nil) --self.object:set_callback(callback.actor_sleep, nil) self.object:set_callback(callback.task_state, nil) self.object:set_callback(callback.level_border_enter, nil) self.object:set_callback(callback.level_border_exit, nil) self.object:set_callback(callback.take_item_from_box, nil)
if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end
valerich_treasures.net_destroy() xr_sound.stop_all_sound_object() if iniStatistic then get_console():execute("load ~~~ amk.dump_table(iniLines):") amk.dump_table(iniLines) get_console():execute("load ~~~ amk.dump_table(iniOtherLines):") amk.dump_table(iniOtherLines) get_console():execute("load ~~~ amk.dump_table(iniStat):") local t = {} for sect, count in pairs(iniStat) do table.insert(t, {sect, count}) end table_sort(t, sortStat) amk.dump_table(t) end object_binder.net_destroy(self) end
function sortStat(t1, t2) return t1[2] > t2[2] end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:reinit() object_binder.reinit(self) local npc_id = self.object:id()
db.storage[npc_id] = { }
self.st = db.storage[npc_id] self.st.pstor = nil
self.next_restrictors_update_time = -10000
self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.article_info, self.article_callback, self) self.object:set_callback(callback.on_item_take, self.on_item_take, self) self.object:set_callback(callback.on_item_drop, self.on_item_drop, self) self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self) self.object:set_callback(callback.task_state, self.task_callback, self) --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self) self.object:set_callback(callback.level_border_enter, self.level_border_enter, self) self.object:set_callback(callback.level_border_exit, self.level_border_exit, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)
self.object:set_callback(callback.use_object, self.on_use_object, self)
self.object:set_callback(callback.death, self.death_callback, self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:death_callback(victim, who) if victim:id() == db.actor:id() then difficulty_manager.deathStatCollect() end end
function actor_binder:take_item_from_box(box, item)
------------ if string.sub(item:section(),1,10)=="val_zapis_" then valerich_treasures.spawn_next( tonumber(string.sub(item:section(),11,-1)) ) end
--Proper72 удаление рюкзаков if box:is_inv_box_empty() then if (string.sub(box:section(),2,15)=="_inventory_box" and string.find(rx_utils.read_from_ini(nil, box:section(), "visual", "", 1),"item_rukzak")) or string.sub(box:section(),1,11)=="val_taynik_" then level.start_stop_menu(level.main_input_receiver(), true) alife():create("treasure_item",box:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0) alife():release(alife():object(box:id())) end end ------------ -- Proper72 end
local story_id = box:story_id() if story_id == nil then return end
treasure_manager.take_item_from_box(box, story_id) zamok.remove(box, item)
--AMK UTILS-- amk.on_item_take_from_box(box,item) amk_utils.actor_item_from_box(box, item) --AMK UTILS--
end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_enter(npc, info_id) self.actor_detector:actor_enter() --AMK UTILS-- amk_utils.actor_level_border_enter(npc, info_id) --AMK UTILS-- end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_exit(npc, info_id) self.actor_detector:actor_exit() --AMK UTILS-- amk_utils.actor_level_border_exit(npc, info_id) --AMK UTILS-- end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:info_callback(npc, info_id) printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id) --' Сюжет level_tasks.proceed(self.object) -- Отметки на карте hidden_slots.on_info(info_id) level_tasks.process_info_portion(info_id) --AMK UTILS-- amk.on_info(npc,info_id) amk_utils.actor_info(npc, info_id) inventory.on_inventory_info(info_id) --AMK UTILS-- if npc:id() == db.actor:id() then meceniy_spawn.respawn(info_id) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_trade (item, sell_bye, money) if sell_bye == true then game_stats.money_trade_update (money) else game_stats.money_trade_update (-money) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:article_callback(npc, group, name) --printf("article_callback [%s][%s]", group, name) if device().precache_frame >1 then return end if group == "Diary" then news_manager.send_encyclopedy("diary", group) else news_manager.send_encyclopedy("encyclopedy", group) end --AMK UTILS-- amk.on_info(npc,info_id) amk_utils.actor_article(npc, group, name) --AMK UTILS-- end -------------------------------------------------------------------------------------------------- function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) local item = obj --AMK UTILS-- amk.on_item_take(obj) amk_utils.actor_item_take(obj) if obj:clsid() == clsid.wpn_ammo then dunin_ammo.on_take(obj) end sak.check_used_item(obj) braad_test.checking_use_item(obj) if xrs_ai then xrs_ai.actor_item_take(obj) end
art_hit.hit_by_art(obj) --AMK UTILS-- babah.on_item_take(obj) inventory.on_item_take(item) spawn_zombi.checking_taken_item(obj) spawn_zombi.checking_taken_item2(obj) spawn_zombi.checking_taken_item3(obj) spawn_zombi.checking_taken_item4(obj) spawn_zombi.checking_taken_item5(obj) spawn_zombi.checking_taken_item6(obj) spawn_zombi.checking_taken_item7(obj) spawn_zombi.checking_taken_item8(obj) spawn_zombi.checking_taken_item9(obj) spawn_zombi.checking_taken_item10(obj) spawn_zombi.checking_taken_item11(obj) spawn_zombi.checking_taken_item12(obj) spawn_zombi.checking_taken_item13(obj) spawn_zombi.checking_taken_item14(obj) spawn_zombi.checking_taken_item15(obj) spawn_zombi.checking_taken_item16(obj) spawn_zombi.checking_taken_item17(obj) spawn_zombi.checking_taken_item18(obj) spawn_teleport.checking_taken_item19(obj) spawn_teleport.checking_taken_item20(obj) spawn_teleport.checking_taken_item21(obj) spawn_teleport.checking_taken_item22(obj) new_spawn.checking_taken_item23(obj) spawn_teleport.checking_taken_item24(obj) spawn_teleport.checking_taken_item25(obj) spawn_teleport.checking_taken_item26(obj) spawn_teleport.checking_taken_item27(obj) spawn_teleport.checking_taken_item28(obj) spawn_restrictor.checking_taken_item29(obj) spawn_restrictor.checking_taken_item30(obj) spawn_teleport.checking_taken_item31(obj) spawn_restrictor.checking_taken_item32(obj) spawn_teleport.checking_taken_item33(obj) spawn_teleport.checking_taken_item34(obj) spawn_teleport.checking_taken_item35(obj) spawn_teleport.checking_taken_item36(obj) new_spawn.checking_taken_item37(obj) arhara_dialog.checking_taken_item38(obj) spawn_zombi.checking_taken_item39(obj) spawn_zombi.checking_taken_item40(obj) meceniy_utils.on_item_take_callback(obj) spawn_zombi.checking_taken_item41(obj) spawn_zombi.checking_taken_item42(obj) spawn_zombi.checking_taken_item43(obj) arhara_dialog.checking_taken_item44(obj) arhara_dialog.checking_taken_item45(obj) arhara_dialog.checking_taken_item46(obj) arhara_dialog.checking_taken_item47(obj) arhara_dialog.checking_taken_item48(obj) arhara_dialog.checking_taken_item49(obj) arhara_dialog.checking_taken_item50(obj) arhara_dialog.checking_taken_item51(obj) arhara_dialog.checking_taken_item52(obj) arhara_dialog.checking_taken_item53(obj) arhara_dialog.checking_taken_item54(obj) arhara_dialog.checking_taken_item55(obj) arhara_dialog.checking_taken_item56(obj) arhara_dialog.checking_taken_item57(obj) arhara_dialog.checking_taken_item58(obj)
valerich_treasures.on_item_take(obj) -- Тайники Valerich'a -- Proper70 kostya kostya_dialog.checking_taken_item59(obj) -- Proper70 Bitva KL braad_test.checking_taken_item60(obj) -- Proper71 docs kostya_dialog.checking_taken_item61(obj) -- Proper70 strelok kostya_dialog.checking_taken_item62(obj) -- Proper70 end chess.item_take(obj)
if rx_ai then rx_ai.actor_item_take(obj) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_drop (obj) babah.li(obj)
-- Vergas ogg-player player_ogg.lose_item(obj) level_tasks.proceed(self.object) --game_stats.update_drop_item (obj, self.object) -- if level.vertex_position(db.actor:level_vertex_id()):distance_to(db.actor:position())>1 then -- amk.mylog("Здесь нет вертексов") -- else -- amk.mylog("Вертекс "..db.actor:level_vertex_id().." "..db.actor:game_vertex_id()) -- end --AMK UTILS-- amk.on_item_drop(obj) amk_utils.actor_item_drop(obj) --AMK UTILS-- inventory.on_item_drop(obj) sak.check_droped_item(obj) braad_test.drop_actor(obj) braad_test.drop_lim(obj) --Избавляемся от Зомбирования-- meceniy_work.on_item_use(obj) meceniy_utils.on_item_drop_callback(obj) ------------------------------- spawn_level_changer.checking_droped_obj(obj) --[[spawn_level_changer.checking_droped_item(obj) spawn_level_changer.checking_droped_item2(obj) spawn_level_changer.checking_droped_item3(obj) spawn_level_changer.checking_droped_item4(obj) spawn_level_changer.checking_droped_item5(obj) spawn_level_changer.checking_droped_item6(obj) spawn_level_changer.checking_droped_item7(obj) spawn_level_changer.checking_droped_item8(obj) spawn_level_changer.checking_droped_item11(obj) spawn_level_changer.checking_droped_item12(obj) spawn_level_changer.checking_droped_item13(obj) spawn_level_changer.checking_droped_item14(obj)]] --spawn_level_changer.checking_droped_item10(obj) zamok.add(obj) end ----------------------------------------------------------------------------------------------------------------------
function actor_binder:task_callback(_task, _objective, _state) task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state) if _objective:get_idx() == 0 then if _state == task.fail then news_manager.send_task(db.actor, "fail", _task, _objective) elseif _state == task.completed then task_manager.reward_by_task(_task) news_manager.send_task(db.actor, "complete", _task, _objective) else news_manager.send_task(db.actor, "new", _task, _objective) end else if _task:get_objective(0):get_state() == task.in_progress then news_manager.send_task(db.actor, "update", _task, _objective) end end --AMK UTILS-- amk_utils.actor_task(_task, _objective, _state) --AMK UTILS-- end
---------------------------------------------------------------------------------------------------------------------- function actor_binder:map_location_added_callback(spot_type_str, object_id) if (false==app_ready()) or (device().precache_frame>1) then return end --'news_manager.send_task(db.actor, "new") end ---------------------------------------------------------------------------------------------------------------------- -- malandrinus --watch_value = 0 -- malandrinus scopeUsed = false function actor_binder:update(delta) -- malandrinus -- watch_value = game.time() -- /malandrinus chess.update() amk.oau_watchdog=200 amk.oau_reason="actor_binder:update" --amk.updateGameTime() amk.oau_watchdog=2001 object_binder.update(self, delta) amk.oau_watchdog=199
local time = time_global() game_stats.update (delta, self.object) if db.actor:item_in_slot(6) and db.actor:item_in_slot(6):section() == "exo_doktor_outfit" then if not det_suit_id then if db.actor:object("detector_suit") then det_suit_id = db.actor:object("detector_suit"):id() else det_suit_id = (alife():create("detector_suit",db.actor:position(), db.actor:level_vertex_id(),db.actor:game_vertex_id(), db.actor:id())).id end end else if det_suit_id and alife():object(det_suit_id) then alife():release(alife():object(det_suit_id),true) det_suit_id = nil end end
local fov = device().fov local wpn if fov < 35 and xr_logic.pstor_retrieve(db.actor, "use_scope", 0) == 0 then wpn = db.actor:item_in_slot(db.actor:active_slot()) if wpn and wpn:section() == "wpn_crossbow" then level.add_pp_effector("bast.ppe", 1034, true) get_console():execute ("r2_sun_lumscale_amb 3") get_console():execute ("r2_mblur 0.6") xr_logic.pstor_store(db.actor, "use_scope", 1) end elseif fov > 35 and xr_logic.pstor_retrieve(db.actor, "use_scope", 0) == 1 then xr_logic.pstor_store(db.actor, "use_scope", 0) level.remove_pp_effector(1034) get_console():execute ("r2_sun_lumscale_amb 1") get_console():execute ("r2_mblur 0.") end if upd_time3 == nil then upd_time3 = time + 500 elseif upd_time3 < time then upd_time3 = time + 500 local accuracy = math_ceil(db.actor:accuracy()*1000) if accuracy == 1 then if not scopeUsed then local item = db.actor:active_item() if item then --get_console():execute("load ~#I#: db.actor:active_item():section()="..tostring(item:section())) if item:section() == "wpn_binoc" then scopeUsed = true elseif IAmAWeapon[item:clsid()] then local t = amk.get_weapon_data(alife():object(item:id())) scopeUsed = (bit_and(t.addon_flags, 1) == 1 or rx_utils.get_addon_status(item, "sc") == 1) --amk.dump_table(t) end end end else scopeUsed = false end end -- $DreamMod апдейт схемы сна if sleep_manager.is_sleep_active() and xr_conditions.actor_dead() then xr_logic.issue_event(db.actor, db.storage[db.actor:id()]["ar_sleep"], "update") end amk.oau_watchdog=198 -- апдейт погоды self.weather_manager:update() amk.oau_watchdog=197 -- апдейт схемы детектора self.actor_detector:update() amk.oau_watchdog=196 --ms_ai.sleep_manager() amk.oau_watchdog=195 -- апдейт звуковой схемы актера xr_sound.update_actor() amk.oau_watchdog=194 meceniy_work.set_invisible() amk.oau_watchdog=193 -- meceniy_utils.on_actor_update_callback() -- by Monnoroch
if upd_time == nil then upd_time = time + 10000 elseif upd_time < time then upd_time = time + 10000 monnoroch.upd_time(time) end amk.oau_watchdog=1931 if upd_time1 == nil then upd_time1 = time + 1000 elseif upd_time1 < time then upd_time1 = time + 1000 -- meceniy_work.set_invisible() meceniy_utils.on_actor_update_callback() amk.oau_watchdog=1932 sak.show_time() amk.oau_watchdog=1933 arc_main.actor_update() amk.oau_watchdog=1934 meceniy_work.mainw() end amk.oau_watchdog=1935 -- sak.out_teleport() --в net_spawn() этому место! if upd_time2 == nil then upd_time2 = time + 5000 elseif upd_time2 < time then upd_time2 = time + 5000 if not self.object:is_talking() then dunin_ammo.on_update() end amk.oau_watchdog=1936 sak.nepis_umer() amk.oau_watchdog=1937 braad_test.dead_npc() amk.oau_watchdog=1938 braad_test.check_info() amk.oau_watchdog=1939 braad_test.new_info() amk.oau_watchdog=19391 braad_test.kot_info() amk.oau_watchdog=19392 braad_test.forest_info() amk.oau_watchdog=19393 braad_test.grib_respawn() amk.oau_watchdog=19394 braad_test.update_new() amk.oau_watchdog=19395 braad_test.kot_update() end amk.oau_watchdog=192 valerich_treasures.update() art_hit.update() -- ----------------------------------------------------- ARENA_EXTENSION_MOD-------------------------------------------------------- aem_manager.get_aem():update() -- ----------------------------------------------------- ARENA_EXTENSION_MOD-------------------------------------------------------- amk.oau_watchdog=191 --' Проверка потери жизни --[[ if self.object.health - lasthealth > 0.001 or self.object.health - lasthealth < -0.001 then printf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime) lasthealth = self.object.health lasttime = game.time() end ]] -- Обновление отключения ввода с клавиатуры. if self.st.disable_input_time ~= nil and game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle then level.enable_input() self.st.disable_input_time = nil end -- Обновление сна с переносом чувака в указанную позицию if self.st.sleep_relocate_time ~= nil and game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle then self.object:set_actor_position(self.st.sleep_relocate_point) local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look) self.object:set_actor_direction(dir:getH()) self.st.sleep_relocate_time = nil end
-- Апдейт прятание оружия игрока во время диалога if weapon_hide == true or self.object:is_talking() then if self.weapon_hide == false then self.object:hide_weapon() self.weapon_hide = true end else if self.weapon_hide == true then self.object:restore_weapon() self.weapon_hide = false end end amk.oau_watchdog=191 -- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени if self.next_restrictors_update_time < time then bind_restrictor.actor_update(delta) -- Апдейтим наш телепорт (Kostya_level) bind_mteleport.actor_update(delta) self.next_restrictors_update_time = time + 200
task_manager.actor_update() end amk.oau_watchdog=190 -- обновление постпроцессов if post_process ~= 0 then if post_process:update () == true then post_process = 0 end end
-- обновление пси-антенны if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:update(delta) end
--[[ local hud_demo = get_hud() local custom_static_demo = hud_demo:GetCustomStatic("cs_demo_play")
if custom_static_demo == nil then hud_demo:AddCustomStatic("cs_demo_play", true) hud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_play") end ]]
inventory.update()
--' Вывод сообщения о большой радиации if self.object.radiation >= 0.7 then local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static == nil then hud:AddCustomStatic("cs_radiation_danger", true) hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger") end else local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static ~= nil then hud:RemoveCustomStatic("cs_radiation_danger") end end amk.oau_watchdog=189 -- if not self.object:is_talking() then -- dunin_ammo.on_update() -- end amk.oau_watchdog=188 if self.bCheckStart then printf("SET DEFAULT INFOS")
if not has_alife_info("storyline_actor_start") and (level.name() == "l01_escape") then self.object:give_info_portion("storyline_actor_start") _G.g_start_avi = true printf("*AVI* RUN START AVI") end
-- if not has_alife_info("encyclopedy") then -- self.object:give_info_portion("encyclopedy") -- end
if not has_alife_info("global_dialogs") then self.object:give_info_portion("global_dialogs") end
if not has_alife_info("level_changer_icons") then self.object:give_info_portion("level_changer_icons") end
level_tasks.add_lchanger_location()
self.bCheckStart = false end
amk.oau_watchdog=187 --AMK UTILS-- amk.on_actor_upade(delta) -- amk_utils.actor_update(delta) --AMK UTILS-- amk.oau_watchdog=186 -- amk.oau_reason="actor_binder:update" -- sak.out_teleport() -- amk.oau_watchdog=185 -- sak.nepis_umer() -- amk.oau_watchdog=184 -- braad_test.dead_npc() -- braad_test.check_info() -- braad_test.new_info() -- braad_test.kot_info() -- braad_test.forest_info() -- braad_test.grib_respawn() -- braad_test.update_new() -- braad_test.kot_update() -- amk.oau_watchdog=183 -- added by Red75. Контроль за переполнением if self.warning then self.warning=nil get_hud():AddCustomStatic("hud_save_warning") local wnd=get_hud():GetCustomStatic("hud_save_warning"):wnd() if self.critical==1 then wnd:SetTextST(game.translate_string("amk_warn_trans")) self.critical=nil elseif self.critical==2 then wnd:SetTextST(game.translate_string("amk_warn_trans_critical")) self.critical=nil else wnd:SetTextST(game.translate_string("amk_warn_attention")) end elseif self.wt and self.wt<time_global() then self.wt=nil if get_hud():GetCustomStatic("hud_save_warning") then get_hud():RemoveCustomStatic("hud_save_warning") end end amk.oau_watchdog=182 if xrs_ai then xrs_ai.actor_update(delta) end if rx_ai then rx_ai.actor_update() end amk.oau_watchdog=181 -- end of addition if biodetector then biodetector.update() end amk.oau_watchdog=180 -------
-- meceniy_work.mains() --/обьекты -- amk.oau_watchdog=179 -- meceniy_work.mainw() --/Зомбирование -- amk.oau_watchdog=179 -- by Monnoroch -- if upd_time == nil then -- upd_time = time + 10000 -- elseif upd_time < time then -- upd_time = time + 10000 -- monnoroch.upd_time(time) -- end -- by Monnoroch --проверка зависания биндеров НПЦ и мобов раз в 0,5сек --закомментировано на случай разбора полётов --[[ if upd_time3 == nil then upd_time3 = time + 500 elseif upd_time3 < time then upd_time3 = time + 500 if db and db.storage then for k,v in pairs(db.storage) do if v.us ~= nil and v.us ~= 0 then abort("binder(%s) zavis(%s)", db.creatures[k]:name(), v.us) v.us = nil break end end self.is_saved = false end end]] -- drrr.dropgg() --[[----------- Proper70 keylogger if upd_time5 == nil then upd_time5 = time + 500 elseif upd_time5 < time then keylogger.update() end --------------- Proper70 end]] if upd_time4 == nil then upd_time4 = time + 500 elseif upd_time4 < time then upd_time4 = time + 500 doc_viewer.update() amk.oau_watchdog=181 babah.update(delta) amk.oau_watchdog=182 stco.update() -- if upd_time5 == nil then -- upd_time5 = time + 1500 -- elseif upd_time5 < time then -- upd_time5 = time + 1500
--он и так вешается на быстрый вызов с помощью db.actor:set_fastcall(update, db.actor) --bind_det_arts.update() amk.oau_watchdog=183 end --[[тестовый спавн детекторов в инвентаре актора alife():create('det_artefact_indy', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) alife():create('detektor_amorf', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) alife():create('det_artefact_super', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end]] amk.oau_watchdog=0 amk.oau_reason="" --[[-----------Proper70------------------------ Вывод инвормации level_vertex_id, game_vertex_id, pos if true then local hud = get_hud() local cs = hud:GetCustomStatic("cs_debug" ) if cs == nil then hud:AddCustomStatic("cs_debug", true) cs = hud:GetCustomStatic("cs_debug" ) end local lvid, gvid = db.actor:level_vertex_id(), db.actor:game_vertex_id() local pos, dir = db.actor: position(), db.actor:direction() local pos2 = level.vertex_position(lvid) local valid = pos2:distance_to(pos) <= 0.7 local msg = string.format("lvid: %d\\n", lvid) .. string.format("gvid: %d\\n", gvid) .. string.format("pos: %f,%f,%f\\n", pos.x, pos.y, pos.z) .. string.format("dir: %f,%f,%f\\n", dir.x, dir.y, dir.z) .. string.format("valid: %s", tostring(valid)) if cs ~= nil then cs:wnd():SetText(msg) end end]] end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:save(packet) if rx_ai then rx_ai.actor_save(packet) end
art_hit.save() local pk1=fake_net_packet.fake_net_packet() self:save_old(pk1) amk.mylog("Packet size is "..pk1:w_tell()) if pk1:w_tell()>7500 then self.warning=true self.critical=1 self.wt=time_global()+60000 amk.emergency_cleanup() self:save_old(packet) amk.mylog("Actor packet size is "..packet:w_tell().."!") -- amk.send_tip("Actor packet size critical=2 >7500 ","Размер нетпакета ГГ критический:"..pk1:w_tell(),0,15,"gen_info") -- это добавляем amk.emergency_restore() elseif pk1:w_tell()>6000 then self.warning=true self.wt=time_global()+60000 self:save_old(packet) -- amk.send_tip("Actor packet size critical=1 >6000 ","Размер нетпакета ГГ допустимый:"..pk1:w_tell(),0,15,"gen_info") -- это добавляем else self:save_old(packet) self.wt=time_global() -- amk.send_tip("Actor packet size <6000 ","Размер нетпакета ГГ мал. Всё ОК:"..pk1:w_tell(),0,15,"gen_info") -- это добавляем end self.is_saved = true end
function actor_binder:save_old(packet) local save_treasure_manager = true printf("actor_binder:save(): self.object:name()='%s'", self.object:name()) object_binder.save(self, packet)
--' Сохраняем уровень сложности if save_treasure_manager == true then packet:w_u8(level.get_game_difficulty() + 128) else packet:w_u8(level.get_game_difficulty()) end
--' Сохраняем данные об отключенном вводе if self.st.disable_input_time == nil then packet:w_bool(false) else packet:w_bool(true) utils.w_CTime(packet, self.st.disable_input_time) end amk.oAmkLauncher:SaveData(self.object)
xr_logic.pstor_save_all(self.object, packet) self.weather_manager:save(packet)
sr_psy_antenna.save( packet ) if save_treasure_manager == true then treasure_manager.save(packet) end
task_manager.save(packet) self.actor_detector:save(packet) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:load(reader) printf("actor_binder:load(): self.object:name()='%s'", self.object:name()) object_binder.load(self, reader) printf("actor_binder:object_binder.load(): self.object:name()='%s'", self.object:name())
--' Загружаем уровень сложности local game_difficulty = reader:r_u8() local load_treasure_manager = false if game_difficulty >= 128 then game_difficulty = game_difficulty - 128 load_treasure_manager = true end
get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
if reader:r_eof() then abort("SAVE FILE IS CORRUPT actor_binder:load "..self.object:name().." завис актор - сушите весла!") end
local stored_input_time = reader:r_u8() if stored_input_time == true then self.st.disable_input_time = utils.r_CTime(reader) end
xr_logic.pstor_load_all(self.object, reader) amk.oAmkLauncher:LoadData(self.object) self.weather_manager:load(reader)
sr_psy_antenna.load(reader) if load_treasure_manager == true then treasure_manager.load(reader) end
task_manager.load(reader) self.actor_detector:load(reader) if xr_logic.pstor_retrieve(self.object,"emerg",false) then -- нельзя использовать amk.load_varible(), так как db.actor ещё не определён self.warning=true self.critical=2 self.wt=time_global()+60000 end end ----------------------------------------------------------------------------------------------------------------------
--старт префетча звуков --if string.find(command_line(), "-noprefetch") == nil then -- sound_prefetch.prefetch_sounds() --end
-- Weapon functions function hide_weapon() weapon_hide = true end function restore_weapon() weapon_hide = false end
--// this is test for section iteration --/** local function test_section_iteration(file_name, section_name) printf ("file : %s",file_name) printf ("section : %s",section_name) local file = ini_file(file_name) local n = file:line_count(section_name) printf ("lines : %d",n) local id, value = "", "", result for i=0,n-1 do result, id, value = file:r_line(section_name,i,"","") printf ("line %d : %s = %s",i,id,value) end end
test_section_iteration("system.ltx","space_restrictor") --/**/ function actor_binder:on_use_object(obj) --medkit_use.lose_item(obj) meceniy_outfit.on_item_drop(obj) zvuki.use_snd(obj) end
[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили totenchem за это полезное сообщение: |
|
|
makdm | Дата: Вс, 14.07.2013, 22:46 | Сообщение # 816 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| totenchem, Ну так сразу же видно, вот этот кусок. function actor_binder:update(delta) -- malandrinus -- watch_value = game.time() -- /malandrinus chess.update() amk.oau_watchdog=200 amk.oau_reason="actor_binder:update" --amk.updateGameTime() amk.oau_watchdog=2001 object_binder.update(self, delta)
Вот после этого и вставляете скрипт.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
totenchem | Дата: Пн, 15.07.2013, 09:48 | Сообщение # 817 |
Генералиссимус
Вольные сталкеры
Сообщений: 3375
| makdm, спасибо сейчас попробую. Добавлено (15.07.2013, 09:27) --------------------------------------------- makdm, все сделал вот [cut=лог] FATAL ERROR [error]Expression : no_assert [error]Function : CXML_IdToIndex<class CInfoPortion>::GetById [error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\xml_str_id_loader.h [error]Line : 112 [error]Description : item not found, id [error]Arguments : start_actor_spawn
stack trace:
[/cut] Добавлено (15.07.2013, 09:48) --------------------------------------------- makdm, Дим что-то я неправильно делаю,а вот что сам не пойму,я скопировал тот скрипт,что ты выложил,может надо руками набирать,не знаю,наверно не мое это.
|
|
|
Эти 0 пользователя(ей) поблагодарили totenchem за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 15.07.2013, 10:25 | Сообщение # 818 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| totenchem, В ТЧ нужно ОБЯЗАТЕЛЬНО регистрировать инфопорцию. Внеси: Код <info_portion id="start_actor_spawn"> </info_portion> в файл типа config\gameplay\info_***.xml
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
totenchem | Дата: Пн, 15.07.2013, 12:23 | Сообщение # 819 |
Генералиссимус
Вольные сталкеры
Сообщений: 3375
| denis2000, ГГ у меня стал качаться как пьяный,земля крутиться а итди вроде и идет а вроде бы и стоит,вобщем какая-то ерунда,еще вчера вечером началось,удалил игру полностью,реестр почистил,поставил и игру и мод,сегодня запустил и тут на те вам,все плывет и пляшет,что опять удалять или может что ты посоветуешь.
|
|
|
Эти 0 пользователя(ей) поблагодарили totenchem за это полезное сообщение: |
|
|
Skipper | Дата: Пн, 15.07.2013, 13:26 | Сообщение # 820 |
Гражданский
Пользователи
Сообщений: 12
| Помогите народ, квест с наёмниками, противостояние, наёмник не берет выполненное задание. Подходишь к наёмнику на мосту,а он смотрит в низ и никакого диалога
skipper
|
|
|
Эти 0 пользователя(ей) поблагодарили Skipper за это полезное сообщение: |
|
|
Валерий | Дата: Пн, 15.07.2013, 13:40 | Сообщение # 821 |
Хранитель спокойствия
Администраторы
Сообщений: 61385
| Цитата (Skipper) Помогите народ, квест с наёмниками, противостояние, наёмник не берет выполненное задание. Подходишь к наёмнику на мосту,а он смотрит в низ и никакого диалога Ставим фиксы
|
|
|
Эти 0 пользователя(ей) поблагодарили Валерий за это полезное сообщение: |
|
|
Skipper | Дата: Пн, 15.07.2013, 13:55 | Сообщение # 822 |
Гражданский
Пользователи
Сообщений: 12
| Спасибо Валерий. Ещё с Енотом работать будет?
skipper
|
|
|
Эти 0 пользователя(ей) поблагодарили Skipper за это полезное сообщение: |
|
|
Eнoт | Дата: Пн, 15.07.2013, 14:27 | Сообщение # 823 |
Вольный бродяга
Вольные сталкеры
Сообщений: 2410
| Skipper, в сборку от Енота уже входят все фиксы. Или Вы не об этом?
Биография моего персонажа - немного поэзии. Прочитанные книги серии S.T.A.L.K.E.R. - всё больше знаний о Зоне. AMD Ryzen 7 5700x3d, nVidia GeForce RTX 3060 12GB, 32GB DDR4 3600 MHz, Windows 11 pro х64
|
|
|
Эти 0 пользователя(ей) поблагодарили Eнoт за это полезное сообщение: |
|
|
htm | Дата: Пн, 15.07.2013, 14:32 | Сообщение # 824 |
Гражданский
Пользователи
Сообщений: 11
| Попробовал. Пока правил файл(он не давал его просто пересохранить: "отказано в доступе", пришлось переносить и вставлять) видимо накосячил. теперь вылетает жук. [cut noguest=лог][DETAILS] VertexConsts(256), Batch(61) * [DETAILS] 10126 v(20), 5368 p * [DETAILS] Batch(61), VB(197K), IB(31K) * phase time: 57 ms * phase cmem: 472077 K * Loading HOM: c:\program files (x86)\gsc world publishing\s.t.a.l.k.e.r. - Зов Припяти\gamedata\levels\zaton\level.hom * phase time: 59 ms * phase cmem: 472757 K * phase time: 36 ms * phase cmem: 472757 K * phase time: 17 ms * phase cmem: 472757 K * t-report - base: 1657, 782807 K * t-report - lmap: 16, 16386 K * WARNING: player not logged in ! default LevelMap used for level[digger_stash] ! default LevelMap used for level[l04u_labx18] * phase time: 17708 ms * phase cmem: 529749 K * phase time: 84 ms * phase cmem: 529749 K * [win32]: free[2094460 K], reserved[172552 K], committed[1927228 K] * [ D3D ]: textures[853147 K] * [x-ray]: crt heap[529700 K], process heap[12918 K], game lua[64107 K], render[262 K] * [x-ray]: economy: strings[62177 K], smem[91984 K] ! Unknown command: dump_infos
FATAL ERROR
[error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ....r. - Зов Припяти\gamedata\scripts\sgm_update.script:11: attempt to index global 'ui_mod_elements' (a nil value)
stack trace:[/cut] Может кто помочь
Сообщение отредактировал htm - Пн, 15.07.2013, 17:14 |
|
|
Эти 0 пользователя(ей) поблагодарили htm за это полезное сообщение: |
|
|
Skipper | Дата: Пн, 15.07.2013, 14:38 | Сообщение # 825 |
Гражданский
Пользователи
Сообщений: 12
| Уважаемый Енот, наёмник был на стороне завода с наёмниками всё было хорошо, не сохранил и загрузил с ранней загрузки и наёмник уже на стороне бандитов и молчит.
skipper
|
|
|
Эти 0 пользователя(ей) поблагодарили Skipper за это полезное сообщение: |
|
|
|