Sistema De Reputação, Recompensa

Demonbholder
em NPCs, monsters e raids
  • 1
  • 2

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

Olá galera do XTibia; eu postei já vários tópicos, incluindo sistemas, e scripts em parceria com o Vodkart, por exemplo, que infelizmente, não foram muito apreciados (links na minha assinatura). Então eu pensei em fazer algo grande, um sistema que talvez não fosse compartilhado por outras pessoas, sem negociações de dinheiro. Foi ai que me veio uma idéia, que inicialmente eu pensei que poderia ser grande, um sistema difícil e com vários scripts. Trabalhando nisso por alguns dias, eu desenvolvi um sistema de reputação, ou recompensa, como preferirem, utilizando apenas dois scripts lua. Não posso dizer que foi fácil, tive meus problemas, mas não foi tão difícil quanto o esperado.

 

Bom, vamos ao que interessa; o sistema funciona assim: Há um npc, e este npc pode colocar recompensas pela cabeça dos jogadores, desde que você o pague, é claro. São dez níveis de recompensa, sendo que a cada nível, a recompensa vai melhorando. Exemplo de uso:

 

Um pk me matou, e não tenho forças para mata-lo. Quero que ele sofra, mas não quero ser descoberto, pois não quero morrer para ele de novo. A solução? Caçador de recompensas. Vou contratar o caçador de recompensas e usar todo o meu dinheiro para aumentar sua recompensa ao nível máximo, o nível 9! Assim, uma mensagem irá avisar a todos no servidor que o jogador teve sua recompensa aumentada, e assim, os mais fortes irão matar este pk para mim, e ele não saberá que fui eu. Assim que o jogador for morto, a recompensa será resetada, e o cara que matou irá ganhar um item de acordo com o nível da recompensa.

 

Vamos aos scripts e suas explicações:

 

Versão 1.5:

 

 

CreatureScripts:

 

Vá em data/creaturescripts/scripts, crie um arquivo .lua, e cole isto nele:

 

function onKill(cid, target)

local award = {
[0] = 2160, -- crystal coin
[1] = 2497, -- crusader helmet
[2] = 2487, -- crown armor
[3] = 2195, -- boots of haste
[4] = 2520, -- demon shield
[5] = 2470, -- golden legs
[6] = 2466, -- golden armor
[7] = 2506, -- dragon scale helmet
[8] = 2492, -- dragon scale mail
[9] = 2514 -- mastermind shield
}

if getPlayerStorageValue(target, 13131) > -1 then
doPlayerAddItem(cid, award[getPlayerStorageValue(target, 13131)])
setPlayerStorageValue(target, 13131, -1)

end
return TRUE
end

 

Feito isso, nesta mesma pasta, abra o arquivo login.lua, ache as tags que registram eventos, que são algo assim:

 

registerCreatureEvent(cid, "Evento")
registerCreatureEvent(cid, "Evento")
registerCreatureEvent(cid, "Evento")

 

Entre alguma delas, adicione esta tag:

 

registerCreatureEvent(cid, "Recompensa")

 

Para finalizar a parte do CreatureScripts, vá em data/creaturescripts, abra o arquivo creaturescripts.xml e cole esta tag em algum lugar:

 

<event type="kill" name="Recompensa" event="script" value="Nome_do_Arquivo.lua"/>

 

Npc:

 

Vá em data/npcs, crie um arquivo .xml e cole isto nele:

 

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Matador por Recompensas" script="data/npc/scripts/Nome_do_Arquivo.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="152" head="79" body="128" legs="114" feet="0" addons="3"/>
<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|. Diga {promover, recompensa, level,} ou para mais informacoes, diga {informacoes}." />
</parameters>
</npc>

 

Agora vá em data/npcs/scripts, crie um arquivo .lua e cole isto nele:

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)	 npcHandler:onCreatureAppear(cid)	 end
function onCreatureDisappear(cid)	 npcHandler:onCreatureDisappear(cid)	 end
function onCreatureSay(cid, type, msg)	 npcHandler:onCreatureSay(cid, type, msg)	 end
function onThink()	 npcHandler:onThink()	 end

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

preco = {
[-1] =  100000,
[0] = 200000,
[1] = 300000,
[2] = 400000,
[3] = 500000,
[4] = 600000,
[5] = 700000,
[6] = 800000,
[7] = 900000,
[8] = 1000000
}

if(msgcontains(msg, 'promover')) then
selfSay('Diga o nome do jogador que voce deseja promover.', cid)
talkState[talkUser] = 1
elseif isPlayer(getPlayerByNameWildcard(msg)) and talkState[talkUser] == 1 then
if getPlayerStorageValue(getPlayerByNameWildcard(msg), 13131) < 9 then
if doPlayerRemoveMoney(cid, preco[getPlayerStorageValue(getPlayerByNameWildcard(msg), 13131)]) == TRUE then
setPlayerStorageValue(getPlayerByNameWildcard(msg), 13131, getPlayerStorageValue(getPlayerByNameWildcard(msg), 13131) + 1)
doBroadcastMessage("O jogador "..msg.." foi promovido para o nivel "..getPlayerStorageValue(getPlayerByNameWildcard(msg), 13131)..".", BroadCast_Type)
else
selfSay('Descupe, voce não possui o dinheiro necessário para promover este jogador.', cid)
end
else
selfSay('O jogador que voce escolheu ja foi promovido ao maximo.', cid)
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Certo entao.', cid)
end

if(msgcontains(msg, 'level')) then
selfSay('Diga o nome do jogador que voce deseja checar o level.', cid)
talkState[talkUser] = 2
elseif isPlayer(getPlayerByNameWildcard(msg)) and talkState[talkUser] == 2 then
if getPlayerStorageValue(getPlayerByNameWildcard(msg), 13131) >= 0 then
selfSay("O level de recompensa deste jogador é "..getPlayerStorageValue(getPlayerByNameWildcard(msg), 13131)..".", cid)
else
selfSay('Este jogador nao esta sendo procurado.', cid)
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Certo entao.', cid)
end

if(msgcontains(msg, 'recompensa')) then
selfSay('Deseja checar o seu level de recompensa?', cid)
talkState[talkUser] = 3
elseif (msgcontains(msg, 'yes') and talkState[talkUser]) == 3 then
if getPlayerStorageValue(cid, 13131) >= 0 then
selfSay("O seu level de recompensa é "..getPlayerStorageValue(cid, 13131)..".", cid)
else
selfSay('Voce nao esta sendo procurado.', cid)
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Certo entao.', cid)
end

if(msgcontains(msg, 'informaçoes')) then
selfSay('O sistema funciona da seguinte maneira: voce pode colocar recompensas pela cabeça de jogadores, assim, quem matar estes jogadores irá ganhar algum item, porem, ha um alto custo para utilizar os meus serviços.', cid)
talkState[talkUser] = 0
end

return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

As seguintes opções de palavras são validas para versão 1.5:

 

Informaçoes - O npc irá explicar detalhadamente como funciona o sistema para o jogador.
Recompensa - O npc irá te dizer o nível de sua recompensa.
Level - Diga level, e depois o nome do jogador que você deseja consultar, e irá saber o nível da recompensa dele.
Promover - Diga promover e promova a recompensa de algum jogar, lembrando que a recompensa será aumentado 1 por 1.

 

Espero que gostem, me esforcei de mais para fazer este sistema, espero que todos que utilizarem, comentem; é só comentar dizendo se gostou ou não, ou se encontrou algum erro, enfim, comentem.

Oie :D

Saymon14

.
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 05/05/10Posts: 544

Inovador, eu nao tinha visto sistema como esse, agora é só testar tudo pra ver se nao tem nenhum bug, aaahhh e é bom os donos do servers colocar um preço bem alto porque se nao vai ser um SPAM da poh# no BC

 

 

Abraços, Rep+

 

Não entro em equipes, já tenho meu projeto, não insista.

 

 

 

 

 

 

Easy Mapper Map Editor 8.60: Clique aqui

[8.60] BeastXHunter: Clique aqui

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

wow,ótimo sistema cara,ctz vai ser muito usado nos servidores,pois inova no rpg (:

parabéns.

bossisg.png

Vampiresco

A única certeza é a morte...
avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 26/02/10Posts: 158Gênero: MasculinoChar no Tibia: Vampiresco

Excelente sistema, ideia excepcional a sua, e funciono.. meus sinceros parabéns!



Pena que este belo sistema não terá nem uma utilidade no meu projeto que está perto de lançar..

Mais como o amigo ai em cima lhe disse, vai ser muito usado nos servidores.. tá salvo no meu PC para se um dia eu precisar.. Valeu.

Sou o tal humilde Deus, que cria o mais perfeito e justo mundo a se viver.. .. ..

Shandon

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/10/10Posts: 28Gênero: Masculino

Cara você é um crânio.. Sei que não tenho muita moral para falar mais ! Fico mais que ótimo.E outra vou colocar em meu server e garanto que vai ficar bom :D

 

REP+

logoax.gif

Tibianos de elite

Karislayer

♦ Retired ♦
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 31/07/10Posts: 247

Só tenho uma coisa a dizer, Parabéns!

Ajudando a comunidade no Anonimato!

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

Valeu galera, tinha uns errinhos no npc, mas agora ta arrumado.

Oie :D

Hudsin

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 03/03/07Posts: 150Gênero: MasculinoChar no Tibia: Kaball Madness

Script Ótimo e aprovado! Ótima ideia aalem de ser um script perfeito e incentivador de "movimentação" no server,vlw! :smile_positivo:

aseFp.gif

Cren Lucienuk

Apenas eu!
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 30/10/05Posts: 80Char no Tibia: Cren Lucienuk

Ótima idéia, inovador mesmo. Script ta perfeito pelo que vi, vo indicar pros meus amigos que tão criando servers.

"Nunca perca a fé na humanidade, pois ela é como um oceano. Só porque existem algumas gotas de água suja nele, não quer dizer que ele esteja sujo por completo." (Mahatma Ghandi)

Secular

XTibia is back!
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 08/12/10Posts: 960Char no Tibia: Wayhell Soul

Ideias Cada Vez Melhores e Achei A Sua Como Todos Disseram:

Inovadora :button_ok: !

Atenciosamente,
Gabriel Rodrigues.


oQ2udMR.png

 

 

Old but gold:

ADS 58: 3º Lugar
ADS 61: 3º Lugar
ADS 65: 2º Lugar
ADS 70: 1º Lugar
ADS 71: 3º Lugar

 
Membro: [08/12/2010]
Colaboração: [02/06/2011] 
Moderação: [11/09/2011]
Colaboração: [10/09/2013]

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

Muito obrigado pelos comentários, isso me levou a criar a versão 1.5, já disponível, com algumas alterações, mas o principal motivo foi diminuir os scripts mesmo.

Oie :D

Vampiresco

A única certeza é a morte...
avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 26/02/10Posts: 158Gênero: MasculinoChar no Tibia: Vampiresco

A versão 1.5 melhor ainda, obrigado Demonbholder pelo belo script!

Sou o tal humilde Deus, que cria o mais perfeito e justo mundo a se viver.. .. ..

pintopinto

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/02/11Posts: 20

Nice,coloquei no meu OT :thumbsupsmiley:

Sou:

 

65% |Web Programming| - Intermediário.

55% |Lua Programming| - Intermediário.

50% |C++| - Intermediário

10% |Mapping| - Iniciante

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

Valeu pessoal, o que vocês acham de fazer uma formula para o valor da recompensa? Se aprovarem, logo estarei fazendo.

 

Exemplo:

 

Preço + Formula.

 

Até.

Oie :D

UnderWalter

50% em Mapping :)
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/02/11Posts: 67

Muito Bem.

Este é um teste para avaliar se a sua missão na Terra está completa. Se você estiver vivo, então ela não está. Richard Bach

TE AJUDEI ? CLIQUE EM

add.png

 

Compre seu SEMI-DEDICADO com desconto aqui.



Clique na imagem abaixo, cadastra-se e compre seu Semi-Dedicado.

otserver.png

  • 1
  • 2