예제 #1
0
파일: Squad.cs 프로젝트: laiqiqi/Unity-8
    public void Notify(SquadAction action, params object[] args)
    {
        switch (action)
        {
        case (SquadAction.EnemySighted):
            if (this.SquadState == SquadState.ForcedMove)
            {
                return;
            }
            AttackTarget((Target)args [0]);
            break;

        case (SquadAction.DestinationReached):
            CheckSquadIdle();
            break;

        case (SquadAction.UnitDestroyed):
            AssignNewTarget((Unit)args [0]);
            break;

        case (SquadAction.EngagedInMelee):
            EngageInMelee();
            break;

        case (SquadAction.UnitDied):
            UpdateSquadMembers((Unit)args [0]);
            break;

        case (SquadAction.TargetDestroyed):
            Disengage();
            break;
        }
    }
예제 #2
0
        private static SquadMsg CreateSquadMessage(string squadId, SquadAction action, SquadController.ActionCallback callback, object cookie)
        {
            SqmSquadData sqmSquadData = new SqmSquadData();

            sqmSquadData.Id = squadId;
            SquadMsg squadMsg = SquadMsgUtils.CreateActionMessage(action, callback, cookie);

            squadMsg.SquadData = sqmSquadData;
            return(squadMsg);
        }
예제 #3
0
        public void OnPlayerActionFailure(SquadMsg actionMsg, uint status)
        {
            SquadAction type = actionMsg.ActionData.Type;

            if (type == SquadAction.RequestTroops || type == SquadAction.RequestWarTroops)
            {
                SqmRequestData requestData = actionMsg.RequestData;
                if (requestData.PayToSkip && requestData.ResendCrystalCost > 0)
                {
                    Service.CurrentPlayer.Inventory.ModifyCrystals(requestData.ResendCrystalCost);
                }
            }
            string messageForServerActionFailure = SquadUtils.GetMessageForServerActionFailure(type, status);

            AlertScreen.ShowModal(false, null, Service.Lang.Get(messageForServerActionFailure, new object[0]), null, null);
        }
예제 #4
0
        private static SquadMsg CreateActionMessage(SquadAction action, SquadController.ActionCallback callback, object cookie)
        {
            SqmActionData sqmActionData = new SqmActionData();

            sqmActionData.Type     = action;
            sqmActionData.Callback = callback;
            sqmActionData.Cookie   = cookie;
            SqmOwnerData sqmOwnerData = new SqmOwnerData();

            sqmOwnerData.PlayerId   = Service.CurrentPlayer.PlayerId;
            sqmOwnerData.PlayerName = Service.CurrentPlayer.PlayerName;
            return(new SquadMsg
            {
                OwnerData = sqmOwnerData,
                ActionData = sqmActionData
            });
        }
예제 #5
0
        private void OnActionCommandSuccess(AbstractResponse response, object cookie)
        {
            SquadMsg      squadMsg   = (SquadMsg)cookie;
            SqmActionData actionData = squadMsg.ActionData;
            SquadAction   type       = actionData.Type;
            SquadMsg      squadMsg2;

            switch (type)
            {
            case SquadAction.Create:
            case SquadAction.Join:
                squadMsg2 = SquadMsgUtils.GenerateMessageFromSquadResponse((SquadResponse)response, Service.LeaderboardController);
                goto IL_B5;

            case SquadAction.Leave:
                squadMsg2 = squadMsg;
                this.controller.WarManager.ClearSquadWarData();
                goto IL_B5;

            case SquadAction.Edit:
            case SquadAction.ApplyToJoin:
IL_35:
                switch (type)
                {
                case SquadAction.DonateTroops:
                case SquadAction.DonateWarTroops:
                    squadMsg2 = SquadMsgUtils.GenerateMessageFromTroopDonateResponse((TroopDonateResponse)response);
                    Service.TroopDonationTrackController.UpdateTroopDonationProgress((TroopDonateResponse)response);
                    goto IL_B5;
                }
                squadMsg2 = squadMsg;
                goto IL_B5;

            case SquadAction.AcceptApplicationToJoin:
                squadMsg2 = SquadMsgUtils.GenerateMessageFromSquadMemberResponse((SquadMemberResponse)response);
                goto IL_B5;
            }
            goto IL_35;
IL_B5:
            squadMsg2.BISource = squadMsg.BISource;
            this.controller.OnPlayerActionSuccess(actionData.Type, squadMsg2);
            if (actionData.Callback != null)
            {
                actionData.Callback(true, actionData.Cookie);
            }
        }
예제 #6
0
        /// <summary>
        /// Получает приказ на атаку отряда
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string SendAttackOrder(SquadAction obj)
        {
            var attacker   = AccountManager.GetAccountByToken(obj.token);
            var victimBase = BaseManager.GetBaseByID(obj.to);

            if (attacker.UserID == victimBase.OwnerID)
            {
                const string result = "cannotuseatyourself";
                return(result);
            }
            if (!victimBase.IsActive)
            {
                const string result = "baseisinactive";
                return(result);
            }

            return(ProceedActions.Battle(attacker, victimBase));
        }
    public void Notify(SquadAction action, params object[] args)
    {
        switch (action) {
        case(SquadAction.kEnemySighted):
            AttackTarget((Unit)args[0], (Target)args[1]);
            break;

        case(SquadAction.kDestinationReached):
            break;

        case(SquadAction.kTargetDestroyed):
            UpdateTarget((Unit)args[0]);
            break;

        case(SquadAction.kWeaponChanged):
            ChangeSquadWeapons((Unit)args[0], (int)args[1]);
            break;

        case (SquadAction.kUnitDied):
            UpdateSquadMembers((Unit)args[0]);
            break;
        }
    }
예제 #8
0
        /// <summary>
        /// Получает приказ на возвращение отряда
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string SendReturnOrder(SquadAction obj)
        {
            const string result = "success";

            return(result);
        }
예제 #9
0
        private static SquadMsg CreateSquadMessage(string name, string description, string symbolName, int scoreReq, bool openEnrollment, SquadAction action, SquadController.ActionCallback callback, object cookie)
        {
            SqmSquadData sqmSquadData = new SqmSquadData();

            sqmSquadData.Name        = name;
            sqmSquadData.Desc        = description;
            sqmSquadData.Icon        = symbolName;
            sqmSquadData.MinTrophies = scoreReq;
            sqmSquadData.Open        = openEnrollment;
            SquadMsg squadMsg = SquadMsgUtils.CreateActionMessage(action, callback, cookie);

            squadMsg.SquadData = sqmSquadData;
            return(squadMsg);
        }
예제 #10
0
        public static string GetMessageForServerActionFailure(SquadAction actionType, uint status)
        {
            string text = null;

            switch (status)
            {
            case 2300u:
                text = "ALREADY_IN_A_GUILD";
                break;

            case 2301u:
                break;

            case 2302u:
                text = "GUILD_IS_FULL";
                break;

            case 2303u:
                text = "GUILD_IS_NOT_OPEN_ENROLLMENT";
                break;

            case 2304u:
                text = "GUILD_SCORE_REQUIREMENT_NOT_MET";
                break;

            case 2305u:
                text = "IN_WRONG_FACTION";
                break;

            case 2306u:
                text = "NOT_IN_GUILD";
                break;

            default:
                if (status == 2321u)
                {
                    text = "PLAYER_IS_IN_SQUAD_WAR";
                }
                break;
            }
            switch (actionType)
            {
            case SquadAction.Create:
                if (text != null)
                {
                    return(text);
                }
                if (status == 701u)
                {
                    text = "INVALID_SQUAD_NAME";
                    return(text);
                }
                if (status == 2301u)
                {
                    text = "GUILD_NAME_ALREADY_TAKEN";
                    return(text);
                }
                text = "GENERIC_SQUAD_CREATE_ISSUE";
                return(text);

            case SquadAction.Join:
            case SquadAction.ApplyToJoin:
            case SquadAction.AcceptApplicationToJoin:
                if (text == null)
                {
                    text = "GENERIC_SQUAD_JOIN_ISSUE";
                    return(text);
                }
                return(text);

            case SquadAction.Leave:
                if (text == null)
                {
                    text = "GENERIC_SQUAD_LEAVE_ISSUE";
                    return(text);
                }
                return(text);

            case SquadAction.Edit:
                if (text != null)
                {
                    return(text);
                }
                if (status == 701u)
                {
                    text = "INVALID_SQUAD_DESC";
                    return(text);
                }
                text = "GENERIC_SQUAD_EDIT_ISSUE";
                return(text);

            case SquadAction.SendInviteToJoin:
                if (status <= 2302u)
                {
                    if (status == 2300u)
                    {
                        text = "SQUAD_INVITE_ALREADY_IN_A_GUILD";
                        return(text);
                    }
                    if (status == 2302u)
                    {
                        text = "SQUAD_INVITE_GUILD_IS_FULL";
                        return(text);
                    }
                }
                else
                {
                    if (status == 2305u)
                    {
                        text = "SQUAD_INVITE_WRONG_FACTION";
                        return(text);
                    }
                    if (status == 2309u)
                    {
                        text = "SQUAD_INVITE_NOT_ENOUGH_GUILD_RANK";
                        return(text);
                    }
                }
                text = "SQUAD_INVITE_FAILED";
                return(text);

            case SquadAction.RejectInviteToJoin:
                text = "SQUAD_INVITE_REJECT_FAILED";
                return(text);

            case SquadAction.DonateTroops:
            case SquadAction.DonateWarTroops:
                switch (status)
                {
                case 2315u:
                    text = "NOT_IN_SAME_GUILD";
                    return(text);

                case 2316u:
                    text = "CANNOT_DEDUCT_NEGATIVE_AMOUNTS";
                    return(text);

                case 2318u:
                    text = "CAN_ONLY_DONATE_TROOPS";
                    return(text);

                case 2319u:
                    text = "NOT_ENOUGH_GUILD_TROOP_CAPACITY";
                    return(text);
                }
                text = "GENERIC_DONATE_ISSUE";
                return(text);
            }
            text = "GENERIC_SQUAD_ISSUE";
            return(text);
        }
