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

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


Svoboда

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

(изменено)

Вот этот фрагмент суров:

 

    if nano < af_num then
        psy_hit.power = 0.0005
        psy_hit.type = hit.radiation
        db.actor:hit(psy_hit)
    end
    if nano >= af_num then
        psy_hit.power = 0
        psy_hit.type = hit.radiation
        db.actor:hit(psy_hit)
    end

 

 

Может, лучше так?

 

    if nano < af_num then
        psy_hit.power = 0.0005
    else 
        psy_hit.power = 0
    end
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)

 

И, как уже сказали, outfit="novice_outfit" - это присвоение, а не проверка на равенство.

:)

 

Еще совет - вместо громадных if вынеси имена секций бронежилетов в таблицы и просто потом проверяй наличие элемента. И не нужно в каждом ифе писать if outfit and. Сделай проверку выше.

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

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


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

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

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

 

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

С помощью alife():create() можно спавнить вне онлайн-радиуса, да.

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

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


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

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

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


Ссылка на сообщение
(изменено)
TASTAN, acdc читает данные в пакете, а данные неожиданно кончились. ACDC, скорее всего, не для этой версии спавна. Изменено пользователем KD87

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


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

TASTAN, чтобы появилась пища для раздумий, поставь в data_packet.pm после строчки 62 (foreach my $p (@_) {) вот такое:

print "$p->{name}\n";

Ну а потом выложить текст из консоли, на котором стопорится распаковка.

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


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

TASTAN, ACDC по версии к спавну не подходит. Можешь залить куда-нибудь спавн - я посмотрю, какой он версии. Или попробуй Universal ACDC.

Вообще странный вылет.

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


Ссылка на сообщение
ZeeK, в mm.script синтаксическая ошибка.

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


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

Callisto, вы меня простите, но мне, как автору этой штуки, немного интересно - а что это за ключи такие - [-l] [-soc1]? Это какая-то модифицированная версия? -soc1 - вообще не помню, чтобы был такой ключ, а -l, кстати, нужен только при распаковке level.spawn. Если же вы хотите распаковать спавн в папку, для этого есть ключ -o. К слову, если ключ стоит в квадратных скобочках - он не работает. В общем, синтаксис вызова для распаковки выглядит примерно так:

acdc.pl -d all.spawn -o my_dir.

По делу: во-первых, советую скачать последнюю версию. Во-вторых, сообщите, какая секция у этого kat_m_rat_e_0000 и какой класс вы сопоставили этой секции в таблице section_to_class. Если ответить на эти вопросы сложно, заливайте свой спавн.

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

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


Ссылка на сообщение
Ulman, а где скрипт-то? в том, что на предыдущей странице никакого sound_update() нет :)

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


Ссылка на сообщение
(изменено)
antreg, этот вылет всегда означает ровно одно - синтаксическая ошибка в amk.script, в результате которой скрипт не может корректно подгрузиться. Применительно к твоим условиям - закомментил лишний end или, наоборот, чего-то недокомментил. Что толку искать функции и условия, если испортили синтаксис? Изменено пользователем KD87

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


Ссылка на сообщение
antreg, не понял. Как ты комментируешь? Если закоментировать строчку mod_call("check_spawn") такого вылета не будет. check_spawn же в amk_mod.script, а вылет у тебя по amk.script. Давай тогда и amk.script выкладывай.

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


Ссылка на сообщение
Miller, есть такой ACDC, так и называется - universal_acdc :) В последней редакции умеет разбирать/собирать спавны от модов.

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


Ссылка на сообщение
*Shoker*, умеет и так, и так. Если лень самому вписывать, можно подсунуть папку config от мода.

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


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

Disord, на сталкерине acdc от 23 мая, в нем еще такого нет. Свежий надо скачивать из репозитория xray svn. Нужно щелкнуть по ссылке в моей подписи, справа нажать на кнопочку download и скачать архив. В архиве universal_acdc лежит по пути trunk\scripts\unpackers\spawn\.

Miller, попробовал acdc на спавне Народной солянки - есть ошибки. Оказалось, например, что у них zone_ogon имеет другой скриптовый класс, нежели другие аномалии, несмотря на то, что движковый класс у них один. Зачем такое делать, мне не совсем понятно, но это дело разработчиков. Попозже сделаю обработчик такого рода ошибок. Спавны попроще (например, АМК) распаковываются на ура.

 

Добавлено через 310 мин.:

В общем, кому надо было распаковывать спавн народной солянки - берем свежую версию из подписи, вставил необходимый костыль. Только спавн глючный, некоторые пути там дублированы. В текущих скриптах стоит блокировка на упаковку спавнов с повторяющимися секциями - чистите пути от таких секций (вроде все они в way_labx8) или комментируйте 30ю строчку в ini_file.pm (с помощью #). Вместе с acdc использовать только текущую папку stkutils из репозитория.

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


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

malandrinus, с аномалиями немножко другая ситуация. zone_ogon сделана на классе Z_SMBALD, для которого зарегистрирован скриптовый класс se_zone_anom. Однако, zone_ogon по какой-то причине имеет класс cse_alife_anomalous_zone, то есть имеет место, наоборот, сокращение объема сохраняемых данных.

По этой же причине мне неясно, как такое провернуть через class_registrator. Я сделал так - отловил ситуацию, когда в массиве данных для распаковки кончаются данные, но скрипту еще есть чего читать. В случае, если читать осталось 1 байт (last_spawn_time_present) и объект имеет класс se_zone_anom, можно сменить класс объекту на cse_alife_anomalous_zone и соответствующим образом изменить запись во внешней таблице section_to_class.

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


Ссылка на сообщение
(изменено)
malandrinus, я с этого и начинал в свое время. Но, во первых, для каждой секции нужно иметь соответствующий движковый класс (а значит, читаем конфиги), во-вторых, не для всех классов зарегистрированы сеты в class_registrator (как определить остальные классы? особенно учитывая, что acdc должен поддерживать и билды, в которых зачастую нет скриптовых классов). Но это черт с ним. Если брать ситуацию со спавном солянки, имеем, что, zone_ogon имеет движковый класс ZS_MBALD. Скрипт лезет за подходящим сетом в class_registrator и находит там se_zone_anom. Но формат M_SPAWN в спавне-то именно cse_alife_anomalous_zone. Не отрицая того, что через class_registrator можно соотнести часть секций со скриптовыми классами, в данном случае не вижу, чем он может помочь. Изменено пользователем KD87

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


Ссылка на сообщение
malandrinus, это надо спрашивать у авторов солянки. Я брал спавн из версии от 19.04 со всеми дополнениями и патчами. Ни в одном спавне больше такого не видел. Кстати, ни разу не видел, чтобы флажок (в all.spawn, конечно) был не нуль :). В исходном acdc чтение времени даже не было заложено. А насчет недостатка данных - ну, вот, например, секцию M_UPDATE движок очень некритично читает - ему на ее размер вообще наплевать, больше там данных, меньше. Возможно, что-то подобное и тут имеет место быть - надо глянуть, как в движке функции чтения реализованы.

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


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

Miller, universal_acdc. Почитай к нему ридми, там все написано. Папку config можно держать где угодно, но для простоты я обычно сую в ту же папку, где лежит pl скрипт.

 

Добавлено через 2 мин.:

Disord, а в каком контексте такое нужно? для чего?

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

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


Ссылка на сообщение
Disord, пользуешься level cdc на perl? или за авторством xiani?

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


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

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

AMK-Team.ru

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