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/
speczadanie 0 Опубликовано 13 Апреля 2011 Поделиться Опубликовано 13 Апреля 2011 Помогите написать скрипт: - если любой NPC (если можно, ещё добавить условие чтобы он был врагом) от игрока не дальше, чем в 50 метрах, то добавим ему отметку на радар (текстурой "XXX"), если расстояние будет больше 50, отметку удаляем. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-584838
Zander_driver 10 348 Опубликовано 13 Апреля 2011 Поделиться Опубликовано 13 Апреля 2011 Zander_driver, ну фантом ли объект определяется гораздо проще: local obj_clsid == self.object:clsid() if obj_clsid == clsid.psy_dog_phantom_s then Являются ли окружающие неписи собаками также очень просто проверяются по clsid. А как этим же методом обнаружить аномалии? Когда я обнаруживаю аномалии своим методом через секцию, то обнаруживаются только те что меняются после каждого выброса. А те что статичны и от выброса не перемещаются - они не обнаруживаются. Суть вопроса заключается в том - что писать после "clsid." чтобы найти аномалию. Еще было бы неплохо таким же методом обнаруживать костры... и вообще узнать побольше об этом методе, что как обнаруживать. Я почему то не могу найти такой информации. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-584910
Disord 1 Опубликовано 14 Апреля 2011 Поделиться Опубликовано 14 Апреля 2011 midichs, поменяй в конце секции с переходом местами слова, начинающиеся с dest_. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-584924
speczadanie 0 Опубликовано 14 Апреля 2011 Поделиться Опубликовано 14 Апреля 2011 Как сделать, чтобы красные метки врагов можно было отключать\включать инфопоршнями? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-584925
KD87 720 Опубликовано 14 Апреля 2011 Поделиться Опубликовано 14 Апреля 2011 (изменено) Zander_driver, C++ class clsid { const actor = 90; const art_bast_artefact = 0; const art_black_drops = 1; const art_cta = 3; const art_dummy = 4; const art_electric_ball = 5; const art_faded_ball = 6; const art_galantine = 7; const art_gravi = 8; const art_gravi_black = 2; const art_mercury_ball = 9; const art_needles = 10; const art_rusty_hair = 11; const art_thorn = 12; const art_zuda = 13; const artefact = 41; const artefact_s = 102; const bloodsucker = 14; const bloodsucker_s = 108; const boar = 15; const boar_s = 109; const burer = 16; const burer_s = 110; const car = 52; const cat = 17; const cat_s = 111; const chimera = 29; const chimera_s = 112; const controller = 18; const controller_s = 113; const crow = 19; const destrphys_s = 93; const device_detector_advanced = 53; const device_detector_elite = 54; const device_detector_scientific = 57; const device_detector_simple = 58; const device_flare = 55; const device_pda = 56; const device_torch = 59; const device_torch_s = 146; const dog_black = 20; const dog_red = 23; const dog_s = 116; const equ_exo = 60; const equ_military = 61; const equ_scientific = 62; const equ_stalker = 63; const equ_stalker_s = 65; const flesh = 24; const flesh_group = 25; const flesh_s = 117; const fracture = 26; const fracture_s = 119; const game = 70; const game_cl_artefact_hunt = 45; const game_cl_capture_the_artefact = 46; const game_cl_deathmatch = 47; const game_cl_single = 48; const game_cl_team_deathmatch = 49; const game_sv_artefact_hunt = 129; const game_sv_capture_the_artefact = 130; const game_sv_deathmatch = 131; const game_sv_single = 132; const game_sv_team_deathmatch = 133; const game_ui_artefact_hunt = 147; const game_ui_capture_the_artefact = 148; const game_ui_deathmatch = 149; const game_ui_single = 150; const game_ui_team_deathmatch = 151; const gigant_s = 118; const graph_point = 28; const hanging_lamp = 94; const helicopter = 50; const helmet = 64; const hlamp_s = 125; const hud_manager = 74; const inventory_box = 95; const inventory_box_s = 140; const level = 69; const level_changer = 84; const level_changer_s = 85; const main_menu = 86; const mp_players_bag = 87; const nogravity_zone = 211; const obj_antirad = 75; const obj_antirad_s = 135; const obj_attachable = 76; const obj_bandage = 77; const obj_bandage_s = 136; const obj_bolt = 78; const obj_bottle = 79; const obj_bottle_s = 137; const obj_breakable = 91; const obj_climable = 92; const obj_document = 80; const obj_explosive = 81; const obj_explosive_s = 138; const obj_food = 82; const obj_food_s = 139; const obj_medkit = 83; const obj_medkit_s = 142; const obj_pda_s = 144; const obj_phskeleton = 100; const obj_phys_destroyable = 99; const obj_physic = 96; const online_offline_group = 88; const online_offline_group_s = 89; const phantom = 30; const poltergeist = 31; const poltergeist_s = 120; const projector = 98; const pseudo_gigant = 27; const pseudodog_s = 121; const psy_dog = 22; const psy_dog_phantom = 21; const psy_dog_phantom_s = 114; const psy_dog_s = 115; const rat = 32; const script_actor = 134; const script_heli = 51; const script_object = 103; const script_phys = 97; const script_restr = 127; const script_stalker = 35; const script_zone = 101; const smart_cover = 104; const smart_terrain = 105; const smart_zone = 106; const smartcover_s = 107; const snork = 33; const snork_s = 122; const space_restrictor = 126; const spectator = 128; const stalker = 34; const team_base_zone = 214; const torrid_zone = 215; const trader = 36; const tushkano = 37; const tushkano_s = 123; const wpn_ak74 = 173; const wpn_ak74_s = 152; const wpn_ammo = 39; const wpn_ammo_m209 = 42; const wpn_ammo_m209_s = 141; const wpn_ammo_og7b = 43; const wpn_ammo_og7b_s = 143; const wpn_ammo_s = 40; const wpn_ammo_vog25 = 44; const wpn_ammo_vog25_s = 145; const wpn_auto_shotgun_s = 153; const wpn_binocular = 174; const wpn_binocular_s = 154; const wpn_bm16 = 175; const wpn_bm16_s = 155; const wpn_fn2000 = 176; const wpn_fort = 177; const wpn_grenade_f1 = 66; const wpn_grenade_f1_s = 67; const wpn_grenade_fake = 68; const wpn_grenade_launcher = 178; const wpn_grenade_launcher_s = 156; const wpn_grenade_rgd5 = 71; const wpn_grenade_rgd5_s = 72; const wpn_grenade_rpg7 = 73; const wpn_groza = 179; const wpn_groza_s = 157; const wpn_hpsa = 180; const wpn_hpsa_s = 158; const wpn_knife = 181; const wpn_knife_s = 159; const wpn_lr300 = 182; const wpn_lr300_s = 160; const wpn_pm = 183; const wpn_pm_s = 161; const wpn_rg6 = 184; const wpn_rg6_s = 162; const wpn_rpg7 = 185; const wpn_rpg7_s = 163; const wpn_scope = 186; const wpn_scope_s = 164; const wpn_shotgun = 187; const wpn_shotgun_s = 165; const wpn_silencer = 188; const wpn_silencer_s = 166; const wpn_stat_mgun = 189; const wpn_svd = 190; const wpn_svd_s = 167; const wpn_svu = 191; const wpn_svu_s = 168; const wpn_usp45 = 192; const wpn_usp45_s = 169; const wpn_val = 193; const wpn_val_s = 170; const wpn_vintorez = 194; const wpn_vintorez_s = 171; const wpn_walther = 195; const wpn_walther_s = 172; const wpn_wmagaz = 196; const wpn_wmaggl = 197; const zombie = 38; const zombie_s = 124; const zone = 216; const zone_acid_fog = 204; const zone_bfuzz = 205; const zone_bfuzz_s = 198; const zone_campfire = 206; const zone_dead = 207; const zone_galant_s = 199; const zone_galantine = 208; const zone_mbald_s = 200; const zone_mincer = 210; const zone_mincer_s = 201; const zone_mosquito_bald = 209; const zone_radio_s = 202; const zone_radioactive = 212; const zone_rusty_hair = 213; const zone_torrid_s = 203; Константы тут для ЗП. Не думаю, что в ТЧ сильно другое будет. Для определения аномалий добавь в _g.script что-то вроде такого: function IsAnomaly (object, class_id) local id = class_id or get_clsid(object) return anomaly_classes[id] == true end а в start_game_callback() (там же, в _g.script) вот такую таблицу: anomaly_classes = { [clsid.zone_acid_fog] = true, [clsid.zone_bfuzz] = true, [clsid.zone_bfuzz_s] = true, --ну и так далее, смотря какие аномалии нужно определять. } В любом месте можно будет обращаться к этой функции примерно так: local obj = self.object if IsAnomaly(obj) then Изменено 14 Апреля 2011 пользователем KD87 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-584938
speczadanie 0 Опубликовано 14 Апреля 2011 Поделиться Опубликовано 14 Апреля 2011 Есть объект OBJ, как вычислить расстояние до него от игрока? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-584991
=VENOM= 51 Опубликовано 14 Апреля 2011 Поделиться Опубликовано 14 Апреля 2011 Например, вот так: local distance = obj:position():distance_to(db.actor:position()) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585033
Zander_driver 10 348 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 Вопрос такой. В bind_stalker-е, у актора по умолчанию нет хит-колбэка. Я пробовал его ставить по образу и подобию как у мобов, в методе reinit. Вылетов не последовало, но и работать новый колбэк отказался. А у кого-нибудь получалось его поставить? и как? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585088
_Призрак_ 11 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 Zander_driver В ЗП его восстановили, а в ТЧ есть только один вариант - сравнивать текушее здоровье с предыдующим Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585093
speczadanie 0 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 Попробовал, вылет: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: No such operator defined Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585130
KD87 720 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 speczadanie, а может, опечатка в коде? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585136
speczadanie 0 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 Вот так у меня на апдейт поставлено: function update() for a=1,65534 do local obj = alife():object(a) if obj and IsStalker(obj) then if obj:position():distance_to(db.actor:position()) < 50 then db.actor:give_info_portion("iba") end end end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585159
_Призрак_ 11 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 Один end пропустил, допиши в конце. Но функция у тебя конечно классная. У тебя все игра лагать будет. Лучше уж делай перебор таблицы db.storage например раз в 2 секунды Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585161
speczadanie 0 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 Это я только здесь пропустил, в скрипт-файле END имеется, но вылет остаётся. Что такое? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585177
_Призрак_ 11 Опубликовано 15 Апреля 2011 Поделиться Опубликовано 15 Апреля 2011 Показывай все - что и где правил, какие скрипты. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585194
Desertir 202 Опубликовано 16 Апреля 2011 Поделиться Опубликовано 16 Апреля 2011 (изменено) Здрасте. Сразу скажу, в спауне я ничего не представляю, интересна возможность реализации. Итак, как я понимаю в all.spawn задаются пути, по которым двигаются все живые объекты. А как на счет неживых? Возможно ли, допустим, задать 2 точки, а по ним пустить артефакт, чтобы он двигался туда-сюда. Вообще вопрос такой: возможно ли заставить специально двигаться артефакт? Т.е. не как из рюкзака выбросили, и он укатился, а своими "силами". Поэтому и вспомнил пути, ну как вариант, хотя они накладывают жеские ограничения. Изменено 16 Апреля 2011 пользователем Desertir Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585435
_Призрак_ 11 Опубликовано 16 Апреля 2011 Поделиться Опубликовано 16 Апреля 2011 В ЗП артефакты как раз двигаются по путям. Поэтому это возможно Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585440
RayTwitty 559 Опубликовано 16 Апреля 2011 Поделиться Опубликовано 16 Апреля 2011 Desertir, А как на счет неживых? В РМА моде Нива в ТД сама ездила. Подъезжала к фабрике и останавливалась. Можешь там посмотреть. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-585470
Zander_driver 10 348 Опубликовано 20 Апреля 2011 Поделиться Опубликовано 20 Апреля 2011 В общем, такая непонятка. В bind_monster-е, добавил в самый конец death-колбэка такой код: if victim then news_manager.send_tip(db.actor, "Death. victim: "..victim:section(), nil, nil, 10000) end if who then news_manager.send_tip(db.actor, "Death. who: "..who:section(), nil, nil, 10000) end Убиваю кабанов - и никаких сообщений не появляется, как будто колбэк не работает или не получает заявленных в заголовке данных victim и who. Почему так? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-586287
[=sinedsc=] 0 Опубликовано 22 Апреля 2011 Поделиться Опубликовано 22 Апреля 2011 спрашивал на геминаторе - там никто не знает, решил тут спросить тапками не бросаться есле вопрос не в тему. я копошился с гулагами долгое время и решил создать свой, но он почему то не работает. вылетов нет, все вроде норм, но НПЦ на работы не идут. Гулаг на новом уровне есле это важно, настройки в папке скрипт -------------------------------------------------------------------------- -- загрузка работ -------------------------------------------------------------------------- local t = {} function load_job(sj, gname, type, squad, groups) -------------------------------------------------------------------------- -- пока что тестовый смарт -------------------------------------------------------------------------- --' прогулка лукаша (тестовая) if type == "dark_test" then t = { section = "logic@test_walker", idle = 0, prior = 8, state = {0,1}, position_threshold = 100, online = true, in_rest = "dark_test_restr", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "gar_hellcar" end } table.insert(sj, t) end -------------------------------------------------------------------------- -- состояние гулага -------------------------------------------------------------------------- if type == "dark_test" then return function(gulag) local actor = db.actor if not actor then return gulag.state end elseif level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then return 0 -- день else return 1 -- ночь end end end -------------------------------------------------------------------------- -------------------------------------------------------------------------- function load_ltx(gname, type) return nil end function checkStalker(npc_community, gulag_type, npc_rank, se_obj) if gulag_type == "dark_test" then return npc_community == "stalker" end return false end настроойки в папке конфиг/миск ;------------------------------------------------------------------------------------------------- ;-- тестовая схема ;------------------------------------------------------------------------------------------------- [logic@test_walker] active = walker@test_walker [walker@test_walker] path_walk = test_walk1 path_look = test_look1 файлы с настроками гулага я взял у ПЫС ( gulag_escape ) и там уже произвел настройку. (есле что то я просто копипастил, в програмировании не селен) подскажите в чем косяк и может быть я где то что то незарегестрировал, как заставить работать гулаг? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/87/#findComment-586958
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти