Пользователей: 0
Гостей: 360
Всего: 360

» Подробно
» Сегодня


Привет, Гость!

Ник


Пароль


Запомнить?




» Добавить в избранное

» Сделать стартовой

Главная
Форум
Обзор игры
Мир Зоны
Файлы
Галерея
Разное






Форумы > Архив > Склад > Вопросы и ответы (по 05.06.10)

Страница 30 из 51Первая«27282930313233 »Последняя
Быстрый переход:


 

Автор Сообщение
Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 01:20 GMT3 часа #1247801   Split
karavan
Не отвечают - значит а) не хотят, иль б) не могут, иль в) не имеют возможности ...

Скриптами многое можно делать ... Но мне, порой лень писать ответы или думать как ответить, т.к. вижу, что в вопросах почему-то постоянно ленятся дать достаточную информацию и контекст для ответа.

Банально вспоминаем/смотрим "ваш любимый" 'bind_stalker.script' и в нем всем известную 'function actor_binder:update(delta)':
Код:
...
-- Апдейт прятание оружия игрока во время диалога
  if weapon_hide == true or self.object:is_talking() then
    if self.weapon_hide == false then
      self.object:hide_weapon()
      self.weapon_hide = true
    end
  else
    if self.weapon_hide == true then
      self.object:restore_weapon()
      self.weapon_hide = false
    end
  end
...

Смотрим в lua_help.script:
Код:
C++ class game_object {
...
  function hide_weapon();
...
т.е. функция доступна гейм-объектам, а не только актору.

Пробуем на подходящем неписе - работает ли ...

P.S. функция работает для всех слотов.
Что мешает перед ней проверить активен ли 2-й слот у непися и после деактивации всех слотов дать команду на активацию 2-го слота, если тот был активен?
Или попроще - проверить активен ли 1-й и дать команду деактивировать слоты, если именно 1- активен!
Включаем думалку и находим нужный вариант решения!


АнархОПанк
[1] Странник
Онлайн статус=0  Профиль    




Посты: 998
Откуда:
Занятие:
Возраст:

15-05-2010 01:13 GMT3 часа #1247802   Split
TheDoktor "Не могу открыть секцию *название секции*" т.е, у тя в игре прописан инклуд АКС74у, но самой секции нету. Нужно создать, или (как я понял) всунутый тобой АК надо переименовать в такое название.


TheDoktor
[20] Сталкер
Онлайн статус=0  Профиль    



Вернулся...

Посты: 3820
Откуда: Керчь
Занятие: MotoGP
Возраст: 37

26-10-2012
15-05-2010 01:19 GMT3 часа #1247809   Split
АнархОПанк А где искать? Это отдельный конфиг/скрипт, или это переименовывается где то в скрипте?


userbar
Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 01:29 GMT3 часа #1247811   Split
TheDoktor
Тебе лог пишет: Can't open section 'wpn_ak74u'
Т.е. ругается на невозможность открыть (отсутствует!) секция ...
Под секциями в кодах подразумевается конструкция
Код:
[wpn_ak74u]
и все что за ней - ищи почему эта секция у тебя исчезла! (или некорректно запрашивается, что в данном случае невозможно, т.к. она есть в исходниках).

Наиболее вероятный вариант, ты или файл "w_ak74u.ltx" исключил из обработки или из него удалил секцию ...


АнархОПанк
[1] Странник
Онлайн статус=0  Профиль    




Посты: 998
Откуда:
Занятие:
Возраст:

15-05-2010 01:30 GMT3 часа #1247813   Split
TheDoktor ты вставил АК из Арсенала, так? Открой конфиг и погляди его название в квадратных скобочках. Если оно какое-либо другое, то переименуй на ту секцию, на которую жалуется.

добавлено спустя 3 минут

TheDoktor смотри конфиг автомата АКСу, как я понял ты вставил его из арсенала, и в связи с этим идет твоя проблема. В скобочках название например [wpn_aks74u_sk1] (пример), и если ты этим конфигом заменил стандартный конфиг, то соответсвенно игра не может считать название которое в логе, поэтому смени то что в скобках на то, на что жалуется.

Сообщение было успешно отредактировано АнархОПанк (15-05-2010 01:30 GMT3 часа, назад)

karavan
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 940
Откуда:
Занятие:
Возраст:

08-05-2013
15-05-2010 01:30 GMT3 часа #1247815   Split
Artos Да ты прав. информации дал мало. Простите. Даю полную информацию:
Вот:

local snd_obj0 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_1]])
local snd_obj1 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_2]])
local snd_obj2 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_3]])
local snd_obj3 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_4]])

