private void SetNextTargetIfPossible()
    {
        while (allWithinRange.Count > 0)
        {
            List <GameObject> possibleNextTargets = new List <GameObject>(allWithinRange.OrderBy(e => Random.value));

            GameObject candidate = null;

            foreach (GameObject target in possibleNextTargets)
            {
                if (currentTarget != target && target != null && IsValidTarget(target, target.GetComponent <Collider2D>()))
                {
                    candidate = target;
                    break;
                }
            }

            if (candidate == null)
            {
                return;
            }

            //allWithinRange.Remove(candidate);
            if (candidate.activeSelf)
            {
                currentTarget = candidate;
                OnTargetChange?.Invoke(candidate);
                return;
            }
        }

        OnTargetChange?.Invoke(null);
    }
예제 #2
0
        private void UpdateTarget()
        {
            var closestNode = GetNodeClosestTo(Scene.FindEntity("Crosshair").Position);

            if (truckTargetNode != closestNode)
            {
                OnTargetChange?.Invoke();
            }

            truckTargetNode = closestNode;
        }
예제 #3
0
    void Update()
    {
        TargetData lastTargetData = currTargetData;

        currTargetData = getTarget();
        if (lastTargetData.target != currTargetData.target)
        {
            if (OnTargetChange != null)
            {
                OnTargetChange.Invoke(lastTargetData, currTargetData);
            }
            NotifyRaycastEnd(lastTargetData);
            NotifyRaycastStart(currTargetData);
        }
        NotifyRaycastStay(currTargetData);
    }
예제 #4
0
        private void CheckTarget(WoWUnit unit, ref WoWGuid prevGuid, string description, OnTargetChange onchg)
        {
            // there are moments where CurrentTargetGuid != 0 but CurrentTarget == null. following
            // .. tries to handle by only checking CurrentTarget reference and treating null as guid = 0
            if (unit == null)
            {
                if (prevGuid.IsValid)
                {
                    prevGuid = WoWGuid.Empty;
                    onchg(unit);
                    if (SingularSettings.Debug)
                        Logger.WriteDebug(description + ": changed to: (null)");
                }
            }
            else if (unit.Guid != prevGuid)
            {
                prevGuid = unit.Guid;
                onchg(unit);
                if (SingularSettings.Debug)
                {
                    //Logger.WriteDebug( "GuidInfo: {0}", unit.Guid.ToString());
                    //Logger.WriteDebug("GuidInfo: {0:X4} {1:X4} {2:X4} {3:X4}", unit.Guid.Highest, unit.Guid.Higher, unit.Guid.Lower, unit.Guid.Lowest);
                    string info = "";
                    if (Styx.CommonBot.POI.BotPoi.Current.Guid == Me.CurrentTargetGuid)
                        info += string.Format(", IsBotPoi={0}", Styx.CommonBot.POI.BotPoi.Current.Type);

                    if (Styx.CommonBot.Targeting.Instance.TargetList.Contains(Me.CurrentTarget))
                        info += string.Format(", TargetIndex={0}", Styx.CommonBot.Targeting.Instance.TargetList.IndexOf(Me.CurrentTarget) + 1);

                    string playerInfo = "N";
                    if (unit.IsPlayer)
                    {
                        WoWPlayer p = unit.ToPlayer();
                        playerInfo = string.Format("Y, Friend={0}, IsPvp={1}, CtstPvp={2}, FfaPvp={3}", Me.IsHorde == p.IsHorde, p.IsPvPFlagged, p.ContestedPvPFlagged, p.IsFFAPvPFlagged);
                    }
                    else
                    {
                        info += string.Format(", creature={0}, tagme={1}, tagother={2}, tapall={3}",
                            unit.CreatureType,
                            unit.TaggedByMe.ToYN(),
                            unit.TaggedByOther.ToYN(),
                            unit.TappedByAllThreatLists.ToYN()
                            );
                    }

                    Logger.WriteDebug(description + ": changed to: {0} lvl={1} h={2:F1}%, maxh={3}, d={4:F1} yds, box={5:F1}, boss={6}, trivial={7}, player={8}, attackable={9}, neutral={10}, hostile={11}, entry={12}, faction={13}, loss={14}, facing={15}, blacklist={16}, combat={17}, flying={18}, abovgrnd={19}" + info,
                        unit.SafeName(),
                        unit.Level,
                        unit.HealthPercent,
                        unit.MaxHealth,
                        unit.Distance,
                        unit.CombatReach,
                        unit.IsBoss().ToYN(),
                        unit.IsTrivial().ToYN(),
                        playerInfo,

                        unit.Attackable.ToYN(),
                        unit.IsNeutral().ToYN(),
                        unit.IsHostile.ToYN(),
                        unit.Entry,
                        unit.FactionId,
                        unit.InLineOfSpellSight.ToYN(),
                        Me.IsSafelyFacing(unit).ToYN(),
                        Blacklist.Contains(unit.Guid, BlacklistFlags.Combat).ToYN(),
                        unit.Combat.ToYN(),
                        unit.IsFlying.ToYN(),
                        unit.IsAboveTheGround().ToYN()
                        );
                }
            }
        }
