Помощь с Lua-скриптами Баян Баян 21-02-2012, 20:56 0 В чём ошибка? Показать / Скрыть текст |-- Как правильно? [signature]--------------------{signature}[/signature] [fast]Цитировать[/fast] Жалоба #0 4044410 Посетители + публикаций комментариев 4044410 16 сентября 2014 15:09 0 Цитата Evgeniy ()Чтобы изучить основные возможности написанных Хавкомом программ,времени много не потребуется.В дальнейшем понадобятся только желание,фантазия и немного свободного времени.Цитата Jourgensen ()Havcom, и много у тебя таких? Цитировать Жалоба #301 Jourgensen Модераторы публикаций комментариев Jourgensen 16 сентября 2014 15:22 0 Да, я не в танке. Хоть бы рассказали чтоль, нежели фэйспалмить. Цитировать Жалоба #302 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 16 сентября 2014 15:31 0 4044410, Ты ошибся,этот по праву принадлежит тебе. Jourgensen, Так что тебе объяснить-то? Цитировать Жалоба #303 Jourgensen Модераторы публикаций комментариев Jourgensen 16 сентября 2014 15:35 0 Ну, про программы написанные Хавом. Цитировать Жалоба #304 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 16 сентября 2014 15:48 0 Если вкратце,для создания карт под Пэйнкиллер можно использовать различные программы по 3D-моделированию.Autodesk 3DS Max и Autodesk Maya - самые яркие представители.По сути,сами программы отличаются немногим,разве что вторая имеет больший арсенал для работы с анимацией,а также некоторые отличия в интерфейсе и инструментарии. Вся фишка в том,что под 3DS Max интернет битком набит всевозможными книгами и видеоуроками,в то время как Майя очень в этом плане ограничена. Если есть желание,на сайте в меню можно найти небольшие уроки по программе 3DS Max(изначально советую попробовать именно её),а также попросту скачать эту программу и,если повезёт,втянуться в картостроительство. Вот,собственно,и уроки. И,кстати,начинаем оффтопить,товарищи. Цитировать Жалоба #305 Jourgensen Модераторы публикаций комментариев Jourgensen 16 сентября 2014 16:37 0 Спасибо! Так это Хав написал 3DS Max?! Цитировать Жалоба #306 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 16 сентября 2014 17:21 0 Не за что. Цитата Jourgensen ()Так это Хав написал 3DS Max?! Я бы ему в ноги кланялся,если бы так и было.Но нет,3DS Max написала компания Autodesk. Цитата Evgeniy ()написанных Хавкомом программ Цитата Jourgensen ()и много у тебя таких? Дико извиняюсь,не написанных,а указанных,названных и т.д.Ввёл в заблуждение. Цитировать Жалоба #307 Jourgensen Модераторы публикаций комментариев Jourgensen 16 сентября 2014 17:59 0 Да ничего страшного. Я уж тут думал, что Хав какой-нибудь гений программинга. =) Цитировать Жалоба #308 nonnamed Посетители + публикаций комментариев nonnamed 31 декабря 2014 17:58 0 Играл я значит на рекурринг евиле.И банши меня ударил.И тут выскочела такая вот ошибочка: ./Data/LScripts/Templates/Monsters/Banshee/Banshee.lua:112:OnUpdate ./Data/LScripts/Classes/CActor.lua:256:Update ./Data/LScripts/Main/GObjects.lua:100:? :-1:foreachi ./Data/LScripts/Main/GObjects.lua:120:Update ./Data/LScripts/Main/Game.lua:509:Tick ./Data/LScripts/Main/Game.lua:1699:Game_Tick в чем тут ошибка? Цитировать Жалоба #309 Havcom Мастера публикаций комментариев Havcom 31 декабря 2014 19:55 0 nonnamed, у тебя на комне установлен рекурринг евил! Вот в чём ошибка. Цитировать Жалоба #310 Jourgensen Модераторы публикаций комментариев Jourgensen 19 февраля 2015 21:40 0 Тут не одна ошибка. Их несколько. Перезапусти уровень, и если при ударе Банши будет то же самое, открывай скрипты указанные в ошибке и исправляй. Скорее всего игру глюкануло. Цитировать Жалоба #311 nonnamed Посетители + публикаций комментариев nonnamed 21 февраля 2015 16:09 0 Jourgensen, уже исправил Цитировать Жалоба #312 Havcom Мастера публикаций комментариев Havcom 21 февраля 2015 16:13 0 Jourgensen, вообще-то ошибка здесь одна. nonnamed, молодец. Цитировать Жалоба #313 Jourgensen Модераторы публикаций комментариев Jourgensen 30 августа 2015 22:32 0 Так копаться приходится сразу в темплейтах, классах, и майне.Добавлено (30.08.2015, 22:32)---------------------------------------------Недавно начал разбираться в игровых ресурсах Street Fighter X Tekken. Выпотрошил все скрипты из архивов, но большинство из них оказались зашифрованными. Полдня пытался расшифровать их. В итоге со словами: "Да клал я болт на тебя" завалился спать. Сможет кто-нибудь помочь, кто отлично знает алгоритмы шифрования lua? Цитировать Жалоба #314 TranZit Мастера публикаций комментариев TranZit 22 ноября 2015 23:49 0 Я тут написал скрипт для мододелов. Точнее, я переписал старый скрипт. Так вот, я переписал скрипт на патроны, которые даются при взятии мегапака. Суть в том, что теперь стало намного лече добавлять патроны, которые будет давать мегапак для новых оружий.Как, собственно, теперь добавлять патроны:В CPlayer.lua в новую таблицу GiveMegaPackAmmo достаточно добавить соответствующие строки, например:Shotgun = 10,Вот и вся проблема. В отличии от того, что приходилось прописывать раньше для каждого вида патрона:player.Ammo.Shotgun = player.Ammo.Shotgun + 10 * AmmoDifficultyModifier[Game.Difficulty] * Game.AmmoFoundFactorМожет для кого-то это и незначительно, но мне бы это точно сэкономило кучу времени.Скачать: https://yadi.sk/d/GDFTefPKkhfzm Цитировать Жалоба #315 Havcom Мастера публикаций комментариев Havcom 23 ноября 2015 07:50 0 TranZit, Гениально!!! Бросай уже писать скрипты для мододелов. Цитировать Жалоба #316 TranZit Мастера публикаций комментариев TranZit 23 ноября 2015 08:47 0 Havcom, а я ничуть не удивлён твоей реакцией Цитировать Жалоба #317 Havcom Мастера публикаций комментариев Havcom 26 ноября 2015 16:02 0 Кстати, TranZit, раз уж ты такой молодец и хорошо во всём разбираешься, то скажи, для чего нужны переменные AmmoDifficultyModifier[Game.Difficulty] и Game.AmmoFoundFactor? Цитировать Жалоба #318 TranZit Мастера публикаций комментариев TranZit 26 ноября 2015 16:47 0 Havcom, обо всём по порядку:Цитатараз уж ты такой молодец и хорошо во всём разбираешьсяНо-но, положительного мнение я о себе никогда не говорю — это должны решить другие люди; лично для себя в Lua я разбираюсь не очень, не смотря даже на то, что самостоятельно написал скрипт на бег; тем более не считаю себя специалистом в программировании. А ты наверняка с сарказмом это сказал, как ты обычно и любишь.Цитата Havcom ()AmmoDifficultyModifier[Game.Difficulty]Эта переменная отвечает за количество выдаваемых патронов, в зависимости от уровня сложности игры. Чем выше сложность, тем меньше патронов выдадут. Либо реверс.Цитата Havcom ()Game.AmmoFoundFactorА это отвечает за количество выдаваемых патронов при взятой или не взятой на уровень карты Таро «Пополнение». Если игрок не взял карту на уровень, значение этой переменной будет равно единице, то ничего не поменяется; если же будет взята карта на уровень, тогда переменная примет значение два, а это даст удвоенную выдачу патронов.А ты сам небось три дня ответ искал? Цитировать Жалоба #319 UnSlayeRLBarsik Модераторы публикаций комментариев UnSlayeRLBarsik 27 ноября 2015 00:40 0 TranZit, Ты главное в каталог файлов не лезь с такими вот исправлениями или обновлениями. Да честно если уж делаешь какой-то фикс, то делай больше чем 1 исправление.Havcom, Да пускай пишет, плохо от этого никому не будет. Цитировать Жалоба #320 Havcom Мастера публикаций комментариев Havcom 27 ноября 2015 07:06 0 TranZit, молодец. Я думал, ты не справишься. Теперь обо всём по порядку:Цитата TranZit ()лично для себя в Lua я разбираюсь не оченьЕсли ты плохо разбираешься, то зачем тогда пишешь скрипты для мододелов чуть выше?Цитата TranZit ()А ты наверняка с сарказмом это сказал, как ты обычно и любишь.Да ну, нет, просто стало интересно. А то ты предлагаешь внести исправления, которые вызовут баги в игре. Так держать UnSlayeR, ..................... Хотя нет, отставить Цитировать Жалоба #321 TranZit Мастера публикаций комментариев TranZit 27 ноября 2015 17:03 0 Цитата UnSlayeR ()Ты главное в каталог файлов не лезь с такими вот исправлениями или обновлениями.Ну не, такое в каталоге файлов будет глупо смотреться.Цитата UnSlayeR ()Havcom, Да пускай пишет, плохо от этого никому не будет.Действительно. Кому надо — воспользуется, кому не надо — пройдёт мимо.Цитата Havcom ()Я думал, ты не справишься.Кто бы сомневался.Цитата Havcom ()Если ты плохо разбираешься, то зачем тогда пишешь скрипты для мододелов чуть выше?Может, чтобы повысить свои знания, не? Цитата Havcom ()А то ты предлагаешь внести исправления, которые вызовут баги в игре.Да? и какие же? Цитировать Жалоба #322 Havcom Мастера публикаций комментариев Havcom 28 ноября 2015 03:24 0 Цитата TranZit ()Да? и какие же?Например карта таро на увеличение патронов перестанет работать. Цитировать Жалоба #323 TranZit Мастера публикаций комментариев TranZit 28 ноября 2015 08:56 0 Havcom, а вот и нихрена, я это предусмотрел. Вот скрипт из MegaPack:Кодlocal gmpa = player.s_SubClass.GiveMegaPackAmmoif player thenfor k,v in player.Ammo doplayer.Ammo [k]= player.Ammo [k]+ gmpa [k]* AmmoDifficultyModifier[Game.Difficulty] * Game.AmmoFoundFactorendПосмотри скрипты прежде, чем заявлять о багах. Цитировать Жалоба #324 Painkiller-Ivan Посетители + публикаций комментариев Painkiller-Ivan 28 ноября 2015 09:28 0 TranZit, обнови-ка материал, в документе MegaPack.CItem смещены строки (если заглянуть в архив, из правого окна станет понятно, что писалось с MiniCommander, потому такой беспорядок). Цитировать Жалоба #325 TranZit Мастера публикаций комментариев TranZit 28 ноября 2015 09:36 0 Painkiller-Ivan, смещение строк из-за дурацкого блокнота, я открывал через NotePad++ и всё прекрасно отображалось. Цитировать Жалоба #326 Jourgensen Модераторы публикаций комментариев Jourgensen 5 января 2016 17:57 0 Иногда у многих возникала проблема при создании своей отдельной альтернативной ветки уровней. Казалось бы, что все не так сложно, но как добавить свою ветку уровней со своим определенным сюжетом и режимом игры в других частях отдельно от оригинала и аддона? Ведь там все немного иначе. Поэтому я решил все это разложить по полочкам и добавить в соответствующую тему на нашем форуме, авось да кому-нибудь пригодится.Обозначения:[X]- название вашего режима игры[Y]- название вашей новой ветки уровней[Z]- название ветки уже изначально имеющихся уровней в игре[N]- уникальная цифра чаптера по которой игра определяет какие уровни необходимо загружать[V]- уникальное имя контрольных точек и автосохранений. Пример можете посмотреть в функции Levels_GetLevelName(dir)[spoiler]uSpoileri9O1qFl i9O1qF' i9O1qF' i9O1qF' i9O1qF')).val('[\–] Спойлер');$( i9O1qF' i9O1qF' i9O1qF')).val('[+] Спойлер');$( i9O1qF'[+] Спойлер?Код--------------------------------------------------LScripts/HUD/Menu/GameMenu.luaitems ={--[X]={text = TXT.Menu.[X],desc = "",x = -1,y = 380,fontBigSize = 45,action = "PainMenu:SignAPact(1,true)",sndLightOn = "menu/menu/option-light-on_main",},--}--------------------------------------------------LScripts/HUD/Menu/MainMenu.luaitems ={SignAPact ={text = TXT.Menu.SignAPact,desc = TXT.MenuDesc.SignAPact,x = -1,y = 210,action = "PainMenu:ActivateScreen(GameMenu)",sndLightOn = "menu/menu/option-light-on_main",},--}--------------------------------------------------LScripts/HUD/Menu/NewGameMenu.luaNewGameMenu ={--backAction = "PainMenu:ActivateScreen(GameMenu)",--}--------------------------------------------------LScripts/HUD/Levels.lua[Y]={{{ map directory, name, sketch, card cond, card index, min. level },},}--======================================================================function Levels_FillMap()if not Game then return end------------------------------if Game. [X]thenLevels =[Y]else Levels =[Z]end------------------------------local current_set = false--end--======================================================================function Levels_GetNextLevel(name)if name == nil then return nil endif not Game then return end------------------------------ if Game. [X]thenLevels =[Y]else Levels =[Z]end------------------------------local ret = false--end--======================================================================function Levels_GetLevelName(dir)if dir == nil then return nil endif not Game then return end------------------------------ if Game. [X]thenLevels =[Y]elseLevels =[Z]end------------------------------for i=1,table.getn(Levels) dofor j=1,table.getn(Levels[i]) doif Levels[i][j][1] == dir thenreturn "C"..string.format("%02d",i).."E"..string.format("%02d",j).." - "..Levels[i][j][2]------------------------------elsereturn "[V]"..string.format("%02d",i).."[V]"..string.format("%02d",j).." - "..Levels[i][j][2]------------------------------endendendend--======================================================================function Levels_GetLevelByDir(dir)if dir == nil then return nil, nil end------------------------------for i=1,table.getn([Y]) dofor j=1,table.getn([Y][i]) doif [Y][i][j][1] == dir thenreturn j,iendendend------------------------------end--======================================================================function Levels_GetSketchByDir(dir)if dir == nil then return nil end------------------------------for i=1,table.getn([Y]) dofor j=1,table.getn([Y][i]) doif [Y][i][j][1] == dir thenreturn "HUD/Map/"..[Y][i][j][3]endendend------------------------------end--------------------------------------------------LScripts/HUD/PainMenu.lua------------------======================================================================function PainMenu:SignAPact(mode,[X])WORLD.SwitchToState(2)--------------------------------local add = "false"if [X]then add = "true" end------------------------------if not mode or mode == 1 thenif Game.GameInProgress thenPainMenu:AskYesNo(Languages.Texts[686], 'Game.GameInProgress = false; Game.LevelStarted = false; Game:ClearLevelsStats(false); PainMenu:SignAPact(2,'..add..')', 'PainMenu:ActivateScreen(GameMenu)' )else PainMenu:SignAPact(2,[X])end--if ask thenPainMenu:AskYesNo(Languages.Texts[636], "Game. [X]= "..add.."; Game.GameInProgress = false; Game.LevelStarted = false; if Game then Game. [X]= "..add.."; Game:ClearLevelsStats(true) end; PainMenu:ActivateScreen(NewGameMenu)", "Game. [X]= "..add.."; Game.GameInProgress = false; Game.LevelStarted = false; PainMenu:ActivateScreen(NewGameMenu)" )elseGame.GameInProgress = falseGame.LevelStarted = falseGame. [X]=[X]PainMenu:ActivateScreen(NewGameMenu)endendend--------------------------------------------------LScripts/Main/Game.luaGame ={Active = false,------------------------------[X]= false,--------------------------------}--======================================================================function Game:LoadLevel(name)Lev:Apply()if not PrecacheDisabled thenCache:PrecacheLevel(name)end------------------------------if string.find(name,"C[N]L",1,true) == 1 thenLev. [X]= trueendif Lev. [X]thenGame. [X]= trueelseGame. [X]= falseendif Game. [X]thenLevels =[Y]elseLevels =[Z]end--------------------------------end--======================================================================function Game:GetCurrentLevelState()local new = {}------------------------------new. [X]= Game.[X]------------------------------return newend--======================================================================function Game:SetCurrentLevelState(state)--------------------------------Game. [X]= state.[X]------------------------------end[/spoiler] Цитировать Жалоба #327 TranZit Мастера публикаций комментариев TranZit 20 мая 2016 10:20 0 Думаю, большинство знают о существовании такого бага, как краш игры при покупке карты Таро стоимостью, равной золоту у игрока (или меньше на одну или две монеты). В своей «лаборатории» мне удалось придумать обходной путь во избежание этого краша. Думаю, кому-нибудь да пригодится.[spoiler]uSpoilerVoTh6Cl VoTh6C' VoTh6C' VoTh6C' VoTh6C')).val('[\–] Скрипт');$( VoTh6C' VoTh6C' VoTh6C')).val('[+] Скрипт');$( VoTh6C'[+] СкриптData/LScripts/HUD/MagicBoard.lua:function MagicBoard:Setup() ... local cards,cards1,cards2 = nil for _,v in pairs(MagicCards.permCards) do if rawequal(v.cost,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then if Game.CardsAvailable[v.index] == true then cards = true end elseif rawequal(v.cost + 1,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then if Game.CardsAvailable[v.index] == true then cards1 = true end elseif rawequal(v.cost + 2,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then if Game.CardsAvailable[v.index] == true then cards2 = true end end end for _,v in pairs(MagicCards.timeCards) do if rawequal(v.cost,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then if Game.CardsAvailable[v.index] == true then cards = true end elseif rawequal(v.cost + 1,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then if Game.CardsAvailable[v.index] == true then cards1 = true end elseif rawequal(v.cost + 2,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then if Game.CardsAvailable[v.index] == true then cards2 = true end end end if Game then if cards == true then Game.PlayerMoney = Game.PlayerMoney + 3 MBOARD.SetCashCheat(Game.PlayerMoney + 3) elseif cards1 == true then Game.PlayerMoney = Game.PlayerMoney + 2 MBOARD.SetCashCheat(Game.PlayerMoney + 2) elseif cards2 == true then Game.PlayerMoney = Game.PlayerMoney + 1 MBOARD.SetCashCheat(Game.PlayerMoney + 1) end end ...end[/spoiler]=Скрипт Цитировать Жалоба #328 Jourgensen Модераторы публикаций комментариев Jourgensen 1 июня 2016 20:30 0 Достаточно просто взять и вытащить модуль MagicBoard.lua из запакованного архива и оставить в каталоге с игрой. Все отлично работает и никаких крашев. Вот нафига ты общее количество золото плюсишь? Плевать на три, на две, или одну единицу. Просто ЗАЧЕМ? И вот эта твоя писанина ни к чему. Цитировать Жалоба #329 TranZit Мастера публикаций комментариев TranZit 1 июня 2016 21:22 0 ЦитатаДостаточно просто взять и вытащить модуль MagicBoard.lua из запакованного архива и оставить в каталоге с игрой. Все отлично работает и никаких крашев.По-прежнему игра крашится. И не у меня одного. Такое в принципе невозможно. Напрямую исправить этот баг можно единственным способом: залезть в движок.Цитата Jourgensen ()Вот нафига ты общее количество золото плюсишь?При входе на доску активируется написанный мною скрипт, который сравнивает цену каждой карты с количеством золота у игрока. Если они оказываются равными, происходит одно из следующих действий: 1) если цена карты и деньги у игрока равны, то скрипт прибавляет к деньгам игрока три монеты, поскольку краш может произойти не только, если цена карты равна золоту у игрока, но и если золота на одну или две монеты больше; 2) если золото превышает цену карты на одну монету, скрипт прибавляет к деньгам игрока две монеты; 3) если же золото превышает цену карты на две монету, тогда к деньгам игрока прибавляются одна монета. В всех случаях золото всегда будет превышать цену любой карты на три монеты, что никогда не позволит игре крашнуться в этот момент.Цитата Jourgensen ()И вот эта твоя писанина ни к чему.Как раз таки наоборот. Я хотя бы делаю, а не просто сижу на мягком месте, не пишу ерунды и не наговариваю на других. Цитировать Жалоба #330