Jump to content

Ajuda Especificar


Recommended Posts

Posted

Olá a todos tenho um script,porem não consigo especificar qual deve ser morto 

Exemplo 

Matar 5 Zombies, Não qualquer zombie um zombie especifico apenas. alguem pode me ajudar ?

Quero especificar o id porem não esta sendo possivel 

 

zombiesKilled = 0

function ZedMissionWin ()
	zombiesKilled = 5
	outputChatBox( "Good job, mission completed!" )
	givePlayerMoney ( 50000 )
end

function ZedMissionCheckKill ( killer )
	
	local zed = getElementsByType (107,sorcer)
			if zed == true and killer == localPlayer then 
			zombiesKilled = zombiesKilled+1 
			outputDebugString ("A zed was killed, "..(zombiesKilled).." zeds left.")
	end
	
	if zombiesKilled >= 5 then 
		ZedMissionWin () 
	end
end

function startZedMission ()
	outputChatBox ( "Your Get Mission" )
	addEventHandler ( "onClientPedWasted", root, ZedMissionCheckKill )
end

addCommandHandler ( "mission", startZedMission )

 

  • Moderators
Posted

Esse script aí é client-side ou server-side?
Pois vc está usando funções que só funcionam client-side e outras que funcionam em ambos mas que se for feito client-side dai não adianta. Por exemplo givePlayerMoney não adianta nada se for feito client-side, pois vai mudar apenas o dinheiro na tela do jogador mas não será contado no servidor, será um "dinheiro falso".

Creio que houve erro de digitação na linha 11, onde vc botou sorcer.

zombiesKilled é o número de zumbis restantes ou o número de zumbis que foram mortos? Pois você está usando para contar os zumbis mortos mas na mensagem da linha 14 está usando como zumbis restantes e isso não faz sentido.

A variável zed será sempre uma table, vazia ou não. Então sua verificação será sempre verdadeira quando o jogador matar qualquer NPC.

Você deve usar /debugscript 3 para verificar erros no script.

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
7 minutes ago, Lord Henry said:

Esse script aí é client-side ou server-side?
Pois vc está usando funções que só funcionam client-side e outras que funcionam em ambos mas que se for feito client-side dai não adianta. Por exemplo givePlayerMoney não adianta nada se for feito client-side, pois vai mudar apenas o dinheiro na tela do jogador mas não será contado no servidor, será um "dinheiro falso".

Creio que houve erro de digitação na linha 11, onde vc botou sorcer.

zombiesKilled é o número de zumbis restantes ou o número de zumbis que foram mortos? Pois você está usando para contar os zumbis mortos mas na mensagem da linha 14 está usando como zumbis restantes e isso não faz sentido.

A variável zed será sempre uma table, vazia ou não. Então sua verificação será sempre verdadeira quando o jogador matar qualquer NPC.

Você deve usar /debugscript 3 para verificar erros no script.

Olá, este é um script Server, queria criar uma missião de mata 5 zombie"PED"

acada "PED" morto zombiesKilled+1

Isso significa que quando tiver 

  1. if zombiesKilled >= 5 then

a missão sera completada

 

pois eu não consigo especificar qual zombie deve ser morto

  • Moderators
Posted

Então o script está todo errado.

Os outputChatBox vão aparecer pra todo mundo do servidor, até quem não está fazendo a missão.

givePlayerMoney no server-side exige que vc especifique o jogador para qual está dando dinheiro.

onClientPedWasted é uma função que só funciona client-side. (como no próprio nome já está escrito)

Em nenhum lugar tem uma função createPed, para criar os zumbis.

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted (edited)
5 minutes ago, Lord Henry said:

Então o script está todo errado.

Os outputChatBox vão aparecer pra todo mundo do servidor, até quem não está fazendo a missão.

givePlayerMoney no server-side exige que vc especifique o jogador para qual está dando dinheiro.

onClientPedWasted é uma função que só funciona client-side. (como no próprio nome já está escrito)

Em nenhum lugar tem uma função createPed, para criar os zumbis.

os zombies ja estão no server, tem que apenas mata-los para completar mission, porem queria sera-los por classe, para fazer vairas mission  exemplo 

Mission 1 Classe A "ID zombies" { 198, 158, 107 e 108 }

Mission 2 Classe A "ID zombies2" { 48, 18, 79 e 23 }

_______________________________________________________________

Voçe poderia me dar dicas ou me ajudar a arruamar o scritp ?

Edited by kevincouto6
Posted (edited)

Esse seu primeiro código é do lado client, e como já lhe foi dito, givePlayerMoney não vai sincronizar com o server e o dinheiro só será dado no ambiente individual, ou seja, só pra você.

Seria até melhor você converter o código pro lado server, até porque vai te poupar o uso do triggerServerEvent pra dar o dinheiro.

Use setElementID pra atribuir um ID ao ped. Talvez você tenha se referido ao ID do ped ali em cima, ser foi isso ignore o setElementID.

Você pode criar tabelas ou chaves dentro da tabela para adicionar os 'zumbis' de cada missão e o que for necessário, Ex:

local zedsTable = {
	{ 198, 158, 107, 108 },
	{48, 18, 79, 23 }
}

function spawnZeds( mission )
	for _, id in pairs( zedsTable[tonumber(mission)] ) do
		
	end
end

 

Edited by DNL291

Please do not PM me with scripting related question nor support, use the forums instead.

Posted (edited)
On 23/05/2018 at 02:18, DNL291 said:

