f0reSt 0 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 кровоSTALKER, как ты и сказал, в секции своего непися в spawn_sections_zaton.ltx Анимация запрещена. N6260 Ссылка на комментарий
iDreD 5 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 Хм... Ты логику правильно назвал? Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
f0reSt 0 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 То есть как называл? Я просто сохранил то, что ты мне дал в файле, потом указал путь до этого файла в spawn_sections_zaton. Анимация запрещена. N6260 Ссылка на комментарий
DiXares 1 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 malandrinus, а можно пример этого флажка? Ссылка на комментарий
f0reSt 0 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 кровоSTALKER, а нет!! Все отлично, респектище тебе от меня!! З.Ы. Какая логика подойдет для парня, сидящего у костра? Анимация запрещена. N6260 Ссылка на комментарий
STARTS 0 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 Доброго времени суток!!! Так как я не умею работать со скриптами, то у меня как всегда возникла проблема((((( Значит так я попытался написать функцию: function vvod_antirada() if self.object.radiation >= 0.1 and db.actor:object"medkit" then local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,230,0,0]Ввожу в организм противорадиационные препараты%c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000) self.npc:eat(self.npc:object("medkit")) end end По ней видно чего я пытался добиться, но тут вылет(((( Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...Исполнитель желанийguygu\gamedata\scripts\srs.script:198: attempt to index global 'self' (a nil value) Игра ругается вот на эту строку: if self.object.radiation >= 0.1 and db.actor:object"medkit" then Что тут не так? Поясните неучу Lua.... Ссылка на комментарий
STARTS 0 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 Скрипт тут нипричём, ну если надо, то вот function create_level_changer( p_story_id, -- STORY_ID нового level_changer (понадобится нам позже) p_position, -- вектор, координаты точки, в которой будет располагаться центр нового level_changer p_lvertex_id, -- level_vertext_id - идентифицируют уровень, на котором будет создан level_changer p_gvertex_id, -- game_vertext_id p_dest_lv, -- level_vertex_id - идентифицируют уровень, на который level_changer будет перебрасывать игрока p_dest_gv, -- game_vertex_id p_dest_pos, -- координаты точки, в которой на новом уровне окажется игрок p_dest_dir, -- направрение взгляда игрока p_dest_level, -- название уровня, например "L11_Pripyat" p_silent -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход) ) local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id) level.map_add_object_spot(obj.id, "level_changer", "") local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_u32 = 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 axis_x_x = packet:r_float() local axis_x_y = packet:r_float() local axis_x_z = packet:r_float() local axis_y_x = packet:r_float() local axis_y_y = packet:r_float() local axis_y_z = packet:r_float() local axis_z_x = packet:r_float() local axis_z_y = packet:r_float() local axis_z_z = packet:r_float() local offset_x = packet:r_float() local offset_y = packet:r_float() local offset_z = packet:r_float() end end -- свойства cse_alife_space_restrictor local restrictor_type = packet:r_u8() -- свойства cse_level_changer local dest_game_vertex_id = packet:r_u16() local dest_level_vertex_id = packet:r_u32() local dest_position = packet:r_vec3() local dest_direction = packet:r_vec3() local dest_level_name = packet:r_stringZ() local dest_graph_point = packet:r_stringZ() local silent_mode = packet:r_u8() packet:w_begin(game_vertex_id) -- game_vertex_id packet:w_float(cse_alife_object__unk1_f32) packet:w_u32(cse_alife_object__unk2_u32) packet:w_u32(level_vertex_id) -- level_vertex_id packet:w_u32( bit_not(193) ) -- object_flags = -193 = 0xFFFFFF3E packet:w_stringZ(custom_data) packet:w_u32(p_story_id) -- story_id packet:w_u32(spawn_story_id) packet:w_u8(1) -- количество фигур -- packet:w_u8(0) -- тип фигуры: сфера -- packet:w_vec3(vector():set(0, 0, 0)) -- sphere_center -- packet:w_float(3.0) packet:w_u8(1) -- тип фигуры: box packet:w_float(2) -- axis_x_x packet:w_float(0) -- axis_x_y packet:w_float(0) -- axis_x_z packet:w_float(0) -- axis_y_x packet:w_float(4) -- axis_y_y packet:w_float(0) -- axis_y_z packet:w_float(0) -- axis_z_x packet:w_float(0) -- axis_z_y packet:w_float(4) -- axis_z_z packet:w_float(0) -- offset_x packet:w_float(0) -- offset_y packet:w_float(0) -- offset_z packet:w_u8(3) -- restrictor_type packet:w_u16(p_dest_gv) -- destination game_vertex_id packet:w_s32(p_dest_lv) -- destination level_vertex_id packet:w_vec3(p_dest_pos) -- destination position packet:w_vec3(p_dest_dir) -- destination direction (направление взгляда) packet:w_stringZ(p_dest_level) -- destination level name packet:w_stringZ("start_actor_02") -- some string, always const packet:w_u8(p_silent) -- 1 for silent level changing packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) level.add_pp_effector ("teleport.ppe", 2006, false) end function spawn_tele_bar(obj) -- local art_section = "af_electra_moonlight" if obj:section() == "tele_bar" then --and db.actor:object(art_section) then local rnd = math.random(7) if rnd == 1 then bar() alife():release(alife():object(obj:id())) elseif rnd == 2 then bar2() alife():release(alife():object(obj:id())) elseif rnd == 3 then bar3() alife():release(alife():object(obj:id())) elseif rnd == 4 then bar4() alife():release(alife():object(obj:id())) elseif rnd == 5 then bar5() alife():release(alife():object(obj:id())) elseif rnd == 6 then bar6() alife():release(alife():object(obj:id())) else bar7() alife():release(alife():object(obj:id())) end end end function bar() create_level_changer(9821, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 45474, 1188, vector():set(193.61143493652,0.097166806459427,71.526657104492), vector():set(0.0, 0.0, 0.0), "l05_bar", 1) end function bar2() create_level_changer(9843, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 47206, 1270, vector():set(198.24176025391,3.271665096283,-77.252685546875), vector():set(0.0, 0.0, 0.0), "l05_bar",1) end function bar3() create_level_changer(9844, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),59366, 1277, vector():set(232.64491271973,5.1447978019714,-113.61502838135), vector():set(0.0, 0.0, 0.0), "l05_bar", 1) end function bar5() create_level_changer(9845, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),68763, 1274, vector():set(276.64755249023,0.055086404085159,-66.742523193359), vector():set(0.0, 0.0, 0.0), "l05_bar", 1) end function bar6() create_level_changer(9846, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),35860, 1238,vector():set(128.80438232422,-4.8249382972717,16.76756477356), vector():set(0.0, 0.0, 0.0),"l05_bar", 1) end function bar7() create_level_changer(9847, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),33903, 1239, vector():set(116.09830474854,-5.3052234649658,12.649393081665), vector():set(0.0, 0.0, 0.0), "l05_bar", 1) end --################################################################################ #################### function spawn_stasok() local obj = amk.spawn_item("stasok",vector():set(-234.90,-19.67,-156.88),47,20038) local tbl = amk.read_stalker_params(obj) tbl.health = 0 tbl.updhealth = 0 amk.write_stalker_params(tbl, obj) end function flash(first_speaker, second_speaker) dialogs.relocate_item_section(first_speaker, "ogg_flash_1", "in") end function xna(stalker, player) return stalker:object ("pda") ~= nil end function pda(first_speaker, second_speaker) dialogs.relocate_item_section(second_speaker, "pda", "out") end function af_rak(first_speaker, second_speaker) dialogs.relocate_item_section(second_speaker, "af_wind", "out") end function proverka_antirad() if not db.actor:object("antirad") then local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Напоминаю: %c[255,230,0,0]Противорадиационные препараты отстутствуют!%c[default]Автоматический ввод препаратов невозможен " db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000) end end function vvod_antirada() if self.object.radiation >= 0.1 and db.actor:object"medkit" then local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,230,0,0]Ввожу в организм противорадиационные препараты%c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000) self.npc:eat(self.npc:object("medkit")) end end Ссылка на комментарий
Push85 4 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 STARTS, а ты self.object откуда берешь? Вот он и ругается на несуществующую переменную. Возможно всё, ну или почти всё. Ссылка на комментарий
STARTS 0 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 (изменено) Если честно то незнаю, я просто увидел в одном скрипте, вот от туда и копирнул. Думал что движок поймёт. А как правильно? Вписать local self.radiation = radiation local self.npc = db.actor Или я бред сказал? Изменено 6 Февраля 2010 пользователем STARTS Ссылка на комментарий
Push85 4 Опубликовано 6 Февраля 2010 Поделиться Опубликовано 6 Февраля 2010 STARTS, напиши примерно так: function vvod_antirada() if db.actor.radiation >= 0.1 and db.actor:object"medkit" then local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,230,0,0]Ввожу в организм противорадиационные препараты%c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000) db.actor:eat(db.actor:object("medkit")) end end Возможно всё, ну или почти всё. Ссылка на комментарий
Влад 9 Опубликовано 10 Февраля 2010 Поделиться Опубликовано 10 Февраля 2010 (изменено) помогите разобратся с юи элементами. class "TEST" (CUIScriptWnd) function TEST:__init(owner) super() self.owner = owner self:InitControls() self:InitCallBacks() end function TEST:__finalize() end function TEST:InitControls() self:SetWndRect(Frect():set(0,0,1024,768)) local xml = CScriptXmlInit() xml:ParseFile("test.xml") self.pda_form=xml:InitStatic("background", self) self:Register(xml:Init3tButton("write_message", self),"write_message") self:Register(xml:Init3tButton("read_message", self),"read_message") self:Register(xml:Init3tButton("quit", self),"quit") end function TEST:InitCallBacks() self:AddCallback("quit", ui_events.BUTTON_CLICKED, self.on_quit, self) self:AddCallback("write_message", ui_events.BUTTON_CLICKED, self.write_message, self) self:AddCallback("read_message", ui_events.BUTTON_CLICKED, self.read_message, self) end function TEST:Update() CUIScriptWnd.Update(self) end function TEST:OnKeyboard(dik, keyboard_action) CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) if keyboard_action == ui_events.WINDOW_KEY_PRESSED then if dik == DIK_keys.DIK_ESCAPE then self:on_quit() end end end function TEST:read_message() self:on_quit() end function TEST:write_message() self:on_quit() end function TEST:on_quit() self:GetHolder():start_stop_menu(self,true) end local test = nil function use_test2() if test and type(test) == "number" then if not level.object_by_id(test) then level.start_stop_menu(test.TEST(), true) alife():create("test_sect", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end test = nil end if test and type(test) == "userdata" then test = test:id() else test = nil end end function use_test1(obj) if obj:section() == "test_sect" then test = obj end end ... function actor_binder:use_inventory_item(obj) ... test_contol.use_test1(obj) ... function actor_binder:update(delta) ... test_contol.use_test2() ... собсно ничего не выводится.не вылетает.в чём дело..? ЗЫ: всё это дело под ЗП.. Изменено 10 Февраля 2010 пользователем Влад Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
iDreD 5 Опубликовано 10 Февраля 2010 Поделиться Опубликовано 10 Февраля 2010 А в custom_msgs.xml добавил всё? Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Влад 9 Опубликовано 10 Февраля 2010 Поделиться Опубликовано 10 Февраля 2010 кровоSTALKER а зачем?для чего мне тогда это: xml:ParseFile("test.xml") Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
Malandrinus 615 Опубликовано 10 Февраля 2010 Поделиться Опубликовано 10 Февраля 2010 Влад, поставь отладочные выводы в консоль и выяснишь, где торомозится. В твоём коде слишком много всего, кроме окна. Рекомендую воспользоваться моим тестовым полигоном, которой я описывал здесь. Отлаживать фрагменты кода станет проще. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Влад 9 Опубликовано 10 Февраля 2010 Поделиться Опубликовано 10 Февраля 2010 (изменено) malandrinus спасибо,попробуем. либо я тупой,либо лыжи не едут..ничего не получается.. Изменено 10 Февраля 2010 пользователем Влад Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
iDreD 5 Опубликовано 11 Февраля 2010 Поделиться Опубликовано 11 Февраля 2010 (изменено) function vvod_antirada() if db.actor.radiation >= 0.1 and db.actor:object"medkit" then local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,230,0,0]Ввожу в организм противорадиационные препараты%c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000) db.actor:eat(db.actor:object("medkit")) end end На досуге попробывал эту функцию. В ЗП ничего не работает. Я вешал апдейт на дельту. function actor_binder:update(delta) ... if lck3_auto then chimera_mod.vvod_antirada() end Что подскажите? Изменено 11 Февраля 2010 пользователем кровоSTALKER Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
DiXares 1 Опубликовано 11 Февраля 2010 Поделиться Опубликовано 11 Февраля 2010 кровоSTALKER. А зачем if lck3_auto then ? Надо просто: function actor_binder:update(delta) ... chimera_mod.vvod_antirada() Ссылка на комментарий
iDreD 5 Опубликовано 11 Февраля 2010 Поделиться Опубликовано 11 Февраля 2010 Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : .... - Зов Припяти\gamedata\scripts\bind_stalker.script:402: attempt to index global 'chimera_mod' (a nil value) Вылет. Может нужно поставить if? function actor_binder:update(delta) ... if chimera_mod.vvod_antirada() end Добавлено через 5 мин.: Тоже вылет: Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....e.r. - Зов Припяти\gamedata\scripts\xr_logic.script:1272: attempt to index local 'obj' (a nil value) Хм... Как же её на апдейт повесить? Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Maks_K 0 Опубликовано 11 Февраля 2010 Поделиться Опубликовано 11 Февраля 2010 attempt to index global 'chimera_mod' говорит что ошибка в файле скрипта - может скобка где то не закрыта или лишний "end" if точно не надо надока как сказал TREWKO, да а это ничего что функция будет вызываться десяток раз в секунду? и еще такое точно есть в ЗП : db.actor:object"medkit" вроде проверка наличия аптечки в инвентаре как то по другому реализуется Ссылка на комментарий
iDreD 5 Опубликовано 11 Февраля 2010 Поделиться Опубликовано 11 Февраля 2010 function vvod_antirada() if db.actor.radiation >= 0.1 and db.actor:object"medkit" then local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,230,0,0]Ввожу в организм противорадиационные препараты%c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000) db.actor:eat(db.actor:object("medkit")) end В этой функции не хватает скобок, там где "medkit". Maks_K, да, в ЗП это есть. Попробывать можно так: function vvod_antirada() if db.actor.radiation >= 0.1 and db.actor:object("medkit") then local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,230,0,0]Ввожу в организм противорадиационные препараты%c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000) db.actor:eat(db.actor:object("medkit")) end Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти