Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Zander_driver 10 358 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Вот теперь интересно, а что у него в 135 строке. И нынешний код в net_spawn покажи) Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345739
Muzafir 19 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 (изменено) Нынешний код: function actor_binder:net_spawn(data) printf("actor net spawn") level.show_indicators() self.bCheckStart = true self.weapon_hide = false -- спрятано или нет оружие при разговоре. weapon_hide = false -- устанавливаем глобальный дефолтовый флаг. if object_binder.net_spawn(self,data) == false then return false end 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 if (level.name() == "simeiz") and not has_alife_info("keep_base_defend_started") then self.object:give_info_portion("keep_base_defend_started") end --' Загружаем настройки дропа death_manager.init_drop_settings() return true end death_manager - стандартный. Я только в конце одной строки дописал новую группировку. На количество строк это не повлияло 135 строка - это for k,v in pairs(spawn_items) do --' Доспавниваем необходимое количество итемов: --' Необходимо составить список объектов которые могут быть заспавнены для персонажа local spawn_items = item_by_community[self.npc:character_community()] for k,v in pairs(spawn_items) do --' По каждому объекту необходимо получить зависимости if check_item_dependence(self.npc, k) == true then --' По каждому объекту необходимо получить количество local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max)) --' Необходимо заспавнить нужное количество. create_items(self.npc, k, number, v) end end end Изменено 20 Августа 2020 пользователем Muzafir для наглядности Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345740
_g.script 3 670 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 7 минут назад, Zander_driver сказал: а что у него в 135 строке Подозреваю, что у него в конфигах что-то не так по итемам на этой локации Здесь могла быть ваша реклама. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345744
Zander_driver 10 358 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Только что, Muzafir сказал: дописал новую группировку. Только что, Muzafir сказал: local spawn_items = item_by_community[self.npc:character_community()] А в настройки дропа эту группировку занес? Или заноси, или перед for добавляй проверку if spawn_items and type(spawn_items) == 'table' then Он же пытается получить настройки дропа для группировки... а потом их перебрать. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345746
Muzafir 19 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Вносил, точно помню. Сейчас перепроверю, может накосячил там где-то На всякий, настройки дропа - это death_items_by_communities.ltx? Проверил, как ты сказал - и название локации и инфопорция точно правильны Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345748
Zander_driver 10 358 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Только что, Zander_driver сказал: if spawn_items and type(spawn_items) == 'table' then Проверку добавь тогда. 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345752
Muzafir 19 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 В death_items_by_communities.ltx косяка нет. Я просто скопировал секцию и переименовал. Добавлю твою проверку. Еще раз спасибо. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345755
Norman Eisenherz 355 Опубликовано 21 Августа 2020 Поделиться Опубликовано 21 Августа 2020 Здрасьте. Проблема при определении ячейки карты для спавна предмета. Читаю текущие координаты и позицию ячейки вот таким скриптом: Spoiler function sms(text) news_manager.send_tip(db.actor, text) end function coords(cell) local act = db.actor local pos = act:position() pos.x = math.modf(pos.x) pos.y = math.modf(pos.y) pos.z = math.modf(pos.z) sms("xyz = " .. pos.x .. ", " .. pos.y .. ", " .. pos.z) if cell then local lvid = act:level_vertex_id() local gvid = act:game_vertex_id() sms("lvid, gvid = " .. lvid .. ", " .. gvid) end end ТЧ, Кордон, крыша вагона над Кузнецовым: lvid = 359827, gvid = 97. Объект с такими параметрами ячейки спавнится в указанном месте. ЧН, Кордон, крыша элеватора: lvid = 310050, gvid = 571. Объект с такими параметрами ячейки обнаруживается на сервере, но остается невидимым. Если задать lvid = 25 и gvid = 472, как в секции [all.spawn] для Кордона, объект отспавнится правильно. Что изменилось в расчете позиций ячеек в ЧН и как получить действующие значения lvid и gvid? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345771
DibokDibokin 1 Опубликовано 21 Августа 2020 Поделиться Опубликовано 21 Августа 2020 (изменено) Здравствуйте. Я опять насчёт меток на ящиках. Способ по визуалу работает, но частично. В Кордоне например, метки не ставятся, в лог пишет "alife():object(id) ! invalid id specified". Но в Баре всё работает, в лог выводится: box object [physic_destroyable_object:1063] detected. visual=dynamics\box\box_metall_01 С способом по логике drop_box получше. Отображаются везде, но есть две мини-проблемы: 1) Если нажать ЛКМ или подвигаться, то метки пропадают. 2) После уничтожения ящика, метка всё еще остается. Исчезают после перезагрузки сейва. Изменено 21 Августа 2020 пользователем DibokDibokin Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345909
Капрал Хикс 567 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 Что-то не едут у меня лыжи... Есть у меня скрипт на проверку статика заклинивания оружия: function jamupdate() local snd = sound_object([[actor\wpn_jammed\stalker_1]]) if get_hud():GetCustomStatic("weapon_jammed_static") and not snd:playing() then snd:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) end end Который должен воспроизводить звук ГГ при заклинивании ствола... Куда его вешать на апдейт, чтобы статик отлавливался, в биндер актора? P.S. функция в _g.script: function on_actor_weapon_jammed() if has_alife_info("esc_trader_newbie") then game.start_tutorial("part_9_weapon") end if not has_alife_info("encyclopedy_tutorial_weapon") then db.actor:give_info_portion("encyclopedy_tutorial_weapon") end end Вообще рабочая в оригинале, там вроде туториал выводиться должен? Пробовал повесить туда функцию проигрывания звука - не работает. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345992
Zander_driver 10 358 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 @Капрал Хикс, а на каком движке эти движенья делаются? Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345993
Капрал Хикс 567 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 @Zander_driver, ТЧ с X-ray extentions portable 232. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345994
Zander_driver 10 358 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 Только что, Капрал Хикс сказал: X-ray extentions На нем, если надобно отловить заклинивание ствола, делается это примерно так: -- вешать на апдейт local act_item = db.actor:active_item() if act_item then local wpn_state = act_item:get_wpn_int(nil, 652) if wpn_state == 7 then -- тут воспроизводить звуки. Состояние 7 - это заклинившее оружие. end end 1 3 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345997
Капрал Хикс 567 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 @Zander_driver, отлично всё работает, благодарствую, сейчас буду модифицировать под звуки в костюме с противогазом. А вот вопрос посложнее - как сию фишку с руганью реализовать для ЧН? OGSM CE 1.8, если что. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1345999
aromatizer 4 597 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 (изменено) 19 минут назад, Капрал Хикс сказал: буду модифицировать под звуки в костюме с противогазом Как сделаешь, выложи пожалуйста: давненько сам подумывал о такой полезной фиче. Кстати, что думаешь на счет озвучки необходимости перезарядки оружия, когда закончились патроны в магазине? Изменено 22 Августа 2020 пользователем aromatizer 1 Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1346001
Lieutenant Novikov 16 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 Здравствуйте. Столкнулся с такой проблемой: в COC (мод на ЗП) решил отредактировать рупоры, чтобы было как в ТЧ (выключались на ночь, а при нападении противника на базу играли сигналы тревоги), и вообщем-то прописал логику и т.д. Но натолкнулся на такую проблему: необходимо в логике прописать info_portion, ну чтобы менялись звуковые дорожки, но для этого его нужно выдать, насколько я понял через функцию. И вот какую функцию необходимо использовать, чтобы при нападении на отряд/базу выдавался info_portion? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1346051
Norman Eisenherz 355 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 Здрасьте. Можно ли прочитать параметры из секции конфига в том порядке, в котором они указаны, или результат перебора for i = 0, ini:line_count(section) -1 всегда выдается в случайном порядке? Задача в том, чтобы вывести полную специализацию механика в заданном порядке (оружие общее, оружие частное, броня): https://drive.google.com/file/d/15OmIOK-H2J2ryp60PAOSUT77FR9fxBmd/view?usp=sharing Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1346263
AndreySol 215 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 @Norman Eisenherz На каком движке работаете? Пример конфига покажите, чтоб понять как там вообще эта специализация прописана. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1346305
Firestarter 3 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 Доброго времени суток. Задался для чистого Сталкера:ЗП сделать так, чтобы у НПС после смерти в инвентаре можно было скоммуниздить броник, и он бы имел прочность, отличную от 100%, ну то есть был бы разброс. Скрытый текст Вначале, в файле character_desc_general.xml я добавил некоторым неписям эти самые броники(как пример): <!-- bandit novice --> <specific_character id="sim_default_bandit_0_default_0" team_default = "1"> <name>GENERATE_NAME_bandit</name> <icon>ui_inGame2_bandit_1</icon> <map_icon x="1" y="0"></map_icon> <bio>Опытный сталкер. Детальная информация отсутствует.</bio> <class>sim_default_bandit_0</class> <community>bandit</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_01\bandit\</snd_config> <rank>20</rank> <reputation>0</reputation> <money min="250" max="1750" infinitive="0"/> <visual>actors\stalker_bandit\stalker_bandit_1</visual> <supplies> [spawn] \n novice_outfit \n wpn_bm16 \n ammo_12x70_buck = 1 \n wpn_pm \n ammo_9x18_fmj = 1 \n #include "gameplay\character_items_nd.xml" #include "gameplay\character_food.xml" #include "gameplay\character_drugs.xml" </supplies> После старта новой игры - сработало - бандиты стали делиться чёткими плащами. Вот что делать с их прочностью? Я хотел сделать как у оружия, для этого полез в death_manager.script: --printf("item name [%s]", item:name()) if isWeapon(item) and not(get_clsid(item)==clsid.wpn_grenade_rgd5_s or get_clsid(item)==clsid.wpn_grenade_f1_s) then set_weapon_drop_condition(item) return end --printf("item name [%s]", item:name()) if isOutfit(item) and not(get_clsid(item)==clsid.wpn_grenade_rgd5_s or get_clsid(item)==clsid.wpn_grenade_f1_s) then set_outfit_drop_condition(item) return end if xr_corpse_detection.lootable_table[section] == true and ammo_sections[section] == nil then return end alife():release(alife():object(item:id()), true) --[[ local item_id = item:id() local item_in_slot = npc:item_in_slot(2) if item_in_slot ~= nil and item_in_slot:id() == item_id then --' Тут надо уменьшить кондишн оружия item:set_condition((math.random(40)+40)/100) return end item_in_slot = npc:item_in_slot(3) if item_in_slot ~= nil and item_in_slot:id() == item_id then --' Тут надо уменьшить кондишн оружия item:set_condition((math.random(40)+40)/100) return end item_in_slot = npc:item_in_slot(7) if item_in_slot ~= nil and item_in_slot:id() == item_id then --' Тут надо уменьшить кондишн оружия item:set_condition((math.random(40)+40)/100) return end -- npc:mark_item_dropped(item) local item_in_slot = npc:item_in_slot(4) if item_in_slot ~= nil and item_in_slot:id() == item_id then return end if not npc:marked_dropped(item) then -- printf("releasing object ["..item:name().."]") alife():release(alife():object(item:id()), true) end ]] end function set_weapon_drop_condition(item) local condition = (math.random(40)+40)/100 --printf("condition [%s]", tostring(condition)) item:set_condition(condition) end function set_outfit_drop_condition(item) local condition = (math.random(40)+40)/100 --printf("condition [%s]", tostring(condition)) item:set_condition(condition) end Часть когда, который я дополнил. По порядку. Вначале я подумал, что хватит добавить для вычисления окончательной (посмертной) прочности брони добавлением её слота (в system.lts броня числится за 7 слотом): item_in_slot = npc:item_in_slot(7) if item_in_slot ~= nil and item_in_slot:id() == item_id then --' Тут надо уменьшить кондишн оружия item:set_condition((math.random(40)+40)/100) return end Ни рыба, ни мясо, ничего не изменилось. После, добавил следующее:function set_outfit_drop_condition(item) local condition = (math.random(40)+40)/100 --printf("condition [%s]", tostring(condition)) item:set_condition(condition) end Аналогично. Далее: --printf("item name [%s]", item:name()) if isOutfit(item) and not(get_clsid(item)==clsid.wpn_grenade_rgd5_s or get_clsid(item)==clsid.wpn_grenade_f1_s) then set_outfit_drop_condition(item) return end Вылет Line 748, движок не понимал, что такое isOutfit. Поисковиком нашёл некий файл _g.script: ------------------------------------------------------------------------------------------- local monster_classes = {} local stalker_classes = {} local weapon_classes = {} local artefact_classes = {}local outfit_classes = {} function IsMonster (object, class_id) local id = class_id or get_clsid(object) return monster_classes[id] == true end function IsStalker (object, class_id) local id = class_id or get_clsid(object) return stalker_classes[id] == true end function isWeapon(object, class_id) local id = class_id or get_clsid(object) return weapon_classes[id] == true end function isArtefact(object, class_id) local id = class_id or get_clsid(object) return artefact_classes[id] == true end function isOutfit(object, class_id) local id = class_id or get_clsid(object) return outfit_classes[id] == true end Добавление данных кусочков убрал вылет. То есть, я видимо, добавил эту функцию. Однако кондишн остался непреклонен. И тут я уже не знаю, что делать дальше, хотя есть чувство (мб ложное) что близок. Не подскажете, как завершить? И вообще, правильно я хоть начал? Поисковиком пользовался, видел, что не я один пытался выдать параметр прочности и её различность (правда, не броне), правда, ничерта толком и не понял. Помогите, пожалуйста. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1346397
Space.Marine 466 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 @Firestarter, а прописать броню в death_items_....ltx не проще ??? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/529/#findComment-1346414
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти