Hello! I’ve been designing some GUI components for a card game and i’ve run into a roadblock. I’ve made a function that displays a card’s data into three textlabels, for HP, ATK and Name respectively. This works fine for exactly 7 tries. After that it gives an error that hasn’t helped me much.
The functions that likely have some sort of problem are either DisplayCard() or the arguments passed to DisplayCard() on the LocalScript.
Any help is greatly appreciated!
Here are both the ModuleScript and LocalScript that are used.
--This is a ModuleScript
local iCards = {}
local tCards = {}
local deckCards = {}
local CardsModule = {
["AllCards"] = {tCards}; ["Deck1"] = {deckCards}
}
CardsModule.CreateCard = function(iID, iImgID, iName, iType, iCost, iRarity, iHP, iATK, iATRB1, iATRB2, iRace1, iRace2, iSkill)
iCards.ID = iID; iCards.ImgID = iImgID; iCards.Name = iName; iCards.Type = iType; iCards.Cost = iCost; iCards.Rarity = iRarity; iCards.HP = iHP; iCards.ATK = iATK; iCards.Attribute1 = iATRB1; iCards.Attribute2 = iATRB2; iCards.Race1 = iRace1; iCards.Race2 = iRace2; iCards.Skill = iSkill
table.insert(tCards, iCards)
table.insert(deckCards, iCards)
iCards = {}
end
CardsModule.Shuffle = function(t) -- t is the table to shuffle
local j, temp
for i = #t, 1, -1 do
j = math.random(i)
temp = t[i]
t[i] = t[j]
t[j] = temp
end
return t
end
CardsModule.DisplayCard = function(ID, Target, tabla) -- Target has to be a Frame
if tonumber(ID) ~= nil and tonumber(ID) >=1 then
Target.HP.Text = tabla[tonumber(ID)].HP
if tabla[tonumber(ID)].ATK ~= nil then
Target.ATK.Text = tabla[tonumber(ID)].ATK
else
Target.ATK.Text = 0
end
Target.DisplayName.Text = tabla[tonumber(ID)].Name
if tabla[tonumber(ID)].ImgID ~= nil then
Target.CardIMG.Image = tabla[tonumber(ID)].ImgID
else
Target.CardIMG.Image = "rbxassetid://15783857674"
end
end
end
-- Crear todas las Cartas
CardsModule.CreateCard(1, nil, "Hash", "Hero", nil, "Hero", 30, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(2, nil, "Yner", "Hero", nil, "Hero", 30, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(3, nil, "Aery", "Hero", nil, "Hero", 30, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(4, nil, "Choice", "Hero", nil, "Hero", 25, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(5, nil, "Lucifer", "Hero", nil, "Hero", 25, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(6, nil, "Veyle", "Hero", nil, "Hero", 25, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(7, nil, "Praesentia", "Hero", nil, "Hero", 25, nil, nil, nil, nil, nil, nil)
CardsModule.CreateCard(8, nil, "Ezom", "Hero", nil, "Hero", 20, nil, nil, nil, "Cat", "Nehri", nil)
CardsModule.CreateCard(9, nil, "Darkann", "Hero", nil, "Hero", 20, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(10, nil, "Eyja", "Hero", nil, "Hero", 20, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(11, nil, "Malice", "Hero", nil, "Hero", 20, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(12, nil, "Puss", "Hero", nil, "Hero", 10, nil, nil, nil, "Cat", nil, nil)
CardsModule.CreateCard(13, "rbxassetid://15783958612", "Praesentia, The Luminary", "Summon", 9, "Astral", 7, 5, "Intangible", nil, nil, nil, nil)
return CardsModule
-- This is a LocalScript, running in a TextButton
local CardsModule = require(game.ReplicatedStorage.CardsModule)
local Hand = {}
local PlaceholderCard = script.Parent.Parent.Parent.Parent.PlaceholderCard
local offset = 0.08
local TotalOffset = offset
script.Parent.MouseButton1Click:Connect(function()
local Deck = CardsModule.Shuffle(CardsModule.Deck1[1])
table.insert(Hand, Deck[1])
table.remove(Deck,1)
local Card = PlaceholderCard:Clone()
Card.Parent = game.Players.LocalPlayer.PlayerGui
Card.Frame.Position = UDim2.new(PlaceholderCard.Frame.Position.X.Scale + TotalOffset, PlaceholderCard.Frame.Position.X.Offset, PlaceholderCard.Frame.Position.Y.Scale, PlaceholderCard.Frame.Position.Y.Offset)
TotalOffset = TotalOffset + offset
CardsModule.DisplayCard(table.maxn(Hand), Card.Frame, Deck)
end)