#W# Source and Scripts added. Added Scripts/Settings.cs to expose some basic tweak able settings.
This commit is contained in:
parent
b51c58f514
commit
3045c83799
3512 changed files with 627673 additions and 0 deletions
197
Scripts/Engines/Quests/Core/QuestSerializer.cs
Normal file
197
Scripts/Engines/Quests/Core/QuestSerializer.cs
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
using System;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class QuestSerializer
|
||||
{
|
||||
public static object Construct( Type type )
|
||||
{
|
||||
try
|
||||
{
|
||||
return Activator.CreateInstance( type );
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Write( Type type, Type[] referenceTable, GenericWriter writer )
|
||||
{
|
||||
if ( type == null )
|
||||
{
|
||||
writer.WriteEncodedInt( (int) 0x00 );
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( int i = 0; i < referenceTable.Length; ++i )
|
||||
{
|
||||
if ( referenceTable[i] == type )
|
||||
{
|
||||
writer.WriteEncodedInt( (int) 0x01 );
|
||||
writer.WriteEncodedInt( (int) i );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
writer.WriteEncodedInt( (int) 0x02 );
|
||||
writer.Write( type.FullName );
|
||||
}
|
||||
}
|
||||
|
||||
public static Type ReadType( Type[] referenceTable, GenericReader reader )
|
||||
{
|
||||
int encoding = reader.ReadEncodedInt();
|
||||
|
||||
switch ( encoding )
|
||||
{
|
||||
default:
|
||||
case 0x00: // null
|
||||
{
|
||||
return null;
|
||||
}
|
||||
case 0x01: // indexed
|
||||
{
|
||||
int index = reader.ReadEncodedInt();
|
||||
|
||||
if ( index >= 0 && index < referenceTable.Length )
|
||||
return referenceTable[index];
|
||||
|
||||
return null;
|
||||
}
|
||||
case 0x02: // by name
|
||||
{
|
||||
string fullName = reader.ReadString();
|
||||
|
||||
if ( fullName == null )
|
||||
return null;
|
||||
|
||||
return ScriptCompiler.FindTypeByFullName( fullName, false );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static QuestSystem DeserializeQuest( GenericReader reader )
|
||||
{
|
||||
int encoding = reader.ReadEncodedInt();
|
||||
|
||||
switch ( encoding )
|
||||
{
|
||||
default:
|
||||
case 0x00: // null
|
||||
{
|
||||
return null;
|
||||
}
|
||||
case 0x01:
|
||||
{
|
||||
Type type = ReadType( QuestSystem.QuestTypes, reader );
|
||||
|
||||
QuestSystem qs = Construct( type ) as QuestSystem;
|
||||
|
||||
if ( qs != null )
|
||||
qs.BaseDeserialize( reader );
|
||||
|
||||
return qs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Serialize( QuestSystem qs, GenericWriter writer )
|
||||
{
|
||||
if ( qs == null )
|
||||
{
|
||||
writer.WriteEncodedInt( 0x00 );
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteEncodedInt( 0x01 );
|
||||
|
||||
Write( qs.GetType(), QuestSystem.QuestTypes, writer );
|
||||
|
||||
qs.BaseSerialize( writer );
|
||||
}
|
||||
}
|
||||
|
||||
public static QuestObjective DeserializeObjective( Type[] referenceTable, GenericReader reader )
|
||||
{
|
||||
int encoding = reader.ReadEncodedInt();
|
||||
|
||||
switch ( encoding )
|
||||
{
|
||||
default:
|
||||
case 0x00: // null
|
||||
{
|
||||
return null;
|
||||
}
|
||||
case 0x01:
|
||||
{
|
||||
Type type = ReadType( referenceTable, reader );
|
||||
|
||||
QuestObjective obj = Construct( type ) as QuestObjective;
|
||||
|
||||
if ( obj != null )
|
||||
obj.BaseDeserialize( reader );
|
||||
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Serialize( Type[] referenceTable, QuestObjective obj, GenericWriter writer )
|
||||
{
|
||||
if ( obj == null )
|
||||
{
|
||||
writer.WriteEncodedInt( 0x00 );
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteEncodedInt( 0x01 );
|
||||
|
||||
Write( obj.GetType(), referenceTable, writer );
|
||||
|
||||
obj.BaseSerialize( writer );
|
||||
}
|
||||
}
|
||||
|
||||
public static QuestConversation DeserializeConversation( Type[] referenceTable, GenericReader reader )
|
||||
{
|
||||
int encoding = reader.ReadEncodedInt();
|
||||
|
||||
switch ( encoding )
|
||||
{
|
||||
default:
|
||||
case 0x00: // null
|
||||
{
|
||||
return null;
|
||||
}
|
||||
case 0x01:
|
||||
{
|
||||
Type type = ReadType( referenceTable, reader );
|
||||
|
||||
QuestConversation conv = Construct( type ) as QuestConversation;
|
||||
|
||||
if ( conv != null )
|
||||
conv.BaseDeserialize( reader );
|
||||
|
||||
return conv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Serialize( Type[] referenceTable, QuestConversation conv, GenericWriter writer )
|
||||
{
|
||||
if ( conv == null )
|
||||
{
|
||||
writer.WriteEncodedInt( 0x00 );
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteEncodedInt( 0x01 );
|
||||
|
||||
Write( conv.GetType(), referenceTable, writer );
|
||||
|
||||
conv.BaseSerialize( writer );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue