Вопросы

Всем привет, хочу сделать систему итогов по репортам и вопросам хелперов нужно сделать 2 типа (Обычные итоги которые подводиться каждые 2 минуты:

(ИТОГИ: All(Репортов за 2 минуты.): 0 / Ans(Вопросы хелперам): 0 / Неотв(Не отвеченные репорты).: 0 | Ответить(ИДшники тех кто не получил ответ.):

И итоги часа:

(ИТОГИ ЧАСА: Репортов: 0(Репортов за час) / Ответов: 0 (Ответы на репорты за час)/ Неотвечено: 0(Неотвеченные репорты))

 

Поделиться сообщением


Ссылка на сообщение

28 ответов на этот вопрос

  • 0

Этот текст просто в чат будет отправляться каждые 2 минуты и час соответственно? 

Поделиться сообщением


Ссылка на сообщение
  • 0
6 минут назад, DEST сказал:

Этот текст просто в чат будет отправляться каждые 2 минуты и час соответственно? 

Да. И когда пробивает PayDay он будет писать итоги за этот час.

Отредактировано пользователем R0m4ik

Поделиться сообщением


Ссылка на сообщение
  • 0

Наиболее простое решение завести под это дело переменные-счетчики (один для двухминутного отчета, второй для ежечасного), в месте, где задается вопрос прибавлять его к неотвеченным, и прибавлять единицу к количеству вопросов. В двухминутном таймере выводить текст и обнулять их, с ежечасным таймером аналогично. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST А как это сделать?

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik, ну, хорошо, попробую немного подробнее описать реализацию такой системы.

 

1. Создание счетчиков. Достаточно примитивный этап. Что есть счетчик? Счетчик - обычная переменная, которая хранит значение чего-либо. Поэтому создание счетчиков равносильно созданию обычной переменной. Сколько таких переменных (счетчиков) вам необходимо в данном случае, исходя из ваших задач?

  • Общее количество вопросов
  • Количество проигнорированных вопросов

Ну, и, поскольку вы хотите сохранять идентификаторы игроков, которые не получили ответ на свой вопрос, необходимо создать еще итератор (хранит массив, а также предоставляет функционал для удобной работы с ним). Выглядеть это может примерно так:

new questionsCounIn2Mins; // общее количество вопросов за последние 2 минуты
new ignoredQuestionsCountIn2Mins; // количество проигнорированных вопросов за последние 2 минуты
new Iterator:ignoredPlayers<MAX_PLAYERS>; // список игроков, не получивших ответ на свой вопрос

2. Заполнение значениями. Соответственно, в тех местах, где приходит новый вопрос, необходимо увеличивать значения счетчиков questionsCountIn2Mins и ignoredQuestionsCountIn2Mins, а также заносить идентификатор игрока, задавшего вопрос, в итератор ignoredPlayers.

questionsCounIn2Mins++; // увеличение questionsCountIn2Mins на 1
ignoredQuestionsCountIn2Mins++; // увеличение ignoredQuestionsCountIn2Mins на 1
Iter_Add(ignoredPlayers, playerid); // занесение идентификатора игрока, задавшего вопрос, в массив итератора
// при необходимости playerid поменять на свое значение

Ну, и, соответственно, когда администрация отвечает игрокам, необходимо уменьшить значение счетчика проигнорированных вопросов ignoredQuestionsCountIn2Mins и убрать игрока, которому дается ответ, из списка проигнорированных.

ignoredQuestionsCountIn2Mins--; // уменьшение значения на 1
Iter_Remove(ignoredPlayers, playerid); // удаление игрока playerid из списка проигнорированных
// при необходимости playerid поменять на свое значение

3. Реализация подсчета значений за час и вывода информации в чат. Для того, чтобы информация выводилась с нужным вам интервалом (раз в 2 минуты и раз в 1 час соответственно), следует использовать таймер, который будет обеспечивать выполнение необходимых нам действий с заданным интервалом. Наверняка в вашем моде уже есть такой таймер (секундный, минутный, или какой-нибудь еще). Используя его, следует, прежде всего, при необходимости, обеспечить выполнение нашего "куска" кода с нужной нам частотой. Что я имею в виду? Есть у вас, например, секундный таймер. Но нам не подходит вариант выводить информацию каждую секунду. Поэтому внутри этого таймера нужно реализовать "вычисление" двух минут и часа. Как вариант, это могло бы выглядеть так (при наличии секундного таймера).

Спойлер

@SecondPlayerTimer(playerid);
@SecondPlayerTimer(playerid) {
    static tick;
    tick++; // каждую секунду значение tick будет увеличиваться на 1

    if (tick % (2*60) == 0 && IsPlayerAdmin(playerid)) { // остаток от деления tick на 120 секунд (= 2 минуты) = 0 (прошло 2 минуты) и игрок - админ?
        new string[144];
        foreach (new i : ignoredPlayers) { // перебираем всех проигнорированных игроков
            strcat(string, valstr(i)); // и заносим их в строку вида 0, 2, 3, 15, ...
            strcat(string, ", ");
        }

        format(string, sizeof string, "Вопросов за 2 минуты: %d, проигнорированных: %d, нужно ответить: %s", questionsCounIn2Mins, ignoredQuestionsCountIn2Mins, string);
        SendClientMessage(playerid, -1, string);

        static questionsCount; // в количество вопросов за час добавляем вопросы за последние 2 минуты
        questionsCount += questionsCounIn2Mins;

        static ignoredQuestionsCount; // в количество проигнорированных вопросов за час добавляем последние за 2 минуты
        ignoredQuestionsCount += ignoredQuestionsCountIn2Mins;

        if (tick % (60*60) == 0) { // остаток от деления tick на 3600 секунд (= 1 час) = 0? (прошел час)

            new answeredQuestionsCount = questionsCount - ignoredQuestionsCount; // всего ответов = всего вопросов - количество проигнорированных

            format(string, sizeof string, "Вопросов за час: %d, не отвечено: %d, отвечено: %d", questionsCount, ignoredQuestionsCount, answeredQuestionsCount);
            SendClientMessage(playerid, -1, string);

            // коль уж час прошел, можем сбросить статистику
            questionsCount = 0;
            ignoredQuestionsCount = 0;
        }

        // сбрасываем статистику за последние 2 минуты
        questionsCounIn2Mins = 0;
        ignoredQuestionsCountIn2Mins = 0;
        Iter_Clear(ignoredPlayers); // очищаем список проигнорированных игроков
    }


}

 

 

Поделиться сообщением


Ссылка на сообщение
  • 0
51 минуту назад, Cawfee сказал:

@R0m4ik, ну, хорошо, попробую немного подробнее описать реализацию такой системы.

 

1. Создание счетчиков. Достаточно примитивный этап. Что есть счетчик? Счетчик - обычная переменная, которая хранит значение чего-либо. Поэтому создание счетчиков равносильно созданию обычной переменной. Сколько таких переменных (счетчиков) вам необходимо в данном случае, исходя из ваших задач?

  • Общее количество вопросов
  • Количество проигнорированных вопросов

Ну, и, поскольку вы хотите сохранять идентификаторы игроков, которые не получили ответ на свой вопрос, необходимо создать еще итератор (хранит массив, а также предоставляет функционал для удобной работы с ним). Выглядеть это может примерно так:


new questionsCounIn2Mins; // общее количество вопросов за последние 2 минуты
new ignoredQuestionsCountIn2Mins; // количество проигнорированных вопросов за последние 2 минуты
new Iterator:ignoredPlayers<MAX_PLAYERS>; // список игроков, не получивших ответ на свой вопрос

2. Заполнение значениями. Соответственно, в тех местах, где приходит новый вопрос, необходимо увеличивать значения счетчиков questionsCountIn2Mins и ignoredQuestionsCountIn2Mins, а также заносить идентификатор игрока, задавшего вопрос, в итератор ignoredPlayers.


questionsCounIn2Mins++; // увеличение questionsCountIn2Mins на 1
ignoredQuestionsCountIn2Mins++; // увеличение ignoredQuestionsCountIn2Mins на 1
Iter_Add(ignoredPlayers, playerid); // занесение идентификатора игрока, задавшего вопрос, в массив итератора
// при необходимости playerid поменять на свое значение

Ну, и, соответственно, когда администрация отвечает игрокам, необходимо уменьшить значение счетчика проигнорированных вопросов ignoredQuestionsCountIn2Mins и убрать игрока, которому дается ответ, из списка проигнорированных.


ignoredQuestionsCountIn2Mins--; // уменьшение значения на 1
Iter_Remove(ignoredPlayers, playerid); // удаление игрока playerid из списка проигнорированных
// при необходимости playerid поменять на свое значение

3. Реализация подсчета значений за час и вывода информации в чат. Для того, чтобы информация выводилась с нужным вам интервалом (раз в 2 минуты и раз в 1 час соответственно), следует использовать таймер, который будет обеспечивать выполнение необходимых нам действий с заданным интервалом. Наверняка в вашем моде уже есть такой таймер (секундный, минутный, или какой-нибудь еще). Используя его, следует, прежде всего, при необходимости, обеспечить выполнение нашего "куска" кода с нужной нам частотой. Что я имею в виду? Есть у вас, например, секундный таймер. Но нам не подходит вариант выводить информацию каждую секунду. Поэтому внутри этого таймера нужно реализовать "вычисление" двух минут и часа. Как вариант, это могло бы выглядеть так (при наличии секундного таймера).

  закрыть спойлер


@SecondPlayerTimer(playerid);
@SecondPlayerTimer(playerid) {
    static tick;
    tick++; // каждую секунду значение tick будет увеличиваться на 1

    if (tick % (2*60) == 0 && IsPlayerAdmin(playerid)) { // остаток от деления tick на 120 секунд (= 2 минуты) = 0 (прошло 2 минуты) и игрок - админ?
        new string[144];
        foreach (new i : ignoredPlayers) { // перебираем всех проигнорированных игроков
            strcat(string, valstr(i)); // и заносим их в строку вида 0, 2, 3, 15, ...
            strcat(string, ", ");
        }

        format(string, sizeof string, "Вопросов за 2 минуты: %d, проигнорированных: %d, нужно ответить: %s", questionsCounIn2Mins, ignoredQuestionsCountIn2Mins, string);
        SendClientMessage(playerid, -1, string);

        static questionsCount; // в количество вопросов за час добавляем вопросы за последние 2 минуты
        questionsCount += questionsCounIn2Mins;

        static ignoredQuestionsCount; // в количество проигнорированных вопросов за час добавляем последние за 2 минуты
        ignoredQuestionsCount += ignoredQuestionsCountIn2Mins;

        if (tick % (60*60) == 0) { // остаток от деления tick на 3600 секунд (= 1 час) = 0? (прошел час)

            new answeredQuestionsCount = questionsCount - ignoredQuestionsCount; // всего ответов = всего вопросов - количество проигнорированных

            format(string, sizeof string, "Вопросов за час: %d, не отвечено: %d, отвечено: %d", questionsCount, ignoredQuestionsCount, answeredQuestionsCount);
            SendClientMessage(playerid, -1, string);

            // коль уж час прошел, можем сбросить статистику
            questionsCount = 0;
            ignoredQuestionsCount = 0;
        }

        // сбрасываем статистику за последние 2 минуты
        questionsCounIn2Mins = 0;
        ignoredQuestionsCountIn2Mins = 0;
        Iter_Clear(ignoredPlayers); // очищаем список проигнорированных игроков
    }


}

 

 

C:\Users\Roma\Desktop\REVENT RP BY SOSED\gamemodes\justice.pwn(32526) : warning 202: number of arguments does not match definition
C:\Users\Roma\Desktop\REVENT RP BY SOSED\gamemodes\justice.pwn(32501) : warning 204: symbol is assigned a value that is never used: "string"
C:\Users\Roma\Desktop\REVENT RP BY SOSED\gamemodes\justice.pwn(50573) : error 035: argument type mismatch (argument 1)

 

Отредактировано пользователем R0m4ik

Поделиться сообщением


Ссылка на сообщение
  • 0
        foreach (new i : ignoredPlayers)
        {
            strcat(string, valstr(i));//проблема тут
            strcat(string, ", ");
        }

 

Заметка от Cawfee , создано

Используйте кнопку "Ответить" вместо "Цитата" для ответа пользователям. Не в первый раз говорю это.

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik, вместо этих двух строчек вставьте следующую:

format(string, sizeof string, "%s%d, ", string, i);

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee 20 минут нахожусь на сервере не появляется сообщение о итогах.

Отредактировано пользователем R0m4ik

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik, пересматривайте таймер прежде всего: точно ли это секундный таймер.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Скорее всего проблема в этом 

: warning 204: symbol is assigned a value that is never used: "string"

если я переменную убираю появляються ошибки

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik, все зависит от того, как вы в итоге вставили это дело в свой мод.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee 

Это я добавил к переменным.

new questionsCounIn2Mins;
new ignoredQuestionsCountIn2Mins;
new Iterator:ignoredPlayers<MAX_PLAYERS>;
questionsCounIn2Mins++;
ignoredQuestionsCountIn2Mins++; 
Iter_Add(ignoredPlayers, playerid);

Это там где приходит репорт

ignoredQuestionsCountIn2Mins--;
Iter_Remove(ignoredPlayers, playerid);

Это когда админ ответил игроку в команду /an

 

@SecondPlayerTimer(playerid);
@SecondPlayerTimer(playerid)
{
        static tick;
        tick++; 
        if (tick % (2*60) == 0 && IsPlayerAdmin(playerid))
        {
            new string[144];
            foreach (new i : ignoredPlayers)
            {
            format(string, sizeof string, "%s%d, ", string, i);
        }
        format(string, sizeof string, "ИТОГИ: {009900}All:{FFFFFF} %d {009900}/ Ans: {FFFFFF}0 {009900}/ Неотв.: {ff0000}%d {ffffff} | Ответить:{ffff82} %d", questionsCounIn2Mins, ignoredQuestionsCountIn2Mins, string);
        SendClientMessage(playerid, -1, string);
        static questionsCount;
        questionsCount += questionsCounIn2Mins;
        static ignoredQuestionsCount;
        ignoredQuestionsCount += ignoredQuestionsCountIn2Mins;
        if (tick % (60*60) == 0)
        {
            new answeredQuestionsCount = questionsCount - ignoredQuestionsCount;
            format(string, sizeof string, "ИТОГИ ЧАСА: {009900}Репортов: {ffffff}%d {009900}/ Ответов: {ffffff}%d {009900}/ Неотвечено: {ff0000}%d {ffffff}", questionsCount, answeredQuestionsCount, ignoredQuestionsCount);
            SendClientMessage(playerid, -1, string);
            questionsCount = 0;
            ignoredQuestionsCount = 0;
        }
        questionsCounIn2Mins = 0;
        ignoredQuestionsCountIn2Mins = 0;
        Iter_Clear(ignoredPlayers);
    }


}

Это в конец мода P.S Там где итоги часа мне нужно это именно к PAYDAY добавить

Поделиться сообщением


Ссылка на сообщение
  • 0

Пишу с запасного т.к забыл пароль от старого аккаунта E-Mail для востановления не помню

Заметка от Cawfee , создано

Обратитесь в техническую поддержку форума по поводу восстановления доступа к утерянному аккаунту.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mason, в вашем игровом моде присутствуют индивидуальные секундные таймеры?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Не знаю наверно нет.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Если вы про вот это "SetTimerEx" то да есть.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Допустим я сделал эту систему под себя, и теперь все появляется все работает но что делать если в PayDay я туда итоги часа вставил если я с другом на сервере почему в payday появляется 2 сообщения а когда я один на сервере то 1 сообщение еще вопрос как сделать так чтобы если 1 идшник не получил ответ то в конце писалась точка а если несколько то через запятую и если остался последний идшник то в конце точка, и как сделать так когда админ просто ответил репорт не приходил просто ответил число не отвеченных не уходило в -

Отредактировано пользователем Mason

Поделиться сообщением


Ссылка на сообщение
  • 0

up

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Есть возможность ответить?

Заметка от DEST , создано

3.6. Запрещено поднимать (апать) свою тему чаще, чем 1 раз в 24 часа. 

Устное предупреждение.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mason, код функции с PayDay приложите.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee 

    //ИТОГИ
    new answeredQuestionsCount = questionsCount - ignoredQuestionsCount;
    format(string, sizeof string, "ИТОГИ ЧАСА: {009900}Репортов: {ffffff}%d {009900}/ Ответов: {ffffff}%d {009900}/ Неотвечено: {ff0000}%d {ffffff}", questionsCount, answeredQuestionsCount, ignoredQuestionsCount);
    SendAdminMessage(0xb03131ff, string);
    questionsCount = 0;
    answeredQuestionsCount = 0;
    ignoredQuestionsCount = 0;
    questionsCounIn2Mins = 0;
    ignoredQuestionsCountIn2Mins = 0;
    Iter_Clear(ignoredPlayers);
    //

Это добавил после сообщения о payday.

    //ИТОГИ
    static questionsCount;
    questionsCount += questionsCounIn2Mins;
    static ignoredQuestionsCount;
    ignoredQuestionsCount += ignoredQuestionsCountIn2Mins;
    //

Это до сообщения.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mason, у вас функция с PayDay имеет параметр playerid? Или внутри нее стоит цикл, перебирающий всех игроков в сети, чтобы вывести сообщение о PayDay?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Возможно 2 вариант щяс посмотрю.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Я посмотрел, да plyaerid есть.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Aleksey98
      От Aleksey98
      Необходим человек: который сможет написать систему тюнинга!
      как на крупных проектах типа: Arizona и Radmir
      И еще требуется Мапперы на новый топовый проект!
      Связь : https://vk.com/id289498732
    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };