1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

-switch

Тема в разделе 'Кодинг/Собственные решения', создана пользователем Defm, 8 дек 2010.

  1. Defm Ньюфаг

    Сообщения:
    7
    Спасибы:
    0
    Мне не нужна эмуляция dota-команды -switch, как тут уже обсуждалось в 1 теме. Нужно найти того **** (нехорошего человека) который тормозит процесс свича не прописывая -ok. Во время игры анализировать кто не написал - совсем неинтересно, карта пишет лишь лишь игроков которые откликнулись на -switch.

    Нужен алгоритм, нересурсоемкий и не слишком спамящий на экран, который бы поставлял информацию о не прописавших -ok игроках. Даже не алгоритм, а идея - с реализацией я справлюсь.

    Понятно что можно анализировать ввод на "switch" и затем запускать какой-то цикл, анализирующий скажем так переменную_массив_кто_прописал_ок.. Дайте более-менее побробные выкладки
  2. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    game_base.cpp

    Код:
    void CBaseGame :: SwitchDeny ( unsigned char PID)
    {
    	m_SwitchTime = 0;
    	CGamePlayer *p = GetPlayerFromPID(PID);
    	CONSOLE_Print("[GAME: " + m_GameName + "] Switch canceled being denied by "+p->GetName());
    	SendAllChat("Команда свич прервана игроком "+p->GetName());
    }
    I_aM_Fake нравится это.
  3. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    ему нужно найти не того человека который написал -no,а того который вообще ничего не написал для свича...

    зы: дота какбЭ пишет ники тех кто написал ок
    слабо открыть список и просотреть кто не пишет....
  4. Defm Ньюфаг

    Сообщения:
    7
    Спасибы:
    0
    Не совсем то, Hell, Фейк прав.
    Думаю можно реализовать на основе -votekick.

    Если в обработчике команд в игре обрабатывается весь ввод, а не только строки с префиксом "!"(Сейчас нет доступа к исходникам),
    • 1) то можно отловить "-switch"
    • 2) не учитывать игрока написавшего "-switch"
    • 3) обрабатывать дальнейший ввод по аналогии с "!yes" записывая игроков в какой-нибудь вектор (или наоборот исключая из заполненного вектора)

    Становится непонятен момент с обратной связью.. Писать отдельную команду !slowpokes по которой бот будет выводить соответствующую информацию? Идею форумчане, идею! Неужели все на iCCup, забросили доту или никого не напрягали проблемы со свичем?

    Ах да, если надо - бот v17cb
  5. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Путей много, записывать кто написал свич в вектор, потом сравнивать с вектором всех игроков, кого не хватает - вывести в чат.
    Либо 2 более простой вариант
    Сделать свич по аналогии с вотекик только после головования не кик а свич
    И 3 вариант
    Сделать !voteok установить нужный процент принятия например 50%, как только половина напишет !voteok у всех в чат отправится -ok
    Ну впринципе есть ещё кучи вариантов, все уж описывать не стану.
  6. Defm Ньюфаг

    Сообщения:
    7
    Спасибы:
    0
    Это будет очень спамящий вариант, если не ипользоват заглушек.

    Писать свою обертку над "карточной" командой - унылая схема.

    Третий вариант совсем сложная схема: реализовать свою команду, написать ее в чате, написать код проверки на соответствие проценту, написать код отсылки "-ok" от имени каждого игрока.

    Давай если у тебя куча вариантов, поделись, не жадничай. С меня плюсик в карму.
  7. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Вопервых можно не особо спамящий варик с векторами если выполнять проверку к примеру раз в 5 сек или 10 и выводить кто не голосовал по поводу -ok'a всё оч просто, берёш вотекик и вместо кика вставляеш
    PHP:
    <span class="syntaxdefault">                    </span><span class="syntaxkeyword">for( </span><span class="syntaxdefault">vector</span><span class="syntaxkeyword"><</span><span class="syntaxdefault">CGamePlayer </span><span class="syntaxkeyword">*> :: </span><span class="syntaxdefault">iterator i </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">m_Players</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">begin</span><span class="syntaxkeyword">( ); </span><span class="syntaxdefault"></span><span class="syntaxkeyword">!= </span><span class="syntaxdefault">m_Players</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">end</span><span class="syntaxkeyword">( ); </span><span class="syntaxdefault">i</span><span class="syntaxkeyword">++ )<br />                        {<br />                            </span><span class="syntaxdefault">SendAllChat</span><span class="syntaxkeyword">((*</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">)-></span><span class="syntaxdefault">GetPID</span><span class="syntaxkeyword">(), </span><span class="syntaxstring">"-ok"</span><span class="syntaxkeyword">);<br />                        } </span><span class="syntaxdefault"></span>
    Предполагаю должно сработать
  8. Defm Ньюфаг

    Сообщения:
    7
    Спасибы:
    0
    Это же произвол :)
    Хотелось бы донести до человека словами что он должен прописать -ok, а не делать это за него. Хотя вариант конечно. И хотелось бы найти виновника, а не сделать всех невиновными.

    Обработчик ожидание по 5-10 секунд - ну да можно с этим поиграть. Сколько там примерно время затухания текста в Варе? С одной стороны если -ok не написало 1 человека из 10 - то еще можно потерпеть, а если 4-5 говорят "шас напишу, извини, меня тут убивают" - то 4-5 строк на экране уже много.

    Кстати как этот обработчик реализовать? Есть какая-то процедура обработки по таймеру?
  9. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Впринципе можно с аннонсом поиграться, смысл: как только ктото пишет -switch сразу запускается аннонс только переделаный, в нём говорится кто не написал ок а период повтора анонса 5-10 сек само то, флуда много не будет т.к. будет всё входить в 1-2 строки особенно если интервал 10сек
  10. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    Код:
                        for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                            {
                                SendAllChat((*i)->GetPID(), "-ok");
                            } 
    чито это?=0
    единственный вариант это писатью зерам(которые не написали -ок)сообщение каждые хз_скока секунд
    ещё хочю сказать что вылавливать чат нужно до обработки его как команду ( оО)
    те там где тригер(?trigger)
  11. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Это кусок кода который вставить в вотекик вместо кика, будет писать от каждого "-ok"
  12. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    круто, но зачем писать от всех ок?...
    свича всеравно не будет....
  13. Defm Ньюфаг

    Сообщения:
    7
    Спасибы:
    0
    Как прервать цикл обработки -switch? Т.е. по какому флагу, событию? Или подскажите стандартный тайминг свича..
  14. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    60 секунд