Ir para conteúdo

(Resolvido)(PEDIDO) Script porta que só passa quem matou os monstros da lista

Featured Replies

Postado

Galera preciso de um script de porta , onde só vai passar quem matar os monstros que são pedidos, é para uma quest, de 11 etapas que estou fazendo, aí cada etapa vai ter um monstro diferente, e depois de matar esses 11 monstros eu ganho acesso a porta, para sempre, mais ou menos assim, urgente agradeço rep +.

Resolvido por Danyel Varejao

Ir para solução
  • Respostas 19
  • Visualizações 810
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Em creaturescripts/scripts, crie um arquivo.lua:     No login.lua, registre o evento: registerCreatureEvent(cid, "KillQuest")   Em creaturescripts.xml, adicione a tag: <e

  • Se não tiver matado os 11, não vai deixar passar da porta. Coloque os nomes dos monstros em minúsculo como coloquei ali para exemplo. Se o monstro não for um dos que se encontra na tabela, obviamente

  • Usa uma porta de quest, cara. Estilo a porta de id 6261.

Posted Images

Postado
  • Solução

1º Em data/creaturescripts/scripts adicione um arquivo chamado Quest_Bosses.lua e cole isso dentro:

local Configs = {
	Bosses = {
		["Nome do boss"] = 60000,
		["Nome do boss"] = 60001,
		["Nome do boss"] = 60002,
		["Nome do boss"] = 60003,
		["Nome do boss"] = 60004,
		["Nome do boss"] = 60005,
		["Nome do boss"] = 60006,
		["Nome do boss"] = 60007,
		["Nome do boss"] = 60008,
		["Nome do boss"] = 60009,
		["Nome do boss"] = 60010,
	}
}

function onDeath(cid, corpse, deathList)
	for Name, Storage in pairs(Configs.Bosses) do 
		if getCreatureName(cid) == Name then
			for i = 1, #deathList do
				setPlayerStorageValue(deathList[i], Storage, 1)
			end
		end
	end
	registerCreatureEvent(cid, "Quest_Bosses")
	return true
end

2º Configure o script pra o nome dos boss corretamente, Exemplo: ["Rat"], ["Orc"] etc

3º Em data/creaturescripts/scripts/login.lua adicione isso dps de qualquer registerCreatureEvent

registerCreatureEvent(cid, "Quest_Bosses")

4º Em data/creaturescripts/creaturescripts.xml adicione essa tag:

<event type="death" name="Quest_Bosses" event="script" value="Quest_Bosses.lua"/>

5º Em data/actions/scripts cria um arquivo chamado Quest_Bosses.lua e cole isso:

local Configs = {
	Door_AID = 6000,
	Bosses = {
		[1] = {60000, "Nome do Boss1"},
		[2] = {60001, "Nome do Boss2"},
		[3] = {60002, "Nome do Boss3"},
		[4] = {60003, "Nome do Boss4"},
		[5] = {60004, "Nome do Boss5"},
		[6] = {60005, "Nome do Boss6"},
		[7] = {60006, "Nome do Boss7"},
		[8] = {60007, "Nome do Boss8"},
		[9] = {60008, "Nome do Boss9"},
		[10] = {60009, "Nome do Boss10"},
		[11] = {60010, "Nome do Boss11"},
	}
}

local function CheckKillBosses(cid)
	for i = 1, #Configs.Bosses do
		if getPlayerStorageValue(cid, Configs.Bosses[i][1]) < 0 then
			return false
		end
	end
	return true
end

