narutoonlineproject
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[NPC] Banker!!

Ir para baixo

Meus topicos sao melhores que o do avadra?

[NPC] Banker!! Left_bar_bleue0%[NPC] Banker!! Right_bar_bleue 0% 
[ 0 ]
[NPC] Banker!! Left_bar_bleue0%[NPC] Banker!! Right_bar_bleue 0% 
[ 0 ]
[NPC] Banker!! Left_bar_bleue50%[NPC] Banker!! Right_bar_bleue 50% 
[ 1 ]
[NPC] Banker!! Left_bar_bleue50%[NPC] Banker!! Right_bar_bleue 50% 
[ 1 ]
 
Total de votos : 2
 
 

[NPC] Banker!! Empty [NPC] Banker!!

Mensagem  Wonda Dom Jan 17, 2010 1:36 pm

Funções:
-withdraw
-balance
-deposit
-transfer (também para players offline) - use o database SQL [table: players_storage, key: 300]


Crie um arquivo chamado Gesior Banker.xml na pasta data/npc e adicione:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Gesior Banker" script="data/npc/scripts/gesiorbank.lua" autowalk="25" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="129" head="114" body="119" legs="114" feet="114" corpse="2212"/>
<parameters>
</parameters>
</npc>


Agora na pasta data/npc/scripts, crie um arquivo chamado gesiorbank.lua e adicione:

focus = 0
talk_start = 0
target = 0
dep = 0
wit = 0
trans = 0
following = false
attacking = false

gold_id = 2148
plat_id = 2152
crys_id = 2160

function onThingMove(creature, thing, oldpos, oldstackpos)

end

function onCreatureAppear(creature)

end

function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye.')
focus = 0
talk_start = 0
doNpcSetCreatureFocus(0)
end
end

function onCreatureTurn(creature)

end


function onCreatureSay(cid, type, msg)
msg_org = msg
msg = string.lower(msg)
nome = getCreatureName(cid)

--------------------------------------Begin----------------------------------------------

