Exemplo n.º 1
0
    protected void Melee(E_MeleeType meleeType, uLink.NetworkViewID viewID, uLink.NetworkMessageInfo info)
    {
        if (Owner.BlackBoard.DontUpdate)
        {
            return;
        }

        uLink.NetworkView view = uLink.NetworkView.Find(viewID);

        if (null == view)
        {
            // target was just destroyed
            return;
        }

        Agent targetAgent = view.GetComponent <Agent>();

        if (targetAgent == null)
        {
            return;             // wtf ?
        }
#if !DEADZONE_CLIENT
        if (Owner.IsServer)
        {
            if (!ServerAnticheat.ReportAndValidateMelee(Owner.NetworkView.owner, Owner, targetAgent, info))
            {
                // Ignore the action when it is not valid. This may happen even in a regular/fair game when
                // an attacking playerexperiences a lag.
                return;
            }
        }
#endif

        AgentActionMelee a = AgentActionFactory.Create(AgentActionFactory.E_Type.Melee) as AgentActionMelee;
        a.Target    = targetAgent;
        a.MeleeType = meleeType;
        Owner.BlackBoard.ActionAdd(a);

        if (a.IsFailed())
        {
            return;             // wtf ?
        }
        if (Owner.IsServer)
        {
            //send to proxies
            Owner.NetworkView.RPC("Melee", uLink.RPCMode.OthersExceptOwner, meleeType, viewID);

            //knockdown target immediatly, its player, we dont have time wait ....
            Vector3 direction = (a.Target.Position - Owner.Position).normalized;
            a.Target.KnockDown(Owner, meleeType, direction);
        }

        //Debug.Log(Time.timeSinceLevelLoad + " " + "Melee " + a.MeleeType + " " + a.Target.name);
    }
Exemplo n.º 2
0
    protected void Knockdown(E_MeleeType meleeType, uLink.NetworkViewID viewId, Vector3 direction)
    {
#if !DEADZONE_CLIENT
        if (Owner.IsServer)
        {
            ServerAnticheat.ReportPotentialCheatAttempt("Knockdown", "should never be called on the server side", Owner.NetworkView.owner);
            return;
        }
#endif

        if (Owner.BlackBoard.DontUpdate)
        {
            return;
        }

        uLink.NetworkView View     = (viewId != uLink.NetworkViewID.unassigned) ? uLink.NetworkView.Find(viewId) : null;
        AgentHuman        attacker = View ? View.GetComponent <AgentHuman>() : null;

        Owner.KnockDown(attacker, meleeType, direction);
    }
Exemplo n.º 3
0
    void HandleAction(AgentAction action)
    {
        if (action is AgentActionAttack)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("AttackS", uLink.RPCMode.Server, (action as AgentActionAttack).FromPos, (action as AgentActionAttack).AttackDir);
            }
        }
        else if (action is AgentActionInjury)
        {
            var injury = action as AgentActionInjury;
            if (Owner.IsServer)
            {
                uLink.NetworkViewID viewId = (injury.Attacker != null && injury.Attacker.NetworkView != null)
                                                                                                                         ? injury.Attacker.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Injury", RPCMode.Others, viewId, injury.Pos, injury.Impulse, (short)injury.Damage, (short)injury.BodyPart);
            }
        }
        else if (action is AgentActionReload)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("Reload", uLink.RPCMode.Server);
            }
        }
        else if (action is AgentActionTeamCommand)
        {
            AgentActionTeamCommand a = action as AgentActionTeamCommand;
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("TeamCmd", RPCMode.Server, a.Command);
            }
        }

        else if (action is AgentActionRoll)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("Roll", uLink.RPCMode.Server, (action as AgentActionRoll).Direction);
            }
        }
        else if (action is AgentActionDeath)
        {
            var death = action as AgentActionDeath;
            if (Owner.IsServer)
            {
                uLink.NetworkViewID viewId = (death.Attacker != null && death.Attacker.NetworkView != null)
                                                                                                                         ? death.Attacker.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Death", RPCMode.Others, viewId, death.Pos, death.Impulse, (short)death.Damage, (short)death.BodyPart);

                if (null != death.Attacker)
                {
                    PPIManager.Instance.ServerAddScoreForKill(Owner.NetworkView.owner,
                                                              death.Attacker.NetworkView.owner,
                                                              Owner.BlackBoard.AttackersDamageData,
                                                              death.BodyPart,
                                                              Owner.GadgetsComponent.GetBoostGoldReward());
                }

                /*if (Server.Instance.GameInfo.GameType == E_MPGameType.ZoneControl)
                 * {
                 *      // currently not using rebalancing after death
                 *      //PPIManager.Instance.ServerRebalanceTeams();
                 * }*/
            }
        }
        else if (action is AgentActionCoverEnter)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("CoverEnter",
                                      uLink.RPCMode.Server,
                                      Mission.Instance.GameZone.GetCoverIndex(Owner.BlackBoard.Cover),
                                      Owner.BlackBoard.Desires.CoverPosition);
            }
        }
        else if (action is AgentActionCoverLeave)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("CoverLeave", uLink.RPCMode.Server, ((AgentActionCoverLeave)action).TypeOfLeave);
            }
        }
        else if (action is AgentActionCoverFire)
        {
            if (Owner.IsOwner)
            {
                AgentActionCoverFire a = action as AgentActionCoverFire;
                Owner.NetworkView.RPC("CoverFireStart", uLink.RPCMode.Server, a.CoverPose, a.CoverDirection);
            }
        }
        else if (action is AgentActionCoverFireCancel)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("CoverFireStop", uLink.RPCMode.Server);
            }
        }
        else if (action is AgentActionWeaponChange)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("ChangeWeapon", uLink.RPCMode.Server, (action as AgentActionWeaponChange).NewWeapon);
            }
        }
        else if (action is AgentActionUseItem)
        {
//			Debug.Log ("ComponentNetworkAction.HandleAction(), time=" + Time.timeSinceLevelLoad + ", BlackBoard.KeepMotion=" + Owner.BlackBoard.KeepMotion + ", Owner.IsOwner=" + Owner.IsOwner);

            if (Owner.IsOwner)
            {
                if (Owner.IsInCover)
                {
                    Owner.NetworkView.RPC("UseItemInCover",
                                          uLink.RPCMode.Server,
                                          Owner.BlackBoard.Desires.Gadget,
                                          Owner.BlackBoard.CoverPose,
                                          Owner.BlackBoard.CoverPosition);
                }
                else
                {
                    Owner.NetworkView.RPC("UseItem", uLink.RPCMode.Server, Owner.BlackBoard.Desires.Gadget, Owner.BlackBoard.KeepMotion);
                }
            }
        }
        else if (action is AgentActionMelee)
        {
            if (Owner.IsOwner)
            {
                AgentActionMelee a = action as AgentActionMelee;

                uLink.NetworkViewID viewId = (a.Target != null && a.Target.NetworkView != null)
                                                                                                                         ? a.Target.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Melee", uLink.RPCMode.Server, a.MeleeType, viewId);
            }
        }
        else if (action is AgentActionKnockdown)
        {
            if (Owner.IsServer)
            {
                AgentActionKnockdown a = action as AgentActionKnockdown;

                uLink.NetworkViewID viewId = (a.Attacker != null && a.Attacker.NetworkView != null)
                                                                                                                         ? a.Attacker.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Knockdown", uLink.RPCMode.Others, a.MeleeType, viewId, a.Direction);
            }
        }
    }