This repository has been archived on 2026-01-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
SessionZero-Client/SessionZero/TestingCommands.cs

119 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Text.Json;
using Cogwheel;
using SessionZero.Data;
using SessionZero.Data.Sztl;
namespace SessionZero;
public static class TestingCommands
{
// TODO: Remove this after testing
[Command(Name = "test")]
private static void TestParseTemplate()
{
string toml = @"
[metadata]
template_type = ""data""
id = ""core_item""
uuid = ""0""
data_type = ""item""
version = ""1.0.0""
description = ""Core SessionZero item template""
[name]
type = ""text""
[description]
type = ""textblock""
[consumable]
type = ""bool""
default_value = false
[stats.value]
type = ""number""
[stats.weight]
type = ""number""
[stats.modifiers.base]
type = ""number""
default_value = 1
";
try
{
var template = SztlParser.ParseTemplate(toml);
var obj = SzObjectFactory.CreateObject(template) as SzDataObject;
obj.SetFieldValue("name", "Excalibur");
obj.SetFieldValue("consumable", true);
obj.SetFieldValue("stats.value", 10);
obj.SetFieldValue("stats.weight", 2);
obj.SetFieldValue("stats.modifiers.base", 5);
COGWHEEL.Log($"Template ID: {template.Id}");
COGWHEEL.Log("\nInstanced Object Field Values:");
foreach (var fieldPath in new[]
{ "name", "consumable", "stats.value", "stats.weight", "stats.modifiers.base" })
{
COGWHEEL.Log($"> {fieldPath} = {obj.GetFieldValue(fieldPath)}");
}
var jsonOptions = new JsonSerializerOptions
{
WriteIndented = true
};
string json = JsonSerializer.Serialize(new
{
obj.Id,
obj.Uuid,
template_id = obj.TemplateId,
fields = obj.FieldsToDictionary()
}, jsonOptions);
COGWHEEL.Log("\nJSON Output:");
COGWHEEL.Log(json);
}
catch (Exception ex)
{
COGWHEEL.Log($"Error parsing template: {ex.Message}");
}
}
private static Dictionary<string, object> FieldsToDictionary(this SzObject obj)
{
var result = new Dictionary<string, object>();
foreach (var kvp in obj.Fields)
{
result[kvp.Key] = kvp.Value.Value;
}
foreach (var group in obj.FieldGroups)
{
result[group.Key] = GroupToDict(group.Value);
}
return result;
}
private static Dictionary<string, object> GroupToDict(SzFieldGroup group)
{
var dict = new Dictionary<string, object>();
foreach (var kvp in group.Fields)
{
dict[kvp.Key] = kvp.Value.Value;
}
foreach (var subGroup in group.SubGroups)
{
dict[subGroup.Key] = GroupToDict(subGroup.Value);
}
return dict;
}
}