-- [ Picked text/plain from multipart/alternative ] I think it's because it rarely occurs if your ping is below 200. Still, it would be nice to fix it for those HPB's..
----- Original Message ----- From: <[EMAIL PROTECTED]> To: <hlcoders@list.valvesoftware.com>; <hlcoders@list.valvesoftware.com> Sent: Wednesday, April 18, 2007 7:10 PM Subject: Re: [hlcoders] FW: SDK Needs to be fixed > Why do most mods never see this issue? > > At 2007/04/12 08:43 PM, Justin Krenz wrote: >>Prediction->IsFirstTimePredicted() did not fix the problem as the >>problem is not with simulating a command multiple times. The problem is >>with the m_flNextPrimaryAttack variable. Take a look at this: >> >>CMD# m_flNextPrimaryAttack gpGlobals->curtime >>CLIENT: >>8255 125.99979 126.22500 >>8258 126.26978 126.27000 >>8261 126.26978 126.31499 >>8264 126.35978 126.36000 >>SERVER: >>8255 126.26978 126.31499 >>8258 126.35978 126.36000 >>CLIENT: >>8268 126.26978 126.42000 >>8270 126.44978 126.45000 >>8275 126.44978 126.52499 >>8276 126.53977 126.54000 >>SERVER: >>8270 126.44978 126.45000 >>8276 126.53977 126.54000 >> >>This is information taken from just before PrimaryAttack() is called. >>As you can see, the extra weapon firings are from commands that are not >>being predicted multiple times. They're from commands that only see the >>weapon as firing on the client. What is not included here is >>information from just after PrimaryAttack() is called. If I included >>that information, you would see that m_flNextPrimaryAttack is being >>updated to a time in the future as it should be during PrimaryAttack() >>and then has been reverted to an earlier time sometime inbetween the >>calls to PrimaryAttack. That's the source of the problem and causes the >>client to fire the weapon multiple times. >> >> >> >>Yahn Bernier wrote: >>>This might not be the best fix. Because of the way prediction works, >>>it's expected that variables from the server are set back and >>>re-simulated multiple times if there's latency in the connection. You >>>have to make sure that you only create effects, etc., the first time you >>>predict a weapon firing on the client. You can determine whether this >>>is the "first time predicted" by asking >>>prediction->IsFirstTimePredicted(). >>> >>>The discrepency with ammo sounds like a bug in the mod where the server >>>and the client are not simulating the exact same # of bullets to deduct >>>from the clip. There are shared random # generators and other means to >>>make sure that the same CUserCmd which causes firing should deduct the >>>same # of bullets on both client and server (SharedRandomInt, etc.) >>> >>>Yahn >>> >>>-----Original Message----- >>>From: [EMAIL PROTECTED] >>>[mailto:[EMAIL PROTECTED] On Behalf Of Mark >>>Chandler >>>Sent: Thursday, April 12, 2007 4:22 PM >>>To: hlcoders@list.valvesoftware.com >>>Subject: RE: [hlcoders] FW: SDK Needs to be fixed >>> >>>Not sure but only half of this worked for ge:S source. But its given me >>>idea how to fix the rest so ill post up when im done. >>> >>>Mark [aka Lodle] >>> >>>-----Original Message----- >>>From: [EMAIL PROTECTED] >>>[mailto:[EMAIL PROTECTED] On Behalf Of Justin Krenz >>>Sent: Friday, April 13, 2007 4:31 AM >>>To: hlcoders@list.valvesoftware.com >>>Subject: Re: [hlcoders] FW: SDK Needs to be fixed >>> >>>I was contacted personally by the Goldeneye Source team about this bug, >>>and I had fixed this already in Empires. I assume since this is a bug >>>inherent in the HL2DM sdk that everyone will want to fix this bug in >>>their code. This is the e-mail including the fix I sent to the GE team: >>> >>> >>> >>>The bug is caused by the networked variable m_flNextPrimaryAttack being >>>reset after the client has simulated firing, but the server has not >>>fired the weapon yet. The client will fire their weapon and increase >>>m_flNextPrimaryAttack to a time in the future. When the client receives >>>the next server update, this variable is reset to the server's value of >>>m_flNextPrimaryAttack which has not recorded that a shot has been fired >>>yet. With the value now being less than curtime, it's ok to fire the >>>weapon again which is much sooner than it should be. >>> >>>This bug was also related to another bug we had where our ammo counter >>>would count down with each shot and then jump back up because the client >>>was firing shots and the server was correcting the client on how many >>>bullets had actually been fired. This was also causing the client to >>>begin reloading their weapon when it did not need reloading. >>> >>>How to fix the first bug: >>> >>>In basecombatweapon_shared.h, add the following (create a variable to >>>store the last time the client fired): >>> >>>#ifdef CLIENT_DLL >>>float m_flPrevPrimaryAttack; >>>#endif >>> >>>In basecombatweapon_shared.cpp, CBaseCombatWeapon::CBaseCombatWeapon(), >>>add the following (start the new variable off as 0): >>> >>>#ifdef CLIENT_DLL >>>m_flPrevPrimaryAttack = 0; >>>#endif >>> >>> >>>In basecombatweapon_shared.cpp, CBaseCombatWeapon::ItemPostFrame( void >>>), find the lines that read: >>> >>>if ( ( pOwner->m_afButtonPressed & IN_ATTACK ) || ( >>>pOwner->m_afButtonReleased & IN_ATTACK2 ) ) >>>{ >>> m_flNextPrimaryAttack = gpGlobals->curtime; } PrimaryAttack(); >>> >>> >>>Change the "PrimaryAttack();" line to the following: >>> >>>#ifdef CLIENT_DLL >>>if (m_flPrevPrimaryAttack <= gpGlobals->curtime) { #endif >>> PrimaryAttack(); >>>#ifdef CLIENT_DLL >>> m_flPrevPrimaryAttack = m_flNextPrimaryAttack; } #endif >>> >>> >>>This stores the client's m_flNextPrimaryAttack variable in a separate, >>>non-networked variable that won't get "stomped" with each network >>>update. We then check the m_flNextPrimaryAttack variable against the >>>client's m_flPrevPrimaryAttack to see if we should really be simulating >>>PrimaryAttack() on the client again. If your weapons have secondary >>>attacks that are susceptible to the same bug, you'll have to add another >>>variable for the secondary attack time and check against that. >>> >>>For the second bug, check your weapons' PrimaryAttack() functions and >>>make sure any lines that alter the weapon's m_iClip1 or m_iClip2 >>>variable are only occurring on the server. By default, there should be >>>a line that reads: >>> >>>if ( iBulletsToFire > m_iClip1 ) >>> iBulletsToFire = m_iClip1; >>>m_iClip1 -= iBulletsToFire; >>> >>>Surround the line that decrements m_iClip1 with #ifdef/#endif GAME_DLL: >>>#ifdef GAME_DLL >>>m_iClip1 -= iBulletsToFire; >>>#endif >>> >>>Otherwise, the client will reach m_iClip1 == 0 sooner than the server >>>and begin reloading while there may be one bullet left in the gun >>>according to the server. You also might see that the ammo counter is >>>jumping around as the client decrements bullets, and then the server >>>says that there are more bullets in the gun causing the counter to flash >>>to a higher number. >>> >>> >>> >>>Mark Chandler wrote: >>>>This is a multipart message in MIME format. >>>>-- >>>>[ Picked text/plain from multipart/alternative ] >>>> >>>> >>>>SDK Needs to be fixed >>>> >>>> _____ >>>> >>>>Hi, >>>> >>>>My name is mark and im one of the main programmers for a source mod >>>>called Golden Eye source (http://goldeneyesource.com). Now we have had >>> >>>>a major >>>bug >>>>that has been plaguing the mod for about 8 months to a year now. The >>>problem >>>>is that when firing a bullet in game some times it multi fires causing >>> >>>>two bullet decals to appear (or worse up to 50). This problem is >>>>hardly noticeable for pings from around 0-100 but gets worse after >>>that. >>>>The mod team and i have have spent countless of hours on this problem >>>>rewriting code and searching to what is causing this but with no luck. >>>> >>>>To prove that it is not the fault of golden eye modified source code i >>> >>>>started a new mod based on the advanced sdk. And guess what? Same >>>results. >>>>http://lodle.net/multifire2.avi >>>> >>>>Lag was introduced using net_fakelag (200 and 500) and from the video >>>>you can see the shoot gun going mad and the mp5 producing multi fire. >>>> >>>>I would post this on verc but hardly any valve employees go there any >>>more. >>>>So im posting it here in the attempt to get a solution to this >>>problem. >>>>Mark [aka lodle]. >>>> >>>> >>>> >>>http://forums.steampowered.com/forums/showthread.php?p=6121132&posted=1# >>>post >>>>6121132 >>>> >>>> >>>> >>>>-- >>>> >>>>_______________________________________________ >>>>To unsubscribe, edit your list preferences, or view the list archives, >>>please visit: >>>>http://list.valvesoftware.com/mailman/listinfo/hlcoders >>>> >>> >>>_______________________________________________ >>>To unsubscribe, edit your list preferences, or view the list archives, >>>please visit: >>>http://list.valvesoftware.com/mailman/listinfo/hlcoders >>> >>>_______________________________________________ >>>To unsubscribe, edit your list preferences, or view the list archives, >>>please visit: >>>http://list.valvesoftware.com/mailman/listinfo/hlcoders >>> >>> >>>_______________________________________________ >>>To unsubscribe, edit your list preferences, or view the list archives, >>>please visit: >>>http://list.valvesoftware.com/mailman/listinfo/hlcoders >>> >> >>_______________________________________________ >>To unsubscribe, edit your list preferences, or view the list archives, >>please visit: >>http://list.valvesoftware.com/mailman/listinfo/hlcoders > > _______________________________________________ > To unsubscribe, edit your list preferences, or view the list archives, > please visit: > http://list.valvesoftware.com/mailman/listinfo/hlcoders > -- _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders