Пример #1
0
        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)]);
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
 public void UpdateUnitReaction()
 {
     UnitReaction = FactionHandler.GetReaction(ObjectManager.Me, this);
 }