• 01-04.05.2026 - DOUBLE EXP / SKILL EVENT!

Poblem - Bomberman 8.5+

Status
Zamknięty.

Teksik94

Advanced User
Zarejestrowany
Dołączył
Luty 12, 2010
Posty
171
Liczba reakcji
1
Jak wiadomo istnieje skrypt mini gry Bomberman oto on:
TalkAction Bomberman - Oryginalny temat .
92953467.png

talkactions.xml
<talkaction words="z;Z" event="script" value="bomb.lua"/>
bomb.lua
Kod:
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).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

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>
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
bombtiles.lua
Kod:
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
movements.xml
Kod:
<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"/>

Problem polega na tym ?e nie wiem gdzie, co, czego i jak wrzuci? oraz gdzie co mam edytowa? .
Chodzi o takie informacje jak :
-Pozycje graczy przed gr?
-Pozycja graczy po wej?ciu do gry
-Pozycja graczy wygranych
-Pozycja graczy przegranych
-Nagroda o ile jaka? jest
-Komendy bo wystawiania bomb :p
 
Odp: Poblem - Bomberman 8.5+

Sry za duble posta ale ju? rozwi?za?em problemy wy?ej zawarte teraz mam inne :p
oto oone:
-Po rozgrywce beczki si? nie regeneruj?. (zniszczone beczki po walce nie wracaj? na swoje miejjsca)
-Konsola wypluwa :
Lua Script Error: [TalkAction Interface]
in a timer event called from:
data/talkactions/scripts/bomb.lua:onSay
data/talkactions/scripts/bomb.lua:124: attempt to call global 'doBroadcastMessage' (a nil value)
stack traceback:
[C]: in function 'doBroadcastMessage'
data/talkactions/scripts/bomb.lua:124: in function 'loopDir'
data/talkactions/scripts/bomb.lua:153: in function <data/talkactions/scripts/bomb.lua:80>
 
Odp: Poblem - Bomberman 8.5+

REFRESH!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
No co nikt nie umie tego rozwi?za??
EDIT!!!
Rozwi?zane prosz? zamkn?? :p
 
Ostatnia edycja:
Status
Zamknięty.
Back
Do góry