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

Как огранить возможность покупки HP ZM С.S 1.6

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

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

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

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

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

Как огранить возможность покупки HP ZM С.S 1.6

Сообщение Xey Apple))) » 09 июл 2017, 20:41

Всем привет.Собираю свой зомби сервер в кс 1.6. Занялся этим в первый раз и не чего не понимаю в скриптинге. С горя пополам нашел рабочий и не кривой плагин, который добавляет в магазин возможность докупить жизни (HP) ... В общем столкнулся с проблемой,что теперь любой игрок может купить бесконечное число жизни и быть бессмертным :(
Буду очень благодарен если поможете с этой проблемой, буду ждать ответа.
Вот исходник:

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

new const item_name[] = "Buy 5000 HP!"
const g_item_cost 25


new g_itemid_buyhp
new hpamount
new g_maxplayersg_msgSayText

public plugin_init()
{
    
register_plugin("[ZP] Buy Health Points""1.0""STRELOK")

    
g_itemid_buyhp zp_register_extra_item(item_nameg_item_costZP_TEAM_ZOMBIE)

    
hpamount register_cvar("zp_buyhp_amount""5000")

    
g_msgSayText get_user_msgid("SayText")
    
g_maxplayers get_maxplayers()
}

public 
zp_extra_item_selected(iditemid)
{
    if (
itemid != g_itemid_buyhp)
        return;
    
    
set_user_health(id,get_user_health(id)+get_pcvar_num(hpamount))
    
zp_colored_print(id"^x04[ZP]^x01 You Bought 5000 HP!")
}

// Colored chat print
zp_colored_print(target, const message[], any:...)
{
    static 
buffer[512], iargscount
    argscount 
numargs()
    
    
// Send to everyone
    
if (!target)
    {
        static 
player
        
for (player 1player <= g_maxplayersplayer++)
        {
            
// Not connected
            
if (!is_user_connected(player))
                continue;
            
            
// Remember changed arguments
            
static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
            
changedcount 0
            
            
// Replace LANG_PLAYER with player id
            
for (2argscounti++)
            {
                if (
getarg(i) == LANG_PLAYER)
                {
                    
setarg(i0player)
                    
changed[changedcount] = i
                    changedcount
++
                }
            }
            
            
// Format message for player
            
vformat(buffercharsmax(buffer), message3)
            
            
// Send it
            
message_begin(MSG_ONE_UNRELIABLEg_msgSayText_player)
            
write_byte(player)
            
write_string(buffer)
            
message_end()
            
            
// Replace back player id's with LANG_PLAYER
            
for (0changedcounti++)
                
setarg(changed[i], 0LANG_PLAYER)
        }
    }
    
// Send to specific target
    
else
    {
        
// Format message for player
        
vformat(buffercharsmax(buffer), message3)
        
        
// Send it
        
message_begin(MSG_ONEg_msgSayText_target)
        
write_byte(target)
        
write_string(buffer)
        
message_end()
    }
Аватара пользователя
Xey Apple)))
 
Сообщения: 6
Зарегистрирован: 09 июл 2017, 20:21
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение Xey Apple))) » 10 июл 2017, 11:37

нашёл вот такой гайд :

пробовал делать как написано не работает

Код: Выделить всё
1.Делаем массив.
new 
limit если нужно сделать общий лимит.
new 
limit[33] - если нужно сделать лимит для каждого игрока.

2.Использование.
Добавляем limit++ или limit[id]++ в конце функции покупки или использования чего либо.

3.Ограничение.
Добавляем в начале функции.
if(
limit >= 5) - limit или limit[id], число 5 это лимит использования
return 

4.Обнуление.
1)Добавляем в plugin_init()
register_event("HLTV""round_start""a""1=0""2=0")

2)Добавляем функцию в конце плагина
public round_start()
{
for (new 
1<= get_maxplayers(); i++) - для каждого игрока
{
limit[i] = 0
}

limit для всех
Аватара пользователя
Xey Apple)))
 
Сообщения: 6
Зарегистрирован: 09 июл 2017, 20:21
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение артист666 » 10 июл 2017, 12:48

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

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение Xey Apple))) » 10 июл 2017, 13:37

я пробовал ,но файл не компилируется и происходят ошибки... хоть что то есть верное у меня ?

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

new const item_name[] = "Купить [5000] HP"
const g_item_cost = 25


new g_itemid_buyhp
new hpamount
new g_maxplayers
, g_msgSayText
new limit

public plugin_init
()
{
    register_plugin("[ZP] Buy Health Points", "1.0", "STRELOK")
    register_event("HLTV", "round_start", "a", "1=0", "2=0")

    g_itemid_buyhp = zp_register_extra_item(item_name, g_item_cost, ZP_TEAM_ZOMBIE)

    hpamount = register_cvar("zp_buyhp_amount", "5000")

    g_msgSayText = get_user_msgid("SayText")
    g_maxplayers = get_maxplayers()
    limit++
}


