Skip to content

Commit af4ad70

Browse files
authored
Merge pull request #55 from elenawinters/master
Implement NotifyServerLevelProcessingComplete GameMessage
2 parents 4cb5a03 + 175b5f3 commit af4ad70

File tree

4 files changed

+56
-9
lines changed

4 files changed

+56
-9
lines changed

Uchu.World/Handlers/GameMessages/GeneralHandler.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,43 @@ public async Task PlayEmoteHandler(PlayEmoteMessage message, Player player)
9797
await message.Target.OnEmoteReceived.InvokeAsync(message.EmoteId, player);
9898
}
9999
}
100+
101+
[PacketHandler]
102+
public async Task NotifyServerLevelProcessingCompleteHandler(NotifyServerLevelProcessingCompleteMessage message, Player player)
103+
{
104+
await using var ctx = new UchuContext();
105+
await using var cdClient = new CdClientContext();
106+
107+
var character = await ctx.Characters.FirstAsync(c => c.Id == player.Id);
108+
109+
var lookup_val = 0;
110+
111+
foreach (var levelProgressionLookup in cdClient.LevelProgressionLookupTable)
112+
{
113+
if (levelProgressionLookup.RequiredUScore > character.UniverseScore) break;
114+
115+
lookup_val = levelProgressionLookup.Id.Value;
116+
}
117+
118+
Logger.Debug($"Attempting to assign level {lookup_val} to {character.Name} (They are currently level {character.Level})");
119+
120+
if (lookup_val > character.Level)
121+
{
122+
character.Level = lookup_val;
123+
GameObject.Serialize(player);
124+
await ctx.SaveChangesAsync();
125+
126+
player.Zone.BroadcastMessage(new PlayFXEffectMessage
127+
{
128+
Associate = player,
129+
EffectId = 7074,
130+
EffectType = "create",
131+
Name = "levelup_body_glow"
132+
});
133+
134+
player.Zone.BroadcastChatMessage($"{character.Name} has reached Level {character.Level}!");
135+
Logger.Debug($"Assigned level {lookup_val} to {character.Name} (They are now currently level {character.Level})");
136+
}
137+
}
100138
}
101139
}

Uchu.World/Objects/GameObjects/Player.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -610,15 +610,6 @@ private async Task SetUniverseScoreAsync(long score)
610610

611611
character.UniverseScore = score;
612612

613-
foreach (var levelProgressionLookup in cdClient.LevelProgressionLookupTable)
614-
{
615-
if (levelProgressionLookup.RequiredUScore > score) break;
616-
617-
Debug.Assert(levelProgressionLookup.Id != null, "levelProgressionLookup.Id != null");
618-
619-
character.Level = levelProgressionLookup.Id.Value;
620-
}
621-
622613
Message(new ModifyLegoScoreMessage
623614
{
624615
Associate = this,

Uchu.World/Objects/Zone.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,17 @@ public void BroadcastMessage(IGameMessage message)
314314
foreach (var player in Players) player.Message(message);
315315
}
316316

317+
public void BroadcastChatMessage(string message, Player author = null)
318+
{
319+
foreach (var player in Players) player.Message(new ChatMessagePacket
320+
{
321+
Message = $"{message}\0",
322+
Sender = author,
323+
IsMythran = author?.GameMasterLevel > 0,
324+
Channel = World.ChatChannel.Public
325+
});
326+
}
327+
317328
#endregion
318329

319330
#region Object Finder
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Uchu.World
2+
{
3+
public class NotifyServerLevelProcessingCompleteMessage : ClientGameMessage
4+
{
5+
public override GameMessageId GameMessageId => GameMessageId.NotifyServerLevelProcessingComplete;
6+
}
7+
}

0 commit comments

Comments
 (0)