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); }
// 退出透明状态 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; } }
/// <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); }
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(); } }
/// <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); }
/// <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); }
/// <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(); } } } }
/// <summary> /// 是否具备某种战斗状态 /// </summary> public bool HasBattleState(BattleStatusType type) { return(FlagOperate.HasFlag(mCurBattleState, (int)type)); }