PainkilleR

Фан-клуб

ОПРОС

Оцените этот сайт

menuleft3
menuleft4

Помощь с Lua-скриптами

В чём ошибка?

Как правильно?
[signature]
--------------------
{signature}
[/signature]
[fast]Цитировать[/fast] Жалоба
#0
Havcom
Мастера
  • публикаций
  • комментариев
Astaroth, а ты знаешь, почему в этом месте происходит сбой карты?
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
Havcom, В скриптах уровня используется скрипт 'Player.PlayerSpeed' и в скрипте карты таро тоже, может поэтому какая-та не состыковка.
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Для того, чтобы решить проблему, нужно сперва понять, почему происходит сбой конкретно на этом уровне. Ты правильно указал на функцию SetPlayerSpeed(Player.PlayerSpeed), но так и не сказал, как можно решить проблему, просто предложив сперва снести всю функцию Update. Тогда бы потерялась возможность тормозить игрока, при попадании в зону болота, что не есть хорошо. Нельзя что-то исправлять, удаляя при этом что-то, не относящееся к проблеме. Так можно и пол игры удалить. DD
Итак, чтобы ты всё понял, я начну с самого начала. Скорость игрока отпределяется функцией движка SetPlayerSpeed(), а задаётся она - переменной Player.PlayerSpeed.
Карта таро вносит изменения в эту функцию:
self.SpeedFactor = 1.5
local speed, jump = GetPlayerSpeed()
SetPlayerSpeed( Player.PlayerSpeed * self.SpeedFactor, jump / self.SpeedFactor )

Переменная SpeedFactor умножает скорость игрока на указанное число и делит высоту прыжка, так как при большей скорости передвижения увеличивается высота прыжка. После активации карты, состав функции SetPlayerSpeed() изменяется и игрок начинает бегать быстрее. После окончания времени карт, в дело вступает функция Game:ResetGoldenCardsVars(), которая сбрасывает изменённую скорость игрока по умолчанию вот этой функцией:
if self.SpeedFactor ~= 1 then
local speed, jump = GetPlayerSpeed()
if Player then SetPlayerSpeed( Player.PlayerSpeed, jump * self.SpeedFactor ) end
end

Если переменная self.SpeedFactor не равна единице, а на момент применения карты она равна 1.5, тогда состав функции SetPlayerSpeed() изменяется на то, что указано в условии, т.е. нормальная скорость передвижения. Так сбрасывается эффект этой карты по истечени времени и чуть ниже устанавливается новое значение для self.SpeedFactor, которое равно единице.

Далее, для болота у нас написана особая функция, которая оказывает влияние на скорость:
function o:Update()
--
if Player and Player.Health > 0 then
SetPlayerSpeed(Player.PlayerSpeed)
local dist = Dist2D(-900,100,Player._groundx,Player._groundz)
if (Player._groundy < -27.0 and dist < 400) and ENTITY.PO_IsEnabled(Player._Entity) then
SetPlayerSpeed(Player.PlayerSpeed * self.playerSlowDown)
--
end
end
end

Для начала стоит рассказать о функции Update, как я понял, ты не знаешь, что она делает? Ответ кроется в самом названии. Она постоянно обновляет значения, которые в ней заданы. Примерно с такой же скоростью, с какой стреляет миниган. Добавь, например, в Update строку с воспроизведением какого-нить, очень короткого звука и ты услышишь, с какой скоростью этот звук воспроизводится!
Ну и после этого тебе наверно должно стать понятно, почему карта тут не работает. Применяя её, значение функции SetPlayerSpeed() изменяется, как написано в Game.lua для этой карты и прям в то же мгновение заменяется тем, что покрашено красным чуть выше, поскольку функция Update постоянно обновляется. Таким образом скорость не меняется. А что надо сделать, чтобы решить проблему, так это просто.
SetPlayerSpeed(Player.PlayerSpeed* Game.SpeedFactor)
При использовании карты задействуется множитель Game.SpeedFactor и пока карта активна, его значение равно 1.5. Мы просто допишем множитель для функции update, чтобы он тоже учитивался в ней, таким образом он будет влиять на изменение скорости.
Вот собсно и всё.
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
Havcom, Афигеть, ответ у меня под носом был, я писал в скрипте вот так SetPlayerSpeed(Player.PlayerSpeed * self.SpeedFactor) поэтому и не работало.
Спасибо за разъяснение, теперь знаю что такое Update)
Цитировать Жалоба
Painkiller-Ivan
Посетители +
  • публикаций
  • комментариев
