Ando meio carregado aqui, mas assim que der e se ninguém resolver para você, irei fazer e te mando aqui.
- Forums
- OTServ
- Pedidos
- Resolvidos
- [Resolvido] [PEDIDO] Premium account e itens para iniciantes por comando
[Resolvido] [PEDIDO] Premium account e itens para iniciantes por comando
By brunonyyu, 09 de ago. de 2019 in Resolvidos
info
Group: Diretor
Joined: 12/05/12
Posts: 818
Reputation: +578
Gender: Masculino
Tibia Character: [ADM] Night

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
info
Group: Diretor
Joined: 12/05/12
Posts: 818
Reputation: +578
Gender: Masculino
Tibia Character: [ADM] Night

@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
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.
info
Group: Diretor
Joined: 12/05/12
Posts: 818
Reputation: +578
Gender: Masculino
Tibia Character: [ADM] Night

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:
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:
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
Edited Agosto 14 by nedroesdoksdja
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:
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:
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?
(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.)
Edited Agosto 12 by brunonyyu
info
Group: Diretor
Joined: 12/05/12
Posts: 818
Reputation: +578
Gender: Masculino
Tibia Character: [ADM] Night

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.
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?
info
Group: Diretor
Joined: 12/05/12
Posts: 818
Reputation: +578
Gender: Masculino
Tibia Character: [ADM] Night

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
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?
info
Group: Diretor
Joined: 12/05/12
Posts: 818
Reputation: +578
Gender: Masculino
Tibia Character: [ADM] Night

@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.
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.
Edited Agosto 13 by brunonyyu
info
Group: Campones
Joined: 01/05/15
Posts: 49
Reputation: +2

2 horas atrás, brunonyyu disse:ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado
@Yan Liima é fico travado nestes erros.
Cara acho q n vai da certo n
Eu usava sqlite e era uma merda pra adc as coisas tive que trocar
info
Group: Visconde
Joined: 20/03/14
Posts: 367
Reputation: +219
Gender: Masculino

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;




info
Group: Campones
Joined: 18/07/19
Posts: 39
Reputation: 0
Gender: Masculino
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.