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

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

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

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

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

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

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

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

Сообщение Chuvi » 08 июл 2014, 20:04

Продолжим.
Код: Выделить всё
stock any:RandomVar(any:var1any:var2) {return random_num(0,1)?var1:var2;} 

Блин, не заметил что Smoke уже это написал.
Плагинами на заказ не занимаюсь.
Своих дел хватает.
Аватара пользователя
Chuvi
Модератор
 
Сообщения: 2253
Зарегистрирован: 24 ноя 2011, 08:03
Благодарил (а): 127 раз.
Поблагодарили: 562 раз.

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

Сообщение BROWN » 19 июл 2014, 13:59

Код: Выделить всё
#include <amxmodx>
 
#define PLUGIN "DHUD Position"
#define VERSION "START"
#define AUTHOR "BROWN"
 
#define START_POS 0.46
#define LAST_POS 0.58
#define INTERVAL 0.03
 
new Floatg_fPos[33] = {START_POS, ...};
 
public plugin_init() 
{
        register_plugin(PLUGINVERSIONAUTHOR)
}
 
public plugin_natives()
{
        register_native("get_dhud_pos""native_get_dhud_pos"1);
}
 
public Floatnative_get_dhud_pos(idlines)
{
        g_fPos[id] += INTERVAL;
        
        
if(lines 1)
        {
                new FloatfPos g_fPos[id];
                g_fPos[id] += INTERVAL * (lines 1);
                
                
return fPos;
        }
        
        
        
if(g_fPos[id] > LAST_POS)
        {
                g_fPos[id] = START_POS;
        }
                
        
return g_fPos[id];


Натив для анти-накладывания друг на друга DHUD сообщений, по вертикали, естественно.
Новые сообщения будут отображаться на новой строке (позиции), циклично.
Можно использовать и без дополнительного плагина, если DHUD используется только в одном плагине.

Примеры использования:
Код: Выделить всё
set_dhudmessage02551000.02get_dhud_pos(id), 20.56.00.010.1);
show_dhudmessage(id"IN NEW LINE")[/pawn]
Также можно учитывать количество передаваемых строкесли они есть (если одна передавать не нужно)
[
pawn]set_dhudmessage02551000.02get_dhud_pos(id2), 20.56.00.010.1);
show_dhudmessage(id"MESSAGE ONE^nMESSAGE TWO"


Это впишите в dhudmessage.inc
Код: Выделить всё
native Floatget_dhud_pos(idlines 0); 
Последний раз редактировалось BROWN 19 июл 2014, 15:19, всего редактировалось 1 раз.
Brown_dev
Аватара пользователя
BROWN
 
Сообщения: 986
Зарегистрирован: 25 фев 2012, 23:19
Забанен
Благодарил (а): 39 раз.
Поблагодарили: 411 раз.

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

Сообщение Subb98 » 19 июл 2014, 15:07

BROWN писал(а):[pawn]new Float: g_fPos[33];[/pawn]
Код: Выделить всё
for( new id 1id <= 32id ++ )
        g_fPos[id] = START_POS



Код: Выделить всё
new Floatg_fPos[33] = {START_POS, ...}; 
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

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

Сообщение 9iky6 » 22 июл 2014, 11:15

Изымаем щит у игрока :-)

Код: Выделить всё
#define OFFSET_SHIELD 510
#define HAS_SHIELD (1<<24)
 
stock fm_strip_shield
(id)
{
        new shield get_pdata_int(idOFFSET_SHIELD);
        if(shield HAS_SHIELD)
        {
                shield &= ~HAS_SHIELD;
                set_pdata_int(idOFFSET_SHIELDshield);
                new wname[32]; get_weaponname(get_user_weapon(id), wnamecharsmax(wname));
                ExecuteHamB(Ham_Item_Deployfm_find_ent_by_owner(-1wnameid));
                return 1;
        }
        return 0;
Аватара пользователя
9iky6
 
Сообщения: 2174
Зарегистрирован: 30 янв 2012, 19:07
Откуда: Россия
Благодарил (а): 375 раз.
Поблагодарили: 707 раз.

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

Сообщение Safety1st » 22 июл 2014, 21:04

Кода мало. При отборе щита выставляются не 1, а 4 оффсета.
Вот хороший код:
Код: Выделить всё
/*
*       ConnorMcLeod's code
                https://forums.alliedmods.net/showthread.php?p=1896616#post1896616
                
                Remove shield only version
*/
 
RemoveUserShield
(id) {
        if ( get_pdata_bool(idm_bHasShield) ) {
                set_pdata_bool(idm_bHasShieldfalse)
                set_pdata_int(idm_fHasPrimary0)
                set_pev(idpev_gamestate1)
 
                
/* it is needed in case a player was 'covered' by shield (used secondary attack) */
                set_pdata_bool(idm_bUsesShieldfalse)
                new iHideHUD get_pdata_int(idm_iHideHUD)
                if( iHideHUD HUD_HIDE_CROSS )
                        // restore crosshair
                        set_pdata_int(idm_iHideHUDiHideHUD & ~HUD_HIDE_CROSS)
 
                
new iActiveItem get_pdata_cbase(idm_pActiveItem)
                if( <= ExecuteHamB(Ham_Item_ItemSlotiActiveItem) <= ) {
                        ExecuteHamB(Ham_Item_DeployiActiveItem)
                }
                return 1
        
}
        return 0

К выложенному куску надо добавить поддержку AMXX ниже 1.8.3-dev (там нет *et_pdata_bool) и значения оффсетов.
Последний раз редактировалось Safety1st 23 июл 2014, 22:13, всего редактировалось 2 раз(а).
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

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

Сообщение 9iky6 » 22 июл 2014, 21:35

Safety1st, удачи в тесте. Мой вариант отбирает щит и ставит корректную модель, вариант конора только отбирает щит.

Вы должны зарегистрироваться, чтобы видеть ссылки.
Последний раз редактировалось 9iky6 22 июл 2014, 22:21, всего редактировалось 3 раз(а).
Аватара пользователя
9iky6
 
Сообщения: 2174
Зарегистрирован: 30 янв 2012, 19:07
Откуда: Россия
Благодарил (а): 375 раз.
Поблагодарили: 707 раз.

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

Сообщение Asmodai » 22 июл 2014, 22:16

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

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

Сообщение Safety1st » 22 июл 2014, 23:40

9iky6 писал(а):вариант конора только отбирает щит.

О как. У ConnorMcLeod'а это есть, но в 'полной' версии. В Вы должны зарегистрироваться, чтобы видеть ссылки. закинул ещё чуток кода оттуда.
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

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

Сообщение 9iky6 » 22 июл 2014, 23:58

Safety1st писал(а):К выложенному куску надо добавить поддержку AMXX ниже 1.8.3-dev (там нет *et_pdata_bool) и значения оффсетов.

А теперь посмотри весь код и что-там да как. На новом amxx его стоки не работают, так что если брать весь его код, то он для старого билда.
Аватара пользователя
9iky6
 
Сообщения: 2174
Зарегистрирован: 30 янв 2012, 19:07
Откуда: Россия
Благодарил (а): 375 раз.
Поблагодарили: 707 раз.

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

Сообщение Safety1st » 23 июл 2014, 03:34

В выложенном мной варианте все работает, если offset'ы добавить. Функционал полностью копирует поведение игры при drop'е щита.

Обратил внимание на установку m_bUsesShield. Это на случай, если на момент 'отбирания' щита игрок 'прикрыт' им (ранее заюзал secondary attack). Дополнил код выше, чтобы подчеркнуть этот момент.
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Пред.След.

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

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

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