Ir para conteúdo
Entre para seguir isso  
Socket

Wanted Dead or Alive!

Recommended Posts

Socket    0
Socket

local config = {
 ["autor"] = "Socket",
 ["idéia"] = "[b][V][/b]vodkasiri",
 ["versão"] = 2.0, 
 ["servidor"] = "TFS 0.3.5*",
 ["comentários"] = {"Adaptação do meu Sistema de Reputation.","Feito para funcionar em MySql"}
}

 

Creature Script:

[spoiler=Creature Script]Crie um arquivo chamado rep.lua em data\creaturescripts\scripts e coloque isso nele:

function onKill(cid,target)

 if isPlayer(cid) and isPlayer(target) then
   local sk = getCreatureSkullType(target)
   local level = getPlayerLevel(target)
   local prize = {0.7*level*100, 1.3*level*100}
   if getPlayerIp(cid) ~= getPlayerIp(target) then
     if sk == SKULL_WHITE or sk == SKULL_RED or sk == SKULL_BLACK then
       if haveReward(getPlayerName(target)) then
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "The government payed ".. getPlayerReward(getPlayerName(target)) .." gold coins for the killer of ".. getPlayerName(target) ..". Thank you.")
         doPlayerAddMoney(cid, getPlayerReward(getPlayerName(target)))
         setPlayerReward(getPlayerName(target),0)
       else
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "That player aren't wanted.")
       end
     else
       doPlayerAddReward(getPlayerName(cid), math.random(prize[1],prize[2]))
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Now the government will pay ".. getPlayerReward(getPlayerName(cid)) .." gold coins for your head.")
       setPlayerReward(getPlayerName(target),0)  
     end
   end
 end
 return true
end 

Em

local prize = {0.7*level*100, 1.3*level*100}

Coloque o min,max que vai adcionar na reward do player.

 

 

 

Talkaction:

[spoiler=TalkAction]Crie um arquivo chamado rep.lua em data\talkactions\scripts e coloque isso nele:

function onSay(cid, words, param)
name = {}
for i in param:gmatch('(%a+)') do
 table.insert(name,i)
end
name = table.concat(name, ' ')  
 if words == '!addreward' then
   if name == nil and param:match('(%d+)') == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Player not found.")
     return true
   elseif name == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Choose the player to add ".. param:match('(%d+)') .." in his reward.")
     return true
   elseif param:match('(%d+)') == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Choose the reward to add to ".. name ..".")
     return true
   end
   if getPlayerGUIDByName(name) then
     doPlayerAddReward(name,tonumber(param:match('(%d+)')))
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "You added ".. tonumber(param:match('(%d+)')) .. " gold coins in the reward of ".. name ..".")
     return true
   else
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, name.." isn't a Player.")
     return true
   end
 elseif words == '!removereward' then
   if name == nil and param:match('(%d+)') == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Player not found.")
     return true
   elseif name == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Choose the player to remove ".. param:match('(%d+)') .." from his reward.")
     return true
   elseif param:match('(%d+)') == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Choose the reward to remove from ".. name ..".")
     return true
   elseif getPlayerGUIDByName(name) then
     doPlayerRemoveReward(name,tonumber(param:match('(%d+)')))
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "You removed ".. param:match('(%d+)') .. " gold coins in the reward of ".. name ..".")
     return true
   else
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Player not found.")
     return true  
   end
 elseif words == '!setreward' then
   if name == nil and param:match('(%d+)') == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Player not found.")
     return true
   elseif name == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Choose the player to set his reward to ".. param:match('(%d+)') ..".")
     return true
   elseif param:match('(%d+)') == nil then
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Choose the reward to set from ".. name ..".")
     return true
   elseif getPlayerGUIDByName(name) then
     setPlayerReward(name,tonumber(param:match('(%d+)')))
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "You set the reward from ".. name .." to ".. param:match('(%d+)') ..".")
     return true
   else
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Player not found.")
     return true
   end
 elseif words == '!reward' then
   local voca = {[0]='No vocation', [1]='Sorcerer',[2]='Druid',[3]='Paladin',[4]='Knight',[5]='Master Sorcerer',[6]='Elder Druid',[7]='Royal Paladin',[8]='Elite Knight'}

   if getPlayerGUIDByName(name) then
     local voca = {[0]='No vocation', [1]='Sorcerer',[2]='Druid',[3]='Paladin',[4]='Knight',[5]='Master Sorcerer',[6]='Elder Druid',[7]='Royal Paladin',[8]='Elite Knight'}
     local query = db.getResult("SELECT `level`,`vocation` FROM `players` WHERE `id` = ".. getPlayerGUIDByName(name) ..";")
     local level, voc = query:getDataInt('level'), query:getDataInt('vocation')
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "\n|¯¯¯¯| "..param..": Level "..level.."\n|            | "..voca[voc].."\n|____| Reward: ".. getPlayerReward(param) .. "\nWanted") 
     return true
   else
     doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Player not found.")
     return true
   end
 elseif words == '!pay' then
 gold = param:match('(%d+)')
   if gold then
     if type(tonumber(gold)) == 'number' then
       if getPlayerReward(getPlayerName(cid)) >= tonumber(gold) then
         if doPlayerRemoveMoney(cid, tonumber(gold)) then
           doPlayerRemoveReward(getPlayerName(cid),tonumber(gold))
           doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "You removed ".. gold .." gold coins from your reward.")
           return true
         else
           doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE, "You don't have ".. gold .." gold coins.")
           return true
         end
       else
         doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE, "You don't have ".. gold .." gold coins in your reward.")
         return true
       end
     else
       doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE, gold.." isn't a number.")
       return true
     end
   else
       doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Choose how many gold coins you'll remove from your reward.")
       return true
   end
 elseif words == '!support' then
   local str = "¤Functions:\n\n!reward Socket » Will show how many gold coin the government will pay if you kill Socket.\n\n!pay 10 » Will remove 10 gold coins from your reward.\n\n!support » Will show this to you."
   local str1 = "¤Functions:\n\n!addreward Socket 10 » Will add 10 gold coins in the reward of Socket.\n\n!removereward Socket 10 » Will remove 10 gold coins from the reward of Socket.\n\n!setreward Socket 10 » Will change the reward of Socket to 10.\n\n!reward Socket » Will show how many gold coin the government will pay if you kill Socket.\n\n!pay 10 » Will remove 10 gold coins from your reward.\n\n!support » Will show this to you."
   if getPlayerAccess(cid) > 3 then
     doPlayerPopupFYI(cid, str1)
     return true
   else
     doPlayerPopupFYI(cid, str)
     return true
   end
 end
