Конструкции if/else if/else
У нас в скрипте есть глобальная переменная:
new onlineplayers;
В OnPlayerConnect и в OnPlayerDisconnect происходит увеличение/уменьшение значений нашей глобальной переменной:
public OnPlayerConnect(playerid) { onlineplayers++; return 1; } public OnPlayerDisconnect(playerid,reason) { onlineplayers--; return 1; }
Теперь используем конструкции.
public OnPlayerConnect(playerid) { onlineplayers++; if (onlineplayers == 0) { //1 print("Na servere net igrokov!"); } else if (onlineplayers > 10 && onlineplayers < 20) { //2 print("Na servere bolshe 10, no men'she 20 igrokov!"); } else { //3 printf("Na servere %d igrokov!",onlineplayers); } return 1; }
1. if проверяет если значение переменной onlineplayers равно 0 то пишет в консоли сервера что игроков нет
2. else if проверяет если значение переменной onlineplayers больше 10 и меньше 20 то пишет в консоле сервера соответствующую надпись.
3. В остальных случаях просто пишется количество игроков.
Конструкция case
Допусти в гейммоде есть массив, в котором хранится статус каждого игрока:
new massiv[MAX_PLAYERS];
Администратор сервера сам назначает статусы игрокам.
Также статусы записываются в файл и при вхоже игрока загружаются.
Употребим конструкцию case в вызываемой функции OnPlayerConnect:
public OnPlayerConnect(playerid) { switch(massiv[playerid]) { 1// case 0: { SendClientMessage(playerid,COLOR_GREEN,"* Вы обычный игрок!"); } case 1: {//2 SendClientMessage(playerid,COLOR_GREEN,"* Вы элитный игрок!"); } case 2: { SendClientMessage(playerid,COLOR_GREEN,"* Вы модератор!"); } case 3: { SendClientMessage(playerid,COLOR_GREEN,"* Вы администратор!"); }} return 1; }
1. Здесь мы выбираем что будет проверять. В данном случает это значение массива massiv в ячейке playerid
2. Если значение ячейки равно 0, то шлется сообщение игроку, что он обычный игрок.
3. Аналогично и в остальных ситуациях.
Цикл while
Цикл while довольно редко используется, но все равно знать необходимо.
Цикл переводится как пока что-то, то что-то (прим. автора)
Рассмотрим на примере:
new a=50,b; //две глобальные переменные. Первая равна 50, а вторая 0 while (a > b) {//пока a больше b, то b++; //увеличиваем b на единицу printf("a > b b=%d",b); //пишем в консоли значение b }
Когда b будет равно a, то цикл прекратится.
Цикл for
Цикл for предназначен для перебирания значений.
Также его еще называют лупингом (loop,looping)
Рассмотрим на примере:
new onlineplayers; //глобальная переменная for (new i=0;i<MAX_PLAYERS;i++) { //1 if (IsPlayerConnected(i) == 1) {//2 onlineplayers++;//3 }}
1. Назначение перебирания. То есть значение и будет в диапазоне от 0 до MAX_PLAYERS (200)
2. Если какой-либо игрок со значением ид в диапазоне от 0 до MAX_PLAYERS (200) находится в игре, то
3. Значение переменной onlineplayers увеличивается на единицу.