Помощь с Lua-скриптами Баян Баян 21-02-2012, 20:56 0 В чём ошибка? Показать / Скрыть текст |-- Как правильно? [signature]--------------------{signature}[/signature] [fast]Цитировать[/fast] Жалоба #0 Str_Ghost Посетители публикации комментария Str_Ghost 21 мая 2012 22:11 0 Evgeniy, Data/Textures/HUD/Board/Cards Цитировать Жалоба #391 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 21 мая 2012 22:14 0 Str_Ghost,спасибо,что откликаешься на мои вопросы!! Не мог ты или кто другой разъяснить насчёт изменения свойств карт таро? Цитировать Жалоба #392 Str_Ghost Посетители публикации комментария Str_Ghost 21 мая 2012 22:36 0 Evgeniy, Чтобы создавать свои условия получения - нужно знать Lua скрипты, чтобы их знать - нужно изучать Lua язык. Пойми, в двух словах это не объяснить. А вообще, я и сам не знаю как их править, но рекомендую всё-таки обратиться к каким-нибудь учебникам. Цитировать Жалоба #393 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 22 мая 2012 00:17 0 У меня тут назрело несколько вопросов относительно экспорта из Некровижн: 1.Как безошибочно сделать оружие с моделью из Necrovision,чтобы у него проигрывалась анимация(стрельбы,альт.стрельбы)? 2.Как затекстурить монстров и дать им хорошую анимацию? 3.Можно ли сделать полную копию оружия из Necrovision,т.е.чтобы были те же патроны,чтобы была та же стрельба и анимация. Пара других вопросов: 1.Как сделать так,чтобы при заморозке противника он не становился синего цвета? 2.Как подвесить предмет в воздухе(наподобие святых предметов и объектов их Supernatural'а)? Буду очень рад помощи!!! Цитировать Жалоба #394 Str_Ghost Посетители публикации комментария Str_Ghost 22 мая 2012 07:31 0 Quote (Evgeniy)Как безошибочно сделать оружие с моделью из Necrovision,чтобы у него проигрывалась анимация(стрельбы,альт.стрельбы)? Если оттуда копировать модели оружия вместе с анимациями, то всё будет как надо, вроде. Quote (Evgeniy)2 Нигде про это не написано, поэтому придётся тебе самому как-нибудь попробовать. Теоретически, при помощи скрипта блендера можно сделать новые анимации т.к. там присутствует импорт в .ani формат, но неизвестно, работает ли это или нет. Насчёт текстур, если ты имеешь ввиду сделать свою развёртку, то тут я тоже хз, не пробовал. А сами текстуры разумеется можно редактировать, Photoshop или Paint тебе в помощь Quote (Evgeniy)3 Lua скрипты тебе в помощь Quote (Evgeniy)1 См. предыдущее. Хотя это, скорее всего, будет легче Quote (Evgeniy)2 Если тебе это нужно на время в редакторе, то скопируй и вставь объект, он будет висеть в воздухе, пока не будет запущена игра. А так, скорее всего, нужна какая-нибудь команда в настройках объекта Цитировать Жалоба #395 Sviatoslav Мастера публикаций комментариев Sviatoslav 22 мая 2012 17:09 0 Evgeniy, чтобы объект висел в воздухе, нужно прописать в нём "o.Pinned = true" (без кавычек). Работает и на предметах и на монстрах. По оружию. Я далеко не всё знаю, но кое-что реализовал в новой версии мода, в частности, заморозку без шейдера. Нужно делать много разных изменений, так замаешься объяснять. А по добавлению моделей оружия Str_Ghost прав - модель, анимации и текстуры будут работать, а вот со стрельбой, положением на экране и прочим надо много играться со скриптами. Цитировать Жалоба #396 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 22 мая 2012 17:11 0 Sviatoslav,я вот переделал пушку как у тебя в ролике была,но там почему то на рукоятке присутствовала серая РУКА! Как её убрать? Цитировать Жалоба #397 Sviatoslav Мастера публикаций комментариев Sviatoslav 22 мая 2012 18:56 0 Evgeniy, ну, серая - потому что без текстуры. А чтобы убрать, надо в скрипте lua прописать: function o:OnCreateEntity() MDL.SetMeshVisibility(self._Entity, "Mesh1Shape", false) self:ReloadTextures() end Цитировать Жалоба #398 Evgeniy Модераторы публикаций комментариев Evgeniy Офлайн 1 июня 2012 09:25 0 Вот чтобы у оружия была анимация,как я понял,должны присутствовать модели idle,attack и др? Или что-то другое?Добавлено (01.06.2012, 09:25)---------------------------------------------Можно ли сделать такой скрипт,чтобы при использовании прыжков карта таро не выдавалась? Цитировать Жалоба #399 BlooDFloweR Администраторы публикаций комментариев BlooDFloweR 12 июня 2012 22:55 0 У меня вопрос: как можно сделать (или как изменить IceBulet) чтобы была возможность вместо ледяной пули стрелять ледяным фаерболом который замораживает на определённом радиусе? Цитировать Жалоба #400 dilettante Мастера публикаций комментариев dilettante 16 июня 2012 04:04 0 Quote (scorcher)Эх... и что я только не пытался сделать..., но не видит игра больше 34 карт Таро и все К счастью или, к сожалению , но то, что касается количества карт Таро, определено скриптами: "Data\LScripts\Main\Game.lua" Таблица Game = { ... CardsAvailable = {} - доступные карт Таро CardsSelected = {} - выбранные карты Таро ... } в массивах CardsAvailable & CardsSelected "резервируются" места для карт Таро. Массивы расширяются добавлением значения false для каждой вновь создаваемой карты. В этом же файле ниже в функциях Game:EnableSilverCards() & Game:EnableGoldenCards() строками вида: if Game.CardsSelected[cards[N].index] then some_function end проверяется выбрана карта или нет и задаётся её действие-эффект. N в квадратных скобках обозначает номер слота, в который помещается карта в MagicBoard. Далее необходимо внести изменения в файл "Data\LScripts\HUD\MagicBoard.lua" Во-первых, нужно перераспределить пространство доски, таблица BoardSlots = {}. Во-вторых, добавить слоты для новых карт, таблица MagicCards = {}. Думаю, разобраться не сложно (хотя, я не представляю, как можно уместить в один ряд больше слотов, чем их там есть). Единственное, на что обращаю внимание, это поле index в описаниях слотов. Ему присваивается значение равное номеру места, зарезервированного в массивах CardsAvailable & CardsSelected. В этом же файле переписываем функцию MagicBoard_UpdateCardsStatus(). В случае независимого мода функция будет выглядеть вот так: function MagicBoard_UpdateCardsStatus() for i, o in MagicCards.timeCards do if Game.CardsAvailable[o.index] then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 ) end end for i, o in MagicCards.permCards do if Game.CardsAvailable[o.index] then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.PermAll, i - 1 ) end end MagicBoard_SaveStatus() end Ну, и, наконец, не забываем про "Data\LScripts\HUD\Levels.lua" и "Data\Levels\ModLevelName\ModLevelName.lua". В первом файле, в поле "card index" указывается абсолютный номер карты (CardsAvailable & CardsSelected), во втором, в пременной _MagicCard - номер слота. Цитировать Жалоба #401 scorcher Мастера публикаций комментариев scorcher 17 июня 2012 13:03 0 dilettante Огромное спасибо! Сам лично имею опыт программирования, но с lua-скриптами практически не знаком Quoteв массивах CardsAvailable & CardsSelected "резервируются" места для карт Таро. Массивы расширяются добавлением значения false для каждой вновь создаваемой карты. Меня тоже заинтересовали эти массивы, но я что-то совсем не подумал о том, что куча false в них - это на самом деле просто инициализация (даже лень посчитать было - а то бы может и догадался ). По остальному я, в принципе, и сам уже разобрался, но все равно спасибо, да и другим участниками форума может пригодиться. По поводу размещения карт, жаль конечно, что их можно размещать только в один определенный ряд, но я померил в фотошопе текстуру доски по пикселям - можно втиснуть еще по три карты в каждый ряд (итого 6) - только чтобы это не смотрелось коряво естественно над дизайном доски надо еще поработать. Есть еще вопрос. В овердосовском Game.lua особые способности таких карт, как например, Громовая поступь или Assault, задаются вот этими переменными: BelialAssault = false, Thundersteps = false, Но движок ПК 1.64 их не понимает - я так понял что непосредственно работу этих карт через скрипты определить не получится? Цитировать Жалоба #402 dilettante Мастера публикаций комментариев dilettante 17 июня 2012 23:07 0 Quote (scorcher)Есть еще вопрос. В овердосовском Game.lua особые способности таких карт, как например, Громовая поступь или Assault, задаются вот этими переменными: BelialAssault = false, Thundersteps = false, Но движок ПК 1.64 их не понимает - я так понял что непосредственно работу этих карт через скрипты определить не получится? Почему же не получится? Очень даже получится . ==================================================== Эффект карты "Штурм" (BelialAssault) прописан в CActor.lua (Data\LScripts\Classes) function CActor:OnDamage ... if self.CustomOnDamage then local skip, dmg ... if skip then if type ~= AttackTypes.OutOfLevel and not (self.IsBoos and Game.BelialAssault) then return end end ... end Функция CustomOnDamage определена не у всех монстров, кроме того, монстр должен иметь "непробиваемую" защиту и вдобавок быть Боссом. ==================================================== Карта "Шаги грома" (Thundersteps) определена в CPlayer.lua (Data\LScripts\Classes) function CPlayer:Steps(delta) ... if self._Walking ... ... if Game.Thundersteps then for i,v in Actors do if v.Health > 0 and v._AIBrain and v.OnDamage then v:OnDamage(1,nil,AttackTypes.Demon) end end end ... end ==================================================== Разумеется, всё это находится в скриптах PK:Overdose и применимо в сценариях оригинальной игры. Цитировать Жалоба #403 scorcher Мастера публикаций комментариев scorcher 18 июня 2012 05:28 0 Еще раз спасибо... Ну теперь мне остается только над дизайном доски поработать. И последний наверное вопрос. В начале чтоб было понятней вкратце обрисую то, что я хочу сделать. В курсе наврено мы сделали аддон к супернатуралу back to the hell. Там теперь 24+10 уровней. Так вот сейчас смотрю активно конвертируются карты и вообще на форуме началась очень здравая движуха. Хотелось бы, конечно с разрешения картоделов, включить еще 6 карт (если наберется) в back to the hell. Но чтобы не морочится с режимом аддона, включить их в режим ориг.игры, там как раз остаются свободными 6 вакансий под них. Так вот мне получается еще надо будет сделать чтобы эти новые карты Таро, так же как в оригинальном пейне перебрасывались в режим аддона. Как я понял это прописано в MagicBoard.lua - здесь в этих двух функциях: [spoiler]uSpoilers3OWkPl s3OWkP' s3OWkP' s3OWkP' s3OWkP')).val('Закрыть спойлер');$( s3OWkP' s3OWkP' s3OWkP')).val('Открыть спойлер ');$( s3OWkP'Открыть спойлер ... function MagicBoard:Setup() MagicBoard_LoadStatus() if Game.AddOn then for i, o in MagicCards.timeCards do if o.index < 25 then Game.CardsAvailable[o.index] = true end end for i, o in MagicCards.permCards do if o.index < 25 and o.index ~= 23 then Game.CardsAvailable[o.index] = true end end end -- Slots local i, o = next( BoardSlots, nil ) while i do local y2 = -1 if o.y2 then y2 = o.y2 end local numSlots = o.numSlots if not Game.AddOn and o.numSlots > 4 then numSlots = 12 end local x = o.x_pk local y = o.y_pk local size = o.size_pk if Game.AddOn then x = o.x_addon y = o.y_addon size = o.size_addon end MBOARD.SetupSlots( o.type, numSlots, y, size[1], size[2], o.spaceWidth, y2 ) for n, m in x do MBOARD.SetSlotPosition( o.type, n - 1, x[n] ) end i,o = next( BoardSlots, i ) end -- Cards for i, o in MagicCards.timeCards do MBOARD.AddCard( MagicCardsTypes.Time, o.name, o.texture, o.desc, o.cost, Game.CardsAvailable[o.index], Game.CardsSelected[o.index], o.bigImage ) end for i, o in MagicCards.permCards do MBOARD.AddCard( MagicCardsTypes.Perm, o.name, o.texture, o.desc, o.cost, Game.CardsAvailable[o.index], Game.CardsSelected[o.index], o.bigImage ) end end function MagicBoard_UpdateCardsStatus() for i, o in MagicCards.timeCards do if Game.CardsAvailable[o.index] then if o.index < 25 or Game.AddOn then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 ) end end end for i, o in MagicCards.permCards do if Game.CardsAvailable[o.index] then if o.index < 25 or Game.AddOn then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.PermAll, i - 1 ) end end end MagicBoard_SaveStatus() end [/spoiler] мне кажется такой вариант будет правильным (если индексы новых карт будут 35+): if Game.AddOn then for i, o in MagicCards.timeCards do if o.index < 25 and o.index > 34 then Game.CardsAvailable[o.index] = true end end for i, o in MagicCards.permCards do if o.index < 25 and o.index > 34 and o.index ~= 23 then Game.CardsAvailable[o.index] = true end end end Но я не совсем понял что выполняет вот это: if o.index < 25 or Game.AddOn then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 ) end Цитировать Жалоба #404 dilettante Мастера публикаций комментариев dilettante 18 июня 2012 14:08 0 Массивы CardsAvailable & CardsSelected хранятся в сейвах игры. Строка: Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 ) фиксирует состояние массива CardsSelected. Происходит это в момент нажатия на кнопку выхода с доски. Именно в этот момент и вызывается функция MagicBoard_UpdateCardsStatus. А условие if o.index < 25 or Game.AddOn then отделяет мух от котлет. То есть, если индекс карты меньше 25, а так будет, если мы играем "Heaven's Got A Hitman", то состояние карты будет сохранено по выходу с доски. Так же будет, если мы играем "BOOH" (AddOn). Очевидно условие поставлено, чтобы мы не могли манипулировать картами AddOn'а, играя в первую часть, так как индекс карт "BOOH" больше 24. Хотя с другой стороны, как ими можно манипулировать, если они даже не видны на доске . Та часть кода, которую ты переписал, выкладывает на доску все карты оригинала, когда мы начинаем AddOn с чистого листа. Во-первых, тебе этот код, по идее не нужен совсем, ведь ты же не собираешься отдать игроку сразу все карты еще до того, как он начал играть в твой мод. Во-вторых, переписал ты его не правильно, оператор AND объединяет проверяемые значения и в данном случае условие не выполнится НИКОГДА (а значит, оно не имеет смысла), потому что один и тот же индекс не может быть и меньше 25 и больше 34 одновременно. Ну, а, поскольку, нужен масштаб оригинала, но с бОльшим количеством уровней, чем "HGAH" и "BOOH" вместе взятые, то тебе просто нужно изменить строку: if not Game.AddOn and o.numSlots > 4 then numSlots = 12 end заменив число 12 тем количеством слотов, которое у тебя будет на самом деле. Ну, и переписать MagicBoard_UpdateCardsStatus, как я говорил уже раньше. Цитировать Жалоба #405 Sviatoslav Мастера публикаций комментариев Sviatoslav 18 июня 2012 14:33 0 dilettante, ты так всё интересно рассказываешь, что не могу не влезть с парой вопросов. Первый: в оригинальной игре, когда мы находимся в меню выбора уровней (колесо с мигающим в ценре кристаллом), в табличке внизу мы видим следующее. Например: Chapter 1 Level 1 Cemetery Вопрос в том, возможно ли сделать так, чтобы первые четыре круга назывались, соответственно, Chapter 1, ...2, ...3, ...4, а пятый - по-другому (есть просто задумка сюжетно отделить пятую главу). И второй вопрос: В NecroVisioN есть бокс с названием Ladder, в котором игрок может перемещаться по вертикальной стене. Очень удобная штука, если нужна лестница там, где она не предусмотрена в карте. Лично у меня не хватило масла её адаптировать для Painkiller. Возможно ли это? Цитировать Жалоба #406 scorcher Мастера публикаций комментариев scorcher 19 июня 2012 03:01 0 dilettante Quoteif o.index < 25 or Game.AddOn then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 ) end Согласен, бессмысленное условие QuoteТа часть кода, которую ты переписал, выкладывает на доску все карты оригинала, когда мы начинаем AddOn с чистого листа. Во-первых, тебе этот код, по идее не нужен совсем, ведь ты же не собираешься отдать игроку сразу все карты еще до того, как он начал играть в твой мод. Да, я понимал, за что она отвечает. Но наш мод сам по себе состоит из "как бы оригинал" + "аддон" - и я хотел так же как в оригинальном PK+BOOH, когда начинаешь сразу играть в BOOH, если не хочется снова проходить оригинал - имелся бы доступ к его картам (ну кроме бож. вмешат.). По поводу: Quoteif o.index < 25 and o.index > 34 and o.index ~= 23 then Конечно же if (o.index < 25 or o.index > 34) and o.index ~= 23 then Что мне конкретно надо было так это расширить карту ориг.режима с добавлением этих новых 6 карт. То есть режим аддона мы отставляем как бы не тронутым. Я сделал это вот так: [spoiler]uSpoilerkmoFa9l kmoFa9' kmoFa9' kmoFa9' kmoFa9')).val('Закрыть спойлер');$( kmoFa9' kmoFa9' kmoFa9')).val('Открыть спойлер ');$( kmoFa9'Открыть спойлер BoardSlots = { PermAll = { type = BoardSlotsTypes.PermAll, numSlots = 18, x_pk = { 53, 107, 161, 216, 271, 324, 379, 434, 487, 542, 597, 650, nil, nil, nil, nil, nil, 977, 977, 977 }, x_addon = { 53, 107, 161, 216, 271, 324, 379, 434, 487, 542, 597, 650, 705, 758, 813, 867, 922, 977, 977, 977 }, y_pk = 56, y_addon = 78, size_pk = { 46, 74 }, size_addon = { 46, 74 }, spaceWidth = 78, }, TimeAll = { type = BoardSlotsTypes.TimeAll, numSlots = 17, x_pk = { 53, 107, 161, 216, 271, 324, 379, 434, 487, 542, 597, 650, nil, nil, nil, nil, nil, 977, 977, 977 }, x_addon = { 53, 107, 161, 216, 271, 324, 379, 434, 487, 542, 597, 650, 705, 758, 813, 867, 922, 977, 977, 977 }, y_pk = 618, y_addon = 638, size_pk = {46, 74 }, size_addon = { 46, 74 }, spaceWidth = 78, }, --- новые координаты еще не промерил, ...977, 977, 977... - это для образца ... if not Game.AddOn and o.numSlots > 4 then numSlots = 20 end ...[/spoiler] Остается только прописать работу карт в Game.lua и в CActor.lua и перерисовать доску в фотошопе. Таким образом, я делаю доступным в режиме оригинала 30 карт и могу добавить туда еще 6 уровней, как раз 5 кругов с 6 слотами - мне позволят это сделать. А в режиме аддона будут доступны 40 карт, причем 29 (минус бож.вмешат.) карт из оригинала будут доступны сразу - если захочется поиграть сразу с аддона - как это и было в классике. П.С. Еще раз огромное спасибо , прям не знаю, чтобы делал без твоих советов Цитировать Жалоба #407 dilettante Мастера публикаций комментариев dilettante 19 июня 2012 05:24 0 Quote (Sviatoslav)возможно ли сделать так, чтобы первые четыре круга назывались, соответственно, Chapter 1, ...2, ...3, ...4, а пятый - по-другому Sviatoslav, я могу ошибаться, но окно с "колесом", похоже, единственное в меню, в котором ничего особо не изменить. В остальных диалогах пункты меню можно обновлять динамически, но только не на "колесе", тут даже ссылка на фоновую текстуру находится непосредственно в движке. Quote (Sviatoslav)В NecroVisioN есть бокс с названием Ladder ... Возможно ли это адаптировать для Painkiller? А я и не знал, что там есть такие радости как Ladder.CBox . Впрочем, я кроме демки больше ничего и не видел. Действие этого бокса основано на функциях WORLD.CreateLadder() и WORLD.EnableLadder(), также реализованных на уровне движка, NecroVision движка. В ПК работать не будет. Не знаю, что тут можно придумать, по-моему, проще все же добавить ladderzone в саму карту.Добавлено (19.06.2012, 05:24)---------------------------------------------Quote (scorcher)x_pk = { 53, 107, 161, 216, 271, 324, 379, 434, 487, 542, 597, 650, nil, nil, nil, nil, nil, 977, 977, 977 }, scorcher, а может, имеет смысл переиндексировать карты и не делать разрыв посередине набора, сдвинув Addon-карты в конец списка? Quote (scorcher)П.С. Еще раз огромное спасибо , прям не знаю, чтобы делал без твоих советов Пожалуйста, рад помочь . Цитировать Жалоба #408 scorcher Мастера публикаций комментариев scorcher 19 июня 2012 11:19 0 Quotescorcher, а может, имеет смысл переиндексировать карты и не делать разрыв посередине набора, сдвинув Addon-карты в конец списка? Я об этом подумал - но тогда придется переписывать принадлежность карт во всех levels/название_уровня.lua - правильно я понимаю? Для тех кто будет работать с уровнями (привык к прежним индексам) - эта переиндексация станет сильным головняком, а разрыв я думаю не особо страшно - но конечно же у порядочного програмера такой способ должен вызывать бурю негодования А так я смогу сделать пока сделать временный патч из трех скриптов и текстур доски/новых карт, который каждый сможет поставить поверх супернатурала (поверх ориганала наверно не пойдет - там по-мойму Святослав тоже что-то в Game.lua нашаманил ). К вечеру уже будет готово и выложу - текстуру доски уже сделал и код прописал, осталось только карты подкрасить.Добавлено (19.06.2012, 07:55)---------------------------------------------Счас дорабатывая game.lua - я обнаружил странную вещь, сверил несупернатуральским game.lua (из ориг.игры) - там тоже самое. А именно действие карты double time bonus закомментирвано - интересно раньше кто-нибудь замечал, что она не работает [spoiler]uSpoilerudmPQDl udmPQD' udmPQD' udmPQD' udmPQD')).val('Закрыть спойлер');$( udmPQD' udmPQD' udmPQD')).val('Открыть спойлер ');$( udmPQD'Открыть спойлер ... -- time bonus (Golden Cards last 10 seconds longer) if Game.CardsSelected[cards[11].index] then self.GoldenEnableTime = self.GoldenEnableTime + 10 end -- double time bonus (Golden Cards last 20 seconds longer) if Game.CardsSelected[cards[12].index] then -- self.GoldenEnableTime = self.GoldenEnableTime + 20 end ...[/spoiler]Добавлено (19.06.2012, 11:19)---------------------------------------------Вот блин , уже все сделал, и опять я столкнулся с одной проблемой: Все карты, которые занимают в таблицах: [spoiler]uSpoiler9saFP3l 9saFP3' 9saFP3' 9saFP3' 9saFP3')).val('Закрыть спойлер');$( 9saFP3' 9saFP3' 9saFP3')).val('Открыть спойлер ');$( 9saFP3'Открыть спойлер MagicCards = { timeCards = { ... } permCards = { ... } }[/spoiler] 19-й, 20-й и так далее... слоты - не могут быть взяты с доски. То есть они на ней отображаются (в смысле текстуры), но прилипли намертво, даже при наведении мыши - не вылазит подсказка по ним. Хотя везде прописано, что слотов 20. Судя по тому что карты отображаются, то дело не в таблицах, уж не в движке ли прописано подобное ограничение? Цитировать Жалоба #409 Sviatoslav Мастера публикаций комментариев Sviatoslav 19 июня 2012 16:30 0 dilettante, печаль... Мне эти мысли приходили в голову, но я надеялся, что ошибался. scorcher, я исправлял этот косяк с неработающим двойным бонусом времени в небольшом патчике ещё года три назад. Сейчас посмотрел в свой Game.lua - у меня строчка раскомментирована. Может, ты перенёс этот файл из оригинала, когда возвращал вырезанные мной карты? Цитировать Жалоба #410 dilettante Мастера публикаций комментариев dilettante 19 июня 2012 19:43 0 Индексация вещь вообще условная. Ну, да, придётся подправить немного здесь, чуть-чуть там. Но в данном случае речь идет не столько об индексации, сколько о таблицах слотов. А с учётом вновь вскрывшихся обстоятельств Quote (scorcher)19-й, 20-й и так далее... слоты - не могут быть взяты с доски (и это уже действительно не зависит от сценариев, как и разрядность "колёс"), тем более имеет смысл, навести порядок. В результате задействовать 15 слотов (30 карт) в оригинальной части и 18 слотов (36 карт) - в Addon-части, выведя на доску только 26 карт из числа первых 30. Таким образом, можно будет опробовать 40 карт Таро. Quote (scorcher)действие карты double time bonus закомментирвано - интересно раньше кто-нибудь замечал Да, это известный промах, который тянется ещё с версии 1.0, и почему-то так и не был устранён даже в 1.64. Наверное в этом есть какой-то тайный смысл . Цитировать Жалоба #411 scorcher Мастера публикаций комментариев scorcher 20 июня 2012 02:35 0 Quoteтем более имеет смысл, навести порядок. Это не имеет значения... Я всяко пробовал. В принципе-то без разницы как я буду распределять картв по оригиналу и аддону, все равно карта должна быть прописана в таблицах: timeCards = {...} permCards = {...} QuoteВ результате задействовать 15 слотов (30 карт) в оригинальной части и 18 слотов (36 карт) - в Addon-части, выведя на доску только 26 карт из числа первых 30. Таким образом, можно будет опробовать 40 карт Таро Идея хорошая, мне она тоже приходила в голову, но за вывод карт отвечает их индекс, а все равно все карты должны быть включены в таблицу. И не важно что за индекс у карты, если она стоит на 19+ месте в таблице - она оказывается вот такой мертвой - и не важно в каком порядке или режиме она выводится Quoteэтот файл из оригинала, когда возвращал вырезанные мной карты? Ну да , но не совсем - я сравнивал их на тотал командоре, и переносил туда твои скриптовые доработки, оставляя нетронутой ту часть, которая отвечает за карты Таро. П.С. Буду еще пробовать, но у меня плохое предчувствие, а жаль я такие прикольные карты наделал, да и овердосовские перебалансировал: [spoiler]uSpoilere2cYQYl e2cYQY' e2cYQY' e2cYQY' e2cYQY')).val('Закрыть спойлер');$( e2cYQY' e2cYQY' e2cYQY')).val('Открыть спойлер ');$( e2cYQY'Открыть спойлер серебр. Адская броня: +100 брони в начале уровня Жертва: начальное здоровье 25, но максимальное 200 - перекрывает остальные подобные карты Честность: Урон по вам уменьшен х0.8, а ваш увеличен х1.2, но вы не можете использовать золотые карты. золото Шаги грома (из овердоса без изменений) Жребий: рандомный урон х0.2 - х8 (увеличил разброс) - перекрывает другие карты модифицирующие урон Агрессия: скорость движения и перезарядки х4, но карты действуют только 10 секунд. - перекрывает другие подобные карты, в том числе бонусы времени.[/spoiler] Цитировать Жалоба #412 scorcher Мастера публикаций комментариев scorcher 20 июня 2012 03:01 0 dilettante Слушай мне сейчас пришла в голову оригинальная идея. Сделать две таблицы, которые будут грузиться в зависимости от режима: [spoiler]uSpoilerOFHKGCl OFHKGC' OFHKGC' OFHKGC' OFHKGC')).val('Закрыть спойлер');$( OFHKGC' OFHKGC' OFHKGC')).val('Открыть спойлер ');$( OFHKGC'Открыть спойлер MagicCards = { timeCards = { ... }, permCards = { ... } } MagicCards1 = { timeCards = { ... }, permCards = { ... } } ... -- Cards if Game.AddOn then for i, o in MagicCards1.timeCards do MBOARD.AddCard( MagicCardsTypes.Time, o.name, o.texture, o.desc, o.cost, Game.CardsAvailable[o.index], Game.CardsSelected[o.index], o.bigImage ) end for i, o in MagicCards1.permCards do MBOARD.AddCard( MagicCardsTypes.Perm, o.name, o.texture, o.desc, o.cost, Game.CardsAvailable[o.index], Game.CardsSelected[o.index], o.bigImage ) end else for i, o in MagicCards.timeCards do MBOARD.AddCard( MagicCardsTypes.Time, o.name, o.texture, o.desc, o.cost, Game.CardsAvailable[o.index], Game.CardsSelected[o.index], o.bigImage ) end for i, o in MagicCards.permCards do MBOARD.AddCard( MagicCardsTypes.Perm, o.name, o.texture, o.desc, o.cost, Game.CardsAvailable[o.index], Game.CardsSelected[o.index], o.bigImage ) end end end function MagicBoard_UpdateCardsStatus() if Game.AddOn then for i, o in MagicCards1.timeCards do if Game.CardsAvailable[o.index] then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 ) end end for i, o in MagicCards1.permCards do if Game.CardsAvailable[o.index] then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.PermAll, i - 1 ) end end else for i, o in MagicCards.timeCards do if Game.CardsAvailable[o.index] then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 ) end end for i, o in MagicCards.permCards do if Game.CardsAvailable[o.index] then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.PermAll, i - 1 ) end end end MagicBoard_SaveStatus() end[/spoiler] Теперь я могу выводить карты в зависимости от режима. Правда это создаст некий хаос в level/уровень.lua, и таки придется делать тотальную переиндексацию... и такое же условие (на проверку аддона) для выбора номера слота, придется вводить и в game.lua... И будет сильная путаница при переброске карт с ориг.режима в режим аддона..., но все же если будет работать, то почему бы не заморочиться.... П.С. А вот, кстати, что у меня получилось с текстурами: Цитировать Жалоба #413 dilettante Мастера публикаций комментариев dilettante 20 июня 2012 05:39 0 То, что карты "оригинала" и AddOn'а необходимо разделить по условию, даже не обсуждается, ведь списки слотов будут иметь перекрытие. Просто, на мой взгляд, намного удобнее это делать, когда карты, находящиеся в конце линейки имеют и более высокий номер индекса. Во-первых, это поможет избежать путаницы, о которой ты, кстати, и сам говоришь. Во-вторых, уберёт условия типа "меньше или больше". Ну, и просто, код, даже если в нём пара строчек, должен быть не только рабочим, но и целесообразным, если не сказать больше - изящным. Поэтому и стоит упорядочить индексы, но как говорится, хозяин-барин. Как тебе удобней всё это увязывать, так и делай. Добавлено (20.06.2012, 05:39) --------------------------------------------- scorcher, по коду под спойлером. Да, как вариант вполне. Только, наверное, лучше вот так: if Game.AddOn then MagicCards = { timeCards ={}, permCards ={} } else MagicCards = { timeCards ={}, permCards ={} } end То есть, разнести слоты по разным таблицам не прибегая к переименованию. При этом будет меньше исправлений в MagicBoard:Setup() & MagicBoard_UpdateCardsStatus() и в Game.lua, где к таблице с именем MagicCards обращение происходит трижды. Ага, и по скриншотам , не то чтобы критика, но может будет красивее, если под каждой карточкой будет своё "пятнышко", а не сплошная полоса под всеми. Как думаешь? Цитировать Жалоба #414 scorcher Мастера публикаций комментариев scorcher 20 июня 2012 06:26 0 dilettante уже вовсю занимаюсь переиндексацией и переслотизацией если можно так выразится. Почти все сделал Теперь вот нужно сделать так чтобы два перекрестных слота в таблице, не переходили в режим аддона. То есть, например: 14 и 15 слоты по сереб. картам в оригинале - это дважды использовать карты и 150 нач. здоровья В таблице аддона эти карты я исключил - на их месте реген. здоровья и брони. Теперь ситуация такая - мы прошли оригинал получили дважды_исп_карты и 150_нач_здор, запускаем режим аддона и открытыми там у нас оказываются рег_здор и рег_брони - потому что там они занимают эти слоты. Мне кажется тут надо что-то нашаманить с function MagicBoard_UpdateCardsStatus() ... if o.index ... then Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( ... По поводу невведения второй таблицы, а реализации за счет условия - да так лучше, но вышеперечисленную проблему это не решает. Quoteно может будет красивее, если под каждой карточкой будет своё "пятнышко", а не сплошная полоса под всеми. Как думаешь? Изначально это не планировалось мной, потому что между картами остаются очень малые расстояния, а теперь учитывая что одновременное число карт уменьшится - думаю можно попробовать сделать... но на самом деле - это очень трудоемкая работа с замерами и подгонкой дизайна.Добавлено (20.06.2012, 06:26)---------------------------------------------Предложенная тобой схема не работает: Quoteif Game.AddOn then MagicCards = { timeCards ={} permCards ={} } else MagicCards = { timeCards ={} permCards ={} } end мы же обращаемся к функциям загрузки этих таблиц, уже после того как загружен MagicBoard.lua, а когда она загружается естественно Game.AddOn = false, поэтому в режиме аддона, все остается как и в оригинале. Оставил: MagicCards MagicCards1 Цитировать Жалоба #415 dilettante Мастера публикаций комментариев dilettante 20 июня 2012 12:15 0 Quote (scorcher)Предложенная тобой схема не работает... в режиме аддона, все остается как и в оригинале. Да, верно MagicBoard.lua грузится единожды, этот момент я упустил из вида, но это можно поправить, например, так: ======================================== MagicBoard.lua function MagicBoard:Setup() DoFile("../Data/LScripts/HUD/MagicBoard.lua") ... end ======================================== Game.lua function Game:LoadLevel(name) DoFile("../Data/LScripts/HUD/MagicBoard.lua") ... end ======================================== Цитировать Жалоба #416 scorcher Мастера публикаций комментариев scorcher 20 июня 2012 13:22 0 Quoteно это можно поправить, например, так Да все-таки лучше пусть лучше будет одна таблица, а то game.lua выдает какие-то сбои с двумя таблицами - я толком не разобрался... Ну теперь остается только придумать что-то с пересекающимися слотами. Я хочу сделать, чтобы они затирались, когда начинаешь играть в аддон. В каком файле прописаны действия которые происходят при начале новой игры (ну например спрашивается "стереть ли имеющиеся карты") ? Цитировать Жалоба #417 dilettante Мастера публикаций комментариев dilettante 20 июня 2012 20:07 0 Quote (scorcher)Ну теперь остается только придумать что-то с пересекающимися слотами. scorcher, давай мы сделаем так. Ты скинешь файлы со своими наработками, а я посмотрю, в чём проблема. По обрывкам кода не могу составить общую картину и сказать что-либо вразумительное.Добавлено (20.06.2012, 20:07)---------------------------------------------Собственно, нужны только твои Game.lua и MagicBoard.lua. Не знаю, можно ли тут как-то в личку отослать файл, чтобы не маячить им пока он ещё сырой. Может Str_Ghost просветит меня по поводу прикрепления и пересылки файлов. Цитировать Жалоба #418 Str_Ghost Посетители публикации комментария Str_Ghost 20 июня 2012 21:41 0 Quote (dilettante)Может Str_Ghost просветит меня по поводу прикрепления и пересылки файлов Прикреплять файлы можно не более чем весом 2000 КБ. Чуть выше кнопки "Добавить ответ" можно прикрепить файлы. Думаю, на пару .txt'шек сойдёт. Только файлы по-толще выкладывайте на "narod.ru" или любой другой бесплатный файлообменник, какой удобно (если ссылка публичная, т.е. для всех, то постарайтесь не выкладывать на DepositFiles). А то место на сайте не бесконечное Цитировать Жалоба #419 scorcher Мастера публикаций комментариев scorcher 21 июня 2012 03:12 0 dilettante Ты уж извини что заморачиваю, вообщем глянь как время будет вот тут текстуры ссылка если надо А это старые версии скриптов, где я еще хотел 40 карт одновременно, но 2 последних слота прилипали Цитировать Жалоба #420