Maks_K 0 Опубликовано 24 Сентября 2009 возможно в принципе создание перемешаюшегося рестриктора и возможноли его повесить на определенного НПС чтоб рестриктор перемешался вместе с НПС ? В принципе можно - просто рестриктор не преремещается а каждый раз создается заново, старый же уничтожается и отслеживаешь периодически положение npc, например через bind_stalker глянь был хороший пример - создание телепорта внутри уровня function actor_update(delta) local i,v,acter_poz,s -- Получим позицию актера (что-бы каждый раз не запрашивать) acter_poz = db.actor:position() -- Проверяем наши телепорты for i, v in pairs(teleport_binders) do s = v.parametrs local obj = level.object_by_id( i ) if obj ~= nil then -- Наш телепорт в онлайне проверяем дальше if s.teleporte ~= nil and s.teleporte ~= false then -- Телепорт запущен if ( time_global() <= s.time ) then -- Если время отведенное на показ спецэфектов -- прошло, производим телепортацию teleportate(s.poz_x,s.poz_y,s.poz_z) if s.rotate ~= nil then db.actor:set_actor_direction(s.rotate) end s.teleporte = false end return end -- Пороверим не забрел-ли актер в наш телепорт if (abs_comp(s.x, acter_poz.x)< v.parametrs.radius and abs_comp(s.z, acter_poz.z)< v.parametrs.radius and abs_comp(s.y, acter_poz.y)< v.parametrs.z_radius) then -- Актер в зоне действия телепорта, запустим телепорт s["teleporte"] = true s["time"] = time_global() + 500 -- Запускаем спецэфекты телепортации level.add_pp_effector ("teleport.ppe", 2006, false) end end end end function bind( obj ) obj:bind_object( restrictor_teleport( obj ) ) end ---------------------------------------------------------------------------------------------------- class "restrictor_teleport" ( object_binder ) function restrictor_teleport:__init(obj, char_ini) super(obj) end function restrictor_teleport:net_spawn(data) local char_ini = system_ini() -- Если это телепорт то занесем его в специальный список телепортов if self.teleport == true then teleport_binders[self.object:id()] = self -- Заполним таблицу параметров self["parametrs"] = {} if char_ini:line_exist(self.section, "radius") then self.parametrs["radius"] = tonumber(char_ini:r_string(self.section, "radius")) else self.parametrs["radius"] = 2 -- Дефолтный радиус по xy end if char_ini:line_exist(self.section, "z_radius") then self.parametrs["z_radius"] = tonumber(char_ini:r_string(self.section, "z_radius")) else self.parametrs["z_radius"] = self.parametrs["radius"] -- если радиус высоты не задан то задаем равным радиусу xy end -- Запомним позицию что-бы каждый раз не считать local s_obj = alife():object(self.object:id()) self.parametrs["x"] = tonumber(s_obj.position.x); self.parametrs["y"] = tonumber(s_obj.position.y); self.parametrs["z"] = tonumber(s_obj.position.z); -- Запомним координаты куда телепортимся self.parametrs["poz_x"] = tonumber(char_ini:r_string(self.section, "poz_x")) self.parametrs["poz_y"] = tonumber(char_ini:r_string(self.section, "poz_y")) self.parametrs["poz_z"] = tonumber(char_ini:r_string(self.section, "poz_z")) if char_ini:line_exist(self.section, "rotate") then self.parametrs["rotate"] = tonumber(char_ini:r_string(self.section, "rotate")) end end return true end function restrictor_teleport:net_destroy() -- Удаляем наш телепорт teleport_binders[self.object:id()] = nil self.parametrs = nil object_binder.net_destroy(self) end function restrictor_teleport:reload(section) local char_ini = system_ini() self.section = section -- Если это телепорт то if char_ini ~= nil and char_ini:line_exist(self.section, "teleport") then self["teleport"] = true end end Для постоянного обновления нужно прицепить функцию actor_update() к биндеру актера, для чего в файле bind_stalker.script найдем функцию: function actor_binder:update(delta) В ней найдем вызов обновления рестрикторов bind_restrictor.actor_update(delta) под которым вставим строку с вызовом нашей функции обновления: bind_mteleport.actor_update(delta) Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 27 Сентября 2009 max_max_08 Привет всем, подскажите как сделать вызов функции из меню, тоесть зашел в меню жмакул на опред. кнопку функция выполнилась. И еще при наличии предмета в инвертаре нужно вызвать функцию. посмотри ADVANCED CHEAT SPAWNER Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 23 Октября 2009 Leopard, если не ошибаюсь есть функция setweather Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 7 Ноября 2009 Gonarh, опрос: мне нужно сделать так чтобы переключение происходило при проверке двух функций чото типа func1 и func2, как должна выглядеть в таком случае строка? сделать func3 в которой проверяются func1 и func2 Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 15 Ноября 2009 Monnoroch, если не ошибаюсь проверка идет когда квест выдается - остальное потом уже через инфо поршни Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 16 Ноября 2009 сделай от противного function имя() if level.get_time_hours() <= 5 then return false else return true end end Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 30 Ноября 2009 Полтергейст, а не проще поставить проверку на nill ? Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 1 Декабря 2009 Ray, 1. Да глобальны 2. Важны для диалогов (их ветвление) 3. Квесты Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 13 Декабря 2009 (изменено) кровоSTALKER, осталась: else db.actor:give_info_portion("clock_activ") end в эту часть ветки if ты попадаешь только если db.actor РАВЕН nil и тогда нет смысла в db.actor:give_info_portion("clock_activ") должно быть что то вроде этого: if db.actor ~= nil then if db.actor:object("clock") ~= nil return true else db.actor:give_info_portion("clock_activ") -- это код сработает когда db.actor ~= nil И db.actor:object("clock") РАВЕН nil end else return false end Изменено 13 Декабря 2009 пользователем Maks_K Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 13 Декабря 2009 кровоSTALKER, у меня такая ошибка attempt to index global выскакивала когда делал ошибку в синтаксисе скрипта (лишняя скобка, не хватает где то "end" и т.д.) Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 18 Декабря 2009 Garry_Galler, 1. А зачем ты это делаешь через while разве if не подойдет? 2. А код у тебя где стоит в bindstalker.script ? - он же вызывается раз в несколько секунд может из за этого? Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 18 Декабря 2009 (изменено) if level.name() ~= "l07_military" then return else Судя по этому удаление будет происходить везде кроме l07_military Так и задумывалось? Изменено 18 Декабря 2009 пользователем Maks_K Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 24 Декабря 2009 max_max_08, кроме инфопрошней там может работать в диалоге precoginition функция - в общем диалог квеста в студию Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 29 Января 2010 а это не подойдет C++ class CServerList : CUIWindow { CServerList (); function SetPlayerName(string); function GetFont(); function SetWindowName(string); function Enable(boolean); function SetHeight(number); function SetFilters(SServerFilters&); function RefreshList(boolean); function SetSortFunc(string, boolean); function SetAutoDelete(boolean); function NetRadioChanged(boolean); function ShowServerInfo(); function RefreshQuick(); function AttachChild(CUIWindow*); function GetWidth() const; function SetWndPos(number, number); function Init(number, number, number, number); function Init(Frect*); function ConnectToSelected(); function DetachChild(CUIWindow*); function SetPPMode(); function WindowName(); function IsShown(); function SetWndSize(number, number); function SetWndRect(Frect); function SetWndRect(number, number, number, number); function GetHeight() const; function SetWidth(number); function Show(boolean); function IsEnabled(); function ResetPPMode(); function SetFont(CGameFont*); function IsAutoDelete(); }; Поделиться этим сообщением Ссылка на сообщение