Ir para conteúdo

Esportes


gkaonicx72

Posts Recomendados

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.

Link para o comentário
Compartilhar em outros sites

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)

post-24726-1268078518,7_thumb.gif

Editado por kydrai
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...