October 14, 20169 yr Salut voila je reprend le bot depuis peu avec wrotation pour faire du donjon et j'aurais besoin d'aide pour créer un fight classe heal pour mon paladin ainsi que quelque petite questions sur le fonctionnement du module wrotation. J'ai créer un fight classe pour la spécialisation tank il marche super bien mais quand a la spé heal impossible de la faire fonctionner il ne ce passe rien a chaque fois que je lance la rotation j'ai essayer plusieurs paramètres et conditions mais toujours rien le plus frustrant dans tout sa c'est que je n'arrive pas a comprendre le fonctionnement de ce type de rotation pour heal. Je ne comprend pas si il faut target un allié pour que le bot heal ou si il gère les targets automatiquement je ne sait pas trop qu'elle condition et paramètre utiliser pour un fight classe heal en donjon avec wrotation. si quelqu'un aurait une une explication a me donner pour me mieux comprendre ou un petit exemple de fight classe basic pour un heal en donjon je prend. Sinon , je voulais savoir aussi si wrotation etais utilisable en arene cotée et raid ? Voila merci d'avance pour vos réponses.
October 15, 20169 yr Author toujours pas de réponses :/ ? j'ai un peux avancer j'ai réussie a faire marcher quelque sort mais pas comme je veux le bot ne heal pas mes compagnon dans le groupe mais lui seul quand je target un ennemi je ne comprend pas j'ai vraiment besoin d'aide ^^
October 16, 20169 yr using System.Configuration; using System.IO; using System.Linq; using System.Threading; using System.Xml; using robotManager; using robotManager.FiniteStateMachine; using robotManager.Helpful; using wManager.Wow.Class; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; using wManager.Wow.Bot.States; using Timer = robotManager.Helpful.Timer; using wManager.Wow.Enums; using MemoryRobot; public class Main : ICustomClass { public float Range { get { return 40; } } private RestoDruid _RestoDruid; public void Initialize() { _RestoDruid = new RestoDruid(); _RestoDruid.Pulse(); } public void Dispose() { if (_RestoDruid != null) { _RestoDruid.Stop(); } } public void ShowConfiguration() { MessageBox.Show("No Configuration for this Routine"); } } public class RestoDruid { private bool _isLaunched; public bool IsLaunched { get { return _isLaunched; } set { _isLaunched = value; } } public void Pulse() { _isLaunched = true; var thread = new Thread(RoutineThread) { Name = "RestoDruid_FightClass" }; thread.Start(); } public void Stop() { _isLaunched = false; Logging.WriteFight("Stop 'RestoDruid'"); } void RoutineThread() { Logging.WriteFight("'RestoDruid' Started"); while (_isLaunched) { Routine(); Thread.Sleep(10); // Temps d'attante pour éviter d'utiliser trop le processeurs } Logging.WriteFight("'RestoDruid' Stopped"); } public uint Healthstone = 5512; public uint AncientRejuvenationPotion = 127836; public uint AncientManaPotion = 188303; void Routine() { if (ObjectManager.Me.IsMounted) return; if (ObjectManager.Me.IsCast) return; if (ObjectManager.Me.HealthPercent <= 45 && needToUseItem(Healthstone)) return; if (ObjectManager.Me.ManaPercentage <= 30 && needToUseItem(AncientManaPotion)) return; if (needWildGrowth()) return; if (needHealingTouch()) return; return; } private Spell _healingTouch; public RestoDruid() { _healingTouch = new Spell("Healing Touch"); Logging.WriteFight("'RestoDruid' by Pasterke loaded"); } public bool needHealingTouch() { if (!CanUseSpell(_healingTouch)) return false; if (getPartyMembers().Count() > 0) { try { var t = getPartyMembers().Where(p => p.IsAlive && p.GetDistance <= 40 && !TraceLine.TraceLineGo(p.Position) && p.HealthPercent <= RestoSettings.CurrentSetting.HealingTouch) .OrderBy(p => p.HealthPercent).FirstOrDefault(); if (t != null && !ObjectManager.Me.GetMove) { SpellManager.CastSpellByNameOn(_healingTouch.Name, t.Name); Logging.WriteFight(_healingTouch.Name + " on " + t.Name); return true; } } catch (Exception e) { Logging.WriteDebug(e.Message); } } return false; } public bool needWildGrowth() { if (!CanUseSpell(_wildGrowth)) return false; if (getPartyMembers().Count() > 0) { try { WoWUnit unit = new WoWUnit(0); var t = getPartyMembers().Where(p => p.IsAlive && p.GetDistance <= 40 && !TraceLine.TraceLineGo(p.Position) && p.HealthPercent <= RestoSettings.CurrentSetting.WildGrowth).OrderBy(p => p.HealthPercent).ToList(); if (t.Count() > 0) { int count = 0; int tel = 0; Vector3 mainPos = t.FirstOrDefault().Position; unit = new WoWUnit(t.FirstOrDefault().GetBaseAddress); //Logging.WriteFight(unit.Name); count = t.Count(p => p.IsAlive && p.Position.DistanceTo(mainPos) <= 30 && p.HealthPercent <= RestoSettings.CurrentSetting.WildGrowth); //Logging.WriteFight("count players(t): " + count + " aantal leden: " + getPartyMembers().Count()); if (getPartyMembers().Count() > 5) { tel = 5; } else { tel = 3; } //Logging.WriteFight("tel variable: " + tel); if (count >= tel && !ObjectManager.Me.GetMove) { SpellManager.CastSpellByNameOn(_wildGrowth.Name, unit.Name); Logging.WriteFight("Casting: " + _wildGrowth.Name + " on: " + unit.Name); return true; } } } catch (Exception e) { Logging.WriteDebug(e.Message); } } return false; } bool CanUseSpell(Spell spell) { try { if (!spell.KnownSpell) return false; if (SpellManager.GetSpellCooldownTimeLeft(spell.Name) > 0) { return false; } return true; } catch (Exception e) { Logging.WriteDebug(e.Message); } return false; } public bool debuffExists(string debuff) { return (ObjectManager.Me.Guid == ObjectManager.Target.BuffCastedBy(debuff)); } public bool MeIsInParty { get { return getPartyMembers().Count() > 0 ? true : false; } } public bool myBuffExists(string buff, WoWUnit unit) { return unit.BuffCastedByAll(buff).Contains(ObjectManager.Me.Guid); } public bool hasMyHot(WoWUnit unit) { return unit.BuffCastedByAll("Regrowth").Contains(ObjectManager.Me.Guid) || unit.BuffCastedByAll("Rejuvenation").Contains(ObjectManager.Me.Guid) || unit.BuffCastedByAll("Wild Growth").Contains(ObjectManager.Me.Guid); } public IEnumerable<WoWUnit> getPartyMembers() { var units = new List<WoWUnit>(); var partyMembers = Party.GetPartyGUIDHomeAndInstance(); if (partyMembers.Any()) { foreach (Int128 u in partyMembers) { var un = new WoWUnit(ObjectManager.GetObjectByGuid(u).GetBaseAddress); units.Add(un); } units.Add(ObjectManager.Me); } return units; } public string GetTankPlayerName() { if (Usefuls.MapZoneName == "Proving Grounds") return "Oto the Protector"; var lua = new[] { "partyTank = \"\";", "for groupindex = 1,MAX_PARTY_MEMBERS do", " if (UnitInParty(\"party\" .. groupindex)) then", " local role = UnitGroupRolesAssigned(\"party\" .. groupindex);", " if role == \"TANK\" then", " local name, realm = UnitName(\"party\" .. groupindex);", " partyTank = name;", " return;", " end", " end", "end", }; return Lua.LuaDoString(lua, "partyTank"); } public bool needToUseItem(uint itemEntry) { if (!ItemsManager.HasItemById(itemEntry)) return false; if (Bag.GetContainerItemCooldown((int)itemEntry) > 0) return false; try { Lua.LuaDoString("local name = GetItemInfo(" + itemEntry + "); RunMacroText('/use ' .. name);"); } catch (Exception e) { Logging.WriteDebug("Use Item => " + e.Message); } return true; } public WoWUnit GetPartyTank() { if (getPartyMembers().Count() > 0) { try { var p = new WoWUnit(0); var playerName = GetTankPlayerName(); if (!string.IsNullOrWhiteSpace(playerName)) { playerName = playerName.ToLower().Trim(); var party = getPartyMembers(); foreach (var woWPlayer in party) { if (woWPlayer.Name.ToLower() == playerName) { return p = new WoWUnit(woWPlayer.GetBaseAddress); } } } } catch (Exception e) { Logging.WriteDebug(e.Message); } } return null; } } Example comment coder une routine avec C#.
October 16, 20169 yr Author Quote Merci a toi pour cette config mais je ne suis pas très familier avec le langage c# et la programmation en général :D je penser plus a un fichier xml ^^ sinon pour etre plus clair dans mes problème et vu que je n'est jamais vu fonctionner une rotation en heal je ne sait pas trop comment sa se passe. Deja mon plus gros probleme c'est quand je lance ma rotation rien ne ce passe le bot ne heal personne. Si je target un ennemie pendant un combat la il va commencer a ce heal mais que lui pas les membres du groupe.Faut-il target un player en donjon pour que le bot heal ou il gere automatiquement les target ? j'ai essayer plusieur condition heal percent, target distance , target , in combat mais rien i fait.
October 19, 20169 yr Ainsi joint la fightclass que j'utilise pour le moment en solution vs2015. Sorry, c'est celle la que j'utilise : DruidRestoration.zip
October 19, 20169 yr On 16/10/2016 at 5:11 PM, lirty said: Merci a toi pour cette config mais je ne suis pas très familier avec le langage c# et la programmation en général :D je penser plus a un fichier xml ^^ sinon pour etre plus clair dans mes problème et vu que je n'est jamais vu fonctionner une rotation en heal je ne sait pas trop comment sa se passe. Deja mon plus gros probleme c'est quand je lance ma rotation rien ne ce passe le bot ne heal personne. Si je target un ennemie pendant un combat la il va commencer a ce heal mais que lui pas les membres du groupe.Faut-il target un player en donjon pour que le bot heal ou il gere automatiquement les target ? j'ai essayer plusieur condition heal percent, target distance , target , in combat mais rien i fait. Il me semble que les profils heal se programme en C# et ne peuvent pas être crée avec l'outil de creation de fightclass proposé par wrobot
October 19, 20169 yr Oui, il faut C# pour une fightclass heal. Mais vous avez ici un example. Ca marche tres bien pour druid restoration. Une fois que vous avez la mouture, c'est pas tres difficile pour l'adopter a une autre class heal.
October 22, 20169 yr Author Quote Salut merci pour vos réponse donc en gros je ne peux pas créer de fight classe pour heal si je ne sais pas coder en c# ? ^^
October 22, 20169 yr En attendant tu peux partir de ça, il faut enlever les sorts obsolètes et les changer les paramètres dans le setings du fight class (dans l'interface WRobot) ( vais vérifier que ça fonctionne encore en lfr)
October 22, 20169 yr Author Salut merci pour le lien je l'avais justement télécharger ce matin pour voir un peux est c'est très très complet merci a sont auteur c'est le genre de fight classe que je pourrais jamais faire sa :p en tout cas c'est propre et riche on en apprend. Enfin bon je me suis pas décourager depuis ce matin je me suis pencher dessus (j'ai pas vue le temps passer bientôt 6h que je suis dessus) et je commence a mieux comprendre j'arrive a décoder la majorité des ligne etc.. j'ai quelque problème de compréhension par contre avec les boucles et conditions pour configurer les sorts j'ai essayer de comparer plusieurs fightclass coder en c# mais j'ai l'impression que tout le monde ne code pas de la même façons sa me perturbe :d. Je te remercie d'avance AudreyH pour le fightclass que tu va poster ce soir il va beaucoup m'aider je pense ^^. ps : le fightclass basic de Droidz pour Hpal :
October 22, 20169 yr Oui c'est le premier sur lequel j'ai bossé avec Droidz :) Mais je trouve que celui de Cinda est bien pensé, pas très optimisé en temps mais il donne la façon de faire et est très suffisant Il y a même un framework qui date de début d'année qui est sympa Je modifie juste celui de Cinda pour qu'il fasse autre chose que du FoL :)
October 22, 20169 yr 179k on Ursoc LFR BestofFaith and Beacon doesnt work because of the gettank function, don't have time this WE to find out [Cindarella]-Holy Pala Beta Legion by AudreyH.cs
October 24, 20169 yr Author Salut AudreyH merci a toi j'ai tester et sa marche nickel je vais essayer de l'améliorer. et par contre personne ma repondu mais est ce que wrotation marche en arène cotée :D ?
October 24, 20169 yr On 22.10.2016 at 9:49 PM, AudreyH said: 179k on Ursoc LFR BestofFaith and Beacon doesnt work because of the gettank function, don't have time this WE to find out [Cindarella]-Holy Pala Beta Legion by AudreyH.cs Is there a reason why you create a new player object? Line 792: var u = members.First(); WoWPlayer healTarget = new WoWPlayer(u.GetBaseAddress); Why not just: WoWPlayer healTarget = members.First(); Sorry for offtopic
October 24, 20169 yr Pour l'arene oui, cela reste une rotation comme une autre, par contre ca necessite d'optimiser ca aux ptits oignons, pour entre autre prendre en compte les talents d'honneurs IMod: good point, but it was not my intention to correct the code, just show how to add spells and make it run WoWPlayer healTarget = members.First(); Tu peux modifier le code comme écrit ci-dessus
October 24, 20169 yr 5 hours ago, AudreyH said: Pour l'arene oui, cela reste une rotation comme une autre, par contre ca necessite d'optimiser ca aux ptits oignons, pour entre autre prendre en compte les talents d'honneurs IMod: good point, but it was not my intention to correct the code, just show how to add spells and make it run WoWPlayer healTarget = members.First(); Tu peux modifier le code comme écrit ci-dessus Yeah i saw it, the code is kinda messi no offense. What part doesn't work maybe i can help you out.
October 25, 20169 yr No offense :) it's not my code, i took the example form Cinda because it's very simple to understand, and modify it to run on legion I have my own rotation, but i'm not 100% happy with it, even i do high heal with it (I'm on MM) It's the tank part, i should take mine but between raid, expedition and reroll ... i'm a bit busy in game ;)
October 25, 20169 yr How do you guys test/tweak the healing class? Proving grounds or just in dungeon/raids? :)
October 25, 20169 yr I'm testing the stuff with an alt account or dungeons but i'm just at a private server
January 20, 20179 yr SVP quand on nous donne une réponse en C#, où faut il le placer/nommer dans Wrobot ?
Create an account or sign in to comment