예제 #1
0
    public virtual void UpdateSlot(byte index, byte lv)
    {
        var slot = user.Slots.Find(x => x.SlotIndex == index);

        user.SP    -= ServerDefine.SlotLv2Price(slot.SlotLv);
        slot.SlotLv = lv;

        cubes.Where(x => x.gameCube.CubeId == slot.CubeId).ToList().ForEach(x => x.Lvup());
    }
예제 #2
0
    public void Spawn(int seq)
    {
        this.seq     = seq;
        hp           = ServerDefine.MonsterSeq2HP(seq);
        speed        = 1f;
        hp_text.text = ((int)hp).ToString();
        state        = State.Idle;

        base.Spawn();
    }
예제 #3
0
        public override void Upsert(int index, GameSlot data)
        {
            base.Upsert(index, data);

            var cubeData = XmlKey.CubeData.Find <CubeDataXml.Data>(x => x.CubeId == data.CubeId);
            var price    = ServerDefine.SlotLv2Price(data.SlotLv);

            cube_image.color = new Color(cubeData.Color[0], cubeData.Color[1], cubeData.Color[2]);
            lv_text.SetText(data.SlotLv.ToString());
            sp_text.SetText(price.ToString());
        }
예제 #4
0
        public void SetConfig(int chainid, ChainType chainType, ServerDefine server)
        {
            _serverDefine = server;
            _chainId      = chainid;
            _chainType    = chainType;

            if (!string.IsNullOrEmpty(server.Ws))
            {
                _binaryWriter = new BinaryWriter(_memoryStream);

                Task.Run(WsRun);
            }
        }
예제 #5
0
        public override void Upsert(int index, CubeViewModel data)
        {
            base.Upsert(index, data);

            var cubeData = XmlKey.CubeData.Find <CubeDataXml.Data>(x => x.CubeId == data.CubeId);
            var AD       = ServerDefine.CubeLv2AD(cubeData.AD, data.Lv);
            var AS       = ServerDefine.CubeLv2AS(cubeData.AS, data.Lv);

            cube_image.color = new Color(cubeData.Color[0], cubeData.Color[1], cubeData.Color[2]);
            lv_text?.SetText(data?.Lv.ToString());
            ad_text?.SetText(AD.ToString("N2"));
            as_text?.SetText(AS.ToString("N2"));
        }
예제 #6
0
        public void Upsert(GameUser data)
        {
            base.Empty();

            if (data == null)
            {
                return;
            }

            base.Upsert();

            data.Slots.ForEach((x, i) =>
            {
                slotComponents[i].Upsert(i, x);
                slotComponents[i].Lock(data.SP < ServerDefine.SlotLv2Price(x.SlotLv));
            });
        }
예제 #7
0
        public override void Event(string param)
        {
            switch (param)
            {
            case "Create":
            {
                var data   = userComponent.props.data;
                var needsp = ServerDefine.CubeSeq2NeedSP(data.CubeSeq);
                if (data.SP < needsp)
                {
                    return;
                }

                teamHandler?.OnCreateCube(1);
            }
            break;
            }
            base.Event(param);
        }
예제 #8
0
    protected override void CheckResult()
    {
        var users = ServerInfo.GameUsers;

        if (users.TrueForAll(x => x.Life > 0))
        {
            return; //진행중
        }
        users.OrderByDescending(x => x.Life).ForEach((x, i) =>
        {
            x.Rank  = i;
            x.Money = ServerDefine.Rank2Money(i);
        });

        GameServer.sInstance?.SendLocal("Result", new SC_Result
        {
            Users = users
        });
    }
예제 #9
0
        public async Task <IActionResult> UpdateLv(string userId, int cubeId)
        {
            try
            {
                var user = await _unitOfWork.Users.GetAsync(x => x.Id == userId, isTracking : true);

                if (user == null)
                {
                    return(Payloader.Fail(PayloadCode.DbNull));
                }

                var lv   = 0;
                var cube = await _unitOfWork.Cubes.GetAsync(x => x.UserId == userId && x.CubeId == cubeId);

                if (cube != null)
                {
                    lv = cube.Lv;
                }

                var price = ServerDefine.CubeLv2Price((byte)lv);

                if (user.Money < price)
                {
                    return(Payloader.Fail(PayloadCode.Not));
                }

                user.Money -= price;

                var newCube = await _unitOfWork.Cubes.UpdateLv(userId, cubeId, 1);

                await _unitOfWork.CommitAsync();

                return(Payloader.Success(new UpdateCubeLvBody()
                {
                    Cube = _mapper.Map <CubeViewModel>(newCube),
                    Money = user.Money,
                }));
            }
            catch (Exception ex)
            {
                return(Payloader.Error(ex));
            }
        }
예제 #10
0
        private void Result()
        {
            _state = RoomState.Result;

            var users = _users.OrderByDescending(x => x.Life).ToList();

            users.ForEach((x, i) =>
            {
                x.Rank  = i;
                x.Money = ServerDefine.Rank2Money(i);
            });

            _context.Clients(_users).SendCoreAsync("Result", PayloadPack.Success(new SC_Result()
            {
                Users = users,
            }));

            OnGameEnd?.Invoke(_groupName);
        }
예제 #11
0
        public override void Upsert(GameUser data)
        {
            base.Upsert(data);

            if (data == null)
            {
                return;
            }

            var needsp = ServerDefine.CubeSeq2NeedSP(data.CubeSeq);

            name_text.SetText(data.Name);
            sp_text.SetText(data.SP.ToString());
            needsp_text.SetText(needsp.ToString());
            needsp_lock_image?.gameObject.SetVisible(data.SP < needsp);
            life_image.ForEach((x, i) =>
            {
                x.gameObject.SetVisible((i < data.Life));
            });
        }
예제 #12
0
    public virtual Cube CreateCube(GameCube gameCube)
    {
        var position = Server2Local(new Vector3(gameCube.PositionX, gameCube.PositionY, 0f));
        var gameSlot = user.Slots.Find(x => x.CubeId == gameCube.CubeId);
        var cube     = PoolFactory.Get <Cube>("Cube", position, Quaternion.identity, transform);

        cube.OnMove        = OnMove;
        cube.OnCombineMove = OnCombineMove;
        cube.OnCombine     = OnCombine;
        cube.OnShot        = OnShot;
        cube.Spawn(user.Id, gameCube, gameSlot);
        cubes.Add(cube);

        user.Cubes.Add(gameCube);
        if (gameCube.CombineLv == 1)
        {
            user.SP -= ServerDefine.CubeSeq2NeedSP(user.CubeSeq);
        }

        user.CubeSeq++;

        return(cube);
    }
예제 #13
0
 protected override bool IsLock()
 {
     return(ServerInfo.User.Money < ServerDefine.CubeLv2Price(props.data.Lv));
 }
예제 #14
0
 public float AS()
 {
     return(ServerDefine.SlotLv2AS(cubeData.AS, gameSlot.CubeLv, gameSlot.SlotLv));
 }