Jump to content
The Loot

Altered ALS/BLS Scripts

Recommended Posts

NOTICE: IF YOUR HAVE YOUR AMBULANCES SET UP WITH BOTH PARAMEDIC AND STRETCHER TEAM, YOU PROBABLY CAN SKIP THIS WHOLE THING.

Long story short, I had my call scripts set up with two medics, and I was using the Police ambulance script so it would call any of the four ambulances. I was tired of not hearing the specific Chief call audio, and of losing the few "precious" seconds it takes to select the medics and have them get a stretcher. I decided to see if I could take the Police command and turn it into ALS Response and BLS Transport scripts. A little trial and error, and I seem to have gotten the kinks worked out.

Step One: Add the following commands to the LABattalionChief script.

Response Script - Nearest of the four Ambulances will respond with two medics.

object PcmdCallAmbulanceMedics : CommandScript
{
PcmdCallAmbulanceMedics()
{
SetIcon("callambulance2");
SetCursor("callassistance");
SetValidTargets(ACTOR_FLOOR | ACTOR_VIRTUAL);
SetDeselectCaller(false);
SetSelfClickActivation(true);
SetHighlightingEnabled(false);
SetGroupID(CGROUP_GETEQUIPMENT);
SetGroupLeader(true);
}

bool CheckPossible(GameObject *Caller)
{
GameObjectList SelectPer = Game::GetSelectedGameObjects();
if (SelectPer.GetNumObjects() != 1)
return false;

Person p(Caller);
if(p.IsValid() && (p.IsLinkedWithPerson() || p.IsCarryingPerson() || p.IsEquipped() || p.IsPulling() || p.GetFirehoseID()!=0 || p.GetEnteredCarID() != -1))
return false;

if (p.IsCurrentAction("EActionTreatPerson"))
return false;

if (!Caller->IsValid() || Caller->GetType() != ACTOR_PERSON)
return false;

return true;
}

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

if (Caller->GetType() != ACTOR_PERSON)
return false;

Person p(Caller);
if(p.IsValid() && (p.IsLinkedWithPerson() || p.IsCarryingPerson() || p.IsEquipped() || p.IsPulling() || p.GetFirehoseID()!=0 || p.GetEnteredCarID() != -1))
return false;

if (p.IsCurrentAction("EActionTreatPerson"))
return false;

return true;
}

