jhon992 371 Postado Novembro 30, 2011 Share Postado Novembro 30, 2011 (editado) Estou aqui hoje para trazer um sistema simples que eu criei, porém pode ser até muito útil, o Sistema de Reputação ! Esse sistema vai funcionar da seguinte forma, você adiciona os monstros que darão Rep+ ao morrer, e a cada monstro desse, o player que o matou conquista +1 ponto de Reputação. Exemplo de monstro que seria legal adicionar: Bosses. Outro meio de ganhar Reputação com esse sistema será matando outros players que estejam pk. E o único meio de perder Pontos de Reputação é matando players que não estejam pk. O Sistema também vem com um rank de Reputação que sera adicionado nas talkactions e listara os tops Reputação e um comando para verificar seus pontos de reputação. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Para que Esse Sistema pode ser Útil: Vamos pensar da seguinte maneira, pontos ao matar. Diminuirá o número de pk's in-game pois mais players vão querer mata-los. (REP +) Pontos negativos ao matar players comuns, também contribuirá para diminuição de pk's. (REP -) Pontos por matar bosses e outros monstros fortes, vai estimular os player's a matarem monstros mais perigosos. (REP +) Esse Sistema pode ser útil também para que só players com certa quantidade de Rep+ possam: -Entrar em lugares; -Fazer quests; -Usar magias; -Usar outras talkactions; -E várias outras coisas. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Agora vamos ao que interessa os scripts: Primeiro vai em "data/creaturescripts/scripts/" duplica um arquivo dessa pasta e renomeia para "repsystem" sem as aspas, nele cole: --<Script by jhon992>-- function onKill(cid, target, lastHit) vetMonster = { "Demon", "Morgaroth", "Hydra", "Dragon" } -- adicionar monstros que darão rep+ -- Ao matar monstros do vetMonster, ganhara rep+. for i=0, #vetMonster do if (getCreatureName(target) == vetMonster[i]) then setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)+1) doSendAnimatedText(getThingPos(cid), 'Rep+', 30) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você ganhou 1 ponto de reputação por matar um "..vetMonster[i]..".") return TRUE end end -- Ao matar um pk, ganhara rep+. if (isPlayer(target) == true) then if (getCreatureSkullType(target) > 2) then setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)+1) doSendAnimatedText(getThingPos(cid), 'Rep+', 30) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você ganhou 1 ponto de reputação por matar "..getCreatureName(target)..".") return TRUE end -- Ao matar um player normal, ganhara rep-. setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)-1) doSendAnimatedText(getThingPos(cid), 'Rep-', 144) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você perdeu 1 ponto de reputação por matar "..getCreatureName(target)..".") return TRUE end return TRUE end Agora em "data/creaturescripts/creaturescripts.xml" cole a tag: <event type="kill" name="RepSystem" event="script" value="repsystem.lua"/> Entre na pasta "data/creaturescripts/scripts" novamente, e abra o arquivo "login.lua" sem as aspas. Nele cole a tag: -- Verificar se é primeira vez que loga, pois ao usar storage ele ja começa com -1, -- Então vamos zera-lo para que sua Reputação comece do 0. if (getPlayerStorageValue(cid, 102087) ~= 1) then setPlayerStorageValue(cid, 102087, 1) setPlayerStorageValue(cid, 102086, 0) end registerCreatureEvent(cid, "RepSystem") Terminamos a parte do Sistema e agora vamos para o talkaction de rank. Vai na pasta "data/talkaction/scripts", duplique um arquivo e remomeie para "rankrep" sem as aspas. Abra-o e cole: function getPlayerNameByGUID2(n) local c = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..n..";") if c:getID() == -1 then return "SQL_ERROR["..n.."]" end return c:getDataString("name") end function onSay(cid, words, param) if (param == "") then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você possui "..getPlayerStorageValue(cid, 102086).." pontos de Reputação.") return TRUE end if (param == "rank") then local max = 50 local letters_to_next = 50 local name_now local name = "Highscore for Reputação\n" local rkn = 0 local no_break = 0 name = name.."\n" name = name.."Rank. Pontos | Nome do Jogador\n" local v = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = 102086 ORDER BY cast(value as INTEGER) DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("player_id")..']' end name = name..kk..". "..v:getDataInt("value").." | "..name_now..space.." \n" until v:next() == false if name ~= "Highscore\n" then doPlayerPopupFYI(cid, name) end return TRUE else doPlayerSendCancel(cid, "Command valid: !rep, !rep rank.") return TRUE end end E por último mais não menos importante, abra "data/talkactions/talkacitons.xml" e cole a tag: <talkaction words="!rep" event="script" value="rankrep.lua"/> Pronto, terminamos o nosso Simple Reputation System! -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----- Reputation Door----- Vai em data/actions/script, duplica um arquivo e nomeia para "repDoor" sem as aspas e nele cole: function onUse(cid, item, frompos, item2, topos) local quantRep = 30 -- quantidade de reset para entrar na porta newnPosition = {x=784, y=805, z=7} -- onde será teleportado ao clicar na porta if item.actionid == 2085 and getPlayerStorageValue(cid, 102086) >= quantRep then doTeleportThing(cid, newnPosition) doSendMagicEffect(newnPosition, 10) else doCreatureSay(cid, "Voce nao tem reputação suficiente para entrar!", TALKTYPE_ORANGE_1) end return TRUE end Agora em data/actions/actions.xml cole a tag: <action actionid="2085" script="repDoor.lua"/> E por último com seu mapa editor, vai na porta desejada do seu server e coloque o actionid 2085. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Agora para fazer alavancas, baús e etc, basta seguir o exemplo do script acima da repDoor. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----- Quantidade de Reputação para usar determinado item ----- Vai em data/movements/script e duplica um arquivo dessa pasta e nomeie para "itemRep" sem aspas, abra-o e cole: local quantRep = 30 -- quantidade de reset para usar determinado item function onEquip(cid, item, slot) if getPlayerStorageValue(cid, 102086) < quantRep then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas players com "..quantRep.." pontos de reputação ou mais, podem usar essa arma!") return FALSE end return TRUE end Agora vai em data/movements/movements.xml abre e adicione a tag: <movevent type="Equip" itemid="id do seu item" slot="hand" event="script" value="itemRep.lua"/> Troque os slots na tag acima como desejar, tipos de slots: head armor legs hand shield ring necklace feet pickupable Para itens que você for usar com a mesma quantidade de reps que o item anterior, apenas crie uma nova tag no movementes.xml com o itemid diferente. Senão você devera criar um novo script com o nome diferente e mudar a quantRep. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----- Comprar determinado item com Pontos de Reputação ----- Vai em data/talkactions/scripts, duplique um arquivo e nomeiei para "buyrep" sem as aspas e nele cole: local itemNames = { {name = "Dragon Shield", pontos = 2}, -- nome do item e pontos que gastara. {name = "Crown Armor", pontos = 8}, {name = "Arbalest", pontos = 25}, {name = "Heroic Axe", pontos = 20}, {name = "Magic Sword", pontos = 30}, {name = "Demon Armor", pontos = 50} } function onSay(cid, words, param, channel) if param == "" then for i=1, #itemNames do if i == 1 then text = "-- Lista de Items --\n" else text = text .. (itemNames[i].name) .." = ".. itemNames[i].pontos .." pontos\n" end end doShowTextDialog(cid,8977,text) return true end param = string.upper(param) for j=1, #itemNames do if (param == string.upper(itemNames[j].name)) then if getPlayerStorageValue(cid, 102086) < tonumber(itemNames[j].pontos) then doPlayerSendCancel(cid,"Você não possui pontos suficientes.") return true else doPlayerAddItem(cid, getItemIdByName(param)) doPlayerSendTextMessage(cid, 22, "Você comprou 1 ".. itemNames[j].name ..".") setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086) - itemNames[j].pontos) return true end end end doPlayerSendCancel(cid,"Este item não existe.") return true end Agora em data/talkactions/talkactions.xml cole a tag: <talkaction words="!buy" event="script" value="buyrep.lua"/> Em jogo, ao falar "!buy" aparecera a lista de itens que pode ser comprado e seus determinados custos, conforme foram configurados no arquivo "buyrep.lua". Para comprar um item basta ter a quantidade de reputação necessaria e usar o comando "!buy NomeDoItem". -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----- Mostrar Reputação no Look (by Vodkart)----- Vai em data/creaturescripts/scripts, duplique um arquivo e nomeiei para "showrep" sem as aspas e nele cole: function getReps(cid) return getPlayerStorageValue(cid,102086) < 0 and 0 or getPlayerStorageValue(cid,102086) end function onLook(cid, thing, position, lookDistance) if isPlayer(thing.uid) then doPlayerSetSpecialDescription(thing.uid, "\n[Reps: " .. getReps(thing.uid) .."]") end return true end No creaturescripts.xml cole a tag: <event type="look" name="showRep" event="script" value="showrep.lua"/> E no arquivo login.lua, antes do último return true: registerCreatureEvent(cid, "showRep") -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----- Versão 2.0 repsystem.lua ----- Caso você queira que cada monstro que você matar de pontos diferentes de reputação, voce deve substituir oque tem dentro do seu arquivo inicialmente criado e nomeado como repsystem.lua por isso: --<Script by jhon992>-- function onKill(cid, target, lastHit) local pkDeathPoints = 1 -- pontos que vai ganhar por matar pk. local deathPlayer = 2 -- pontos que vai perder por matar player normal. local vetMonster = { {nome="Demon", quant=3}, -- nome do monstro e quantidade de rep que ira ganhar. {nome="Morgaroth", quant=5}, {nome="Hydra", quant=2}, {nome="Dragon", quant=1} } -- Ao matar monstros do vetMonster, ganhara rep+. for i=1, #vetMonster do if (getCreatureName(target) == vetMonster[i].nome) then setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)+vetMonster[i].quant) doSendAnimatedText(getThingPos(cid), 'Rep+', 30) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você ganhou ".. (vetMonster[i].quant) .." ponto(s) de reputação por matar um ".. (vetMonster[i].nome) ..".") return TRUE end end -- Ao matar um pk, ganhara rep+. if (isPlayer(target) == true) then if (getCreatureSkullType(target) > 2) then setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)+pkDeathPoints) doSendAnimatedText(getThingPos(cid), 'Rep+', 30) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você ganhou "..(pkDeathPoints).." ponto(s) de reputação por matar "..getCreatureName(target)..".") return TRUE end -- Ao matar um player normal, ganhara rep-. setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)-deathPlayer) doSendAnimatedText(getThingPos(cid), 'Rep-', 144) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você perdeu "..(deathPlayer).." ponto(s) de reputação por matar "..getCreatureName(target)..".") return TRUE end return TRUE end É isso aew galera, qualquer coisa que precise ser modificado ou dica para melhorar os scripts e o sistema serão bem vindas! Editado Maio 9, 2012 por Jhon992 gabriel28 reagiu a isso 1 Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/ Compartilhar em outros sites More sharing options...
SkyDangerous 395 Postado Novembro 30, 2011 Share Postado Novembro 30, 2011 -- Ao matar um pk, ganhara rep+ -- if (getCreatureSkullType(target) > 0) then -- Ao matar um player normal, ganhara rep- -- if (getCreatureSkullType(target) > 0) then Ué o que muda nos 2 ? não seria >1 e == 0 ? Não lembro direito os ids das skulls Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1141999 Compartilhar em outros sites More sharing options...
jhon992 371 Postado Novembro 30, 2011 Autor Share Postado Novembro 30, 2011 -- Ao matar um pk, ganhara rep+ -- if (getCreatureSkullType(target) > 0) then -- Ao matar um player normal, ganhara rep- -- if (getCreatureSkullType(target) > 0) then Ué o que muda nos 2 ? não seria >1 e == 0 ? Não lembro direito os ids das skulls Desculpa aew, nem tinha visto isso, dupliquei a parte ali e esqueci de editar. Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1142004 Compartilhar em outros sites More sharing options...
SkyDangerous 395 Postado Novembro 30, 2011 Share Postado Novembro 30, 2011 De Boa. Parabéns, aumentou muito o seu nível. Gostei muito ! Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1142007 Compartilhar em outros sites More sharing options...
jhon992 371 Postado Novembro 30, 2011 Autor Share Postado Novembro 30, 2011 De Boa. Parabéns, aumentou muito o seu nível. Gostei muito ! Andei estudando um pouco. E muito obrigado pelo elogio, isso me faz cada vez querer crescer mais! Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1142104 Compartilhar em outros sites More sharing options...
fastot 39 Postado Novembro 30, 2011 Share Postado Novembro 30, 2011 Muito legal,para quem gosta de por rep no ot ta certinho parabens Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1142277 Compartilhar em outros sites More sharing options...
skybesta 0 Postado Dezembro 3, 2011 Share Postado Dezembro 3, 2011 Nem Funfo Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1143665 Compartilhar em outros sites More sharing options...
jhon992 371 Postado Dezembro 3, 2011 Autor Share Postado Dezembro 3, 2011 Claro que funciona, não fala se tu não sabe usar corretamente! Se tiver dúvida me pergunta, não juga sem saber usar. Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1143789 Compartilhar em outros sites More sharing options...
Trivelatos 2 Postado Dezembro 5, 2011 Share Postado Dezembro 5, 2011 aqui não funcionou não, nem apareçe as msg quando mato os monstros "Você ganhou 1 ponto de reputação por matar um ..." e quando dou !rankrep unica coisa q apareçe é 14:34 Você possui -1 pontos de Reputação. =[ Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1145225 Compartilhar em outros sites More sharing options...
Beeki 284 Postado Dezembro 5, 2011 Share Postado Dezembro 5, 2011 Otimo script de reputação vlw ai por contribuir com a Comunidade Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1145231 Compartilhar em outros sites More sharing options...
pippen 0 Postado Dezembro 5, 2011 Share Postado Dezembro 5, 2011 Funcionando perfeitamente. Parabéns e continue assim! Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1145290 Compartilhar em outros sites More sharing options...
Vinc 101 Postado Dezembro 5, 2011 Share Postado Dezembro 5, 2011 uashuashsauh se mata um player que ta de party ganha rep por que quando ta de party fica green skull = 2 Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1145376 Compartilhar em outros sites More sharing options...
Vodkart 1515 Postado Dezembro 5, 2011 Share Postado Dezembro 5, 2011 (editado) Ta bem legal,só porque de vez de usar o else ou só fechar o if vc abriu outro if? if (isPlayer(target) == true) then if (getCreatureSkullType(target) > 2) then setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)+1) doSendAnimatedText(getThingPos(cid), 'Rep+', 30) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você ganhou 1 ponto de reputação por matar "..getCreatureName(target)..".") return TRUE end setPlayerStorageValue(cid, 102086, getPlayerStorageValue(cid, 102086)-1) doSendAnimatedText(getThingPos(cid), 'Rep-', 144) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você perdeu 1 ponto de reputação por matar "..getCreatureName(target)..".") return TRUE end acho que você poderia fazer um MOD que fica mais fácil de configurar! parabéns pelo sistema,ficou ótimo. REP+ Editado Dezembro 5, 2011 por Vodkart Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1145396 Compartilhar em outros sites More sharing options...
jhon992 371 Postado Dezembro 5, 2011 Autor Share Postado Dezembro 5, 2011 Valeu a e @Vodkart pelo elogio e a dica. Nem percebi que não precisava dos dois if, porque a primeira vez que fiz o script não usei isPlayer(target), dae fui testar e reparei que qualquer monstro concedia rep+ asjida. Então fui e adicionei nas duas parte da configuração que precisava verificar se era player. Valeu pela dica tambem @lordbug99 nem tinha estudado o getCreatureSkullType, tinha deduzido que quem tivesse skull era pk então desculpa pelo erro ao galera. Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1145432 Compartilhar em outros sites More sharing options...
Trivelatos 2 Postado Dezembro 6, 2011 Share Postado Dezembro 6, 2011 !rep rank , não apareçe a lista dos jogadores /; Link para o comentário https://xtibia.com/forum/topic/173892-creaturescript-simple-reputation-system/#findComment-1145977 Compartilhar em outros sites More sharing options...
Posts Recomendados