Não entendi.
Você quer que a cada três dias, o código faça jogadores ganharem um dia de VIP ou que o código apresenta esse 'problema'?
Não entendi.
Você quer que a cada três dias, o código faça jogadores ganharem um dia de VIP ou que o código apresenta esse 'problema'?
local config = {
level = 14,-- Em que level ele ganhara --
days = 1,-- O tando de dias que o player ganhara --
storageId = 15558, -- O id do storage --
msg = "Parabéns, você recebeu 1 dia de vip!", -- Mensagem que irá aparecer pro player --
msgtype = MESSAGE_EVENT_ADVANCE
}
function onAdvance(cid, oldLevel, newLevel)
if getPlayerLevel(cid) >= config.level and getPlayerStorageValue(cid,config.storageId) ~= 1 then
setPlayerStorageValue(cid,config.storageId,1)
vip.addVipByAccount(getPlayerAccount(cid) ,vip.getDays(config.days))
doPlayerSendTextMessage(cid, config.msgtype, config.msg)
end
return TRUE
end
Nesse caso aí, Vilden, parece que é ainda pior. Um jogador com uma conta só cria vários personagens e ganha 1 (um) dia de VIP para cada.
Oneshot eu dei um exemplo quando ele fica um certo tempo offline ele ganha vip novamente quando entra, e vilden esse codigo da toda vez quando cria char.
Abrass
Usa global storage então
local config = {
level = 14,-- Em que level ele ganhara --
days = 1,-- O tando de dias que o player ganhara --
storageId = 15558, -- O id do storage --
msg = "Parabéns, você recebeu 1 dia de vip!", -- Mensagem que irá aparecer pro player --
msgtype = MESSAGE_EVENT_ADVANCE
}
function onAdvance(cid, oldLevel, newLevel)
if getPlayerLevel(cid) >= config.level and getGlobalStorageValue(config.storageId) ~= 1 then
setGlobalStorageValue(config.storage,1)
vip.addVipByAccount(getPlayerAccount(cid) ,vip.getDays(config.days))
doPlayerSendTextMessage(cid, config.msgtype, config.msg)
end
return TRUE
end
Carnavotu,
Há um modo simples de fazer isso funcionar, mas vou precisar da sua ajuda na edição de seu banco de dados com uma simples query.
ALTER TABLE `accounts` ADD `gift_interval` INTEGER NOT NULL DEFAULT 0
Isso vai adicionar um campo de nome gift_interval que iremos usar.
local config = {
days = 1,
interval = 3 * 24 * 60 * 60
msg = "Você recebeu um presente de %s dia(s) de VIP.",
msgtype = MESSAGE_INFO_DESCR
}
local function getLastGiftTime(cid)
local result, ret = db.getResult("SELECT `gift_interval` FROM `accounts` WHERE `id` = ".. getPlayerAccountId(cid) ..";")
if result:getID() == -1 then
return false
end
ret = result:getDataInt("gift_interval")
result:free()
return ret
end
function onLogin(cid)
if os.time() >= getLastGiftTime(cid) then
db.executeQuery("UPDATE `accounts` SET `gift_interval` = ".. os.time() + config.interval .." WHERE `id` = ".. getPlayerAccountId(cid) ..";")
vip.addVipByAccount(getPlayerAccount(cid), vip.getDays(config.days))
doPlayerSendTextMessage(cid, config.msgtype, config.msg:format(config.days))
end
return true
end
Pronto, mudei o tipo do creaturescript para login, assim a cada três dias quando o jogador entrar ele receberá uma quantidade configurável de dias VIP.
Então peço que você mude também lá no creaturescripts.xml. Onde estiver advance na chave que diz respeito a esse script, mude para login.
Oneshost tem não tem deixa para ele ganhar 1 dia apenas por account e nunca mais ganhar por que pelo entendi na sua frase acima ele ganha a 3 dias uma quantidade de vip, teria como?
Abrass ![]()
Ah entendo, você quer apenas que ganhe um dia de VIP e nunca mais. Então:
local config = {
days = 1,
msg = "Você recebeu um presente de %s dia(s) de VIP.",
msgtype = MESSAGE_INFO_DESCR
}
local function getLastGiftTime(cid)
local result, ret = db.getResult("SELECT `gift_interval` FROM `accounts` WHERE `id` = ".. getPlayerAccountId(cid) ..";")
if result:getID() == -1 then
return false
end
ret = result:getDataInt("gift_interval")
result:free()
return ret
end
function onLogin(cid)
if getLastGiftTime(cid) ~= 1 then
db.executeQuery("UPDATE `accounts` SET `gift_interval` = 1 WHERE `id` = ".. getPlayerAccountId(cid) ..";")
vip.addVipByAccount(getPlayerAccount(cid), vip.getDays(config.days))
doPlayerSendTextMessage(cid, config.msgtype, config.msg:format(config.days))
end
return true
end
Me aproveitei do código passado acima.
Sim esta dando 1 dia de vip, mas se eu entrar no account manager e deslogar a conta depois nao consigo entrar mais nele aparece o erro Your character could not be loaded, o acc manager ganhou vip tambem e ganhou [vip] e bugou.
Abrass ![]()
Editado Maio 30 por Carnavotu
Certo, certo. Engraçado pessoas que querem cobrar VIP e ainda usam Account Manager.
Mas tudo bem:
local config = {
days = 1,
msg = "Você recebeu um presente de %s dia(s) de VIP.",
msgtype = MESSAGE_INFO_DESCR
}
local function getLastGiftTime(cid)
local result, ret = db.getResult("SELECT `gift_interval` FROM `accounts` WHERE `id` = ".. getPlayerAccountId(cid) ..";")
if result:getID() == -1 then
return false
end
ret = result:getDataInt("gift_interval")
result:free()
return ret
end
function onLogin(cid)
if getCreatureName(cid) ~= "Account Manager" then
if getLastGiftTime(cid) ~= 1 then
db.executeQuery("UPDATE `accounts` SET `gift_interval` = 1 WHERE `id` = ".. getPlayerAccountId(cid) ..";")
vip.addVipByAccount(getPlayerAccount(cid), vip.getDays(config.days))
doPlayerSendTextMessage(cid, config.msgtype, config.msg:format(config.days))
end
end
return true
end
Eu executei no banco de dados e tudo, e começou a dar um erro no .exe quando abro o ot aparece a seguinte mensagem:
sqlite3_step(): SQLITE ERROR: database disk image is malformed
oque é?
Abrass
info
Grupo: Campones
Registrado: 10/05/09
Posts: 74
Reputação: +18
Tenho um script que faz ganhar 1 dia de vip do mock por account, só que por exemplo eu ganhei hoje eu entra daqui um certo tempo digamos assim 2 a 3 dias ele ganha vip novamente, alguém sabe arrumar?
local config = {
level = 14,-- Em que level ele ganhara --
days = 1,-- O tando de dias que o player ganhara --
storageId = 15558, -- O id do storage --
msg = "Parabéns, você recebeu 1 dia de vip!", -- Mensagem que irá aparecer pro player --
msgtype = MESSAGE_EVENT_ADVANCE
}
function onAdvance(cid, oldLevel, newLevel)
if (getPlayerLevel(cid) >= config.level and getGlobalStorageValue(getPlayerAccountId(cid)+450) <= 0) then
setGlobalStorageValue(getPlayerAccountId(cid)+450, 1)
vip.addVipByAccount(getPlayerAccount(cid) ,vip.getDays(config.days))
doPlayerSendTextMessage(cid, config.msgtype, config.msg)
end
return TRUE
end
Abrass