1. Não, não funcionaria.
Você precisa pensar em um algoritmo usando for para checar todas as posições ao redor do jogador, para isso, dê uma olhada na imagem abaixo:

Veja que marquei dois pontos, um na ponto superior-esquerdo que tem as coordenadas [-1; -1] e o outro no ponto inferior-direito que tem as coordenadas [1; 1] em relação a posição do jogador.
Levando em consideração que posições são tabelas que possuem três variáveis dentro - x; y; z - e que essas variáveis são valores numéricos, basta então fazer um for entre -1 e 1 somando a variável do for a posição base, que no caso, seria a posição do jogador.
Mas no caso teríamos que usar dois for indenpendentes um do outro, um para a variável x e outro para a variável y, uma vez que se usarmos apenas um for, ele iteraria entre -1, 0 e 1, somaria esses valores a posição base simultaneamente e acabaríamos verificando apenas as posições diagonais.
Logo nosso rascunho fica mais ou menos assim:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local position = getThingPosition(cid)
for x = -1, 1 do
for y = -1, 1 do
local tmp = {x = position.x + x, y = position.y + y, z = position.z}
if getTileItemById(tmp, 2160).uid > 0 or getTopCreature(tmp).uid > 0 then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "SSD")
break
end
end
end
return true
end
Por exemplo, no caso acima, fiz para verificar se tinha o item crystal coin ao redor do jogador ou uma criatura.
2. Querys são algo bem simples mesmo, vou só falar o básico delas.
Divida elas em dois tipos, alterar e obter. Ou seja uma estrutura de query serve para alterar os campos do banco de dados e a outra serve para obter algo do banco de dados.
UPDATE table SET column = value
SELECT column FROM table
Claro que fazer algo assim vai selecionar todas as linhas de uma certa coluna. É aí que entra o WHERE que serve como um filtro para o que você quer.
UPDATE table SET x = y WHERE a = b
SELECT x FROM table WHERE a = b
Você pode intercalar vários "filtros" do WHERE com AND
UPDATE table SET x = y WHERE a = b AND c = d
SELECT x FROM table WHERE a = b AND c = d
Bem simples mesmo.
Claro que tem algumas coisas extras como IN, ORDER BY, dentre outros.






info
Grupo: Conde
Registrado: 25/01/12
Posts: 963
Reputação: +265
Olá pessoal, to tentando me aprimorar em lua(e em outras linguages) e estou tentando fazer um script assim:
1 Script: Se tiver alguma coisa ao redor do player quande ele usar este item, mandar uma MSG para ele. Funcionaria desta maneira?
function onUse(cid)
for i = 1, 1 do
x = getThingPos(cid)
x = {x = x, y = x, z = x.z}
x.stackpos = 253
if getThingFromPos(x).uid > 0 then
doPlayerSendTextMessage(cid, 27, "SDD")
end
end
end
2 Script: Queria saber, bem explicadinho(se não for pedir muito), como usar as funções de db e cada um de seus parametros. tipo, quero setar tal nome do player na database, como eu faço.
Se não intenderam, imagine eu. kkk Tento explicar melhor.