Iaaae galera suave braaits ? Hoje venho trazer para vocês um sistema de Torneio, mas, como funciona?
Vários players entram numa sala, falando com o NPC (tem horário configurável para poder falar), e para poder participar deve pagar uma quantia, ao pagar você é teleportado á Arena aonde começa a batalha.
O último que sobreviver vence
Vamos á instalação?
~~
Vá em data/npc, copie algum arquivo .XML da pasta e cole, renomeie para Tournament,
cole isso dentro:
<?xml version="1.0" encoding="UTF-8"?> <npc name="Tournament" script="tournament.lua" walkinterval="2000" floorchange="0"> <health now="150" max="150"/> <look type="128" head="20" body="100" legs="50" feet="99" corpse="2212"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. If you want to participate in the tournament say: {torneio} or {enter}."/> </parameters> </npc>
Ok, agora vá em data/npc/scripts, copie algum arquivo dessa pasta e cole, renomeie para tournament, cole isso:
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 local cfg = { price = 100, -- Money to sign in tournament startPos = {x = 1016, y = 1025, z = 7}, -- Posição central da sala de torneio hour = "18:00:00", -- Hour to start maxhour = "18:15:00", -- Max to start } if msgcontains(msg, 'torneio') or msgcontains(msg, 'enter') then selfSay('You want to participate in the tournament by '..cfg.price..' gps / dollars?', cid) talkState[talkUser] = 2 elseif talkState[talkUser] == 2 then if msgcontains(msg, 'yes') or msgcontains(msg, 'sim') then if os.date("%X") < cfg.hour or os.date("%X") > cfg.maxhour then selfSay('Registration for the tournament finished, come back later.', cid) return true end if doPlayerRemoveMoney(cid, cfg.price) then doTeleportThing(cid, {x = 1007, y = 1018, z = 7}) doPlayerSendTextMessage(cid, 27, "Welcome to the tournament, the fights will start on time, good luck, hahaha!") else selfSay('You do not have enough money ('..cfg.price..').', cid) end else selfSay('Sure you do not want to participate? Okay, see you next time!!', cid) talkState[talkUser] = 0 end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
Configurando:
local cfg = { price = 100, -- Money to sign in tournament startPos = {x = 1016, y = 1025, z = 7}, -- Posição central da sala de torneio hour = "18:00:00", -- Hour to start maxhour = "18:15:00" -- Max to start }
Price é o preço que paga para entrar no Torneio, startPos é as coordenadas do meio da sala de Torneio, e Hour é a hora do dia que começa, o Torneio no caso é diário, mude o horário de "18:00:00" para o horário desejado, entre aspas e no formato 00:00:00! Já o maxhour determina até quando o NPC vende inscrições, no caso coloquei por 15 minutos.
Agora vamos configurar a alavanca e o baú do vencedor! Vá em data/lib, abra o arquivo 050-function.lua ou function.lua, vá até a última linha de todas, pule 2 linhas e cole isso:
function getPlayersInArea(area) local players = {} for x = area.fromx,area.tox do for y = area.fromy,area.toy do for z = area.fromz,area.toz do local m = getTopCreature({x=x, y=y, z=z}).uid if m ~= 0 and isPlayer(m) then table.insert(players, m) end end end end return players end
Essa é a lib que usaremos no nosso Torneio, muito bem, agora vá em data/actions/scripts, copie algum arquivo desta pasta e cole, renomeie para tournament e cole isso dentro:
function onUse(cid, item, frompos, item2, topos) local cfg = { salaAward = {x = 1016, y = 1014 , z = 7}, -- Coordenates of the award place } local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} -- Positions local check = getPlayersInArea(area) local maxhour = "18:15:00" if #check > 1 then doPlayerSendTextMessage(cid, 27, "Before everything ends up with other players!!") return true end if os.date("%X") < maxhour then doPlayerSendTextMessage(cid, 27, "Wait for all participants enter the arena!") return true end doTeleportThing(cid, cfg.salaAward) doPlayerSendTextMessage(cid, 20, "Congratulations, you won, take your prize in this room.") doBroadcastMessage("The player "..getCreatureName(cid).." wins the Tournament! Congratulations.", MESSAGE_STATUS_CONSOLE_RED) end
-
Configurando:
local cfg = { salaAward = {x = 1016, y = 1014 , z = 7}, -- Coordenates of the award place }
salaAward, coloque as coordenadas da sala de prêmio do vencedor do Torneio!
local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7}
fromx - fromy - fromz, coloque as coordenadas (X,Y e Z) do canto superior esquerdo da sala de Torneio, e tox - toy - toz, coloque as coordenadas (X, Y e Z) do canto inferior direito da sala de Torneio.
local maxhour = "18:15:00", coloque igual ao script do NPC!
Na mesma pasta crie outro arquivo, mas agora com o nome de tournamentchest e adicione isso dentro:
function onUse(cid, item, frompos, item2, topos) local cfg = { awardId = 2148, -- Item ID of winner prize awardAmount = 100, -- Amount of item ID } doPlayerAddItem(cid, cfg.awardId, cfg.awardAmount) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(cid, 27, "Thanks for sign, added +1 Tournament Points!") return true end
-
Configurando:
local cfg = { awardId = 2148, -- Item ID of winner prize awardAmount = 100, -- Amount of item ID }
awardId coloque o ID do item que vai receber ao ganhar o Torneio, e awardAmount a quantidade!
Em actions.xml adicione essas tags:
<action actionid="13549" event="script" value="tournament.lua"/> <action uniqueid="5531" event="script" value="tournamentchest.lua"/>
Muito bem, dirija-se á data/creaturescripts/scripts, copie algum arquivo da pasta e cole, renomeie para tournamentdeath, e adicione isso dentro:
local cfg = { leftPos = {x = 1008, y = 1018, z = 7}, rightPos = {x = 1025, y = 1033, z = 7}, } function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInRange(getCreaturePosition(pid), cfg.leftPos, cfg.rightPos) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true) doCreatureAddMana(cid, getCreatureMaxMana(cid)) doRemoveConditions(cid, false) return false end return true end
-
Configurando:
local cfg = { leftPos = {x = 1008, y = 1018, z = 7}, rightPos = {x = 1025, y = 1033, z = 7}, }
leftPos coloque as coordenadas do canto superior esquerdo da Sala de Torneio, e rightPos coloque o canto inferior direito da sala
Agora em creaturescripts.xml adicione essa tag:
<event type="preparedeath" name="TournamentDeath" event="script" value="tournamentdeath.lua"/>
Prontinho galera, agora apenas adicione ACTION ID 13549 na alavanca e UNIQUE ID 5531 no baú do campeão
