/// <summary> /// 反弹伤害无法触发HitTarget事件 /// </summary> /// <param name="attacker">Attacker.</param> /// <param name="WeaponDamagePCT">Weapon damage PC.</param> /// <param name="enemy">Enemy.</param> public static void DoDamage(GameObject attacker, int WeaponDamagePCT, GameObject enemy, bool isStaticShoot) { if (enemy.GetComponent <MyAnimationEvent>() != null) { if (enemy.GetComponent <NpcAttribute>().IsMine()) { var attribute = attacker.GetComponent <NpcAttribute>(); var rate = 1; bool isCritical = false; //在基础攻击力上面提升的比例 //调整基础比例 var damage = (int)(attribute.GetAllDamage(isStaticShoot) * (WeaponDamagePCT / 100.0f) * rate); Log.Sys("calculate Damage Rate SimpleDamage " + WeaponDamagePCT); bool isStaticShootBuff = false; if (!isCritical) { isStaticShootBuff = isStaticShoot; } NetDateInterface.FastDamage( attribute.GetComponent <KBEngine.KBNetworkView>().GetServerID(), enemy.GetComponent <KBEngine.KBNetworkView>().GetServerID(), damage, isCritical, isStaticShootBuff ); enemy.GetComponent <MyAnimationEvent>().OnHit(attacker, damage, isCritical, isStaticShootBuff); } } }
//TODO::支持单人副本和多人副本功能 取决于 是否直接通知MyAnimationEvent //根据技能信息和玩家信息 得到实际的 伤害 NpcAttribute SkillFullInfo /* * 伤害计算过程 * 1:伤害对象判定 客户端做 * 2:伤害数值确定 服务端 或者客户端 * 3:伤害效果施展 例如击退 服务端 或者 客户端 */ public static void DoDamage(GameObject attacker, SkillFullInfo skillData, GameObject enemy) { if (enemy.GetComponent <MyAnimationEvent>() != null) { var attribute = attacker.GetComponent <NpcAttribute>(); //技能伤害方是我方则可以计算技能伤害否则只做技能表现 if (enemy.GetComponent <NpcAttribute>().IsMine()) { var rd = Random.Range(0, 100); var rate = 1; bool isCritical = false; if (rd < attribute.GetCriticalRate()) { rate = 2; isCritical = true; } //在基础攻击力上面提升的比例 var damage = (int)(attribute.Damage * (skillData.skillData.WeaponDamagePCT / 100.0f) * rate); Log.Sys("calculate Damage Rate " + skillData.skillData.Id + " lev " + skillData.skillData.Level + " ra " + skillData.skillData.WeaponDamagePCT); NetDateInterface.FastDamage( attribute.GetComponent <KBEngine.KBNetworkView>().GetServerID(), enemy.GetComponent <KBEngine.KBNetworkView>().GetServerID(), damage, isCritical ); enemy.GetComponent <MyAnimationEvent>().OnHit(attacker, damage, isCritical); var hitTarget = new MyEvent(MyEvent.EventType.HitTarget); hitTarget.target = enemy; hitTarget.skill = skillData.skillData; MyEventSystem.myEventSystem.PushLocalEvent(attribute.GetLocalId(), hitTarget); } } }
void Start() { if (Event.attaches) { StartCoroutine(FollowAttacker()); } if (Event.affix.effectType != Affix.EffectType.None && Event.affix.target == Affix.TargetType.Self) { if (stateMachine.attacker != null && stateMachine.attacker.GetComponent <NpcAttribute>().IsMine()) { //stateMachine.attacker.GetComponent<BuffComponent>().AddBuff(Event.affix); NetDateInterface.FastMoveAndPos(); NetDateInterface.FastAddBuff(Event.affix, stateMachine.attacker, stateMachine.attacker, stateMachine.skillFullData.skillId, Event.EvtId); } } var skillConfig = Event.layout.GetComponent <SkillLayoutConfig>(); if (skillConfig != null) { StartCoroutine(ShowParticle()); } }
IEnumerator CountDown() { while (WorldManager.worldManager.station != WorldManager.WorldStation.Enter) { yield return(null); } var uiRoot = WindowMng.windowMng.GetMainUI(); var lt = NGUITools.AddChild(uiRoot, Resources.Load <GameObject>("UI/LeftTimeUI")); ltui = lt.GetComponent <LeftTimeUI>(); var sui = NGUITools.AddChild(uiRoot, Resources.Load <GameObject>("UI/ScoreUI")); scoreUI = sui.GetComponent <ScoreUI>(); var rtp = Util.FindChildRecursive(uiRoot.transform, "RightTop"); rtp.gameObject.SetActive(false); while (leftTime > 0) { ltui.SetLabel("" + leftTime); if (NetworkUtil.IsNetMaster()) { NetDateInterface.SyncTime(leftTime); } leftTime--; yield return(new WaitForSeconds(1)); } if (NetworkUtil.IsNetMaster()) { NetDateInterface.GameOver(); NetworkGameOver(); } }
/// <summary> /// 本地使用技能同时通知代理 /// 绕过LogicCommand 本地执行不需要LogicCommand队列 /// </summary> /// <param name="skillData">Skill data.</param> static void UseSkill(SkillData skillData) { Log.Sys("UseSkill: " + skillData.SkillName + " lev " + skillData.Level); ObjectManager.objectManager.GetMyPlayer().GetComponent <MyAnimationEvent>().OnSkill(skillData); NetDateInterface.FastMoveAndPos(); NetDateInterface.FastUseSkill(skillData.Id, skillData.Level); }
public static void AddStaticShootBuff(GameObject who, int skillId, Vector3 pos) { var skill = Util.GetSkillData(skillId, 1); var skillInfo = SkillLogic.GetSkillInfo(skill); var evt = skillInfo.eventList[0]; NetDateInterface.FastAddBuff(evt.affix, who, who, skillId, evt.EvtId); }
/// <summary> /// 和使用普通技能一样 /// </summary> public void PlayerAttack() { //连击3招 var meId = ObjectManager.objectManager.GetMyAttr().GetNetView().GetLocalId(); var skillInfo = ObjectManager.objectManager.GetMyPlayer().GetComponent <SkillInfoComponent>(); skillInfo.SetDefaultActive(); var skillData = skillInfo.GetActiveSkill().skillData; var curState = ObjectManager.objectManager.GetMyPlayer().GetComponent <AIBase>().GetAI().state; //无动作技能释放 不用检测 if (string.IsNullOrEmpty(skillData.AnimationName)) { } else { //当前状态不能使用技能 或者已经在技能状态了不能连续点击 if (curState != null) { var ret = curState.CanChangeState(AIStateEnum.CAST_SKILL); if (!ret) { return; } } } if (curState != null && curState.type == AIStateEnum.DEAD) { Util.ShowMsg("死亡不能使用技能"); return; } //默认技能上次使用频率控制 MyEventSystem.PushLocalEventStatic(meId, MyEvent.EventType.UseSkill); var skillId = skillInfo.GetActiveSkill().skillId; /* * //如果身上有Buff则调整默认技能的ID * if (!NetworkUtil.IsNet()) * { * ObjectManager.objectManager.GetMyPlayer().GetComponent<MyAnimationEvent>().OnSkill(skillData); * } * * if (skillInfo.GetActiveSkill().skillData.skillConfig.stopMove) * { * //短时间限制自己移动 * var me = ObjectManager.objectManager.GetMyPlayer(); * GameInterface_Skill.AddSkillBuff(me.gameObject, "StopMoveBuff", Vector3.zero); * } * * NetDateInterface.FastMoveAndPos(); */ NetDateInterface.FastUseSkill(skillId, skillData.Level); }
/// <summary> /// 和使用普通技能一样 /// </summary> public void PlayerAttack() { //连击3招 var skillId = ObjectManager.objectManager.GetMyPlayer().GetComponent <SkillInfoComponent> ().GetDefaultSkillId(); var skillData = Util.GetSkillData(skillId, 1); ObjectManager.objectManager.GetMyPlayer().GetComponent <MyAnimationEvent>().OnSkill(skillData); NetDateInterface.FastMoveAndPos(); NetDateInterface.FastUseSkill(skillId, skillData.Level); }
public override void EnterState() { base.EnterState(); dieAni = "death"; SetAni(dieAni, 1, WrapMode.Once); GetAttr().IsDead = true; if (GetAttr().IsMine()) { var last = GetEvent().lastAttacker; NetDateInterface.Dead(last); } }
void SyncMyPos() { var me = ObjectManager.objectManager.GetMyPlayer(); if (me != null) { var sync = me.GetComponent <PlayerSyncToServer>(); sync.SyncAttribute(); } //NetDateInterface.SyncPosDirHP(); NetDateInterface.SyncMonster(); }
public static bool AddBuffWithNet(GameObject who, int skillId, Vector3 pos, int pid = 0) { var skill = Util.GetSkillData(skillId, 1); var skillInfo = SkillLogic.GetSkillInfo(skill); var evt = skillInfo.eventList [0]; //var ret = who.GetComponent<BuffComponent>().AddBuff(evt.affix, pos, pid); //if (ret) { NetDateInterface.FastAddBuff(evt.affix, who, who, skillId, evt.EvtId); } //return ret; return(true); }
public void Revive() { ChangeHP(HP_Max); ChangeMP(MP_Max); NetworkRevive(); var pos = NetworkUtil.GetStartPos(); transform.position = pos; if (this.IsMine()) { NetDateInterface.Revive(); } }
public virtual void OnDie() { if (unitTheme != null) { //GameObject.Destroy(unitTheme); ParticlePool.Instance.ReturnGameObject(unitTheme, ParticlePool.ResetParticle); unitTheme = null; } //本地Buff的Id都是0 if (attri.IsMine() && this.EffectId != 0) { //NetDateInterface.FastRemoveBuff((int)this.type, attri.gameObject); NetDateInterface.RemoveBuffId(this.EffectId, attri.gameObject); } }
//public Transform tower; public override void EnterState() { base.EnterState(); dieAni = "death"; SetAni(dieAni, 1, WrapMode.Once); GetAttr().IsDead = true; if (GetAttr().IsMine()) { var attackerList = GetEvent().attackerList; var last = GetEvent().lastAttacker; List <int> finalAttackerList = new List <int>(attackerList.Count); var enumerator = attackerList.GetEnumerator(); while (enumerator.MoveNext()) { if (enumerator.Current.Key != last) { if (enumerator.Current.Value >= GameConst.Instance.AssistDamage) { finalAttackerList.Add(enumerator.Current.Key); } } } NetDateInterface.Dead(last, finalAttackerList); attackerList.Clear(); GetEvent().lastAttacker = 0; } GetAttr().SetDeadShader(); var tower = GetAttr().GetComponent <TankPhysicComponent>().tower; tac = tower.GetComponent <TowerAutoCheck>(); tac.SetDead(true); var rigidbody = GetAttr().GetComponent <Rigidbody>(); rigidbody.useGravity = false; rigidbody.velocity = Vector3.zero; var ds = GameObject.Instantiate(Resources.Load <GameObject>("particles/DeadSmoke")) as GameObject; deadparticle = ds; ds.transform.position = GetAttr().transform.position; }
/// <summary> /// 自己复活 /// </summary> /// <returns></returns> public IEnumerator Revive() { GetComponent <BuffComponent>().RemoveAllBuff(); ChangeHP(HP_Max); ChangeMP(MP_Max); this.SetNetSpeed(0); SetJob(Job.WARRIOR); var pos = NetworkUtil.GetStartPos(); //transform.position = pos; //this.rigidbody.MovePosition(pos); Util.ForceResetPos(this.GetComponent <Rigidbody>(), pos); //StartCoroutine(SetRebornShader()); ReviveAI(); NetDateInterface.Revive(); yield return(null); }
public void DoDamage(GameObject g) { Log.AI("SkillLayout DoDamage " + Event.affix.effectType); var attr = NetworkUtil.GetAttr(g); if (Event.affix.effectType != Affix.EffectType.None && Event.affix.target == Affix.TargetType.Enemy) { //Buff目标是本地控制 //通过ID来控制复制信息 实体都要有ID才便于复制 //if(stateMachine.attacker.GetComponent<NpcAttribute>().IsMine()) { if (attr.IsMine()) { //attr.GetComponent<BuffComponent>().AddBuff(Event.affix, stateMachine.attacker.transform.position); NetDateInterface.FastMoveAndPos(); NetDateInterface.FastAddBuff(Event.affix, stateMachine.attacker, attr.gameObject, stateMachine.skillFullData.skillId, Event.EvtId); } } stateMachine.DoDamage(attr.gameObject); }
//为玩家增加Buff void OnTriggerEnter(Collider other) { if (NetworkUtil.IsNetMaster()) { if (other.tag == GameTag.Player) { //击退技能 var pos = other.transform.position; var otherGo = other.gameObject; var skill = Util.GetSkillData(140, 1); var skillInfo = SkillLogic.GetSkillInfo(skill); var evt = skillInfo.eventList[0]; var ret = gameObject.GetComponent <BuffComponent>().AddBuff(evt.affix, pos); if (ret) { NetDateInterface.FastAddBuff(evt.affix, otherGo, gameObject, skill.Id, evt.EvtId); } } } }
void OnTriggerEnter(Collider other) { Log.Sys("MoveBlock Enter : " + other.gameObject); if (NetworkUtil.IsNetMaster()) { if (other.tag == GameTag.Player) { //击退技能 var pos = other.transform.position; var otherGo = other.gameObject; //dy dx 比较 那个大 保留那个 同时另外一个修正为 自己的pos var par = transform.parent.gameObject; var myPos = par.transform.position; //假设箱子都是 正方体 var dx = myPos.x - pos.x; var dz = myPos.z - pos.z; if (Mathf.Abs(dx) < Mathf.Abs(dz)) { pos.x = myPos.x; } else { pos.z = myPos.z; } var skill = Util.GetSkillData((int)SkillData.SkillConstId.KnockBack, 1); var skillInfo = SkillLogic.GetSkillInfo(skill); var evt = skillInfo.eventList [0]; var ret = par.GetComponent <BuffComponent>().AddBuff(evt.affix, pos); if (ret) { NetDateInterface.FastAddBuff(evt.affix, otherGo, par, skill.Id, evt.EvtId, pos); } } } }
void MsgHandler(KBEngine.Packet packet) { var proto = packet.protoBody as GCPlayerCmd; Log.Net("Map4Receive: " + proto); var cmds = proto.Result.Split(' '); if (cmds [0] == "Login") { myId = Convert.ToInt32(cmds [1]); ObjectManager.objectManager.RefreshMyServerId(myId); } else if (cmds [0] == "Add") { ObjectManager.objectManager.CreateOtherPlayer(proto.AvatarInfo); PlayerDataInterface.DressEquip(proto.AvatarInfo); var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id); if (player != null) { var sync = player.GetComponent <PlayerSync>(); if (sync != null) { sync.NetworkMove(proto.AvatarInfo); } else { var sync2 = player.GetComponent <MySelfAttributeSync>(); sync2.NetworkAttribute(proto.AvatarInfo); } } } else if (cmds [0] == "Remove") { ObjectManager.objectManager.DestroyPlayer(proto.AvatarInfo.Id); } else if (cmds [0] == "Update") { var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id); if (player != null) { var sync = player.GetComponent <PlayerSync>(); if (sync != null) { sync.NetworkMove(proto.AvatarInfo); } else { var myselfAttr = player.GetComponent <MySelfAttributeSync>(); if (myselfAttr != null) { myselfAttr.NetworkAttribute(proto.AvatarInfo); } } } } else if (cmds [0] == "Damage") { var dinfo = proto.DamageInfo; var enemy = ObjectManager.objectManager.GetPlayer(dinfo.Enemy); if (enemy != null) { var sync = enemy.GetComponent <PlayerSync>(); if (sync != null) { sync.DoNetworkDamage(proto); } } if (!NetworkUtil.IsMaster() && enemy != null) { var sync = enemy.GetComponent <MonsterSync>(); if (sync != null) { sync.DoNetworkDamage(proto); } } } else if (cmds [0] == "Skill") { var sk = proto.SkillAction; var player = ObjectManager.objectManager.GetPlayer(sk.Who); if (player != null) { var sync = player.GetComponent <PlayerSync>(); if (sync != null) { sync.NetworkAttack(sk); } } } else if (cmds [0] == "Buff") { var target = proto.BuffInfo.Target; var sync = NetDateInterface.GetPlayer(target); var player = ObjectManager.objectManager.GetPlayer(target); if (sync != null) { sync.NetworkBuff(proto); } if (player != null && !NetworkUtil.IsNetMaster()) { var monSync = player.GetComponent <MonsterSync>(); if (monSync != null) { monSync.NetworkBuff(proto); } } } else if (cmds [0] == "AddEntity") { var ety = proto.EntityInfo; if (ety.EType == EntityType.CHEST) { StartCoroutine(WaitZoneInit(ety)); } else if (ety.EType == EntityType.DROP) { var itemData = Util.GetItemData((int)ItemData.GoodsType.Props, (int)ety.ItemId); var itemNum = ety.ItemNum; var pos = NetworkUtil.FloatPos(ety.X, ety.Y, ety.Z); DropItemStatic.MakeDropItemFromNet(itemData, pos, itemNum, ety); } } else if (cmds [0] == "UpdateEntity") { var ety = proto.EntityInfo; var mon = ObjectManager.objectManager.GetPlayer(ety.Id); Log.Net("UpdateEntityHP: " + ety.Id + " hp " + ety.HasHP + " h " + ety.HP); if (!NetworkUtil.IsMaster() && mon != null) { var sync = mon.GetComponent <MonsterSync>(); if (sync != null) { sync.SyncAttribute(proto); } } } else if (cmds [0] == "RemoveEntity") { var ety = proto.EntityInfo; var mon = ObjectManager.objectManager.GetPlayer(ety.Id); if (!NetworkUtil.IsMaster() && mon != null) { var netView = mon.GetComponent <KBEngine.KBNetworkView>(); if (netView != null) { ObjectManager.objectManager.DestroyByLocalId(netView.GetLocalId()); } } } else if (cmds [0] == "Pick") { if (!NetworkUtil.IsMaster()) { var action = proto.PickAction; var ety = ObjectManager.objectManager.GetPlayer(action.Id); var who = ObjectManager.objectManager.GetPlayer(action.Who); if (ety != null) { var item = ety.GetComponent <DropItemStatic>(); if (item != null) { item.PickItemFromNetwork(who); } } } } else if (cmds [0] == "Revive") { var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id); if (player != null) { var sync = player.GetComponent <PlayerSync>(); if (sync != null) { sync.Revive(); } } } else if (cmds [0] == "Dead") { var dinfo = proto.DamageInfo; ScoreManager.Instance.NetAddScore(dinfo.Attacker, dinfo.Enemy); } else if (cmds [0] == "SyncTime") { if (!NetworkUtil.IsNetMaster()) { ScoreManager.Instance.NetSyncTime(proto.LeftTime); } } else if (cmds [0] == "GameOver") { if (!NetworkUtil.IsNetMaster()) { ScoreManager.Instance.NetworkGameOver(); } } else if (cmds [0] == "AllReady") { Util.ShowMsg("所有客户端准备完成"); //当所有客户端准备好之后 服务器推送Entity给所有客户端 NetMatchScene.Instance.SetAllReady(); //更新IsMaster 这样才能生成Entity var player = ObjectManager.objectManager.GetMyPlayer(); var myselfAttr = player.GetComponent <MySelfAttributeSync>(); var matchRoom = NetMatchScene.Instance.GetComponent <MatchRoom>(); if (myselfAttr != null) { myselfAttr.NetworkAttribute(matchRoom.GetMyInfo()); } } }
void SyncMyPos() { NetDateInterface.SyncPosDirHP(); }
void MsgHandler(KBEngine.Packet packet) { var proto = packet.protoBody as GCPlayerCmd; Debug.Log("Map3Receive: " + proto); var cmds = proto.Result.Split(' '); if (cmds [0] == "Login") { myId = Convert.ToInt32(cmds [1]); ObjectManager.objectManager.RefreshMyServerId(myId); } else if (cmds [0] == "Add") { ObjectManager.objectManager.CreateOtherPlayer(proto.AvatarInfo); PlayerDataInterface.DressEquip(proto.AvatarInfo); } else if (cmds [0] == "Remove") { ObjectManager.objectManager.DestroyPlayer(proto.AvatarInfo.Id); } else if (cmds [0] == "Update") { var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id); if (player != null) { var sync = player.GetComponent <PlayerSync>(); if (sync != null) { sync.NetworkMove(proto.AvatarInfo); } } else { } } else if (cmds [0] == "Damage") { //SkillDamageCaculate.DoNetworkDamage(proto); var dinfo = proto.DamageInfo; var enemy = ObjectManager.objectManager.GetPlayer(dinfo.Enemy); if (enemy != null) { var sync = enemy.GetComponent <PlayerSync>(); if (sync != null) { sync.DoNetworkDamage(proto); } } } else if (cmds [0] == "Skill") { var sk = proto.SkillAction; var player = ObjectManager.objectManager.GetPlayer(sk.Who); if (player != null) { var sync = player.GetComponent <PlayerSync>(); if (sync != null) { sync.NetworkAttack(sk); } } } else if (cmds [0] == "Buff") { var sync = NetDateInterface.GetPlayer(proto.BuffInfo.Target); if (sync != null) { sync.NetworkBuff(proto); } } }
public static void RemoveStaticShootBuff(GameObject who, int skillId, Vector3 pos) { //who.GetComponent<BuffComponent>().RemoveBuff(Affix.EffectType.StaticShootBuff); NetDateInterface.FastRemoveBuff((int)Affix.EffectType.StaticShootBuff, who); }