Postado Junho 11, 2018 7 anos 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 Junho 11, 2018 7 anos 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.
Postado Agosto 27, 2018 6 anos 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.