Вторник, 23.04.2024, 14:15


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Форум » Модификации Painkiller » Разработка модификаций и контента к ним » Помощь с Lua-скриптами (Задаем вопросы, отвечаем.)
Помощь с Lua-скриптами
4044410Воскресенье, 26.01.2014, 21:47 | Сообщение # 346
Пфф...
Сообщений: 908
Награды: 20
Репутация: 67
Статус: Offline
А можно ли файлы формата .blend перевести в pkmdl?

вместе мы как граната,а раздельно мы как осколки
 
ItramariNВоскресенье, 26.01.2014, 22:03 | Сообщение # 347
Аластор
Сообщений: 591
Награды: 12
Репутация: 55
Статус: Offline
Цитата 4044410 ()
А можно ли файлы формата .blend перевести в pkmdl?

А можно ты сначала посмотришь на название темы?


Я люблю людей... особенно - убивать!^__^
 
4044410Воскресенье, 26.01.2014, 22:06 | Сообщение # 348
Пфф...
Сообщений: 908
Награды: 20
Репутация: 67
Статус: Offline
Цитата ItramariN ()
А можно ты сначала посмотришь на название темы?
Куда предлагаешь отправить сообщение?


вместе мы как граната,а раздельно мы как осколки

Сообщение отредактировал 4044410 - Воскресенье, 26.01.2014, 22:06
 
HavcomВоскресенье, 26.01.2014, 22:46 | Сообщение # 349
Painkiller
Сообщений: 2995
Награды: 65
Репутация: 374
Статус: Offline
Цитата 4044410 ()
А можно ли файлы формата .blend перевести в pkmdl?
Нет.
 
EnfildВоскресенье, 26.01.2014, 23:36 | Сообщение # 350
Инквизитор
Сообщений: 695
Награды: 15
Репутация: 51
Статус: Offline
4044410, помощь с 3dsMax, не? Это всё равно ближе к теме твоего запроса нежели луа-скрипты.
 
HavcomВоскресенье, 09.02.2014, 18:48 | Сообщение # 351
Painkiller
Сообщений: 2995
Награды: 65
Репутация: 374
Статус: Offline
Итак, мои юнные мастера по Lua, тут выискался новый глюк, в приюте карта "Скорость"(ускорение движения) не работает. Кто мне скажет, почему она не работает на этом уровне?
 
AstarothВоскресенье, 09.02.2014, 19:03 | Сообщение # 352
Painkiller
Сообщений: 2025
Награды: 73
Репутация: 223
Статус: Offline
Havcom, Вообщем дело в самом болоте рядом с приютом, а точнее в скриптах которые написаны в *.lua уровня, когда я стёр скрипты связанные с уроном и замедлением от болота, то карта скорость стала нормально работать.

В мире новостей PAINKILLER Модификаций

Сообщение отредактировал Astaroth - Воскресенье, 09.02.2014, 19:04
 
HavcomВоскресенье, 09.02.2014, 19:05 | Сообщение # 353
Painkiller
Сообщений: 2995
Награды: 65
Репутация: 374
Статус: Offline
Ну а по конкретнее, что именно не даёт карте нормально работать?
 
AstarothВоскресенье, 09.02.2014, 19:07 | Сообщение # 354
Painkiller
Сообщений: 2025
Награды: 73
Репутация: 223
Статус: Offline
Цитата Havcom ()
Ну а по конкретнее, что именно не даёт карте нормально работать?
Я думаю эти скрипты в Orphanage.lua

Код
...
         self.swampDamage = 5
         self.playerSlowDown = 0.3
         self._lastTimeDamage = 0  
...

function o:Update()
    CLevel.Update(self)

    if Player and Player.Health > 0 then
       SetPlayerSpeed(Player.PlayerSpeed)
       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

          --local deep = -Player._groundy - 27.0
          SetPlayerSpeed(Player.PlayerSpeed * self.playerSlowDown)

             if self._lastTimeDamage + 20 < Game.currentTime then
                 self._lastTimeDamage = Game.currentTime
                 Player:OnDamage(self.swampDamage)
             end
         end
    end
end


В мире новостей PAINKILLER Модификаций
 
HavcomВоскресенье, 09.02.2014, 20:29 | Сообщение # 355
Painkiller
Сообщений: 2995
Награды: 65
Репутация: 374
Статус: Offline
Эт я и сам понял, только зачем мне целую функцию вырезать, когда надо просто найти главную проблему.
 
AstarothВоскресенье, 09.02.2014, 21:28 | Сообщение # 356
Painkiller
Сообщений: 2025
Награды: 73
Репутация: 223
Статус: Offline
Havcom, Сама ошибка где-то тут:
Код
SetPlayerSpeed(Player.PlayerSpeed)  
SetPlayerSpeed(Player.PlayerSpeed * self.playerSlowDown)
 
Испробовал кучи способов чтобы исправить, вроде бы заработало, но и случился другой баг, крч я не знаю как исправить.
З.Ы. Если разберёшься, то напиши как исправить.


В мире новостей PAINKILLER Модификаций
 
HavcomВоскресенье, 09.02.2014, 21:29 | Сообщение # 357
Painkiller
Сообщений: 2995
Награды: 65
Репутация: 374
Статус: Offline
Astaroth, а ты знаешь, почему в этом месте происходит сбой карты?
 
AstarothВоскресенье, 09.02.2014, 21:35 | Сообщение # 358
Painkiller
Сообщений: 2025
Награды: 73
Репутация: 223
Статус: Offline
Havcom, В скриптах уровня используется скрипт 'Player.PlayerSpeed' и в скрипте карты таро тоже, может поэтому какая-та не состыковка.

В мире новостей PAINKILLER Модификаций
 
HavcomПонедельник, 10.02.2014, 02:10 | Сообщение # 359
Painkiller
Сообщений: 2995
Награды: 65
Репутация: 374
Статус: Offline
Для того, чтобы решить проблему, нужно сперва понять, почему происходит сбой конкретно на этом уровне. Ты правильно указал на функцию 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, чтобы он тоже учитивался в ней, таким образом он будет влиять на изменение скорости.
Вот собсно и всё.


Сообщение отредактировал Havcom - Понедельник, 10.02.2014, 02:21
 
AstarothПонедельник, 10.02.2014, 13:13 | Сообщение # 360
Painkiller
Сообщений: 2025
Награды: 73
Репутация: 223
Статус: Offline
Havcom, Афигеть, ответ у меня под носом был, я писал в скрипте вот так SetPlayerSpeed(Player.PlayerSpeed * self.SpeedFactor) поэтому и не работало.
Спасибо за разъяснение, теперь знаю что такое Update)


В мире новостей PAINKILLER Модификаций
 
Форум » Модификации Painkiller » Разработка модификаций и контента к ним » Помощь с Lua-скриптами (Задаем вопросы, отвечаем.)
Поиск: