mirror of
https://github.com/haydenmc/Krypton.git
synced 2026-01-21 04:24:46 +00:00
1020 lines
31 KiB
C#
1020 lines
31 KiB
C#
|
|
$host::nopulseSCG = 0; ///No super pulse powers for admins.
|
|
//----------------------------------------------------------------------------
|
|
|
|
// Item Datablocks
|
|
// image = Name of mounted image datablock
|
|
// onUse(%this,%object)
|
|
|
|
// Item Image Datablocks
|
|
// item = Name of item inventory datablock
|
|
|
|
// ShapeBase Datablocks
|
|
// max[Item] = Maximum amount that can be caried
|
|
|
|
// ShapeBase Objects
|
|
// inv[Item] = Count of item in inventory
|
|
//----------------------------------------------------------------------------
|
|
|
|
$TestCheats = 0;
|
|
|
|
function serverCmdUse(%client,%data)
|
|
{
|
|
// Item names from the client must converted
|
|
// into DataBlocks
|
|
// %data = ItemDataBlock[%item];
|
|
|
|
%client.getControlObject().use(%data);
|
|
}
|
|
|
|
function serverCmdThrow(%client,%data)
|
|
{
|
|
// Item names from the client must converted
|
|
// into DataBlocks
|
|
// %data = ItemDataBlock[%item];
|
|
%client.getControlObject().throw(%data);
|
|
}
|
|
|
|
function serverCmdThrowWeapon(%client,%data)
|
|
{
|
|
// Item names from the client must converted
|
|
// into DataBlocks
|
|
// %data = ItemDataBlock[%item];
|
|
%client.getControlObject().throwWeapon();
|
|
}
|
|
|
|
function serverCmdThrowPack(%client,%data)
|
|
{
|
|
%client.getControlObject().throwPack();
|
|
}
|
|
|
|
function serverCmdTogglePack(%client,%data)
|
|
{
|
|
// this function is apparently never called
|
|
%client.getControlObject().togglePack();
|
|
}
|
|
|
|
function serverCmdThrowFlag(%client)
|
|
{
|
|
//Game.playerDroppedFlag(%client.player);
|
|
Game.dropFlag(%client.player);
|
|
}
|
|
|
|
function serverCmdSelectWeaponSlot( %client, %data ) {
|
|
%client.getControlObject().selectWeaponSlot( %data );
|
|
if (%client.player)
|
|
if (%client.player.getObjectMount())
|
|
callEject(%client.player, %data);
|
|
}
|
|
|
|
function callEject(%player, %num) {
|
|
%veh = %player.getObjectMount();
|
|
if (!(%veh.getType() & $TypeMasks::VehicleObjectType))
|
|
return;
|
|
if (%veh.getMountNodeObject(0) == %player) {
|
|
%obj = %veh.getMountNodeObject(%num);
|
|
if(%obj) {
|
|
if (%obj.getType() & $TypeMasks::PlayerObjectType) {
|
|
%obj.getDataBlock().doDismount(%obj, 0, 1);
|
|
}
|
|
}
|
|
}
|
|
else if(%num == 5)
|
|
%player.getDataBlock().doDismount(%player, 0, 1);
|
|
}
|
|
|
|
function serverCmdCycleWeapon( %client, %data ) {
|
|
%veh = 0;
|
|
if (%client.player.station) {
|
|
if (%client.player.station.getDataBlock().getName() $= "StationVehicle")
|
|
%veh = 1;
|
|
}
|
|
if (%veh)
|
|
cycleVehicleHud(%client.player,%client,%data);
|
|
else
|
|
%client.getControlObject().cycleWeapon( %data );
|
|
}
|
|
|
|
function serverCmdStartThrowCount(%client, %data)
|
|
{
|
|
%client.player.throwStart = getSimTime();
|
|
}
|
|
|
|
function serverCmdEndThrowCount(%client, %data)
|
|
{
|
|
if(%client.player.throwStart == 0)
|
|
return;
|
|
|
|
// throwStrength will be how many seconds the key was held
|
|
%throwStrength = (getSimTime() - %client.player.throwStart) / 150;
|
|
// trim the time to fit between 0.5 and 1.5
|
|
if(%throwStrength > 1.5)
|
|
%throwStrength = 1.5;
|
|
else if(%throwStrength < 0.5)
|
|
%throwStrength = 0.5;
|
|
|
|
%throwScale = %throwStrength / 2;
|
|
%client.player.throwStrength = %throwScale;
|
|
|
|
%client.player.throwStart = 0;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
function ShapeBase::throwWeapon(%this)
|
|
{
|
|
if(Game.shapeThrowWeapon(%this)) {
|
|
%image = %this.getMountedImage($WeaponSlot);
|
|
%this.throw(%image.item);
|
|
%this.client.setWeaponsHudItem(%image.item, 0, 0);
|
|
}
|
|
}
|
|
|
|
function ShapeBase::throwPack(%this)
|
|
{
|
|
%image = %this.getMountedImage($BackpackSlot);
|
|
%this.throw(%image.item);
|
|
%this.client.setBackpackHudItem(%image.item, 0);
|
|
}
|
|
|
|
function ShapeBase::throw(%this,%data)
|
|
{
|
|
if(!isObject(%data))
|
|
return false;
|
|
|
|
if (%this.inv[%data.getName()] > 0) {
|
|
|
|
// save off the ammo count on this item
|
|
if( %this.getInventory( %data ) < $AmmoIncrement[%data.getName()] )
|
|
%data.ammoStore = %this.getInventory( %data );
|
|
else
|
|
%data.ammoStore = $AmmoIncrement[%data.getName()];
|
|
|
|
// Throw item first...
|
|
%this.throwItem(%data);
|
|
if($AmmoIncrement[%data.getName()] !$= "")
|
|
%this.decInventory(%data,$AmmoIncrement[%data.getName()]);
|
|
else
|
|
%this.decInventory(%data,1);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function ShapeBase::use(%this, %data) {
|
|
// if(%data.class $= "Weapon")
|
|
// error("ShapeBase::use " @ %data);
|
|
if(%data $= Grenade) {
|
|
// Weapon modes
|
|
|
|
//[most] 'ey lets do some unification here.. :D
|
|
if(%this.getMountedImage(0) && GetWord($weaponSettings1[%this.getMountedImage(0).getName()],0)) {
|
|
if (!(GetSimTime() > (%this.grenadeModeTime + 100)))
|
|
return;
|
|
%this.grenadeModeTime = getSimTime(); //not 'that' unified.. ;)
|
|
|
|
return %this.getMountedImage(0).ChangeMode(%this,1,2); //looksie.. 2 stands for weapons (level 1)
|
|
|
|
}
|
|
|
|
//[most]
|
|
|
|
|
|
|
|
//Begin Krypton Multi-tool
|
|
if (%this.getMountedImage(0).getname() $= "MultiToolImage")
|
|
{
|
|
%wepname = "Krypton Multi-Tool";
|
|
%this.multisubmode++;
|
|
if (%this.multisubmode > $WeaponSettings["MultiTool" @ %this.multimode])
|
|
%this.multisubmode = 0;
|
|
|
|
displaywepstat(%this.client,%wepname,$WeaponSetting["MultiTool",%this.multimode],$WeaponSetting["MultiTool" @ %this.multimode,%this.multisubmode],"Property of Krypton Construction");
|
|
|
|
serverPlay3D(BusterSwitchSound, %this.getTransform());
|
|
return;
|
|
}
|
|
//End Krypton Multi-tool
|
|
|
|
|
|
//start of modifier code
|
|
if (%this.getMountedImage(0).getname() $= "MergeToolImage")
|
|
{
|
|
%this.client.MTSubMode++;
|
|
if (%this.client.MTMode == 0 && %this.client.MTSubMode == 2)
|
|
%this.client.MTSubMode = 0;
|
|
if (%this.client.MTMode == 1 && %this.client.MTSubMode == 2)
|
|
%this.client.MTSubMode = 0;
|
|
if (%this.client.MTMode == 2 && %this.client.MTSubMode == 8)
|
|
%this.client.MTSubMode = 0;
|
|
|
|
MTShowStatus(%this.client);
|
|
return;
|
|
}
|
|
//end of modifier modes
|
|
|
|
//start of modifier code
|
|
if (%this.usingmodifier == 1 && getSimTime() > (%this.grenadeModeTime + 100) && %this.performing == 0) {
|
|
%this.grenadeModeTime = getSimTime();
|
|
%this.modifierMode2++;
|
|
if (%this.modifierMode2 > getword($WeaponSetting2["modifier",%this.modifierMode],0))
|
|
%this.modifierMode2 = 0;
|
|
if (%this.modifierMode ==2)
|
|
%line2 = getwords($packSetting["forcefield",%this.modifierMode2],5,19);
|
|
else if (%this.modifierMode ==1)
|
|
%line2 = getwords($WeaponSetting["modifier1",%this.modifierMode2],1,19);
|
|
else if (%this.modifierMode ==3)
|
|
%line2 = $WeaponSetting["modifier2",%this.modifierMode2];
|
|
else if (%this.modifierMode ==4)
|
|
%line2 = $WeaponSetting["modifier3",%this.modifierMode2];
|
|
else if (%this.modifierMode ==5)
|
|
%line2 = $WeaponSetting["modifier4",%this.modifierMode2];
|
|
else
|
|
%line2 = $WeaponSetting["modifier0",%this.modifierMode2];
|
|
%line1 = $WeaponSetting2["modifier",%this.modifierMode];
|
|
//bottomPrint(%this.client,"Modifier Tool ["@ %line1 @" ] set to" SPC %line2,2,1);
|
|
|
|
%wepname = "Modifier Tool";
|
|
//%mode1 = $WeaponSetting["modifier",%this.modifierMode];
|
|
//%mode2 = $WeaponSetting["modifier" @ %this.modifierMode,%this.modifierMode2];
|
|
displaywepstat(%this.client,%wepname,%line1,%line2);
|
|
return;
|
|
}
|
|
//end of modifier modes
|
|
|
|
if (%this.usingConstructionTool == 1 && getSimTime() > (%this.grenadeModeTime + 100) && %this.performing == 0) {
|
|
%this.grenadeModeTime = getSimTime();
|
|
%this.constructionToolMode2++;
|
|
if (%this.constructionToolMode == 0) { //Deconstruction Mode
|
|
if (%this.constructionToolMode2 == 2) //We have two modes...
|
|
%this.constructionToolMode2 = 0; //Cycle back around
|
|
//return;
|
|
}
|
|
else if (%this.constructionToolMode == 1) { //Rotation Mode
|
|
if (%this.constructionToolMode2 == 2) { //We have two modes...
|
|
%this.constructionToolMode2 = 0; //Cycle back around
|
|
//return;
|
|
}
|
|
}
|
|
else if (%this.constructionToolMode == 2) { //Advanced Rotation Mode
|
|
if (%this.constructionToolMode2 == 6) { //We have six modes...
|
|
%this.constructionToolMode2 = 0; //Cycle back around
|
|
//return;
|
|
}
|
|
}
|
|
else if (%this.constructionToolMode == 3) { //Power Management Mode
|
|
if (%this.constructionToolMode2 == 4) { //We have four modes...
|
|
%this.constructionToolMode2 = 0; //Cycle back around
|
|
//return;
|
|
}
|
|
}
|
|
%wepname = "Construction Tool";
|
|
%mode1 = $WeaponSetting["ConstructionTool",%this.constructionToolMode];
|
|
%mode2 = $WeaponSetting["ConstructionTool" @ %this.constructionToolMode,%this.constructionToolMode2];
|
|
displaywepstat(%this.client,%wepname,%mode1,%mode2);
|
|
return;
|
|
}
|
|
if (%this.usingSuperChaingun == 1) {
|
|
if (!(getSimTime() > (%this.grenadeModeTime + 100)))
|
|
return;
|
|
%this.grenadeModeTime = getSimTime();
|
|
if (%this.superChaingunMode == 1) {
|
|
if ($Ion::StopIon == 1) {
|
|
$Ion::StopIon = 0;
|
|
displaySCGStatus(%this);
|
|
return;
|
|
}
|
|
else {
|
|
$Ion::StopIon = 1;
|
|
displaySCGStatus(%this);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
// figure out which grenade type you're using
|
|
for(%x = 0; $InvGrenade[%x] !$= ""; %x++) {
|
|
if(%this.inv[$NameToInv[$InvGrenade[%x]]] > 0) {
|
|
%data = $NameToInv[$InvGrenade[%x]];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if(%data $= "Backpack") {
|
|
%pack = %this.getMountedImage($BackpackSlot);
|
|
// if you don't have a pack but have placed a satchel charge, detonate it
|
|
if(!%pack && (%this.thrownChargeId > 0) && %this.thrownChargeId.armed ) {
|
|
//if (!$Host::SatchelChargeEnabled) {
|
|
// if (isObject(%this.client)) {
|
|
// if ($Host::Purebuild == 1)
|
|
// messageAll('msgClient','\c2%1 just tried to detonate a Satchel Charge!',%this.client.name);
|
|
// else
|
|
// messageTeam(%this.client.team,'msgClient','\c2%1 just tried to detonate a Satchel Charge!',%this.client.name);
|
|
// %this.client.clearBackPackIcon();
|
|
// }
|
|
// %this.thrownChargeId.delete();
|
|
// %this.thrownChargeId = "0";
|
|
// return;
|
|
//}
|
|
//else {
|
|
%this.playAudio( 0, SatchelChargeExplosionSound );
|
|
schedule( 800, %this, "detonateSatchelCharge", %this );
|
|
return true;
|
|
//}
|
|
}
|
|
return false;
|
|
}
|
|
else if(%data $= Beacon) {
|
|
%data.onUse(%this);
|
|
if (%this.inv[%data.getName()] > 0)
|
|
return true;
|
|
}
|
|
// Pack modes
|
|
if (%data $= "RepairKit") {
|
|
if ($Host::ExpertMode == 1) { // Only use in Expert Mode
|
|
if (%this.hasForceField) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["forcefield"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["forcefield",%this.expertSet];
|
|
bottomPrint(%this.client,%line,2,1);
|
|
return;
|
|
}
|
|
//[most] Again using the unified plugin code. See item.cs for reference.
|
|
else if(%this.getMountedImage(2) && GetWord($packSettings[%this.getMountedImage(2).getName()],0)) {
|
|
%changed = %this.getMountedImage(2).ChangeMode(%this,1,1);
|
|
return "";
|
|
}
|
|
//[most]
|
|
else if (%this.hasGravField) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["gravfield"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["gravfield",%this.expertSet];
|
|
bottomPrint(%this.client,%line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasFloor) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["floor"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["floor",%this.expertSet];
|
|
bottomPrint(%this.client,"Floor set to" SPC %line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasBlast) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["blast"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["blast",%this.expertSet];
|
|
bottomPrint(%this.client,%line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasWalk) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["walk"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["walk",%this.expertSet];
|
|
bottomPrint(%this.client,%line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasMSpine) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["mspine"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["mspine",%this.expertSet];
|
|
bottomPrint(%this.client,%line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasSwitch) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["switch"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["switch",%this.expertSet];
|
|
bottomPrint(%this.client,%line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasTripwire) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["tripwire"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["tripwire",%this.expertSet];
|
|
bottomPrint(%this.client,%line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasTree) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["tree"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["tree",%this.expertSet];
|
|
bottomPrint(%this.client,"Tree set to " @ %line * 100 @ "% scale",2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasTele) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["telepad"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["telepad",%this.expertSet];
|
|
bottomPrint(%this.client,"Telepad set to " @ %line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasPermSphere) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["permsphere"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["permsphere",%this.expertSet];
|
|
bottomPrint(%this.client,"Permission Sphere Range set to " @ %line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasProxSwitch) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["proxswitch"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["proxswitch",%this.expertSet];
|
|
bottomPrint(%this.client,"Proximity Switch Mode set to " @ %line,2,1);
|
|
return;
|
|
}
|
|
else if (%this.hasDoor) {
|
|
%this.expertSet++;
|
|
if (%this.expertSet > $expertSettings["Door"])
|
|
%this.expertSet = 0;
|
|
%line = $expertSetting["Door",%this.expertSet];
|
|
bottomPrint(%this.client,"Door close timeout:" SPC %line,2,1);
|
|
return;
|
|
}
|
|
if (%this.getDamageLevel() != 0 && $Host::Purebuild == 1) {
|
|
%this.applyRepair(0.2);
|
|
messageClient(%this.client, 'MsgRepairKitUsed', '\c2Repair Kit Used.');
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
// Weapon modes
|
|
if (%data $= "Mine") {
|
|
|
|
//[most] 'ey lets do some more unification here.. :D
|
|
if(%this.getMountedImage(0) && GetWord($weaponSettings2[%this.getMountedImage(0).getName()],0)) {
|
|
if(!GetSimTime() > (%this.grenadeModeTime + 100))
|
|
return;
|
|
%this.grenadeModeTime = getSimTime(); //not 'that' unified.. ;)
|
|
|
|
return %this.getMountedImage(0).ChangeMode(%this,1,3); //looksie.. 3 stands for weapons (level 2)
|
|
}
|
|
|
|
//[most]
|
|
|
|
|
|
//Begin Krypton Multi-nade
|
|
if (%this.getMountedImage(0).getname() $= "GrenadeLauncherImage")
|
|
{
|
|
%this.multinademode++;
|
|
if (%this.multinademode > 2)
|
|
%this.multinademode =0;
|
|
|
|
if (%this.multinademode == 0)
|
|
displaywepstat(%this.client,"Krypton Multiple Grenade Launcher","","","Also known as the \"Multi-Nade\"\nSet to fire standard grenades.");
|
|
if (%this.multinademode == 1)
|
|
displaywepstat(%this.client,"Krypton Multiple Grenade Launcher","","","Also known as the \"Multi-Nade\"\nSet to fire concussion grenades.");
|
|
if (%this.multinademode == 2)
|
|
displaywepstat(%this.client,"Krypton Multiple Grenade Launcher","","","Also known as the \"Multi-Nade\"\nSet to fire smoke grenades.");
|
|
|
|
serverPlay3D(GrenadeSwitchSound, %this.getTransform());
|
|
}
|
|
//End Krypton Multi-nade
|
|
|
|
//Begin Krypton Multi-tool
|
|
if (%this.getMountedImage(0).getname() $= "MultiToolImage")
|
|
{
|
|
%wepname = "Krypton Multi-Tool";
|
|
%this.multimode++;
|
|
if (%this.multimode > 2)
|
|
%this.multimode = 1;
|
|
|
|
%this.multisubmode = 0;
|
|
|
|
displaywepstat(%this.client,%wepname,$WeaponSetting["MultiTool",%this.multimode],$WeaponSetting["MultiTool" @ %this.multimode,%this.multisubmode],"Property of Krypton Construction");
|
|
|
|
serverPlay3D(ConstructionToolSwitchSound, %this.getTransform());
|
|
}
|
|
//End Krypton Multi-tool
|
|
|
|
//modifier tool
|
|
if (%this.getMountedImage(0).getname() $= "MergeToolImage")
|
|
{
|
|
%this.client.MTMode++;
|
|
%this.client.MTSubMode = 0;
|
|
if (%this.client.MTMode >= 3)
|
|
%this.client.MTMode = 0;
|
|
|
|
MTShowStatus(%this.client);
|
|
return;
|
|
}
|
|
|
|
//end modifier tool
|
|
|
|
|
|
//modifier tool
|
|
if (%this.usingmodifier == 1 && getSimTime() > (%this.grenadeModeTime + 100) && %this.performing == 0) {
|
|
%this.grenadeModeTime = getSimTime();
|
|
%this.modifierMode++;
|
|
if (%this.modifierMode > $WeaponSettings2["modifier"])
|
|
%this.modifierMode = 0;
|
|
%line = $WeaponSetting2["modifier",%this.modifierMode];
|
|
//if (%this.modifierMode==5)
|
|
// %line = $WeaponSetting2["modifier",%this.modifierMode];
|
|
|
|
if (%this.modifierMode ==2)
|
|
%line2 = getwords($packSetting["forcefield",%this.modifierMode2],5,19);
|
|
else if (%this.modifierMode ==1)
|
|
%line2 = getwords($WeaponSetting["modifier1",%this.modifierMode2],1,19);
|
|
else if (%this.modifierMode ==3)
|
|
%line2 = $WeaponSetting["modifier2",%this.modifierMode2];
|
|
else if (%this.modifierMode ==4)
|
|
%line2 = $WeaponSetting["modifier3",%this.modifierMode2];
|
|
else if (%this.modifierMode ==5)
|
|
%line2 = $WeaponSetting["modifier4",%this.modifierMode2];
|
|
else
|
|
%line2 = $WeaponSetting["modifier0",%this.modifierMode2];
|
|
%line1 = $WeaponSetting2["modifier",%this.modifierMode];
|
|
//bottomPrint(%this.client,"Modifier Tool ["@ %line1 @" ] set to" SPC %line2,2,1);
|
|
|
|
%wepname = "Modifier Tool";
|
|
//%mode1 = $WeaponSetting["modifier",%this.modifierMode];
|
|
//%mode2 = $WeaponSetting["modifier" @ %this.modifierMode,%this.modifierMode2];
|
|
displaywepstat(%this.client,%wepname,%line1,%line2);
|
|
|
|
return; //return to the top
|
|
}
|
|
//end modifier tool
|
|
if (%this.usingConstructionTool == 1 && getSimTime() > (%this.mineModeTime + 100) && %this.performing == 0) {
|
|
%this.mineModeTime = getSimTime();
|
|
%this.constructionToolMode++;
|
|
if (%this.constructionToolMode == 4) { //Four modes...
|
|
%this.constructionToolMode = 0;
|
|
}
|
|
%this.constructionToolMode2 = 0;
|
|
%wepname = "Construction Tool";
|
|
%mode1 = $WeaponSetting["ConstructionTool",%this.constructionToolMode];
|
|
%mode2 = $WeaponSetting["ConstructionTool" @ %this.constructionToolMode,%this.constructionToolMode2];
|
|
displaywepstat(%this.client,%wepname,%mode1,%mode2);
|
|
return;
|
|
}
|
|
if (%this.usingSuperChaingun == 1) {
|
|
if (!(getSimTime() > (%this.mineModeTime + 100)))
|
|
return;
|
|
%this.mineModeTime = getSimTime();
|
|
%this.superChaingunMode++;
|
|
if (%this.superChaingunMode > 6 - (5 * $host::nopulseSCG)) {
|
|
%this.superChaingunMode = 0;
|
|
}
|
|
displaySCGStatus(%this);
|
|
%this.superChaingunMode2 = 0;
|
|
return;
|
|
}
|
|
}
|
|
// default case
|
|
if (isObject(%data)) {
|
|
if (%this.inv[%data.getName()] > 0) {
|
|
%data.onUse(%this);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function ShapeBase::pickup(%this,%obj,%amount) {
|
|
%data = %obj.getDatablock();
|
|
%delta = %this.incInventory(%data,%amount);
|
|
|
|
if (%delta)
|
|
%data.onPickup(%obj,%this,%delta);
|
|
return %delta;
|
|
}
|
|
|
|
function ShapeBase::hasInventory(%this, %data)
|
|
{
|
|
// changed because it was preventing weapons cycling correctly (MES)
|
|
return (%this.inv[%data] > 0);
|
|
}
|
|
|
|
function ShapeBase::maxInventory(%this,%data) {
|
|
if($TestCheats && %this.getDatablock().max[%data.getName()] !$= "")
|
|
return 999;
|
|
else
|
|
return %this.getDatablock().max[%data.getName()];
|
|
}
|
|
|
|
function ShapeBase::incInventory(%this,%data,%amount) {
|
|
%max = %this.maxInventory(%data);
|
|
%cv = %this.inv[%data.getName()];
|
|
if (%cv < %max) {
|
|
if (%cv + %amount > %max)
|
|
%amount = %max - %cv;
|
|
%this.setInventory(%data,%cv + %amount);
|
|
%data.incCatagory(%this); // Inc the players weapon count
|
|
return %amount;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function ShapeBase::decInventory(%this,%data,%amount)
|
|
{
|
|
%name = %data.getName();
|
|
%cv = %this.inv[%name];
|
|
if (%cv > 0) {
|
|
if (%cv < %amount)
|
|
%amount = %cv;
|
|
%this.setInventory(%data,%cv - %amount, true);
|
|
%data.decCatagory(%this); // Dec the players weapon count
|
|
return %amount;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function SimObject::decCatagory(%this)
|
|
{
|
|
//function was added to reduce console err msg spam
|
|
}
|
|
|
|
function SimObject::incCatagory(%this)
|
|
{
|
|
//function was added to reduce console err msg spam
|
|
}
|
|
|
|
function ShapeBase::setInventory(%this,%data,%value,%force)
|
|
{
|
|
if (!isObject(%data))
|
|
return;
|
|
|
|
%name = %data.getName();
|
|
if (%value < 0)
|
|
%value = 0;
|
|
else
|
|
{
|
|
if (!%force)
|
|
{
|
|
// Impose inventory limits
|
|
%max = %this.maxInventory(%data);
|
|
if (%value > %max)
|
|
%value = %max;
|
|
}
|
|
}
|
|
if (%this.inv[%name] != %value)
|
|
{
|
|
%this.inv[%name] = %value;
|
|
%data.onInventory(%this,%value);
|
|
|
|
if ( %data.className $= "Weapon" )
|
|
{
|
|
if ( %this.weaponSlotCount $= "" )
|
|
%this.weaponSlotCount = 0;
|
|
|
|
%cur = -1;
|
|
for ( %slot = 0; %slot < %this.weaponSlotCount; %slot++ )
|
|
{
|
|
if ( %this.weaponSlot[%slot] $= %name )
|
|
{
|
|
%cur = %slot;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( %cur == -1 )
|
|
{
|
|
// Put this weapon in the next weapon slot:
|
|
if ( %this.weaponSlot[%this.weaponSlotCount - 1] $= "TargetingLaser" )
|
|
{
|
|
%this.weaponSlot[%this.weaponSlotCount - 1] = %name;
|
|
%this.weaponSlot[%this.weaponSlotCount] = "TargetingLaser";
|
|
}
|
|
else
|
|
%this.weaponSlot[%this.weaponSlotCount] = %name;
|
|
%this.weaponSlotCount++;
|
|
}
|
|
else
|
|
{
|
|
// Remove the weapon from the weapon slot:
|
|
for ( %i = %cur; %i < %this.weaponSlotCount - 1; %i++ )
|
|
%this.weaponSlot[%i] = %this.weaponSlot[%i + 1];
|
|
%this.weaponSlot[%i] = "";
|
|
%this.weaponSlotCount--;
|
|
}
|
|
}
|
|
|
|
%this.getDataBlock().onInventory(%data,%value);
|
|
}
|
|
return %value;
|
|
}
|
|
|
|
function ShapeBase::getInventory(%this,%data)
|
|
{
|
|
if ( isObject( %data ) )
|
|
return( %this.inv[%data.getName()] );
|
|
else
|
|
return( 0 );
|
|
}
|
|
|
|
// z0dd - ZOD, 9/13/02. Streamlined.
|
|
function ShapeBase::hasAmmo( %this, %weapon )
|
|
{
|
|
if(%weapon $= LaserRifle)
|
|
return( %this.getInventory( EnergyPack ) );
|
|
|
|
if (%weapon.image.ammo $= "")
|
|
{
|
|
if (%weapon $= TargetingLaser)
|
|
{
|
|
return( false );
|
|
}
|
|
else
|
|
{
|
|
return( true );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return( %this.getInventory( %weapon.image.ammo ) > 0 );
|
|
}
|
|
}
|
|
|
|
function SimObject::onInventory(%this, %obj)
|
|
{
|
|
//function was added to reduce console error msg spam
|
|
}
|
|
|
|
function ShapeBase::throwItem(%this,%data)
|
|
{
|
|
%item = new Item() {
|
|
dataBlock = %data;
|
|
rotation = "0 0 1 " @ (getRandom() * 360);
|
|
};
|
|
|
|
%item.ammoStore = %data.ammoStore;
|
|
MissionCleanup.add(%item);
|
|
%this.throwObject(%item);
|
|
}
|
|
|
|
function ShapeBase::throwObject(%this,%obj)
|
|
{
|
|
//-------------------------------------------
|
|
// z0dd - ZOD, 5/27/02. Fixes flags hovering
|
|
// over friendly player when collision occurs
|
|
if(%obj.getDataBlock().getName() $= "Flag")
|
|
%obj.static = false;
|
|
//-------------------------------------------
|
|
|
|
//if the object is being thrown by a corpse, use a random vector
|
|
if (%this.getState() $= "Dead")
|
|
{
|
|
%vec = (-1.0 + getRandom() * 2.0) SPC (-1.0 + getRandom() * 2.0) SPC getRandom();
|
|
%vec = vectorScale(%vec, 10);
|
|
}
|
|
|
|
// else Initial vel based on the dir the player is looking
|
|
else
|
|
{
|
|
%eye = %this.getEyeVector();
|
|
%vec = vectorScale(%eye, 20);
|
|
}
|
|
|
|
// Add a vertical component to give the item a better arc
|
|
%dot = vectorDot("0 0 1",%eye);
|
|
if (%dot < 0)
|
|
%dot = -%dot;
|
|
%vec = vectorAdd(%vec,vectorScale("0 0 8",1 - %dot));
|
|
|
|
// Add player's velocity
|
|
%vec = vectorAdd(%vec,%this.getVelocity());
|
|
%pos = getBoxCenter(%this.getWorldBox());
|
|
|
|
//since flags have a huge mass (so when you shoot them, they don't bounce too far)
|
|
//we need to up the %vec so that you can still throw them...
|
|
if (%obj.getDataBlock().getName() $= "Flag")
|
|
%vec = vectorScale(%vec, 1);
|
|
|
|
//
|
|
%obj.setTransform(%pos);
|
|
%obj.applyImpulse(%pos,%vec);
|
|
%obj.setCollisionTimeout(%this);
|
|
%data = %obj.getDatablock();
|
|
%data.onThrow(%obj,%this);
|
|
|
|
//call the AI hook
|
|
AIThrowObject(%obj);
|
|
}
|
|
|
|
function ShapeBase::clearInventory(%this)
|
|
{
|
|
%this.setInventory(RepairKit,0);
|
|
|
|
%this.setInventory(Mine,0);
|
|
//%this.setInventory(MineAir,0);
|
|
//%this.setInventory(MineLand,0);
|
|
//%this.setInventory(MineSticky,0);
|
|
%this.setInventory(ConstructionTool,0);
|
|
%this.setInventory(Grenade,0);
|
|
%this.setInventory(FlashGrenade,0);
|
|
%this.setInventory(ConcussionGrenade,0);
|
|
%this.setInventory(FlareGrenade,0);
|
|
%this.setInventory(CameraGrenade, 0);
|
|
|
|
%this.setInventory(Blaster,0);
|
|
%this.setInventory(Plasma,0);
|
|
%this.setInventory(Disc,0);
|
|
%this.setInventory(Chaingun, 0);
|
|
%this.setInventory(Mortar, 0);
|
|
%this.setInventory(GrenadeLauncher, 0);
|
|
%this.setInventory(MissileLauncher, 0);
|
|
%this.setInventory(SniperRifle, 0);
|
|
%this.setInventory(TargetingLaser, 0);
|
|
%this.setInventory(ELFGun, 0);
|
|
%this.setInventory(ShockLance, 0);
|
|
|
|
%this.setInventory(PlasmaAmmo,0);
|
|
%this.setInventory(ChaingunAmmo, 0);
|
|
%this.setInventory(DiscAmmo, 0);
|
|
%this.setInventory(GrenadeLauncherAmmo, 0);
|
|
%this.setInventory(MissileLauncherAmmo, 0);
|
|
%this.setInventory(MortarAmmo, 0);
|
|
%this.setInventory(Beacon, 0);
|
|
|
|
%this.setInventory(NerfGun, 0);
|
|
%this.setInventory(NerfBallLauncher, 0);
|
|
%this.setInventory(NerfBallLauncherAmmo, 0);
|
|
%this.setInventory(SuperChaingun, 0);
|
|
%this.setInventory(SuperChaingunAmmo, 0);
|
|
%this.setInventory(MergeTool,0);
|
|
%this.setInventory(ModTool,0);
|
|
%this.setInventory(Shotgun,0);
|
|
%this.setInventory(ShotgunAmmo,0);
|
|
%this.setInventory(ConcGrenadeLauncher,0);
|
|
%this.setInventory(ConcGrenadeLauncherAmmo,0);
|
|
|
|
%this.setInventory(TractorGun, 0);
|
|
%this.setInventory(TransGun, 0);
|
|
|
|
%this.setInventory(MiniAA, 0);
|
|
%this.setInventory(SmokeGrenadeLauncher, 0);
|
|
%this.setInventory(SmokeGrenadeLauncherAmmo, 0);
|
|
%this.setInventory(Assault, 0);
|
|
%this.setInventory(AssaultAmmo,0);
|
|
%this.setInventory(Buster, 0);
|
|
%this.setInventory(BusterAmmo,0);
|
|
%this.setInventory(MultiTool,0);
|
|
%this.setInventory(Photon,0);
|
|
%this.setInventory(PhotonAmmo,0);
|
|
|
|
// take away any pack the player has
|
|
%curPack = %this.getMountedImage($BackpackSlot);
|
|
if(%curPack > 0)
|
|
%this.setInventory(%curPack.item, 0);
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
function ShapeBase::cycleWeapon( %this, %data )
|
|
{
|
|
if ( %this.weaponSlotCount == 0 )
|
|
return;
|
|
|
|
%slot = -1;
|
|
if ( %this.getMountedImage($WeaponSlot) != 0 )
|
|
{
|
|
%curWeapon = %this.getMountedImage($WeaponSlot).item.getName();
|
|
for ( %i = 0; %i < %this.weaponSlotCount; %i++ )
|
|
{
|
|
//error("curWeaponName == " @ %curWeaponName);
|
|
if ( %curWeapon $= %this.weaponSlot[%i] )
|
|
{
|
|
%slot = %i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( %data $= "prev" )
|
|
{
|
|
// Previous weapon...
|
|
if ( %slot == 0 || %slot == -1 )
|
|
{
|
|
%i = %this.weaponSlotCount - 1;
|
|
%slot = 0;
|
|
}
|
|
else
|
|
%i = %slot - 1;
|
|
}
|
|
else
|
|
{
|
|
// Next weapon...
|
|
if ( %slot == ( %this.weaponSlotCount - 1 ) || %slot == -1 )
|
|
{
|
|
%i = 0;
|
|
%slot = ( %this.weaponSlotCount - 1 );
|
|
}
|
|
else
|
|
%i = %slot + 1;
|
|
}
|
|
|
|
%newSlot = -1;
|
|
while ( %i != %slot )
|
|
{
|
|
if ( %this.weaponSlot[%i] !$= ""
|
|
&& %this.hasInventory( %this.weaponSlot[%i] )
|
|
&& %this.hasAmmo( %this.weaponSlot[%i] ) )
|
|
{
|
|
// player has this weapon and it has ammo or doesn't need ammo
|
|
%newSlot = %i;
|
|
break;
|
|
}
|
|
|
|
if ( %data $= "prev" )
|
|
{
|
|
if ( %i == 0 )
|
|
%i = %this.weaponSlotCount - 1;
|
|
else
|
|
%i--;
|
|
}
|
|
else
|
|
{
|
|
if ( %i == ( %this.weaponSlotCount - 1 ) )
|
|
%i = 0;
|
|
else
|
|
%i++;
|
|
}
|
|
}
|
|
|
|
if ( %newSlot != -1 )
|
|
%this.use( %this.weaponSlot[%newSlot] );
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
function ShapeBase::selectWeaponSlot( %this, %data )
|
|
{
|
|
if ( %data < 0 || %data > %this.weaponSlotCount
|
|
|| %this.weaponSlot[%data] $= "" || %this.weaponSlot[%data] $= "TargetingLaser" )
|
|
return;
|
|
|
|
%this.use( %this.weaponSlot[%data] );
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
function serverCmdGiveAll(%client)
|
|
{
|
|
if($TestCheats)
|
|
{
|
|
%player = %client.player;
|
|
%player.setInventory(RepairKit,999);
|
|
%player.setInventory(Mine,999);
|
|
//%player.setInventory(MineAir,999);
|
|
//%player.setInventory(MineLand,999);
|
|
//%player.setInventory(MineSticky,999);
|
|
%player.setInventory(Grenade,999);
|
|
%player.setInventory(FlashGrenade,999);
|
|
%player.setInventory(FlareGrenade,999);
|
|
%player.setInventory(ConcussionGrenade,999);
|
|
%player.setInventory(CameraGrenade, 999);
|
|
%player.setInventory(Blaster,1);
|
|
%player.setInventory(Plasma,1);
|
|
%player.setInventory(Chaingun, 1);
|
|
%player.setInventory(Disc,1);
|
|
%player.setInventory(GrenadeLauncher, 1);
|
|
%player.setInventory(SniperRifle, 1);
|
|
%player.setInventory(ELFGun, 1);
|
|
%player.setInventory(Mortar, 1);
|
|
%player.setInventory(MissileLauncher, 1);
|
|
%player.setInventory(ShockLance, 1);
|
|
%player.setInventory(TargetingLaser, 1);
|
|
%player.setInventory(MissileLauncherAmmo, 999);
|
|
%player.setInventory(GrenadeLauncherAmmo, 999);
|
|
%player.setInventory(MortarAmmo, 999);
|
|
%player.setInventory(PlasmaAmmo,999);
|
|
%player.setInventory(ChaingunAmmo, 999);
|
|
%player.setInventory(DiscAmmo, 999);
|
|
%player.setInventory(Beacon, 999);
|
|
|
|
%player.setInventory(NerfGun,1);
|
|
%player.setInventory(NerfBallLauncher,1);
|
|
%player.setInventory(NerfBallLauncherAmmo,999);
|
|
%player.setInventory(MergeTool,1);
|
|
%player.setInventory(ModTool,1);
|
|
%player.setInventory(Shotgun,1);
|
|
%player.setInventory(ShotgunAmmo,999);
|
|
%player.setInventory(ConcGrenadeLauncher,1);
|
|
%player.setInventory(ConcGrenadeLauncherAmmo,999);
|
|
%player.setInventory(MiniAA, 0);
|
|
|
|
%player.setInventory(TractorGun, 1);
|
|
%player.setInventory(TransGun, 1);
|
|
%player.setInventory(SmokeGrenadeLauncher, 1);
|
|
%player.setInventory(SmokeGrenadeLauncherAmmo, 999);
|
|
|
|
%player.setInventory(Assault, 1);
|
|
%player.setInventory(AssaultAmmo, 999);
|
|
%player.setInventory(Buster, 1);
|
|
%player.setInventory(BusterAmmo, 999);
|
|
%player.setInventory(MultiTool, 1);
|
|
%player.setInventory(Photon,1);
|
|
%player.setInventory(PhotonAmmo,999);
|
|
}
|
|
}
|