-- Активация/деактивация предмета в слоте 1
local device_active = false

function item_update(obj)
local item = db.actor:active_item()
if item and item:section() == "player_m" then
if not device_active then
device_active = true
First_track() -- не биндится -- проигрывание происходит только один раз
end
elseif device_active then
device_active = false
if snd_obj0:playing() then --\ если звук играет то вырубить его
snd_obj0:stop()
elseif snd_obj1:playing() then --\ если звук играет то вырубить его
snd_obj1:stop()
elseif snd_obj2:playing() then --\ если звук играет то вырубить его
snd_obj2:stop()
elseif snd_obj3:playing() then --\ если звук играет то вырубить его
snd_obj3:stop()
end
end
end

function First_track()
local F=math.random(1,4)
if F==1 then
snd_obj0:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
elseif F==2 then
snd_obj1:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
elseif F==3 then
snd_obj2:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
elseif F==4 then
snd_obj3:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
end
end





Теперь вопросы:
1) Нужно что бы после проигрывания первого трека оружие (условное) в слоте 1 спряталось. Как реализовать?
2) Или после проигрывания первого (случайного) трека играл второй (случайный) трек. Как реализовать этот вариант?
Пожалуйта помоги разобраться.


TheDoktor
[20] Сталкер
Онлайн статус=0  Профиль    



Вернулся...

Посты: 3820
Откуда: Керчь
Занятие: MotoGP
Возраст: 37

26-10-2012
15-05-2010 01:38 GMT3 часа #1247826   Split
АнархОПанк Artos спасибо! Это "вылечил". Но терь другой геморой вылез. Я уже боюсь лог показывать, совсем деревянным считать будете!


userbar
АнархОПанк
[1] Странник
Онлайн статус=0  Профиль    




Посты: 998
Откуда:
Занятие:
Возраст:

15-05-2010 01:39 GMT3 часа #1247827   Split
TheDoktor хах))) ДА не волнуйся, выкладывай...


TheDoktor
[20] Сталкер
Онлайн статус=0  Профиль    



Вернулся...

Посты: 3820
Откуда: Керчь
Занятие: MotoGP
Возраст: 37

26-10-2012
15-05-2010 01:47 GMT3 часа #1247834   Split
АнархОПанк вот, пожалуйста:

Expression : SG
Function : CRender::model_CreateParticles
File : E:\stalker\patch_1_0004\xr_3da\xrRender_R2\r2.cpp
Line : 330
Description : Particle effect or group doesn't exist
Arguments : weapons\arsenal_shells1

В weapons_ltx вообще нету этой строки arsenal_shells1. Наверное не там ищу?


userbar
АнархОПанк
[1] Странник
Онлайн статус=0  Профиль    




Посты: 998
Откуда:
Занятие:
Возраст:

15-05-2010 01:50 GMT3 часа #1247836   Split
TheDoktor Вобщем. Просто кинь мне твой конфиг автомата АКС74у. Заодно глянь в ПМ.

