Jump to content

Preciso de ajuda neste script (sou novato)


Recommended Posts

  • Moderators
15 minutes ago, Lord Henry said:

Por isso que não entendi, pois já existe isso para fazer a verificação:


if not isElement( player ) then return end

 

Como disse, seria só no caso de um elemento não-jogador ser passado; isElement verifica se é um elemento. Ainda assim, não é algo que influencie no código, tanto faz deixar ou remover.

Uma versão melhorada/avançada desse código seria assim:

local groups = {
	{ name = "YKZ", spawnData = { 2340.81323, 553.25513, 18.75537, 90, 120 } },
	{ name = "EB", spawnData = { 205.75940, 1866.97839, 13.14063, 90, 287 } }
}
function spawn( player )
  if not player or not isElement(player) or  getElementType(player) ~= "player" then return end
	local spawned = false
     local acc = getPlayerAccount( player )
	for i=1, #groups do
		 if isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( groups[i].name ) ) then
			spawned = spawnPlayer ( player, unpack(groups[i].spawnData))
		 end
	end
	if spawned ~= true then
		spawnPlayer (player, 1177.12634, -1327.09448, 14.05530, 90, 0)
	end
	
	showChat( player, true )
	fadeCamera( player, true )
	setCameraTarget( player, player )
end

 

5 minutes ago, #Gubiani said:

Pessoal, tem algum problema se deixar o gamemode desligado, no caso o gamemode play, tive que desligar para funcionar esse script de respawn por ACL, se eu deixar o gamemode play ligado ele da respawn padrão do gamemode.

Se você roda ele no seu server e tiver sempre esse conflito, recomendo editar ele pra funcionar com esse código.

Edited by DNL291
Link to comment
4 minutes ago, DNL291 said:

Como disse, seria só no caso de um elemento não-jogador ser passado; isElement verifica se é um elemento. Ainda assim, não é algo que influencie no código, tanto faz deixar ou remover.

Uma versão melhorada/avançada desse código seria assim:


local groups = {
	{ name = "YKZ", spawnData = { 2340.81323, 553.25513, 18.75537, 90, 120 } },
	{ name = "EB", spawnData = { 205.75940, 1866.97839, 13.14063, 90, 287 } }
}
function spawn( player )
  if not player or not isElement(player) or  getElementType(player) ~= "player" then return end
	local spawned = false
     local acc = getPlayerAccount( player )
	for i=1, #groups do
		 if isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( groups[i].name ) ) then
			spawned = spawnPlayer ( player, unpack(groups[i].spawnData))
		 end
	end
	if spawned ~= true then
		spawnPlayer (player, 1177.12634, -1327.09448, 14.05530, 90, 0)
	end
	
	showChat( player, true )
	fadeCamera( player, true )
	setCameraTarget( player, player )
end

 

Se você roda ele no seu server e tiver sempre esse conflito, recomendo editar ele pra funcionar com esse código.

Me desculpe, se for pedir de mais, tem como tu deixar um comentário a cada linha, para eu entender melhor para que serve cada condição?

Link to comment
  • Other Languages Moderators

Ele criou uma variável local chamada 'spawned' que fica false toda vez que inicia a função. (quando alguém morre)
Ele vai entrar ali no For mas se o jogador que morreu for Guest, não vai entrar naquele If, dai a variável não vai se tornar verdadeira, pois o player não vai spawnar naquele instante.
Depois ele vai entrar no If da linha 14 (spawned ainda será diferente de true), e vai spawnar o jogador no spawn de Guest.

Edited by Lord Henry
Link to comment
  • Moderators
16 minutes ago, #Gubiani said:

Me desculpe, se for pedir de mais, tem como tu deixar um comentário a cada linha, para eu entender melhor para que serve cada condição?

Acho que compliquei com esse código, é mais difícil pra você entender, mas vou comentar o código sim. Um momento, espera até eu editar aqui.

 

EDIT:

local groups = {
	{ name = "YKZ", spawnData = { 2340.81323, 553.25513, 18.75537, 90, 120 } },
	{ name = "EB", spawnData = { 205.75940, 1866.97839, 13.14063, 90, 287 } }
	-- aqui é os dados dos grupos; spawnData tem todos valores da função spawnPlayer
	-- x, y, z, rotação, skin
}

