 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
[TUT]Бан по дням
| |
| HELKERN | Дата: Среда, 03.11.2010, 07:22 | Сообщение # 1 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| Всем привет. Сегодня я расскажу, как сделать бан по времени. Для начала заведём парочку новых переменных: pBanTime и pBanData pBanData - тут будет хранится дата нашего бана pBanTime - тут будет хранится дата нашего разбана Для начала добавим эти переменные ко всем остальным переменным аккаунта: в enum pInfo Теперь добавим при регистрации в public OnPlayerRegister(playerid, password[]) Code format(var, 32, "BanTime=%d\n",PlayerInfo[playerid][pBanTime]);fwrite(hFile, var); format(var, 32, "BanData=%d\n",PlayerInfo[playerid][pBanData]);fwrite(hFile, var); и в загрузку аккаунта public OnPlayerLogin(playerid,password[]) Code if( strcmp( key , "BanTime" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pBanTime] = strval( val ); } if( strcmp( key , "BanData" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pBanData] = strval( val ); } Так же добавьте в свою функцию, где вы обновляете данные в аккаунте Теперь сделаем саму команду бана: Code if(strcmp(cmd, "/bantime", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /bantime [ID] [Количество дней]"); return 1; } new giveplayerid = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /bantime [ID] [Количество дней]"); return 1; } new days = strval(tmp); if (PlayerInfo[playerid][pAdmin] >= 1) { if(IsPlayerConnected(giveplayerid)) { new curdate = getdate(); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "Администратор %s забанил %s на %d дней.", sendername, giveplayer,days); SendClientMessageToAll(COLOR_LIGHTRED, string); PlayerInfo[giveplayerid][pBan] = 1; PlayerInfo[giveplayerid][pBanTime] = curdate+days; PlayerInfo[giveplayerid][pBanData] = curdate; Kick(giveplayerid); } } return 1; } Далее мы разберемся с тем, что бы игрока при заходе уведомляла на счет того, что его забанили и на сколько. При спавне public SetPlayerSpawn(playerid) добавляем Code new curdate11 = getdate(); new string111[MAX_STRING]; if(PlayerInfo[playerid][pBanTime] > 0 && PlayerInfo[playerid][pBanData] < curdate11 && PlayerInfo[playerid][pBan] == 1) { new oldsrok = 365-PlayerInfo[playerid][pBanData]; new newdata = oldsrok+curdate11; if(newdata >= PlayerInfo[playerid][pBanTime]) { SendClientMessage(playerid, COLOR_YELLOW, "Вы отсидели свой срок бана, больше не нарушайте!"); PlayerInfo[playerid][pBan] = 0; PlayerInfo[playerid][pBanTime] = 0; PlayerInfo[playerid][pBanData] = 0; } } if(PlayerInfo[playerid][pBanTime] > 0 && PlayerInfo[playerid][pBanTime] != curdate11 && PlayerInfo[playerid][pBan] == 1) { new ostalos=PlayerInfo[playerid][pBanTime]-curdate11; SendClientMessage(playerid, COLOR_YELLOW, "Вы находитесь в бане."); format(string111, sizeof(string111), "Вам осталось сидеть ещё %d дней.", ostalos); SendClientMessage(playerid, COLOR_YELLOW, string111); Kick(playerid); return 1; } if(PlayerInfo[playerid][pBanTime] > 0 && PlayerInfo[playerid][pBanTime] == curdate11 && PlayerInfo[playerid][pBan] == 1) { SendClientMessage(playerid, COLOR_YELLOW, "Вы отсидели свой срок бана, больше не нарушайте!"); PlayerInfo[playerid][pBan] = 0; PlayerInfo[playerid][pBanTime] = 0; PlayerInfo[playerid][pBanData] = 0; } Так же нужно "занулить" значения этих переменных. В OnPlayerConnect(playerid) Code PlayerInfo[playerid][pBanTime] = 0; PlayerInfo[playerid][pBanData] = 0; Всем желаю приятного скриптинга, с вами был HELKERN.
|
| |
|
|
| Borog | Дата: Среда, 03.11.2010, 09:38 | Сообщение # 2 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| Quote (HELKERN) Так же нужно "занулить" значения этих переменных. В OnPlayerConnect(playerid) зачем? О_о
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| xSLiMx | Дата: Среда, 03.11.2010, 09:40 | Сообщение # 3 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2163
Награды: 34
Город: Ростов - на - Дону
Репутация: 1429
Замечания: 80%
Статус: 
| Borog, чтобы разбанить пере входом наверно
|
| |
|
|
| HELKERN | Дата: Среда, 03.11.2010, 10:33 | Сообщение # 4 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| xSLiMx, вообще-то когда ты вводишь пароль и логин эти значения в любом случае заменятся на те, которые будут в твоём аккаунте Borog, когда забаненный игрок выходит из игры, то значения этих переменных остаются и в случае, если другой игрок не зареган, то эти значения запишутся к новый аккаунт
|
| |
|
|
| Borog | Дата: Среда, 03.11.2010, 10:34 | Сообщение # 5 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| "занулять" значения нужно только глобальных массивов, типа new lol[MAX_PLAYERS]; Чтобы значения от старого игрока не перешли на нового. Но такие массивы к системе совсем не подходят, поэтому и обнуление бессмысленно.
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| HELKERN | Дата: Среда, 03.11.2010, 10:39 | Сообщение # 6 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| Borog, по твоему PlayerInfo - Это не массив? Добавлено (03.11.2010, 10:39) ---------------------------------------------
Quote (Borog) "занулять" значения нужно только глобальных массивов, типа new lol[MAX_PLAYERS]; чезабред?
|
| |
|
|
| DiSE | Дата: Среда, 03.11.2010, 10:48 | Сообщение # 7 |
|
Группа:
I'm V.I.P.
Сообщений: 1759
Награды: 23
Город: Уфа
Репутация: 337
Замечания: 80%
Статус: 
| Уже поставил. Лови + Добавлено (03.11.2010, 10:48) ---------------------------------------------
Quote PlayerInfo[playerid][pBan] = 0; вот эту переменную дай
|
| |
|
|
| HELKERN | Дата: Среда, 03.11.2010, 10:49 | Сообщение # 8 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| Quote (EnErGiZeR) вот эту переменную дай куда дать? На сколько я знаю она уже сразу в ГФ есть
|
| |
|
|
| DiSE | Дата: Среда, 03.11.2010, 10:51 | Сообщение # 9 |
|
Группа:
I'm V.I.P.
Сообщений: 1759
Награды: 23
Город: Уфа
Репутация: 337
Замечания: 80%
Статус: 
| Ой извини. Я вспомнил что я эту переменную удалял  Добавлено (03.11.2010, 10:51) ---------------------------------------------
Quote new string111[MAX_STRING]; вот это можно было не делать. Там в паблике уже был стринг (это для инфы )
|
| |
|
|
| HELKERN | Дата: Среда, 03.11.2010, 10:55 | Сообщение # 10 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| Quote (EnErGiZeR) вот это можно было не делать. Там в паблике уже был стринг (это для инфы ) это уже ты видимо ставил, в стандартном нету такого массива
|
| |
|
|
| Borog | Дата: Среда, 03.11.2010, 10:58 | Сообщение # 11 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| Quote (HELKERN) Borog, по твоему PlayerInfo - Это не массив? Массив, значения которого задаются сразу после логина, и у каждого они свои, сл-но обнуления не требуют. А у тебя оно стоит. Получается, что ты изменяешь переменную попусту, т.к. при логине ее все равно заменятДобавлено (03.11.2010, 10:58) --------------------------------------------- HELKERN, к тому же в твоем коде действительно есть string111 который там не нужен. В этом паблике стандартно уже есть один, можно его использовать. Но это мелочи.
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| HELKERN | Дата: Среда, 03.11.2010, 11:12 | Сообщение # 12 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| Quote (Borog) Массив, значения которого задаются сразу после логина, и у каждого они свои, сл-но обнуления не требуют. А у тебя оно стоит. Получается, что ты изменяешь переменную попусту, т.к. при логине ее все равно заменят ты почитай мой пост. Я естественно согласен что значение задается при логине, но при регистрации значение записывается и что бы не записать ничего лишнего надо занулить. Quote (Borog) HELKERN, к тому же в твоем коде действительно есть string111 который там не нужен. В этом паблике стандартно уже есть один, можно его использовать. Но это мелочи. Я работаю со стандартным ГФ, который выложен Fear'ом на sa-mp.com и там ничего не задано, если у тебя уже есть, то значит уже кто то дописывалДобавлено (03.11.2010, 11:12) --------------------------------------------- Borog, объясню тебе "на пальцах": Забаненный чувак заходит на сервер Забаненный чувак вводит логин, в значение PlayerInfo[playerid][pBanTime] пишется какое-то число Когда срабатывает OnPlayerSpawn его кикает Заходит нубас, вводит пароль и регистрируется(под тем же ID) Ему в аккаунт записываются все значения и PlayerInfo[playerid][pBanTime], с каким-то числом от того старого забаненного игрока Вот для чего нужно зануление, understand?
Сообщение отредактировал HELKERN - Среда, 03.11.2010, 11:07 |
| |
|
|
| Borog | Дата: Среда, 03.11.2010, 11:17 | Сообщение # 13 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| HELKERN, а не проще тогда при регистрации его обнулять, а не при коннекте? Quote (HELKERN) Я работаю со стандартным ГФ, который выложен Fear'ом на sa-mp.com и там ничего не задано, если у тебя уже есть, то значит уже кто то дописывал Странно, насколько я помню, там был стринг, т.к. формат использовался наверняка.
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| HELKERN | Дата: Среда, 03.11.2010, 11:23 | Сообщение # 14 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| Quote (Borog) HELKERN, а не проще тогда при регистрации его обнулять, а не при коннекте? не имеет значения, если проще, то объясни чемДобавлено (03.11.2010, 11:23) ---------------------------------------------
Quote (Borog) Странно, насколько я помню, там был стринг, т.к. формат использовался наверняка. Ни того, ни другого там нет
|
| |
|
|
| Borog | Дата: Среда, 03.11.2010, 11:36 | Сообщение # 15 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| Quote (HELKERN) не имеет значения, если проще, то объясни чем А зачем усложнять задачу, когда в регистрации задаешь 0, да и всею Хотя и в этом нету сильной необходимости, т.к. все нетронутые переменные по умолчанию равны нулю. А если поставишь при коннекте, то при лагах сервера или при неправильной постоянной перезаписи данных забаненного может разбанить
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
|
 |
|
 | |
| |
|