Segue Script de Jewel Bank, feito por mim, em LUA, para servidores X-Team. Foi testado inicialmente em Season 2, mas deve funcionar em todas.
Read-me.txt
Modo de utilização
- /bank -> Mostra o extrato do seu banco de jóias (quantidade de cada jóia)
- /dep <joia> <quantidade> - Faz o depósito de jóias no banco
- /saq <joia> <quantidade> - Faz o saque de jóias do banco
<joia>: bless (Jewel of Bless) | soul (Jewel of Soul) | chaos (Jewel of Chaos)
life (Jewel of Life) | creation (Jewel of Creation) | guardian (Jewel of Guardian)
harmony (Jewel of Harmony) | gemstone (Gemstone) | hrefin (High Refining)
lrefin (Lower Refining)
-- Exemplo: depositar 30 Bless: /dep bless 30
-- Exemplo: sacar 30 Lower Refining: /saq lrefin 30
[Instalação]
1º - Adicione no ScripMain.lua
require("ScriptJewelBank")
2º - Adicione na função OnCommandManager
if code == 188 then
BankView(aIndex,arg)
return 1
end
if code == 189 then
BankSaq(aIndex,arg)
return 1
end
if code == 190 then
BankDep(aIndex,arg)
return 1
end
3º - Adicione no CommandManager.txt
188 "/bank"
189 "/saq"
190 "/dep"
4º - Rode o arquivo JewelBank.sql no SQL Server para criar as colunas necessárias
5º - Copie os arquivos de dentro da pasta Script e cole na pasta Data/Script do seu MuServer
O script funciona apenas para jóias avulsas, ou seja, packs de Bless ou Soul não são colocados no banco.
Quando tiver um pack de Jóia e quiser por no banco, basta desfazer o pack e adicionar.
Script testado na Season 2, caso queira adicionar jóias custons, é só seguir o mesmo padrão do Script, ou manda aqui o nome da Joia com o Index que eu adiciono.
Em breve estarei adicionando a função para funcionar com packs e atualizando o tópico.
Faça bom proveito, diga não ao monopólio.
Olá, você poderia me ajudar?, Estou usando esse código, adicionei apenas as linhas de comando e conexão ao SQL:
BridgeFunctionAttach("OnReadScript","ScriptBankDep_OnReadScript")
BridgeFunctionAttach("OnCommandManager","ScripBankDep_OnCommandManager")
function ScriptBankDep_OnReadScript()
if(not SQLCheck()) then
SQLConnect("MuOnline_EX501","sa","1234567890")
end
end
function ScripBankDep_OnCommandManager(aIndex,code,arg)
if(code == 89) then
BankDep(aIndex,arg)
return 1
end
return 0
end
function BankDep(aIndex,arg)
local User = GetObjectAccount(aIndex)
SQLQuery("SELECT TOP (1) memb___id, BSoul, BBless, BLife, BChaos, BCreation, BGuardian, BHarmony, BRefin, BLowRefin, BGemstone FROM MEMB_INFO WHERE memb___id='"..User.."' order by memb___id")
SQLFetch()
SQLClose()
local joia = CommandGetArgString(arg,0)
local quantidade = CommandGetArgNumber(arg,1)
if quantidade <= 0 then
NoticeSend(aIndex,1,"O número de jóias a ser depositado deve ser maior do que 0")
else
if joia == "bless" then
local blessinv = InventoryGetItemCount(aIndex,7181,-1)
if quantidade <= blessinv then
InventoryDelItemCount(aIndex,7181,-1,quantidade)
SQLQuery("Update MEMB_INFO set BBless=BBless+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Bless ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Bless para depositar")
end
elseif joia == "soul" then
local soulinv = InventoryGetItemCount(aIndex,7182,-1)
if quantidade <= soulinv then
InventoryDelItemCount(aIndex,7182,-1,quantidade)
SQLQuery("Update MEMB_INFO set BSoul=BSoul+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Soul ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Soul para depositar")
end
elseif joia == "life" then
local lifeinv = InventoryGetItemCount(aIndex,7184,-1)
if quantidade <= lifeinv then
InventoryDelItemCount(aIndex,7184,-1,quantidade)
SQLQuery("Update MEMB_INFO set BLife=BLife+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Life ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Life para depositar")
end
elseif joia == "chaos" then
local chaosinv = InventoryGetItemCount(aIndex,6159,-1)
if quantidade <= chaosinv then
InventoryDelItemCount(aIndex,6159,-1,quantidade)
SQLQuery("Update MEMB_INFO set BChaos=BChaos+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Chaos ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Chaos para depositar")
end
elseif joia == "creation" then
local creationinv = InventoryGetItemCount(aIndex,7190,-1)
if quantidade <= creationinv then
InventoryDelItemCount(aIndex,7190,-1,quantidade)
SQLQuery("Update MEMB_INFO set BCreation=BCreation+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Creation ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Creation para depositar")
end
elseif joia == "guardian" then
local guardianinv = InventoryGetItemCount(aIndex,7199,-1)
if quantidade <= guardianinv then
InventoryDelItemCount(aIndex,7199,-1,quantidade)
SQLQuery("Update MEMB_INFO set BGuardian=BGuardian+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Guardian ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Guardian para depositar")
end
elseif joia == "harmony" then
local harmonyinv = InventoryGetItemCount(aIndex,7210,-1)
if quantidade <= harmonyinv then
InventoryDelItemCount(aIndex,7210,-1,quantidade)
SQLQuery("Update MEMB_INFO set BHarmony=BHarmony+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Harmony ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Harmony para depositar")
end
elseif joia == "hrefin" then
local hrefininv = InventoryGetItemCount(aIndex,7212,-1)
if quantidade <= hrefininv then
InventoryDelItemCount(aIndex,7212,-1,quantidade)
SQLQuery("Update MEMB_INFO set BRefin=BRefin+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." High Refin ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de High Refin para depositar")
end
elseif joia == "lrefin" then
local lrefininv = InventoryGetItemCount(aIndex,7211,-1)
if quantidade <= lrefininv then
InventoryDelItemCount(aIndex,7211,-1,quantidade)
SQLQuery("Update MEMB_INFO set BLowRefin=BLowRefin+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Low Refin ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Low Refin para depositar")
end
elseif joia == "gemstone" then
local gemnsinv = InventoryGetItemCount(aIndex,7209,-1)
if quantidade <= gemnsinv then
InventoryDelItemCount(aIndex,7209,-1,quantidade)
SQLQuery("Update MEMB_INFO set BGemstone=BGemstone+"..quantidade.." where memb___id='"..User.."'")
NoticeSend(aIndex,1,string.format("Você adicionou "..quantidade.." Gemstone ao seu banco!"))
else
NoticeSend(aIndex,1,"Você não tem essa quantidade de Gemstone para depositar")
end
else
NoticeSend(aIndex,1,"Você deve escolher uma jóia válida.")
end
end
end
O status do banco funciona bem para mim, mas no caso de depósito de joias sempre recebo esta mensagem:
if quantidade <= 0 then
NoticeSend(aIndex,1,"O número de jóias a ser depositado deve ser maior do que 0")
Também deixarei aqui o código ScriptCore.lua para que vocês possam ver as opções, grato pela ajuda
require("System\\ScriptDefine")
require("System\\ScriptReader")
BridgeFunctionTable = {}
function BridgeFunctionAttach(BridgeName,FunctionName)
if BridgeName == "OnReadScript" then
if BridgeFunctionTable[1] == nil then BridgeFunctionTable[1] = {} end
table.insert(BridgeFunctionTable[1],{Function=FunctionName})
elseif BridgeName == "OnShutScript" then
if BridgeFunctionTable[2] == nil then BridgeFunctionTable[2] = {} end
table.insert(BridgeFunctionTable[2],{Function=FunctionName})
elseif BridgeName == "OnTimerThread" then
if BridgeFunctionTable[3] == nil then BridgeFunctionTable[3] = {} end
table.insert(BridgeFunctionTable[3],{Function=FunctionName})
elseif BridgeName == "OnCommandManager" then
if BridgeFunctionTable[4] == nil then BridgeFunctionTable[4] = {} end
table.insert(BridgeFunctionTable[4],{Function=FunctionName})
elseif BridgeName == "OnCharacterEntry" then
if BridgeFunctionTable[5] == nil then BridgeFunctionTable[5] = {} end
table.insert(BridgeFunctionTable[5],{Function=FunctionName})
elseif BridgeName == "OnCharacterClose" then
if BridgeFunctionTable[6] == nil then BridgeFunctionTable[6] = {} end
table.insert(BridgeFunctionTable[6],{Function=FunctionName})
elseif BridgeName == "OnNpcTalk" then
if BridgeFunctionTable[7] == nil then BridgeFunctionTable[7] = {} end
table.insert(BridgeFunctionTable[7],{Function=FunctionName})
elseif BridgeName == "OnMonsterDie" then
if BridgeFunctionTable[8] == nil then BridgeFunctionTable[8] = {} end
table.insert(BridgeFunctionTable[8],{Function=FunctionName})
elseif BridgeName == "OnUserDie" then
if BridgeFunctionTable[9] == nil then BridgeFunctionTable[9] = {} end
table.insert(BridgeFunctionTable[9],{Function=FunctionName})
elseif BridgeName == "OnUserRespawn" then
if BridgeFunctionTable[10] == nil then BridgeFunctionTable[10] = {} end
table.insert(BridgeFunctionTable[10],{Function=FunctionName})
elseif BridgeName == "OnCheckUserTarget" then
if BridgeFunctionTable[11] == nil then BridgeFunctionTable[11] = {} end
table.insert(BridgeFunctionTable[11],{Function=FunctionName})
elseif BridgeName == "OnCheckUserKiller" then
if BridgeFunctionTable[12] == nil then BridgeFunctionTable[12] = {} end
table.insert(BridgeFunctionTable[12],{Function=FunctionName})
elseif BridgeName == "OnItemPick" then
if BridgeFunctionTable[13] == nil then BridgeFunctionTable[13] = {} end
table.insert(BridgeFunctionTable[13],{Function=FunctionName})
elseif BridgeName == "OnItemDrop" then
if BridgeFunctionTable[14] == nil then BridgeFunctionTable[14] = {} end
table.insert(BridgeFunctionTable[14],{Function=FunctionName})
elseif BridgeName == "OnPacketRecv" then
if BridgeFunctionTable[15] == nil then BridgeFunctionTable[15] = {} end
table.insert(BridgeFunctionTable[15],{Function=FunctionName})
elseif BridgeName == "OnSQLAsyncResult" then
if BridgeFunctionTable[16] == nil then BridgeFunctionTable[16] = {} end
table.insert(BridgeFunctionTable[16],{Function=FunctionName})
end
end
function BridgeFunction_OnReadScript()
if BridgeFunctionTable[1] ~= nil then
for n=1,#BridgeFunctionTable[1],1 do
_G[BridgeFunctionTable[1][n].Function]()
end
end
end
function BridgeFunction_OnShutScript()
if BridgeFunctionTable[2] ~= nil then
for n=1,#BridgeFunctionTable[2],1 do
_G[BridgeFunctionTable[2][n].Function]()
end
end
end
function BridgeFunction_OnTimerThread()
if BridgeFunctionTable[3] ~= nil then
for n=1,#BridgeFunctionTable[3],1 do
_G[BridgeFunctionTable[3][n].Function]()
end
end
end
function BridgeFunction_OnCommandManager(aIndex,code,arg)
if BridgeFunctionTable[4] ~= nil then
for n=1,#BridgeFunctionTable[4],1 do
local ret = _G[BridgeFunctionTable[4][n].Function](aIndex,code,arg)
if ret ~= 0 then return 1 end
end
end
return 0
end
function BridgeFunction_OnCharacterEntry(aIndex)
if BridgeFunctionTable[5] ~= nil then
for n=1,#BridgeFunctionTable[5],1 do
_G[BridgeFunctionTable[5][n].Function](aIndex)
end
end
end
function BridgeFunction_OnCharacterClose(aIndex)
if BridgeFunctionTable[6] ~= nil then
for n=1,#BridgeFunctionTable[6],1 do
_G[BridgeFunctionTable[6][n].Function](aIndex)
end
end
end
function BridgeFunction_OnNpcTalk(aIndex,bIndex)
if BridgeFunctionTable[7] ~= nil then
for n=1,#BridgeFunctionTable[7],1 do
local ret = _G[BridgeFunctionTable[7][n].Function](aIndex,bIndex)
if ret ~= 0 then return 1 end
end
end
return 0
end
function BridgeFunction_OnMonsterDie(aIndex,bIndex)
if BridgeFunctionTable[8] ~= nil then
for n=1,#BridgeFunctionTable[8],1 do
_G[BridgeFunctionTable[8][n].Function](aIndex,bIndex)
end
end
end
function BridgeFunction_OnUserDie(aIndex,bIndex)
if BridgeFunctionTable[9] ~= nil then
for n=1,#BridgeFunctionTable[9],1 do
_G[BridgeFunctionTable[9][n].Function](aIndex,bIndex)
end
end
end
function BridgeFunction_OnUserRespawn(aIndex,KillerType)
if BridgeFunctionTable[10] ~= nil then
for n=1,#BridgeFunctionTable[10],1 do
_G[BridgeFunctionTable[10][n].Function](aIndex,KillerType)
end
end
end
function BridgeFunction_OnCheckUserTarget(aIndex,bIndex)
if BridgeFunctionTable[11] ~= nil then
for n=1,#BridgeFunctionTable[11],1 do
local ret = _G[BridgeFunctionTable[11][n].Function](aIndex,bIndex)
if ret == 0 then return 0 end
end
end
return 1
end
function BridgeFunction_OnCheckUserKiller(aIndex,bIndex)
if BridgeFunctionTable[12] ~= nil then
for n=1,#BridgeFunctionTable[12],1 do
local ret = _G[BridgeFunctionTable[12][n].Function](aIndex,bIndex)
if ret == 0 then return 0 end
end
end
return 1
end
function BridgeFunction_OnItemPick(aIndex,index,ItemTable)
if BridgeFunctionTable[13] ~= nil then
for n=1,#BridgeFunctionTable[13],1 do
local ret = _G[BridgeFunctionTable[13][n].Function](aIndex,index,ItemTable)
if ret == 0 then return 0 end
end
end
return 1
end
function BridgeFunction_OnItemDrop(aIndex,index,x,y,ItemTable)
if BridgeFunctionTable[14] ~= nil then
for n=1,#BridgeFunctionTable[14],1 do
local ret = _G[BridgeFunctionTable[14][n].Function](aIndex,index,x,y,ItemTable)
if ret == 0 then return 0 end
end
end
return 1
end
function BridgeFunction_OnPacketRecv(aIndex,buff,size)
if BridgeFunctionTable[15] ~= nil then
for n=1,#BridgeFunctionTable[15],1 do
_G[BridgeFunctionTable[15][n].Function](aIndex,buff,size)
end
end
end
function BridgeFunction_OnSQLAsyncResult(label,param,result)
if BridgeFunctionTable[16] ~= nil then
for n=1,#BridgeFunctionTable[16],1 do
local ret = _G[BridgeFunctionTable[16][n].Function](label,param,result)
if ret == 1 then return 0 end
if ret == 2 then return 1 end
end
end
return 0
end