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

Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
1546818667062.png
Нашёл подсветку синтаксиса файлов конфигурации GoldSrc (HL, CS & etc) для редактора кода Notepad++
A black themed style and syntax in Notepad++ for use with scripting in GoldSrc .cfg files
https://github.com/treetoon/npp-goldsrc-style
Installation
1. Locate Notepad++, for example: "C:\Program Files (x86)\Notepad++\themes"
2. Place the file "CFG Black.xml" theme here
3. Open notepad++, goto-> Settings-> Style Configurator, Select theme: CFG Black (Global values may interfer, select Enable global ... color later etc if something isn't displaying properly)
4. Save then restart notepad++
5. goto-> Language-> Define your language...-> Import-> "CFG-Language_syntax.xml"
6. Select it in "Language" bar on top, may need restart
You may also want to disable spell checking.
 
Сообщения
365
Реакции
75
Предупреждения
15
Помог
1 раз(а)
bionext, я конечно может не туда пишу. Но здесь ты выкладывал плагин свой) заметил вот что.
Играют на сервере 1 тер и 2 контра например. Я захожу на сервер и пытаюсь зайти за контров. Скрин прикрепляю
Ну не на всех сборках такое происходит я заметил. Может мне кажется. Но играю я со сборки 7960 от турбо буста.
 

Вложения

Последнее редактирование:
Сообщения
273
Реакции
424
Помог
5 раз(а)
GALAXY, Значит они полностью отказались от старого меню:smile3:
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Последнее редактирование:
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Появилась у меня проблемка с телевизором, "развёртка" к ЖК матрице шалит (микросхема преобразования). Находя различные ответы по проблемам телевизора наткнулся на один забавный пост, где человек решал свою проблему битых пикселей СВИНИНОЙ. :rofl:

23 Янв 2019
Кстати, если у кого пиксель не битый, а другим цветом светится - то вот вам чудо сайт.
http://www.jscreenfix.com/fix.html
Наводите квадрат на проблемное место и оставляете на некоторое время.

Код:
// Make JScreenFix frame draggable
$(function() {
   $("#canvasFrame").draggable({
      drag: function() {
    repositionComponents();
      }
    });
});

fullscreen = false;
updateTimer = 0;
startTime = new Date().getTime();


function jscreenfix() {

    setTimeout(fixInline, 1000);

    _gaq.push(['_trackEvent', 'JScreenFix', 'Start', 'Launch JScreenFix button pressed']);

    repositionComponents();
}

function setFullscreen() {

    var element = document.getElementById("fixScreen");

    if (element.mozRequestFullScreen) {
        element.mozRequestFullScreen();
        fullscreen = true;
        _gaq.push(['_trackEvent', 'JScreenFix', 'Fullscreen', 'Mozilla fullscreen request']);
    }
    else if (element.webkitRequestFullScreen) {
        element.webkitRequestFullScreen();
        fullscreen = true;
        _gaq.push(['_trackEvent', 'JScreenFix', 'Fullscreen', 'Webkit fullscreen request']);
    }
}

function repositionComponents() {

    var position = $("#canvasFrame").position();
    var horizontalMid = window.innerWidth / 2;
    var verticalMid = window.innerHeight / 2;

   

    $("#sponsorFrame").toggleClass("moveLeft", (position.left + 256) > horizontalMid);
    $("#sponsorFrame").toggleClass("moveRight", (position.left + 256) <= horizontalMid);
    $("#sponsorFrame").toggleClass("moveTop", (position.top + 256) <= verticalMid);
    $("#sponsorFrame").toggleClass("moveBottom", (position.top + 256) > verticalMid);

    $("#backButtonWrapper").toggleClass("moveTop", (position.top + 256) > verticalMid);
    $("#backButtonWrapper").toggleClass("moveBottom", (position.top + 256) <= verticalMid);

    $("#fullscreenButtonWrapper").toggleClass("moveTop", (position.top + 256) > verticalMid);
    $("#fullscreenButtonWrapper").toggleClass("moveBottom", (position.top + 256) <= verticalMid);

    $("#sponsorFrameLeaderboardWrapper").toggleClass("moveTop", (position.top + 256) > verticalMid);
    $("#sponsorFrameLeaderboardWrapper").toggleClass("moveBottom", (position.top + 256) <= verticalMid);

}


function cancelFullscreen() {

    if (document.exitFullscreen) {
        document.exitFullscreen();
    }
    else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
    }
    else if (document.webkitCancelFullScreen) {
        document.webkitCancelFullScreen();
    }

    fullscreen = false;
}

function hideDragTip() {
    var element = document.getElementById("dragTip");
    element.style.visibility = "hidden";
}

function toggleFullscreen() {

    var element = document.getElementById("fixScreen");

    if (fullscreen) cancelFullscreen();
    else setFullscreen();

}

