Ir para conteúdo
  • Cadastre-se

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


Posts Recomendados

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.

 

Link para o post
Compartilhar em outros sites
  • 2 months later...
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 ?

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por ILex WilL
      Olá, Alguém poderia me ajudar com uns Scripts? nem que seja cobrando, dependendo eu pago para me ajudar...
    • Por RenanPhellip
      Boa tarde pessoal!
      Como eu faço uma função onde verifica a url atual do site?

      Exemplo:{if $linkAtual = '{$path}/index.php/account/create'} <form action="{$path}/index.php/account/" method="post"></form> {else} <a href="{$path}/index.php/account/create" id="bottom_register">&nbsp;Registrar&nbsp;</a> {/if}
      Como é criado essa função $linkAtual?

      Dúvida: {elseif} existe em php?
      Exemplo: Eu poderia utilizar desta forma?{if} print("1"); {elseif} print("2"); {else} print("3"); {/if}
    • Por Yago Blind.
      Bom dia galerinha, estou com uma script aqui , que teleporta o player que clicar seja na porta/statua e etc, porem eu gostaria de adicionar a função de apenas quem tiver Premium Account pode usar e remover a função de prescisar de um item para da use.
      data/actions/scripts.
       
       
    • Por Naze
      Bom, estava criando um script e me deparei com um problema a função doRemoveItem(uid) não funciona em addEvent, pelo fato de uid sempre ta variando a cada segundo. Então fiz essa versão que funciona com addEvent e sem necessidade de stackpos. 
       
      Aos que não sabem como usar, adicione esse código no 050-function.lua da pasta lib de seu ot.
       
      removeItem(pos, item) -- pos = posição do item, item = id do item.
       
      exemplo:
      local pos, itemid = {x = 160, y = 54, z = 7}, 8753 removeItem(pos, itemid)  
    • Por victor8082
      Bom gente, eu criei um ot há alguns dias, e estou tentando colocar sistema de autoloot nele.. (é 8.6)
      Vi que varias pessoas conseguem... eu segui esse tópico https://tibiaking.com/forums/topic/36100-mod-sistema-de-auto-loot/             Mas sempre que eu modifico o XML "Creaturescript" e vou dar /reload creaturescript que é para "recarregar" e ver se tá funcionando , o "executavel" (o .exe que abre o ot) ele simplesmente fecha... não sei o porque.. se alguem puder me ajudar colocar Autoloot, ou me ajudar com essa questão ficarei mt grato e vou dar rep+
       
      Estou esperando respostas ... obrigado.. 
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo