Пример #1
0
        public byte[] BuyItemFromGuild(byte[] argument)
        {
            lock (this)
            {
                ushort guildIDBuying    = swap16(BitConverter.ToUInt16(argument, 0));
                uint   itemIDBuying     = swap32(BitConverter.ToUInt32(argument, 2));
                ushort quantityOfBuying = swap16(BitConverter.ToUInt16(argument, 6));
                uint   priceOfEachPiece = swap32(BitConverter.ToUInt32(argument, 8));
                Console.WriteLine("Guild ID " + guildIDBuying + "\nItem ID = " + itemIDBuying + "\nitem Quantity " +
                                  quantityOfBuying + "\nprice of each piece " + priceOfEachPiece);

                GuildItemShopModel guildItemShopModel =
                    DBAccess.getInstance().GetSingleGuildItem(guildIDBuying, itemIDBuying);

                GuildRepositoryModel guildRepositoryModel = DBAccess.getInstance().GetGuildInfo(guildIDBuying);
                guildItemShopModel.Quantity -= quantityOfBuying;

                uint totalGPToAdd = priceOfEachPiece * quantityOfBuying;

                guildRepositoryModel.Gp += (int)totalGPToAdd;

                DBAccess.getInstance().UpdateSingleGuildItem(guildItemShopModel, false);
                DBAccess.getInstance().UpdateGuildInfo(guildRepositoryModel);

                MemoryStream m = new MemoryStream();
                m.Write(BitConverter.GetBytes(swap16(quantityOfBuying)));
                return(m.ToArray());
            }
        }
Пример #2
0
        public ushort CreateGuild(byte[] argument, uint masterPlayerID)
        {
            lock (this)
            {
                int pos = 0;

                byte[] guildNameBytes = ReadByteString(argument, pos);
                pos += guildNameBytes.Length;

                byte[] guildCommentBytes = ReadByteString(argument, pos);
                pos += guildCommentBytes.Length;

                byte[] guildEmblem = ReadByteGuildEmblem(argument, pos);

                GuildRepositoryModel model = new GuildRepositoryModel();
                model.GuildName         = guildNameBytes;
                model.GuildComment      = guildCommentBytes;
                model.GuildEmblem       = guildEmblem;
                model.GoldCoin          = 0;
                model.SilverCoin        = 0;
                model.BronzeCoin        = 0;
                model.Gp                = 0;
                model.MasterPlayerID    = (int)masterPlayerID;
                model.EstablishmentDate = DateTime.Now.ToString("yyyy/MM/dd");

                ushort guildID = DBAccess.getInstance().CreateGuild(model);

                DBAccess.getInstance().EnrollPlayerInGuild(guildID, masterPlayerID, true);

                return(guildID);
            }
        }
Пример #3
0
        public byte[] DonateCoinsToGuild(byte[] argument)
        {
            lock (this)
            {
                ushort guildIDCointToDonate = swap16(BitConverter.ToUInt16(argument, 0));
                ushort goldCoinDonate       = swap16(BitConverter.ToUInt16(argument, 2));
                ushort silverCoinDonate     = swap16(BitConverter.ToUInt16(argument, 4));
                ushort bronzeCoinDonate     = swap16(BitConverter.ToUInt16(argument, 6));

                Console.WriteLine("Gold Coin Donation " + goldCoinDonate);
                Console.WriteLine("Silver Coin Donation " + silverCoinDonate);
                Console.WriteLine("Bronze Coin Donation " + bronzeCoinDonate);

                GuildRepositoryModel guildRepositoryModel = DBAccess.getInstance().GetGuildInfo(guildIDCointToDonate);
                guildRepositoryModel.GoldCoin   += goldCoinDonate;
                guildRepositoryModel.SilverCoin += silverCoinDonate;
                guildRepositoryModel.BronzeCoin += bronzeCoinDonate;

                DBAccess.getInstance().UpdateGuildInfo(guildRepositoryModel);

                MemoryStream m = new MemoryStream();
                m.Write(BitConverter.GetBytes(swap16(goldCoinDonate)));
                m.Write(BitConverter.GetBytes(swap16(silverCoinDonate)));
                m.Write(BitConverter.GetBytes(swap16(bronzeCoinDonate)));

                return(m.ToArray());
            }
        }
Пример #4
0
        public void UpdateGuildInfo(GuildRepositoryModel guildRepositoryModel)
        {
            using ISession session = _sessionFactory.OpenSession();

            using ITransaction transaction = session.BeginTransaction();

            session.SaveOrUpdate(guildRepositoryModel);
            transaction.Commit();
            session.Close();
        }
Пример #5
0
        public ushort CreateGuild(GuildRepositoryModel guildRepositoryModel)
        {
            using ISession session = _sessionFactory.OpenSession();

            using ITransaction transaction = session.BeginTransaction();

            session.Save(guildRepositoryModel);
            transaction.Commit();
            session.Close();

            return((ushort)guildRepositoryModel.GuildID);
        }
Пример #6
0
 public byte[] LeaveGuildAndAssignMaster(ushort guildId, uint playerToAssign)
 {
     lock (this)
     {
         CharacterRepositoryModel characterRepositoryModel = DBAccess.getInstance().GetCharacterInfo(playerToAssign);
         characterRepositoryModel.GuildMaster = 1;
         DBAccess.getInstance().updatePlayerInfo(characterRepositoryModel);
         GuildRepositoryModel guildInfo = DBAccess.getInstance().GetGuildInfo(guildId);
         guildInfo.MasterPlayerID = (int)playerToAssign;
         DBAccess.getInstance().UpdateGuildInfo(guildInfo);
         return(new byte[] { 0x00, 0x00 });
     }
 }
Пример #7
0
        public byte[] TakeMoneyFromGuild(ushort guildID, uint amountOfMoney)
        {
            GuildRepositoryModel guildRepositoryModel = DBAcess.getInstance().GetGuildInfo(guildID);

            guildRepositoryModel.Gp -= (int)amountOfMoney;

            DBAcess.getInstance().UpdateGuildInfo(guildRepositoryModel);

            MemoryStream m = new MemoryStream();

            m.Write(BitConverter.GetBytes(swap32(amountOfMoney)));
            return(m.ToArray());
        }
Пример #8
0
        public GuildRepositoryModel GetGuildInfo(ushort guildID)
        {
            using ISession session = _sessionFactory.OpenSession();

            using ITransaction transaction = session.BeginTransaction();

            GuildRepositoryModel guildRepositoryModel = session.Query <GuildRepositoryModel>().SingleOrDefault(
                x => x.GuildID == guildID);


            transaction.Commit();
            session.Close();

            return(guildRepositoryModel);
        }
Пример #9
0
        public byte[] UpdateGuildEmblemComment(byte[] argument, ushort guildID)
        {
            int pos = 0;

            byte[] guildNameBytes = ReadByteString(argument, pos);
            pos += guildNameBytes.Length;

            byte[] guildCommentBytes = ReadByteString(argument, pos);
            pos += guildCommentBytes.Length;

            byte[] guildEmblem = ReadByteGuildEmblem(argument, pos);

            GuildRepositoryModel guildRepositoryModel = DBAcess.getInstance().GetGuildInfo(guildID);

            guildRepositoryModel.GuildComment = guildCommentBytes;
            guildRepositoryModel.GuildEmblem  = guildEmblem;

            DBAcess.getInstance().UpdateGuildInfo(guildRepositoryModel);

            return(new byte[] { 0x00, 0x00 });
        }
Пример #10
0
        public async Task SaveGuildMailAsync(byte[] data)
        {
            var dateNow = DateTime.UtcNow;

            var guildIdByteArray = new byte[2];         // 0x00 0x01

            var senderAccountIdByteArray = new byte[4]; // 0x02 0x03 0x04 0x05
            var sender  = new byte[16];                 // 0x06 for 16 count
            var subject = new byte[32];                 // 0x18 = 24 for 32 count
            var body    = new byte[1200];               // 0x98 = 152 for 1200 count
            var face    = new byte[25];                 // 0x54A = 1354 for 25 count

            logger.Debug("Taking data block and breaking it out...");
            Buffer.BlockCopy(data, 0, guildIdByteArray, 0, 2);
            Buffer.BlockCopy(data, 2, senderAccountIdByteArray, 0, 4);
            Buffer.BlockCopy(data, 6, sender, 0, 16);
            Buffer.BlockCopy(data, 24, subject, 0, 32);
            Buffer.BlockCopy(data, 152, body, 0, 1200);
            Buffer.BlockCopy(data, 1354, face, 0, 25);


            ushort guildId = BitConverter.ToUInt16(guildIdByteArray).Swap();
            GuildRepositoryModel guildRepositoryModel = await Task.Run(() => DBAccess.getInstance().GetGuildInfo(guildId));

            int senderAccountId = (int)BitConverter.ToUInt32(senderAccountIdByteArray).Swap();

            logger.Debug("...completed; dumping primative information");

            logger.Debug("Receiving Guild ID: {0}", guildId);
            logger.Debug("Receiver Guild Name: {0} ", encoding.GetString(guildRepositoryModel.GuildName));  // Get guild name from DB
            logger.Debug("Sender Account ID: {0}", senderAccountId);
            logger.Debug("Sender Name: {0}", encoding.GetString(sender));
            logger.Debug("Subject Line: {0}", encoding.GetString(subject));
            logger.Debug("Message Body: {0}", encoding.GetString(body));
            logger.Debug("Face ID: {0}", encoding.GetString(face));


            List <CharacterRepositoryModel> guildMembers = await Task.Run(() => DBAccess.getInstance().GetAllGuildMembers(guildId));

            HashSet <int> receiverAccountIdSet = guildMembers.Select(m => m.accountID).ToHashSet(); // get unique accountIDs only

            if (receiverAccountIdSet.Contains(senderAccountId))
            {
                receiverAccountIdSet.Remove(senderAccountId);  // just so that we don't send the mail to the sender
            }

            MailBodyModel bodyModel = new MailBodyModel // this only needed to be created once
            {
                Mail_Body    = body,
                Mail_Face_ID = encoding.GetString(face)
            };

            foreach (int receiverAccountId in receiverAccountIdSet)
            {
                MailMetaModel metaModel = new MailMetaModel
                {
                    Receiver_Account_ID = receiverAccountId,
                    Receiver_Name       = guildRepositoryModel.GuildName,
                    Sender_Account_ID   = senderAccountId,
                    Sender_Name         = sender,
                    Mail_Subject        = subject,
                    date           = dateNow,
                    Mail_Delivered = false
                };
                await Task.Run(() => DBAccess.getInstance().CreateNewMail(metaModel, bodyModel));
            }

            logger.Information("An email has been sent by {0} to Guild Members of {1}. Saving...", encoding.GetString(sender), encoding.GetString(guildRepositoryModel.GuildName));

            logger.Information("The emails has been saved to the database");
        }