Кстате, угадал. Не там ищешь


Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 02:21 GMT3 часа #1247849   Split
karavan
Далеко НЕ полная информация.
Как я понял, "function item_update(obj)"
- вызывается неким скриптом. Однократно? Периодически? с каким периодом?
- Что за аргумент "obj"? Рудимент?
- Говорил ранее о некоей неписи, а тут фигурирует актор. Так и должно?
- 1-й трек - это по счету 1-й иои по названию (snd_obj0)?
- Всего (по кол-ву) проигрываться должно два трека? или больше.
- 2-й трек проигрывается после убирания оружия или по какому-то иному событию/моменту?

Судя по твоему примеру кода - полная какофония ...

Сообщение было успешно отредактировано Artos (15-05-2010 02:21 GMT3 часа, назад)

karavan
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 940
Откуда:
Занятие:
Возраст:

08-05-2013
15-05-2010 02:33 GMT3 часа #1247860   Split
Artos
Вобщем то да получается что не полная.
1)function item_update() -- стоит вызов в 'bind_stalker.script' в 'function actor_binder:update(delta)':
2)аргумент "obj" -- это просто были варианты с этим аргументом остался просто забыл удалить.
3)Убрать оружие нужно из первого слота у ГГ но после проигрывания первого (случайного) трека.
4) Проигрывание треков должно происходить постоянно при условии что оружие в первом слоте есть и оно активно.

Вобщем вот так. Еще раз напишу что нужно здеалть из этой какофонии.
1. Либо:
После проигрывания трека, который выбирается сучайным образом, нужно сделать оружие в первом слоте не активным (убрать оружие).

2. Либо:
После проигрывания трека, который выбирается сучайным образом, нужно включить следующий случайный трек. И так треки будут играть до безконечности пока юзер сам не решит убрать оружие (сделать неактивным).


И при первом и втором варинте решения условное оружие плеер должно оставаться в слоте 1 полюбому.

В моем корявом варианте выходит так, что при установке в слот 1 оружия "плеера" и при доставании его происходит проигрыш музыки, а при прятании оружия (плеер остается в слоте) музыка вырубается.
Если дождаться окончания трека (того который был выбран случайно), то следующий трек не начинает играть, а "плеер" активный.
Ну надеюсь теперь полная информация. :)


erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
15-05-2010 03:35 GMT3 часа #1247862   Split
karavan
для варианта № 2 я бы так сделал:
не факт что тут все работоспособно... но проверка уже за тобой
Код:
local music={
[1]="characters_voice\\human_01\bandit\\music\guitar_1",
[2]="characters_voice\\human_01\\bandit\music\guitar_2",
[3]="characters_voice\\human_01\\bandit\music\guitar_3",
[4]="characters_voice\\human_01\\bandit\music\guitar_4"
}

local device_active = "stop"

function item_update()
local snd_obj= nil
local item = db.actor:active_item()
-- если нет активной вещи либо есть, но не та что нужно, то дальше не выполняем
if not (item and item:section() == "player_m") then
device_active = "stop" -- на случай убирания предмета из слота - флаг в дефолт
return end
-- если таки есть и флаг в дефолтном состоянии то...
if device_active=="stop" then
-- вызываем функцию проигрыватель и заодно  получаем звуковой объект
snd_obj= this.First_track()
-- флаг переключаем дабы не вызывать функцию снова и снова
device_active = "start"
elseif device_active == "start" then
-- если флаг проигрыша трека включен,  но звуковой объект уже доиграл
if not snd_obj:playing() then
-- то  назначаем флагу дефолтное состояние  - блок с First_track()  снова становится доступным для активации
device_active="stop"
end
end
end

function First_track()
local F=math.random(1,4)
local snd_obj = sound_object(musik[F])
snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
return snd_obj
end


насчет оружия не понял - оно тут причем?
плеер у тебя это как я понял активный предмет в слоте один(пистолетном) - а причем здесь прятание оружия?

Сообщение было успешно отредактировано erlik (15-05-2010 03:35 GMT3 часа, назад)

Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 05:14 GMT3 часа #1247866   Split
karavan
Вот что-то типа:

--/ Активация/деактивация предмета в слоте 1
local bDeviceActive = false --/ флаг: девайс активен и в 1-м слоте
local oSnd = nil

