Перейти к контенту

Рекомендуемые сообщения

Помогите написать скрипт:

- если любой NPC (если можно, ещё добавить условие чтобы он был врагом) от игрока не дальше, чем в 50 метрах, то добавим ему отметку на радар (текстурой "XXX"), если расстояние будет больше 50, отметку удаляем.

Ссылка на комментарий
Zander_driver, ну фантом ли объект определяется гораздо проще:

local obj_clsid == self.object:clsid()
if obj_clsid == clsid.psy_dog_phantom_s then

 

Являются ли окружающие неписи собаками также очень просто проверяются по clsid.

А как этим же методом обнаружить аномалии?

Когда я обнаруживаю аномалии своим методом через секцию, то обнаруживаются только те что меняются после каждого выброса. А те что статичны и от выброса не перемещаются - они не обнаруживаются.

Суть вопроса заключается в том - что писать после "clsid." чтобы найти аномалию.

Еще было бы неплохо таким же методом обнаруживать костры... и вообще узнать побольше об этом методе, что как обнаруживать.

Я почему то не могу найти такой информации.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий

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

Изменено пользователем KD87
Ссылка на комментарий

Вопрос такой.

В bind_stalker-е, у актора по умолчанию нет хит-колбэка. Я пробовал его ставить по образу и подобию как у мобов, в методе reinit. Вылетов не последовало, но и работать новый колбэк отказался.

А у кого-нибудь получалось его поставить? и как?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий

Zander_driver

В ЗП его восстановили, а в ТЧ есть только один вариант - сравнивать текушее здоровье с предыдующим

Freedom

Ссылка на комментарий

Попробовал, вылет:

 

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

Ссылка на комментарий

Вот так у меня на апдейт поставлено:

 

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

Ссылка на комментарий

Один end пропустил, допиши в конце.

Но функция у тебя конечно классная. У тебя все игра лагать будет. Лучше уж делай перебор таблицы db.storage например раз в 2 секунды

Freedom

Ссылка на комментарий

Здрасте. Сразу скажу, в спауне я ничего не представляю, интересна возможность реализации.

Итак, как я понимаю в all.spawn задаются пути, по которым двигаются все живые объекты. А как на счет неживых? Возможно ли, допустим, задать 2 точки, а по ним пустить артефакт, чтобы он двигался туда-сюда.

Вообще вопрос такой: возможно ли заставить специально двигаться артефакт? Т.е. не как из рюкзака выбросили, и он укатился, а своими "силами".

Поэтому и вспомнил пути, ну как вариант, хотя они накладывают жеские ограничения.

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

В общем, такая непонятка. В 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. Почему так?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий

спрашивал на геминаторе - там никто не знает, решил тут спросить

тапками не бросаться есле вопрос не в тему. я копошился с гулагами долгое время и решил создать свой, но он почему то не работает. вылетов нет, все вроде норм, но НПЦ на работы не идут. Гулаг на новом уровне есле это важно, настройки в папке скрипт

 

--------------------------------------------------------------------------

-- загрузка работ

--------------------------------------------------------------------------

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 ) и там уже произвел настройку. (есле что то я просто копипастил, в програмировании не селен)

подскажите в чем косяк и может быть я где то что то незарегестрировал, как заставить работать гулаг?

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...