public static void HandleNotify(int entity) { string type = GameInterface.Notify_Type(); int numArgs = GameInterface.Notify_NumArgs(); Parameter[] paras = CollectParameters(numArgs); if (type == "touch") { return; } if (GameInterface.Script_GetObjectType(entity) == 21) { var entRef = GameInterface.Script_ToEntRef(entity); var entObj = Entity.GetEntity(entRef); entObj.HandleNotify(entity, type, paras); } else if (GameInterface.Script_GetObjectType(entity) == 24) { var entRef = GameInterface.Script_GetTempEntRef(); var entObj = Entity.GetEntity(entRef); entObj.HandleNotify(entity, type, paras); } ScriptProcessor.RunAll(script => script.HandleNotify(GameInterface.Script_ToEntRef(entity), type, paras)); }
public static void HandleNotify(int entity) { string type = GameInterface.Notify_Type(); int numArgs = GameInterface.Notify_NumArgs(); var paras = CollectParameters(numArgs); if (type != "touch") { // dispatch the thingy if (GameInterface.Script_GetObjectType(entity) == 22) // actual entity { var entRef = GameInterface.Script_ToEntRef(entity); var entObj = Entity.GetEntity(entRef); entObj.HandleNotify(entity, type, paras); } else if (GameInterface.Script_GetObjectType(entity) == 21) // not an actual entity { var entRef = GameInterface.Script_GetTempEntRef(); var entObj = Entity.GetEntity(entRef); entObj.HandleNotify(entity, type, paras); } ScriptProcessor.RunAll(script => script.HandleNotify(entity, type, paras)); } }
public static void HandleCall(int entityRef, CallType funcID) { Entity entity = Entity.GetEntity(entityRef); Parameter[] paras = CollectParameters(GameInterface.Notify_NumArgs()); switch (funcID) { case CallType.LastStand: ScriptProcessor.RunAll(script => script.OnPlayerLastStand(entity, paras[0].As <Entity>(), paras[1].As <Entity>(), paras[2].As <int>(), paras[3].As <string>(), paras[4].As <string>(), paras[5].As <Vector3>(), paras[6].As <string>(), paras[7].As <int>(), paras[8].As <int>())); break; case CallType.StartGameType: ScriptProcessor.RunAll(script => script.OnStartGameType()); break; case CallType.PlayerConnect: ScriptProcessor.RunAll(script => script.OnPlayerConnecting(entity)); break; case CallType.PlayerDisconnect: ScriptProcessor.RunAll(script => script.OnPlayerDisconnect(entity)); break; case CallType.PlayerDamage: if (paras[6].IsNull) { paras[6] = new Vector3(0.0f, 0.0f, 0.0f); } if (paras[7].IsNull) { paras[7] = new Vector3(0.0f, 0.0f, 0.0f); } ScriptProcessor.RunAll(script => script.OnPlayerDamage(entity, paras[0].As <Entity>(), paras[1].As <Entity>(), paras[2].As <int>(), paras[3].As <int>(), paras[4].As <string>(), paras[5].As <string>(), paras[6].As <Vector3>(), paras[7].As <Vector3>(), paras[8].As <string>())); break; case CallType.PlayerKilled: if (paras[5].IsNull) { paras[5] = new Vector3(0.0f, 0.0f, 0.0f); } ScriptProcessor.RunAll(script => script.OnPlayerKilled(entity, paras[0].As <Entity>(), paras[1].As <Entity>(), paras[2].As <int>(), paras[3].As <string>(), paras[4].As <string>(), paras[5].As <Vector3>(), paras[6].As <string>())); break; case CallType.VehicleDamage: ScriptProcessor.RunAll(script => script.OnVehicleDamage(entity, paras[0].As <Entity>(), paras[1].As <Entity>(), paras[2].As <int>(), paras[3].As <int>(), paras[4].As <string>(), paras[5].As <string>(), paras[6].As <Vector3>(), paras[7].As <Vector3>(), paras[8].As <string>(), paras[9].As <int>(), paras[10].As <int>(), paras[11].As <string>())); break; case CallType.EndGame: ScriptProcessor.RunAll(script => script.OnExitLevel()); break; } }
private static void CallRaw(string identifier, params Parameter[] parameters) { // push arguments foreach (var parameter in parameters.Reverse()) { parameter.PushValue(); } // call the function if (!GameInterface.Script_Call(identifier.ToLowerInvariant(), _entRef, parameters.Length)) { SetEntRef(-1); throw new ScriptException("Could not find function " + identifier); } // reset the entref to 0 SetEntRef(-1); // check for return values _returnValue = null; if (GameInterface.Notify_NumArgs() == 1) { switch (GameInterface.Script_GetType(0)) { case VariableType.Entity: _returnValue = Entity.GetEntity(GameInterface.Script_GetEntRef(0)); break; case VariableType.Integer: _returnValue = GameInterface.Script_GetInt(0); break; case VariableType.Float: _returnValue = GameInterface.Script_GetFloat(0); break; case VariableType.String: _returnValue = GameInterface.Script_GetString(0); break; case VariableType.Vector: Vector3 outValue; GameInterface.Script_GetVector(0, out outValue); _returnValue = outValue; break; } } GameInterface.Script_CleanReturnStack(); }
public static void HandleCall(int entityRef, CallType funcID) { var entity = Entity.GetEntity(entityRef); int numArgs = GameInterface.Notify_NumArgs(); var paras = CollectParameters(numArgs); switch (funcID) { case CallType.StartGameType: ScriptProcessor.RunAll(script => script.OnStartGameType()); break; case CallType.PlayerConnect: //ScriptProcessor.RunAll(script => script.OnPlayerConnect(entity)); break; case CallType.PlayerDisconnect: ScriptProcessor.RunAll(script => script.OnPlayerDisconnect(entity)); break; case CallType.PlayerDamage: if (paras[6].IsNull) { paras[6] = new Vector3(0, 0, 0); } if (paras[7].IsNull) { paras[7] = new Vector3(0, 0, 0); } ScriptProcessor.RunAll(script => script.OnPlayerDamage(entity, paras[0].As <Entity>(), paras[1].As <Entity>(), paras[2].As <int>(), paras[3].As <int>(), paras[4].As <string>(), paras[5].As <string>(), paras[6].As <Vector3>(), paras[7].As <Vector3>(), paras[8].As <string>())); break; case CallType.PlayerKilled: if (paras[5].IsNull) { paras[5] = new Vector3(0, 0, 0); } ScriptProcessor.RunAll(script => script.OnPlayerKilled(entity, paras[0].As <Entity>(), paras[1].As <Entity>(), paras[2].As <int>(), paras[3].As <string>(), paras[4].As <string>(), paras[5].As <Vector3>(), paras[6].As <string>())); break; } }
public static void HandleNotify(int entity) { string type = Marshal.PtrToStringAnsi(GameInterface.Notify_Type()); int numArgs = GameInterface.Notify_NumArgs(); var paras = CollectParameters(numArgs); if (type != "touch") { // dispatch the thingy if (GameInterface.Script_GetObjectType(entity) == 21) // actual entity { var entRef = GameInterface.Script_ToEntRef(entity); var entObj = Entity.GetEntity(entRef); //Log.Write(LogLevel.Trace, "{0} on object {1}, entRef {2} (entity object {3})", type, entity, entRef, entObj); entObj.HandleNotify(entity, type, paras); } ScriptProcessor.RunAll(script => script.HandleNotify(entity, type, paras)); } }