Премахване на имунитет + админ меню

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
MF1
Извън линия
Потребител
Потребител
Мнения: 316
Регистриран на: 12 Окт 2016, 21:15
Местоположение: гр.Варна
Получена благодарност: 12 пъти
Обратна връзка:

Re: Заявка за плъгини

Мнение от MF1 » 18 Ное 2016, 12:23

OciXCrom™ написа:1. amx_removei <nick|#userid> -- Премахва имунитета.
amx_restorei <nick|#userid> -- Връща имунитета, ако играчът е имал такъв.

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

#include <amxmodx>
#include <amxmisc>

#define PLUGIN_VERSION "1.0"

new bool:g_bImmune[33]

public plugin_init()
{
    register_plugin("Remove Immunity", PLUGIN_VERSION, "OciXCrom")
    register_concmd("amx_removei", "ToggleImmunity", ADMIN_RCON, "<nick|#userid>")
    register_concmd("amx_restorei", "ToggleImmunity", ADMIN_RCON, "<nick|#userid>")
}

public client_putinserver(id)
    g_bImmune[id] = false

public ToggleImmunity(id, iLevel, iCid)
{
    if(!cmd_access(id, iLevel, iCid, 2))
        return PLUGIN_HANDLED
    
    new szPlayer[32]
    read_argv(1, szPlayer, charsmax(szPlayer))
    
    new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF)
    
    if(!iPlayer)
        return PLUGIN_HANDLED
        
    new szName[32]
    get_user_name(iPlayer, szName, charsmax(szName))
    
    new szCommand[8]
    read_argv(0, szCommand, charsmax(szCommand))
    
    switch(szCommand[6])
    {
        case 'm':
        {
            if(is_user_immune(iPlayer))
            {
                remove_user_flags(iPlayer, ADMIN_IMMUNITY)
                console_print(id, "* Removed immunity from %s.", szName)
                g_bImmune[iPlayer] = true
            }
            else
                console_print(id, "* %s doesn't have immunity!", szName)
        }
        case 's':
        {
            if(is_user_immune(iPlayer))
                console_print(id, "* %s already has immunity!", szName)
            else if(!g_bImmune[iPlayer])
                console_print(id, "* %s didn't have immunity, so you can't restore it!", szName)
            else
            {
                set_user_flags(iPlayer, ADMIN_IMMUNITY)
                console_print(id, "* Restored %s's immunity.", szName)
            }
        }
    }
    
    return PLUGIN_HANDLED
}

bool:is_user_immune(id)
    return get_user_flags(id) & ADMIN_IMMUNITY ? true : false
Гледам, но не намирам кой флаг е, някой ако може да помогне , ще съм му благодарен :)

Иначе всичко стана и работи идеално!
Join now.
www.MF1-CS.eu ---------------------------- 91.132.63.55:27015 91.132.63.56:27015 ---------------------------- :bg:

Аватар
mount4
Извън линия
Потребител
Потребител
Мнения: 187
Регистриран на: 03 Ное 2016, 19:54
Местоположение: Варна
Обратна връзка:

Re: Заявка за плъгини

Мнение от mount4 » 18 Ное 2016, 12:34

1. ето тук:

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

    register_concmd("amx_removei", "ToggleImmunity", ADMIN_RCON, "<nick|#userid>")
    register_concmd("amx_restorei", "ToggleImmunity", ADMIN_RCON, "<nick|#userid>")
2. по точно: "ADMIN_RCON"

3. тоест: флаг-а нужен за изпълняване на rcon команди.

4. като гледам как се написан код-а можеш да добавиш на някого имунитет без да искаш. Това ще стане ако изпълниш командата "amx_removei" на играч който няма имунитет но е имал преди. Нали няма логика да я изпълняваш след като знаеш че няма имунитет ама пък точно че може да не знаеш и искаш да се увериш. И какво става: искаш да си сигурен че си му отнел имунитета пък ти всъшност му даваш такъв. Не е добре така.
Трябва да има отделна функция за премахване и отделна за възтановяване. И освен това щом ти трябва такъв висок флаг за rcon е по-логично amx_restorei да бъде amx_givei за да можеш да даваш имунитет и на човек който е нямал преди.
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

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

Re: Премахване на имунитет + админ меню

Мнение от OciXCrom » 18 Ное 2016, 15:08

