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

Скриптование


Svoboда

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

 

 

Спавн в инвентарь онлайнового объекта в движке обрабатывается отдельным "ускоренным" образом.

Видимо, не все классы? при спавне в инвентарь патронов например, переписать им кастом-дату удается.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

packet.custom_data. что тут еще сказать то.
А если вы о том, что же за сведения я туда пишу, то извините это пока секрет.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

@Dennis_Chikin, А помоему, для грусти нет причин. Кто ясно представляет что делает и зачем, и как этого достичь - у того и вопросы редко возникают. А даже когда возникают, опытный разработчик может на них ответы самостоятельно найти. Сюда, в тему с вопросами, чаще приходят те, кто из-за нехватки опыта не может решить свои проблемы иначе. Так чему же удивляться?

 

И кстати назрел вопрос, достаточно нубский и банальный, но вот не имел я раньше опыта работы с погодой.

В файле environment.ltx есть секция weathers, в ней список имен погоды на которые можно переключаться функцией level.set_weather(string, bool)

А дальше есть еще секция weather_effects, и в ней еще список имен. но на них так переключаться нельзя - получаем вылет invalid weather name. как эти погодные эффекты правильно вызывать с помощью скрипта?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
void set_weather_fx(string) -- устанавливает погодный эффект,

-- описанный в файле weathers\environment.ltx в секции [weather_effects]. Это всякие молнии,

-- ветер с туманом, затемнения и пр. Так в частности сделан выброс

bool is_wfx_playing() -- соответственно проигрывается ли сейчас погодный эффект

 

Странно что я сам не увидел :) ну ладно. Теперь что то я не соображу, как его после выключить. level.set_weather_fx(nil) -- так чтоли?

Разобрался. Эффект видимо на определенное время рассчитан, и заканчивается сам.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@Капитан Кузьмичёв, Ответов на такой вопрос вы вряд ли могли найти, т.к. их и нет. Я к примеру вообще не могу понять, что вам требуется. Если воспринимать дословно - вам надо чтобы скриптом написался скрипт ( !!! ) при... каком событии? тут я даже в догадках теряюсь.

 

@Ekagors,@aleksn09,

if db.actor:item_in_slot(1) and db.actor:item_in_slot(1):section()=="wpn_pm" then return "блаблабла, это так к примеру"  end

если в слоте 1 нет ничего, то в этой проверке, будет сразу вызван метод nil:section(), что приведет к вылету. Лучше сначала проверить что в слоте есть вообще какой-то объект, а лишь затем проверять что у него за секция.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

через скрипт это вряд ли получится. я во всяком случае не представляю как...

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

Это все движковые действия, а не скриптовые.

Вообще скриптово управлять анимациями худовой модели помоему нет никакой возможности.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Раз уж пошла речь про скорость, и дабы мне не изобретать велосипед в очередной раз (а вдруг его кто-то изобрел уже?)
Задам такой вопрос: А занимался ли кто оптимизацией массового входа неписей в онлайн?

т.е. ситуация: подходит игрок/гг к некому гулагу, в котором живет толпа неписей. И в какой то момент они всей толпой вваливаются в онлайн... создавая то, что даже словом "тормоза" назвать как то неудобно.

Взять да перекинуть выполняемые при нет-спавне неписей действия в динамический список вроде того что упомянут несколькими постами выше. Как мне представляется, это могло бы решить проблему, но возможно возникновение других проблем из-за "отложенного" (запоздалого) выполнения действий, которые, быть может, движок ожидает сразу же.

Это все лишь мои теоретические размышления. Занимался ли кто-нибудь данным вопросом на практике?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Есть ли способ получить актуальный список имен clsid ?
Имеется в виду вот этот список из lua_help

 

C++ class clsid {
    const actor = 78;
    const ameba_zone = 173;
    const art_bast_artefact = 0;
    const art_black_drops = 1;
    const art_dummy = 3;
    const art_electric_ball = 4;
    const art_faded_ball = 5;
    const art_galantine = 6;
    const art_gravi = 7;
    const art_gravi_black = 2;
    const art_mercury_ball = 8;
    const art_needles = 9;
    const art_rusty_hair = 10;
    const art_thorn = 11;
    const art_zuda = 12;
    const artefact = 39;
    const artefact_s = 90;
    const bloodsucker = 13;
    const bloodsucker_s = 95;
    const boar = 14;
    const boar_s = 96;
    const burer = 15;
    const burer_s = 97;
    const car = 49;
    const car_s = 91;
    const cat = 16;
    const cat_s = 98;
    const chimera = 28;
    const chimera_s = 99;
    const controller = 17;
    const controller_s = 100;
    const crow = 18;
    const device_detector_simple = 51;
    const device_pda = 50;
    const device_torch = 52;
    const device_torch_s = 119;
    const dog_black = 19;
    const dog_red = 22;
    const dog_s = 103;
    const equ_exo = 53;
    const equ_military = 54;
    const equ_scientific = 55;
    const equ_stalker = 56;
    const equ_stalker_s = 57;
    const flesh = 23;
    const flesh_group = 24;
    const flesh_s = 104;
    const fracture = 25;
    const fracture_s = 106;
    const game = 61;
    const game_cl_LastStanding = 45;
    const game_cl_artefact_hunt = 43;
    const game_cl_deathmatch = 44;
    const game_cl_single = 46;
    const game_cl_team_deathmatch = 47;
    const game_sv_LastStanding = 116;
    const game_sv_artefact_hunt = 114;
    const game_sv_deathmatch = 115;
    const game_sv_single = 117;
    const game_sv_team_deathmatch = 118;
    const game_ui_artefact_hunt = 120;
    const game_ui_deathmatch = 121;
    const game_ui_single = 122;
    const game_ui_team_deathmatch = 123;
    const gigant_s = 105;
    const graph_point = 27;
    const hanging_lamp = 81;
    const helicopter = 48;
    const hud_manager = 64;
    const inventory_box = 82;
    const level = 60;
    const level_changer = 74;
    const main_menu = 75;
    const mp_players_bag = 76;
    const nogravity_zone = 179;
    const obj_antirad = 65;
    const obj_attachable = 66;
    const obj_bandage = 67;
    const obj_bolt = 68;
    const obj_bottle = 69;
    const obj_breakable = 79;
    const obj_climable = 80;
    const obj_document = 70;
    const obj_explosive = 71;
    const obj_food = 72;
    const obj_medkit = 73;
    const obj_phskeleton = 87;
    const obj_phys_destroyable = 86;
    const obj_physic = 83;
    const online_offline_group = 77;
    const phantom = 29;
    const poltergeist = 30;
    const poltergeist_s = 107;
    const projector = 84;
    const pseudo_gigant = 26;
    const pseudodog_s = 108;
    const psy_dog = 21;
    const psy_dog_phantom = 20;
    const psy_dog_phantom_s = 101;
    const psy_dog_s = 102;
    const respawn = 88;
    const script_object = 92;
    const script_stalker = 33;
    const script_trader = 35;
    const script_zone = 89;
    const smart_terrain = 93;
    const smart_zone = 94;
    const snork = 31;
    const snork_s = 109;
    const space_restrictor = 112;
    const spectator = 113;
    const stalker = 32;
    const switcher = 85;
    const team_base_zone = 182;
    const torrid_zone = 183;
    const trader = 34;
    const tushkano = 36;
    const tushkano_s = 110;
    const wpn_ak74 = 142;
    const wpn_ak74_s = 124;
    const wpn_ammo = 38;
    const wpn_ammo_m209 = 40;
    const wpn_ammo_og7b = 41;
    const wpn_ammo_vog25 = 42;
    const wpn_binocular = 143;
    const wpn_binocular_s = 125;
    const wpn_bm16 = 144;
    const wpn_bm16_s = 126;
    const wpn_fn2000 = 145;
    const wpn_fort = 146;
    const wpn_grenade_f1 = 58;
    const wpn_grenade_fake = 59;
    const wpn_grenade_launcher = 147;
    const wpn_grenade_rgd5 = 62;
    const wpn_grenade_rpg7 = 63;
    const wpn_groza = 148;
    const wpn_groza_s = 127;
    const wpn_hpsa = 149;
    const wpn_hpsa_s = 128;
    const wpn_knife = 150;
    const wpn_knife_s = 129;
    const wpn_lr300 = 151;
    const wpn_lr300_s = 130;
    const wpn_mounted = 152;
    const wpn_pm = 153;
    const wpn_pm_s = 131;
    const wpn_rg6 = 154;
    const wpn_rg6_s = 132;
    const wpn_rpg7 = 155;
    const wpn_rpg7_s = 133;
    const wpn_scope = 156;
    const wpn_scope_s = 134;
    const wpn_shotgun = 157;
    const wpn_shotgun_s = 135;
    const wpn_silencer = 158;
    const wpn_stat_mgun = 159;
    const wpn_svd = 160;
    const wpn_svd_s = 136;
    const wpn_svu = 161;
    const wpn_svu_s = 137;
    const wpn_usp45 = 162;
    const wpn_usp45_s = 138;
    const wpn_val = 163;
    const wpn_val_s = 139;
    const wpn_vintorez = 164;
    const wpn_vintorez_s = 140;
    const wpn_walther = 165;
    const wpn_walther_s = 141;
    const wpn_wmagaz = 166;
    const wpn_wmaggl = 167;
    const zombie = 37;
    const zombie_s = 111;
    const zone = 184;
    const zone_acid_fog = 172;
    const zone_bfuzz = 174;
    const zone_bfuzz_s = 168;
    const zone_dead = 175;
    const zone_galant_s = 169;
    const zone_galantine = 176;
    const zone_mbald_s = 170;
    const zone_mincer = 178;
    const zone_mincer_s = 171;
    const zone_mosquito_bald = 177;
    const zone_radioactive = 180;
    const zone_rusty_hair = 181;

};

 

 

