Ir para conteúdo

Bomberman Evento (Explicação)(Detalhes).


julhinhuu

Posts Recomendados

Boa noite Xtibianos meu amores e paixões de minha vida, tudo bem com vocês? Espero que sim :)

 

Hoje o que eu gostaria e que alguém me explicasse este script, as posições e o que tiver para explicar, alguns até sei mais outros é complicados.

 

Só queria que me explicassem isso mesmo.

 

Agradeço a todos que me ajudarem :D

 

 

talkactions.xml

<talkaction words="z;Z" event="script" value="bomb.lua"/>

 

talkactions/scripts crie bomb.lua

function getPlayersInRange(position, radiusx, radiusy)
local creaturesList = {}
for x = -radiusx, radiusx do
for y = -radiusy, radiusy do
if not (x == 0 and y == 0) then
local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
if creature.type == 1 then
table.insert(creaturesList, creature.uid)
end
end
end
end

local creature = getTopCreature(position)
if creature.type == 1 then
if not(table.find(creaturesList, creature.uid)) then
table.insert(creaturesList, creature.uid)
end
end
return creaturesList
end

function isPositionInArray(haystack, needle)
for i = 1, #haystack do
if haystack[i].x == needle.x and haystack[i].y == needle.y and haystack[i].z == needle.z then
return true
end
end
return false
end

local t = {
from = {x=490, y=495, z=9},
to = {x=504, y=505, z=9},
storage = {
placed = 10001,
max = 10002,
radius = 10003
},
delay = 3000,
bombID = 10570,
effect = CONST_ME_FIREAREA,
blockID = 9468,
text = "BOOM!",
temple = {x=498, y=541, z=9},
exceptions = {
{x=490, y=495, z=9},
{x=491, y=495, z=9},
{x=490, y=496, z=9},

{x=503, y=495, z=9},
{x=504, y=495, z=9},
{x=504, y=496, z=9},

{x=490, y=505, z=9},
{x=491, y=505, z=9},
{x=490, y=504, z=9},

{x=503, y=505, z=9},
{x=504, y=505, z=9},
{x=504, y=504, z=9}
}
}
function reset()
local dummy = doCreateItem(10570, 1, {x=486,y=498,z=9})
for x = t.from.x, t.to.x do
for y = t.from.y, t.to.y do
local pos = {x=x,y=y,z=t.from.z}
local i1, i2, i3 = getTileItemById(pos, 8304).uid, getTileItemById(pos, 8306).uid, getTileItemById(pos, 8310).uid
if i1 > 0 then
doRemoveItem(i1)
end
if i2 > 0 then
doRemoveItem(i2)
end
if i3 > 0 then
doRemoveItem(i3)
end
if queryTileAddThing(dummy, pos, 4) == RETURNVALUE_NOERROR and not isPositionInArray(t.exceptions, pos) then
doCreateItem(t.blockID, 1, pos)
end
end
end
doRemoveItem(dummy)
end