mount4, какви неща говориш?! Абсолютно невъзможно е да се добави имунитет на някого по погрешка. Командата amx_removei единствено премахва имунитета и ако играчът няма такъв не прави нищо. Имунитетът се връща с командата amx_restorei, като същата ще върне имунитета само и единствено ако играчът е имал такъв преди, демек е бил премахнат с предишната команда. Прегледай внимателно кода - това, че двете команди ползват една и съща функция, не означава, че имат еднакво действие. И, напротив - няма никаква логика да има команда amx_givei, тъй като въпросният имунитет ще остане само до края на картата.

Аватар
mount4
Извън линия
Потребител
Потребител
Мнения: 187
Регистриран на: 03 Ное 2016, 19:54
Местоположение: Варна
Обратна връзка:

Re: Премахване на имунитет + админ меню

Мнение от mount4 » 18 Ное 2016, 16:04

Видях кода и разбрах как разпознаваш коя команда извиква функцията но това е доста грозно.
Доста по-добре е да си бъде с 2 функции и ще бъде и по-бързо.

Ето така:

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

#include <amxmodx>
#include <amxmisc>

#define PLUGIN_VERSION "1.0"

new bool:g_bImmune[33]

public plugin_init()
{
    register_plugin("Remove Immunity", PLUGIN_VERSION, "OciXCrom")
    register_concmd("amx_removei", "removei", ADMIN_RCON, "<nick|#userid>")
    register_concmd("amx_restorei", "restorei", ADMIN_RCON, "<nick|#userid>")
}

public client_putinserver(id)
    g_bImmune[id] = false

public removei(id, iLevel, iCid)
{
	if(!cmd_access(id, iLevel, iCid, 2))
        return PLUGIN_HANDLED
		
	new szPlayer[32]
    read_argv(1, szPlayer, charsmax(szPlayer))
    
    new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF)
    
    if(!iPlayer)
        return PLUGIN_HANDLED
        
    new szName[32]
    get_user_name(iPlayer, szName, charsmax(szName))
	
	if(is_user_immune(iPlayer))
    {
        remove_user_flags(iPlayer, ADMIN_IMMUNITY)
        console_print(id, "* Removed immunity from %s.", szName)
        g_bImmune[iPlayer] = true
    } else
        console_print(id, "* %s doesn't have immunity!", szName)
		
	return PLUGIN_HANDLED
}

public restorei(id, iLevel, iCid)
{
	if(!cmd_access(id, iLevel, iCid, 2))
        return PLUGIN_HANDLED
    
    new szPlayer[32]
    read_argv(1, szPlayer, charsmax(szPlayer))
    
    new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF)
    
    if(!iPlayer)
        return PLUGIN_HANDLED
        
    new szName[32]
    get_user_name(iPlayer, szName, charsmax(szName))
	
	if(is_user_immune(iPlayer))
        console_print(id, "* %s already has immunity!", szName)
    else if(!g_bImmune[iPlayer])
        console_print(id, "* %s didn't have immunity, so you can't restore it!", szName)
    else
    {
        set_user_flags(iPlayer, ADMIN_IMMUNITY)
        console_print(id, "* Restored %s's immunity.", szName)
    }
	
	return PLUGIN_HANDLED
}

bool:is_user_immune(id)
    return get_user_flags(id) & ADMIN_IMMUNITY ? true : false
Всъщност по-красиво е по твоя начин но е по-бързо по моя. То специално за този плъгин няма никакво значение кой от двата ще се използва, въпроса е да си изградим добър навик.

Възможно е автора на темата да иска да бъде "persistent". тоест: да нее само до края на мап-а.
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

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

Re: Премахване на имунитет + админ меню

Мнение от OciXCrom » 18 Ное 2016, 16:29

Няма никакво значение дали кодът ще се изпълни за 0.0000001 секунда или за 0.0000002 секунди. При положение, че 90% от функциите са едно и също, предпочитам да бъде в една, отколко ако искам да променя нещо, да трябва да го правя на две различни места.

Аватар
mount4
Извън линия
Потребител
Потребител
Мнения: 187
Регистриран на: 03 Ное 2016, 19:54
Местоположение: Варна
Обратна връзка:

Re: Премахване на имунитет + админ меню

Мнение от mount4 » 18 Ное 2016, 16:38

В случая не но както казах е добре да си изградим добър навик. Или пък представи си на някой му хареса начина ти и напише някакъв код с някакъв цикъл където да се изпълнява многократно: тогава разликата ще нарастне и няма да е толкова малка.

Като неискаш да променяш на две места си направи отделна функция която да прави това което се повтаря в двете функции и не са 90% ами 60 като гледам в notepad-а.
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

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

Обратно към “Заявки за плъгини”

Кой е на линия

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