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

[CS] Buy Zone Always

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

Модератор: Leonidddd

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

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

[CS] Buy Zone Always

Сообщение NightFury » 23 ноя 2016, 20:37

[CS] Buy Zone Always
Автор: NightFury(406)
Версия: 1.0


Описание: Данный плагин позволит вам закупаться в любом месте.
Иконка по умолчанию скрыта, но вы можете ее показать настроив цвет.

Код: Выделить всё
message_begin(MSG_ONE, msgid_StatusIcon, _, player)
write_byte(1)
write_string("buyzone")
write_byte(0) // Red
write_byte(0) // Green
write_byte(0) // Blue
message_end() 
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Подпись: NightFury/406
Аватара пользователя
NightFury
 
Сообщения: 31
Зарегистрирован: 10 авг 2016, 12:22
Благодарил (а): 6 раз.
Поблагодарили: 8 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn

Re: [CS] Buy Zone Always

Сообщение Subb98 » 23 ноя 2016, 20:59

Код: Выделить всё
#define create_entity(%0) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %0))  

Не рекомендую использовать EngFunc_AllocString в такой конструкции, получите утечку. Сохраняйте значение в константу и вызывайте лишь единожды, если константа равна нулю. Или вовсе используйте Engine. Название макроса также вводит в заблуждение:

Код: Выделить всё
/* Creates an entity, will return the index of the created entity. ClassName must be valid. */
native create_entity(const szClassname[]);

Не используйте хардкод:

Код: Выделить всё
get_msg_arg_string(2, szIcon, 7)

>>

Код: Выделить всё
get_msg_arg_string(2, szIcon, charsmax(szIcon))

А также записи в одну строку:

Код: Выделить всё
public fm_PlayerPostThinkPost(id) if(is_user_alive(id)) dllfunc(DLLFunc_Touch, g_BuyZone, id)

Код: Выделить всё
if(equal(szIcon, "buyzone"))
return 1; return 0

Это плохо читаемый код.

В этом макросе

Код: Выделить всё
#define player_max_plus(%0) for(new %0=1; %0<=g_MaxPlayer; %0++)  

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

Добавлено спустя 10 минут 42 секунды:
П.с.: кстати, да. Небольшое уточнение. Утечки в вашем коде не будет, т.к. AllocString вызовется единожды. Извиняюсь, что не уточнил сразу.
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4138
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1191 раз.
Поблагодарили: 1980 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: [CS] Buy Zone Always

Сообщение Leonidddd » 24 ноя 2016, 00:04

Когда я вижу think-и в подобных случая, мне становится очень плохо.

Возьмите этот код за основу( решил его написать, т.к. нигде не нашёл "адекватного" способа сделать buyzone вечным).

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

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

#define OFFSET_MAPZONE    235

#define CS_MAPZONE_BUY    (1<<0)

public plugin_init(){
    
    set_msg_block
(get_user_msgid("BuyClose"), BLOCK_SET);
    
    register_message
(get_user_msgid("StatusIcon"), "StatusIcon_Hook"); 
}

public StatusIcon_Hook( const MsgId, const MsgDest, const pID ) {
    
    if
(!get_msg_arg_int(1)){
        
        new Message
[8];
        get_msg_arg_string(2, Message, charsmax(Message));

        if( equal( Message, "buyzone" ) ){
            set_pdata_int(pID, OFFSET_MAPZONE, get_pdata_int(pID,OFFSET_MAPZONE) & CS_MAPZONE_BUY);
            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_CONTINUE; 


Выход с меню покупок в порядке(по крайней мере, на моем тестовом сервере).
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2164
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 176 раз.
Поблагодарили: 602 раз.
Языки программирования: Counter-Strike 1.6

Re: [CS] Buy Zone Always

Сообщение Subb98 » 24 ноя 2016, 00:13

Поторопился я с утверждением, не обратил внимания на think.

Тема перемещена в раздел "Добавленные новые плагины"
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4138
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1191 раз.
Поблагодарили: 1980 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: [CS] Buy Zone Always

Сообщение SISA » 24 ноя 2016, 00:54

А зачем пресинк ? Функция нужна в крайне редких случаях. Вы же не перехватывает кнопки игрока.
Аватара пользователя
SISA
 
Сообщения: 252
Зарегистрирован: 28 ноя 2009, 01:46
Благодарил (а): 19 раз.
Поблагодарили: 111 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: [CS] Buy Zone Always

Сообщение happy88 » 05 дек 2016, 13:29

А можно пофиксить, чтобы игроки не могли покупать оружия бандив кнопки. После 15ти секунд, если забиндена быстрая покупка, оружие покупается.
Аватара пользователя
happy88
 
Сообщения: 5
Зарегистрирован: 23 сен 2014, 10:55
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6


Вернуться в Добавленные новые плагины

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

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