BLOG "Моё хобби" или "как я трачу свободное время"

Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
пока не спробуют
а я пробовал и пользовался 2 месяца на ноутбуке. И у меня нет в Linux необходимости. Вечная, дурацкая манера навязывать свою точку зрения. Мне комфортно на win и фичи, что удобны под линем (некоторые) впосле себе не плохо портируют на win
 
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
1522316002467.png
Как ни странно, но стоит упомянуть, что при работе с AMXX стоит для начала прочитать стандартные плагины из комплекта, которые не всегда хорошо написаны :crazy:
 
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
Ряд полезных Online-сервисов для разработки.
http://repl.it/
https://playcode.io/
https://regex101.com/
http://pastebin.org/
http://sandbox.onlinephpfunctions.com/
http://sqlfiddle.com/
http://jsbin.com
https://gtmetrix.com/
http://jsfiddle.net/
http://codepen.io

Скрытое содержимое могут видеть только пользователь группы: Администратор, Куратор, Модератор, Проверенный
3 Апр 2018
Скрытое содержимое могут видеть только пользователь группы: Администратор
 
Последнее редактирование:
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
Разгребаю иногда Gist.
Нахожу поделки, которым уже не знаю применения, тем не менее, возможно кому-то либо будет интересно.
Я что-то тестировал, и не помню зачем.
Код:
#include <amxmodx>
#include <fakemeta>

new bool: g_bEnavleInvis[33];

public plugin_init() {
    register_plugin("Test Invisible Method On FullPack", "0.0.1", "wopox1337");

    register_forward(FM_AddToFullPack, "pfnAddToFullPack_Pre", ._post = false);

    register_clcmd("radio1", "cmd_radio1");
}

public pfnAddToFullPack_Pre(es_handle, e, ent, host, hostflags, bool: player, pSet) {
    if(!(player && g_bEnavleInvis[host]))
        return;

    set_es(es_handle, ES_Origin, {0.0, 0.0, -8192.0} );
    set_es(es_handle, ES_Effects, get_es(es_handle, ES_Effects) | EF_NODRAW);

    /*
    * так - фигово получается, time-shift какой-то! (в PRE конечно же) xD
    */
    // forward_return(FMV_CELL, false);
    // return FMRES_SUPERCEDE;
}

public cmd_radio1(pPlayer) {
    g_bEnavleInvis[pPlayer] = !g_bEnavleInvis[pPlayer];
 
    client_print(pPlayer, print_chat, "Invis = %s", g_bEnavleInvis[pPlayer] ? "ON" : "OFF");

    return PLUGIN_HANDLED;
}
10 Апр 2018

Так же, что бы не потерять, хранил настроенный конфиг NGinx под CS:Bans, который изначально поддерживает только Apache.
Спасибо за это oxoTHuk , он мне тогда с этим помог. :good2:
Скрытое содержимое могут видеть только пользователь группы: Участник
 
Последнее редактирование:
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
Динамический FOV, конкретно в данном коде - зацикленный.
Писал для проверки, возможно пригодится в каком-то моде, где нужно реализовать: отдышку, сердцебиение, пополнение жизней и прочего. Визуальный эффект.
Код:
#include <amxmodx>
#include <engine>

const MIN_FOV = 46;
const MAX_FOV = 150;
const STEP = 1;

new g_FOV[33] = { 200, ... };
new bool: g_bDecrease[33];

public client_PostThink(pPlayer)
{
    if(is_user_alive(pPlayer))
    {     
        g_bDecrease[pPlayer] ? ( g_FOV[pPlayer] -= STEP ) : ( g_FOV[pPlayer] += STEP );
      
        if(g_FOV[pPlayer] > MAX_FOV)
            g_bDecrease[pPlayer] = true;
        else if(g_FOV[pPlayer] < MIN_FOV)
            g_bDecrease[pPlayer] = false;

        SetFOV(pPlayer, g_FOV[pPlayer]);
        //client_print(pPlayer, print_center, "FOV='%i'", g_FOV[pPlayer]);
    }
}

SetFOV(pPlayer, iFov = 90)
{
    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SetFOV"), .player = pPlayer);
    write_byte(iFov);
    message_end();
}
11 Апр 2018
А, тут, я как-то пилил фикс бомбы на плагине.
"Проецирование" конечного положения бомбы при установке

C++:
//#define DEBUG_ENABLE

#if defined DEBUG_ENABLE
#include <VizualizeVector.inl>
#endif


#define FIX_ANGLES    // Sets the Angles of the bomb as a player
#define FIX_BUGS    // Fix missed a bomb under the map

#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#if defined FIX_BUGS
#include <hamsandwich>

new const CLASSNAME[] = "weapon_c4";

const Float: SITTING = 46.0;

// #define is_on_ground(%1)    (fm_distance_to_floor(%1) < SITTING)
#endif

public plugin_init()
{
    register_plugin("Bomb fixes", "0.0.1", "wopox1337");
#if defined FIX_ANGLES
    register_logevent("bomb_planted", 3, "2=Planted_The_Bomb");
#endif
#if defined FIX_BUGS
    RegisterHam(Ham_Weapon_PrimaryAttack, CLASSNAME, "C4_PrimaryAttack_Pre", .Post = false);
#endif
}

#if defined FIX_ANGLES
// Thanks to Voed
public bomb_planted()
{
    static Float: vfAngles[3], pPlayer;
    pPlayer = get_loguser_index();
   
    pev(pPlayer, pev_v_angle, vfAngles);

    new pBomb = engfunc(EngFunc_FindEntityByString, 0, "model", "models/w_c4.mdl");
    if(!pev_valid(pBomb))
        return PLUGIN_CONTINUE;

    vfAngles[0]    =    0.0;
    vfAngles[1]    +=    90.0;
    set_pev(pBomb, pev_angles, vfAngles);
   
    return PLUGIN_CONTINUE;
}

stock get_loguser_index()
{
    new loguser[80], name[32];
    read_logargv(0, loguser, charsmax(loguser));
    parse_loguser(loguser, name, charsmax(name));
   
    return get_user_index(name);
}
#endif

#if defined FIX_BUGS
public C4_PrimaryAttack_Pre(pEnt)
{
    static pPlayer; pPlayer = pev(pEnt, pev_owner);
   
    if(!is_on_ground(pPlayer))
    {
#if defined client_printex
        client_printex(pPlayer, print_center, "#C4_Plant_Must_Be_On_Ground");
#else
        engclient_print(pPlayer, engprint_center, "You must be standing on^n^nthe ground to plant the C4!");
#endif

        return HAM_SUPERCEDE;
    }

    return HAM_IGNORED;
}
#endif

stock is_on_ground(pPlayer)
{
    if(fm_distance_to_floor1(pPlayer) < SITTING)
        return true;
    else
        return false;
}

stock Float:fm_distance_to_floor1(index, ignoremonsters = 1) {
    new Float:start[3], Float:dest[3], Float:end[3];
    pev(index, pev_origin, start);
    dest[0] = start[0];
    dest[1] = start[1];
    dest[2] = -8191.0;

    engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0);
    get_tr2(0, TR_vecEndPos, end);

    pev(index, pev_absmax, start);
    // new Float:ret = floatabs(start[2] - end[2]);
    new Float:ret = start[2] - end[2];
   
    #if defined DEBUG_ENABLE
    static iStart[3], iEnd[3];
   
    FVecIVec(start, iStart); FVecIVec(end, iEnd);
    UTIL_VisualizeVector(
            .vStart = iStart,
            .vEnd = iEnd,
            .time = 0.5,
            .width = 3
        );
    #endif
   
    return ret > 0 ? ret : 0.0;
}

public client_PreThink(pPlayer)
{
    client_print(pPlayer, print_center, "To Floor: %.1f", fm_distance_to_floor1(pPlayer));
}
 
