Data Realms Fan Forums http://45.55.195.193/ |
|
A few small things http://45.55.195.193/viewtopic.php?f=73&t=32162 |
Page 1 of 1 |
Author: | Corpsey [ Sat Nov 17, 2012 6:08 am ] |
Post subject: | A few small things |
I may need more help with code in the future and for things that most coders will probably see as very miniscule problems.. So that explains the title even though I currently only have 1 problem. : Code: function TSAGrenadeLauncherImpact(actor) local gun = ToAHuman(actor).EquippedItem; if gun ~= nil then local gun = ToHDFirearm(gun); local magSwitchName = "Magazine TSA GL Grenade Launcher Impact"; if gun.Magazine == nil or (gun.Magazine ~= nil and gun.Magazine.PresetName ~= magSwitchName) then gun:SetNextMagazineName(magSwitchName); gun:Reload(); end end end function TSAGrenadeLauncherBounce(actor) local gun = ToAHuman(actor).EquippedItem; if gun ~= nil then local gun = ToHDFirearm(gun); local magSwitchName = "Magazine TSA GL Grenade Launcher Bounce"; if gun.Magazine == nil or (gun.Magazine ~= nil and gun.Magazine.PresetName ~= magSwitchName) then gun:SetNextMagazineName(magSwitchName); gun:Reload(); end end end So I made a grenade launcher, that's shotgun-style reload. However if I use the piemenu to change ammo types, the round count doesn't reset and I can just continuously load infinite grenades (obviously kind of overpowered ). For the time being I've just been removing " gun:Reload();" and firing a shot off before reloading.. Although, is there a way to set the round count of the weapon to 0 JUST BEFORE the reload? |
Author: | CaveCricket48 [ Sat Nov 17, 2012 6:25 am ] |
Post subject: | Re: A few small things |
This should do what you're asking: Code: function TSAGrenadeLauncherImpact(actor) local gun = ToAHuman(actor).EquippedItem; if gun ~= nil then local gun = ToHDFirearm(gun); local magSwitchName = "Magazine TSA GL Grenade Launcher Impact"; if gun.Magazine == nil or (gun.Magazine ~= nil and gun.Magazine.PresetName ~= magSwitchName) then if self.Magazine ~= nil then self.Magazine.RoundCount = 0; end gun:SetNextMagazineName(magSwitchName); gun:Reload(); end end end function TSAGrenadeLauncherBounce(actor) local gun = ToAHuman(actor).EquippedItem; if gun ~= nil then local gun = ToHDFirearm(gun); local magSwitchName = "Magazine TSA GL Grenade Launcher Bounce"; if gun.Magazine == nil or (gun.Magazine ~= nil and gun.Magazine.PresetName ~= magSwitchName) then if self.Magazine ~= nil then self.Magazine.RoundCount = 0; end gun:SetNextMagazineName(magSwitchName); gun:Reload(); end end end |
Author: | Corpsey [ Sat Nov 17, 2012 6:33 am ] |
Post subject: | Re: A few small things |
Ironically I tried something like that.. what happens is that it doesn't even enter the reload part of the script... and on reloading, it doesn't switch the round type. It doesnt even set the roundcount to 0... so basically it does nothing >.> |
Author: | CaveCricket48 [ Sat Nov 17, 2012 7:32 am ] |
Post subject: | Re: A few small things |
Are you using the Sharpness value of your gun for anything? The issue is that the ShotgunReload.lua script has its own variable that keeps a record of the gun's supposed RoundCount. However, if you're not using Sharpness on your gun for anything, you can use that instead and both scripts can interact with that. |
Author: | Corpsey [ Sat Nov 17, 2012 7:48 am ] |
Post subject: | Re: A few small things |
No, the sharpness value isn't being used. So what would I need to change in a copy of ShotgunReload? (& TSAGrenadeLauncherPie, the original code I posted)? (ShotgunReloadGL.lua). |
Author: | CaveCricket48 [ Sat Nov 17, 2012 8:29 am ] |
Post subject: | Re: A few small things |
Code: function Create(self) self.reloadTimer = Timer(); self.loadedShell = false; self.reloadCycle = false; self.reloadDelay = 200; if self.Magazine then self.Sharpness = self.Magazine.RoundCount; else self.Sharpness = 0; end end function Update(self) if self.Magazine ~= nil then if self.loadedShell == false then self.Sharpness = self.Magazine.RoundCount; else self.loadedShell = false; self.Magazine.RoundCount = self.Sharpness + 1; end else self.reloadTimer:Reset(); self.reloadCycle = true; self.loadedShell = true; end if self:IsActivated() then self.reloadCycle = false; end if self.reloadCycle == true and self.reloadTimer:IsPastSimMS(self.reloadDelay) and self:IsFull() == false then local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) then ToActor(actor):GetController():SetState(Controller.WEAPON_RELOAD,true); end self.reloadCycle = false; end end And Code: [code]function TSAGrenadeLauncherImpact(actor) local gun = ToAHuman(actor).EquippedItem; if gun ~= nil then local gun = ToHDFirearm(gun); local magSwitchName = "Magazine TSA GL Grenade Launcher Impact"; if gun.Magazine == nil or (gun.Magazine ~= nil and gun.Magazine.PresetName ~= magSwitchName) then gun.Sharpness = 0; gun:SetNextMagazineName(magSwitchName); gun:Reload(); end end end function TSAGrenadeLauncherBounce(actor) local gun = ToAHuman(actor).EquippedItem; if gun ~= nil then local gun = ToHDFirearm(gun); local magSwitchName = "Magazine TSA GL Grenade Launcher Bounce"; if gun.Magazine == nil or (gun.Magazine ~= nil and gun.Magazine.PresetName ~= magSwitchName) then gun.Sharpness = 0; gun:SetNextMagazineName(magSwitchName); gun:Reload(); end end end[/code] Should do the trick. |
Author: | Corpsey [ Sat Nov 17, 2012 8:36 am ] |
Post subject: | Re: A few small things |
Worked perfectly, thanks! |
Author: | Corpsey [ Tue Jan 01, 2013 6:23 pm ] |
Post subject: | Re: A few small things |
Need help with a gun's animation, modifying the muzzleoffset by 2 pixels, and showing the proper animation for which barrel fired. What it is doing. What I'd like it to do. Is it even possible to script some LUA to move (and alternate) the muzzleoffset by 2? How do I then tie the animation to that? Is it easiest to just have the animation restart each time, as well as the muzzleoffset? I could use help scripting.. *clueless at programming* Also.. is it possible to potentially flip the muzzleflash? Or would I have to use 2 separate instances? I may change the muzzleflash.. the shotgun flash on the end of it was just temporary really. |
Author: | Arcalane [ Tue Jan 01, 2013 6:46 pm ] |
Post subject: | Re: A few small things |
Your best bet would probably be to have the gun fire a null bullet with the same ballistic properties as the actual shells (for the AI) and spawn the actual projectile/muzzleflash/etc. in scripting. I think the Coalition Autocannon/Flak Cannon (or whichever dual-barrel BFG they have) has shots alternating between two barrels, so it should be possible. |
Author: | Corpsey [ Tue Jan 01, 2013 8:22 pm ] |
Post subject: | Re: A few small things |
The autocannon is magically doing it without lua -.- Oh.. what.. The autocannon is actually just using a 6-frame muzzle flash, with a 2-frame shot animation (and a still), then it uses separation (and reasonable spread) to make the rounds appear to come out of the barrels at random.. It does a pretty decent job I suppose. I don't know if that's the way I want to go on this though, I'd prefer that the bullet originate from the muzzle flash and just have the muzzleoffset alternate up and down by 2.. Please help.. I'm probably the worst programmer on the earth, otherwise I'd actually attempt this myself (which I did and failed hard.. getting error " bad argument #1 to 'mod' (number expected, got nil) ". Basically what I'd like to do is one of two things... the first is determine how many rounds I have left, and if that number is a multiple of 2, use one muzzle offset, if not, use another. The other idea is almost the same, but if I can't look up round count.. Check to see if a round has been loaded/shot - with a governing value (that, again, if it's a multiple of 2, use one muzzle offset), and change that value to a value that's not a multiple of 2 which will (hopefully) set it up for next time so that it triggers the other muzzle offset, and sets the governing value back to being a multiple of two. Anyways I have no idea how to accomplish that with code. |
Author: | Corpsey [ Fri Jan 11, 2013 12:00 am ] |
Post subject: | Re: A few small things |
(Quoting that because this is the problem I'm still at) I tried to do what the autocannon does but I did some screen capture at 60fps and found that weapons only ever play anim 000 and 001. They never make it to 002..003..etc. Probably possible with lua but like I said in my last post I know nothing about programming. |
Author: | CaveCricket48 [ Wed Jan 16, 2013 3:19 am ] |
Post subject: | Re: A few small things |
The best way to do this is to animate an MO held in front of the gun rather than the sprite of the gun itself, but it'd be more trouble than it's worth in my opinion. |
Page 1 of 1 | All times are UTC [ DST ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |