1
General Discussion / Yoke's Parkour Knife (PK) TDM
« on: February 22, 2015, 09:34:52 PM »



(Developing Topic)
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.







if($pref::Server::SpeedKart::RoundLimit $= "")
{
$pref::Server::SpeedKart::RoundLimit = 8;
}
$SK::Initialized = false;
function SK_BuildTrackList()
{
//
%pattern = "Add-Ons/SpeedKart_Glacial_Run/save.bls";
%pattern = "Add-Ons/SpeedKart_Lighthouse/save.bls";
%pattern = "Add-Ons/SpeedKart_Red_Raceway/save.bls";
%pattern = "Add-Ons/SpeedKart_Sand_Castle/save.bls";
%pattern = "Add-Ons/SpeedKart_North_Pole/save.bls";
%pattern = "Add-Ons/SpeedKart_GreenHills/save.bls";
%pattern = "Add-Ons/SpeedKart_Descent/save.bls";
%pattern = "Add-Ons/SpeedKart_Harbor/save.bls";
%pattern = "Add-Ons/SpeedKart_PacTrax_Curvature/save.bls";
%pattern = "Add-Ons/SpeedKart_Hydro_Plant/save.bls";
%pattern = "Add-Ons/SpeedKart_Sierra_Island/save.bls";
%pattern = "Add-Ons/SpeedKart_Volcano/save.bls";
$SK::numTracks = 12;
%file = findFirstFile(%pattern);
while(%file !$= "Add-Ons/SpeedKart_Glacial_Run/save.bls")
{
$SK::Track[$SK::numTracks] = %file;
$SK::numTracks++;
%file = findNextFile(%pattern);
}
}
function SK_DumpTrackList()
{
echo("");
if($SK::numTracks == 1)
echo("1 track");
else
echo($SK::numTracks @ " tracks");
for(%i = 0; %i < $SK::numTracks; %i++)
{
%displayName = $SK::Track[%i];
%displayName = strReplace(%displayName, "Add-Ons/SpeedKart_", "");
%displayName = strReplace(%displayName, "/save.bls", "");
%displayName = strReplace(%displayName, "_", " ");
if(%i == $SK::CurrentTrack)
echo(" >" @ %displayName);
else
echo(" " @ %displayName);
}
echo("");
}
function SK_NextTrack()
{
$SK::CurrentTrack = mFloor($SK::CurrentTrack);
$SK::CurrentTrack++;
$SK::CurrentTrack = $SK::CurrentTrack % $SK::numTracks;
$SK::ResetCount = 0;
SK_LoadTrack_Phase1($SK::Track[$SK::CurrentTrack]);
}
function SK_LoadTrack_Phase1(%filename)
{
//suspend minigame resets
$SK::MapChange = 1;
//put everyone in observer mode
%mg = $DefaultMiniGame;
if(!isObject(%mg))
{
error("ERROR: SK_LoadTrack( " @ %filename @ " ) - default minigame does not exist");
return;
}
for(%i = 0; %i < %mg.numMembers; %i++)
{
%client = %mg.member[%i];
%player = %client.player;
if(isObject(%player))
%player.delete();
%camera = %client.camera;
%camera.setFlyMode();
%camera.mode = "Observer";
%client.setControlObject(%camera);
}
//clear all bricks
// note: this function is deferred, so we'll have to set a callback to be triggered when it's done
BrickGroup_888888.chaindelete callback = "SK_LoadTrack_Phase2(\"" @ %filename @ "\");";
BrickGroup_888888.chaindelete all();
}
function SK_LoadTrack_Phase2(%filename)
{
echo("Loading speedkart track " @ %filename);
%displayName = %filename;
%displayName = strReplace(%displayName, "Add-Ons/SpeedKart_", "");
%displayName = strReplace(%displayName, "/save.bls", "");
%displayName = strReplace(%displayName, "_", " ");
%loadMsg = "\c5Now loading \c6" @ %displayName;
//read and display credits file, if it exists
// limited to one line
%creditsFilename = filePath(%fileName) @ "/credits.txt";
if(isFile(%creditsFilename))
{
%file = new FileObject();
%file.openforRead(%creditsFilename);
%line = %file.readLine();
%line = stripMLControlChars(%line);
%loadMsg = %loadMsg @ "\c5, created by \c3" @ %line;
%file.close();
%file.delete();
}
messageAll('', %loadMsg);
//load environment if it exists
%envFile = filePath(%fileName) @ "/environment.txt";
if(isFile(%envFile))
{
//echo("parsing env file " @ %envFile);
//usage: GameModeGuiServer::ParseGameModeFile(%filename, %append);
//if %append == 0, all minigame variables will be cleared
%res = GameModeGuiServer::ParseGameModeFile(%envFile, 1);
EnvGuiServer::getIdxFromFilenames();
EnvGuiServer::SetSimpleMode();
if(!$EnvGuiServer::SimpleMode)
{
EnvGuiServer::fillAdvancedVarsFromSimple();
EnvGuiServer::SetAdvancedMode();
}
}
//load save file
schedule(10, 0, serverDirectSaveFileLoad, %fileName, 3, "", 2, 1);
}
//some horrible /commands to change tracks and such
function serverCmdTrackList(%client)
{
for(%i = 0; %i < $SK::numTracks; %i++)
{
%displayName = $SK::Track[%i];
%displayName = strReplace(%displayName, "Add-Ons/SpeedKart_", "");
%displayName = strReplace(%displayName, "/save.bls", "");
%displayName = strReplace(%displayName, "_", " ");
if(%i == $SK::CurrentTrack)
messageClient(%client, '', " >" @ %i @ ". \c6" @ %displayName);
else
messageClient(%client, '', " " @ %i @ ". \c6" @ %displayName);
}
}
function serverCmdSetTrack(%client, %i)
{
if(!%client.isAdmin)
return;
if(mFloor(%i) !$= %i)
{
messageClient(%client, '', "Usage: /setTrack <number>");
return;
}
if(%i < 0 || %i > $SK::numTracks)
{
messageClient(%client, '', "serverCmdSetTrack() - out of range index");
return;
}
messageAll( 'MsgAdminForce', '\c3%1\c2 changed the track', %client.getPlayerName());
$SK::CurrentTrack = %i - 1;
SK_NextTrack();
}
function serverCmdNextTrack(%client, %i)
{
if(!%client.isAdmin)
return;
messageAll( 'MsgAdminForce', '\c3%1\c2 changed the track', %client.getPlayerName());
SK_NextTrack();
}
package GameModeSpeedKartPackage
{
//this is called when save loading finishes
function GameModeInitialResetCheck()
{
Parent::GameModeInitialResetCheck();
//if there is no track list, attempt to create it
if($SK::numTracks == 0)
SK_BuildTrackList();
//if tracklist is still empty, there are no tracks
if($SK::numTracks == 0)
{
messageAll('', "\c5No SpeedKart tracks available!");
return;
}
if($SK::Initialized)
return;
$SK::Initialized = true;
$SK::CurrentTrack = -1;
SK_NextTrack();
}
//when we're done loading a new track, reset the minigame
function ServerLoadSaveFile_End()
{
Parent::ServerLoadSaveFile_End();
//new track has loaded, reset minigame
if($DefaultMiniGame.numMembers > 0) //don't bother if no one is here (this also prevents starting at round 2 on server creation)
$DefaultMiniGame.scheduleReset(); //don't do it instantly, to give people a little bit of time to ghost
}
//vehicles should explode in water
function VehicleData::onEnterLiquid(%data, %obj, %coverage, %type)
{
Parent::onEnterLiquid(%data, %obj, %coverage, %type);
%obj.damage(%obj, %obj.getPosition(), 10000, $DamageType::Lava);
%obj.finalExplosion();
}
//players should die in water
function Armor::onEnterLiquid(%data, %obj, %coverage, %type)
{
Parent::onEnterLiquid(%data, %obj, %coverage, %type);
%obj.hasShotOnce = true;
%obj.invulnerable = false;
%obj.damage(%obj, %obj.getPosition(), 10000, $DamageType::Lava);
}
//when vehicle spawns, it cannot move (event must enable it)
//this solves the driving through the garage problem
function WheeledVehicleData::onAdd(%data,%obj)
{
Parent::onAdd(%data, %obj);
for(%i = 0; %i < %data.numWheels; %i++)
%obj.setWheelPowered(%i, %on);
}
//also you cannot click-push a vehicle while it is in non-moving mode
function vehicle::OnActivate(%vehicle, %activatingObj, %activatingClient, %pos, %vec)
{
//just check a wheel
if(!%vehicle.getWheelPowered(2))
return;
Parent::OnActivate(%vehicle, %activatingObj, %activatingClient, %pos, %vec);
}
//if you kill yourself in a vehicle, kill the vehicle
function serverCmdSelf Delete(%client)
{
%player = %client.player;
if(!isObject(%player))
return;
%vehicle = %player.getObjectMount();
//kill the vehicle we're in
if(isObject(%vehicle))
{
//if wheels are not powered, we're probably at the start of the race, so don't allow Self Delete in a vehicle
%poweredTime = getSimTime() - %vehicle.poweredTime;
%doBuzzer = false;
if(%vehicle.getClassName() $= "AIPlayer")
%doBuzzer = true;
else if(!%vehicle.getWheelPowered(2) || %poweredTime < 8000)
%doBuzzer = true;
if(%doBuzzer)
{
//spam protect the buzzer enough to prevent serious problems
if(getSimTime() - %player.lastSelf DeleteBuzzerTime > 200)
{
%player.lastSelf DeleteBuzzerTime = getSimTime();
serverPlay3d("Beep_No_Sound", %vehicle.getPosition());
}
return;
}
//if vehicle is on fire, do final explosion
//otherwise kill vehicle
if(%vehicle.getDamagePercent() >= 1.0)
%vehicle.finalExplosion();
else
{
%vehicle.damage(%vehicle, %vehicle.getPosition(), 10000, $DamageType::Default);
%player.burnPlayer(5);
}
}
else
{
//no vehicle, normal Self Delete
Parent::ServerCmdSelf Delete(%client);
return;
}
}
//resume death animation after corpse is booted out of burning vehicle
function Armor::onUnmount(%data, %obj, %slot)
{
Parent::onUnmount(%data, %obj, %slot);
if(%obj.getDamagePercent() >= 1)
{
%obj.playthread(3, "death1");
}
}
//if smoeone gets back into a garage after the game starts, we don't want them to be able to press a button and respawn someone's cart from under them
function fxDTSBrick::setVehicle(%obj, %data, %client)
{
if(isObject(%obj.vehicle))
{
//vehicle exists, if it is far from spawn, don't do this event
%vec = vectorSub(%obj.vehicle.getPosition(), %obj.getPosition());
%dist = vectorLen(%vec);
if(%dist > 10)
{
return;
}
}
Parent::setVehicle(%obj, %data, %client);
}
//total hack: when a vehicle is turned on record the start-of-race time
// other options would be to make another event or add in a time offset
function fxDTSBrick::setVehiclePowered(%obj, %on, %client)
{
Parent::setVehiclePowered(%obj, %on, %client);
if(%on)
{
if(isObject($DefaultMiniGame))
{
if($DefaultMiniGame.raceStartTime <= 0)
$DefaultMiniGame.raceStartTime = getSimTime();
}
}
}
function MiniGameSO::Reset(%obj, %client)
{
//make sure this value is an number
$pref::Server::SpeedKart::RoundLimit = mFloor($pref::Server::SpeedKart::RoundLimit);
//handle our race time hack
%obj.raceStartTime = 0;
//count number of minigame resets, when we reach the limit, go to next track
if(%obj.numMembers >= 0)
{
$SK::ResetCount++;
}
if($SK::ResetCount > $pref::Server::SpeedKart::RoundLimit)
{
$SK::ResetCount = 0;
SK_NextTrack();
}
else
{
messageAll('', "\c5Beginning round " @ $SK::ResetCount @ " of " @ $pref::Server::SpeedKart::RoundLimit);
Parent::Reset(%obj, %client);
}
}
};
activatePackage(GameModeSpeedKartPackage);
// more time to fly out of a burning car
$CorpseTimeoutValue = 7000;
//special event to explode vehicles that are left in the garage
registerOutputEvent("fxDTSBrick", "explodeNearVehicle", "");
function fxDTSBrick::explodeNearVehicle(%obj)
{
%vehicle = %obj.vehicle;
if(!isObject(%vehicle))
return;
%delta = vectorSub(%vehicle.getPosition(), %obj.getPosition());
//echo("len = " @ vectorLen(%delta));
if(vectorLen(%delta) < 5) //7.5)
%vehicle.finalExplosion(); //damage(%vehicle, %vehicle.getPosition(), 10000, $DamageType::Default);
}
//special event to win the race, displays race time
registerOutputEvent("GameConnection", "winRace", "");
function GameConnection::winRace(%client)
{
%mg = %client.miniGame;
if(!isObject(%mg))
%mg = $DefaultMiniGame;
if(!isObject(%mg))
return;
//if race start time is not available, use time since last reset
%startTime = %mg.raceStartTime;
if(%startTime <= 0)
%startTime = %mg.lastResetTime;
%elapsedTime = getSimTime() - %startTime;
%elapsedTime = mFloor(%elapsedTime / 1000);
%mg.chatMessageAll(0, "\c3" @ %client.getPlayerName() @ " \c5WON THE RACE IN \c6" @ getTimeString(%elapsedTime) @ "\c3!");
%mg.scheduleReset(7000);
}
//Default stuff...
ADDON Brick_Arch
ADDON Brick_Large_Cubes
ADDON Support_Player_Persistence
ADDON Brick_Treasure_Chest
ADDON Brick_V15
ADDON Emote_Alarm
ADDON Emote_Confusion
ADDON Emote_Hate
ADDON Emote_Love
ADDON Light_Animated
ADDON Light_Basic
ADDON Particle_Basic
ADDON Particle_FX_Cans
ADDON Particle_Player
ADDON Particle_Tools
ADDON Particle_Grass
ADDON Player_No_Jet
ADDON Print_1x2f_Default
ADDON Print_2x2f_Default
ADDON Print_2x2r_Default
ADDON Print_Letters_Default
ADDON Sound_Beeps
ADDON Sound_Phone
ADDON Sound_Synth4
ADDON Script_AdvanceLight
ADDON Server_SloMoDeath
ADDON Script_VehicleStereo
ADDON Vehicle_Pirate_Cannon
ADDON Vehicle_Tank
ADDON Weapon_Rocket_Launcher
ADDON Projectile_GravityRocket
ADDON Vehicle_Jeep
ADDON Vehicle_Horse
ADDON Vehicle_Rowboat
ADDON Weapon_Bow
ADDON Weapon_Spear
ADDON Weapon_Sword
ADDON Support_Doors
ADDON Brick_Doors
ADDON Brick_Halloween
ADDON Brick_Teledoor
ADDON Brick_Christmas_Tree
//Kart racing stuff...
ADDON Brick_ModTer_BasicPack
ADDON Brick_ModTer_InvertedPack
ADDON Print_ModTer_Default
ADDON GameMode_SpeedKart
ADDON Server_VehicleGore
ADDON Event_Camera_Control
ADDON Vehicle_Speedkart
ADDON SpeedKart_Glacial_Run
ADDON SpeedKart_Lighthouse
ADDON Speedkart_Red_Raceway
ADDON SpeedKart_Sand_Castle
ADDON SpeedKart_North_Pole
ADDON SpeedKart_GreenHills
ADDON SpeedKart_Descent
ADDON SpeedKart_Harbor
ADDON SpeedKart_PacTrax_Curvature
ADDON SpeedKart_Frozer
ADDON SpeedKart_Hydro_Plant
ADDON SpeedKart_Sierra_Island
ADDON SpeedKart_Volcano
//bots
ADDON Bot_Hole
ADDON Bot_Blockhead
ADDON Bot_Horse
ADDON Bot_Shark
ADDON Bot_Zombie
//for bandito
ADDON Weapon_Gun
ADDON Weapon_Guns_Akimbo
MUSIC Rainbow_MK64
MUSIC Mountain_MK64
MUSIC Jungle_MK64
MUSIC Highway_MK64
MUSIC Desert_MK64
MUSIC Beach_MK64
MUSIC Circut_MK64
MUSIC Snow_MK64
//environment
$EnvGuiServer::SimpleMode 0
$EnvGuiServer::SkyFile Add-Ons/Sky_Skylands/Skylands.dml
$EnvGuiServer::WaterFile Add-Ons/Water_Brick/brick.water
$EnvGuiServer::GroundFile Add-Ons/Ground_Plate/plate.ground
$EnvGuiServer::SunFlareTopTexture base/lighting/flare2.png
$EnvGuiServer::SunFlareBottomTexture base/lighting/corona2.png
$EnvGuiServer::DayOffset 0
$EnvGuiServer::DayLength 300
$EnvGuiServer::DayCycleEnabled 0
$EnvGuiServer::DayCycle Add-Ons/DayCycle_Default/default.daycycle
$EnvGuiServer::Sunational socialistmuth 238
$EnvGuiServer::SunElevation 21
$EnvGuiServer::DirectLightColor 1.000000 0.915888 0.836449 1.000000
$EnvGuiServer::AmbientLightColor 0.612150 0.592126 0.592126 1.000000
$EnvGuiServer::ShadowColor 0.000000 0.498211 0.579439 1.000000
$EnvGuiServer::SunFlareColor 0.200000 0.200000 0.200000 1.000000
$EnvGuiServer::SunFlareSize 2.25641
$EnvGuiServer::VisibleDistance 753.744
$EnvGuiServer::FogDistance 471.795
$EnvGuiServer::FogHeight
$EnvGuiServer::FogColor 0.771028 0.826666 1.000000 1.000000
$EnvGuiServer::WaterColor 0.172897 0.630841 1.000000 0.827103
$EnvGuiServer::WaterHeight 5
$EnvGuiServer::UnderWaterColor 140 178 255 134
$EnvGuiServer::SkyColor 1.000000 1.000000 0.785047 1.000000
$EnvGuiServer::WaterScrollX 0
$EnvGuiServer::WaterScrollY 0
$EnvGuiServer::GroundColor 1.000000 0.816578 0.607477 1.000000
$EnvGuiServer::GroundScrollX 0
$EnvGuiServer::GroundScrollY 0
$EnvGuiServer::VignetteMultiply 0
$EnvGuiServer::VignetteColor 0.000000 0.000000 0.000000 0.392157
//minigame rules
$MiniGame::Enabled 1
$MiniGame::GameColor 0
$MiniGame::InviteOnly 0
$MiniGame::IncludeAllPlayersBricks 1
$MiniGame::PlayersUseOwnBricks 0
$MiniGame::Points_BreakBrick 0
$MiniGame::Points_PlantBrick 0
$MiniGame::Points_KillPlayer 1
$MiniGame::Points_KillBot 0
$MiniGame::Points_KillSelf -1
$MiniGame::Points_Die 0
$MiniGame::RespawnTime -1
$MiniGame::VehicleRespawnTime -1
$MiniGame::BrickRespawnTime 60
$MiniGame::BotRespawnTime 5
$MiniGame::UseSpawnBricks 1
$MiniGame::FallingDamage 1
$MiniGame::WeaponDamage 1
$MiniGame::SelfDamage 1
$MiniGame::VehicleDamage 1
$MiniGame::BrickDamage 1
$MiniGame::BotDamage 1
$MiniGame::EnableWand 0
$MiniGame::EnableBuilding 0
$MiniGame::EnablePainting 0
$MiniGame::PlayerDataBlockName No-Jet Player
$MiniGame::StartEquipName0 0
$MiniGame::StartEquipName1 0
$MiniGame::StartEquipName2 0
$MiniGame::StartEquipName3 0
$MiniGame::StartEquipName4 0
$MiniGame::TimeLimit 240
$Server::Quota::Schedules 9999
$Server::Quota::Misc 999
$Server::Quota::Projectile 999
$Server::Quota::Item 999
$Server::Quota::Environment 9999
$Server::Quota::Player 100
$Server::Quota::Vehicle 50
$Server::MaxPhysVehicles_Total 20
If you're still having trouble with any gold weapon,
Type one of the following into your console;
setmodpaths(getmodpaths());exec("add-ons/Weapon_Gold("Name Here")/server.cs");
setmodpaths(getmodpaths());exec("add-ons/Weapon_Gold("Name Here")/Weapon_Gold("Name Here").cs");
It should automatically transmit your datablocks, if not, use this code;
transmitdatablocks();
This should fix that particular weapon you specified. If this doesn't work, you might have done something wrong.
//Standard Armor, similar to the "Advanced Warfare" scheme
datablock PlayerData(PlayerAdvanced : PlayerStandardArmor)
{
rechargeRate = 4;
runForce = 4320;
runEnergyDrain = 0;
maxForwardSpeed = "7";
maxBackwardSpeed = "5";
maxSideSpeed = "5";
maxForwardCrouchSpeed = "3";
maxBackwardCrouchSpeed = "2";
maxSideCrouchSpeed = "2";
airControl = 0.1;
jumpForce = 1080;
canJet = 0;
canRide = 1;
showEnergyBar = 1;
maxUnderwaterForwardSpeed = 80;
maxUnderwaterBackwardSpeed = 80;
maxUnderwaterSideSpeed = 80;
jetEmitter = "./AVJetSpark.png";
jetGroundEmitter = "./AVJetSpark.png";
jetGroundDistance = 10;
mass = 60;
drag = 0.1;
maxdrag = 0.52;
density = 0.7;
maxEnergy = 10;
repairRate = 0.4;
energyPerDamagePoint = 75.0;
rechargeRate = 0.4;
useCustomPainEffects = true;
PainSound = "./AVPainSound.wav";
DeathSound = "./AVDeathSound.wav";
pickupRadius = 0.75;
JumpSound = "./AVJumpSound.wav";
maxForwardCrouchSpeed = 3;
maxBackwardCrouchSpeed = 2;
maxSideCrouchSpeed = 2;
jumpForce = 17 * 63; //17 * 63;
jumpEnergyDrain = 0;
minJumpEnergy = 0;
jumpDelay = 0;
jumpsound = "./AVJump.wav";
camerahorizontaloffset = 1;
cameraverticaloffset = 1;
cameraMaxDist = 3;
cameraTilt = 0.2;
maxfreelookangle = 1;
thirdPersonOnly = 1;
minJetEnergy = 2;
renderFirstPerson = true;
jetEnergyDrain = 7;
canJet = 0;
jetsound = "./AVJet.wav";
uiName = "AV Player";
showEnergyBar = true;
runSurfaceAngle = 25;
jumpSurfaceAngle = 25;
};
datablock PlayerData(PlayerAdvancedActive : PlayerAdvanced)
{
runEnergyDrain = 7;
minRunEnergy = 2;
maxForwardSpeed = "15";
maxBackwardSpeed = "10";
maxSideSpeed = "10";
maxForwardCrouchSpeed = "3";
maxBackwardCrouchSpeed = "2";
maxSideCrouchSpeed = "2";
airControl = 0;
uiName = "";
canRide = 0;
};
package AdvancedPlayer
{
function Armor::onTrigger(%data,%player,%slot,%io)
{
if(%slot == 4)
{
if(%io && %data.getName() $= "PlayerAdvanced")
{
%player.changeDatablock(PlayerAdvancedActive);
%tool = %player.currTool;
//servercmdunusetool(%player.client);
%player.currTool = %tool;
} else if(!%io && %data.getName() $= "PlayerAdvancedActive")
{
%player.changeDatablock(PlayerAdvanced);
//servercmduseTool(%player.client,%player.currTool);
}
}
Parent::onTrigger(%data,%player,%slot,%io);
}
};
activatePackage(AdvancedPlayer);






