mirror of
https://github.com/Resxt/Plutonium-IW5-Scripts.git
synced 2025-04-19 04:32:53 +00:00
sniper_attachment_switch_on_button_press 1.0
This commit is contained in:
parent
3cb4e7e27c
commit
793d769d19
@ -26,13 +26,21 @@ Here is a non-exhaustive list of buttons you can use
|
|||||||
"+breathe_sprint"
|
"+breathe_sprint"
|
||||||
```
|
```
|
||||||
|
|
||||||
## suicide_on_button_press.gsc
|
|
||||||
|
|
||||||
The player dies when pressing the button
|
|
||||||
|
|
||||||
## camera_switch_vote_on_button_press.gsc
|
## camera_switch_vote_on_button_press.gsc
|
||||||
|
|
||||||
Allows the players to toggle their vote to change the `camera_thirdPerson` dvar on the server (players vote no by default)
|
Allows the players to toggle their vote to change the `camera_thirdPerson` dvar on the server (players vote no by default)
|
||||||
When enough players vote yes the server changes the dvar and resets the vote counts.
|
When enough players vote yes the server changes the dvar and resets the vote counts.
|
||||||
The amount of votes required is more than 50% of the players: 1/1 | 2/2 | 3/4 | 3/5 | 4/6 etc.
|
The amount of votes required is more than 50% of the players: 1/1 | 2/2 | 3/4 | 3/5 | 4/6 etc.
|
||||||
Bots are ignored for the votes.
|
Bots are ignored for the votes.
|
||||||
|
|
||||||
|
## sniper_attachment_switch_on_button_press.gsc
|
||||||
|
|
||||||
|
Allows the player to cycle between several attachments for a list of weapons.
|
||||||
|
Displays the key to press to switch to the next attachment as well as the current attachment selected top right.
|
||||||
|
Whenever the player press the key, re-spawns or switches to another class with a valid weapon it will give him the attachment he wants.
|
||||||
|
|
||||||
|
This script has been written for the L118A, MSR and Intervention but can easily be modified or even optimized to support more weapons.
|
||||||
|
|
||||||
|
## suicide_on_button_press.gsc
|
||||||
|
|
||||||
|
The player dies when pressing the button
|
@ -0,0 +1,196 @@
|
|||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\gametypes\_hud_util;
|
||||||
|
|
||||||
|
Init()
|
||||||
|
{
|
||||||
|
level.attachment_switch_button = "+actionslot 5";
|
||||||
|
level.available_attachments = ["scope", "scope_silencer", "acog", "acog_silencer", "thermal", "thermal_silencer", "none", "silencer"];
|
||||||
|
|
||||||
|
InitWeaponVariants();
|
||||||
|
|
||||||
|
level thread OnPlayerConnect();
|
||||||
|
|
||||||
|
DisplayButtonsText();
|
||||||
|
}
|
||||||
|
|
||||||
|
OnPlayerConnect()
|
||||||
|
{
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
level waittill("connected", player);
|
||||||
|
|
||||||
|
player.pers["attachment_variant_name"] = "scope";
|
||||||
|
player.pers["attachment_variant_index"] = 0;
|
||||||
|
|
||||||
|
player thread OnAttachmentSwitchButtonPressed(level.attachment_switch_button);
|
||||||
|
|
||||||
|
player thread OnPlayerSpawned();
|
||||||
|
|
||||||
|
// Don't thread DisplayCurrentAttachment() on bots
|
||||||
|
if (isDefined(player.pers["isBot"]))
|
||||||
|
{
|
||||||
|
if (player.pers["isBot"])
|
||||||
|
{
|
||||||
|
continue; // skip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
player thread DisplayCurrentAttachment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OnPlayerSpawned()
|
||||||
|
{
|
||||||
|
self endon("disconnect");
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
self waittill("changed_kit");
|
||||||
|
|
||||||
|
current_weapon = self GetCurrentWeapon();
|
||||||
|
|
||||||
|
// Whenever the player spawns check if his weapon is a sniper we want and replace his weapon with the attachment he asked for
|
||||||
|
if (IsValidWeapon(current_weapon))
|
||||||
|
{
|
||||||
|
ReplaceWeapon(level.snipers_variants[current_weapon][self.pers["attachment_variant_name"]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayButtonsText()
|
||||||
|
{
|
||||||
|
attachment_switch_text = level createServerFontString( "Objective", 0.65 );
|
||||||
|
attachment_switch_text setPoint( "RIGHT", "RIGHT", -4, -227.5 );
|
||||||
|
attachment_switch_text setText("^1Press [{" + level.attachment_switch_button + "}] to switch attachment");
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayCurrentAttachment()
|
||||||
|
{
|
||||||
|
self endon ("disconnect");
|
||||||
|
level endon("game_ended");
|
||||||
|
|
||||||
|
self.attachment_text = createFontString( "Objective", 0.65 );
|
||||||
|
self.attachment_text setPoint( "RIGHT", "RIGHT", -4, -220 );
|
||||||
|
self.current_attachment_text = "";
|
||||||
|
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
if (IsDefined(self.pers["attachment_variant_name"]))
|
||||||
|
{
|
||||||
|
self.new_attachment_text = "^1Current attachement: " + self.pers["attachment_variant_name"];
|
||||||
|
|
||||||
|
// Only update when necessary, setText() is an expensive function
|
||||||
|
if (self.current_attachment_text != self.new_attachment_text)
|
||||||
|
{
|
||||||
|
self.current_attachment_text = self.new_attachment_text;
|
||||||
|
self.attachment_text setText(self.new_attachment_text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.01;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OnAttachmentSwitchButtonPressed(button)
|
||||||
|
{
|
||||||
|
self endon("disconnect");
|
||||||
|
level endon("game_ended");
|
||||||
|
|
||||||
|
self notifyOnPlayerCommand("attachment_switch_button", button);
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
self waittill("attachment_switch_button");
|
||||||
|
|
||||||
|
if (self.pers["attachment_variant_index"] < level.available_attachments.size - 1)
|
||||||
|
{
|
||||||
|
self.pers["attachment_variant_index"] = self.pers["attachment_variant_index"] + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.pers["attachment_variant_index"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.pers["attachment_variant_name"] = level.available_attachments[self.pers["attachment_variant_index"]];
|
||||||
|
|
||||||
|
// Here we give the weapon right when the player ask for a new attachement.
|
||||||
|
// If you don't want that remove this line and the new weapon will only be given on next spawn
|
||||||
|
if (IsDefined(self.primaryWeapon))
|
||||||
|
{
|
||||||
|
ReplaceWeapon(level.snipers_variants[self.primaryWeapon][self.pers["attachment_variant_name"]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IsValidWeapon(weapon)
|
||||||
|
{
|
||||||
|
switch (weapon)
|
||||||
|
{
|
||||||
|
case "iw5_l96a1_mp_l96a1scope":
|
||||||
|
case "iw5_msr_mp_msrscope":
|
||||||
|
case "iw5_rsass_mp_rsassscope":
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReplaceWeapon(new_weapon)
|
||||||
|
{
|
||||||
|
secondary_weapon = self.secondaryWeapon;
|
||||||
|
new_weapon = new_weapon + "_camo11"; // Change/remove this line to change the camo or have none
|
||||||
|
|
||||||
|
self TakeAllWeapons();
|
||||||
|
self GiveWeapon(new_weapon);
|
||||||
|
self GiveWeapon(secondary_weapon); // Re-give secondary weapon because TakeAllWeapons() removes it
|
||||||
|
self SetSpawnWeapon(secondary_weapon); // This ensures we don't have the animation when switching to the secondary weapon
|
||||||
|
self SetSpawnWeapon(new_weapon); // This gives the weapon without playing the animation
|
||||||
|
|
||||||
|
GiveLethalAndTactical();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TakeAllWeapons() removes lethal and tactical as well so we give default items after calling it
|
||||||
|
GiveLethalAndTactical()
|
||||||
|
{
|
||||||
|
self GiveWeapon("throwingknife_mp"); // Found in dsr files
|
||||||
|
self GiveWeapon("flare_mp"); // Tactical insertion - found in common_mp.ff
|
||||||
|
}
|
||||||
|
|
||||||
|
// For each weapon we want we declare an array with every possible value as key, example: l188a["scope"] and then we put the full weapon code as the value
|
||||||
|
// Then once that array has been filled with all possible values we add it to the level.snipers_variants array
|
||||||
|
// This could be optimized by having a generic function that builds those arrays by passing the base weapon name (example: iw5_l96a1) as parameter but this was enough for my use case
|
||||||
|
InitWeaponVariants()
|
||||||
|
{
|
||||||
|
level.snipers_variants = [];
|
||||||
|
|
||||||
|
l118a = [];
|
||||||
|
l118a["scope"] = "iw5_l96a1_mp_l96a1scope";
|
||||||
|
l118a["scope_silencer"] = "iw5_l96a1_mp_l96a1scope_silencer03";
|
||||||
|
l118a["acog"] = "iw5_l96a1_mp_acog";
|
||||||
|
l118a["acog_silencer"] = "iw5_l96a1_mp_acog_silencer03";
|
||||||
|
l118a["thermal"] = "iw5_l96a1_mp_thermal";
|
||||||
|
l118a["thermal_silencer"] = "iw5_l96a1_mp_silencer03_thermal";
|
||||||
|
l118a["none"] = "iw5_l96a1_mp";
|
||||||
|
l118a["silencer"] = "iw5_l96a1_mp_silencer03";
|
||||||
|
level.snipers_variants["iw5_l96a1_mp_l96a1scope"] = l118a;
|
||||||
|
|
||||||
|
msr = [];
|
||||||
|
msr["scope"] = "iw5_msr_mp_msrscope";
|
||||||
|
msr["scope_silencer"] = "iw5_msr_mp_msrscope_silencer03";
|
||||||
|
msr["acog"] = "iw5_msr_mp_acog";
|
||||||
|
msr["acog_silencer"] = "iw5_msr_mp_acog_silencer03";
|
||||||
|
msr["thermal"] = "iw5_msr_mp_thermal";
|
||||||
|
msr["thermal_silencer"] = "iw5_msr_mp_silencer03_thermal";
|
||||||
|
msr["none"] = "iw5_msr_mp";
|
||||||
|
msr["silencer"] = "iw5_msr_mp_silencer03";
|
||||||
|
level.snipers_variants["iw5_msr_mp_msrscope"] = msr;
|
||||||
|
|
||||||
|
intervention = [];
|
||||||
|
intervention["scope"] = "iw5_cheytac_mp_cheytacscope";
|
||||||
|
intervention["scope_silencer"] = "iw5_cheytac_mp_cheytacscope_silencer03";
|
||||||
|
intervention["acog"] = "iw5_cheytac_mp_acog";
|
||||||
|
intervention["acog_silencer"] = "iw5_cheytac_mp_acog_silencer03";
|
||||||
|
intervention["thermal"] = "iw5_cheytac_mp_thermal";
|
||||||
|
intervention["thermal_silencer"] = "iw5_cheytac_mp_silencer03_thermal";
|
||||||
|
intervention["none"] = "iw5_cheytac_mp";
|
||||||
|
intervention["silencer"] = "iw5_cheytac_mp_silencer03";
|
||||||
|
level.snipers_variants["iw5_rsass_mp_rsassscope"] = intervention;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user