if (msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and (focus == 0) and getDistanceToCreature(cid) < 4 then
doNpcSetCreatureFocus(cid)
dep = 0
wit = 0
trans = 0
selfSay('Hello ' .. nome .. '! What can I do for you? Deposit, withdraw, check balance or transfer?')
focus = cid
talk_start = os.clock()
elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then --NPC is talking with other player
selfSay('Sorry '..nome..', I am already talking to a customer. Take a seat, please..')
end

--------------------------------------Deposit----------------------------------------------


if dep == 0 then
if (msgcontains(msg, 'deposit')) and (focus == cid) and getDistanceToCreature(cid) < 4 then
selfSay('Please tell me how much gold it is you would like to deposit.')
dep = 1
wit = 0
trans = 0
talk_start = os.clock()
end
end


if dep == 1 then
if (focus == cid) and getDistanceToCreature(cid) < 4 then
n = getNumber(msg)
if n ~= 0 then --player told valid number, higher than 0
talk_start = os.clock()
selfSay('Would you really like to deposit '..n..' gold?')
dep = 2
end
end
end


if dep == 2 and (focus == cid) and getDistanceToCreature(cid) < 4 then
if (msgcontains(msg, 'yes')) then --player want deposit
dep = 0
talk_start = os.clock()
if doPlayerRemoveMoney(cid, n) == TRUE then --get cash from player backpack
setBA(nome,getBA(nome)+n)
selfSay('Alright, we have added the amount of '..n..' gold to your balance. You can withdraw your money anytime you want to. Your account balance is '..getBA(nome)..'.')
else --player doesn't have enought cash in backpack
selfSay('You do not have enough gold.')
end
end
if (msgcontains(msg, 'no')) then --player doesn't want deposit
selfSay('As you wish. Is there something else I can do for you?')
dep = 0
talk_start = os.clock()
end
end

-------------------------------------------Withdraw---------------------------------------

if wit == 0 then
if (msgcontains(msg, 'withdraw')) and (focus == cid) and getDistanceToCreature(cid) < 4 then
selfSay('Please tell me how much gold you would like to withdraw.')
dep = 0
trans = 0
wit = 1
talk_start = os.clock()
end
end


if wit == 1 then
if (focus == cid) and getDistanceToCreature(cid) < 4 then
n = getNumber(msg)
if n ~= 0 then --player told valid number, higher than 0
talk_start = os.clock()
selfSay('Are you sure you wish to withdraw '..n..' gold from your bank account?')
wit = 2
end
end
end


if wit == 2 and (focus == cid) and getDistanceToCreature(cid) < 4 then
if (msgcontains(msg, 'yes')) then --player want withdraw
wit = 0
talk_start = os.clock()
if n <= getBA(nome) then --player has enought cash on account
setBA(nome,getBA(nome)-n) --get cash from player account

gold = n
plat = 0
crys = {}
crys[1] = 0
i = 1
--start counting how many crystal, platinum and gold coins NPC should givve
repeat
if gold >= 100 then
plat = plat + 1
gold = gold - 100
end
until gold < 100

repeat
if plat >= 100 then
if crys[i] == 100 then
i = i + 1
crys[i] = 0
end
crys[i] = crys[i] + 1
plat = plat - 100
end
until plat < 100
--now script give crytal, platinum and gold coins to player (BP/hands if free)
if crys[1] > 0 then
repeat
doPlayerAddItem(cid, crys_id, crys[i])
i = i-1
until i == 0
end

if plat > 0 then
doPlayerAddItem(cid, plat_id, plat)
end

if gold > 0 then
doPlayerAddItem(cid, gold_id, gold)
end

selfSay('Here you are, '..n..' gold. Please let me know if there is something else I can do for you. Your account balance is '..getBA(nome)..'.')
else --player doesn't have enought cash on this bank account, can't withdraw that much
selfSay('There is not enough gold on your account.')
end
end
if (msgcontains(msg, 'no')) then --player doesn't want to withdraw
selfSay('The customer is king! Come back anytime you want to if you wish to withdraw your money.')
wit = 0
talk_start = os.clock()
end
end

-------------------------------------------Balance---------------------------------------

if (msgcontains(msg, 'balance')) and (focus == cid) and getDistanceToCreature(cid) < 4 then --player who is talking with NPC want to know his account balance
selfSay('Your account balance is '..getBA(nome)..' gold.')
dep = 0
wit = 0
trans = 0
talk_start = os.clock()
end

-------------------------------------------Transfer---------------------------------------

if trans == 3 and (focus == cid) and getDistanceToCreature(cid) < 4 then
if (msgcontains(msg, 'yes')) then --if he want to tranfer
playerbalance = getBA(nome) --get balance value of player
if setBA(rec, getBA(rec)+quant) > 0 then -- if script set new balance get cash from transfering player account
playerbalance = playerbalance - quant
setBA(nome, playerbalance)
selfSay('You have transferred '..quant..' gold to '..rec_org..'. Your account balance is '..playerbalance..' gold.')
trans = 0
talk_start = os.clock()
else --problem with database? dont lose money..
selfSay('Problem with transfer. Sorry.')
trans = 0
talk_start = os.clock()
end
elseif (msgcontains(msg, 'no')) then -- if he dont want to tranfer
selfSay('Ok. What is next?')
trans = 0
talk_start = os.clock()
end
end

if trans == 2 and (focus == cid) and getDistanceToCreature(cid) < 4 then
if getBA(msg) >= 0 then --player with this name exist
rec = msg
rec_org = msg_org
selfSay('So you would like to transfer '..quant..' gold to '..rec_org..'?')
trans = 3
talk_start = os.clock()
else --player with this name doesn't exist
selfSay('This player does not exist. Please tell me other name.')
trans = 2
talk_start = os.clock()
end
end

if trans == 1 and (focus == cid) and getDistanceToCreature(cid) < 4 then
quant = getNumber(msg)
if quant > 0 then -- its number and is higher than 0
if getBA(nome) >= quant then -- player who want to transfer has enought cash on account
selfSay('Who would you like transfer '..quant..' gold to?')
trans = 2
talk_start = os.clock()
else -- player who want to transfer has not enought cash on account
selfSay('There is not enough gold on your account. Your account balance is '..getBA(nome)..'. Please tell me the amount of gold coins you would like to transfer.')
trans = 1
talk_start = os.clock()
end
else --player told 0 or lower number or word like "asd" (its not a number)
selfSay('Please tell me the amount of gold coins you would like to transfer.')
talk_start = os.clock()
trans = 1
end
end

if trans == 0 then
if (msgcontains(msg, 'transfer')) and (focus == cid) and getDistanceToCreature(cid) < 4 then
selfSay('Please tell me the amount of gold coins you would like to transfer.')
dep = 0
wit = 0
trans = 1
talk_start = os.clock()
end
end

-------------------------------------------End--------------------------------------------

if (msgcontains(msg, 'bye')) and (focus == cid) and getDistanceToCreature(cid) < 4 then --player say "bye" - npc answer
doNpcSetCreatureFocus(0)
selfSay('Good bye.')
focus = 0
dep = 0
wit = 0
trans = 0
end
end

function onCreatureChangeOutfit(creature)

end


function onThink()
if (os.clock() - talk_start) > 30 then --if player did not say anything from 30 seconds say "next please" and wait for another customer
if focus > 0 then
doNpcSetCreatureFocus(0)
selfSay('Next please...')
end
focus = 0
dep = 0
wit = 0
trans = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 5 then --if distance to player is higher than 5 say bye
doNpcSetCreatureFocus(0)
selfSay('Good bye.')
focus = 0
dep = 0
wit = 0
trans = 0
end
end
end


function getNumber(txt) --return number if its number and is > 0, else return 0
x = string.gsub(txt,"%a","")
x = tonumber(x)
if x ~= nill and x > 0 then
return x
else
return 0
end
end

function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end

function setBA(name, nvalue) --save bank account value for online and offline players
local cid = getPlayerByName(name)
set_status = -1
if isPlayer(cid) == TRUE then
--player is online
setPlayerStorageValue(cid,300,nvalue)
set_status = 1
return 1
else
--player is offline, load DB connection info and connect
dofile("./config.lua")
if sqlType == "mysql" then
env = assert(luasql.mysql())
con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
else -- sqlite
env = assert(luasql.sqlite3())
con = assert(env:connect(sqliteDatabase))
end
--check is player exist
local nametodb = escapeString(name)
result_plr = assert(con:execute("SELECT `id` FROM `players` WHERE `name` = '" .. nametodb .. "';"))
player = result_plr:fetch({}, "a")
local players = 0
local guid = 0
while player do
players = players + 1
guid = tonumber(player.id)
player = result_plr:fetch (player, "a")
end
if players > 0 then
if guid > 0 then
--player exist, check his account status
storageqry = assert(con:execute("SELECT `value` FROM `player_storage` WHERE `player_id` = '" .. guid .. "' AND `key` = 300;"))
storage = storageqry:fetch({}, "a")
local whiles = 0
while storage do
whiles = whiles + 1
storage = storageqry:fetch (storage, "a")
end
if whiles < 1 then
--if player hasn't account, create account and set account balance value 'nvalue'
assert(con:execute("INSERT INTO `player_storage` (`player_id` ,`key` ,`value`) VALUES ('" .. guid .. "', '300', '" .. nvalue .. "');"))
set_status = 1
else
assert(con:execute("UPDATE `player_storage` SET `value` = '" .. nvalue .. "' WHERE `player_id` = '" .. guid .. "' AND `key` = 300;"))
set_status = 1
end
end
else
--player with this name doesn't exist
set_status = -1
end
con:close()
env:close()
end
--if player not exist return -1
--if player exist return his bank account value
return set_status
end

function getBA(name) -- check account balance for offline and online players
local cid = getPlayerByName(name)
if isPlayer(cid) == TRUE then
--player is online
local player_cash_str = getPlayerStorageValue(cid, 300)
--create bank account if not exist
if player_cash_str < 0 then
setPlayerStorageValue(cid,300,0)
player_cash = 0
else
player_cash = player_cash_str
end
else
--player is offline, load DB connection info and connect
dofile("./config.lua")
if sqlType == "mysql" then
env = assert(luasql.mysql())
con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
else -- sqlite
env = assert(luasql.sqlite3())
con = assert(env:connect(sqliteDatabase))
end
--check is player exist
local nametodb = escapeString(name)
result_plr = assert(con:execute("SELECT `id` FROM `players` WHERE `name` = '" .. nametodb .. "';"))
player = result_plr:fetch({}, "a")
local players = 0
local guid = 0
while player do
players = players + 1
guid = tonumber(player.id)
player = result_plr:fetch (player, "a")
end
if players > 0 then
if guid > 0 then
--player exist, check his account status
storageqry = assert(con:execute("SELECT `value` FROM `player_storage` WHERE `player_id` = '" .. guid .. "' AND `key` = 300;"))
storage = storageqry:fetch({}, "a")
local whiles = 0
while storage do
whiles = whiles + 1
player_cash = tonumber(storage.value)
storage = storageqry:fetch (storage, "a")
end
if whiles < 1 then
--if player hasn't account, create account and set account balance value to 0
assert(con:execute("INSERT INTO `player_storage` (`player_id` ,`key` ,`value`) VALUES ('" .. guid .. "', '300', '0');"))
player_cash = 0
end
end
else
--player with this name doesn't exist
player_cash = -1
end
con:close()
env:close()
end
--if player not exist return -1
--if player exist return his bank account value
return player_cash
end

Para naruto soh tem q modificar o seguinte:
gold_id = 2148
plat_id = 2152
crys_id = 2160
pelo ID original da grana.. cmo mostra no exemplo do tibia normal
Gold (gold coin) = id - 2148
Plat(platinum coin) = id - 2152
Crys (crystal coin) = id - 2160

Pronto!

Gosto?Da reputação ae!
Wonda
Wonda
Chunin
Chunin

Mensagens : 119
Ryou : 5456
Reputação : 1
Data de inscrição : 16/01/2010
Localização : Novo Hamburgo / RS

http://oicaadisa.com

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos