reinstate relaunch container functionality

This has been used by external scenarios and there is no reason to put this into the relaunch rule script.
alut-include-path
Maikel de Vries 2017-05-01 21:26:01 +02:00
parent cc480be3eb
commit 3e0f18f4f3
4 changed files with 44 additions and 34 deletions

View File

@ -10,13 +10,21 @@
local menu;
local has_selected;
local crew;
// Sets the GetRelaunchRule().RelaunchTime, in seconds, the clonk is held in the container.
local hold_crew = false;
local relaunch_time = 36 * 10;
// Returns the GetRelaunchRule().RelaunchTime, in seconds the clonk is held.
public func GetRelaunchTime() { return GetRelaunchRule().relaunch_time / 36; }
// Sets the time, in seconds, the clonk is held in the container.
public func SetRelaunchTime(int to_time, bool to_hold)
{
relaunch_time = to_time * 36;
hold_crew = to_hold;
return;
}
// Returns the time, in seconds the clonk is held.
public func GetRelaunchTime() { return relaunch_time / 36; }
// Retrieve weapon list from scenario.
private func WeaponList() { return GameCall("RelaunchWeaponList"); }
@ -25,10 +33,10 @@ public func StartRelaunch(object clonk)
{
if (!clonk)
return;
// only 1 clonk can be inside
if(crew)
// Only 1 clonk can be inside.
if (crew)
return;
// save clonk for later use
// Save clonk for later use.
crew = clonk;
clonk->Enter(this);
ScheduleCall(this, "OpenWeaponMenu", 36, 0, clonk);
@ -47,13 +55,14 @@ private func OpenWeaponMenu(object clonk)
{
menu = CreateObject(MenuStyle_Default, nil, nil, clonk->GetOwner());
menu->SetPermanent();
menu->SetTitle(Format("$MsgWeapon$", GetRelaunchRule().relaunch_time / 36));
menu->SetTitle(Format("$MsgWeapon$", relaunch_time / 36));
clonk->SetMenu(menu, true);
if(GetType(GetRelaunchRule().last_used_player_weapons) != C4V_Array) GetRelaunchRule().last_used_player_weapons = [];
if (GetType(GetRelaunchRule().last_used_player_weapons) != C4V_Array)
GetRelaunchRule().last_used_player_weapons = [];
for (var weapon in weapons)
{
if(GetRelaunchRule().last_used_player_weapons[clonk->GetOwner()] != weapon)
if (GetRelaunchRule().last_used_player_weapons[clonk->GetOwner()] != weapon)
{
menu->AddItem(weapon, weapon->GetName(), nil, this, "OnWeaponSelected", weapon);
}
@ -64,40 +73,41 @@ private func OpenWeaponMenu(object clonk)
}
}
func FxIntTimeLimitTimer(object target, effect, int fxtime)
public func FxIntTimeLimitTimer(object target, effect fx, int fxtime)
{
var clonk = crew;
if (!clonk)
{
RemoveObject();
return -1;
return FX_Execute_Kill;
}
if (fxtime >= GetRelaunchRule().relaunch_time)
if (fxtime >= relaunch_time)
{
if (!has_selected && WeaponList())
GiveWeapon(WeaponList()[Random(GetLength(WeaponList()))]);
GiveWeapon(RandomElement(WeaponList()));
RelaunchClonk();
return -1;
return FX_Execute_Kill;
}
if (menu)
menu->SetTitle(Format("$MsgWeapon$", (GetRelaunchRule().relaunch_time - fxtime) / 36));
menu->SetTitle(Format("$MsgWeapon$", (relaunch_time - fxtime) / 36));
else
PlayerMessage(clonk->GetOwner(), Format("$MsgRelaunch$", (GetRelaunchRule().relaunch_time - fxtime) / 36));
return 1;
PlayerMessage(clonk->GetOwner(), Format("$MsgRelaunch$", (relaunch_time - fxtime) / 36));
return FX_OK;
}
public func OnWeaponSelected(id weapon)
{
if (!crew) return;
GiveWeapon(weapon);
if (GetRelaunchRule().disable_last_weapon)
if (!crew)
return;
GiveWeapon(weapon);
if (GetRelaunchRule()->GetLastWeaponUse())
GetRelaunchRule().last_used_player_weapons[crew->GetOwner()] = weapon;
has_selected = true;
// Close menu manually, to prevent selecting more weapons.
if (menu)
menu->Close();
if (!GetRelaunchRule()->GetHolding())
if (!hold_crew)
RelaunchClonk();
return true;
}
@ -105,7 +115,7 @@ public func OnWeaponSelected(id weapon)
private func RelaunchClonk()
{
var clonk = crew;
// When relaunching from disabled state (i.e base respawn), reset view to clonk
// When relaunching from disabled state (i.e base respawn), reset view to clonk.
if (!clonk->GetCrewEnabled())
{
clonk->SetCrewEnabled(true);
@ -129,6 +139,7 @@ private func GiveWeapon(id weapon_id)
return true;
}
public func SaveScenarioObject() { return false; }
local Name = "$Name$";
/*-- Saving --*/
public func SaveScenarioObject() { return false; }

View File

@ -1,3 +1,2 @@
Name=Relaunch container
MsgRelaunch=You will be relaunched in %d seconds.
MsgWeapon=You have %d seconds to choose a weapon.

View File

@ -1,3 +1,2 @@
Name=Relaunch container
MsgRelaunch=You will relaunch in %d seconds.
MsgWeapon=You have %d seconds to choose a weapon.

View File

@ -130,19 +130,19 @@ public func SetInitialRelaunch(bool on)
public func GetInitialRelaunch() { return initial_relaunch; }
// Determines ...
local hold = false;
// Determines whether the crew is released after weapon selection.
local hold_crew = false;
public func SetHolding(bool b)
public func SetHolding(bool hold)
{
hold = b;
hold_crew = hold;
return this;
}
public func GetHolding() { return hold; }
public func GetHolding() { return hold_crew; }
// Determines ...
// Determines whether the player can select the last weapon again.
local disable_last_weapon = false;
local last_used_player_weapons = [];
@ -361,6 +361,7 @@ public func DoRelaunch(int plr, object clonk, array position, bool no_creation)
if (relaunch_time)
{
var container = new_clonk->CreateObject(RelaunchContainer, 0, 0, plr);
container->SetRelaunchTime(relaunch_time, hold_crew);
container->StartRelaunch(new_clonk);
}
return true;
@ -388,7 +389,7 @@ public func SaveScenarioObject(props, ...)
props->AddCall("InventoryTransfer", this, "SetInventoryTransfer", inventory_transfer);
if (free_crew)
props->AddCall("FreeCrew", this, "SetFreeCrew", free_crew);
if(respawn_at_base)
if (respawn_at_base)
props->AddCall("BaseRespawn", this, "SetBaseRespawn", respawn_at_base);
return true;
}