Combat Utilitaire 🗨️ ZoneFarmer - Lancez des combats dans n'importe quelle zone

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Lmoony

Membre
Apr 7, 2019
28
56
214
30
Bonjour,

Ayant l’énorme flemme de devoir répertorier map par map pour écrire un trajet, je me suis essayé a une autre méthode.

L’idée étant de contraindre le bot a rester dans une sous-zone grace a la fonction map:subArea() tout en le laissant s'y déplacer librement.
Le trajet répertorie la dernière direction choisie et ainsi :
  • Évite de faire des aller et retour a rĂ©pĂ©tition.
  • S'il sort de la zone, il sait d'oĂą il vient. Il sait donc retourner en arrière.
Ainsi, il se déplace librement au sein d'une zone et combat les monstres qu'il y croise.

En tant que gadget, le trajet est également pourvu d'un compteur de combat, vous indiquant le nombre de combat effectués a chaque début de combat

Voici le code
Code:
-- */ Base script for FlatyBot \*

-- MIN_MONSTERS = 1
-- MAX_MONSTERS = 8
-- MIN_MONSTERS_LEVEL = 1
-- MAX_MONSTERS_LEVEL = 1000

-- FORBIDDEN_MONSTERS = {}

-- MANDATORY_MONSTERS = {}

-- MAX_PODS = 90

-- ELEMENTS_TO_GATHER = {}

-- AUTO_DELETE = {}

local ZoneToFarm =  "Plaine des Porkass"

-- ====================================================

local Directions = {
    left = "left",
    top = "top",
    right = "right",
    bottom = "bottom",
}
local G_countFights = 0
local G_dir
local A1, A2 = 727595, 798405  -- 5^17=D20*A1+A2
local D20, D40 = 1048576, 1099511627776  -- 2^20, 2^40
local X1, X2 = 0, 1

function Rand()
    -- global:printMessage('Rand()')
    local U = X2*A2
    local V = (X1*A2 + X2*A1) % D20
    V = (V*D20 + U) % D40
    X1 = math.floor(V/D20)
    X2 = V - X1*D20
    return V/D40
end

function GetOppositeDirection(dir)
    -- global:printMessage('GetOppositeDirection()')
    if dir == Directions.left then
        return Directions.right
    elseif dir == Directions.right then
        return Directions.left
    elseif dir == Directions.top then
        return Directions.bottom
    elseif dir == Directions.bottom then
        return Directions.top
    end
    return nil
end

function DisableDirection(dirArray, dir)
    -- global:printMessage('DisableDirection()')
    for i, v in ipairs(dirArray) do
        if v == dir then
            table.remove(dirArray, i)
        end
    end
end

