Ir para conteúdo
  • 0

2 dúvidas o.O


SmiX

Pergunta

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.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

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:

 

E4ayJ.jpg

 

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.

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

da pra usar assim tb, eu achu..


local pos = getThingPos(cid)
for i = 0, 7 do
  local posi = getPosByDir(pos, i)
  if getTileItemById(posi, 2160).uid > 0 or getTopCreature(posi).uid > 0 then                 
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "SSD")                 
  break             
  end 
end

no caso esse codigo vai checar todas as posiçoes emvolta do player... ;p

Link para o comentário
Compartilhar em outros sites

  • 0

da pra usar assim tb, eu achu..


local pos = getThingPos(cid)
for i = 0, 7 do
  local posi = getPosByDir(pos, i)
  if getTileItemById(posi, 2160).uid > 0 or getTopCreature(posi).uid > 0 then				
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "SSD")				
  break			
  end
end

no caso esse codigo vai checar todas as posiçoes emvolta do player... ;p

 

Agora usando essa função aí, faça para checar uma área quadrada 2X2 em volta do jogador.

 

Vai lá, você consegue, espertão!

 

:D

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

/\

ele n pediu isso uahuah

e alias tu sabe daonde vem essa funçao? tentei achar no arquivo luascript.cpp e n achei o.O

 

oia como o brun123 uso ela..

getPosByDir(centerPos, direction, _range)

por isso queria ver o codigo dela kk

Editado por Slicer
Link para o comentário
Compartilhar em outros sites

  • 0

local pos = getThingPos(cid)
for i = 0, 15 do
  local posi = getPosByDir(pos, i)
  if getTileItemById(posi, 2160).uid > 0 or getTopCreature(posi).uid > 0 then                 
         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "SSD")                 
         break             
  end 
end

¬¬' Sem entregar o ouro né veih

Link para o comentário
Compartilhar em outros sites

  • 0

/\

ele n pediu isso uahuah

e alias tu sabe daonde vem essa funçao? tentei achar no arquivo luascript.cpp e n achei o.O

 

oia como o brun123 uso ela..

getPosByDir(centerPos, direction, _range)

por isso queria ver o codigo dela kk

 

Ela não é uma função ambientada nas sources, ela é uma função Lua.

 

function getPositionByDirection(position, direction, size)
   local n = size or 1
   if(direction == NORTH) then
    position.y = position.y - n
   elseif(direction == SOUTH) then
    position.y = position.y + n
   elseif(direction == WEST) then
    position.x = position.x - n
   elseif(direction == EAST) then
    position.x = position.x + n
   elseif(direction == NORTHWEST) then
    position.y = position.y - n
    position.x = position.x - n
   elseif(direction == NORTHEAST) then
    position.y = position.y - n
    position.x = position.x + n
   elseif(direction == SOUTHWEST) then
    position.y = position.y + n
    position.x = position.x - n
   elseif(direction == SOUTHEAST) then
    position.y = position.y + n
    position.x = position.x + n
   end
   return position
end

Link para o comentário
Compartilhar em outros sites

  • 0

/\

hum por isso n achei, ta com o nome maior ae kk vlw.. e testei aki.. e botando size 2 fica os buracos neh kkk mas pra uma funçao mais simples soh emvolta achu q ela eh valia '--'

Link para o comentário
Compartilhar em outros sites

  • 0

Levando em consideração que a dúvida principal do tópico foi sanada;

 

Tópico movido para a seção de dúvidas e pedidos resolvidos.

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...