Darien 0 Опубликовано 25 Февраля 2010 (изменено) Так и не получилось что-то получить левел жертвы. Следующая проверка возвращает последний вариант (чаэс), даже если жертва на кордоне: if get_clsid(victim) == clsid.script_stalker then -- Получаем уровень жертвы. if level.name("l01_escape") then lv = "Кордон, " end if level.name("l02_garbage") then lv = "Свалка, " end if level.name("l03_agroprom") then lv = "НИИ Агропром, " end if level.name("l04_darkvalley") then lv = "Тёмная Долина, " end if level.name("l05_bar") then lv = "Бар, " end if level.name("l06_rostok") then lv = "Дикая Территория, " end if level.name("l07_military") then lv = "Милитари," end if level.name("l08_yantar") then lv = "Янтарь, " end if level.name("l10_radar") then lv = "Радар, " end if level.name("l11_pripyat") then lv = "Припять, " end if level.name("l12_stancia") then lv = "ЧАЭС, " end if level.name("l12_stancia_2") then lv = "ЧАЭС, " end Пробовал и elseif, но он возвращает всегда первый вариант. 8push5 Спасибо большое, действительно не догадался. Был уверен что правильно написал Изменено 25 Февраля 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 26 Апреля 2010 Редко, но бывает вылет, похожий на этот : FATAL ERROR [error]Expression : e_entity [error]Function : xrServer::Process_event_reject [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp [error]Line : 12 [error]Description : entity not found. id_parent=155 id_entity=161 frame=11654 stack trace: Например, если использовать скрипт взрыва тел из BB мода, то 1 раз из 5 вылет при взрыве с таким логом. Если кто сталкивался, то как боролся? Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 30 Апреля 2010 TREWKO local massiv_objects = {} function check() npc:iterate_inventory(function (tmp, item) if item then table.insert(massiv_objects, item:section()) end end, npc) end Где npc - онлайн НПС. Функция заполнит таблицу названиями итемов из рюкзака. Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 11 Мая 2010 (изменено) sk0rpi0n function spawn() local var = spawn_anom(anom_mine, radius, pos, get_lv, get_gv, power) -- название аномалии, радиус её действия, позиция, лв, гв, мощность end function spawn_anom(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_danger os) -- последний параметр не передаём local obj = alife():create(anom_name,position,level_vertex_id,game_vertex_id) local pac = net_packet() obj:STATE_Write(pac) local game_vertex_id = pac:r_u16() local distance = pac:r_float() local direction = pac:r_u32() local level_vertex_id = pac:r_u32() local object_flags = pac:r_s32() local custom_data = pac:r_stringZ() local story_id = pac:r_s32() local spawn_story_id = pac:r_s32() local shape_count = pac:r_u8() for i=1,shape_count do local shape_type = pac:r_u8() if shape_type == 0 then local center = pac:r_vec3() local plosh = pac:r_float() else local box = pac:r_matrix() end end local restrikror_type = pac:r_u8() local powers = pac:r_float() local owner_id = pac:r_s32() local on_off_mode_enabled_time = pac:r_u32() local on_off_mode_disabled_time = pac:r_u32() local on_off_mode_shift_time = pac:r_u32() local offline_interactive_radius = pac:r_float() local artefact_spawn_places_count = pac:r_u16() local artefact_position_offset = pac:r_s32() local last_spawn_time_present = pac:r_u8() if pac:r_elapsed()~= 0 then abort("left=%d",pac:r_elapsed()) end pac:w_begin(game_vertex_id) pac:w_float(distance) pac:w_u32(direction) pac:w_u32(level_vertex_id) pac:w_u32(object_flags) pac:w_stringZ(custom_data) pac:w_s32(story_id) pac:w_s32(spawn_story_id) pac:w_u8(1) pac:w_u8(0) local sphere_center = vector() sphere_center:set(0,0,0) pac:w_vec3(sphere_center) pac:w_float(plosh) pac:w_u8(restrikror_type) if powers_a ~= nil then powers = powers_a end pac:w_float(powers) if time_dangeros == nil then owner_id = bit_not(0) else owner_id = time_dangeros end pac:w_u32(owner_id) pac:w_u32(on_off_mode_enabled_time) pac:w_u32(on_off_mode_disabled_time) pac:w_u32(on_off_mode_shift_time) pac:w_float(offline_interactive_radius) pac:w_u16(artefact_spawn_places_count) pac:w_u32(artefact_position_offset) pac:w_u8(last_spawn_time_present) pac:r_seek(0) obj:STATE_Read(pac,pac:w_tell()) return obj end Вызывать функцию spawn(). А да, при приближении к ней экран не будет приобретать цвет например пси-воздействия(электра) или жарки. За такие эффекты на экране отвечает ещё один тип аномалий со словом '_field_', который не наносит хита. Я делал так - проверял, какая эта аномалия через string.find(поиск знаков/букв в строке), и спавнил в эту же точку аномалию 'field' с соотв. эффектом. Изменено 11 Мая 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 12 Мая 2010 (изменено) sk0rpi0n Да, ты один раз занесёшь в скриптовый файл функцию, а потом в любое время можешь вызывать её вот так - имя_файла.имя_функции(). Или, если вызов находится в этом же файле, то можно и так - this.имя_функции(). Изменено 12 Мая 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 12 Мая 2010 (изменено) sk0rpi0n Для начала нужно знать, что проводя различные операци над аномалиями, нужно быть осторожным. От одной аномалии проблем возникнуть не должно, а вот при спавне штук ста - проблемы будут наверняка. А теперь как спавнить. Создаёшь файл anoms.script в scripts, копируешь туда весь код. Бежишь в нужное место снимать координаты. Подставляешь сюда название аномалии, радиус, нужные координаты и мощность соответственно: local var = spawn_anom(anom_mine, radius, pos, get_lv, get_gv, power) Например(координаты взяты от балды): local var = spawn_anom("zone_mine_electric", 4, vector():set(193.31, -21.36, 316.53), 11459, 109, 1) Ну и осталось только вызвать. Самый простой способ - через диалог. Думаю знаешь как. А если незнаешь, то ищешь нужную фразу в dialogs_***.xml (*** - имя уровня) и после тегов <text>...</text> пишешь <action>anoms.spawn</action>. Надеюсь понятно объяснил. sk0rpi0n Способов вызвать при старте игры - масса. Можно и в бинд_сталкере. Но подобными вещами захламлять его не стоит. Нафига тебе 2 последние функции? Лишние вызовы. Всё что надо - уже есть. Вызывать надо spawn(), и всё. Изменено 12 Мая 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 12 Мая 2010 sk0rpi0n Убери всё, что ты добавил после второй функции. Всё, что нужно я тебе уже дал, тебе остаётся только вызвать в нужный момент (как вызывать тоже писал). Теперь понятно? Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 15 Мая 2010 stalker19965 Убери функцию в нет_спавне, оставь только вызов (т.к. сама она вызываться не будет). function actor_binder:net_spawn(data) ... spawn.btr(-86.21,-9.43,-152.87,179600,107,"test" ) ... Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 15 Мая 2010 stalker19965 В самый конец функции, перед return true делай вызов. Конфиг можно в любом глоб. моде найти. Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 27 Июня 2010 (изменено) И в чём отличие: Скобок: "wp", от скобок: 'wp'? Ни в чём - можешь использовать оба варианта, лишь бы в начале и в конце выделения были одинаковыми. Хотя есть нюанс, что бы сделать строку с цитатой, придётся использовать оба варианта : print(" строка с 'цитатой' ") или так: print(' строка с "цитатой" ') Изменено 27 Июня 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 29 Июня 2010 TREWKO После каждой строки выводи инфу в лог, что бы знать наверняка где проблема. Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 12 Июля 2010 Kolmogor В Симбионе есть 2 функции - одна читает параметры без 'upd' значений, и там нигде не используется UPDATE, а есть функция, в которой так же идёт считывание 'upd'. Но мне эти 'upd' нафиг ненужны, но обойти их считывание не получается. Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 12 Июля 2010 (изменено) ФеНиКс Это означает, что существует ли ГГ. И не "и он не в онлайне", а "мёртв ли ГГ". Kolmogor Вопрос отпал. Ну суть-то та же... О да.. не смеши и не путай людей. Изменено 12 Июля 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 13 Июля 2010 Stalk15 Раз ты обращаешься к переменной из другого файла, то она должна быть глобальной. Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 14 Июля 2010 1) posmes = mes_sucko[math.random(#mes_sucko)] Ошибка в названии, у тебя как бы pos_mes. 2) local news_text = "%c[255,255,1,1]Татар\\n+%c[255,1,255,1]"..pos_mes.."%c[default]" Не соеденил. Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 15 Июля 2010 кровоSTALKER if not npc:alive() then Кучу раз писали ведь. Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 15 Июля 2010 (изменено) кровоSTALKER Нет, npc - объект, полученный, допустим, через level.object_by_id или level_object_by_sid. Пример: local npc = level_object_by_sid(6) if not npc:alive() then -- end Да любым способом можно получить твоего НПС. Кстати, зачем ты в своём примере используешь таблицу и применяешь к ней метод alive() - непонятно. Изменено 15 Июля 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 15 Июля 2010 (изменено) кровоSTALKER Если НПС уникален: local sobj = alife():object("esc_wolf") if sobj then local obj = level.object_by_id(sobj.id) if obj and not obj:alive() then -- действия end end И не if i=1, 66539 dо, а for i = 1, 65534 do. Изменено 15 Июля 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 17 Июля 2010 (изменено) И ещё вопросец, есть ли скрипт, для воспроизведения анимации нпс? Например бежит сталкер, жмём заветную и сталкер падает и т.д... Это сделать можно... но у меня не получалось. Вот пример, как отыграть анимацию, например, присяди (названия берутся из state_mgr_animation_list, но там похоже не полный список): function anims() local npc = level_object_by_sid(6) if npc then npc:clear_animations() npc:add_animation("poisk_0_idle_1", true, false) end end (тут кстати интересует, зачем 2 булевых значения - первое неясно, а второго, судя по луа хелпу, и в помине быть не должно) А вот как ему переключить состояние, например, с идлового на хавающего батон, я пока незнаю. Но судя по некоторым скриптам, вызывать нужно функцию state_mgr.set_state. Где-то что-то держит этого НПС, не давая ему переключиться. Пусть лучше знающие люди скажут. Изменено 17 Июля 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение
Darien 0 Опубликовано 18 Июля 2010 (изменено) ZeeK Ищешь, где у тебя вызов сна и пишешь что-то вроде того: ... game.start_tutorial("название сна") -- это у тебя уже есть get_console():execute("save 1") -- '1' - название сейва get_console():execute("load 1") ... Scarabay Только через нет пакет. Изменено 19 Июля 2010 пользователем Darien Поделиться этим сообщением Ссылка на сообщение