function GetRandomDirection(dirArray)
    -- global:printMessage('GetRandomDirection()')
    local randomDir = math.floor(Rand()*#dirArray) + 1
    for i, v in ipairs(dirArray) do
        if i == randomDir then
            return v
        end
    end
end

function TryChangeMap()
    -- global:printMessage('TryChangeMap()')
    local dir
    local possibleDirections = {
        Directions.left,
        Directions.top,
        Directions.right,
        Directions.bottom
    }
    if G_dir ~= nil then
        DisableDirection(possibleDirections, GetOppositeDirection(G_dir))
    end
    dir = GetRandomDirection(possibleDirections)
    G_dir = dir

    while not(map:changeMap(dir)) do
        DisableDirection(possibleDirections, dir)
        dir = GetRandomDirection(possibleDirections)
        G_dir = dir
        global:delay(10000)
    end
end

function GoBack()
    -- global:printMessage('goBack()')
    local tmp
    if G_dir ~= nil then
        tmp = GetOppositeDirection(G_dir)
        G_dir = tmp
        map:changeMap(tmp)
    end
end

function TryFight()
    -- global:printMessage('retry()')
    local i = 0
    while not(fight()) do
        global:delay(2000)
        i = i + 1
        if i == 3 then
            TryChangeMap()
            return
        end
    end
    G_countFights = G_countFights + 1
    global:printMessage('Nombre de combats : ' .. tostring(G_countFights))
end

function move()
    -- global:printMessage('move()')
    if map:subArea() == ZoneToFarm then
        return {
            {map = map:currentMapId(), custom = TryFight},
        }
    else
        return {
            {map = map:currentMapId(), custom = GoBack},
        }
    end
    return nil
end

function bank()
    return nil
end

function phoenix()
    return nil
end

function lost()
    return nil
end
Il est nécessaire de mettre le personnage dans la sous-zone que vous désirez farmer.
Mettre la variable ZoneToFarm au nom de cette sous-zone.

Edit : NĂ©cessite FlatyCloud
 

Attachments

  • ZoneFarmer.lua
    3 KB · Views: 1,708
Last edited:
  • Like
  • Love
Reactions: michaelsavaria1010, 문야화, pcisti2002 and 11 others

Lucide

Membre actif
Sep 2, 2010
228
3,313
1,009
PhotonPay
Discord
lucide0001
A nouveau, excellent travail !

Je tiens tout de même à préciser que dans le cas où le déplacement dans la zone se fait sous forme de trigger, je pense que le bot se trouvera bloqué, mais ça reste à voir.

Lucide
 

wasted

Membre
Feb 12, 2020
21
4
124
26
Wow, vraiment cool comme script ! Je le test cette aprèm !
Post automatically merged:

Je crois qu'il y a un ptit soucis, j'ai tenté ton script dans la Forêt d'astrub en mettant comme tu disais le nom de la sous zone et quand je lance le trajet ça me met ça (c'est un peu long) (map de départ -1, -23)
[24/02/2020 18:20:15] System.InvalidCastException: La conversion de la chaîne "-1,-23" en type 'Double' n'est pas valide. ---> System.FormatException: Le format de la chaîne d'entrée est incorrect. à Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat) à Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat) --- Fin de la trace de la pile d'exception interne --- à Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat) à Microsoft.VisualBasic.CompilerServices.Operators.CompareObject2(Object Left, Object Right, Boolean TextCompare) à Microsoft.VisualBasic.CompilerServices.Operators.CompareObjectEqual(Object Left, Object Right, Boolean TextCompare) à FlatyBot.Core.Accounts.Scripts.ScriptsManager.he(LuaTable , String )
 
Last edited:

Lmoony

Membre
Apr 7, 2019
28
56
214
30
Bonjour Wasted, comme je ne manipule jamais de string (aka "-1, -23"), j'imagine qu'il s'agit plus d'un bug côté Flatybot. Néanmoins
Ce but est-il récurent?
Utilises-tu la version FlatyCloud?
 

wasted

Membre
Feb 12, 2020
21
4
124
26
Bonjour Wasted, comme je ne manipule jamais de string (aka "-1, -23"), j'imagine qu'il s'agit plus d'un bug côté Flatybot. Néanmoins
Ce but est-il récurent?
Utilises-tu la version FlatyCloud?
Quand j’ai tenté dans une autre zone j’avais un bug différent, malheureusement je l’ai pas screen, j’essayerai à nouveau ce soir et je te tiendrai au courant. Et j’utilise pas flatycloud , il est toujours en bêta fermé non ?
 

Lmoony

Membre
Apr 7, 2019
28
56
214
30
Malheureusement, il est nécessaire de posséder un accès à FlatyCloud pour profiter de ce trajet.
En effet, certaines fonctions utilisées dans ce dernier n'existent pas sur FlatyBot classique.

Tu peux toujours poster ta candidature pour la beta dans la section adaptée sur le Discord
 

LizzyRox

Membre
Sep 10, 2019
25
14
134
25
Super idée :) Et super script, par contre comment gérer les caractères spéciaux ? Exemple :
Orée de la forêt des Abraknydes
J'ai essayé quelques variantes mais le bot ne bouge pas.

Solution que j'utilise en attendant de comprendre comment fonctionne les accents etc, je mets le bot sur la zone (comme demandé de toute façon) et au lieu d'écrire moi même la zone, je lui dis zoneToFarm = map:subarea() et du coup pas de problème d'accent :)

Tu devrais d'ailleurs presque le faire "de base" comme ça, et du coup la seule condition pour lancer le script, c'est de mettre le bot sur la zone que tu veux farm :) (et de gérer la banque)
 

Galbriell

Membre
Feb 26, 2018
10
0
122
27
Script génial et qui peut beaucoup servir pour pleeeins de trajets différents,merci beaucoup :)
 

Lmoony

Membre
Apr 7, 2019
28
56
214
30
Il te suffit de mettre le map:subArea dans la variable ZoneToFarm au debut du script.
Donc
local ZoneToFarm = map:subArea()
Ainsi, le bot va enregistrer le nom de la zone dans laquelle il se trouves lorsque tu charges le trajet.
 