function fixInline() {
    repositionComponents();
    updateTimer = setInterval(drawInline, 10);
}

function drawInline() {
    draw(document.getElementById("canvas"));
}

function draw(cvs) {

    var ctx = cvs.getContext("2d");
   
    var blockSize = 64;
    var imageData = ctx.createImageData(blockSize, blockSize);
    for (var i=0; i<blockSize*blockSize; i++) {
        var p = i*4;
        imageData.data[p+0] = Math.random() >= 0.5 ? 255 : 0;
        imageData.data[p+1] = Math.random() >= 0.5 ? 255 : 0;
        imageData.data[p+2] = Math.random() >= 0.5 ? 255 : 0;
        imageData.data[p+3] = 255;
    }
   
    for (var y=0; y<cvs.height; y+=blockSize) {
        for (var x=0; x<cvs.width; x+=blockSize) {
            ctx.putImageData(imageData, x, y);
        }
    }
}
 
Последнее редактирование:
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
На днях, поглядев ролики perforator с журеньем топов FastCup'a и уличением в читах увидел у его замедленный просмотр демо-записи, и перемотку той самой записи в различном порядке с различной скоростью. Мне стало интересно, как он это реализовал. И.... оказалось весьма костыльно, по отношению к скриптовым возможностям клиента игры. Была задействована сторонняя программа, а так же самописно-хардкоженные алиасы. Ситуация мне эта не пришлась по нраву, в следствии чего я решил попробовать сделать примерно то же, но с лучшей реализацией и подобием гибкости в настройке. В коей-то мере мне это удалось сделать.

Немного о том, как я познал клиент игры и его возможности по "программированию" внутри игры.
В 2009 году я вдоволь познал тёмную сторону CS 1.6 с читами и ударился в поиски различных хитростей для легального использования в CS. На то время, популярен был "35 патч" NonSteam CS, в котором очень не плохо работали скрипты и эти возможности с радостью использовали для построения целых пользовательских сборок, в которых с помощью кнопки H (+commandmenu) производились даже настройки: пинга, положения руки, громкости, стрельбы (:crazy:), смена карт, управление CW сервером и многого другого. Всё это осталось и можно качать тут: Counter-Strike 1.6 > GUIs Command Menu .
4fc07d758b812.jpg
В целом - обилие скриптов и их возможностей - меня порадовало. Мне стало интересно и полез я во всё это внутрь. Через несколько месяцев - познав базовые навыки работы с alias и "грязными хаками" на основе loop-команды _special - я уже делал свои "DLC" для игры, а именно:
AutoBhop, стрейф-паттерны на основе найденных и многое другое. Пробовал делать CW меню, где задействовал RCON управление для сервера. Было интересно познавать всё, с чем бы не столкнулся, что к конечному итоге приводило меня к всё большим знаниям и полученному опыту.

Столкнувшись с кладью и базой читов и прочего относящегося на ресурсе zhykru - я даже умудрился собрать свою чито-подделку, которая, к удивлению очень хорошо разошлась в широких кругах. (Ни о чём не жалею... :yes3:). К сожалению или счастью - не продолжил интенсивно заниматься в этом "направлении".

К сути...
Решил я сделать для сообщества, возможно, полезную сборку скриптов, которая поможет в управлении не лёгким demoplayer'ом, который не умеет многое конечно же.

Решил начать с реализации перемотки "Вперёд-Назад", так сказать с реверсом и выбором скорости. И вот, спустя несколько лет - я снова написал скрипт, основанный на возможностях клиента и работой с alias.
К моему сожалению, начиная с 43 патча - _special (loop-команду) в игре удачно приглушили для противодействия вредоносному коду, который даже мог досить сервера и наносить вред в какой-то мере. С чем сообщество читеров успешно справилось и просто разблокировали (подменяли) проверки в hw.dll редактором HEX.
А позже и вовсе вырезали из игры её, ибо как оказалось, нужна она была только для TFC.

Сей факт меня конечно огорчил, но не остановил. Благодаря помощи juice, @a1batross - я поправил код CS Fixes от Garey , в котором сделал PR и вновь внёс _special, однако уже под именем _zpecial, дабы не трогать hw.dll и не нуллить там проверки. (И радости моей не было предела :pardon:)

Позже, опишу причины, по которым _special не работает на нынче на клиенте, возможно данный опыт поможет другим. Ибо с первых попыток гугла - мне ясно дали знать, что простым редактированием hw.dll в 2018 году можно включить обратно _special, но.... к сожалению это не так и с билдами клиента 7***+ не прокатывает.

Возможно мой опыт будет полезен другим хоть чуточку.
(c) see you later

Таким макаром происходит блокировка команд в hw.dll (.so).
IMG_20190130_160325_272.jpg