end  

 

 

Lib:

[spoiler=Lib]Crie um arquivo chamado rep.lua em data\lib e adcione isto nele:

function rewardtable()
local q = db.executeQuery("ALTER TABLE `players` ADD `reward` INT NOT NULL DEFAULT '0' AFTER `name`;")
 return q
end 
function setPlayerReward(player,qnt)
 db.executeQuery("UPDATE `players` SET `reward` = '".. qnt .."' WHERE `name` = '".. player .."' LIMIT 1;")
 return true
end
function getPlayerReward(player)
local get = db.getResult("SELECT `reward` FROM `players` WHERE `name` = '".. player .."';")
local reward = get:getDataInt('reward')
 return reward
end
function haveReward(player)
 if getPlayerReward(player) > 0 then
   return true
 end
 return false
end
function doPlayerAddReward(player,qnt)
t = (qnt and qnt or 1)
local get = db.getResult("SELECT `reward` FROM `players` WHERE `name` = '".. player .."';")
local reward = get:getDataInt('reward')
 return db.executeQuery("UPDATE `players` SET `reward` = '".. reward + t .."' WHERE `name` = '".. player .."' LIMIT 1;")
end
function doPlayerRemoveReward(player,qnt)
t = (qnt and qnt or 1)
local get = db.getResult("SELECT `reward` FROM `players` WHERE `name` = '".. player .."';")
local reward = get:getDataInt('reward')
 if reward > t then
   return db.executeQuery("UPDATE `players` SET `reward` = '".. reward - t .."' WHERE `name` = '".. player .."' LIMIT 1;")
 else
   return db.executeQuery("UPDATE `players` SET `reward` = '".. 0 .."' WHERE `name` = '".. player .."' LIMIT 1;")
 end
end

 

 

Movement:

[spoiler=Movement]Crie outro arquivo chamado rep.lua em data\movements\scripts e coloque isso nele:

local sex = {
 [0] = 'she\'s',
 [1] = 'he\'s',
}
local config = {
 bc = true,
 uid = 1000,
 reward = 1500
}

