Author Topic: Force Update Position  (Read 2486 times)

0 Members and 1 Guest are viewing this topic.

KoRo

  • Fat, Emo Robot
  • Centurian Lord
  • ********
  • Posts: 3,436
  • Reputation: +14/-6
Force Update Position
« on: August 20, 2013 11:17 am CDT »
I've noticed that the server takes a while to update someone's position when you're #tracking them, or it'll update to a spot that person you're #tracking used to be in but isn't anymore, or sometimes it won't update at all. Is there way to force the server to update your position? i.e. some sort of "refresh" command, or a workaround?

KoRo

  • Fat, Emo Robot
  • Centurian Lord
  • ********
  • Posts: 3,436
  • Reputation: +14/-6
Re: Force Update Position
« Reply #1 on: August 20, 2013 01:26 pm CDT »
Tangent to this topic, I found this document from a quick Google search. It's basically an informal paper describing the network modeling for Tribes. It was authored by two guys from Dynamix circa 2001.

http://www.pingz.com/wordpress/wp-content/uploads/2009/11/tribes_networking_model.pdf


Quote
The Move manager guarantees "soonest possible" delivery of client input moves to the server and "soonest possible" delivery of control object state data.  A sliding window is used to track the delivery of moves and also to synchronize move processing between control objects and their ghosts.  This manager is asymmetrical in that moves are only sent from a "client" connection to a "server" connection and Control Object state data from server object to client ghost.

Input moves are used to control simulation objects such as vehicles, cameras, and players.  Input is gathered on the client by an Input Manager, which collects a move every 32 milliseconds. Moves consist of x, y and z translations, yaw, pitch and roll rotations as well as an array of trigger states.  These moves are delivered to objects by the Move manager and are the sole means of user controlled object movement.

Any chance this is relevant to the server not updating player positions? I'm assuming that the #track function is using client position data that is sent to the server (every 32 milliseconds, according to the article).
« Last Edit: August 20, 2013 01:35 pm CDT by KoRo »

KoRo

  • Fat, Emo Robot
  • Centurian Lord
  • ********
  • Posts: 3,436
  • Reputation: +14/-6
Re: Force Update Position
« Reply #2 on: August 20, 2013 02:18 pm CDT »
I'm going to take a stab in the dark here and assume that, when calling #track, the server uses the "GameBase::getPosition(Object)" function to get the positions of yourself and the player you're #tracking and calculates the distance. So if the #track function is delayed, then that would mean that GameBase::getPosition(Object) is not executing properly...

Is there a reason why that might be?

rjm003

  • Gnoll Fighter
  • **
  • Posts: 85
  • Reputation: +1/-2
Re: Force Update Position
« Reply #3 on: August 29, 2013 03:19 pm CDT »
Ok the reason why #track is not always accurate is because it looks like the original coders put in a mechanic for it. They call this mechanic "scenting", where as they didn't want players position to always be completely accurate on purpose.

As found in zone.cs
Code: [Select]
//perhaps leave scent
if(!fetchData(%clientId, "invisible"))
{
if(OddsAre(floor($PlayerSkill[%clientId, $SkillSenseHeading] / 100)+1))
{
storeData(%clientId, "lastScent", GameBase::getPosition(%clientId));
}
}

As you can see, there is a roll to see if the players "scent" is updated.

And the check for it in comchat (instead of just grabbing the actual position):
Code: [Select]
%clientIdpos = GameBase::getPosition(%TrueClientId);
%idpos = fetchData(%id, "lastScent");

KoRo

  • Fat, Emo Robot
  • Centurian Lord
  • ********
  • Posts: 3,436
  • Reputation: +14/-6
Re: Force Update Position
« Reply #4 on: September 8, 2013 06:20 pm CDT »
Ooooh wow, that's interesting. I never even considered that might have been the case.