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 Ссылка на комментарий
naxac 2 477 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 способ отследить продажуВ биндере актера каллбэк trade_sell_buy_item (функция on_trade).item: предмет, sell_bye: true - продали, false - купили, money: деньги. 2 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Zander_driver 10 342 Опубликовано 7 Марта 2016 Поделиться Опубликовано 7 Марта 2016 который в поиске гугл по сталкеру и не попадается "bad argument #2 to 'find' (string expected, got table)" А перевести не пробовали? оно хочет строку, а вы ему пихаете таблицу. local ignore = {"wpn_beretta","wpn_colt1911","wpn_desert_eagle","wpn_fort","wpn_hpsa"} local function transfer_object_item(item) local f = true local s = item:section() for k, v in pairs(ignore) do if s == v then f = false break end end if f then db.actor:transfer_item(item, inv_box_1) end end 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 9 Марта 2016 Поделиться Опубликовано 9 Марта 2016 Добрый вечер. Такой вопрос - имеем таблицу с предметами local item_list = { "medkit", "bread", "vodka" } Как рандомно выбрать 3 предмета из этой таблицы, и, допустим, заспавнить их ГГ? Знаю что через math.random работать надо, но как - не знаю. Не соответствует правилам. Ссылка на комментарий
Overfirst 637 Опубликовано 9 Марта 2016 Поделиться Опубликовано 9 Марта 2016 Как рандомно выбрать 3 предмета из этой таблицы, и, допустим, заспавнить их ГГ? local item_list = {"medkit", "bread", "vodka"} function spawn_random_item() local a = item_list[math.random(table.getn(item_list))] alife():create(a, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Painter 3 472 Опубликовано 9 Марта 2016 Поделиться Опубликовано 9 Марта 2016 Дополню: function spawn_random_item() local item_list = {"medkit","bread","vodka"} for i = 1, 3 do local a = item_list[math.random(table.getn(item_list))] alife():create(a, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end 1 1 2 Портфолио Ссылка на комментарий
Kondr48 314 Опубликовано 9 Марта 2016 Поделиться Опубликовано 9 Марта 2016 Как отформатировать строку таким образом, чтобы число с плавающей запятой состояло из 5 чисел: (0.0001, 0.0010 и т.п), но без точки? (Т.е. 00001, 00010 и т.п.)? 1 Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 9 Марта 2016 Поделиться Опубликовано 9 Марта 2016 Сама функция работает, но наемники нейтралами не становяться. Где может быть проблема? P.S Смс-ка выдаеться function rel_hack() relation_registry.change_community_goodwill ("killer", db.actor:id(), (5000)) news_manager.send_tip(db.actor, "relation 0", nil, nil, 20000) end Не соответствует правилам. Ссылка на комментарий
losiara 13 Опубликовано 9 Марта 2016 Поделиться Опубликовано 9 Марта 2016 Добрый вечер! Подскажите где в папке gamedata можно найти сие если можно конечно и какие еще бывают партиклы? [sr_particle] name = anomaly2\teleport_out_00 - вот это??? path = gar_osoznanie_path mode = 2 looped = false Спасибо!!! Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
naxac 2 477 Опубликовано 10 Марта 2016 Поделиться Опубликовано 10 Марта 2016 (изменено) @losiara, particles.xr. Посмотреть какие есть партиклы и как они выглядят можно в СДК. @Kondr48, str:gsub("%.", "") Изменено 10 Марта 2016 пользователем naxac 2 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
naxac 2 477 Опубликовано 10 Марта 2016 Поделиться Опубликовано 10 Марта 2016 весьма странно делать это на гсаб. Да, я не так понял просто, думал, на входе тоже строка "0.0001") Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Kondr48 314 Опубликовано 10 Марта 2016 Поделиться Опубликовано 10 Марта 2016 naxac, так и есть, - на входе 0.0001 на выходе должно быть 00001. Ссылка на комментарий
naxac 2 477 Опубликовано 10 Марта 2016 Поделиться Опубликовано 10 Марта 2016 @Kondr48, тогда используй gsub. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Charsi 440 Опубликовано 10 Марта 2016 Поделиться Опубликовано 10 Марта 2016 (изменено) @Kondr48, так как точка в строке одна, то для gsub можно указать количество замен - str:gsub("%.", "", 1). Изменено 10 Марта 2016 пользователем Charsi 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
losiara 13 Опубликовано 10 Марта 2016 Поделиться Опубликовано 10 Марта 2016 (изменено) Украл из ЗП две функции (xr_effects.scripts) function teleport_npc(actor, npc, p)local patrol_point = p[1]local patrol_point_index = p[2] or 0if patrol_point == nil thenabort("Wrong parameters in 'teleport_npc' function!!!")endlocal position = patrol(patrol_point):point(patrol_point_index)reset_animation(npc)npc:set_npc_position(position)endfunction teleport_npc_by_story_id(actor, npc, p)local story_id = p[1]local patrol_point = p[2]local patrol_point_index = p[3] or 0if story_id == nil or patrol_point == nil thenabort("Wrong parameters in 'teleport_npc_by_story_id' function!!!")endlocal position = patrol(tostring(patrol_point)):point(patrol_point_index)local npc_id = get_story_object_id(story_id)if npc_id == nil thenabort("There is no story object with id [%s]", story_id)endlocal cl_object = level.object_by_id(npc_id)if cl_object thenreset_animation(cl_object)cl_object:set_npc_position(position)elsealife():object(npc_id).position = positionendend Вставил в аналогичный файл ТЧ и пробую через логику на секции on_hit - их применить, но вот ничего не происходит, почему так??? Предполагается что НПС телепортируется на место указанное в путях way..., но он остается на месте. Делал примерно так: [hit] on_info = %=teleport_npc(esc_prov)% ;профильное имя НПС. и по другому: [hit] on_info = %=teleport_npc_by_story_id(5494:stalker_propusk_esc_walk1)% ;sid:название путей в way... Может что то не так вставил в параметры??? Изменено 10 Марта 2016 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
=VENOM= 50 Опубликовано 10 Марта 2016 Поделиться Опубликовано 10 Марта 2016 В DLL-библиотеке оригинальной ТЧ просто-напросто нет функции teleport_npc (и подобных ей), поэтому ничего и не происходит. 1 1 Ссылка на комментарий
FonSwong 33 Опубликовано 11 Марта 2016 Поделиться Опубликовано 11 Марта 2016 Нет ли способа вырисовывать в реальном времени direction? А то жутко неудобно работать с ними, не видя визуально. Ссылка на комментарий
FonSwong 33 Опубликовано 12 Марта 2016 Поделиться Опубликовано 12 Марта 2016 Взял функцию из этого поста Но как можно в 3д вырисовать линию направления?(от одного вектора до другого) Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 12 Марта 2016 Поделиться Опубликовано 12 Марта 2016 Подскажите, с чем может быть связан вылет? [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\se_respawn.script:449: attempt to compare nil with userdata Не соответствует правилам. Ссылка на комментарий
HellRatz 2 896 Опубликовано 12 Марта 2016 Поделиться Опубликовано 12 Марта 2016 (изменено) Приветствую. А есть ли возможность подменить один объект (не живой) на другой, по старым координатам? То есть спавнится 1 предмет, он имеет определенные координаты, затем он тут же удаляется, а на его место (Учитывая не только xyz, но и наклон) спавнится другой. Объясню зачем это нужно. Для объектов на классе SCRPTOBJ не учитывается коллизия, и объект спавнится в прямой плоскости, не учитывая неровности террейна. Хотелось бы сперва спавнить "осязаемый" клон на любом классе, например II_ANTIR, а затем на его место подменивать уже объект с логикой. Хотя может можно как-то намного проще, напрямую с объектом работать, сделать его "осязаемым", реально ли..? А к объекту на том же II_ANTIR я не смог прикрутить логику, объект можно только подобрать, логика не считывается, может его можно принудительно после спавна заставить читать логику? UPD: нашел одно из решений. Спавню предмет на классе II_ANTIR, и в эту же точку спавню невидимый бокс размером чуть больше на классе SCRPTOBJ. Итого и объект ложится учитывая террейн, и сквозь него нельзя пройти, в тоже время можно его использовать. В общем такой вот костыль.. Изменено 12 Марта 2016 пользователем HellRatz GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
losiara 13 Опубликовано 14 Марта 2016 Поделиться Опубликовано 14 Марта 2016 (изменено) Добрый день!!! Полазил по форумам и нарыл несколько вариантов функций удаления объектов из игры, не перевода в оффлайн, а именно удаления по типу: function del_tele_dva()for a=10,65634,1 dolocal obj=alife():object(a)if obj and string.find(obj:name(),"fan_tel") then ---имя секции обьектаalife():release(obj,true)endendendили такая:function remove_freaks()remove_obj("object")end Якобы должны работать из логики объекта, но нет не работают не в какой секции. При активации например через диалог тоже не работает. Почему так может быть??? Код кривой или причина в другом??? На самом деле функций гораздо больше, но они все не рабочие, и вылета нет и действия также нет... Надо было удалить секцию в игре "zone_teleport", созданную через скрипт. Это такой визуальный эффект типа телепорта как воронка. Изменено 14 Марта 2016 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти