Помощь с Lua-скриптами Баян Баян 21-02-2012, 20:56 0 В чём ошибка? Показать / Скрыть текст |-- Как правильно? [signature]--------------------{signature}[/signature] [fast]Цитировать[/fast] Жалоба #0 scorcher Мастера публикаций комментариев scorcher 21 июня 2012 03:23 0 А вот здесь новые. Сделал переиндексацию и условие выбора таблицы, массив сжал с 40 до 36... Все карты работают, кроме той серебренной карты, которая увелич. урон и уменьш. повреждения за счет неиспользования золотых карт - для нее надо вводить новые переменные, а то золотые карты с такими же переменными - перекрывают ее работу. Но это ерунда, просто я пока не стал этим еще грузится... Общая проблема такая два слота оригинала и аддона получились перекрестными, в game.lua это проблема решена за счет условия выбора (if game.addon), остается только переброска между режимами Вот такой вопрос (только сейчас пришел в голову ) : когда мы начинаем новую игру - и сохраняем имеющиеся карты - то они сохраняются по принципу индекса или номера слота? Если сохраняются по индексу - то думаю и не стоило пересылать тебе, тогда проблема решается просто введением нового индекса для перекрестных карт (ведь на номера индекса слава богу ограничения не распространяются) Но ты все равно глянь на досуге, может что напортачил по неопытности, заранее спасибо Цитировать Жалоба #421 dilettante Мастера публикаций комментариев dilettante 22 июня 2012 23:37 0 Str_Ghost, спасибо, за разъяснения. Но, как я понимаю нельзя сначала положить файл на форум, а потом уже в сообщении дать на него ссылку. Файл отобразится просто как присоединённый. Или я не прав? scorcher, вот я сделал для тебя своего рода шаблон расширенной доски на базе 1.64. То есть, сохранены оригинальные карты, плюс добавлены места для новых 6 карт. Вроде бы ничего не упустил. Ну, в общем, посмотри, думаю, разберешься, что к чему. Цитировать Жалоба #422 Str_Ghost Посетители публикации комментария Str_Ghost 22 июня 2012 23:53 0 [spoiler]uSpoiler2wprpal 2wprpa' 2wprpa' 2wprpa' 2wprpa')).val('Закрыть спойлер');$( 2wprpa' 2wprpa' 2wprpa')).val('Открыть спойлер ');$( 2wprpa'Открыть спойлер Quote (dilettante)Но, как я понимаю нельзя сначала положить файл на форум, а потом уже в сообщении дать на него ссылку. Файл отобразится просто как присоединённый. Да, ты совершенно прав[/spoiler] Цитировать Жалоба #423 scorcher Мастера публикаций комментариев scorcher 23 июня 2012 02:31 0 dilettante Спасибо, что не пожалел времени, за оптимизацию кода и за шаблон Действительно я много косяков наделал... А ведь все гениально просто: if Game.AddOn then MagicCards = MagicCardsAddon else MagicCards = MagicCardsPrim end Отдельный респект за доработку дизайна доски - я уже и сам сегодня хотел браться, а тут.... Да... и за шаблоны новых карт тоже В Game.lua все же придется немного условия выбора поменять, потому что я хочу, чтобы в аддон не прошли не новые карты, а старые слабые, потому бесполезные (например, половинные повреждение и х2 урон). Ну а так в принципе все, мне осталось только условия прописать... Сделаю в двух вариантах для супернатурала и для РК+ВООH Str_Ghost Пока собственно новые уровни еще не готовы (не все, и не до конца) - пусть пока просто будет такой шаблон для модеров. Как пропишу карты Таро, можно будет выложить в каталоге файлов dilettante П.С. Я как понимаю этот шаблон можно чуть доработать, и число доступных карт вообще может стать 36+36 (36 в режиме оригинала и 36 совсем новых в режиме аддона). Оно в приниципе и не надо, но просто гипотетически... П.П.С. Оффтоп: Лексар говорил, что ты сейчас еще занимаешься доработкой конвертации Некровиженских карт, я ничего не путаю? Если не путаю, то как успехи? Цитировать Жалоба #424 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 29 июня 2012 17:22 0 Назрел такой вопросец-можно ли придать слабам такие свойства,чтобы через них нельзя было пройти,но можно было стрелять???Реализуемо ли это через скрипты??? Цитировать Жалоба #425 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 1 июля 2012 21:36 0 Кто-нибудь может подсказать как сделать чтобы в определённый момент цвет фога поменялся? Цитировать Жалоба #426 dilettante Мастера публикаций комментариев dilettante 1 июля 2012 23:49 0 Попробуй так: local f = Lev.Fog f.Color = Color:New(0,0,0,0) -- здесь задать новый цвет WORLD.SetupFog(f.Mode,f.Start * (Cfg.ClipPlane+100)/200,f.End * (Cfg.ClipPlane+100)/200,f.Density,f.Color:Compose()) Цитировать Жалоба #427 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 2 июля 2012 18:22 0 dilettante, чтото не получается, фог просто попадает. конечно может я не правильно делаю. это же нужно в level.lua написать? вообще задумка у меня на уровне C6L4_City после телепорта в другую часть города изменить цвет фога на чёрный (первоначально у меня серый) Цитировать Жалоба #428 dilettante Мастера публикаций комментариев dilettante 2 июля 2012 20:50 0 BlooDFloweR, строчки, которые я привёл нужно добавить в любую, подходящую функцию, исполняемую в нужный момент. Скажем, переход от одной стадии игрового процесса к другой. Ну, а если тебе нужно сменить настройки окружения при переходе из области в область, то, целесообразно использовать объект класса CBox. Создай в нужном месте новый объект этого класса, настрой его размер и сохрани. Затем открой файл этого бокса и добавь туда это: o.Frozen = false function o:Tick() if not self.Frozen then if self:IsInside(PX,PY+1,PZ) then self.Frozen = true local f = Lev.Fog f.Color = Color:New(0,0,0,0) -- здесь задать новый цвет WORLD.SetupFog(f.Mode,f.Start * (Cfg.ClipPlane+100)/200,f.End * (Cfg.ClipPlane+100)/200,f.Density,f.Color:Compose()) end end end Ну, это я предлагаю как вариант. Цитировать Жалоба #429 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 2 июля 2012 20:59 0 dilettante, большое спасибо! всё получилось теперь) Цитировать Жалоба #430 LexaR Мастера публикаций комментариев LexaR 2 июля 2012 21:07 0 По иде это должно было быть сразу в Cenveroment / но по каким-то причинам не работает... В некровижн уже работает... Цитировать Жалоба #431 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 3 июля 2012 17:48 0 ещё такой вопрос, можно ли сделать чтобы скажем на время битвы уровень изменял текстуры? вообще движок такое позволить может? Цитировать Жалоба #432 Str_Ghost Посетители публикации комментария Str_Ghost 4 июля 2012 00:08 0 BlooDFloweR, Можно поставить на одном месте два меша с разными текстурами и по ходу игры их менять когда надо Цитировать Жалоба #433 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 4 июля 2012 07:00 0 Str_Ghost, тоесть это получится как на уровне Ад? Цитировать Жалоба #434 Str_Ghost Посетители публикации комментария Str_Ghost 4 июля 2012 14:02 0 BlooDFloweR, Угу. Там (в Аду) можно подсмотреть какими командами скрывать и показывать меши. Цитировать Жалоба #435 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 4 июля 2012 16:26 0 Возможно ли вообще ввести в Пк способность приседать и ложиться,просто уровни из Сталкера на то и расчитаны,что в некоторых местах надо понапрягаться присевши или лёжа??? Возможно ли создание такового задания-нельзя прыгать? Цитировать Жалоба #436 Sviatoslav Мастера публикаций комментариев Sviatoslav 1 августа 2012 22:40 0 Такой вопрос. Команда Message выдаёт сообщение на экране в одну строчку. Если сообщение длинное, то оно начинается и заканчивается за пределами экрана. Как сделать так, чтобы сообщение выдавалось в несколько строк, например, в десять? Цитировать Жалоба #437 LexaR Мастера публикаций комментариев LexaR 2 августа 2012 00:11 0 \n добавить в строку когда нужно на новую строкуДобавлено (02.08.2012, 00:11)---------------------------------------------Тоесть сначала пишем че надо , а на месте где нкжно прыгнуть на новую строчку, ставим \n , и пишем дальше , в игре в месадже будет на новой строчке, типа ********************\n***********************\n**************** Цитировать Жалоба #438 Sviatoslav Мастера публикаций комментариев Sviatoslav 2 августа 2012 00:13 0 LexaR, тут, к сожалению, это не действует. Я так и делал, но это, похоже, зависит от процесса, который запускается при команде. Цитировать Жалоба #439 LexaR Мастера публикаций комментариев LexaR 2 августа 2012 00:26 0 Святослав, все работает, попробуй скопировать \n прям с текста с другими такими же мессаджами, мож символ с клавы как то по другому определяется Цитировать Жалоба #440 dilettante Мастера публикаций комментариев dilettante 2 августа 2012 00:52 0 Привет, всем. На днях получил личное сообщение от одного из участников форума в котором был ряд вопросов. Решил ответить на форуме, главным образом, потому что я не могу дать исчерпывающих ответов, и возможно к обсуждению присоединится ещё кто-то. Итак, по мере усложнения (для меня ) вопросов: [spoiler]uSpoiler7KkKTrl 7KkKTr' 7KkKTr' 7KkKTr' 7KkKTr')).val('[\–] Как через Actions поменять музыку на уровне?');$( 7KkKTr' 7KkKTr' 7KkKTr')).val('[+] Как через Actions поменять музыку на уровне?');$( 7KkKTr'[+] Как через Actions поменять музыку на уровне?1. Как через Actions поменять музыку на уровне? --Определяем функцию (CAction.lua): function CAction:Action_SetMusic(song) local pcs = GObjects:GetElementsWithFieldValue("BaseName","PMusicFade*") for i,p in pcs do GObjects:ToKill(p) end local vol = Cfg.AmbientVolume local fadeTime = 5 local prevVolume = SOUND.StreamGetVolume(Lev._freeMSlot) SOUND.StreamLoad(Lev._freeMSlot,song) SOUND.StreamPlay(Lev._freeMSlot) AddObject(Templates["PMusicFade.CProcess"]:New(Lev._freeMSlot,prevVolume,vol,fadeTime)) if Lev._freeMSlot == 1 then Lev._freeMSlot = 0 else Lev._freeMSlot = 1 end AddObject(Templates["PMusicFade.CProcess"]:New(Lev._freeMSlot,SOUND.StreamGetVolume(Lev._freeMSlot),0,fadeTime,"SOUND.StreamPause("..Lev._freeMSlot..");Lev._fade=false")) Lev._fade = true end --Используем (file_name.CBox) o.BaseObj = "AmbushForPlayer.CBox" o.Actions.OnTouch[1] = "SetMusic:\"music_file_name\""[/spoiler]=Как через Actions поменять музыку на уровне? [spoiler]uSpoilerBZn7qAl BZn7qA' BZn7qA' BZn7qA' BZn7qA')).val('[\–] Короткий выбор оружия');$( BZn7qA' BZn7qA' BZn7qA')).val('[+] Короткий выбор оружия');$( BZn7qA'[+] Короткий выбор оружия2. "Короткий" выбор оружия (доступ к слотам с номером выше 7 с помощью клавиш). Тут всё не так однозначно. В теории, или как я это себе представляю, нажатия клавиш формируют некие байт-коды, значения которых непрерывно оцениваются функцией CPlayer:InterpretAction(delta). Здесь берётся число, сопоставленное с определённым оружием (Main\Definitions.lua) и если это число совпадает с байт-кодом клавиши, то запускается функция CPlayer:TryToChangeWeapon() с указанием нужного слота. Однако, предопределённые клавиши 8, 9, 0, F1, F2, F3, и F4 формируют "не свои" коды. Вдобавок, после того, как клавиша была нажата и отпущена код, формируемый ею продолжает сыпаться до тех пор, пока не будет нажата какая-нибудь из "правильных" кнопок. Такое поведение, похоже, задано на уровне движка, и как от этого избавиться я не знаю. Тем не менее, назначить оружие с номером слота выше, чем 7 на определённую клавишу всё же можно. Вариантов два. Покажу на примере слота номер 8. Общим для обоих вариантов будет необходимость отвязать оружие от предопределённых клавиш: Cfg.KeyAlternativeWeapon8 = "None" Cfg.KeyPrimaryWeapon8 = "None" Вариант №1 "Мягкий". Добавляем функцию смены оружия в консольные команды и затем связываем с нужной кнопкой командой Bind. Console.lua function Console:Cmd_WEAPONEIGHT() if Game.GMode ~= GModes.SingleGame then return end local slot = 8 if Player.EnabledWeapons[slot] and slot ~= Player._CurWeaponIndex then CPlayer.WeaponChangeConfirmation(Player.ClientID,Player._Entity,slot) end end Cfg.Bind_8 = "WEAPONEIGHT" Вариант №2 "Жёсткий". Добавляем код, связывающий смену оружия с одной клавишей и только с ней. Game.lua function Game:Tick(delta) ... if INP.Key(Keys.K8) == 1 then if Game.GMode == GModes.SingleGame then local slot = 8 if Player.EnabledWeapons[slot] and slot ~= Player._CurWeaponIndex then CPlayer.WeaponChangeConfirmation(Player.ClientID,Player._Entity,slot) end end end ... end Оба варианта не лишены недостатков. В первом случае за гибкость приходится платить возможной потерей связи с клавишей и необходимостью заново переназначать её. Во втором - сама по себе жёсткая привязка уже недостаток и к тому же потребуется "залочить" смену кнопки в меню настроек. Сама функция приведена в необходимом минимуме, но не является достаточной.[/spoiler]=Короткий выбор оружия [spoiler]uSpoilerlXcwV0l lXcwV0' lXcwV0' lXcwV0' lXcwV0')).val('[\–] Как поменять цвет шрифта в консоли/меню выбора уровней/MagicBoard');$( lXcwV0' lXcwV0' lXcwV0')).val('[+] Как поменять цвет шрифта в консоли/меню выбора уровней/MagicBoard');$( lXcwV0'[+] Как поменять цвет шрифта в консоли/меню выбора уровней/MagicBoard3. Как поменять цвет шрифта в консоли, в меню выбора уровней и в MagicBoard. И в каких скриптах находится описание этих меню? Тут прямо, ХЗ, где задан глобальный цвет, вероятно, что тоже в самом движке. Потратил некоторое время, но не нашёл в скриптах ничего подходящего. Единственное, что полезного могу сказать (спасибо Паше aka MonochromeRainbow, без него я бы ни за что не догадался) так это то, что консольные отклики имеют скрытый параметр, задающий цвет текста. Использовать можно так: local color = R3D.RGB(0,0,0) -- black CONSOLE.AddMessage(string,color) Что же касается "Колеса" и "Доски", то это - так сказать, hard движка, который не вынесен в скрипты. Доступные настройки MagicBoard находятся в одноимённом скрипте. Основная часть определений меню лежит в HUD\PainMenu.lua.[/spoiler]=Как поменять цвет шрифта в консоли/меню выбора уровней/MagicBoard Ну, вот вроде всё, надеюсь, не бесполезно напачкал тут на страничке. PS. Sviatoslav [spoiler]uSpoilerP1Ba6wl P1Ba6w' P1Ba6w' P1Ba6w' P1Ba6w')).val('Закрыть спойлер');$( P1Ba6w' P1Ba6w' P1Ba6w')).val('Открыть спойлер ');$( P1Ba6w'Открыть спойлер твоё сообщение я получил, напишу немного позднее. И я ведь так и не доделал карты ещё. Просто совсем не хватает времени особенно с учётом моей вдумчивости (читай тугодумия).[/spoiler] Цитировать Жалоба #441 Sviatoslav Мастера публикаций комментариев Sviatoslav 2 августа 2012 01:22 0 LexaR, да, что-то я туплю. Спасибо, заработало! Единственный косяк, что эта команда не поддерживает слишком длинный текст - игра вылетает. Придётся укорачивать длинные сообщения. Пробовал UnlockMsg из NVN - она поддерживает любую длину, но не понимает разделения на строчки. dilettante, очень интересно! С музыкой уже поэкспериментировал - работает. Но Bullet Time, видимо, непобедим - после его активации музыка не восстанавливается, как и в MusicEnv. P.S. Ок, буду ждать ответа - может мои вопросы не такие замороченные. Цитировать Жалоба #442 Havcom Мастера публикаций комментариев Havcom 2 августа 2012 01:51 0 Quotedilettante, очень интересно! С музыкой уже поэкспериментировал - работает. Но Bullet Time, видимо, непобедим - после его активации музыка не восстанавливается, как и в MusicEnv. Тоже опробовал этот Экшен. И всё бы нечего, но не это мне нужно. Собсно экшен меняет ту музыку, которая проигрывается в данный момент, т.е. если играл Ambient, то экшен заменит Ambient, а если попёрли прокажённые, то экшен меняет боевую музыку. Но только на один раз. А я хочу сделать так, чтобы происходила глобальная замена музыки. Если можно менять FOG, FarClip и всё остальное как хочется, то и музыку можно (я думаю). Весь этот гемор мне нужен, чтобы победить падение музыки при замедлении (Ну вот пришел такой мне в голову способ). А ещё я больше чем уверен что в некро этот косяк был исправлен (да там вообще много чего было исправлено). Но как же мне так сделать. Вот это вопрос!! Цитировать Жалоба #443 LexaR Мастера публикаций комментариев LexaR 2 августа 2012 02:12 0 так если нужно изменить полностью музыку на уровне, ведь можно просто использовать CMusicEnv , именно она и меняет музыку на уровне когда заходишь в неё. а её можно так же зафризить и запустить когда надо ... Цитировать Жалоба #444 Havcom Мастера публикаций комментариев Havcom 2 августа 2012 02:21 0 Quoteтак если нужно изменить полностью музыку на уровне, ведь можно просто использовать CMusicEnv , именно она и меняет музыку на уровне когда заходишь в неё. а её можно так же зафризить и запустить когда надоИменно когда игрок находится в зоне такого бокса, во время замедления времени или превращения в демона, которое также использует замедление, происходит отключение (падение) музыки. Можно восстановить Ambient, если зайти в опции звука и перетащить ползунок основной громкости на 0, а потом опять на 100, но это не выход из положения. В Recurring Evil "разрабы" попытались решить проблему (и решили), создав при этом новый баг с музыкой. Поэтому в последствии потом отключили. Цитировать Жалоба #445 dilettante Мастера публикаций комментариев dilettante 2 августа 2012 18:59 0 Quote (Havcom)Весь этот гемор мне нужен, чтобы победить падение музыки при замедлении Ок, теперь понятно чего нужно было. Попробуй тогда так: [spoiler]uSpoilerkIwji1l kIwji1' kIwji1' kIwji1' kIwji1')).val('Закрыть спойлер');$( kIwji1' kIwji1' kIwji1')).val('Открыть спойлер ');$( kIwji1'Открыть спойлер CAction.lua --============================================================================ function CAction:Action_SetMusic(battlemusic,ambientmusic) local pcs = GObjects:GetElementsWithFieldValue("BaseName","PMusicFade*") for i,p in pcs do GObjects:ToKill(p) end local vol = Cfg.AmbientVolume local music = Lev._CurMusic.Ambient local fadeTime = 5 local newsong = ambientmusic if not Lev._ambient then vol = Cfg.MusicVolume music = Lev._CurMusic.Battle fadeTime = 2 newsong = battlemusic Lev._ambient = true else Lev._ambient = false end local prevVolume = SOUND.StreamGetVolume(Lev._freeMSlot) if Lev._songInSlot[Lev._freeMSlot] == newsong then SOUND.StreamResume(Lev._freeMSlot) else SOUND.StreamLoad(Lev._freeMSlot,newsong) SOUND.StreamPlay(Lev._freeMSlot) Lev._songInSlot[Lev._freeMSlot] = newsong end AddObject(Templates["PMusicFade.CProcess"]:New(Lev._freeMSlot,prevVolume,vol,fadeTime)) if Lev._freeMSlot == 1 then Lev._freeMSlot = 0 else Lev._freeMSlot = 1 end AddObject(Templates["PMusicFade.CProcess"]:New(Lev._freeMSlot,SOUND.StreamGetVolume(Lev._freeMSlot),0,fadeTime,"SOUND.StreamPause("..Lev._freeMSlot..");Lev._fade=false")) Lev._fade = true Lev._CurMusic.Battle[1] = battlemusic Lev._CurMusic.Ambient[1] = ambientmusic end --============================================================================ file_name.CBox --============================================================================ o.BaseObj = "AmbushForPlayer.CBox" o.Actions.OnTouch[1] = "SetMusic:\"new_fight_music\",\"new_ambient_music\"" --============================================================================ Единственное ограничение - в LevelName.Clevel обязательно должны присутствовать строки: o.Music.Battle[1] = "" o.Music.Ambient[1] = "" --============================================================================ Ну, то есть, если в начале не должно быть совсем никакой музыки, то нужны хотя бы пустые массивы. Или придётся добавить соответствующую проверку. А если нет необходимости менять музыку на ходу, а лишь требуется переопределить настройки уровня, то достаточно этого: function CAction:Action_SetMusic(battlemusic,ambientmusic) Lev._CurMusic.Battle[1] = battlemusic Lev._CurMusic.Ambient[1] = ambientmusic end[/spoiler] Может, я опять чего недопонял. Поправляйте. Цитировать Жалоба #446 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 2 августа 2012 20:47 0 такой вопрос: сделал аи для нового моба на основе скрипта из некровижн и у меня выходит ошибка на эту функцию из CActor: if ev[1] <= curAnimTime and ev[2] then self[ev[2]](self,ev[3], ev[4], ev[5], ev[6], ev[7], ev[8], ev[9]) end как я понял она нужна для нанесения урона (потому что удалил её, ошибок нет но не этот ни другие монстры урона не наносят при атаке). что можно с этим сделать? Цитировать Жалоба #447 Havcom Мастера публикаций комментариев Havcom 3 августа 2012 00:17 0 У меня тоже была эта ошибка. Хотел научить вампиров стрелять. Quotefunction CAction:Action_SetMusic(battlemusic,ambientmusic) Lev._CurMusic.Battle[1] = battlemusic Lev._CurMusic.Ambient[1] = ambientmusic endПопробовал, всё работает. Именно это мне и нужно было. dilettante, Спасибо за помощь с музыкой, сам бы не допёр. Прощайте MusicEnv боксы Цитировать Жалоба #448 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 3 августа 2012 06:54 0 Havcom, а у меня приблемы с атакой на бегу. я конечно могу убрать эту функцию, но тогда после атаки модель будет возвращаться как бы в исходное положение что ни разу не красиво неужели никак не исправить? Цитировать Жалоба #449 Havcom Мастера публикаций комментариев Havcom 3 августа 2012 07:09 0 QuoteHavcom, а у меня приблемы с атакой на бегу. я конечно могу убрать эту функцию, но тогда после атаки модель будет возвращаться как бы в исходное положение что ни разу не красиво неужели никак не исправить?Немного поконкретнее, что за атака на бегу и для кого ты её делаешь? Цитировать Жалоба #450