Исправили, проверили, работает карта в Приюте???
Цитировать Жалоба
4044410
Посетители +
  • публикаций
  • комментариев
Цитата Painkiller-ivan ()
Исправили, проверили, работает карта в Приюте???
Painkiller-ivan в скриптах уровня была прописана команда на замедление ходьбы в воде,поэтому она и неработала
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
Painkiller-ivan, Да
4044410, Ты сам понял почему карта не работала? Не из-за воды, а из-за скрипта в который надо было добавить одну функцию, если не знаешь то не надо писать.
Цитировать Жалоба
4044410
Посетители +
  • публикаций
  • комментариев
Цитата Astaroth ()
Не из-за воды, а из-за скрипта в который надо было добавить одну функцию, если не знаешь то не надо писать.
Astaroth я мож щас не прав буду-но я не писал что из-за воды-я написал что это прописано в скриптах?[spoiler]uSpoilerg0Xnyvl
g0Xnyv'
g0Xnyv'
g0Xnyv'
g0Xnyv')).val('[\–] Мои слова');$(
g0Xnyv'
g0Xnyv'
g0Xnyv')).val('[+] Мои слова');$(
g0Xnyv'[+] Мои слова
Цитата 4044410 ()
Painkiller-ivan в скриптах уровня была прописана команда на замедление ходьбы в воде
[/spoiler]=Мои слова
Цитировать Жалоба
Painkiller-Ivan
Посетители +
  • публикаций
  • комментариев
Astaroth, хирургия делает своё дело! Только бы в теме ещё написали координаты этого скрипта, чтобы вставить в скрипт уровня. Сам хочу убедиться.
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
Цитата 4044410 ()
я мож щас не прав буду
Так и есть, основной недочёт был Player.PlayerSpeed, а не замедление в воде.

Painkiller-ivan, В   Data/Levels/C6L1_Orphanage/C6L1_Orphanage.lua   Но если у тебя этого нету, то распакуй Levels.pak.
Цитировать Жалоба
Painkiller-Ivan
Посетители +
  • публикаций
  • комментариев
Нашёл lua. , что вписывать?
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
Painkiller-ivan,
?
Код
function o:Update()
       CLevel.Update(self)
       if Player and Player.Health > 0 then
       SetPlayerSpeed( Player.PlayerSpeed* Game.SpeedFactor )
          local dist = Dist2D(-900,100,Player._groundx,Player._groundz)
          --Game:Print(dist.." "..Player._groundy)
          if (Player._groundy < -27.0 and dist < 400) and ENTITY.PO_IsEnabled(Player._Entity) then
             SetPlayerSpeed(Player.PlayerSpeed * self.playerSlowDown)

                if self._lastTimeDamage + 20 < Game.currentTime then
                    self._lastTimeDamage = Game.currentTime
                    Player:OnDamage(self.swampDamage)
                end
А именно       SetPlayerSpeed( Player.PlayerSpeed* Game.SpeedFactor )
Цитировать Жалоба
Painkiller-Ivan
Посетители +
  • публикаций
  • комментариев
Окей, щас решу.

Добавлено (11.02.2014, 15:53)
---------------------------------------------
Заработала Скорость.

P.S. Уже никакой беды нет. В порядке.
Цитировать Жалоба
UnSlayeRLBarsik
Модераторы
  • публикаций
  • комментариев
Havcom, у себя в моде я исправил эту ошибку таким же образом, понял что и как, но исправил не из-за карты, а бега, персонаж только ходил и бежать никак нельзя было (ну все знают что у меня в моде персонаж и ходит и бегает).
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Окай, в следующий раз будем проверять твои знания Lua посредством очередного вопроса.
Цитировать Жалоба
UnSlayeRLBarsik
Модераторы
  • публикаций
  • комментариев
Havcom, вопросы-то у меня есть, но на них никто не ответит мне увы, сам догадаешься и сделаешь быстрее (как с оружием было).
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Ну так ты напиши, может кто и ответит.
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Дарова. Кто знает, как сделать, чтобы на уровне босс рядом шлялся? Как в HD, или в Релоаде.

Добавлено (28.04.2014, 14:16)
---------------------------------------------
Как новые карты Таро из Овердос (Штурм, Шаги Грома, Адская броня, Азарт, и, которая +5 к здоровью прибавляет) переместить в Оригинал?

