SprayTracer (Mod Size, Fix, Modded) 1.0.1

При наведение на спрей показывает кто его нарисовал.

  1. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Пользователь san911 разместил новый ресурс:

    SprayTracer (Mod Size, Fix, Modded) - При наведение на спрей показывает кто его нарисовал.

    Узнать больше об этом ресурсе...
     
    Последнее редактирование: 18 сен 2016
  2. Grey83

    Grey83

    Сообщения:
    367
    Симпатии:
    106
    Немного оптимизировал и перевёл на новый синтаксис (для компиляции необходим SM1.8_stable).
    Ну и отрубил скрытие информации от вновь вошедших игроков (не вижу в этом никакого смысла).

    P.S. Чуть не забыл: теперь можно выбрать где будет отображаться информация (в хинте или в центре экрана) и сколько раундов она будет храниться. Всё настраивается через #define в начале файла.
     

    Вложения:

  3. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Ну зря, по тому что спрей после реконнекта не виден пере зашедшему игроку. А ещё ты оффаешь отображение спрея(Если существует) в OnClientPostAdminCheck остальным игрокам.

    PS. Оптимизации не увидел. Разве что EventHookMode_PostNoCopy
    И тоже самое но сжато:
    Код:
        bool hit = TR_DidHit(hTrace);
        if(hit) TR_GetEndPosition(vecPos, hTrace);
        CloseHandle(hTrace);
        return hit;
     
    Последнее редактирование: 18 сен 2016
  4. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.591
    Симпатии:
    1.996
    А так не пробовал:
    PHP:
    stock bool GetPlayerEye(int clientfloat vecPos[3])
    {
        
    float vecAngles[3], vecOrigin[3];
        
    GetClientEyePosition(clientvecOrigin);
        
    GetClientEyeAngles(clientvecAngles);
        
    TR_TraceRayFilter(vecOriginvecAnglesMASK_SHOTRayType_InfiniteTraceEntityFilterPlayer);

        if(
    TR_DidHit())
        {
            
    TR_GetEndPosition(vecPos);
            return 
    true;
        }
        return 
    false;
    }
    Эти ваши переменные для циклов тоже не хороши. Оффтоп
     
    san911 нравится это.
  5. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Оффтоп
     
  6. Grey83

    Grey83

    Сообщения:
    367
    Симпатии:
    106
    Ладно, уболтал.
    Только объясни какой смысл обнулять счётчик раундов и координаты X с Y спрею (которые всё равно затираются при создании нового спрея), когда можно просто в 38-й строке в проверке сначала проверить существует ли спрей и может ли видеть его игрок, прежде чем измерять расстояние до спрея?
    М/б это несколько уменьшит нагрузку на сервер:
    PHP:
    if(SprayPlayer[a] && SprayList[i][a] && (GetVectorDistance(vecPosg_SprayTrace[a]) <= 30.0))
    Но ты же всё равно скрываешь информацию о старом спрее если игрок с тем же индексом создаст спрей через массив SprayPlayer[]. Я могу просто отключить блок OnClientPostAdminCheck как ненужный и у меня будет то же самое с одним одномерным массивом SprayPlayer[], что и у тебя с двумя массивами (одномерным SprayPlayer[] и двухмерным SprayList[][]), разве что у вновь вошедшего будет проверяться наличие спрея, которого он не видит. Фактически у тебя не нужен массив SprayPlayer[] и в OnClientPostAdminCheck() нужно убрать проверку на него, т.к. пользы от неё никакой. Этот массив нужен только в счётчике раундов.

    Кстати, в этом случае (когда создаётся новый спрей) игра удаляет спрей вышедшего игрока с этим же индексом или нет? Никогда не обращал внимания, да и у меня обычно был установлен лимит в 20 спреев в клиенте, так что хорошая очередь из автомата и спреи обычно исчезали, емнип, всё равно.
     
    Последнее редактирование: 18 сен 2016
  7. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Смысла нет на самом деле, это было вырезано из оригинала, и уверен что большой роли это не играет в плане нагрузки.
    Первым проверять стоит смотрит ли игрок на спрей. Ты же не стоишь и не пялишься в спреи целый раунд, а играешь?
    Код:
        for(new i = 1; i <= MaxClients; i++)
        {
            if(SprayPlayer[i] && (++LifeSprayScore[i] >= 2)) DeleteSprayInfoPlayer(i);
        }
    Не нужно получать игрока в начале раунда.
    Код:
    public OnClientPostAdminCheck(client)
    {
        for(new i = 1; i <= MaxClients; i++)
        {
            if(SprayPlayer[i]) SprayList[client][i] = false;
        }
    }
    Не записываю людей без спреев, что может быть правильно, так как много людей не рисуют спреи.
    А вообще хз :)
    Нечего не понял.
     
  8. Grey83

    Grey83

    Сообщения:
    367
    Симпатии:
    106
    В случае если:
    1. один игрок нарисовал спрей;
    2. затем он вышел;
    3. после этого зашёл игрок;
    4. новому игроку присвоили тот же индекс, что и вышедшему перед ним.
    Так вот, что происходит со спреем вышедшего игрока в этом случае?
    Он автоматически удаляется при создании вновь вошедшим игроком спрея или остаётся висеть и дальше?
     
  9. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Речь об отображение инфы о спрее в плагине или самого рисунка на стене?
    На стене будет висеть 2 раунда. В плагине инфа о старом спрее игрока пропадет.
     
    Последнее редактирование: 19 сен 2016
  10. Grey83

    Grey83

    Сообщения:
    367
    Симпатии:
    106
    @san911, я про то как ведёт себя игра без плагина