Struck
ты же говорил что разобрался как делать меню для итемса.
Делай как в моем меню - только дай кнопкам свои имена в xml секции, сделай кол-во кнопок столько сколько тебе надо (координаты для них нетрудно посчитать), и в скрипте интерфейса также сделай нужное кол-во кнопок - дай кнопкам свои скриптовые имена, и повесь на них свои скрипты. И все.
or у меня вроде как на своем месте стоит, так как производится проверка объектов: сталкеры-враги "либо" монстры - скрипт будет срабатывать на всех - и когда они все вместе скопом и по отдельности.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur
Вчера покопался в ph_car и car, но какой метод отвечает за проверку "эктор в авто" так и не понял.
в lua help в классе C++ class CCar много функций, но какая что делает понятно смутно.
вот это интересно что - причем закомментировано - переводится типа сделать объект владельцем (авто) self.car_holder = self.object.get_current_holder()
есть функция старта авто
function action_car:start_car() - может ее что ли использовать для момента активации скрипта...
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Я месяца два назад работал с тачками. Остались некоторые справки. Смотри под спойлером:
C++ class CCar : CGameObject,holder {
const eWpnActivate = 3; --активация башни 'Action(CCar.eWpnActivate, number)' (0\1)
const eWpnAutoFire = 5; --автоматическая стрельба 'Action(CCar.eWpnAutoFire, number)' (0\1)
const eWpnDesiredDir = 1; --не фурычит
const eWpnDesiredPos = 2; --точка прострела 'SetParam(CCar.eWpnDesiredPos, vector)' (position)
const eWpnFire = 4; --открыть\прекратить огонь 'Action(CCar.eWpnFire, number)' (0\1)
const eWpnToDefaultDir = 6; --вернуть дуло в дефолтовую позицию 'Action(CCar.eWpnToDefaultDir, number)' (0\1)
CCar ();
function _construct();
function GetfHealth() const; --какое текущее здоровье у тачки? (0...1)
function CurrentVel();
function getVisible() const;
function net_Spawn(cse_abstract*);
function SetParam(number, vector); --установка координат, для точки прострела. Где, number = const(2)
function net_Export(net_packet&);
function Visual();
function IsObjectVisible(game_object*); --находится ли объект в зоне видимости тачки? (true\false)
function SetExplodeTime(number);
function net_Import(net_packet&);
function HasWeapon();
function SetfHealth(number); --установить текущее здоровье (0...1)
function engaged();
function ExplodeTime();
function FireDirDiff();
function CarExplode(); --взорвать тачку
function CanHit();
function getEnabled() const;
function Action(number1, number2); --работы с башней. Где, number1 = const(3...6); number2 = 0\1
function use(CGameObject*); -- (вероятно) сделать юзающимся для указанного объекта (но при спавне через скрипт, юзается всегда.
--move.on -завести двигатель
--move.fwd -начать движение вперёд
--move.off -заглушить двигатель
--move.back -начать движение назад
--move.handbrake -остановить машину
--move.left -повернуть руль на лево
--move.right -повернуть руль на право
--move.line -повернуть руль прямо
obj:get_car():Action(CCar.eWpnActivate, 1) --активация башню (1\0)
obj:get_car():SetParam(CCar.eWpnDesiredPos, vector*) --повернуть башню в сторону вектора(позиция)
obj:get_car():Action(CCar.eWpnAutoFire, 1) --автоматическая стрельба (1\0) (чёта всё время шмаляет)
obj:get_car():Action(CCar.eWpnFire, 1) --открыть огонь (1); прекратить огонь (0)
--наработки
--синхронный поворот дула с камерой актора
Struck
не понял твой вопрос. Просто пишешь туда скока хочешь функций - (вместо моих) - и уже их имена ставишь на вызов в файл интерфейса меню - там где все эти function ui_set_pult:set_pult_ () ui_set_pult - это имя созданного мной класса. set_pult_ x() -имя активируемой кнопки (или наверно правильнее имя функции)
а в теле этих функций находятся уже имена вызываемых скриптов.
добавлено спустя 3 минут
singapur22
спасибо - вот найти бы вариант lua help с такими же комментариями на все функции :-)
(тутор от разрабов из билда 1935 - не совсем то)
но это - фантастика...
отредактировал(а) erlik: 08-10-2009 16:17 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Есть ещё справка по вертикам, более определённая, так как с ними занимался в плотную.
--obj:get_helicopter() --ОПЕРАЦИИ С ВЕРТОЛЁТАМИ
--проверка
property m_dead; --уничтожен ли вертолёт?
property m_exploded; --взорван ли вертолёт?
property m_flame_started; --горит ли вертолёт?
property m_light_started; --включен ли прожектор?
--проверка\установка
property m_max_mgun_dist; --макс расстояние при котором можно использовать пулемёт (в метрах)
property m_max_rocket_dist; --макс расстояние при котором можно использовать ракеты (в метрах)
property m_min_mgun_dist; --мин расстояние при котором можно использовать пулемёт (в метрах)
property m_min_rocket_dist; --мин расстояние при котором можно использовать ракеты (в метрах)
property m_syncronize_rocket; --пускать ракеты парами или по очереди (лев-прав-лев-прав) (true\false)
property m_time_between_rocket_attack; --задержка между пусками ракет (мил-сек.)
property m_use_mgun_on_attack; --использовать пулемёт при атаке (true\false)
property m_use_rocket_on_attack; --использовать ракеты при атаке (true\false)
--методы
function TurnEngineSound(boolean); --включить\отключить озвучку мотора!
function TurnLighting(boolean); --включить\отключить свет прожектора!
function GetMaxVelocity(); --какая максимальная скорость?
function GetfHealth() const; --какое здоровье у вертолёта?
function SetSpeedInDestPoint(number); --скорость входа в поинт (оптимально = 30)!
function GetMovementState();
function SetOnPointRangeDist(number); --скорость выхода из поинта (оптимально = 30)!
function SetFireTrailLength(number);
function GetRealAltitude();
function LookAtPoint(vector, boolean); --повернуть вертолёт к указанной координате (false = отменить поворот)!
function GetOnPointRangeDist();
function GoPatrolByPatrolPath(string, number); --подключить координаты перемещения(path, start_point)!
function GetCurrVelocity();
function Explode(); --взорвать вертолёт!
function SetBarrelDirTolerance(number);
function GetBodyState();
function GetSpeedInDestPoint(number);
function isVisible(game_object*); --видит ли вертолёт указанный объект?
function Die(); --уронить вертолёт!
function UseFireTrail();
function UseFireTrail(boolean);
function SetDestPosition(vector*); --пролететь в указанную позицию!
function GoPatrolByRoundPath(vector, number, boolean); --полёт по кругу, вокруг указанной координаты(координата, радиус,направление). Где: радиус -в метрах; направление -true=против часовой,false=по часовой
function SetMaxVelocity(number); --максимальная скорость(оптимально = 30)!
function SetfHealth(number); --установить текущее здоровье (0...1)
function StartFlame(); --воспламенить вертолёт
function GetState();
function GetDistanceToDestPosition(); --какое растояние до следующего поинта?
function GetHuntState();
function GetCurrVelocityVec();
function GetSafeAltitude();
function ClearEnemy(); --отменить обстрел!
function SetEnemy(game_object*); --обстрелять указанный объект!
function SetEnemy(vector*); --обстрелять указанную позицию!
--где,
-- name_path -имя пути из файла all.spawn
-- point_start -номер стартового поинта
-- (пробегается по всем поинтам указанного пути, начиная от указанного стартового поинта)
--------------------------------------------------------
--обстрелять указанную позицию (вертолёт)
obj:get_helicopter():SetEnemy(vector*)
--------------------------------------------------------
--обстрелять указанный объект (вертолёт)
--------------------------------------------------------
--отыгрывание звуков от вертолёта
heli_snd.play_snd( obj, heli_snd.snd_hit, 2 )
--Где:
--heli_snd -файл с настройками озвучки
--obj -клиентский объект
--snd_hit -таблица звуков из файла heli_snd
--2 -приоритет среди других озвучек
Я думаю это тоже может пригодиться. Определял так же при спавне через скрипт.
добавлено спустя 53 секунд
вот нашел у себя в доках такую запись
monstr:set_invisible(true)
monstr:set_invisible(false)
это для подмены одной модельки кровососа (видимой) на другую (невидимую)?
erlik Похоже на то.
отредактировал(а) singapur22: 08-10-2009 16:25 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck Смотри внимательней. Метод перелёта в указанную координату. Устанавливай отслеживание координат нужного объекта, и отслеживание дистанции до него, чтобы не подлетал слишком близко, иначе потеряет из виду.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck Это называется скриптовый таймер. И должно выглядеть так:
local start = false
local fastcall = false
local tim = 0
function start_main_timer()
start = true
tim = time_global()
if not fastcall then
db.actor:set_fastcall(update_timer, db.actor)
fastcall = true
end
end
function update_timer()
if start then
this.main_timer()
end
end
function main_timer()
if time_global() - tim > 10000 then
--твои действия
start = false
end
end
Где, 10000 = 10 секунд реального времени.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck Без разницы, в каком файле ты его создашь. Хоть в новом, хоть в уже имеющемся. 10000 --это время, через которое выполнятся твои прописанные действия, с момента запуска таймера. Тоесть, через 10 секунд. Запуск таймера производится вызовом функции start_main_timer().
Если из этого же файла, то так:
this.start_main_timer()
Если из другого, то так:
имя_файла.start_main_timer()
Если из диалога, то так:
имя_файла.start_main_timer
Если из логики, то скрипт нужно вписывать в файле xr_effects.script. И вызывать его так:
%=start_main_timer%
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck Вот полноценный пример запуска скрипта, при использовании предмета:
local note = nil
--отслеживание использования Ноутбука
function open_notebook()
if note and type(note) == 'number' then
if not level.object_by_id( note ) then
--запускаем скрипт при использовании предмета
alife():create('notebook', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end
note = nil
end
if note and type(note) == 'userdata' then
note = note:id()
else
note = nil
end
end
function drop_notebook(obj)
if obj:section() == 'notebook' then
note = obj --если Ноутбук, то запомнить его userdata
end
end
Вызов функции drop_notebook(obj) нужно вписать в функцию дропа, файла bind_stalker.script
При этом функция open_notebook() требует постоянного апдейта.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Слушай Плиз я обыскался,но не чё не нашёл...Мне нужен скрипт отключки ГГ ...Нет...Скрипт проигрывания Видео!
В лабах После Опр-ого момента воспроизводится Видео так? Так дак вот где этот скрипт в xr_effects.script я искал,но не нашёл.
Ткни носом, а:-G
--[[
Дать сталкеру небольшой пинок. Например чтоб скинуть его с возвышения.
параметры: actor, npc, p[direction,bone,power,impulse,reverse=false]
1. direction - если строка, то считается, что это имя пути и в сторону
первой точки производится толчек. Если же это число, то оно
рассматривается как story_id персонажа от которого должен поступить хит.
2. bone - строка. Имя кости, по которой наносится удар.
3. power - сила удара
4. impulse - импульс
5. reverse (true/false) - изменение направления удара. по умолчанию false
--]]
function hit_npc(actor, npc, p)
local h = hit()
local rev = p[5] and p[5] == 'true'
h.draftsman = npc
h.type = hit.wound
if type(p[1]) == 'number' then
local hitter = level_object_by_sid(p[1])
if not hitter then return end
if rev then
h.draftsman = hitter
h.direction = hitter:position():sub(npc:position())
else
h.direction = npc:position():sub(hitter:position())
end
else
if rev then
h.draftsman = nil
h.direction = npc:position():sub(patrol(p[1]):point(0))
else
h.direction = patrol(p[1]):point(0):sub(npc:position())
end
end
h:bone(p[2])
h.power = p[3]
h.impulse = p[4]
--printf("HIT EFFECT: (%s, %s,%d,%d) health(%s)", npc:name(), p[2], h.power, h.impulse, npc.health)
npc:hit(h)
end
--[[
Можно применить?
И вот:
-- Принудительное усыпание игрока на радаре.
function force_actor_sleep(npc)
db.actor:actor_sleep(24, 0)
end
Можно это сделать на кордоне?
И как?
извини что уж достали тебя этими таймерами...но вот с ними такие заморочки...
никак не могу сделать как надо
что в этой схеме не так?
флагов у меня пять , локалка time одна (было тож пять, но решил что одной довольно)
вся схема апдейтится постоянно
elseif flag2 == true and time_1 == 0 then
time_1 = time_global() + 3000
if time_1 <= time_global() then
действие
flag2 = false
flag3 = true
time_1 = 0
elseif flag3 == true and time_1 == 0 then
time_1 = time_global() + 6000
if time_1 <= time_global() then
действие
flag3 = false
flag4 = true
time_1 = 0
уже кучу вариантов делал, а все не то - начальные два действия схемы идут нормально - а дальше с этими флагами 2 , 3, 4, 5 - нет.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
function play_snd(actor, npc, p)
if p[1] then
local snd_obj = xr_sound.get_safe_sound_object(p[1])
--snd_obj:play(actor, p[2] or 0, sound_object.s2d)
snd_obj:play_no_feedback(actor, sound_object.s2d, p[2] or 0, vector(), 1.0)
end
end
как задать свои звуки?(или это где-то используется?)
добавлено спустя 1 минуту
erlik
:lok5)
я что-то там не чё не вижу!
отредактировал(а) Николай ФеНиКс: 08-10-2009 19:11 GMT3 час.
Николай ФеНиКс например функция start_yantar_dream(actor, npc), файла xr_effects.script. Производит запуск туториала, в котором и настроен видео ролик.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
в следующий раз когда захочешь найти что-то связанное с эффектами и то что запускается через рестрикторы (или логику npc ) - сразу лезь xr_effects.
Для Янтаря - смотри раздел Функции для Янтаря - там все: запуск усыпания эктора, его перенос на другую точку, запуск видео (называется вроде - сейчас точно не помню - "yantar_dream" вроде), запуск постэффектов, анимаций камеры, остановка всего этого по таймеру.
Все эта ботва запускается на вход в рестриктор +таймер в рестрикторе. логику янтaрского рестриктора смотри в папке config\scripts\yan
Николай ФеНиКс
заспавни рестриктор на кордоне и все эффекты какие хочешь пропиши в его логике.
кроме активации функции переноса эктора с одной точки в другую - yan_actor_sleep.
если хочешь перемещение эктора - то напиши свою функцию телепорта - она элементарная
function teleportate(x,y,z)
local a = vector()
a.x = 347.524597
a.y = 26.15175247
a.z = -31.34478378
db.actor:set_actor_position(a)
end
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.