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

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

Короче, action_camper_patrol надо делить на часть, работающую при наличии врагов, и часть, работающую без врагов.

Иначе будет как минимум одна ситуация, где непись таки висит.

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

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

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


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 - ничего недал?

Ссылка на комментарий
4 hours ago, Graff46 said:

Как мне получить статус диалога (окна) (активен или нет)

Используя IsShown()? Я вон там вижу даже метод, который этот метод использует. 

 

4 hours ago, Graff46 said:

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

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

 

4 hours ago, Graff46 said:

перехвать в методе __finalize - ничего недал?

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

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

@Graff46, сделай локальную переменную, например, wnd, и потом в __init: wnd = self, а затем в Hide: wnd = nil. И проверяй по этой переменной.

  • Нравится 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

 

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

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

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

 

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

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

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

Ссылка на комментарий
1 hour ago, Graff46 said:

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

Почему она должна стать nil? Есть код, который присваивает nil той переменной, которой было присвоено возвращенное значение? 

 

1 hour ago, Graff46 said:

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

finalize вызывается, когда уборщик мусора удаляет этот объект. А удаляет он его, когда на него больше никто не ссылается. 

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

А вот скажите, создание переходов через скрипт в ЗП, чем-то отличается от ТЧовского метода? Надо знать какие-то нюансы? Просто мне надо переход, открывающийся в N-ный момент, после диалога и выполнения скрипта. 

Оц тоц перевертоц, бабушка здорова,
Оц тоц перевертоц кушает компот.
Оц тоц перевертоц и мечтает снова
Оц тоц перевертоц пережить налет!

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

@Shennondoah, структура нетпакета у перехода в зп такая же, как и в тч, так что практически ничем не отличается.

  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

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

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

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
Ссылка на комментарий

@Graff46, Братишка, а не проще сделать класс обычной машины, с коротенькой логикой и путями, толкнул и та до места прет? Зачем так извращаться? Твое конечно дело, но проще всё же... 

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

Оц тоц перевертоц, бабушка здорова,
Оц тоц перевертоц кушает компот.
Оц тоц перевертоц и мечтает снова
Оц тоц перевертоц пережить налет!

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

Товарищи! Помогите, нужна функция проверки при снятии костюма и функция при попадании в рюкзак. Не в целом к ГГ а именно в рюкзак. 

Ссылка на комментарий
22 часа назад, karavan сказал:

при снятии костюма и функция при попадании в рюкзак.

при попадании в рюкзак - кэллбэк on_item_take в биндере актера или мотиваторе НПСов. Для снятия костюма кэллбэк не предусмотрен(в чистой ТЧ), по этому только костыли с отслеживанием на апдейте содержимого в соответствующем слоте.

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

Ребятки, помогите советом! Имеется наработка обмена с НПС. Работает так: скриптовый диалог, где НПС предлагает рандомный итем из таблицы в скрипте. То есть по факту НПС предмет не имеет. Он просто передастся нам через скрипт. Так вот, хочу спросить у вас (поиск не дал результатов), как проверить инвентарь НПС? Например в диалоге буду спрашивать - есть аптечка? Будет выполнена проверка инвентаря НПС на наличие аптечки. Если такая есть, то НПС ответит - есть, хочу за нее (рандомный итем из моего рюкзака). Вот нужно узнать как именно проверить есть ли определенный итем у НПС. Есть идеи? 

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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