ace/Source/ACE.Database/SQLFormatters/World/WeenieSQLWriter.cs
Mag-nus 3c46c07ffe
This moves the .sql file generation code that Ripley has been using into ACE.Database (#889)
* This moves the .sql file generation code that Ripley has been using into ACE.Database

This will help us import data from any source into ACE EF objects, and then use these SQLWriters to create a unified output.

* Weenie and LandblockInstances SQL Writers added + Enums

Some styling and comments added to the other SQL Writer classes.

Still need to do the treasure tables, as well as recipe/cook books.

Also need to confirm SQL output is well formed and accurate.

* CookBookSQLWriter and RecipeSQLWriter

Writers that still aren't implemented:
PointsOfInterest
TreasureDeath
TreasureWielded

Also, still need to test the output of these writers to make sure it's correct.

* Formatting tweaked a little bit, much closer to the final product

This creates scripts that import.
Still need to verify a couple of data mismatches.

* This moves the Int/Did property decoder to ACE.Entity.Enum.Properties

This code will likely be used to help UI content editors and database viewers.

* This fixes float output where precision was lost. Woops.

* Fat fingered a variable in the weenie SQL writer

This concludes all the testing for the SQL Writers.

They all test OK and produce the same results as the code Ripley was using to generate the .sql files.
2018-07-28 21:01:19 -05:00

672 lines
34 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using ACE.Database.Models.World;
using ACE.Entity.Enum;
using ACE.Entity.Enum.Properties;
namespace ACE.Database.SQLFormatters.World
{
public class WeenieSQLWriter : SQLWriter
{
/// <summary>
/// Default is formed from: input.ClassId.ToString("00000") + " " + name
/// </summary>
public string GetDefaultFileName(Weenie input)
{
var name = input.WeeniePropertiesString.FirstOrDefault(r => r.Type == (int)PropertyString.Name);
var fileName = input.ClassId.ToString("00000") + " " + (name != null ? name.Value : "");
fileName = IllegalInFileName.Replace(fileName, "_");
fileName += ".sql";
return fileName;
}
/// <summary>
/// This will create a default subfolder path with the following format:<para />
/// [Weenie Type]\\[Creature Type]\\<para />
/// or<para />
/// [Weenie Type]\\[Item Type]\\
/// </summary>
public string GetDefaultSubfolder(Weenie input)
{
var subFolder = Enum.GetName(typeof(WeenieType), input.Type) + "\\";
if (input.Type == (int)WeenieType.Creature)
{
var property = input.WeeniePropertiesInt.FirstOrDefault(r => r.Type == (int)PropertyInt.CreatureType);
if (property != null)
{
Enum.TryParse(property.Value.ToString(), out CreatureType ct);
if (Enum.IsDefined(typeof(CreatureType), ct))
subFolder += Enum.GetName(typeof(CreatureType), property.Value) + "\\";
else
subFolder += "UnknownCT_" + property.Value + "\\";
}
else
subFolder += "Unsorted" + "\\";
}
else
{
var property = input.WeeniePropertiesInt.FirstOrDefault(r => r.Type == (int)PropertyInt.ItemType);
if (property != null)
subFolder += Enum.GetName(typeof(ItemType), property.Value) + "\\";
else
subFolder += Enum.GetName(typeof(ItemType), ItemType.None) + "\\";
}
return subFolder;
}
public void CreateSQLDELETEStatement(Weenie input, StreamWriter writer)
{
writer.WriteLine($"DELETE FROM `weenie` WHERE `class_Id` = {input.ClassId};");
}
/// <exception cref="System.Exception">WeenieClassNames must be set, and must have a record for input.ClassId.</exception>
public void CreateSQLINSERTStatement(Weenie input, StreamWriter writer)
{
string className = null;
if (WeenieClassNames != null)
WeenieClassNames.TryGetValue(input.ClassId, out className);
writer.WriteLine("INSERT INTO `weenie` (`class_Id`, `class_Name`, `type`)");
var output = $"VALUES ('{input.ClassId}', '{className}', {input.Type}) /* {Enum.GetName(typeof(WeenieType), input.Type)} */;";
output = FixNullFields(output);
writer.WriteLine(output);
if (input.WeeniePropertiesInt != null && input.WeeniePropertiesInt.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesInt.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesInt64 != null && input.WeeniePropertiesInt64.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesInt64.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesBool != null && input.WeeniePropertiesBool.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesBool.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesFloat != null && input.WeeniePropertiesFloat.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesFloat.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesString != null && input.WeeniePropertiesString.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesString.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesDID != null && input.WeeniePropertiesDID.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesDID.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesPosition != null && input.WeeniePropertiesPosition.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesPosition.OrderBy(r => r.PositionType).ToList(), writer);
}
if (input.WeeniePropertiesIID != null && input.WeeniePropertiesIID.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesIID.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesAttribute != null && input.WeeniePropertiesAttribute.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesAttribute.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesAttribute2nd != null && input.WeeniePropertiesAttribute2nd.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesAttribute2nd.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesSkill != null && input.WeeniePropertiesSkill.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesSkill.OrderBy(r => r.Type).ToList(), writer);
}
if (input.WeeniePropertiesBodyPart != null && input.WeeniePropertiesBodyPart.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesBodyPart.OrderBy(r => r.Key).ToList(), writer);
}
if (input.WeeniePropertiesSpellBook != null && input.WeeniePropertiesSpellBook.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesSpellBook.OrderBy(r => r.Spell).ToList(), writer);
}
if (input.WeeniePropertiesEventFilter != null && input.WeeniePropertiesEventFilter.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesEventFilter.OrderBy(r => r.Event).ToList(), writer);
}
if (input.WeeniePropertiesEmote != null && input.WeeniePropertiesEmote.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesEmote.OrderBy(r => r.EmoteSetId).ThenBy(r => r.Category).ToList(), writer);
}
if (input.WeeniePropertiesEmoteAction != null && input.WeeniePropertiesEmoteAction.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesEmoteAction.OrderBy(r => r.EmoteSetId).ThenBy(r => r.EmoteCategory).ThenBy(r => r.Order).ToList(), writer);
}
if (input.WeeniePropertiesCreateList != null && input.WeeniePropertiesCreateList.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesCreateList.OrderBy(r => r.WeenieClassId).ToList(), writer);
}
if (input.WeeniePropertiesBook != null)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesBook, writer);
}
if (input.WeeniePropertiesBookPageData != null && input.WeeniePropertiesBookPageData.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesBookPageData.OrderBy(r => r.PageId).ToList(), writer);
}
if (input.WeeniePropertiesGenerator != null && input.WeeniePropertiesGenerator.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesGenerator.OrderBy(r => r.Probability).ToList(), writer);
}
if (input.WeeniePropertiesPalette != null && input.WeeniePropertiesPalette.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesPalette.OrderBy(r => r.SubPaletteId).ToList(), writer);
}
if (input.WeeniePropertiesTextureMap != null && input.WeeniePropertiesTextureMap.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesTextureMap.OrderBy(r => r.Index).ToList(), writer);
}
if (input.WeeniePropertiesAnimPart != null && input.WeeniePropertiesAnimPart.Count > 0)
{
writer.WriteLine();
CreateSQLINSERTStatement(input.ClassId, input.WeeniePropertiesAnimPart.OrderBy(r => r.Index).ToList(), writer);
}
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesInt> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_int` (`object_Id`, `type`, `value`)");
var lineGenerator = new Func<int, string>(i =>
{
string propertyValueDescription = GetValueEnumName((PropertyInt)input[i].Type, input[i].Value);
var comment = Enum.GetName(typeof(PropertyInt), input[i].Type);
if (propertyValueDescription != null)
comment += " - " + propertyValueDescription;
return $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].Value.ToString().PadLeft(10)}) /* {comment} */";
});
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesInt64> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_int64` (`object_Id`, `type`, `value`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].Value.ToString().PadLeft(10)}) /* {Enum.GetName(typeof(PropertyInt64), input[i].Type)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesBool> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_bool` (`object_Id`, `type`, `value`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].Value.ToString().PadRight(5)}) /* {Enum.GetName(typeof(PropertyBool), input[i].Type)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesFloat> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_float` (`object_Id`, `type`, `value`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].Value.ToString(CultureInfo.InvariantCulture).PadLeft(7)}) /* {Enum.GetName(typeof(PropertyFloat), input[i].Type)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesString> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_string` (`object_Id`, `type`, `value`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {GetSQLString(input[i].Value)}) /* {Enum.GetName(typeof(PropertyString), input[i].Type)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesDID> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_d_i_d` (`object_Id`, `type`, `value`)");
var lineGenerator = new Func<int, string>(i =>
{
string propertyValueDescription = GetValueEnumName((PropertyDataId)input[i].Type, input[i].Value);
var comment = Enum.GetName(typeof(PropertyDataId), input[i].Type);
if (propertyValueDescription != null)
comment += " - " + propertyValueDescription;
return $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].Value.ToString().PadLeft(10)}) /* {comment} */";
});
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesPosition> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_position` (`object_Id`, `position_Type`, `obj_Cell_Id`, `origin_X`, `origin_Y`, `origin_Z`, `angles_X`, `angles_Y`, `angles_Z`, `angles_W`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {(uint)input[i].PositionType}, {input[i].ObjCellId}, {input[i].OriginX}, {input[i].OriginY}, {input[i].OriginZ}, {input[i].AnglesX}, {input[i].AnglesY}, {input[i].AnglesZ}, {input[i].AnglesW}) /* {Enum.GetName(typeof(PositionType), input[i].PositionType)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesIID> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_i_i_d` (`object_Id`, `type`, `value`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].Value.ToString().PadLeft(10)}) /* {Enum.GetName(typeof(PropertyInstanceId), input[i].Type)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesAttribute> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_attribute` (`object_Id`, `type`, `init_Level`, `level_From_C_P`, `c_P_Spent`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].InitLevel.ToString().PadLeft(3)}, {input[i].LevelFromCP}, {input[i].CPSpent}) /* {Enum.GetName(typeof(PropertyAttribute), input[i].Type)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesAttribute2nd> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_attribute_2nd` (`object_Id`, `type`, `init_Level`, `level_From_C_P`, `c_P_Spent`, `current_Level`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Type.ToString().PadLeft(3)}, {input[i].InitLevel.ToString().PadLeft(5)}, {input[i].LevelFromCP}, {input[i].CPSpent}, {input[i].CurrentLevel}) /* {Enum.GetName(typeof(PropertyAttribute2nd), input[i].Type)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesSkill> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_skill` (`object_Id`, `type`, `level_From_P_P`, `s_a_c`, `p_p`, `init_Level`, `resistance_At_Last_Check`, `last_Used_Time`)");
var lineGenerator = new Func<int, string>(i =>
$"{weenieClassID}, " +
$"{input[i].Type.ToString().PadLeft(2)}, " +
$"{input[i].LevelFromPP}, " +
$"{input[i].SAC}, " +
$"{input[i].PP}, " +
$"{input[i].InitLevel.ToString().PadLeft(3)}, " +
$"{input[i].ResistanceAtLastCheck}, " +
$"{input[i].LastUsedTime}) " +
// ReSharper disable once PossibleNullReferenceException
$"/* {Enum.GetName(typeof(Skill), input[i].Type).PadRight(19)} {((SkillStatus)input[i].SAC).ToString()} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesBodyPart> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_body_part` (`object_Id`, `key`, " +
"`d_Type`, `d_Val`, `d_Var`, " +
"`base_Armor`, `armor_Vs_Slash`, `armor_Vs_Pierce`, `armor_Vs_Bludgeon`, `armor_Vs_Cold`, `armor_Vs_Fire`, `armor_Vs_Acid`, `armor_Vs_Electric`, `armor_Vs_Nether`, " +
"`b_h`, `h_l_f`, `m_l_f`, `l_l_f`, `h_r_f`, `m_r_f`, `l_r_f`, `h_l_b`, `m_l_b`, `l_l_b`, `h_r_b`, `m_r_b`, `l_r_b`)");
var lineGenerator = new Func<int, string>(i =>
$"{weenieClassID}, " +
$"{input[i].Key.ToString().PadLeft(2)}, " +
$"{input[i].DType.ToString().PadLeft(2)}, " +
$"{input[i].DVal.ToString().PadLeft(2)}, " +
$"{input[i].DVar.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].BaseArmor.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsSlash.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsPierce.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsBludgeon.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsCold.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsFire.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsAcid.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsElectric.ToString().PadLeft(4)}, " +
$"{input[i].ArmorVsNether.ToString().PadLeft(4)}, " +
$"{input[i].BH}, " +
$"{input[i].HLF.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].MLF.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].LLF.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].HRF.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].MRF.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].LRF.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].HLB.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].MLB.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].LLB.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].HRB.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].MRB.ToString(CultureInfo.InvariantCulture).PadLeft(4)}, " +
$"{input[i].LRB.ToString(CultureInfo.InvariantCulture).PadLeft(4)}) " +
$"/* {Enum.GetName(typeof(CombatBodyPart), input[i].Key)} */");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesSpellBook> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_spell_book` (`object_Id`, `spell`, `probability`)");
var lineGenerator = new Func<int, string>(i =>
{
string label = null;
if (SpellNames != null)
SpellNames.TryGetValue((uint)input[i].Spell, out label);
return $"{weenieClassID}, {input[i].Spell.ToString().PadLeft(5)}, {input[i].Probability.ToString(CultureInfo.InvariantCulture).PadLeft(6)}) /* {label} */";
});
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesEventFilter> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_event_filter` (`object_Id`, `event`)");
var lineGenerator = new Func<int, string>(i =>
{
string label = null;
if (PacketOpCodes != null)
PacketOpCodes.TryGetValue((uint)input[i].Event, out label);
return $"{weenieClassID}, {input[i].Event.ToString().PadLeft(3)}) /* {label} */";
});
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesEmote> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_emote` (`object_Id`, `emote_Set_Id`, `category`, `probability`, `weenie_Class_Id`, `style`, `substyle`, `quest`, `vendor_Type`, `min_Health`, `max_Health`)");
var lineGenerator = new Func<int, string>(i =>
{
var categoryLabel = Enum.GetName(typeof(EmoteCategory), input[i].Category);
if (categoryLabel != null)
categoryLabel = $" /* {categoryLabel} */";
string weenieClassIdLabel = null;
if (WeenieNames != null && input[i].WeenieClassId.HasValue)
{
WeenieNames.TryGetValue(input[i].WeenieClassId.Value, out weenieClassIdLabel);
if (weenieClassIdLabel != null)
weenieClassIdLabel = $" /* {weenieClassIdLabel} */";
}
string styleLabel = null;
if (input[i].Style.HasValue)
{
styleLabel = Enum.GetName(typeof(MotionStance), input[i].Style.Value);
if (styleLabel != null)
styleLabel = $" /* {styleLabel} */";
}
string substyleLabel = null;
if (input[i].Substyle.HasValue)
{
substyleLabel = Enum.GetName(typeof(MotionCommand), input[i].Substyle.Value);
if (substyleLabel != null)
substyleLabel = $" /* {substyleLabel} */";
}
string vendorTypeLabel = null;
if (input[i].VendorType.HasValue)
{
vendorTypeLabel = Enum.GetName(typeof(VendorType), input[i].VendorType.Value);
if (vendorTypeLabel != null)
vendorTypeLabel = $" /* {vendorTypeLabel} */";
}
return
$"{weenieClassID}, " +
$"{input[i].EmoteSetId}, " +
$"{input[i].Category.ToString().PadLeft(2)}{categoryLabel}, " +
$"{input[i].Probability.ToString(CultureInfo.InvariantCulture).PadLeft(6)}, " +
$"{input[i].WeenieClassId}{weenieClassIdLabel}, " +
$"{input[i].Style}{styleLabel}, " +
$"{input[i].Substyle}{substyleLabel}, " +
$"{GetSQLString(input[i].Quest)}, " +
$"{input[i].VendorType}{vendorTypeLabel}, " +
$"{input[i].MinHealth}, " +
$"{input[i].MaxHealth})";
});
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesEmoteAction> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_emote_action` (`object_Id`, `emote_Set_Id`, `emote_Category`, `order`, `type`, `delay`, `extent`, `motion`, `message`, `test_String`, `min`, `max`, `min_64`, `max_64`, `min_Dbl`, `max_Dbl`, " +
"`stat`, `display`, `amount`, `amount_64`, `hero_X_P_64`, `percent`, `spell_Id`, `wealth_Rating`, `treasure_Class`, `treasure_Type`, `p_Script`, `sound`, `destination_Type`, `weenie_Class_Id`, `stack_Size`, `palette`, `shade`, `try_To_Bond`, " +
"`obj_Cell_Id`, `origin_X`, `origin_Y`, `origin_Z`, `angles_X`, `angles_Y`, `angles_Z`, `angles_W`)");
var lineGenerator = new Func<int, string>(i =>
{
var categoryLabel = Enum.GetName(typeof(EmoteCategory), input[i].EmoteCategory);
if (categoryLabel != null)
categoryLabel = $" /* {categoryLabel} */";
string typeLabel = Enum.GetName(typeof(EmoteType), input[i].Type);
if (typeLabel != null)
typeLabel = $" /* {typeLabel} */";
string motionLabel = null;
if (input[i].Motion.HasValue)
{
motionLabel = Enum.GetName(typeof(MotionCommand), input[i].Motion.Value);
if (motionLabel != null)
motionLabel = $" /* {motionLabel} */";
}
string spellIdLabel = null;
if (SpellNames != null && input[i].SpellId.HasValue)
{
SpellNames.TryGetValue((uint)input[i].SpellId.Value, out spellIdLabel);
if (spellIdLabel != null)
spellIdLabel = $" /* {spellIdLabel} */";
}
string pScriptLabel = null;
if (input[i].PScript.HasValue)
{
pScriptLabel = Enum.GetName(typeof(PlayScript), input[i].PScript.Value);
if (pScriptLabel != null)
pScriptLabel = $" /* {pScriptLabel} */";
}
string soundLabel = null;
if (input[i].Sound.HasValue)
{
soundLabel = Enum.GetName(typeof(Sound), input[i].Sound.Value);
if (soundLabel != null)
soundLabel = $" /* {soundLabel} */";
}
string weenieClassIdLabel = null;
if (WeenieClassNames != null && input[i].WeenieClassId.HasValue)
{
WeenieNames.TryGetValue(input[i].WeenieClassId.Value, out weenieClassIdLabel);
if (weenieClassIdLabel != null)
weenieClassIdLabel = $" /* {weenieClassIdLabel} */";
}
return
$"{weenieClassID}, " +
$"{input[i].EmoteSetId}, " +
$"{input[i].EmoteCategory.ToString().PadLeft(2)}{categoryLabel}, " +
$"{input[i].Order.ToString().PadLeft(2)}, " +
$"{input[i].Type.ToString().PadLeft(3)}{typeLabel}, " +
$"{input[i].Delay}, " +
$"{input[i].Extent}, " +
$"{input[i].Motion}{motionLabel}, " +
$"{GetSQLString(input[i].Message)}, " +
$"{GetSQLString(input[i].TestString)}, " +
$"{input[i].Min}, " +
$"{input[i].Max}, " +
$"{input[i].Min64}, " +
$"{input[i].Max64}, " +
$"{input[i].MinDbl}, " +
$"{input[i].MaxDbl}, " +
$"{input[i].Stat}, " +
$"{input[i].Display}, " +
$"{input[i].Amount}, " +
$"{input[i].Amount64}, " +
$"{input[i].HeroXP64}, " +
$"{input[i].Percent}, " +
$"{input[i].SpellId}{spellIdLabel}, " +
$"{input[i].WealthRating}, " +
$"{input[i].TreasureClass}, " +
$"{input[i].TreasureType}, " +
$"{input[i].PScript}{pScriptLabel}, " +
$"{input[i].Sound}{soundLabel}, " +
$"{input[i].DestinationType}, " +
$"{input[i].WeenieClassId}{weenieClassIdLabel}, " +
$"{input[i].StackSize}, " +
$"{input[i].Palette}, " +
$"{input[i].Shade}, " +
$"{input[i].TryToBond}, " +
$"{input[i].ObjCellId}, " +
$"{input[i].OriginX}, " +
$"{input[i].OriginY}, " +
$"{input[i].OriginZ}, " +
$"{input[i].AnglesX}, " +
$"{input[i].AnglesY}, " +
$"{input[i].AnglesZ}, " +
$"{input[i].AnglesW})";
});
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesCreateList> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_create_list` (`object_Id`, `destination_Type`, `weenie_Class_Id`, `stack_Size`, `palette`, `shade`, `try_To_Bond`)");
var lineGenerator = new Func<int, string>(i =>
{
string weenieName = null;
if (WeenieNames != null)
WeenieNames.TryGetValue(input[i].WeenieClassId, out weenieName);
return $"{weenieClassID}, {input[i].DestinationType}, {input[i].WeenieClassId.ToString().PadLeft(5)}, {input[i].StackSize.ToString().PadLeft(2)}, {input[i].Palette}, {input[i].Shade}, {input[i].TryToBond}) /* Create {weenieName ?? "Unknown"} for {Enum.GetName(typeof(DestinationType), input[i].DestinationType)} */";
});
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, WeeniePropertiesBook input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_book` (`object_Id`, `max_Num_Pages`, `max_Num_Chars_Per_Page`)");
writer.WriteLine($"VALUES ({weenieClassID}, {input.MaxNumPages}, {input.MaxNumCharsPerPage});");
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesBookPageData> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_book_page_data` (`object_Id`, `page_Id`, `author_Id`, `author_Name`, `author_Account`, `ignore_Author`, `page_Text`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].PageId}, {input[i].AuthorId}, {GetSQLString(input[i].AuthorName)}, {GetSQLString(input[i].AuthorAccount)}, {input[i].IgnoreAuthor}, {GetSQLString(input[i].PageText)})");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesGenerator> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_generator` (`object_Id`, `probability`, `weenie_Class_Id`, " +
"`delay`, `init_Create`, `max_Create`, `when_Create`, `where_Create`, `stack_Size`, `palette_Id`, `shade`, " +
"`obj_Cell_Id`, `origin_X`, `origin_Y`, `origin_Z`, `angles_X`, `angles_Y`, `angles_Z`, `angles_W`)");
var lineGenerator = new Func<int, string>(i =>
$"{weenieClassID}, " +
$"{input[i].Probability}, " +
$"{input[i].WeenieClassId}, " +
$"{input[i].Delay}, " +
$"{input[i].InitCreate}, " +
$"{input[i].MaxCreate}, " +
$"{input[i].WhenCreate}, " +
$"{input[i].WhereCreate}, " +
$"{input[i].StackSize}, " +
$"{input[i].PaletteId}, " +
$"{input[i].Shade}, " +
$"{input[i].ObjCellId}, " +
$"{input[i].OriginX}, " +
$"{input[i].OriginY}, " +
$"{input[i].OriginZ}, " +
$"{input[i].AnglesX}, " +
$"{input[i].AnglesY}, " +
$"{input[i].AnglesZ}, " +
$"{input[i].AnglesW})");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesPalette> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_palette` (`object_Id`, `sub_Palette_Id`, `offset`, `length`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].SubPaletteId}, {input[i].Offset}, {input[i].Length})");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesTextureMap> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_texture_map` (`object_Id`, `index`, `old_Id`, `new_Id`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Index}, {input[i].OldId}, {input[i].NewId})");
ValuesWriter(input.Count, lineGenerator, writer);
}
public void CreateSQLINSERTStatement(uint weenieClassID, IList<WeeniePropertiesAnimPart> input, StreamWriter writer)
{
writer.WriteLine("INSERT INTO `weenie_properties_anim_part` (`object_Id`, `index`, `animation_Id`)");
var lineGenerator = new Func<int, string>(i => $"{weenieClassID}, {input[i].Index}, {input[i].AnimationId})");
ValuesWriter(input.Count, lineGenerator, writer);
}
}
}