Ir para conteúdo
  • Cadastre-se

(Resolvido)Premium


Ir para solução Resolvido por Vodkart,

Posts Recomendados

base: 1.2

 

Boa noite TK! Então eu estou com um script de adicionar X dias de premium quando o player alcançar Y nível, mas tem um problema grave! Toda vez que o servidor reiniciar (mesmo dando save) se o player upar ele ganha mais X dias de premium.

arquivo.lua:
 

Spoiler

local config = {

level = 30,
days = 7

}

function onAdvance(player, oldlevel, newlevel)
if getPlayerLevel(player) >= config.level and getGlobalStorageValue(player:getAccountId(player)+321) <= 0 then
doPlayerAddPremiumDays(player, config.days)
setGlobalStorageValue(player:getAccountId(player)+321, 1)
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você ganhou "..config.days.." dias de premium por alcançar level "..config.level.." em pelo menos um char de sua account. Você não irá ganhar de novo caso upe level "..config.level.." em outro char para pegar sua premium basta relogar.")
end
	
return true
end

 

Creaturescripts.xml:
 

Spoiler

<event type="advance" name="gainpalvl" script="gainpalvl.lua"/> 

 

login.lua

Spoiler

player:registerEvent("gainpalvl")

 

 

Link para o post
Compartilhar em outros sites
local config = {

level = 30,
days = 7

}

function onAdvance(player, oldlevel, newlevel)
	if player:getLevel() >= config.level and player:getStorageValue(player:getAccountId(player)+321) <= 0 then
		doPlayerAddPremiumDays(player, config.days)
		player:setStorageValue(player:getAccountId(player)+321, 1)
		doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você ganhou "..config.days.." dias de premium por alcançar level "..config.level.." em pelo menos um char de sua account. Você não irá ganhar de novo caso upe level "..config.level.." em outro char para pegar sua premium basta relogar.")
	end
	return true
end

Testa ai, não fiz o teste !

Link para o post
Compartilhar em outros sites
14 minutos atrás, tataboy67 disse:

local config = {

level = 30,
days = 7

}

function onAdvance(player, oldlevel, newlevel)
	if player:getLevel() >= config.level and player:getStorageValue(player:getAccountId(player)+321) <= 0 then
		doPlayerAddPremiumDays(player, config.days)
		player:setStorageValue(player:getAccountId(player)+321, 1)
		doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você ganhou "..config.days.." dias de premium por alcançar level "..config.level.." em pelo menos um char de sua account. Você não irá ganhar de novo caso upe level "..config.level.." em outro char para pegar sua premium basta relogar.")
	end
	return true
end

Testa ai, não fiz o teste !

tudo bem tataboy? Então meu amigo o script funcionou parcialmente, quando o player tem mais de um char na conta todos que uparem o x level irão ganhar  mais y dias de premium, entretanto o erro que estava dando antes quando o servidor reiniciava o player podia upar mais 1 level que ganhava o bônus de premium novamente foi resolvido, agora quando o servidor da o save e reinicia o player não ganha mais os dias de premium.

Link para o post
Compartilhar em outros sites
9 minutos atrás, Navegante disse:

tudo bem tataboy? Então meu amigo o script funcionou parcialmente, quando o player tem mais de um char na conta todos que uparem o x level irão ganhar  mais y dias de premium, entretanto o erro que estava dando antes quando o servidor reiniciava o player podia upar mais 1 level que ganhava o bônus de premium novamente foi resolvido, agora quando o servidor da o save e reinicia o player não ganha mais os dias de premium.

Pera, eu não entendi muito bem...
Essa parte de adicionar o premium, você deve limitar para que o sistema de VIP só funcione em characters e não em accounts, sacou?
Vamos supor que um jogador faça uma Quest e pegue um item de VIP Days, ele usa e ganha 3 dias de vip em todos os Character's... Porem você tem de alterar o script de VIP, para que quando adicionar o VIP, ele adicione apenas em 1 char e não em toda a conta, entendeu?

Link para o post
Compartilhar em outros sites
26 minutos atrás, tataboy67 disse:

Pera, eu não entendi muito bem...
Essa parte de adicionar o premium, você deve limitar para que o sistema de VIP só funcione em characters e não em accounts, sacou?
Vamos supor que um jogador faça uma Quest e pegue um item de VIP Days, ele usa e ganha 3 dias de vip em todos os Character's... Porem você tem de alterar o script de VIP, para que quando adicionar o VIP, ele adicione apenas em 1 char e não em toda a conta, entendeu?

vamos la! O script foi criado pra funcioanar da seguinte formar.

quando o player alcançar nível 30 ele vai ganhar automaticamente 7 dias de Premium account, mas caso ele upei em outros chares e alcance o nivel 30 novamente ele nao irá ganhar os dias premium.

Não seria possível colocar uma storage na account do player, fazendo com que ele não ganhe novamente os dias de premium, nem upando outro char e nem quando servidor reiniciar?

Link para o post
Compartilhar em outros sites
  • Solução

executa no seu banco de dados:

 

 

ALTER TABLE `accounts` ADD `premiumgift` INT NOT NULL DEFAULT '0'

 

usa o script assim:

 

function getPremiumGift(player)
local query = db.storeQuery("SELECT `premiumgift` FROM `accounts` WHERE `id` = "..player:getAccountId())
return result.getDataInt(query, "premiumgift") > 0 and true or false
end
local config = {level = 30, days = 7}
function onAdvance(player, oldlevel, newlevel)
    if player:getLevel() >= config.level and not getPremiumGift(player) then
        player:addPremiumDays(config.days)
        player:sendTextMessage(MESSAGE_INFO_DESCR, "Você ganhou "..config.days.." dias de premium por alcançar level "..config.level.." em pelo menos um char de sua account. Você não irá ganhar de novo caso upe level "..config.level.." em outro char para pegar sua premium basta relogar.")
        db:query("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())
    end
    return true
end

 

caso não der certo troque essa linha:

 

db:query("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())

 

por

 

db.query("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())

 

ou

 

db.asyncQuery("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
2 horas atrás, Vodkart disse:

executa no seu banco de dados:

 

 


ALTER TABLE `accounts` ADD `premiumgift` INT NOT NULL DEFAULT '0'

 

usa o script assim:

 


function getPremiumGift(player)
local query = db.storeQuery("SELECT `premiumgift` FROM `accounts` WHERE `id = "..player:getAccountId())
return result.getDataInt(query, "premiumgift") > 0 and true or false
end
local config = {level = 30, days = 7}
function onAdvance(player, oldlevel, newlevel)
    if player:getLevel() >= config.level and not getPremiumGift(player) then
        player:addPremiumDays(config.days)
        player:sendTextMessage(MESSAGE_INFO_DESCR, "Você ganhou "..config.days.." dias de premium por alcançar level "..config.level.." em pelo menos um char de sua account. Você não irá ganhar de novo caso upe level "..config.level.." em outro char para pegar sua premium basta relogar.")
        db:query("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())
    end
    return true
end

 

caso não der certo troque essa linha:

 


db:query("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())

 

por

 


db.query("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())

 

ou

 


db.asyncQuery("UPDATE `accounts` SET `premiumgift` = 1 WHERE `id` = "..player:getAccountId())

 

boa tarde vodkart, eu testei todos os exemplo acima e todo eles resultaram no mesmo erro na distro.
 

erro na distro.PNG

Link para o post
Compartilhar em outros sites
3 horas atrás, Vodkart disse:

local query = db.storeQuery("SELECT `premiumgift` FROM `accounts` WHERE `id = "..player:getAccountId())

faltou fechar o id 

> local query = db.storeQuery("SELECT `premiumgift` FROM `accounts` WHERE `id` = "..player:getAccountId())

Editado por ricardo codenome (veja o histórico de edições)
<?php

$assinatura = function($texto) {
	return $texto;
};

$assinatura('Eu ainda não tenho uma assinatura decente ):, php ♥');
?>

Meus sites.:

https://ferobraglobal.com/
https://codenome.com/
https://uam.codenome.com/

https://myci.myara.net/

 

Me ajuda no café:
http://picpay.me/ricardo.codenome

 

Link para o post
Compartilhar em outros sites

troca

 

function getPremiumGift(player)
local query = db.storeQuery("SELECT `premiumgift` FROM `accounts` WHERE `id = "..player:getAccountId())
return result.getDataInt(query, "premiumgift") > 0 and true or false
end

 

por

function getPremiumGift(player)
local query = db.storeQuery("SELECT `premiumgift` FROM `accounts` WHERE `id` = "..player:getAccountId())
return result.getDataInt(query, "premiumgift") > 0 and true or false
end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

Quero agradecer ao Vodkartricardo codenome e tataboy67 pela ajuda no tópico, muito obrigado!

ate onde eu testei o sistema funcionou perfeitamente, testei primeiro com 2 personagens na mesma conta, depois testei desligando a distro sem salvar e por fim testei salvando a distro e desligando. Todos os métodos testados foram
bem-sucedido!

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo