Author Topic: Weapon mount-on-back help  (Read 720 times)

Ok so I have been trying to get this to work with my code for a long time. I was able to do it a while ago with a couple of my weapons that were just basic melee weapons. Now that I have more complex and function-infested weapons, this seems not to work anymore for some reason. By studying my code I have come to the conclusion that you cannot have multiple packages in a single .cs file. Is there any way I can keep my current package but also have the mount-on-back work? I am using GCatFirearm's code for the mount-on-back. Here is the code:

Code: [Select]
//### Mount on player

datablock ShapeBaseImageData(gc_FamasBackImage)
{
  shapeFile = "./famas.dts";
  emap = true;
  mountPoint = $BackSlot;
  offset = "0 -0.35 -0.3";
  eyeOffset = "0 0 10";
  rotation = eulerToMatrix("75 0 90");
  armReady = false;
  doColorShift = false;
};

function gc_FamasImage::onMount(%this,%obj,%slot)
{
  parent::onMount(%this,%obj,%slot);
  if(%obj.getMountedImage(1).getName() $= "gc_FamasBackImage") { %obj.unMountImage(1); }
}

function gc_FamasImage::onUnMount(%this,%obj,%slot)
{
  parent::onUnMount(%this,%obj,%slot);
  %obj.unMountImage(1);
  %obj.mountImage(gc_FamasBackImage,1);
}

function gc_FamasItem::onPickup(%this,%obj,%col,%a)
{
  for(%i=0;%i<%col.getdatablock().maxTools;%i++)
  {
    %item = %col.tool[%i];
    if(%item $= 0 || %item $= "")
    {
      %freeSlot = 1;
      break;
    }
  }
  if(%obj.canpickup && !isobject(%col.getmountedimage(1)) && %freeSlot) { %col.mountimage(gc_FamasBackImage,1); }
  parent::onPickup(%this,%obj,%col,%a);
}

package gc_FamasPackage
{
  function servercmdDropTool(%this,%slot)
  {
    if(isobject(%this.player.tool[%slot]) && %this.player.tool[%slot].getname() $= "gc_FamasItem")
    {
      parent::servercmdDropTool(%this,%slot);
      if(isobject(%this.player.getmountedimage(1)) && %this.player.getmountedimage(1).getname() $= "gc_FamasBackImage") { %this.player.schedule(5,unmountimage,1); }
      return;
    }
    parent::servercmdDropTool(%this,%slot);
  }
};
activatepackage(gc_FamasPackage);

Notice how the last function starts a package. I tried integrating this with my code without the additional package information in this code, but it wouldn't work. Here is my package in one of my weapons (Which is much larger):

Code: [Select]
;}package HK

