Помощь с Lua-скриптами Баян Баян 21-02-2012, 20:56 0 В чём ошибка? Показать / Скрыть текст |-- Как правильно? [signature]--------------------{signature}[/signature] [fast]Цитировать[/fast] Жалоба #0 Havcom Мастера публикаций комментариев Havcom 9 февраля 2014 21:29 0 Astaroth, а ты знаешь, почему в этом месте происходит сбой карты? Цитировать Жалоба #211 Astaroth Модераторы публикация комментариев Astaroth 9 февраля 2014 21:35 0 Havcom, В скриптах уровня используется скрипт 'Player.PlayerSpeed' и в скрипте карты таро тоже, может поэтому какая-та не состыковка. Цитировать Жалоба #212 Havcom Мастера публикаций комментариев Havcom 10 февраля 2014 02:10 0 Для того, чтобы решить проблему, нужно сперва понять, почему происходит сбой конкретно на этом уровне. Ты правильно указал на функцию SetPlayerSpeed(Player.PlayerSpeed), но так и не сказал, как можно решить проблему, просто предложив сперва снести всю функцию Update. Тогда бы потерялась возможность тормозить игрока, при попадании в зону болота, что не есть хорошо. Нельзя что-то исправлять, удаляя при этом что-то, не относящееся к проблеме. Так можно и пол игры удалить. Итак, чтобы ты всё понял, я начну с самого начала. Скорость игрока отпределяется функцией движка 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, чтобы он тоже учитивался в ней, таким образом он будет влиять на изменение скорости. Вот собсно и всё. Цитировать Жалоба #213 Astaroth Модераторы публикация комментариев Astaroth 10 февраля 2014 13:13 0 Havcom, Афигеть, ответ у меня под носом был, я писал в скрипте вот так SetPlayerSpeed(Player.PlayerSpeed * self.SpeedFactor) поэтому и не работало. Спасибо за разъяснение, теперь знаю что такое Update) Цитировать Жалоба #214 Painkiller-Ivan Посетители + публикаций комментариев Painkiller-Ivan 11 февраля 2014 10:29 0 Исправили, проверили, работает карта в Приюте??? Цитировать Жалоба #215 4044410 Посетители + публикаций комментариев 4044410 11 февраля 2014 13:15 0 Цитата Painkiller-ivan ()Исправили, проверили, работает карта в Приюте???Painkiller-ivan в скриптах уровня была прописана команда на замедление ходьбы в воде,поэтому она и неработала Цитировать Жалоба #216 Astaroth Модераторы публикация комментариев Astaroth 11 февраля 2014 14:43 0 Painkiller-ivan, Да 4044410, Ты сам понял почему карта не работала? Не из-за воды, а из-за скрипта в который надо было добавить одну функцию, если не знаешь то не надо писать. Цитировать Жалоба #217 4044410 Посетители + публикаций комментариев 4044410 11 февраля 2014 14:55 0 Цитата Astaroth ()Не из-за воды, а из-за скрипта в который надо было добавить одну функцию, если не знаешь то не надо писать.Astaroth я мож щас не прав буду-но я не писал что из-за воды-я написал что это прописано в скриптах?[spoiler]uSpoilerg0Xnyvl g0Xnyv' g0Xnyv' g0Xnyv' g0Xnyv')).val('[\–] Мои слова');$( g0Xnyv' g0Xnyv' g0Xnyv')).val('[+] Мои слова');$( g0Xnyv'[+] Мои словаЦитата 4044410 ()Painkiller-ivan в скриптах уровня была прописана команда на замедление ходьбы в воде[/spoiler]=Мои слова Цитировать Жалоба #218 Painkiller-Ivan Посетители + публикаций комментариев Painkiller-Ivan 11 февраля 2014 14:56 0 Astaroth, хирургия делает своё дело! Только бы в теме ещё написали координаты этого скрипта, чтобы вставить в скрипт уровня. Сам хочу убедиться. Цитировать Жалоба #219 Astaroth Модераторы публикация комментариев Astaroth 11 февраля 2014 15:08 0 Цитата 4044410 ()я мож щас не прав будуТак и есть, основной недочёт был Player.PlayerSpeed, а не замедление в воде. Painkiller-ivan, В Data/Levels/C6L1_Orphanage/C6L1_Orphanage.lua Но если у тебя этого нету, то распакуй Levels.pak. Цитировать Жалоба #220 Painkiller-Ivan Посетители + публикаций комментариев Painkiller-Ivan 11 февраля 2014 15:15 0 Нашёл lua. , что вписывать? Цитировать Жалоба #221 Astaroth Модераторы публикация комментариев Astaroth 11 февраля 2014 15:20 0 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 ) Цитировать Жалоба #222 Painkiller-Ivan Посетители + публикаций комментариев Painkiller-Ivan 11 февраля 2014 15:53 0 Окей, щас решу. Добавлено (11.02.2014, 15:53) --------------------------------------------- Заработала Скорость. P.S. Уже никакой беды нет. В порядке. Цитировать Жалоба #223 UnSlayeRLBarsik Модераторы публикаций комментариев UnSlayeRLBarsik 13 февраля 2014 23:46 0 Havcom, у себя в моде я исправил эту ошибку таким же образом, понял что и как, но исправил не из-за карты, а бега, персонаж только ходил и бежать никак нельзя было (ну все знают что у меня в моде персонаж и ходит и бегает). Цитировать Жалоба #224 Havcom Мастера публикаций комментариев Havcom 13 февраля 2014 23:53 0 Окай, в следующий раз будем проверять твои знания Lua посредством очередного вопроса. Цитировать Жалоба #225 UnSlayeRLBarsik Модераторы публикаций комментариев UnSlayeRLBarsik 13 февраля 2014 23:58 0 Havcom, вопросы-то у меня есть, но на них никто не ответит мне увы, сам догадаешься и сделаешь быстрее (как с оружием было). Цитировать Жалоба #226 Havcom Мастера публикаций комментариев Havcom 14 февраля 2014 00:01 0 Ну так ты напиши, может кто и ответит. Цитировать Жалоба #227 TranZit Мастера публикаций комментариев TranZit 28 апреля 2014 14:16 0 Дарова. Кто знает, как сделать, чтобы на уровне босс рядом шлялся? Как в HD, или в Релоаде.Добавлено (28.04.2014, 14:16)---------------------------------------------Как новые карты Таро из Овердос (Штурм, Шаги Грома, Адская броня, Азарт, и, которая +5 к здоровью прибавляет) переместить в Оригинал? Цитировать Жалоба #228 STR_Paragor Администраторы публикаций комментариев STR_Paragor Офлайн 30 апреля 2014 15:51 0 TranZit, тебе зачем это делать? Для каждой карты написан скрипт в файле Game.lua и в Magicboard.lua назначаешь место и текстуру карты(точно не помню) Цитировать Жалоба #229 Astaroth Модераторы публикация комментариев Astaroth 30 апреля 2014 15:55 0 Lexa_2012, Чтобы ещё карты из передоза работали там надо и в CActor.lua прописывать Цитировать Жалоба #230 TranZit Мастера публикаций комментариев TranZit 30 апреля 2014 16:08 0 Цитата Lexa_2012 ()TranZit, тебе зачем это делать? Для каждой карты написан скрипт в файле Game.lua и в Magicboard.lua назначаешь место и текстуру карты(точно не помню)Просто увеличил слоты для карт на доске, и хотел проверить, но не знаю, как перенести карты Цитировать Жалоба #231 nonnamed Посетители + публикаций комментариев nonnamed 15 мая 2014 12:54 0 Пожалуйста помогите разобраться в level.lua Как правильно расположить уровни? Все обьясните.ВАЖНО!!!! Цитировать Жалоба #232 TranZit Мастера публикаций комментариев TranZit 15 мая 2014 13:01 0 Цитата nonnamed ()Пожалуйста помогите разобраться в level.lua Как правильно расположить уровни? Все обьясните.ВАЖНО!!!! чувак, ты не представляешь, как же эта легко. погоди две минуты,и я тебе обьясню. Цитировать Жалоба #233 nonnamed Посетители + публикаций комментариев nonnamed 15 мая 2014 13:07 0 TranZit, Обьяснишь мне все? Цитировать Жалоба #234 TranZit Мастера публикаций комментариев TranZit 15 мая 2014 13:19 0 Так вот. Открываешь скрипт, и там почти вначале видишь строчку: ?Код{ "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. Надеюсь, всё понятно обьяснил. С БУХом желай всё точно также. Цитировать Жалоба #235 Astaroth Модераторы публикация комментариев Astaroth 15 мая 2014 13:24 0 Цитата TranZit ()6 - это, какую карту ты получишь. Чтобы поменять, смотри в другие строки. Насколько я помню, то это не обязательно, я любую цифру ставлю и всё норм работает Цитировать Жалоба #236 TranZit Мастера публикаций комментариев TranZit 15 мая 2014 13:26 0 Astaroth, если человек хочет, чтобы на таком-то уровне он получал определённую карту, то ему нужно прописать определённую цифру. Цитировать Жалоба #237 Astaroth Модераторы публикация комментариев Astaroth 15 мая 2014 13:28 0 TranZit, А я ставил абсолютно разные цифры и ничего, карта прописывается в *.lua уровня Цитировать Жалоба #238 TranZit Мастера публикаций комментариев TranZit 15 мая 2014 13:30 0 Astaroth, лан, не будем спорить изза всякой ерунлы Цитировать Жалоба #239 Havcom Мастера публикаций комментариев Havcom 15 мая 2014 21:53 0 Цитата TranZit ()6 - это, какую карту ты получишь. Чтобы поменять, смотри в другие строки.Индекс карты таро, установленный в свойствах уровня, должен совпадать с индексом, установленным в Levels.lua. Так например когда ты открываешь карту "скорость" на кладбище, на доске выбора уровней, наводя курсор на статистику, тебе пишется, что карта открыта, потому что индексы совпадают. Если в строке с прописанным уровнем, тобишь тут: Цитата{ "C1L4_Cemetery", Languages.Texts[283], "sketch_cmentarz", Languages.Texts[396], 6, 0, nil }, будет стоять другой индекс, тогда тебе напишут, что карта закрыта. Цитировать Жалоба #240