Moin Community!
Ich habe mal wieder eine Baustelle:
Ich möchte meinen Höhenrettern ermöglichen, sich von Gebäuden abzuseilen.
Dazu habe ich mir folgendes Vorgehen erdacht:
1. Das Skript ist nur für OpenHouses möglich und es muss ein Child names "Seil" vorhanden sein
2. Bei Ausführen des Skriptes wird das Child enabled und durch ein Fahrzeug "Seil", technisch gesehen einem THW-Helikopter ersetzt.
3. Der Höhenretter wird in den "Helikopter" gesetzt und sofort abgeseilt
4. Am Ende wird der "Helikopter, d.h. das Seil gelöscht.
Es gibt ein Problem:
Das Skript funktioniert bis zur PushActionLetDownEngeneer(). Ich bin mir nicht ganz sicher, ob diese ausgeführt wird, aber ich denke schon. Trotzdem wird der Ingenieur letztlich nicht abgeseilt und verbleibt im Seil/Helikopter.
Hat jemand eine Idee?
Hier das Skript:
object Abseilen : CommandScript
{
Abseilen()
{
SetIcon("letdownengineer");
SetCursor("letdownengineer");
SetPossibleCallers(ACTOR_PERSON);
SetValidTargets(ACTOR_OPEN_HOUSE);
SetPriority(500);
}
bool CheckPossible(GameObject *Caller)
{
Person p(Caller);
if(p.IsValid() && !p.IsLinkedWithPerson() && !p.IsCarryingPerson())
return true;
return false;
}
bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
{
Person p(Caller);
GameObject Haus(Target);
//if(!Haus.HasChild("Seil"))
//{
// return false;
//}
//if(Haus.HasChild("Seil") && !p.HasCommand("ICH_TRAGE_LEITER"))
//{
// return true;
//}
return true;
//return false;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Person p(Caller);
Vehicle Seil = Game::CreateVehicle("mod:Prototypes/Vehicles/TEC/Seil.e4p", "Seil");;
OpenHouse Haus(Target);
float r[9];
Seil.GetRotation(r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]);
Haus.SetChildEnabled("Seil", true);
Vector SeilPos = Haus.GetChildPosition("Seil");
SeilPos.x -= 0.f;
SeilPos.y -= 0.f;
SeilPos.z -= 0.f;
Seil.SetPosition(SeilPos);
Seil.SetRotation(r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]);
Vector Abseilung(Seil.GetPosition());
if(childID == 0)
{
p.PushActionTurnTo(ACTION_NEWLIST, SeilPos);
p.PushActionMove(ACTION_APPEND, SeilPos);
p.PushActionExecuteCommand(ACTION_APPEND, "Abseilen", Target, 1, false);
}
if(childID == 1)
{
p.PushActionSwitchAnim(ACTION_APPEND, "treatinjured2");
p.PushActionWait(ACTION_APPEND, 1.0f);
p.PushActionExecuteCommand(ACTION_APPEND, "Abseilen", Target, 2, false);
}
if(childID == 2)
{
Seil.SetMaxPassengers(1, false);
Seil.AddPassenger(&p);
p.PushActionExecuteCommand(ACTION_APPEND, "Abseilen", Target, 3, false);
}
if(childID == 3)
{
Game::FindFreePosition(&Seil, Abseilung, 100.f);
Seil.SetPosition(Abseilung);
p.PushActionExecuteCommand(ACTION_APPEND, "Abseilen", Target, 4, false);
}
if(childID == 4)
{
Seil.PushActionLetDownEngineer(ACTION_APPEND);
p.PushActionExecuteCommand(ACTION_APPEND, "Abseilen", Target, 5, false);
}
if(childID == 5)
{
Seil.PushActionDeleteOwner(ACTION_APPEND);
}
}
};
Display More