Everything works exceptionally fine, But i do get a couple issues. What the below code does is handle player data when exchanging one value to another (cash to bank and vise vera) the issue is, when i enter a value of '1' into the text box for a deposit and i have 0$ cash on me. i will draw out sum of cash equal to what was deposited before i deposited the '1' dollar (im trying to deposit 1 dollar to see if any bugs occur and sure enough)
NPC in the workspace.
local data = require(game:GetService("ServerScriptService"):WaitForChild("CoreScripts"):WaitForChild("Modules"):WaitForChild("DataHandler"))
local RE = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("InteractionRemote")
local RE2 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("LeaveRemote")
local RE3 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("TypeRemote")
local RE4 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("TransactionRemote")
local RE5 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("BalanceRemote")
local npc = script.Parent
local cd = npc.Parent:WaitForChild("Desk"):WaitForChild("Mic"):WaitForChild("ClickDetector")
local gui = npc.Head.BillboardGui
local NPCName = "Teller"
local message = "What can i do for ya?"
local message2 = "So you wanna make a transaction, or check your balance?"
local message3 = "You don't have enough to do that."
local chattime = .05
local animation = Instance.new("Animation")
animation.AnimationId = "http://www.roblox.com/Asset?ID=1258082161"
local idle = npc.Humanoid:LoadAnimation(animation)
local animation2 = Instance.new("Animation")
animation2.AnimationId = "http://www.roblox.com/Asset?ID=1258030744"
local lookaround = npc.Humanoid:LoadAnimation(animation2)
idle:play()
spawn(function()
while wait(15) do
lookaround:play()
end
end)
RE.OnServerEvent:connect(function(player)
local char = workspace:WaitForChild(player.Name)
char:WaitForChild("Humanoid").WalkSpeed = 0
char:WaitForChild("Humanoid").JumpPower = 0
RE:FireClient(player, NPCName, message, chattime)
end)
RE2.OnServerEvent:connect(function(player) -- Leave selected
local char = workspace:WaitForChild(player.Name)
char:WaitForChild("Humanoid").WalkSpeed = 16
char:WaitForChild("Humanoid").JumpPower = 50
end)
RE3.OnServerEvent:connect(function(player) -- Transaction selected
RE3:FireClient(player, NPCName, message2, chattime, data.CurrentData(player).Cash, data.CurrentData(player).Bank)
end)
RE4.OnServerEvent:connect(function(player, transtype, amount, cash, bank) -- transaction made, update datastore.
data.UpdateData(player, "Cash", cash)
data.UpdateData(player, "Bank", bank)
if transtype then
local message5 = "Deposited $"..amount.." successfully."
RE4:FireClient(player, NPCName, message5, chattime)
elseif not transtype then
local message5 = "Withdrew $"..amount.." successfully."
RE4:FireClient(player, NPCName, message5, chattime)
end
end)
RE5.OnServerEvent:connect(function(player) -- Check Balance
local balance = "You have a total of $"..data.CurrentData(player).Bank.." in your bank account."
RE5:FireClient(player, NPCName, balance, chattime)
end)
local script in a gui
local player = game:GetService("Players").LocalPlayer
local RE = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("InteractionRemote")
local RE2 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("LeaveRemote")
local RE3 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("TypeRemote")
local RE4 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("TransactionRemote")
local RE5 = game:GetService("ReplicatedStorage"):WaitForChild("BankRemotes"):WaitForChild("Bank00"):WaitForChild("BalanceRemote")
local dialog = script.Parent
local choices = dialog.Choices
local choices2 = dialog.Choices2
local Transaction = choices.Transaction.Button
local leave = choices.Leave.Button
local withdraw = choices2.Withdraw.Button
local deposit = choices2.Deposit.Button
local balance = choices2.Balance.Button
local chat = dialog.dialogbox
local sound = dialog.Sound
local transframe = dialog.TransactionFrame
local transinfo = transframe.Type
local amount = transframe.Amount
local cd = workspace.MapContents.BuildingContents.Bank00.Interior:WaitForChild("Desk"):WaitForChild("Mic"):WaitForChild("ClickDetector")
local mark = workspace.MapContents.BuildingContents.Bank00.Interior.NPC.Head.BillboardGui
local active = false
cd.MouseHoverEnter:connect(function(player)
mark.Enabled = true
end)
cd.MouseHoverLeave:connect(function(player)
mark.Enabled = false
end)
cd.MouseClick:connect(function()
dialog.Enabled = true
RE:FireServer()
end)
Transaction.MouseButton1Click:connect(function()
choices.Visible = false
RE3:FireServer()
end)
leave.MouseButton1Click:connect(function()
dialog.Enabled = false
choices.Visible = false
chat.Visible = false
RE2:FireServer()
end)
local function deposittransaction(cash, bank) -- Check transaction type then make transaction
transframe.Visible = true
chat.Visible = false
choices2.Visible = false
amount:CaptureFocus()
local transtype = true
transinfo.Text = '- Deposit -'
amount.FocusLost:connect(function()
if not tonumber(amount.Text) then
transinfo.Text = 'You must enter a number!'
wait(1)
transinfo.Text = '- Deposit -'
elseif cash >= tonumber(amount.Text) then
cash = cash - tonumber(amount.Text)
bank = bank + tonumber(amount.Text)
RE4:FireServer(transtype, amount.Text, cash, bank)
RE2:FireServer()
elseif cash < tonumber(amount.Text) then
transinfo.Text = 'You dont have enough to do that!'
wait(1)
transinfo.Text = '- Deposit -'
end
end)
end
local function withdrawtransaction(cash, bank) -- Check transaction type then make transaction
transframe.Visible = true
chat.Visible = false
choices2.Visible = false
amount:CaptureFocus()
local transtype = false
transinfo.Text = '- Withdrawal -'
amount.FocusLost:connect(function()
if tonumber(amount.Text) == nil then
transinfo.Text = 'You must enter a number!'
wait(1)
transinfo.Text = '- Withdrawal -'
elseif bank >= tonumber(amount.Text) then
cash = cash + tonumber(amount.Text)
bank = bank - tonumber(amount.Text)
RE4:FireServer(transtype, amount.Text, cash, bank)
RE2:FireServer()
elseif bank < tonumber(amount.Text) then
transinfo.Text = 'You dont have enough to do that!'
wait(1)
transinfo.Text = '- Withdrawal -'
end
end)
end
balance.MouseButton1Click:connect(function() -- Check Balance
RE5:FireServer()
end)
RE.OnClientEvent:connect(function(NPCName, message, chattime) -- Starting Interaction
chat.Visible = true
for i = 1, #message do
chat.TextLabel.Text = NPCName..": "..string.sub(message,1,i)
sound:Play()
wait(chattime)
end
wait(1)
choices.Visible = true
end)
RE3.OnClientEvent:connect(function(NPCName, message, chattime, cash, bank) -- Transaction Selected
for i = 1, #message do
chat.TextLabel.Text = NPCName..": "..string.sub(message,1,i)
sound:Play()
wait(chattime)
end
wait(1)
choices2.Visible = true
withdraw.MouseButton1Click:connect(function() -- Withdraw Cash
withdrawtransaction(cash, bank)
end)
deposit.MouseButton1Click:connect(function() -- Deposit Cash
deposittransaction(cash, bank)
end)
end)
RE4.OnClientEvent:connect(function(NPCName, message, chattime) -- Make Transaction
chat.Visible = true
choices2.Visible = false
for i = 1, #message do
chat.TextLabel.Text = NPCName..": "..string.sub(message,1,i)
sound:Play()
wait(chattime)
end
wait(1)
transframe.Visible = false
chat.Visible = false
dialog.Enabled = false
RE2:FireServer()
end)
RE5.OnClientEvent:connect(function(NPCName, message, chattime) -- Check Balance
chat.Visible = true
choices2.Visible = false
for i = 1, #message do
chat.TextLabel.Text = NPCName..": "..string.sub(message,1,i)
sound:Play()
wait(chattime)
end
wait(1)
chat.Visible = false
dialog.Enabled = false
RE2:FireServer()
end)
module for datastores
local data = {}
local ds = game:GetService("DataStoreService"):GetDataStore("TestingSim2Data_v0.1.0")
local RE = game:GetService("ReplicatedStorage"):WaitForChild("ClientRemotes"):WaitForChild("MoneyRemote")
local players = game:GetService('Players')
sessiondata = {}
local default = {
Cash = 5000,
Bank = 9999999999
}
data.UpdateData = function(player, index, value)
sessiondata[player][index] = value
RE:FireClient(player, sessiondata[player])
print("Value "..sessiondata[player][index].." was updated to "..value)
end
local function SaveData(player)
if sessiondata[player] then
ds:SetAsync(player.UserId, sessiondata[player])
end
end
local function SetupData(player)
local playerdata = data.GetData(player)
if not playerdata then
print("setting up player data")
sessiondata[player] = default
SaveData(player)
else
print("player has data")
sessiondata[player] = playerdata
end
end
players.PlayerAdded:connect(function(player)
SetupData(player)
end)
players.PlayerRemoving:connect(function(player)
SaveData(player)
sessiondata[player] = nil
end)
data.GetData = function(player)
return ds:GetAsync(player.UserId)
end
data.CurrentData = function(player)
return sessiondata[player]
end
return data
