[ Новые сообщения · Участники · Правила форума · Поиск · RSS ] |
|
Форум - Сообщество любителей игры GTA:MP » SA-MP Scripting » Школа PAWNO » Урок по созданию категорий лицензий A,B,C (Отлично подходит для РП серверов.) |
Урок по созданию категорий лицензий A,B,C |
Дата: 30.01.2011, Воскресенье, 20:29:17 | Сообщение # $NUMBER
В этом уроке я научу вас создавать категории лицензий 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 - лицензия на мотоциклы. |
| |||
| |||