Preciso de um script que faz aparecer item aleatorio no mapa
[PEDIDO] Item aleatorio

up
20 horas atrás, wougoplex disse:Preciso de um script que faz aparecer item aleatorio no mapa
como assim ? do nada vai aparecer um item na posição x ?
5 minutos atrás, DuuhCarvalho disse:
como assim ? do nada vai aparecer um item na posição x ?
Sim Por Exemplo uma Arvore ela pode nascer em qualquer lugar do mapa Aleatorio Cada vez que reiniciar o server a arvore muda de lugar
1 hora atrás, DuuhCarvalho disse:
como assim ? do nada vai aparecer um item na posição x ?
Preciso Mt desse script se puder ajudar do rep+ Preciso pro meu prefession system
Antes de mais nada, vou explicar a lógica por trás do código que escrevi e sua configuração.
Tome a seguinte imagem como referência:
As posições que serão consideradas no "sorteio" estão contidas na área do quadrilátero (representado em azul). Por isso, para delimitar essa área do restante do mapa que não será considerado tomamos como pontos de referência os vértices A e B. No código que postarei a seguir, você deve colocar em fromPos as coordenadas do ponto A (ponto superior esquerdo da área), e em toPos as coordenadas do ponto B (ponto inferior direito da área).
Também optei por imprimir a posição escolhida na distro, facilitando sua busca.
data/globalevents/scripts:
local config = { itemid = xxx, --ID do item criado. edges = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda. toPos = {x = x, y = y, z = z} --Coordenadas da posição inferior direita. }}function isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return trueendfunction getRandomPos(f, t) local pos = {x = math.random(f.x, t.x), y = math.random(f.y, t.y), z = math.random(f.z, t.z)} if not isWalkable(pos, true, true, true, true) then pos = getRandomPos(f, t) end return posendfunction onStartup() local pos = getRandomPos(config.edges.fromPos, config.edges.toPos) print("Coordenadas selecionadas para o item "..getItemNameById(config.itemid)..":") print("X: "..pos.x..", Y: "..pos.y..", Z: "..pos.z) doCreateItem(config.itemid, 1, pos) return trueend
Tag:
<globalevent name="randompos" type="start" event="script" value="nome_do_arquivo.lua"/>
Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.
2 horas atrás, zipter98 disse:Antes de mais nada, vou explicar a lógica por trás do código que escrevi e sua configuração.
Tome a seguinte imagem como referência:
As posições que serão consideradas no "sorteio" estão contidas na área do quadrilátero (representado em azul). Por isso, para delimitar essa área do restante do mapa que não será considerado tomamos como pontos de referência os vértices A e B. No código que postarei a seguir, você deve colocar em fromPos as coordenadas do ponto A (ponto superior esquerdo da área), e em toPos as coordenadas do ponto B (ponto inferior direito da área).
Também optei por imprimir a posição escolhida na distro, facilitando sua busca.
data/globalevents/scripts:
local config = { itemid = xxx, --ID do item criado. edges = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda. toPos = {x = x, y = y, z = z} --Coordenadas da posição inferior direita. } } function isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function getRandomPos(f, t) local pos = {x = math.random(f.x, t.x), y = math.random(f.y, t.y), z = math.random(f.z, t.z)} if not isWalkable(pos, true, true, true, true) then pos = getRandomPos(f, t) end return pos end function onStartup() local pos = getRandomPos(config.edges.fromPos, config.edges.toPos) print("Coordenadas selecionadas para o item "..getItemNameById(config.itemid)..":") print("X: "..pos.x..", Y: "..pos.y..", Z: "..pos.z) doCreateItem(config.itemid, 1, pos) return true end
Tag:
<globalevent name="randompos" type="start" event="script" value="nome_do_arquivo.lua"/>
Vo testar rep+ por ajudar
@zipter98 Uma Coisa se n for encomodo tem como botar pra spawnar mais de 1 item no local selecionado ?
Itens diferentes em posições próximas ou em posições também sorteadas pelo código?
Seja qual for a resposta, sim, dá.
Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.
54 minutos atrás, zipter98 disse:Itens diferentes em posições próximas ou em posições também sorteadas pelo código?
Seja qual for a resposta, sim, dá.
Pode ser Sorteada pelo codigo Tipo nascer 3 item em posição diferente dentro dessa area
local config = { itemid = {xxx, xxx, xxx, ...}, --Configure nessa tabela o ID dos itens. edges = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda. toPos = {x = x, y = y, z = z} --Coordenadas da posição inferior direita. }}function isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return trueendfunction getRandomPos(f, t) local pos = {x = math.random(f.x, t.x), y = math.random(f.y, t.y), z = math.random(f.z, t.z)} if not isWalkable(pos, true, true, true, true) then pos = getRandomPos(f, t) end return posendfunction onStartup() local pos = {} for i = 1, #config.itemid do table.insert(pos, getRandomPos(config.edges.fromPos, config.edges.toPos)) end for i = 1, #pos do print("Coordenadas selecionadas para o item "..getItemNameById(config.itemid[i])..":") print("X: "..pos[i].x..", Y: "..pos[i].y..", Z: "..pos[i].z) doCreateItem(config.itemid[i], 1, pos[i]) end return trueend
Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.
Em 04/12/2016 at 01:36, zipter98 disse:Itens diferentes em posições próximas ou em posições também sorteadas pelo código?
Seja qual for a resposta, sim, dá.
Deu Erro
[Error - GlobalEvent Interface]
data/globalevents/scripts/bau.lua:onStartup
Description:
data/globalevents/scripts/bau.lua:40: attempt to get length of field 'itemid' (a number value)
stack traceback:
data/globalevents/scripts/bau.lua:40: in function <data/globalevents/scripts/bau.lua:37>
script como ta
local config = {
itemid = 15942, --ID do item criado.
edges = {
fromPos = {x = 1065, y = 998, z = 7}, --Coordenadas da posição superior esquerda.
toPos = {x = 1081, y = 1010, z = 7} --Coordenadas da posição inferior direita.
}
}
function isWalkable(pos, creature, proj, pz, water)-- by Nord
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false, true end
local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and not isCreature(tile.uid) then
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end
function getRandomPos(f, t)
local pos = {x = math.random(f.x, t.x), y = math.random(f.y, t.y), z = math.random(f.z, t.z)}
if not isWalkable(pos, true, true, true, true) then
pos = getRandomPos(f, t)
end
return pos
end
function onStartup()
local pos = {}
for i = 1, #config.itemid do
table.insert(pos, getRandomPos(config.edges.fromPos, config.edges.toPos))
end
for i = 1, #pos do
print("Coordenadas selecionadas para o item"..getItemNameById(config.itemid)..":")
print("X: "..pos.x..", Y: "..pos.y..", Z: "..pos.z)
doCreateItem(config.itemid, 1, pos)
end
return true
end
Deu erro porque você conseguiu copiar o script errado. lol
Olhe a configuração do código que postei:
local config = { itemid = {xxx, xxx, xxx, ...}, --Configure nessa tabela o ID dos itens. edges = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda. toPos = {x = x, y = y, z = z} --Coordenadas da posição inferior direita. }}
Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.