Bom dia, eu to tentando adicionar um item que da vip, até conseguir, só que quando eu uso ele adiciona VIP so em um CHar (no char que usou o item) e o resto dos chars da conta continua sem vip, estou usando a storage 13540
Você utiliza MySQL?
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Bom dia, eu to tentando adicionar um item que da vip, até conseguir, só que quando eu uso ele adiciona VIP so em um CHar (no char que usou o item) e o resto dos chars da conta continua sem vip, estou usando a storage 13540
Você utiliza MySQL?
info
Grupo: Campones
Registrado: 05/11/12
Posts: 62
Reputação: +5
Char no Tibia: Scarlet Erza

Você utiliza MySQL?
sim, uso Mysql
distro 0.4 ou 1.0 (agora esqueci)
ot mapa global 8.6
Obs: não quero que add vip pelo site, só pelo item, gostaria que ele add a vip na conta e não no char...
Editado Setembro 1 por kolosso
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

sim, uso Mysql
distro 0.4 ou 1.0 (agora esqueci)
ot mapa global 8.6
Obs: não quero que add vip pelo site, só pelo item, gostaria que ele add a vip na conta e não no char...
Não precisa de site, mas de banco de dados.
Logo vou postar o script.
info
Grupo: Campones
Registrado: 05/11/12
Posts: 62
Reputação: +5
Char no Tibia: Scarlet Erza

Não precisa de site, mas de banco de dados.
Logo vou postar o script.
Obrigado... to no aguardo ...
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Obrigado... to no aguardo ...
Preiramente vá até sua db e rode essa query:
ALTER TABLE `accounts` ADD `vip_time` INT(15) NOT NULL;Agora vá em data/libs, crie um arquivo chamado vipSystem.lua com o seguinte conteúdo:
function vip.getVip(cid)
assert(tonumber(cid), 'Parameter must be a number')
if not isPlayer(cid) then error('Player don\'t find') end;
ae = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '" .. getPlayerAccount(cid) .. "';")
if ae:getID() == -1 then
return 0
end
local retee = ae:getDataInt("vip_time") or 0
ae:free()
return retee
end
function vip.getVipByAccount(acc)
assert(acc, 'Account is nil')
local a = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '" .. acc .. "';")
if a:getID() ~= -1 then
return a:getDataInt("vip_time") or 0, a:free()
else
error('Account don\'t find.')
end
end
function vip.setVip(cid, time)
dofile("config.lua")
assert(tonumber(cid), 'Parameter must be a number')
assert(tonumber(time), 'Parameter must be a number')
if not isPlayer(cid) then error('Player don\'t find') end
local days = vip.getVip(cid)
days = os.difftime(days, os.time())
if days < 0 then days = 0 end
days = days + vip.getDays(time)
db.query("UPDATE `accounts` SET `vip_time` = '" .. (os.time() + days) .. "' WHERE `accounts`.`name` = '" .. getPlayerAccount(cid) .. "';")
end
function vip.hasVip(cid)
assert(tonumber(cid), 'Parameter must be a number')
if not isPlayer(cid) then return end
local t = vip.getVip(cid) or 0
if os.time(day) < t then
return true
else
return false
end
end
function vip.accountHasVip(acc)
assert(acc, 'Account is nil')
if os.time() < vip.getVipByAccount(acc) then
return true
else
return false
end
end
function vip.getDays(days)
return (3600 * 24 * days)
end
function vip.addVipByAccount(acc, time)
assert(acc, 'Account is nil')
assert(tonumber(time), 'Parameter must be a number')
local a = vip.getVipByAcc(acc)
a = os.difftime(a, os.time())
if a < 0 then a = 0 end
a = a + vip.getDays(time)
return vip.setVipByAccount(acc, a)
end
function vip.setVipByAccount(acc, time)
dofile("config.lua")
assert(acc, 'Account is nil')
assert(tonumber(time), 'Parameter must be a number')
db.query("UPDATE `accounts` SET `vip_time` = '" .. (os.time() + time) .. "' WHERE `accounts`.`name` = '" .. acc .. "';")
return true
end
function vip.returnVipString(cid)
assert(tonumber(cid), 'Parameter must be a number')
if isPlayer(cid) then
return os.date("%d/%m/%Y %X", vip.getVip(cid))
end
end
Item para dar vip:
Vá em data/actions/actions.xml adicione a seguinte tag?
<action itemid="2420" script="addVip.lua" />Altere o itemid pelo id do item que irá usar para adicionar vip.
Em data/actions/scritps crie o arquivo addVip.lua com o seguinte conteúdo:
local dias = 30 -- dias que serão adicionados
function onUse(cid, item, fromPosition, itemEx, toPosition)
vip.setVip(cid, dias)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados " .. dias .. " dias de VIP na sua account.")
doSendMagicEffect(getPlayerPosition(cid), math.random(28, 30))
doRemoveItem(item.uid, 1)
return true
end
Piso que só vip passa:
Vá em data/movements/movements.xml e adicione a seguinte TAG:
<movevent type="StepIn" actionid="13500" event="script" value="vipTile.lua" />
Agora em data/movements/scripts crie o arquivo vipTile.lua com o seguinte conteúdo:
local tileConfig = {
kickMsg = "You need to be a vip player to access this area.",
kickEffect = CONST_ME_POFF,
enterMsg = "Welcome to vip area!",
enterEffect = CONST_ME_MAGIC_RED,
}
function onStepIn(cid, item, position, fromPosition)
if not isPlayer(cid) then return false end
if not vip.hasVip(cid) then
doTeleportThing(cid, fromPosition)
doSendMagicEffect(fromPosition, tileConfig.kickEffect)
doPlayerSendCancel(cid, tileConfig.kickMsg)
return false
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, tileConfig.enterMsg)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua VIP Account acaba em: " .. vip.returnVipString(cid) .. ".")
doSendMagicEffect(position, tileConfig.enterEffect)
return true
end
Agora basta utilizar a actionid 13500 nos pisos que só jogadores vip podem passar.
Créditos do sistema à Mock pela criação e Bruno Minervino pela edição.
Editado Setembro 2 por Bruno Minervino
info
Grupo: Campones
Registrado: 05/11/12
Posts: 62
Reputação: +5
Char no Tibia: Scarlet Erza

info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

da erro no distro...
Atualiza sua lib, editei o post.
info
Grupo: Marquês
Registrado: 24/12/09
Posts: 1k
Reputação: +326
Gênero: Masculino
Char no Tibia: Necromanser

da erro no distro...
Rode essa query na db
ALTER TABLE `accounts` ADD `vipdays` INT(15) NOT NULL;
info
Grupo: Campones
Registrado: 05/11/12
Posts: 62
Reputação: +5
Char no Tibia: Scarlet Erza

Atualiza sua lib, editei o post.
como eu atualizo ?
já reiniciei o server e continua a mesma coisa
Rode essa query na db
ALTER TABLE `accounts` ADD `vipdays` INT(15) NOT NULL;
continua dando o mesmo erro
não teria como consigurar esse script aqui pra fazer ele da Vip pra acc ?
function onUse(cid, item, fromPosition, itemEx, toPosition)
local config={
removeOnUse = "yes" -- remover quando usar ("yes" or "no")
}
local days = 30 -- dias que serão adicionados
local daysvalue = days * 24 * 60 * 60
local storageplayer = getPlayerStorageValue(cid, 13540)
local timenow = os.time()
if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then
time = timenow + daysvalue
else
time = storageplayer + daysvalue
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.")
setPlayerStorageValue(cid, 13540, time)
local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60))
doSendMagicEffect(getPlayerPosition(cid), math.random(28,30))
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.")
if (config.removeOnUse == "yes") then
doRemoveItem(item.uid, 1)
end
return TRUE
end
até pq o meu systema já ta configurado pra storage 13540
Editado Setembro 2 por kolosso
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

até pq o meu systema já ta configurado pra storage 13540
Amigo, editei a libs e o script da action, agora vai funcionar 100% ![]()
Referente ao seus script, é por storage (player storage), ou seja, aplica-se apenas ao player em si.
Se quiser deixar para a account, utiliza este ai.
info
Grupo: Campones
Registrado: 05/11/12
Posts: 62
Reputação: +5
Char no Tibia: Scarlet Erza

Amigo, editei a libs e o script da action, agora vai funcionar 100%
Referente ao seus script, é por storage (player storage), ou seja, aplica-se apenas ao player em si.
Se quiser deixar para a account, utiliza este ai.
Obrigadão, funfo, tenso é que não apareceu que vc editou o post, mas muito obrigado mesmo XD
Editado Setembro 2 por kolosso
info
Grupo: Marquês
Registrado: 24/12/09
Posts: 1k
Reputação: +326
Gênero: Masculino
Char no Tibia: Necromanser

Tópico Movido
Este tópico foi movido de "OTServ → Suporte → Suporte Scripting"
para "OTServ → Suporte → Suporte Scripting → Pedidos e dúvidas resolvidos - Scripting".
info
Grupo: Campones
Registrado: 05/11/12
Posts: 62
Reputação: +5
Char no Tibia: Scarlet Erza

Af, agora apareceu outro problema, ele adiciona vip na acc, mas depois de 1 min a acc perde a vip
10:58 Foram adicionados 30 dias de VIP na sua account.
10:59 Your VIP's over!
Editado Setembro 2 por kolosso
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Af, agora apareceu outro problema, ele adiciona vip na acc, mas depois de 1 min a acc perde a vip
10:58 Foram adicionados 30 dias de VIP na sua account.
10:59 Your VIP's over!
Altera sua lib, modifiquei lá.
info
Grupo: Campones
Registrado: 05/11/12
Posts: 62
Reputação: +5
Char no Tibia: Scarlet Erza
Bom dia, eu to tentando adicionar um item que da vip, até conseguir, só que quando eu uso ele adiciona VIP so em um CHar (no char que usou o item) e o resto dos chars da conta continua sem vip, estou usando a storage 13540
tentei usar esses 2 scripts
function onUse(cid, item, fromPosition, itemEx, toPosition)
local config={
removeOnUse = "yes" -- remover quando usar ("yes" or "no")
}
local days = 30 -- dias que serão adicionados
local daysvalue = days * 24 * 60 * 60
local storageplayer = getPlayerStorageValue(cid, 13540)
local timenow = os.time()
if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then
time = timenow + daysvalue
else
time = storageplayer + daysvalue
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados, Agora relogue o seu personagem. ".. days .." dias de VIP no seu character.")
setPlayerStorageValue(cid, 13540, time)
local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60))
doSendMagicEffect(getPlayerPosition(cid), math.random(28,30))
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.")
if (config.removeOnUse == "yes") then
doRemoveItem(item.uid, 1)
end
return TRUE
end
local dias = 30 -- dias vip
function onUse(cid, item)
dias = tonumber(dias)
vip.addVipByAccount(getPlayerAccount(cid), vip.getDays(dias))
doRemoveItem(item.uid, 1)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_GREEN)
doPlayerPopupFYI(cid, "Foram adicionados " .. dias .. " dias de VIP em sua account.\nSua VIP Account expira em " .. os.date("%d/%m/%y", vip.getVip(cid)) .. ".")
return true
end