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

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


Svoboда

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

Просмотрел луа_хелп еще раз - оказывается alive есть у серверных объектов и у game_object! Почему alive иногда не видится у серверных объектов - не понятно, приходится дополнительно условие писать

if obj and obj.alive and obj:alive() then ... end

@AndreySol alive всегда функция, посмотрите lua_help и как alive "написан" в скриптах (через двоеточие и со скобками в конце).

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


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

Сделал скриптовый ГУИ диалог:

Скрытый текст


class "dialogs2" (CUIScriptWnd)

function dialogs2:__init(name, hidx) super()
	self.hdx = hidx or 3
	self:InitControls()
	self.dTable = tbl[name]
	self.cnt = 2
	self:InitCallBacks()
	self.schet = 1
	curr_polilog = name
end

function dialogs2:__finalize()
	curr_polilog = false
end

function dialogs2:InitControls()
	local xml = CScriptXmlInit()
	self:Init(0,0,1024,768)
	xml:ParseFile("dialogs2.xml")
	self.root = xml:InitFrame("root", self)
	xml:InitFrameLine("root:frameline", self.root)
	self.descr_scroll = xml:InitScrollView("root:descr_scroll", self.root)
	self.Texts1 = xml:InitStatic("root:Texts1", self.descr_scroll)
	xml:InitFrame("root:List1_frame", self.root)
	self.List1 = xml:InitList("root:List1", self.root)
	self.List1:ShowSelectedItem(true)
	self:Register(self.List1, "List1")
	
	--self.Texts1:SetHeight(self.Texts1:GetHeight() * self.hdx)
end

function dialogs2:InitCallBacks()
	self:AddCallback("List1", ui_events.LIST_ITEM_CLICKED, self.List1_list_item_clicked, self)
	self:AddItemTo_List1(string.format("%s: %s", self.dTable[1][1], self.dTable[1][2]))
	--LIST_ITEM_SELECT
end

------------------- >>>  Класс элемента списка List1  <<< -------------------

class "List1_ListItem"(CUIListItemEx)
function List1_ListItem:__init() super()
	self.text_item = CUIStatic()
	self:AttachChild(self.text_item)
	self.text_item:SetFont(GetFontLetterica18Russian())
	self.text_item:SetTextColor(255,216,186,140)
	
end
------------------- >>>  END  <<< -------------------

function dialogs2:AddItemTo_List1(item_name)    --/Добавление элемента в список List1
	local _itm = List1_ListItem()
	_itm.text_item:SetText(item_name)
	self.List1:AddItem(_itm)
end

function dialogs2:List1_list_item_clicked()
	self.List1:RemoveAll()
	
	if table.getn(self.dTable) == self.cnt then
		if type(self.dTable[self.cnt]) == 'function' then
			self.dTable[self.cnt]()
		elseif type(self.dTable[self.cnt]) == 'string' then 
			db.actor:give_info_portion(self.dTable[self.cnt])
		end
		return self:Hide()
	end
	
	self:AddItemTo_List1(string.format("%s: %s", self.dTable[self.cnt][1], self.dTable[self.cnt][2]))
	self.Texts1:SetText(string.format("%s\\n***********\\n%s>>\\n%s", self.Texts1:GetText(), self.dTable[self.cnt-1][1], self.dTable[self.cnt-1][2]) )
	self.cnt = self.cnt + 1 
	self.Texts1:AdjustHeightToText()
end

function dialogs2:talk()
	return self:IsShown()
end

function dialogs2:Hide()
	self:GetHolder():start_stop_menu(self, true)
end

function start(name, idx)
    local super_dlg = this.dialogs2(name, idx)
    level.start_stop_menu(super_dlg, true)
	return super_dlg
end 

 

Как мне получить статус диалога (окна) (активен или нет), переменная super_dlg не зануливается после закрытия диалога, перехвать в методе __finalize - ничего недал?

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


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

 

13 часов назад, dsh сказал:

А что делает? Насколько я вижу - это локальная переменная в функции start. 

И ф-ция старт её возвращает, после закрытия окна эта переменная не нил.

 

13 часов назад, dsh сказал:

Это вопрос? Перехват чего и что он должен был дать? 

Я надеялся что ф-ция __финализ вызовется когда окно "убирается"

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


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

Я хотел написать ф-цию что бы ГГ "толкал" автомобиль (если тот перевернётся или застрянет где нибудь), направление "толчка" должно быть от ГГ к авто, но что-то пошло не так,в игре ГГ "толкает" машину в разные стороны, только не туда куда надо. Может кто-то подскажет в чем ошибка. 

Скрытый текст

local a = level.get_target_obj() -- получаем клиентский объект на который смотрим или nil
			if a and a.is_car and a:is_car() and distance_between_safe(db.actor, a) < 3 then
				local dir = db.actor:position():sub(a:position()):getH()
				a:get_physics_shell():apply_force( 100000 * math.sin(dir), 111991, 100000 * math.cos(dir) )
			end

 

 

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

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


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

@_Sk8_AsTeR_

function name(actor, npc)
	local objMedkt = actor:object("medkit")
    if objMedkt then
    	actor:transfer_item(objMedkt, npc)
    end
end

Для передачи нескольких предметов - тело ф-ции оберните в цикл. И когда пишите код, советую, соблюдать табуляцию.

Изменено пользователем Graff46
  • Спасибо 1
  • Согласен 1
  • Полезно 1

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


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

@buffy, Посмотри методы класса ini_file(), получи system.ltx (system_ini() ) у ини класса есть методы возвращающие кол-во секций и секцию по номеру, делаете конструкцию с циклом и в цикле проходите все секции из system.ltx (и его инклудов). Только в system.ltx очень много секций (погода, спавн и тд), Вам нужно будет отфильтровать не нужные секции.

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

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


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

@buffy, Перепутал, такой метод был в длл для луа парсера ини файлов, в Сталкере такого нет.

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


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

Решил создать скриптовый диалог на переменных, а не на ХМL (раньше так не делал):

Скрытый текст

function snow_end ()
	function click()
		uiDia:GetHolder():start_stop_menu(uiDia, true) 
	end

	local uiDia = CUIScriptWnd()
	local stat = CUIStatic()
	stat:Init(0,0,1024,768) 
	stat:InitTexture("mod_nv\\to_sun")
	stat:Show(true) 
	stat:SetStretchTexture(true)
	
	local botton = CUI3tButton()
	botton:Init(500,200,200,50) 
	botton:InitTexture("ui_button_main01")

	uiDia:Register(stat)
	uiDia:Register(botton, "button_ok")
	uiDia:AddCallback("button_ok", ui_events.BUTTON_CLICKED, click, uiDia)
	
	level.start_stop_menu(uiDia, true) 
end

 

Запускается, появляется курсор, но нет текстур, экран прозрачный (без ничего)...

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


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

@lordmuzer, С кнопкой беда - не реагирует на нажатие...

Именно сама кнопка, она должна менять текстуры при наведении и нажатии,  в моем случае при наведении меняет, а при нажатии - нет...

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

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


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

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

AMK-Team.ru

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