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

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

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

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

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

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

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

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

Сообщение Fedcomp » 01 фев 2020, 15:04

gette писал(а):Жаль, что кончилось...

Что кончилось?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


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

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

Сообщение fl0wer » 02 фев 2020, 00:59

Fedcomp писал(а):
gette писал(а):Жаль, что кончилось...

Что кончилось?

Ну все функции написали, больше не осталось.
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 507 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

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

Сообщение abdobiskra » 14 май 2020, 23:56

ClearMultiDamage( );
ApplyMultiDamage( );
SetThink( );
SetTouch();
:-[
Аватара пользователя
abdobiskra
 
Сообщения: 3
Зарегистрирован: 24 июн 2016, 16:56
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Half-Life 1

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

Сообщение Gazon » 04 янв 2021, 18:48

Удаление любого вида оружия у игрока:

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

....................................................................................

stock ham_strip_weapon(idweapon[])
{
    if(!
equal(weapon"weapon_"7))
        return 
0
        
    
new wId get_weaponid(weapon)
    if(!
wId)
        return 
0
        
    
new wEnt
    
while((wEnt engfunc(EngFunc_FindEntityByStringwEnt"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
    
    if(!
wEnt)
        return 
0
        
    
if(get_user_weapon(id) == wId)
        
ExecuteHamB(Ham_Weapon_RetireWeaponwEnt)
    
    if(!
ExecuteHamB(Ham_RemovePlayerItemidwEnt))
        return 
0
        
    ExecuteHamB
(Ham_Item_KillwEnt);
    
set_pev(idpev_weapons,pev(idpev_weapons) & ~(1<<wId))
    return 
1
}
 
Аватара пользователя
Gazon
 
Сообщения: 24
Зарегистрирован: 26 авг 2019, 00:15
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn

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

Сообщение fl0wer » 04 янв 2021, 19:50

Как дизлайк влепить за этот говнокод?
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 507 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

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

Сообщение Fedcomp » 05 янв 2021, 09:40

fl0wer писал(а):Как дизлайк влепить за этот говнокод?

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


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

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

Сообщение fl0wer » 05 янв 2021, 12:28

Fedcomp писал(а):
fl0wer писал(а):Как дизлайк влепить за этот говнокод?

Перепиши чтобы норм было.

Окей, rg_remove_item.
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 507 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

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

Сообщение Gazon » 06 янв 2021, 22:26

код не мой, не бузи, пуся :*
Аватара пользователя
Gazon
 
Сообщения: 24
Зарегистрирован: 26 авг 2019, 00:15
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn

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

Сообщение MayroN » 24 фев 2021, 22:08

Я давно хотел найти, как правильно задать остаток в минутах и секундах,ибо видя множество плагинов где пишеться либо так - 15:43 или просто одно слово минут после цыфр )))


Код, о правильном остатке времени в чат... ( минута, минуты, минут | секунда, секунды, секунд )
Тестировал на стандартном плагине timeleft
Также если остаток времени меньше 1 минуты - пишет в чат только остаток в секундах

Код: Выделить всё
new words[][] = {"секунда", "секунды", "секунд"};
 
client_print
(0,print_chat,"Итого %s",words[declOfNum(get_systime())]);
 
}
 
/ -------------------- /
 
declOfNum
(number)
{
new cases[] = {2, 0, 1, 1, 1, 2};
return (number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5];
}


Пример на плагине
Код: Выделить всё
public sayTimeLeft(id)
{
    if (get_cvar_float("mp_timelimit"))
    {
        new a = get_timeleft()
        new words_minutes[][] = {"минута", "минуты", "минут"}, words_seconds[][] = {"секунда", "секунды", "секунд"}
        if (get_cvar_num("amx_time_voice"))
        {
            new svoice[128]
            setTimeVoice(svoice, 127, 0, a)
            client_cmd(id, "%s", svoice)
        }
                if((/ 60) > 0)
                    ColorChat(0, RED, "^4%L^1  •  ^3%d %s %d %s", LANG_PLAYER, "TIME_LEFT", (/ 60), words_minutes[declOfNum((/ 60))], (% 60), words_seconds[declOfNum((% 60))]);
                else
                    ColorChat
(0, RED, "^4%L^1  •  ^3%d %s", LANG_PLAYER, "TIME_LEFT", (% 60), words_seconds[declOfNum((% 60))]);
    }
    else
              ColorChat
(0, RED, "^4%L", LANG_PLAYER, "NO_T_LIMIT")
    
    return PLUGIN_CONTINUE
}

declOfNum(number)
{
new cases[] = {2, 0, 1, 1, 1, 2};
return (number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5];
}


Результат в игре

Выражаю огромную благодарность своему напарнику
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 650
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 142 раз.
Поблагодарили: 69 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

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

Сообщение Leonidddd » 25 фев 2021, 00:38

Добавлю от себя несколько стоков/функций, которые писал для одного плагина.

Проверяет, ослеплён ли игрок в данный момент:

Код: Выделить всё
stock bool:IsBlinded(const id){

    return bool:(get_member(id, m_blindUntilTime) > get_gametime());
}


Проверяет в движении ли игрок в данный момент:
Код: Выделить всё
stock bool:IsPlayerMoving(const id){

    if(~get_entvar(id, var_flags) & FL_ONGROUND) return false;

    new Float:flVelocity[3];
    get_entvar(id, var_velocity, flVelocity);

    return bool:( flVelocity[0] != 0.0 && flVelocity[1] != 0.0 && flVelocity[2] != 0.0 );
}


В прыжке ли игрок в данный момент:

Код: Выделить всё
stock bool:IsPlayerJump(const id){


    return bool:(~get_entvar(id, var_flags) & FL_ONGROUND );
}


Был ли игрок убит последним выстрелом в обойме( к примеру, через Ham_Killed можно узнавать убил ли его атакующий последним патроном).
Код: Выделить всё
stock bool:LastAmmoKill(const id){

    new iWeapon = get_member(id, m_pActiveItem);
    if(!is_entity(iWeapon)) return false;

    return bool:(!get_member(iWeapon, m_Weapon_iClip));
}


В том же Ham_Killed можно проверить убили ли игрока без прицела, через
Код: Выделить всё
new iWeapon = get_user_weapon(iAttacker);

можно получить текущее оружие в момент убийства и проверить, если это авп или скаут
Код: Выделить всё
if(iWeapon == CSW_AWP || iWeapon == CSW_SCOUT)
, то можно использовать данный сток:

Код: Выделить всё
#define DEFAULT_FOV    90

stock bool:IsNoZoomKill(const id){

    return bool:(get_member(id, m_iLastZoom) == DEFAULT_FOV);
}


Через
Код: Выделить всё
if(!ExecuteHam(Ham_FVisible, iAttacker, iVictim)) { /* Code */ 

можно проверить, убили ли(или атакуют) игрока через какой-либо объект(к примеру, стену/стекло).
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2546
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 190 раз.
Поблагодарили: 716 раз.

Пред.След.

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

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

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