Пример #11
0
        public byte[] GetGuildInfo(ushort guildID)
        {
            lock (this)
            {
                GuildRepositoryModel     guildRepositoryModel = DBAccess.getInstance().GetGuildInfo(guildID);
                CharacterRepositoryModel guildMaster          =
                    DBAccess.getInstance().GetCharacterInfo((uint)guildRepositoryModel.MasterPlayerID);
                List <CharacterRepositoryModel> listOfmembers = DBAccess.getInstance().GetAllGuildMembers(guildID);


                MemoryStream m = new MemoryStream();

                m.Write(guildRepositoryModel.GuildName);
                m.Write(_encoding.GetBytes(guildRepositoryModel.EstablishmentDate)); //date
                m.Write(new byte[] { 0x00 });
                m.Write(guildMaster.CharacterName);


                int memTotal    = listOfmembers.Count;
                int twinBlade   = 0;
                int bladeMaster = 0;
                int heavyBlade  = 0;
                int heaveyAxes  = 0;
                int longArm     = 0;
                int waveMaster  = 0;
                int totalLevel  = 0;


                foreach (var member in listOfmembers)
                {
                    if (member.ClassID == 0)
                    {
                        twinBlade++;
                    }
                    if (member.ClassID == 1)
                    {
                        bladeMaster++;
                    }
                    if (member.ClassID == 2)
                    {
                        heavyBlade++;
                    }
                    if (member.ClassID == 3)
                    {
                        heaveyAxes++;
                    }
                    if (member.ClassID == 4)
                    {
                        longArm++;
                    }

                    if (member.ClassID == 5)
                    {
                        waveMaster++;
                    }

                    totalLevel += member.CharacterLevel;
                }

                int avgLevel = 0;

                if (memTotal != 0)
                {
                    avgLevel = totalLevel / memTotal;
                }


                m.Write(BitConverter.GetBytes(swap16((ushort)memTotal)), 0, 2);
                m.Write(BitConverter.GetBytes(swap16((ushort)twinBlade)), 0, 2);
                m.Write(BitConverter.GetBytes(swap16((ushort)bladeMaster)), 0, 2);
                m.Write(BitConverter.GetBytes(swap16((ushort)heavyBlade)), 0, 2);
                m.Write(BitConverter.GetBytes(swap16((ushort)heaveyAxes)), 0, 2);
                m.Write(BitConverter.GetBytes(swap16((ushort)longArm)), 0, 2);
                m.Write(BitConverter.GetBytes(swap16((ushort)waveMaster)), 0, 2);
                m.Write(BitConverter.GetBytes(swap16((ushort)avgLevel)), 0, 2);


                m.Write(BitConverter.GetBytes(swap32((uint)guildRepositoryModel.GoldCoin)), 0, 4);
                m.Write(BitConverter.GetBytes(swap32((uint)guildRepositoryModel.SilverCoin)), 0, 4);
                m.Write(BitConverter.GetBytes(swap32((uint)guildRepositoryModel.BronzeCoin)), 0, 4);

                m.Write(BitConverter.GetBytes(swap32((uint)guildRepositoryModel.Gp)), 0, 4);

                m.Write(guildRepositoryModel.GuildComment);

                m.Write(guildRepositoryModel.GuildEmblem);
                m.Write(new byte[] { 0x00 });

                return(m.ToArray());
            }
        }
Пример #12
0
        public byte[] getRankingPlayerInfo(uint playerID)
        {
            CharacterRepositoryModel characterRepositoryModel = DBAcess.getInstance().GetCharacterInfo(playerID);
            GuildRepositoryModel     guildRepositoryModel     = null;
            bool inGuild = false;

            if (characterRepositoryModel.GuildID != 0)
            {
                guildRepositoryModel = DBAcess.getInstance().GetGuildInfo((ushort)characterRepositoryModel.GuildID);
                inGuild = true;
            }

            MemoryStream m = new MemoryStream();

            m.Write(characterRepositoryModel.CharachterName);

            if (characterRepositoryModel.ClassID == 0)
            {
                m.Write(new byte[] { 0x00 });
            }
            if (characterRepositoryModel.ClassID == 1)
            {
                m.Write(new byte[] { 0x01 });
            }
            if (characterRepositoryModel.ClassID == 2)
            {
                m.Write(new byte[] { 0x02 });
            }
            if (characterRepositoryModel.ClassID == 3)
            {
                m.Write(new byte[] { 0x03 });
            }
            if (characterRepositoryModel.ClassID == 4)
            {
                m.Write(new byte[] { 0x04 });
            }
            if (characterRepositoryModel.ClassID == 5)
            {
                m.Write(new byte[] { 0x05 });
            }

            m.Write(BitConverter.GetBytes(swap16((ushort)characterRepositoryModel.CharachterLevel)));
            m.Write(characterRepositoryModel.Greeting);

            if (inGuild && guildRepositoryModel != null)
            {
                m.Write(guildRepositoryModel.GuildName);
            }
            else
            {
                m.Write(new byte[] { 0x00 });
            }

            m.Write(BitConverter.GetBytes(swap32((uint)characterRepositoryModel.ModelNumber)));

            if (characterRepositoryModel.OnlineStatus)
            {
                m.Write(new byte[] { 0x01 });
            }
            else
            {
                m.Write(new byte[] { 0x00 });
            }

            if (characterRepositoryModel.GuildMaster == 1)
            {
                m.Write(new byte[] { 0x01 });
            }
            else if (characterRepositoryModel.GuildMaster == 2)
            {
                m.Write(new byte[] { 0x02 });
            }
            else
            {
                m.Write(new byte[] { 0x03 });
            }

            return(m.ToArray());
        }