Sonst keiner eine Idee, woran es liegen könnte?
Ich kann auch gerne nochmal das SoSi Script mit anhängen.
Sirens.Script [Quelle: BFEMP]
Code
//******************************************************************************************
// #Version 2.5#
//
// Includes: All Sirens Commands
//
// - VCmdSiren
// - DummyUpdatePos
// - DummyDisableSiren
// - DummyFindPath
// - DummyHasSiren
// - VCmdAutoSirenOn
// - VCmdAutoSirenOff
//
// Script by Bass-Ti
// Modified by Hoppah
//
//******************************************************************************************
//Car prototypes:
const char CMD_AUTOSIREN_ON[] = "VCmdAutoSirenOn";
const char CMD_AUTOSIREN_OFF[] = "VCmdAutoSirenOff";
const char CMD_MOVETO[] = "MoveTo";
const char EACTION_FINDPATH[] = "EActionFindPath";
const char EACTION_EXTINGUISH[] = "EActionExtinguish";
const char DUMMY_HASSIREN[] = "DummyHasSiren";
const char DUMMY_UPDATEPOS[] = "DummyUpdatePos";
const char DUMMY_FINDPATH[] = "DummyFindPath";
const char NAME_DUMMYOBJECT[] = "HelpingObjekt_Hoppah";
int DummyGroup = 23;
object VCmdSiren : CommandScript
{
VCmdSiren()
{
SetIcon("sirenson");
SetCursor("sirenson");
SetRestrictions(RESTRICT_SELFEXECUTE);
SetPossibleCallers(ACTOR_VEHICLE);
SetPriority(90);
}
bool CheckPossible(GameObject *Caller)
{
if (!Caller->IsValid() || Caller->GetType() != ACTOR_VEHICLE) return false;
if (!Caller->HasNamePrefix("AB_"))
{
if (!Caller->HasCommand("ALARM_DUMMY")) return false;
}
return true;
}
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)
{
if (!v.IsBlueLightEnabled()) Game::ExecuteCommand("VCmdBlue", &v);
int soundID;
int var;
if (v.HasNamePrefix("0")) var = 44;
if (v.HasNamePrefix("1")) var = 44;
if (v.HasNamePrefix("P")) var = 42;
if (v.HasNamePrefix("01_8")) var = 49;
if (v.HasNamePrefix("02_8")) var = 49;
if (v.HasNamePrefix("5")) var = 49;
if (v.HasNamePrefix("9")) var = 49;
Vector CarPos = v.GetPosition();
const char *CarName = v.GetName();
char SoundName[255];
snprintf(SoundName, 255, "mod:Audio/FX/Sirens/%s_%c.wav", v.GetPrototypeName(),v.GetPrototypeFileName()[var]);
soundID = Audio::PlaySample3D(SoundName, CarPos, true);
//Game::ShowHelpTextWindow(SoundName);
//Mission::PlayHint(SoundName);
char dnam[99];
snprintf(dnam,99,"%s%s",v.GetName(),NAME_DUMMYOBJECT);
if(GameObjectList(dnam).GetNumObjects()>0)GameObject mDummy(GameObjectList(dnam).GetObject(0));
else
GameObject mDummy = Game::CreateObject("mod:Prototypes/Objects/Misc/empty.e4p", dnam);
mDummy.Hide();
mDummy.SetUserData(soundID);
v.AttachSound(soundID);
mDummy.PushActionExecuteCommand(ACTION_NEWLIST, DUMMY_UPDATEPOS, &v, soundID, false);
v.AssignCommand(DUMMY_HASSIREN);
v.SetUserData(soundID);
return;
}
if (v.HasCommand(DUMMY_HASSIREN))
{
if (childID == 1) Game::ExecuteCommand("VCmdBlue", &v);
int ref = v.GetUserData();
v.UnattachSound(ref);
Audio::StopSample(ref);
int mSirTest;
char dnam[99];
snprintf(dnam,99,"%s%s",v.GetName(),NAME_DUMMYOBJECT);
GameObjectList list = Game::GetGameObjects(dnam);
for(int i=0; i<list.GetNumObjects(); i++)
{
GameObject *obj = list.GetObject(i);
if (obj->GetUserData() == ref)
{
mSirTest = i;
}
}
GameObject *obj = list.GetObject(mSirTest);
obj->PushActionWait(ACTION_NEWLIST,0.0f);
v.PushActionExecuteCommand(ACTION_INSERT, "FMS", &v, 4, false);
if (v.HasCommand(DUMMY_HASSIREN))
v.RemoveCommand(DUMMY_HASSIREN);
return;
}
}
};
object DummyUpdatePos : CommandScript
{
DummyUpdatePos()
{
SetGroupID(22);
}
bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
{
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Vehicle v(Target);
if(v.IsValid()&&v.GetEnergy()>0&&!v.IsHidden()&&Audio::IsPlaying(childID)&&v.IsBlueLightEnabled()&&(v.IsCurrentAction("EActionMove")||v.IsMoving()||v.GetNumActions()>0)){
GameObject ob(Caller);
Audio::UpdatePos(childID, v.GetPosition(), true);
v.SetUserData(childID);
ob.SetPosition(v.GetPosition());
ob.PushActionExecuteCommand(ACTION_APPEND,DUMMY_UPDATEPOS,Target,childID,false);
}else{
if(!v.IsHidden()&&v.IsValid())v.PushActionExecuteCommand(ACTION_INSERT, "FMS", &v, 4, false);
v.SetUserData(0);
v.RemoveCommand(DUMMY_HASSIREN);
Audio::StopSample(childID);
Caller->PushActionDeleteOwner(ACTION_NEWLIST);
}
}
};
object DummyDisableSiren : CommandScript
{
DummyDisableSiren()
{
SetGroupID(22);
}
bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
{
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Vehicle v(Caller);
if (childID == 1) v.PushActionExecuteCommand(ACTION_APPEND, "VCmdBlue", &v, 0, false);
int ref = v.GetUserData();
v.UnattachSound(ref);
Audio::StopSample(ref);
v.PushActionExecuteCommand(ACTION_INSERT, "FMS", &v, 4, false);
char dnam[99];
snprintf(dnam,99,"%s%s",v.GetName(),NAME_DUMMYOBJECT);
GameObjectList list = Game::GetGameObjects(dnam);
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->PushActionWait(ACTION_NEWLIST,0.0f);
if (v.HasCommand(DUMMY_HASSIREN))
v.RemoveCommand(DUMMY_HASSIREN);
if (v.HasCommand(DUMMY_FINDPATH))
v.RemoveCommand(DUMMY_FINDPATH);
}
}
}
};
object DummyFindPath : CommandScript
{
DummyFindPath()
{
SetGroupID(22);
}
bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
{
return false;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
}
};
object DummyHasSiren : CommandScript
{
DummyHasSiren()
{
SetGroupID(22);
}
bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
{
return false;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
}
};
object VCmdAutoSirenOn : CommandScript
{
VCmdAutoSirenOn()
{
SetIcon("autosirenon");
SetCursor("autosirenon");
SetGroupID(DummyGroup);
SetGroupLeader(true);
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 (!Caller->IsValid() || !Target->IsValid() || Target->GetID() != Caller->GetID())
return false;
if (Caller->GetType() == ACTOR_VEHICLE)
{
return true;
}
return true;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Caller->RemoveCommand(CMD_AUTOSIREN_ON);
Caller->AssignCommand(CMD_AUTOSIREN_OFF);
}
};
object VCmdAutoSirenOff : CommandScript
{
VCmdAutoSirenOff()
{
SetIcon("autosirenoff");
SetCursor("autosirenoff");
SetGroupID(DummyGroup);
SetGroupLeader(true);
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 (!Caller->IsValid() || !Target->IsValid() || Target->GetID() != Caller->GetID())
return false;
if (Caller->GetType() == ACTOR_VEHICLE)
{
return true;
}
return true;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Caller->RemoveCommand(CMD_AUTOSIREN_OFF);
Caller->AssignCommand(CMD_AUTOSIREN_ON);
}
};
Alles anzeigen