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

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

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

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

Ошибка в простеньком VIP плагине

, Run time error 10: native error (native "give_item")
Статус пользователя mcrc
сообщение 12.3.2014, 4:17
Сообщение #1


Стаж: 12 лет

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

Доброго дня!
Время от времени возникает вот такая ошибка в VIP плагине:
Код
L 03/09/2014 - 09:58:49: Start of error session.
L 03/09/2014 - 09:58:49: Info (map "$1000$") (file "addons/amxmodx/logs/error_20140309.log")
L 03/09/2014 - 09:58:49: [FUN] Invalid player 6
L 03/09/2014 - 09:58:49: [AMXX] Displaying debug trace (plugin "positive_vip_new.amxx")
L 03/09/2014 - 09:58:49: [AMXX] Run time error 10: native error (native "give_item")
L 03/09/2014 - 09:58:49: [AMXX]    [0] phpcWerOA.sma::VIP (line 28)


Код:
#include <amxmodx>
#include <fun>
#include <fakemeta_util>

public plugin_init() {
register_plugin("Admins VIP", "1.0", "UNREAL/Esecman")
register_event("ResetHUD", "ResetHUD", "be")
}

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

public VIP(id) {
id -= 6910
if(get_user_flags(id) & ADMIN_LEVEL_G) {
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()
if(get_user_team(id) == 1) {
fm_strip_user_gun(id, CSW_GLOCK18)
}
if(get_user_team(id) == 2) {
fm_strip_user_gun(id, CSW_USP)
}
give_item(id,"weapon_hegrenade")
give_item(id,"item_assaultsuit")
give_item(id, "weapon_deagle")
give_item(id, "ammo_50ae")
give_item(id, "ammo_50ae")
give_item(id, "ammo_50ae")
give_item(id, "ammo_50ae")
give_item(id, "ammo_50ae")
}
return PLUGIN_HANDLED
}


Есть подозрение, что это как-то связано с именем игрока.
Подскажите, пожалуйста, в чём может быть дело наверняка?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
serfreeman1337
сообщение 12.3.2014, 5:02
Сообщение #2
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Попробуй так:

Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta_util>

public plugin_init() {
register_plugin("Admins VIP", "1.0", "UNREAL/Esecman")
RegisterHam(Ham_Spawn,"player,"VIP",1)
}

public VIP(id) {
if(!is_user_alive(id))
return HAM_IGNORED

if(get_user_flags(id) & ADMIN_LEVEL_G){
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()

DropWeaponSlot(id,2)

fm_give_item(id,"weapon_hegrenade")
fm_give_item(id,"item_assaultsuit")
fm_give_item(id,"weapon_deagle")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
}

return HAM_IGNORED
}

DropWeaponSlot( iPlayer, iSlot ){
static const m_rpgPlayerItems = 367; // player
static const m_pNext = 42; // weapon_*
static const m_iId = 43; // weapon_*

if( !( 1 <= iSlot <= 2 ) ) {
return 0;
}

new iCount;

new iEntity = get_pdata_cbase( iPlayer, ( m_rpgPlayerItems + iSlot ), 5 );
if( iEntity > 0 ) {
new iNext;
new szWeaponName[ 32 ];

do {
iNext = get_pdata_cbase( iEntity, m_pNext, 4 );

if( get_weaponname( get_pdata_int( iEntity, m_iId, 4 ), szWeaponName, charsmax( szWeaponName ) ) ) {
engclient_cmd( iPlayer, "drop", szWeaponName );

iCount++;
}
} while( ( iEntity = iNext ) > 0 );
}

return iCount;
}


Отредактировал: serfreeman1337, - 12.3.2014, 5:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mcrc
сообщение 13.3.2014, 4:07
Сообщение #3


Стаж: 12 лет

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

serfreeman1337, хочется, чтобы пистолет не дропом выбрасывался, а именно исчезал

Отредактировал: mcrc, - 13.3.2014, 4:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 13.3.2014, 8:41
Сообщение #4
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Цитата(mcrc @ 13.3.2014, 7:07) *
serfreeman1337, хочется, чтобы пистолет не дропом выбрасывался, а именно исчезал


Держи:

Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta_util>

public plugin_init() {
register_plugin("Admins VIP", "1.0", "UNREAL/Esecman")
RegisterHam(Ham_Spawn,"player","VIP",1)
}

public VIP(id) {
if(!is_user_alive(id))
return HAM_IGNORED

if(get_user_flags(id) & ADMIN_LEVEL_G){
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()

DropWeaponSlot(id,2)

fm_give_item(id,"weapon_hegrenade")
fm_give_item(id,"item_assaultsuit")
fm_give_item(id,"weapon_deagle")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
fm_give_item(id,"ammo_50ae")
}

return HAM_IGNORED
}

DropWeaponSlot( iPlayer, iSlot ){
static const m_rpgPlayerItems = 367; // player
static const m_pNext = 42; // weapon_*
static const m_iId = 43; // weapon_*

if( !( 1 <= iSlot <= 2 ) ) {
return 0;
}

new iCount;
new iId

new iEntity = get_pdata_cbase( iPlayer, ( m_rpgPlayerItems + iSlot ), 5 );
if( iEntity > 0 ) {
new iNext;

do {
iNext = get_pdata_cbase( iEntity, m_pNext, 4 );
iId = get_pdata_int( iEntity, m_iId, 4 )

if( iId ) {
fm_strip_user_gun( iPlayer, iId)

iCount++;
}
} while( ( iEntity = iNext ) > 0 );
}

return iCount;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 13.3.2014, 15:07
Сообщение #5
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ну раз появилось селективное отбирание оружия в коде, я бы ещё внёс изменения:
• DropWeaponSlot -> StripWeaponSlot
• если опустошаем первый слот - фикс, чтобы игрок мог подбирать оружие карты (armoury_entity)
код
Код
/* bugfix by ConnorMcLeod
see forums.alliedmods.net/showthread.php?t=90106 */

#if AMXX_VERSION_NUM < 183
    static const m_fHasPrimary = 116    // m_f constants have been declared as BOOL (int) in SDK, so consider integer
    set_pdata_int( id, m_fHasPrimary, 0 )
#else
    static const m_bHasPrimary = 464
    set_pdata_bool( id, m_bHasPrimary, false )
#endif
Этот код необходимо выполнять после каждого использования strip_user_weapons() или селективного опустошения первого слота.

• заменить однократную безусловную отправку ScoreAttrib на смену атрибута, когда требуется и можно (нет бомбы), чтобы тэги BOMB и VIP у народа не пропадали
код
Код
public plugin_init() {
    // ...
    register_message( get_user_msgid( "ScoreAttrib" ), "msgScoreAttrib" )
}

public msgScoreAttrib(const MsgId, const MsgType, const MsgDest) { //xpaw's code
    #define is_user_cool(%1) ( get_user_flags(%1) & ADMIN_LEVEL_G )    // set to whatever you want
    #define VIP_TAG (1<<2)
    #define ARG_PLAYER_ID 1
    #define ARG_SCOREBOARD_TAG
    if( is_user_cool( get_msg_arg_int(ARG_PLAYER_ID) )  && !get_msg_arg_int(ARG_SCOREBOARD_TAG) )
        set_msg_arg_int( ARG_SCOREBOARD_TAG, ARG_BYTE, VIP_TAG )
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mcrc
сообщение 13.3.2014, 15:46
Сообщение #6


Стаж: 12 лет

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

Цитата
чтобы тэги BOMB и VIP у народа не пропадали

Да, Safety1st, это вы верно подметили, VIP в табе частенько пропадает..

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