Jump to content

WRotation en duel


PierreDeRosette

Recommended Posts

Hello

Je me demandais si vous saviez pourquoi les rotations ne se declenchaient pas lorsqu'on passe en duel (en arène aussi).

Une question qui ne s'est toujours pas résolue meme avec les "Attack all selected targets (friends also), option qui ne fonctionne apparemment pas dans le cas de duels.

Merci encore...

Link to comment
Share on other sites

Pour ma part j'ai essaye d'avancer un peu : 

Il en sort que pour determiner si une cible en est une, j'utilisais le bout de code suivant : 

if (ObjectManager.Target.Reaction <= Reaction.Neutral && wManager.Wow.Helpers.MovementManager.IsFaci.........

Hors les Allies (en vert) apparaissent comme Friendly.

Mais

Si on passe en mode duel, l'adversaire (rouge donc) reste "Friendly" et donc la routine d'attaque ne se declenche pas.

Si je fait sauter ce test, tout se passe bien.

Il semble que le meme probleme affecte les arenes : Si on tombe sur un adversaire du meme camp que nous, la routine ne se declenche pas meme si l'adversaire apparait cerclé de rouge.

Link to comment
Share on other sites

Salut,

WRotation (sauf erreur de ma part) fonctionne maintenant en duel ou arene.

Pour détecter si la cible actuelle est attaquable le mieux est d'utiliser lua:

Lua.LuaDoString<bool>("return UnitCanAttack('player', 'target');")

(si tu utilise WRotation tu peux utiliser le code "Fight.InFight" pour savoir si WRobot est en combat ou pas)

Link to comment
Share on other sites

Bonjour

Voila mon retour

Regarde ce log sur lequel j'ai fait un duel :

22:20:48 - Chargement Druide PVP
[D] 22:20:48 - [FSM] State wManager.Wow.Bot.States.Idle already launched, ignore it.
[D] 22:20:48 - [FSM] State WRotation.Bot.EcimiuDuajolala already launched, ignore it.
[D] 22:20:48 - [FSM] State wManager.Wow.Bot.States.FightHostileTarget already launched, ignore it.
[D] 22:20:48 - [FSM] State wManager.Wow.Bot.States.MyMacro already launched, ignore it.
[D] 22:20:48 - [FSM] State wManager.Wow.Bot.States.Pause already launched, ignore it.
[F] 22:20:59 - [Spell] Cast (onself) Récupération (Rejuvenation)
[F] 22:21:26 - [Spell] Cast (onself) Récupération (Rejuvenation)
[F] 22:21:49 - [Spell] Cast (onself) Récupération (Rejuvenation)
[F] 22:22:12 - [Spell] Cast (onself) Récupération (Rejuvenation)
[F] 22:22:30 - [Spell] Cast (onself) Récupération (Rejuvenation)
[F] 22:22:48 - [Spell] Cast (onself) Récupération (Rejuvenation)
[F] 22:22:55 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:22:56 - [Spell] Cast Colère (Wrath)
[F] 22:22:56 - [Spell] Cast Colère (Wrath)
[F] 22:22:57 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:22:59 - [Spell] Cast Colère (Wrath)
[F] 22:22:59 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:22:59 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:00 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:00 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:00 - [Spell] Cast Colère (Wrath)
[F] 22:23:01 - [Spell] Cast Forme de félin (Cat Form)
[F] 22:23:01 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:01 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:02 - [Spell] Cast Colère (Wrath)
[F] 22:23:03 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:03 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:03 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:04 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:04 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:04 - [Spell] Cast Colère (Wrath)
[F] 22:23:04 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:05 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:05 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:05 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:06 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:06 - [Spell] Cast Colère (Wrath)
[F] 22:23:06 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:06 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:07 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:07 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:07 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:08 - [Spell] Cast Colère (Wrath)
[F] 22:23:08 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:08 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:09 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:09 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:09 - [Spell] Cast Colère (Wrath)
[F] 22:23:10 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:10 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:10 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:10 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:11 - [Spell] Cast Colère (Wrath)
[F] 22:23:11 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:11 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:12 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:12 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:12 - [Spell] Cast Colère (Wrath)
[F] 22:23:15 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:15 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:15 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:16 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:16 - [Spell] Cast Colère (Wrath)
[F] 22:23:16 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:16 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:17 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:17 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:17 - [Spell] Cast Colère (Wrath)
[F] 22:23:18 - [Spell] Cast Feu stellaire (Starfire)
[F] 22:23:18 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:18 - [Spell] Cast Eruption stellaire (Starsurge)
[F] 22:23:19 - [Spell] Cast Eclat lunaire (Moonfire)
[F] 22:23:19 - [Spell] Cast Colère (Wrath)
22:23:27 - Dispose Druide Equi
22:23:27 - Session statistics:
Elapsed time: 00h:02m:41s
XP/HR: 0 - 0 min
Kills: 0 (0/hr)
Deaths: 0 (0/hr)
Farms: 0 (0/hr)
Loots: 0 (0/hr)
Money/HR: 0 G 00 S 00 C (0 G 00 S 00 C)
Honor/HR: 0 (0)
Apexis Crystal/HR: 0 (0)

 

Dans ce script j'avais introduit ceci :

if (!ObjectManager.Me.IsDead && !Usefuls.IsLoadingOrConnecting && Usefuls.InGame)
                {
                    Defense();
                    if (Fight.InFight != FIGHT)
                    {
                        if (Fight.InFight == true)
                            Logging.WriteDebug("Fight Infight passe a TRUE ");
                        if (Fight.InFight == false)
                            Logging.WriteDebug("Fight Infight passe a FALSE ");
                        FIGHT = Fight.InFight;
                    }
                    //if (Fight.InFight)
                    {
                        Permanent();
                        if (ObjectManager.Target.IsAlive && !TraceLine.TraceLineGo(ObjectManager.Target.Position))
                        {
                            if (wManager.Wow.Helpers.MovementManager.IsFacing(ObjectManager.Me.Position, ObjectManager.Me.Rotation, ObjectManager.Target.Position, 2.20f))
                                Attaque();
                            if ((ObjectManager.Target.Type == WoWObjectType.Player) && ObjectManager.Target.IsAlive && ObjectManager.Target.Reaction > Reaction.Neutral && (ObjectManager.Target.Health < (ObjectManager.Target.MaxHealth - (2 * SOINS))))
                                Heal();
                        }
                    }
                }

 

Comme tu peut le voir plus haut, a aucun moment le Fight.InFight n'est passe a true dans le duel face a un joueur de la meme faction.

J'ai l'impression qu'il ne fonctionne pas comme il devrais. 

Il est vrai que parfois il bascule a true, mais c'est cet aléa qui rend wrotation peu fiable pour les duels et arenes.

Edited by PierreDeRosette
Link to comment
Share on other sites

le code "Lua.LuaDoString<bool>("return UnitCanAttack('player', 'target');")"  retourne quoi en arene?

ret = UnitCanAttack('player', 'target');

 

Edited by Droidz
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour

Voila mon retour :

Log d'une situation de combat avec une bestiole :

[F] 15:24:48 - [Spell] Cast Lambeau (Shred)
[F] 15:24:48 - [Spell] Cast Lambeau (Shred)
[E] 15:24:49 - Engagement : True

[E] 15:24:49 - InCombat : True

[E] 15:24:49 - InFight : False

[E] 15:24:49 - return UnitCanAttack... : True

[F] 15:24:49 - [Spell] Cast Fureur du tigre (Tiger's Fury)
[F] 15:24:49 - [Spell] Cast Déchirure (Rip)
[F] 15:24:49 - [Spell] Cast Lambeau (Shred)
[F] 15:24:50 - [Spell] Cast Forme de félin (Cat Form)

 

Portion de script utilisée pour le test :

if (_Rapport2.IsReady)
        {
            Logging.WriteError("Engagement : " + Engage);
            Logging.WriteError("InCombat : " + ObjectManager.Me.InCombat);
            Logging.WriteError("InFight : " + Fight.InFight);
            Logging.WriteError("return UnitCanAttack... : " + cibleAttaquable);
            _Rapport2 = new Timer(1000);
        }

 

Comme tu le voit, de tout le marqueurs de combat, c'est Fight.InFight qui ne semble pas réagir normalement

Sinon je ne voit pas la signification et la différence de InCombat par rapport a Infight.

Pour en revenir sur 

bool cibleAttaquable = Lua.LuaDoString<bool>("return UnitCanAttack('player', 'target')");

Cela fonctionne très bien....a condition d'avoir une cible.

 

(Engage est une methode artisanale de ma confection qui signifie qu'on a engagé le premier coup - Tres utile pour les attaque sournoise des voleurs dont la premiere frappe portée doit etre absolument ambush et pour les druides feral dissimulés dont la premiere frappe doit absolument etre Rake)

 

Link to comment
Share on other sites

"Fight.InFight" retourne "true" quand WRobot est lui-même en combat (qu'il a fait Fight.StartFight(...)), rien à voir avec ce qui ce passe dans wow, WRobot peut être InFight alors que le combat n'a pas encore commencé (il est InFight dès qu'il a choisi la cible (par exemple dans le bot "Grinder", par en étape par étape ca donne: Recherche de la cible > On utilise la fonction Fight.StartFight(...) (InFight = true) > On va vers la cible > Sélection de la cible (ciblage, on clique dessus) > Lance le premier sort des que le joueur est à portée > combat > cible morte > sort de la fonction StartFight(...)  (InFight = false)).

InCombat, lui vérifie plusieurs éléments:

  1. Que le joueur n’est pas mort.
  2. Que le portrait du joueur clignote rouge (Me.InCombatFlagOnly).
  3. Recherche dans la liste des objets les units qui ont pour cible le joueur, ou le pet du joueur, ou un membre du groupe.

UnitCanAttack est limité comme tu le dis, car il faut que le joueur ait pour cible l'unit, c'est à faire en dernier, avant de lancer la rotation, pour vérifier si la cible est bien attaquable.

 

Link to comment
Share on other sites

Le seul hic c'est qu'en combat vs un player de la meme alliance (duel ou arene), ObjectManager.Me.InCombat qui devient donc le parametre le plus interressant ne passe pas a true => Il faut donc un mix entre ObjectManager.Me.InCombat et 

bool cibleAttaquable = Lua.LuaDoString<bool>("return UnitCanAttack('player', 'target')");

afin d'etre efficace.

Link to comment
Share on other sites

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
×
×
  • Create New...