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/
Callisto 2 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 Почитала я тему и ужаснулась, какие сложные для меня вещи тут обсуждаются, даже както-то стыдно со своими элементарными вопросами соваться, но все-таки... Возникла небольшая идея, но для ее реализации придется писать скрипт, решила сама попробовать, вдруг получится Так вот, вопрос (думаю не последний): можно ли проверить какие боеприпасы используются в активном слоте на данный момент? (ТЧ) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621342
Artos 99 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) speczadanie Вот если бы ты потрудился бы дать результаты своего 'метода логов', тогда бы может кто и подсказал бы, в чем дальше у тебя проблема ... Пока же можно дать одну рекомендацию: "Искать и разбираться самому в своих кодах или дать коды знакомому скриптеру/кодеру." Судя по первоначальной ошибке 'отсутствия объекта' и твоих выводов о отрицательном результате проверки функции коллбэка на спавн - тебе стОит искать причину исчезновения гейм-объекта только что заспавненного 1-ой функцией предмета (wpn). Т.к. 2-ая функция (коллбэк) срабатывает (судя по упомянутому 'методу логов') - предмет заспавнен в игру и появился в онлайне ... То, что его (предмета) клиентская юзердата исчезает - значит есть некая причина. Ее и предстоит тебе искать, т.к. в оригинальной игре такого нет и исчезать НЕ должен. Совет: Вставить во 2-ю функцию строки вывода в лог о наличии аргумента 'id', о наличии объекта с этим 'id' в игре (серверный объект) и в онлайне (гейм-объект) и о типе аргумента 'obj' на входе в функцию. Тогда может и будет возможность строить погадалки дальше ... Добавлено через 6 мин.: *Shoker* Разочарую, штатных иль иных, отличных от перебора, вариантов получить массив вертексов окружающих некую точку и тем бодее по заданной дистанции - нет (ИМХО. Помнится этим вопросом задавался singapur22 и были некие черновые наработки, но ... Добавлено через 37 мин.: Callisto: ... можно ли проверить какие боеприпасы используются в активном слоте на данный момент? Да, можно, но только не для слотов, а для оружия в нем. Для этого придется использовать методы чтения нет-пакетов. --/------------------------------------------------------------------- --/ Функции работы с патронами --/------------------------------------------------------------------- local iSSVer = script_server_object_version() --/ версия игры (6/7-SHoC, 8-SC, 12-CoP) local oPk = net_packet() --/ 'читалка' нет-пакетов --/ определяем название секции патронов в активном стволе NPC function Get_ActiveAmmoSection(oNPC) --/< (npc or nil) if not oNPC then oNPC = db.actor end local oItem = oNPC and oNPC:active_item() if oItem and isWeapon(oItem) then --/ проверка: оружие ли в руках? local soWeapon = sim:object(oItem:id()) if soWeapon then local iAmmoType = Get_AmmoType(soWeapon) --/< получаем тип патронов в стволе if iAmmoType then return Get_AmmoSection(oItem:section(),iAmmoType) --/> "ammo_section" (or nil) end end end return nil --/> end --/ определяем имя секции патронов по типу (iAmmoType) для секции (sSection) оружия function Get_AmmoSection(sSection, iAmmoType) --/< ammo_type (0|1|2|...) local sAmmoList = system_ini():r_string(sSection, "ammo_class") --/ читаем из конфиг-файла if sAmmoList and sAmmoList ~= "" then local tAmmoList = {} --/ заготовка для списка наименований патронов for sAmmo in sAmmoList:gmatch('%s*([^,]+)%s*') do --/ парсим строку по запятым table.insert(tAmmoList, sAmmo) end return tAmmoList[(iAmmoType or 0) +1] --/> "ammo_section" (or nil) end return nil --/> end --/ определяем текущий тип патронов (ammo_type) в стволе (weapon) function Get_AmmoType(soObj) --/< weapon (server_object) oPk:w_begin(0) cse_alife_item_weapon.STATE_Write(soObj,oPk) if iSSVer >= 8 then --/ for CS/CoP oPk:r_seek(oPk:w_tell()-3) else --/ for SHoC oPk:r_seek(oPk:w_tell()-1) end return oPk:r_u8() --/> "ammo_type" end --/------------------------------------------------------------------- Добавлено через 30 мин.: panzyuza 1. Не стОит без причины задавать адресные вопросы. Не все считают возможным отвечать на вопрос заданный конкретно кому-то ... 2. Спасибки и пр. - по правилам форума следует адресовать в ПМ, избегая засорения топиков неинформативным 'мусором'. 3. Не стОит задавать сразу кучу вопросов, что часто превращает обсуждение в кашу малу ... 4. Следует придерживаться правилам ТЕМАТИЧЕСКИХ разделов/тем, а не устраивать в одном место 'бюро справок'. Я не сторонник давать готовые рецепты и уж тем более не работник бюро справок. Если вижу, что модмейкер работает своей головой и действительно ему нужно помощь - помогаю (если могу). Но если вижу, что модмейкеру самому ЛЕНЬ почитать мануалы, ФАКи, примеры готовых кодов и т.п. - ни малейшего желания облегчить ему его труда и сэкономить время для лени - не испытываю. Т.о. задавая вопрос стОит подумать, а стОит ли его задавать, вместо потратить время на собственные поиск ответов? Ведь в следующий раз можно и не получить ответа даже на сложный вопрос, требующий и посторонней помощи ... Твоя фраза "Возможно ли через скрипт заставить в определенной точке(рестриктор, например) нпс проиграть анимацию напрямую из файла stalker_animation.omf" - для меня непонятна. Что же спавнить и при чем тут точка/рестриктор и анимация - не внял ... По анимации: Тебе следует почитать соответствующий топик, мануалы. То, что ты называешь анимацией, т.е. массив из 'state_mgr_animation_list' - это уже сложные (составные) анимации. То, что имеется в 'stalker_animation.omf' (и иже) - это элементы анимации, т.е. простые анимации. Разница между ними собственно вытекает из названия, составные представляют некий набор из простейших, что и описано в 'state_mgr_animation_list'. Т.е. если тебе требуется не просто чтобы НПС поднял руку, а поприветствоовал тебя, подняв ее, помахав и опустив - используется именно составная. Составные анимации используются схемами (например менеджером состояний) и скриптами. Простые можно конечно же тоже использовать в скриптах и в составе и 'по отдельности'. Для этого есть соответствующие методы, типа: 'add_animation', 'clear_animations' ... Смотри их применение в готовых кодах игры/модов. О методе 'berserk()' посмотри сам в теме "Справочник по функциям и классам". К тому что там - ничего не могу добавить. И не задавай, плз, подобных вопросов. И Справочники есть и в игре/кодах функций ой как не мало и по каждой давать толковалку - требуется штатный сотрудник тех.поддержки ... Да и глупо порой задаваться такими вопросами, т.к. а) немало 'мусора' в кодах игры и б) а для чего тебе самому дана голова и руки(?), как не взять и попробовать/проверить ... И последнее, не задавался вопросами переноса 'системы анипоинтов'. Могу только сказать, если очень хочется и есть навыки - очень многое возможно ... Изменено 27 Августа 2011 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621357
*Shoker* 322 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 Callisto Если что, то вызывать функцию так: local ammo_sec = Get_ActiveAmmoSection() --\\ в скобках может быть любой персонаж, если они пустые, то тогда проверка идёт на игрока Вернёт название секции с патронами. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621375
antreg 179 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 -=Krovosos=-, [smart_terrains] none = true [logic] active = camper@my_npc combat_ignore = combat_ignore on_hit = hit [camper@my_npc] path_walk = my_npc_walk path_look = my_npc_look meet = meet@my_npc danger = danger_condition@my_npc combat_ignore_cond = always [danger_condition@my_npc] ignore_distance = 0 ignore_distance_corpse = 0 [meet@my_npc] use = true use_wpn = false meet_talk_enabled = true [hit] on_info = %=actor_enemy% Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621397
Ulman 5 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 Люди, а какая функция проверяет визуал НПС? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621404
Galil 18 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) Есть кусок кода из amk_anoms.script level_arts={ l01_escape={2,4,{balb_1=24, balb_2=2, balb_3=0, gravi_1=23, gravi_2=5, gravi_3=0, mincer_1=25, mincer_2=0, mincer_3=0, electra_1=9, electra_2=1, electra_3=0, zharka_1=0, zharka_2=0, zharka_3=0, buzz_1=0, buzz_2=0, buzz_3=0, rusty_1=5, rusty_2=0, rusty_3=0, armor_1=1, babka_1=1, pudd_1=1, spirit_1=1, acumm=2}}, l02_garbage={2,4,{balb_1=19, balb_2=5, balb_3=0, gravi_1=25, gravi_2=5, gravi_3=0, mincer_1=20, mincer_2=5, mincer_3=0, electra_1=10, electra_2=0, electra_3=0, zharka_1=0, zharka_2=0, zharka_3=0, buzz_1=0, buzz_2=0, buzz_3=0, rusty_1=5, rusty_2=0, rusty_3=0, armor_1=1, cry_1=1, kol_1=1, pudd_1=1, acumm=2}}, l03_agroprom={3,6,{balb_1=12, balb_2=5, balb_3=0, gravi_1=13, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, electra_1=10, electra_2=5, electra_3=0, zharka_1=10, zharka_2=5, zharka_3=0, buzz_1=10, buzz_2=0, buzz_3=0, rusty_1=5, rusty_2=0, rusty_3=0, armor_1=1, babka_1=1, pudd_1=1, acumm=2}}, l04_darkvalley={6,8,{balb_1=1, balb_2=9, balb_3=0, gravi_1=5, gravi_2=8, gravi_3=0, mincer_1=5, mincer_2=10, mincer_3=0, electra_1=5, electra_2=9, electra_3=0, zharka_1=10, zharka_2=10, zharka_3=0, buzz_1=10, buzz_2=3, buzz_3=0, rusty_1=5, rusty_2=2, voron_1=1, armor_1=1, babka_1=1, dik_1=1, pudd_1=1, spirit_1=1, acumm=2}}, l05_bar={2,4,{balb_1=18, balb_2=7, balb_3=0, gravi_1=18, gravi_2=0, gravi_3=0, mincer_1=20, mincer_2=0, mincer_3=0, electra_1=10, electra_2=0, electra_3=0, zharka_1=0, zharka_2=0, zharka_3=0, buzz_1=5, buzz_2=3, buzz_3=0, rusty_1=5, rusty_2=3, rusty_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=1, dummy_5=1, babka_1=1, dik_1=1, spirit_1=1, acumm=4}}, l06_rostok={2,5,{balb_1=0, balb_2=2, balb_3=2, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=2, mincer_3=2, electra_1=8, electra_2=10, electra_3=0, zharka_1=20, zharka_2=10, zharka_3=5, buzz_1=5, buzz_2=0, buzz_3=0, rusty_1=10, rusty_2=10, rusty_3=5, dummy_1=0, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=0, babka_1=1, cry_1=1, pudd_1=1, spirit_1=1, acumm=2}}, l08_yantar={4,8,{balb_1=1, balb_2=3, balb_3=2, gravi_1=8, gravi_2=5, gravi_3=3, mincer_1=6, mincer_2=5, mincer_3=2, electra_1=8, electra_2=5, electra_3=2, zharka_1=8, zharka_2=5, zharka_3=2, buzz_1=8, buzz_2=5, buzz_3=1, rusty_1=9, rusty_2=3, rusty_3=2, armor_1=1, cry_1=1, dik_1=2, kol_1=1, pudd_1=1, spirit_1=1}}, l07_military={4,7,{balb_1=2, balb_2=4, balb_3=2, gravi_1=3, gravi_2=5, gravi_3=3, mincer_1=6, mincer_2=5, mincer_3=5, electra_1=8, electra_2=5, electra_3=2, zharka_1=6, zharka_2=5, zharka_3=3, buzz_1=8, buzz_2=2, buzz_3=0, rusty_1=8, rusty_2=5, rusty_3=2, dummy_1=0, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, armor_1=1, babka_1=1, cry_1=1, kol_1=1, pudd_1=1, spirit_1=1, acumm=2}}, l10_radar={4,8,{balb_1=3, balb_2=5, balb_3=5, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=6, mincer_2=6, mincer_3=5, electra_1=5, electra_2=4, electra_3=3, zharka_1=5, zharka_2=5, zharka_3=5, buzz_1=5, buzz_2=5, buzz_3=0, rusty_1=7, rusty_2=6, rusty_3=5, armor_1=1, babka_1=1, kol_1=1, pudd_1=1, spirit_1=1}}, l11_pripyat={4,7,{balb_1=3, balb_2=3, balb_3=3, gravi_1=3, gravi_2=3, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=4, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=4, buzz_1=8, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=5, rusty_3=4, dummy_1=1, dummy_2=2, dummy_3=1, dummy_4=1, dummy_5=1, armor_1=2, cry_1=2, kol_1=1, pudd_1=1, acumm=2}}, l12_stancia={2,4,{balb_1=2, balb_2=3, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, armor_1=1, dik_1=1, pudd_1=1, acumm=2}}, puzir={2,4,{balb_1=3, balb_2=3, balb_3=0, gravi_1=5, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, electra_1=12, electra_2=5, electra_3=0, zharka_1=10, zharka_2=5, zharka_3=0, buzz_1=12, buzz_2=8, buzz_3=5, rusty_1=5, rusty_2=2, rusty_3=0, armor_1=1, babka_1=1, cry_1=1, kol_1=1, spirit_1=1}}, aver={4,8,{balb_1=2, balb_2=3, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=1, electra_1=7, electra_2=5, electra_3=2, zharka_1=4, zharka_2=4, zharka_3=1, buzz_1=8, buzz_2=6, buzz_3=4, rusty_1=7, rusty_2=4, rusty_3=4, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, armor_1=1, babka_1=1, cry_1=1, kol_1=1, pudd_1=1, spirit_1=1, acumm=2}}, marsh={8,10,{balb_1=2, balb_2=3, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, armor_1=1, babka_1=1, cry_1=1, kol_1=1, spirit_1=1}}, limansk={2,4,{balb_1=2, balb_2=4, balb_3=5, gravi_1=5, gravi_2=5, gravi_3=5, mincer_1=4, mincer_2=5, mincer_3=5, electra_1=5, electra_2=5, electra_3=5, zharka_1=5, zharka_2=5, zharka_3=5, buzz_1=5, buzz_2=5, buzz_3=0, rusty_1=5, rusty_2=5, rusty_3=5, armor_1=1, cry_1=1, pudd_1=1, spirit_1=2}}, hospital={2,4,{balb_1=3, balb_2=4, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, babka_1=1, dik_1=1, spirit_1=1}}, red_forest={4,8,{balb_1=3, balb_2=9, balb_3=5, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=6, mincer_2=6, mincer_3=5, electra_1=5, electra_2=4, electra_3=3, zharka_1=5, zharka_2=5, zharka_3=5, buzz_1=5, buzz_2=5, voron_1=1, rusty_1=6, rusty_2=6, armor_1=1, babka_1=1, cry_1=1, dik_1=1, kol_1=1, spirit_1=1}}, lost_village={3,6,{balb_1=6, balb_2=7, balb_3=5, gravi_1=7, gravi_2=3, gravi_3=3, mincer_1=8, mincer_2=7, mincer_3=5, electra_1=8, electra_2=7, electra_3=2, zharka_1=5, zharka_2=5, zharka_3=5, buzz_1=5, buzz_2=5, dummy_1=5, cry_1=1, kol_1=1}}, generators={4,8,{balb_1=2, balb_2=4, balb_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=3, electra_1=4, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=4, buzz_1=8, buzz_2=4, buzz_3=3, rusty_2=9, dummy_1=5, dummy_2=5, dummy_3=1, dummy_4=1, dummy_5=1, armor_1=1, babka_1=1, cry_1=1, dik_1=1, kol_1=1, spirit_1=1}}, atp_for_test22={4,8,{balb_1=2, balb_2=4, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=1, electra_1=5, electra_2=5, electra_3=2, zharka_1=6, zharka_2=4, zharka_3=1, buzz_1=8, buzz_2=6, buzz_3=4, rusty_1=7, rusty_2=4,dummy_1=5, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, armor_1=1, babka_1=1, cry_1=1, dik_1=1, pudd_1=1, acumm=3}}, dead_city={3,6,{balb_1=4, balb_2=4, balb_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=3, electra_1=4, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=4, buzz_1=8, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=5, rusty_3=4, dummy_1=1, dummy_2=2, dummy_3=1, dummy_4=1, dummy_5=1, armor_1=1, cry_1=1, kol_1=1, pudd_1=1}}, zaton={6,10,{balb_1=2, balb_2=3, balb_3=3, gravi_1=4, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, armor_1=1, babka_1=2, cry_1=1, kol_1=1, spirit_1=2, acumm=2}}, jupiter={4,8,{balb_1=2, balb_2=3, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, armor_1=1, babka_1=1, cry_1=1, kol_1=1, spirit_1=1}}, pripyat={4,8,{balb_1=2, balb_2=3, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, armor_1=1, babka_1=1, cry_1=1, kol_1=1, spirit_1=1}} } Вопрос - возможно ли через скрипт добавить в таблицу новые значения? Чтобы, например, в pripyat={4,8,{balb_1=2, balb_2=3, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=7, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, armor_1=1, babka_1=1, cry_1=1, kol_1=1, spirit_1=1}} добавить spirit_2=1. Если возможно, то подскажите как. *Shoker* это артефакты, просто они переведены под локальные переменные. Все это относится к спавну артефактов после выброса. Я же хочу добавить новые артефакты, но чтобы они начали спавниться только после определенного события. Или лучше сделать новую дополнительную таблицу со своим скриптом спавна? temakonkin если неошибаюсь, то он просит что-то дописать в acdc.pl. Ифнформация связанная с wpn_ak74_m1 Изменено 27 Августа 2011 пользователем Galil Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621427
*Shoker* 322 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) Ну наверно можно, только сперва надо понять что обзначают в скрипте эти названия - balb\gravi и прочее. А дальше по аналогии. Ulman В ЗП get_visual_name() В ЧН/ТЧ по моему разбирают пакет до части визуала. Тоесть если у тебя есть в моде скрипт для разбора нет-пакетов по типу АМК\Симбиона, то проблем не будет, еже ли хочешь наглядный вариант, то в ОГСМе глянь скрипт который в трупах броню спавнит, там как раз определение визуала через пакет. И да, игра вернёт тебе полный путь до визуала, поэтому надо ещё его обрезать до названия модели. Опять таки это можешь в ОГСМе глянуть, или в Интелектуал Марадёр Мод (IMM) ну и вообще в других модах где есть снятие. Изменено 27 Августа 2011 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621433
temakonkin 0 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) при распаковке all.sapwn возникла проблема... после запуска батника, ACDC начинает ругаться, говорит что- physic_destroyable_object physic_destroyable_object physic_destroyable_object ......................... physic_destroyable_object physic_destroyable_object physic_destroyable_object physic_destroyable_object wpn_ak74_m1 update data left [12] in kat_wpn_ak74_m1 at D:\acdc\acdc.pl line 2319. D:\acdc>pause Для продолжения нажмите любую клавишу . . . Perl у меня имеется.... ACDC скачал с Wiki -это написано в bat, который запускает сам acdc acdc.pl -d all.spawn pause Вопрос: в чём проблема, и как её исправить? и что значит строка update data left [12] in kat_wpn_ak74_m1 at D:\acdc\acdc.pl line 2319. Проблема: Втайнике ничего не спавнится.... Делал по этой статье Вопрос: вчём проблема? Изменено 27 Августа 2011 пользователем temakonkin Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621485
*Shoker* 322 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 Ты распаковывал от ориг. игры или от какого то мода? Версию игры не спутал? У тя АСДС по идее для ЧН должен быть, или ты от мода разбираешь? Ругается на потерю данных. Скорее всего разбираешь all.spawn от мода, и там у него свои предметы. Нужно найти ACDC под этот мод. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621524
Ulman 5 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 *Shoker*, спасибо, вроде нашел. Вот у меня имеется во такой кусок скрипта: if string.find(vis,"stalker_bandit_") then return section end if string.find(vis,"stalker_bandit_veteran") then return section end if string.find(vis,"stalker_bandit_master") then return section end if string.find(vis,"stalker_bandit_borov") then return section end if string.find(vis,"stalker_bandit_exoskeleton") then return section end Можно ли его заменить на вот такой: local stalker_gopnik = {"stalker_bandit_", "stalker_bandit_veteran", "stalker_bandit_master", "stalker_bandit_exoskeleton"} if string.find(vis,"stalker_gopnik") then return section end И если да, то я понял возвращаться будет "section", даже если хоть одна из переменных, из stalker_gopnik подходит? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621591
_Призрак_ 11 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 Можно, но код у тебя не правильный Нужно так: local stalker_gopnik = {"stalker_bandit_", "stalker_bandit_veteran", "stalker_bandit_master", "stalker_bandit_exoskeleton"} for i=1,#stalker_gopnik do if string.find(vis,stalker_gopnik) then return section end end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621597
s.t.e.p.l.e.r 0 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) Всем привет ! Возникла такая проблема при попытке прописывания НПС в Алл спавне (cop) не происходит упаковка ал спавна - то есть понятно что у меня ошибка , помогите понять что не так пробовал уже разные варианты - результат тот же ,это для ЗП , локации присоеденены там всё в порядке [escape_39 ] ; cse_abstract properties section_name = stalker name = sidor position = -139.440231,-29.689821,-353.661438 direction = -0.012388,0.000000,0.999923 ; cse_alife_trader_abstract properties money = 5000 character_profile = sidor ; cse_alife_object properties game_vertex_id = 1501 distance = 0 level_vertex_id = 114867 object_flags = 0xffffffff custom_data = <<END [logic] cfg = scripts\escape\sidor.ltx END ; cse_visual properties visual_name = actors\trader ; cse_alife_creature_abstract properties g_team = 8 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -139.440231,-29.689821,-353.661438 upd:o_model = 0 upd:o_torso = 0,0,0 upd:g_team = 8 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_monster_abstract properties base_in_restrictors = yan_bunker_door_zomby_restrictor upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 2,2,1,1,2 predicate4 = 1,0,0,1 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties Изменено 27 Августа 2011 пользователем s.t.e.p.l.e.r Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621623
Artos 99 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 Ulman, _Призрак_ Все же стОит читать и понимать написанные скрипты, а не заученно применять шаблоны ... Строка: if string.find(vis,"stalker_bandit_") делает все последующие ваши (не)правильные проверки бестолковым баластом, т.к. если уж эта проверка НЕ сработает - то уж последующие и подавно. А если сработает - последующие просто игнорируются. Именно подобные бездумные коды, которые явно не выдают ошибок, и приводят (при их накоплении в кодах игры) зачастую к лагам и проблемам с переполнениями стеков. Добавлено через 9 мин.: Galil "через скрипт добавить в таблицу новые значения?" - можно, если таблица в области видимости скрипта, т.е. если коды скрипта могут с нужной таблицей работать (таблица глобальна или в этом же скрипт файле ...). Однако(!), дать конкретный ответ 'как и что нужно' для добавления может только тот, кто знает о какой конкретно версии мода ты ведешь речь. Исходно (AMK-мод v1.3(4)x) скрипт 'amk_anoms.script' не имеет ничего общего с приведенной тобою фрагментом, а точнее - это уже результат изменения в некоем моде ... Ну а результат 'добавления' в таблицу - напрямую зависит от кодов, которые эту таблицу далее используют. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621624
Ulman 5 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) Artos, то есть лучше так оставить? if string.find(vis,"stalker_bandit_") then return section end if string.find(vis,"stalker_bandit_veteran") then return section end if string.find(vis,"stalker_bandit_master") then return section end if string.find(vis,"stalker_bandit_borov") then return section end if string.find(vis,"stalker_bandit_exoskeleton") then return section end И почему способ Призрака неправильный? Я вот в одном уроке видел такой способ: --Проверка на взятие нескольких разных предметов и выдача инфопоршня: local t_wpn = {"ПРЕДМЕТ1", "ПРЕДМЕТ1", "ПРЕДМЕТ1"} function search_ALL_weapons_complete() local gg = db.actor if gg then for i=1,#t_wpn do if not gg:object(t_wpn[i]) then return false end end gg:give_info_portion("ПОРШЕНЬ") return true end return false end Изменено 27 Августа 2011 пользователем Ulman Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621627
strelok200 0 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 Как сделать, чтобы функция срабатывала только один раз? Куда её надо вставить в бинд сталкер? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621636
Desertir 202 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 strelok200, смотря что ты хочешь сделать. Один из вариантов (возможно не самый удачный) - проверять на не наличие инфопоршня, после выполнения скрипта выдать этот поршень. После этого условие не выполниться и скрипт не пойдет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621646
Artos 99 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 Ulman Мой комментарий, втод как, был обращен И тебе. Перепрочти его пару раз! Я не сказал 'не правильно', а употребил термин 'бессмысленный баласт'. Твой вариант _Призрак_ назвал неправильным, и он в этом прав. Но дав свой вариант, не имеющий ошибки - он все равно наступил на те же грабли (тобоою установленные). Бессмысленно прокручивать таблицу, если первый же ее индекс либо верен, либо нет. Приведенный тобою пример кода из уроока - имеет с твоим только то, что в нем тоже применяются операторы циклов ... Могу только повторить уже сказанную фразу (видно ее не прочел и/или не понял): "Все же стОит читать и понимать написанные скрипты, а не заученно применять шаблоны ..." Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621650
*Shoker* 322 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) Ulman Я не Артос, но отвечу. Так лучше не оставлять тоже. Ты распиши что ты хочешь получить, и тебе подскажут более грамотный способ как это реализовать. Насчёт: if string.find(vis,"stalker_bandit_") then return section end if string.find(vis,"stalker_bandit_veteran") then return section end ... Ты наверно не до конца понял смысл функции string.finde Она принимает строку, и проверяет есть ли в этой строке КУСОК указанного текста. Тоесть если ты передал строку "stalker_bandit_na_svalke" то уже тут: if string.find(vis,"stalker_bandit_") then return section end Функция вернёт переменную section (сработает условие) , т.к в тексте stalker_bandit_na_svalke есть искомая фраза. Еже ли такая проверка не сработает, то и остальные не сработают тем более, поскольку в них тоже есть элемент stalker_bandit_, который скрипт УЖЕ не нашёл в строке. Тоесть если по простому. Если ты ищешь в тексте слово "Бандит" и не находишь, то и фразу "Бандит в плаще" ты в том файле тоже не найдёшь. Изменено 27 Августа 2011 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621651
Artos 99 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) strelok200 1. Класс: 'бинд сталкер' - это далеко не один метод/функция. Ответ на твой вопрос зависит от того, что же ты туда захотел добавить и в какое место (в какое событие). 2. "срабатывала только один раз?" - имеет как минимум две трактовки: 'один раз за всю игру' и 'один раз в выбранном методе' биндера (оидн раз после каждого запуска игры). Добавлено через 2 мин.: *Shoker*, мой ник Artos, и прошу его не употреблять иначе (без вестких на то причин)! Изменено 27 Августа 2011 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621652
Ulman 5 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) *Shoker*, на счёт stalker_bandit_ то я ошибся, там должно быть название модели экзоскелета, хоть это теперь и не важно. А вообще мне надо, что бы была проверка на визуалы НПС, и если хоть один из визуалов одет на НПС то возвращался true. И вот я думал, что по примеру как в OGSE можно сделать, там вот так это всё выглядит, вот кусок: function vis_to_armor(npc) local section if npc then local obj = alife():object(npc:id()) if not obj then return "novice_outfit" end local stalk = xrs_utils.read_stalker_params(obj) local vis = tostring(stalk.visual) if vis then if npc:character_community()=="bandit" then -- bandits if string.find(vis,"stalker_bandit_") then section = "bandit_outfit" end if string.find(vis,"stalker_bandit_veteran") then section = "bandit_veteran_outfit" end if string.find(vis,"stalker_bandit_master") then section = "bandit_master_outfit" end if string.find(vis,"stalker_bandit_borov") then section = "bandit_master_outfit" end if string.find(vis,"stalker_bandit_exoskeleton") then section = "exo_bandit_outfit" end ... Изменено 27 Августа 2011 пользователем Ulman Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/125/#findComment-621653
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти