Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Ошибка в плагине admin_vip

, inside
Статус пользователя kupuk96
сообщение 6.9.2012, 16:30
Сообщение #1


Стаж: 15 лет

Сообщений: 456
Благодарностей: 139
Полезность: 554

Привет всем.
Плагин admin_vip выдает ошибки, хотя работает вроде бы корректно, но все таки лучше исправить их.
исходник
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)

#define VIP_FLAG ADMIN_LEVEL_H

new g_rounds

public plugin_init()
{
    register_plugin("AdminVip", "0.1", "qwer")
    register_event("ResetHUD", "ResetHUD", "be")

    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
    register_logevent("gameRestart", 2, "1=Game_Commencing")
    register_event("TextMsg", "gameRestart", "a", "2=#Game_will_restart_in")

    register_clcmd("say /adminka", "info_adm", 0, "- Shows the MOTD.")
    register_clcmd("say /dgl", "dgl")
    register_clcmd("say /m4a1", "m4a1")
    register_clcmd("say /ak47", "ak47")
    register_clcmd("say /awp", "awp")
}

public event_round_start ( )
{
    g_rounds++
}

public gameRestart ( )
{
    g_rounds = 0
}

public ResetHUD(id)
{
    set_task(0.5, "VIP", id + 6910)
}

public VIP(TaskID)
{
    new id = TaskID - 6910
    
    if ( get_user_flags ( id ) & VIP_FLAG )
    {
        message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
        write_byte(id)
        write_byte(4)
        message_end()

        give_item(id, "weapon_hegrenade")
        give_item(id, "weapon_flashbang")
        give_item(id, "weapon_flashbang")
        give_item(id, "weapon_smokegrenade")
        give_item(id, "item_kevlar")
        give_item(id, "item_assaultsuit")
        give_item(id, "item_thighpack")    
    }
    
    return PLUGIN_HANDLED
}

public client_putinserver (id)
{
    set_task(0.5, "vip_connect", id);
}

public vip_connect (id)
{
    new name[32]
    get_user_name(id, name, 31)

    if (get_user_flags(id) & ADMIN_BAN)
    {
        color_print (0, "К нам присоединился !g[Админ] !t%s!y!", name)
        client_cmd (0, "spk sound/radio/vip.wav")
    }
      else if (get_user_flags(id) & VIP_FLAG)
        {
        color_print (0, "К нам присоединился !g[VIP]!y игрок !t%s!y!", name)
        client_cmd (0, "spk sound/radio/vip.wav")
    }
}

public dgl ( id )
{
    if ( ! ( get_user_flags ( id ) & VIP_FLAG ) )
    {
        color_print( id , "^4[VIP]^1 Вы не имеете ^3VIP ^1привилегий!" );
        return PLUGIN_HANDLED;
    }

    if ( ! is_user_alive ( id ) )
    {
        color_print(id, "^4[VIP] ^3Ты мертв - действие невозможно!");
        return PLUGIN_HANDLED;
    }

    drop_weapons(id, 2)
    give_item( id, "weapon_deagle" )
    cs_set_user_bpammo( id , CSW_DEAGLE, 35 )
    color_print( id , "^4[VIP]^1 Вы получили ^3Deagle" )

    return PLUGIN_CONTINUE;
}

public m4a1 ( id )
{    
    if ( ! ( get_user_flags ( id ) & VIP_FLAG ) )
    {
        color_print( id , "^4[VIP]^1 Доступно только для ^3VIP ^1игроков!" );
        return PLUGIN_HANDLED;
    }

    if ( ! is_user_alive ( id ) )
    {
        color_print(id, "^4[VIP] ^3Ты мертв - действие невозможно!");
        return PLUGIN_HANDLED;
    }

    if ( g_rounds < 2 )
    {
        color_print( id , "^4[VIP]^1 Доступно после^4 2 ^1раунда!" );
        return PLUGIN_HANDLED;
    }

    drop_weapons(id, 1)
    give_item( id, "weapon_m4a1" )
    cs_set_user_bpammo( id , CSW_M4A1, 90 )
    color_print( id , "^4[VIP]^1 Вы получили ^3M4A1" )

    return PLUGIN_CONTINUE;
}

public ak47 ( id )
{
    if ( ! ( get_user_flags ( id ) & VIP_FLAG ) )
    {
        color_print( id , "^4[VIP]^1 Вы не имеете ^3VIP ^1привилегий!" );
        return PLUGIN_HANDLED;
    }

    if ( ! is_user_alive ( id ) )
    {
        color_print(id, "^4[VIP] ^3Ты мертв - действие невозможно!");
        return PLUGIN_HANDLED;
    }

    if ( g_rounds < 2 )
    {
        color_print( id , "^4[VIP]^1 Доступно после^4 2 ^1раунда!" );
        return PLUGIN_HANDLED;
    }

    drop_weapons(id, 1)
    give_item( id, "weapon_ak47" )
    cs_set_user_bpammo( id , CSW_AK47, 90
    color_print( id , "^4[VIP]^1 Вы получили ^3AK-47" )

    return PLUGIN_CONTINUE;
}

public awp ( id )
{
    if ( ! ( get_user_flags ( id ) & VIP_FLAG ) )
    {
        color_print( id , "^4[VIP]^1 Вы не имеете ^3VIP ^1привилегий!" );
        return PLUGIN_HANDLED;
    }

    if ( ! is_user_alive ( id ) )
    {
        color_print(id, "^4[VIP] ^3Ты мертв - действие невозможно!");
        return PLUGIN_HANDLED;
    }

    if ( g_rounds < 3 )
    {
        color_print( id , "^4[VIP]^1 Доступно после^4 3 ^1раунда!" );
        return PLUGIN_HANDLED;
    }

    drop_weapons(id, 1)
    give_item( id, "weapon_awp" )
    cs_set_user_bpammo( id , CSW_AWP, 30 )
    color_print( id , "^4[VIP]^1 Вы получили ^3AWP" )

    return PLUGIN_CONTINUE;
}

public info_adm(id)
{
    show_motd(id, "adminka.txt", "Покупка Админки")
}

stock color_print(id, const input[], any:...)
{
    new message[192], player, msg_type
    
    vformat(message, 191, input, 3)
    format(message, 191, "^1%s", message)
    replace_all(message, 191, "!g", "^4") // !g - зелёный цвет
    replace_all(message, 191, "!y", "^1") // !y - стандартный цвет у клиента (обычно жёлтый)
    replace_all(message, 191, "!t", "^3") // !t - цвет команды
    message[191] = '^0'
    
    if(id)
    {
        player = id
            msg_type = MSG_ONE_UNRELIABLE
        }
        else
        {
                for(new i = 1; i <= get_maxplayers(); i++)
                {
            if(is_user_connected(i))
                        {
                            player = i
                            break
                        }
                }
        
                msg_type = MSG_BROADCAST
        }
    
        message_begin(msg_type, get_user_msgid("SayText"), _, player)
        write_byte(player)
        write_string(message)
        message_end()

    return 1
}

stock drop_weapons(id, dropwhat)
{
        // Get user weapons
        static weapons[32], num, i, weaponid
        num = 0 // reset passed weapons count (bugfix)
        get_user_weapons(id, weapons, num)
        
        // Loop through them and drop primaries or secondaries
        for (i = 0; i < num; i++)
        {
                // Prevent re-indexing the array
                weaponid = weapons[i]
                
                if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
                {
                        // Get weapon entity
                        static wname[32]
                        get_weaponname(weaponid, wname, charsmax(wname))
                        
                        // Player drops the weapon and looses his bpammo
                        engclient_cmd(id, "drop", wname)
                }
        }
}

error-log
Цитата
L 09/01/2012 - 13:29:04: Start of error session.
L 09/01/2012 - 13:29:04: Info (map "de_abaddon") (file "addons/amxmodx/logs/error_20120901.log")
L 09/01/2012 - 13:29:04: [FUN] Invalid player 9
L 09/01/2012 - 13:29:04: [AMXX] Displaying debug trace (plugin "admin_vip.amxx")
L 09/01/2012 - 13:29:04: [AMXX] Run time error 10: native error (native "give_item")
L 09/01/2012 - 13:29:04: [AMXX] [0] admin_vip.sma::VIP (line 55)
Строка 55
Код
        give_item(id, "weapon_hegrenade")

И еще, можно ли сделать чтобы оружие через чат выдавалось в одной функции, или лучше как сейчас - каждое отдельно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fred Perry
сообщение 6.9.2012, 19:42
Сообщение #2


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

При выдаче айтема, если не ошибаюсь, надо делать проверку на то, что юзер живой или нет. Ну я еще сделал присоединен он или нет.
Вот
Код
public VIP(TaskID)
{
    new id = TaskID - 6910
    
    if ( get_user_flags ( id ) & VIP_FLAG )
    {
        message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
        write_byte(id)
        write_byte(4)
        message_end()

        give_item(id, "weapon_hegrenade")
        give_item(id, "weapon_flashbang")
        give_item(id, "weapon_flashbang")
        give_item(id, "weapon_smokegrenade")
        give_item(id, "item_kevlar")
        give_item(id, "item_assaultsuit")
        give_item(id, "item_thighpack")    
    }
    
    return PLUGIN_HANDLED
}


=>

Код
public VIP(TaskID)
{
    new id = TaskID - 6910
    
    if ( get_user_flags ( id ) & VIP_FLAG )
    {
        message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
        write_byte(id)
        write_byte(4)
        message_end()

    if(is_user_connected(id) && is_user_alive(id)){
        give_item(id, "weapon_hegrenade")
        give_item(id, "weapon_flashbang")
        give_item(id, "weapon_flashbang")
        give_item(id, "weapon_smokegrenade")
        give_item(id, "item_kevlar")
        give_item(id, "item_assaultsuit")
        give_item(id, "item_thighpack")    
       }
    }
    return PLUGIN_HANDLED
}


Отредактировал: Fred Perry, - 6.9.2012, 19:43


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя 3ple
сообщение 6.9.2012, 20:17
Сообщение #3
Стаж: 13 лет

Сообщений: 74
Благодарностей: 7
Полезность: 8

Цитата(Fred Perry @ 6.9.2012, 20:42) *
При выдаче айтема, если не ошибаюсь, надо делать проверку на то, что юзер живой или нет.

Да, ты прав. Нужно делать проверку.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 7.9.2012, 7:25
Сообщение #4


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Если сработало, пусть автор отпишет.


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 7.9.2012, 9:22
Сообщение #5


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Is user alive включает в себя is user connected - нет необходимости использовать вместе ( кто-то когда-то рассуждал об этом )


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 7.9.2012, 16:37
Сообщение #6


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Цитата(AndrewZ @ 7.9.2012, 10:22) *
Is user alive включает в себя is user connected - нет необходимости использовать вместе ( кто-то когда-то рассуждал об этом )

http://amxxmodx.ru/ говорит по-другому
обсуждение видел сам неоднократно.

Отредактировал: Fred Perry, - 7.9.2012, 16:38


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя kupuk96
сообщение 8.9.2012, 16:09
Сообщение #7


Стаж: 15 лет

Сообщений: 456
Благодарностей: 139
Полезность: 554

Вроде помогло, ошибка не появляется.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 8.9.2012, 23:42
Сообщение #8


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Цитата(kupuk96 @ 8.9.2012, 17:09) *
Вроде помогло, ошибка не появляется.

Ну это самое главное.


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: