Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado
  • Este é um post popular.

Olá tibianos.

Trago um sistema de honra bem simples. Basicamente, é constituído por três funções, addHonor, remHonor e getHonor.

Essas três funções adicionam, removem e buscam a pontuação atual de honra do jogador.

Escolhi gravar os dados no banco de dados para ficar mais fácil de manipular.

Pode ser aplicado em diversos sistemas, por exemplo:

  • Comprar por Honra;
  • Recompensa em Eventos;
  • Acesso à NPCs;
  • Acesso à Quests;
  • Ganhar desconto em NPCs;
  • Ganhar mais ao vender para NPCs;

enfim, a criatividade é o limite.

 

function addHonor(self, value) -- luiz henrique marsilio
	db.query("UPDATE `players` SET `honor` = `honor` + " .. value .. " WHERE `players`.`id` = ".. self:getGuid().. ";")
	return true
end

function remHonor(self, value) -- luiz henrique marsilio
	db.query("UPDATE `players` SET `honor` = `honor` - " .. value .. " WHERE `players`.`id` = ".. self:getGuid().. ";")
	return true
end

function getHonor(self) -- luiz henrique marsilio
    local query = db.storeQuery("SELECT `honor` FROM `players` WHERE `players`.`id` = " .. self:getGuid() .. ";")
    if query ~= false then
        local val = result.getNumber(query, "honor")
        result.free(query)
        return val
    end
	return -1
end

Você precisará inserir uma coluna de nome honor, tipo INT, tamanho 11 e default 0 na sua tabela de players (mysql). Existem tutoriais aqui no fórum que explicam como fazer isso.

 

Deixo um exemplo de aplicação do sistema em um script que dá pontos de honra ao matar outros players.

function onKill(player, target)
   if not target:isPlayer() then
       return true
   end
   -- exemplo de honra sendo adicionada ao matar outro player
   local honor = math.floor(target:getLevel()/10)
   addHonor(player, honor)
   player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Your honor points have been increased in " .. honor .. ".")
   player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "You have now " .. getHonor(player) .. " honor points.")
   -- pode ser estabelecido para condições serem satisfeitas para que a honra seja adicionada nesse caso
   -- por exemplo config = {level = 100} if target:getLevel() >= config.level then /stuff end entre outros
end

 

Outro exemplo é essa talkaction que usei para criar um simples método de troca dos pontos de honra por items.

-- lista dos items a serem comercializados pelo sistema de honra
item = {
	["boots of haste"] = {id = 2195, price = 100} -- id = id do item, price = valor para trocar por pontos de honra
	}
	
function onSay(player, words, param)
		
	choise = item[param] -- seta o indice da tabela que sera acessado id e price
	if choise then -- se foi digitado alguma coisa de parametro continuar
		if getHonor(player) >= choise.price then -- verifica se a honra do player é suficiente para esse item escolhido (choise)
			player:addItem(choise.id, 1) -- add o item escolhido (id)
			remHonor(player, choise.price) -- desconta honor do player (price)
			player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "You have received " .. ItemType(choise.id):getName()) -- mensagem confirmando o recebimento. busca o nome do item por id
			player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Your current Honor balance is " .. getHonor(player)) -- informa o saldo de honra atual
		else
			player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Your Honor is not enough to buy this item.") -- mensagem de erro caso nao tenha honra suficiente
		end
	else
		player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Available items on Honor Store: ") -- se nao houver parametro
		for i, j in pairs(item) do -- busca na lista os dados dos items disponiveis
		player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Item: [" .. i .. "]. Price: [" .. j.price .. "].") -- informa os dados encontrados através de mensagem
		end
	end
	return false -- retornar false impede que o comando seja falado pelo player na tela "Player says: !exemplo"
end

 

Era isso galera! Se você tem sugestão para um sistema simples deixe nos comentários para que eu possa avaliar e fazer se estiver dentro dos meus conhecimentos.

Postado

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

  • 2 months later...
Postado
Em 11/06/2018 em 19:49, luiz.marsilio disse:

Olá tibianos.

Trago um sistema de honra bem simples. Basicamente, é constituído por três funções, addHonor, remHonor e getHonor.

Essas três funções adicionam, removem e buscam a pontuação atual de honra do jogador.

Escolhi gravar os dados no banco de dados para ficar mais fácil de manipular.

Pode ser aplicado em diversos sistemas, por exemplo:

  • Comprar por Honra;
  • Recompensa em Eventos;
  • Acesso à NPCs;
  • Acesso à Quests;
  • Ganhar desconto em NPCs;
  • Ganhar mais ao vender para NPCs;

enfim, a criatividade é o limite.

 


function addHonor(self, value) -- luiz henrique marsilio
	db.query("UPDATE `players` SET `honor` = `honor` + " .. value .. " WHERE `players`.`id` = ".. self:getGuid().. ";")
	return true
end

function remHonor(self, value) -- luiz henrique marsilio
	db.query("UPDATE `players` SET `honor` = `honor` - " .. value .. " WHERE `players`.`id` = ".. self:getGuid().. ";")
	return true
end

function getHonor(self) -- luiz henrique marsilio
    local query = db.storeQuery("SELECT `honor` FROM `players` WHERE `players`.`id` = " .. self:getGuid() .. ";")
    if query ~= false then
        local val = result.getNumber(query, "honor")
        result.free(query)
        return val
    end
	return -1
end

Você precisará inserir uma coluna de nome honor, tipo INT, tamanho 11 e default 0 na sua tabela de players (mysql). Existem tutoriais aqui no fórum que explicam como fazer isso.

 

Deixo um exemplo de aplicação do sistema em um script que dá pontos de honra ao matar outros players.


function onKill(player, target)
   if not target:isPlayer() then
       return true
   end
   -- exemplo de honra sendo adicionada ao matar outro player
   local honor = math.floor(target:getLevel()/10)
   addHonor(player, honor)
   player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Your honor points have been increased in " .. honor .. ".")
   player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "You have now " .. getHonor(player) .. " honor points.")
   -- pode ser estabelecido para condições serem satisfeitas para que a honra seja adicionada nesse caso
   -- por exemplo config = {level = 100} if target:getLevel() >= config.level then /stuff end entre outros
end

 

Outro exemplo é essa talkaction que usei para criar um simples método de troca dos pontos de honra por items.


-- lista dos items a serem comercializados pelo sistema de honra
item = {
	["boots of haste"] = {id = 2195, price = 100} -- id = id do item, price = valor para trocar por pontos de honra
	}
	
function onSay(player, words, param)
		
	choise = item[param] -- seta o indice da tabela que sera acessado id e price
	if choise then -- se foi digitado alguma coisa de parametro continuar
		if getHonor(player) >= choise.price then -- verifica se a honra do player é suficiente para esse item escolhido (choise)
			player:addItem(choise.id, 1) -- add o item escolhido (id)
			remHonor(player, choise.price) -- desconta honor do player (price)
			player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "You have received " .. ItemType(choise.id):getName()) -- mensagem confirmando o recebimento. busca o nome do item por id
			player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Your current Honor balance is " .. getHonor(player)) -- informa o saldo de honra atual
		else
			player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Your Honor is not enough to buy this item.") -- mensagem de erro caso nao tenha honra suficiente
		end
	else
		player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Available items on Honor Store: ") -- se nao houver parametro
		for i, j in pairs(item) do -- busca na lista os dados dos items disponiveis
		player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Item: [" .. i .. "]. Price: [" .. j.price .. "].") -- informa os dados encontrados através de mensagem
		end
	end
	return false -- retornar false impede que o comando seja falado pelo player na tela "Player says: !exemplo"
end

 

Era isso galera! Se você tem sugestão para um sistema simples deixe nos comentários para que eu possa avaliar e fazer se estiver dentro dos meus conhecimentos.

Poderia explicar como implementar no servidor mais detalhadamente na parte de ganhar pontos ao matar players e o do talkactions ?

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo