C# System de recolte , petite probléme

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#1
Salut , alors que je mataquait a la partie "farm" de mon bot (pluto de euubot) je bloque totalement , enfaite je récupert bien la resource que je veut je me déplace dessu mai quand je veut la récolter sa fait rien Oo je comprent vraiment pas (pour utiliser la resource une fois que je suit dessu j'utilise un truque comme sa
Code:
      InteractiveUseRequestMessage pack = new InteractiveUseRequestMessage(_resLst[_tempIndex].Interactive.ElementId, _resLst[_tempIndex].Interactive.EnabledSkills[0].SkillInstanceUid);
            _host.SendToServer(pack);
juste aprés avoire recu le "BasicNoOperationMessage"


voici le code de mon module

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EuuBot.Relay.Plugins.Maps;
using EuuBot.Packets.Game.Interactive;
using EuuBot.Packets.Game.Context.Roleplay;
using EuuBot.Packets;
using EuuBot.Relay.PluginInterfaces.Host;
using EuuBot.Data.Game.Interactive;

namespace EuuBot.Relay.Plugins.Farme
{
    class Farm
    {
        private IPluginHost _host;
        private List<FarmResource> _resLst;
        private bool _farming = false;
        private bool _moving = false;
        private int _tempIndex = 0;
        private List<int> _SlillsList;

        public Farm(IPluginHost host)
        {
            _host = host;
            _resLst = new List<FarmResource>();
        }

        public void ProcessPacket(ServerPacket packet)
        {
            switch (packet.PacketType)
            {
                case  ServerPacketType.MapComplementaryInformationsDataMessage:
                    UpdateMap((MapComplementaryInformationsDataMessage)packet);
                    break;
                case ServerPacketType.InteractiveElementUpdatedMessage:
                    InteractiveElementUpdatedMessage mes = (InteractiveElementUpdatedMessage)packet;
                    if (mes.InteractiveElement.ElementId == _resLst[_tempIndex].Interactive.ElementId)
                    {
                        _resLst[_tempIndex].Interactive = mes.InteractiveElement;
                        if (_farming == true)
                        {
                            FindRes();
                        }
                    }
                    break;
                case ServerPacketType.BasicNoOperationMessage:
                    if (_moving==true)
                    {
                        EndMoving();
                        GetCurrentRes();
                    }
                    break;
            }
        }

        private void GetCurrentRes()
        {
            //_host.GetPlugin<Interactive.InteractivePlugin>().UseInteractiveElement(_resLst[_tempIndex].Interactive);
            InteractiveUseRequestMessage pack = new InteractiveUseRequestMessage(_resLst[_tempIndex].Interactive.ElementId, _resLst[_tempIndex].Interactive.EnabledSkills[0].SkillInstanceUid);
            _host.SendToServer(pack);
        }


        private void FindRes()
        {
            for (int i = 0; i < _SlillsList.Count; i++)
            {
                for (int ii = 0; i < _resLst.Count-1; ii++)
                {
                    FarmResource res = _resLst[ii];
                    if (res.Interactive.EnabledSkills.Count > 0)
                    {
                        if (res.Interactive.EnabledSkills[0].SkillId == _SlillsList[i])
                        {
                            _tempIndex = ii;
                            StartMoving(res.Stated.ElementCellId);
                            break;
                        }
                    }
                }
            }
        }

        public void SetSkillsList(List<int> SkillIdLst)
        {
            _SlillsList = SkillIdLst;
        }

        public void StartFarming()
        {
            _farming = true;
            FindRes();
        }

        public void StopFaming()
        {
            _farming = false;
        }

        private void EndMoving()
        {
            _moving = false;
        }

        private void StartMoving(short cellId)
        {
            _host.GetPlugin<Maps.MovementPlugin>().GoTo(cellId);
            _moving = true;
        }

        private void UpdateMap(MapComplementaryInformationsDataMessage packet)
        {
            foreach (InteractiveElement elem in packet.InteractiveElements)
            {
                foreach (StatedElement elems in packet.StatedElements)
                {
                    if (elem.ElementId == elems.ElementId)
                    {
                        FarmResource newRes = new FarmResource();
                        newRes.Interactive = elem;
                        newRes.Stated = elems;
                        _resLst.Add(newRes);
                    }
                }
            }
        }

    }
}
Et le code du plugin

Code:
using EuuBot.Packets;
using EuuBot.Relay.PluginInterfaces;
using EuuBot.Relay.PluginInterfaces.Host;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EuuBot.Packets.Game.Context.Roleplay;
using EuuBot.Data.Game.Interactive;

namespace EuuBot.Relay.Plugins.Farme
{
    [PluginInformation("Farm Plugin","Permet de récolter de resource sur la map","","1.0.0")] 
    class FarmPlugin : IConnectionPlugin,IFormPlugin 
    {

        private FrmFarme _frm;
        public Farm _farm;
        private IPluginHost _host;
        private List<FarmResource> _resLst;

        public bool ForceAutoLoad
        {
            get { return false; }
        }

        public PacketAction ProcessClientPacket(ClientPacket packet)
        {
            switch (packet.PacketType)
            {
      
                case ClientPacketType.InteractiveUseRequestMessage:
                    break;
            }
            return PacketAction.Keep;
        }

        public PacketAction ProcessServerPacket(ServerPacket packet)
        {
            _farm.ProcessPacket(packet);
            return PacketAction.Keep;
        }

        public void Initiate(IPluginHost host)
        {
            _farm = new Farm(host);
            _host = host;
        }

        public void Dispose()
        {
            
        }

        public System.Windows.Forms.Form GetPluginForm()
        {
            if (_frm == null)
                _frm = new FrmFarme(_host);
            return _frm;
        }
    }
}
et au cas ou le code de la class FarmeRessource
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EuuBot.Data.Game.Interactive;

namespace EuuBot.Relay.Plugins.Farme
{
    class FarmResource
    {
        private StatedElement _stated;
        private InteractiveElement _interactive;

        public StatedElement Stated
        {
            get
            {
                return _stated;
            }
            set
            {
                _stated = value;
            }
        }

        public InteractiveElement Interactive
        {
            get
            {
                return _interactive;
            }
            set
            {
                _interactive = value;
            }
        }
    }
 }
"FarmeResource"
et pour utiliser tout sa je fait

Code:
            List<int> SkillList = new List<int>();
            SkillList.Add(45);
            _host.GetPlugin<FarmPlugin>()._farm.SetSkillsList(SkillList);
            _host.GetPlugin<FarmPlugin>()._farm.StartFarming();
et une autre petite question, la liste des resource (arbre ble ext) c'est dans les d2o ou faut tout se taper a la main?
Ps. Sinnon trouvez vous que ma facon de programmer et convenable? car je débute en c# et je suit pas sur d'avoire une trés bonne architécture
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#2
Code:
 _farm = new Farm(host);
C'est pas new farme ? (Ta classe s'appelle farme, Donc bon D: )
 

Kyu

Staff
Membre du personnel
Inscrit
4 Octobre 2009
Messages
327
Reactions
8
#3
Namespace : Farme
Class : Farm
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#4
Mis a part sa vous avez rien trouver?

--Edite--

Je ne trouve toujours pas... je comprent pas T_T
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
on avait galeré sur ca avec nocebo et arty , en fait il y'a 2 objets pour les ressources , il faut se deplacer sur 1 et recolter l'autre (donc trier les 2 tableaux car biensur dans l'ordre normal ca correspond pas) , si jamais tu y arrives toujours pas je retrouverais le disque dur qui va bien sous la poussiere
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#6
tout dabord merci pour ta réponse rapide, donc si j'ais bien compri je fait une list avec toute les statedelement et une liste avec toutes les interactiveelement ensuite je me déplace sur le statedelement et j'utilise le interactiveelement?

si oui c'est ce que je pensait avoire fait oO
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#7
Re, ba enfaite je fait exactement sa Oo
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#8
pour reperer quelle stated element corespon a quelle interactiveelement j'utilise le ElementId c'est la bonne metode?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#9
sans tout ce qu'il y'a autour , les deplacements et tout le bordel qui va avec ca donnait ca avec i etant le numero de l'element a recolter:
... on choisi i
' Mémorisation de l'élémentid de la ressource dont le bot s'occupe
Bot.InteractiveElementId = Bot.MapComplementaryInformations.StatedElements(i).elementId
... deplacement ou pas
' On retest si la ressources est toujours utilisable car un joueur peut l'avoir prise
If Bot.MapComplementaryInformations.StatedElements(i).elementState = 0 Then

' On lance la récolte
Bot.Harvesting = True
LB_STATE.Invoke(LabelState, "Récolte", Color.Red)
Dim param1 As New DofusStream.DofusWriter(Me)
param1.WriteInt32(Bot.InteractiveElementId)
DofusStream.DofusWriter.Send(5001)
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#10
Merci sa devrais m'éclairer un peut, je vais tout recommencer et je te dit si sa a marcher .
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#11
ah et une question comme sa, je me déplace sur la resource mas enfaite il faudrais pas que je me déplace une case a coter?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#12
au depart on se deplacait sur la ressource et ca marchait aussi mais c'etait trop visible de se deplacer d'une case pour la ressource de la case adjacente alors que normalement on se deplace pas
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#13
Ok, mais pour couper un arbre par example c'est obliger non?
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#14
Je pence avoire trouver ,j'envoi mon interactiveuserequest apres le basicaskmessage alor q'uil fallait l'envoyer apres le gamemapmouvementconfirme je test sa et je vous dit
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#15
heu ... pour couper un arbre si tu te mets sur la cellule de l'arbre tu pourras te reco que 2h apres le message "vous etes banni"
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#16
Ah ok merci du conseil ^^' (j'en suit déja au 22éme compt banis depuis mon entrée dans le dévlopement dofus :D)

et sinon



Eurêka
Jais trouver c'estait bel est bien mon packet qui etait envoyer trop tard :D pour ce que sa interesse voila un code a peut prés fonctionelle

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EuuBot.Relay.Plugins.Maps;
using EuuBot.Packets.Game.Interactive;
using EuuBot.Packets.Game.Context.Roleplay;
using EuuBot.Packets;
using EuuBot.Relay.PluginInterfaces.Host;
using EuuBot.Data.Game.Interactive;

namespace EuuBot.Relay.Plugins.Farme
{
    class Farm
    {
        private IPluginHost _host;
        private List<FarmResource> _resLst;
        private bool _farming = false;
        private bool _moving = false;
        private int _tempIndex = 0;
        private List<int> _SlillsList;

        public Farm(IPluginHost host)
        {
            _host = host;
            _resLst = new List<FarmResource>();
        }

        public void ProcessCLientPacket(ClientPacket packet)
        {
            switch (packet.PacketType)
            {
                case ClientPacketType.GameMapMovementConfirmMessage:
                    if (_farming==true)
                    {
                        EndMoving();
                        GetCurrentRes();
                    }

                    break;
            }
        }

        public void ProcessPacket(ServerPacket packet)
        {
            switch (packet.PacketType)
            {
                case ServerPacketType.MapComplementaryInformationsDataMessage:
                    UpdateMap((MapComplementaryInformationsDataMessage)packet);
                    break;
                case ServerPacketType.InteractiveElementUpdatedMessage:
                    InteractiveElementUpdatedMessage mes = (InteractiveElementUpdatedMessage)packet;
                    if (mes.InteractiveElement.ElementId == _resLst[_tempIndex].Interactive.ElementId)
                    {
                        _resLst[_tempIndex].Interactive = mes.InteractiveElement;
                        if (_farming == true)
                        {
                            FindRes();
                        }
                    }
                    break;
            }
        }

        private void GetCurrentRes()
        {
            //_host.GetPlugin<Interactive.InteractivePlugin>().UseInteractiveElement(_resLst[_tempIndex].Interactive);
            InteractiveUseRequestMessage pack = new InteractiveUseRequestMessage(_resLst[_tempIndex].Interactive.ElementId, _resLst[_tempIndex].Interactive.EnabledSkills[0].SkillInstanceUid);
            _host.SendToServer(pack);
        }


        private void FindRes()
        {
            for (int i = 0; i < _SlillsList.Count; i++)
            {
                for (int ii = 0; i < _resLst.Count - 1; ii++)
                {
                    FarmResource res = _resLst[ii];
                    if (res.Interactive.EnabledSkills.Count > 0)
                    {
                        if (res.Interactive.EnabledSkills[0].SkillId == _SlillsList[i])
                        {
                            _tempIndex = ii;
                            StartMoving(res.Stated.ElementCellId);
                            break;
                        }
                    }
                }
            }
        }

        public void SetSkillsList(List<int> SkillIdLst)
        {
            _SlillsList = SkillIdLst;
        }

        public void StartFarming()
        {
            _farming = true;
            FindRes();
        }

        public void StopFaming()
        {
            _farming = false;
        }

        private void EndMoving()
        {
            _moving = false;
        }

        private void StartMoving(short cellId)
        {
            _host.GetPlugin<Maps.MovementPlugin>().GoTo(cellId);
            _moving = true;
        }

        private void UpdateMap(MapComplementaryInformationsDataMessage packet)
        {
            foreach (InteractiveElement elem in packet.InteractiveElements)
            {
                foreach (StatedElement elems in packet.StatedElements)
                {
                    if (elem.ElementId == elems.ElementId)
                    {
                        FarmResource newRes = new FarmResource();
                        newRes.Interactive = elem;
                        newRes.Stated = elems;
                        _resLst.Add(newRes);
                    }
                }
            }
        }

    }
}
merci beaucoup a toi (toons) pour m'avoire aider j'usque au bout :)
 
Haut Bas