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

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

То есть как называл? Я просто сохранил то, что ты мне дал в файле, потом указал путь до этого файла в spawn_sections_zaton.

Анимация запрещена. N6260

Ссылка на комментарий

кровоSTALKER, а нет!! Все отлично, респектище тебе от меня!!

 

З.Ы.

 

Какая логика подойдет для парня, сидящего у костра?

Анимация запрещена. N6260

Ссылка на комментарий

Доброго времени суток!!!

 

Так как я не умею работать со скриптами, то у меня как всегда возникла проблема(((((

Значит так я попытался написать функцию:

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....

 

Ссылка на комментарий

Скрипт тут нипричём, ну если надо, то вот

 

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

 

 

 

Ссылка на комментарий

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

А как правильно?

 

Вписать

local self.radiation = radiation
local self.npc = db.actor

 

Или я бред сказал?

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

 

Ссылка на комментарий

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

Возможно всё, ну или почти всё.
Ссылка на комментарий

помогите разобратся с юи элементами.

 

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()

...

 

 

собсно ничего не выводится.не вылетает.в чём дело..?

ЗЫ: всё это дело под ЗП..

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Влад,

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

 

В твоём коде слишком много всего, кроме окна. Рекомендую воспользоваться моим тестовым полигоном, которой я описывал здесь. Отлаживать фрагменты кода станет проще.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

malandrinus

спасибо,попробуем.

 

либо я тупой,либо лыжи не едут..ничего не получается.. :huh:

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий
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

Что подскажите?

Изменено пользователем кровоSTALKER
Ссылка на комментарий

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)

 

Хм... Как же её на апдейт повесить?

 

Ссылка на комментарий
attempt to index global 'chimera_mod'

говорит что ошибка в файле скрипта - может скобка где то не закрыта или лишний "end"

if точно не надо

надока как сказал TREWKO,

да а это ничего что функция будет вызываться десяток раз в секунду?

и еще

такое точно есть в ЗП :

db.actor:object"medkit"

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

Ссылка на комментарий

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

 

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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