示例#1
0
 public static string[] GetNames(
     this string fullName)
 {
     combatant.SetName(fullName);
     return(new[] { combatant.Name, combatant.NameFI, combatant.NameIF, combatant.NameII });
 }
示例#2
0
        private void RefreshCombatantListFromFFXIVPlugin()
        {
            dynamic list  = this.pluginScancombat.GetCombatantList();
            var     count = (int)list.Count;

            var newList       = new List <Combatant>(count);
            var newDictionary = new Dictionary <uint, Combatant>(count);
            var player        = default(Combatant);

            var pcCount = 0;

            foreach (dynamic item in list.ToArray())
            {
                if (item == null)
                {
                    continue;
                }

                var combatant = new Combatant();

                combatant.ID        = (uint)item.ID;
                combatant.OwnerID   = (uint)item.OwnerID;
                combatant.Job       = (byte)item.Job;
                combatant.type      = (ObjectType)((byte)item.type);
                combatant.Level     = (byte)item.Level;
                combatant.CurrentHP = (int)item.CurrentHP;
                combatant.MaxHP     = (int)item.MaxHP;
                combatant.CurrentMP = (int)item.CurrentMP;
                combatant.MaxMP     = (int)item.MaxMP;
                combatant.CurrentTP = (short)item.CurrentTP;

                combatant.IsCasting           = (bool)item.IsCasting;
                combatant.CastBuffID          = (int)item.CastBuffID;
                combatant.CastDurationCurrent = (float)item.CastDurationCurrent;
                combatant.CastDurationMax     = (float)item.CastDurationMax;

                // 扱うプレイヤー数の最大数を超えたらカットする
                if (combatant.type == ObjectType.PC)
                {
                    pcCount++;
                    if (pcCount >= MaxPCCount)
                    {
                        continue;
                    }
                }

                this.SetSkillName(combatant);

                combatant.PosX = (float)item.PosX;
                combatant.PosY = (float)item.PosY;
                combatant.PosZ = (float)item.PosZ;

                var name = (string)item.Name;

                // 名前を登録する
                // TYPEによって分岐するため先にTYPEを設定しておくこと
                combatant.SetName(name);

                if (player == null)
                {
                    player = combatant;
                }

                combatant.Player = player;

                newList.Add(combatant);
                newDictionary.Add(combatant.ID, combatant);
            }

            lock (this.combatantListLock)
            {
                var addedCombatants =
                    this.combatantList == null?
                    newList.ToArray() :
                        newList
                        .Where(x => !this.combatantList.Any(y => y.ID == x.ID))
                        .ToArray();

                this.combatantList       = newList;
                this.combatantDictionary = newDictionary;

                if (addedCombatants.Any())
                {
                    Task.Run(() => this.OnAddedCombatants(new AddedCombatantsEventArgs(addedCombatants)));
                }
            }

            lock (this.playerLocker)
            {
                this.player = player;
            }
        }