local function boom(pos, cid)
local v = getTileItemById(pos, t.bombID).uid
if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then
setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) - 1)
doCreatureSay(cid, t.text, TALKTYPE_ORANGE_2, false, nil, pos)
doSendMagicEffect(pos, t.effect)
local c = getTopCreature(pos).uid
if isPlayer© and isInRange(getThingPos©, t.from, t.to) then
doSendMagicEffect(pos, CONST_ME_GIFT_WRAPS)
doTeleportThing(c, t.temple)
doSendMagicEffect(t.temple, CONST_ME_MORTAREA)
local n1, n2 = getPlayerName©, getPlayerName(cid)
doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex© == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING)
local a = getPlayersInRange({x=497, y=500, z=9}, 7, 5)
if #a < 2 then
doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING)
doPlayerAddLevel(a[1], 1)
doTeleportThing(a[1], t.temple)
doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED)
reset()
reset()
end
else
local b = getTileItemById(pos, t.blockID).uid
if b > 0 then
doSendMagicEffect(pos, CONST_ME_BLOCKHIT)
doRemoveItem(b)
local r = math.random(10)
if r < 4 then
doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos)
end
end
end
local N, E, W, S, l = 1, 1, 1, 1, getPlayerStorageValue(cid, t.storage.radius)
function loopDir(dir)
local _pos = {x=pos.x+(dir=="E" and E or dir=="W" and -W or 0), y=pos.y+(dir=="N" and -N or dir=="S" and S or 0), z=pos.z}
if queryTileAddThing(v, _pos, 4) == RETURNVALUE_NOERROR or getTileItemById(_pos, t.blockID).uid > 0 then
doSendMagicEffect(_pos, t.effect)
local c = getTopCreature(_pos).uid
if isPlayer© and isInRange(getThingPos©, t.from, t.to) then
doSendMagicEffect(_pos, CONST_ME_GIFT_WRAPS)
doTeleportThing(c, t.temple)
doSendMagicEffect(t.temple, CONST_ME_MORTAREA)
local n1, n2 = getPlayerName©, getPlayerName(cid)
doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex© == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING)
local a = getPlayersInRange({x=497, y=500, z=9}, 7, 5)
if #a < 2 then
doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING)
doPlayerAddLevel(a[1], 1)
doTeleportThing(a[1], t.temple)
doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED)
reset()
reset()
return "endgame"
end
else
local b = getTileItemById(_pos, t.blockID).uid
if b > 0 then
doSendMagicEffect(_pos, CONST_ME_BLOCKHIT)
doRemoveItem(b)
local r = math.random(10)
if r < 4 then
doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos)
end
return false
end
end
elseif queryTileAddThing(v, _pos, 4) == 3 then
return false
end
return true
end
while N <= l do
local q = loopDir("N")
if q == "endgame" then
return doRemoveItem(v, 1)
elseif not q then
break
else
N = N + 1
end
end
while E <= l do
local q = loopDir("E")
if q == "endgame" then
return doRemoveItem(v, 1)
elseif not q then
break
else
E = E + 1
end
end
while W <= l do
local q = loopDir("W")
if q == "endgame" then
return doRemoveItem(v, 1)
elseif not q then
break
else
W = W + 1
end
end
while S <= l do
local q = loopDir("S")
if q == "endgame" then
return doRemoveItem(v, 1)
elseif not q then
break
else
S = S + 1
end
end
end
doRemoveItem(v, 1)
end
function onSay(cid, words, param, channel)
if isInRange(getThingPos(cid), t.from, t.to) then
setPlayerStorageValue(cid, t.storage.placed, math.max(getPlayerStorageValue(cid, t.storage.placed), 0))
setPlayerStorageValue(cid, t.storage.max, math.max(getPlayerStorageValue(cid, t.storage.max), 1))
setPlayerStorageValue(cid, t.storage.radius, math.max(getPlayerStorageValue(cid, t.storage.radius), 1))
if getPlayerStorageValue(cid, t.storage.placed) < getPlayerStorageValue(cid, t.storage.max) then
doCreateItem(t.bombID, 1, getThingPos(cid))
addEvent(boom, t.delay, getThingPos(cid), cid)
setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) + 1)
end
return true
end
end

 

talkactions/scripts crie lever.lua

function getPlayersInRange(position, radiusx, radiusy)
local creaturesList = {}
for x = -radiusx, radiusx do
for y = -radiusy, radiusy do
if not (x == 0 and y == 0) then
local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
if creature.type == 1 then
table.insert(creaturesList, creature.uid)
end
end
end
end

local creature = getTopCreature(position)
if creature.type == 1 then
if not(table.find(creaturesList, creature.uid)) then
table.insert(creaturesList, creature.uid)
end
end
return creaturesList
end

local t, n, storage = {
{x=496, y=537, z=9},
{x=497, y=537, z=9},
{x=498, y=537, z=9},
{x=499, y=537, z=9}
}, {
{x=490, y=495, z=9},
{x=504, y=505, z=9},
{x=504, y=495, z=9},
{x=490, y=505, z=9}
}, {
placed = 10001,
max = 10002,
radius = 10003
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.itemid == 1946 then
return doTransformItem(item.uid, item.itemid - 1)
end

local v = getPlayersInRange({x=497, y=500, z=9}, 7, 5)
if #v > 0 then
return doPlayerSendCancel(cid, "Please wait for the current match to end.")
end

local players = {}
for i = 1, #t do
local v = getTopCreature(t[i]).uid
players[i] = isPlayer(v) and v or nil
end

if #players < 2 then
return doPlayerSendCancel(cid, "You need at least 2 players to enter.")
end

local first = players[1] and 1 or players[2] and 2 or players[3] and 3 or players[4] and 4
for i = 1, 4 do
if players[i] then
setPlayerStorageValue(players[i], storage.placed, 0)
setPlayerStorageValue(players[i], storage.max, 1)
setPlayerStorageValue(players[i], storage.radius, 1)
doSendMagicEffect(t[i], CONST_ME_TELEPORT)
doTeleportThing(players[i], n[i])
doSendMagicEffect(n[i], CONST_ME_TELEPORT)
end
end

doTransformItem(item.uid, item.itemid + 1)
return true
end

 

 

items.xml modifique os items listados abaixo do jeito que estão:

<item id="2195" name="boots of haste">
<attribute key="weight" value="750" />
<attribute key="slotType" value="feet" />
<attribute key="speed" value="40" />
<attribute key="showattributes" value="1" />
<attribute key="showduration" value="1" />
<attribute key="decayTo" value="0" />
<attribute key="duration" value="30" />
</item>
...
<item id="8304" name="eternal flames">
<attribute key="moveable" value="0" />
</item>
...
<item id="8306" name="pure energy">
<attribute key="moveable" value="0" />
</item>
...
<item id="8310" name="neutral matter">
<attribute key="moveable" value="0" />
</item>
...
<item id="10570" article="a" name="war crystal">
<attribute key="moveable" value="0" />
</item>

 

movements/scripts crie powerups.lua:

local t = {
from = {x=490, y=495, z=9},
to = {x=504, y=505, z=9},
storage = {
max = 10002,
radius = 10003
}
}
function onStepIn(cid, item, pos, fromPos)
if isInRange(pos, t.from, t.to) then
if item.itemid == 8304 then
local n = getPlayerStorageValue(cid, t.storage.max)
if n < 3 then
setPlayerStorageValue(cid, t.storage.max, n + 1)
doRemoveItem(item.uid)
doSendMagicEffect(pos, CONST_ME_FIREATTACK)
end
elseif item.itemid == 8306 then
local n = getPlayerSlotItem(cid, CONST_SLOT_FEET)
if n.itemid ~= 2195 then
doPlayerAddItem(cid, 2050, 1)
doPlayerAddItem(cid, 2050, 1)
doPlayerAddItem(cid, 2050, 1)
doDecayItem(doPlayerAddItem(cid, 2195, 1))
doPlayerRemoveItem(cid, 2050, 1)
doPlayerRemoveItem(cid, 2050, 1)
doPlayerRemoveItem(cid, 2050, 1)
doRemoveItem(item.uid)
doSendMagicEffect(pos, CONST_ME_ENERGYHIT)
end
elseif item.itemid == 8310 then
local n = getPlayerStorageValue(cid, t.storage.radius)
if n < 4 then
setPlayerStorageValue(cid, t.storage.radius, n + 1)
doRemoveItem(item.uid)
doSendMagicEffect(pos, CONST_ME_GROUNDSHAKER)
end
end
end
end

 

Crie outro arquivo bombtiles.lua

function onStepIn(cid, item, pos, fromPos)
if math.abs(pos.x - fromPos.x) == math.abs(pos.y - fromPos.y) then
if item.actionid == 100 then
doItemSetAttribute(item.uid, "aid", 0)
else
doItemSetAttribute(getTileItemById(fromPos, 10764).uid, "aid", 100)
doTeleportThing(cid, fromPos, false)
end
end
end

function onAddItem(moveItem, tileItem, position, cid)
if not isInArray({8304, 8306, 8310, 9468, 10570}, moveItem.itemid) then
doRemoveItem(moveItem.uid)
end
end

 

Em movements.xml coloque:

<movevent type="StepIn" itemid="10764" event="script" value="bombtiles.lua"/>
<movevent type="AddItem" itemid="10764" tileitem="1" event="script" value="bombtiles.lua"/>
<movevent type="StepIn" itemid="8304" event="script" value="powerups.lua"/>
<movevent type="StepIn" itemid="8306" event="script" value="powerups.lua"/>
<movevent type="StepIn" itemid="8310" event="script" value="powerups.lua"/>

 


UP


Up
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...