Core/Scripts: Reworked scripts. More to come.
This commit is contained in:
@@ -119,11 +119,11 @@ namespace Game.AI
|
||||
switch (go.GetAIName())
|
||||
{
|
||||
case "GameObjectAI":
|
||||
default:
|
||||
return new GameObjectAI(go);
|
||||
case "SmartGameObjectAI":
|
||||
return new SmartGameObjectAI(go);
|
||||
}
|
||||
return new NullGameObjectAI(go);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,11 +99,4 @@ namespace Game.AI
|
||||
|
||||
public GameObject me;
|
||||
}
|
||||
|
||||
public class NullGameObjectAI : GameObjectAI
|
||||
{
|
||||
public NullGameObjectAI(GameObject g) : base(g) { }
|
||||
|
||||
public override void UpdateAI(uint diff) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2812,7 +2812,7 @@ namespace Game.Entities
|
||||
stmt.AddValue(5, GetGUID().GetCounter());
|
||||
DB.Characters.Execute(stmt);
|
||||
}
|
||||
void SetBindPoint(ObjectGuid guid)
|
||||
public void SetBindPoint(ObjectGuid guid)
|
||||
{
|
||||
BinderConfirm packet = new BinderConfirm(guid);
|
||||
SendPacket(packet);
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Game.Entities
|
||||
m_timer -= diff;
|
||||
break;
|
||||
}
|
||||
case TempSummonType.TimedDespawnOOC:
|
||||
case TempSummonType.TimedDespawnOutOfCombat:
|
||||
{
|
||||
if (!IsInCombat())
|
||||
{
|
||||
|
||||
@@ -1872,7 +1872,7 @@ namespace Game
|
||||
creature.FlagsExtra = (CreatureFlagsExtra)fields.Read<uint>(75);
|
||||
creature.ScriptID = GetScriptId(fields.Read<string>(76));
|
||||
|
||||
_creatureTemplateStorage.Add(entry, creature);
|
||||
_creatureTemplateStorage[entry] = creature;
|
||||
}
|
||||
|
||||
void LoadCreatureTemplateModels()
|
||||
|
||||
@@ -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