Цитировать Жалоба
Администраторы
  • публикаций
  • комментариев
TranZit, тебе зачем это делать? Для каждой карты написан скрипт в файле Game.lua и в Magicboard.lua назначаешь место и текстуру карты(точно не помню)
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
Lexa_2012, Чтобы ещё карты из передоза работали там надо и в CActor.lua прописывать
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Цитата Lexa_2012 ()
TranZit, тебе зачем это делать? Для каждой карты написан скрипт в файле Game.lua и в Magicboard.lua назначаешь место и текстуру карты(точно не помню)
Просто увеличил слоты для карт на доске, и хотел проверить, но не знаю, как перенести карты :(
Цитировать Жалоба
nonnamed
Посетители +
  • публикаций
  • комментариев
Пожалуйста помогите разобраться в level.lua
Как правильно расположить уровни?
Все обьясните.ВАЖНО!!!!
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Цитата nonnamed ()
Пожалуйста помогите разобраться в level.lua Как правильно расположить уровни?
Все обьясните.ВАЖНО!!!!
чувак, ты не представляешь, как же эта легко. погоди две минуты,и я тебе обьясню.
Цитировать Жалоба
nonnamed
Посетители +
  • публикаций
  • комментариев
TranZit, Обьяснишь мне все?
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Так вот. Открываешь скрипт, и там почти вначале видишь строчку: ?
Код
{ "C1L4_Cemetery", Languages.Texts[283], "sketch_cmentarz", Languages.Texts[396], 6, 0, nil },
Это код, для помещения кладбища на доску. Терь давай я тебе по подробнее обьясню.

"C1L4_Cemetery" - здесь вместо кладбища вставляешь название нужной карты, которая лежит в Data\Levels.

Languages.Texts[283] - это название уровня. Число в квадратных скобках - это и есть название уровня. Все названия лежат в файле Lang_Russian\English (смотря, какая у тебя версия). Чтобы написать своё название для уровня, зайди в соответствующей файл, и напиши число, например 580 (главное, чтобы не совпадало с другими числами), поставь двоеточие, и пиши название.

"sketch_cmentarz" - здесь скетч (картинка) твоего уровня. Все скетчи лежат в Data\Textures\HUD\Map.

Languages.Texts[396] - условие для карты Таро. Всё аналогично названию уровня (ну, точно также пишется текст, все условия там же).

6 - это, какую карту ты получишь. Чтобы поменять, смотри в другие строки.

0 - на каком уровне сложности будет не доступен уровень. 1 - Дрёма, 2 - Бессоница, 3 - Кошмар, 4 - Травма, 0 - на любом будет доступно.

nil - тут можно поставить любой ролик, после прохождения уровня. Все ролики лежат в Data\Movies. Чтобы положить туда свой ролик, он должен быть в формате *. Bik.

Надеюсь, всё понятно обьяснил. С БУХом желай всё точно также.
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
Цитата TranZit ()
6 - это, какую карту ты получишь. Чтобы поменять, смотри в другие строки.
Насколько я помню, то это не обязательно, я любую цифру ставлю и всё норм работает
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Astaroth, если человек хочет, чтобы на таком-то уровне он получал определённую карту, то ему нужно прописать определённую цифру.
Цитировать Жалоба
Astaroth
Модераторы
  • публикация
  • комментариев
TranZit, А я ставил абсолютно разные цифры и ничего, карта прописывается в *.lua уровня
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Astaroth, лан, не будем спорить изза всякой ерунлы  ;)
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Цитата TranZit ()
6 - это, какую карту ты получишь. Чтобы поменять, смотри в другие строки.
Индекс карты таро, установленный в свойствах уровня, должен совпадать с индексом, установленным в Levels.lua.
Так например когда ты открываешь карту "скорость" на кладбище, на доске выбора уровней, наводя курсор на статистику, тебе пишется, что карта открыта, потому что индексы совпадают. Если в строке с прописанным уровнем, тобишь тут:
Цитата
{ "C1L4_Cemetery", Languages.Texts[283], "sketch_cmentarz", Languages.Texts[396], 6, 0, nil },

будет стоять другой индекс, тогда тебе напишут, что карта закрыта.
Цитировать Жалоба

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своей новости.

Мы в ВК

***
Фан группа по игре
Большая группа по игре
Первая группа по игре
menuright2
menuright3
menuright4
Сайт работает под управлением DataLife Engine.
© PainkillerClub.ru 2011-2023 | © Design by Мария Андрюшечкина.