Русское сообщество по скриптингу

Сборник полезных функций

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Сборник полезных функций

Сообщение okeeey » 30 май 2016, 04:30

Fedcomp писал(а):
okeeey писал(а):Может так?
Код: Выделить всё

stock CheckFlags
(id, Flags[]) return (get_user_flags(id) & read_flags(Flags));
 

Чего вы этим хотели добиться?

Вроде понятно. Кому-то удобнее писать например так:
Код: Выделить всё
if(CheckFlags(id"abc") { ... }
 

Чем
Код: Выделить всё
if(get_user_flags(id) & read_flags("abc")) { ... } 
 

Если конечно необходимо проверить 2+ флагов. :dntknw:
Аватара пользователя
okeeey
 
Сообщения: 25
Зарегистрирован: 26 мар 2014, 23:42
Благодарил (а): 5 раз.
Поблагодарили: 2 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Сборник полезных функций

Сообщение артист666 » 31 май 2016, 14:16

Таким образом можно засвитчить несколько букв(не обязательно 2), но одного регистра:
- такого способа, буквы могут быть в любом порядке, а кейс сработает.

Как известно современная латиница содержит 26 букв.
Открываем notepad++ >> Правка >> Таблица символов.

Т.к. в кс 32 бит, всё что смещается дальше 32 - заходит на второй круг :-D
Т.е. 1<<1 == 1<<33, 1<<3 == 1<<35 == 1<<67...И т.д.
Видим, что маленькая(в нижнем регистре) буква 'a' == 97. 'z' == 122, и идут они подряд, т.е. не вылезает за 32.

Свитчим сумму битов, отнимая 97 от каждой буквы, получается смещаем все буквы к 0.
Можно и не отнимать(В данном случае),, 1<<97 == 1<<1 1 + 26 = 27, т.е. не будет одинаковых битов.

Код: Выделить всё
#include <amxmodx>

new text[][] = {"white", "red", "blue", "green", "orange"}

public plugin_init()
{
    register_clcmd("ppfire", "functions")
}
public functions(id)
{
    static r; r = random_num(0, charsmax(text))
    
    switch
(1<<text[r][0]-97|1<<text[r][1]-97)
    {
        case 1<<'w'-97|1<<'h'-97: client_print(id, print_chat, "case: %s", text[0])
        case 1<<'r'-97|1<<'e'-97: client_print(id, print_chat, "case: %s", text[1])
        case 1<<'b'-97|1<<'l'-97: client_print(id, print_chat, "case: %s", text[2])
        case 1<<'g'-97|1<<'r'-97: client_print(id, print_chat, "case: %s", text[3])
        case 1<<'o'-97|1<<'r'-97: client_print(id, print_chat, "case: %s", text[4])
    }
    client_print(id, print_chat, "Original: %s", text[r])


Ну можно и через ифы :ROFL:
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Сборник полезных функций

Сообщение Asmodai » 01 июн 2016, 00:47

WAT??
Аватара пользователя
Asmodai
Адмирал
 
Сообщения: 466
Зарегистрирован: 24 фев 2011, 20:48
Благодарил (а): 0 раз.
Поблагодарили: 393 раз.
Языки программирования: Counter-Strike 1.6

Re: Сборник полезных функций

Сообщение артист666 » 01 июн 2016, 10:03

Asmodai писал(а):WAT??

Кого? :-)
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Сборник полезных функций

Сообщение NesquikRoma96 » 15 авг 2016, 13:15

Получает из бит суммы строку флагов (действует так же как и get_flags)
Код: Выделить всё
GetFlags( string[] , flags )
{
    new iLen = 0;
    for( new i = 'a'; i <= 'z'; ++){
        if( flags & ( 1 << i - 'a' ) ){
            string[ iLen ] = i;
            iLen++;
        }
    }

    return iLen;


Читает строку с флагами в их бит сумму (действует так же как и read_flags)
Код: Выделить всё
ReadFlags( string[] ){
    new iLen = strlen( string );
    new i, iFlags;

    for( i = 0; i < iLen; i++ ){
        if ( isalpha( string[ i ] ) ){
            iFlags |= ( 1 << (string[ i ] - 'a') );
        }
    }

    return iFlags;


Мало ли кому пригодится
Аватара пользователя
NesquikRoma96
 
Сообщения: 1
Зарегистрирован: 24 июл 2016, 14:25
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Сборник полезных функций

Сообщение StRiKeR.csF » 03 сен 2016, 21:45

Получает скорость игрока вперёд.
Fakemeta:
Код: Выделить всё
stock Float:fm_get_forward_speed(id)
{
    static 
Float:fVelo[3], Float:fVelo2[3], Float:vAngles[3], Float:fSpeed;
    
pev(idpev_velocityfVelo);
    
pev(idpev_v_anglevAngles);
    
fSpeed vector_length(fVelo);
    
fVelo2[0] = floatcos(vAngles[1], degrees) * fSpeed;
    
fVelo2[1] = floatsin(vAngles[1], degrees) * fSpeed;
    
fSpeed floatsqroot(fVelo[0] * fVelo2[0] + fVelo[1] * fVelo2[1]);
    return 
fSpeed;

Engine:
Код: Выделить всё
stock Float:get_forward_speed(id)
{
    static 
Float:fVelo[3], Float:fVelo2[3], Float:vAngles[3], Float:fSpeed;
    
entity_get_vector(idEV_VEC_velocityfVelo);
    
entity_get_vector(idEV_VEC_v_anglevAngles);
    
fSpeed vector_length(fVelo);
    
fVelo2[0] = floatcos(vAngles[1], degrees) * fSpeed;
    
fVelo2[1] = floatsin(vAngles[1], degrees) * fSpeed;
    
fSpeed floatsqroot(fVelo[0] * fVelo2[0] + fVelo[1] * fVelo2[1]);
    return 
fSpeed;


Сильно не ругайтесь, если велосипед, в инете не нашёл.
Чего добился ты и бла, бла, бла
Тут, типа, посыл был, но админ его потёр :(

Skype: nestle.csf
-В чём сила, брат?
-Сила в Debug.log xD
Аватара пользователя
StRiKeR.csF
Скриптер
 
Сообщения: 771
Зарегистрирован: 03 июн 2011, 06:26
Откуда: Кубань
Благодарил (а): 126 раз.
Поблагодарили: 181 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++
C#
JavaScript
PHP(+MySQL)
Assembler

Re: Сборник полезных функций

Сообщение артист666 » 10 сен 2016, 21:18

okeeey писал(а):
Код: Выделить всё
if(get_user_flags(id) & read_flags("abc")) { ... } 

Если конечно необходимо проверить 2+ флагов. :dntknw:


Так работать не будет...

От так должно:

Код: Выделить всё
static flagsflags read_flags("abc")

if((
get_user_flags(id) & flags) == flags) { ... }
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Сборник полезных функций

Сообщение Subb98 » 16 сен 2016, 03:32

Сток для считывания заранее неизвестного числа аргументов в строке:

Код: Выделить всё
// parse unknown number of arguments
stock UNAParse(const String[], const Len) {
    const 
ARG_STRLEN 24;
    new Array:
ArgsList ArrayCreate(ARG_STRLEN), Buffer[ARG_STRLEN], CurLenNum;
    while(
CurLen Len) {
        
Buffer[0] = 0;
        
parse(String[CurLen], Buffercharsmax(Buffer));
        if(
Buffer[0]) {
            
ArrayPushString(ArgsListBuffer);
            
CurLen += strlen(Buffer) + 1;
        }
    }
    if((
Num ArraySize(ArgsList))) {
        
// your code here
    
} else {
        
log_amx("Arguments are not found in string: ^"%s^""String);
    }
    
ArrayDestroy(ArgsList);
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Сборник полезных функций

Сообщение Fedcomp » 16 сен 2016, 13:35

Это не сток а кусок кода. Сток это готовая функция которая что то возвращает.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: Сборник полезных функций

Сообщение Subb98 » 16 сен 2016, 18:28

Fedcomp, пусть будет кусок кода. Его нужно редактировать "под себя".
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Пред.След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7