예제 #5
0
        private void CheckTarget(WoWUnit unit, ref WoWGuid prevGuid, string description, OnTargetChange onchg)
        {
            // there are moments where CurrentTargetGuid != 0 but CurrentTarget == null. following
            // .. tries to handle by only checking CurrentTarget reference and treating null as guid = 0
            if (unit == null)
            {
                if (prevGuid.IsValid)
                {
                    prevGuid = WoWGuid.Empty;
                    onchg(unit);
                    if (SingularSettings.Debug)
                    {
                        Logger.WriteDebug(description + ": changed to: (null)");
                    }
                }
            }
            else if (unit.Guid != prevGuid)
            {
                prevGuid = unit.Guid;
                onchg(unit);
                if (SingularSettings.Debug)
                {
                    //Logger.WriteDebug( "GuidInfo: {0}", unit.Guid.ToString());
                    //Logger.WriteDebug("GuidInfo: {0:X4} {1:X4} {2:X4} {3:X4}", unit.Guid.Highest, unit.Guid.Higher, unit.Guid.Lower, unit.Guid.Lowest);
                    string info = "";
                    if (Styx.CommonBot.POI.BotPoi.Current.Guid == Me.CurrentTargetGuid)
                    {
                        info += string.Format(", IsBotPoi={0}", Styx.CommonBot.POI.BotPoi.Current.Type);
                    }

                    if (Styx.CommonBot.Targeting.Instance.TargetList.Contains(Me.CurrentTarget))
                    {
                        info += string.Format(", TargetIndex={0}", Styx.CommonBot.Targeting.Instance.TargetList.IndexOf(Me.CurrentTarget) + 1);
                    }

                    string playerInfo = "N";
                    if (unit.IsPlayer)
                    {
                        WoWPlayer p = unit.ToPlayer();
                        playerInfo = string.Format("Y, Friend={0}, IsPvp={1}, CtstPvp={2}, FfaPvp={3}", Me.IsHorde == p.IsHorde, p.IsPvPFlagged, p.ContestedPvPFlagged, p.IsFFAPvPFlagged);
                    }
                    else
                    {
                        info += string.Format(", creature={0}, tagme={1}, tagother={2}",
                                              unit.CreatureType,
                                              unit.TaggedByMe.ToYN(),
                                              unit.TaggedByOther.ToYN()
                                              );
                    }

                    Logger.WriteDebug(description + ": changed to: {0} lvl={1} h={2:F1}%, maxh={3}, d={4:F1} yds, box={5:F1}, boss={6}, trivial={7}, player={8}, attackable={9}, neutral={10}, hostile={11}, entry={12}, faction={13}, loss={14}, facing={15}, blacklist={16}, combat={17}, flying={18}, abovgrnd={19}" + info,
                                      unit.SafeName(),
                                      unit.Level,
                                      unit.HealthPercent,
                                      unit.MaxHealth,
                                      unit.Distance,
                                      unit.CombatReach,
                                      unit.IsBoss().ToYN(),
                                      unit.IsTrivial().ToYN(),
                                      playerInfo,

                                      unit.Attackable.ToYN(),
                                      unit.IsNeutral().ToYN(),
                                      unit.IsHostile.ToYN(),
                                      unit.Entry,
                                      unit.FactionId,
                                      unit.InLineOfSpellSight.ToYN(),
                                      Me.IsSafelyFacing(unit).ToYN(),
                                      Blacklist.Contains(unit.Guid, BlacklistFlags.Combat).ToYN(),
                                      unit.Combat.ToYN(),
                                      unit.IsFlying.ToYN(),
                                      unit.IsAboveTheGround().ToYN()
                                      );
                }
            }
        }
예제 #6
0
        private void _evaluteEvent(string parEvent, object[] parArgs)
        {
            if (OnEvent != null)
            {
                var args = new OnEventArgs(parEvent, parArgs);
                OnEvent.Invoke(this, args);
            }

            //Console.WriteLine(parEvent);
            //OUTPUTAssist.PrintEvent(parEvent, parArgs);
            if (parEvent == "PLAYER_TARGET_CHANGED")
            {
                OnTargetChange?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "QUEST_FINISHED")
            {
                if (QuestFrame.IsOpen)
                {
                    QuestFrame.Destroy();
                }

                if (QuestGreetingFrame.IsOpen)
                {
                    QuestGreetingFrame.Destroy();
                }
            }
            else if (parEvent == "QUEST_PROGRESS" ||
                     parEvent == "QUEST_COMPLETE" ||
                     parEvent == "QUEST_DETAIL")
            {
                DirectX.Instance.Execute(QuestFrame.Create, 100);
            }
            else if (parEvent == "QUEST_GREETING")
            {
                DirectX.Instance.Execute(QuestGreetingFrame.Create, 100);
            }
            else if (parEvent == "UNIT_LEVEL")
            {
                if ((string)parArgs[0] != "player")
                {
                    return;
                }
                LevelUp?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "PLAYER_MONEY")
            {
                OnMoneyChange?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "CHAT_MSG_LOOT")
            {
                // You receive loot: |cff9d9d9d|Hitem:7098:0:0:0|h[Splintered Tusk]|h|rx2.
                if (OnLoot == null)
                {
                    return;
                }
                var arg1      = (string)parArgs[0];
                var argArr    = arg1.Split('|');
                var itemId    = Convert.ToInt32(argArr[2].Split(':')[1]);
                var itemName  = argArr[3].Substring(2, argArr[3].Length - 3);
                var itemCount = 1;
                if (argArr[5].Length != 2)
                {
                    itemCount = Convert.ToInt32(argArr[5].Substring(2, argArr[5].Length - 3));
                }
                OnLoot.Invoke(this, new OnLootArgs(itemId, itemName, itemCount));
            }
            else if (parEvent == "OPEN_STATUS_DIALOG")
            {
                if (OnWrongLogin == null)
                {
                    return;
                }
                if (parArgs.Length != 2)
                {
                    return;
                }
                if ((string)parArgs[0] != "OKAY")
                {
                    return;
                }
                if ((string)parArgs[1] != "The information you have entered is not valid.")
                {
                    return;
                }
                OnWrongLogin.Invoke(this, new EventArgs());
            }
            else if (parEvent == "UPDATE_SELECTED_CHARACTER")
            {
                OnCharacterListLoaded?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "UPDATE_STATUS_DIALOG")
            {
                if (InServerQueue == null)
                {
                    return;
                }
                if (parArgs.Length != 2)
                {
                    return;
                }
                if (!((string)parArgs[0]).Contains("Position in queue:"))
                {
                    return;
                }
                if ((string)parArgs[1] != "Change Realm")
                {
                    return;
                }
                InServerQueue.Invoke(this, new EventArgs());
            }
            else if (parEvent == "GET_PREFERRED_REALM_INFO")
            {
                OnChooseRealm?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "DISCONNECTED_FROM_SERVER")
            {
                OnDisconnect?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "UI_ERROR_MESSAGE")
            {
                OnErrorMessage?.Invoke(this, new OnUiMessageArgs((string)parArgs[0]));
            }
            else if (parEvent == "UI_INFO_MESSAGE")
            {
                OnUiMessage?.Invoke(this, new OnUiMessageArgs((string)parArgs[0]));
            }
            else if (parEvent == "CHAT_MSG_SYSTEM")
            {
                OnSystemMessage?.Invoke(this, new OnUiMessageArgs((string)parArgs[0]));
            }
            else if (parEvent == "PLAYER_REGEN_ENABLED")
            {
                OnFightStop?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "PLAYER_REGEN_DISABLED")
            {
                OnFightStart?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "CHAT_MSG_COMBAT_HOSTILE_DEATH")
            {
                if (OnUnitKilled == null)
                {
                    return;
                }
                if (!((string)parArgs[0]).Contains("You have"))
                {
                    return;
                }
                OnUnitKilled.Invoke(this, new EventArgs());
            }
            else if (parEvent == "CHAT_MSG_SAY")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Say";
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];

                var args = new ChatMessageArgs(Enums.ChatSenderType.Player, chatTag, unitName, chatType, chatMessage);

                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_MONSTER_SAY")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Say";
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Npc, chatTag, unitName, chatType, chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_MONSTER_YELL")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Yell";
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Npc, chatTag, unitName, chatType, chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_YELL")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Yell";
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Player, chatTag, unitName, chatType, chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_CHANNEL")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Channel " + (int)parArgs[7];
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Player, chatTag, unitName, chatType, chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_RAID")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Raid";
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Player, chatTag, unitName, chatType, chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_GUILD")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Player, chatTag, unitName, "Guild", chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_PARTY")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Party";
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Player, chatTag, unitName, chatType, chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "CHAT_MSG_WHISPER")
            {
                if (OnChatMessage == null)
                {
                    return;
                }
                var unitName    = (string)parArgs[1];
                var chatType    = "Whisper";
                var chatTag     = (string)parArgs[5];
                var chatMessage = (string)parArgs[0];
                var args        = new ChatMessageArgs(Enums.ChatSenderType.Player, chatTag, unitName, chatType, chatMessage);
                OnChatMessage.Invoke(this, args);
            }
            else if (parEvent == "DUEL_REQUESTED")
            {
                OnDuelRequest?.Invoke(this, new OnRequestArgs((string)parArgs[0]));
            }
            else if (parEvent == "GUILD_INVITE_REQUEST")
            {
                if (OnGuildInvite == null)
                {
                    return;
                }
                var player = (string)parArgs[0];
                var guild  = (string)parArgs[1];
                OnGuildInvite.Invoke(this, new GuildInviteArgs(player, guild));
            }
            else if (parEvent == "TRADE_SHOW")
            {
                OnTradeShow?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "PARTY_INVITE_REQUEST")
            {
                OnPartyInvite?.Invoke(this, new OnRequestArgs((string)parArgs[0]));
            }
            else if (parEvent == "PLAYER_DEAD")
            {
                OnDeath?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "PLAYER_UNGHOST")
            {
                OnResurrect?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "CORPSE_IN_RANGE")
            {
                OnCorpseInRange?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "CORPSE_OUT_OF_RANGE")
            {
                OnCorpseOutOfRange?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "LOOT_OPENED")
            {
                LOOT_HANDLE(LootState.SHOW);
            }
            else if (parEvent == "LOOT_CLOSED")
            {
                LOOT_HANDLE(LootState.CLOSE);
            }
            else if (parEvent == "UNIT_AURA")
            {
                AuraChanged?.Invoke(this, new AuraChangedArgs((string)parArgs[0]));
            }
            else if (parEvent == "CHAT_MSG_SKILL")
            {
                OnSkillMessage?.Invoke(this, new OnUiMessageArgs((string)parArgs[0]));
            }
            else if (parEvent == "CHAT_MSG_COMBAT_XP_GAIN")
            {
                if (OnXpGain == null)
                {
                    return;
                }
                var str   = (string)parArgs[0];
                var regex = new Regex("(?i)you gain [0-9]+");
                var match = regex.Match(str);
                regex = new Regex("[0-9]+");
                str   = regex.Match(match.Value).Value;
                OnXpGain?.Invoke(this, new OnXpGainArgs(Convert.ToInt32(str)));
            }
            else if (parEvent == "UNIT_MODEL_CHANGED")
            {
            }
            else if (parEvent == "GOSSIP_SHOW")
            {
                GOSSIP_SHOW();
            }
            else if (parEvent == "GOSSIP_CLOSED")
            {
                GOSSIP_CLOSED();
            }
            else if (parEvent == "MERCHANT_SHOW")
            {
                Console.WriteLine("MERCHANT_SHOW occured");
                MERCHANT_HANDLE(MerchantState.SHOW);
            }
            else if (parEvent == "MERCHANT_CLOSED")
            {
                MERCHANT_HANDLE(MerchantState.CLOSE);
            }
            else if (parEvent == "TAXIMAP_OPENED")
            {
                TAXIMAP_OPENED();
            }
            else if (parEvent == "TAXIMAP_CLOSED")
            {
                TAXIMAP_CLOSED();
            }
            else if (parEvent == "TRAINER_SHOW")
            {
                TRAINER_SHOW();
            }
            else if (parEvent == "TRAINER_CLOSED")
            {
                TRAINER_CLOSED();
            }
            else if (parEvent == "BANKFRAME_OPENED")
            {
                OnBankFrameOpen?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "BANKFRAME_CLOSED")
            {
                OnBankFrameClosed?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "MAIL_SHOW")
            {
                OnMailboxOpen?.Invoke(this, new EventArgs());
            }
            else if (parEvent == "MAIL_CLOSED")
            {
                OnMailboxClosed?.Invoke(this, new EventArgs());
            }
        }