Esse seu primeiro código é do lado client, e como já lhe foi dito, givePlayerMoney não vai sincronizar com o server e o dinheiro só será dado no ambiente individual, ou seja, só pra você.

Seria até melhor você converter o código pro lado server, até porque vai te poupar o uso do triggerServerEvent pra dar o dinheiro.

Use setElementID pra atribuir um ID ao ped. Talvez você tenha se referido ao ID do ped ali em cima, ser foi isso ignore o setElementID.

Você pode criar tabelas ou chaves dentro da tabela para adicionar os 'zumbis' de cada missão e o que for necessário, Ex:

 

Eu estou tentando de todas maneiras porem sempre acontece algum erro achei melhor voltar a pedir ajuda

ERROR:Mission/mission.lua:16:bad argument #1 to'pairs'(table expected, got nill)

zombiesKilled = 0

local zedsTable = {
	{ 198, 158, 107, 108 },
	{48, 18, 79, 23 }
}

function ZedMissionWin ()
	zombiesKilled = 5
	outputChatBox( "Good job, mission completed!" )
	givePlayerMoney ( thePlayer, 30000 )
end

	
function ZedMissionCheckKill( mission )
	for _, id in pairs( zedsTable[tonumber(mission)] ) do
		zombiesKilled = zombiesKilled+1 
		outputDebugString ("A zed was killed, "..(zombiesKilled).." zeds left.")	
	end
	if zombiesKilled >= 5 then 
		ZedMissionWin () 
	end
end

function startZedMission ()
	outputChatBox ( "Your Get Mission" )
	addEventHandler ( "onClientPedWasted", root, ZedMissionCheckKill )
end

addCommandHandler ( "mission", startZedMission )

 

Edited by kevincouto6
Posted (edited)

Você está chamando ZedMissionCheckKill() sem passar o argumento da missão.

O correto seria assim (fiz pra você a lógica que o script vai funcionar):

local currentMission,zombiesKilled = 0, 0
local missionZeds

local zedsTable = {
	{ 198, 158, 107, 108 },
	{48, 18, 79, 23 }
}

function ZedMissionOnKill( killer )
	-- Faz a checagem para saber se quem matou é um jogador e a vitíma um ped
	if ( killer and getElementType(killer) == "player" and getElementType(source) == "ped" ) then
		zombiesKilled = zombiesKilled+1 
		if zombiesKilled == missionZeds then -- Você vai precisar armazenar numa variável a quantidade de zumbis da missão atual
			ZedMissionWin () -- Nessa função você já vai poder criar a outra missão
		end
	end
end

function startZedMission()
	if currentMission ~= 0 then return end
	
	currentMission = 1
	spawnZeds( currentMission )
	outputChatBox ( "Your Get Mission" )
	addEventHandler ( "onClientPedWasted", root, ZedMissionOnKill )
end
addCommandHandler ( "mission", startZedMission )

function ZedMissionWin ()
	outputChatBox( "Good job, mission completed!" )
	givePlayerMoney ( thePlayer, 30000 ) -- Use isso no lado server!
	-- Vamos criar a outra missão
	spawnZeds( currentMission + 1 )
end

function spawnZeds( mission )
	if tonumber(mission) and tonumber(mission) > #zedsTable then
		currentMission = 0
		return outputChatBox( "Parabéns, você completou todas as missões", 0, 240, 0 )
	end
	missionZeds = #zedsTable[ tonumber(mission) ]
	for _, id in pairs( zedsTable[tonumber(mission)] ) do
		-- criar os zumbis
	end
	currentMission = tonumber(mission)
end

 

Edited by DNL291

Please do not PM me with scripting related question nor support, use the forums instead.

Posted
1 hour ago, DNL291 said:

Você está chamando ZedMissionCheckKill() sem passar o argumento da missão.

O correto seria assim (fiz pra você a lógica que o script vai funcionar):


local currentMission,zombiesKilled = 0, 0
local missionZeds

local zedsTable = {
	{ 198, 158, 107, 108 },
	{48, 18, 79, 23 }
}

function ZedMissionOnKill( killer )
	-- Faz a checagem para saber se quem matou é um jogador e a vitíma um ped
	if ( killer and getElementType(killer) == "player" and getElementType(source) == "ped" ) then
		zombiesKilled = zombiesKilled+1 
		if zombiesKilled == missionZeds then -- Você vai precisar armazenar numa variável a quantidade de zumbis da missão atual
			ZedMissionWin () -- Nessa função você já vai poder criar a outra missão
		end
	end
end

function startZedMission()
	if currentMission ~= 0 then return end
	
	currentMission = 1
	spawnZeds( currentMission )
	outputChatBox ( "Your Get Mission" )
	addEventHandler ( "onClientPedWasted", root, ZedMissionOnKill )
end
addCommandHandler ( "mission", startZedMission )

function ZedMissionWin ()
	outputChatBox( "Good job, mission completed!" )
	givePlayerMoney ( thePlayer, 30000 ) -- Use isso no lado server!
	-- Vamos criar a outra missão
	spawnZeds( currentMission + 1 )
end

function spawnZeds( mission )
	if tonumber(mission) and tonumber(mission) > #zedsTable then
		currentMission = 0
		return outputChatBox( "Parabéns, você completou todas as missões", 0, 240, 0 )
	end
	missionZeds = #zedsTable[ tonumber(mission) ]
	for _, id in pairs( zedsTable[tonumber(mission)] ) do
		-- criar os zumbis
	end
	currentMission = tonumber(mission)
end

 

Obrigado Meu Amigo

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...