function item_update() --/ вызывается из 'bind_stalker.actor_binder:update(delta)'
  local oActiveItem = db.actor:active_item()
  if oActiveItem then --/ в руках ГГ есть предмет
    if oActiveItem:section() == "player_m" then --/ активный предмет - девайс
      local oPistol = db.actor:item_in_slot(1) --/ проверка: предмета в 1-м слоте
      if oPistol and oPistol:id() == oActiveItem:id() then --/ в 1-м предмет и это девайс
        bDeviceActive = true --/ флаг: девайс - в 1-м и он активен (в руках)
        db.actor:hide_weapon() --/ убираем из рук оружие
      end
      Play_Random_Track() --/ вызываем зв.трек пока активен девайс
    end
  else --/ в руках нет предметов
    bDeviceActive = false --/ сброс флага активного девайса
    if oSnd and oSnd:playing() then --/ звук проигрывается
      oSnd:stop() --/ выключить
    end
  end
end

function Play_Random_Track()
  if not (oSnd and oSnd:playing()) then --/ проверка: звук НЕ проигрывается (ждем окочания)
    local iRnd = math.random(1,4) --/ рандомный индекс для трека
    sSound = "characters_voice\\human_01\\bandit\\music\\guitar_"..tostring(iRnd))
    oSnd = xr_sound.get_safe_sound_object(sSound)
    oSnd:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
  end
end

Сообщение было успешно отредактировано Artos (15-05-2010 05:14 GMT3 часа, назад)

karavan
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 940
Откуда:
Занятие:
Возраст:

08-05-2013
15-05-2010 03:37 GMT3 часа #1247869   Split
erlik Спасибо, проверил работает.

Artos А твой вариант почему то отказывается работать.


Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 03:59 GMT3 часа #1247870   Split
erlik
в твоем варианте (не вдавался в уже в алгоритм, т.к ничего не понял из фраз о плеере ...) есть оч.неприятных момент:

Условие: if not snd_obj:playing() then - приведет к вылету, т.к. после первого же вызова функции при наличии предмета будет взведен флаг в "start" и при последующем уже вызове (это же из биндера) если предмет не убран - неминуемо приведет к nil:playing() , т.к. уже не будет получен локальный snd_obj из выбора треков.

Коммент: "если флаг проигрыша трека включен, но звуковой объект уже доиграл" мне, непример, непонятет. Флаг взводится в любом случае, если есть "девайс" и был состоянии сброса. Каким образом у тебя доигрывание звука опрокидывает флаг - неясно?

Следует подстраховаться на этот случай:

if snd_obj and not snd_obj:playing() then

и в путях к звукам неполадки, пропушены обратные слеши ...
local music={
[1]="characters_voice\\human_01\\bandit\\music\\guitar_1",
[2]="characters_voice\\human_01\\bandit\\music\\guitar_2",
[3]="characters_voice\\human_01\\bandit\\music\\guitar_3",
[4]="characters_voice\\human_01\\bandit\\music\\guitar_4"
}


karavan
Даже не удивляюсь .
В твоем варианте и нерабочее - заработает и рабечее заглючит ...

Сообщение было успешно отредактировано Artos (15-05-2010 03:59 GMT3 часа, назад)

erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
15-05-2010 03:58 GMT3 часа #1247872   Split
Artos
да точно слеши забыл проставить как надо.
насчет nil:playing() - не совсем понял почему. но когда сам проверю - тогда ясно будет.


karavan
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 940
Откуда:
Занятие:
Возраст:

08-05-2013
15-05-2010 04:07 GMT3 часа #1247873   Split
Artos в варианте от erlikа игра запустилась и при доставании предмета начала играть музыка но при убирании не отключается.

Твой вариант мне не удалось запустить.


Gun12
[7] Выживший
Онлайн статус=0  Профиль    