function onStepIn(cid, item, pos)
 if item.uid == config.uid then
   doPlayerAddReward(getPlayerName(cid),config.reward)
   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You entered an area of government, now you're wanted for ".. getPlayerReward(getPlayerName(cid)) .." gold coins.")
   if config.bc == true then
     doBroadcastMessage(getPlayerName(cid).." have entered an area of government, now ".. sex[getPlayerSex(cid)] .." wanted for ".. getPlayerReward(getPlayerName(cid)) .. " gold coins.", 22)
   end
 end
 return true
end

Em

 local config = {
 bc = true,
 uid = 1000,
 reward = 1500
}

Configure:

bc: se quer que mande uma mensagem global de que alguem entro num lugar errado e está procurado coloque true, se não false.

uid: unique id do tile.

reward: quantidade que vai adcionar na reward do player.

 

 

Instalação:

[spoiler=Instalação]

1º: Execute a função rewardtable() uma vez ou a query:

ALTER TABLE `players` ADD `reward` INT NOT NULL DEFAULT '0' AFTER `name`

2º Em data\lib procure o arquivo data.lua ou global.lua e adcione isto nele:

dofile(getDataDir() .. "lib/rep.lua")

3º Em data\creaturescripts abra o arquivo creaturescripts.xml e adcione isto nele:

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

4º Em data\creaturescripts\scripts abra o arquivo login.lua e adcione isto no final:

registerCreatureEvent(cid, "rep")

5º Em data\talkactions abra o arquivo talkactions.xml e adcione isto nele:

<talkaction words="!addreward" access="5" event="script" value="rep.lua"/>
<talkaction words="!removereward" access="5" event="script" value="rep.lua"/>
<talkaction words="!setreward" access="5" event="script" value="rep.lua"/>
<talkaction words="!reward" event="script" value="rep.lua"/>
<talkaction words="!support" event="script" value="rep.lua"/>
<talkaction words="!pay" event="script" value="rep.lua"/>

6º Em data\movements abrao arquivo movements.xml e adcione isto nele:

<movevent type="StepIn" itemid="5588" event="script" value="rep.lua"/>

em itemid="5588" troque pelo id do tile "protegido pelo governo".

 

 

Comandos:

3 comandos para GOD adcionar/remove/setar a reward do player:

!addreward Socket 10/!addreward 10 Socket

!removereward Socket 10/!removereward 10 Socket

!setreward Socket 10/!setreward 10 Socket

2 comandos para PLAYER ver, e pagar sua recompensa:

!pay 100

!reward Socket

 

Movement:

Ela é opcional, serve para você "proteger" algum tile, quando alguem passa emcima a reward dele aumenta.

 

Explicação Lib:

[spoiler=Lib]

setPlayerReward(cid,qnt): Seta a recompensa do player para qnt.

 

doPlayerAddReward(cid[,qnt]): Adciona qnt na recompensa do player.

 

doPlayerRemoveReward(cid[,qnt]): Remove qnt da recompensa do player. Obs: tenho 50 tiro 60 fico com 0.

 

getPlayerReward(cid): Retorna a recompensa do player.

 

haveReward(cid): Retorna true se a recompensa do player for maior que 0, false se não.

 

Obs: As funções funcionam pelo nome. Para pegar o nome useas seguintes funções:

getPlayerName(cid): Pega o nome pelo uid do player.

 

getPlayerNameByGUID(id): Pega o nome pelo id do player.

 

 

+++++

Script feito em padrões, por isso permite a "desordem" dos parametros.

 

Funções funcionam pelo nome, por isso também funcionam com players OFFline.

 

Script "explicativo", para cada situação de erro, confusão, há uma resposta explicativa.

 

Feito em luaSql.

 

SSs

[spoiler=SS]

[spoiler=!addreward e !removereward]addremove.png

 

[spoiler=!pay]pay.png

 

[spoiler=!setreward]seta.png

 

[spoiler=Movement]movu.png

No movement se for female aparece she's lógico.

 

Não coloquei do !reward, porque em todos ele aparece, é esse quadrado ai :fun:

 

Tópico da idéia:

http://forums.otserv.com.br/showthread.php?p=103735

 

Edit:

Quando eu postei não tinha testado o creature script, agora eu testei com o dragonlorde e está 100% funcionando!

Edit2: Agora quando der look aparece a reward do player, mas continua o comando !reward playerName

 

 

 

 

 

 

Editado por Socket

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf

Movido.

Compartilhar este post


Link para o post
dragonlorde    0
dragonlorde

LOL mano mto foda esse sistema

(eu fiz os teste com ele ) XD

Compartilhar este post


Link para o post
pejuge2    1
pejuge2

Muito bom, principalmente por usar a parte de SQL

Compartilhar este post


Link para o post
Le588    0
Le588

Uau *_*

 

Eu tinha postado lá a sugestão do look \O/

 

Legal cara, vou instalar aqui e ver se funciona! Muito bom :D

Compartilhar este post


Link para o post
Socket    0
Socket
Uau *_*

 

Eu tinha postado lá a sugestão do look \O/

 

Legal cara, vou instalar aqui e ver se funciona! Muito bom :D

Vlw, e.. funciona perfeitamente, é so seguir as explicações a risca :yes:

Compartilhar este post


Link para o post
Sinister    0
Sinister

Muito bom...

Podia botar um global event também, falando as pessoas e a recompensa.

Por exemplo.

 

Players procurados: Socket(10000 gps), Mock(10000000 gps)

Compartilhar este post


Link para o post
Socket    0
Socket
Muito bom...

Podia botar um global event também, falando as pessoas e a recompensa.

Por exemplo.

 

Players procurados: Socket(10000 gps), Mock(10000000 gps)

Obrigado pela sugestão.

 

@all

Havia um pequeno erro, não é bem um erro, quando o nome do player era de duas palavras o script so pegava o primeiro, mas já consertei isso e substitui a talkaction.

 

--Edit

A V3 está chegando, e ela promete hein, uma coisa que virá com a V3 será o implemento do Reward no look. Sem precisar mudar as sources!

Editado por Socket

Compartilhar este post


Link para o post
vodkasiri    0
vodkasiri

ficou bem foda mano adorei (:

Compartilhar este post


Link para o post
MeLaHeLL    0
MeLaHeLL

Vai usar a função onLook?

Se for, vou esperar pela V3 :D:D

 

pq vai ser foda, e eu vou querer :D:D

Compartilhar este post


Link para o post
Death Soul    0
Death Soul

Olá Sock, Estou com um problema com seu script, vou postar os seguintes dados do mesmo.

 

Server: Alissow 3.9

Versão do Tibia: 8.54

Erro do Console:

[04/03/2010 09:19:00] [Error - CreatureScript Interface]

[04/03/2010 09:19:00] data/creaturescripts/scripts/login.lua

[04/03/2010 09:19:00] Description:

[04/03/2010 09:19:00] (luaRegisterCreatureEvent) Creature not found

Não testei os outros scripts no OT, apenas vi esse erro, tentei colocar o comando no começo do script login.lua ao invés do final como você disse para colocar, tentei também colocar antes do "End" final do script e também não funcionou mas creio que o erro seja somente nessa parte da instalação.

 

Obs: Não fiz a primeira parte da instalação que mexe com SQL, pois o meu Server uso ele em SQLite.

 

Me da uma ajuda ae plx :D

Abraço.

Compartilhar este post


Link para o post
pejuge2    1
pejuge2

Death, já existe este sistema em nova versão, tente a nova...

Compartilhar este post


Link para o post
katumblo    0
katumblo

mano posta um tipo assim nao pode dar reputaçao pra ninguem voc so ganha reputaçao matano players

Compartilhar este post


Link para o post
marxv    0
marxv

Parcero

2º Em data\lib procure o arquivo data.lua ou global.lua e adcione isto nele:

 

no meu ot tem esse arquivo ai n

 

onde eu acho?

Compartilhar este post


Link para o post
iuniX    4
iuniX

Só crie um arquivo lua dentro da pasta lib e coloque o conteudo.

Compartilhar este post


Link para o post
marxv    0
marxv

e tem como eu colocar tipo uma lista de procurados no meu site???

 

outra coisa

 

eu coloquei a recompensa pro player

ele matou o otro

 

como o assassino pega sua recompensa???

Editado por marxv

Compartilhar este post


Link para o post
koete    0
koete

PQP olha isso pelo amor de Deus

 

 

[27/07/2011 17:35:03] Lua Script Error: [TalkAction Interface]

[27/07/2011 17:35:03] data/talkactions/scripts/rep.lua:onSay

 

[27/07/2011 17:35:03] data/talkactions/scripts/rep.lua:69: attempt to call global 'getPlayerReward' (a nil value)

[27/07/2011 17:35:03] stack traceback:

[27/07/2011 17:35:03] data/talkactions/scripts/rep.lua:69: in function <data/talkactions/scripts/rep.lua:1>

 

 

 

me ajuda aeew cara namoral

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×