Beispiel #1
0
        public static void OneLoadGuildInCharacter(WorldCharacter pChar)
        {
            DatabaseClient dbClient  = Program.DatabaseManager.GetClient();
            int            GuildID   = dbClient.ReadInt32("SELECT GuildID FROM guildmembers WHERE CharID='" + pChar.ID + "'");
            int            AcademyID = dbClient.ReadInt32("SELECT GuildID FROM guildacademymembers WHERE CharID='" + pChar.ID + "'");

            if (AcademyID > 0 && GuildID == 0)
            {
                Data.Guilds.Guild g;
                if (!Data.Guilds.GuildManager.GetGuildByID(AcademyID, out g))
                {
                    return;
                }
                pChar.GuildAcademy     = g.Academy;
                pChar.IsInGuildAcademy = true;
            }
            else if (GuildID > 0 && AcademyID == 0)
            {
                Data.Guilds.Guild g;
                if (!Data.Guilds.GuildManager.GetGuildByID(GuildID, out g))
                {
                    return;
                }
                pChar.Guild        = g;
                pChar.GuildAcademy = g.Academy;
                pChar.IsInGuild    = true;
                Data.Guilds.GuildMember GuildMember = g.Members.Find(m => m.Character.Character.Name == pChar.Character.Name);
                GuildMember.Character.Client = pChar.Client;
            }
        }
        public GuildAcademyMember(GuildAcademy Academy, WorldCharacter Character, DataRow Row)
        {
            this.Academy   = Academy;
            this.Character = Character;

            Load(Row);
        }
Beispiel #3
0
        //Fills controls' values
        public void updateControls()
        {
            //Group box
            this.grpPlayerInfo.Text            = Character.Name;
            this.resistancePointsLabel1.Text   = Character.getValue("Resistance").ToString();
            this.fortitudePointsLabel1.Text    = Character.getValue("Fortitude").ToString();
            this.selfControlPointsLabel1.Text  = Character.getValue("Self Control").ToString();
            this.persuasionPointsLabel1.Text   = Character.getValue("Persuasion").ToString();
            this.intimidationPointsLabel1.Text = Character.getValue("Intimidation").ToString();
            this.subterfugePointsLabel1.Text   = Character.getValue("Subterfuge").ToString();
            this.perceptionPointsLabel1.Text   = Character.getValue("Perception").ToString();

            int toneValue = (int)WorldCharacter.getValue("Tone");

            this.toneComboBox.SelectedIndex = toneValue < 6 ? (int)(toneValue / 2) :
                                              (int)((toneValue - 1) / 2);

            //Update grids
            SoMGridP1.SoMAnger = (int)Character.getValue("StateOfMindAngerFear");
            SoMGridP1.SoMJoy   = (int)Character.getValue("StateOfMindJoySorrow");


            txtMatchTranscript.Text = Match.Transcript.Replace("\n", "\r\n");

            //Update Arguement feedback if the action was mine, or if it was the opponent but it was visible
            if (Match.LastArgument != null && (!Match.LastArgument.hidden || Match.LastArgument.playerName.Equals(playerName)))
            {
                txtArgumentFeedback.Text = Match.LastArgumentTranscript.Replace("\n", "\r\n");
            }
        }
        public Account Map(Account account, WorldCharacter character)
        {
            Account result;

            if (account == null)
            {
                result = this.m_current;
            }
            else
            {
                if (this.m_current != null && this.m_current.Id == account.Id)
                {
                    this.m_current.WorldCharacters.Add(character);
                    result = null;
                }
                else
                {
                    Account current = this.m_current;
                    this.m_current = account;
                    this.m_current.WorldCharacters.Add(character);
                    result = current;
                }
            }
            return(result);
        }
 public GuildAcademyMember(GuildAcademy Academy, WorldCharacter Character, DateTime RegisterDate, GuildAcademyRank Rank)
 {
     this.Academy      = Academy;
     this.Character    = Character;
     this.RegisterDate = RegisterDate;
     this.Rank         = Rank;
 }
        public static void WriteBasicCharInfo(WorldCharacter wchar, Packet packet)
        {
            packet.WriteInt(wchar.Character.ID);
            packet.WriteString(wchar.Character.Name, 16);
            packet.WriteUShort(wchar.Character.CharLevel);
            packet.WriteByte(wchar.Character.Slot);
            MapInfo mapinfo;

            if (!DataProvider.Instance.Maps.TryGetValue(wchar.Character.Map, out mapinfo))
            {
                Log.WriteLine(LogLevel.Warn, "{0} has an invalid MapID ({1})", wchar.Character.Name, wchar.Character.Map);
                wchar.Character.Map = 0;//we reset
                packet.WriteString("Rou", 12);
            }
            else
            {
                packet.WriteString(mapinfo.ShortName, 12);
            }
            packet.WriteByte(0);               // UNK
            packet.WriteInt(0x00000000);       // Random seed
            WriteLook(wchar, packet);
            WriteEquipment(wchar, packet);
            WriteRefinement(wchar, packet);
            packet.Fill(4, 0xff);          // UNK
            packet.WriteString("Rou", 12); //TODO: load from mapinfo.shn
            packet.WriteInt(0);            // X, doesn't matter
            packet.WriteInt(0);            // Y, neither

            packet.WriteInt(0x63dd45ca);
            packet.WriteByte(0);
            packet.WriteInt(100);               // Test later!
            packet.WriteByte(0);
            wchar.Detach();
        }
 public static void WriteLook(WorldCharacter wchar, Packet packet)
 {
     packet.WriteByte(Convert.ToByte(0x01 | (wchar.Character.Job << 2) | (Convert.ToByte(wchar.Character.Male)) << 7));
     packet.WriteByte(wchar.Character.Hair);
     packet.WriteByte(wchar.Character.HairColor);
     packet.WriteByte(wchar.Character.Face);
 }