который, похоже, не совсем соответствовал действительности даже для чистого ТЧ.
Нужен именно список существующих строковых имен. Попытка взять множество clsid целиком, возвращает userdat-у, с которой непонятно что дальше делать.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
Ни каких строк в clsid нет, это всего лишь набор числовых констант.
function IsStalker (object, class_id)
    local id = class_id or get_clsid (object)
    if id == clsid.actor or id == clsid.script_stalker then
       return true
    end
    return false
end

 

 

Я знаю что это числовые константы. Но вот в приведенном примере - actor это что? script_stalker это что? строковые ключи. Строковые! по которым мы эти самые числовые константы получаем. и сравниваем с значением полученным из obj:clsid().

Вот мне нужен полный список этих ключей.

Или как вариант - мне нужен способ узнать этот ключ для конкретного объекта, у которого я знаю числовое значение возвращаемое obj:clsid()

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Ну в моем конкретном случае составлять соответствие числовых значений - уже лишнее.
Мне собственно требовалось написать аналог функций IsStalker, IsWeapon, ... etc из _g.script. и для тех объектов, которые мне нужны, надо было найти как их звать по клсиду)

В случае скриптово-добавленных клсидов их можно просто в class_registrator-e посмотреть.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Дело твое конечно, но не совсем понятна твоя цель - если ты хочешь написать аналог функций IsStalker, IsWeapon то тебе нужны именно числовые значения, если же просто по числу найти название, так это и так можно сделать по уже имеющимся табличкам.

Учитывая что в моем моде клсиды добавляются так же и через скрипты, и, разработка еще в процессе - могут и еще новые классы добавиться. А числовые значения при этом смещаются. И да, экспериментальным путем выяснилось, что то, что мы добавляем в class_registrator-e, добавляется вовсе не в конец списка clsid. Я так понимаю добавленные следуют за своими родителями. А все последующие в списке - смещаются. И потому даже числовые значения классов, прописанных в движке, уже не соответствуют "имеющимся табличкам".

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

,

У инвентарных предметов нет пстора, насколько я помню. для них удобнее пользоваться кастом-датой их нет-пакета. см. модуль Артоса для работы с нет-пакетами, хотя ему вроде есть и другие аналоги.

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Ну для этого надо 3 вещи.

1. отловить факт того, что предмет попытались использовать (use_collback, тут все просто)
2. проверить наличие другого предмета. тоже все просто. if db.actor:object("ваш_консервный_нож") ~= nil then и так далее.

3. если второго предмета нет, то спавнить первый обратно. а если есть, то выполнять то, что должно свершиться от применения первого. И выполнять скриптово, потому что первый объект на самом деле был безвозвратно съеден в первом пункте и на этот факт никак не повлиять.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

 

 

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

Да, о том что уже сделано. Если прочитать весь мой пост, становится ясно почему я назвал это "попыткой".

 

@svarog2741, Все данные вам ответы, как мои так и Dennis_Chikin-a, относятся к Оригинальной игре. При достаточном желании и навыках работы с скриптами, реализовать чтобы именно так все выглядело для игрока - не сложно. Но метод непрост, и новичку маловероятно его осилить.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

а мог он так зависнуть что другие колбеки актора работают?
У меня actor_binder:on_item_take срабатывает, и там обнаруживается что актора нет.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Нашел причину. Зависание произошло в actor_binder:load. причем по дурацкой причине - читались всякие данные из конфига, ltx:r_string(section, line). в качестве section оказался nil. И процесс завис.
actor_binder:net_spawn после этого вообще не вызвался.
когда устранил зависание, оказалось что actor_binder:net_spawn вызывается сразу после actor_binder:load.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Вопрос по функциям класса game_object

function change_team(number, number, number)
void change_team(int team, int squad, int group) 
меняет для объекта team, squad и group.
function set_character_community(string, number, number)
void set_character_community(string comm, int squad, int group)
определяет объект в группировку. Аргументы:
comm - название группировки
squad - отряд, в который определяется объект
group - группа, в которую определяется объект.

 

 

Для чего предназначены вот эти team, squad и group. На что влияют?

в самостоятельных раскопках выяснил - у клиентского объекта эти свойства можно только установить, вышеуказанными функциями, но нельзя узнать (нет функции возвращающей их). У серверных объектов можно как установить, так и узнать. Поиск по скриптам: team упоминается в скриптах занимающихся схемами поведения нпс, и работой гулагов. squad и group только в скриптах гулагов. Если кто может разъяснить назначение этих параметров, буду благодарен.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

in_rest, out_rest Установленные рестрикторы для персонажа на текущей работе. in - рестрикторы из которых запрещено выходить и out - рестрикторы в которые запрещено входить.

info_rest Устанавливаются рестрикторы, вне зоны которых, персонаж на текущей работе будет игнорировать раздражитель.

 

Применительно к скриптово-сгенерированным работам, я так понимаю я могу заспавнить просто объект space_restrictor, через нет-пакет указать ему шейп желаемых размеров, и его айди вписать сюда? к самому рестриктору каких либо требований не предъявляется?

(ТЧ)

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Подскажите алгоритм получения объекта, на который смотрит ГГ, при условии что мы знаем что этот объект может находиться не далее чем в трех метрах. Меня собственно больше всего интересует вопрос, как получить этот объект в ситуации, когда вповалку друг на друге лежат несколько трупов неписей, а актор смотрит на чью-то там руку или ногу торчащую из этой кучи.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
local vacant_pos = {1,2,... короче куча цифр}
local ind = math.random(#vacant_pos)
table.remove(vacant_pos,ind)

 

 

Вот такая катавасия творится у меня в цикле, из таблицы удаляются рандомно взятые элементы, до некоторого предела. Все бы хорошо, но исходная таблица vacant_pos бывает разной. И периодически это приводит к вылетам bad argument #1 to 'random' (interval is empty)
При том что заведомо неизвестно какие там вообще элементы в таблице еще остались, как мне проверить что рандом для нее вызывать еще можно, и "интервал" пустым не будет?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...