> > > > >

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

Сообщения
1.761
Рейтинг
1265
#21
а я пробовал и пользовался 2 месяца на ноутбуке. И у меня нет в Linux необходимости. Вечная, дурацкая манера навязывать свою точку зрения. Мне комфортно на win и фичи, что удобны под линем (некоторые) впосле себе не плохо портируют на win
 
 
Сообщения
1.761
Рейтинг
1265
#23
1522316002467.png
Как ни странно, но стоит упомянуть, что при работе с AMXX стоит для начала прочитать стандартные плагины из комплекта, которые не всегда хорошо написаны :crazy:
 
  3
Сообщения
1.761
Рейтинг
1265
#24
Ряд полезных 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
Для просмотра содержимого вам необходимо авторизоваться.
 
Последнее редактирование:
  1
Сообщения
1.761
Рейтинг
1265
#25
Разгребаю иногда 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:
Для просмотра содержимого вам необходимо авторизоваться.
 
Последнее редактирование:
  3
Сообщения
1.761
Рейтинг
1265
#26
Динамический 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));
}
 
Последнее редактирование:
  5
Сообщения
1.761
Рейтинг
1265
#32
Пока копался по коду, выяснилось, что сервер имеет некоторый встроенный функционал, который нигде не описан.
ignoremsg - Отключение текстового чата (отключить весь чат / оставить командный / показывать весь чат);
ignorerad - Блокировать флуд radio-сообщениями сервера. (звуки радиокоманд типа Fire In The hole!, и надписи в чат);
become_vip - Попросить в стать VIP следующим.

продолжаем расследование.... :dntknw:
16 Апр 2018
Кому интересно, можете раскапывать дальше, там ещё и фейлы есть, которые вроде как необходимо фиксить...
 
Последнее редактирование:
  9
Сообщения
1.761
Рейтинг
1265
#34
Давным давно один из серверо-держателей попросил сделать плагин для рестарта раунда при отсутствии пушек на карте. Так как о сборке радиуса мне ничего не было известно, извертелся таким костылём. Выкладываю, ибо негде ему расположиться теперь уже :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

Очередная подборка полезных ссылок для юных энтузиастов:
 
Последнее редактирование:
  3
Сообщения
1.761
Рейтинг
1265
#35
1524683654053.png 1524683764917.png 1524683898099.png
#GoldSrc_physics
Кому интересно почитать о физике движения в GoldSrc движке - привожу несколько ссылок:
  1. http://www.funender.com/quake/articles/wall_strafing.html
  2. https://steamcommunity.com/sharedfiles/filedetails/?id=184184420
  3. http://flafla2.github.io/2015/02/14/bunnyhop.html
  4. https://sites.google.com/site/zdrytchx/how-to/strafe-jumping-physics-the-real-mathematics
  5. https://gamedev.stackexchange.com/questions/45639/implementing-strafe-jumping/45656#45656
Да-да, пора учить английский, не ленись! :derisive:
 
  3
Сообщения
151
Рейтинг
356
#36
https://pterodactyl.io
Нашел отличную панель для управления сервером (можно в пару кликов настроить на HLDS):
Плюсы:
- Главная фишка - серверы хостятся в докере т.е. можно самому выбрать максимальное количество памяти, cpu и диска для использования сервером
- Консоль
- Задания для выполнения
- Можно создать ограниченого пользователя
- API
- В целом выглядит современно в отличии от других free панелей управления
Минусы:
- фастдл симлинки надо создавать самому

Работает только на KVM или VMware, либо на реальном железе.
 
  5
Сообщения
860
Рейтинг
760
#38
Garey, стоить отметить то, что докер это круто, но поправить стоит. Он не гарантирует соблюдение лимитов.
1 Май 2018
Работает только на KVM или VMware, либо на реальном железе
Напомните myarena на OpenVZ?
 
 
Сообщения
151
Рейтинг
356
#39
fantom, да на OpenVZ, там даже ядро кастомное не поставишь...
 
 
Сообщения
416
Рейтинг
479
#40
kvm тоже не гарантирует.
Хотя лучше kvm, чем openvz.
 
 

Похожие темы

> > > > >