Gestion des challenges

Avant de mettre prêt dans un combat, votre bot va essayer d'appeller la fonction challengeManagement si elle est présente dans votre script, c'est dans cette fonction que vous devez rédiger votre logique pour choisir un challenge.

Nous proposons l'exemple suivant (à ajouter à votre script) :

function chooseChallenge(challengeId, i)
	global:delay(global:random(500, 1000))
	local ChallengeSelectionMessage = developer:createMessage("ChallengeSelectionMessage")
	ChallengeSelectionMessage.challengeId = challengeId
	developer:sendMessage(ChallengeSelectionMessage)
	global:printMessage("Le challenge ("..fightChallenge:challengeName(challengeId)..") a été choisi pour le slot N°"..tostring(i)..".")
	return challengeId
end
function challengeManagement(challengeCount, isMule)

	-------------------------------------------------------------------------------------------
	-------------------------------------------------------------------------------------------
	-------------------------------------------------------------------------------------------
	-- Liste des challenges à choisir par ordre de priorité
	-- La liste des identificants : https://www.ankabot.dev/Identifiants/DofusPC/Challenges.txt
	local challengesPriority = {
		1, -- Zombie
		2, -- Statue
		3, -- Premier
		4, -- Dernier
		5, -- Économe
		6, -- Versatile
		7, -- Jardinier
		8, -- Nomade
		9, -- Barbare
	}

	-- Choix le type de bonus
	-- 0 = XP
	-- 1 = DROP
	local challengeBonus = 1

	-- Choix du mode des challenges
	-- 0 = Manuel
	-- 1 = Aléatoire
	local challengeMod = 0
	-------------------------------------------------------------------------------------------
	-------------------------------------------------------------------------------------------
	-------------------------------------------------------------------------------------------

	-- Texte variables
	local challengeBonusText = { "XP", "DROP" }
	local challengeModText = { "Manuel", "Aléatoire" }

	-- Choix le type de bonus
	local ChallengeBonusChoiceMessage = developer:createMessage("ChallengeBonusChoiceMessage")
	ChallengeBonusChoiceMessage.challengeBonus = challengeBonus
	developer:sendMessage(ChallengeBonusChoiceMessage)

	-- Message
	if not isMule then
		global:printSuccess("Challenges: "..challengeModText[challengeMod + 1].." - Bonus: "..challengeBonusText[challengeBonus + 1])
	else
		global:printSuccess("[MULE] Bonus: "..challengeBonusText[challengeBonus + 1])
		return
	end

	-- Choix du mode des challenges
	local ChallengeModSelectMessage = developer:createMessage("ChallengeModSelectMessage")
	ChallengeModSelectMessage.challengeMod = challengeMod
	developer:sendMessage(ChallengeModSelectMessage)

	-- Gestion des challenges
	if challengeMod == 0 then

		-- Attente aléatoire
		global:printMessage("Attente aléatoire avant ...")
		global:delay(global:random(1000, 2000))

		-- Passer au étape des choix des challenges
		global:printMessage("Passage à l'étape du choix des challenges ...")
		developer:sendMessage(developer:createMessage("ChallengeReadyMessage"))

		-- Chaque slot de challenge
		for i = 1, challengeCount do
			local state = developer:suspendScriptUntil("ChallengeProposalMessage", 5000, true, "", 50)
			if state == false then
				return
			end

			-- Récupérer les challenges proposés pour ce slot
			local proposedChallenges = fightChallenge:getLastChallengeProposalMessage()

			-- Afficher les challenges proposés
			global:printMessage("Liste des challenges proposés pour le slot N°"..tostring(i)..":")
			for index, proposedChallenge in ipairs(proposedChallenges.challengeProposals) do
				if index > 2 then
					break
				end
				global:printMessage("         Challenge: "..fightChallenge:challengeName(proposedChallenge.challengeId).." - Bonus XP: "..tostring(proposedChallenge.xpBonus).."% - Bonus DROP: "..tostring(proposedChallenge.dropBonus).."%")
			end

			-- Choisir par défaut le premier challenge
			local choosedChallengeId = chooseChallenge(proposedChallenges.challengeProposals[1].challengeId, i)

			-- Rechoisir un challenge selon sa priorité et sa disponibilité dans la liste
			local found = false
			for _, challengePriority in ipairs(challengesPriority) do
				for index, proposedChallenge in ipairs(proposedChallenges.challengeProposals) do
					if index > 2 then
						break
					end
					if proposedChallenge.challengeId == challengePriority then
						if index > 1 then
							choosedChallengeId = chooseChallenge(proposedChallenge.challengeId, i)
						end
						found = true
						break
					end
				end
				if found then
					break
				end
			end

			-- Valider
			global:printMessage("Validation ...")
			global:delay(global:random(500, 1000))
			local ChallengeValidateMessage = developer:createMessage("ChallengeValidateMessage")
			ChallengeValidateMessage.challengeId = choosedChallengeId
			developer:sendMessage(ChallengeValidateMessage)
		end

		-- Attente aléatoire
		global:printMessage("Attente aléatoire après ...")
		global:delay(global:random(1000, 2000))
	end
end

Dernière mise à jour