function spawn( player )
	if not player or not isElement(player) or  getElementType(player) ~= "player" then return end
	-- Aqui, to fazendo uma validação pra saber se 'player' é de fato um jogador
	local spawned = false
	-- Variável 'spawned' que tem um valor booleano indicando se spawnPlayer já foi chamado
	-- ali em: spawned = spawnPlayer
	local acc = getPlayerAccount( player )
	for i=1, #groups do -- loop na tabela 'groups'
		if isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( groups[i].name ) ) then
			-- verifica se o jogador é de algum desses grupos
			spawned = spawnPlayer ( player, unpack(groups[i].spawnData))
			-- O jogador é de um dos dois grupos, então spawna ele, e define spawned = true
			-- spawnPlayer retorna true se for bem-sucedida
		end
	end

	if spawned ~= true then
		spawnPlayer (player, 1177.12634, -1327.09448, 14.05530, 90, 0)
	end
	--[[ aqui já é fora do loop, então vamos saber se o jogador já foi gerado no jogo
		 por aqui. Como disse, 'spawned' retorna true se o jogador já nasceu,
		 Mas caso retorne false, então o jogador não pertence a nenhum grupo e
		 spawna ele normalmente
	]]
	showChat( player, true )
	fadeCamera( player, true )
	setCameraTarget( player, player )
end

 

Obs: Se o jogador pertencer aos dois grupos, você vai receber um erro de 'spawnPlayer' porque vai tentar spawnar duas vezes.

Edited by DNL291
Link to comment

Ok, obrigado

Fui testar agora esse script mais avançado que o DNL criou e acabou que não funcionou, testei em todos os grupo da acl EB e a YKZ e tentei dar o /logout e buga você fica com a camera bugada infinitamente no mapa.

 

Link to comment
  • Moderators

Deve ser outra coisa... Desliguei meu GM pra testar e funciona.

EDIT

Coloca outputChatBox dentro desse código pra ver se sai msg na hora do spawn, poe por vários locais do código, se não mostrar nada só pode ser com o resource/script.

Também já testei com esses grupos no servidor, e deu spawn nos locais de cada grupo.

Edited by DNL291
Link to comment

Vou dar uma verificada aqui, do que possa ser.

Será que não está faltando o:

addEventHandler( "onPlayerJoin", root,
  function( )
    spawnPlayer( player )
end)
     
addEventHandler( "onPlayerWasted", root,
  function( )
     setTimer( spawn, 3000, 1, player )
end)

 

Edited by #Gubiani
Link to comment
local groups = {
	{ name = "YKZ", spawnData = { 2340.81323, 553.25513, 18.75537, 90, 120 } },
	{ name = "EB", spawnData = { 205.75940, 1866.97839, 13.14063, 90, 287 } }
	-- aqui é os dados dos grupos; spawnData tem todos valores da função spawnPlayer
	-- x, y, z, rotação, skin
}

function spawn( player )
	if not player or not isElement(player) or  getElementType(player) ~= "player" then return end
	-- Aqui, to fazendo uma validação pra saber se 'player' é de fato um jogador
	local spawned = false
	-- Variável 'spawned' que tem um valor booleano indicando se spawnPlayer já foi chamado
	-- ali em: spawned = spawnPlayer
	local acc = getPlayerAccount( player )
	for i=1, #groups do -- loop na tabela 'groups'
		if isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( groups[i].name ) ) then
			outputChatBox("Você foi teleportado", player, 255, 255, 255, true)
			-- verifica se o jogador é de algum desses grupos
			spawned = spawnPlayer ( player, unpack(groups[i].spawnData))
			-- O jogador é de um dos dois grupos, então spawna ele, e define spawned = true
			-- spawnPlayer retorna true se for bem-sucedida
		end
	end

	if spawned ~= true then
		spawnPlayer (player, 1177.12634, -1327.09448, 14.05530, 90, 0)
	end
	--[[ aqui já é fora do loop, então vamos saber se o jogador já foi gerado no jogo
		 por aqui. Como disse, 'spawned' retorna true se o jogador já nasceu,
		 Mas caso retorne false, então o jogador não pertence a nenhum grupo e
		 spawna ele normalmente
	]]
	showChat( player, true )
	fadeCamera( player, true )
	setCameraTarget( player, player )
end

addEventHandler( "onPlayerJoin", root,
  function( )
    spawn(player)
end)
     
addEventHandler( "onPlayerWasted", root,
  function( )
     setTimer( spawn, 3000, 1, player )
end)

Não funcionou, nem apareceu a mensagem do outputChatBox.

Link to comment
  • Moderators

Troca player por source:

addEventHandler( "onPlayerJoin", root,
  function( )
    spawn(source)
end)
     
addEventHandler( "onPlayerWasted", root,
  function( )
     setTimer( spawn, 3000, 1, source )
end)

 

Link to comment

Nossa cara que estranho... Mesmo assim não funcionou.

 

 

 

 