void PushActions(GameObject *Caller, Actor *Target, int ChildID)
{
Vector CmdPos = Game::GetCommandPos();
Caller->PushActionTurnTo(ACTION_NEWLIST, CmdPos);
Caller->PushActionSwitchAnim(ACTION_APPEND, "talkmike");
Caller->PushActionWait(ACTION_APPEND, 3.5f);
Caller->PushActionSwitchAnim(ACTION_APPEND, "idle");
if(StrCompare(Caller->GetPrototypeFileName(), OBJ_BATTALION_CHIEF) == 0)
Audio::PlaySample3D(SND_BATALS, Caller->GetPosition());
else if(StrCompare(Caller->GetPrototypeFileName(), OBJ_EMS_CAPTAIN) == 0)
Audio::PlaySample3D(SND_EMSALS, Caller->GetPosition());

Vehicle *theCar = NULL;
float bestCar = 0.;
VehicleList patrolCars(VT_AMBULANCE_RTW, VT_AMBULANCE_RTW);
for (int i = 0; i < patrolCars.GetNumVehicles(); i++)
{
Vehicle *aCar = patrolCars.GetVehicle(i);
if (aCar->GetPlayerMP() == Caller->GetPlayerMP() && !aCar->HasCommand(DUMMY_VCALLED) && (aCar->HasCommand(CMD_STANDBY_OFF) || aCar->HasCommand(DUMMY_PATROL) || aCar->IsCollidingWithVirtualObject(VO_SQUAD01) || aCar->IsCollidingWithVirtualObject(VO_SQUAD02)))
{
float distCurrCar = Math::dist(CmdPos.x, CmdPos.y, aCar->GetPosition().x, aCar->GetPosition().y);
if (distCurrCar < bestCar || bestCar == 0.)
{
theCar = aCar;
bestCar = distCurrCar;
}
}
}
if (theCar)
{
bool VehicleCalled = false;
if (theCar->HasCommand(CMD_STANDBY_OFF) || theCar->HasObjectPath(NULL))
{
theCar->PushActionWait(ACTION_NEWLIST, 0.3f);
if (theCar->HasCommand(DUMMY_PATROL))
theCar->PushActionExecuteCommand(ACTION_APPEND, DUMMY_PATROL, theCar, 1, false);
theCar->PushActionmove(ACTION_APPEND, CmdPos);
if (!theCar->HasCommand(DUMMY_HASSIREN) && theCar->HasCommand(CMD_AUTOSIREN_OFF) && !Input::LShiftPressed() && !Input::RShiftPressed())
Game::ExecuteCommand(CMD_SIREN, theCar, theCar);
if (theCar->HasCommand(CMD_STANDBY_OFF))
{
theCar->RemoveCommand(CMD_STANDBY_OFF);
theCar->AssignCommand(CMD_STANDBY_ON);
}
if (theCar->HasCommand(CMD_WARNINGLIGHTS_OFF))
{
theCar->EnableBlinker(BLT_NONE);
theCar->RemoveCommand(CMD_WARNINGLIGHTS_OFF);
theCar->AssignCommand(CMD_WARNINGLIGHTS_ON);
}
if (theCar->HasCommand(CMD_FLOODLIGHTS_OFF))
{
theCar->EnableSpecialLights(false);
theCar->RemoveCommand(CMD_FLOODLIGHTS_OFF);
theCar->AssignCommand(CMD_FLOODLIGHTS_ON);
}
Mission::PlayHint(HINT_DISPATCHED);
return;
}
else if (theCar->IsCollidingWithVirtualObject(VO_SQUAD01))
{
bool Ambulance02 = false;
bool Ambulance03 = false;
if (!VehicleCalled)
{
GameObjectList l1;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE01, l1, ACTOR_VEHICLE);
if(l1.GetNumObjects() > 0)
{
Vehicle v = l1.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
} else
Ambulance02 = true;
} else
Ambulance02 = true;
}
if (!VehicleCalled && Ambulance02)
{
GameObjectList l2;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE02, l2, ACTOR_VEHICLE);
if(l2.GetNumObjects() > 0)
{
Vehicle v = l2.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
} else
Ambulance03 = true;
} else
Ambulance03 = true;
}
if (!VehicleCalled && Ambulance03)
{
GameObjectList l3;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE03, l3, ACTOR_VEHICLE);
if(l3.GetNumObjects() > 0)
{
Vehicle v = l3.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
}
}
}
}
else if (theCar->IsCollidingWithVirtualObject(VO_SQUAD02))
{
GameObjectList l4;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE04, l4, ACTOR_VEHICLE);
if(l4.GetNumObjects() > 0)
{
Vehicle v = l4.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
}
}
}
if (VehicleCalled)
{
if (v.IsBlueLightEnabled() && (Input::LShiftPressed() || Input::RShiftPressed()))
v.EnableBlueLights(false);
else if (!v.IsBlueLightEnabled() && !Input::LShiftPressed() && !Input::RShiftPressed())
v.EnableBlueLights(true);
bool Station1 = false;
if(v.IsCollidingWithVirtualObject(VO_SQUAD01))
{
//Mission::PlayHint("Station1 Found");
Station1 = true;
GameObjectList gate01a = Game::GetGameObjects(OBJ_GATE01A);
for(int i=0; i < gate01a.GetNumObjects(); i++)
GameObject *gate = gate01a.GetObject(i);
}
else if(v.IsCollidingWithVirtualObject(VO_SQUAD02))
{
//Mission::PlayHint("Station2 Found");
GameObjectList gate08a = Game::GetGameObjects(OBJ_GATE08A);
for(int i=0; i < gate08a.GetNumObjects(); i++)
GameObject *gate = gate08a.GetObject(i);
}
PersonList passengers = v.GetPassengers();
if (passengers.GetNumPersons() == 0)
{
if (StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE01) == 0)
{
v.PushActionExecuteCommand(ACTION_NEWLIST, DUMMY_CALLCREW, Caller, 1, false);
v.PushActionWait(ACTION_APPEND, 0.1f);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_CALLCREW, Caller, 1, false);
v.PushActionWait(ACTION_APPEND, 10.f);
}
else
{
v.PushActionExecuteCommand(ACTION_NEWLIST, DUMMY_CALLCREW, Caller, 1, false);
v.PushActionWait(ACTION_APPEND, 0.1f);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_CALLCREW, Caller, 1, false);
v.PushActionWait(ACTION_APPEND, 10.f);
}
}

if (gate->GetUserData() == 0)
{
//Mission::PlayHint("Gate is Closed");
if(v.IsCollidingWithVirtualObject(VO_SQUAD01))
{
//Mission::PlayHint("Gate Closed at Station1");
//v.PushActionExecuteCommand(ACTION_APPEND, "ShowMessage1", Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 5, false);
float dx = 1050.f, dy = 0.f, dz = 0.f;
}
else
{
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 6, false);
float dx = 500.f, dy = 0.f, dz = 0.f;
}
Vector Move = v.GetPosition();
float r[9];
float childr[9];
v.GetRotation(r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]);
Math::RotateVector(dx, dy, dz, r);
Math::EulerToMatrix(0.0f, 0.f, 0.f, childr);
Math::MultiplyMatrices(childr, r);
Move = Move + Vector(dx, dy, 0);
v.PushActionWait(ACTION_APPEND, 1.2f);
if (!v.HasCommand(DUMMY_HASSIREN) && v.HasCommand(CMD_AUTOSIREN_OFF) && !Input::LShiftPressed() && !Input::RShiftPressed())
v.PushActionExecuteCommand(ACTION_APPEND, CMD_SIREN, Caller, 0, false);
v.PushActionmove(ACTION_APPEND, Move);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_VCALLED, Caller, 0, false);
if(Station1)
{
//Mission::PlayHint("Station1 Called");
//v.PushActionExecuteCommand(ACTION_APPEND, "ShowMessage2", Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 5, false);
}
else
{
//Mission::PlayHint("Station2 Called");
//v.PushActionExecuteCommand(ACTION_APPEND, "ShowMessage7", Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 6, false);
}
v.PushActionmove(ACTION_APPEND, CmdPos);
}
else
{
//Mission::PlayHint("Gate is Already Open");
if (!v.HasCommand(DUMMY_HASSIREN) && v.HasCommand(CMD_AUTOSIREN_OFF) && !Input::LShiftPressed() && !Input::RShiftPressed())
v.PushActionExecuteCommand(ACTION_APPEND, CMD_SIREN, Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_VCALLED, Caller, 0, false);
v.PushActionmove(ACTION_APPEND, CmdPos);
}
if (v.HasCommand(CMD_STANDBY_OFF))
{
v.RemoveCommand(CMD_STANDBY_OFF);
v.AssignCommand(CMD_STANDBY_ON);
}
if (v.HasCommand(CMD_WARNINGLIGHTS_OFF))
{
v.EnableBlinker(BLT_NONE);
v.RemoveCommand(CMD_WARNINGLIGHTS_OFF);
v.AssignCommand(CMD_WARNINGLIGHTS_ON);
}
Mission::PlayHint(HINT_DISPATCHED);
return;
}
}
Mission::PlayHint(HINT_NOAMBULANCE);
}
};

Transport Script - Nearest of the four Ambulances will respond with one EMT stretcher team (vanilla BLS setup).