При написании на клиенте команды special вызывается функция, которая должна вызывать _special.
IMG_20190130_160554_699.jpg
Однако, в последних версиях CS эту строку и вовсе с кода выкинули (#ifndef). И теперь, как ни старайся, она вызвана не будет. В следствии чего приходится регистрировать на клиенте эту команду и производить самому вызов.
Как это сейчас сделано в CS Fixes у меня.
IMG_20190130_160950_020.jpg

Но, в TFC команда все так же продолжает функционировать.
Screenshot_2019-01-30-16-19-20-482_com.fastaccess.github.jpg

Так же благодарен shaid за помощь в поисках аналогичных решений в ресурсах, где разблокирована команда special.
 
Последнее редактирование:
Сообщения
241
Реакции
435
Смотрю я на эти коды и думаю - что это такое и как вы в этом разбираетесь... для меня это темный лес =)
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Romeo, открою секрет - для меня тоже :crazy:. Не много то я и умею, по отношению к тем, у кого профессия именно программист.
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Решил я сделать для сообщества, возможно, полезную сборку скриптов, которая поможет в управлении не лёгким demoplayer'ом, который не умеет многое конечно же.
Пока-что это выглядит так. Возможно, позже релизну ресурсом, если у кого-либо будет интерес.
1548860693169.png

Пока записывал демонстрацию возможностей скрипта - увлёкся и нашёл ещё пару палевных моментов с демки игры nauH30p.
 
Последнее редактирование:
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Последнее редактирование:
Сообщения
5
Реакции
1
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
wopox1337, было бы очень здорово получить релиз ресурса. Уверен разлетится сразу среди серверодержателей и их админов, которые просматривают демки.
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Scripting vs. Coding vs. Programming
Coder vs. Developer vs. Engineer — а какой Job Title у тебя, %username%?

Понравилось предложение
Я сам не люблю этот термин. Когда кто-то говорит «coder», я представляю себе человека, который бездумно пишет код, главное и единственное свойство которого — он компилируется; и этот человек не в состоянии делать что-то бОльшее из-за отсутствия знаний, опыта или желания; вместо того, чтобы включить мозг и разобраться в проблеме, придумать решение, он максимум способен соединить куски кода с гугла, которые он даже не понимает как работают.

Зачастую, не имеет никакого специального образования, поэтому и код у получается с запашком.
28 Фев 2019
Developer отличается от кодера тем, что непосредственно кодирование — это всего лишь одна из его обязанностей. Чаще всего в обязанности разработчика входят: предметный анализ, спецификация, дизайн, кодирование, отладка, юнит тесты, документация, оптимизация.
 
Последнее редактирование:
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
В поисках решения проблемы блокировки суицида нашёл такой код в клиенте (ReGameDLL)
Код:
/*
============
ClientKill
Player entered the suicide command
GLOBALS ASSUMED SET:  g_ulModelIndexPlayer
============
*/
void ClientKill( edict_t *pEntity )
{
    entvars_t *pev = &pEntity->v;

    CBasePlayer *pl = (CBasePlayer*) CBasePlayer::Instance( pev );

    if ( pl->m_fNextSuicideTime > gpGlobals->time )
        return;  // prevent suiciding too ofter

    pl->m_fNextSuicideTime = gpGlobals->time + 1;  // don't let them suicide for 5 seconds after suiciding

    // have the player kill themself
    pev->health = 0;
    pl->Killed( pev, GIB_NEVER );

//    pev->modelindex = g_ulModelIndexPlayer;
//    pev->frags -= 2;        // extra penalty
//    respawn( pev );
}
Эта функция вызывается при любой попытке суицида (kill или direct 0, без разницы).

Интересует нас одно условие:
Код:
 if ( pl->m_fNextSuicideTime > gpGlobals->time )
    return;  // prevent suiciding too ofter
Фактически, блокировку любого суицида надёжно можно осуществить так:
Код:
#include <amxmodx>
#include <hamsandwich>

new const VERSION[] = "0.0.1"

public plugin_init()
{
    register_plugin("Block Suicide", VERSION, "ConnorMcLeod")

    RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", 1)
}

public Ham_CBasePlayer_Spawn_Post( id )
{
    if( is_user_alive( id ) )
    {
        const XTRA_OFS_PLAYER = 5
        const m_fNextSuicideTime = 258
        set_pdata_float(id, m_fNextSuicideTime, get_gametime() + 99999.0, XTRA_OFS_PLAYER)
    }
}
ConnorMcLeod в 2010 году ещё верно подметил.


И, стоит отметить, что метод не идеален, так как сломает работу mp_tkpunish
 
Последнее редактирование:

d3m37r4

111111
Сообщения
1,454
Реакции
1,194
Помог
10 раз(а)
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
d3m37r4, не разбирал подробно его, считаю m_fNextSuicideTime более лучшим и надёжным решением? посмотрим ещё где будут косяки.
 
Последнее редактирование:

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

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