Sunday, January 6, 2008

Delayed Death after Getting Shot

By: Lord Jesus

This cheat comes to us by way of an idea from blogger, person. Here is an excerpt of his comment to Super "Kill Me" on Demand in which he proposed the idea:

    I have a suggestion... Maybe there could be a client side delay so that when the tank detects that it has been shot, it will let you live for just a little longer, giving you a short time in which you could kill your killer before you died. Like for example. I get in a fight with a shock waver. I wait for him to land, but am hit before he lands. Instead of exploding, I would have 2 seconds to kill him first.

The delayed death cheat can also be useful for cheaters with slow connections and/or moderate to high lag since the delay can possibly be attributed to lag. Some administrators, though, may kick players who lag or seem to lag until they are able to fix the problem especially if other players are complaining about it.

Being that I'm not a software developer, this may look a bit rough; however, it works. Suggestions to clean it up or to make it easier are always welcome.

Anyway, I found in my experiments that setting the delay to 2.0f seemed a little long. It would be easily noticed, and you would be singled out shortly for cheating. In this example, I use 1.0f which turns out to be a little closer to two seconds than it does one. You can adjust that value to suit your liking. Perhaps, you can shorten it to make it less noticeable yet still give you just enough time to pop off a shot or two at the player who shot you. Additionally, my idea was to have a countdown on the display. Being that the time is short, I decided to go simply with "Death imminent" as a quick warning for you to get your shot(s) off before you blow up.

I didn't include a delay for Thief. The idea is to shoot a person who actually shot you. I also didn't include a delay for Steamroller; however, implementing a delay for that as well wouldn't be difficult.

All of the changes that we will make will be in the file, playing.cxx.

At the beginning, of playing.cxx, you will see a section for "system includes":

// system includes
#ifdef _WIN32
#include
#include
#include
#include
#else
#include
#include
#include
#include
#include
#endif
#include

At the end of that, add "int deathStart;" so that the section now reads like this:

// system includes
#ifdef _WIN32
#include
#include
#include
#include
#else
#include
#include
#include
#include
#include
#endif
#include
int deathStart;

Next, search for "destructCountdown" and you will find these lines:

float pauseCountdown = 0.0f;
float destructCountdown = 0.0f

Just below the "destructCountdown" line, add this new line:

float deathCountdown = 0.0f;

The lines should now read like this:

float pauseCountdown = 0.0f;
float destructCountdown = 0.0f;
float deathCountdown = 0.0f;

Search for "destructCountdown" again, and you will find this section:

static void updateDestructCountdown(float dt)
{
if (!myTank) {
destructCountdown = 0.0f;
}
if (destructCountdown > 0.0f && !myTank->isAlive()) {
destructCountdown = 0.0f;
hud->setAlert(1, NULL, 0.0f, true);
}
if (destructCountdown > 0.0f) {
const int oldDestructCountdown = (int)(destructCountdown + 0.99f);
destructCountdown -= dt;
if (destructCountdown <= 0.0f) {
// now actually destruct
gotBlowedUp( myTank, SelfDestruct, myTank->getId() );

hud->setAlert(1, NULL, 0.0f, true);
} else if ((int)(destructCountdown + 0.99f) != oldDestructCountdown) {
// update countdown alert
char msgBuf[40];
sprintf(msgBuf, "Self Destructing in %d", (int)(destructCountdown + 0.99f));
hud->setAlert(1, msgBuf, 1.0f, false);
}
}
return;
}

Below that, add these lines:

static void updateDeathCountdown(float dt)
{
if (!myTank) {
deathCountdown = 0.0f;
}
if (deathCountdown > 0.0f && !myTank->isAlive()) {
deathCountdown = 0.0f;
hud->setAlert(1, NULL, 0.0f, true);
}
if (deathCountdown > 0.0f) {
const int oldDeathCountdown = (int)(deathCountdown + 0.99f);
deathCountdown -= dt;
if (deathCountdown <= 0.0f) {
// blow up my tank and then reset
// deathCountdown & deathStart back to zero
gotBlowedUp(myTank,GotShot,deathStart);
deathCountdown = 0.0f;
deathStart = 0;

hud->setAlert(1, NULL, 0.0f, true);
} else if ((int)(deathCountdown + 0.99f) != oldDeathCountdown) {
// update countdown alert
char msgBuf[40];
sprintf(msgBuf, "Death imminent");
hud->setAlert(1, msgBuf, 1.0f, false);
}
}
return;
}

Search for "destructCountdown" one more time, and you will find this section:

// update the countdowns
updatePauseCountdown(dt);
updateDestructCountdown(dt);

Below that, add "updateDeathCountdown(dt);" so that the section now reads like this:

