예제 #1
0
        private NetMessage WhenReqProduceProduct(ServerVisitor client, NetMessageStream msg)
        {
            string userName    = msg.ReadData <string>();
            string companyName = msg.ReadData <string>().Trim();
            string techName    = msg.ReadData <string>().Trim();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);
                var company = this.FindCompanyByName(companyName);

                // 유저가 존재하고
                // 존재하는 회사가 유저의 소유이고
                // 기술 이름이 유효하고
                if (user != null &&
                    company != null && company.Owner == user.Name &&
                    techName.Length > 0)
                {
                    Chip techChip = company.GetTech(techName);

                    if (techChip != null)
                    {
                        int produceFee      = techChip.Program.Count * GameValues.ProduceFeePerProgramLine;
                        int maxProductCount = this.GetCompanySiteCount(companyName) * GameValues.CompanyProductSizePerSite;


                        // 생산비가 충분하고
                        // 여유공간이 있으면
                        if (user.Resource >= produceFee &&
                            company.ProductList.Count < maxProductCount)
                        {
                            // 생산비 차감
                            user.Resource -= produceFee;


                            // 회사 창고에 생산품 추가
                            company.AddProduct(techChip.Clone());


                            // 생산 알림
                            NetMessageStream writer = new NetMessageStream();
                            writer.WriteData(companyName);
                            writer.WriteData(techName);

                            return(writer.CreateMessage((int)MessageTypes.Rsp_ProduceProduct));
                        }
                    }
                }
            }


            return(null);
        }
예제 #2
0
        private NetMessage WhenReqSellTech(ServerVisitor client, NetMessageStream msg)
        {
            string userName    = msg.ReadData <string>();
            string companyName = msg.ReadData <string>().Trim();
            string techName    = msg.ReadData <string>().Trim();
            int    price       = msg.ReadData <int>();
            string targetUser  = msg.ReadData <string>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);
                var company = this.FindCompanyByName(companyName);

                // 유저가 존재하고
                // 존재하는 회사가 유저의 소유이고
                // 기술 이름이 유효하고
                if (user != null &&
                    company != null && company.Owner == user.Name &&
                    techName.Length > 0)
                {
                    Chip techChip = company.GetTech(techName);

                    // 해당 기술이 회사에 존재하면
                    if (techChip != null)
                    {
                        // 판매 허가 및 기술 상점에 추가
                        SellingTech sellingTech = new SellingTech()
                        {
                            Name       = techChip.Name,
                            Price      = price,
                            Seller     = company.Name,
                            TargetUser = targetUser,
                            Item       = techChip.Clone(),
                        };
                        m_techStore.Add(sellingTech);


                        // 기술 판매 알림
                        NetMessageStream writer = new NetMessageStream();
                        writer.WriteData(company.Name);
                        writer.WriteData(techChip.Name);
                        writer.WriteData(price);

                        // 따로 허가된 유저가 있으면
                        if (targetUser.Length > 0)
                        {
                            // 판매자와 그 유저에게만 알림
                            this.NoticeWhereDelegate(new string[] { targetUser, user.Name },
                                                     writer.CreateMessage((int)MessageTypes.Ntf_SellTech));
                        }
                        else
                        {
                            // 전체공개이면 그냥 모두에게 알림
                            this.NoticeDelegate(writer.CreateMessage((int)MessageTypes.Ntf_SellTech));
                        }
                    }
                }
            }


            return(null);
        }
예제 #3
0
        private NetMessage WhenReqSellProduct(ServerVisitor client, NetMessageStream msg)
        {
            string userName     = msg.ReadData <string>();
            string companyName  = msg.ReadData <string>().Trim();
            int    productIndex = msg.ReadData <int>();
            int    price        = msg.ReadData <int>();
            string targetUser   = msg.ReadData <string>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);
                var company = this.FindCompanyByName(companyName);

                // 유저가 존재하고
                // 존재하는 회사가 유저의 소유이고
                // 제품 번호가 유효하고
                if (user != null &&
                    company != null && company.Owner == user.Name &&
                    productIndex >= 0)
                {
                    Chip productChip = company.GetProductAt(productIndex);

                    // 해당 제품이 회사에 존재하면
                    if (productChip != null)
                    {
                        // 판매 허가 및 제품 상점에 추가
                        SellingTech sellingProduct = new SellingTech()
                        {
                            Name       = productChip.Name,
                            Price      = price,
                            Seller     = company.Name,
                            TargetUser = targetUser,
                            Item       = productChip.Clone(),
                        };
                        m_productStore.Add(sellingProduct);


                        // 회사의 창고에서 제거
                        client.Sender.SendMessage(GetDiscardProductNotice(company.Name, productIndex));


                        // 제품 판매 알림
                        NetMessageStream writer = new NetMessageStream();
                        writer.WriteData(company.Name);
                        writer.WriteData(productChip.Name);
                        writer.WriteData(price);

                        // 따로 허가된 유저가 있으면
                        if (targetUser.Length > 0)
                        {
                            // 판매자와 그 유저에게만 알림
                            this.NoticeWhereDelegate(new string[] { targetUser, user.Name },
                                                     writer.CreateMessage((int)MessageTypes.Ntf_SellProduct));
                        }
                        else
                        {
                            // 전체공개이면 그냥 모두에게 알림
                            this.NoticeDelegate(writer.CreateMessage((int)MessageTypes.Ntf_SellProduct));
                        }
                    }
                }
            }


            return(null);
        }