Esse aqui esta funcionando:

addEventHandler( "onResourceStart", resourceRoot,
  function()
      resetMapInfo()
       for _,player in ipairs( getElementsByType 'player' ) do
        spawn( player )
      end
   end
)
     
function spawn( player )
  if not isElement( player ) then return end
     showChat( player, true )
     local acc = getPlayerAccount( player )
         if acc then
      	
      	 if isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( "YKZ" ) ) then
            spawnPlayer ( player, 2340.81323, 553.25513, 18.75537, 90, 120)

         elseif isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( "EB" ) ) then
            spawnPlayer ( player, 205.75940, 1866.97839, 13.14063, 90, 287)

         elseif isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( "Everyone" ) ) then
            spawnPlayer ( player, 1177.12634, -1327.09448, 14.05530, 90, 0)

         elseif isGuestAccount (getPlayerAccount (player)) then
	        spawnPlayer (player, 1177.12634, -1327.09448, 14.05530, 90, 0)
       end
     
     end
      fadeCamera( player, true )
      setCameraTarget( player, player )
end
     
addEventHandler( "onPlayerJoin", root,
  function( )
    spawn( source )
end)
     
addEventHandler( "onPlayerWasted", root,
  function( )
     setTimer( spawn, 3000, 1, source )
end)
 

 

Edited by #Gubiani
Link to comment
  • Moderators

Bom, até agora todas formas que testei está funcionando ;/

Tenta isto:


local groups = {
	{ name = "YKZ", spawnData = { 2340.81323, 553.25513, 18.75537, 90, 120 } },
	{ name = "EB", spawnData = { 205.75940, 1866.97839, 13.14063, 90, 287 } }
}

function spawn( player )
	if not player or not isElement(player) or  getElementType(player) ~= "player" then return end
	
	local spawned = false
	local acc = getPlayerAccount( player )
	for i=1, #groups do
		if isObjectInACLGroup ( "user.".. getAccountName( acc ), aclGetGroup ( groups[i].name ) ) then
			spawned = spawnPlayer ( player, unpack(groups[i].spawnData))
		end
	end

	if spawned ~= true then
		spawnPlayer (player, 1177.12634, -1327.09448, 14.05530, 90, 0)
	end
	showChat( player, true )
	fadeCamera( player, true )
	setCameraTarget( player, player )
end

addEventHandler( "onResourceStart", resourceRoot,
  function()
      resetMapInfo()
       for _,player in ipairs( getElementsByType 'player' ) do
        spawn( player )
      end
   end
)

addEventHandler( "onPlayerJoin", root,
  function( )
	spawn(source)
    --setTimer(spawn, 1500, 1, source)
end)
     
addEventHandler( "onPlayerWasted", root,
  function( )
     setTimer( spawn, 3000, 1, source )
end)

Tô usando esse código.

 

EDIT: Problema resolvido por privado.

Edited by DNL291
Link to comment
  • 2 years later...
On 10/05/2017 at 12:39, Lord Henry said:

@Pedro861, ele quer setar a skin somente em quem usar o comando /skin, no caso ele mesmo. Desse jeito que vc colocou vai setar a skin em todo mundo que for Admin.
Do jeito que o @DNL291 fez é o correto, se o jogador que usar o comando não for do EB, mostra a mensagem de erro em vermelho. Caso contrario, seta a skin nele.
Outro jeito de fazer, que no fim das contas é a mesma coisa, pode ser assim:


function darSkin (thePlayer)
	local nomeAcc = getAccountName (getPlayerAccount (thePlayer)) --Variável 'nomeAcc' recebe a conta de quem executou o comando. (no caso, a sua conta)
	if isObjectInACLGroup ("user."..nomeAcc, aclGetGroup("EB")) then --Se o jogador que executou o comando estiver na ACL "EB", faz o seguinte:
		setElementModel (thePlayer, 287) --Coloca skin 287 nele.
	else --Se não estiver na ACL "EB", faz o seguinte:
		outputChatBox ("Somente membros do #00BB00Exercito Brasileiro#FF0000 podem pegar a skin!", thePlayer, 255, 0, 0, true) --Manda isso em vermelho, onde "Exército Brasileiro" fica em verde e o resto vermelho. Manda isso somente para quem executou o comando.
	end --Finaliza o If e o Else.
end --Finaliza a função darSkin.
addCommandHandler ("skin", darSkin) --Executa essa função quando alguém usa o comando /skin.

Qualquer dúvida, volte a perguntar.
Boa sorte.

Como posso fazer para ao invès de ser addCommandHandler eu colocar um pickup por acl?

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...