Ajuda a montar map ?[/sup]
talkactions.xml
<talkaction words="z;Z" event="script" value="bomb.lua"/>
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(c) and isInRange(getThingPos(c), 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(c), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 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(c) and isInRange(getThingPos(c), 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(c), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 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
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
<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.xml
<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"/>
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
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
RETIRADO DE http://otland.net/f81/bomberman-73864/
AJUDA A MONTA O MAP POR FAVOR POSTE EM BAIXO O MAP COM AS COODENADAS cerTAS