+frag for rotation locking, +speed_throw for switching between rotation modes.
You can switch between modes using the +speed_throw keybind (usually right mouse key). Initial mode will be 0 which is "full rotation" without any limitation. 1 will then be "limited rotation" which allows for more "default" rotation like "just left"/"just right"/"just forward"/"just backwards" or "just down"/"just up". 2 is only accessible through the +frag keybind (usually G) and completely locks the current angles.master
parent
8e954ac94a
commit
62c68028d3
|
@ -2,6 +2,7 @@
|
||||||
#include maps\mp\_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps\mp\perks\_perks;
|
#include maps\mp\perks\_perks;
|
||||||
#include maps\mp\gametypes\_hud_util;
|
#include maps\mp\gametypes\_hud_util;
|
||||||
|
#include maps\mp\mods\_math;
|
||||||
#include maps\mp\mods\_modversion;
|
#include maps\mp\mods\_modversion;
|
||||||
#include maps\mp\mods\disableClassMenu;
|
#include maps\mp\mods\disableClassMenu;
|
||||||
#include maps\mp\mods\helpingHints;
|
#include maps\mp\mods\helpingHints;
|
||||||
|
@ -62,6 +63,7 @@ main()
|
||||||
if (getdvar("mapname") == "mp_background")
|
if (getdvar("mapname") == "mp_background")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/#
|
||||||
// Show version watermark at bottom right
|
// Show version watermark at bottom right
|
||||||
versionHudElem = createServerFontString("default", 1.0);
|
versionHudElem = createServerFontString("default", 1.0);
|
||||||
versionHudElem setPoint("BOTTOMRIGHT", "BOTTOMRIGHT", -4, -14);
|
versionHudElem setPoint("BOTTOMRIGHT", "BOTTOMRIGHT", -4, -14);
|
||||||
|
@ -70,6 +72,7 @@ main()
|
||||||
versionHudElem.sort = 1001;
|
versionHudElem.sort = 1001;
|
||||||
versionHudElem.foreground = false;
|
versionHudElem.foreground = false;
|
||||||
versionHudElem.alpha = 0.5;
|
versionHudElem.alpha = 0.5;
|
||||||
|
#/
|
||||||
|
|
||||||
// Define allowed seeker weapons
|
// Define allowed seeker weapons
|
||||||
level.seekerWeapons = [];
|
level.seekerWeapons = [];
|
||||||
|
@ -677,6 +680,10 @@ handleHider() {
|
||||||
player thread enableQuickRandomModelChange("+reload");
|
player thread enableQuickRandomModelChange("+reload");
|
||||||
player thread giveHelpfulHintsForHider();
|
player thread giveHelpfulHintsForHider();
|
||||||
player thread revealWhenGameEnds();
|
player thread revealWhenGameEnds();
|
||||||
|
/#
|
||||||
|
player thread enableUnlimitedReload();
|
||||||
|
player thread enableWeaponDicing("+actionslot 2");
|
||||||
|
#/
|
||||||
|
|
||||||
if (!gameFlag("seekers_released"))
|
if (!gameFlag("seekers_released"))
|
||||||
{
|
{
|
||||||
|
@ -721,7 +728,7 @@ setDisguiseModel(model)
|
||||||
player.disguiseEntity.owner = player.owner;
|
player.disguiseEntity.owner = player.owner;
|
||||||
player.disguiseEntity Solid();
|
player.disguiseEntity Solid();
|
||||||
player.disguiseEntity SetCanDamage(true);
|
player.disguiseEntity SetCanDamage(true);
|
||||||
player thread watchDisguise("+melee");
|
player thread watchDisguise("+frag", "+speed_throw");
|
||||||
player thread watchDisguiseDamage();
|
player thread watchDisguiseDamage();
|
||||||
}
|
}
|
||||||
player.disguiseEntity SetModel(model);
|
player.disguiseEntity SetModel(model);
|
||||||
|
@ -959,8 +966,12 @@ handleModelMenuSelection()
|
||||||
*
|
*
|
||||||
* Also runs enableDisguiseModelAngleLocking() with the given player
|
* Also runs enableDisguiseModelAngleLocking() with the given player
|
||||||
* command that allows to rotate the entity as intended.
|
* command that allows to rotate the entity as intended.
|
||||||
|
*
|
||||||
|
* Also runs enableDisguiseModelAngleModeSwitching() with the given
|
||||||
|
* player command that allows to switch between methods of rotating
|
||||||
|
* the entity.
|
||||||
*/
|
*/
|
||||||
watchDisguise(angleLockingPlayerCommand)
|
watchDisguise(angleLockingPlayerCommand, angleModeSwitchPlayerCommand)
|
||||||
{
|
{
|
||||||
logPrint("watchDisguise called");
|
logPrint("watchDisguise called");
|
||||||
|
|
||||||
|
@ -970,18 +981,31 @@ watchDisguise(angleLockingPlayerCommand)
|
||||||
player endon("death");
|
player endon("death");
|
||||||
player endon("disconnect");
|
player endon("disconnect");
|
||||||
|
|
||||||
player.disguiseAnglesLocked = false;
|
player.disguiseAngleMode = 0;
|
||||||
player thread enableDisguiseModelAngleLocking(angleLockingPlayerCommand);
|
player thread enableDisguiseModelAngleLocking(angleLockingPlayerCommand);
|
||||||
|
player thread enableDisguiseModelAngleModeSwitching(angleModeSwitchPlayerCommand);
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
if (!IsDefined(player.disguiseEntity))
|
if (!IsDefined(player.disguiseEntity))
|
||||||
break;
|
|
||||||
player.disguiseEntity MoveTo(player GetOrigin(), 0.1);
|
|
||||||
if (player.disguiseAnglesLocked)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
player.disguiseEntity MoveTo(player GetOrigin(), 0.1);
|
||||||
|
switch (player.disguiseAngleMode)
|
||||||
|
{
|
||||||
|
case 0: // full rotate
|
||||||
player.disguiseEntity RotateTo(player GetPlayerAngles(), 0.1);
|
player.disguiseEntity RotateTo(player GetPlayerAngles(), 0.1);
|
||||||
|
break;
|
||||||
|
case 1: // lock rotate
|
||||||
|
playerAngles = player GetPlayerAngles();
|
||||||
|
playerAngles = (
|
||||||
|
roundFloat(playerAngles[0] / 90, 0) * 90,
|
||||||
|
roundFloat(playerAngles[1] / 90, 0) * 90,
|
||||||
|
playerAngles[2]);
|
||||||
|
player.disguiseEntity RotateTo(playerAngles, 0.1);
|
||||||
|
//case 2: // no rotate
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -998,6 +1022,8 @@ watchDisguiseDamage()
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
player.disguiseEntity waittill("damage", amount, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags);
|
player.disguiseEntity waittill("damage", amount, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags);
|
||||||
|
if (attacker.team != player.team)
|
||||||
|
{
|
||||||
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback("standard");
|
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback("standard");
|
||||||
// eInflictor = the entity that causes the damage (e.g. a claymore)
|
// eInflictor = the entity that causes the damage (e.g. a claymore)
|
||||||
// eAttacker = the player that is attacking
|
// eAttacker = the player that is attacking
|
||||||
|
@ -1007,11 +1033,52 @@ watchDisguiseDamage()
|
||||||
// damagepos = the position damage is coming from
|
// damagepos = the position damage is coming from
|
||||||
// damagedir = the direction damage is moving in
|
// damagedir = the direction damage is moving in
|
||||||
player maps\mp\gametypes\_weapons::damageEnt(type, attacker, amount, "", modelName, point, direction_vec);
|
player maps\mp\gametypes\_weapons::damageEnt(type, attacker, amount, "", modelName, point, direction_vec);
|
||||||
//player.health = player.disguiseEntity.health;
|
}
|
||||||
|
player.disguiseEntity.health = player.health;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enables switching between methods of angle application on the disguise model
|
||||||
|
* using a player command.
|
||||||
|
*/
|
||||||
|
enableDisguiseModelAngleModeSwitching(playerCommand)
|
||||||
|
{
|
||||||
|
logPrint("enableDisguiseModelAngleModeSwitching called");
|
||||||
|
|
||||||
|
player = self;
|
||||||
|
|
||||||
|
level endon("game_ended");
|
||||||
|
player endon("death");
|
||||||
|
player endon("disconnect");
|
||||||
|
|
||||||
|
player notifyOnPlayerCommand("disguisemodelanglemodeswitch_requested", playerCommand);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
player waittill("disguisemodelanglemodeswitch_requested");
|
||||||
|
if (player.disguiseAngleMode > 1)
|
||||||
|
{
|
||||||
|
// Some other button was used to lock the position completely
|
||||||
|
player.disguiseAngleMode = 0; // start from "Full"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.disguiseAngleMode = (player.disguiseAngleMode + 1) % 2;
|
||||||
|
}
|
||||||
|
switch (player.disguiseAngleMode)
|
||||||
|
{
|
||||||
|
case 0: // full rotate
|
||||||
|
player IPrintLnBold("Rotation mode: ^2Full");
|
||||||
|
break;
|
||||||
|
case 1: // lock rotate
|
||||||
|
player IPrintLnBold("Rotation mode: ^2Limited");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enables locking the angles of the disguise model using a player
|
* Enables locking the angles of the disguise model using a player
|
||||||
* command.
|
* command.
|
||||||
|
@ -1031,7 +1098,17 @@ enableDisguiseModelAngleLocking(playerCommand)
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
player waittill("disguisemodelanglelocking_requested");
|
player waittill("disguisemodelanglelocking_requested");
|
||||||
player.disguiseAnglesLocked = !player.disguiseAnglesLocked;
|
switch (player.disguiseAngleMode)
|
||||||
|
{
|
||||||
|
case 2: // currently locked, should unlock (to full as this is the easiest way out)
|
||||||
|
player.disguiseAngleMode = 0;
|
||||||
|
player IPrintLnBold("Rotation mode: ^2Full");
|
||||||
|
break;
|
||||||
|
default: // currently unlocked, should lock
|
||||||
|
player.disguiseAngleMode = 2;
|
||||||
|
player IPrintLnBold("Rotation mode: ^2Locked");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
// The below code is modified from the original at http://www.mpgh.net/forum/showthread.php?t=309318&p=4346157&viewfull=1#post4346157
|
||||||
|
|
||||||
|
roundFloat(floatValue, places)
|
||||||
|
{
|
||||||
|
expValue = exponent(10, places);
|
||||||
|
floatValue *= expValue;
|
||||||
|
floatValue += 0.5;
|
||||||
|
floatValue = int(floatValue);
|
||||||
|
floatValue /= expValue;
|
||||||
|
return floatValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
exponent(basev, exp)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
for(i = 0; i < exp; i++)
|
||||||
|
result *= basev;
|
||||||
|
return result;
|
||||||
|
}
|
Loading…
Reference in New Issue