From 965e3cdc58fa6fa35cc70e33f193e4ca71dd55b1 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 31 Mar 2021 11:25:20 -0400 Subject: [PATCH 01/18] Update --- Classic/scripts/autoexec/zzDiscordBot.cs | 79 +++++++++++++++++++----- 1 file changed, 63 insertions(+), 16 deletions(-) diff --git a/Classic/scripts/autoexec/zzDiscordBot.cs b/Classic/scripts/autoexec/zzDiscordBot.cs index 73fae99..d94c094 100644 --- a/Classic/scripts/autoexec/zzDiscordBot.cs +++ b/Classic/scripts/autoexec/zzDiscordBot.cs @@ -4,13 +4,16 @@ //exec("scripts/autoexec/zzDiscordBot.cs"); -$discordBot::AuthKey[0] = ""; -$discordBot::IP[0] = ""; +//note first channel is for monitoring +$discordBot::discordCHID = ""; +$discordBot::IP = ""; $discordBot::reconnectTimeout = 3 * 60000; -$discordBot::AuthSet = 0; $discordBot::autoStart = 1; - - +//used on the bot to help split thigns up +$discordBot::cmdSplit = "%cmd%"; +//These correspond with $discordBot::discordCHID +$discordBot::monitorChannel = 1; +$discordBot::serverFeed = 2; package discordPackage { @@ -40,7 +43,7 @@ function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8 %message = strreplace(%message,"%7",getTaggedString(%a7)); %message = strreplace(%message,"%8",getTaggedString(%a8)); %message = stripChars(%message, "\cp\co\c0\c6\c7\c8\c9"); - sendToDiscord(%message,2); + sendToDiscordEmote(%message, $discordBot::serverFeed); } } @@ -104,7 +107,7 @@ function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6) if(%msg !$= "") { %msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9"); - sendToDiscord(%msg, 2); + sendToDiscordEmote(%msg, $discordBot::serverFeed); } } @@ -183,11 +186,11 @@ function dtEventLog(%log, %save) { parent::dtEventLog(%log, %save); if(discord.lastState $= "Connected") - sendToDiscord(%log, 1); + sendToDiscord(%log, $discordBot::monitorChannel); } function LogMessage(%client, %msg, %cat){ if(discord.lastState $= "Connected") - sendToDiscord("Message" SPC %client.nameBase SPC %msg, 1); + sendToDiscord("Message" SPC %client.nameBase SPC %msg, $discordBot::monitorChannel); parent::LogMessage(%client, %msg, %cat); } @@ -202,11 +205,20 @@ function sendToDiscord(%msg,%channel) { if(discord.lastState $= "Connected") { - discord.send("MSG" SPC (%channel-1) SPC %msg @ "\r\n"); + discord.send("MSG" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); + } + } +} +function sendToDiscordEmote(%msg,%channel)//emote filter will be applyed used in server feed +{ + if(isObject(discord) && %msg !$= "") + { + if(discord.lastState $= "Connected") + { + discord.send("MSGE" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); } } } - function discordCon(){ if(discord.lastState !$= "Connected"){ if(isEventPending($discordBot::reconnectEvent)) @@ -215,7 +227,7 @@ function discordCon(){ discord.delete(); new TCPObject(discord); discord.lastState = "Connecting"; - discord.connect($discordBot::IP[$discordBot::AuthSet]); + discord.connect($discordBot::IP); } } function discordKill(){ @@ -246,7 +258,7 @@ function discord::onDNSResolved(%this){ function discord::onConnected(%this){ %this.lastState = "Connected"; error(%this.lastState); - discord.send("AUTH" SPC $discordBot::AuthKey[$discordBot::AuthSet] @ "\r\n"); + discord.send("AUTH" @ $discordBot::cmdSplit @ $discordBot::discordCHID @ $discordBot::cmdSplit @ $Host::GameName @ "\r\n"); } function discord::onDisconnect(%this){ @@ -265,9 +277,44 @@ function discord::onLine(%this, %line){ //case "Discord": //messageAll( 'MsgDiscord', '\c3Discord: \c4%1 %2',getWord(%lineStrip,1),getWords(%lineStrip,2,getWordCount(%lineStrip) -1)); case "PING": - discord.send("PONG" @ "\r\n"); - case "PINGX": - discord.send("PINGY" @ "\r\n"); + discord.send("PONG" @ $discordBot::cmdSplit @ "\r\n"); + case "PINGAVG": + %min = 10000; + %max = -10000; + for(%i = 0; %i < ClientGroup.getCount(); %i++){ + %cl = ClientGroup.getObject(%i); + %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); + %min = (%ping < %min) ? %ping : %min; + %max = (%ping > %max) ? %ping : %max; + if(%ping < 250){ + %lowCount++; + %lowPing += %ping; + } + %pc++; + %pingT += %ping; + } + %lowCount = %lowPing = (%lowCount == 0) ? 1 : %lowCount; + if(!%pc){ + sendToDiscord("Ping AVG:" @ 0 SPC "Low Avg:" @ 0 SPC "Min:" @ 0 SPC "Max:" @ 0, $discordBot::monitorChannel); + } + else{ + %avg = mFloor(%pingT/%pc); + %lavg = mFloor(%lowPing/%lowCount); + sendToDiscord("Ping AVG:" @ %avg SPC "Low Avg:" @ %lavg SPC "Min:" @ %min SPC "Max:" @ %max, $discordBot::monitorChannel); + } + case "PINGLIST": + if(isObject(discord) && discord.lastState $= "Connected"){ + %channel = 1; + if(ClientGroup.getCount() > 0){ + for(%i = 0; %i < ClientGroup.getCount(); %i++){ + %cl = ClientGroup.getObject(%i); + %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); + %msg = %cl.namebase @ "-" @ %ping @ "-" @ %i; + discord.schedule(%i*32,"send","MSGSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); + } + discord.schedule((%i+1)*32,"send","PROCSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ "MessageEmbed" @ "\r\n"); + } + } default: error("Bad Command" SPC %line); } From 74eca1008c24e207a9a53c2a1323ee3697665c04 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 31 Mar 2021 12:25:01 -0400 Subject: [PATCH 02/18] Fixes --- Classic/scripts/autoexec/zzDiscordBot.cs | 149 ++++++++++++----------- 1 file changed, 77 insertions(+), 72 deletions(-) diff --git a/Classic/scripts/autoexec/zzDiscordBot.cs b/Classic/scripts/autoexec/zzDiscordBot.cs index d94c094..a8f758d 100644 --- a/Classic/scripts/autoexec/zzDiscordBot.cs +++ b/Classic/scripts/autoexec/zzDiscordBot.cs @@ -11,6 +11,7 @@ $discordBot::reconnectTimeout = 3 * 60000; $discordBot::autoStart = 1; //used on the bot to help split thigns up $discordBot::cmdSplit = "%cmd%"; +$discordBot::cmdSubSplit = "%tab%"; //These correspond with $discordBot::discordCHID $discordBot::monitorChannel = 1; $discordBot::serverFeed = 2; @@ -28,11 +29,12 @@ package discordPackage function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) { parent::messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); - %type = getTaggedString(%msgType); + %type = getTaggedString(%msgType); switch$(%type) { case "msgExplosionKill" or "msgSuicide" or "msgVehicleSpawnKill" or "msgVehicleCrash" or "msgVehicleKill" or "msgTurretSelfKill" or "msgTurretSelfKill" or "msgCTurretKill" or "msgTurretKill" or - "msgSelfKill" or "msgOOBKill" or "msgCampKill" or "msgTeamKill" or "msgLavaKill" or "msgLightningKill" or "MsgRogueMineKill" or "MsgHeadshotKill" or "MsgRearshotKill" or "MsgLegitKill": + "msgSelfKill" or "msgOOBKill" or "msgCampKill" or "msgTeamKill" or "msgLavaKill" or "msgLightningKill" or "MsgRogueMineKill" or "MsgHeadshotKill" or "MsgRearshotKill" or "MsgLegitKill" or + "MsgClientJoin" or "MsgClientDrop": %message = getTaggedString(%msgString); %message = strreplace(%message,"%1",getTaggedString(%a1)); %message = strreplace(%message,"%2",getTaggedString(%a2)); @@ -44,73 +46,12 @@ function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8 %message = strreplace(%message,"%8",getTaggedString(%a8)); %message = stripChars(%message, "\cp\co\c0\c6\c7\c8\c9"); sendToDiscordEmote(%message, $discordBot::serverFeed); - } + } + if($missionName !$= $discordBot::cm && ClientGroup.getCount() > 2){ + sendToDiscordEmote("The mission changed to" SPC $missionName, $discordBot::serverFeed); + $discordBot::cm = $missionName; + } } - -function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6) -{ - //echo(%type SPC %var1 SPC %var2 SPC %var3 SPC %var4 SPC %var5 SPC %var6); - - switch$ (%type) - { - case "flagCap": - %game = %var1; - %player = %var2; - %flag = %player.holdingFlag; - %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); - %msg = getTaggedString(%player.client.name) SPC "captured the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; - case "touchEnemyFlag": - %game = %var1; - %player = %var2; - %flag = %var3; - if(!%player.flagTossWait) - { - %grabspeed = mFloor(VectorLen(setWord(%player.getVelocity(), 2, 0)) * 3.6); - if(%flag.isHome) - %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Speed:" SPC %grabspeed @ "Kph)"; - else if(!%flag.isHome) - %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag in the field. (Speed:" SPC %grabspeed @ "Kph)"; - } - case "droppedFlag": - %game = %var1; - %player = %var2; - %flag = %player.holdingFlag; - %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); - %msg = getTaggedString(%player.client.name) SPC "dropped the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; - case "flagReturn": - %game = %var1; - %flag = %var2; - %player = %var3; - if(%player !$= "") - %msg = getTaggedString(%player.client.name) SPC "returned the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag."; - else - %msg = "The" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag was returned to base."; - case "lakTouchFlag": - %game = %var1; - %player = %var2; - %flag = %var3; - if(!%player.client.flagDeny && %player.getState() !$= "Dead" && PlayingPlayers() > 1) - %msg = getTaggedString(%player.client.name) SPC "has taken the flag."; - case "lakMApoints": - %sourceObject = %var1; - %points = %var2; - if(%points == 1) - %s = "s"; - %hitType = %var3; - %weapon = %var4; - %distance = %var5; - %vel = %var6; - if(%points) - %msg = getTaggedString(%sourceObject.client.name) SPC "receives" SPC %points @ %s SPC "points! [" @ %hitType SPC %weapon @ "] [Distance:" SPC %distance @ "] [Speed:" SPC %vel @ "]"; - } - - if(%msg !$= "") - { - %msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9"); - sendToDiscordEmote(%msg, $discordBot::serverFeed); - } -} - function CTFGame::flagCap(%game, %player) { if(discord.lastState $= "Connected") @@ -198,7 +139,70 @@ function LogMessage(%client, %msg, %cat){ if(!isActivePackage(discordPackage)) activatePackage(discordPackage); - + +function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6) +{ + //echo(%type SPC %var1 SPC %var2 SPC %var3 SPC %var4 SPC %var5 SPC %var6); + + switch$ (%type) + { + case "flagCap": + %game = %var1; + %player = %var2; + %flag = %player.holdingFlag; + %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); + %msg = getTaggedString(%player.client.name) SPC "captured the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; + case "touchEnemyFlag": + %game = %var1; + %player = %var2; + %flag = %var3; + if(!%player.flagTossWait) + { + %grabspeed = mFloor(VectorLen(setWord(%player.getVelocity(), 2, 0)) * 3.6); + if(%flag.isHome) + %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Speed:" SPC %grabspeed @ "Kph)"; + else if(!%flag.isHome) + %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag in the field. (Speed:" SPC %grabspeed @ "Kph)"; + } + case "droppedFlag": + %game = %var1; + %player = %var2; + %flag = %player.holdingFlag; + %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); + %msg = getTaggedString(%player.client.name) SPC "dropped the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; + case "flagReturn": + %game = %var1; + %flag = %var2; + %player = %var3; + if(%player !$= "") + %msg = getTaggedString(%player.client.name) SPC "returned the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag."; + else + %msg = "The" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag was returned to base."; + case "lakTouchFlag": + %game = %var1; + %player = %var2; + %flag = %var3; + if(!%player.client.flagDeny && %player.getState() !$= "Dead" && PlayingPlayers() > 1) + %msg = getTaggedString(%player.client.name) SPC "has taken the flag."; + case "lakMApoints": + %sourceObject = %var1; + %points = %var2; + if(%points == 1) + %s = "s"; + %hitType = %var3; + %weapon = %var4; + %distance = %var5; + %vel = %var6; + if(%points) + %msg = getTaggedString(%sourceObject.client.name) SPC "receives" SPC %points @ %s SPC "points! [" @ %hitType SPC %weapon @ "] [Distance:" SPC %distance @ "] [Speed:" SPC %vel @ "]"; + } + + if(%msg !$= "") + { + %msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9"); + sendToDiscordEmote(%msg, $discordBot::serverFeed); + } +} function sendToDiscord(%msg,%channel) { if(isObject(discord) && %msg !$= "") @@ -281,6 +285,7 @@ function discord::onLine(%this, %line){ case "PINGAVG": %min = 10000; %max = -10000; + %lowCount = %lowPing = 0; for(%i = 0; %i < ClientGroup.getCount(); %i++){ %cl = ClientGroup.getObject(%i); %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); @@ -293,7 +298,7 @@ function discord::onLine(%this, %line){ %pc++; %pingT += %ping; } - %lowCount = %lowPing = (%lowCount == 0) ? 1 : %lowCount; + %lowCount = (%lowCount == 0) ? 1 : %lowCount; if(!%pc){ sendToDiscord("Ping AVG:" @ 0 SPC "Low Avg:" @ 0 SPC "Min:" @ 0 SPC "Max:" @ 0, $discordBot::monitorChannel); } @@ -309,10 +314,10 @@ function discord::onLine(%this, %line){ for(%i = 0; %i < ClientGroup.getCount(); %i++){ %cl = ClientGroup.getObject(%i); %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); - %msg = %cl.namebase @ "-" @ %ping @ "-" @ %i; + %msg = %cl.namebase @ $discordBot::cmdSubSplit @ %ping @ $discordBot::cmdSubSplit @ %i; discord.schedule(%i*32,"send","MSGSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); } - discord.schedule((%i+1)*32,"send","PROCSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ "MessageEmbed" @ "\r\n"); + discord.schedule((%i+1)*32,"send","PROCSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ "msgList" @ "\r\n"); } } default: From 4595b648146d1314613a1a1d1b05b736c553bb3d Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Thu, 1 Apr 2021 06:37:22 -0400 Subject: [PATCH 03/18] Update defaultGame.cs --- Classic/scripts/defaultGame.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Classic/scripts/defaultGame.cs b/Classic/scripts/defaultGame.cs index dd738cf..c728f41 100644 --- a/Classic/scripts/defaultGame.cs +++ b/Classic/scripts/defaultGame.cs @@ -1833,7 +1833,8 @@ function DefaultGame::clientMissionDropReady(%game, %client) if(isEventPending(%client.okschedule)) cancel(%client.okschedule); - %time = ($Host::KickObserverTimeout) + ($Host::KickObserverTimeout/2); + %time = $Host::KickObserverTimeout; + //%time = ($Host::KickObserverTimeout) + ($Host::KickObserverTimeout/2); //%minutes = %time / 60; //messageClient(%client, 'MsgNoObservers', '\c2You have %1 minutes to join the game or you will be kicked.', %minutes); From f72e3dcfd1b8f0eeac9fda83566ac9ac83801fb8 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Thu, 1 Apr 2021 06:44:53 -0400 Subject: [PATCH 04/18] Update zzDiscordBot.cs --- Classic/scripts/autoexec/zzDiscordBot.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classic/scripts/autoexec/zzDiscordBot.cs b/Classic/scripts/autoexec/zzDiscordBot.cs index a8f758d..6bcb4c6 100644 --- a/Classic/scripts/autoexec/zzDiscordBot.cs +++ b/Classic/scripts/autoexec/zzDiscordBot.cs @@ -8,7 +8,7 @@ $discordBot::discordCHID = ""; $discordBot::IP = ""; $discordBot::reconnectTimeout = 3 * 60000; -$discordBot::autoStart = 1; +$discordBot::autoStart = 0; //used on the bot to help split thigns up $discordBot::cmdSplit = "%cmd%"; $discordBot::cmdSubSplit = "%tab%"; From edad1298365f3ce2ff7c29fd5a0a6e86a55d26b8 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Fri, 2 Apr 2021 17:46:37 -0400 Subject: [PATCH 05/18] Update Autobalance.cs --- Classic/scripts/autoexec/Autobalance.cs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Classic/scripts/autoexec/Autobalance.cs b/Classic/scripts/autoexec/Autobalance.cs index 44027f9..1d05c35 100644 --- a/Classic/scripts/autoexec/Autobalance.cs +++ b/Classic/scripts/autoexec/Autobalance.cs @@ -61,9 +61,6 @@ function Autobalance( %game ) //Select lower half of team rank as canidates for team change if(!$Autobalance::UseAllMode) { - //Reset clients canidate var - ResetABClients(); - $Autobalance::Max = mFloor($TeamRank[$BigTeam, count]/2); for(%i = $Autobalance::Max; %i < $TeamRank[$BigTeam, count]; %i++) { @@ -127,14 +124,17 @@ function DefaultGame::gameOver(%game) { Parent::gameOver(%game); - //Reset Autobalance - $BigTeam = ""; - - //Reset all clients canidate var - for (%i = 0; %i < ClientGroup.getCount(); %i++) + if($CurrentMissionType $= "CTF" || $CurrentMissionType $= "SCtF") { - %client = ClientGroup.getObject(%i); - %client.abCanidate = false; + //Reset Autobalance + $BigTeam = ""; + + //Reset all clients canidate var + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %client = ClientGroup.getObject(%i); + %client.abCanidate = false; + } } } From 9498ab20bc71b9ed53abff4153aafcd090391db5 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 7 Apr 2021 14:45:12 -0400 Subject: [PATCH 06/18] Add Conc.cs (From Base) --- Classic/scripts/weapons/concussionGrenade.cs | 208 +++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 Classic/scripts/weapons/concussionGrenade.cs diff --git a/Classic/scripts/weapons/concussionGrenade.cs b/Classic/scripts/weapons/concussionGrenade.cs new file mode 100644 index 0000000..bd6e107 --- /dev/null +++ b/Classic/scripts/weapons/concussionGrenade.cs @@ -0,0 +1,208 @@ +// grenade (thrown by hand) script +// ------------------------------------------------------------------------ + +datablock EffectProfile(ConcussionGrenadeThrowEffect) +{ + effectname = "weapons/grenade_throw"; + minDistance = 2.5; + maxDistance = 2.5; +}; + +datablock EffectProfile(ConcussionGrenadeSwitchEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 2.5; + maxDistance = 2.5; +}; + +datablock EffectProfile(ConcussionGrenadeExplosionEffect) +{ + effectname = "explosions/grenade_explode"; + minDistance = 10; + maxDistance = 50; +}; + +datablock AudioProfile(ConcussionGrenadeExplosionSound) +{ + filename = "fx/weapons/grenade_explode.wav"; + description = AudioExplosion3d; + preload = true; + effect = ConcussionGrenadeExplosionEffect; +}; + +// ------------------------------------------------------ +// z0dd - ZOD, 5/8/02. Duplicate datablock, waste of mem. +//datablock AudioProfile(ConcussionGrenadeExplosionSound) +//{ +// filename = "fx/weapons/grenade_explode.wav"; +// description = AudioExplosion3d; +// preload = true; +// effect = ConcussionGrenadeExplosionEffect; +//}; +// ------------------------------------------------------ + +//-------------------------------------------------------------------------- +// Sparks +//-------------------------------------------------------------------------- +datablock ParticleData(ConcussionGrenadeSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/bigSpark"; + colors[0] = "0.56 0.36 1.0 1.0"; + colors[1] = "0.56 0.36 1.0 1.0"; + colors[2] = "1.0 0.36 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.25; + sizes[2] = 0.25; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(ConcussionGrenadeSparkEmitter) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 6.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "ConcussionGrenadeSparks"; +}; + +datablock ParticleData( ConcussionGrenadeCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + colors[0] = "0.8 0.8 1.0 1.00"; + colors[1] = "0.8 0.5 1.0 0.20"; + colors[2] = "0.2 0.8 1.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 4.0; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( ConcussionGrenadeCrescentEmitter ) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 10.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "ConcussionGrenadeCrescentParticle"; +}; + +//-------------------------------------------------------------------------- +// Shockwave +//-------------------------------------------------------------------------- +datablock ShockwaveData(ConcussionGrenadeShockwave) +{ + width = 4.0; + numSegments = 20; + numVertSegments = 2; + velocity = 5; + acceleration = 10.0; + lifetimeMS = 1000; + height = 1.0; + is2D = true; + + texture[0] = "special/shockwave4"; + texture[1] = "special/gradient"; + texWrap = 6.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.8 0.8 1.0 1.00"; + colors[1] = "0.8 0.5 1.0 0.20"; + colors[2] = "0.2 0.8 1.0 0.0"; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------------------------------------------- +datablock ExplosionData(ConcussionGrenadeExplosion) +{ + soundProfile = ConcussionGrenadeExplosionSound; + shockwave = ConcussionGrenadeShockwave; + + emitter[0] = ConcussionGrenadeSparkEmitter; + emitter[1] = ConcussionGrenadeCrescentEmitter; + + shakeCamera = true; + camShakeFreq = "4.0 5.0 4.5"; + camShakeAmp = "140.0 140.0 140.0"; + camShakeDuration = 1.0; + camShakeRadius = 15.0; +}; + +//-------------------------------------------------------------------------- +// Item Data +//-------------------------------------------------------------------------- +datablock ItemData(ConcussionGrenadeThrown) +{ + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + maxDamage = 0.5; + explosion = ConcussionGrenadeExplosion; + damageRadius = 15.0; + radiusDamageType = $DamageType::Grenade; + kickBackStrength = 3500; + + computeCRC = true; + +}; + +datablock ItemData(ConcussionGrenade) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + thrownItem = ConcussionGrenadeThrown; + pickUpName = "some concussion grenades"; + isGrenade = true; +}; + +//-------------------------------------------------------------------------- +// Functions: +//-------------------------------------------------------------------------- +function ConcussionGrenadeThrown::onCollision( %data, %obj, %col ) +{ + // Do nothing... +} + From 2241501aa499004b8f78bb580d4ff4be56c7fb79 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 7 Apr 2021 14:45:48 -0400 Subject: [PATCH 07/18] Adjusted Conc Range --- Classic/scripts/weapons/concussionGrenade.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Classic/scripts/weapons/concussionGrenade.cs b/Classic/scripts/weapons/concussionGrenade.cs index bd6e107..664d975 100644 --- a/Classic/scripts/weapons/concussionGrenade.cs +++ b/Classic/scripts/weapons/concussionGrenade.cs @@ -161,7 +161,7 @@ datablock ExplosionData(ConcussionGrenadeExplosion) camShakeFreq = "4.0 5.0 4.5"; camShakeAmp = "140.0 140.0 140.0"; camShakeDuration = 1.0; - camShakeRadius = 15.0; + camShakeRadius = 18.0; //was 15 }; //-------------------------------------------------------------------------- @@ -176,7 +176,7 @@ datablock ItemData(ConcussionGrenadeThrown) pickupRadius = 2; maxDamage = 0.5; explosion = ConcussionGrenadeExplosion; - damageRadius = 15.0; + damageRadius = 18.0; //was 15 radiusDamageType = $DamageType::Grenade; kickBackStrength = 3500; From 7acbb290e77d2c5c39f3a2ed6ad1320305108cdb Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 7 Apr 2021 14:55:35 -0400 Subject: [PATCH 08/18] Disabled OG Blaster throwStart adjustment --- Classic/scripts/autoexec/TacoOverrides.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs index 0effa1f..a186bbb 100755 --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -27,7 +27,7 @@ function serverCmdEndThrowCount(%client, %data) %throwScale = %throwStrength / 2; %client.player.throwStrength = %throwScale; - %client.player.throwStart = 5; //was 0 + %client.player.throwStart = 2; //was 0 } //Tank UE code by Keen @@ -152,14 +152,14 @@ function stationTrigger::onEnterTrigger(%data, %obj, %colObj) } //OG Blaster Buff -function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC) -{ +// function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC) +// { //Takes 10 blaster shots to kill a heavy, 13 normal. - if(%targetObject.client.armor $= "Heavy" && %damageType $= $DamageType::Blaster) - %amount *= 1.3; + // if(%targetObject.client.armor $= "Heavy" && %damageType $= $DamageType::Blaster) + // %amount *= 1.3; - Parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC); -} + // Parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC); +// } // Global water viscosity function DefaultGame::missionLoadDone(%game) From f592afd882355c179470e624e6f5589a87b30a77 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 7 Apr 2021 18:50:05 -0400 Subject: [PATCH 09/18] Experimental (Normal Conc Throw) --- Classic/scripts/autoexec/TacoOverrides.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs index a186bbb..564c3b7 100755 --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -291,6 +291,13 @@ function VehicleData::createPositionMarker(%data, %obj) return %marker; } +//Normal Conc Throw (Like Normal Grenades) +function ConcussionGrenadeThrown::onThrow(%this, %gren) +{ + AIGrenadeThrown(%gren); + %gren.detThread = schedule(1500, %gren, "detonateGrenade", %gren); +} + }; // Prevent package from being activated if it is already From 00389c0d55230c90a0c8681558ab4e18be59a2b0 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Thu, 8 Apr 2021 10:26:42 -0400 Subject: [PATCH 10/18] Adjustments --- Classic/scripts/autoexec/TacoOverrides.cs | 16 ++++++++-------- Classic/scripts/weapons/concussionGrenade.cs | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs index 564c3b7..04e85ae 100755 --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -152,14 +152,14 @@ function stationTrigger::onEnterTrigger(%data, %obj, %colObj) } //OG Blaster Buff -// function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC) -// { - //Takes 10 blaster shots to kill a heavy, 13 normal. - // if(%targetObject.client.armor $= "Heavy" && %damageType $= $DamageType::Blaster) - // %amount *= 1.3; +function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC) +{ + //Takes 11 blaster shots to kill a heavy, 13 normal. + if(%targetObject.client.armor $= "Heavy" && %damageType $= $DamageType::Blaster) + %amount *= 1.15; - // Parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC); -// } + Parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC); +} // Global water viscosity function DefaultGame::missionLoadDone(%game) @@ -295,7 +295,7 @@ function VehicleData::createPositionMarker(%data, %obj) function ConcussionGrenadeThrown::onThrow(%this, %gren) { AIGrenadeThrown(%gren); - %gren.detThread = schedule(1500, %gren, "detonateGrenade", %gren); + %gren.detThread = schedule(1800, %gren, "detonateGrenade", %gren); } }; diff --git a/Classic/scripts/weapons/concussionGrenade.cs b/Classic/scripts/weapons/concussionGrenade.cs index 664d975..6444560 100644 --- a/Classic/scripts/weapons/concussionGrenade.cs +++ b/Classic/scripts/weapons/concussionGrenade.cs @@ -161,7 +161,7 @@ datablock ExplosionData(ConcussionGrenadeExplosion) camShakeFreq = "4.0 5.0 4.5"; camShakeAmp = "140.0 140.0 140.0"; camShakeDuration = 1.0; - camShakeRadius = 18.0; //was 15 + camShakeRadius = 16.5; //was 15 }; //-------------------------------------------------------------------------- @@ -176,7 +176,7 @@ datablock ItemData(ConcussionGrenadeThrown) pickupRadius = 2; maxDamage = 0.5; explosion = ConcussionGrenadeExplosion; - damageRadius = 18.0; //was 15 + damageRadius = 16.5; //was 15 radiusDamageType = $DamageType::Grenade; kickBackStrength = 3500; From 6315aecfdb36570fdbe97504f57c245c710892ea Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Thu, 8 Apr 2021 10:36:29 -0400 Subject: [PATCH 11/18] Notes --- Classic/scripts/autoexec/TacoOverrides.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs index 04e85ae..d503bbd 100755 --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -291,11 +291,11 @@ function VehicleData::createPositionMarker(%data, %obj) return %marker; } -//Normal Conc Throw (Like Normal Grenades) +//Conc Throw (Almost Normal Grenades) 1500 Normal function ConcussionGrenadeThrown::onThrow(%this, %gren) { AIGrenadeThrown(%gren); - %gren.detThread = schedule(1800, %gren, "detonateGrenade", %gren); + %gren.detThread = schedule(1800, %gren, "detonateGrenade", %gren); // Was 2000 } }; From f8c48f817ff89563e64a43dec158c86a00ab80e2 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Tue, 13 Apr 2021 12:19:02 -0400 Subject: [PATCH 12/18] Update --- Classic/scripts/autoexec/GetTeamCounts.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) mode change 100644 => 100755 Classic/scripts/autoexec/GetTeamCounts.cs diff --git a/Classic/scripts/autoexec/GetTeamCounts.cs b/Classic/scripts/autoexec/GetTeamCounts.cs old mode 100644 new mode 100755 index 3a7c6d7..6ad384b --- a/Classic/scripts/autoexec/GetTeamCounts.cs +++ b/Classic/scripts/autoexec/GetTeamCounts.cs @@ -54,13 +54,7 @@ function GetTeamCounts(%game) $AllPlayerCount = $HostGamePlayerCount; //Observers - $Observers = 0; - for(%i = 0; %i < ClientGroup.getCount(); %i++) - { - %cl = ClientGroup.getObject(%i); - if(%cl.team $= 0) - $Observers++; - } + $Observers = $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count]); //echo("$PlayerCount[0] " @ $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count])); //echo("$PlayerCount[1] " @ $TeamRank[1, count]); From b99fae619e91838cef42376f4d6f3db309765238 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Tue, 13 Apr 2021 12:22:09 -0400 Subject: [PATCH 13/18] Revert "Merge remote-tracking branch 'origin/NoEvo' into NoEvo" This reverts commit 1ed4b1a2ab536f5cdd02a3fda62183f2c3c79fc7. --- Classic/scripts/autoexec/Autobalance.cs | 20 +- Classic/scripts/autoexec/TacoOverrides.cs | 13 +- Classic/scripts/autoexec/zzDiscordBot.cs | 222 +++++++------------ Classic/scripts/defaultGame.cs | 3 +- Classic/scripts/weapons/concussionGrenade.cs | 208 ----------------- 5 files changed, 99 insertions(+), 367 deletions(-) delete mode 100644 Classic/scripts/weapons/concussionGrenade.cs diff --git a/Classic/scripts/autoexec/Autobalance.cs b/Classic/scripts/autoexec/Autobalance.cs index 1d05c35..44027f9 100644 --- a/Classic/scripts/autoexec/Autobalance.cs +++ b/Classic/scripts/autoexec/Autobalance.cs @@ -61,6 +61,9 @@ function Autobalance( %game ) //Select lower half of team rank as canidates for team change if(!$Autobalance::UseAllMode) { + //Reset clients canidate var + ResetABClients(); + $Autobalance::Max = mFloor($TeamRank[$BigTeam, count]/2); for(%i = $Autobalance::Max; %i < $TeamRank[$BigTeam, count]; %i++) { @@ -124,17 +127,14 @@ function DefaultGame::gameOver(%game) { Parent::gameOver(%game); - if($CurrentMissionType $= "CTF" || $CurrentMissionType $= "SCtF") - { - //Reset Autobalance - $BigTeam = ""; + //Reset Autobalance + $BigTeam = ""; - //Reset all clients canidate var - for (%i = 0; %i < ClientGroup.getCount(); %i++) - { - %client = ClientGroup.getObject(%i); - %client.abCanidate = false; - } + //Reset all clients canidate var + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %client = ClientGroup.getObject(%i); + %client.abCanidate = false; } } diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs index d503bbd..0effa1f 100755 --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -27,7 +27,7 @@ function serverCmdEndThrowCount(%client, %data) %throwScale = %throwStrength / 2; %client.player.throwStrength = %throwScale; - %client.player.throwStart = 2; //was 0 + %client.player.throwStart = 5; //was 0 } //Tank UE code by Keen @@ -154,9 +154,9 @@ function stationTrigger::onEnterTrigger(%data, %obj, %colObj) //OG Blaster Buff function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC) { - //Takes 11 blaster shots to kill a heavy, 13 normal. + //Takes 10 blaster shots to kill a heavy, 13 normal. if(%targetObject.client.armor $= "Heavy" && %damageType $= $DamageType::Blaster) - %amount *= 1.15; + %amount *= 1.3; Parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC); } @@ -291,13 +291,6 @@ function VehicleData::createPositionMarker(%data, %obj) return %marker; } -//Conc Throw (Almost Normal Grenades) 1500 Normal -function ConcussionGrenadeThrown::onThrow(%this, %gren) -{ - AIGrenadeThrown(%gren); - %gren.detThread = schedule(1800, %gren, "detonateGrenade", %gren); // Was 2000 -} - }; // Prevent package from being activated if it is already diff --git a/Classic/scripts/autoexec/zzDiscordBot.cs b/Classic/scripts/autoexec/zzDiscordBot.cs index 6bcb4c6..73fae99 100644 --- a/Classic/scripts/autoexec/zzDiscordBot.cs +++ b/Classic/scripts/autoexec/zzDiscordBot.cs @@ -4,17 +4,13 @@ //exec("scripts/autoexec/zzDiscordBot.cs"); -//note first channel is for monitoring -$discordBot::discordCHID = ""; -$discordBot::IP = ""; +$discordBot::AuthKey[0] = ""; +$discordBot::IP[0] = ""; $discordBot::reconnectTimeout = 3 * 60000; -$discordBot::autoStart = 0; -//used on the bot to help split thigns up -$discordBot::cmdSplit = "%cmd%"; -$discordBot::cmdSubSplit = "%tab%"; -//These correspond with $discordBot::discordCHID -$discordBot::monitorChannel = 1; -$discordBot::serverFeed = 2; +$discordBot::AuthSet = 0; +$discordBot::autoStart = 1; + + package discordPackage { @@ -29,12 +25,11 @@ package discordPackage function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) { parent::messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); - %type = getTaggedString(%msgType); + %type = getTaggedString(%msgType); switch$(%type) { case "msgExplosionKill" or "msgSuicide" or "msgVehicleSpawnKill" or "msgVehicleCrash" or "msgVehicleKill" or "msgTurretSelfKill" or "msgTurretSelfKill" or "msgCTurretKill" or "msgTurretKill" or - "msgSelfKill" or "msgOOBKill" or "msgCampKill" or "msgTeamKill" or "msgLavaKill" or "msgLightningKill" or "MsgRogueMineKill" or "MsgHeadshotKill" or "MsgRearshotKill" or "MsgLegitKill" or - "MsgClientJoin" or "MsgClientDrop": + "msgSelfKill" or "msgOOBKill" or "msgCampKill" or "msgTeamKill" or "msgLavaKill" or "msgLightningKill" or "MsgRogueMineKill" or "MsgHeadshotKill" or "MsgRearshotKill" or "MsgLegitKill": %message = getTaggedString(%msgString); %message = strreplace(%message,"%1",getTaggedString(%a1)); %message = strreplace(%message,"%2",getTaggedString(%a2)); @@ -45,13 +40,74 @@ function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8 %message = strreplace(%message,"%7",getTaggedString(%a7)); %message = strreplace(%message,"%8",getTaggedString(%a8)); %message = stripChars(%message, "\cp\co\c0\c6\c7\c8\c9"); - sendToDiscordEmote(%message, $discordBot::serverFeed); - } - if($missionName !$= $discordBot::cm && ClientGroup.getCount() > 2){ - sendToDiscordEmote("The mission changed to" SPC $missionName, $discordBot::serverFeed); - $discordBot::cm = $missionName; - } + sendToDiscord(%message,2); + } } + +function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6) +{ + //echo(%type SPC %var1 SPC %var2 SPC %var3 SPC %var4 SPC %var5 SPC %var6); + + switch$ (%type) + { + case "flagCap": + %game = %var1; + %player = %var2; + %flag = %player.holdingFlag; + %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); + %msg = getTaggedString(%player.client.name) SPC "captured the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; + case "touchEnemyFlag": + %game = %var1; + %player = %var2; + %flag = %var3; + if(!%player.flagTossWait) + { + %grabspeed = mFloor(VectorLen(setWord(%player.getVelocity(), 2, 0)) * 3.6); + if(%flag.isHome) + %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Speed:" SPC %grabspeed @ "Kph)"; + else if(!%flag.isHome) + %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag in the field. (Speed:" SPC %grabspeed @ "Kph)"; + } + case "droppedFlag": + %game = %var1; + %player = %var2; + %flag = %player.holdingFlag; + %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); + %msg = getTaggedString(%player.client.name) SPC "dropped the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; + case "flagReturn": + %game = %var1; + %flag = %var2; + %player = %var3; + if(%player !$= "") + %msg = getTaggedString(%player.client.name) SPC "returned the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag."; + else + %msg = "The" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag was returned to base."; + case "lakTouchFlag": + %game = %var1; + %player = %var2; + %flag = %var3; + if(!%player.client.flagDeny && %player.getState() !$= "Dead" && PlayingPlayers() > 1) + %msg = getTaggedString(%player.client.name) SPC "has taken the flag."; + case "lakMApoints": + %sourceObject = %var1; + %points = %var2; + if(%points == 1) + %s = "s"; + %hitType = %var3; + %weapon = %var4; + %distance = %var5; + %vel = %var6; + if(%points) + %msg = getTaggedString(%sourceObject.client.name) SPC "receives" SPC %points @ %s SPC "points! [" @ %hitType SPC %weapon @ "] [Distance:" SPC %distance @ "] [Speed:" SPC %vel @ "]"; + } + + if(%msg !$= "") + { + %msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9"); + sendToDiscord(%msg, 2); + } +} + function CTFGame::flagCap(%game, %player) { if(discord.lastState $= "Connected") @@ -127,11 +183,11 @@ function dtEventLog(%log, %save) { parent::dtEventLog(%log, %save); if(discord.lastState $= "Connected") - sendToDiscord(%log, $discordBot::monitorChannel); + sendToDiscord(%log, 1); } function LogMessage(%client, %msg, %cat){ if(discord.lastState $= "Connected") - sendToDiscord("Message" SPC %client.nameBase SPC %msg, $discordBot::monitorChannel); + sendToDiscord("Message" SPC %client.nameBase SPC %msg, 1); parent::LogMessage(%client, %msg, %cat); } @@ -139,90 +195,18 @@ function LogMessage(%client, %msg, %cat){ if(!isActivePackage(discordPackage)) activatePackage(discordPackage); - -function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6) -{ - //echo(%type SPC %var1 SPC %var2 SPC %var3 SPC %var4 SPC %var5 SPC %var6); - - switch$ (%type) - { - case "flagCap": - %game = %var1; - %player = %var2; - %flag = %player.holdingFlag; - %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); - %msg = getTaggedString(%player.client.name) SPC "captured the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; - case "touchEnemyFlag": - %game = %var1; - %player = %var2; - %flag = %var3; - if(!%player.flagTossWait) - { - %grabspeed = mFloor(VectorLen(setWord(%player.getVelocity(), 2, 0)) * 3.6); - if(%flag.isHome) - %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Speed:" SPC %grabspeed @ "Kph)"; - else if(!%flag.isHome) - %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag in the field. (Speed:" SPC %grabspeed @ "Kph)"; - } - case "droppedFlag": - %game = %var1; - %player = %var2; - %flag = %player.holdingFlag; - %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); - %msg = getTaggedString(%player.client.name) SPC "dropped the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; - case "flagReturn": - %game = %var1; - %flag = %var2; - %player = %var3; - if(%player !$= "") - %msg = getTaggedString(%player.client.name) SPC "returned the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag."; - else - %msg = "The" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag was returned to base."; - case "lakTouchFlag": - %game = %var1; - %player = %var2; - %flag = %var3; - if(!%player.client.flagDeny && %player.getState() !$= "Dead" && PlayingPlayers() > 1) - %msg = getTaggedString(%player.client.name) SPC "has taken the flag."; - case "lakMApoints": - %sourceObject = %var1; - %points = %var2; - if(%points == 1) - %s = "s"; - %hitType = %var3; - %weapon = %var4; - %distance = %var5; - %vel = %var6; - if(%points) - %msg = getTaggedString(%sourceObject.client.name) SPC "receives" SPC %points @ %s SPC "points! [" @ %hitType SPC %weapon @ "] [Distance:" SPC %distance @ "] [Speed:" SPC %vel @ "]"; - } - - if(%msg !$= "") - { - %msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9"); - sendToDiscordEmote(%msg, $discordBot::serverFeed); - } -} + function sendToDiscord(%msg,%channel) { if(isObject(discord) && %msg !$= "") { if(discord.lastState $= "Connected") { - discord.send("MSG" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); - } - } -} -function sendToDiscordEmote(%msg,%channel)//emote filter will be applyed used in server feed -{ - if(isObject(discord) && %msg !$= "") - { - if(discord.lastState $= "Connected") - { - discord.send("MSGE" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); + discord.send("MSG" SPC (%channel-1) SPC %msg @ "\r\n"); } } } + function discordCon(){ if(discord.lastState !$= "Connected"){ if(isEventPending($discordBot::reconnectEvent)) @@ -231,7 +215,7 @@ function discordCon(){ discord.delete(); new TCPObject(discord); discord.lastState = "Connecting"; - discord.connect($discordBot::IP); + discord.connect($discordBot::IP[$discordBot::AuthSet]); } } function discordKill(){ @@ -262,7 +246,7 @@ function discord::onDNSResolved(%this){ function discord::onConnected(%this){ %this.lastState = "Connected"; error(%this.lastState); - discord.send("AUTH" @ $discordBot::cmdSplit @ $discordBot::discordCHID @ $discordBot::cmdSplit @ $Host::GameName @ "\r\n"); + discord.send("AUTH" SPC $discordBot::AuthKey[$discordBot::AuthSet] @ "\r\n"); } function discord::onDisconnect(%this){ @@ -281,45 +265,9 @@ function discord::onLine(%this, %line){ //case "Discord": //messageAll( 'MsgDiscord', '\c3Discord: \c4%1 %2',getWord(%lineStrip,1),getWords(%lineStrip,2,getWordCount(%lineStrip) -1)); case "PING": - discord.send("PONG" @ $discordBot::cmdSplit @ "\r\n"); - case "PINGAVG": - %min = 10000; - %max = -10000; - %lowCount = %lowPing = 0; - for(%i = 0; %i < ClientGroup.getCount(); %i++){ - %cl = ClientGroup.getObject(%i); - %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); - %min = (%ping < %min) ? %ping : %min; - %max = (%ping > %max) ? %ping : %max; - if(%ping < 250){ - %lowCount++; - %lowPing += %ping; - } - %pc++; - %pingT += %ping; - } - %lowCount = (%lowCount == 0) ? 1 : %lowCount; - if(!%pc){ - sendToDiscord("Ping AVG:" @ 0 SPC "Low Avg:" @ 0 SPC "Min:" @ 0 SPC "Max:" @ 0, $discordBot::monitorChannel); - } - else{ - %avg = mFloor(%pingT/%pc); - %lavg = mFloor(%lowPing/%lowCount); - sendToDiscord("Ping AVG:" @ %avg SPC "Low Avg:" @ %lavg SPC "Min:" @ %min SPC "Max:" @ %max, $discordBot::monitorChannel); - } - case "PINGLIST": - if(isObject(discord) && discord.lastState $= "Connected"){ - %channel = 1; - if(ClientGroup.getCount() > 0){ - for(%i = 0; %i < ClientGroup.getCount(); %i++){ - %cl = ClientGroup.getObject(%i); - %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); - %msg = %cl.namebase @ $discordBot::cmdSubSplit @ %ping @ $discordBot::cmdSubSplit @ %i; - discord.schedule(%i*32,"send","MSGSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); - } - discord.schedule((%i+1)*32,"send","PROCSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ "msgList" @ "\r\n"); - } - } + discord.send("PONG" @ "\r\n"); + case "PINGX": + discord.send("PINGY" @ "\r\n"); default: error("Bad Command" SPC %line); } diff --git a/Classic/scripts/defaultGame.cs b/Classic/scripts/defaultGame.cs index c728f41..dd738cf 100644 --- a/Classic/scripts/defaultGame.cs +++ b/Classic/scripts/defaultGame.cs @@ -1833,8 +1833,7 @@ function DefaultGame::clientMissionDropReady(%game, %client) if(isEventPending(%client.okschedule)) cancel(%client.okschedule); - %time = $Host::KickObserverTimeout; - //%time = ($Host::KickObserverTimeout) + ($Host::KickObserverTimeout/2); + %time = ($Host::KickObserverTimeout) + ($Host::KickObserverTimeout/2); //%minutes = %time / 60; //messageClient(%client, 'MsgNoObservers', '\c2You have %1 minutes to join the game or you will be kicked.', %minutes); diff --git a/Classic/scripts/weapons/concussionGrenade.cs b/Classic/scripts/weapons/concussionGrenade.cs deleted file mode 100644 index 6444560..0000000 --- a/Classic/scripts/weapons/concussionGrenade.cs +++ /dev/null @@ -1,208 +0,0 @@ -// grenade (thrown by hand) script -// ------------------------------------------------------------------------ - -datablock EffectProfile(ConcussionGrenadeThrowEffect) -{ - effectname = "weapons/grenade_throw"; - minDistance = 2.5; - maxDistance = 2.5; -}; - -datablock EffectProfile(ConcussionGrenadeSwitchEffect) -{ - effectname = "weapons/generic_switch"; - minDistance = 2.5; - maxDistance = 2.5; -}; - -datablock EffectProfile(ConcussionGrenadeExplosionEffect) -{ - effectname = "explosions/grenade_explode"; - minDistance = 10; - maxDistance = 50; -}; - -datablock AudioProfile(ConcussionGrenadeExplosionSound) -{ - filename = "fx/weapons/grenade_explode.wav"; - description = AudioExplosion3d; - preload = true; - effect = ConcussionGrenadeExplosionEffect; -}; - -// ------------------------------------------------------ -// z0dd - ZOD, 5/8/02. Duplicate datablock, waste of mem. -//datablock AudioProfile(ConcussionGrenadeExplosionSound) -//{ -// filename = "fx/weapons/grenade_explode.wav"; -// description = AudioExplosion3d; -// preload = true; -// effect = ConcussionGrenadeExplosionEffect; -//}; -// ------------------------------------------------------ - -//-------------------------------------------------------------------------- -// Sparks -//-------------------------------------------------------------------------- -datablock ParticleData(ConcussionGrenadeSparks) -{ - dragCoefficient = 1; - gravityCoefficient = 0.0; - inheritedVelFactor = 0.2; - constantAcceleration = 0.0; - lifetimeMS = 500; - lifetimeVarianceMS = 350; - textureName = "special/bigSpark"; - colors[0] = "0.56 0.36 1.0 1.0"; - colors[1] = "0.56 0.36 1.0 1.0"; - colors[2] = "1.0 0.36 1.0 0.0"; - sizes[0] = 0.5; - sizes[1] = 0.25; - sizes[2] = 0.25; - times[0] = 0.0; - times[1] = 0.5; - times[2] = 1.0; - -}; - -datablock ParticleEmitterData(ConcussionGrenadeSparkEmitter) -{ - ejectionPeriodMS = 1; - periodVarianceMS = 0; - ejectionVelocity = 12; - velocityVariance = 6.75; - ejectionOffset = 0.0; - thetaMin = 0; - thetaMax = 180; - phiReferenceVel = 0; - phiVariance = 360; - overrideAdvances = false; - orientParticles = true; - lifetimeMS = 100; - particles = "ConcussionGrenadeSparks"; -}; - -datablock ParticleData( ConcussionGrenadeCrescentParticle ) -{ - dragCoefficient = 2; - gravityCoefficient = 0.0; - inheritedVelFactor = 0.2; - constantAcceleration = -0.0; - lifetimeMS = 600; - lifetimeVarianceMS = 000; - textureName = "special/crescent3"; - colors[0] = "0.8 0.8 1.0 1.00"; - colors[1] = "0.8 0.5 1.0 0.20"; - colors[2] = "0.2 0.8 1.0 0.0"; - sizes[0] = 2.0; - sizes[1] = 4.0; - sizes[2] = 5.0; - times[0] = 0.0; - times[1] = 0.5; - times[2] = 1.0; -}; - -datablock ParticleEmitterData( ConcussionGrenadeCrescentEmitter ) -{ - ejectionPeriodMS = 15; - periodVarianceMS = 0; - ejectionVelocity = 20; - velocityVariance = 10.0; - ejectionOffset = 0.0; - thetaMin = 0; - thetaMax = 80; - phiReferenceVel = 0; - phiVariance = 360; - overrideAdvances = false; - orientParticles = true; - lifetimeMS = 200; - particles = "ConcussionGrenadeCrescentParticle"; -}; - -//-------------------------------------------------------------------------- -// Shockwave -//-------------------------------------------------------------------------- -datablock ShockwaveData(ConcussionGrenadeShockwave) -{ - width = 4.0; - numSegments = 20; - numVertSegments = 2; - velocity = 5; - acceleration = 10.0; - lifetimeMS = 1000; - height = 1.0; - is2D = true; - - texture[0] = "special/shockwave4"; - texture[1] = "special/gradient"; - texWrap = 6.0; - - times[0] = 0.0; - times[1] = 0.5; - times[2] = 1.0; - - colors[0] = "0.8 0.8 1.0 1.00"; - colors[1] = "0.8 0.5 1.0 0.20"; - colors[2] = "0.2 0.8 1.0 0.0"; -}; - -//-------------------------------------------------------------------------- -// Explosion -//-------------------------------------------------------------------------- -datablock ExplosionData(ConcussionGrenadeExplosion) -{ - soundProfile = ConcussionGrenadeExplosionSound; - shockwave = ConcussionGrenadeShockwave; - - emitter[0] = ConcussionGrenadeSparkEmitter; - emitter[1] = ConcussionGrenadeCrescentEmitter; - - shakeCamera = true; - camShakeFreq = "4.0 5.0 4.5"; - camShakeAmp = "140.0 140.0 140.0"; - camShakeDuration = 1.0; - camShakeRadius = 16.5; //was 15 -}; - -//-------------------------------------------------------------------------- -// Item Data -//-------------------------------------------------------------------------- -datablock ItemData(ConcussionGrenadeThrown) -{ - shapeFile = "grenade.dts"; - mass = 0.7; - elasticity = 0.2; - friction = 1; - pickupRadius = 2; - maxDamage = 0.5; - explosion = ConcussionGrenadeExplosion; - damageRadius = 16.5; //was 15 - radiusDamageType = $DamageType::Grenade; - kickBackStrength = 3500; - - computeCRC = true; - -}; - -datablock ItemData(ConcussionGrenade) -{ - className = HandInventory; - catagory = "Handheld"; - shapeFile = "grenade.dts"; - mass = 0.7; - elasticity = 0.2; - friction = 1; - pickupRadius = 2; - thrownItem = ConcussionGrenadeThrown; - pickUpName = "some concussion grenades"; - isGrenade = true; -}; - -//-------------------------------------------------------------------------- -// Functions: -//-------------------------------------------------------------------------- -function ConcussionGrenadeThrown::onCollision( %data, %obj, %col ) -{ - // Do nothing... -} - From b85a8d3f330cb6718fad2e2464637a4bc79d79e3 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Tue, 13 Apr 2021 12:19:02 -0400 Subject: [PATCH 14/18] Revert "Update" This reverts commit f8c48f817ff89563e64a43dec158c86a00ab80e2. --- Classic/scripts/autoexec/GetTeamCounts.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) mode change 100755 => 100644 Classic/scripts/autoexec/GetTeamCounts.cs diff --git a/Classic/scripts/autoexec/GetTeamCounts.cs b/Classic/scripts/autoexec/GetTeamCounts.cs old mode 100755 new mode 100644 index 6ad384b..3a7c6d7 --- a/Classic/scripts/autoexec/GetTeamCounts.cs +++ b/Classic/scripts/autoexec/GetTeamCounts.cs @@ -54,7 +54,13 @@ function GetTeamCounts(%game) $AllPlayerCount = $HostGamePlayerCount; //Observers - $Observers = $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count]); + $Observers = 0; + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if(%cl.team $= 0) + $Observers++; + } //echo("$PlayerCount[0] " @ $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count])); //echo("$PlayerCount[1] " @ $TeamRank[1, count]); From e3a21ccb29b8ced07bd079febf9e5f7f3ee726ff Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Tue, 13 Apr 2021 12:31:23 -0400 Subject: [PATCH 15/18] Re Submit changes --- Classic/scripts/autoexec/Autobalance.cs | 20 +- Classic/scripts/autoexec/TacoOverrides.cs | 13 +- Classic/scripts/autoexec/zzDiscordBot.cs | 222 ++++++++++++------- Classic/scripts/defaultGame.cs | 3 +- Classic/scripts/weapons/concussionGrenade.cs | 208 +++++++++++++++++ 5 files changed, 367 insertions(+), 99 deletions(-) mode change 100644 => 100755 Classic/scripts/autoexec/Autobalance.cs mode change 100644 => 100755 Classic/scripts/autoexec/zzDiscordBot.cs mode change 100644 => 100755 Classic/scripts/defaultGame.cs create mode 100755 Classic/scripts/weapons/concussionGrenade.cs diff --git a/Classic/scripts/autoexec/Autobalance.cs b/Classic/scripts/autoexec/Autobalance.cs old mode 100644 new mode 100755 index 44027f9..1d05c35 --- a/Classic/scripts/autoexec/Autobalance.cs +++ b/Classic/scripts/autoexec/Autobalance.cs @@ -61,9 +61,6 @@ function Autobalance( %game ) //Select lower half of team rank as canidates for team change if(!$Autobalance::UseAllMode) { - //Reset clients canidate var - ResetABClients(); - $Autobalance::Max = mFloor($TeamRank[$BigTeam, count]/2); for(%i = $Autobalance::Max; %i < $TeamRank[$BigTeam, count]; %i++) { @@ -127,14 +124,17 @@ function DefaultGame::gameOver(%game) { Parent::gameOver(%game); - //Reset Autobalance - $BigTeam = ""; - - //Reset all clients canidate var - for (%i = 0; %i < ClientGroup.getCount(); %i++) + if($CurrentMissionType $= "CTF" || $CurrentMissionType $= "SCtF") { - %client = ClientGroup.getObject(%i); - %client.abCanidate = false; + //Reset Autobalance + $BigTeam = ""; + + //Reset all clients canidate var + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %client = ClientGroup.getObject(%i); + %client.abCanidate = false; + } } } diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs index 0effa1f..d503bbd 100755 --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -27,7 +27,7 @@ function serverCmdEndThrowCount(%client, %data) %throwScale = %throwStrength / 2; %client.player.throwStrength = %throwScale; - %client.player.throwStart = 5; //was 0 + %client.player.throwStart = 2; //was 0 } //Tank UE code by Keen @@ -154,9 +154,9 @@ function stationTrigger::onEnterTrigger(%data, %obj, %colObj) //OG Blaster Buff function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC) { - //Takes 10 blaster shots to kill a heavy, 13 normal. + //Takes 11 blaster shots to kill a heavy, 13 normal. if(%targetObject.client.armor $= "Heavy" && %damageType $= $DamageType::Blaster) - %amount *= 1.3; + %amount *= 1.15; Parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC); } @@ -291,6 +291,13 @@ function VehicleData::createPositionMarker(%data, %obj) return %marker; } +//Conc Throw (Almost Normal Grenades) 1500 Normal +function ConcussionGrenadeThrown::onThrow(%this, %gren) +{ + AIGrenadeThrown(%gren); + %gren.detThread = schedule(1800, %gren, "detonateGrenade", %gren); // Was 2000 +} + }; // Prevent package from being activated if it is already diff --git a/Classic/scripts/autoexec/zzDiscordBot.cs b/Classic/scripts/autoexec/zzDiscordBot.cs old mode 100644 new mode 100755 index 73fae99..6bcb4c6 --- a/Classic/scripts/autoexec/zzDiscordBot.cs +++ b/Classic/scripts/autoexec/zzDiscordBot.cs @@ -4,13 +4,17 @@ //exec("scripts/autoexec/zzDiscordBot.cs"); -$discordBot::AuthKey[0] = ""; -$discordBot::IP[0] = ""; +//note first channel is for monitoring +$discordBot::discordCHID = ""; +$discordBot::IP = ""; $discordBot::reconnectTimeout = 3 * 60000; -$discordBot::AuthSet = 0; -$discordBot::autoStart = 1; - - +$discordBot::autoStart = 0; +//used on the bot to help split thigns up +$discordBot::cmdSplit = "%cmd%"; +$discordBot::cmdSubSplit = "%tab%"; +//These correspond with $discordBot::discordCHID +$discordBot::monitorChannel = 1; +$discordBot::serverFeed = 2; package discordPackage { @@ -25,11 +29,12 @@ package discordPackage function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) { parent::messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); - %type = getTaggedString(%msgType); + %type = getTaggedString(%msgType); switch$(%type) { case "msgExplosionKill" or "msgSuicide" or "msgVehicleSpawnKill" or "msgVehicleCrash" or "msgVehicleKill" or "msgTurretSelfKill" or "msgTurretSelfKill" or "msgCTurretKill" or "msgTurretKill" or - "msgSelfKill" or "msgOOBKill" or "msgCampKill" or "msgTeamKill" or "msgLavaKill" or "msgLightningKill" or "MsgRogueMineKill" or "MsgHeadshotKill" or "MsgRearshotKill" or "MsgLegitKill": + "msgSelfKill" or "msgOOBKill" or "msgCampKill" or "msgTeamKill" or "msgLavaKill" or "msgLightningKill" or "MsgRogueMineKill" or "MsgHeadshotKill" or "MsgRearshotKill" or "MsgLegitKill" or + "MsgClientJoin" or "MsgClientDrop": %message = getTaggedString(%msgString); %message = strreplace(%message,"%1",getTaggedString(%a1)); %message = strreplace(%message,"%2",getTaggedString(%a2)); @@ -40,74 +45,13 @@ function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8 %message = strreplace(%message,"%7",getTaggedString(%a7)); %message = strreplace(%message,"%8",getTaggedString(%a8)); %message = stripChars(%message, "\cp\co\c0\c6\c7\c8\c9"); - sendToDiscord(%message,2); - } + sendToDiscordEmote(%message, $discordBot::serverFeed); + } + if($missionName !$= $discordBot::cm && ClientGroup.getCount() > 2){ + sendToDiscordEmote("The mission changed to" SPC $missionName, $discordBot::serverFeed); + $discordBot::cm = $missionName; + } } - -function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6) -{ - //echo(%type SPC %var1 SPC %var2 SPC %var3 SPC %var4 SPC %var5 SPC %var6); - - switch$ (%type) - { - case "flagCap": - %game = %var1; - %player = %var2; - %flag = %player.holdingFlag; - %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); - %msg = getTaggedString(%player.client.name) SPC "captured the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; - case "touchEnemyFlag": - %game = %var1; - %player = %var2; - %flag = %var3; - if(!%player.flagTossWait) - { - %grabspeed = mFloor(VectorLen(setWord(%player.getVelocity(), 2, 0)) * 3.6); - if(%flag.isHome) - %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Speed:" SPC %grabspeed @ "Kph)"; - else if(!%flag.isHome) - %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag in the field. (Speed:" SPC %grabspeed @ "Kph)"; - } - case "droppedFlag": - %game = %var1; - %player = %var2; - %flag = %player.holdingFlag; - %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); - %msg = getTaggedString(%player.client.name) SPC "dropped the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; - case "flagReturn": - %game = %var1; - %flag = %var2; - %player = %var3; - if(%player !$= "") - %msg = getTaggedString(%player.client.name) SPC "returned the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag."; - else - %msg = "The" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag was returned to base."; - case "lakTouchFlag": - %game = %var1; - %player = %var2; - %flag = %var3; - if(!%player.client.flagDeny && %player.getState() !$= "Dead" && PlayingPlayers() > 1) - %msg = getTaggedString(%player.client.name) SPC "has taken the flag."; - case "lakMApoints": - %sourceObject = %var1; - %points = %var2; - if(%points == 1) - %s = "s"; - %hitType = %var3; - %weapon = %var4; - %distance = %var5; - %vel = %var6; - if(%points) - %msg = getTaggedString(%sourceObject.client.name) SPC "receives" SPC %points @ %s SPC "points! [" @ %hitType SPC %weapon @ "] [Distance:" SPC %distance @ "] [Speed:" SPC %vel @ "]"; - } - - if(%msg !$= "") - { - %msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9"); - sendToDiscord(%msg, 2); - } -} - function CTFGame::flagCap(%game, %player) { if(discord.lastState $= "Connected") @@ -183,11 +127,11 @@ function dtEventLog(%log, %save) { parent::dtEventLog(%log, %save); if(discord.lastState $= "Connected") - sendToDiscord(%log, 1); + sendToDiscord(%log, $discordBot::monitorChannel); } function LogMessage(%client, %msg, %cat){ if(discord.lastState $= "Connected") - sendToDiscord("Message" SPC %client.nameBase SPC %msg, 1); + sendToDiscord("Message" SPC %client.nameBase SPC %msg, $discordBot::monitorChannel); parent::LogMessage(%client, %msg, %cat); } @@ -195,18 +139,90 @@ function LogMessage(%client, %msg, %cat){ if(!isActivePackage(discordPackage)) activatePackage(discordPackage); - + +function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6) +{ + //echo(%type SPC %var1 SPC %var2 SPC %var3 SPC %var4 SPC %var5 SPC %var6); + + switch$ (%type) + { + case "flagCap": + %game = %var1; + %player = %var2; + %flag = %player.holdingFlag; + %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); + %msg = getTaggedString(%player.client.name) SPC "captured the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; + case "touchEnemyFlag": + %game = %var1; + %player = %var2; + %flag = %var3; + if(!%player.flagTossWait) + { + %grabspeed = mFloor(VectorLen(setWord(%player.getVelocity(), 2, 0)) * 3.6); + if(%flag.isHome) + %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Speed:" SPC %grabspeed @ "Kph)"; + else if(!%flag.isHome) + %msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag in the field. (Speed:" SPC %grabspeed @ "Kph)"; + } + case "droppedFlag": + %game = %var1; + %player = %var2; + %flag = %player.holdingFlag; + %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); + %msg = getTaggedString(%player.client.name) SPC "dropped the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")"; + case "flagReturn": + %game = %var1; + %flag = %var2; + %player = %var3; + if(%player !$= "") + %msg = getTaggedString(%player.client.name) SPC "returned the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag."; + else + %msg = "The" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag was returned to base."; + case "lakTouchFlag": + %game = %var1; + %player = %var2; + %flag = %var3; + if(!%player.client.flagDeny && %player.getState() !$= "Dead" && PlayingPlayers() > 1) + %msg = getTaggedString(%player.client.name) SPC "has taken the flag."; + case "lakMApoints": + %sourceObject = %var1; + %points = %var2; + if(%points == 1) + %s = "s"; + %hitType = %var3; + %weapon = %var4; + %distance = %var5; + %vel = %var6; + if(%points) + %msg = getTaggedString(%sourceObject.client.name) SPC "receives" SPC %points @ %s SPC "points! [" @ %hitType SPC %weapon @ "] [Distance:" SPC %distance @ "] [Speed:" SPC %vel @ "]"; + } + + if(%msg !$= "") + { + %msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9"); + sendToDiscordEmote(%msg, $discordBot::serverFeed); + } +} function sendToDiscord(%msg,%channel) { if(isObject(discord) && %msg !$= "") { if(discord.lastState $= "Connected") { - discord.send("MSG" SPC (%channel-1) SPC %msg @ "\r\n"); + discord.send("MSG" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); + } + } +} +function sendToDiscordEmote(%msg,%channel)//emote filter will be applyed used in server feed +{ + if(isObject(discord) && %msg !$= "") + { + if(discord.lastState $= "Connected") + { + discord.send("MSGE" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); } } } - function discordCon(){ if(discord.lastState !$= "Connected"){ if(isEventPending($discordBot::reconnectEvent)) @@ -215,7 +231,7 @@ function discordCon(){ discord.delete(); new TCPObject(discord); discord.lastState = "Connecting"; - discord.connect($discordBot::IP[$discordBot::AuthSet]); + discord.connect($discordBot::IP); } } function discordKill(){ @@ -246,7 +262,7 @@ function discord::onDNSResolved(%this){ function discord::onConnected(%this){ %this.lastState = "Connected"; error(%this.lastState); - discord.send("AUTH" SPC $discordBot::AuthKey[$discordBot::AuthSet] @ "\r\n"); + discord.send("AUTH" @ $discordBot::cmdSplit @ $discordBot::discordCHID @ $discordBot::cmdSplit @ $Host::GameName @ "\r\n"); } function discord::onDisconnect(%this){ @@ -265,9 +281,45 @@ function discord::onLine(%this, %line){ //case "Discord": //messageAll( 'MsgDiscord', '\c3Discord: \c4%1 %2',getWord(%lineStrip,1),getWords(%lineStrip,2,getWordCount(%lineStrip) -1)); case "PING": - discord.send("PONG" @ "\r\n"); - case "PINGX": - discord.send("PINGY" @ "\r\n"); + discord.send("PONG" @ $discordBot::cmdSplit @ "\r\n"); + case "PINGAVG": + %min = 10000; + %max = -10000; + %lowCount = %lowPing = 0; + for(%i = 0; %i < ClientGroup.getCount(); %i++){ + %cl = ClientGroup.getObject(%i); + %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); + %min = (%ping < %min) ? %ping : %min; + %max = (%ping > %max) ? %ping : %max; + if(%ping < 250){ + %lowCount++; + %lowPing += %ping; + } + %pc++; + %pingT += %ping; + } + %lowCount = (%lowCount == 0) ? 1 : %lowCount; + if(!%pc){ + sendToDiscord("Ping AVG:" @ 0 SPC "Low Avg:" @ 0 SPC "Min:" @ 0 SPC "Max:" @ 0, $discordBot::monitorChannel); + } + else{ + %avg = mFloor(%pingT/%pc); + %lavg = mFloor(%lowPing/%lowCount); + sendToDiscord("Ping AVG:" @ %avg SPC "Low Avg:" @ %lavg SPC "Min:" @ %min SPC "Max:" @ %max, $discordBot::monitorChannel); + } + case "PINGLIST": + if(isObject(discord) && discord.lastState $= "Connected"){ + %channel = 1; + if(ClientGroup.getCount() > 0){ + for(%i = 0; %i < ClientGroup.getCount(); %i++){ + %cl = ClientGroup.getObject(%i); + %ping = %cl.isAIControlled() ? 0 : %cl.getPing(); + %msg = %cl.namebase @ $discordBot::cmdSubSplit @ %ping @ $discordBot::cmdSubSplit @ %i; + discord.schedule(%i*32,"send","MSGSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ %msg @ "\r\n"); + } + discord.schedule((%i+1)*32,"send","PROCSTACK" @ $discordBot::cmdSplit @ (%channel-1) @ $discordBot::cmdSplit @ "msgList" @ "\r\n"); + } + } default: error("Bad Command" SPC %line); } diff --git a/Classic/scripts/defaultGame.cs b/Classic/scripts/defaultGame.cs old mode 100644 new mode 100755 index dd738cf..c728f41 --- a/Classic/scripts/defaultGame.cs +++ b/Classic/scripts/defaultGame.cs @@ -1833,7 +1833,8 @@ function DefaultGame::clientMissionDropReady(%game, %client) if(isEventPending(%client.okschedule)) cancel(%client.okschedule); - %time = ($Host::KickObserverTimeout) + ($Host::KickObserverTimeout/2); + %time = $Host::KickObserverTimeout; + //%time = ($Host::KickObserverTimeout) + ($Host::KickObserverTimeout/2); //%minutes = %time / 60; //messageClient(%client, 'MsgNoObservers', '\c2You have %1 minutes to join the game or you will be kicked.', %minutes); diff --git a/Classic/scripts/weapons/concussionGrenade.cs b/Classic/scripts/weapons/concussionGrenade.cs new file mode 100755 index 0000000..6444560 --- /dev/null +++ b/Classic/scripts/weapons/concussionGrenade.cs @@ -0,0 +1,208 @@ +// grenade (thrown by hand) script +// ------------------------------------------------------------------------ + +datablock EffectProfile(ConcussionGrenadeThrowEffect) +{ + effectname = "weapons/grenade_throw"; + minDistance = 2.5; + maxDistance = 2.5; +}; + +datablock EffectProfile(ConcussionGrenadeSwitchEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 2.5; + maxDistance = 2.5; +}; + +datablock EffectProfile(ConcussionGrenadeExplosionEffect) +{ + effectname = "explosions/grenade_explode"; + minDistance = 10; + maxDistance = 50; +}; + +datablock AudioProfile(ConcussionGrenadeExplosionSound) +{ + filename = "fx/weapons/grenade_explode.wav"; + description = AudioExplosion3d; + preload = true; + effect = ConcussionGrenadeExplosionEffect; +}; + +// ------------------------------------------------------ +// z0dd - ZOD, 5/8/02. Duplicate datablock, waste of mem. +//datablock AudioProfile(ConcussionGrenadeExplosionSound) +//{ +// filename = "fx/weapons/grenade_explode.wav"; +// description = AudioExplosion3d; +// preload = true; +// effect = ConcussionGrenadeExplosionEffect; +//}; +// ------------------------------------------------------ + +//-------------------------------------------------------------------------- +// Sparks +//-------------------------------------------------------------------------- +datablock ParticleData(ConcussionGrenadeSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/bigSpark"; + colors[0] = "0.56 0.36 1.0 1.0"; + colors[1] = "0.56 0.36 1.0 1.0"; + colors[2] = "1.0 0.36 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.25; + sizes[2] = 0.25; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(ConcussionGrenadeSparkEmitter) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 6.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "ConcussionGrenadeSparks"; +}; + +datablock ParticleData( ConcussionGrenadeCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + colors[0] = "0.8 0.8 1.0 1.00"; + colors[1] = "0.8 0.5 1.0 0.20"; + colors[2] = "0.2 0.8 1.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 4.0; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( ConcussionGrenadeCrescentEmitter ) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 10.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "ConcussionGrenadeCrescentParticle"; +}; + +//-------------------------------------------------------------------------- +// Shockwave +//-------------------------------------------------------------------------- +datablock ShockwaveData(ConcussionGrenadeShockwave) +{ + width = 4.0; + numSegments = 20; + numVertSegments = 2; + velocity = 5; + acceleration = 10.0; + lifetimeMS = 1000; + height = 1.0; + is2D = true; + + texture[0] = "special/shockwave4"; + texture[1] = "special/gradient"; + texWrap = 6.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.8 0.8 1.0 1.00"; + colors[1] = "0.8 0.5 1.0 0.20"; + colors[2] = "0.2 0.8 1.0 0.0"; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------------------------------------------- +datablock ExplosionData(ConcussionGrenadeExplosion) +{ + soundProfile = ConcussionGrenadeExplosionSound; + shockwave = ConcussionGrenadeShockwave; + + emitter[0] = ConcussionGrenadeSparkEmitter; + emitter[1] = ConcussionGrenadeCrescentEmitter; + + shakeCamera = true; + camShakeFreq = "4.0 5.0 4.5"; + camShakeAmp = "140.0 140.0 140.0"; + camShakeDuration = 1.0; + camShakeRadius = 16.5; //was 15 +}; + +//-------------------------------------------------------------------------- +// Item Data +//-------------------------------------------------------------------------- +datablock ItemData(ConcussionGrenadeThrown) +{ + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + maxDamage = 0.5; + explosion = ConcussionGrenadeExplosion; + damageRadius = 16.5; //was 15 + radiusDamageType = $DamageType::Grenade; + kickBackStrength = 3500; + + computeCRC = true; + +}; + +datablock ItemData(ConcussionGrenade) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + thrownItem = ConcussionGrenadeThrown; + pickUpName = "some concussion grenades"; + isGrenade = true; +}; + +//-------------------------------------------------------------------------- +// Functions: +//-------------------------------------------------------------------------- +function ConcussionGrenadeThrown::onCollision( %data, %obj, %col ) +{ + // Do nothing... +} + From 2cef340b910068899cafe68059fc29bf3862f165 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Tue, 13 Apr 2021 12:32:00 -0400 Subject: [PATCH 16/18] Update --- Classic/scripts/autoexec/GetTeamCounts.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) mode change 100644 => 100755 Classic/scripts/autoexec/GetTeamCounts.cs diff --git a/Classic/scripts/autoexec/GetTeamCounts.cs b/Classic/scripts/autoexec/GetTeamCounts.cs old mode 100644 new mode 100755 index 3a7c6d7..6ad384b --- a/Classic/scripts/autoexec/GetTeamCounts.cs +++ b/Classic/scripts/autoexec/GetTeamCounts.cs @@ -54,13 +54,7 @@ function GetTeamCounts(%game) $AllPlayerCount = $HostGamePlayerCount; //Observers - $Observers = 0; - for(%i = 0; %i < ClientGroup.getCount(); %i++) - { - %cl = ClientGroup.getObject(%i); - if(%cl.team $= 0) - $Observers++; - } + $Observers = $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count]); //echo("$PlayerCount[0] " @ $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count])); //echo("$PlayerCount[1] " @ $TeamRank[1, count]); From 1b19f9b485b29f82b88695845133c76e5bcc378f Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Mon, 19 Apr 2021 14:37:28 -0400 Subject: [PATCH 17/18] Dumb eval location --- Classic/scripts/server.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) mode change 100644 => 100755 Classic/scripts/server.cs diff --git a/Classic/scripts/server.cs b/Classic/scripts/server.cs old mode 100644 new mode 100755 index 8660509..0518d91 --- a/Classic/scripts/server.cs +++ b/Classic/scripts/server.cs @@ -2047,13 +2047,13 @@ function serverCmdSet(%client, %type, %val) messageClient( %client, 'MsgAdmin', '\c2Unknown input value. 0 disables Fair Teams, 1 enables Fair Teams.' ); } // z0dd - ZOD, 7/17/03. Allow super admins to issue console commands on the server. - case "consolecmd": - if($Host::ClassicAllowConsoleAccess) - { - eval(%val); - messageClient( %client, 'MsgAdmin', '\c2Command %1 sent to server console.', %val ); - logEcho(%client.nameBase @ "Send the console command " @ %val @ " to the server.", 1); - } + // case "consolecmd": + // if($Host::ClassicAllowConsoleAccess) + // { + // eval(%val); + // messageClient( %client, 'MsgAdmin', '\c2Command %1 sent to server console.', %val ); + // logEcho(%client.nameBase @ "Send the console command " @ %val @ " to the server.", 1); + // } default: messageClient(%client, 'MsgValueFailed', '\c2No Changes. You did not specify a valid type.'); From d1cf884bdfcb03bc47bb61a5bd9453c622ecc062 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 28 Apr 2021 01:17:44 -0400 Subject: [PATCH 18/18] Unified MA mask types --- Classic/scripts/autoexec/EvoStats.cs | 111 ++++++++++---------- Classic/scripts/autoexec/MidAirDetRep.cs | 2 +- Classic/scripts/autoexec/zDarkTigerStats.cs | 4 +- 3 files changed, 57 insertions(+), 60 deletions(-) mode change 100644 => 100755 Classic/scripts/autoexec/EvoStats.cs mode change 100644 => 100755 Classic/scripts/autoexec/MidAirDetRep.cs mode change 100644 => 100755 Classic/scripts/autoexec/zDarkTigerStats.cs diff --git a/Classic/scripts/autoexec/EvoStats.cs b/Classic/scripts/autoexec/EvoStats.cs old mode 100644 new mode 100755 index 6f89c32..8492653 --- a/Classic/scripts/autoexec/EvoStats.cs +++ b/Classic/scripts/autoexec/EvoStats.cs @@ -258,7 +258,7 @@ function handleMAStat(%data, %projectile, %targetObject, %modifier, %position, % // %distance = mFloor(VectorDist(%position, %projectile.sourceObject.getWorldBoxCenter())); // // Evolution Method - %distance = mFloor(VectorDist(%position, %projectile.initialPosition)); + %distance = mFloor(VectorDist(%position, %projectile.initialPosition)); // failsafe if(%victim $= "" || %killer $= "") @@ -276,77 +276,74 @@ function handleMAStat(%data, %projectile, %targetObject, %modifier, %position, % // Eolk - changes to MA code %position = %targetObject.getPosition(); - %raycast = containerRaycast(%position, vectorAdd(%position, "0 0 -10"), $TypeMasks::ForceFieldObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::VehicleObjectType, %targetObject); + %raycast = containerRaycast(%position, vectorAdd(%position, "0 0 -10"), $TypeMasks::ForceFieldObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType, %targetObject); if(!isObject(firstWord(%raycast))) // We've got something... { - if(%projectileType $= "DiscProjectile") + switch$(%projectileType) { - %killer.midairs++; + case DiscProjectile: + %killer.midairs++; - if( ( %killer.showMA $= "" ) || ( %killer.showMA == 1 ) ) - bottomPrint(%killer, "Midair Disk (" @ %killer.midairs @ ")! Distance is " @ %distance @ " meters.", 3); + if( ( %killer.showMA $= "" ) || ( %killer.showMA == 1 ) ) + bottomPrint(%killer, "Midair Disk (" @ %killer.midairs @ ")! Distance is " @ %distance @ " meters.", 3); - // this callback will allow players to autoscreenshot the MA - messageClient(%killer, 'MsgMidAir', "", %distance); - logEcho(%killer.nameBase @" (pl "@%killer.player@"/cl "@%killer@") hit a midair disc shot ("@%distance@")"); + // this callback will allow players to autoscreenshot the MA + messageClient(%killer, 'MsgMidAir', "", %distance); + logEcho(%killer.nameBase @" (pl "@%killer.player@"/cl "@%killer@") hit a midair disc shot ("@%distance@")"); - if(%killer.midairs > $stats::ma_counter) - { - $stats::ma_counter = %killer.midairs; - $stats::ma_client = getTaggedString(%killer.name); - } + if(%killer.midairs > $stats::ma_counter) + { + $stats::ma_counter = %killer.midairs; + $stats::ma_client = getTaggedString(%killer.name); + } - if(%distance > $stats::ma_maxdistance) - { - $stats::ma_maxdistance = %distance; - $stats::ma_maxdistanceclient = getTaggedString(%killer.name); - } - } - else if(%projectileType $= "PlasmaBolt") - { - %killer.PlaMA++; + if(%distance > $stats::ma_maxdistance) + { + $stats::ma_maxdistance = %distance; + $stats::ma_maxdistanceclient = getTaggedString(%killer.name); + } + case PlasmaBolt: + %killer.PlaMA++; - if ( ( %killer.showMA $= "" ) || ( %killer.showMA == 1 ) ) - bottomPrint(%killer, "Midair Plasma (" @ %killer.PlaMA @ ")! Distance is " @ %distance @ " meters.", 3); + if ( ( %killer.showMA $= "" ) || ( %killer.showMA == 1 ) ) + bottomPrint(%killer, "Midair Plasma (" @ %killer.PlaMA @ ")! Distance is " @ %distance @ " meters.", 3); - // this callback will allow players to autoscreenshot the MA - messageClient(%killer, 'MsgPlasmaMidAir', "", %distance); - logEcho(%killer.nameBase @" (pl "@%killer.player@"/cl "@%killer@") hit a midair plasma shot ("@%distance@")"); + // this callback will allow players to autoscreenshot the MA + messageClient(%killer, 'MsgPlasmaMidAir', "", %distance); + logEcho(%killer.nameBase @" (pl "@%killer.player@"/cl "@%killer@") hit a midair plasma shot ("@%distance@")"); - if(%killer.PlaMA > $stats::PlaMA_counter) - { - $stats::PlaMA_counter = %killer.PlaMA; - $stats::PlaMA_client = getTaggedString(%killer.name); - } + if(%killer.PlaMA > $stats::PlaMA_counter) + { + $stats::PlaMA_counter = %killer.PlaMA; + $stats::PlaMA_client = getTaggedString(%killer.name); + } - if(%distance > $stats::PlaMA_maxdistance) - { - $stats::PlaMA_maxdistance = %distance; - $stats::PlaMA_maxdistanceclient = getTaggedString(%killer.name); - } - } - else if(%projectileType $= "EnergyBolt") - { - %killer.blaMA++; + if(%distance > $stats::PlaMA_maxdistance) + { + $stats::PlaMA_maxdistance = %distance; + $stats::PlaMA_maxdistanceclient = getTaggedString(%killer.name); + } + case EnergyBolt: + %killer.blaMA++; - if( ( %killer.showMA $= "" ) || ( %killer.showMA == 1 ) ) - bottomPrint(%killer, "Midair Blaster (" @ %killer.blaMA @ ")! Distance is " @ %distance @ " meters.", 3); + if( ( %killer.showMA $= "" ) || ( %killer.showMA == 1 ) ) + bottomPrint(%killer, "Midair Blaster (" @ %killer.blaMA @ ")! Distance is " @ %distance @ " meters.", 3); - // this callback will allow players to autoscreenshot the MA - messageClient(%killer, 'MsgBlasterMidAir', "", %distance); - logEcho(%killer.nameBase @" (pl "@%killer.player@"/cl "@%killer@") hit a midair blaster shot ("@%distance@")"); + // this callback will allow players to autoscreenshot the MA + messageClient(%killer, 'MsgBlasterMidAir', "", %distance); + logEcho(%killer.nameBase @" (pl "@%killer.player@"/cl "@%killer@") hit a midair blaster shot ("@%distance@")"); - if(%killer.blaMA > $stats::BlaMA_counter) - { - $stats::BlaMA_counter = %killer.BlaMA; - $stats::BlaMA_client = getTaggedString(%killer.name); - } + if(%killer.blaMA > $stats::BlaMA_counter) + { + $stats::BlaMA_counter = %killer.BlaMA; + $stats::BlaMA_client = getTaggedString(%killer.name); + } - if(%distance > $stats::BlaMA_maxdistance) - { - $stats::BlaMA_maxdistance = %distance; - $stats::BlaMA_maxdistanceclient = getTaggedString(%killer.name); - } + if(%distance > $stats::BlaMA_maxdistance) + { + $stats::BlaMA_maxdistance = %distance; + $stats::BlaMA_maxdistanceclient = getTaggedString(%killer.name); + } } } } diff --git a/Classic/scripts/autoexec/MidAirDetRep.cs b/Classic/scripts/autoexec/MidAirDetRep.cs old mode 100644 new mode 100755 index 2c9ec93..eb4a7b1 --- a/Classic/scripts/autoexec/MidAirDetRep.cs +++ b/Classic/scripts/autoexec/MidAirDetRep.cs @@ -131,7 +131,7 @@ function maDirect(%client)// tests for direct hit with aoe weapons function maRayTestDis(%targetObject)// tests for height of target { - %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType; + %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::VehicleObjectType; %rayStart = %targetObject.getWorldBoxCenter(); %rayEnd = VectorAdd(%rayStart,"0 0" SPC -5000); %ray = ContainerRayCast(%rayStart, %rayEnd, %mask, %targetObject); diff --git a/Classic/scripts/autoexec/zDarkTigerStats.cs b/Classic/scripts/autoexec/zDarkTigerStats.cs old mode 100644 new mode 100755 index a44bda9..8d850ce --- a/Classic/scripts/autoexec/zDarkTigerStats.cs +++ b/Classic/scripts/autoexec/zDarkTigerStats.cs @@ -5759,7 +5759,7 @@ function GameConnection::dtMessage(%this,%message,%sfx,%bypass){ function rayTest(%targetObject,%dis){ if(isObject(%targetObject)){ - %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType; + %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::VehicleObjectType; %rayStart = %targetObject.getWorldBoxCenter(); %rayEnd = VectorAdd(%rayStart,"0 0" SPC ((%dis+1.15) * -1)); %ground = !ContainerRayCast(%rayStart, %rayEnd, %mask, %targetObject); @@ -5770,7 +5770,7 @@ function rayTest(%targetObject,%dis){ } function rayTestDis(%targetObject){ if(isObject(%targetObject)){ - %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType; + %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::VehicleObjectType; %rayStart = %targetObject.getWorldBoxCenter(); %rayEnd = VectorAdd(%rayStart,"0 0" SPC -5000); %ray = ContainerRayCast(%rayStart, %rayEnd, %mask, %targetObject);