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

AWPoff [ReAPI]

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

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

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

Re: AWPoff [ReAPI]

Сообщение KOTOKU » 30 дек 2017, 21:19

Очень много вызовов get_pcvar_num
Очень много вызовов get_players (лучше обойтись одним циклом по тимейтам, чем вызывать подряд 3 отдельных цикла)
Для строк лучше использовать константы для хранения, а не макросы

Хотя, может меня кто поправит, я в реапи не шарю и пока не планировал на него переходить.
Разрабатываю мод "JailBreak" с нуля
Разработка мода началась: 09.02.17 :zzz:
Last Update: 0.4 Alpha [01.12.17]
Тестовый IP: 195.2.252.112:27028[NEW]
Готовность: 80%
Мы в ВК: VK.COM/LM.Pawn
P.S.: Ушел в разработку MMORPG, пока нет планов в AMXX
Аватара пользователя
KOTOKU
 
Сообщения: 714
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 8 раз.
Поблагодарили: 107 раз.
Опыт программирования: Больше трех лет

Re: AWPoff [ReAPI]

Сообщение nanako25 » 07 янв 2018, 22:40

Subb98 писал(а):Уважаемый nanako25, попробуйте прочесть материал, ссылку на который я вам предоставил. Попробуйте также перевести сообщение ошибки. Если вы 10 раз делаете одно и то же, то почему должен поменяться результат?

Добавлено спустя 3 минуты 58 секунд:
Чтобы развеять все ваши сомнения:



Добавлено спустя 2 минуты 41 секунду:
3.1. Инклуды
В папке «include» хранятся заголовочные файлы или библиотеки (или, как их чаще всего
называют, «инклуды»). Инклуды имеют расширение .inc или .inl.

В папку «include» вы будете помещать требуемые различными плагинами дополнительные
инклуды, например, colorchat.inc или dhudmessage.inc, чтобы компилятор мог считать из них
необходимую информацию для выполнения компиляции.

Если вы попытаетесь скомпилировать какой-либо плагин, требующий наличия стороннего
инклуда, но при этом данный инклуд будет отсутствовать в папке «include», то компилятор
выдаст вам ошибку типа «cannot read from file <filename>», которая означает, что компилятор
не смог прочесть информацию из упомянутого файла.

Следовательно, вам нужно скачать и поместить в папку include доп. инклуды Вы должны зарегистрироваться, чтобы видеть ссылки..

---------------------------------------------------------------------------------------------------------------------------------
Продолжим Уважаемый Subb98 после установки, Reapi его ошибка пропала, но пошла другая, как вы и говорили Colorchat.inc, после его установки ваще голову снесло у AMX studio. И опять говорю плагин не робочий.
Вот ошибки, ладно бы он требовал ещё Include, но тут ваще целый цирк.

Код: Выделить всё
//// awp_off.sma
AMXstudio\AMX Mod X\files\base\scripting\include\colorchat.inc(23) : error 021: symbol already defined: "TeamName"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(150) : error 017: undefined symbol "client_print_color"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(206) : error 017: undefined symbol "client_print_color"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(222) : error 017: undefined symbol "client_print_color"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(253) : warning 203: symbol is never used: "ColorChat"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(253) : warning 203: symbol is never used: "ColorSelection"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(253) : warning 203: symbol is never used: "FindPlayer"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(253) : warning 203: symbol is never used: "ShowColorMessage"
AMXstudio\AMX Mod X\files\base\scripting\awp_off.sma(253) : warning 203: symbol is never used: "Team_Info"

Да мне страшно уже такие плагины на сервер заливать. :(
Аватара пользователя
nanako25
 
Сообщения: 18
Зарегистрирован: 01 авг 2013, 22:10
Благодарил (а): 4 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: AWPoff [ReAPI]

Сообщение Subb98 » 08 янв 2018, 03:55

nanako25, вы скриншот мой видите хорошо? Вы видите, что компиляция прошла успешно? Если у меня всё ОК, а у вас нет, хотя мы компилируем один и тот же плагин, в чём может быть проблема, как вы думаете?

nanako25 писал(а):И опять говорю плагин не робочий.

ОК, как скажете.

nanako25 писал(а):Да мне страшно уже такие плагины на сервер заливать. :(

Не ставьте.

Добавлено спустя 2 минуты 56 секунд:
Код: Выделить всё
#if defined _colorchat_included
    #endinput
#endif
#define _colorchat_included

/* ColorChat Support */
#define NORMAL    DontChange
#define GREEN    DontChange
#define RED        Red
#define BLUE    Blue
#define GREY    Grey
#define ColorChat client_print_color

#define MAX_TRANSLATION_LENGTH 2048

enum {
    DontChange = 0,
    Grey = -1,
    Red = -2,
    Blue = -3
};

#define print_team_default  DontChange
#define print_team_grey     Grey
#define print_team_red      Red
#define print_team_blue     Blue

stock client_print_color(id, sender, const fmt[], any:...)
{
    // check if id is different from 0
    if (id && !is_user_connected(id))
    {
        return 0;
    }

    if (sender < Blue || sender > 32)
    {
        sender = DontChange;
    }
    else if (sender < DontChange)
    {
        sender = -sender + 32; // align indexes to the TeamInfo ones
    }

    static const szTeamName[][] =
    {
        "",
        "TERRORIST",
        "CT"
    };

    new szMessage[191];

    new iParams = numargs();

    // Specific player code
    if (id)
    {
        if (iParams == 3)
        {
            copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value
        }
        else
        
{
            vformat(szMessage, charsmax(szMessage), fmt, 4);
        }

        if (sender > (32 - Grey))
        {
            if (sender > (32 - Blue))
            {
                sender = id;
            }
            else
            
{
                _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
            }
        }
        _CC_SayText(id, sender, szMessage);
    }

    // Send message to all players
    else
    
{
        // Figure out if at least 1 player is connected
        // so we don't execute useless useless code if not
        new iPlayers[32], iNum;
        get_players(iPlayers, iNum, "ch");
        if (!iNum)
        {
            return 0;
        }

        new iMlNumber, i, j;
        new Array:aStoreML = ArrayCreate();
        if (iParams >= 5) // ML can be used
        {
            for (= 3; j < iParams; j++)
            {
                // retrieve original param value and check if it's LANG_PLAYER value
                if (getarg(j) == LANG_PLAYER)
                {
                    i = 0;
                    // as LANG_PLAYER == -1, check if next parm string is a registered language translation
                    while ((szMessage[i] = getarg(+ 1, i++))) {}
                    if (GetLangTransKey(szMessage) != TransKey_Bad)
                    {
                        // Store that arg as LANG_PLAYER so we can alter it later
                        ArrayPushCell(aStoreML, j++);

                        // Update ML array saire so we'll know 1st if ML is used,
                        // 2nd how many args we have to alterate
                        iMlNumber++;
                    }
                }
            }
        }

        // If arraysize == 0, ML is not used
        // we can only send 1 MSG_ALL message if sender != 0
        if (!iMlNumber)
        {
            if (iParams == 3)
            {
                copy(szMessage, charsmax(szMessage), fmt);
            }
            else
            
{
                vformat(szMessage, charsmax(szMessage), fmt, 4);
            }
            if (< sender < (32 - Blue)) // if 0 is passed, need to loop
            {
                if (sender > (32 - Grey))
                {
                    _CC_TeamInfo(0, sender, szTeamName[sender - (32 - Grey)]);
                }
                _CC_SayText(0, sender, szMessage);
                return 1;
            }
        }

        if (sender > (32 - Blue))
        {
            sender = 0; // use receiver index
        }

        for (--iNum; iNum >= 0; iNum--)
        {
            id = iPlayers[iNum];

            if (iMlNumber)
            {
                for (= 0; j < iMlNumber; j++)
                {
                    // Set all LANG_PLAYER args to player index ( = id )
                    // so we can format the text for that specific player
                    setarg(ArrayGetCell(aStoreML, j), _, id);
                }

                // format string for specific player
                vformat(szMessage, charsmax(szMessage), fmt, 4);
            }

            if (sender > (32 - Grey))
            {
                _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
            }
            _CC_SayText(id, sender, szMessage);
        }

        ArrayDestroy(aStoreML);
    }
    return 1;
}

stock _CC_TeamInfo(iReceiver, iSender, szTeam[])
{
    static iTeamInfo = 0;
    if (!iTeamInfo)
    {
        iTeamInfo = get_user_msgid("TeamInfo");
    }
    message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver);
    write_byte(iSender);
    write_string(szTeam);
    message_end();
}

stock _CC_SayText(iReceiver, iSender, szMessage[])
{
    static iSayText = 0;
    if (!iSayText)
    {
        iSayText = get_user_msgid("SayText");
    }

    // Prevent sending format and localization strings via chat
    for (new i = 0; i < 192; i++)
    {
        if (szMessage[i] == 0) break;
        if (szMessage[i] == '%' ||
            szMessage[i] == '#')
            szMessage[i] = ' ';
    }
    
    message_begin
(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver);
    write_byte(iSender ? iSender : iReceiver);
    if (szMessage[0] > 4)
    {
        write_byte(1);
        szMessage[192 - 2 - 1] = 0;    // Two write_byte + string terminator
        write_string(szMessage);
    }
    else
    
{
        szMessage[192 - 1 - 1] = 0;    // One write_byte + string terminator
        write_string(szMessage);
    }
    message_end();
}

new _translation_szBuffer[MAX_TRANSLATION_LENGTH];

stock register_dictionary_colored(const filename[])
{
    if (!register_dictionary(filename))
    {
        return 0;
    }

    new szFileName[256];
    get_localinfo("amxx_datadir", szFileName, charsmax(szFileName));
    format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename);
    new fp = fopen(szFileName, "rt");
    if (!fp)
    {
        log_amx("Failed to open %s", szFileName);
        return 0;
    }

    new szLang[3], szKey[64], TransKey:iKey;

    while (!feof(fp))
    {
        fgets(fp, _translation_szBuffer, charsmax(_translation_szBuffer));
        trim(_translation_szBuffer);

        if (_translation_szBuffer[0] == '[')
        {
            strtok(_translation_szBuffer[1], szLang, charsmax(szLang), _translation_szBuffer, 1, ']');
        }
        else if (_translation_szBuffer[0])
        {
            strbreak(_translation_szBuffer, szKey, charsmax(szKey), _translation_szBuffer, charsmax(_translation_szBuffer));
            iKey = GetLangTransKey(szKey);
            if (iKey != TransKey_Bad)
            {
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!g", "^4");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!t", "^3");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!n", "^1");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^4", "^4");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^3", "^3");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^1", "^1");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^n", "^n");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^t", "^t");
                AddTranslation(szLang, iKey, _translation_szBuffer[2]);
            }
        }
    }

    fclose(fp);
    return 1;
}

/* ML from AMXX 1.8.3 support */
#define register_dictionary register_dictionary_colored  

Вы должны зарегистрироваться, чтобы видеть ссылки.

Добавлено спустя 6 минут 32 секунды:
Специально сейчас скомпилировал старой версией компилятора, у меня всё работает. Что я делаю не так?

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

Re: AWPoff [ReAPI]

Сообщение nanako25 » 08 янв 2018, 11:35

Subb98 Допустим я сделал компиляцию этого чудесного плагина, прописал его в плагинах, закачал в папку и так далее, вот теперь, что показывает при команде в консоли amx_plugins

Код: Выделить всё
[ 57] unknown                 unknown     unknown           awp_off.amxx     bad load

вот обычный плагин

Код: Выделить всё
[ 33] ResetScore              0.2.0       aNNakin           resetscore.amxx  running

Вот я его скомпилировал если уж на то пошло

Код: Выделить всё
//// awp_off.sma
// Header size:           1116 bytes
// Code size:             8664 bytes
// Data size:             3144 bytes
// Stack/heap size:      16384 bytes; estimated max. usage=526 cells (2104 bytes)
// Total requirements:   29308 bytes
// Done.
//
// Compilation Time: 0,23 sec
// ----------------------------------------

:(
Последний раз редактировалось Subb98 08 янв 2018, 13:25, всего редактировалось 1 раз.
Причина: Для вставки большого объёма текста, например, из логов / конфигов, используйте кнопку "Блок текста"
Аватара пользователя
nanako25
 
Сообщения: 18
Зарегистрирован: 01 авг 2013, 22:10
Благодарил (а): 4 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: AWPoff [ReAPI]

Сообщение Subb98 » 08 янв 2018, 13:24

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

Re: AWPoff [ReAPI]

Сообщение nanako25 » 08 янв 2018, 15:12

Subb98 писал(а):nanako25, Вы должны зарегистрироваться, чтобы видеть ссылки. на чудесный сервер будем устанавливать? Если таки будем, то внимательно смотрите список требований.

Сорян я чёта затупил ))), как всё поставлю сразу всё расскажу ))

Добавлено спустя 1 час 28 минут 5 секунд:
Subb98 писал(а):nanako25, Вы должны зарегистрироваться, чтобы видеть ссылки. на чудесный сервер будем устанавливать? Если таки будем, то внимательно смотрите список требований.

Как мы видим вроде он работает
[ 57] [ReAPI] AWPoff 1.3 PAffAEJIkA :3 awp_off.amxx running

Захожу без админки 6 игроков, авп покупается.
Также авп покупается в любом количестве.
Я поставил настройки так:
awp_players_low "12" //(Что бы отключить поставьте 0) [стандартно: при онлайне меньше 8]
awp_limit "1" //Включить|Выключить лимит авп [Стандартно: включен]
awp_limit_max "1" //Сколько АВП разрешено при лимите [Стандартно по 2 авп на команду]
awp_limit_immun "1" //Включить|Выключить иммунитет[Стандартно включен]

При онлайн в 20+, как я и писал выше покупается любое количество авп.

Что не так ? :(
Аватара пользователя
nanako25
 
Сообщения: 18
Зарегистрирован: 01 авг 2013, 22:10
Благодарил (а): 4 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: AWPoff [ReAPI]

Сообщение Subb98 » 08 янв 2018, 16:31

Код: Выделить всё
#define PERCENT_PLAYERS    
/*
    Разкоменитруйте, если хотите чтобы лимит зависил от процента игроков [I am chetko ob'yasnyat']
    
    Например: Онлайн = 10, Процент в кваре(awp_limit_max) = 20
    10/100*20 = 2 авп на тиму (2 у терров и 2 у кт)
*/ 
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5454
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1319 раз.
Поблагодарили: 2324 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP, Ruby

Re: AWPoff [ReAPI]

Сообщение nanako25 » 08 янв 2018, 18:13

Subb98 писал(а):
Код: Выделить всё
#define PERCENT_PLAYERS    
/*
    Разкоменитруйте, если хотите чтобы лимит зависил от процента игроков [I am chetko ob'yasnyat']
    
    Например: Онлайн = 10, Процент в кваре(awp_limit_max) = 20
    10/100*20 = 2 авп на тиму (2 у терров и 2 у кт)
*/

Тут же написано, что (Разкоментируйте, если хотите).
Я не хочу и использую те, настройки которые есть, а эти не нужны.
Если они уже сами по себе работают в отдельности от кваров, то тут белиберда получается, а какой ваш ответ был ? )
Поставил всё, как вы и говорили и Reapi в том числе на сервер и возможные требования для работы, как вы мне говорили.
Вот проверил, даже можно сказать тест провёл и не 5 минут, а в течении дня и на разных картах.
Можете назвать меня врединой но:
1.Плагин не работает ни как.
2.Плагин не тестили скорее всего.
3. :(
Я понимаю всю голову забил вам, но как его заставить уже работать? Уже пошагова всё делаю, чтобы ничего не забыть и в конце вот в консоли плагин работает, а на сервере 0 реакции.
Аватара пользователя
nanako25
 
Сообщения: 18
Зарегистрирован: 01 авг 2013, 22:10
Благодарил (а): 4 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: AWPoff [ReAPI]

Сообщение Subb98 » 08 янв 2018, 18:24

nanako25, вы видите, что макрос раскомментирован? Если оставить его, как есть, то плагин будет определять число квара awp_limit_max "1" как разрешённое процентное соотношение.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5454
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1319 раз.
Поблагодарили: 2324 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP, Ruby

Re: AWPoff [ReAPI]

Сообщение nanako25 » 08 янв 2018, 20:30

Subb98 писал(а):nanako25, вы видите, что макрос раскомментирован? Если оставить его, как есть, то плагин будет определять число квара awp_limit_max "1" как разрешённое процентное соотношение.

Я потерялся в трёх соснах не знаю, что делать, уже букавки сливаются от скриптов, так что сделать то хоть, ставил в настройках чтобы плагин запрещал авп покупать если меньше 12 человек на сервере, а если больше то по 1 авп на тиму. :(
Аватара пользователя
nanako25
 
Сообщения: 18
Зарегистрирован: 01 авг 2013, 22:10
Благодарил (а): 4 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Пред.След.

Вернуться в Утвержденные плагины

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8