// update the countdowns
updatePauseCountdown(dt);
updateDestructCountdown(dt);
updateDeathCountdown(dt);

Now, search for "used later", and you will find this section:

// used later
float waterLevel = World::getWorld()->getWaterLevel();

if (hit) {
// i got shot! terminate the shot that hit me and blow up.
// force shot to terminate locally immediately (no server round trip);
// this is to ensure that we don't get shot again by the same shot
// after dropping our shield flag.
if (hit->isStoppedByHit())
serverLink->sendEndShot(hit->getPlayer(), hit->getShotId(), 1);

FlagType* killerFlag = hit->getFlag();
bool stopShot;

if (killerFlag == Flags::Thief) {
if (myTank->getFlag() != Flags::Null) {
serverLink->sendTransferFlag(myTank->getId(), hit->getPlayer());
}
stopShot = true;
}
else {
stopShot = gotBlowedUp(myTank, GotShot, hit->getPlayer(), hit);
}

if (stopShot || hit->isStoppedByHit()) {
Player* hitter = lookupPlayer(hit->getPlayer());
if (hitter) hitter->endShot(hit->getShotId());
}
}
// if not dead yet, see if i'm sitting on death

Just after the comments at the beginning of the "if (hit)" section, add these lines:

// skip this if the Death Counter is counting
if (deathCountdown > 0.0f) return;

The section should now read like this:

