статьи cs

Плагин Deathrun чекпоинты

 Counter-Strike 1.6, Плагины  Comments Off on Плагин Deathrun чекпоинты
Nov 042017
 

Deathrun чекпоинты

Авторы: Psycrow
Версия: 0.81

Deathrun чекпоинты – простенький плагин, добавляющий специальные чекпоинты, пройдя через которые, игрок сможет стартовать прямо с заданной позиции в случае своей гибели (только если в кастомном магазине есть пункт с возрождением) и/или получать денежную награду за их прохождение. Continue reading »

Плагин Дуэли (Simply Duels)

 Counter-Strike 1.6, Плагины  Comments Off on Плагин Дуэли (Simply Duels)
Jul 102013
 

Simply Duels

Авторы: Psycrow
Версия: 0.76

Плагин дуэли это простенькая система дуэлей наподобие TF2. С помощью команды /duel игрок может вызвать другого игрока на дуэль, в которой для победы потребуется убить оппонента заданное кваром раз. На взаимодействие с другими игроками дуэль не влияет.

Что входит в плагин:

    * Выводиться в чат любые действия, связанные с дуэлью
    * Присутствует звуковое сопровождение
    * Над дуэлянтами будет появляться спрайт, который будут видеть только они
    * Победа на дуэли будет денежно вознаграждаться
    * Игрок может выйти из дуэли, введя в чате **/unduel**

Замените в коде //#define AES_EXP на #define AES_EXP если хотите заменить странадртную денежную систему на опыт AES.

Cvars:

cv_duels_frags – кол-во убийств до победы на дуэли. (изначально “3”)
cv_duels_reward – денежная награда (опыт) за победу на дуэли. 0 – отключить. (изначально “6000”)
cv_duels_losing – денежное взыскание (опыт) за проигрыш на дуэли или выход из нее. 0 – отключить. (изначально “3000”)
cv_duels_compensation – компенсация за прерванную дуэль вероятному победителю. 0 – отключить. (изначально “3000”)
cv_duels_maxmoney – максимальное кол-во денег, который может иметь игрок. Если у вас нету специального плагина для этого, то оставить квар без изменения. (изначально “16000”)
cv_duels_sounds – вкл/выкл звуки. (изначально “1″)
cv_duels_sprite – размер спрайта над головой. 0.0 – отключает отображение (изначально “0.5″)
cv_duels_sprite_dist – расстояние спрайта до головы игрока (изначально “40.0″)

Модуль Orpheu (v2.5.1)

 Counter-Strike 1.6, Modules, Guids  Comments Off on Модуль Orpheu (v2.5.1)
May 302013
 

Автор: joaquimandrade

Модуль Orpheu дает скриптеру возможность использовать функции, которые было бы невозможно использовать без него (включая функции от других плагинов MetaMod).Модуль работает, как на Windows, так и на Linux.
Начиная с версии 2.1 ( 29 января 2010 г.), Orpheu также поддерживает прямой доступ к памяти.

Суть работы заключается в следующем:
Модуль использует преобразования между типами С++ и Pawn, и позволяет вызывать функции, указав ее адрес в памяти, а также используемые ею аргументы. Этот метод включает в себя общие принципы работы со структурами С++.

Например, предположим, что вы хотите использовать эту функцию:
void PM_Move( struct playermove_s *ppmove, qboolean server)

Она получает один аргумент типа “playermove_s” и другой типа “qboolean”. Значения эта функция не возвращает.

Пока типы, необходимые функции, используются в модуле, вы можете использовать ее. Если один из типов не используется, то Вы можете подключить его напрямую, и все равно продолжать работать с функцией, к примеру подключать ее, так как при подключении функции Вам не надо заботиться обо всех ее аргументах.
Continue reading »

Смена HUD у оружия (Weapon Custom Hud)

 Counter-Strike 1.6, Guids, Плагины  Comments Off on Смена HUD у оружия (Weapon Custom Hud)
May 252013
 

Этот плагин поможет избавиться от некоторой нудной работы, такой как поиск оффсетов, добавления своих дополнительных функций и регистрирования команд типа register_clcmd(“weapon_mygun”, “switch_handler”)

Сейчас всё объясню на примере тестового плагина, который меняет hud ножу.
Continue reading »

Orpheu: Поиск функций в библиотеках

 Counter-Strike 1.6, Guids  Comments Off on Orpheu: Поиск функций в библиотеках
May 182013
 

Автор: joaquimandrade

