[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Урок по созданию категорий лицензий A,B,C
Дата: 30.01.2011, Воскресенье, 20:29:17 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 225
Репутация: 255+
В этом уроке я научу вас создавать категории лицензий A,B,C .
Эту систему я вырезал одного мода и переделал...

В enum pInfo добавляем:

Code
pCarLicA,
pCarLicB,
pCarLicC,

Потом ищем if(newstate == PLAYER_STATE_DRIVER)
И добавляем:

Code
else
    {
     if(IsACarA(newcar))
     {
      if(PlayerInfo[playerid][pCarLicA] == 0)
      {
       if(PlayerDrunk[playerid] >= 3)
       {
        WantedPoints[playerid] += 1;
        SetPlayerCriminal(playerid,255, " Вождение в нетрезвом состоянии ");
       }
       if(TakingLesson[playerid] != 1)
       {
        SendClientMessage(playerid, COLOR_GREY, "* У вас нет лицензии на управление транспортом категории А!");
        RemovePlayerFromVehicle(playerid);
        TogglePlayerControllable(playerid,1);
       }
      }
     }
     else if(IsACarB(newcar))
     {
      if(PlayerInfo[playerid][pCarLicB] == 0)
      {
       if(PlayerDrunk[playerid] >= 5)
       {
        WantedPoints[playerid] += 1;
        SetPlayerCriminal(playerid,255, " Вождение в нетрезвом состоянии ");
       }
       if(TakingLesson[playerid] != 1)
       {
        SendClientMessage(playerid, COLOR_GREY, "* У вас нет лицензии на управление транспортом категории B!");
        RemovePlayerFromVehicle(playerid);
        TogglePlayerControllable(playerid,1);
       }
      }
     }
     else if(IsACarC(newcar))
     {
      if(PlayerInfo[playerid][pCarLicC] == 0)
      {
       if(PlayerDrunk[playerid] >= 5)
       {
        WantedPoints[playerid] += 1;
        SetPlayerCriminal(playerid,255, " Вождение в нетрезвом состоянии ");
       }
       if(TakingLesson[playerid] != 1)
       {
        SendClientMessage(playerid, COLOR_GREY, "* У вас нет лицензии на управление транспортом категории C!");
        RemovePlayerFromVehicle(playerid);
        TogglePlayerControllable(playerid,1);
       }
      }
     }

Потом идем в конец мода
И добавляем:
Code
IsACarA(carid)//Лицензии категории A
{
   new m = GetVehicleModel(carid);
   if(m==441
   ||m==461
   ||m==463
   ||m==468
   ||m==471
   ||m==521
   ||m==522
   ||m==523
   ||m==586
   ||m==581)
   {
    return 1;
   }
   return 0;
}

IsACarB(carid)//Лицензии категории B
{
   new m = GetVehicleModel(carid);
   if((m>=400&&m<=405)
   ||((m>=409&&m<=426)&& m!=414 && m!=417 && m!=425)
   ||m==429
   ||m==434
   ||m==436
   ||m==438
   ||m==439
   ||m==440
   ||m==442
   ||m==445
   ||m==449
   ||m==451
   ||m==458
   | |m==459
   | |m==466
   ||m==467
   ||m==468
   ||m==470
   ||m==474
   ||m==475)
   {
    return 1;
   }
   else if(m==477
   ||m==478
   ||m==479
   ||m==480
   ||m==482
   ||m==483
   ||m==485
   ||((m>=489 && m<=496) && m!=493)
   ||m==500
   ||(m>=502&&m<=507)
   ||m==516
   ||m==517
   ||m==518
   ||(m>=526&&m<=530)
   ||(m>=533&&m<=536)
   ||((m>=540&&m<=551) && m!=544 && m!=548)
   ||m==554
   ||m==555
   ||(m>=558&&m<=562)
   ||(m>=565&&m<=568))
   {
    return 1;
   }
   else if(m==572
   ||m==574
   ||m==575
   ||m==576
   ||m==579
   ||m==580
   ||m==582
   ||m==585
   ||m==587
   ||m==589
   ||m==596
   ||m==59 7
   ||m==59 8
   ||m==599
   ||m==600
   ||(m>=602 && m<=605))
   {
    return 1;
   }
   return 0;
}

IsACarC(carid)//Лицензии категории C
{
   new m = GetVehicleModel(carid);
   if(m==403
   ||m==406
   ||m==407
   ||m==432
   ||m==408
   ||m==414
   ||m==423
   ||m==428
   ||m==431
   ||m==433
   ||m==437
   ||m ==443
   ||m= =444
   ||m==455
   ||m==456
   ||m==486
   ||m==498
   ||m==499
   ||m==508
   ||m==514
   ||m==515
   ||m==524
   ||m==525
   ||m==537
   | |m==538
   | |m==552
   ||m==556
   ||m==557
   ||m==573
   ||m==578
   ||m==583
   ||m==588
   ||m==601
   ||m==609
   ||m==427
   ||m==531
   ||m==539
   | |m==544
   | |m==564)
   {
    return 1;
   }
   return 0;
}

Теперь идем в саму команду...
Находим в if(strcmp(cmd, "/givelicense",
Такие строки:
(У меня такие строки а у вас может быть немного другие :) )
Code
else if(strcmp(x_nr,"driving",true) == 0)
      {
                tmp = strtok(cmdtext, idx);
       if(!strlen(tmp))
       {
           SendClientMessage(playerid, COLOR_ISPOLZUY, "*Используйте: /agl Driverslicense [ид]");
           return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
               GetPlayerName(playerid, sendername, sizeof(sendername));
               GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                  format(string, sizeof(string), "* You've given a Driving License to %s.",giveplayer);
               SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
               format(string, sizeof(string), "* Admin %s has given you a Driving License.",sendername);
               SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
               PlayerInfo[giveplayerid][pCarLic] = 1;
               return 1;
        }
       }
       else
       {
           SendClientMessage(playerid, COLOR_GREY, "   That player is Offline !");
           return 1;
       }
      }

И заменяем на
Code
       if(strcmp(x_nr,"drivingA",true) == 0)
      {
                tmp = strtok(cmdtext, idx);
       if(!strlen(tmp))
       {
           SendClientMessage(playerid, COLOR_WHITE, " * Использование: /givelicense drivingA [playerid/PartOfName]");
           return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
               GetPlayerName(playerid, sendername, sizeof(sendername));
               GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                  format(string, sizeof(string), " * Вы выдали водительские права категории А игроку %s.",giveplayer);
               SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
               format(string, sizeof(string), " * Инструктор %s выдал вам водительские права категории А.",sendername);
               SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
               PlayerInfo[giveplayerid][pCarLicA] = 1;
               return 1;
              }
       }
       else
       {
           SendClientMessage(playerid, COLOR_GREY, " * Такого игрока нет!");
           return 1;
       }
      }
      if(strcmp(x_nr,"drivingB",true) == 0)
      {
                tmp = strtok(cmdtext, idx);
       if(!strlen(tmp))
       {
           SendClientMessage(playerid, COLOR_WHITE, " * Использование: /givelicense drivingB [playerid/PartOfName]");
           return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
               GetPlayerName(playerid, sendername, sizeof(sendername));
               GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                  format(string, sizeof(string), " * Вы выдали водительские права категории B игроку %s.",giveplayer);
               SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
               format(string, sizeof(string), " * Инструктор %s выдал вам водительские права категории B.",sendername);
               SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
               PlayerInfo[giveplayerid][pCarLicB] = 1;
               return 1;
              }
       }
       else
       {
           SendClientMessage(playerid, COLOR_GREY, " * Такого игрока нет!");
           return 1;
       }
      }
      if(strcmp(x_nr,"drivingC",true) == 0)
      {
                tmp = strtok(cmdtext, idx);
       if(!strlen(tmp))
       {
           SendClientMessage(playerid, COLOR_WHITE, " * Использование: /givelicense drivingC [playerid/PartOfName]");
           return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
               GetPlayerName(playerid, sendername, sizeof(sendername));
               GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                  format(string, sizeof(string), " * Вы выдали водительские права категории C игроку %s.",giveplayer);
               SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
               format(string, sizeof(string), " * Инструктор %s выдал вам водительские права категории C.",sendername);
               SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
               PlayerInfo[giveplayerid][pCarLicC] = 1;
               return 1;
              }
       }
       else
       {
           SendClientMessage(playerid, COLOR_GREY, " * Такого игрока нет!");
           return 1;
       }
      }

Теперь ищем команду для отбора лицензий.
У меня например if(strcmp(cmd, "/take" у вас можеть быть другая команда например if(strcmp(cmd, "/atake" ...
И в самой команде находим:
(у вас можеть быть немного по другому)...
Code
       /*if(strcmp(x_nr,"driverslicense",true) == 0)
      {
          tmp = strtok(cmdtext, idx);
       if(!strlen(tmp)) {
        SendClientMessage(playerid, COLOR_ISPOLZUY, "*Используйте: /take driverslicense [ид]");
        return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
               if (ProxDetectorS(8.0, playerid, giveplayerid))
         {
                format(string, sizeof(string), "* Вы лишили %s Лицензии Водителя.", giveplayer);
                SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
                format(string, sizeof(string), "* %s лишил вас Лицензии Водителя.", sendername);
                SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
                PlayerInfo[giveplayerid][pCarLic] = 0;
         }
         else
         {
             SendClientMessage(playerid, COLOR_RED, "** Этот игрок не возле Вас !");
             return 1;
         }
           }
       }
       else
       {
           SendClientMessage(playerid, COLOR_RED, "** Этого игрока нету на сервере !");
           return 1;
       }
      }*/

И заменяем на:

Code
    if(strcmp(x_nr,"drivingA",true) == 0)
      {
          tmp = strtok(cmdtext, idx);
       if(!strlen(tmp)) {
        SendClientMessage(playerid, COLOR_WHITE, "  Использование: /take drivingA [playerid/PartOfName]");
        return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
         GetPlayerName(playerid, sendername, sizeof(sendername));
         GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
            format(string, sizeof(string), " * Вы забрали у %s водительские права категории А.", giveplayer);
            SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
            format(string, sizeof(string), " * Админ %s забрал у вас водительские права категории А.", sendername);
            SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
            PlayerInfo[giveplayerid][pCarLicA] = 0;
           }
       }
       else
       {
           SendClientMessage(playerid, COLOR_GREY, "   Игрок оффлайн !");
           return 1;
       }
      }
      else if(strcmp(x_nr,"drivingB",true) == 0)
      {
          tmp = strtok(cmdtext, idx);
       if(!strlen(tmp)) {
        SendClientMessage(playerid, COLOR_WHITE, "  Использование: /take drivingB [playerid/PartOfName]");
        return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
         GetPlayerName(playerid, sendername, sizeof(sendername));
         GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
            format(string, sizeof(string), " * Вы забрали у %s водительские права категории B.", giveplayer);
            SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
            format(string, sizeof(string), " * Админ %s забрал у вас водительские права категории B.", sendername);
            SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
            PlayerInfo[giveplayerid][pCarLicB] = 0;
           }
       }
       else
       {
           SendClientMessage(playerid, COLOR_GREY, "   Игрок оффлайн !");
           return 1;
       }
      }
      else if(strcmp(x_nr,"drivingC",true) == 0)
      {
          tmp = strtok(cmdtext, idx);
       if(!strlen(tmp)) {
        SendClientMessage(playerid, COLOR_WHITE, "  Использование: /take drivingC [playerid/PartOfName]");
        return 1;
       }
       giveplayerid = ReturnUser(tmp);
       if(IsPlayerConnected(giveplayerid))
       {
           if(giveplayerid != INVALID_PLAYER_ID)
           {
         GetPlayerName(playerid, sendername, sizeof(sendername));
         GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
            format(string, sizeof(string), " * Вы забрали у %s водительские права категории C.", giveplayer);
            SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
            format(string, sizeof(string), " * Админ %s забрал у вас водительские права категории C.", sendername);
            SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
            PlayerInfo[giveplayerid][pCarLicC] = 0;
           }
       }
       else
       {
           SendClientMessage(playerid, COLOR_GREY, "   Игрок оффлайн !");
           return 1;
       }
      }

И еще там где
Code
SendClientMessage(playerid, COLOR_ISPOLZUY, "*Используйте: /gl [название] [ид игрока]");
SendClientMessage(playerid, COLOR_WHITE, "*Названия: driving , flying , sailing , fishing , weapon .");

Дописуем:
Code
SendClientMessage(playerid, COLOR_WHITE, "*Названия: drivingA , drivingB , drivingC , flying , sailing , fishing , weapon .");

Теперь делаем чтоб система лицензей сохранялась с вашим аккаунтом после выхода...

Добавляем в public OnPlayerLogin
Code
if( strcmp( key , "CarLicB" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCarLicB] = strval( val ); }
      if( strcmp( key , "CarLicC" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCarLicC] = strval( val ); }
                     if( strcmp( key , "FlyLic" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pFlyLic] = strval( val ); }
      if( strcmp( key , "BoatLic" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pBoatLic] = strval( val ); }

Теперь добавляем в public OnPlayerRegister
Code
    format(var, 32, "CarLicA=%d\n",PlayerInfo[playerid][pCarLicA]);fwrite(hFile, var);
     format(var, 32, "CarLicB=%d\n",PlayerInfo[playerid][pCarLicB]);fwrite(hFile, var);
     format(var, 32, "CarLicC=%d\n",PlayerInfo[playerid][pCarLicC]);fwrite(hFile, var);

Вот и система лицензий готова :)

A - лицензия на мотоциклы.
B - лицензия на легковые автомобили.
C - лицензия на тяжелые автомобили(грузовики,танки...).

Дата: 31.01.2011, Понедельник, 15:40:40 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 223
Репутация: 98+
для многих будет полезно держи + :)
Дата: 02.02.2011, Среда, 16:19:21 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 15
Репутация: 20+
Спасибо очень помого вот лови +
Дата: 02.02.2011, Среда, 20:11:19 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 225
Репутация: 255+
serqunya, нз :)
  • Страница 1 из 1
  • 1
Поиск: