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

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

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

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

Каким способом лучше отбирать оружие?

Статус пользователя svh0st
сообщение 12.3.2013, 17:25
Сообщение #1


Стаж: 16 лет

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

Вот делаю плагин. Функция его такая, если игрока убили, то его воскрешает, +забирает оружие (если игрок КТ отнимает usp, если игрок Т отнимает glock, c4).
Сначала я сделал так

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

#define PLUGIN "Arp - Auto respawn player"
#define VERSION "0.1"
#define AUTHOR "svh0st"

new cvar_enable_arp, cvar_remove_weapons

public plugin_init()
{
    register_plugin("PLUGIN", "VERSION", "AUTHOR")
    
    //Квари:
    cvar_enable_arp = register_cvar("enable_arp", "1")
    cvar_remove_weapons = register_cvar("remove_weapons", "1")
    
    //События:
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled", 1)
}

public fw_PlayerSpawn(id)
{
    if(get_pcvar_num(cvar_enable_arp) == 1 && get_pcvar_num(cvar_remove_weapons) == 1 && is_user_connected(id))
        set_task(0.1, "strip_weapon", id)
}

public fw_PlayerKilled(id)
{
    if(get_pcvar_num(cvar_enable_arp) == 1 && is_user_connected(id))
        set_task(2.0, "respawn_player", id)
}

public respawn_player(id)
{
    if(get_user_team(id) == 1 || get_user_team(id) == 2)
    {
        ExecuteHam(Ham_CS_RoundRespawn, id)
    }
}

public strip_weapon(id)
{
    if(get_user_team(id) == 1 || get_user_team(id) == 2)
    {
        if(user_has_weapon(id, CSW_USP))
            fm_strip_user_gun(id, CSW_USP)
        if(user_has_weapon(id, CSW_GLOCK18))
            fm_strip_user_gun(id, CSW_GLOCK18)
        if(user_has_weapon(id, CSW_C4))
            fm_strip_user_gun(id, CSW_C4)
    }
}


Мне начал писать в консоле сервера что у меня какой то debug, прописал я его в plugins.ini через пробел перед плагином и тут он пропал, но ошибку в логах не написал. Я начал делать другой вариант отбирание оружия.
Только уже без респавна и кваров, потому что когда воскрешало выключало сервер

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

#define PLUGIN "Strip user weapon"
#define VERSION "0.1"
#define AUTHOR "svh0st"

public plugin_init()
{
    register_plugin("PLUGIN", "VERSION", "AUTHOR")
    
    //События:
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
}

public fw_PlayerSpawn(id)
{
    if(get_user_team(id) == 1 || get_user_team(id) == 2)
        {
            if(user_has_weapon(id, CSW_USP))
                fm_strip_user_gun(id, CSW_USP)
            if(user_has_weapon(id, CSW_GLOCK18))
                fm_strip_user_gun(id, CSW_GLOCK18)
            if(user_has_weapon(id, CSW_C4))
                fm_strip_user_gun(id, CSW_C4)
        }
}


И тут даже простой плагин не отбирает C4.

ps.gif Уже раз 3 переписываю этот плагин с 0 и другим способам, все равно не то, те же проблеы. Помогите мне начинающему pawn-неру pardon.gif

Отредактировал: svh0st, - 12.3.2013, 17:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 12.3.2013, 17:32
Сообщение #2
Иконка группы

Стаж: 19 лет

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

strip_user_weapons(id)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 12.3.2013, 17:35
Сообщение #3


Стаж: 16 лет

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

Цитата(iLLuSioN @ 12.3.2013, 17:32) *
strip_user_weapons(id)

strip_user_weapons(id, CSW_C4)
или
strip_user_weapons(id, "weapon_c4")
?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 12.3.2013, 17:38
Сообщение #4
Иконка группы

Стаж: 19 лет

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

там только один аргумент id
функция отбирает все оружие, нож тоже


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 12.3.2013, 17:41
Сообщение #5


Стаж: 16 лет

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

Цитата(iLLuSioN @ 12.3.2013, 17:38) *
там только один аргумент id
функция отбирает все оружие, нож тоже

Та нет, это не то, я с этим тоже мучался, тоже мурня такая.
Лучше отбирать через set_task или сразу как у меня там?

Отредактировал: svh0st, - 12.3.2013, 17:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 12.3.2013, 17:46
Сообщение #6
Стаж: 14 лет
Город: Moscow

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

Цитата(iLLuSioN @ 12.3.2013, 19:32) *
strip_user_weapons(id)

А затем выдача ножа. Селективность дожна быть оправдана.

В fw_PlayerSpawn(id), если вызов через Ham, всегда делайте проверку is_user_alive, чтобы отсечь спектаторов.
Fakemeta не используйте, если не берёте код из достойного плагина, в котором эти функции используются.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 12.3.2013, 17:46
Сообщение #7
Иконка группы

Стаж: 19 лет

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

Цитата(svh0st @ 12.3.2013, 17:41) *
Та нет, это не то, я с этим тоже мучался, тоже мурня такая.
Лучше отбирать через set_task или сразу как у меня там?

Как понять "это не то" ? Ты же спросил как отобрать оружие. Отбирать можно и сразу, а выдавать лучше чуть позже. Обьясни нормально, что ты хочешь сделать?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 12.3.2013, 17:50
Сообщение #8


Стаж: 16 лет

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

Чем лучше отбирать?

Отредактировал: svh0st, - 12.3.2013, 18:19
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 12.3.2013, 18:19
Сообщение #9


Стаж: 15 лет

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

Цитата(svh0st @ 12.3.2013, 18:50) *
Чем лучше отбирать?

Хам,он быстрей.

Скрытый текст
Код
#include < amxmodx >
#include < cstrike >
#include < fakemeta >
#include < hamsandwich >

new g_iMaxClients;
new Float: g_flBlockSpawn;

public plugin_init( )
{    
    register_event("HLTV", "Event__Round_Start", "a", "1=0", "2=0");

    RegisterHam( Ham_Spawn, "player", "CBasePlayer__Spawn_Post", .Post = true );
    RegisterHam( Ham_Killed, "player", "CBasePlayer__Killed_Post", .Post = true );

    g_iMaxClients = get_maxplayers( );
}


public Event__Round_Start( )
{
    new iCell;

    for( iCell = 1; iCell <= g_iMaxClients; iCell++ )
    {
        if( !is_user_connected( iCell ) )
        {
            continue;
        }

        remove_task( iCell );
    }

    g_flBlockSpawn = get_gametime( ) + 15;
}

public CBasePlayer__Spawn_Post( pPlayer )
{
    if( !is_user_alive( pPlayer ) || g_flBlockSpawn >= get_gametime( ) )
    {
        return HAM_IGNORED;
    }

    switch( cs_get_user_team( pPlayer ) )
    {
        case CS_TEAM_T: UTIL_StripWeapon( pPlayer, "weapon_glock18" );
        case CS_TEAM_CT: UTIL_StripWeapon( pPlayer, "weapon_usp" );
    }

    return HAM_IGNORED;
}

public CBasePlayer__Killed_Post( pVictim )
{
    if( g_flBlockSpawn >= get_gametime( ) )
    {
        return HAM_IGNORED;
    }

    set_task( 5.0, "Ctask__Spawn", pVictim );

    return HAM_IGNORED;
}

public Ctask__Spawn( pVictim )
{
    ExecuteHam( Ham_CS_RoundRespawn, pVictim );
}

UTIL_StripWeapon( pPlayer, sWeapon[ ] )
{
    if( !equal( sWeapon,"weapon_", 7 ) )
    {
        return 0;
    }

    new pWeapon = get_weaponid( sWeapon );

    if( !pWeapon )
    {
        return 0;
    }

    new pEntity;

    while( ( pEntity = engfunc( EngFunc_FindEntityByString, pEntity, "classname", sWeapon ) ) && pev( pEntity, pev_owner ) != pPlayer ) { }

    if( !pEntity )
    {
        return 0;
    }

    if( get_user_weapon( pPlayer ) == pWeapon )
    {
        ExecuteHamB( Ham_Weapon_RetireWeapon, pEntity );
    }

    if( !ExecuteHamB( Ham_RemovePlayerItem, pPlayer, pEntity ) )
    {
        return 0;
    }

    ExecuteHamB( Ham_Item_Kill, pEntity );

    set_pev( pPlayer, pev_weapons,pev( pPlayer, pev_weapons ) & ~(1<<pWeapon ) );

    return 1;
}


Отредактировал: Andrei, - 12.3.2013, 18:19
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 12.3.2013, 18:20
Сообщение #10


Стаж: 16 лет

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

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