Пример #1
0
        public virtual string LocalPlayerWholeName(LocalPlayer actor)
        {
            var name = string.Empty;

            if (FlagOperate.HasFlag((int)NameFlag, (int)InstanceActorNameFlag.Society))
            {
                name += LocalPlayerSocietyName(actor);
            }

            if (FlagOperate.HasFlag((int)NameFlag, (int)InstanceActorNameFlag.SvrId))
            {
                name += PlayerSvrName(actor);
            }

            // name += LocalPlayerName(actor);

            name = actor.UserName;

            if (FlagOperate.HasFlag((int)NameFlag, (int)InstanceActorNameFlag.Totem))
            {
                // name += LocalPlayerTotemName(actor);
            }

            uint nameColor = PKModeManagerEx.Instance.LocalPlayerNameColor;

            ActorHelper.GetPKColorName(nameColor, ref name, true);

            return(name);
        }
Пример #2
0
 // 退出透明状态
 private void ExitTranparenceState()
 {
     if (FlagOperate.HasFlag(mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_STransparenceEffects) &&
         !FlagOperate.HasFlag(mCurBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_STransparenceEffects))
     {
         mOwner.Alpha = 1.0f;
     }
 }
Пример #3
0
        /// <summary>
        /// 角色死亡后需要删除的buff
        /// </summary>
        public bool DelAllBuff()
        {
            Dictionary <uint, Buff> .Enumerator kEnumerator = mBuffMap.GetEnumerator();
            Buff buff;

            while (kEnumerator.MoveNext())
            {
                buff = kEnumerator.Current.Value;
                if (!buff.NeedDel)
                {
                    if (buff.OwnBuffInfo != null &&
                        FlagOperate.HasFlag((int)buff.OwnBuffInfo.buff_flags, (int)Buff.BuffFlags.AF_RECOVERY_AFTER_DIE))
                    {
                        buff.Delete();
                    }
                }
            }

            // 死亡后BuffCtrl不更新,所以需要立即删除buff
            Update();

            return(true);
        }
Пример #4
0
        public void HandleAppear(PkgNwarMove appear, uint version, List <PkgKv> buffs, uint appear_bit)
        {
            DeadTime = 0f;

            var redundancy_appear = false;

            if (AppearInfo != null)
            {
                redundancy_appear = true;
            }

            AppearInfo = appear;
            BuffList   = buffs;
            AppearBit  = appear_bit;

            if (Actor != null)
            {
                if (FlagOperate.HasFlag(appear_bit, GameConst.APPEAR_BIT_IS_DEAD))// 初始就是死亡状态
                {
                    if (!Actor.IsDead())
                    {
                        Actor.BeattackedCtrl.KillSelf();
                    }
                }
                else
                {
                    if (Actor.IsDead())
                    {
                        Actor.Relive();
                    }
                }

                // Actor已经创建了,直接更新下就好
                var unit_scale = GlobalConst.UnitScale;
                var x          = AppearInfo.pos.px * unit_scale;
                var z          = AppearInfo.pos.py * unit_scale;
                var pos        = new Vector3(x, RoleHelp.GetHeightInScene(Actor.ActorId, x, z), z);

                Actor.transform.position = pos;

                // 进入AOI视野增加buff
                if (BuffList != null)
                {
                    uint server_time = Game.Instance.ServerTime;
                    for (int i = 0; i < BuffList.Count; ++i)
                    {
                        uint end_time = (uint)(BuffList[i].v / 1000);
                        uint second   = 1;
                        if (end_time > server_time)
                        {
                            second = end_time - server_time;
                        }
                        //GameDebug.LogError(string.Format("servertime = {0} BuffList[i].v = {1} second = {2}", server_time, end_time, second));
                        Actor.BuffCtrl.AddBuff(BuffList[i].k, second);
                    }
                }

                if (AppearInfo.speed > 0)
                {
                    Actor.MoveCtrl.ReceiveWalkBegin(appear);
                }

                // version有变化的时候更新缓存
                if (Info != null && Info.version != version)
                {
                    SendUpdateInfo();
                }

                return;
            }

            // 如果已经appear过了,不要再处理了
            if (redundancy_appear)
            {
                return;
            }

            if (Info == null || IsInfoOutOfDate || Info.version != version)
            {
                // 获取玩家信息
                SendUpdateInfo();
                return;
            }

            if (!mIsWaittingCreateActor)
            {
                CreateActor();
            }
        }