Beispiel #8
0
        private void AddApprenticeReward(WorldCharacter pChar)
        {
            var rewards = DataProvider.Instance.MasterRewards.FindAll(d =>
                                                                      (byte)d.Job == pChar.Character.Job && d.Level == pChar.Character.CharLevel);
            var rr = new MasterRewardItem
            {
                ItemID = 250,
                Count  = 1
            };
            var conn = Program.GetZoneByMap(pChar.Character.PositionInfo.Map);

            if (conn == null)
            {
                return;
            }

            using (var packet = new Packet(SH37Type.SendApprenticeReward))
            {
                packet.WriteByte((byte)rewards.Count);  //count
                foreach (var pReward in rewards)
                {
                    packet.WriteUShort(pReward.ItemID);
                    packet.WriteByte(pReward.Count);
                    packet.WriteByte(0); //unk
                    InterHandler.SendAddReward(conn, pReward.ItemID, pReward.Count, pChar.Character.Name);
                }

                pChar.Client.SendPacket(packet);
            }
        }
Beispiel #9
0
        private static void On_CharacterManager_CharacterLogout(WorldCharacter Character)
        {
            GuildMember member;

            if (Character.Guild != null &&
                Character.Guild.GetMember(Character.Character.Name, out member))
            {
                //send guild member logged out to other guild members
                using (var packet = new Packet(SH29Type.GuildMemberLoggedOut))
                {
                    packet.WriteString(Character.Character.Name, 16);


                    Character.Guild.Broadcast(packet, member);
                }


                //send packet to zone that guild member logged out
                using (var packet = new InterPacket(InterHeader.ZoneGuildMemberLogout))
                {
                    packet.WriteInt(Character.Guild.ID);
                    packet.WriteInt(Character.ID);


                    ZoneManager.Broadcast(packet);
                }
            }
        }
Beispiel #10
0
 public static void WriteRefinement(WorldCharacter wchar, Packet pPacket)
 {
     //TODO: pPacket.WriteByte(Convert.ToByte(this.Inventory.GetEquippedUpgradesByType(ItemType.Weapon) << 4 | this.Inventory.GetEquippedUpgradesByType(ItemType.Shield)));
     pPacket.WriteByte(0xff); //this must be the above, but currently not cached
     pPacket.WriteByte(0xff); // UNK
     pPacket.WriteByte(0xff); // UNK
 }
Beispiel #11
0
        public static void FriendInvite(WorldClient pClient, Packet pPacket)
        {
            string sender, receiver;

            if (!pPacket.TryReadString(out sender, 16) ||
                !pPacket.TryReadString(out receiver, 16))
            {
                Log.WriteLine(LogLevel.Warn, "Error reading friend invite.");
                return;
            }

            WorldCharacter inviter = pClient.Character;
            WorldClient    invitee = ClientManager.Instance.GetClientByCharname(receiver);

            if (invitee == null)
            {
                //character not found
                using (var pack = new Packet(SH21Type.FriendInviteResponse))
                {
                    pack.WriteString(sender, 16);
                    pack.WriteString(receiver, 16);
                    pack.WriteUShort(0x0946);   // Cannot find ${Target}

                    pClient.SendPacket(pack);
                }
            }
            else if (receiver == sender)
            {
                using (var pack = new Packet(SH21Type.FriendInviteResponse))
                {
                    pack.WriteString(sender, 16);
                    pack.WriteString(receiver, 16);
                    pack.WriteUShort(0x0942);   // You cannot add yourself to your Buddy List.

                    pClient.SendPacket(pack);
                }
            }
            else if (inviter.Friends.Find(f => f.Name == receiver) != null)
            {
                using (var pack = new Packet(SH21Type.FriendInviteResponse))
                {
                    pack.WriteString(sender, 16);
                    pack.WriteString(receiver, 16);
                    pack.WriteUShort(0x0945);   // {Target} is already registered in the friends list.
                    pClient.SendPacket(pack);
                }
            }
            else
            {
                using (var pack = new Packet(SH21Type.FriendInviteRequest))
                {
                    pack.WriteString(receiver, 16);
                    pack.WriteString(sender, 16);

                    invitee.SendPacket(pack);
                }
            }
        }
Beispiel #12
0
 private static void SendCharOKResponse(WorldClient client, WorldCharacter character)
 {
     using (var packet = new Packet(SH5Type.CharCreationOK))
     {
         packet.WriteByte(1);
         PacketHelper.WriteBasicCharInfo(character, packet);
         client.SendPacket(packet);
     }
 }
Beispiel #13
0
        public static void CreateCharHandler(WorldClient client, Packet packet)
        {
            string name;
            byte   slot, jobGender, hair, color, style;

            if (!packet.TryReadByte(out slot) || !packet.TryReadString(out name, 16) ||
                !packet.TryReadByte(out jobGender) || !packet.TryReadByte(out hair) ||
                !packet.TryReadByte(out color) || !packet.TryReadByte(out style))
            {
                Log.WriteLine(LogLevel.Warn, "Error reading create char for {0}", client.Username);
                return;
            }

            if (DatabaseChecks.IsCharNameUsed(name))
            {
                SendCharCreationError(client, CreateCharError.NameTaken);
                return;
            }
            else if (DataProvider.Instance.IsBadName(name))
            {
                SendCharCreationError(client, CreateCharError.NameInUse);
                return;
            }

            byte isMaleByte  = (byte)((jobGender >> 7) & 0x01);
            byte classIDByte = (byte)((jobGender >> 2) & 0x1F);
            Job  job         = (Job)classIDByte;

            switch (job)
            {
            case Job.Archer:
            case Job.Cleric:
            case Job.Fighter:
            case Job.Mage:
            case Job.Trickster:
            case Job.Crusader:
                //create character here
                try
                {
                    WorldCharacter wchar = client.CreateCharacter(name, slot, hair, color, style, job, Convert.ToBoolean(isMaleByte));
                    SendCharOKResponse(client, wchar);
                }
                catch (Exception ex)
                {
                    Log.WriteLine(LogLevel.Exception, "Error creating character for {0}: {1}", client.Username, ex.InnerException.ToString());
                    SendCharCreationError(client, CreateCharError.FailedToCreate);
                    return;
                }
                break;

            default:
                SendCharCreationError(client, CreateCharError.WrongClass);
                Log.WriteLine(LogLevel.Warn, "Invalid job ID at char creation from {0}", client.Username);
                break;
            }
        }
Beispiel #14
0
        public GuildMember(Guild Guild, WorldCharacter Character, GuildRank Rank, ushort Corp)
        {
            this.Guild = Guild;
            this.Character = Character;

            this.Rank = Rank;
            this.Corp = Corp;

            ThreadLocker = new object();
        }
Beispiel #15
0
        public void ChangeDropType(WorldCharacter pBy, byte pDropState)
        {
            if (pBy.Character.Name != Master.Name)
            {
                return; // only the master may change drop state!
            }
            DropState = (DropState)pDropState;

            UpdateDropStateToMembers();
        }
Beispiel #16
0
 public static bool GetLoggedInCharacter(string Name, out WorldCharacter pChar)
 {
     Networking.WorldClient pClient = ClientManager.Instance.GetClientByCharname(Name);
     pChar = null;
     if (pClient != null)
     {
         pChar = pClient.Character;
         return(true);
     }
     return(false);
 }
    // Use this for initialization
    void Start()
    {
        C = (WorldCharacter)this.gameObject.GetComponent(typeof(WorldCharacter));

        CharacterID = C.CharacterId;
        db = GlobalVars.database;
        inv = GlobalVars.inventory;
        myOwner = db.GetCharacter(CharacterID);
        ConversationTopics = new List<int>();
        //myOwner.AddAvaliableTopic(0);
    }
Beispiel #18
0
        public GuildMember(Guild Guild, WorldCharacter Character, GuildRank Rank, ushort Corp)
        {
            this.Guild     = Guild;
            this.Character = Character;

            this.Rank = Rank;
            this.Corp = Corp;


            ThreadLocker = new object();
        }
Beispiel #19
0
 public void InviteNewMember(WorldCharacter pSender, string pTarget)
 {
     if (!ClientManager.Instance.IsOnline(pTarget))
     {
         return;
     }
     if (Master.Name != pSender.Character.Name)
     {
         return;                                            // only the master may invite new Members
     }
     GroupManager.Instance.Invite(pSender.Client, pTarget); // trololol
 }
Beispiel #20
0
        public static void SendGetCharacterBroaucast(WorldCharacter pChar, Packet pPacket)
        {
            var conn = Program.GetZoneByMap(pChar.Character.PositionInfo.Map);

            using (var packet = new InterPacket(InterHeader.GetBroadcastList))
            {
                packet.WriteString(pChar.Character.Name, 16);
                packet.WriteInt(pPacket.ToNormalArray().Length);
                packet.WriteBytes(pPacket.ToNormalArray());
                conn.SendPacket(packet);
            }
        }
Beispiel #21
0
        public static void SendChangeMap(WorldCharacter pChar, int OldMap)
        {
            CharacterManager.InvokeChangeMapEvent(pChar);
            var conn = Program.GetZoneByMap(OldMap);

            using (var packet = new InterPacket(InterHeader.GetBroadcastList))
            {
                packet.WriteString(pChar.Character.Name, 16);
                packet.WriteInt(pChar.Character.PositionInfo.XPos);
                packet.WriteInt(pChar.Character.PositionInfo.YPos);
                conn.SendPacket(packet);
            }
        }
Beispiel #22
0
        public static void UpdateMoneyInWorld(ZoneConnection lc, InterPacket packet)
        {
            string charname = string.Empty;
            long   NewMoney = 0;

            if (!packet.TryReadString(out charname, 16) || !packet.TryReadLong(out NewMoney))
            {
                return;
            }
            WorldCharacter Pchar = ClientManager.Instance.GetClientByCharname(charname).Character;

            Pchar.Character.Money = NewMoney;
        }