Посты: 773
Откуда: СССР
Занятие: Всё, что заставляет напрягать серое вещество
Возраст: 51

15-05-2010 04:34 GMT3 часа #1247875   Split
erlik
При первом апдейте переменной snd_obj присвоится значение. Всё нормально.
Но на следующем же апдейте, строкой
Код:
local snd_obj= nil

значение ставится в NIL, а функция будет уже работать через
Код:
elseif device_active == "start" then

где в строке
Код:
if not snd_obj:playing() then

есть эта переменная, которой присвоено NIL
Примерно должно быть так :
Код:
local device_active = true
local snd_obj

function item_update()
    local item = db.actor:active_item()
    if not (item and item:section() == "player_m") then
        if snd_obj and snd_obj:playing() then
            snd_obj:stop()
        end
        return
    end
    if device_active then
        local F = math.random(1,4)
        snd_obj = sound_object([[characters_voice\human_01\bandit\music\guitar_]]..F)
        snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
        device_active = false
    else
        if not snd_obj:playing() then --тут уже NIL-а не будет
            device_active = true
        end
    end
end

Сообщение было успешно отредактировано Gun12 (15-05-2010 04:34 GMT3 часа, назад)

Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 04:44 GMT3 часа #1247876   Split
erlik
Коммент: "если флаг проигрыша трека включен, но звуковой объект уже доиграл" мне, например, непонятен.
Флаг взводится в любом случае, если есть "девайс" и был состоянии сброса.
Каким образом у тебя доигрывание звука опрокидывает флаг - неясно?

Как только флаг будет взведен, то при последующем апдейте и вызове этой функции (это десятки милисекунд) НЕ будет вызова "First_track()", а значит "local snd_obj= nil" останется "nil"

Соответствено при обработке второй ветки:
...
  local snd_obj= nil
...
  elseif device_active == "start" then
    if not snd_obj:playing() then
      device_active="stop"
    end
...
будет попытка вызова функции "playing()" применительно к nil-объекту => FATAL ERROR или зависание биндера.


karavan
Уже высказал мысль, о том, что помимо (не)исправного скрипта требуется еще нечто ...

"при доставании предмета начала играть музыка" - это уже нечто из другой оперы!

Сообщение было успешно отредактировано Artos (15-05-2010 04:44 GMT3 часа, назад)

karavan
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 940
Откуда:
Занятие:
Возраст:

08-05-2013
15-05-2010 04:37 GMT3 часа #1247885   Split
Artos И все таки хотелось бы понять почему твой вариант не хочет запускаться.


Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 05:20 GMT3 часа #1247886   Split
karavan
В варианте "from Artos" нехватает задержки, т.к. если будет команда убрать оружие и начать играть, то на следующем апдейте при условии, что звук еще не начал играть - пройдет команда на его выключение -> звук вообще не заиграет. Т.о. следует ввести паузу/задержку, чтобы 1-й трек заиграл.

Если коды НЕ содержат ошибок (можно хоть скриптовым чекером проверить), то ЗАПУСКАТЬСЯ скрипт/функция обязаны!
Другой вопрос, что если внутри есть ошибки алгоритма или ошибки в обработке/аргументах (как уже выше показано на примере NIL:playing() ), то функция может или зависать или приводить к вылетам.
Во-втором случае следует смотреть лог и секцию FATAL ERROR.
В-первом, вводить технологические строки вывода в лог, позволяющие отследить прохождение цикла обработки и корректности завершения функции.

P.S. В моем варианте ТАЖЕ ошибка, обнови скрипт (правка выделена оранжевым)
Я вначале присвоил oSnd первый трек, но потом "сэкономил" и ...
Но вариант все одно требует доработки, т.к. - оружие будет убрано и ... требуется обратная команда, чтобы его можно было достать.

Сообщение было успешно отредактировано Artos (15-05-2010 05:20 GMT3 часа, назад)

karavan
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 940
Откуда:
Занятие:
Возраст:

