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:
//### 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):
;}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.