C# Retours d'expérience

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#21
en fait avec BiM.protocol et .core (donc ca deserialise tout sans rien demander et ca c'est genial) dans leafbot j'ai juste mis un "exit sub" quand il voit 6372 (donc ca le deserialise pas je l'ignore tout bêtement en laissant le bot transferer ca) et ca me deco pas
 

FastFrench

Membre Actif
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#22
Ce que j'ai fait pour contourner le problème, c'est un nouveau message générique UnknownMessage qui est renvoyé à chaque fois qu'un id de message inconnu est rencontré. Ce message UnknownMessage contient un tableau de byte avec tout le contenu du message, et un Id variable, de façon à pouvoir se substituer dynamiquement à n'importe quel message inconnu.

Ce mécanisme se substitue à l'exception qui est lancée par BiM en cas de message inconnu (et qui provoque le plantage).

En effet, mettre en dur le N° du message c'est une solution très court terme : ils peuvent à tout moment changer cet Id ou en ajouter d'autres, sans même que ce soit lié à une maintenance.

Il est aussi intéressant de stocker sur le disque tous les contenus des messages RawDataMessage, dans des fichiers avec une extension .swf, comme cela vous pourrez observer le code qu'ils injectent discrêtement...
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#23
Effectivement FF c'est tout à fait ça quand tu observe se swf tu vois se que c'est que se petit packet 6372 malheusement je trouve se packet un peut inutile se qu'il fait!, un random wtf!
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#24
Le client est censé répondre quelque chose je pense, si c'est un bot client il ne saura pas quoi répondre, donc ban.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#25
dans le cas d'un mitm en fait on s'en fou un peu puisque de toute facon c'est bien le client (le vrai) qui repond mais je sais pas pourquoi BiM ne parse pas ce paquet pour en sortir les 2 messages ?
quand je parse moi meme en utilisant des sockets et un parseur perso avec (les messages de) BiM.protocol ca fonctionne tres bien (sauf que y'a pas le message 6372 dans MessageReceiver) mais pas avec le parseur de .core.NetworkMessage
aussi j'ai essayé d'ajouté un UnknowMessage comme l'a fait FF (sauf que j'ai gardé l'ip 6373 pour l'instant pour les tests avant de faire du dynamic) mais sans succés , BiM passe jamais par le message , parqu'il plante juste avant (d'ailleur c'est etonnant , la methode c'est deserialise puis reserialise et envoi ou tu envois direct les data bruts "client <-bot-> serveur" ? parceque avec la derniere methode ca passe tres bien en fesant juste un deseriliase histoire de quand meme choper les infos OnTheFly et renvoyer en brut)
 

FastFrench

Membre Actif
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#26
Pour éviter le plantage de BiM, il faut éviter la levée de l'exception dans MessageReceiver :
Code:
         public NetworkMessage BuildMessage(uint id, IDataReader reader)
         {
             if (!m_messages.ContainsKey(id))
            {                
                return new UnknownMessage(id, reader);
                //throw new MessageNotFoundException(string.Format("NetworkMessage <id:{0}> doesn't exist", id));
            }
 
             NetworkMessage message = m_constructors[id]();
Et le message générique à ajouter peut ressembler à ça :
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BiM.Core.IO;

namespace BiM.Core.Network
{
    public class UnknownMessage : NetworkMessage
    {
        uint _messageId = 0xFFFFFFFF;
        public override uint MessageId { get { return _messageId; } }

        public UnknownMessage()
        {
            _messageId = 0xFFFFFFFF;
        }
        
        public UnknownMessage(uint messageId, IDataReader reader)
        {
            _messageId = messageId;
            Unpack(reader);
        }

        public byte[] Content { get; set; }

        public override void Serialize(IDataWriter writer)
        {
            writer.WriteBytes(Content);
        }
        public override void Deserialize(IDataReader reader)
        {
            Content = reader.ReadBytes((int)reader.BytesAvailable);
        }

        public override string ToString()
        {
            return string.Format("UnknownMessage#Id{0}#{1}bytes", _messageId, Content == null ? 0 : Content.Length);
        }
    }
}
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#27
merci , ca roule , juste été obligé d'ajouter un try/catch/finally dans mapcontext.cs car parfois il me dit que cell.id existe pas :
Code:
try
                {
                    if (to.Id == cell.Id)
                        continue;

                    if (!cell.LineOfSight || !throughEntities && Array.IndexOf(occupiedCells, cell.Id) != -1)
                        return false;
                }
                catch { }
                finally { }
edit : en fait ca marche toujours pas , il passe par le rawdata puis s'arrete la (donc en fait il voit jamais le UnKnowMessage)
[ MITM ](27) BasicLatencyStatsRequestMessage FROM Server
[ MITM ](27) RawDataMessage FROM Server
[ Bot ](11) Bot stopped

reedit , bon en fait en traduisant rawdata ca va mieux :lol: par contre je comprend pas pourquoi reserialiser pour faire le pont alors qu'on a directement les données brutes
 

FastFrench

Membre Actif
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#28
Ah, c'est amusant ça ;)

J'avais jamais constaté ça, mais ça fait un bail que j'ai plus joué un Osa. Ils ont peut-être modifié les données de ce sort.
D'ailleurs, il faudrait que je prenne en compte les nouvelles données qu'ils ont ajouté (targetMask).

Tu peux essayer ça pour forcer à lancer Bénédiction animale sur l'osa :

private void FixSpellbook()
{
Spell spell = Character.SpellsBook.GetSpell(26); // Force Bénédiction Animale to be casted on the caster himself
if (spell != null)
{
spell.LevelTemplate.range = 0;
spell.LevelTemplate.rangeCanBeBoosted = false;
}
}

A appeler à la fin du constructeur de FFight.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#29
en fait j'ai fait ca pour la benediction :
Code:
bool TryCast(string explain)
        {
            lastActionFailed = false;
            _explain = explain;
            if (spellTarget == null || spellTarget.Spell == null || spellTarget.FromCell == null || spellTarget.TargetCell == null || spellTarget.Efficiency <= 0 || spellTarget.cast == true)
                return false;
            if (spellTarget.Spell.Template.id == 26) // benedition animale
            {
                if (Fighter.CanSummon()) // pas besoin , il peu encore invoquer
                {
                    return false;
                }
                spellTarget = new SpellTarget(spellTarget.Efficiency, Fighter.Cell, Fighter.Cell, spellTarget.Spell); // forcer la cible sur lui meme
            }
            ComeAtSpellRangeThenCast();
            return !lastActionFailed;
        }
et ca va , je vais essayer ce que tu proposes et aussi voir si je peux eviter de le lancer quand ca donnerait de tout facon pas plus d'invocations.
aussi je vais essayer de faire une grosse map pour voir ce que ca donnerait en perf/mémoire
pour cell.id qui est pas reconnue parfois vous avez une idée ? c'est grave ?
dsl je commente pas en English , déjà en Français c'est dur
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#30
Hello,

j'ai un souci avec BiM, impossible de me connecter dessus.
Je le lance en x86, j'ai réglé les soucis due aux mise à jours.
J'ai modifié ma config:
<!--======================================================================-->
<!-- Constantes pour l'accès au serveur -->
<!--======================================================================-->


<entry key="connection.useSniffer" type="Boolean" >false</entry>
<entry key="connection.snifferHost">localhost</entry>
<entry key="connection.snifferPort" type="int">18001</entry>
<entry key="connection.host">127.0.0.1,127.0.0.1</entry>
<entry key="connection.port">5555,443</entry>
Visual studio en administrateur mais impossible de me connecter.
Aucun log, comme si je me connectais sur un autre serveur.

[21:35:35] Plugin 'Window Manager' loaded
[21:35:35] MITM started
MITM Started puis rien.

Une idée ?
 

FastFrench

Membre Actif
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#31
... un bon mois plus tard, mon premier personnage vient de passer niveau 200 avec le bot. Le second va suivre dans la semaine. En peaufinant un peu l'IA, je suis passé à environ 8M xp / heure. Donc le passage de 199 à 200 (pour rappel, il faut autant d'xp pour passer de 1 à 199 que de 199 à 200 : 3.7 Gxp) peut se faire un peu moins d'un mois.

Je n'ai rien constaté au niveau de mesures anti-bot de Ank@ma.
 

miniteck27140

Contributeur
Inscrit
7 Avril 2010
Messages
151
Reactions
2
#32
Bien jouer à toi FastFrench
Bonne continuation avec ce bot.
 

RedBust

Membre Actif
Inscrit
1 Decembre 2009
Messages
260
Reactions
0
#33
J'ai envie de dire GG, tu viens de t'éviter des heures de geekos inutiles à refaire en boucle des tâches monotones et non attrayantes.
 

FastFrench

Membre Actif
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#34
C'est clair que dans bien des jeux il s'agit de refaire encore et encore la même chose, et plus particulièrement dans D@fus. L'ordinateur fait ça bien mieux que moi, et sans états d'âme.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#35
RedBust a dit:
J'ai envie de dire GG, tu viens de t'éviter des heures de geekos inutiles à refaire en boucle des tâches monotones et non attrayantes.
tu viens de resumer d0fus en une ligne , on peu pas faire mieux
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#36
Incroyable que tu y soit arrivé en si peu de temps :)
 

FastFrench

Membre Actif
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#37
Tout cela n'aurait pas été possible sans BiM... :)
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#38
Je regrette de le laisser en plan un peu ces temps-ci mais je suis persuadé que j'y me remettrais un de ces quatre.
 

FastFrench

Membre Actif
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#39
C'est sûr que c'est un peu dommage, mais d'un autre côté c'est sans fin. J'ai encore pas mal d'idée de trucs à faire, mais probable que je ne le fasse jamais. A quoi bon... :ugeek:
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#40
Tu as fait une IA décisionnelle ?
 
Haut Bas