Библиотека это набор байтов. Миллионов байтов. Они могут представлять числа, функции (в машинном коде), массивы и строки. Эта статья попытается объяснить вам, как найти функции в библиотеках и как их использовать.

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

В библиотеках, откомпилированных GCC (Linux), оффсеты помечены символьными именами, с помощью которых Вы можете легко распознать, что находится по данному оффсету.

В библиотеках, откомпилированных VC++, оффсеты, в целом, не имеют никаких меток, так что приходиться обращаться к таким методам, как поиск строки в библиотеке. Это происходит потому, что Вы можете легко связать строки в события, например, если Вы видите надпись “Terrorists Win”, то Вы знаете, что имеете дело с функцией, связанной с концом раунда.
Continue reading »

Динамические состояния (state)

 Counter-Strike 1.6, Guids  Comments Off on Динамические состояния (state)
May 152013
 

Случайно наткнулся на старенькую статью, но решил что она всё же достойна внимания.

Автор: joaquimandrade
Перевод и редактирование: DJ_WEST

Данная статья поможет Вам в работе с состояниями (state) в плагинах. С помощью состояний можно улучшить производительность плагина, к примеру, в таких ситуациях, когда вызов функции нужно делать один раз или если Вам необходимо включать/выключать forward’ы для каких-то событий.
Continue reading »

Как сделать меню с 10+ пунктами

 Counter-Strike 1.6, Guids  Comments Off on Как сделать меню с 10+ пунктами
May 132013
 

Автор: Alekkkk

Хотели бы вы сделать более 10 пунктов в меню на 1 странице, с возможностью выбора пункта без всяких биндов дополнительных клавиш?

Мы создадим меню с 9 пунктами, которые добавим с помощью menu_additem, а остальные пункты с помощью menu_addtext.
Для отлова нажатия 10+ пункта мы создадим задержку в 0.2 сек. (Cvar) в течение которой будем ожидать ещё нажатия.
Например, если сначала нажмём 2, затем 1, то это будет считаться как 21 пункт меню.
А если за 0.2 секунды не будет нажата ещё какая-то клавиша (1 в нашем примере), то будет выбран пункт меню 2.

Вот пример:

#include <amxmodx> 

new g_fButton[ 33 ] 
new g_sButton[ 33 ] 
new g_Task[ 33 ] 

new Float:g_fTime[ 33 ] 

new g_pWait, Float:WAIT 

public plugin_init()  
{ 
    register_plugin( "How to make more options in one page", "1.0", "eMinEm" ) 
     
    register_clcmd( "say /menu", "catch_buttons" ) 
     
    g_pWait = register_cvar( "menu_waittime", "0.2" )  
    WAIT = get_pcvar_float( g_pWait ) 
} 

public client_putinserver( id ) null_all( id ); 

public catch_buttons( id ) 
{ 
    if( g_Task[ id ] ) 
    { 
        if( g_fButton[ id ] != 0 ) set_buttons( id, get_gametime( ) ); 
        else null_all( id ); 
         
        show_menu( id, 0, "^n" ) 
        return PLUGIN_HANDLED 
    } 
    new menu = menu_create( "Menu", "catch_buttons_handler" ) 
     
        /*    First type of formatting the menu    */ 
    /* 
    menu_additem( menu, "Option1     \r10. \wOption 10     \r19. \wOption 19", "1", 0 ); 
    menu_additem( menu, "Option2     \r11. \wOption 11     \r20. \wOption 20", "2", 0 ); 
    menu_additem( menu, "Option3     \r12. \wOption 12     \r21. \wOption 21", "3", 0 ); 
    menu_additem( menu, "Option4     \r13. \wOption 13     \r22. \wOption 22", "4", 0 ); 
    menu_additem( menu, "Option5     \r14. \wOption 14     \r23. \wOption 23", "5", 0 ); 
    menu_additem( menu, "Option6     \r15. \wOption 15     \r24. \wOption 24", "6", 0 ); 
    menu_additem( menu, "Option7     \r16. \wOption 16", "7", 0 ); 
    menu_additem( menu, "Option8     \r17. \wOption 17", "8", 0 ); 
    menu_additem( menu, "Option9     \r18. \wOption 18", "9", 0 ); 
    */ 
     
        /*    Second type of formatting the menu    */ 
         
    menu_additem( menu, "Option1", "1" ); 
    menu_additem( menu, "Option1", "2" ); 
    menu_additem( menu, "Option1", "3" ); 
    menu_additem( menu, "Option1", "4" ); 
    menu_additem( menu, "Option1", "5" ); 
    menu_additem( menu, "Option1", "6" ); 
    menu_additem( menu, "Option1", "7" ); 
    menu_additem( menu, "Option1", "8" ); 
    menu_additem( menu, "Option1", "9" ); 
    menu_addtext( menu, "\r10. \wOption10", 0 ); 
    menu_addtext( menu, "\r11. \wOption11", 0 ); 
    menu_addtext( menu, "\r12. \wOption12", 0 ); 
    menu_addtext( menu, "\r13. \wOption13", 0 ); 
    menu_addtext( menu, "\r14. \wOption14", 0 ); 
    menu_addtext( menu, "\r15. \wOption15", 0 ); 
    menu_addtext( menu, "\r16. \wOption16", 0 ); 
    menu_addtext( menu, "\r17. \wOption17", 0 ); 
    menu_addtext( menu, "\r18. \wOption18", 0 ); 
    menu_addtext( menu, "\r19. \wOption19", 0 ); 
    menu_addtext( menu, "\r20. \wOption20", 0 ); 
    menu_addtext( menu, "\r21. \wOption21", 0 ); 
    menu_addtext( menu, "\r22. \wOption22", 0 ); 
    menu_addtext( menu, "\r23. \wOption23", 0 ); 
    menu_addtext( menu, "\r24. \wOption24", 0 ); 

    menu_addblank( menu, 0 ) 
    menu_additem( menu, "Exit", "0" );  
     
    menu_setprop( menu, MPROP_PERPAGE, 0 ); 
     
    menu_display( id, menu, 0 ); 
    return PLUGIN_HANDLED 
} 

