How can I shorten it ?
#1

Hey guys, Got some mode from the internet to return to scripting after retiring for a few months, Tried to edit the level system so I wonder if I can make it with variables instead of this long ass code

+ I will be happy if you guys help me succeed with SendClientMessage when a player levels up - tried to do such thing but didn't go so well = a warning had popped out

Код:
// Levels: 1-30
		        if(PlayerInfo[i][pLevel] == 1 && PlayerInfo[i][pExp] >= 4) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 2 && PlayerInfo[i][pExp] >= 8) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 3 && PlayerInfo[i][pExp] >= 12) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 4 && PlayerInfo[i][pExp] >= 16) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 5 && PlayerInfo[i][pExp] >= 20) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 6 && PlayerInfo[i][pExp] >= 24) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 7 && PlayerInfo[i][pExp] >= 28) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 8 && PlayerInfo[i][pExp] >= 32) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 9 && PlayerInfo[i][pExp] >= 36) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 10 && PlayerInfo[i][pExp] >= 40) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 11 && PlayerInfo[i][pExp] >= 44) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 12 && PlayerInfo[i][pExp] >= 48) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 13 && PlayerInfo[i][pExp] >= 52) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 14 && PlayerInfo[i][pExp] >= 56) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 15 && PlayerInfo[i][pExp] >= 60) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 16 && PlayerInfo[i][pExp] >= 64) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 17 && PlayerInfo[i][pExp] >= 68) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 18 && PlayerInfo[i][pExp] >= 72) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 19 && PlayerInfo[i][pExp] >= 76) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 20 && PlayerInfo[i][pExp] >= 80) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 21 && PlayerInfo[i][pExp] >= 84) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 22 && PlayerInfo[i][pExp] >= 88) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 23 && PlayerInfo[i][pExp] >= 92) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 24 && PlayerInfo[i][pExp] >= 96) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 25 && PlayerInfo[i][pExp] >= 100) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 26 && PlayerInfo[i][pExp] >= 104) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 27 && PlayerInfo[i][pExp] >= 108) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 28 && PlayerInfo[i][pExp] >= 112) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 29 && PlayerInfo[i][pExp] >= 116) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 30 && PlayerInfo[i][pExp] >= 120) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 31 && PlayerInfo[i][pExp] >= 124) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 32 && PlayerInfo[i][pExp] >= 128) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 33 && PlayerInfo[i][pExp] >= 132) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 34 && PlayerInfo[i][pExp] >= 136) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 35 && PlayerInfo[i][pExp] >= 140) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 36 && PlayerInfo[i][pExp] >= 144) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 37 && PlayerInfo[i][pExp] >= 148) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 38 && PlayerInfo[i][pExp] >= 152) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 39 && PlayerInfo[i][pExp] >= 156) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 40 && PlayerInfo[i][pExp] >= 160) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 41 && PlayerInfo[i][pExp] >= 164) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 42 && PlayerInfo[i][pExp] >= 168) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 43 && PlayerInfo[i][pExp] >= 172) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 44 && PlayerInfo[i][pExp] >= 176) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 45 && PlayerInfo[i][pExp] >= 180) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 46 && PlayerInfo[i][pExp] >= 184) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 47 && PlayerInfo[i][pExp] >= 188) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 48 && PlayerInfo[i][pExp] >= 192) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 49 && PlayerInfo[i][pExp] >= 196) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 50 && PlayerInfo[i][pExp] >= 200) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 51 && PlayerInfo[i][pExp] >= 204) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 52 && PlayerInfo[i][pExp] >= 208) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 53 && PlayerInfo[i][pExp] >= 212) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 54 && PlayerInfo[i][pExp] >= 216) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 55 && PlayerInfo[i][pExp] >= 220) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 56 && PlayerInfo[i][pExp] >= 224) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 57 && PlayerInfo[i][pExp] >= 228) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 58 && PlayerInfo[i][pExp] >= 232) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 59 && PlayerInfo[i][pExp] >= 236) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 60 && PlayerInfo[i][pExp] >= 240) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 61 && PlayerInfo[i][pExp] >= 244) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 62 && PlayerInfo[i][pExp] >= 248) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 63 && PlayerInfo[i][pExp] >= 252) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 64 && PlayerInfo[i][pExp] >= 256) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 65 && PlayerInfo[i][pExp] >= 260) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 66 && PlayerInfo[i][pExp] >= 264) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 67 && PlayerInfo[i][pExp] >= 268) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 68 && PlayerInfo[i][pExp] >= 272) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 69 && PlayerInfo[i][pExp] >= 276) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 70 && PlayerInfo[i][pExp] >= 280) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 71 && PlayerInfo[i][pExp] >= 284) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 72 && PlayerInfo[i][pExp] >= 288) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 73 && PlayerInfo[i][pExp] >= 292) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 74 && PlayerInfo[i][pExp] >= 296) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 75 && PlayerInfo[i][pExp] >= 300) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 76 && PlayerInfo[i][pExp] >= 304) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 77 && PlayerInfo[i][pExp] >= 308) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 78 && PlayerInfo[i][pExp] >= 312) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 79 && PlayerInfo[i][pExp] >= 316) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 80 && PlayerInfo[i][pExp] >= 320) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 81 && PlayerInfo[i][pExp] >= 324) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 82 && PlayerInfo[i][pExp] >= 328) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 83 && PlayerInfo[i][pExp] >= 332) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 84 && PlayerInfo[i][pExp] >= 336) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 85 && PlayerInfo[i][pExp] >= 340) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 86 && PlayerInfo[i][pExp] >= 344) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 87 && PlayerInfo[i][pExp] >= 348) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 88 && PlayerInfo[i][pExp] >= 352) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 89 && PlayerInfo[i][pExp] >= 356) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 90 && PlayerInfo[i][pExp] >= 360) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 91 && PlayerInfo[i][pExp] >= 364) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 92 && PlayerInfo[i][pExp] >= 368) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 93 && PlayerInfo[i][pExp] >= 372) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 94 && PlayerInfo[i][pExp] >= 376) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 95 && PlayerInfo[i][pExp] >= 380) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 96 && PlayerInfo[i][pExp] >= 384) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 97 && PlayerInfo[i][pExp] >= 388) PlayerInfo[i][pLevel]++;
			else if(PlayerInfo[i][pLevel] == 98 && PlayerInfo[i][pExp] >= 392) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 99 && PlayerInfo[i][pExp] >= 396) PlayerInfo[i][pLevel]++;
		        else if(PlayerInfo[i][pLevel] == 100 && PlayerInfo[i][pExp] >= 400) PlayerInfo[i][pLevel]++;
		        // Setting Level
		        SetPlayerScore(i, PlayerInfo[i][pLevel]);
Reply
#2

It's quite simple: Add +1 to player level if his exp is at correct threshold. We'll go from top level to bottom as to increment level once.

[pawn]for (new level = 100; level > 0; --level) {
if(!(PlayerInfo[i][pLevel] == level && PlayerInfo[i][pExp] >= level * 4)) continue;

PlayerInfo[i][pLevel]++;

break;
}

SetPlayerScore(i, PlayerInfo[i][pLevel]);/pawn]
Reply
#3

Normally I would say "Go to scripting request section", but this is too easy to pass up.

pawn Код:
if(!(PlayerInfo[i][pExp] % 4) && (PlayerInfo[i][pLevel] == PlayerInfo[i][pExp] / 4))
            {
                new fstr[50];
                PlayerInfo[i][pLevel]++;
                // Reset PlayerInfo[i][pExp] here???
                SetPlayerScore(i, PlayerInfo[i][pLevel]);
                format(fstr, sizeof(fstr), "You have levelled up to level %d!", PlayerInfo[i][pLevel]);
                SendClientMessage(i, -1, fstr);
            }
Код:
if(!(PlayerInfo[i][pExp] % 4)
This checks if 'PlayerInfo[i][pExp] is divisible by 4. If it is, it returns '0', the remainder between the next multiple of 4.

Код:
(PlayerInfo[i][pLevel] == PlayerInfo[i][pExp] / 4)
This checks if pLevel is a quarter of pExp.

Код:
new fstr[50];
New string/array variable.

Код:
PlayerInfo[i][pLevel]++;
Increase level by 1.

Код:
// Reset PlayerInfo[i][pExp] here???
This is a comment, but if you're making a level system, levels should be harder to attain each time. I think you should be setting pExp to 0 at this point, but that's just my opinion.

Код:
SetPlayerScore(i, PlayerInfo[i][pLevel]);
Set player's score to the new level.

Код:
format(fstr, sizeof(fstr), "You have levelled up to level %d!", PlayerInfo[i][pLevel]);
Formatting the string to include a variable, see https://sampwiki.blast.hk/wiki/Format

Код:
SendClientMessage(i, -1, fstr);
Send the formatted message to player ID 'i'.

EDIT: I knew I shouldn't have explained the code :P

The above method works as well.
Reply
#4

I think this is the best option
Код:
if(PlayerInfo[i][pLevel] < 100 && PlayerInfo[i][pExp] >= PlayerInfo[i][pLevel]*4) PlayerInfo[i][pLevel]++;
Reply
#5

Quote:
Originally Posted by Threshold
Посмотреть сообщение
Normally I would say "Go to scripting request section", but this is too easy to pass up.

pawn Код:
if(!(PlayerInfo[i][pExp] % 4) && (PlayerInfo[i][pLevel] == PlayerInfo[i][pExp] / 4))
            {
                new fstr[50];
                PlayerInfo[i][pLevel]++;
                // Reset PlayerInfo[i][pExp] here???
                SetPlayerScore(i, PlayerInfo[i][pLevel]);
                format(fstr, sizeof(fstr), "You have levelled up to level %d!", PlayerInfo[i][pLevel]);
                SendClientMessage(i, -1, fstr);
            }
Код:
if(!(PlayerInfo[i][pExp] % 4)
This checks if 'PlayerInfo[i][pExp] is divisible by 4. If it is, it returns '0', the remainder between the next multiple of 4.

Код:
(PlayerInfo[i][pLevel] == PlayerInfo[i][pExp] / 4)
This checks if pLevel is a quarter of pExp.

Код:
new fstr[50];
New string/array variable.

Код:
PlayerInfo[i][pLevel]++;
Increase level by 1.

Код:
// Reset PlayerInfo[i][pExp] here???
This is a comment, but if you're making a level system, levels should be harder to attain each time. I think you should be setting pExp to 0 at this point, but that's just my opinion.

Код:
SetPlayerScore(i, PlayerInfo[i][pLevel]);
Set player's score to the new level.

Код:
format(fstr, sizeof(fstr), "You have levelled up to level %d!", PlayerInfo[i][pLevel]);
Formatting the string to include a variable, see https://sampwiki.blast.hk/wiki/Format

Код:
SendClientMessage(i, -1, fstr);
Send the formatted message to player ID 'i'.

EDIT: I knew I shouldn't have explained the code :P

The above method works as well.
Ugh seems like scripting breaks get your mind cleared out of PAWN XD
Great man, thank you (btw yeah I will reset the XP indeed)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)