diff --git a/Classic/scripts/CTFGame.cs b/Classic/scripts/CTFGame.cs
index 5677f3c..bf65472 100755
--- a/Classic/scripts/CTFGame.cs
+++ b/Classic/scripts/CTFGame.cs
@@ -2019,7 +2019,7 @@ function CTFGame::awardScoreKill(%game, %killerID)
function checkVehicleCamping( %team )
{
%position = $flagPos[%team];
- %radius = 15;
+ %radius = 5;
InitContainerRadiusSearch(%position, %radius, $TypeMasks::VehicleObjectType );
while ((%vehicle = containerSearchNext()) != 0)
diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs
index 640ee4b..0e8fb6e 100644
--- a/Classic/scripts/autoexec/TacoOverrides.cs
+++ b/Classic/scripts/autoexec/TacoOverrides.cs
@@ -323,17 +323,6 @@ function serverCmdScopeCommanderMap(%client, %scope)
%client.player.ccActive = %scope;
}
-//Mortar Throw Reload Fix
-// function ShapeBase::throwWeapon(%this)
-// {
-// if((%this.getMountedImage($WeaponSlot).getName() $= "MortarImage" || %this.getMountedImage($WeaponSlot).getName() $= "MissileLauncherImage" || %this.getMountedImage($WeaponSlot).getName() $= "ShockLanceImage") &&
-// (%this.getImageState($WeaponSlot) $= "Reload" || %this.getImageState($WeaponSlot) $= "Fire")){
-// return;
-// }
-
-// parent::throwWeapon(%this);
-// }
-
// Added object check
function VehicleData::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %theClient, %proj)
diff --git a/Classic/scripts/autoexec/z_dtStats.cs b/Classic/scripts/autoexec/z_dtStats.cs
index f6a03cf..a7e97cd 100644
--- a/Classic/scripts/autoexec/z_dtStats.cs
+++ b/Classic/scripts/autoexec/z_dtStats.cs
@@ -16,7 +16,7 @@
// Note See bottom of file for full log
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------Settings-----------
-$dtStats::version = 10.59;
+$dtStats::version = 10.60;
//disable stats system
$dtStats::Enable = $Host::dtStatsEnable $= "" ? ($Host::dtStatsEnable = 1) : $Host::dtStatsEnable;
if(!$dtStats::Enable){ return;}// so it disables with a restart
@@ -13981,8 +13981,10 @@ package dtBanSys{
//Reapply the gag
function GameConnection::onConnect( %client, %name, %raceGender, %skin, %voice, %voicePitch ){
+ if (banList_checkClient(%client, getField(%client.t2csri_authInfo, 3))){
+ return 0;
+ }
parent::onConnect( %client, %name, %raceGender, %skin, %voice, %voicePitch );
-
%client.isGagged = ($chatGagged[getClientCleanIP(%client)] || $chatGagged[%client.guid]); //restore status
}
@@ -13991,7 +13993,8 @@ package dtBanSys{
%time = (%time $= "") ? 100000 : %time;
%name = getClientBanName(%guid, %ipAddress);
%bareIP = getCleanIP(%ipAddress);
- if(!isObject($dtBanTemp::GUID[%guid]) && !isObject($dtBanTemp::GUID[%bareIP])){
+ //error("GUID" SPC %guid SPC "IP" SPC %bareIP);
+ if(!isObject($dtBanTemp::GUID[%guid]) && !isObject($dtBanTemp::IP[%bareIP])){
if(!isObject(dtBanList)){
new simGroup(dtBanList);
RootGroup.add(dtBanList);
@@ -14001,64 +14004,20 @@ package dtBanSys{
name = %name;
guid = %guid;
ip = %bareip;
- banDateTime = dtMarkDate();
+ banDateTime = dtMarkDate();
banLengthMin = %time;
};
dtBanList.add(%banObj);
- if(!%bareIP)
+ if(%bareIP !$= "0")
$dtBanTemp::IP[%bareIP] = %banObj;
if(%guid){
$dtBanTemp::GUID[%guid] = %banObj;
rmvWhiteListGuid(%guid);
}
}
- if(isObject($dtBanTemp::GUID[%guid]) && !isObject($dtBanTemp::GUID[%bareIP])){
- %obj = $dtBanTemp::GUID[%guid];
- %obj.ip = %bareIP;
- }
- else if(isObject($dtBanTemp::GUID[%bareIP]) && !isObject($dtBanTemp::GUID[%guid])){
- %obj = $dtBanTemp::GUID[%bareIP];
- %obj.guid = %guid;
- }
-
saveBanList();
}
- function banList_checkIP(%client){
- %ip = getClientCleanIP(%client);
- %obj = $dtBanTemp::IP[%ip];
- if(isObject(%obj) && %obj.banDateTime > 0){
- %delta = getTimeDelta(%obj.banDateTime);
- if (%delta < %obj.banLengthMin){
- pushFailJoin(%obj.name, %obj.gui, 0, "Kick/Ban" SPC %obj.banDateTime - %delta SPC "Minutes Left", 1);
- return 1;
- }
- else{
- unbanUserObj(%obj);
- }
- }
- return 0;
- }
-
- // from tribes next did not want to override this but need to pass %client id into ban check to avoid wierd issues
- function serverCmdt2csri_challengeResponse(%client, %serverChallenge){
- if (%client.doneAuthenticating)
- return;
-
- if (%client.t2csri_serverChallenge $= %serverChallenge){
- // check to see if the client is GUID banned, now that we verified their certificate
- if (banList_checkClientGUID(%client, getField(%client.t2csri_authInfo, 3))){
- return;
- }
-
- // client checks out... continue loading sequence
- %client.onConnect(%client.tname, %client.trgen, %client.tskin, %client.tvoic, %client.tvopi);
- }
- else{
- %client.setDisconnectReason("Invalid server challenge. Check your account key for corruption.");
- %client.delete();
- }
- }
};
function dtIsAdmin(%client,%guid){
@@ -14082,10 +14041,12 @@ function dtIsAdmin(%client,%guid){
return false;
}
-
-
-function banList_checkClientGUID(%client, %guid){// only one we care about in whitelist mode
- %obj = $dtBanTemp::GUID[%guid];
+function banList_checkClient(%client, %guid){// only one we care about in whitelist mode
+ //error("banlist check" SPC "client" SPC %client SPC "Guid" SPC %guid);
+ %objA = $dtBanTemp::GUID[%guid];
+ %ip = getClientCleanIP(%client);
+ %objB = $dtBanTemp::IP[%ip];
+ %obj = (isObject(%objA) == 1) ? %objA : %objB;
if (isObject(%obj) && %obj.banDateTime > 0){
%delta = getTimeDelta(%obj.banDateTime);
if (%delta < %obj.banLengthMin){
@@ -14099,30 +14060,31 @@ function banList_checkClientGUID(%client, %guid){// only one we care about in wh
unbanUserObj(%obj);
}
}
+ if(isObject(%objA)){
+ %realName = getField(%client.t2csri_authInfo, 0 );
+ if(%realName !$= "")
+ %name = trim(%realName);
+ else
+ %name = trim(stripChars( detag( getTaggedString( %fc.name ) ), "\cp\co\c6\c7\c8\c9\c0" ));
- %realName = getField(%client.t2csri_authInfo, 0 );
- if(%realName !$= "")
- %name = trim(%realName);
- else
- %name = trim(stripChars( detag( getTaggedString( %fc.name ) ), "\cp\co\c6\c7\c8\c9\c0" ));
+ %safe = ( dtIsAdmin(%client,%guid) || isObject($dtWhtList::WhiteList[%guid]));
+ if(!%safe){
+ pushFailJoin(%name, %guid, 0, "Not Whitelisted", 0);
+ if($dtServerVars::WhiteListMode){
+ %client.setDisconnectReason("Server is locked, please message admin or wait for approval");
+ %client.delete();
+ return 1;
+ }
+ }
- %safe = ( dtIsAdmin(%client,%guid) || isObject($dtWhtList::WhiteList[%guid]));
- if(!%safe){
- pushFailJoin(%name, %guid, 0, "Not Whitelisted", 0);
- if($dtServerVars::WhiteListMode){
- %client.setDisconnectReason("Server is locked, please message admin or wait for approval");
+ // this is here in case of banned ip is a whitelisted account
+ if($dtServerVars::IPBanListMode && $dtIPList[%ip] && !isObject($dtWhtList::WhiteList[%guid])){
+ pushFailJoin(%name, %client.guid, %ip, "IP Ban List", 2);
+ %client.setDisconnectReason("You are not allowed to play on this server.");
%client.delete();
return 1;
}
}
-
- %ip = getClientCleanIP(%client);// this is here in case of banned ip is a whitelisted account
- if($dtServerVars::IPBanListMode && $dtIPList[%ip] && !isObject($dtWhtList::WhiteList[%guid])){
- pushFailJoin(%name, %client.guid, %ip, "IP Ban List", 2);
- %client.setDisconnectReason("You are not allowed to play on this server.");
- %client.delete();
- return 1;
- }
return 0;
}
@@ -20571,16 +20533,17 @@ function mapCyleTest(){
// Added custom two team debrief as well as a evo style extended stats
// Reworked enable disable, only disables stats saving and stats access, do to systems relying on systems
//
-// 10.1 - 10.2 - 10.3
+// 10.1 - 10.2 - 10.3 - 10.6
// Ban system changes
// Fix bad loop in ban system
// Misc arena things
// Added LCTF Naming
// serverPrefs Support
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////Storage/////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
+// bansystem rework doto new tribes next changes
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
function testVarsRandomAll(%max){
%game = Game.class;
for(%q = 0; %q < $statsVars::count[%game]; %q++){
diff --git a/Classic/scripts/defaultGame.cs b/Classic/scripts/defaultGame.cs
index 46f4386..64609f6 100644
--- a/Classic/scripts/defaultGame.cs
+++ b/Classic/scripts/defaultGame.cs
@@ -459,9 +459,9 @@ function DefaultGame::createPlayer(%game, %client, %spawnLoc, %respawn)
if(%respawn)
{
%player.setInvincible(true);
- %player.setCloaked(true); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked //was //
+ //%player.setCloaked(true); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked
%player.setInvincibleMode($InvincibleTime,0.02);
- %player.respawnCloakThread = %player.schedule($InvincibleTime * 50, "setRespawnCloakOff"); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked //was 1000
+ //%player.respawnCloakThread = %player.schedule($InvincibleTime * 50, "setRespawnCloakOff"); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked //was 1000
%player.schedule($InvincibleTime * 1000, "setInvincible", false);
}
diff --git a/Classic/scripts/packs/cloakingpack.cs b/Classic/scripts/packs/cloakingpack.cs
index b21ae1c..5ed4048 100755
--- a/Classic/scripts/packs/cloakingpack.cs
+++ b/Classic/scripts/packs/cloakingpack.cs
@@ -34,7 +34,7 @@ datablock AudioDescription(CloakLooping3d)
is3D = true;
minDistance= 10.0;
- MaxDistance= 55.0; //Was 50
+ MaxDistance= 50.0;
type = $EffectAudioType;
environmentLevel = 1.0;
};
diff --git a/Classic/scripts/packs/sensorjammerpack.cs b/Classic/scripts/packs/sensorjammerpack.cs
index b7085ef..2ac0e64 100644
--- a/Classic/scripts/packs/sensorjammerpack.cs
+++ b/Classic/scripts/packs/sensorjammerpack.cs
@@ -64,7 +64,7 @@ datablock ItemData(SensorJammerPack)
};
-datablock SensorData(JammerSensorObjectPassive) //v2 was commented out...
+datablock SensorData(JammerSensorObjectPassive)
{
// same detection info as 'PlayerObject' sensorData
detects = true;
@@ -76,7 +76,7 @@ datablock SensorData(JammerSensorObjectPassive) //v2 was commented out...
detectFOVPercent = 1.3;
useObjectFOV = true;
- detectscloaked = 1; //v2
+ //detectscloaked = 1; //v2
jams = true;
jamsOnlyGroup = true;
@@ -96,52 +96,55 @@ datablock SensorData(JammerSensorObjectActive)
detectFOVPercent = 1.3;
useObjectFOV = true;
- detectscloaked = 1; //v2
+ //detectscloaked = 1; //v2
jams = true;
jamsOnlyGroup = true;
jamsUsingLOS = true;
- jamRadius = 45; //was 30
+ jamRadius = 30;
};
function SensorJammerPackImage::onMount(%data, %obj, %slot)
{
- setTargetSensorData(%obj.client.target, JammerSensorObjectPassive); //v2
- %obj.setImageTrigger(%slot, false);
- commandToClient( %obj.client, 'setSenJamIconOff' );
- %obj.setJammerFX(false);
+ setTargetSensorData(%obj.client.target, JammerSensorObjectPassive);
}
-function deactivateJammer(%data, %obj, %slot)
+function SensorJammerPackImage::onUnmount(%data, %obj, %slot)
{
- SensorJammerPackImage::onDeactivate(%data, %obj, %slot);
-}
-
-function SensorJammerPackImage::onUnmount(%data, %obj, %slot) //v2
-{
- %obj.setImageTrigger(%slot, false);
setTargetSensorData(%obj.client.target, PlayerSensor);
+ %obj.setImageTrigger(%slot, false);
}
function SensorJammerPackImage::onActivate(%data, %obj, %slot)
{
messageClient(%obj.client, 'MsgSensorJammerPackOn', '\c2Sensor jammer pack on.');
setTargetSensorData(%obj.client.target, JammerSensorObjectActive);
+ // z0dd - ZOD, 9/29/02. Removed T2 demo code from here
commandToClient( %obj.client, 'setSenJamIconOn' );
+
%obj.setJammerFX( true );
}
function SensorJammerPackImage::onDeactivate(%data, %obj, %slot)
{
messageClient(%obj.client, 'MsgSensorJammerPackOff', '\c2Sensor jammer pack off.');
- setTargetSensorData(%obj.client.target, PlayerSensor); //v2 H bug fix
%obj.setImageTrigger(%slot, false);
- setTargetSensorData(%obj.client.target, JammerSensorObjectPassive); //v2 was PlayerSensor
+
+ // ----------------------------------------------------------------------
+ // z0dd - ZOD, 4/25/02. This function is actually getting called AFTER
+ // ::onUnmount. We must check to see what the players current sensor data
+ // is, then if it is NOT PlayerSensor, set to passive jam, bug fix.
+ if(getTargetSensorData(%obj.client.target).getName() !$= "PlayerSensor")
+ setTargetSensorData(%obj.client.target, JammerSensorObjectPassive);
+ // ----------------------------------------------------------------------
+
+ // z0dd - ZOD, 9/29/02. Removed T2 demo code from here
commandToClient( %obj.client, 'setSenJamIconOff' );
+
%obj.setJammerFX( false );
}
-
-function SensorJammerPack::onPickup(%this, %obj, %shape, %amount)
-{
-//Nope
-}
+// z0dd - ZOD, 5/18/03. Removed functions, created parent. Streamline.
+//function SensorJammerPack::onPickup(%this, %obj, %shape, %amount)
+//{
+ // created to prevent console errors
+//}
diff --git a/Classic/scripts/player.cs b/Classic/scripts/player.cs
index 5139f30..d9558c1 100755
--- a/Classic/scripts/player.cs
+++ b/Classic/scripts/player.cs
@@ -1085,8 +1085,8 @@ datablock ParticleData(LightPuff)
textureName = "particleTest";
colors[0] = "0.46 0.36 0.26 0.4";
colors[1] = "0.46 0.46 0.36 0.0";
- sizes[0] = 0.8; //was 0.4
- sizes[1] = 1.4; //was 1.0
+ sizes[0] = 0.4;
+ sizes[1] = 1.0;
};
datablock ParticleEmitterData(LightPuffEmitter)
@@ -1123,9 +1123,9 @@ datablock ParticleData(LiftoffDust)
colors[0] = "0.46 0.36 0.26 0.0";
colors[1] = "0.46 0.46 0.36 0.4";
colors[2] = "0.46 0.46 0.36 0.0";
- sizes[0] = 0.6; //was 0.2
- sizes[1] = 1.0; //was 0.6
- sizes[2] = 1.4; //was 1.0
+ sizes[0] = 0.2;
+ sizes[1] = 0.6;
+ sizes[2] = 1.0;
times[0] = 0.0;
times[1] = 0.5;
times[2] = 1.0;
@@ -1765,7 +1765,7 @@ datablock PlayerData(HeavyMaleHumanArmor) : HeavyPlayerDamageProfile
//Value changed halfway between base and classic.
//Classic is 54, Base is 75
//Shield breaks right at two mine-disc
- energyPerDamagePoint = 60.0; // shield energy required to block one point of damage
+ energyPerDamagePoint = 54.0; // shield energy required to block one point of damage
rechargeRate = 0.256;
jetForce = 29.58 * 180;
diff --git a/Classic/scripts/vehicles/vehicle_tank.cs b/Classic/scripts/vehicles/vehicle_tank.cs
index 6cac286..55432e7 100755
--- a/Classic/scripts/vehicles/vehicle_tank.cs
+++ b/Classic/scripts/vehicles/vehicle_tank.cs
@@ -235,7 +235,7 @@ datablock HoverVehicleData(AssaultVehicle) : TankDamageProfile
isShielded = true;
rechargeRate = 1.0;
- energyPerDamagePoint = 142; //was 135
+ energyPerDamagePoint = 135;
maxEnergy = 400;
minJetEnergy = 15;
jetEnergyDrain = 2.0;
diff --git a/Classic/scripts/weapons/flashGrenade.cs b/Classic/scripts/weapons/flashGrenade.cs
index 7bb3eda..7241668 100755
--- a/Classic/scripts/weapons/flashGrenade.cs
+++ b/Classic/scripts/weapons/flashGrenade.cs
@@ -37,7 +37,7 @@ datablock ItemData(FlashGrenadeThrown)
radiusDamageType = $DamageType::Grenade;
kickBackStrength = 1000;
computeCRC = true;
- maxWhiteout = 0.78; // z0dd - ZOD, 9/8/02. Was 1.2 //Reduced. Was 0.9 Choco
+ maxWhiteout = 0.9; // z0dd - ZOD, 9/8/02. Was 1.2
};
datablock ItemData(FlashGrenade)
diff --git a/Classic/scripts/weapons/missileLauncher.cs b/Classic/scripts/weapons/missileLauncher.cs
index abaec08..65063fe 100644
--- a/Classic/scripts/weapons/missileLauncher.cs
+++ b/Classic/scripts/weapons/missileLauncher.cs
@@ -2,6 +2,37 @@
// Missile launcher
//--------------------------------------
+//--------------------------------------------------------------------------
+// Force-Feedback Effects
+//--------------------------------------
+datablock EffectProfile(MissileSwitchEffect)
+{
+ effectname = "weapons/missile_launcher_activate";
+ minDistance = 2.5;
+ maxDistance = 2.5;
+};
+
+datablock EffectProfile(MissileFireEffect)
+{
+ effectname = "weapons/missile_fire";
+ minDistance = 2.5;
+ maxDistance = 5.0;
+};
+
+datablock EffectProfile(MissileDryFireEffect)
+{
+ effectname = "weapons/missile_launcher_dryfire";
+ minDistance = 2.5;
+ maxDistance = 2.5;
+};
+
+datablock EffectProfile(MissileExplosionEffect)
+{
+ effectname = "explosions/explosion.xpl23";
+ minDistance = 10;
+ maxDistance = 30;
+};
+
//--------------------------------------------------------------------------
// Sounds
//--------------------------------------
@@ -10,6 +41,7 @@ datablock AudioProfile(MissileSwitchSound)
filename = "fx/weapons/missile_launcher_activate.wav";
description = AudioClosest3d;
preload = true;
+ effect = MissileSwitchEffect;
};
datablock AudioProfile(MissileFireSound)
@@ -17,6 +49,7 @@ datablock AudioProfile(MissileFireSound)
filename = "fx/weapons/missile_fire.WAV";
description = AudioDefault3d;
preload = true;
+ effect = MissileFireEffect;
};
datablock AudioProfile(MissileProjectileSound)
@@ -45,6 +78,7 @@ datablock AudioProfile(MissileExplosionSound)
filename = "fx/explosions/explosion.xpl23.wav";
description = AudioBIGExplosion3d;
preload = true;
+ effect = MissileExplosionEffect;
};
datablock AudioProfile(MissileDryFireSound)
@@ -52,6 +86,7 @@ datablock AudioProfile(MissileDryFireSound)
filename = "fx/weapons/missile_launcher_dryfire.wav";
description = AudioClose3d;
preload = true;
+ effect = MissileDryFireEffect;
};
@@ -727,9 +762,9 @@ datablock ShapeBaseImageData(MissileLauncherImage)
stateSequence[0] = "Activate";
stateSound[0] = MissileSwitchSound;
- stateName[1] = "ActivateReady";
- stateTransitionOnAmmo[1] = "Ready";
- stateTransitionOnNoAmmo[1] = "FirstLoad";
+ stateName[1] = "ActivateReady";
+ stateTransitionOnLoaded[1] = "Ready";
+ stateTransitionOnNoAmmo[1] = "NoAmmo";
stateName[2] = "Ready";
stateTransitionOnNoAmmo[2] = "NoAmmo";
@@ -792,9 +827,6 @@ datablock ShapeBaseImageData(MissileLauncherImage)
stateSequence[10] = "Fire";
stateScript[10] = "onDumbFire";
stateSound[10] = MissileFireSound;
-
- stateName[11] = "FirstLoad";
- stateTransitionOnAmmo[11] = "Ready";
};
function MissileLauncherImage::onDumbFire(%data,%obj,%slot)
@@ -815,42 +847,3 @@ function MissileLauncherImage::onDumbFire(%data,%obj,%slot)
%obj.decInventory(%data.ammo, 1);
return %p;
}
-function MissileLauncherImage::onUnmount(%this,%obj,%slot){
- parent::onUnmount(%this,%obj,%slot);
- if(isEventPending(%obj.reloadDelaySch))
- cancel(%obj.reloadDelaySch);
-}
-function MissileLauncherImage::onMount(%this,%obj,%slot){
-
- if(%obj.getClassName() !$= "Player")
- return;
-
- if (%this.armthread $= "")
- %obj.setArmThread(look);
- else
- %obj.setArmThread(%this.armThread);
-
- if(%obj.getMountedImage($WeaponSlot).ammo !$= ""){
- if (%obj.getInventory(%this.ammo)){
-
- %fireAndReloadTime = mFloor((%this.stateTimeoutValue[4] + %this.stateTimeoutValue[3]) * 1000);
-
- if(%obj.lfireTime[%this.getName()] && (getSimTime() - %obj.lfireTime[%this.getName()]) < %fireAndReloadTime){
- if(isEventPending(%obj.reloadDelaySch)){
- cancel(%obj.reloadDelaySch);
- }
- %time = mFloor(%fireAndReloadTime - (getSimTime() - %obj.lfireTime[%this.getName()]));
- %obj.reloadDelaySch = schedule(%time, 0, "ammoStateDelay", %obj, %slot, true);
- }
- else{
- %obj.setImageAmmo(%slot,true);
- }
- }
- }
-
- %obj.client.setWeaponsHudActive(%this.item);
- if(%obj.getMountedImage($WeaponSlot).ammo !$= "")
- %obj.client.setAmmoHudCount(%obj.getInventory(%this.ammo));
- else
- %obj.client.setAmmoHudCount(-1);
-}
\ No newline at end of file
diff --git a/Classic/scripts/weapons/mortar.cs b/Classic/scripts/weapons/mortar.cs
index 876ee09..4d33872 100644
--- a/Classic/scripts/weapons/mortar.cs
+++ b/Classic/scripts/weapons/mortar.cs
@@ -2,6 +2,44 @@
// Mortar
//--------------------------------------
+//--------------------------------------------------------------------------
+// Force-Feedback Effects
+//--------------------------------------
+datablock EffectProfile(MortarSwitchEffect)
+{
+ effectname = "weapons/mortar_activate";
+ minDistance = 2.5;
+ maxDistance = 2.5;
+};
+
+datablock EffectProfile(MortarFireEffect)
+{
+ effectname = "weapons/mortar_fire";
+ minDistance = 2.5;
+ maxDistance = 5.0;
+};
+
+datablock EffectProfile(MortarReloadEffect)
+{
+ effectname = "weapons/mortar_reload";
+ minDistance = 2.5;
+ maxDistance = 2.5;
+};
+
+datablock EffectProfile(MortarDryFireEffect)
+{
+ effectname = "weapons/mortar_dryfire";
+ minDistance = 2.5;
+ maxDistance = 2.5;
+};
+
+datablock EffectProfile(MortarExplosionEffect)
+{
+ effectname = "explosions/explosion.xpl03";
+ minDistance = 30;
+ maxDistance = 65;
+};
+
//--------------------------------------------------------------------------
// Sounds
//--------------------------------------
@@ -10,6 +48,7 @@ datablock AudioProfile(MortarSwitchSound)
filename = "fx/weapons/mortar_activate.wav";
description = AudioClosest3d;
preload = true;
+ effect = MortarSwitchEffect;
};
datablock AudioProfile(MortarReloadSound)
@@ -17,6 +56,7 @@ datablock AudioProfile(MortarReloadSound)
filename = "fx/weapons/mortar_reload.wav";
description = AudioClosest3d;
preload = true;
+ effect = MortarReloadEffect;
};
datablock AudioProfile(MortarIdleSound)
@@ -25,6 +65,7 @@ datablock AudioProfile(MortarIdleSound)
filename = "fx/weapons/plasma_rifle_idle.wav";
description = ClosestLooping3d;
preload = true;
+ effect = PlasmaIdleEffect;
};
datablock AudioProfile(MortarFireSound)
@@ -32,6 +73,7 @@ datablock AudioProfile(MortarFireSound)
filename = "fx/weapons/mortar_fire.wav";
description = AudioDefault3d;
preload = true;
+ effect = MortarFireEffect;
};
datablock AudioProfile(MortarProjectileSound)
@@ -46,6 +88,7 @@ datablock AudioProfile(MortarExplosionSound)
filename = "fx/weapons/mortar_explode.wav";
description = AudioBIGExplosion3d;
preload = true;
+ effect = MortarExplosionEffect;
};
datablock AudioProfile(UnderwaterMortarExplosionSound)
@@ -53,6 +96,7 @@ datablock AudioProfile(UnderwaterMortarExplosionSound)
filename = "fx/weapons/mortar_explode_UW.wav";
description = AudioBIGExplosion3d;
preload = true;
+ effect = MortarExplosionEffect;
};
datablock AudioProfile(MortarDryFireSound)
@@ -60,6 +104,7 @@ datablock AudioProfile(MortarDryFireSound)
filename = "fx/weapons/mortar_dryfire.wav";
description = AudioClose3d;
preload = true;
+ effect = MortarDryFireEffect;
};
//----------------------------------------------------------------------------
@@ -740,8 +785,8 @@ datablock ShapeBaseImageData(MortarImage)
stateSound[0] = MortarSwitchSound;
stateName[1] = "ActivateReady";
- stateTransitionOnAmmo[1] = "Ready";
- stateTransitionOnNoAmmo[1] = "FirstLoad";
+ stateTransitionOnLoaded[1] = "Ready";
+ stateTransitionOnNoAmmo[1] = "NoAmmo";
stateName[2] = "Ready";
stateTransitionOnNoAmmo[2] = "NoAmmo";
@@ -775,50 +820,4 @@ datablock ShapeBaseImageData(MortarImage)
stateSound[6] = MortarDryFireSound;
stateTimeoutValue[6] = 1.5;
stateTransitionOnTimeout[6] = "NoAmmo";
-
- stateName[7] = "FirstLoad";
- stateTransitionOnAmmo[7] = "Ready";
};
-
-function MortarImage::onUnmount(%this,%obj,%slot){
- parent::onUnmount(%this,%obj,%slot);
- if(isEventPending(%obj.reloadDelaySch))
- cancel(%obj.reloadDelaySch);
-}
-function MortarImage::onMount(%this,%obj,%slot){
-
- if(%obj.getClassName() !$= "Player")
- return;
-
- if (%this.armthread $= "")
- %obj.setArmThread(look);
- else
- %obj.setArmThread(%this.armThread);
-
- if(%obj.getMountedImage($WeaponSlot).ammo !$= ""){
- if (%obj.getInventory(%this.ammo)){
- %fireAndReloadTime = mFloor((%this.stateTimeoutValue[4] + %this.stateTimeoutValue[3]) * 1000);
- if(%obj.lfireTime[%this.getName()] && (getSimTime() - %obj.lfireTime[%this.getName()]) < %fireAndReloadTime){
- if(isEventPending(%obj.reloadDelaySch)){
- cancel(%obj.reloadDelaySch);
- }
- %time = mFloor(%fireAndReloadTime - (getSimTime() - %obj.lfireTime[%this.getName()]));
- %obj.reloadDelaySch = schedule(%time, 0, "ammoStateDelay", %obj, %slot, true);
- }
- else{
- %obj.setImageAmmo(%slot,true);
- }
- }
- }
-
- %obj.client.setWeaponsHudActive(%this.item);
- if(%obj.getMountedImage($WeaponSlot).ammo !$= "")
- %obj.client.setAmmoHudCount(%obj.getInventory(%this.ammo));
- else
- %obj.client.setAmmoHudCount(-1);
-}
-
-function ammoStateDelay(%obj, %slot, %state){
- if(isObject(%obj) && %obj.getState() !$= "Dead")
- %obj.setImageAmmo(%slot, %state);
-}
\ No newline at end of file
diff --git a/README.md b/README.md
index 568c238..1a83266 100644
--- a/README.md
+++ b/README.md
@@ -45,19 +45,20 @@ Discord: [Tribes 2 Discord](https://playt2.com/discord)
---
### Important Gameplay Changes over stock classic
- - OG blaster buffed for Heavy Armors
- - No Vehicle Zone around flag is bigger 5 >> 15
- - Heavy Shield Nerfed (54 to block 1 DMG, is now 60)
+ - OG blaster buffed against Heavy Armors (Not Tournament Mode Only)
- Max FOV 120 >> 138 (For Wide Screens)
- - Item respawn time can be changed (default 30)
- - Cloak Sound 50m >> 55m
- - Bigger ground dust puffs (For cloak) 0.4 larger
- - Sensor Jammer jam radius is buffed to jam cloaks 30 >> 45
- - Sensor Jammer can passively see cloaker's triangle
- - Mortor reload rework (Player can throw, but must wait until reload time has passed)
- - Tank Shield Nerf (135 to block 1 DMG, is now 142)
- - Whiteout grenades are less seizurely (Due to spamming) 0.9 >> 0.78
- - All water viscosity follows a global preset
+ - Item respawn time can be changed (Optional)
+ - All water viscosity follows a global preset (3)
+ - No Vehicle Zone around flag is bigger 5 >> 15
+ - Heavy Shield Nerfed (54 to block 1 DMG, is now 60)
+ - Cloak Sound 50m >> 55m
+ - Bigger ground dust puffs (For cloak) 0.4 larger
+ - Sensor Jammer jam radius is buffed to jam cloaks 30 >> 45
+ - Sensor Jammer can passively see cloaker's triangle
+ - Mortor reload rework (Player can throw, but must wait until reload time has passed)
+ - Tank Shield Nerf (135 to block 1 DMG, is now 142)
+ - Whiteout grenades are less seizurely (Due to spamming) 0.9 >> 0.78
+ - Spawn fade-in effect
---