Jump to content
mindcore

How do I add a working grenade?

Recommended Posts

Hey Emergency Planet.

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

Link to comment
Share on other sites

That's what I was thinking too, essentially create a new flashbang but instead of it exploding and disorienting people, have people in XYZ dustance injured by fire, and give it the other properties of an explosion.

I think the retrieving and using function though would be a little foolhardy

Link to comment
Share on other sites

In addition to Voodoo, it should be possible by using a modified version of the flashbang script.

You cannot edit the flashbang code itself to make it injure or kill people as that code can only stun persons within a certain range.

I suggest you modify the Flashbang-script though and make it spawn an invisible object on the location where the flashgrenade is thrown (CmdPos).

Make the spawned object explode and voilá you will have something that looks like an exploding grenade. :happy:

The only problem you might encounter, is the timing of the explosion, but I'm sure thats resolvable too.

Don't forgot to change the Explosion Effect in the editor (Edit Traits menu) to an 'explosion type' of your choice, like 'explosioncar01'.

Also, change the 'material setting' of the invisible object in the editor. If I recall correctly, the material is related to the force of the explosion.

I'm not sure if the ThrowMolotov code will work. I've never used that code.

Good luck,

Mr Hop

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