DNL291 Posted May 13, 2017 Share Posted May 13, 2017 (edited) 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 May 13, 2017 by DNL291 Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 Funciona para os players guest e everyone? Link to comment
Other Languages Moderators Lord Henry Posted May 13, 2017 Other Languages Moderators Share Posted May 13, 2017 1 minute ago, #Gubiani said: Funciona para os players guest e everyone? Funciona. Está ali na linha 15. 1 Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 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 Lord Henry Posted May 13, 2017 Other Languages Moderators Share Posted May 13, 2017 (edited) 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 May 13, 2017 by Lord Henry Link to comment
DNL291 Posted May 13, 2017 Share Posted May 13, 2017 (edited) 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 May 13, 2017 by DNL291 Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 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
DNL291 Posted May 13, 2017 Share Posted May 13, 2017 Mostra algum erro no debug? Digite o comando debugscript 3, vê se tem algum erro com esse código. Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 Ok vou abrir no servidor local novamente ja te digo. Como eu vejo se há algum erro no debug? ja dei /debugscript 3 só mostra que foi setado para o modo "3" E não aparece mais nada. Link to comment
DNL291 Posted May 13, 2017 Share Posted May 13, 2017 Eu testei aqui e não mostrou erro também. Mostrou na verdade com a função aclGetGroup porque eu não criei esses grupos no server. Mas o script funcionou normal. Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 Será que é por causa do gamemode desligado? Link to comment
DNL291 Posted May 13, 2017 Share Posted May 13, 2017 (edited) 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 May 13, 2017 by DNL291 Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 (edited) 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 May 13, 2017 by #Gubiani Link to comment
DNL291 Posted May 13, 2017 Share Posted May 13, 2017 Troca spawnPlayer( player ) por spawn(player) e testa. Faz também o que eu disse ali em cima. Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 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
DNL291 Posted May 13, 2017 Share Posted May 13, 2017 Troca player por source: addEventHandler( "onPlayerJoin", root, function( ) spawn(source) end) addEventHandler( "onPlayerWasted", root, function( ) setTimer( spawn, 3000, 1, source ) end) Link to comment
#Gubiani Posted May 13, 2017 Author Share Posted May 13, 2017 (edited) 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 May 13, 2017 by #Gubiani Link to comment
DNL291 Posted May 13, 2017 Share Posted May 13, 2017 (edited) 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 May 13, 2017 by DNL291 Link to comment
MauricioBoyPern Posted September 17, 2019 Share Posted September 17, 2019 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now