PainkilleR

Фан-клуб

ОПРОС

Оцените этот сайт

menuleft3
menuleft4

Помощь с Lua-скриптами

В чём ошибка?

Как правильно?
[signature]
--------------------
{signature}
[/signature]
[fast]Цитировать[/fast] Жалоба
#0
Str_Ghost
Посетители
  • публикации
  • комментария
Evgeniy, Data/Textures/HUD/Board/Cards
Цитировать Жалоба
Модераторы
  • публикаций
  • комментариев
Str_Ghost,спасибо,что откликаешься на мои вопросы!! :)

Не мог ты или кто другой разъяснить насчёт изменения свойств карт таро?
Цитировать Жалоба
Str_Ghost
Посетители
  • публикации
  • комментария
Evgeniy, Чтобы создавать свои условия получения - нужно знать Lua скрипты, чтобы их знать - нужно изучать Lua язык. Пойми, в двух словах это не объяснить. ;) А вообще, я и сам не знаю как их править, но рекомендую всё-таки обратиться к каким-нибудь учебникам.
Цитировать Жалоба
Модераторы
  • публикаций
  • комментариев
У меня тут назрело несколько вопросов относительно экспорта из Некровижн:
1.Как безошибочно сделать оружие с моделью из Necrovision,чтобы у него проигрывалась анимация(стрельбы,альт.стрельбы)?

2.Как затекстурить монстров и дать им хорошую анимацию?

3.Можно ли сделать полную копию оружия из Necrovision,т.е.чтобы были те же патроны,чтобы была та же стрельба и анимация.

Пара других вопросов:
1.Как сделать так,чтобы при заморозке противника он не становился синего цвета?

2.Как подвесить предмет в воздухе(наподобие святых предметов и объектов их Supernatural'а)?

Буду очень рад помощи!!! DD DD
Цитировать Жалоба
Str_Ghost
Посетители
  • публикации
  • комментария
Quote (Evgeniy)
Как безошибочно сделать оружие с моделью из Necrovision,чтобы у него проигрывалась анимация(стрельбы,альт.стрельбы)?

Если оттуда копировать модели оружия вместе с анимациями, то всё будет как надо, вроде.
Quote (Evgeniy)
2

Нигде про это не написано, поэтому придётся тебе самому как-нибудь попробовать. Теоретически, при помощи скрипта блендера можно сделать новые анимации т.к. там присутствует импорт в .ani формат, но неизвестно, работает ли это или нет. Насчёт текстур, если ты имеешь ввиду сделать свою развёртку, то тут я тоже хз, не пробовал. А сами текстуры разумеется можно редактировать, Photoshop или Paint тебе в помощь
Quote (Evgeniy)
3

Lua скрипты тебе в помощь
Quote (Evgeniy)
1

См. предыдущее. Хотя это, скорее всего, будет легче
Quote (Evgeniy)
2

Если тебе это нужно на время в редакторе, то скопируй и вставь объект, он будет висеть в воздухе, пока не будет запущена игра. А так, скорее всего, нужна какая-нибудь команда в настройках объекта
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Evgeniy, чтобы объект висел в воздухе, нужно прописать в нём "o.Pinned = true" (без кавычек). Работает и на предметах и на монстрах.
По оружию. Я далеко не всё знаю, но кое-что реализовал в новой версии мода, в частности, заморозку без шейдера. Нужно делать много разных изменений, так замаешься объяснять. А по добавлению моделей оружия Str_Ghost прав - модель, анимации и текстуры будут работать, а вот со стрельбой, положением на экране и прочим надо много играться со скриптами.
Цитировать Жалоба
Модераторы
  • публикаций
  • комментариев
Sviatoslav,я вот переделал пушку как у тебя в ролике была,но там почему то на рукоятке присутствовала серая РУКА!
Как её убрать?
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Evgeniy, ну, серая - потому что без текстуры. А чтобы убрать, надо в скрипте lua прописать:
function o:OnCreateEntity()
MDL.SetMeshVisibility(self._Entity, "Mesh1Shape", false)
self:ReloadTextures()
end
Цитировать Жалоба
Модераторы
  • публикаций
  • комментариев
Вот чтобы у оружия была анимация,как я понял,должны присутствовать модели idle,attack и др?
Или что-то другое?

Добавлено (01.06.2012, 09:25)
---------------------------------------------
Можно ли сделать такой скрипт,чтобы при использовании прыжков карта таро не выдавалась?

Цитировать Жалоба
BlooDFloweR
Администраторы
  • публикаций
  • комментариев
У меня вопрос: как можно сделать (или как изменить IceBulet) чтобы была возможность вместо ледяной пули стрелять ледяным фаерболом который замораживает на определённом радиусе?
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
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 - номер слота.
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
dilettante
Огромное спасибо! respect Сам лично имею опыт программирования, но с lua-скриптами практически не знаком
Quote
в массивах CardsAvailable & CardsSelected "резервируются" места для карт Таро. Массивы расширяются добавлением значения false для каждой вновь создаваемой карты.

Меня тоже заинтересовали эти массивы, но я что-то совсем не подумал о том, что куча false в них - это на самом деле просто инициализация (даже лень посчитать было - а то бы может и догадался :) ).