object PcmdCallAmbulanceTransport : CommandScript
{
PcmdCallAmbulanceTransport()
{
SetIcon("callambulance1");
SetCursor("callassistance");
SetValidTargets(ACTOR_FLOOR | ACTOR_VIRTUAL);
SetDeselectCaller(false);
SetSelfClickActivation(true);
SetHighlightingEnabled(false);
SetGroupID(CGROUP_GETEQUIPMENT);
SetGroupLeader(true);
}

bool CheckPossible(GameObject *Caller)
{
GameObjectList SelectPer = Game::GetSelectedGameObjects();
if (SelectPer.GetNumObjects() != 1)
return false;

Person p(Caller);
if(p.IsValid() && (p.IsLinkedWithPerson() || p.IsCarryingPerson() || p.IsEquipped() || p.IsPulling() || p.GetFirehoseID()!=0 || p.GetEnteredCarID() != -1))
return false;

if (p.IsCurrentAction("EActionTreatPerson"))
return false;

if (!Caller->IsValid() || Caller->GetType() != ACTOR_PERSON)
return false;

return true;
}

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

if (Caller->GetType() != ACTOR_PERSON)
return false;

Person p(Caller);
if(p.IsValid() && (p.IsLinkedWithPerson() || p.IsCarryingPerson() || p.IsEquipped() || p.IsPulling() || p.GetFirehoseID()!=0 || p.GetEnteredCarID() != -1))
return false;

if (p.IsCurrentAction("EActionTreatPerson"))
return false;

return true;
}

void PushActions(GameObject *Caller, Actor *Target, int ChildID)
{
Vector CmdPos = Game::GetCommandPos();
Caller->PushActionTurnTo(ACTION_NEWLIST, CmdPos);
Caller->PushActionSwitchAnim(ACTION_APPEND, "talkmike");
Caller->PushActionWait(ACTION_APPEND, 3.5f);
Caller->PushActionSwitchAnim(ACTION_APPEND, "idle");
if(StrCompare(Caller->GetPrototypeFileName(), OBJ_BATTALION_CHIEF) == 0)
Audio::PlaySample3D(SND_BATBLS, Caller->GetPosition());
else if(StrCompare(Caller->GetPrototypeFileName(), OBJ_EMS_CAPTAIN) == 0)
Audio::PlaySample3D(SND_EMSBLS, Caller->GetPosition());

Vehicle *theCar = NULL;
float bestCar = 0.;
VehicleList patrolCars(VT_AMBULANCE_RTW, VT_AMBULANCE_RTW);
for (int i = 0; i < patrolCars.GetNumVehicles(); i++)
{
Vehicle *aCar = patrolCars.GetVehicle(i);
if (aCar->GetPlayerMP() == Caller->GetPlayerMP() && !aCar->HasCommand(DUMMY_VCALLED) && (aCar->HasCommand(CMD_STANDBY_OFF) || aCar->HasCommand(DUMMY_PATROL) || aCar->IsCollidingWithVirtualObject(VO_SQUAD01) || aCar->IsCollidingWithVirtualObject(VO_SQUAD02)))
{
float distCurrCar = Math::dist(CmdPos.x, CmdPos.y, aCar->GetPosition().x, aCar->GetPosition().y);
if (distCurrCar < bestCar || bestCar == 0.)
{
theCar = aCar;
bestCar = distCurrCar;
}
}
}
if (theCar)
{
bool VehicleCalled = false;
if (theCar->HasCommand(CMD_STANDBY_OFF) || theCar->HasObjectPath(NULL))
{
theCar->PushActionWait(ACTION_NEWLIST, 0.3f);
if (theCar->HasCommand(DUMMY_PATROL))
theCar->PushActionExecuteCommand(ACTION_APPEND, DUMMY_PATROL, theCar, 1, false);
theCar->PushActionmove(ACTION_APPEND, CmdPos);
if (!theCar->HasCommand(DUMMY_HASSIREN) && theCar->HasCommand(CMD_AUTOSIREN_OFF) && !Input::LShiftPressed() && !Input::RShiftPressed())
Game::ExecuteCommand(CMD_SIREN, theCar, theCar);
if (theCar->HasCommand(CMD_STANDBY_OFF))
{
theCar->RemoveCommand(CMD_STANDBY_OFF);
theCar->AssignCommand(CMD_STANDBY_ON);
}
if (theCar->HasCommand(CMD_WARNINGLIGHTS_OFF))
{
theCar->EnableBlinker(BLT_NONE);
theCar->RemoveCommand(CMD_WARNINGLIGHTS_OFF);
theCar->AssignCommand(CMD_WARNINGLIGHTS_ON);
}
if (theCar->HasCommand(CMD_FLOODLIGHTS_OFF))
{
theCar->EnableSpecialLights(false);
theCar->RemoveCommand(CMD_FLOODLIGHTS_OFF);
theCar->AssignCommand(CMD_FLOODLIGHTS_ON);
}
Mission::PlayHint(HINT_DISPATCHED);
return;
}
else if (theCar->IsCollidingWithVirtualObject(VO_SQUAD01))
{
bool Ambulance02 = false;
bool Ambulance03 = false;
if (!VehicleCalled)
{
GameObjectList l1;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE01, l1, ACTOR_VEHICLE);
if(l1.GetNumObjects() > 0)
{
Vehicle v = l1.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
} else
Ambulance02 = true;
} else
Ambulance02 = true;
}
if (!VehicleCalled && Ambulance02)
{
GameObjectList l2;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE02, l2, ACTOR_VEHICLE);
if(l2.GetNumObjects() > 0)
{
Vehicle v = l2.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
} else
Ambulance03 = true;
} else
Ambulance03 = true;
}
if (!VehicleCalled && Ambulance03)
{
GameObjectList l3;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE03, l3, ACTOR_VEHICLE);
if(l3.GetNumObjects() > 0)
{
Vehicle v = l3.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
}
}
}
}
else if (theCar->IsCollidingWithVirtualObject(VO_SQUAD02))
{
GameObjectList l4;
Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE04, l4, ACTOR_VEHICLE);
if(l4.GetNumObjects() > 0)
{
Vehicle v = l4.GetObject(0);
if (!v.HasCommand(DUMMY_VCALLED))
{
v.AssignCommand(DUMMY_VCALLED);
VehicleCalled = true;
}
}
}
if (VehicleCalled)
{
if (v.IsBlueLightEnabled() && (Input::LShiftPressed() || Input::RShiftPressed()))
v.EnableBlueLights(false);
else if (!v.IsBlueLightEnabled() && !Input::LShiftPressed() && !Input::RShiftPressed())
v.EnableBlueLights(true);
bool Station1 = false;
if(v.IsCollidingWithVirtualObject(VO_SQUAD01))
{
//Mission::PlayHint("Station1 Found");
Station1 = true;
GameObjectList gate01a = Game::GetGameObjects(OBJ_GATE01A);
for(int i=0; i < gate01a.GetNumObjects(); i++)
GameObject *gate = gate01a.GetObject(i);
}
else if(v.IsCollidingWithVirtualObject(VO_SQUAD02))
{
//Mission::PlayHint("Station2 Found");
GameObjectList gate08a = Game::GetGameObjects(OBJ_GATE08A);
for(int i=0; i < gate08a.GetNumObjects(); i++)
GameObject *gate = gate08a.GetObject(i);
}
PersonList passengers = v.GetPassengers();
if (passengers.GetNumPersons() == 0)
{
if (StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE01) == 0)
{
v.PushActionExecuteCommand(ACTION_NEWLIST, DUMMY_CALLCREW, Caller, 7, false);
//v.PushActionWait(ACTION_APPEND, 0.1f);
//v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_CALLCREW, Caller, 1, false);
v.PushActionWait(ACTION_APPEND, 10.f);
}
else
{
v.PushActionExecuteCommand(ACTION_NEWLIST, DUMMY_CALLCREW, Caller, 7, false);
//v.PushActionWait(ACTION_APPEND, 0.1f);
//v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_CALLCREW, Caller, 1, false);
v.PushActionWait(ACTION_APPEND, 10.f);
}
}

if (gate->GetUserData() == 0)
{
//Mission::PlayHint("Gate is Closed");
if(v.IsCollidingWithVirtualObject(VO_SQUAD01))
{
//Mission::PlayHint("Gate Closed at Station1");
//v.PushActionExecuteCommand(ACTION_APPEND, "ShowMessage1", Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 5, false);
float dx = 1050.f, dy = 0.f, dz = 0.f;
}
else
{
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 6, false);
float dx = 500.f, dy = 0.f, dz = 0.f;
}
Vector Move = v.GetPosition();
float r[9];
float childr[9];
v.GetRotation(r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]);
Math::RotateVector(dx, dy, dz, r);
Math::EulerToMatrix(0.0f, 0.f, 0.f, childr);
Math::MultiplyMatrices(childr, r);
Move = Move + Vector(dx, dy, 0);
v.PushActionWait(ACTION_APPEND, 1.2f);
if (!v.HasCommand(DUMMY_HASSIREN) && v.HasCommand(CMD_AUTOSIREN_OFF) && !Input::LShiftPressed() && !Input::RShiftPressed())
v.PushActionExecuteCommand(ACTION_APPEND, CMD_SIREN, Caller, 0, false);
v.PushActionmove(ACTION_APPEND, Move);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_VCALLED, Caller, 0, false);
if(Station1)
{
//Mission::PlayHint("Station1 Called");
//v.PushActionExecuteCommand(ACTION_APPEND, "ShowMessage2", Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 5, false);
}
else
{
//Mission::PlayHint("Station2 Called");
//v.PushActionExecuteCommand(ACTION_APPEND, "ShowMessage7", Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 6, false);
}
v.PushActionmove(ACTION_APPEND, CmdPos);
}
else
{
//Mission::PlayHint("Gate is Already Open");
if (!v.HasCommand(DUMMY_HASSIREN) && v.HasCommand(CMD_AUTOSIREN_OFF) && !Input::LShiftPressed() && !Input::RShiftPressed())
v.PushActionExecuteCommand(ACTION_APPEND, CMD_SIREN, Caller, 0, false);
v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_VCALLED, Caller, 0, false);
v.PushActionmove(ACTION_APPEND, CmdPos);
}
if (v.HasCommand(CMD_STANDBY_OFF))
{
v.RemoveCommand(CMD_STANDBY_OFF);
v.AssignCommand(CMD_STANDBY_ON);
}
if (v.HasCommand(CMD_WARNINGLIGHTS_OFF))
{
v.EnableBlinker(BLT_NONE);
v.RemoveCommand(CMD_WARNINGLIGHTS_OFF);
v.AssignCommand(CMD_WARNINGLIGHTS_ON);
}
Mission::PlayHint(HINT_DISPATCHED);
return;
}
}
Mission::PlayHint(HINT_NOAMBULANCE);
}
};

Step Two: Launch the EM4 editor, load up the LA Mod, select the Batallion Chief, add "PcmdCallAmbulanceMedics" and "PcmdCallAmbulanceTransport" to him, and remove "PcmdCallAmbulance1" and "PcmdCallAmbulance2", and then do the same for the Paramedic Captain. If you want to keep them for the sake of nostalgia, or the purpose of setting up another crew complement for the original scripts, you can probably skip removing the old commands.

NOTE: FOR SOME REASON, ADDING THE COMMANDS TO THE PARAMEDIC CAPTAIN GLITCHES HIS ABILITY TO GET AN EMERGENCY CASE. Not sure why.

Step Three: Open "\Lang\en\command.xml" and add the following.

<string name="PcmdCallAmbulanceMedics">Call a response ambulance</string>
<string name="PcmdCallAmbulanceTransport">Call a transport ambulance</string>

And that should be it. Thanks to Hoppah for the original LA Mod, and Xplorer4x4 and YSB for their submod that I use (I slightly edited those scripts so they should be compatible with the base mod. Results may vary with any submods). Next I want to see if I can do the same for the ALS/BLS engines.... but I think that might be out of my reach, not to mention changing the Light Force commands. Only one way to find out, though.

Also, I found a little tweak to stop the lights from turning on until a dispatched vehicle actually leaves the station with just a simple "comment out".

Find the following lines in the BattalionChief script:

if (v.IsBlueLightEnabled() && (Input::LShiftPressed() || Input::RShiftPressed()))
v.EnableBlueLights(false);
else if (!v.IsBlueLightEnabled() && !Input::LShiftPressed() && !Input::RShiftPressed())
v.EnableBlueLights(true);

And add "//" to the start of each line.

Link to comment
Share on other sites

Yeah, I noticed that, though the weird thing is they just replace the regular ALS/BLS scripts so there shouldn't be a problem of "more" commands.

Maybe if you can manage to put the "Get Medical Bag" to the main menu, though I don't know if there's room, or if it's possible.

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...