Stalk15 27 Опубликовано 27 Июля 2010 Charsi Спасибо, работает. ------------------------------------------------- У меня вопрос: Тут давали функцию для определения визуала НПС: function egegege() local se_obj = alife():object(id) -- , где id айдишник непися local t = amk.read_stalker_params(se_obj) if t ~= nil then local vis = t.visual vis = amk.str_explode("\\",vis) vis = vis[3] -- теперь vis есть визуал объекта get_console():execute(vis) end end Я вызываю эту функцию через диалог, но ни чего не происходит и в логе ни чего не появляется, хотя должно.Что я делаю не так? Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 28 Июля 2010 ФеНиКс game.start_tutorial("x18_dream") - срабатывает когда ГГ жив.А если он мертв, то почему-то эта строка игнорируется. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 29 Июля 2010 (изменено) DimOriN Я так попробовал, ввел ид Волка(006 и 6 - все пробовал), но при вызове опять ни чего не происходит. ------------------------- У меня еще вопроc: Я вот поверяю ранг НПС: rank_npc = ranks.get_obj_rank_name(npc_stalker) if rank_npc == "regular" then Проверки ранга Новичок, Ветеран, Мастер работают, а проверка Опытного не работает.regular - вроде правильно.В чем дело-то? --------------------------------------------------------------------------------------------- SkyLoader Точняк, спасибо. Изменено 29 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 31 Июля 2010 stalker.odinochka Во скрипт для спавна аномалий: singapur22 вроде скрипт написал: function create_anom(name_anom, posit_anom, lvid_anom, gvid_anom, radius_anom, power_anom) local obj = alife():create(name_anom, posit_anom, lvid_anom, gvid_anom) -----------------------write---------------------- local packet = net_packet() obj:STATE_Write(packet) -------------------------load--------------------- -- cse_alife_object local game_vertex_id = packet:r_u16() local distance = packet:r_float() local direct_control = packet:r_u32() local level_vertex_id = packet:r_u32() local object_flags = packet:r_u32() local custom_data = packet:r_stringZ() local story_id = packet:r_u32() local spawn_story_id = packet:r_u32() -- cse_shape local shape_count = packet:r_u8() for i=1,shape_count do local shape_type = packet:r_u8() if shape_type == 0 then -- sphere local center = packet:r_vec3() local radius = packet:r_float() else -- box local box = packet:r_matrix() end end -- cse_alife_space_restrictor local restrictor_type = packet:r_u8() -- cse_alife_custom_zone local max_power = packet:r_float() local owner_id = packet:r_u32() local enabled_time = packet:r_u32() local disabled_time = packet:r_u32() local start_time_shift = packet:r_u32() -- cse_alife_anomalous_zone local offline_interactive_radius = packet:r_float() local artefact_spawn_count = packet:r_u16() local artefact_position_offset = packet:r_u32() -- se_zone_anom local last_spawn_time_present = packet:r_u8() if (string.find (name_anom, 'zone_zharka_static') ~= nil or string.find (name_anom, 'zone_witches_galantine') ~= nil or string.find (name_anom, 'zone_mosquito_bald') ~= nil or string.find (name_anom, 'zone_mincer') ~= nil or string.find (name_anom, 'zone_gravi_zone') ~= nil or string.find (name_anom, 'zone_buzz') ~= nil ) and packet:r_elapsed() ~= 0 then abort("left=%d", left) end ---------------------------save-------------------- -- cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(distance) packet:w_u32(direct_control) packet:w_u32(level_vertex_id) object_flags = bit_not(193) packet:w_u32(object_flags) packet:w_stringZ(custom_data) packet:w_u32(story_id) packet:w_u32(spawn_story_id) -- cse_shape packet:w_u8(1) -- количество фигур packet:w_u8(0) -- тип фигуры: сфера packet:w_vec3(vector():set(0, 0, 0)) if radius_anom ~= nil then packet:w_float(radius_anom) else packet:w_float(1.0) end -- cse_alife_space_restrictor packet:w_u8(restrictor_type) -- cse_alife_custom_zone if power_anom ~= nil then packet:w_float(power_anom) else packet:w_float(max_power) end packet:w_u32(owner_id) packet:w_u32(enabled_time) packet:w_u32(disabled_time) packet:w_u32(start_time_shift) -- cse_alife_anomalous_zone packet:w_float(offline_interactive_radius) packet:w_u16(artefact_spawn_count) packet:w_u32(artefact_position_offset) -- se_zone_anom packet:w_u8(last_spawn_time_present) ------------------------read--------------------------- packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) end Спавн аномалии производится из любой функции, таким образом: _new_create.create_anom('name', pos, lv, gv, radius, power) Где: 'name' --имя(тип) аномалии (в кавычках) pos --позиция спавна аномалии vector():set(x,y,z) lv --левел вертекс позиции спавна gv --гейм вертекс позиции спавна radius --радиус аномальной зоны (в метрах) power --сила действия аномалии (1.0 равняется силе, прописаной в конфиге типа аномалии) ----------------------------------------------------------------- Кстати. Имя аномалии ОБЯЗЯТЕЛЬНО должно быть из базовой секции конфига аномалии. Типа для электры -"zone_witches_galantine", для грави -"zone_gravi_zone", и т.д. Так как другие секции приводят к вылету, во время спавна артефакта. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 23 Августа 2010 ALEX BOY Например, можно так: local active_item = db.actor:item_in_slot(слот_сигареты) if (active_item:section() == "секция_сигареты") then db.actor.power = -0.0009 --/Постепенное именьшение выносливости db.actor.psy_health = 0.0007 --/Постепенное прибавление пси-защиты end Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 27 Августа 2010 НПС'у прописал точку, где он должен остановиться, проиграть анимку, и что-то прборматать: p2:name = name03|a=stoya_boltaet|s=bar_arena_public|t=18000 p2:flags = 0x4 p2:position = -443.18,-5.74,-141.41 p2:game_vertex_id = 3906 p2:level_vertex_id = 264079 Все работает, но звука от НПС не слышно, нету его.Подскажите, что я не правильно сделал? Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 3 Сентября 2010 (изменено) Scarabay как сделать чтобы гг не двигался, но мог крутить камерой и стрелять? Так можно же просто отключить на время воод с клавиатуры и мыши. ---------------------------------------------------- malandrinus А ну да.Не внимательно вопрос проячел. Изменено 3 Сентября 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 17 Октября 2010 Jurok if db.actor:satiety <= 0.5 then В данном случае проверяется, что ГГ голоден на половину. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 22 Октября 2010 Как можно определить НПС по его секции из spawn_sections?Или так нельзя определять? Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 23 Ноября 2010 (изменено) Valerich if db.actor:object("zapisk_1") and not has_alife_info("take_zapisk_1_complete") then -- если мы взяли записку 1 тоько первый раз --/Спавним тайник 2 db.actor:give_info_portion("take_zapisk_1_complete") --/выдаем инфопоршень, чтоб при следующем взятии этой записки тайник еще раз не спавнился end if has_alife_info("take_zapisk_1_complete") and db.actor:object("zapisk_2") and not has_alife_info("take_zapisk_2_complete") then -- если мы находили записку 1 и взяли записку 2 тоько первый раз --/Спавним тайник 3 db.actor:give_info_portion("take_zapisk_2_complete") --/выдаем инфопоршень, чтоб при следующем взятии этой записки тайник еще раз не спавнился end И так же по аналогии с остальными тайниками.Не забудь создать инфопоршены take_zapisk_[номер записки]_complete.Функцию ставить на апдейт. Изменено 23 Ноября 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 15 Декабря 2010 Disord Я бы сделал рестриктор, потом на него повесил мап-спот, как у левел_чанджера. А в логике рестриктора сделал бы, чтоб при входе в него вызывалась функция проигрывания титров - получится, как конец игры. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 16 Декабря 2010 Disord На вики и читай про рестрикторы. Окно вызвать можно. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 21 Декабря 2010 Clips Ты покажи, как ты прописал way точки своему НПС. Может там что-то не правильно. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 21 Декабря 2010 SLAVYANICH Еще можно просто удалить твоего непися. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 4 Января 2011 (изменено) TRAMP14 У тебя синтаксические ошибки в коде. Попробуй так: class "cheat" (CUIScriptWnd) function nachali() -- пошла жара level.start_stop_menu(cheat(get_hud()),true) end function cheat:__init(owner) super() self.owner = owner self:InitCtrls() self:InitCall() end function cheat:__finalize() end function cheat:InitControls() self:Init(50,50,550,450) -- отсюда будут братся текстурки local xml = CScriptXmlInit() xml:ParseFile("ui_menuv.xml") -- рамка менюшки xml:InitStatic("background", self) -- кнопки меню self:Register(xml:Init3tButton("btn_1", self),"btn_1") self:Register(xml:Init3tButton("btn_2", self),"btn_2") self:Register(xml:Init3tButton("btn_3", self),"btn_3") -- незабываем про выход self:Register (xml:Init3tButton("btn_quit", self),"btn_quit") end function cheat:InitCallBacks() -- обьяснения что делать кнопкам self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.apte, self) self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.bint, self) self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.konserva, self) self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self) end -- нажатие первой кнопки - спавним аптечку function cheat:apte() alife():create("medkit", db.actor():position(), 1, db.actor:game_vertex_id(), db.actor:id()) end -- вторая кнопка - бинт function cheat:bint() alife():create("bandage", db.actor():position(), 1, db.actor:game_vertex_id(), db.actor:id()) end -- третья кнопка - консерва function cheat:konserva() alife():create("conserva", db.actor():position(), 1, db.actor:game_vertex_id(), db.actor:id()) end -- ввыход function cheat:on_quit() -- убираем наше окно, показываем предыдущее (или возвращаемся в игру) local console = get_console() GetHolder():start_stop_menu (self.owner, true) GetHolder():start_stop_menu (self,true) owner:Show (true) end Изменено 4 Января 2011 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 4 Января 2011 TRAMP14 Заюзай-ка ты програмку lua_cheker. Она ищит синтаксические ошибки. Сам пользуюсь регулярно. Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 9 Января 2011 (изменено) TRAMP14 Чоё ты спрашиваешь, будет работать функция или нет. Сам проверить не можешь? Функция у тебя кривая, что ты ей сделать хочешь? ------------------------------------------------ Сталкер ломать нехочется Чоё? Как ты можешь скриптом игру сломать. Хоть понял, что сказал? Если ты эту свою функцию вызовешь - вылетит. Потому что ты применяешь метод section() к какому-то obj, который у тебя == nil. Изменено 9 Января 2011 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 10 Января 2011 (изменено) TRAMP14 А я вё время думаю завчем в етих скобках пишт локальные так ето что луа не взбеслся. В этих скобках пишут не локальные, а аргументы функции. Вот например в свою функцию: function item(obj) local obj = obj:section() if obj == "medkit" then alife():create("medkit", db.actor():position(), db.actor:level_vertex_id, db.actor:game_vertex_id(), db.actor:id()) end end ты можешь передать аргумент: item("medkit") Можно ли каким нибудь способом запретить использовать определённый тип аптечек? Выдай ГГ инфопоршень, которые якобы запрещает юзать аптечки, а потом определяй, если ГГ заюзал аптечку и выдан нужный инфопоршень, то вернуть эту аптечку ГГ обратно и восстановленое здоровье обратно уменьшить. Получится типа запрет. Изменено 10 Января 2011 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 12 Января 2011 (изменено) ФеНиКс Отслеживай использование одного из 6 твоих предметов и подсчитывай кол-во использований. Я вот тут говорил, как сделать типа запрет на юз итема. Если не знаешь, как отследить юз одного из 6 итемов, читани это: Erlik: добавляем bind_stalker в метод actor_binder:reinit() еще один каллбек Код self.object:set_callback(callback.use_object, OnUseObject, self) OnUseObject это имя функции которая будет вызываться, когда эктор будет использовать предметы типа хлеба\водки\антирада\аптечки\бинта\дринка и т.д. - то есть те которые имеют менюшку "использовать". Для того, чтобы использование предмета можно было отследить, в конфиге у него должен быть указан класс от одного из вышеуказанных итемсов. И далее радуемся жизни с этой функцией: Код function OnUseObject(obj, who) if obj then if obj:section() =="предмет" then -- здесь делаем проверку на секцию нужного предмета действие end end end можно добавить данную функцию в виде метода в bind_stalker сделав так: function actor_binder:OnUseObject(obj, who) сюда ставим проверки end тогда каллбек нужно прописать так self.object:set_callback(callback.use_object, self.OnUseObject, self) PS: дроп предмета - то есть его выкидывание - данный коллбек не отслеживает. Кстати каллбек можно и не вписывать в bind_stalker, а установить его на эктора в теле своей функции в своем файле(биндере) - что я и сделал. Изменено 12 Января 2011 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 16 Января 2011 ФеНиКс Еще не понятно, зачем ты функцию actor_binder:stepen_prozorlivosti(obj, who) пишешь в отдельном файле. Нужно в бинд_сталкере писать. Поделиться этим сообщением Ссылка на сообщение