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/
Graff46 622 Опубликовано 10 Января 2019 Поделиться Опубликовано 10 Января 2019 (изменено) 14 минут назад, dsh сказал: У меня переименовывается через прямой доступ к свойствам Редактирование движка? Через X-Ray Extensions не сделать? P. S. Пошёл путём "мамкиного хакера" нашел имя ГГ в сейве, поменял с сохранением длины строки, загрузил - работает. P. S.2 Значит клиентский объект (ГГ) получает имя ГГ (своё) из сейва. Интересно как, "напрямую" или через пакет? У нас в методе биндера ГГ на загрузку передаётся поток чтения (reader) врятли в потоке можно данные изменить, а вот у метода сейва, есть полноценный пакет, в который можно было бы что нибудь перезаписать, но какие смещения? Стандартный для ГГ? А ощущение создается будто бы в метод сейва вообще передается не тот пакет, который мы получим от ГГ методом STATE_Write . Изменено 10 Января 2019 пользователем Graff46 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1226244
dsh 3 824 Опубликовано 10 Января 2019 Поделиться Опубликовано 10 Января 2019 22 minutes ago, Graff46 said: Редактирование движка? Через X-Ray Extensions не сделать? Не знаю. Я экспортировал эти свойства для скриптов. 23 minutes ago, Graff46 said: Интересно как, "напрямую" или через пакет? В смысле как? Просто читает из сейва https://github.com/OGSR/OGSR-Engine/blob/f170c7ba6632c02c8b5d763cd182ba9a106caddb/ogsr_engine/xrGame/InventoryOwner.cpp#L178 load_data (m_game_name, input_packet); 25 minutes ago, Graff46 said: У нас в методе биндера ГГ При чем тут биндер. Под клиентским объектом я подразумевал движковый клиентский класс. 27 minutes ago, Graff46 said: будто бы в метод сейва вообще передается не тот пакет, который мы получим от ГГ методом STATE_Write Именно так. В save() передается клиентская область сохранения, а не серверный нетпакет. Точно так же и в load() передается не нетпакет, а клиентская область сохранения. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1226255
Graff46 622 Опубликовано 10 Января 2019 Поделиться Опубликовано 10 Января 2019 (изменено) 7 минут назад, dsh сказал: В save() передается клиентская область сохранения, А имя ГГ в этой области? В случае если только что загрузились, и в 1 раз подгружаем имя ГГ из сейва Изменено 10 Января 2019 пользователем Graff46 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1226257
dsh 3 824 Опубликовано 10 Января 2019 Поделиться Опубликовано 10 Января 2019 18 minutes ago, Graff46 said: А имя ГГ в этой области? Не уверен, но сильно в этом сомневаюсь. Скорее всего - это отдельная область, которая не имеет ничего общего с той, куда записывает движок. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1226269
Graff46 622 Опубликовано 10 Января 2019 Поделиться Опубликовано 10 Января 2019 @dsh, проверил, нету Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1226286
naxac 2 578 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 @Graff46, плохо проверял наверное) https://github.com/naxac/CP2_AddOn/blob/master/gamedata/scripts/naxac_test.script Две функции в конце файла. Последняя вызывается в конце save биндера актера. Работает) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227274
Капрал Хикс 561 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 Кто-нибудь совмещал мод на умное выпадение частей монстров (отстреливаешь кабану ногу, выпадает копыта вместо 4) с модом "мясник" (отрезание частей монстров только при наличии ножа в инвентаре)? Хотелось бы где рабочий вариант подсмотреть, сам уже пытался смотать всё синей изолентой и писал тут, но увы... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227293
Dennis_Chikin 3 665 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 Возврат взятой запчасти обратно в тушку - не? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227333
Капрал Хикс 561 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 1 час назад, Dennis_Chikin сказал: Возврат взятой запчасти обратно Прости, не понял, о чём ты. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227372
Dennis_Chikin 3 665 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 По коллбеку от использования тушки начинаем проверять взятие запчасти из тушки, и если взялась, когда нет ножа - возвращаем взятое обратно. Собственно, не понимаю, что тут такого сложного "совмещать". Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227421
Капрал Хикс 561 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 Хм, я вот о чём. В ОП-2.1 строка функция спавна конечности монстра по факту юзания его с тушки с ножом local monster_part=ini_reader.iniReader():readString(monster:section(),"Spawn_Inventory_Item_Section","") - учитывает кол-во его запчастей на момент его смерти? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227474
Dennis_Chikin 3 665 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 Данная строка просто читает название запчасти из конфига. Вообще, конечно, изучение кода ОПы - занятие, опасное для психического здоровья. 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227486
Капрал Хикс 561 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 (изменено) Ну, ОП для примера. Отрезание частей монстров ножом есть в ButcherMod_ShoC, но... Скрытый текст -- Срезание трофеев с монстров / Идея: мод "Мясник" (CoP) от Singapur22 function generic_object_binder:use_callback(obj, who) if self.use_flag == nil and self.object:section()~="m_trader" then self.object:set_nonscript_usable(false) self.use_flag = true end if self.object:alive() or self.used then return end local knife = who:item_in_slot(0) if who:id() ~= db.actor:id() or (knife~=nil and who:active_slot() == 0) then self.used = true else if knife then news_manager.send_tip(db.actor,"Чтобы cрезать трофей, нужно достать нож.") end return end self.item = read_if_exist("s",nil,self.object:section(),"Spawn_Inventory_Item_Section",nil) if self.item then self.item_count = read_if_exist("f",nil,self.object:section(),"Spawn_Inventory_Item_Amount",1) else return end for i=1, self.item_count do alife():create(self.item, who:position(), who:level_vertex_id(), who:game_vertex_id(), who:id()) end self.object:set_tip_text("") local h = hit() h.draftsman = self.object h.type = hit.fire_wound h.direction = vector():set(0,1,0) h:bone(read_if_exist("s",nil,self.object:section(),"bone_impuls_abscission","bip01_spine")) h.power = 1 h.impulse = (read_if_exist("f",nil,self.object:section(),"impuls_abscission",150)) self.object:hit(h) local sound_use = sound_object("material\\dead-body\\collide\\hithard0"..tostring(math.random(1, 6)).."hl") sound_use:play_at_pos(self.object, self.object:position(), sound_object.s3d) end Спавнится одна запчасть при юзании тушки монстра, а мне нужно количество запчастей подтягивать из другого скрипта, где оно задаётся в зависимости от стрельбы по конечностям. Вкратце: Скрытый текст function main_check(obj, amount, local_direction, who, bone_index) local sc = obj:section() if tD[sc] then local section = tD[sc] for k,v in pairs (m_Tbl[section].bones) do if bone_index == v then if (m_Tbl[section].data == "boar_leg_count" or m_Tbl[section].data == "snork_leg_count" or m_Tbl[section].data == "burer_handy_count" or m_Tbl[section].data == "zombie_handy_count" or m_Tbl[section].data == "handy_kontroler_count" or m_Tbl[section].data == "himera_kogot_count") and m_Tbl[section].param > 0 then m_Tbl[section].param = m_Tbl[section].param - 1 else m_Tbl[section].param = 0 end break end end end end function spawn_parts(obj) local sc = obj:section() if tD[sc] then local section = tD[sc] if m_Tbl[section].param > 0 then if m_Tbl[section].param > 1 then for i=1, m_Tbl[section].param do amk.spawn_item_in_inv(m_Tbl[section].item,obj) end else amk.spawn_item_in_inv(m_Tbl[section].item,obj) end end m_Tbl[section].param = m_Tbl[section].default_param end end И вот как это сделать правильно, я не знаю. Изменено 13 Января 2019 пользователем Капрал Хикс Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227496
Dennis_Chikin 3 665 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 Spawn_Inventory_Item_Amount",1 Собственно, есть же все необходимое. То есть, надо просто количество брать не из конфига, а из где-то сохраненного при убиении. Хоть бы и в pstor монстра. Либо, как уже предлагал, и, кстати, как в этой свежей опе и сделано - спавн запчастей при смерти монстра, но их возвращение обратно в тушу при взятии без ножа. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227558
Капрал Хикс 561 Опубликовано 13 Января 2019 Поделиться Опубликовано 13 Января 2019 3 часа назад, Dennis_Chikin сказал: То есть, надо просто количество брать не из конфига, а из где-то сохраненного при убиении. Именно про это я и спрашивал - КАК. 3 часа назад, Dennis_Chikin сказал: спавн запчастей при смерти монстра, но их возвращение обратно в тушу при взятии без ножа. Извини, я по-прежнему не догоняю. Я ни в коей мере не прошу сделать за меня готовый скрипт, но - извини, я не понимаю тебя. 3 часа назад, Dennis_Chikin сказал: Хоть бы и в pstor монстра. Не использую, не умею. Ладно, дабы не устраивать чат, посты под снос. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1227613
Капрал Хикс 561 Опубликовано 16 Января 2019 Поделиться Опубликовано 16 Января 2019 HellRatz, дружище. Умное выпадение частей мутантов я под себя уже подогнал, но там нет фишки в виде срезания этих самых частей с помощью ножа, что я поверх умного выпадения и пытаюсь прикрутить. Я ж вроде понятно описал, в чём мне знаний не хватает :). Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1229102
Comador 205 Опубликовано 16 Января 2019 Поделиться Опубликовано 16 Января 2019 @Капрал Хикс, в свое время был аддон для НС от Monnoroch, так вот в этом аддоне было срезание частей монстров ножом. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1229121
Капрал Хикс 561 Опубликовано 16 Января 2019 Поделиться Опубликовано 16 Января 2019 3 часа назад, Comador сказал: аддон для НС от Monnoroch Спасибо. Нашёл, глянул реализацию - насколько я понял, там есть умное выпадение, но фишка в том, что запчасти спавнятся в тушку мутанта в момент его смерти только при наличии в инвентаре ГГ ножа. Обыск же тушки производится обычным способом - это не то, что мне нужно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1229161
naxac 2 578 Опубликовано 17 Января 2019 Поделиться Опубликовано 17 Января 2019 @Капрал Хикс, а что хранится в таблице tD в "умном выпадении запчастей"? По идее, нужно сохранять где-то по id монстра количество оставшихся рогов и копыт (у тебя, я так понял, это m_Tbl[section].param), а потом при "отрезании" тут: if self.item then self.item_count = ... брать значение не из конфига, а по self.object:id() из этого "где-то", вот и всё. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1229183
F.Constantine 0 Опубликовано 17 Января 2019 Поделиться Опубликовано 17 Января 2019 Всем доброго времени суток. Сделал первый в жизни скриптик к "Сталкеру ТЧ" - естественно, получил вылет . Подскажите, что не так сделал, пожалуйста. Скрытый текст Задача была повысить сопротивляемость урону всех НПС из сталкеров-одиночек (ну, просто надоело их трупы находить повсеместно). Сделать через конфиги не смог - разработчики там запутали все в какую-то безумную паутину перекрестных ссылок и #include-сов. Либо вообще не работают изменения, либо работают на всех НПС-людей, всех фракций сразу. Сделал маленькую функцию: function superresistance() if npc:character_community(stalker) then npc.health_hit_part = 0.1 end Параметр health_hit_part взят из конфигов сталкеров, это "процент хита, уходящий на отнимание здоровья". Прописал в файлик test.script В bind_stalker.script вставил ссылочку test.superresistance(), ну вот так: ... -- апдейт схемы детектора self.actor_detector:update() -- сверхсопротивляемость НПС test.superresistance() -- апдейт звуковой схемы актера xr_sound.update_actor() ... Что не так сделал? Заранее - спасибо. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/479/#findComment-1229367
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти