Ir para conteúdo
  • 0

Vip By Mock


Carnavotu

Pergunta

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 mdr.gif

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 mdr.gif

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 mdr.gif

Editado por Carnavotu
Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...