Beispiel #23
0
        public WorldCharacter CreateCharacter(string name, byte slot, byte hair, byte color, byte face, Job job, bool ismale)
        {
            if (Characters.ContainsKey(slot) || slot > 5)
            {
                return(null);
            }
            //TODO: check if hair etc are actual beginner ones! (premium hack)

            BaseStatsEntry stats = DataProvider.Instance.JobBasestats[job];

            if (stats == null)
            {
                Log.WriteLine(LogLevel.Warn, "Houston, we have a problem! Jobstats not found for job {0}", job.ToString());
                return(null);
            }

            Character newchar = new Character();

            newchar.AccountID = this.AccountID;
            newchar.CharLevel = 1;
            newchar.Name      = name;
            newchar.Face      = face;
            newchar.Hair      = hair;
            newchar.HairColor = color;
            newchar.Job       = (byte)job;
            newchar.Male      = ismale;
            newchar.Slot      = slot;
            newchar.XPos      = 7636;
            newchar.YPos      = 4610;
            newchar.HP        = (short)stats.MaxHP;
            newchar.SP        = (short)stats.MaxSP;
            newchar.HPStones  = (short)stats.MaxHPStones;
            newchar.SPStones  = (short)stats.MaxSPStones;
            Program.Entity.AddToCharacters(newchar);
            int    charID   = newchar.ID;
            ushort begineqp = GetBeginnerEquip(job);

            if (begineqp > 0)
            {
                DatabaseEquip eqp = new DatabaseEquip();
                eqp.EquipID = begineqp;
                eqp.Slot    = (short)((job == Job.Archer) ? -10 : -12);
                newchar.Equips.Add(eqp);
            }
            Program.Entity.SaveChanges();
            WorldCharacter tadaa = new WorldCharacter(newchar, (job == Job.Archer) ? (byte)12 : (byte)10, begineqp);

            Characters.Add(slot, tadaa);
            return(tadaa);
        }
Beispiel #24
0
        public void RemoveMasterMember(WorldCharacter pChar, string name)
        {
            MasterMember pMember = pChar.MasterList.Find(d => d.pMemberName == name);
            WorldClient  pClient = ClientManager.Instance.GetClientByCharname(name);

            if (pClient != null)
            {
                SendApprenticeRemoveMaster(pClient, pMember.pMemberName);
                pClient.Character.MasterList.Remove(pMember);
            }
            pMember.RemoveFromDatabase();
            pMember.RemoveFromDatabase(pChar.Character.ID, pMember.pMemberName);
            pChar.MasterList.Remove(pMember);
            pChar.UpdateMasterJoin();
        }
Beispiel #25
0
        public void ApprenticeLevelUP(WorldCharacter pChar)
        {
            MasterMember pMember = pChar.MasterList.Find(d => d.IsMaster == true);

            if (pMember != null)
            {
                //Todo Add Break if the difference is greater than 5
                AddApprenticeReward(pChar);
                MasterMember.UpdateLevel(pChar.Character.CharLevel, pChar.Character.Name);
                if (pMember.pMember.Character.Client != null)
                {
                    SendApprenticeLevelUp(pMember.pMember, pChar.Character.Name, pChar.Character.CharLevel);
                }
            }
        }
Beispiel #26
0
        public Guild(MySqlConnection con, int ID, string Name, byte[] Password, bool AllowGuildWar, WorldCharacter Creater, DateTime CreateTime)
            : this()
        {
            this.ID = ID;
            this.Name = Name;
            _Password = Password;

            this.AllowGuildWar = AllowGuildWar;
            this.CreateTime = CreateTime;

            Message = "";
            MessageCreateTime = Program.CurrentTime;
            MessageCreater = Creater;

            Load();
        }
Beispiel #27
0
        public Guild(MySqlConnection con, int ID, string Name, byte[] Password, bool AllowGuildWar, WorldCharacter Creater, DateTime CreateTime)
            : this()
        {
            this.ID   = ID;
            this.Name = Name;
            _Password = Password;

            this.AllowGuildWar = AllowGuildWar;
            this.CreateTime    = CreateTime;

            Message           = "";
            MessageCreateTime = Program.CurrentTime;
            MessageCreater    = Creater;


            Load();
        }
Beispiel #28
0
        public WorldCharacter CreateAccountCharacter(Account account, WorldServer world, int characterId)
        {
            if (account.WorldCharacters.Any(entry => entry.CharacterId == characterId))
            {
                return(null);
            }

            var character = new WorldCharacter
            {
                AccountId   = account.Id,
                WorldId     = world.Id,
                CharacterId = characterId
            };

            account.WorldCharacters.Add(character);
            Database.Insert(character);

            return(character);
        }
Beispiel #29
0
 public static void WriteEquipment(WorldCharacter wchar, Packet packet)
 {
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Helm));
     packet.WriteUShort(Settings.Instance.ShowEquips ? wchar.GetEquipBySlot(ItemSlot.Weapon) : (ushort)0xffff);
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Armor));
     packet.WriteUShort(Settings.Instance.ShowEquips ? wchar.GetEquipBySlot(ItemSlot.Weapon2) : (ushort)0xffff);
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Pants));
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Boots));
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.CostumeBoots));
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.CostumePants));
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.CostumeArmor));
     packet.Fill(6, 0xff); // UNK
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Glasses));
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.CostumeHelm));
     packet.Fill(2, 0xff); // UNK
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.CostumeWeapon));
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Wing));
     packet.Fill(2, 0xff); // UNK
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Tail));
     packet.WriteUShort(wchar.GetEquipBySlot(ItemSlot.Pet));
 }
Beispiel #30
0
 public bool GetCharacterByID(int ID, out WorldCharacter pChar)
 {
     World.Networking.WorldClient pclient = ClientManager.Instance.GetClientByCharID(ID);
     if (pclient != null)
     {
         pChar = pclient.Character;
         return(true);
     }
     else
     {
         pChar = null;
         Character      DBpChar    = ReadMethods.ReadCharObjectByIDFromDatabase(ID, Program.DatabaseManager);
         WorldCharacter ReaderChar = new WorldCharacter(DBpChar, null);
         pChar = ReaderChar;
         if (DBpChar == null)
         {
             return(false);
         }
         return(true);
     }
 }
Beispiel #31
0
        public static void DeleteCharacterHandler(WorldClient client, Packet packet)
        {
            byte slot;

            if (!packet.TryReadByte(out slot) || slot > 10 || !client.Characters.ContainsKey(slot))
            {
                Log.WriteLine(LogLevel.Warn, "{0} tried to delete character out of range.", client.Username);
                return;
            }
            WorldCharacter todelete = client.Characters[slot];

            if (todelete.Delete())
            {
                client.Characters.Remove(slot);
                SendCharDeleteOKResponse(client, slot);
            }
            else
            {
                Handler3.SendError(client, ServerError.DatabaseError);
            }
        }
Beispiel #32
0
        public static void WriteBasicCharInfo(WorldCharacter wchar, Packet packet)
        {
            packet.WriteInt(wchar.Character.ID);          //charid
            packet.FillPadding(wchar.Character.Name, 0x10);
            packet.WriteInt(0);                           //unk
            packet.WriteShort(wchar.Character.CharLevel); //level
            packet.WriteByte(wchar.Character.Slot);
            MapInfo mapinfo;

            if (!DataProvider.Instance.Maps.TryGetValue(wchar.Character.PositionInfo.Map, out mapinfo))
            {
                Log.WriteLine(LogLevel.Warn, "{0} has an invalid MapID ({1})", wchar.Character.Name,
                              wchar.Character.PositionInfo.Map);
                wchar.Character.PositionInfo.Map = 0;
                packet.FillPadding(mapinfo.ShortName, 0x0D); //townname
            }
            else
            {
                packet.FillPadding(mapinfo.ShortName, 0x0D); //townname
            }

            //packet.WriteByte(0); // UNK
            packet.WriteInt(0); // Random seed
            WriteLook(wchar, packet);
            WriteEquipment(wchar, packet);
            WriteRefinement(wchar, packet);
            packet.WriteByte(0);

            packet.WriteByte(0xF0);
            packet.WriteByte(0xFF); //unk
            packet.WriteByte(0xFF);

            packet.FillPadding(mapinfo.ShortName, 0x0c);
            packet.WriteInt(0);       //pos
            packet.WriteInt(0);       //pos
            packet.WriteUShort(0xdb78);
            packet.WriteUShort(4910); //unk
            packet.WriteUShort(25600);
            packet.Fill(4, 0);
        }
        public WorldCharacter CreateAccountCharacter(Account account, WorldServer world, int characterId)
        {
            WorldCharacter result;

            if (account.WorldCharacters.Any((WorldCharacter entry) => entry.CharacterId == characterId))
            {
                result = null;
            }
            else
            {
                WorldCharacter worldCharacter = new WorldCharacter
                {
                    AccountId   = account.Id,
                    WorldId     = world.Id,
                    CharacterId = characterId
                };
                account.WorldCharacters.Add(worldCharacter);
                base.Database.Insert(worldCharacter);
                result = worldCharacter;
            }
            return(result);
        }
Beispiel #34
0
        private static void On_CharacterManager_CharacterLogout(WorldCharacter Character)
        {
            if (Character.IsInGuildAcademy)
            {
                using (var packet = new Packet(SH38Type.AcademyMemberLoggedOut))
                {
                    packet.WriteString(Character.Character.Name, 16);

                    Character.Guild.Broadcast(packet);
                    Character.GuildAcademy.Broadcast(packet);
                }

                using (var packet = new InterPacket(InterHeader.ZONE_AcademyMemberOffline))
                {
                    packet.WriteInt(Character.Guild.ID);
                    packet.WriteInt(Character.ID);

                    ZoneManager.Instance.Broadcast(packet);
                }
            }
        }
Beispiel #35
0
        private static void On_CharacterManager_CharacterLevelUp(WorldCharacter Character)
        {
            //fix later
            if (Character.IsInGuildAcademy)
            {
                using (var packet = new Packet(SH38Type.AcademyMemberLevelUp))
                {
                    packet.WriteString(Character.Character.Name, 16);
                    packet.WriteByte(Character.Character.CharLevel);

                    Character.Guild.Broadcast(packet);
                    Character.GuildAcademy.Broadcast(packet);
                }

                lock (Character.Guild.ThreadLocker)
                {
                    uint points;
                    if (GuildDataProvider.Instance.AcademyLevelUpPoints.TryGetValue(Character.Character.CharLevel, out points))
                    {
                        Character.GuildAcademy.Points += (ushort)points;
                    }

                    //add time to guild buff
                    var time = Program.CurrentTime;
                    //var newTime = Math.Min(CharacterDataProvider.ChrCommon.GuildBuffMaxTime.TotalSeconds, (CharacterDataProvider.ChrCommon.GuildBuffAddTime.TotalSeconds + Character.GuildAcademy.GuildBuffKeepTime.TotalSeconds));
                    //Character.GuildAcademy.GuildBuffKeepTime = TimeSpan.FromSeconds(newTime);

                    //update guild buff to all guild/aka members
                    var toUpdate = new List<WorldCharacter>();
                    foreach (var member in Character.GuildAcademy.Members)
                    {
                        if (member.Character.IsOnline)
                        {
                            toUpdate.Add(member.Character);
                        }
                    }
                    foreach (var member in Character.Guild.Members)
                    {
                        if (member.Character.IsOnline
                            && !toUpdate.Contains(member.Character))
                        {
                            toUpdate.Add(member.Character);
                        }
                    }

                   //BuffManager.SetBuff(GuildDataProvider.AcademyBuff, GuildDataProvider.AcademyBuffStrength, (uint)(newTime * 1000), toUpdate.ToArray());

                    toUpdate.Clear();
                    toUpdate = null;

                    //update guild buff to zones
                    using (var packet = new InterPacket(InterHeader.ZONE_AcademyBuffUpdate))
                    {
                        packet.WriteInt(Character.Guild.ID);
                        packet.WriteDateTime(time);
                        packet.WriteDouble(900);//fix later

                        ZoneManager.Instance.Broadcast(packet);
                    }

                    //broadcast info and save guild
                    Character.GuildAcademy.BroadcastInfo();
                    Character.GuildAcademy.Save();
               }
            }
        }
Beispiel #36
0
        private static void On_CharacterManager_CharacterLogout(WorldCharacter Character)
        {
            GuildMember member;
            if (Character.Guild != null
                && Character.Guild.GetMember(Character.Character.Name, out member))
            {
                //send guild member logged out to other guild members
                using (var packet = new Packet(SH29Type.GuildMemberLoggedOut))
                {
                    packet.WriteString(Character.Character.Name, 16);

                    Character.Guild.Broadcast(packet, member);
                }

                //send packet to zone that guild member logged out
                using (var packet = new InterPacket(InterHeader.ZONE_GuildMemberLogout))
                {
                    packet.WriteInt(Character.Guild.ID);
                    packet.WriteInt(Character.ID);

                    ZoneManager.Instance.Broadcast(packet);
                }
            }
        }
Beispiel #37
0
        private static void On_CharacterManager_CharacterLogin(WorldCharacter Character)
        {
            if (Character.IsInGuild)
            {
                var guild = Character.Guild;

                //send guild info to client
                using (var packet = new Packet(SH4Type.CharacterGuildinfo))
                {
                    guild.WriteGuildInfo(packet);

                    Character.Client.SendPacket(packet);
                }

                //send member list to client
                guild.SendMemberList(Character.Client);

                GuildMember member;
                if (guild.GetMember(Character.Character.Name, out member))
                {
                    //send guild member logged in to other guild members
                    using (var packet = new Packet(SH29Type.GuildMemberLoggedIn))
                    {
                        packet.WriteString(Character.Character.Name, 16);

                        Character.Guild.Broadcast(packet, member);
                    }
                }

                //send packet to zone that guild member logged in
                using (var packet = new InterPacket(InterHeader.ZONE_GuildMemberLogin))
                {
                    packet.WriteInt(guild.ID);
                    packet.WriteInt(Character.ID);

                    ZoneManager.Instance.Broadcast(packet);
                }
            }
            else
            {
                using (var packet = new Packet(SH4Type.CharacterGuildinfo))
                {
                    packet.WriteInt(0);

                    Character.Client.SendPacket(packet);
                }
            }

            //academy
            var academy = Character.GuildAcademy;
            if (academy != null)
            {
                if (Character.IsInGuildAcademy)
                {
                    using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo))
                    {
                        academy.WriteInfo(packet);

                        Character.Client.SendPacket(packet);
                    }

                    academy.SendMemberList(Character.Client);
                }
                else
                {
                    using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo))
                    {
                        packet.Fill(5, 0);

                        Character.Client.SendPacket(packet);
                    }
                }
            }
            else
            {
                using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo))
                {
                    packet.Fill(5, 0);

                    Character.Client.SendPacket(packet);
                }
            }
        }
Beispiel #38
0
        public void AddMember(WorldCharacter Character, GuildRank Rank, MySqlConnection con = null, bool BroadcastAdd = true, bool SendGuildInfoToClient = true)
        {
            lock (ThreadLocker)
            {
                var conCreated = (con == null);
                if (conCreated)
                {
                    con = Program.DatabaseManager.GetClient().GetConnection();
                }

                //add to db
                int result;
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "GuildMember_Create";

                    cmd.Parameters.Add(new MySqlParameter("@pGuildID", ID));
                    cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Character.ID));
                    cmd.Parameters.Add(new MySqlParameter("@pRank", (byte)Rank));
                    cmd.Parameters.Add(new MySqlParameter("@pCorp", Convert.ToInt16("0")));

                   result  = Convert.ToInt32(cmd.ExecuteScalar());
                }
                if (result == -1)
                    return;
                //create object
                var newMember = new GuildMember(this, Character, Rank, 0);

                //update character
                Character.Guild = this;
                Character.GuildMember = newMember;
                Character.GuildAcademy = Academy;

                //add to list
                Members.Add(newMember);

                if (BroadcastAdd)
                {
                    newMember.BroadcastGuildName();

                    //broadcast that guild member joined
                    using (var packet = new Packet(SH29Type.GuildMemberJoined))
                    {
                        newMember.WriteInfo(packet);

                        Broadcast(packet, newMember);
                    }
                    using (var packet = new Packet(SH29Type.GuildMemberLoggedIn))
                    {
                        packet.WriteString(newMember.Character.Character.Name, 16);

                        Broadcast(packet, newMember);
                    }

                    //let zone know that a new member has been added to guild
                    using (var packet = new InterPacket(InterHeader.ZONE_GuildMemberAdd))
                    {
                        packet.WriteInt(ID);
                        packet.WriteInt(Character.ID);
                        packet.WriteByte((byte)newMember.Rank);
                        packet.WriteUShort(newMember.Corp);

                       Managers.ZoneManager.Instance.Broadcast(packet);
                    }
                }

                //send guild info to new member
                if (SendGuildInfoToClient)
                {
                    SendMemberList(newMember.Character.Client);

                    using (var packet = new Packet(SH4Type.CharacterGuildinfo))
                    {
                        WriteGuildInfo(packet);
                        newMember.Character.Client.SendPacket(packet);
                    }
                }

                if (conCreated)
                {
                    con.Dispose();
                }
            }
        }