public catch_buttons_handler( id, menu, item ) 
{ 
    new data[ 6 ], szName[ 64 ] 
    new access, callback; 
     
    menu_item_getinfo( menu, item, access, data,charsmax( data ), szName,charsmax( szName ), callback ); 
     
    new key = str_to_num( data ); 
    new Float:iTime = get_gametime( ) 
     
    if( task_exists( id ) ) remove_task( id );  
     
    g_fButton[ id ] < 0 ? ( g_fButton[ id ] = key ) : ( g_sButton[ id ] = key );  
    g_fTime[ id ] = iTime 
    set_buttons( id, iTime ) 
     
    menu_destroy( menu ) 
    return PLUGIN_HANDLED 
} 

set_buttons( id, Float:iTime ) 
{ 
    if( g_sButton[ id ] < 0 ) 
    { 
        if( iTime - g_fTime[ id ] <= WAIT ) 
        { 
            catch_buttons( id ); 
            g_Task[ id ] = 1 
            set_task( WAIT, "catch_buttons", id ) 
        } 
        else  
        { 
            exec_selected( id, g_fButton[ id ], -1 ) 
            null_all( id ) 
        } 
    } 
    else  
    { 
        exec_selected( id, g_fButton[ id ], g_sButton[ id ] ) 
        null_all( id ) 
    } 
} 

null_all( id ) 
{ 
    g_fButton[ id ] = -1 
    g_sButton[ id ] = -1 
    g_fTime[ id ] = 0.0 
    g_Task[ id ] = 0 
} 

exec_selected( id, fslot, sslot ) 
{ 
    new szChoice[ 3 ], iChoice 
     
    sslot < 0 ? formatex( szChoice, charsmax( szChoice ), "%d", fslot ) : formatex( szChoice, charsmax( szChoice ), "%d%d", fslot, sslot ); 
     
    iChoice = str_to_num( szChoice ) 
    switch( iChoice ) 
    { 
        case 1:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 2:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 3:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 4:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 5:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 6:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 7:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 8:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 9:     client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 10: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 11: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 12: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 13: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 14: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 15: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 16: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 17: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 18: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 19: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 20: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 21: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 22: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 23: client_print( id, print_chat, "Selected item : %d", iChoice ); 
        case 24: client_print( id, print_chat, "Selected item : %d", iChoice ); 
         
        default:  client_print( id, print_center, "Item : %d does not exist", iChoice );  
    } 
}  

Прим. перевод: Мне очень не хотелось переводить комментарии, если очень хотите, то напишите об этом в комментах, я добавлю комментарии в код (тавтология 80 lvl)
Перевод: Polarhigh
Источник: https://forums.alliedmods.net/showthread.php?t=210686

May 132013
 

10mm Pistol

10мм пистолет из Fallout 3. Заменяет “228 Compact” (p228).

Авторы: Psycrow (порт), Bethesda Softworks (модель, текстуры, звуки), Nexon (анимации)
Авторы текстур:
Black (Millenia)
Fire (gunnars2)
World Industries (Dj Paragon)