Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
            }
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
        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));
            }
        }