Se eu não me engano tem um server que eu joguei com esses baguio ae ![]()
vo fazer uns scrpts e vê ce dar certo.
Se eu não me engano tem um server que eu joguei com esses baguio ae ![]()
vo fazer uns scrpts e vê ce dar certo.
info
Grupo: Visconde
Registrado: 20/08/06
Posts: 250
Reputação: +146

O primeiro:
Pode não estar 100% e talvez tenha algumas coisas desnecessárias.
actions/actions.xml
<action actionid="1011" script="peso.lua"/> <action actionid="1010" script="peso.lua"/>
actions/scripts/peso.lua
-- / SCRIPT BY KYDRAI \-- function stop(gm, name) _PESO[name]:onStop() doPlayerSendTextMessage(_PESO[name].p1.cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você leventou ".._PESO[name].p1.points.." vezes o peso.\nSeu adversário leventou ".._PESO[name].p2.points.." vezes o peso.") doPlayerSendTextMessage(_PESO[name].p2.cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você leventou ".._PESO[name].p2.points.." vezes o peso.\nSeu adversário leventou ".._PESO[name].p1.points.." vezes o peso.") doPlayerSendTextMessage(gm, MESSAGE_STATUS_CONSOLE_BLUE, "O "..getCreatureName(_PESO[name].p1.cid).." levantou ".._PESO[name].p1.points.." vezes o peso.\n O "..getCreatureName(_PESO[name].p2.cid).." levantou ".._PESO[name].p2.points.." vezes o peso.") local winner, looser = _PESO[name]:getWinner(), _PESO[name]:getLooser() if winner then doSendAnimatedText(getCreaturePosition(winner), "WIN!", TEXTCOLOR_YELLOW) doSendAnimatedText(getCreaturePosition(looser), "LOSS!", TEXTCOLOR_RED) else doSendAnimatedText(getCreaturePosition(_PESO[name].p1.cid), "EMPATE!", TEXTCOLOR_WHITE) doSendAnimatedText(getCreaturePosition(_PESO[name].p2.cid), "EMPATE!", TEXTCOLOR_WHITE) end end function start(name, gm) _PESO[name]:onStart() addEvent(stop, 10 * 1000, gm, name) -- 10 segundos de jogo end function onUse(cid, item, fromPosition, itemEx, toPosition) local localName = getItemAttribute(item.uid, "description") if getPlayerGroupId(cid) > 1 then if item.itemid == 1945 then _PESO[localName] = peso:new(localName) if _PESO[localName]:getPositions() == TRUE then if _PESO[localName]:getPlayers() == TRUE then _PESO[localName]:prepareOnStart() doTransformItem(item.uid, 1946) addEvent(doSendAnimatedText, 1000, _PESO[localName].pos3, "3" , TEXTCOLOR_LIGHTBLUE) addEvent(doSendAnimatedText, 2000, _PESO[localName].pos3, "2" , TEXTCOLOR_LIGHTBLUE) addEvent(doSendAnimatedText, 3000, _PESO[localName].pos3, "1" , TEXTCOLOR_LIGHTBLUE) addEvent(doSendAnimatedText, 4000, _PESO[localName].pos3, "JÁ!" , TEXTCOLOR_LIGHTGREEN) addEvent(start, 4000, localName, cid) else doPlayerSendCancel(cid, "São necessários 2 players para jogar.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "[Error] Posição inválida!") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end elseif item.itemid == 1946 then if _PESO[localName].start == 0 then doTransformItem(item.uid, 1945) peso:reward(7369, 7371, 7370) -- recompensa(winner, looser, draw) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_RED) doCreatureSetNoMove(_PESO[localName].p1.cid, false) doCreatureSetNoMove(_PESO[localName].p2.cid, false) else doPlayerSendCancel(cid, "O tempo ainda não acabou.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end end elseif item.actionid == 1011 then if _PESO[localName].start == 2 then _PESO[localName]:addPoint(cid) end else doPlayerSendCancel(cid, "Só um GM pode puxar a alavanca.") end return TRUE end -- \ END SCRIPT /--
lib/peso.lua
--/ LIB BY KYDRAI \--
_PESO = {}
PESO_POS = {
-- alavancas
["Levantamento 01"] = {
pos1 = {x=122, y=122, z=7}, -- player 1
pos2 = {x=122, y=120, z=7}, -- player 2
pos3 = {x=120, y=121, z=7, stackpos=1}, -- alavanca
pos4 = {x=121, y=122, z=7, stackpos=1}, -- peso 1
pos5 = {x=121, y=120, z=7, stackpos=1}, -- peso 2
},
}
function setPesoDescriptions()
for name, positions in pairs(PESO_POS) do
for i, pos in pairs(positions) do
doItemSetAttribute(getTileThingByPos(pos).uid, "description", name)
end
end
end
peso = {
pos1 = {},
pos2 = {},
pos3 = {},
p1 = {cid = 0, points = 0},
p2 = {cid = 0, points = 0},
start = 0
}
function peso:new(name)
local obj = {
name = name
}
return setmetatable(obj, {__index = peso})
end
function peso:getPositions()
if PESO_POS[self.name] then
self.pos1, self.pos2 = PESO_POS[self.name].pos1, PESO_POS[self.name].pos2
self.pos3 = PESO_POS[self.name].pos3
self.pos4, self.pos5 = PESO_POS[self.name].pos4, PESO_POS[self.name].pos5
return TRUE
end
return FALSE
end
function peso:getPlayers()
local p1, p2 = getTopCreature(self.pos1).uid, getTopCreature(self.pos2).uid
if isPlayer(p1) and isPlayer(p2) then
self.p1.cid = p1
self.p2.cid = p2
return TRUE
end
return FALSE
end
function peso:prepareOnStart()
self.start = 1
doCreatureSetNoMove(self.p1.cid, true)
doCreatureSetNoMove(self.p2.cid, true)
end
function peso:onStart()
self.start = 2
end
function peso:onStop()
self.start = 0
end
function peso:addPoint(cid)
if self.p1.cid == cid then
self.p1.points = self.p1.points + 1
elseif self.p2.cid == cid then
self.p2.points = self.p2.points + 1
end
end
function peso:getWinner()
return (self.p1.points > self.p2.points and self.p1.cid) or (self.p2.points > self.p1.points and self.p2.cid) or nil
end
function peso:getLooser()
return (self.p1.points < self.p2.points and self.p1.cid) or (self.p2.points < self.p1.points and self.p2.cid) or nil
end
function peso:reward(itemWin, itemLoss, itemDraw)
local winner, looser = self:getWinner(), self:getLooser()
if winner then
doPlayerAddItem(self.p1.cid, winner == self.p1.cid and itemWin or itemLoss, 1)
doPlayerAddItem(self.p2.cid, winner == self.p2.cid and itemWin or itemLoss, 1)
else
doPlayerAddItem(self.p1.cid, itemDraw, 1)
doPlayerAddItem(self.p2.cid, itemDraw, 1)
end
doSendMagicEffect(getCreaturePosition(self.p1.cid), CONST_ME_MAGIC_GREEN)
doSendMagicEffect(getCreaturePosition(self.p2.cid), CONST_ME_MAGIC_GREEN)
end
--\ END LIB /--
globalevents/scripts/start.lua
Caso exista, coloque:
setPesoDescriptions()
Se não:
function onStartup() setPesoDescriptions() return true end
globalevents/globalevents.xml:
<globalevent name="serverstart" type="start" event="script" value="start.lua"/>
Anexei uma imagem pra ajudar.
Configurando posições:
PESO_POS = {
["Levantamento 01"] = {
pos1 = {x=122, y=122, z=7}, -- player 1
pos2 = {x=122, y=120, z=7}, -- player 2
pos3 = {x=120, y=121, z=7, stackpos=1}, -- alavanca
pos4 = {x=121, y=122, z=7, stackpos=1}, -- peso 1
pos5 = {x=121, y=120, z=7, stackpos=1} -- peso 2
},
["Levantamento 02"] = {
pos1 = {x=122, y=122, z=7}, -- player 1
pos2 = {x=122, y=120, z=7}, -- player 2
pos3 = {x=120, y=121, z=7, stackpos=1}, -- alavanca
pos4 = {x=121, y=122, z=7, stackpos=1}, -- peso 1
pos5 = {x=121, y=120, z=7, stackpos=1} -- peso 2
},
}
Prêmios:
peso:reward(7369, 7371, 7370) -- recompensa(winner, looser, draw)
Editado Março 8 por kydrai
info
Grupo: Marquês
Registrado: 16/07/08
Posts: 1.1k
Reputação: +20
Char no Tibia: -
Olá gente,
Preciso da ajuda de algum de vocês para fazer alguns scripts de um server que vou postar aqui no Xtibia.
Primeiro:
Levantamento de peso, funcionaria assim:
Eu puxo a alavanca ai aparece uma contagem 3,2,1, JÁ! e ai os players tem 10 segundos para clicar em certo item só quem esta no tile X e Y pode clicar ou seja seriam uma pessoa contra a outra. Ai depois que acabar os 10 segundos aparece quantas vezes o player clicou. Quando acabar o gm puxa a alavanca e o jogador que ganhou ganha o item de ID .... e o jogador que perdeu ganha o item de id .... e eles são teleportados para a posição X. Se o GM puxar a alavanca antes e o jogo ainda não tiver terminado aparece para ele que o jogo ainda não terminou.
Se não entendeu posso fazer uma imagem explicando melhor.
Segundo:
Tem uma área de 15x15 tiles eu vou e puxo a alavanca e sai fogo em digamos 25% dessa área e os players que tiverem em um desses tiles será teleportado para a position X. Lembrando que toda hora que eu puxar a alavanca uma nova área será coberta por fogo, não sempre a mesma. Novamente se precisar eu explico melhor.
Terceiro:
Pagar para trainer. Funciona assim eu só posso entrar nos trainer se comprar um convite antes. E dura 10 minutos.
Só quero citar que algumas dessas idéias foram retiradas de um projeto que fiz parte faz mais o menos 1 ano atrás. E que infelizmente ele acabou então estou montando o meu próprio.
Abraços, qualquer duvida é só postar.