admin Дата: Воскресенье, 13.11.2011, 19:35:04 | Сообщение # 1
Группа: Администраторы
Сообщений: 3869
как помогал aksel с рандомным тюрьмой решил выложить урок по тюрьме с рандомным спавном , что и aksel помогал. Верху мода: Code
enum pInfo { pJailTime, pMember, pLeader, pArrested, pJailed, pCash, } forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z); forward Float:GetDistanceBetweenPlayers(p1,p2); forward ServerGivePlayerMoney(playerid, money); forward jailtimer(); forward OOCNews(color,const string[]); new DengiTime[MAX_PLAYERS]; new gNews[MAX_PLAYERS]; new PlayerInfo[MAX_PLAYERS][pInfo]; #define COLOR_GREY 0xCCCCCAA #define COLOR_RED 0xFB0000FF //красный #define COLOR_LIGHTBLUE 0x33CCFFA //голубой #define COLOR_LIGHTRED 0xFF0000FF #define cmd(%1) if((strcmp(cmdtext,%1,true,strlen(%1))==0)&&(((cmdtext[strlen(%1)]==0)&&(d%1(playerid,"")))||((cmdtext[strlen(%1)]==32)&&(d%1(playerid,cmdtext[strlen(%1)+1]))))) return 1
После этого ищем public OnPlayerCommandText(playerid, cmdtext[]) и туда вставляем: Code
new WantedPoints[MAX_PLAYERS]; new WantLawyer[MAX_PLAYERS]; new giveplayerid; new string[256]; new cmd[256],tmp[256]; new idx; new glob973C[200]; new giveplayer[MAX_PLAYER_NAME]; new sendername[MAX_PLAYER_NAME]; new var4[256]; new var8 = 0; new var2[24]; new gTeam[MAX_PLAYERS]; new OnDuty[MAX_PLAYERS]; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/arrest", true) == 0) { if(IsPlayerConnected(playerid)) { if(gTeam[playerid] == 7 || (playerid)) //в место 7 поставите на свое...который скин может использовать у меня это копы. { if(OnDuty[playerid] != 1 && PlayerInfo[playerid][pMember] == 1) { SendClientMessage(playerid, COLOR_GREY, " Вы не обязаные!"); return 1; } if(PlayerToPoint(3.2,playerid,-1604.7903,719.2490,11.8317)) { SendClientMessage(playerid, COLOR_GREY, " Вы не около тюрьмы!"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_RED, " Подсказка: /arrest [ID] [время] [штраф]"); return 1; } if(strval(tmp) == playerid) { SendClientMessage(playerid, COLOR_RED, "Вы не можете себя арестовать"); return 1; } giveplayerid = strval(tmp); if(!IsPlayerConnected(giveplayerid)) { format(string, sizeof(string), "ID (%d) Не подключен", giveplayerid); SendClientMessage(playerid, 0xFF9900AA, string); return 1; } new pname[24]; GetPlayerName(giveplayerid, pname, 24); if(GetPlayerWantedLevel(giveplayerid) <= 2) { format(string, sizeof(string), "%s(%d) Ты не можешь арестовать нерозыскомого игрока",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(GetDistanceBetweenPlayers(playerid,giveplayerid) > 5) { format(string, sizeof(string), "%s(%d) Слишком далеко. Ты не можешь его арестовать",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(IsPlayerInAnyVehicle(giveplayerid)) { format(string, sizeof(string), "%s(%d) Сидит в авто. Вытащи его из авто прежде чем использовать эту комманду.",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } SetPlayerVirtualWorld(giveplayerid,0); if(GetPlayerWantedLevel(playerid) >=1) { SendClientMessage(playerid,COLOR_RED,"Вы не можете использовать эту команду, если Вы разыскиваетесь полицией"); return 1; } if(glob973C[var8] == 1) { format(var4, 256, "%s(%d) уже отбывает срок.", var2, var8); SendClientMessage(playerid, 0xFF9900AA, var4); return 1; } new playa,time,price; playa = ReturnUser(tmp); tmp = strtok(cmdtext, idx); time= strval(tmp); if(time < 1 || time > 5) { SendClientMessage(playerid, COLOR_GREY, " Время от 1 до 5!"); return 1; } tmp = strtok(cmdtext, idx); price = strval(tmp); if(price < 10000 || price > 50000) { SendClientMessage(playerid, COLOR_GREY, " Штраф от $10000 до 50000!"); return 1; } if(IsPlayerConnected(playa)) { if(GetDistanceBetweenPlayers(playerid,playa) < 5) { GetPlayerName(playa, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* Вы арестовали %s на %d минут, штраф: $%d!", giveplayer,time,price); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); ServerGivePlayerMoney(playa, -price); format(string, sizeof(string), "%s арестовал тебя на %d минут, штраф: $%d", sendername,time,price); SendClientMessage(playa, COLOR_LIGHTBLUE, string); ResetPlayerWeapons(playa); if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1) { format(string, sizeof(string), "<< Полицейский : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2) { format(string, sizeof(string), "<< Федеральное Бюро Расследования : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3) { format(string, sizeof(string), "<< Военный : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } SetPlayerInterior(playa, 10); SetPlayerPos(playa,219.5246,111.0973,999.0156); PlayerInfo[playa][pJailTime] = time * 60; PlayerInfo[playa][pJailed] = 1; PlayerInfo[playa][pArrested] += 1; WantedPoints[playa] = 0; WantLawyer[playa] = 1; TogglePlayerControllable(playa, 1); } } else { SendClientMessage(playerid, COLOR_GREY, " Неправильный ID!."); return 1; } } else { SendClientMessage(playerid, 0xFF9900AA, " Только копы могут использовать эту команду!"); return 1; } }//not connected return 1; }
Примерно так должен быть public: Code
public OnPlayerCommandText(playerid, cmdtext[]) { new WantedPoints[MAX_PLAYERS]; new WantLawyer[MAX_PLAYERS]; new giveplayerid; new string[256]; new cmd[256],tmp[256]; new idx; new glob973C[200]; new giveplayer[MAX_PLAYER_NAME]; new sendername[MAX_PLAYER_NAME]; new var4[256]; new var8 = 0; new var2[24]; new gTeam[MAX_PLAYERS]; new OnDuty[MAX_PLAYERS]; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/arrest", true) == 0) { if(IsPlayerConnected(playerid)) { if(gTeam[playerid] == 7 || (playerid)) //в место 7 поставите на свое...который скин может использовать у меня это копы. { if(OnDuty[playerid] != 1 && PlayerInfo[playerid][pMember] == 1) { SendClientMessage(playerid, COLOR_GREY, " Вы не обязаные!"); return 1; } if(PlayerToPoint(3.2,playerid,-1604.7903,719.2490,11.8317)) { SendClientMessage(playerid, COLOR_GREY, " Вы не около тюрьмы!"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_RED, " Подсказка: /arrest [ID] [время] [штраф]"); return 1; } if(strval(tmp) == playerid) { SendClientMessage(playerid, COLOR_RED, "Вы не можете себя арестовать"); return 1; } giveplayerid = strval(tmp); if(!IsPlayerConnected(giveplayerid)) { format(string, sizeof(string), "ID (%d) Не подключен", giveplayerid); SendClientMessage(playerid, 0xFF9900AA, string); return 1; } new pname[24]; GetPlayerName(giveplayerid, pname, 24); if(GetPlayerWantedLevel(giveplayerid) <= 2) { format(string, sizeof(string), "%s(%d) Ты не можешь арестовать нерозыскомого игрока",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(GetDistanceBetweenPlayers(playerid,giveplayerid) > 5) { format(string, sizeof(string), "%s(%d) Слишком далеко. Ты не можешь его арестовать",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(IsPlayerInAnyVehicle(giveplayerid)) { format(string, sizeof(string), "%s(%d) Сидит в авто. Вытащи его из авто прежде чем использовать эту комманду.",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } SetPlayerVirtualWorld(giveplayerid,0); if(GetPlayerWantedLevel(playerid) >=1) { SendClientMessage(playerid,COLOR_RED,"Вы не можете использовать эту команду, если Вы разыскиваетесь полицией"); return 1; } if(glob973C[var8] == 1) { format(var4, 256, "%s(%d) уже отбывает срок.", var2, var8); SendClientMessage(playerid, 0xFF9900AA, var4); return 1; } new playa,time,price; playa = ReturnUser(tmp); tmp = strtok(cmdtext, idx); time= strval(tmp); if(time < 1 || time > 5) { SendClientMessage(playerid, COLOR_GREY, " Время от 1 до 5!"); return 1; } tmp = strtok(cmdtext, idx); price = strval(tmp); if(price < 10000 || price > 50000) { SendClientMessage(playerid, COLOR_GREY, " Штраф от $10000 до 50000!"); return 1; } if(IsPlayerConnected(playa)) { if(GetDistanceBetweenPlayers(playerid,playa) < 5) { GetPlayerName(playa, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* Вы арестовали %s на %d минут, штраф: $%d!", giveplayer,time,price); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); ServerGivePlayerMoney(playa, -price); format(string, sizeof(string), "%s арестовал тебя на %d минут, штраф: $%d", sendername,time,price); SendClientMessage(playa, COLOR_LIGHTBLUE, string); ResetPlayerWeapons(playa); if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1) { format(string, sizeof(string), "<< Полицейский : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2) { format(string, sizeof(string), "<< Федеральное Бюро Расследования : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3) { format(string, sizeof(string), "<< Военный : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } SetPlayerInterior(playa, 10); SetPlayerPos(playa,219.5246,111.0973,999.0156); PlayerInfo[playa][pJailTime] = time * 60; PlayerInfo[playa][pJailed] = 1; PlayerInfo[playa][pArrested] += 1; WantedPoints[playa] = 0; WantLawyer[playa] = 1; TogglePlayerControllable(playa, 1); } } else { SendClientMessage(playerid, COLOR_GREY, " Неправильный ID!."); return 1; } } else { SendClientMessage(playerid, 0xFF9900AA, " Только копы могут использовать эту команду!"); return 1; } }//not connected return 1; } return 0; }
И после этого добавляем функции: Code
strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } public Float:GetDistanceBetweenPlayers(p1,p2){ new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2; if (!IsPlayerConnected(p1) || !IsPlayerConnected(p2)){ return -1.00; } GetPlayerPos(p1,x1,y1,z1); GetPlayerPos(p2,x2,y2,z2); return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2)); } ReturnUser(text[], playerid = INVALID_PLAYER_ID) { new pos = 0; while (text[pos] < 0x21) { if (text[pos] == 0) return INVALID_PLAYER_ID; pos++; } new userid = INVALID_PLAYER_ID; if (IsNumeric(text[pos])) { userid = strval(text[pos]); if (userid >=0 && userid < MAX_PLAYERS) { if(!IsPlayerConnected(userid)) { userid = INVALID_PLAYER_ID; } else { return userid; } } } new len = strlen(text[pos]); new count = 0; new name[MAX_PLAYER_NAME]; for (new i = 0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { GetPlayerName(i, name, sizeof (name)); if (strcmp(name, text[pos], true, len) == 0) { if (len == strlen(name)) { return i; } else // Partial match { count++; userid = i; } } } } if (count != 1) { if (playerid != INVALID_PLAYER_ID) { if (count) { SendClientMessage(playerid, 0xFF0000AA, "Найдено несколько игроков."); } else { SendClientMessage(playerid, 0xFF0000AA, "Не найдено соответствия."); } } userid = INVALID_PLAYER_ID; } return userid; } public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z) { if(IsPlayerConnected(playerid)) { new Float:oldposx, Float:oldposy, Float:oldposz; new Float:tempposx, Float:tempposy, Float:tempposz; GetPlayerPos(playerid, oldposx, oldposy, oldposz); tempposx = (oldposx -x); tempposy = (oldposy -y); tempposz = (oldposz -z); if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) { return 1; } } return 0; } IsNumeric(const string[]) { for (new i = 0, j = strlen(string); i < j; i++) { if (string[i] > '9' || string[i] < '0') { return 0; } } return 1; } public OOCNews(color,const string[]) { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(!gNews[i]) { SendClientMessage(i, color, string); } } } } public ServerGivePlayerMoney(playerid,money) { DengiTime[playerid] = 15; if(money > 0) { PlayerInfo[playerid][pCash] += money; GivePlayerMoney(playerid,money); } else { GivePlayerMoney(playerid,money); PlayerInfo[playerid][pCash] += money; } return 1; } public jailtimer() { for(new i = 0; i < MAX_PLAYERS; i++) { if(PlayerInfo[i][pJailed] > 0) { if(PlayerInfo[i][pJailTime] > 0) { PlayerInfo[i][pJailTime]--; } if(PlayerInfo[i][pJailTime] <= 0) { PlayerInfo[i][pJailTime] = 0; PlayerInfo[i][pJailed] = 0; switch(random(2)) { //где 2 там меняем скок камер мы создали.по счету мы щяс создали 2. а это и есть case 0 , case 1 case 0: //это 1 тюрьма { SetPlayerInterior(i, 0); //тут интейнер SetPlayerPos(i, X, Y, Z); //тут координаты return 1; } case 1: //это у нас 2 тюрьма. { SetPlayerInterior(i, 0); //тут интейнер SetPlayerPos(i, X, Y, Z); //тут координаты return 1; } } } } } return 1; }
После этого ищем public OnGameModeInit и туда вставляем: Code
SetTimer("jailtimer", 1000, 1);
где 1000 - это у нас стандартно игрок будет сидеть 1 мин в тюрьме! Делал в видео FS и так же скинул функцию Code
strtok(const string[], &index)
если кто будет делать в Fs то проблем не будет! Будут проблема пишите или не понятки Автор:26_RUSSS
zm-jail.ru Разработка сайта samp-pawno.ru
Сообщение как помогал aksel с рандомным тюрьмой решил выложить урок по тюрьме с рандомным спавном , что и aksel помогал. Верху мода: Code
enum pInfo { pJailTime, pMember, pLeader, pArrested, pJailed, pCash, } forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z); forward Float:GetDistanceBetweenPlayers(p1,p2); forward ServerGivePlayerMoney(playerid, money); forward jailtimer(); forward OOCNews(color,const string[]); new DengiTime[MAX_PLAYERS]; new gNews[MAX_PLAYERS]; new PlayerInfo[MAX_PLAYERS][pInfo]; #define COLOR_GREY 0xCCCCCAA #define COLOR_RED 0xFB0000FF //красный #define COLOR_LIGHTBLUE 0x33CCFFA //голубой #define COLOR_LIGHTRED 0xFF0000FF #define cmd(%1) if((strcmp(cmdtext,%1,true,strlen(%1))==0)&&(((cmdtext[strlen(%1)]==0)&&(d%1(playerid,"")))||((cmdtext[strlen(%1)]==32)&&(d%1(playerid,cmdtext[strlen(%1)+1]))))) return 1
После этого ищем public OnPlayerCommandText(playerid, cmdtext[]) и туда вставляем: Code
new WantedPoints[MAX_PLAYERS]; new WantLawyer[MAX_PLAYERS]; new giveplayerid; new string[256]; new cmd[256],tmp[256]; new idx; new glob973C[200]; new giveplayer[MAX_PLAYER_NAME]; new sendername[MAX_PLAYER_NAME]; new var4[256]; new var8 = 0; new var2[24]; new gTeam[MAX_PLAYERS]; new OnDuty[MAX_PLAYERS]; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/arrest", true) == 0) { if(IsPlayerConnected(playerid)) { if(gTeam[playerid] == 7 || (playerid)) //в место 7 поставите на свое...который скин может использовать у меня это копы. { if(OnDuty[playerid] != 1 && PlayerInfo[playerid][pMember] == 1) { SendClientMessage(playerid, COLOR_GREY, " Вы не обязаные!"); return 1; } if(PlayerToPoint(3.2,playerid,-1604.7903,719.2490,11.8317)) { SendClientMessage(playerid, COLOR_GREY, " Вы не около тюрьмы!"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_RED, " Подсказка: /arrest [ID] [время] [штраф]"); return 1; } if(strval(tmp) == playerid) { SendClientMessage(playerid, COLOR_RED, "Вы не можете себя арестовать"); return 1; } giveplayerid = strval(tmp); if(!IsPlayerConnected(giveplayerid)) { format(string, sizeof(string), "ID (%d) Не подключен", giveplayerid); SendClientMessage(playerid, 0xFF9900AA, string); return 1; } new pname[24]; GetPlayerName(giveplayerid, pname, 24); if(GetPlayerWantedLevel(giveplayerid) <= 2) { format(string, sizeof(string), "%s(%d) Ты не можешь арестовать нерозыскомого игрока",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(GetDistanceBetweenPlayers(playerid,giveplayerid) > 5) { format(string, sizeof(string), "%s(%d) Слишком далеко. Ты не можешь его арестовать",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(IsPlayerInAnyVehicle(giveplayerid)) { format(string, sizeof(string), "%s(%d) Сидит в авто. Вытащи его из авто прежде чем использовать эту комманду.",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } SetPlayerVirtualWorld(giveplayerid,0); if(GetPlayerWantedLevel(playerid) >=1) { SendClientMessage(playerid,COLOR_RED,"Вы не можете использовать эту команду, если Вы разыскиваетесь полицией"); return 1; } if(glob973C[var8] == 1) { format(var4, 256, "%s(%d) уже отбывает срок.", var2, var8); SendClientMessage(playerid, 0xFF9900AA, var4); return 1; } new playa,time,price; playa = ReturnUser(tmp); tmp = strtok(cmdtext, idx); time= strval(tmp); if(time < 1 || time > 5) { SendClientMessage(playerid, COLOR_GREY, " Время от 1 до 5!"); return 1; } tmp = strtok(cmdtext, idx); price = strval(tmp); if(price < 10000 || price > 50000) { SendClientMessage(playerid, COLOR_GREY, " Штраф от $10000 до 50000!"); return 1; } if(IsPlayerConnected(playa)) { if(GetDistanceBetweenPlayers(playerid,playa) < 5) { GetPlayerName(playa, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* Вы арестовали %s на %d минут, штраф: $%d!", giveplayer,time,price); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); ServerGivePlayerMoney(playa, -price); format(string, sizeof(string), "%s арестовал тебя на %d минут, штраф: $%d", sendername,time,price); SendClientMessage(playa, COLOR_LIGHTBLUE, string); ResetPlayerWeapons(playa); if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1) { format(string, sizeof(string), "<< Полицейский : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2) { format(string, sizeof(string), "<< Федеральное Бюро Расследования : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3) { format(string, sizeof(string), "<< Военный : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } SetPlayerInterior(playa, 10); SetPlayerPos(playa,219.5246,111.0973,999.0156); PlayerInfo[playa][pJailTime] = time * 60; PlayerInfo[playa][pJailed] = 1; PlayerInfo[playa][pArrested] += 1; WantedPoints[playa] = 0; WantLawyer[playa] = 1; TogglePlayerControllable(playa, 1); } } else { SendClientMessage(playerid, COLOR_GREY, " Неправильный ID!."); return 1; } } else { SendClientMessage(playerid, 0xFF9900AA, " Только копы могут использовать эту команду!"); return 1; } }//not connected return 1; }
Примерно так должен быть public: Code
public OnPlayerCommandText(playerid, cmdtext[]) { new WantedPoints[MAX_PLAYERS]; new WantLawyer[MAX_PLAYERS]; new giveplayerid; new string[256]; new cmd[256],tmp[256]; new idx; new glob973C[200]; new giveplayer[MAX_PLAYER_NAME]; new sendername[MAX_PLAYER_NAME]; new var4[256]; new var8 = 0; new var2[24]; new gTeam[MAX_PLAYERS]; new OnDuty[MAX_PLAYERS]; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/arrest", true) == 0) { if(IsPlayerConnected(playerid)) { if(gTeam[playerid] == 7 || (playerid)) //в место 7 поставите на свое...который скин может использовать у меня это копы. { if(OnDuty[playerid] != 1 && PlayerInfo[playerid][pMember] == 1) { SendClientMessage(playerid, COLOR_GREY, " Вы не обязаные!"); return 1; } if(PlayerToPoint(3.2,playerid,-1604.7903,719.2490,11.8317)) { SendClientMessage(playerid, COLOR_GREY, " Вы не около тюрьмы!"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_RED, " Подсказка: /arrest [ID] [время] [штраф]"); return 1; } if(strval(tmp) == playerid) { SendClientMessage(playerid, COLOR_RED, "Вы не можете себя арестовать"); return 1; } giveplayerid = strval(tmp); if(!IsPlayerConnected(giveplayerid)) { format(string, sizeof(string), "ID (%d) Не подключен", giveplayerid); SendClientMessage(playerid, 0xFF9900AA, string); return 1; } new pname[24]; GetPlayerName(giveplayerid, pname, 24); if(GetPlayerWantedLevel(giveplayerid) <= 2) { format(string, sizeof(string), "%s(%d) Ты не можешь арестовать нерозыскомого игрока",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(GetDistanceBetweenPlayers(playerid,giveplayerid) > 5) { format(string, sizeof(string), "%s(%d) Слишком далеко. Ты не можешь его арестовать",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } if(IsPlayerInAnyVehicle(giveplayerid)) { format(string, sizeof(string), "%s(%d) Сидит в авто. Вытащи его из авто прежде чем использовать эту комманду.",pname,giveplayerid); SendClientMessage(playerid,COLOR_RED,string); return 1; } SetPlayerVirtualWorld(giveplayerid,0); if(GetPlayerWantedLevel(playerid) >=1) { SendClientMessage(playerid,COLOR_RED,"Вы не можете использовать эту команду, если Вы разыскиваетесь полицией"); return 1; } if(glob973C[var8] == 1) { format(var4, 256, "%s(%d) уже отбывает срок.", var2, var8); SendClientMessage(playerid, 0xFF9900AA, var4); return 1; } new playa,time,price; playa = ReturnUser(tmp); tmp = strtok(cmdtext, idx); time= strval(tmp); if(time < 1 || time > 5) { SendClientMessage(playerid, COLOR_GREY, " Время от 1 до 5!"); return 1; } tmp = strtok(cmdtext, idx); price = strval(tmp); if(price < 10000 || price > 50000) { SendClientMessage(playerid, COLOR_GREY, " Штраф от $10000 до 50000!"); return 1; } if(IsPlayerConnected(playa)) { if(GetDistanceBetweenPlayers(playerid,playa) < 5) { GetPlayerName(playa, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* Вы арестовали %s на %d минут, штраф: $%d!", giveplayer,time,price); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); ServerGivePlayerMoney(playa, -price); format(string, sizeof(string), "%s арестовал тебя на %d минут, штраф: $%d", sendername,time,price); SendClientMessage(playa, COLOR_LIGHTBLUE, string); ResetPlayerWeapons(playa); if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1) { format(string, sizeof(string), "<< Полицейский : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2) { format(string, sizeof(string), "<< Федеральное Бюро Расследования : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } else if(PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3) { format(string, sizeof(string), "<< Военный : %s арестовал подозреваемого %s >>", sendername, giveplayer); OOCNews(COLOR_LIGHTRED, string); } SetPlayerInterior(playa, 10); SetPlayerPos(playa,219.5246,111.0973,999.0156); PlayerInfo[playa][pJailTime] = time * 60; PlayerInfo[playa][pJailed] = 1; PlayerInfo[playa][pArrested] += 1; WantedPoints[playa] = 0; WantLawyer[playa] = 1; TogglePlayerControllable(playa, 1); } } else { SendClientMessage(playerid, COLOR_GREY, " Неправильный ID!."); return 1; } } else { SendClientMessage(playerid, 0xFF9900AA, " Только копы могут использовать эту команду!"); return 1; } }//not connected return 1; } return 0; }
И после этого добавляем функции: Code
strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } public Float:GetDistanceBetweenPlayers(p1,p2){ new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2; if (!IsPlayerConnected(p1) || !IsPlayerConnected(p2)){ return -1.00; } GetPlayerPos(p1,x1,y1,z1); GetPlayerPos(p2,x2,y2,z2); return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2)); } ReturnUser(text[], playerid = INVALID_PLAYER_ID) { new pos = 0; while (text[pos] < 0x21) { if (text[pos] == 0) return INVALID_PLAYER_ID; pos++; } new userid = INVALID_PLAYER_ID; if (IsNumeric(text[pos])) { userid = strval(text[pos]); if (userid >=0 && userid < MAX_PLAYERS) { if(!IsPlayerConnected(userid)) { userid = INVALID_PLAYER_ID; } else { return userid; } } } new len = strlen(text[pos]); new count = 0; new name[MAX_PLAYER_NAME]; for (new i = 0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { GetPlayerName(i, name, sizeof (name)); if (strcmp(name, text[pos], true, len) == 0) { if (len == strlen(name)) { return i; } else // Partial match { count++; userid = i; } } } } if (count != 1) { if (playerid != INVALID_PLAYER_ID) { if (count) { SendClientMessage(playerid, 0xFF0000AA, "Найдено несколько игроков."); } else { SendClientMessage(playerid, 0xFF0000AA, "Не найдено соответствия."); } } userid = INVALID_PLAYER_ID; } return userid; } public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z) { if(IsPlayerConnected(playerid)) { new Float:oldposx, Float:oldposy, Float:oldposz; new Float:tempposx, Float:tempposy, Float:tempposz; GetPlayerPos(playerid, oldposx, oldposy, oldposz); tempposx = (oldposx -x); tempposy = (oldposy -y); tempposz = (oldposz -z); if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) { return 1; } } return 0; } IsNumeric(const string[]) { for (new i = 0, j = strlen(string); i < j; i++) { if (string[i] > '9' || string[i] < '0') { return 0; } } return 1; } public OOCNews(color,const string[]) { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(!gNews[i]) { SendClientMessage(i, color, string); } } } } public ServerGivePlayerMoney(playerid,money) { DengiTime[playerid] = 15; if(money > 0) { PlayerInfo[playerid][pCash] += money; GivePlayerMoney(playerid,money); } else { GivePlayerMoney(playerid,money); PlayerInfo[playerid][pCash] += money; } return 1; } public jailtimer() { for(new i = 0; i < MAX_PLAYERS; i++) { if(PlayerInfo[i][pJailed] > 0) { if(PlayerInfo[i][pJailTime] > 0) { PlayerInfo[i][pJailTime]--; } if(PlayerInfo[i][pJailTime] <= 0) { PlayerInfo[i][pJailTime] = 0; PlayerInfo[i][pJailed] = 0; switch(random(2)) { //где 2 там меняем скок камер мы создали.по счету мы щяс создали 2. а это и есть case 0 , case 1 case 0: //это 1 тюрьма { SetPlayerInterior(i, 0); //тут интейнер SetPlayerPos(i, X, Y, Z); //тут координаты return 1; } case 1: //это у нас 2 тюрьма. { SetPlayerInterior(i, 0); //тут интейнер SetPlayerPos(i, X, Y, Z); //тут координаты return 1; } } } } } return 1; }
После этого ищем public OnGameModeInit и туда вставляем: Code
SetTimer("jailtimer", 1000, 1);
где 1000 - это у нас стандартно игрок будет сидеть 1 мин в тюрьме! Делал в видео FS и так же скинул функцию Code
strtok(const string[], &index)
если кто будет делать в Fs то проблем не будет! Будут проблема пишите или не понятки Автор:26_RUSSS Автор - admin Дата добавления - 13.11.2011 в 19:35:04