Skip to content

Commit

Permalink
More UI stuff and fixed mission zoom in.
Browse files Browse the repository at this point in the history
  • Loading branch information
Wincent01 committed Jan 31, 2020
1 parent d76acab commit f249c56
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 0 deletions.
46 changes: 46 additions & 0 deletions Uchu.World/Handlers/Commands/OperatorCommandHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Microsoft.EntityFrameworkCore;
using Uchu.Core;
using Uchu.World.Scripting.Managed;
using Uchu.World.Social;

namespace Uchu.World.Handlers.Commands
{
Expand Down Expand Up @@ -130,5 +131,50 @@ public string PythonList(string[] arguments, Player python)

return builder.ToString();
}

[CommandHandler(Signature = "failed", Help = "Display failed message", GameMasterLevel = GameMasterLevel.Admin)]
public string Failed(string[] arguments, Player player)
{
if (arguments.Length == default) return "failed <id> <...message...>";

var args = arguments.ToList();

var id = args[0];

args.RemoveAt(0);

if (!uint.TryParse(id, out var eId)) return "Invalid <id>";

var message = string.Join(" ", args);

player.Message(new NotifyClientFailedPreconditionMessage
{
Associate = player,
Id = (int) eId,
Reason = message
});

return "Sent failed condition.";
}

[CommandHandler(Signature = "state", Help = "Send UI state message", GameMasterLevel = GameMasterLevel.Admin)]
public async Task<string> State(string[] arguments, Player player)
{
var state = string.Join(" ", arguments);

await UiHelper.StateAsync(player, state);

return "Sent ui message.";
}

[CommandHandler(Signature = "toggle", Help = "Send toggle ui message", GameMasterLevel = GameMasterLevel.Admin)]
public async Task<string> Toggle(string[] arguments, Player player)
{
if (arguments.Length != 2) return "toggle <name> <state>";

await UiHelper.ToggleAsync(player, arguments[0], !bool.TryParse(arguments[1], out var state) || state);

return "Sent ui message.";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ public void MessageOfferMission(int missionId, GameObject missionGiver)
MissionId = missionId,
QuestGiver = missionGiver
});

As<Player>().Message(new OfferMissionMessage
{
Associate = missionGiver,
MissionId = missionId,
QuestGiver = missionGiver
});
}

public MissionInventoryComponent()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using RakDotNet.IO;
using Uchu.Core;

namespace Uchu.World
{
public class NotifyClientFailedPreconditionMessage : ServerGameMessage
{
public override GameMessageId GameMessageId => GameMessageId.NotifyClientFailedPrecondition;

public string Reason { get; set; }

public int Id { get; set; }

public override void SerializeMessage(BitWriter writer)
{
writer.Write((uint) Reason.Length);
writer.WriteString(Reason, Reason.Length, true);

writer.Write(Id);
}
}
}
9 changes: 9 additions & 0 deletions Uchu.World/Social/Amf3Helper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,5 +142,14 @@ public static void WriteText(BitWriter writer, string value)
writer.Write((byte) character);
}
}

public static void Array(BitWriter writer, int length)
{
writer.Write((byte) Amf3Type.Array);

var size = (length << 1) | 1;

WriteNumber2(writer, (uint) size);
}
}
}
42 changes: 42 additions & 0 deletions Uchu.World/Social/UiHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,47 @@ public static async Task AnnouncementAsync(Player player, string title, string m
MessageName = "ToggleAnnounce"
});
}

public static async Task StateAsync(Player player, string state)
{
await using var stream = new MemoryStream();
using var writer = new BitWriter(stream);

writer.Write((byte) Amf3Type.Array);
writer.Write<byte>(1);
Amf3Helper.WriteText(writer, "state");

writer.Write((byte) Amf3Type.String);
Amf3Helper.WriteText(writer, state);

writer.Write((byte) Amf3Type.Null);

player.Message(new UiMessageServerToSingleClientMessage
{
Associate = player,
Content = stream.ToArray(),
MessageName = "pushGameState"
});
}

public static async Task ToggleAsync(Player player, string name, bool value)
{
await using var stream = new MemoryStream();
using var writer = new BitWriter(stream);

writer.Write((byte) Amf3Type.Array);
writer.Write<byte>(1);
Amf3Helper.WriteText(writer, "visible");

writer.Write((byte) (value ? Amf3Type.True : Amf3Type.False));
writer.Write((byte) Amf3Type.Null);

player.Message(new UiMessageServerToSingleClientMessage
{
Associate = player,
Content = stream.ToArray(),
MessageName = name
});
}
}
}

0 comments on commit f249c56

Please sign in to comment.