15:44
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: Alcoholik  
[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, чтобы разбанить пере входом наверно :D :D :D
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%
Статус:
Ой извини. Я вспомнил что я эту переменную удалял crazy

Добавлено (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
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua