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); } };