Core/Scripts: Reworked scripts. More to come.
This commit is contained in:
@@ -340,6 +340,24 @@ namespace Game.Scripting
|
||||
public virtual CreatureAI GetAI(Creature creature) { return null; }
|
||||
}
|
||||
|
||||
public class GenericGameObjectScript<AI> : GameObjectScript where AI : GameObjectAI
|
||||
{
|
||||
public GenericGameObjectScript(string name, object[] args) : base(name)
|
||||
{
|
||||
_args = args;
|
||||
}
|
||||
|
||||
public override GameObjectAI GetAI(GameObject me)
|
||||
{
|
||||
if (me.GetInstanceScript() != null)
|
||||
return GetInstanceAI<AI>(me);
|
||||
else
|
||||
return (AI)Activator.CreateInstance(typeof(AI), new object[] { me }.Combine(_args));
|
||||
}
|
||||
|
||||
object[] _args;
|
||||
}
|
||||
|
||||
public class GameObjectScript : ScriptObject
|
||||
{
|
||||
public GameObjectScript(string name) : base(name)
|
||||
|
||||
@@ -79,21 +79,7 @@ namespace Game.Scripting
|
||||
foreach (var type in assembly.GetTypes())
|
||||
{
|
||||
var attributes = (ScriptAttribute[])type.GetCustomAttributes<ScriptAttribute>();
|
||||
if (attributes.Empty())
|
||||
{
|
||||
var baseType = type.BaseType;
|
||||
while (baseType != null)
|
||||
{
|
||||
if (baseType == typeof(ScriptObject))
|
||||
{
|
||||
Log.outWarn(LogFilter.Server, "Script {0} does not have ScriptAttribute", type.Name);
|
||||
continue;
|
||||
}
|
||||
|
||||
baseType = baseType.BaseType;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!attributes.Empty())
|
||||
{
|
||||
var constructors = type.GetConstructors();
|
||||
if (constructors.Length == 0)
|
||||
@@ -136,14 +122,17 @@ namespace Game.Scripting
|
||||
|
||||
switch (type.BaseType.Name)
|
||||
{
|
||||
case "SpellScript":
|
||||
case nameof(SpellScript):
|
||||
genericType = typeof(GenericSpellScriptLoader<>).MakeGenericType(type);
|
||||
name = name.Replace("_SpellScript", "");
|
||||
break;
|
||||
case "AuraScript":
|
||||
case nameof(AuraScript):
|
||||
genericType = typeof(GenericAuraScriptLoader<>).MakeGenericType(type);
|
||||
name = name.Replace("_AuraScript", "");
|
||||
break;
|
||||
case nameof(GameObjectAI):
|
||||
genericType = typeof(GenericGameObjectScript<>).MakeGenericType(type);
|
||||
break;
|
||||
case "SpellScriptLoader":
|
||||
case "AuraScriptLoader":
|
||||
case "WorldScript":
|
||||
@@ -177,7 +166,6 @@ namespace Game.Scripting
|
||||
Activator.CreateInstance(genericType);
|
||||
else
|
||||
Activator.CreateInstance(genericType, new object[] { name }.Combine(attribute.Args));
|
||||
|
||||
continue;
|
||||
default:
|
||||
genericType = typeof(GenericCreatureScript<>).MakeGenericType(type);
|
||||
|
||||
Reference in New Issue
Block a user