По остальному я, в принципе, и сам уже разобрался, но все равно спасибо, да и другим участниками форума может пригодиться.

По поводу размещения карт, жаль конечно, что их можно размещать только в один определенный ряд, но я померил в фотошопе текстуру доски по пикселям - можно втиснуть еще по три карты в каждый ряд (итого 6) - только чтобы это не смотрелось коряво естественно над дизайном доски надо еще поработать.

Есть еще вопрос. В овердосовском Game.lua особые способности таких карт, как например, Громовая поступь или Assault, задаются вот этими переменными:
BelialAssault = false,
Thundersteps = false,
Но движок ПК 1.64 их не понимает - я так понял что непосредственно работу этих карт через скрипты определить не получится?
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
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 и применимо в сценариях оригинальной игры.
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
Еще раз спасибо... Ну теперь мне остается только над дизайном доски поработать.
И последний наверное вопрос.
В начале чтоб было понятней вкратце обрисую то, что я хочу сделать. В курсе наврено мы сделали аддон к супернатуралу 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
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
Массивы 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, как я говорил уже раньше.
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
dilettante, ты так всё интересно рассказываешь, что не могу не влезть с парой вопросов. :)
Первый: в оригинальной игре, когда мы находимся в меню выбора уровней (колесо с мигающим в ценре кристаллом), в табличке внизу мы видим следующее. Например:
Chapter 1
Level 1
Cemetery
Вопрос в том, возможно ли сделать так, чтобы первые четыре круга назывались, соответственно, Chapter 1, ...2, ...3, ...4, а пятый - по-другому (есть просто задумка сюжетно отделить пятую главу).
И второй вопрос: В NecroVisioN есть бокс с названием Ladder, в котором игрок может перемещаться по вертикальной стене. Очень удобная штука, если нужна лестница там, где она не предусмотрена в карте. Лично у меня не хватило масла её адаптировать для Painkiller. :D Возможно ли это?
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
dilettante
Quote
if o.index < 25 or Game.AddOn then
Game.CardsSelected[o.index] = not MBOARD.IsCardInSlot( BoardSlotsTypes.TimeAll, i - 1 )
end

Согласен, бессмысленное условие
Quote
Та часть кода, которую ты переписал, выкладывает на доску все карты оригинала, когда мы начинаем AddOn с чистого листа. Во-первых, тебе этот код, по идее не нужен совсем, ведь ты же не собираешься отдать игроку сразу все карты еще до того, как он начал играть в твой мод.

Да, я понимал, за что она отвечает. Но наш мод сам по себе состоит из "как бы оригинал" + "аддон" - и я хотел так же как в оригинальном PK+BOOH, когда начинаешь сразу играть в BOOH, если не хочется снова проходить оригинал - имелся бы доступ к его картам (ну кроме бож. вмешат.).

По поводу:
Quote
if o.index < 25 and o.index > 34 and o.index ~= 23 then

facepalm
Конечно же
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 (минус бож.вмешат.) карт из оригинала будут доступны сразу - если захочется поиграть сразу с аддона - как это и было в классике.
П.С. Еще раз огромное спасибо :D , прям не знаю, чтобы делал без твоих советов
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
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)
П.С. Еще раз огромное спасибо , прям не знаю, чтобы делал без твоих советов

Пожалуйста, рад помочь :) .
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
Quote
scorcher, а может, имеет смысл переиндексировать карты и не делать разрыв посередине набора, сдвинув Addon-карты в конец списка?

Я об этом подумал - но тогда придется переписывать принадлежность карт во всех
levels/название_уровня.lua - правильно я понимаю?

Для тех кто будет работать с уровнями (привык к прежним индексам) - эта переиндексация станет сильным головняком, а разрыв я думаю не особо страшно - но конечно же у порядочного програмера такой способ должен вызывать бурю негодования :D

А так я смогу сделать пока сделать временный патч из трех скриптов и текстур доски/новых карт, который каждый сможет поставить поверх супернатурала (поверх ориганала наверно не пойдет - там по-мойму Святослав тоже что-то в Game.lua нашаманил :) ).

К вечеру уже будет готово и выложу - текстуру доски уже сделал и код прописал, осталось только карты подкрасить.

Добавлено (19.06.2012, 07:55)
---------------------------------------------
Счас дорабатывая game.lua - я обнаружил странную вещь, сверил несупернатуральским game.lua (из ориг.игры) - там тоже самое. А именно действие карты double time bonus закомментирвано - интересно раньше кто-нибудь замечал, что она не работает eek
[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.
Судя по тому что карты отображаются, то дело не в таблицах, уж не в движке ли прописано подобное ограничение?

Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
dilettante, печаль... Мне эти мысли приходили в голову, но я надеялся, что ошибался. %)
scorcher, я исправлял этот косяк с неработающим двойным бонусом времени в небольшом патчике ещё года три назад. Сейчас посмотрел в свой Game.lua - у меня строчка раскомментирована. :) Может, ты перенёс этот файл из оригинала, когда возвращал вырезанные мной карты?
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
Индексация вещь вообще условная. Ну, да, придётся подправить немного здесь, чуть-чуть там. Но в данном случае речь идет не столько об индексации, сколько о таблицах слотов. А с учётом вновь вскрывшихся обстоятельств
Quote (scorcher)
19-й, 20-й и так далее... слоты - не могут быть взяты с доски

(и это уже действительно не зависит от сценариев, как и разрядность "колёс"), тем более имеет смысл, навести порядок.

В результате задействовать 15 слотов (30 карт) в оригинальной части и 18 слотов (36 карт) - в Addon-части, выведя на доску только 26 карт из числа первых 30. Таким образом, можно будет опробовать 40 карт Таро.

Quote (scorcher)
действие карты double time bonus закомментирвано - интересно раньше кто-нибудь замечал

Да, это известный промах, который тянется ещё с версии 1.0, и почему-то так и не был устранён даже в 1.64. Наверное в этом есть какой-то тайный смысл :D .
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
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]
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
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... И будет сильная путаница при переброске карт с ориг.режима в режим аддона..., но все же если будет работать, то почему бы не заморочиться....

П.С. А вот, кстати, что у меня получилось с текстурами:
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
То, что карты "оригинала" и 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 обращение происходит трижды.

Ага, и по скриншотам :) , не то чтобы критика, но может будет красивее, если под каждой карточкой будет своё "пятнышко", а не сплошная полоса под всеми. Как думаешь? ;)
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
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)
---------------------------------------------
Предложенная тобой схема не работает:

Quote
if Game.AddOn then
MagicCards =
{
timeCards ={}
permCards ={}
}
else
MagicCards =
{
timeCards ={}
permCards ={}
}
end


мы же обращаемся к функциям загрузки этих таблиц, уже после того как загружен MagicBoard.lua, а когда она загружается естественно Game.AddOn = false, поэтому в режиме аддона, все остается как и в оригинале.

Оставил:
MagicCards
MagicCards1
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
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
========================================
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
Quote
но это можно поправить, например, так

Да все-таки лучше пусть лучше будет одна таблица, а то game.lua выдает какие-то сбои с двумя таблицами - я толком не разобрался...

Ну теперь остается только придумать что-то с пересекающимися слотами.

Я хочу сделать, чтобы они затирались, когда начинаешь играть в аддон.

В каком файле прописаны действия которые происходят при начале новой игры (ну например спрашивается "стереть ли имеющиеся карты") ?
Цитировать Жалоба
dilettante
Мастера
  • публикаций
  • комментариев
Quote (scorcher)
Ну теперь остается только придумать что-то с пересекающимися слотами.

scorcher, давай мы сделаем так. Ты скинешь файлы со своими наработками, а я посмотрю, в чём проблема. По обрывкам кода не могу составить общую картину и сказать что-либо вразумительное.

Добавлено (20.06.2012, 20:07)
---------------------------------------------
Собственно, нужны только твои Game.lua и MagicBoard.lua. Не знаю, можно ли тут как-то в личку отослать файл, чтобы не маячить им пока он ещё сырой. Может Str_Ghost просветит меня по поводу прикрепления и пересылки файлов.

Цитировать Жалоба
Str_Ghost
Посетители
  • публикации
  • комментария
Quote (dilettante)
Может Str_Ghost просветит меня по поводу прикрепления и пересылки файлов

Прикреплять файлы можно не более чем весом 2000 КБ. Чуть выше кнопки "Добавить ответ" можно прикрепить файлы. Думаю, на пару .txt'шек сойдёт. Только файлы по-толще выкладывайте на "narod.ru" или любой другой бесплатный файлообменник, какой удобно (если ссылка публичная, т.е. для всех, то постарайтесь не выкладывать на DepositFiles). А то место на сайте не бесконечное ^_^
Цитировать Жалоба
scorcher
Мастера
  • публикаций
  • комментариев
dilettante
Ты уж извини что заморачиваю, вообщем глянь как время будет вот тут текстуры
ссылка
если надо
А это старые версии скриптов, где я еще хотел 40 карт одновременно, но 2 последних слота прилипали
Цитировать Жалоба

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своей новости.

Мы в ВК

***
Фан группа по игре
Большая группа по игре
Первая группа по игре
menuright2
menuright3
menuright4
Сайт работает под управлением DataLife Engine.
© PainkillerClub.ru 2011-2023 | © Design by Мария Андрюшечкина.