GiMMLi's
Scripting Tutorials
|
|
Adding
a Turret!!!!!!!!!
_______________________
//-------------In turret.cs
//--------------------------------------------
TurretData DeployableTurret
{
className = "Turret";
shapeFile = "remoteturret";
projectileType = MiniFusionBolt;
maxDamage = 0.65;
maxEnergy = 60;
minGunEnergy = 6;
maxGunEnergy = 5;
sequenceSound[0] = { "deploy",
SoundActivateMotionSensor };
reloadDelay = 0.4;
speed = 4.0;
speedModifier = 1.5;
range = 30;
visibleToSensor = true;
shadowDetailMask = 4;
dopplerVelocity = 0;
castLOS = true;
supression = false;
mapFilter = 2;
mapIcon = "M_turret";
debrisId = flashDebrisMedium;
shieldShapeName = "shield";
fireSound = SoundRemoteTurretFire;
activationSound = SoundRemoteTurretOn;
deactivateSound = SoundRemoteTurretOff;
explosionId = flashExpMedium;
description = "Remote Turret";
damageSkinData =
"objectDamageSkins";
};
function DeployableTurret::onAdd(%this)
{
schedule("DeployableTurret::deploy("
@ %this @ ");",1,%this);
GameBase::setRechargeRate(%this,5);
%this.shieldStrength = 0;
if (GameBase::getMapName(%this) ==
"") {
GameBase::setMapName (%this, "Remote
Turret");
}
}
function DeployableTurret::deploy(%this)
{
GameBase::playSequence(%this,1,"deploy");
}
function
DeployableTurret::onEndSequence(%this,%thread)
{
GameBase::setActive(%this,true);
}
function
DeployableTurret::onDestroyed(%this)
{
Turret::onDestroyed(%this);
$TeamItemCount[GameBase::getTeam(%this) @
"TurretPack"]--;
}
// Override base class just in case.
function
DeployableTurret::onPower(%this,%power,%generator)
{}
function
DeployableTurret::onEnabled(%this)
{
GameBase::setRechargeRate(%this,5);
GameBase::setActive(%this,true);
}
//--------In station.cs
$InvList[TurretPack] = 1;
$RemoteInvList[TurretPack] = 1;
//------In armor.cs----//--The #'s are 0
depending on who owns them!
//----Remember only a 1 should be marked
for packsfor whatever armor is
//-----using this item
$ItemMax[larmor, TurretPack] = 0;
$ItemMax[marmor, TurretPack] = 0;
$ItemMax[harmor, TurretPack] = 0;
$ItemMax[lfemale, TurretPack] = 0;
$ItemMax[mfemale, TurretPack] = 0;
//--------In player.cs---To make the
turret usable in command station!
//---Find this line--
//----if(%name != CameraTurret &&
%name != DeployableTurret)
//----to add just add something for
example along the lines of ex:
//---deployableRock
if(%name != CameraTurret && %name
!= DeployableTurret && %name !=
DeployableRock)
//------In Item.cs-----
$TeamItemMax[TurretPack] = 10; //--Max
amount used at once
//----------------------------------------------------------------------------
ItemImageData TurretPackImage
{
shapeFile = "remoteturret";
mountPoint = 2;
mountOffset = { 0, -0.12, -0.1 };
mountRotation = { 0, 0, 0 };
mass = 2.5;
firstPerson = false;
};
ItemData TurretPack
{
description = "Turret";
shapeFile = "remoteturret";
className = "Backpack";
heading = "dDeployables";
imageType = TurretPackImage;
shadowDetailMask = 4;
mass = 2.0;
elasticity = 0.2;
price = 350;
hudIcon = "deployable";
showWeaponBar = true;
hiliteOnActive = true;
};
function TurretPack::onUse(%player,%item)
{
if
(Player::getMountedItem(%player,$BackpackSlot)
!= %item) {
Player::mountItem(%player,%item,$BackpackSlot);
}
else {
Player::deployItem(%player,%item);
}
}
function
TurretPack::onDeploy(%player,%item,%pos)
{
if
(TurretPack::deployShape(%player,%item))
{
Player::decItemCount(%player,%item);
}
}
function CountObjects(%set,%name,%num)
{
%count = 0;
for(%i=0;%i<%num;%i++) {
%obj=Group::getObject(%set,%i);
if(GameBase::getDataName(Group::getObject(%set,%i))
== %name)
%count++;
}
return %count;
}
function
TurretPack::deployShape(%player,%item)
{
%client = Player::getClient(%player);
if($TeamItemCount[GameBase::getTeam(%player)
@ %item] <
$TeamItemMax[%item]) {
if (GameBase::getLOSInfo(%player,3)) {
%obj = getObjectType($los::object);
if (%obj == "SimTerrain" ||
%obj == "InteriorShape") {
%set = newObject("set",SimSet);
%num =
containerBoxFillSet(%set,$StaticObjectType,$los::position,$TurretBoxMaxLength,$Turre
tBoxMaxWidth,$TurretBoxMaxHeight,0);
%num =
CountObjects(%set,"DeployableTurret",%num);
deleteObject(%set);
if($MaxNumTurretsInBox > %num) {
%set = newObject("set",SimSet);
%num =
containerBoxFillSet(%set,$StaticObjectType,$los::position,$TurretBoxMinLength,$Turret
BoxMinWidth,$TurretBoxMinHeight,0);
%num =
CountObjects(%set,"DeployableTurret",%num);
deleteObject(%set);
if(0 == %num) {
if (Vector::dot($los::normal,"0 0
1") > 0.7) {
if(checkDeployArea(%client,$los::position))
{
%rot = GameBase::getRotation(%player);
%turret =
newObject("remoteTurret","Turret",DeployableTurret,true);
addToSet("MissionCleanup",
%turret);
GameBase::setTeam(%turret,GameBase::getTeam(%player));
GameBase::setPosition(%turret,$los::position);
GameBase::setRotation(%turret,%rot);
Gamebase::setMapName(%turret,"RMT
Turret#" @ $totalNumTurrets++ @
" " @
Client::getName(%client));
Client::sendMessage(%client,0,"Remote
Turret
deployed");
playSound(SoundPickupBackpack,$los::position);
$TeamItemCount[GameBase::getTeam(%player)
@ "TurretPack"]++;
echo("MSG: ",%client,"
deployed a Remote
Turret");
// Remote turrets - kill points to player
that
deploy them
// Client::setOwnedObject(%client,
%turret);
// Client::setOwnedObject(%client,
%player);
return true;
}
}
else
Client::sendMessage(%client,0,"Can
only deploy on
flat surfaces");
}
else
Client::sendMessage(%client,0,"Frequency
Overload -
Too close to other remote turrets");
}
else
Client::sendMessage(%client,0,"Interference
from other remote
turrets in the area");
}
else
Client::sendMessage(%client,0,"Can
only deploy on terrain or
buildings");
}
else
Client::sendMessage(%client,0,"Deploy
position out of range");
}
else
Client::sendMessage(%client,0,"Deployable
Item limit reached for " @
%item.description @ "s");
return false;
}
function checkDeployArea(%client,%pos)
{
%set=newObject("set",SimSet);
%num=containerBoxFillSet(%set,$StaticObjectType
| $ItemObjectType |
$SimPlayerObjectType,%pos,1,1,1,1);
if(!%num) {
deleteObject(%set);
return 1;
}
else if(%num == 1 &&
getObjectType(Group::getObject(%set,0))
== "Player") {
%obj = Group::getObject(%set,0);
if(Player::getClient(%obj) == %client)
Client::sendMessage(%client,0,"Unable
to deploy - You're in the way");
else
Client::sendMessage(%client,0,"Unable
to deploy - Player in the way");
}
else
Client::sendMessage(%client,0,"Unable
to deploy - Item in the way");
deleteObject(%set);
return 0;
}
//--------------------------------------------------------------------- |
The
Realm is owned and maintained by {FA}GiMMLi J (c)1999
The
Realm's {FA}Demon logo is sole property of
GiMMLi's Realm any duplication or modifications
of this trade mark are Strictly prohibited.
Violators will be prosecuted!
Tribes
is a trademark of the Dynamix and Sierra Co.
|