Ir para conteúdo
  • 0

[Resolvido] [PEDIDO] Premium account e itens para iniciantes por comando


brunonyyu

Pergunta

Ola, 

Gostaria de estar adicionado um comando na qual quando o Player digitar !starterkit ele ganhasse premium account (sistema que uso é P.A) por 7 dias e 3 itens de minha escolha (pode deixar os 3 itens com o mesmo id que eu vou alterar depois), porem tem os seguintes detalhes:

 

O player tem que ser lvl 20 menos para poder ativar o comando.

so poderar ser ativado 1 vez por conta.

 

Agradeço desde ja.

OBS: nao achei nada no forum para eu poder editar.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 1
  • Diretor

@brunonyyu tenta ai, em talkactions.xml:

<talkaction words="!starterkit" event="script" value="starterkit.lua"/>

LUA:

local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif getPlayerStorageValue(cid, config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setPlayerStorageValue(cid, config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 1
5 horas atrás, brunonyyu disse:

ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado

Tenta assim

PRAGMA journal_mode = MEMORY;
PRAGMA synchronous = OFF;
PRAGMA foreign_keys = OFF;
PRAGMA ignore_check_constraints = OFF;
PRAGMA auto_vacuum = NONE;
PRAGMA secure_delete = OFF;
BEGIN TRANSACTION;


CREATE TABLE `account_storage` (
`account_id` INTEGER NOT NULL default '0',
`key` INTEGER  NOT NULL default '0',
`value` TEXT NOT NULL default '0'
);



CREATE UNIQUE INDEX `account_storage_account_id_2` ON `account_storage` (`account_id`);
CREATE INDEX `account_storage_account_id` ON `account_storage` (`account_id`);

COMMIT;
PRAGMA ignore_check_constraints = ON;
PRAGMA foreign_keys = ON;
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;

 

Link para o comentário
Compartilhar em outros sites

  • 1
  • Diretor

@brunonyyu ele registra com o ID da conta, não do jogador. Fiz aqui o procedimento para ter certeza que não haveria problema. E aqui funcionou corretamente. Não sei oque está havendo com o teu servidor ai. Seria bom você revisar e se for preciso fazer tudo de novo

Link para o comentário
Compartilhar em outros sites

  • 0
Em 10/08/2019 em 12:04, Yan Liima disse:

Ando meio carregado aqui, mas assim que der e se ninguém resolver para você, irei fazer e te mando aqui.

Obrigado @Yan Liima eu tentei editar a propria premium account para adequar ao que eu queria mas como n sei mto o que posso ou n usar acabou n dando certo

Link para o comentário
Compartilhar em outros sites

  • 0
5 horas atrás, Yan Liima disse:

@brunonyyu tenta ai, em talkactions.xml:


<talkaction words="!starterkit" event="script" value="starterkit.lua"/>

LUA:


local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif getPlayerStorageValue(cid, config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setPlayerStorageValue(cid, config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

Bom Dia @Yan Liima, cara muito obrigado, deu certo, somente um ponto na qual se o cara criar outro char ele consegue ativar novamente o código, eu gostaria que fosse ativado uma vez por conta, mas estou satisfeito assim, gostaria de aprender um pouco mais de LUA, caso tenha um caminho para me mostrar e eu correr atrás agradeço também, vi que vc tb é mapper estou com um probleminha caso puder novamente me ajudar eu agradeço.

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Diretor
Em 12/08/2019 em 09:01, brunonyyu disse:

Bom Dia @Yan Liima, cara muito obrigado, deu certo, somente um ponto na qual se o cara criar outro char ele consegue ativar novamente o código, eu gostaria que fosse ativado uma vez por conta, mas estou satisfeito assim, gostaria de aprender um pouco mais de LUA, caso tenha um caminho para me mostrar e eu correr atrás agradeço também, vi que vc tb é mapper estou com um probleminha caso puder novamente me ajudar eu agradeço.

 

É possivel sim, porém você teria que verificar se há a função na sua LIB. Bom vou te ensinar como ajeitar isso. Primeiramente, vá até o script no qual você copiou e troque tudo por:

Spoiler

local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif getAccountStorageValue(getPlayerAccountId(cid), config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setAccountStorageValue(getPlayerAccountId(cid), config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

 

No seu data/lib no arquivo 050-function.lua verifique se já existe essa função, se não tiver, é só adicionar:

Spoiler

function getAccountStorageValue(accid, key)
local value = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(value:getID() ~= -1) then
return value:getDataInt("value")
else
return -1
end
value:free()
end

function setAccountStorageValue(accid, key, value)
local getvalue = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(getvalue:getID() ~= -1) then
db.executeQuery("UPDATE `account_storage` SET `value` = " .. accid .. " WHERE `key`=" .. key .. " LIMIT 1');")
getvalue:free()
return 1
else
db.executeQuery("INSERT INTO `account_storage` (`account_id`, `key`, `value`) VALUES (" .. accid .. ", " .. key .. ", '"..value.."');")
return 1
end
end

 

 

Depois é só ir no seu banco de dados e executar essa Query: 

CREATE TABLE `account_storage` (
`account_id` int(11) NOT NULL default '0',
`key` int(10) unsigned NOT NULL default '0',
`value` varchar(255) NOT NULL default '0',
UNIQUE KEY `account_id_2` (`account_id`,`key`),
KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Prontinho xD. Se tem interesse em aprender LUA, entre no nosso grupo do discord: https://discord.gg/PyUvYf

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Yan Liima disse:

É possivel sim, porém você teria que verificar se há a função na sua LIB. Bom vou te ensinar como ajeitar isso. Primeiramente, vá até o script no qual você copiou e troque tudo por:

  Ocultar conteúdo


local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif setAccountStorageValue(getPlayerAccountId(cid), config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setAccountStorageValue(getPlayerAccountId(cid), config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

 

No seu data/lib no arquivo 050-function.lua verifique se já existe essa função, se não tiver, é só adicionar:

  Ocultar conteúdo


function getAccountStorageValue(accid, key)
local value = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(value:getID() ~= -1) then
return value:getDataInt("value")
else
return -1
end
value:free()
end

function setAccountStorageValue(accid, key, value)
local getvalue = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(getvalue:getID() ~= -1) then
db.executeQuery("UPDATE `account_storage` SET `value` = " .. accid .. " WHERE `key`=" .. key .. " LIMIT 1');")
getvalue:free()
return 1
else
db.executeQuery("INSERT INTO `account_storage` (`account_id`, `key`, `value`) VALUES (" .. accid .. ", " .. key .. ", '"..value.."');")
return 1
end
end

 

 

Depois é só ir no seu banco de dados e executar essa Query: 


CREATE TABLE `account_storage` (
`account_id` int(11) NOT NULL default '0',
`key` int(10) unsigned NOT NULL default '0',
`value` varchar(255) NOT NULL default '0',
UNIQUE KEY `account_id_2` (`account_id`,`key`),
KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Prontinho xD. Se tem interesse em aprender LUA, entre no nosso grupo do discord: https://discord.gg/PyUvYf

50-function, ja existe em meu OT, tentei adicionar dentro, mas veio mto erro no distro.

somente confirmand, para executar no SQL, seria isso certo?

Sem título.png

 

 

 

(EDITADO 1 - conseguir tirar os erros do 50- function, restou somente um erro no talkaction novo, de caracterer, simbolo inesperado, vou tentar resolver aqui.)

(EDITADO 2 - consegui tirar erro do talkaction, porem n testei, quando abro server aparece erro no sql, que deve ser por causa do que eu add la. vou tentar algo por aqui. caso esteja errado so falar kk.)

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

  • 0
  • Diretor
22 horas atrás, brunonyyu disse:

(EDITADO 1 - conseguir tirar os erros do 50- function, restou somente um erro no talkaction novo, de caracterer, simbolo inesperado, vou tentar resolver aqui.)

(EDITADO 2 - consegui tirar erro do talkaction, porem n testei, quando abro server aparece erro no sql, que deve ser por causa do que eu add la. vou tentar algo por aqui. caso esteja errado so falar kk.)

Por ser sqlite complica um pouco kkk a Query que passei é de mysql. Eu só estudei mysql, não sei direito como o sqlite funciona. Mas pelo visto, no final das tabela tem um END, igual os demais ai no print.

Link para o comentário
Compartilhar em outros sites

  • 0
2 minutos atrás, Yan Liima disse:

Por ser sqlite complica um pouco kkk a Query que passei é de mysql. Eu só estudei mysql, não sei direito como o sqlite funciona. Mas pelo visto, no final das tabela tem um END, igual os demais ai no print.

eu coloquei, mas nao rolou da mesma forma da erro no sql3, mas é necessario para funcionar o resto?

Link para o comentário
Compartilhar em outros sites

  • 0
  • Diretor
Agora, brunonyyu disse:

eu coloquei, mas nao rolou da mesma forma da erro no sql3, mas é necessario para funcionar o resto?

Sim, seria necessario para funcionar o Storage Account. Assim só daria para pegar o item inicial uma vez por conta, não por personagem. Mas se peferir, você pode utilizar o primeiro que te enviei mesmo kk

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, Yan Liima disse:

Sim, seria necessario para funcionar o Storage Account. Assim só daria para pegar o item inicial uma vez por conta, não por personagem. Mas se peferir, você pode utilizar o primeiro que te enviei mesmo kk

entendi, vou tentar mais um tempo aqui vamos ver, eu tentei abrir o sql com o slq server do windows, quando executei ele apresentou erro em outras linhas fora as que adicionei, vou tentar algumas coisas e passo aqui qualquer coisa, so nao queria que o cara pudesse adicionar Premium account a cada char criado, ja que nao penso em usar Vip, e como estou pensando em usar rookgaard, queria poder dar a opção do player ir na area premium.

30 minutos atrás, brunonyyu disse:

entendi, vou tentar mais um tempo aqui vamos ver, eu tentei abrir o sql com o slq server do windows, quando executei ele apresentou erro em outras linhas fora as que adicionei, vou tentar algumas coisas e passo aqui qualquer coisa, so nao queria que o cara pudesse adicionar Premium account a cada char criado, ja que nao penso em usar Vip, e como estou pensando em usar rookgaard, queria poder dar a opção do player ir na area premium.

@Yan Liima pode ser tambem que eu esteja executando no lugar errado, em qual destes arquivos eu devo executar o query?

teste.jpg

Link para o comentário
Compartilhar em outros sites

  • 0
  • Diretor

@brunonyyu Ela é executada no banco de dados no qual você utiliza. Sqlitestudio ou esse realserver. Se preferir, você pode pegar o proprio .sql, abrir ele em algum editor de texto, adicionar as linhas lá corretamente e importar no teu servidor... O mysql tem mais facilidade para essas coisas.

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Yan Liima disse:

@brunonyyu Ela é executada no banco de dados no qual você utiliza. Sqlitestudio ou esse realserver. Se preferir, você pode pegar o proprio .sql, abrir ele em algum editor de texto, adicionar as linhas lá corretamente e importar no teu servidor... O mysql tem mais facilidade para essas coisas.

ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado

1 hora atrás, brunonyyu disse:

ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado

@Yan Liima é fico travado nestes erros.

Sem título.jpg

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

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...