Ir para conteúdo
  • Cadastre-se

Posts Recomendados

  • Administrador

Olá pessoal, hoje resolvi trazer ao TK uma função muito útil e simples de usar-la, tenho certeza que muitos irão usar-la.

Você poderá usar assim:

getAccountStorageValue(getPlayerAccountId(cid), key)
setAccountStorageValue(getPlayerAccountId(cid), key, value)

INSTALAÇÃO

Para instala-la é simples, vá até seu banco de dados e execute a seguinte 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;

Agora vá até data/lib, abra o arquivo 050-function.lua e adicione esse código dentro:

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

Bom é isso, créditos inteiramente ao teckman (criador da função).

 

dm3o5y8.png

 
Você gostou deste conteúdo!? Este conteúdo te ajudou!? Isso será realmente útil pra você!?
Então, se possível, faça uma doação (de qualquer valor) que estará me ajudando também! :P
 

TibiaKing Team- KingTópicos
www.tibiaking.com

Link para o post
Compartilhar em outros sites

O player só poderá usar uma vez o script na account, por exemplo: !viptest, se o player já usou esse script uma vez em um char, não poderá usar nos outros da account.

Link para o post
Compartilhar em outros sites
  • 1 year later...
  • 1 year later...

Muito bom! Funcionou ótimamente bem aqui :D

Pra quem quiser usar para dar dias de premium grátis, deixo aqui um script já usando essa nova função...
 

function onLogin(cid)

	local storage = 55550
	local days = 2
	
	if getAccountStorageValue(getPlayerAccountId(cid), storage) <= 0 then	
		if getPlayerPremiumDays(cid) >= 360 then return false
		else
			doPlayerAddPremiumDays(cid, days)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You received "..days.." days of premium account.")
		end		
		setAccountStorageValue(getPlayerAccountId(cid), storage, 1)	
	end

	return true
end
Link para o post
Compartilhar em outros sites
  • 2 months later...

Desculpa reviver o tópico, porém eu estava criando o evento de natal, e fui utilizar a função, e reparei que quando ela seta a primeira storage, vai tudo beleza, mas quando usa UPDATE na função, a logica e a sintaxe está incorreta:

 

db.executeQuery("UPDATE `account_storage` SET `value` = " .. accid .. " WHERE `key`=" .. key .. " LIMIT 1');")

 

Aonde o certo é:

 

db.executeQuery("UPDATE `account_storage` SET `value` = " .. value .. " WHERE `key`=" .. key .. " AND `account_id` = " .. accid .. " LIMIT 1;")

 

Repare que removi um ') do final e troquei o valor do campo value por value, antes estava accid e adicionei um AND onde filtra pela conta do player.

 

Segue a função corrigida para os preguiçosos:

 

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` = " .. value .. " WHERE `key`=" .. key .. " AND `account_id` = " .. accid .. " 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

 

 

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Quando vou instalar a query no sqlite dá este erro:

 

Cannot execute query on undefined or invalid database.

wq3bBzt.png
Pokémon Dust Evolution
 
É aonde começa sua nova aventura!! 

 

Facebook

 
Verifique Atualizações

 

Link para o post
Compartilhar em outros sites
  • 2 years later...

Estou tentando utilizar este código, porém estou com o seguinte problema:

 

quando utilizo o código informado, o server da vário erros e não abre

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

quando utilizo este que adaptei, ele só me retorna o valor -1 e nunca o valor da key, poderia ajudar?

 

function getAccountStorageValue(accid, key)
    local resultId = db.storeQuery("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key)
    if resultId ~= false then
        local val = result.getInt(resultId, "value")
        result.free(resultId)
        return val
    end
    return -1
end 

 

Problema solucionado

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