neoxlgt

Membre
Mar 30, 2020
11
1
4
28
Discord
neoxlgt #0356
L'ensemble est plutot bien mais quand je l'utilise dans la ville de bonta par exemple ca lui arrive tres souvent d'être bloqué et de revenir sur ses pas.

Par exemple il monte ne haut, redescend en bas et remonte en haut etc ducoup il tourne en rond pour rien, d'ailleurs il n'attaque pas tous les monstres présents, il lui arrive souvent aussi de changer de map alors qu'il y a des monstres presents
 

Lmoony

Membre
Apr 7, 2019
28
56
214
30
Si tu veux l'utiliser a Bonta, il me semble que c'est une zone et non pas une sous-zone. Il a sans doute considéré qu'il devait par exemple rester dans la sous-zone du Quartier des Boulanger, par exemple.

En effet, dans le trajet l'on utilise map:subArea() pour caractériser la zone. Tu peux changer et mettre map:area() a la place.

En ce qui concerne le fait qu'il ne s'attaque pas a tous les monstres, c'est quelque chose sur lequel l'on a très peu de prise. Le tout se résume a un simple appel a fight(), c'est donc soit un cas isolé de bug, soit quelque chose que tu n'as pas compris
 

Lmoony

Membre
Apr 7, 2019
28
56
214
30
Je rappelle également qu'avec cette méthode, le bot enregistre la zone/sous-zone dans laquelle vous êtes au moment ou vous chargez le fichier du trajet et non pas quand vous le lancez
 

Striife

Membre
Apr 6, 2020
19
2
124
28
Salut, j'ai l'impression que le min mobs/max mobs est ignoré avec ce trajet ,mon bot attaque les groupes de 8 malgré que j'ai mis 1 - 4, possible d'avoir un coup de main svp ?
 

astralman

Membre
May 16, 2012
7
1
723
Hello,
Min mobs/max mobs est fonctionnel pour moi. Vérifie que tu l'as bien paramétré.
 

WorgenDark

Membre
Apr 7, 2020
15
0
122
25
Bonsoir, J'ai un petit problème avec le bot, étant débutant dans ce milieu j'ai bien chargé le trajet, ainsi qu'une IA (Faites par vous) tout en changeant les valeur pour jouer avec un roublard, mais le bot ne se déplace pas, dans la console, après avoir vu "Trajet lancé.", il est marqué [Trajet] TimedOut 2 fois par minutes, savez-vous pourquoi ?
 

Lmoony

Membre
Apr 7, 2019
28
56
214
30
Le bot ne se déplace pas en combat ou hors-combat? J'utilise le trajet moi-même, il fonctionne comme il le devrait.
En ce qui concerne le [Trajet] TimedOut, je l'ai aussi si mon personnage est en train de régénérer en restant immobile sur une map. Le problème est apparu récemment, je suis dessus. Ce problème ne l’empêche pas de fonctionner correctement
 

WorgenDark

Membre
Apr 7, 2020
15
0
122
25
Il ne se déplace pas hors combat, mais malheureusement je l'ai lancé il y a au moins 10 minutes mais ne bouge toujours pas et affiche ce message non stop "[Trajet] TimedOut", je précise toutefois qu'il ne se régénère pas..
 

Lmoony

Membre
Apr 7, 2019
28
56
214
30
@WorgenDark
Comme tu as pu le constater par les autres témoignages ainsi que par le miens, ce bug n'est pas présent chez tout le monde.
Ceci me pousse à penser que le problème vient de chez toi.
Pense à vérifier ta version de FlatyCloud et relis bien les messages qui ont été postés sur ce sujet.
Les bugs que tu rencontres (sauf le "[Trajet] Timed Out") peuvent avoir de nombreuses raisons, comme souvent.

@Striife
Vérifie que tu as bien dé-commenté la ligne concernée (Retiré les 2 tirets en début de ligne)
 
Last edited:

Sryme39

Membre
Dec 20, 2014
11
0
422
29
Il est impossible d'ajouter une fonction banque sur le trajet ? Personnellement je n'ai pas réussi et sa serai super important !
 

Lmoony

Membre
Apr 7, 2019
28
56
214
30
C'est naturellement possible, par contre cela casse la versatilité du trajet. Raison pour laquelle je ne l'ai pas faite de base