Como poner Bomberman system 100% explicado. by: [Brakmars]

Ir abajo

Como poner Bomberman system 100% explicado. by: [Brakmars]

Mensaje por Brakmars el 2/3/2013, 06:52

Me di cuenta que todos los bomberman que salen posteados no se explican
asi que decidi ayudarlos a ponerlo en su ot.

En este post dejo un
link con los archivos.lua listos, tambien puse un mapa e instrucciones.
Todo
esta completamente explicado al 100% incluso con imagenes.

Para
ponerlo en su ot deben borrar todo lo que salga asi ( ---aqui es la
explicacion )

espero agradescan con (no creo que se pueda dar +rep xDD) por el el esfuerzo que
ise al explicar hasta con imagenes

Link de descarga de mapa +
instrucciones y archivos
esta en megaupload
Archivos

scan
scan


Imagenes de
explicacion

ZONA DE JUEGO
https://redcdn.net/ihimg/photo/my-images/195/zonajuego.jpg/

TEMPLE
https://redcdn.net/ihimg/photo/my-images/19/templez.jpg/

Bueno empesamos

van a data/talkactions/scripts copian un archivo y
le ponen bomb.lua
Spoiler:
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},
--- izquierda arriba de la zona de juego
to = {x=504, y=505, z=9},
---- derecha abajo de la zona de juego
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}, --- aqui aparecen
cuando pierden
exceptions = {
{x=490, y=495, z=9}, ---
izquierda arriba de la zona de juego
{x=491, y=495, z=9}, --- zona
vacia 1 >
{x=490, y=496, z=9}, --- zona vacia 2 v


{x=503, y=495, z=9}, --- derecha arriba de la zona de juego

{x=504, y=495, z=9}, --- zona vacia 3 *
{x=504, y=496, z=9}, ---
zona vacia 4 v

{x=490, y=505, z=9}, --- izquierda abajo de la
zona de juego
{x=491, y=505, z=9}, --- zona vacia 5 >

{x=490, y=504, z=9}, --- zona vacia 6 ^

{x=503, y=505, z=9},
--- derecha abajo de la zona de juego
{x=504, y=505, z=9}, ---
zona vacia 7 *
{x=504, y=504, z=9} --- zona vacia 8 ^
}
}
function
reset()
local dummy = doCreateItem(10570, 1, {x=486,y=498,z=9}) ---
esta zona de aqui
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![Bomberman]" or n1 .. " was killed by " ..
n2 .. "![Bomberman]", MESSAGE_STATUS_WARNING)
local a =
getPlayersInRange({x=497, y=500, z=9}, 7, 5) --- CENTRO ZONA DE JUEGO
if #a < 2 then
doBroadcastMessage(getPlayerName(a[1]) .. "
has won the match![Bomberman]", MESSAGE_STATUS_WARNING)

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![Bomberman]" or n1 .. " was killed by " ..
n2 .. "![Bomberman]", MESSAGE_STATUS_WARNING)
local a =
getPlayersInRange({x=497, y=500, z=9}, 7, 5) --- CENTRO ZONA DE JUEGO
if #a < 2 then
doBroadcastMessage(getPlayerName(a[1])
.. " has won the match![Bomberman]", MESSAGE_STATUS_WARNING)

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

Luego van a data/actions/scripts copian un archivo y le ponen lever.lua

Spoiler:
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}, --- pos 1
{x=497, y=537, z=9},
--- pos 2
{x=498, y=537, z=9}, --- pos 3
{x=499, y=537, z=9}
--- pos 4
}, {
{x=490, y=495, z=9}, --- donde te lleva la pos 1
(es la esquina izquierda de arriba de la zona de juego)
{x=504,
y=505, z=9}, --- donde te lleva la pos 2 (es la equina derecha de abajo
de la zona de juego)
{x=504, y=495, z=9}, --- donde te lleva la pos 3
(es la esquina derecha de arriba de la zona de juego)
{x=490,
y=505, z=9} --- donde te lleva la pos 4 (es la esquina izquierda de
abajo de la zona de juego)
}, {
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) --- CENTRO DE LA ZONA DE
JUEGO
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])
doPlayerSendTextMessage(cid, 25,
'Say Z to put a bomb.')
doSendMagicEffect(n[i],
CONST_ME_TELEPORT)
end
end

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

Despues van a data/movements/scripts y copian un archivo y le ponen
bombstep.lua

Spoiler:
function onStepIn(cid, item, position, fromPosition)
if
(getPlayerLevel(cid) >= 1) then
doTeleportThing(cid,
fromPosition, FALSE)
doPlayerSendCancel(cid, "Sorry, You can not
step a bomb")
end
return true
end

data/movements/scripts y copian un archivo y le ponen bombtiles.lua

Spoiler:
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

data/movements/scripts y copian un archivo y le ponen powerups.lua

Spoiler:
local speed1 = createConditionObject(CONDITION_HASTE)
setConditionParam(speed1,
CONDITION_PARAM_TICKS, 10*1000)
setConditionParam(speed1,
CONDITION_PARAM_SPEED, 1100)


local t = {
from = {x=490,
y=495, z=9}, --- esquina izquierda de arriba de la zona de juego
to =
{x=504, y=505, z=9}, --- esquina derecha de abajo de la zona de juego
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
getPlayerLevel(cid) >=1 then
doAddCondition(cid, speed1)

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

Despues que terminan con eso van a data/items/items.xml y modifican esto

Spoiler:
...



...



...



...



att: by:Brakmars
avatar
Brakmars
Principiante
Principiante

Cantidad de envíos : 5
Fecha de inscripción : 02/03/2013

Ver perfil de usuario

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.