public UnitReaction GetUnitReaction(WowUnit wowUnitA, WowUnit wowUnitB) { AmeisenBotLogger.Instance.Log($"[{ProcessId.ToString("X", CultureInfo.InvariantCulture.NumberFormat)}]\tGetting relation of: {wowUnitA.Name} to {wowUnitB.Name}", LogLevel.Verbose); UnitReaction reaction = UnitReaction.Unknown; if (SharedCacheManager.Instance.ReactionCache.ContainsKey((wowUnitA.FactionTemplate, wowUnitB.FactionTemplate))) { AmeisenBotLogger.Instance.Log($"[{ProcessId.ToString("X", CultureInfo.InvariantCulture.NumberFormat)}]\tCached relation of: {wowUnitA.Name} to {wowUnitB.Name} is {SharedCacheManager.Instance.ReactionCache[(wowUnitA.FactionTemplate, wowUnitB.FactionTemplate)].ToString()}", LogLevel.Verbose); return(SharedCacheManager.Instance.ReactionCache[(wowUnitA.FactionTemplate, wowUnitB.FactionTemplate)]);
/// <summary> /// Executing the action, beginning the battle, only showing the battle if the player is a part of the battle. /// </summary> public override void execute() { //todo not show battle if not involved Reaction reaction = Gm.Reactions[pos.x, pos.y]; if (reaction.HasPreReact()) { reaction = reaction.PreReaction; } if (reaction.GetType() == typeof(HeroMeetReact)) { HeroMeetReact hmr = (HeroMeetReact)reaction; Gm.enterCombat(15, 11, Gm.getPlayer(playerID).Heroes[heroID], hmr.Hero); } else { UnitReaction ur = (UnitReaction)reaction; Gm.enterCombat(15, 11, Gm.getPlayer(playerID).Heroes[heroID], ur.Units, true); } }
/// <summary> /// Check the LuaUnit for its reaction to you /// </summary> /// <param name="luaUnit">luaunit to check</param> /// <returns>wether the unit reacts friendly or not</returns> public static bool IsFriendly(LuaUnit luaUnit) { UnitReaction reaction = AmeisenCore.GetUnitReaction(luaUnit); switch (reaction) { case UnitReaction.FRIENDLY: return(true); case UnitReaction.HONORED: return(true); case UnitReaction.REVERED: return(true); case UnitReaction.EXALTED: return(true); default: return(false); } }
/// <summary> /// Renders nearby units and players /// </summary> /// <param name="radarCanvas"></param> /// <param name="radarBackBuffer"></param> /// <param name="player"></param> /// <param name="objMgr"></param> /// <param name="targetGUID"></param> /// <param name="ci"></param> public static void BasicRadar( RadarCanvas radarCanvas, Bitmap radarBackBuffer, GameObject player, GameObjectManager objMgr, Int64 targetGUID, ControlInterface ci ) { using (Graphics g = Graphics.FromImage(radarBackBuffer)) { g.Clear(Color.Beige); int width = radarCanvas.Width; int height = radarCanvas.Height; int baseX = width / 2; int baseY = height / 2; Vector3 playerCoordinates = player.Coordinates; float px = playerCoordinates.x; float py = playerCoordinates.y; foreach (GameObject obj in objMgr.Where(gameObj => gameObj.GetAddress() != player.GetAddress() && (gameObj.Type == GameObjectType.Unit || gameObj.Type == GameObjectType.Player))) { /* map game coords to radar screen */ Vector3 objCoords = obj.Coordinates; float dx = objCoords.x - px; float dy = objCoords.y - py; /* rotate object */ float angleRad = player.Rotation + (float)(Math.PI / 2); float objScreenX = (float)-((dx * Math.Cos(-angleRad)) - (dy * Math.Sin(-angleRad))); float objScreenY = (float)((dx * Math.Sin(-angleRad)) + (dy * Math.Cos(-angleRad))); objScreenX += baseX; objScreenY += baseY; Brush brush; if (obj.GUID == targetGUID) { brush = RadarCanvas.TargetBrush; goto shape; } if (obj.Health > 0) { UnitReaction reaction = ci.remoteControl.CGUnit_C__UnitReaction(player.GetAddress(), obj.GetAddress()); if (reaction > UnitReaction.Neutral) { brush = RadarCanvas.FriendlyUnitBrush; goto shape; } if (obj.IsTaggedByOther()) { brush = RadarCanvas.TaggedByOtherUnitBrush; goto shape; } if (reaction == UnitReaction.Neutral) { brush = RadarCanvas.NeutralUnitBrush; } else { brush = RadarCanvas.UnfriendlyUnitBrush; } } else { if (obj.IsLootable()) { brush = RadarCanvas.LootableUnitBrush; } else { brush = RadarCanvas.NonLootableUnitBrush; } } shape: Font nameFont; using (Pen pen = new Pen(brush)) { if (obj.Type == GameObjectType.Player) { if (objCoords.z > playerCoordinates.z) { g.FillEllipse(brush, objScreenX, objScreenY, 8f, 8f); } else { g.DrawEllipse(pen, objScreenX, objScreenY, 8f, 8f); } nameFont = RadarCanvas.PlayerNameFont; } else { g.DrawRectangle(pen, objScreenX, objScreenY, 5f, 5f); nameFont = RadarCanvas.UnitFont; } } g.DrawString( ci.remoteControl.GetUnitName(obj.GetAddress()), nameFont, brush, objScreenX - 8, objScreenY - 18); } // player triangle g.DrawLine(RadarCanvas.PlayerPen, baseX, baseY - 15, baseX + 5, baseY); g.DrawLine(RadarCanvas.PlayerPen, baseX + 5, baseY, baseX - 5, baseY); g.DrawLine(RadarCanvas.PlayerPen, baseX - 5, baseY, baseX, baseY - 15); } }
public void UpdateUnitReaction() { UnitReaction = FactionHandler.GetReaction(ObjectManager.Me, this); }