08-05-2013
15-05-2010 05:23 GMT3 часа #1247892   Split
Artos Чет всёравно не хочет работать.
Лог вот:

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: ...s\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:339: attempt to index global 'music_near' (a nil value)



Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 05:57 GMT3 часа #1247893   Split
karavan
О функции 'music_near' и ошибке вызова этой функции только ты нам поведать можешь ... тут не телепаты.

Да и ... как я понял тебе нужен именно вариант от erlik"а с подправленным кодом (вариант Gun12).
При чем тут убирание и 1-й слот - я тоже не понял.
Да и принудительное убирание тут врядли пройдет, т.к. если принудить убрать, то ... обратной функцией (restore_weapon() ) можно только принудить активировать, а это приводит к замкнутому циклу ...
В общем формулируй подробно что и как - тогда и придумать можно будет.

Сообщение было успешно отредактировано Artos (15-05-2010 05:57 GMT3 часа, назад)

karavan
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 940
Откуда:
Занятие:
Возраст:

08-05-2013
15-05-2010 06:35 GMT3 часа #1247896   Split
Artos
Оружие в Слоте 1 имеет два состояния активное (в руках и в слоте) и не активное (в слоте).
Вобщем так:
У ГГ есть итем "Плеер", который купил у Сидора. Этот плеер может вставляться в слот 1. При вставлении в слот 1 и при вытаскивании его происходит его активация (находится в руках) и начинает играть музыка. Если нажать кнопку (кнопку "2" на клавиатуре) и убрать его (сделать не активным но в слоте 1 оставить) музыка (должна) прекращать играть. Если же плеер всевремя активный (как вытащенное оружие), то музыка играет не прерывно.

1) В варианте erlik"а после покупки и вставлени в слот Плеера музыка играет не прерывно, но при желании убрать (перевести в не активное состояние) музыка продолжает играть.

2) В моем варианте происходит только одинарное проигрывание и затихший Плеер находится в руках у ГГ, а нужно что бы он убрался после проигрывания.

З.Ы.: Да мутно все как-то.

добавлено спустя 26 минут

Ура!!! Разобрался, спасибо всем!

Сообщение было успешно отредактировано karavan (15-05-2010 06:35 GMT3 часа, назад)

Artos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 4176
Откуда:
Занятие:
Возраст: 65

15-05-2010 06:52 GMT3 часа #1247897   Split
karavan
Наличие предмета из слота 1 в руках ГГ (true/false):
Код:
db.actor:active_slot() == 1

Собственно сам предмет в слоте 1 и проверка на "что это на предмет":
Код:
local oItemInSlot1 = db.actor:item_in_slot(1)
if oItemInSlot1 and oItemInSlot1:section() == "player_m" then
...

Проверка активного предмета:
Код:
local oActiveItem = db.actor:active_item()
if oActiveItem and oActiveItem:section() == "player_m" then
...


Т.о. комбинацией этих проверок всегда можно определить, есть ли нужный предмет у ГГ, активен ли?
И если есть и активен - играть. Если не активен, и тем более его нет - то и не играть.
Это уже сделано в варианте Gun12, скомпилировавшего из всего приемлемый для тебя код.
Вот вариант, который обязан работать и немного экономит ресурсы, хотя и реакция запаздывания при доставнии/убирании может быть 1 сек:
Код:
local snd_stop = true
local snd_obj
local upd_timer = 0

function item_update()
    if time_global() < upd_timer then return end
    upd_timer = time_global() + 1000
    local item = db.actor:active_item()
    if not (item and item:section() == "player_m") then
        if snd_obj and snd_obj:playing() then
            snd_obj:stop()
        end
        return
    end
    if snd_stop then
        snd_obj = sound_object("characters_voice\\human_01\\bandit\\music\\guitar_"..tostring(math.random(1,4)))
        snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
        snd_stop = false
    else
        if snd_obj and not snd_obj:playing() then
            snd_stop = true
        end
    end
end


" а нужно что бы он убрался после проигрывания" - а вот это ИМХО глупость! С каких это пор предмет закончив играть самоубирается из рук игрока??? На то у игрока и своя голова, чтобы самому это (не)делать!

Сообщение было успешно отредактировано Artos (15-05-2010 06:52 GMT3 часа, назад)

Николай ФеНиКс
[10] Житель
Онлайн статус=0  Профиль    




Посты: 1493
Откуда: От Туда!
Занятие: Мотоциклы =)
Возраст: 29

15-01-2011
15-05-2010 13:07 GMT3 часа #1247964   Split
Вопрос №1
возможно ли заспавнить огромный камень??? (таковые в объектах есть, но какой им конфиг прописывать??)

Вопрос №2
возможно ли заспавнить, если не камень, то что-нибудь другое на высоте 5 метров от земли?
и при приближение к рестрикотору этот объект падал?
ну или проще задать точку спавна выше на 5 метров от земли и при входе в рестрикотор объект падал..
как это осуществить???
и желательно чтобы он мог скрыть под собой тело...
Обосную:
Я хочу заспавнить НПС в некой точке А и там же заспавнить рестрикотор, и при входе ГГ в рестрикотор заспавненый предмет на высоте 5 метров, упал и придавил НПС в точке А.


userbar
Gun12
[7] Выживший
Онлайн статус=0  Профиль    




Посты: 773
Откуда: СССР
Занятие: Всё, что заставляет напрягать серое вещество
Возраст: 51

15-05-2010 13:10 GMT3 часа #1247967   Split
Artos
Цитата
..tostring(math.random(1,4)

Я бы не стал, без необходимости, использовать tostring и tonumber.
(Хотя никто и не запрещает)
Просто знаю, что Lua сама прекрасно преобразовывает типы "строка"/"число" при проведении , соответственно, конкатенации и математических операций.
Можно убедиться :
Код:
local str = "5"
local num = 3
news_manager.send_tip(db.actor, "CONCAT -> "..str..num)
news_manager.send_tip(db.actor, "PLUS -> "..str + num)


Germess
[1] Странник
Онлайн статус=0  Профиль    




Посты: 145
Откуда: Temirtau
Занятие: Работаю над ICE modом
Возраст: 29

31-10-2010
15-05-2010 13:22 GMT3 часа #1247974   Split
Можно ли, а если можно, то как, сделать заместо минимапы просто компас.?


erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
15-05-2010 14:10 GMT3 часа #1247980   Split
Gun12
Спасибо за правки скрипта
Не подумал насчет nil - хотя изначально и выносил этот параметр за пределы скрипта - а потом зачем то все-так сунул его в тело функции...только вот вопрос - а почему у karavan'a не вылетело сразу?
Николай ФеНиКс
А в какой папке есть ogf модель камня? Просто интересно - не находил...

скрипт спавна предмета на высоте (с зависанием его в воздухе) я выкладывал - смотри пред. страницы.
Если тебе нужно просто заспавнить предмет на высоте (с его падением)- добавляешь к координате y любое нужное значение. Сам не тестил - но должно получиться что предмет как бы падает с неба . Хотя черт его знает на самом деле как он будет падать (скорость, и пр. )
Если надо чтобы он сначала висел, а потом упал - нужен тот скрипт - а затем нужен будет второй - который изменит один флаг в состоянии объекта чтобы тот смог упасть.

насчет конфига - попробуй использовать обычный (с классом II_ATTCH - если скрипт не будет предмет держать в воздухе - значит придется другой класс использовать)

23 страница

Сообщение было успешно отредактировано erlik (15-05-2010 14:10 GMT3 часа, назад)



Форумы > Архив > Склад > Вопросы и ответы (по 05.06.10)

Страница 30 из 51Первая«27282930313233 »Последняя


Эта тема закрыта, публикация новых сообщений недоступна.



???????@Mail.ru Rambler's Top100
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2024 «Stalker-Portal.ru»