{

function HKProjectile::damage(%this,%obj,%col,%fade,%pos,%normal)
{
   if(%this.directDamage <= 0)
      return;

   %damageType = $DamageType::Direct;
   if(%this.DirectDamageType)
      %damageType = %this.DirectDamageType;

   %scale = getWord(%obj.getScale(), 2);
   %directDamage = 30;
   %damage = %directDamage;

   %sobj = %obj.sourceObject;
   if(%sobj.getType() & $TypeMasks::PlayerObjectType)
   {
      if(isObject(%sobj.client))
         %sobj.client.play2d(bulletHitSound);
   }
   
   if(%col.getType() & $TypeMasks::PlayerObjectType)
   {
      %colscale = getWord(%col.getScale(),2);
      if(getword(%pos, 2) > getword(%col.getWorldBoxCenter(), 2) - 3.3*%colscale)
      {
         %directDamage = %directDamage * 2;
         %damageType = $DamageType::HKHeadshot;
         
         %col.spawnExplosion(critProjectile,%colscale);
         if(isObject(%col.client))
            %col.client.play2d(critRecieveSound);
         
         if(%sobj.getType() & $TypeMasks::PlayerObjectType)
         {
            serverplay3d(critFireSound,%sobj.getHackPosition());
            if(isObject(%sobj.client))
               %sobj.client.play2d(critHitSound);
         }
      }
     
      %col.damage(%obj, %pos, %directDamage, %damageType);
   }
   else
   {
      %col.damage(%obj, %pos, %directDamage, %damageType);
   }
}

function HKWeakProjectile::damage(%this,%obj,%col,%fade,%pos,%normal)
{
   if(%this.directDamage <= 0)
      return;

   %damageType = $DamageType::Direct;
   if(%this.DirectDamageType)
      %damageType = %this.DirectDamageType;

   %scale = getWord(%obj.getScale(), 2);
   %directDamage = 7.5;
   %damage = %directDamage;

   %sobj = %obj.sourceObject;
   if(%sobj.getType() & $TypeMasks::PlayerObjectType)
   {
      if(isObject(%sobj.client))
         %sobj.client.play2d(bulletHitSound);
   }
   
   if(%col.getType() & $TypeMasks::PlayerObjectType)
   {
      %colscale = getWord(%col.getScale(),2);
      if(getword(%pos, 2) > getword(%col.getWorldBoxCenter(), 2) - 3.3*%colscale)
      {
         %directDamage = %directDamage * 2;
         %damageType = $DamageType::HKHeadshot;
         
         %col.spawnExplosion(critProjectile,%colscale);
         if(isObject(%col.client))
            %col.client.play2d(critRecieveSound);
         
         if(%sobj.getType() & $TypeMasks::PlayerObjectType)
         {
            serverplay3d(critFireSound,%sobj.getHackPosition());
            if(isObject(%sobj.client))
               %sobj.client.play2d(critHitSound);
         }
      }
     
      %col.damage(%obj, %pos, %directDamage, %damageType);
   }
   else
   {
      %col.damage(%obj, %pos, %directDamage, %damageType);
   }
}

function GameConnection::onDeath(%this,%killerPlayer,%killer,%damageType,%damageLoc)

{
%this.player.client.setControlCameraFov(90);

parent::onDeath(%this,%killerPlayer,%killer,%damageType,%damageLoc);

}

function Player::pickUp(%this,%item)

{
%data=%item.dataBlock;
%mag=%item.mag;
%status=parent::pickUp(%this,%item);

if(!%status==1)

{
return %status;}
%slot=-1;

for(%i=0;%i<%this.dataBlock.maxTools;%i++)


if(isObject(%this.tool[%i])&&%this.tool[%i].getID()==%data.getID()){%slot=%i;break;
}

if(%slot == -1)

{
return %val;

}
if(%mag $= "")

{
%this.toolMag[%slot]=%data.HKmaxmag;

}
else%this.toolMag[%slot]=%mag;

}
function serverCmdDropTool(%client,%slot)

{
if(!isObject(%client.player))

{
return parent::serverCmdDropTool(%client,%slot);

}
$weaponMag=%client.player.toolMag[%client.player.currTool];

%client.player.toolMag[%client.player.currTool]="";

return parent::serverCmdDropTool(%client,%slot);

}
function ItemData::onAdd(%this,%obj){if($weaponMag!$="")

{
%obj.mag=$weaponMag;$weaponMag="";

}
parent::onAdd(%this,%obj);

}
function serverCmdLight(%client)

{
%player=%client.player;

%image=%player.getMountedImage(0);

if(%image.item.HKreload)

{
if(%player.getImageState(0)$="Ready"||%player.getImageState(0)$="Empty")

{
if(%player.toolMag[%player.currTool]<%image.item.HKmaxmag)

{
%player.setImageAmmo(0,0);

%player.Schedule(50,setImageAmmo,0,1);

}
else{parent::serverCmdLight(%client);

}
}
return;}parent::serverCmdLight(%client);

}
}
;activatePackage(HK);

What should my plan of action be here? Anyone with experienced coding knowledge can you help me understand what to do. Should I make a new .cs file and add the package into there? Should there be some manipulation in this code so it can fit and work properly? Anything I am willing to try please post below.

I made a second .cs file named "weaponbackmount.cs" and it worked. I'll keep this open so I can have an answer as to if you cannot have multiple packages in one .cs.

Please learn to indent your code properly

As long as I can read it I'm relaxed.

As long as only you can read it, nobody can help you