public zp_extra_item_selected(id, itemid)
{
    if(limit >= 5) - limit
    if 
(itemid != g_itemid_buyhp)
        return;
    
    set_user_health
(id,get_user_health(id)+get_pcvar_num(hpamount))
    zp_colored_print(id, "^x04[ZP]^x01 Вы купили [5000] HP")
}

// Colored chat print
zp_colored_print(target, const message[], any:...)
{
    static buffer[512], i, argscount
    argscount 
= numargs()
    
    
// Send to everyone
    if (!target)
    {
        static player
        for 
(player = 1; player <= g_maxplayers; player++)
        {
            // Not connected
            if (!is_user_connected(player))
                continue;
            
            
// Remember changed arguments
            static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
            changedcount = 0
            
            
// Replace LANG_PLAYER with player id
            for (= 2; i < argscount; i++)
            {
                if (getarg(i) == LANG_PLAYER)
                {
                    setarg(i, 0, player)
                    changed[changedcount] = i
                    changedcount
++
                }
            }
            
            
// Format message for player
            vformat(buffer, charsmax(buffer), message, 3)
            
            
// Send it
            message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
            write_byte(player)
            write_string(buffer)
            message_end()
            
            
// Replace back player id's with LANG_PLAYER
            for (= 0; i < changedcount; i++)
                setarg(changed[i], 0, LANG_PLAYER)
        }
    }
    // Send to specific target
    else
    
{
        // Format message for player
        vformat(buffer, charsmax(buffer), message, 3)
        
        
// Send it
        message_begin(MSG_ONE, g_msgSayText, _, target)
        write_byte(target)
        write_string(buffer)
        message_end()
        
    
}
}
public round_start()
{
for (new i = 1; i <= get_maxplayers(); i++) 
{
limit[i] = 0
}

limit = 0 
Аватара пользователя
Xey Apple)))
 
Сообщения: 6
Зарегистрирован: 09 июл 2017, 20:21
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение RevCrew » 10 июл 2017, 13:48

Приблизительно так должно быть
Код: Выделить всё
#include <amxmodx>
#include <fun>
#include <zombieplague>

new const item_name[] = "Купить [5000] HP"
const g_item_cost 25

// Макс количество использований за раунд
#define MAX_HP_COUNT 5

new g_itemid_buyhp
new hpamount
new g_maxplayersg_msgSayText
new limit[33]

public 
plugin_init()
{
    
register_plugin("[ZP] Buy Health Points""1.0""STRELOK")
    
register_event("HLTV""round_start""a""1=0""2=0")

    
g_itemid_buyhp zp_register_extra_item(item_nameg_item_costZP_TEAM_ZOMBIE)

    
hpamount register_cvar("zp_buyhp_amount""5000")

    
g_msgSayText get_user_msgid("SayText")
    
g_maxplayers get_maxplayers()
}

public 
client_authorized(id)     limit[id] = 0;

public 
round_start()
{
    for (new 
1<= get_maxplayers(); i++) 
    {
        
limit[i] = 0;
    }



public 
zp_extra_item_selected(iditemid)
{
    if(
limit[id] >= MAX_HP_COUNT) return;
    
    if (
itemid != g_itemid_buyhp)
        return;
    
    
set_user_health(id,get_user_health(id)+get_pcvar_num(hpamount))
    
zp_colored_print(id"^x04[ZP]^x01 Вы купили [5000] HP")
    
   
limit[id] ++;
}

// Colored chat print
zp_colored_print(target, const message[], any:...)
{
    static 
buffer[512], iargscount
    argscount 
numargs()
    
    
// Send to everyone
    
if (!target)
    {
        static 
player
        
for (player 1player <= g_maxplayersplayer++)
        {
            
// Not connected
            
if (!is_user_connected(player))
                continue;
            
            
// Remember changed arguments
            
static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
            
changedcount 0
            
            
// Replace LANG_PLAYER with player id
            
for (2argscounti++)
            {
                if (
getarg(i) == LANG_PLAYER)
                {
                    
setarg(i0player)
                    
changed[changedcount] = i
                    changedcount
++
                }
            }
            
            
// Format message for player
            
vformat(buffercharsmax(buffer), message3)
            
            
// Send it
            
message_begin(MSG_ONE_UNRELIABLEg_msgSayText_player)
            
write_byte(player)
            
write_string(buffer)
            
message_end()
            
            
// Replace back player id's with LANG_PLAYER
            
for (0changedcounti++)
                
setarg(changed[i], 0LANG_PLAYER)
        }
    }
    
// Send to specific target
    
else
    {
        
// Format message for player
        
vformat(buffercharsmax(buffer), message3)
        
        
// Send it
        
message_begin(MSG_ONEg_msgSayText_target)
        
write_byte(target)
        
write_string(buffer)
        
message_end()
        
    }
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение Xey Apple))) » 10 июл 2017, 14:09