local function EmptyBosses(cid)
	local Table = {}
	for i = 1, #Configs.Bosses do
		if getPlayerStorageValue(cid, Configs.Bosses[i][1]) < 0 then
			table.insert(Table, Configs.Bosses[i][2])
		end
	end
	return table.concat(Table, ', ')
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local Player_Pos = getThingPos(cid)
	if item.aid == Configs.Door_AID then
		if CheckKillBosses(cid) then
			if Player_Pos.x == toPosition.x then
				if Player_Pos.y < toPosition.y then
					Player_Pos.y = toPosition.y + 1
				else
					Player_Pos.y = toPosition.y - 1
				end
			elseif Player_Pos.y == toPosition.y then
				if Player_Pos.x < toPosition.x then
					Player_Pos.x = toPosition.x + 1
				else
					Player_Pos.x = toPosition.x - 1
				end
			end
			doTeleportThing(cid, Player_Pos, true)
			doSendMagicEffect(Player_Pos, CONST_ME_TELEPORT)
		else
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Falta voce matar: ".. EmptyBosses(cid) ..".")
		end
	end
	return true
end

6º Em data/actions/actions.xml adicione a tag:

<action actionid="6000" event="script" value="Quest_Bosses.lua"/>

 

7º Configure o nome dos bosses corretamente e não esqueça de colocar a porta com ActionID 6000 no seu remeres map editor!

8º No xml de todos os bosses coloque isso antes de </monster>:

	<script>
		<event name="Quest_Bosses"/>
	</script>

Caso tenha alguma dúvida ou não funcione só falar!

Editado por Danyel Varejao (veja o histórico de edições)

Postado
  • Autor

Opa meu amigo, vou testar aqui, caso algum erro já te mando aqui senão, rep +.... Mas desde já agradeço.

14 minutos atrás, Danyel Varejao disse:

1º Em data/creaturescripts/scripts adicione um arquivo chamado Quest_Bosses.lua e cole isso dentro:


local Configs = {
	Bosses = {
		["Nome do boss"] = 60000,
		["Nome do boss"] = 60001,
		["Nome do boss"] = 60002,
		["Nome do boss"] = 60003,
		["Nome do boss"] = 60004,
		["Nome do boss"] = 60005,
		["Nome do boss"] = 60006,
		["Nome do boss"] = 60007,
		["Nome do boss"] = 60008,
		["Nome do boss"] = 60009,
		["Nome do boss"] = 60010,
	}
}

function onDeath(cid, corpse, deathList)
	for Name, Storage in pairs(Configs.Bosses) do 
		if getCreatureName(cid) == Name then
			for i = 1, #deathList do
				setPlayerStorageValue(deathList[i], Storage, 1)
			end
		end
	end
	registerCreatureEvent(cid, "Quest_Bosses")
	return true
end

2º Configure o script pra o nome dos boss corretamente, Exemplo: ["Rat"], ["Orc"] etc

3º Em data/creaturescripts/scripts/login.lua adicione isso dps de qualquer registerCreatureEvent


registerCreatureEvent(cid, "Quest_Bosses")

4º Em data/creaturescripts/creaturescripts.xml adicione essa tag:


<event type="death" name="Quest_Bosses" event="script" value="Quest_Bosses.lua"/>

5º Em data/actions/scripts cria um arquivo chamado Quest_Bosses.lua e cole isso:


local Configs = {
	Door_AID = 6000,
	Bosses = {
		[1] = {60000, "Nome do Boss1"},
		[2] = {60001, "Nome do Boss2"},
		[3] = {60002, "Nome do Boss3"},
		[4] = {60003, "Nome do Boss4"},
		[5] = {60004, "Nome do Boss5"},
		[6] = {60005, "Nome do Boss6"},
		[7] = {60006, "Nome do Boss7"},
		[8] = {60007, "Nome do Boss8"},
		[9] = {60008, "Nome do Boss9"},
		[10] = {60009, "Nome do Boss10"},
		[11] = {60010, "Nome do Boss11"},
	}
}

local function CheckKillBosses(cid)
	for i = 1, #Configs.Bosses do
		if getPlayerStorageValue(cid, Configs.Bosses[i][1]) < 0 then
			return false
		end
	end
	return true
end

local function EmptyBosses(cid)
	local Table = {}
	for i = 1, #Configs.Bosses do
		if getPlayerStorageValue(cid, Configs.Bosses[i][1]) < 0 then
			table.insert(Table, Configs.Bosses[i][2])
		end
	end
	return table.concat(Table, ', ')
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local Player_Pos = getThingPos(cid)
	if item.aid == Configs.Door_AID then
		if CheckKillBosses(cid) then
			if Player_Pos.x == toPosition.x then
				if Player_Pos.y < toPosition.y then
					Player_Pos.y = toPosition.y + 1
				else
					Player_Pos.y = toPosition.y - 1
				end
			elseif Player_Pos.y == toPosition.y then
				if Player_Pos.x < toPosition.x then
					Player_Pos.x = toPosition.x + 1
				else
					Player_Pos.x = toPosition.x - 1
				end
			end
			doTeleportThing(cid, Player_Pos, true)
			doSendMagicEffect(Player_Pos, CONST_ME_TELEPORT)
		else
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Falta voce matar: ".. EmptyBosses(cid) ..".")
		end
	end
	return true
end

6º Configure o nome dos bosses corretamente e não esqueça de colocar a porta com ActionID 6000 no seu remeres map editor!

7º No xml de todos os bosses coloque isso antes de </monster>:


	<script>
		<event name="Quest_Bosses"/>
	</script>

Caso tenha alguma dúvida ou não funcione só falar!

amigo, fiz tudo que você pediu , só que não dar nenhum erro nem nada, eu mato o monstro que coloquei pra testar e a porta nem sinal dar de nada kk, nem a mensagem que era pra enviar caso eu não tivesse matado , não aparece também.

Postado

Em creaturescripts/scripts, crie um arquivo.lua:

 

Spoiler

local monsters = {
"dwarf", 
"dwarf soldier", 
"dwarf guard", 
"axeitus headbanger", 
"foreman kneebiter", 
"cyclops", 
"elf", 
"elf scout", 
"elf arcanist", 
"cyclops smith",
"cyclops drone"
}

local dooraid = 56802 -- coloque aqui o actionid da porta

function onKill(cid, target, damage, flags)
    local name = getCreatureName(target):lower()
    if isPlayer(target) or getCreatureMaster(target) or (not isInArray(monsters, name)) then return true end
    
    if isInArray(monsters, name) then
        if getPlayerStorageValue(cid, 56803) == -1 then 
            setPlayerStorageValue(cid, 56803, "") 
        end
        local monster = getPlayerStorageValue(cid, 56803) 
        local t = string.explode(monster:gsub("'",""), ",")
        local monster_already = monster..",'"..name.."'"
        
        if (not isInArray(t, name)) then  
      		local killed = getPlayerStorageValue(cid, 56801) + 1
            setPlayerStorageValue(cid, 56801, killed)
            setPlayerStorageValue(cid, 56803, tostring(monster_already))
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Killed: ["..(killed + 1).."/" .. #monsters .. "]")
  
            if (killed+1) == #monsters then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You have killed [" .. (killed + 1) .. "/" .. #monsters .. "] monsters. You are allowed to pass the door now.")
                setPlayerStorageValue(cid, 56801, killed + 1)
                setPlayerStorageValue(cid, dooraid, 1)
            end
      end
    end
return true
end
    

 

 

No login.lua, registre o evento: registerCreatureEvent(cid, "KillQuest")

 

Em creaturescripts.xml, adicione a tag: <event type="kill" name="KillQuest" event="script" value="NOMEDOSEUARQUIVO.lua"/>

 

Depois, é só colocar o actionid que configurou no script (dooraid) na porta, coloquei como exemplo o 56802. Utilize aquelas portas de quest, como as do id 6261 se não me engano.

Contato:

 

Postado
1 hora atrás, ZeenG disse:

Opa meu amigo, vou testar aqui, caso algum erro já te mando aqui senão, rep +.... Mas desde já agradeço.

amigo, fiz tudo que você pediu , só que não dar nenhum erro nem nada, eu mato o monstro que coloquei pra testar e a porta nem sinal dar de nada kk, nem a mensagem que era pra enviar caso eu não tivesse matado , não aparece também.

Eu editei lá, faltou eu colocar a tag da action, tá tudo certinho agr, só instalar corretamente!

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo