Jump to content
xxnypdofficerxx

Sirens don't work

Recommended Posts

//**************************************************************************************************
// #Version 2.0#                                        ****
//                                                ****
//         Includes: all Sirens                                ****
//                                                ****
//    1.0| VCmdSiren                                        ****
//    1.1| DUMMYUpdatePos                                    ****
//    1.2| DUMMYDisableSiren                                    ****
//    1.3| DUMMYFindPath                                    ****
//    1.4| DUMMYHasSiren                                    ****
//                                                ****
// childID 1 for disabling bluelights.                                ****
//                                                ****
//                                                ****
//**************************************************************************************************

// Hier kann man den Namen eines Icons für die Commandleiste angeben.
// Wird automatisch aus den Ordnern UI/Game/Icons/Command/ und UI/Game/Icons/Cursor genommen.
const char IMG[] = "sirene";

const char EACTION_FINDPATH[] = "EActionFindPath";

const char DUMMY_HASSIREN[] = "DUMMYHasSiren";
const char DUMMY_UPDATEPOS[] = "DUMMYUpdatePos";
const char DUMMY_FINDPATH[] = "DUMMYFindPath";

const char CMD_MOVETO[] = "MoveTo";

const char NAME_DUMMYOBJECT[] = "HelpingObjekt_Roger";

const char PROTO_VMERHBA[] = "mod:Prototypes/Vehicles/INEM/VMER HBA.e4p";
const char PROTO_VMERHSFX[] = "mod:Prototypes/Vehicles/INEM/VMER HSFX.e4p";
const char PROTO_VMERHSJ[] = "mod:Prototypes/Vehicles/INEM/VMER HSJ.e4p";
const char PROTO_VMERHSM[] = "mod:Prototypes/Vehicles/INEM/VMER HSM.e4p";
const char PROTO_SIV[] = "mod:Prototypes/Vehicles/INEM/SIV.e4p";
const char PROTO_TIP[] = "mod:Prototypes/Vehicles/INEM/TIP.e4p";
const char PROTO_AEM1[] = "mod:Prototypes/Vehicles/INEM/AEM 1.e4p";
const char PROTO_AEM2[] = "mod:Prototypes/Vehicles/INEM/AEM 2.e4p";
const char PROTO_AEM3[] = "mod:Prototypes/Vehicles/INEM/AEM 3.e4p";
const char PROTO_AEM4[] = "mod:Prototypes/Vehicles/INEM/AEM 4.e4p";
const char PROTO_AEM5[] = "mod:Prototypes/Vehicles/INEM/AEM 5.e4p";
const char PROTO_AEM6[] = "mod:Prototypes/Vehicles/INEM/AEM 6.e4p";
const char PROTO_165B[] = "mod:Prototypes/Vehicles/CVP/1-65B.e4p";
const char PROTO_INEMCVP[] = "mod:Prototypes/Vehicles/CVP/INEM.e4p";
const char PROTO_ABSC01[] = "mod:Prototypes/Vehicles/BV Portugal/0101 ABSC 01.e4p";
const char PROTO_ABSC02[] = "mod:Prototypes/Vehicles/BV Portugal/0101 ABSC 02.e4p";
const char PROTO_ABSC03[] = "mod:Prototypes/Vehicles/BV Portugal/0101 ABSC 03.e4p";
const char PROTO_ABSC04[] = "mod:Prototypes/Vehicles/BV Portugal/0101 ABSC 04.e4p";
const char PROTO_ABSC05[] = "mod:Prototypes/Vehicles/BV Portugal/0101 ABSC 05.e4p";
const char PROTO_ABSC06[] = "mod:Prototypes/Vehicles/BV Portugal/0101 ABSC 06.e4p";
const char PROTO_INEMBVP[] = "mod:Prototypes/Vehicles/BV Portugal/0101 INEM 01.e4p";
const char PROTO_CP1[] = "mod:Prototypes/Vehicles/PSP/CP 1.e4p";
const char PROTO_CP2[] = "mod:Prototypes/Vehicles/PSP/CP 2.e4p";
const char PROTO_CP4[] = "mod:Prototypes/Vehicles/PSP/CP 4.e4p";
const char PROTO_TR1[] = "mod:Prototypes/Vehicles/PSP/TRANSITO 1.e4p";
const char PROTO_TR2[] = "mod:Prototypes/Vehicles/PSP/TRANSITO 2.e4p";
const char PROTO_CI1[] = "mod:Prototypes/Vehicles/PSP/CI 1.e4p";
const char PROTO_CI2[] = "mod:Prototypes/Vehicles/PSP/CP 2.e4p";
const char PROTO_UEP1[] = "mod:Prototypes/Vehicles/PSP/UEP 1.e4p";
const char PROTO_UEP2[] = "mod:Prototypes/Vehicles/PSP/UEP 2.e4p";

int DummyGroup = 20;

// 01.0
object VCmdSiren : CommandScript
{
    VCmdSiren()
    {
        SetIcon(IMG);
        SetCursor(IMG);
        SetRestrictions(RESTRICT_SELFEXECUTE);
    }

    bool CheckPossible(GameObject *Caller)
    {
        if (!Caller->IsValid())
            return false;

        if (Caller->GetType() == ACTOR_VEHICLE)
        {
            return true;
        }

        return false;
    }

    bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    {
        if (!Target->IsValid() || Target->GetID() != Caller->GetID())
            return false;

        if (!Caller->HasCommand(CMD_MOVETO) || Caller->GetType() != ACTOR_VEHICLE)
            return false;

        return true;
    }

    void PushActions(GameObject *Caller, Actor *Target, int childID)
    {
        Vehicle v(Caller);
        if (!v.HasCommand(DUMMY_HASSIREN) && (childID != 2 && childID != 1))
        {

            int soundID;
            v.EnableBlueLights(true);
             if (v.HasCommand("DUMMY_HasNoLight"))
             {
                v.PushActionExecuteCommand(ACTION_APPEND, "BlueLight", Caller, 0, false);
             }
            Vector CarPos = v.GetPosition();

                // Hier die const char Namen von oben eintragen wie in den beiden Beispielen unten.
                


                if (StrCompare(v.GetPrototypeFileName(), PROTO_VMERHBA) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/08.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_VMERHSFX) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/Fujita.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_VMERHSJ) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/08.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_VMERHSM) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/08.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_SIV) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_AEM1) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_AEM2) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/04.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_AEM3) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_AEM4) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/04.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_AEM5) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/Fujita2.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_AEM6) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/04.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_TIP) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_ABSC01) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/Fujita2.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_ABSC02) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_ABSC03) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/02.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_ABSC04) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/04.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_ABSC05) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/07.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_ABSC06) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/07.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_INEMBVP) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/04.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_INEMCVP) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/04.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_165B) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/01.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_CP1) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_CP2) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/07.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_CP4) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/08.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_CI1) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/Fujita.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_CI2) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_UEP1) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_UEP2) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_TR1) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/08.wav", CarPos, true);
                }
                if (StrCompare(v.GetPrototypeFileName(), PROTO_TR2) == 0)
                {
                    soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);
                }
                

                GameObject mDummy =  Game::CreateObject("mod:Prototypes/Objects/Misc/empty.e4p", NAME_DUMMYOBJECT);

                mDummy.Hide();
                mDummy.SetPosition(CarPos);
                mDummy.SetUserData(soundID);
                mDummy.PushActionExecuteCommand(ACTION_NEWLIST, DUMMY_UPDATEPOS, &v, soundID, false);
                v.SetUserData(soundID);
                v.AssignCommand(DUMMY_HASSIREN);

            return;
        }

        if (v.HasCommand(DUMMY_HASSIREN))
        {
            if (childID == 1)
            {
                v.EnableBlueLights(false);
            }

            if (v.HasCommand(DUMMY_HASSIREN))
            {
                int ref = Caller->GetUserData();
                Audio::StopSample(ref);

                GameObjectList list = Game::GetGameObjects(NAME_DUMMYOBJECT);
                for(int i=0; i<list.GetNumObjects(); i++)
                {
                    GameObject *obj = list.GetObject(i);
                    if (obj->GetUserData() == ref)
                    {
                        int mSirTest = i;
                    }
                }

                GameObject *obj = list.GetObject(mSirTest);
                obj->PushActionDeleteOwner(ACTION_NEWLIST);
                v.RemoveCommand(DUMMY_HASSIREN);
            }

            return;
        }
    }
};

// 01.1
object DUMMYUpdatePos : CommandScript
{
    DUMMYUpdatePos()
    {
        SetGroupID(DummyGroup);
    }

    bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    {
    }

      void PushActions(GameObject *Caller, Actor *Target, int childID)
    {
        Vehicle v(Target);
        GameObject mDummy(Caller);
        Vector CarPos = v.GetPosition();

        if (v.IsDestroyed() || !v.IsValid())
        {
            int ref = mDummy.GetUserData();
            Audio::StopSample(ref);

            mDummy.PushActionDeleteOwner(ACTION_NEWLIST);
        } else
          {
            mDummy.SetPosition(CarPos);
            Audio::UpdatePos(childID, CarPos, true);
            if (v.IsCurrentAction(EACTION_FINDPATH))
            {
                if (!v.HasCommand(DUMMY_FINDPATH))
                {
                    v.AssignCommand(DUMMY_FINDPATH);
                }
            }
            mDummy.PushActionExecuteCommand(ACTION_NEWLIST, DUMMY_UPDATEPOS, Target, childID, false);
          }

        if (v.HasCommand(DUMMY_FINDPATH))
        {
            if (!v.IsCurrentAction(EACTION_FINDPATH) && v.GetNumActions() == 0)
            {
                v.RemoveCommand(DUMMY_HASSIREN);
                v.RemoveCommand(DUMMY_FINDPATH);

                int ref = Caller->GetUserData();
                Audio::StopSample(ref);

                GameObjectList list = Game::GetGameObjects(NAME_DUMMYOBJECT);
                for(int i = 0; i < list.GetNumObjects(); i++)
                {
                    GameObject *obj = list.GetObject(i);
                    if (obj->GetUserData() == ref)
                    {
                        int mSirTest = i;

                        GameObject *obj = list.GetObject(mSirTest);
                        obj->PushActionDeleteOwner(ACTION_NEWLIST);
                        v.RemoveCommand(DUMMY_HASSIREN);
                        if (v.HasCommand(DUMMY_FINDPATH))
                        {
                            v.RemoveCommand(DUMMY_FINDPATH);
                        }
                    }
                }
            }
        }
    }
};

// 01.2
object DUMMYDisableSiren : CommandScript
{
    DUMMYDisableSiren()
    {
        SetGroupID(DummyGroup);
    }

    bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    {
    }

      void PushActions(GameObject *Caller, Actor *Target, int childID)
    {
        Vehicle v(Caller);

        if (childID == 1)
        {
            v.EnableBlueLights(false);
        }

        int ref = Caller->GetUserData();
        Audio::StopSample(ref);

        GameObjectList list = Game::GetGameObjects(NAME_DUMMYOBJECT);
        for(int i = 0; i < list.GetNumObjects(); i++)
        {
            GameObject *obj = list.GetObject(i);
            if (obj->GetUserData() == ref)
            {
                int mSirTest = i;

                GameObject *obj = list.GetObject(mSirTest);
                obj->PushActionDeleteOwner(ACTION_NEWLIST);
                v.RemoveCommand(DUMMY_HASSIREN);
                if (v.HasCommand(DUMMY_FINDPATH))
                {
                    v.RemoveCommand(DUMMY_FINDPATH);
                }
            }
        }
    }
};

// 01.3
object DUMMYFindPath : CommandScript
{
    DUMMYFindPath()
    {
        SetGroupID(DummyGroup);
    }

    bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    {
        return false;
    }

      void PushActions(GameObject *Caller, Actor *Target, int childID)
    {
    }
};

// 01.4
object DUMMYHasSiren : CommandScript
{
    DUMMYHasSiren()
    {
        SetGroupID(DummyGroup);
    }

    bool CheckGroupVisibility(GameObject *Caller)
    {
        return false;
    }

    bool CheckPossible(GameObject *Caller)
    {
        return false;
    }


    bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    {
        return false;
    }

    void PushActions(GameObject *Caller, Actor *Target, int childID)
    {
    }
};

Link to comment
Share on other sites

If you want to save some lines in the script you could use the following lines of code instead of the many if-cases after line 112 of your current version ( // Hier die const char Namen von oben eintragen wie in den beiden Beispielen unten.)

Simply replace the if-cases with these lines and name your audio files like the corresponding prototype of the vehicle.

char SoundName[255];
snprintf(SoundName, 255, "mod:Audio/FX/Sirens/%s.wav", v.GetPrototypeName());
soundID = Audio::PlaySample3D(SoundName, CarPos, true);

With this, you won't need to add a new if-case for every prototype. Simply add a new audio file to your folder and name it the same as the displayed name of the vehicle in the editor. (The one in the top bar, not the prototypename itself). If you have any questions, ask here or send me a PM! 

Link to comment
Share on other sites

You can also consolidate some vehicles together if they use the same set of sirens.

if (StrCompare(v.GetPrototypeFileName(), PROTO_CI2) == 0 ||
StrCompare(v.GetPrototypeFileName(), PROTO_UEP1) == 0 || 
StrCompare(v.GetPrototypeFileName(), PROTO_UEP2) == 0 || 
StrCompare(v.GetPrototypeFileName(), PROTO_TR2) == 0)
	soundID = Audio::PlaySample3D("mod:Audio/FX/Sirens/INEM.wav", CarPos, true);

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...