Ir para conteúdo
  • 0

Checar o player que tem a seguinte storage


tonynamoral

Pergunta

Olá galera , eu gostaria de saber como eu checo o player que tem a uma certa storage

 

exemplo de uma funçao --que nao existe-- , só para entender um pouco mais sobre o script

 

name = if getGlobalStorageValue(cid,10101) -- Isso irá checar um unico player que está com essa storage.

 

doCreatureExecuteTalkAction(cid,"/goto "..name.."") -- Isso irá dar goto , no player que estiver com essa storage

 

-----------------------------

 

Agora irei explicar, o player irá clicar num item , esse item irá checar uma storage no servidor , o player que estiver com ela , o player1 que foi qem clico no item , irá ser teleportado para cima do player2 , que no caso e quem está com a storage.

 

Se poderem ajudar :)

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

14 respostass a esta questão

Posts Recomendados

  • 0

algu +/- assim?

local storage = 9988
for _, player in pairs(getPlayersOnline()) do
if getPlayerStorageValue(player, storage) >= 1 then
   doTeleportThing(cid, getPlayerPosition(player))
   doSendMagicEffect(getPlayerPosition(cid), 21)
   break
end
end

isso va checar todos os players online.. e vai teleportar o player1 para onde o player2 estiver..

 

ps: esse teu 'codigo' ae ta completamente errado.. ;x

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

  • 0

@Slicer.

Também da para fazer while.

Só que vai consumir mais linhas

 

k = 0
player = getPlayersOnline()
storage = 2123
setPlayerStorageValue(cid, 2123, 1)
while k < #player do
k = k+1
if getPlayerStorageValue(player[k],  storage) >= 1 then
doTeleportThing(cid, getPlayerPosition(player[k]))	  
 doSendMagicEffect(getPlayerPosition(cid), 21)
break
end
end
return true
end

 

Enfim

Cada um com sua preferencia

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

  • 0

Funciono , REP+ slincer . mais agora é o seguinte , o player1 , vai clicar em 1 item e vai ganhar 1 storage.

o player2 , vai abrir a aba de channels e vai abrir um canal , e por acaso se ele digitar ,

 

player2 > all

 

Irá aparecer uma "doShowTextDialog(cid,item,text)" . no lugar do text, irá aparecer todos os players que irá ter essa storage, e em sequencia por numero . exemplo :

 

1 : Magnum

2 : Tiago Campos

3 : Tony

4 : Slincer

 

------------------------------

Por acaso o carinha digitar > show 1

o player será teleportado para o player (magnum)

, ou por acaso digitar > show 2 , o player será teleportado para o (tiago campos)...

e se ele digitar , > leave

fecha o channel.

Link para o comentário
Compartilhar em outros sites

  • 0

1* eh tao dificil escrever Slicer? o.O

2* dai isso ja usa algumas funçoes de channel q eu n intendo muito bem.. ;/

-mas soh por curiosidade.. essa ordem ae q tu flo.. eh o valor da storage? por exemplo..

o magnum tem a storage com valor 1, o tiago com valor 2 e assim por diante?-

 

@caotic

eh daria.. mas sei la.. o for eh tao bunitinhu *---* e como tu flo.. consome bem menas linhas ^^

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

  • 0

1* eh tao dificil escrever Slicer? o.O

2* dai isso ja usa algumas funçoes de channel q eu n intendo muito bem.. ;/

-mas soh por curiosidade.. essa ordem ae q tu flo.. eh o valor da storage? por exemplo..

o magnum tem a storage com valor 1, o tiago com valor 2 e assim por diante?-

 

@caotic

eh daria.. mas sei la.. o for eh tao bunitinhu *---* e como tu flo.. consome bem menas linhas ^^

 

While é um POUCO mais pesado também. É mais aconselhável usar for no lugar de While/Repeat

Link para o comentário
Compartilhar em outros sites

  • 0

1. O item que dará a storage ao jogador A

 

local storage = 47454

function onUse(cid, item, fromPosition, itemEx, toPosition)
local result = getCreatureStorage(cid, storage)
if result == 1 then
	return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
return doCreatureSetStorage(cid, storage, 1)
end

 

2. A talkaction que executada em um certo canal, mostra a lista e teleporta para tal jogador.

 

local config = {
storage = 47454
}

function getPlayersByStorage(storage)
local ret = {}
for _, pid in ipairs(getPlayersOnline()) do
	if getCreatureStorage(pid, storage) == 1 then
		table.insert(ret, getCreatureName(pid))
	end
end
table.sort(ret, function(a, b) return string.byte(string.sub(a, 0, 1)) < string.byte(string.sub(b, 0, 1)) end)
return ret
end

function onSay(cid, words, param, channel)
if param == "" then
	return doPlayerSendCancel(cid, words .." [all] or [player number]")
end

if param == "all" then
	local msg = ""

	for n = 1, #getPlayersByStorage(config.storage) do
		local name = ret[n]
		msg = msg .. n ..". ".. name .."\n"
	end

	doShowTextDialog(cid, 1960, msg)
elseif tonumber(param) then
	local key = tonumber(param)

	local pid = getPlayerByNameWildcard(getPlayersByStorage(config.storage)[key])
	if not pid then
		return doPlayerSendDefautCancel(cid, RETURNVALUE_NOTPOSSIBLE)
	end

	doTeleportThing(cid, getThingPosition(pid))
end
return true
end

 

É aconselhável fazer isso na hora de colocar no talkactions.xml

 

<talkaction words="/show" channel="9" event="script" value="arquivo.lua"/>

 

Assim a talkaction só poderá ser executada no channel de ID 9, por exemplo.

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

  • 0

@Oneshot ,

 

deu um errorzinho , quando o carinha tiver com a storage , ai quando ele tenta executar algum comando /show all . dá o seguinte error :

 

 

[17/12/2012 12:01:35] [Error - TalkAction Interface]

[17/12/2012 12:01:35] data/talkactions/scripts/arton-cast.lua:onSay

[17/12/2012 12:01:35] Description:

[17/12/2012 12:01:35] data/talkactions/scripts/arton-cast.lua:25: attempt to index global 'ret' (a nil value)

[17/12/2012 12:01:35] stack traceback:

[17/12/2012 12:01:35] data/talkactions/scripts/arton-cast.lua:25: in function <data/talkactions/scripts/arton-cast.lua:16>

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...