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); }
//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); }
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); } }
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); } } }
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 }
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); } } }
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); } }
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; } }
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(); }
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(); }
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); }
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(); }
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 }
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); } }
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); } }
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; }
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); }
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(); }
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); } } }
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(); }
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(); }
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); }
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)); }
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); } }
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); } }
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); }
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); } } }
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(); } } }
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); } } }
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); } } }
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(); } } }