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