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); }
//复活 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); }
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); }
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); }
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)); }