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