Ir para conteúdo
  • 0

Explicando Sistema De Bomberman


MonsterOt

Pergunta

entao eu queria uma explicação de como editar esse script:

 

esse é o topico que postaram e nao explicaram..

 

http://www.xtibia.co...__fromsearch__1

 

 

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=1307, y=1044, z=7},

{x=1307, y=1045, z=7},

{x=1307, y=1046, z=7},

{x=1307, y=1047, z=7}

}, { -- isso eu ja sei q é o lugar do player antes e depois q entrar no lugar do evento

{x=1300, y=1031, z=7},

{x=1314, y=1031, z=7},

{x=1300, y=1041, z=7},

{x=1314, y=1041, z=7}

}, {

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=1031, y=1020, z=7}, 7, 5) -- ´para que serve isso

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).uid

players = 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 then

setPlayerStorageValue(players, storage.placed, 0)

setPlayerStorageValue(players, storage.max, 1)

setPlayerStorageValue(players, storage.radius, 1)

doSendMagicEffect(t, CONST_ME_TELEPORT)

doTeleportThing(players, n)

doSendMagicEffect(n, CONST_ME_TELEPORT)

end

end

 

doTransformItem(item.uid, item.itemid + 1)

return true

end

 

 

 

agora essa é a talkactions do sistema da bomba

 

 

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.x == needle.x and haystack.y == needle.y and haystack.z == needle.z then

return true

end

end

return false

end

 

local t = {

from = {x=1300, y=1031, z=7},

to = {x=1314, y=1041, z=7}, -- esse é a area aonde vai ocorrer o evento

storage = {

placed = 10001,

max = 10002,

radius = 10003

},

delay = 3000,

bombID = 10570,

effect = CONST_ME_FIREAREA,

blockID = 9421,

text = "BOOM!",

temple = {x=1033, y=1015, z=7}, -- templo

exceptions = {

{x=1300, y=1031, z=7},

{x=1301, y=1031, z=7},

{x=1300, y=1032, z=7},

 

{x=1300, y=1041, z=7},

{x=1301, y=1041, z=7}, -- para que serve tudo isso?

{x=1300, y=1040, z=7},

 

{x=1314, y=1031, z=7},

{x=1013, y=1031, z=7},

{x=1014, y=1032, z=7},

 

{x=1314, y=1041, z=7},

{x=1313, y=1041, z=7},

{x=1314, y=1040, z=7}

}

}

function reset()

local dummy = doCreateItem(10570, 1, {x=1295,y=1034,z=7}) -- pra que serve isso?

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 .. " in bomberman!", MESSAGE_STATUS_WARNING)

local a = getPlayersInRange({x=32022, y=32353, z=7}, 7, 5) -- para que serve isso?

if #a < 2 then

doBroadcastMessage(getPlayerName(a[1]) .. " has won the bomberman match!", MESSAGE_STATUS_WARNING)

doPlayerAddExperience(a[1], 15000)

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 in bomberman!" or n1 .. " was killed by " .. n2 .. " in bomberman!", MESSAGE_STATUS_WARNING)

local a = getPlayersInRange({x=32022, y=32353, z=7}, 7, 5) -- para que serve isso

if #a < 2 then

doBroadcastMessage(getPlayerName(a[1]) .. " has won the bomberman match!", MESSAGE_STATUS_WARNING)

doPlayerAddExperience(a[1], 15000)

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

 

 

Muita gente tava querendo saber como funciona...

 

e eu tb! alguem ai sabe ? vlw!

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

4 respostass a esta questão

Posts Recomendados

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