Последнее редактирование:
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
Пока копался по коду, выяснилось, что сервер имеет некоторый встроенный функционал, который нигде не описан.
ignoremsg - Отключение текстового чата (отключить весь чат / оставить командный / показывать весь чат);
ignorerad - Блокировать флуд radio-сообщениями сервера. (звуки радиокоманд типа Fire In The hole!, и надписи в чат);
become_vip - Попросить в стать VIP следующим.

продолжаем расследование.... :dntknw:
16 Апр 2018
Кому интересно, можете раскапывать дальше, там ещё и фейлы есть, которые вроде как необходимо фиксить...
 
Последнее редактирование:
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
Давным давно один из серверо-держателей попросил сделать плагин для рестарта раунда при отсутствии пушек на карте. Так как о сборке радиуса мне ничего не было известно, извертелся таким костылём. Выкладываю, ибо негде ему расположиться теперь уже :crazy:. Реализация именно костыльная, так что обойдёмся без критики.
Код:
#include <amxmodx>

const MIN_SENTRIES        = 2; // Минимальный счёт
const TIMER_SECONDS        = 15;

enum { TEAM_CT, TEAM_T }

const TASK_ID = 1231223;

new bool: g_bSomeCondition;
new iTaskTimer = TIMER_SECONDS;

public plugin_init()
{
    register_plugin("RestartRound by enough Sentry", "0.0.1b", "wopox1337");
    register_message(get_user_msgid("TeamScore"), "msg_teamScore");
}

public msg_teamScore()
{
    enum { TeamName = 1, Score };

    static iScore;
    iScore = get_msg_arg_int(Score);

    if(g_bSomeCondition && !iScore)
    {
        static szTeam[1];
        get_msg_arg_string(TeamName, szTeam, charsmax(szTeam));

        if(!task_exists(TASK_ID))
            set_task(1.0, "StartCounter", TASK_ID, .flags = "b");

        g_bSomeCondition = false;
    }
    if(iScore == MIN_SENTRIES)
    {
        g_bSomeCondition = true;
    }

    //client_print(0, print_chat,    "Scores Changed: set %d",iScore);
}

public StartCounter()
{
    if(--iTaskTimer > 0)
    {
        set_hudmessage(.holdtime = 0.95, .fadeouttime = 0.0, .fadeintime = 0.0);

        show_hudmessage(0,
            "%d сек^n\
            ДО РЕСТАРТА РАУНДА",
            iTaskTimer
        );
    }
    else
    {
        remove_task(TASK_ID);

        server_cmd("sv_restartround 1");
    }
}
23 Апр 2018

Очередная подборка полезных ссылок для юных энтузиастов:
 
Последнее редактирование:
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)

Garey

ninjaCow
Сообщения
441
Реакции
1,096
Помог
11 раз(а)
https://pterodactyl.io
Нашел отличную панель для управления сервером (можно в пару кликов настроить на HLDS):
Плюсы:
- Главная фишка - серверы хостятся в докере т.е. можно самому выбрать максимальное количество памяти, cpu и диска для использования сервером
- Консоль
- Задания для выполнения
- Можно создать ограниченого пользователя
- API
- В целом выглядит современно в отличии от других free панелей управления
Минусы:
- фастдл симлинки надо создавать самому

Работает только на KVM или VMware, либо на реальном железе.
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
344
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Garey, Демо не работает :c
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Garey, стоить отметить то, что докер это круто, но поправить стоит. Он не гарантирует соблюдение лимитов.
1 Май 2018
Работает только на KVM или VMware, либо на реальном железе
Напомните myarena на OpenVZ?
 

Garey

ninjaCow
Сообщения
441
Реакции
1,096
Помог
11 раз(а)
fantom, да на OpenVZ, там даже ядро кастомное не поставишь...
 
Сообщения
496
Реакции
622
Помог
16 раз(а)
kvm тоже не гарантирует.
Хотя лучше kvm, чем openvz.
 

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

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу