Ejemplo n.º 1
0
 public virtual void OnDie()
 {
     RPC.PackageWriter pkg = new RPC.PackageWriter();
     //Wuxia.H_RpcRoot.smInstance.HIndex(pkg, Id).RPC_ChangeState(pkg, (byte)eFsmState.Die, mDeadBodyTime);
     Wuxia.H_RpcRoot.smInstance.HIndex(pkg, Id).RPC_Killed(pkg, CurrImpact.Skill.ID, CurrImpact.Skill.Level, CurrImpact.Owner.Id);
     HostMap.SendPkg2Clients(null, this.GetPosition(), pkg);
 }
Ejemplo n.º 2
0
        //复活
        public void Relive(eReliveMode mode)
        {
            this.CurHP = this.FinalRoleValue.MaxHP;
            this.CurMP = this.FinalRoleValue.MaxMP;

            var pkg = new RPC.PackageWriter();

            //Wuxia.H_RpcRoot.smInstance.RPC_OnChiefRoleRelive(pkg, GetPosition().X, this.GetPosition().Z);
            //pkg.DoCommandPlanes2Client(Planes2GateConnect, ClientLinkId);
            Wuxia.H_RpcRoot.smInstance.HIndex(pkg, Id).RPC_Relive(pkg, GetPosition().X, this.GetPosition().Z);
            HostMap.SendPkg2Clients(null, this.GetPosition(), pkg);
        }
Ejemplo n.º 3
0
        public virtual void UpdateAttr()
        {
            if (mUpdateAttrList.Count == 0)
            {
                return;
            }

            if (CurHP > FinalRoleValue.MaxHP)
            {
                CurHP = FinalRoleValue.MaxHP;
                OnAttrChanged(eSkillAttrIndex.HP);
            }
            if (CurMP > FinalRoleValue.MaxMP)
            {
                CurMP = FinalRoleValue.MaxMP;
                OnAttrChanged(eSkillAttrIndex.MP);
            }
            List <AttrStruct> attrs = new List <AttrStruct>();

            foreach (var idx in mUpdateAttrList)
            {
                if (!IsBroadCastAttr(idx))
                {
                    continue;
                }

                AttrStruct attr = new AttrStruct();
                if (!GetAttrStruct(ref attr, idx))
                {
                    continue;
                }

                attrs.Add(attr);
            }
            mUpdateAttrList.Clear();
            if (attrs.Count == 0)
            {
                return;
            }

            RPC.PackageWriter pkg = new RPC.PackageWriter();
            RPC.DataWriter    dw  = new RPC.DataWriter();
            RPC.IAutoSaveAndLoad.DaraWriteList <AttrStruct>(attrs, dw, true);
            Wuxia.H_RpcRoot.smInstance.HIndex(pkg, this.Id).RPC_UpdateRoleAttr(pkg, dw);
            HostMap.SendPkg2Clients(null, GetPosition(), pkg);
        }
Ejemplo n.º 4
0
 public virtual bool OnValueChanged(string name, RPC.DataWriter value)
 {
     switch (name)
     {
     case "RoleHp":
     case "RoleMaxHp":
     case "RoleLevel":                        //这些都是玩家要看到的
         if (!HostMap.IsNullMap)
         {
             RoleActor ignore = name == "RoleHp" && null != CurrImpact && CurrImpact is AttackImpact ? CurrImpact.Owner : null;
             var       pkg    = new RPC.PackageWriter();
             Wuxia.H_RpcRoot.smInstance.HIndex(pkg, this.Id).RPC_UpdateRoleValue(pkg, name, value);
             HostMap.SendPkg2Clients(ignore, GetPosition(), pkg);
         }
         return(true);
     }
     return(false);
 }
Ejemplo n.º 5
0
        public bool CastSpell(SkillActive skill, ulong targetId)
        {
            if (null == skill || null == skill.Data)
            {
                return(false);
            }

            skill.mResult = eSkillResult.CastFailed;

            if (mPlayerStatus.IsHasBuffStatus(eBuffStatusType.眩晕))
            {
                return(false);
            }

            if (skill.mStatus != eSkillStatus.Valid)
            {
                return(false);
            }

            if (skill.mStep != eSkillStep.Init)
            {
                return(false);
            }

            //检查条件
            RoleActor target = mHostMap.GetRole(targetId);

            if (null != skill.Checker)
            {
                skill.mStep = eSkillStep.Check;
                //预选择目标检查
                if (!skill.Checker.PreSelectTarget(this, skill, target))
                {
                    skill.Reset();
                    return(false);
                }
                if (null != target)
                {
                    skill.mDistance = Util.DistanceH(target.GetPosition(), GetPosition());
                }
                if (!skill.Checker.CheckSkillCondition(this, skill))
                {
                    skill.Reset();
                    return(false);
                }
            }

            //检查消耗
            if (null != skill.Consumer)
            {
                skill.mStep = eSkillStep.Consume;
                if (!skill.Consumer.CheckSkillConsume(this, skill))
                {
                    skill.Reset();
                    return(false);
                }
                //实际消耗
                //if (!skill.Consumer.SkillConsume(this, skill))
                //{
                //    skill.Reset();
                //    return false;
                //}
            }

            if (skill.SkillData.cdTime > 0)
            {
                //技能CD
                float cdTime = skill.SkillData.cdTime;
                cdTime -= GameSet.Instance.SkillCDTimeSync;
                skill.SkillCD.AddCoolDown(cdTime, Time.time + cdTime);
                float protectTime = new float[] { skill.SkillData.protectTime, CSCommon.SCDefine.cCommonCD }.Max();
                protectTime -= GameSet.Instance.SkillCDTimeSync;
                SkillCD.AddCoolDown(protectTime, Time.time + protectTime);
            }

            //广播技能效果
            var pkg = new RPC.PackageWriter();

            Wuxia.H_RpcRoot.smInstance.HIndex(pkg, Id).RPC_SpellSkill(pkg, skill.ID, skill.mTargetId);
            HostMap.SendPkg2Clients(null, this.GetPosition(), pkg);

            mCurrSkill = skill;

            //实际释放技能
            return(DoCastSkill(skill));
        }