
Garry_Galler
Опытные-
Число публикаций
272 -
Регистрация
-
Последнее посещение
-
AMKoin
10 [Подарить AMKoin]
Весь контент пользователя Garry_Galler
-
MaZaHaKQ я тоже делал типо такого Сброс рюкзака? А выкладывал? Rhadamanthus Пожалуйста :-) Делал для себя, но решил выложить - может сгодится кому. *********************************************************************
-
Выбрасываемый рюкзак Описание мода:RealBags (Реальные рюкзаки) Рюкзак вместе со всем хламом содержимым можно скинуть парой движений мышки. Сброс сделан не на основе "горячих" клавиш, а постоянной кнопкой в инвентаре.(пока так) Игрок получает возможность сбросить рюкзак со всем содержимым на землю в экстремальной ситуации. Но для этого необходимо наличие в слоте инвентаря активного рюкзака. Описание нового варианта разработки "Выбрасываемый рюкзак". RealBags (Реальные рюкзаки) v.1.0 Список изменений/нововведений: 1) Три рюкзака разных объемов, которые можно менять: tactical_bag - тактический ранец(30 л) combat_bag - боевой\рейдовый рюкзак(60 л) combat_section_bag - боевой секционный рюкзак(120 л) 2) Три новых слота. Один - для активации рюкзака. В ножевой слот и слот детекторов можно прописать любые свои предметы. 3) Кнопка быстрого сброса. 4) Билдовский инвентарь. Ячеек на поясе - 18. 5) Патроны вешаются на пояс.
-
Valerich Я не знаю как ты там спавнишь свои тайники - но я бы так сделал: Создаем такую вот табличку с данными: local tTreasure={ -- //в качестве ключа пишем имя тайников по секции - число тайников неограничено treasure_1 ={1,2,3,4,5}, -- //вместо пяти данных цифр в каждой субтаблице пишем последовательно координаты по x,y,z и два вертекса treasure_2 ={1,2,3,4,5}, treasure_3 ={1,2,3,4,5}, treasure_4 ={1,2,3,4,5}, } --// вызов данной функции ставим на каллбек on_take - то есть в тело метода function actor_binder:on_item_take (obj) в bind_stalker.script --// вызов должен быть в таком виде имя_файла.TreasureSpawn(obj) function TreasureSpawn(obj) --// получаем взятый объект по секции local section = obj:section() --// если наш объект и не был включен одноименный инфопоршень, то спавним тайник используя данные из таблицы if section and string.find(section, "zapisk_") and not has_alife_info(section) then local key = "treasure_"..string.sub(section, -1)+1 --// добавим +1 чтобы спавнился тайник номером на 1 больше alife():create(tTreasure[key], tTreasure[key][1], tTreasure[key][2], tTreasure[key][3], tTreasure[key][4], tTreasure[key][5]) --// включаем поршень чтобы тайник не спавнился повторно db.actor:give_info_portion(section) end end --// инфопоршни для каждого тайника должны быть одноименными с именами записок- так проще будет ими оперировать
-
serega-gamer Скачай DreamMod ver.0.2b или abc_sleep_mod(что почти одно и то же) -а уж настраивать под себя сам будешь. hakim, Элементарно - создашь конфиг как обычному предмету в файле items и указываешь в качестве визуала любой объект мебели из папки meshes - там есть и столы, и стулья, и полки и т.д. Сам предмет спавнишь обычной функцией create().
-
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
ФеНиКс Вписать итем в секцию [keep_items] - где - найдешь сам. -
djslavikoz Не думаю что в xr_effects.script надо что то дописывать. Этот файл в твоем случае вообще не причем(если ты его не трогал или не пытался вызывать из логики функцию, которой в нем нет - но тогда и лог был бы другой). Лог с указанием на _g.script:20 как правило говорит о том, что в твоих скриптах есть либо синтаксическая ошибка(где именно - тебе лучше знать, а в лог в данном случае это не передается), либо вызвана дефолтная функция abort для креша игры(вследствие серьезной ошибки в скриптах - об этом может быть как раз и говорит строчка ERROR:object), либо в функцию printf передается (из оригинальных скриптов) некорректный аргумент или некорректное число аргументов (так вот недальновидно разрабы написали эту функцию.) Пользуйся луа чекером для проверки скриптов на синтаксис. И хотя он не гарантирует нахождение всех ошибок - но мелкие банальные опечатки, которые нарушают правила lua, находит весьма неплохо. Разумеется ошибки связанные с неправильным использованием функций и методов игры он отследить не может - от таких ошибок спасет только грамотность и хорошее знание скриптов. ЗЫ:И прочитай мой пост на прошлых страницах: можешь заменить дефолтную функцию printf из файла _g.script на ту, что в моем посте. От твоих ошибок она не спасет. Но от ошибочных вызовов оригинала лечит. ЗЫЫ: Советую пользоваться дебаговым функционалом из модов - тестовый вывод в лог(и консоль) результатов работы своего скрипта еще никому не мешал.
-
Хантер, А ты в консоль заглядывал? Или в сам лог? Загляни ради интереса - что именно там пишется из тех строк, что есть в новой printf. Вылета нет потому, что в данном варианте printf стоит ловушка на nil, но сама ошибка может идти как с оригинала, так и из мода либо твоя. И тебе было бы желательно разобраться в этом - чтобы не поиметь ошибок в будущем. --------------------------------------------------------------------------- Насчет второго лога - e_parent && e_entity - похоже на баг оригинала. Но более конкретно не скажу.
-
Хантер, Если у тебя 20 строчка именно вот это log(string.format(fmt,...)) , то попробуй заменить функцию printf на ее аналог из Зенобиан мода: function printf(fmt,...) local arg = {...} if arg == nil then get_console():execute("Error_printf:_Arg_=_nil_value") else for a=1, table.getn(arg), 1 do if arg[a] == nil then get_console():execute(string.format("Error_printf:_Arg_#%d_=_nil_value",a)) end end end end Возможно ошибка исчезнет. Из-за дефолтной printf бывают ошибки по той причине, что метод string.format() не понимает nil, и когда в printf передается аргумент со значением nil или вообще ничего - то и получаем string expected, got no value. Хотя причина вылета может быть и не здесь зарыта :-)
-
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Gonarh, Если сделать свой скриптовый рестриктор - на основе математических методов проверки попадания точки в полигон (я такие делал для сталкера - в том числе и с использованием метода трассировки лучей), то поставив проверку попадания данного объекта (нужна будет айдишка болта для получения его позиции) в границы этого полигона на апдейт - получаем то что хотим. ------------------------------------------------------------------------------------ Вот примерный код функции проверки попадания точки в пятиугольный полигон (у меня код был с выводом данных на худ) - в качестве объекта проверки я использовал ГГ: минус в том, что данный полигон двумерный - код для трехмерного полигона будет сложнее. Я его так и не сделал. Знаний по векторной алгебре маловато. local xp ={-236.02,-241.46,-249.19,-249.29,-242.755} -- Массив x-координат полигона local zp = {-172.39,-174.65,-172.84,-166.224,-167.63} -- Массив z-координат полигона function GetPointInPoligonNew(xp,zp,point) local c = 0 local j = #xp for i = 1, #xp do if ((((zp[i]<=point.z) and (point.z<zp[j])) or ((zp[j]<=point.z) and (point.z<zp[i]))) and (point.x > (xp[j] - xp[i]) * (point.z - zp[i]) / (zp[j] - zp[i]) + xp[i])) then c = 1- c end j = i end return c end function Update() local point = db.actor:position() local n = this.GetPointInPoligonNew(point) return n == 1 end Функция вернет true когда объект - в данном случае ГГ - окажется в указанном полигоне. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
malandrinus Окей, насчет инициализации и хранения диалогов понял. (примерно так и думал, что есть какой то движковый storage\ массив для них). Кстати вот и ответ на мой вопрос про айди диалогов - я имел ввиду, когда мы его получаем как входящий аргумент например из прекондишена или экшена - то какая польза от этого параметра? видимо никакой, но . То бишь назначение айди диалогов - для внутреннего использования функциями игры. Для модмейкера получается ничего не дает. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Министр А вот это ты зря. Ты не представляешь сколько раз такие вот "ненужные" на первый взгляд проверки спасали меня от вылета на рабочий стол. Работая со скриптами оригинала(да и со своими точно так же) никогда нельзя быть на 100% уверенным, что в функцию будет передан корректный аргумент. И камрад Камикадзе это очень хорошо расписал в своей статье. Так что новичкам(опытные сами сделают) следует советовать ставить такие вот "лишние" проверки наоборот как можно чаще (вреда от них никакого, а польза - как говорится время покажет), но не забывать добавлять к проверке дополнительное действие, на случай если аргумент nil. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
malandrinus, Нда, вот я и нарвался на непредсказуемые ошибки. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
malandrinus Вот как раз потому, что только в первой части - я и не обратил внимания - поскольку был сосредоточен именно на скриптовых методах. Если продублировать и там - тогда думаю многим будет яснее. Ну как это не дают преимуществ - еще как дают. Я их применил для динамического создания диалога (у одного NPC ) о продаже кодов к закодированным схронам. Фразы во первых формируются в цикле - что в xml сделать нельзя - то есть их число заранее неизвестно и определяется длиной таблички, которая хранит коды. В момент инициализации диалога специальная функция у меня формирует временную(существующую только до закрытия диалога) табличку со всеми нужными(и свежими данными), а далее в каждую новую фразу подставляются табличные данные. И хотя сами фразы однотипные по структуре - наполнение у всех разное. Что опять же нельзя сделать из xml, где наполнение предустановлено заранее. Ну и на каждую фразу ГГ стоит скриптовый экшен, который выполняет нужное действие ориентируясь на номер фразы. Также использованы скриптовые прекондишены. Диалог динамически меняет - не знаю как правильно сказать - граф не граф - в общем свой состав - каждая активированная фраза о покупке тут же исчезает из диалога(так как больше не нужна), при новой инициации диалога он строится уже в новом составе(с новым числом фраз) и с обновленными данными. В случае, если данных нет - кончились - выводится фраза NPC типа "на сегодня предложений больше нет". Диалог у меня конечно маленький (и развилок всего пара штук)- но работает как надо. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
malandrinus, Занялся недавно скриптовыми диалогами - на практике. В общем думаю стоит добавить в твои посты про них следующий момент: При использовании метода AddAction(string) функция, которая вызывается им, принимает вот такой набор аргументов: func(oSpeaker1, oSpeaker2, sDlgId, idPhrase) первые два аргумента думаю всем понятны - юзердата собеседников, sDlgId - строковое имя диалога, и самый важный для меня аргумент - idPhrase - айди фразы (строковое или числовое - в 1.0004 используются числовые идентификаторы). Не зная всего этого - потратил лишнее время на изобретение системы отслеживания активированных фраз в диалоге - но все оказалось гораздо проще. Функция, которая вызывается методом AddPrecondition(string) принимает немного другой набор аргументов: precondition(oSpeaker1, oSpeaker2, sDlgId, idParent, idPhrase) как видно тут добавился еще один - idParent, который возвращает айди родительской фразы, то есть фразы идущей перед той, в которой данный прекондишен находится. При динамическом формировании фраз (например как у меня через цикл) - когда число фраз заранее неизвестно - значение аргумента idPhrase просто незаменимо. Без этого я например просто не смог бы передать нужные данные для каждой конкретной фразы. Ну правда я немного схитрил и использовал give_talk_message для некоторых ответных фраз NPC - просто с иконкой фразы красивше смотрелись (и иконка в тему). Вот. Пока все, что выяснил интересного. Работает мой диалог отлично - так что тебе большое спасибо за раскрытие темы. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
lekzd, Ну насчет внешней проги все понятно - только это уже для меня лишняя трата времени. Раз скриптово никак - то и смысла нет эту тему реализовывать. ЗЫ: А GetAsyncKeyState() это ведь WinAPI, а не С или Делфи. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
RvP Про get_console():get_string(string) я знаю - но это не то - уже пробовал. Она всего лишь возвращает строковой эквивалент аргумента существующей команды. Скажем get_console():get_string("renderer") возвращает строку - "Статическое освещение" - если включена статика или "Полное динамическое освещение" - если динамика. А нужен метод считывания из консоли строки. Вводим допустим в консоль строку spawn - а скрипт(ну или внешняя прога - что конечно уже не гуд) ее оттуда сразу же считывает и передает куда надо. А далее - дело техники. --------------------------------------- get_console():execute_script(string) - похоже аналог команды cfg_load - загружает ltx - правда у меня файл из папки creatures не загрузил. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Кто знает как сделать захват консоли сталкера? Чтобы считывать введенные в консоль команды(свои разумеется). (execute_script(string) интересно для чего? вызвать скрипт? а смысл если можно и так его активировать...непонятный метод) В общем в числе методов экспортированных в скрипты - в том же классе CConsole - я ничего похожего не обнаружил. Однако слышал, что это уже кое кто реализовал - правда как не знаю. Остается вариант с внешней программкой - но опять же не представляю как это можно сделать (хотя и знаю C# и методы работы с консолью библиотек .Net) - возможно через WinAPI или все гораздо проще? -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Куфзук Скрипт рабочий (вставил себе полностью и активировал) - если не считать пары ошибок в названиях артефактов - af_cristall_flower (буквы l не хватало) и af_rusty_sea_urchin - этот арт вообще убери - у него по всей видимости ошибочное название самой секции допущенное самими разрабами. Но твой вылет не из-за этих ошибок - они бы последовали позже и имели бы другой лог. Ищи причину не в самом скрипте, а в том что ему сопутствует. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Real Wolf Встречный вопрос - а таблицу сохранял? В методах save\load биндера эктора или в любом другом биндере. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
SkyLoader Да не работает она стопроцентно. И не нужно никакой таблицы - аргумент true передай и узнаешь. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Распишу немного то, что по работе с физикой объектов освоил: Для начала требуется получить управление над физической оболочкой объекта для чего существует уже описанный в справочнике метод get_physics_shell(). Применяем метод к клиентской юзердате объекта. Далее можно обратиться к методам нижеследующих классов для нужных нам действий. Методы класса physics_element следует применять к предварительно полученному объекту элемента физической оболочки предмета. Пример фиксации объекта - хоть в воздухе, хоть на земле. Фиксация сохраняется и после сейв\лоада. Но у мелких объектов фиксация после сейва\лоада слабая - и может легко разрушаться от приложения к нему силы. До перезагрузки - фиксируется намертво. Кстати насчет метода script_server_object_version() вот для чего он используется: local ss_ver = script_server_object_version() local IS_SOC = (ss_ver <= 7) -- although anything earlier then 1.0004 won't work local IS_CS = (ss_ver > 7 and ss_ver < 12) -- although anything earlier then 1.5.0.4 won't work local IS_COP = (ss_ver >= 12) --(ss_ver == 12) комментарии думаю излишни. Kirag Спасибо. Я так и думал что как то не так их применял. Теперь более менее понятно. Но вот только что они дают интересного(линеарное и угловое ускорение?). И как работать с полученными значениями? -
Byurrer Аргумент who (в данном контексте) всегда равен юзердате ГГ, иначе и быть не может - каллбек ведь на него установлен. А вот это не проверка db.actor:set_callback(callback.use_object, this.OnUseActorObject) а установка каллбека. PS: там у меня в примере названия функций на юзанье отличаются(исправил) - надеюсь понял, что это просто по недосмотру и должны быть одинаковые. (а у меня просто перевызов идет -первая вызывает вторую, поэтому так).
-
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
qwqwqw, gruber Вообще то разрабы все уже сделали для этого случая. Нужно просто вызвать функцию xr_effects.actor_enemy из диалога. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
shooting unicorn Так трудно догадаться? Сид заменить на сид нужного персонажа. ЗЫ:Плохой метод. Бессмертие фиктивное - убить все равно можно, путь и не сразу. Правильное бессмертие делается в конфигах - возьми любой глобальной мод и посмотри как это сделано для квестовых персов. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Unnamed Black Wolf Что значит нормально работали? То что методы пространства имен coroutine в сталкере работают - это одно. Другое - что они не дают того эффекта, который мы имеем используя в С++\C# и т.д. создание реальной многопоточности или асинхронные методы. Собственно пост malandrinus'a только подтвердил инфу которую я нарыл по потокам в lua - то что они никакие не потоки, а лишь ветки исполнения, причем синхронные. Да и требовать от lua наличия таких возможностей видимо нерезонно - все таки вспомогательный язык.
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды