Jump to content
Close
luiz.marsilio

Função Sistema de Honra Básico [TFS 1.2+]

Recommended Posts

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.

 


Share this post


Link to post
Share on other sites
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 ?


Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução! A publicação do seu anuncio é instantânea!

×
×
  • Create New...