I am trying to make a submod for Hoppah's Los Angeles Mod 2.1.
I have very little experience with scripting in Emergency 4 (although I do know some C++).
I am trying to add a new command to soldiers: Get Grenade. I pretty much want to make a copy of the flashbang but make it explosive, and make a secondary command to retrieve and use it.
This is for a military submod I am making... I'm not a trigger-happy maniac.
Any ideas? As I am a complete newbie, I really need all the help I can get. My code so far is:
object ThrowMolotov : CommandScript
{
ThrowMolotov()
{
SetValidTargets(ACTOR_FLOOR | ACTOR_OBJECT | ACTOR_VIRTUAL | ACTOR_HOUSE | ACTOR_OPEN_HOUSE);
SetPossibleCallers(ACTOR_PERSON);
SetIcon("throwmolotov");
SetCursor("throwmolotov");
}
bool CheckPossible(GameObject *Caller)
{
if(!Caller->IsValid() || Caller->GetType() != ACTOR_PERSON || Caller->GetEquipment()!=EQUIP_BOTTLE)
return false;
return true;
}
bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
{
if(!Caller->IsValid() || Caller->GetEquipment()!=EQUIP_BOTTLE || Caller->GetID() == Target->GetID())
return false;
if (Caller->GetType() != ACTOR_PERSON)
return false;
Person p(Caller);
if(p.GetEnteredCarID() != -1)
return false;
return true;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Vector CmdPos, TargetPos;
CmdPos = Game::GetCommandPos();
TargetPos = CmdPos;
Person p(Caller);
if(!p.IsValid())
return;
if (p.GetThrowPosition(TargetPos))
{
Caller->PushActionmove(ACTION_NEWLIST, TargetPos);
Caller->PushActionTurnTo(ACTION_APPEND, CmdPos);
}
else
{
Caller->PushActionTurnTo(ACTION_NEWLIST, CmdPos);
}
Caller->PushActionThrowMolotov(ACTION_APPEND, CmdPos, 150000.f);
Caller->PushActionRemoveEquipment(ACTION_APPEND);
}
};
object GetMolotov : CommandScript
{
GetMolotov()
{
SetValidTargets(ACTOR_FLOOR | ACTOR_OBJECT | ACTOR_VIRTUAL | ACTOR_HOUSE | ACTOR_OPEN_HOUSE);
SetGroupID(CGROUP_GETEQUIPMENT);
SetPossibleCallers(ACTOR_PERSON);
SetNeedsCarWithFlagSet(OF_HAS_FLASHGRENADE);
SetIcon("getmolotov");
SetCursor("getmolotov");
}
bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
{
if (!Caller->IsValid() || !Target->IsValid() || (Caller->GetID()==Target->GetID()))
return false;
if (Target->GetType()==ACTOR_VEHICLE)
{
Vehicle v(Target);
if ((v.HasCommand("FlyTo") || v.HasCommand("VcmdDeInstallRope")) && !v.IsOnGround())
return false;
}
Person p(Caller);
if(p.IsValid() && (p.IsCarryingPerson()||p.IsLinkedWithPerson()|| p.IsPulling() || p.GetEnteredCarID() != -1))
return false;
GameObject obj(Target);
if (Caller->GetObjectType()==TYPE_PERSON && Caller->GetEquipment()!=EQUIP_FLASHGRENADE &&
obj.IsValid() && obj.IsFlagSet(OF_HAS_FLASHGRENADE))
{
return true;
}
return true;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Vector TargetPos = Target->GetTargetPoint(Caller, TARGET_EQUIPMENTDOOR);
Caller->PushActionmove(ACTION_NEWLIST, TargetPos);
Caller->PushActionTurnTo(ACTION_APPEND, Target);
Caller->PushActionGetEquipment(ACTION_APPEND, Target, EQUIP_BOTTLE);
}
};