к сожалению не работает( буду пробовать дальше
Аватара пользователя
Xey Apple)))
 
Сообщения: 6
Зарегистрирован: 09 июл 2017, 20:21
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение артист666 » 10 июл 2017, 15:23

Уверен?

Код: Выделить всё
// Макс количество использований за раунд
#define MAX_HP_COUNT 5        


А в zp_extra_item_selected не должно ничего возвращаться?
Просто если цена итема списывается в том же плагине, откуда сам форвард, тогда если игрок исчерпал лимит, с него будет списываться аммо(ну или какая там валюта), а сам предмет(хп) выдаваться не будет.

Наверное типа того:
Код: Выделить всё
public zp_extra_item_selected(iditemid)
{
    if(
itemid != g_itemid_buyhp) return PLUGIN_CONTINUE
    
if(limit[id] >= MAX_HP_COUNT) return ZP_PLUGIN_HANDLED

    set_user_health
(idget_user_health(id) + get_pcvar_num(hpamount))
    
zp_colored_print(id"^x04[ZP]^x01 Вы купили [5000] HP")
    
    
limit[id]++
    return 
PLUGIN_CONTINUE


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

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение Xey Apple))) » 10 июл 2017, 17:28

вроде сделал всё, как описано ,но не компилируется (ошибки)
Код: Выделить всё
#include <amxmodx>
#include <fun>
#include <zombieplague>

new const item_name[] = "Купить [5000] HP"
const g_item_cost = 25

// Макс количество использований за раунд
#define MAX_HP_COUNT 5


new g_itemid_buyhp
new hpamount
new g_maxplayers
, g_msgSayText
new limit
[33]

public plugin_init()
{
    register_plugin("[ZP] Buy Health Points", "1.0", "STRELOK")
    register_event("HLTV", "round_start", "a", "1=0", "2=0")

    g_itemid_buyhp = zp_register_extra_item(item_name, g_item_cost, ZP_TEAM_ZOMBIE)

    hpamount = register_cvar("zp_buyhp_amount", "5000")

    g_msgSayText = get_user_msgid("SayText")
    g_maxplayers = get_maxplayers()
}

public client_authorized(id)     limit[id] = 0;

public round_start()
{
    for (new i = 1; i <= get_maxplayers(); i++) 
    
{
        limit[i] = 0;
    }
}
    
public round_start
()
{
    
    arrayset
(limit, 0, sizeof(limit))
    {
}
public zp_extra_item_selected(id, itemid)
{
    if (itemid != g_itemid_buyhp) return PLUGIN_CONTINUE
    if
(limit[id] >= MAX_HP_COUNT) return ZP_PLUGIN_HANDLED    
    
    set_user_health
(id,get_user_health(id)+get_pcvar_num(hpamount))
    zp_colored_print(id, "^x04[ZP]^x01 Вы купили [5000] HP")
    
    limit
[id]++
    return PLUGIN_CONTINUE
}

// Colored chat print
zp_colored_print(target, const message[], any:...)
{
    static buffer[512], i, argscount
    argscount 
= numargs()
    
    
// Send to everyone
    if (!target)
    {
        static player
        for 
(player = 1; player <= g_maxplayers; player++)
        {
            // Not connected
            if (!is_user_connected(player))
                continue;
            
            
// Remember changed arguments
            static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
            changedcount = 0
            
            
// Replace LANG_PLAYER with player id
            for (= 2; i < argscount; i++)
            {
                if (getarg(i) == LANG_PLAYER)
                {
                    setarg(i, 0, player)
                    changed[changedcount] = i
                    changedcount
++
                }
            }
            
            
// Format message for player
            vformat(buffer, charsmax(buffer), message, 3)
            
            
// Send it
            message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
            write_byte(player)
            write_string(buffer)
            message_end()
            
            
// Replace back player id's with LANG_PLAYER
            for (= 0; i < changedcount; i++)
                setarg(changed[i], 0, LANG_PLAYER)
        }
    }
    // Send to specific target
    else
    
{
        // Format message for player
        vformat(buffer, charsmax(buffer), message, 3)
        
        
// Send it
        message_begin(MSG_ONE, g_msgSayText, _, target)
        write_byte(target)
        write_string(buffer)
        message_end()
    }
}


Добавлено спустя 34 минуты 12 секунд:
можно в личку или здесь цену?во сколько обойдется по деньгам если вы исправите
Аватара пользователя
Xey Apple)))
 
Сообщения: 6
Зарегистрирован: 09 июл 2017, 20:21
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Как огранить возможность покупки HP ZM С.S 1.6

Сообщение артист666 » 10 июл 2017, 20:00

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


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

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

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