if (hit) {
// i got shot! terminate the shot that hit me and blow up.
// force shot to terminate locally immediately (no server round trip);
// this is to ensure that we don't get shot again by the same shot
// after dropping our shield flag.

// skip this if the Death Counter is counting
if (deathCountdown > 0.0f) return;

Next, notice these lines in particular in the "if (hit)" section:

else {
stopShot = gotBlowedUp(myTank, GotShot, hit->getPlayer(), hit);
}

Replace "stopShot = gotBlowedUp(myTank, GotShot, hit->getPlayer(), hit);" with these lines:

deathCountdown = 1.0f;
deathStart = hit->getPlayer();

// imminent death alert
char msgBuf[40];
sprintf(msgBuf, "Death imminent");
hud->setAlert(1, msgBuf, 1.0f, false);

The section should now read like this:

else {
deathCountdown = 1.0f;
deathStart = hit->getPlayer();

// imminent death alert
char msgBuf[40];
sprintf(msgBuf, "Death imminent");
hud->setAlert(1, msgBuf, 1.0f, false);
}

The entire section after your changes should now look like this:

// used later
float waterLevel = World::getWorld()->getWaterLevel();

if (hit) {
// i got shot! terminate the shot that hit me and blow up.
// force shot to terminate locally immediately (no server round trip);
// this is to ensure that we don't get shot again by the same shot
// after dropping our shield flag.

// skip this if the Death Counter is counting
if (deathCountdown > 0.0f) return;

if (hit->isStoppedByHit())
serverLink->sendEndShot(hit->getPlayer(), hit->getShotId(), 1);

FlagType* killerFlag = hit->getFlag();
bool stopShot;

if (killerFlag == Flags::Thief) {
if (myTank->getFlag() != Flags::Null) {
serverLink->sendTransferFlag(myTank->getId(), hit->getPlayer());
}
stopShot = true;
}
else {
deathCountdown = 1.0f;
deathStart = hit->getPlayer();

// imminent death alert
char msgBuf[40];
sprintf(msgBuf, "Death imminent");
hud->setAlert(1, msgBuf, 1.0f, false);
}

if (stopShot || hit->isStoppedByHit()) {
Player* hitter = lookupPlayer(hit->getPlayer());
if (hitter) hitter->endShot(hit->getShotId());
}
}
// if not dead yet, see if i'm sitting on death

I realize that the HUD alert is redundant. I noticed that there was a delay in the alert so I added it in the above section, as well, so that it would display more quickly.

What we've established so far is the creation of a couple of values, deathCountdown and deathStart, which we will use for our countdown, and we set their defaults (e.g., deathCountdown = 0.0f). We also added the the code for the actual countdown and time keeping. Next, we initiate the countdown when we get shot by setting deathCountdown to 1.0f, and we display an alert for "Death imminent". We also retain the identity of the player who initially shot us and started the countdown by setting the value of deathStart to represent the identity of that player so that we can use it later for blowing up when the countdown completes. We skip the "if (hit)" section if there is already a countdown in progress so that we don't start a new countdown for each shot that hits us once a countdown has already started (i.e., we ignore all other shots that may hit us after the countdown begins). When the countdown finishes, we blow up (and as a result lose a point, and the killer gets his or her point), and the countdown values, deathCountdown and deathStart, are then set back to 0.0f and 0, respectively.

Notice that we use "return" to skip the "if (hit)" section. We do that since using a line such as "stopShot = true" when deathCountdown > 0.0f will get us kicked for wrong end shot detections. Essentially, the server will kick us if we are ending other players' shots that hit us without our tank blowing up. That technique of avoiding getting blown up was utilized by cheaters of yore, and it was known as end shot cheating. I know that because I, myself, used to be one of the culprits long ago. Anyway, it is better to ignore a shot altogether rather than try to end it without blowing up. That's why god mode cheating works and end shot cheating no longer does.

This next part is left over from when I was experimenting with a previous revision of this cheat. The idea was to bypass blowing up until a countdown had finished. It may not be necessary (I haven't tried it without it); but, this cheat works with it in place. So, if it ain't broke, don't fix it :P If anyone wants to experiment with it, let us know how it worked.

Search for "tank && (tank->getTeam() == ObserverTeam" and you will find this section:

static bool gotBlowedUp(BaseLocalPlayer* tank,
BlowedUpReason reason,
PlayerId killer,
const ShotPath* hit, int phydrv)
{
if (tank && (tank->getTeam() == ObserverTeam || !tank->isAlive()))
return false;

Change "(tank && (tank->getTeam() == ObserverTeam || !tank->isAlive()))" to this:

((tank && (tank->getTeam() == ObserverTeam || !tank->isAlive()) || deathCountdown > 0.0f))

Yeah, I know it's "fugly". Anyway, the section should now read like this:

static bool gotBlowedUp(BaseLocalPlayer* tank,
BlowedUpReason reason,
PlayerId killer,
const ShotPath* hit, int phydrv)
{
if ((tank && (tank->getTeam() == ObserverTeam || !tank->isAlive()) || deathCountdown > 0.0f))
return false;

Save the file, compile your new client, and you're finished. Thank you to blogger, person, for bringing this idea to us.

As always...

Have fun!

>:)

**********

Related posts:

Instant Self Destruct
Ultimate Pausing

78 comments:

person said...

I think I may have found a bug, that could exploit the user. if you are shot with laser for example, the message is killed by player with laser, instead of fried by player with laser. You may not be able to fix this though, but i'm just seeing if anything can be done. I also have a question. Does the delay work if your team is geno'd or if a flag is capped?

CRW said...

Thank you for the feedback :)

I will see if I can fix the laser message.

I have been geno'd, but I don't think that I have had a chance to see getting geno'd while a countdown is in progress. The section that bypasses blowing up until a countdown is complete should prevent blowing up in the instances you mentioned. Still, even if a teammate is hit with genocide or your team's flag is captured during the countdown, the countdown should be short enough to cause you to blow up shortly afterward anyway, so it may not be noticeable. The delay could still be attributed to lag even if someone by chance did happen to notice.

Also, consider the odds of a countdown being in progress during a genocide or a team flag capture. Waiting for that to happen would be time consuming even for the most vigilant of admins or players. Moreover, an admin may have to sort through the logs to see the time stamps on events for evidence of a delayed death cheat. That, too, could be somewhat time consuming, and I wouldn't imagine -- but, I've been wrong before -- that an admin would read through the logs specifically looking for it unless something else suspicious happened to catch his or her attention.

In my experiments, only one player has commented (and only once at that) that I had lag. Other than that, no one else has yet to notice or suspect anything.

At any rate, I will work on the laser message. I will also fix geno and flag capture if it turns out others happen to notice or catch on.

Other than that, how's it working for you thus far?

CRW said...

...if the delay is set too high, other players will more than likely complain about your lag. If others are consistently complaining about your lag yet your lagstats indicate that you have low lag, then that might create enough suspicion for an admin to look further into it such as by reviewing the logs. For me personally, a deathCountdown delay of 1.0f seems to work well. The delay is subtle, and no one has yet to suspect any cheating... or at least no one have said anything thus far if he or she has suspected cheating.

CRW said...

person,

I see what you are saying, now. Even though we retain the ID of the player who shot us, we don't retain the flag ID of the person who shot us. So, for example, if MY tank is the tank that gets shot by a player with genocide, the I blow up after a delay, but my teammates do not blow up.

Blowing up with the flag ID of the player who shot us DEFINITELY needs to be fixed. Give me a day or two to work on it (still a little busy), and I will post an update to fix that.

person said...

Thanks. You check the blog often don't you. I was wondering about when a teammate is geno'd does the client interpret it as a shot to another teammate, or does it just detect the occuence and blow up? That my be how its getting around it. If not, I agree, it isn't very noticeable, as other teammate may have real lag that is higher than yours, and explode after you.

person said...

I forgot to say, I mean, when a flag is captured, it isn't a shot, so is the delay ignored?

Webstrand said...

Thanks for the cheat, it works perfectly!
I have an idea for a cheat, all bullets are super bullets. But i cant figure out why my cheat teleports the bullet.
I open /src/SegmentedShotStrategy.cxx.
i find the line: // hit building -- can bounce off or stop, buildings ignored for Through
and i change the switch there to:
switch (e) {
case Stop:
assert(0);
break;

case Reflect: {
/*// move origin to point of reflection
o[0] += t * d[0];
o[1] += t * d[1];
o[2] += t * d[2];

// reflect direction about normal to building
float normal[3];
building->get3DNormal(o, normal);
reflect(d, normal);
reason = ShotPathSegment::Ricochet;*/
assert(0);
}
break;

case Through:
assert(0);
}
What on earth am i doing wrong?

CRW said...

person:

I was able to check the blog frequently the other day because I had the time to do so. I do like to keep up with comments so that I can address issues and problems as well as get new ideas. For example, some of our cheats come from blogger, Someone, although he isn't an actual contributor to the blog.

I'm working on an idea to fix the flag ID issue, and I hope to finish it up, test it out, and post it soon. Stay tuned for that ;)

Anyway, to answer your question, the delay only kicks in if you have been shot. It doesn't kick in for Thief, Steamroller, or if you get run over when you have Burrow. I'm considering another post to update for those who would like to have a delay for any of those. Also, a teammate's getting hit with genocide or another team capturing your team's flag will not initiate the countdown. You have to get shot or hit with Shockwave in order for the countdown to start. That's why the countdown starts in its particular "if (hit)" section. In those two instances, there will only be a delay if a countdown has already started.

westbrand:

I will take a closer look at your idea. I don't know off the top of my head for sure, but if you are wanting super bullets to ricochet like regular bullets, then you might want to include a line that performs the following logic:

ricochet super bullet if:
* the shot was fired from my tank,
* I do not have the super bullet flag,
* ricochet is allowed on the server

You will want to include a check for the bullet being fired from our tank. If not, you client may perform the check for all tanks bullet's and not just yours. For example, I experimented with a rico cheat (to be able to rico on no-rico servers). Yes, my bullets rico'd; but, so did everyone else's on my client. My rico'd bullets could kill me, but they had no affect on other tanks. Their clients weren't set up like mine.

So, the other idea that I had (still haven't finished it) was the client to ricochet bullets shot from my tank, and then ricochet the bullets PRIOR to collision with a wall. My hunch --- and I am not totally sure, yet -- is that clients will terminate the shot on a no-ricochet server if there is a collision with a wall.

Secondly, you may want to allow the Super Bullet flag to retain its original properties. That's so you can still have the option of using normal Super Bullet to nail sealed and zoned tanks.

Anyway, I will look into that, as well, since I am already working on a ricochet cheat.

Thanks for feedback and for your idea. Additionally, others who read this may be able to provide some more tips such as how to finish the SB cheat that you have. Either way, it's a great idea, and I'm looking forward to sharing that one.

person said...

It may be helpful if you read this. This can be found as one of the comments on an archived page.

Blogger phasmophage said...

"... You see, when a shot is fired, the only thing that is sent (unless it's GM) is the initial position, velocity, and shot type of the bullet. It is up the the client to interpret the shockout radius, ricochets and so forth..."

They were working on shot strategies though. But still, thats what he said.

Webstrand said...

No i'm not trying to get my superbullet shots to rico, i'm trying to get all my normal shots to act like superbullets. I played around with my client some more, and got it such that i can shoot superbullets, and they act properly, but they do not kill enemies when hit with a bullet.

CRW said...

I believe that you are having the same trouble that I did when I started my rico on no-rico servers cheat. Even though the rico shots were displayed on my client, they weren't displayed with the clients of others. Since other clients still perform the ricochet, your bullets no longer affect tanks that continue as super bullets after they normally were supposed to ricochet.

An exception to bullets performing as another type bullet came from blogger, Someone, in which he was able to get Phantom Zone bullets to shoot like regular bullets:

http://bzfcheat.blogspot.com/2007/08/shoot-normal-bullets-in-pz.html

Still, it's worth while to investigate the possibility.

Webstrand said...

Hmm... from persons comment i got this idea. Could the guided bullet cheat be modified to pass through walls? I'm gonna look in to it now.

Webstrand said...

the guided bullets cheat is broken, and i dont have enough understanding of the bzflag client to fix it, it if can be. Anyone else got it fixed?

NightMare said...

Hey can you copy and paste some of the errors you got?

Webstrand said...

it wasnt compileing errors so much, i am using 2.0.8 source, but when searching for the code segments it was totaly differend than what the guide specified.

phasmophage said...

I just emailed Lord Jesus about the problem with Delayed Death. I think the problem comes from the failure to specify the shot id that kills the player (the fourth parameter of gotBlowedUp). It's called "hit" in the source code. If "hit" is supplied as the fourth parameter, it should fix the problem.

On the idea of all bullets being super bullets:
Most of the attempts that I have seen simply change the way the client interprets shots fired. This means that the cheat will have no effect on other clients (unless, somehow, you've managed to change their clients too. ;P ). I have an idea on how to make this work, but it's somewhat hard to explain. Basically, whenever the bullet should richochet, a new bullet (with the same ID, thus erasing the old one) would be started inside the wall (or whatever) and sent through it.

Hope this helps.
Phaz

randomdude said...

I am still gettings tons of errors for this... makes me sad :(
Can't test out the new cheats.


\..\src\bzflag\ComposeDefaultKey.cxx(43) : error C2039: 'CheatWeirdAim' : is not a member of 'LocalPlayer'
2>..\..\src\bzflag\ComposeDefaultKey.cxx(45) : error C3861: 'getRecipient': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(46) : error C2653: 'World' : is not a class or namespace name
2>..\..\src\bzflag\ComposeDefaultKey.cxx(46) : error C2227: left of '->getMaxShots' must point to class/struct/union/generic type
2> type is ''unknown-type''
2>..\..\src\bzflag\ComposeDefaultKey.cxx(46) : error C3861: 'getWorld': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(49) : error C2065: 'shots' : undeclared identifier
2>..\..\src\bzflag\ComposeDefaultKey.cxx(54) : error C3861: 'getVelocity': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(66) : error C3861: 'getPosition': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(67) : error C3861: 'getForward': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(68) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
2>..\..\src\bzflag\ComposeDefaultKey.cxx(69) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
2>..\..\src\bzflag\ComposeDefaultKey.cxx(74) : error C2653: 'TargetingUtils' : is not a class or namespace name
2>..\..\src\bzflag\ComposeDefaultKey.cxx(74) : error C3861: 'getTargetAzimuth': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(79) : error C2673: 'CheatWeirdAim' : global functions do not have 'this' pointers
2>..\..\src\bzflag\ComposeDefaultKey.cxx(79) : error C3861: 'getSalt': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(80) : error C3861: 'getTeam': identifier not found
2>..\..\src\bzflag\ComposeDefaultKey.cxx(87) : error C2065: 'server' : undeclared identifier
2>..\..\src\bzflag\ComposeDefaultKey.cxx(87) : error C2227: left of '->sendBeginShot' must point to class/struct/union/generic type
2> type is ''unknown-type''
2>..\..\src\bzflag\ComposeDefaultKey.cxx(201) : error C2039: 'CheatWeirdAim' : is not a member of 'LocalPlayer'
2>..\..\src\bzflag\ComposeDefaultKey.cxx(232) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
2>..\..\src\bzflag\ComposeDefaultKey.cxx(244) : error C2144: syntax error : 'int' should be preceded by ')'
2>..\..\src\bzflag\ComposeDefaultKey.cxx(244) : error C2059: syntax error : ')'
2>..\..\src\bzflag\ComposeDefaultKey.cxx(252) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
2>..\..\src\bzflag\ComposeDefaultKey.cxx(256) : error C2653: 'TargetingUtils' : is not a class or namespace name
2>..\..\src\bzflag\ComposeDefaultKey.cxx(256) : error C3861: 'getTargetAzimuth': identifier not found

I left out a couple that had personal info.

phasmophage said...

Ugh, my WeirdAim cheat. The reason I didn't post that myself was that it's somewhat confusing to install. At least, it's more confusing than other cheats. Anyway, the main problem is that you need to define CheatWeirdAim() as a function of the LocalPlayer class in LocalPlayer.h

Basically, add the line:
void CheatWeirdAim();

before the
"protected:"
line in LocalPlayer.h

Then, to actually use the CheatWeirdAim function, you need a command that will do this:
LocalPlayer *myTank = LocalPlayer::getMyTank();
myTank->CheatWeirdAim();

phasmophage said...

Oh, and another reason I didn't add that cheat is because unless you have laser, it's pretty much just a waste of bullets.

randomdude said...

I added the void cheatweirdaim thing to LocalPlayer.h, still came up with some errors but not as many. Looking at the errors i then added #include TargetingUtils.h to the top. I am now left with 5 errors:

3>..\..\src\bzflag\ComposeDefaultKey.cxx(47) : error C2653: 'World' : is not a class or namespace name
3>..\..\src\bzflag\ComposeDefaultKey.cxx(47) : error C2227: left of '->getMaxShots' must point to class/struct/union/generic type
3> type is ''unknown-type''
3>..\..\src\bzflag\ComposeDefaultKey.cxx(47) : error C3861: 'getWorld': identifier not found
..\..\src\bzflag\ComposeDefaultKey.cxx(245) : error C2144: syntax error : 'int' should be preceded by ')'
3>..\..\src\bzflag\ComposeDefaultKey.cxx(245) : error C2059: syntax error : ')'

randomdude said...

I just added #include world.h into the top and now i am left with 2 errors, both unrelated to the cheatweirdaim cheat. Well thats good i suppose. So i'm left with these 2:

3>..\..\src\bzflag\ComposeDefaultKey.cxx(246) : error C2144: syntax error : 'int' should be preceded by ')'
3>..\..\src\bzflag\ComposeDefaultKey.cxx(246) : error C2059: syntax error : ')'

They both refer to the lines that i have for the /front cheat. Now prepare to be dazzled by annoying copy-paste code from my composedefaultkey.cxx!


else if(message=="/front") {
const Player *Other = LocalPlayer::getMyTank()->getRecipient();
if(Other)
{
LocalPlayer::getMyTank()->setStatus(LocalPlayer::getMyTank()->getStatus() int(PlayerState::Teleporting));
const float* pos = Other->getPosition();
const float* dir = Other->getForward();
const float* vel = Other->getVelocity();
float newpos[3];
float newvel[3];
newpos[0] = pos[0] + 10 * dir[0];
newpos[1] = pos[1] + 10 * dir[1];
newpos[2] = pos[2] + 0.01;
newvel[0] = vel[0];
newvel[1] = vel[1];
newvel[2] = vel[2];
LocalPlayer::getMyTank()->move(newpos, TargetingUtils::getTargetAzimuth(newpos , pos ));
}
LocalPlayer::getMyTank()->setStatus(LocalPlayer::getMyTank()->getStatus() & ~int(PlayerState::Teleporting));
}
else if (LocalCommand::execute(cmd)) { //And put an "else" before "if"

randomdude said...

OK, all my problems are resolved, fixed them all. I don't understand why other people didn't have these problems :|. I do have one thing though, the /front cheat. When i do it, i go in front of them but it kills me (well, sorta. it says 'press i to start', but i cant spawn even if i press it). It's because i changed the line

LocalPlayer::getMyTank()->setStatus(LocalPlayer::getMyTank()->getStatus() int(PlayerState::Teleporting));


to

LocalPlayer::getMyTank()->setStatus(LocalPlayer::getMyTank()->getStatus() & int(PlayerState::Teleporting));


Trouble is, if i dont change that line the thing wont compile.

Any chance you guys can help me out?

phasmophage said...

Instead of an ampersand (&), I believe it was supposed to be a pipe (|). In reality, I don't think that line of code is necessary to teleport, but I put it in because I thought it helped me from being autokicked. (I'm not sure if it actually helps.) Let me know if this works.
Oh, and nice work on figuring out the missing headers.
-Phaz

Webstrand said...

Is there any way to modify BZDB values? in StateDatabase.cxx:
Line 126:
const std::string StateDatabase::BZDB_GRAVITY = std::string("_gravity");
when it is accessed anywhere else it is a float value, if i try:
const std::string StateDatabase::BZDB_GRAVITY = "0.00000";
and then look for the value in another source file it is "nan"

what do i do?

phasmophage said...

BZDB float variables can be modified like so:
BZDB.setFloat(StateDatabase::BZDB_GRAVITY, 12345.67);
What exactly are you trying to do with gravity? There's already a Zero gravity cheat on the site.

Anyways, hope this helps.
-Phaz

Webstrand said...

I just copied one of the BZDB variables that i knew was a float, i'm trying to get very fast to instant reload time.

Webstrand said...

I thought setting it like that might keep the shot lifetime the same. How can i speed up my reload time and keep my shot lifetime the same? I dont want to increase the speed.

phasmophage said...

Here's something to consider if you're trying to have reload time shorter than shot lifetime:
While it is possible to shoot bullets even if all bullets are not expired, the bullets that you shoot will have to replace bullets that you've shot previously.

Are you trying to do something like this?

Webstrand said...

I'm not sure i understand what you mean.
What i want is to be able to shoot bullets faster than other tanks on a 3 shot server, like DUB.

phasmophage said...

Do you want reload time shorter than shot lifetime?

Webstrand said...

Yes thats what i want, i think i understand now. Would it be easier to increase my shot count? If so how would i do that?

Webstrand said...

Ok i just increased my shot count to twenty, the server has max of 3 shots, but the other 17 bullets seem to have no effect, did i miss something?

phasmophage said...

Basically, what I was trying to say before is that you cannot shoot more bullets than the server allows. Sorry that I wasn't too clear on that. You can, however, end another shot by shooting another bullet with the same ID. This will allow you to shoot faster.

Webstrand said...

Ok, so its not possible. Got it :) If my bullets dissappear quickly, though they appear on other clients, i cant see them, so its useless. Ok before i actualy try and apply this idea is it even possible. Could you increase the world size, say from 800, to 1000, or from 400 to 600? Or would you be droped from the server as soon as you left the 'map' becuase the coordinates of your position were invalid to the server?

Webstrand said...

Hmmm i have been banned from DUB, cause of my cheating. Can the bzflag server see my MAC address? Cause i tried to connect to DUB Pillbox server via two different internet providers... sand still got the message: REFUSED: To discourage Myron who comes here cheating every day again by caty. Both places i tried, have differen IPs, not even the same service provider.

phasmophage said...

Hmm... I've never heard of being banned by MAC address on BZFlag. I'll have to look into that. In the mean time, you can change your MAC address by editing your registry (search online for the details on how to do this.)
Oh, and about changing the world size: Are you trying to jump out of boundaries? If this is what you're trying to do, it won't work. The BZFlag server checks positions of tanks and only tolerates them to go up to ten units (by default) horizontally outside the world.

Webstrand said...

Thanks for the info on the World map size, yes thats what i was trying to do. As for the MAC address, i use linux, and its quite easy to change. I just hadnt had chance to try it.

Webstrand said...

Hmm... the MAC didnt fix it. Must have been a subnet ban.

Webstrand said...
This comment has been removed by the author.
quantumdot said...

Hey, can u guys PLEASE post up an adjustable tanksize, tank direction, and radar path cheat for mac? 10.5.1 ty.

person said...
This comment has been removed by the author.
quantumdot said...

I believe that nightmare is on the same operating system as me. as the last time i checked he was on 10.4, i'm not sure if he's upgraded to 10.5, but was hoping i could somehow get a copy of it, i seem to have a problem compiling on my computer.

person said...

NightMare is on windows. If you need I can post Exact instructions (or more accuratly post a link to a download of a text file with instructions) on how to install develiport tools and compile bzflag 2.0.8 under mac os x 10.4.

person said...
This comment has been removed by the author.
Sk3letr0n said...

Hey, I need to talk to you Lord Jesus. I'm creating a site much like this and I would like your permission to include your posts on it. And maybe if your interested I can even make you an admin on it. It's going to be nuke evo so there will be everything like on here but better, we can host our own downloads and put all the links in a links setion, and there's even forums to talk on rather than talking through comments.

But anyways let me know if your interested, I can make all of you (Lord Jesus, nightmare, phasmophage, etc etc) admins on it.

Please add me on msn:
XJ62495@hotmail.com

Sk3letr0n said...

And I forgot to put in the above comment,

If there's anyone else that wants to help out with my new site and be an admin pr create forums or anything, feel free to email me or add me on msn too. I put my email in the post above so yea.

We could use new members and admins and moderators.

person said...
This comment has been removed by the author.
Sk3letr0n said...

Hey, it's not quite finished yet but I thought I would share the link with you guys. I'm still waiting for the custom theme to be emailed to me and I still need to create a links and downloads section but it's coming along.

And earlier I setup the forums and I create a post on how to make it so that it doesn't show your on autopilot with the "[auto]" after you name in the scoreboard, so check that out too while your their it's simple but useful.

I plan on adding a few more posts to build up a pretty good collection. Everyone here is welcome to come and post your cheats too. :)

Here is the link:
http://bzfcheater.xolur.com

Enjoy!

PS. I'm still also looking for a few people that would like to be an admin or moderator of the forums or any other section on the site. So if your interested create an account and use the feedback form to request an admin or moderator position.

person said...
This comment has been removed by the author.
quantumdot said...

hey guys i need a new client, also i would like the source for it if possible:

-Z/X/C to toggle 50%,80%, and 100%
-radar path (toggles with "spa")
-tank direction (toggles with "brl")
-2.0.10 client string
-fullscreen radar

quantumdot said...

never mind, I got what I wanted. Is there any radar mods besides Radar Path and tank direction?

peerappel said...

Hello, im new too cheating. i saw Sk3letr0n ingame cheating hehe, (in planet mofo free for all server). i extracted the source folder anywhere on my comp. Edited one file (test). @the end of the script it says: Save the file compile youre new client. How can i compile my new client? Can give me links for what i need? and a tut? (screens, text, youtube)

Thanks! i hope one of you can help me.

System:
mac os x
bzflag 2.0.10

peerappel said...
This comment has been removed by the author.
Tom1990 said...

I'm new and don't know what to do. How do i find .cxx files and edit them? (guessing that's what i have to do?)

phasmophage said...

You'll need to download the source for BZFlag first. It's available at SourceForge.

the_superficial said...

I really find it great, what you are doing. Helping the weaker ones to be competitive. I have the same problem. On every map I join, there are these old, good players, killing me and making fun of it. Maybe you can help me?

I need a Windows Client with FullscreenRadar, RadarPath, ShotPrediction, TankSize, and ClientQuery spoofing as a normal win 2.0.10 client

I thought I try to compile my own client by using the infos I got here, but it seems I cant install properly MS Visualbasic, allways failures. So I cant compile my own version; but I really would like to. So - I have to set up an new Windows OS first. Maybe you can help me with sending a compiled Version, with the things I mentioned above?
I would be really thankfull and praise you all day long. Maybe I can offer you something very interesting in exchange for this little favor.
please contact me at: the_superficial@gmx.de

phasmophage said...

BZFlag doesn't use Visual Basic, it uses C++. If Visual Studio doesn't work, you might try Dev-C++ (which is what I used back when I was on Windows).

We normally don't do precompiled clients. (Personally, I think it makes it too easy) If you have troubles with Dev-C++, let me know. However, BZFlag Cheat is now pretty much defunct.

peerappel said...

Hi,
Tried to compile for like 2 weeks now xD.
Can't figure it out. Keep getting error's, followed different tuts xD.

Could anyone post Mac OS X 10.4 client
With radar shot direction and tank size xD?
Thanks!

If you dont have that client. put another client with some hacks if you want to. Feel free to help :P

person said...
This comment has been removed by the author.
peerappel said...

i mailed you. thanks

FEG said...

It's a shame this place died out, really, it's one of the few BZF cheating communities, if not the only one. I guess there's not a lot more to be accomplished, really, but it was fun while it lasted.

person said...
This comment has been removed by the author.
Unknown said...

Sent you an e-mail to the above address. Don't know if you are still able to use it.

phasmophage said...

I would guess that the reason you're getting errors is because you don't have all the necessary libraries installed. You'll need to install libraries for libcURL and SDL (I've forgotten if there are others).

I'm actually not cheating anymore (really!) so I wouldn't really encourage you to cheat. But it's good to be able to know how to compile the client in case you want to add non-cheat patches. For example, there's a patch that allows you to change radar size and panel size separately (just check out the SourceForge site).

It is a shame this place died out. But, yeah, there wasn't much more to be done. Blatant cheats (which were my specialty) are no longer the rage. It seems these days it's all about subtle cheats, and now you really can't tell who's cheating and who's not.

BZFlag is actually a really fun game once you get the feel for it. But, yes, it's not a really noob-friendly game (at first). People always say that you'll never learn how to play the game if you cheat. And while it's true that you'll learn much slower, one skill you might learn, like me, is how to type and play at the same time. ;P

But if you have trouble compiling, I guess let me know by posting a comment. I do monitor this from time to time. BZCheat is pretty much dead (more dead than this one) and I got the whole story (besides the "secret message" left on the site). I wonder what's up with Sk3letr0n saying the site is "EVIL!!" and such.

Anyways, BZFlag is a great game. You really shouldn't cheat because you'll find yourself banned in a lot of places, and once you stop cheating you'll find you can't play that many games.

This comment has gone on too long.

Have fun,
phasmophage

phasmophage said...

EDIT:
I meant to say I never got the whole story on what happened with BZCheat (besides the "secret message").

-phasmophage

Unknown said...

Would you still be willing to offer help with subtle cheats?

Unknown said...

By help, I mean giving out source code to a subtle cheat that is not found on the site, like Radar Path (for ricochet prediction of ALL shots). I can handle the compiling.

Sk3letr0n said...

Why do you want to cheat? It ruins a perfectly good game for the other players. Why don't you spend the time to practice instead of asking for cheats.

person said...
This comment has been removed by the author.
phasmophage said...

I'm kind of against the radar bullet path cheat, even though I have it. I suspect there are a lot of people who have it and don't admit to being cheaters. So, no, I'm not going to explicitly tell you the code, but I will tell you that it's easier than you might think. All you have to do is look at how lasers are rendered.

Unknown said...

Hey there, I was able to figure out the radar shot path, but what about seeing on the radar the way the tank is turned? Any tips or code on this you are willing to give away?

TELE said...

Jesus or phas, it's tele...i was looking all over your damn site to find a god damn link to your mail but...oh well this works i guess. Important you get back to me asap, I have an interesting idea ^^

p.s- how the fuck am i not on the top banned players? what's up with that? ;)

phasmophage said...

Hey what's up?

I don't really maintain this site anymore, but what's your idea?

Anonymous said...
This comment has been removed by a blog administrator.
Anonymous said...
This comment has been removed by a blog administrator.
Sk3letr0n said...
This comment has been removed by the author.
吃太飽 said...
This comment has been removed by a blog administrator.
Anonymous said...
This comment has been removed by a blog administrator.