Currently I'm planning the next level for Behind Enemy Lines. Since the player has to do part of the level with a sniper rifle, a little preliminary work had to be done. So, Here's my way to tackle this topic with the Addon "FPS Weapon Pack":
The tutorial from tipforeveryone was very helpful to me. You can find it here
i downloaded a Scope frome here :http://www.cadnav.com/3d-models/model-36647.html
and put it as a child to the "vwep m4" and saved it as a prefab "vwep m4_sniper"
it should be look like this
Now you have to ajust the scope
But for the scope script to work, an empty script must be inserted in the following places. Thanks to Macklebee for this hint!
Now you have to change 2 scripts
this script i saved under "FPSGun_Sniper.lua"
then this video helps a lot :https://www.youtube.com/watch?time_continue=628&v=3OqwQSP-2FU
thanks to BluHornet
place this in your fpsgun_sniper.lua
Script.offsetNor=Vec3(0,0,0) Script.offsetADS=Vec3(0,0,0)--Vec3 "Offset ADS"
the next line put after the function Script:Start()
self.offsetNor = self.offset self.hasZoom=true
self.hasZoom=true (or false) has been inserted because the ironsight will be active in every weapon, but at Grenade or something else i did not want this.
Since I have difficulty with the sway of the weapon and I have no solution for it currently, I commented under function Script: Draw () the following lines out:
--self.swayspeed = Math:Curve(speed,self.swayspeed,20) --self.swayspeed = math.max(0.5,self.swayspeed) --self.amplitude = math.max(2,Math:Curve(speed,self.amplitude,20))
now its time to change the fpsplayer.lua
this line put in at the beginning
next place the following lines under the function Script:UpdateWorld()
if self.weapons[self.currentweaponindex]~=nil and self.weapons[self.currentweaponindex].hasZoom then if self.ADSmode == false then self.camera:SetFOV(70) self.weapons[self.currentweaponindex ].offset = self.weapons[self.currentweaponindex ].offsetNor end if self.ADSmode == true then self.camera:SetFOV(20) self.weapons[self.currentweaponindex ].offset = self.weapons[self.currentweaponindex ].offsetADS end end
and this also in this function (i put this after a lince called "--fire weapon"
if window:MouseHit(2) then if self.weapons[self.currentweaponindex]~= nil then if self.ADSmode == false then self.ADSmode=true else self.ADSmode=false end if self.sound.pickupweapon~=nil then self.sound.pickupweapon:Play() end end end
if you do not want the ironsight by jump, reload, or carry an item, then paste those lines at the right places
Since the original crosshair disturbs me in the ironsight, I have inserted "and self.ADSmode==false then" in the function Script:PostRender(context) it should looks like this
if self.health>0 then if self.canUse==true and self.carryingEntity == nil then local pickUpX = math.floor((context:GetWidth() - self.image.hand:GetWidth()))/2 local pickUpY = math.floor((context:GetHeight() - self.image.hand:GetHeight()))/2 context:SetBlendMode(Blend.Alpha) context:DrawImage(self.image.hand, pickUpX, pickUpY) else if self.carryingEntity==nil then if self.weapons[self.currentweaponindex]~=nil then if self.image.crosshair and self.ADSmode==false then local crossHairX = math.floor((context:GetWidth() - self.image.crosshair:GetWidth()))/2 local crossHairY = math.floor((context:GetHeight() - self.image.crosshair:GetHeight()))/2 context:SetBlendMode(Blend.Alpha) context:DrawImage(self.image.crosshair, crossHairX, crossHairY) end end end end
What follows now are the individual settings for each weapon to get an Ironsight.
in the script:
the sniper M4 looks now like this
the m4 without scope
in the script:
it should look like this
in the script
the shotgun look like this
in the script
the pistol look now like this
So, that was my solution. But if you have even better settings, feel free to write in this blog. I hope that this blog helped a bit. Especially to save time to find the settings for the Ironsight.