예제 #11
0
        public void OnPlayerActionSuccess(SquadAction actionType, SquadMsg msg)
        {
            Squad currentSquad = this.StateManager.GetCurrentSquad();

            switch (actionType)
            {
            case SquadAction.Create:
                GameUtils.SpendCurrency(GameConstants.SQUAD_CREATE_COST, 0, 0, true);
                this.StateManager.SetCurrentSquad(msg.RespondedSquad);
                this.ClearPrefsForNewSquad(0);
                break;

            case SquadAction.Join:
                this.StateManager.SetCurrentSquad(msg.RespondedSquad);
                this.StateManager.OnSquadJoined(msg.BISource);
                this.SetLastViewedSquadLevelUp(msg.RespondedSquad.Level);
                break;

            case SquadAction.Leave:
            {
                string message = Service.Lang.Get("LEAVE_A_SQUAD", new object[]
                    {
                        currentSquad.SquadName
                    });
                this.LeaveSquad(message);
                break;
            }

            case SquadAction.Edit:
            {
                SqmSquadData squadData = msg.SquadData;
                this.StateManager.EditSquad(squadData.Open, squadData.Icon, squadData.Desc, squadData.MinTrophies);
                break;
            }

            case SquadAction.ApplyToJoin:
                if (!this.StateManager.SquadJoinRequestsPending.Contains(msg.SquadData.Id))
                {
                    this.StateManager.SquadJoinRequestsPending.Add(msg.SquadData.Id);
                }
                break;

            case SquadAction.AcceptApplicationToJoin:
                SquadUtils.AddSquadMember(currentSquad, msg.SquadMemberResponse);
                this.UpdateCurrentSquad();
                this.StateManager.OnSquadJoinApplicationAcceptedByCurrentPlayer(msg.BISource);
                break;

            case SquadAction.SendInviteToJoin:
                this.StateManager.PlayersInvitedToSquad.Add(msg.FriendInviteData.PlayerId);
                break;

            case SquadAction.AcceptInviteToJoin:
                this.StateManager.RemoveInviteToSquad(msg.SquadData.Id);
                this.UpdateCurrentSquad();
                this.StateManager.OnSquadJoinInviteAccepted();
                break;

            case SquadAction.RejectInviteToJoin:
                this.StateManager.RemoveInviteToSquad(msg.SquadData.Id);
                break;

            case SquadAction.PromoteMember:
                SquadUtils.SetSquadMemberRole(currentSquad, msg.MemberData.MemberId, msg.MemberData.MemberRole);
                break;

            case SquadAction.DemoteMember:
                SquadUtils.SetSquadMemberRole(currentSquad, msg.MemberData.MemberId, msg.MemberData.MemberRole);
                break;

            case SquadAction.RemoveMember:
                SquadUtils.RemoveSquadMember(currentSquad, msg.MemberData.MemberId);
                break;

            case SquadAction.RequestTroops:
                this.StateManager.TroopRequestDate = Service.ServerAPI.ServerTime;
                this.StateManager.OnSquadTroopsRequested();
                break;

            case SquadAction.DonateTroops:
            case SquadAction.DonateWarTroops:
            {
                Dictionary <string, int> donations     = msg.DonationData.Donations;
                CurrentPlayer            currentPlayer = Service.CurrentPlayer;
                int num = 0;
                foreach (KeyValuePair <string, int> current in donations)
                {
                    string key   = current.Key;
                    int    value = current.Value;
                    currentPlayer.Inventory.Troop.ModifyItemAmount(key, -value);
                    num += value;
                }
                StorageSpreadUtils.UpdateAllStarportFullnessMeters();
                Service.ISupportController.UnfreezeAllBuildings(ServerTime.Time);
                this.StateManager.NumTroopDonationsInSession += num;
                this.StateManager.OnSquadTroopsDonated(donations);
                break;
            }

            case SquadAction.RequestWarTroops:
                this.StateManager.WarTroopRequestDate = Service.ServerAPI.ServerTime;
                this.StateManager.OnSquadWarTroopsRequested();
                break;

            case SquadAction.ShareReplay:
                this.StateManager.OnSquadReplayShared(msg.ReplayData);
                break;
            }
        }
    public void Notify(SquadAction action, params object[] args)
    {
        switch (action) {
        case(SquadAction.EnemySighted):
            if (this.SquadState == SquadState.ForcedMove)
                return;
            AttackTarget ((Target)args [0]);
            break;

        case(SquadAction.DestinationReached):
            CheckSquadIdle ();
            break;

        case(SquadAction.UnitDestroyed):
            AssignNewTarget ((Unit)args [0]);
            break;

        case(SquadAction.EngagedInMelee):
            EngageInMelee ();
            break;

        case (SquadAction.UnitDied):
            UpdateSquadMembers ((Unit)args [0]);
            break;

        case (SquadAction.TargetDestroyed):
            Disengage ();
            break;
        }
    }