Пример #5
0
        /// <summary>
        /// 处理actor创建成功
        /// </summary>
        /// <param name="actor"></param>
        public override void HandleActorCreate(Actor actor)
        {
            base.HandleActorCreate(actor);

            mActorUID = actor.UID;

            if (Actor == null)
            {
                return;
            }

            // 设置玩家坐标
            Actor.Stop();

            if (AppearInfo == null)
            {
                GameDebug.LogError("HandleActorCreate AppearInfo == null, uuid = " + UUID);
                return;
            }

            var unit_scale = GlobalConst.UnitScale;
            var x          = AppearInfo.pos.px * unit_scale;
            var z          = AppearInfo.pos.py * unit_scale;
            var pos        = new Vector3(x, RoleHelp.GetHeightInScene(Actor.ActorId, x, z), z);

            //pos = InstanceHelper.ClampInWalkableRange(pos);

            Actor.transform.position = pos;

            // 进入AOI视野增加buff
            if (BuffList != null)
            {
                uint server_time = Game.Instance.ServerTime;
                for (int i = 0; i < BuffList.Count; ++i)
                {
                    uint end_time = (uint)(BuffList[i].v / 1000);
                    uint second   = 1;
                    if (end_time > server_time)
                    {
                        second = end_time - server_time;
                    }
                    //GameDebug.LogError(string.Format("servertime = {0} BuffList[i].v = {1} second = {2}", server_time, end_time, second));
                    Actor.BuffCtrl.AddBuff(BuffList[i].k, second);
                }
            }

            if (FlagOperate.HasFlag(AppearBit, GameConst.APPEAR_BIT_IS_DEAD))// 初始就是死亡状态
            {
                if (!Actor.IsDead())
                {
                    Actor.BeattackedCtrl.KillSelf();
                }
            }
            else
            {
                if (Actor.IsDead())
                {
                    Actor.Relive();
                }
            }

            if (AppearInfo.speed > 0)
            {
                Actor.MoveCtrl.ReceiveWalkBegin(AppearInfo);
            }

            if (Info == null)
            {
                GameDebug.LogError("HandleActorCreate Info == null, uuid = " + UUID);
                return;
            }

            if (Info.war != null)
            {
                foreach (PkgAttrElm attrElm in Info.war.attr_elm)
                {
                    if (attrElm.attr == GameConst.AR_MAX_HP)
                    {
                        Actor.FullLife = attrElm.value;
                    }
                    else if (attrElm.attr == GameConst.AR_MAX_MP)
                    {
                        Actor.FullMp = attrElm.value;
                        Actor.CurMp  = Actor.FullMp; // 初始化时将蓝量加满
                    }
                }

                Actor.CurLife = Info.war.hp;
                // 进入AOI视野增加buff

                /*for(int i = 0; i < Info.war.buffs.Count; ++i)
                 * {
                 *  Actor.AuraCtrl.AddAura(Info.war.buffs[i].k);
                 * }*/
            }

            Actor.SubscribeActorEvent(Actor.ActorEvent.DEAD, OnActorDead);
            Actor.UpdateNameColor(Info.name_color);
            if (Info.war != null)
            {
                //Actor.PKLvProtect = Info.war.pk_lv_protect;
                Actor.UpdateByBitState(Info.bit_states);
            }

            WaittingLookExtList.Add(UUID);
        }
Пример #6
0
        /// <summary>
        /// 设置角色是否可见
        /// </summary>
        /// <param name="visible">If set to <c>true</c> b visible.</param>
        /// <param name="ignoreEffect">If set to <c>true</c> ignore effect.</param>
        public void SetActorVisible(bool visible, bool ignore_effect, bool force_show_headinfo, VisiblePriority priority)
        {
            if (visible)
            {
                m_VisiblePriorityBits = FlagOperate.RemoveFlag(m_VisiblePriorityBits, (int)(1 << (int)priority));

                for (int i = (int)priority + 1; i < (int)VisiblePriority.MAX; ++i)
                {
                    if (FlagOperate.HasFlag(m_VisiblePriorityBits, 1 << i))
                    {
                        return;
                    }
                }
            }
            else
            {
                m_VisiblePriorityBits = FlagOperate.AddFlag(m_VisiblePriorityBits, (int)(1 << (int)priority));
            }

            if (visible)
            {
                if (mVisibleMode == EVisibleMode.Visible)
                {
                    return;
                }
                mVisibleMode = EVisibleMode.Visible;
                mHasShow     = true;
                mOwner.mAvatarCtrl.SetVisible(true);
            }
            else
            {
                if (mVisibleMode == EVisibleMode.Invisible)
                {
                    return;
                }
                mVisibleMode = EVisibleMode.Invisible;
                mOwner.mAvatarCtrl.SetVisible(false);
            }

            if (force_show_headinfo)
            {
                if (InstanceManager.Instance.InstanceInfo != null && InstanceManager.Instance.InstanceInfo.mWarSubType == GameConst.WAR_SUBTYPE_BATTLE_FIELD)
                {
                    mOwner.ShowTextBehaviors(false);
                }
                else
                {
                    mOwner.ShowTextBehaviors(true);
                }
            }
            else
            {
                if (InstanceManager.Instance.InstanceInfo != null && InstanceManager.Instance.InstanceInfo.mWarSubType == GameConst.WAR_SUBTYPE_BATTLE_FIELD)
                {
                    mOwner.ShowTextBehaviors(false);
                }
                else
                {
                    mOwner.ShowTextBehaviors(visible);
                }
            }

            mOwner.GetBehavior <ShadowBehavior>().OnVisibleChange(mVisibleMode);

            if (mOwner.SkillEffectPlayer != null && ignore_effect == false)
            {
                mOwner.SkillEffectPlayer.ClearEffects();
                mOwner.SkillEffectPlayer.IsEnable = visible;
            }

            if (mOwner.StateEffectPlayer != null && ignore_effect == false)
            {
                mOwner.StateEffectPlayer.ClearEffects();
                mOwner.StateEffectPlayer.IsEnable = visible;
            }

            mOwner.OnBecomeVisible(visible);
        }
Пример #7
0
        /// <summary>
        /// 根据当前角色状态标志做对应的状态处理
        /// </summary>
        public void UpdateBattleState()
        {
            if (mOwner.GetModel() == null)
            {
                return;
            }

            if (mLastBattleState != mCurBattleState)
            {
                // 眩晕
                if (FlagOperate.HasFlag((int)mCurBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_DIZZY))
                {
                    if (!FlagOperate.HasFlag((int)mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_DIZZY))
                    {
                        mOwner.EnterDizzyState();
                    }
                }
                else
                {
                    if (FlagOperate.HasFlag((int)mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_DIZZY))
                    {
                        mOwner.ExitDizzyState();
                    }
                }

                // 混乱
                if (FlagOperate.HasFlag((int)mCurBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_CHAOS))
                {
                    if (!FlagOperate.HasFlag((int)mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_CHAOS))
                    {
                        mOwner.EnterChaosState();
                    }
                }
                else
                {
                    if (FlagOperate.HasFlag((int)mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_CHAOS))
                    {
                        mOwner.ExitChaosState();
                    }
                }

                // 隐身
                if (IsActorInvisiable)
                {
                    if (!mOwner.IsLocalPlayer)
                    {
                        if (!FlagOperate.HasFlag(mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_INVISIBLE))
                        {
                            mOwner.mVisibleCtrl.SetActorVisible(false, VisiblePriority.BUFF_STATE);
                        }
                    }
                    else
                    {
                        EnterTransparenceState();
                    }
                }
                //else
                {
                    if (!mOwner.IsLocalPlayer)
                    {
                        if (FlagOperate.HasFlag(mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_INVISIBLE))
                        {
                            mOwner.mVisibleCtrl.SetActorVisible(true, VisiblePriority.BUFF_STATE);
                        }
                    }
                    else
                    {
                        ExitTranparenceState();
                    }
                }


                // 无敌
                if (FlagOperate.HasFlag((int)mCurBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_SUPER))
                {
                    if (!FlagOperate.HasFlag((int)mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_SUPER))
                    {
                        mOwner.EnterSuperState();
                    }
                }
                else
                {
                    if (FlagOperate.HasFlag((int)mLastBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_SUPER))
                    {
                        mOwner.ExitSuperState();
                    }
                }
                mLastBattleState = mCurBattleState;
            }

            // 角色在地面上才能进入冰冻状态
            if (mOwner.IsGrounded())
            {
                // 冰冻
                if (FlagOperate.HasFlag((int)mCurBattleState, (int)BattleStatusType.BATTLE_STATUS_TYPE_FREEZE))
                {
                    if (!mbIsInFreeze)
                    {
                        mbIsInFreeze = true;
                        mOwner.EnterFreezeState();
                    }
                }
                else
                {
                    if (mbIsInFreeze)
                    {
                        mbIsInFreeze = false;
                        mOwner.ExitFreezeState();
                    }
                }
            }
        }
Пример #8
0
 /// <summary>
 /// 是否具备某种战斗状态
 /// </summary>
 public bool HasBattleState(BattleStatusType type)
 {
     return(FlagOperate.HasFlag(mCurBattleState, (int)type));
 }