Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 17
  1. #1
    Аватар для pawno_Lyubitel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2016
    Сообщений
    13
    Репутация:
    0 ±

    Принцип работы команды /jail и подобных

    Доброго времени суток. Я надеюсь хотя бы здесь мне смогу помочь.
    Суть моего интереса заключается вот в чем: Я хочу разобраться как писать команды такие как /jail и подобные, интересует меня все что касается времени, куда записывается, каким образом, как отсчиывает и т.д
    Если не сложно вам, напишите пожалуйста простенькую команду /jail на dc_cmd с обьяснениями, ну типа мануала что ли, буду безмерно благодарен. Мод у меня на MYSQL R7, если что.

  2. #2
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    Пояснения в студию!

  3. #3

  4. #4
    Аватар для pawno_Lyubitel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2016
    Сообщений
    13
    Репутация:
    0 ±
    Ну я же вроде нормально расписал , что мне нужно. Ну допустим ввожу команду /jail 228 30 test // 228 - id // 30 minutes.
    меня интересует все что касается времени, куда заносить эти 30 минут, как ведется отсчет до выхода из кпз

    - - - Добавлено - - -

    Дружище, мне выпендрежников и на P-I хватило.

  5. #5
    Аватар для Wise
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.10.2014
    Сообщений
    148
    Репутация:
    37 ±
    Цитата Сообщение от pawno_Lyubitel Посмотреть сообщение
    Ну я же вроде нормально расписал , что мне нужно. Ну допустим ввожу команду /jail 228 30 test // 228 - id // 30 minutes.
    меня интересует все что касается времени, куда заносить эти 30 минут, как ведется отсчет до выхода из кпз

    - - - Добавлено - - -



    Дружище, мне выпендрежников и на P-I хватило.
    Меня сравнивать с Г-И не надо. Я в этой дыре не был и не буду.
    Это просто бессмысленно снова описывать.
    Дам тебе два совета.
    1) Прочитай правила раздела, они очень полезны.
    Цитата Сообщение от Osetin
    Прежде чем создавать новую тему убедитесь, что подобный вопрос не рассматривался ранее, пользуйтесь поиском по форуму.
    2) Когда тебе помогают - принимай, а не веди себя, как всезнающий.

  6. #6
    Аватар для pawno_Lyubitel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2016
    Сообщений
    13
    Репутация:
    0 ±
    Если я считал бы себя всезнающим, не задавал бы вопросы на различных pawn порталах.
    Я надеялся получить конкретный ответ, а не отсылку.

  7. #7
    Аватар для pawno_Lyubitel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2016
    Сообщений
    13
    Репутация:
    0 ±
    Подскажите, почему не пишет причину?
    PHP код:
    COMMAND:jail(playerid,params[])
    {
         if(
    GetPVarInt(playerid,"logged") ==0) return 1;
        if(
    player_info[playerid][ADMIN] < 3) return 1;
        new 
    id,
            
    kpztime,
            
    tmp[40];
        if(
    sscanf(params"ddS[40]"idkpztimetmp)) return SendClientMessage(playerid,0xEAD513FF,"{EAD513}[Подсказка]: {FFFFFF}используй /jail [id] [время] [причина]");
        if(!
    IsPlayerConnected(id)) return SendClientMessage(playerid,0xEAD513FF,"{EAD513}[Подсказка]: {FFFFFF}Такого игрока нет");
        if(
    kpztime 10 || kpztime 300) return SendClientMessage(playerid,0xEAD513FF,"{EAD513}[Подсказка]: {FFFFFF}время указывайте от 10 до 300 минут!");
        if(
    player_info[id][KPZ] == 1)
        {
            
    SendClientMessage(playeridCOLOR_GREY"Этот игрок уже находится в кпз");
        }
        else
        {
            
    ResetPlayerWeapons(id);
            
    player_info[id][KPZ] = 1;
            
    player_info[id][KPZTIME] = kpztime;
            
    SetPlayerPos(id540.0917,-190.3685,3947.2134);
            
    SetPVarInt(id,"jail",gettime()+(kpztime*60));
            static const 
    fmt_str1[] = "Вы были посажены администратором %s на %d минут. Причина: %s";
            new 
    str1[sizeof(fmt_str1)-2-2-2+MAX_PLAYER_NAME+40];
            
    format(str1sizeof(str1), fmt_str1player_info[playerid][NAME], kpztimetmp);
            
    SendClientMessage(id,COLOR_LITERED,str1);
            static const 
    fmt_str[] = "Администратор %s посадил игрока %s в кпз на %d минут. Причина: %s";
            new 
    str[sizeof(fmt_str)-6+MAX_PLAYER_NAME+3+40];
            
    format(strsizeof(str), fmt_strplayer_info[playerid][NAME], player_info[id][NAME], kpztimetmp);
            
    SendAdminMessage(COLOR_GREY,str);
            
    SetTimerEx("TimerForJail",2500,1,"%d",id);
            
    SendClientMessage(player,0xFFFFFFFF,"Используйте команду /time , чтобы узнать сколько вам времени сидеть в тюрьме");
            return 
    1;
          }
          return 
    1;


  8. #8
    Аватар для Sp1ke
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от pawno_Lyubitel Посмотреть сообщение
    Подскажите, почему не пишет причину?
    PHP код:
    COMMAND:jail(playerid,params[])
    {
         if(
    GetPVarInt(playerid,"logged") ==0) return 1;
        if(
    player_info[playerid][ADMIN] < 3) return 1;
        new 
    id,
            
    kpztime,
            
    tmp[40];
        if(
    sscanf(params"ddS[40]"idkpztimetmp)) return SendClientMessage(playerid,0xEAD513FF,"{EAD513}[Подсказка]: {FFFFFF}используй /jail [id] [время] [причина]");
        if(!
    IsPlayerConnected(id)) return SendClientMessage(playerid,0xEAD513FF,"{EAD513}[Подсказка]: {FFFFFF}Такого игрока нет");
        if(
    kpztime 10 || kpztime 300) return SendClientMessage(playerid,0xEAD513FF,"{EAD513}[Подсказка]: {FFFFFF}время указывайте от 10 до 300 минут!");
        if(
    player_info[id][KPZ] == 1)
        {
            
    SendClientMessage(playeridCOLOR_GREY"Этот игрок уже находится в кпз");
        }
        else
        {
            
    ResetPlayerWeapons(id);
            
    player_info[id][KPZ] = 1;
            
    player_info[id][KPZTIME] = kpztime;
            
    SetPlayerPos(id540.0917,-190.3685,3947.2134);
            
    SetPVarInt(id,"jail",gettime()+(kpztime*60));
            static const 
    fmt_str1[] = "Вы были посажены администратором %s на %d минут. Причина: %s";
            new 
    str1[sizeof(fmt_str1)-2-2-2+MAX_PLAYER_NAME+40];
            
    format(str1sizeof(str1), fmt_str1player_info[playerid][NAME], kpztimetmp);
            
    SendClientMessage(id,COLOR_LITERED,str1);
            static const 
    fmt_str[] = "Администратор %s посадил игрока %s в кпз на %d минут. Причина: %s";
            new 
    str[sizeof(fmt_str)-6+MAX_PLAYER_NAME+3+40];
            
    format(strsizeof(str), fmt_strplayer_info[playerid][NAME], player_info[id][NAME], kpztimetmp);
            
    SendAdminMessage(COLOR_GREY,str);
            
    SetTimerEx("TimerForJail",2500,1,"%d",id);
            
    SendClientMessage(player,0xFFFFFFFF,"Используйте команду /time , чтобы узнать сколько вам времени сидеть в тюрьме");
            return 
    1;
          }
          return 
    1;

    PHP код:
        if(sscanf(params"dds[40]"idkpztimetmp)) return SendClientMessage(playerid,0xEAD513FF,"{EAD513}[Подсказка]: {FFFFFF}используй /jail [id] [время] [причина]"); 
    Попробуй

  9. #9
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Бредо-код, какой то:
    PHP код:
    CMD:jail(playeridparams[])
    {
        new
            
    targetid,
            
    time,
            
    reason[144];
        
    /*if(PlayerInfo[playerid][pAdmin] < 3)
            return (playerid, 0xcececeAA, "Маленький лвл админки!"); */
        
    if(sscanf(params"ddS(not_param)[144]"targetidtimereason))
            return 
    SendClientMessage(playerid0xcececeAA"Используйте: /jail [targetid] [time] {reason}");
        if(
    jail[targetid] == true)
            return 
    SendClientMessage(playerid0xcececeAA"Игрок уже в jail!");
        if(!(
    <= time <= 300))
            return 
    SendClientMessage(playerid0xcececeAA"Время может быть от 1 минуты до 300 минут!");
        if(
    == IsPlayerConnected(targetid))
            return 
    SendClientMessage(playerid0xcececeAA"Данного игрока нет на сервере!");
        static 
    msg[] = "Администратор %s посадил игрока %s в jail на %d минут";
        new 
    fmt_msg[(sizeof(msg) - 6) + MAX_PLAYER_NAME sizeof(reason)];
        if(
    == strcmp(reason"not_param"))
        {
            
    format(fmt_msgsizeof(fmt_msg), msgp_name[playerid], p_name[targetid], time);
            
    SendClientMessageToAll(0xff5030AAfmt_msg);
        }
        else
        {
            
    strcat(fmt_msgmsg);
            
    strcat(fmt_msg". Причина: %s");
            
    format(fmt_msgsizeof(fmt_msg), fmt_msgp_name[playerid], p_name[targetid], timereason);
            
    SendClientMessageToAll(0xff5030AAfmt_msg);
        }
        
    jail[targetid] = true;
        
    jail_minutes[targetid] = time;
        return 
    1;

    Ума хватит, что бы запустить таймер на отнимание времени?
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  10. Пользователь сказал cпасибо:
    RefunQ (06.06.2016)
  11. #10
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Бредо-код, какой то:
    PHP код:
    CMD:jail(playeridparams[])
    {
        new
            
    targetid,
            
    time,
            
    reason[144];
        
    /*if(PlayerInfo[playerid][pAdmin] < 3)
            return (playerid, 0xcececeAA, "Маленький лвл админки!"); */
        
    if(sscanf(params"ddS(not_param)[144]"targetidtimereason))
            return 
    SendClientMessage(playerid0xcececeAA"Используйте: /jail [targetid] [time] {reason}");
        if(
    jail[targetid] == true)
            return 
    SendClientMessage(playerid0xcececeAA"Игрок уже в jail!");
        if(!(
    <= time <= 300))
            return 
    SendClientMessage(playerid0xcececeAA"Время может быть от 1 минуты до 300 минут!");
        if(
    == IsPlayerConnected(targetid))
            return 
    SendClientMessage(playerid0xcececeAA"Данного игрока нет на сервере!");
        static 
    msg[] = "Администратор %s посадил игрока %s в jail на %d минут";
        new 
    fmt_msg[(sizeof(msg) - 6) + MAX_PLAYER_NAME sizeof(reason)];
        if(
    == strcmp(reason"not_param"))
        {
            
    format(fmt_msgsizeof(fmt_msg), msgp_name[playerid], p_name[targetid], time);
            
    SendClientMessageToAll(0xff5030AAfmt_msg);
        }
        else
        {
            
    strcat(fmt_msgmsg);
            
    strcat(fmt_msg". Причина: %s");
            
    format(fmt_msgsizeof(fmt_msg), fmt_msgp_name[playerid], p_name[targetid], timereason);
            
    SendClientMessageToAll(0xff5030AAfmt_msg);
        }
        
    jail[targetid] = true;
        
    jail_minutes[targetid] = time;
        return 
    1;

    Ума хватит, что бы запустить таймер на отнимание времени?
    Массив стоит посчитать. В нем явно не 144 символа будут. Исходя из вашего предпочтения к заполнения полной строки, в необходимости расчета строки, которая расчитана не качественно, нет. Всю команду можно написать куда проще.
    Цитата Сообщение от $continue$ Посмотреть сообщение
    PHP код:
    if(jail[targetid] == true)
            return 
    SendClientMessage(playerid0xcececeAA"Игрок уже в jail!"); 
    Рофлю с фразы "Игрок уже в jail!". Мы на русском общаемся, почему нельзя написать "Игрок уже в тюрьме". Считай, помог перевести слово "jail" на русский, можешь не благодарить :)




    В таймере я правда не уверен. Как и в том, что скомпилируется без ошибок.

    PHP код:
    new player_in_jail[MAX_PLAYERS char] = {-1, ...};
    new 
    timer_jail;

    public 
    OnGameModeInit()
    {
        
    // ваш код
        
    timer_jailSetTimer("OnPlayerJailed"1_000true);
        return 
    1;
    };

    public 
    OnGameModeExit()
    {
        
    // ваш код
        
    KillTimer(timer_jail);
        return 
    1;
    };

    CMD:jail(playeridparams[])
    {
        new 
    targetidtime;
        if (
    sscanf(params"uds[67]"targetidtimeparams))
            return 
    SendClientMessage(playerid, -1"Введите [игрок] [время] [причина]");
        if (
    player_in_jail{targetid} > -1)
            return 
    SendClientMessage(playerid, -1"Игрок уже в тюрьме.");
        if (
    IsPlayerConnected(targetid) == 0)
            return 
    SendClientMessage(playerid, -1"Игрок не в сети.");
        if (!(
    60 <= time <= 1_800))
            return 
    SendClientMessage(playerid, -1"Время указано ошибочно.");
        new 
    str[145];
        
    GetPlayerName(targetidstrMAX_PLAYER_NAME);
        
    format(strsizeof(str), "Игрок %s было посажен в тюрьму на %d секунд. Причина: %s"strtimeparams);
        
    SendClientMessageToAll(-1str);
        
    player_in_jail{targetid} = time;
        
    /* телепортируем игрока в тюрьму */
        
    return 1;
    }

    forward OnPlayerJailed();
    public 
    OnPlayerJailed()
    {
        foreach (new 
    i:player)
        {
            if (
    player_in_jail{i} > 0)
                
    player_in_jail{i} --;
            if (
    <= player_in_jail{i} <= -1// чтоб наверняка :D
            
    {
                
    player_in_jail{i} = -1;
                
    SpawnPlayer(i);
                break;
            }
        }


 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •