Reduce Wanted Level -
SnG.Scot_MisCuDI - 16.08.2014
Here is my code to reduce the players wanted level every 5 minutes (if they have stars and are not near a cop)
It did work at once point, but either i changed the code or something out of the ordinary is happening
Even if no cops are connect it still doesnt remove a star
pawn Код:
forward WantedLevelReduce();
pawn Код:
public OnGameModeInit()
{
SetTimer("WantedLevelReduce",300_000, true);
pawn Код:
public WantedLevelReduce()
{
new string[100];
for(new i = 0; i < MAX_PLAYERS; i++)
{
new cop = Info[i][Team] == BP;
new plwl = GetPlayerWantedLevel(i);
if(Info[i][Team] != BP) return SendClientMessageToAll(COLOR_GREEN, "You should have lost a star"); //Just for debug to see if the star was supposed to be removed
if(plwl <= 0)
{
return 0;
}
if(plwl >= 1)
{
if(GetDistanceBetweenPlayers(i,cop) >= 80 || !IsPlayerConnected(cop))
{
SetPlayerWantedLevel(i, plwl -1);
plwl = GetPlayerWantedLevel(i);
format(string, sizeof(string), "Wanted Level Decreased To: %d",plwl);
SendClientMessage(i, GetPlayerColor(i), string);
}
}
}
return 1;
}
The message "You should have lost a star" does appear in game but stars are not removed
Re: Reduce Wanted Level -
Virtual1ty - 16.08.2014
Well yeah ding-dong, your code "stops" after that debug message because you "return" there.
Also what's with this var assignment here, shouldn't it just equal the players team?
Код:
new cop = Info[i][Team] == BP;
Also your IsPlayerConnected check is useless there as you're already checking the distance between two (connected) players.
Re: Reduce Wanted Level -
SnG.Scot_MisCuDI - 16.08.2014
Quote:
Originally Posted by Virtual1ty
Well yeah ding-dong, your code "stops" after that debug message because you "return" there.
Also what's with this var assignment here, shouldn't it just equal the players team?
Код:
new cop = Info[i][Team] == BP;
Also your IsPlayerConnected check is useless there as you're already checking the distance between two (connected) players.
|
I just added the debug message before posting to forums, the code wasnt working before the message either. But i see how that would affect the code.
Fixed new cop to just
pawn Код:
if(GetDistanceBetweenPlayers(i,Info[i][Team] == BP) >= 80)
and removed isplayerconnected
pawn Код:
public WantedLevelReduce()
{
new string[100];
for(new i = 0; i < MAX_PLAYERS; i++)
{
new plwl = GetPlayerWantedLevel(i);
if(plwl >= 1)
{
if(GetDistanceBetweenPlayers(i,Info[i][Team] == BP) >= 80)
{
plwl--;
SetPlayerWantedLevel(i, plwl);
format(string, sizeof(string), "Wanted Level Decreased To: %d",plwl);
SendClientMessage(i, GetPlayerColor(i), string);
}
}
}
return 1;
}
Re: Reduce Wanted Level -
Virtual1ty - 16.08.2014
Yeah, you just don't need (again) to stop the loop at the first player that isn't wanted, remove ANY "returns", you're already checking "if (plwl >= 1)" you do not need to make the opposite!
Also, use "plwl--; " before SetPlayerWantedLevel, because (afaik) you do not need to call the GetPlayerWantedLevel again as you already have it in a variable.
One cardinal mistake though: both of the inputs for GetDistanceBetweenPlayers have to be player IDs!
Re: Reduce Wanted Level -
SnG.Scot_MisCuDI - 16.08.2014
Quote:
Originally Posted by Virtual1ty
Yeah, you just don't need (again) to stop the loop at the first player that isn't wanted, remove ANY "returns", you're already checking "if (plwl >= 1)" you do not need to make the opposite!
Also, use "plwl--; " before SetPlayerWantedLevel, because (afaik) you do not need to call the GetPlayerWantedLevel again as you already have it in a variable.
One cardinal mistake though: both of the inputs for GetDistanceBetweenPlayers have to be player IDs!
|
Thank you very much for your help, the code looks a lot more clean.
Also "One cardinal mistake though: both of the inputs for GetDistanceBetweenPlayers have to be player IDs! " What do you mean?
Re: Reduce Wanted Level -
Norrin - 16.08.2014
new cop = Info[i][Team] == BP;
The value stored in cop would be of boolean algebra. Change it.
Re: Reduce Wanted Level -
SnG.Scot_MisCuDI - 16.08.2014
Quote:
Originally Posted by Norrin
new cop = Info[i][Team] == BP;
The value stored in cop would be of boolean algebra. Change it.
|
This line is already removed.
Re: Reduce Wanted Level -
Virtual1ty - 16.08.2014
Quote:
Originally Posted by SnG.Scot_MisCuDI
Thank you very much for your help, the code looks a lot more clean.
Also "One cardinal mistake though: both of the inputs for GetDistanceBetweenPlayers have to be player IDs! " What do you mean?
|
I meant specifically this line:
Код:
if(GetDistanceBetweenPlayers(i,Info[i][Team] == BP) >= 80)
The part in red evaluates to either true or false (1 or 0), which I believe, is not what you want. Both parameters must be valid playerids.