Добавяне на лимит за ползване на команда или меню

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Добавяне на лимит за ползване на команда или меню

Мнение от OciXCrom » 09 Окт 2016, 16:07

Взето от: iPlay.bgТози урок е създаден по поръчка на Unbr3akable.
В този урок ще ви обясня как да добавите лимит за ползване на определена команда, меню, опция и прочие.
В първия пример ще ползваме проста команда, която добавя по 15 кръв на играча когато е използвана. Целта е да направим командата да може да се ползва само три пъти при едно прераждане.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fun>
#include <hamsandwich>

// Тук задаваме колко пъти командата ще може да се ползва.
new const g_iLimit = 3

// Този масив ще държи броя на използвания на въпросната команда за всеки играч.
new g_iUses[33]

public plugin_init()
{
    register_plugin("Command Limit Example", "1.0", "iPlay.bg (OciXCrom)")
    
    // Регистрираме командата.
    register_clcmd("say /health", "cmdHealth")
    register_clcmd("say_team /health", "cmdHealth")
    
    // Регистрираме евента, при който играчът бива съживен, тъй като искаме лимитът му да се рестартира при прераждане.
    RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
}

public cmdHealth(id)
{
    // Добавяме проверка, с която ще блокираме командата в случай, че лимитът е достигнат.
    // В случая проверката я правим като провериме дали броя на използвания е по-малък от лимита.
    if(g_iUses[id] < g_iLimit)
    {
        // Ако лимитът не е достигнат, добавяме кръв на играча и изпращаме съобщение.
        set_user_health(id, get_user_health(id) + 15)
        client_print(id, print_chat, "* Zaredi kruvta si!")
        
        // Добавяме +1 към броя на използвания.
        g_iUses[id]++
        // Горният ред е едно и също с g_iUses[id] += 1 или g_iUses[id] = g_iUses[id] + 1
    }
    else
    {
        // Ако лимитът е достигнат, изпращаме съобщение, че командата не може да бъде ползвана.
        client_print(id, print_chat, "* Dostignal si limita za polzvane na tazi komanda prez tozi rund!")
    }
    
    // Скриваме командата в чата.
    return PLUGIN_HANDLED
}

public OnPlayerSpawn(id)
{
    // Когато играчът е съживен, рестартираме неговия лимит.
    g_iUses[id] = 0
}

По същия начин можете да добавите лимит на каквото пожелате.
Следващият код е възможно най-простия начин, по който можете да добавите проверка за лимит:

Код за потвърждение: Избери целия код

new g_iUses[33]
new const g_iLimit = 3

public myFunction(id)
{
    if(g_iUses[id]++ >= g_iLimit)
        client_print(id, print_chat, "* Limitut e dostignat!")
    else
    {   
        set_user_health(id, 100)
        client_print(id, print_chat, "* Poluchi 100% kruv!")
    }
    
    return PLUGIN_HANDLED
}

Долният код е пример как да добавите лимит за всеки различен предмет в дадено меню.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <hamsandwich>

new const g_iLimit = 5
new g_iUses[33][33]
// Първото [33] ще държи id-то на играча, а второто id-то на предмета в менюто.

public plugin_init()
{
    register_plugin("Item Limit Example", "1.0", "iPlay.bg (OciXCrom)")
    RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
    register_clcmd("say /menu", "cmdMenu")
    register_clcmd("say_team /menu", "cmdMenu")
}

public cmdMenu(id, iPage)
{
    new iMenu = menu_create("My Cool Menu", "handlerMenu")
    
    menu_additem(iMenu, "Purva opciq")
    menu_additem(iMenu, "Vtora opciq")
    menu_additem(iMenu, "Treta opciq")
    
    menu_display(id, iMenu, iPage)
    return PLUGIN_HANDLED
}

public handlerMenu(id, iMenu, iItem)
{
    if(iItem != MENU_EXIT)
    {
        if(g_iUses[id][iItem]++ >= g_iLimit)
            client_print(id, print_chat, "* Dostignat e limitut za polzvane na tazi opciq ot menuto.")
        else
            client_print(id, print_chat, "* Uspeshno izpolzva opciqta #%i ot menuto.", iItem)
    }
        
    menu_destroy(iMenu)
    return PLUGIN_HANDLED
}

public OnPlayerSpawn(id)
    arrayset(g_iUses[id], 0, sizeof(g_iUses[]))

Аватар
southdivision
Извън линия
Потребител
Потребител
Мнения: 279
Регистриран на: 14 Окт 2016, 23:17
Местоположение: София
Се отблагодари: 8 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Добавяне на лимит за ползване на команда или меню

Мнение от southdivision » 16 Фев 2018, 16:14

Можеш ли да добавиш и код който всеки отбор има собствен лимит за определена команда

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Добавяне на лимит за ползване на команда или меню

Мнение от OciXCrom » 16 Фев 2018, 20:48

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fun>

new g_iUses[4]
new const g_iLimit = 3

public plugin_init()
{
	register_plugin("Team Limit Example", "1.0", "OciXCrom")
	register_clcmd("say /health", "cmdHealth")
	register_clcmd("say_team /health", "cmdHealth")
	register_logevent("OnRoundStart", 2, "1=Round_Start")
}

public cmdHealth(id)
{
	new iTeam = get_user_team(id)
	
	if(g_iUses[iTeam] < g_iLimit)
	{
		set_user_health(id, get_user_health(id) + 15)
		client_print(id, print_chat, "* Zaredi kruvta si!")
		g_iUses[iTeam]++
	}
	else
		client_print(id, print_chat, "* Tvoqt otbor e dostignal limita za polzvane na tazi komanda prez tozi rund!")
	
	return PLUGIN_HANDLED
}

public OnRoundStart()
	arrayset(g_iUses, 0, sizeof(g_iUses))

Аватар
weedy
Извън линия
Потребител
Потребител
Мнения: 31
Регистриран на: 13 Фев 2021, 17:44
Местоположение: софия
Получена благодарност: 5 пъти
Обратна връзка:

Добавяне на лимит за ползване на команда или меню

Мнение от weedy » 13 Юни 2021, 21:56

Може ли да се направи лимит на вземане на авп , например ако играча вземе повече от 3 пъти подред авп да го слайва, нещо такова?

Изображение
Site

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Полезни кодове/уроци”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 8 госта