Русское сообщество по скриптингу

Spectlist / Вопрос не решен =(

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Spectlist / Вопрос не решен =(

Сообщение DeIIyTaT » 18 апр 2019, 19:14

Как сделать так чтобы когда Я был живой и за мной наблюдают что бы у меня показывалось только кто за мной наблюдает а не вся инфа ?
Сейчас мне выводит это :
Код: Выделить всё

format
(szHud, 245, "Игрок: %s^nДеньги: $%d | Жизни: %d^nПинг: %i | FPS: %i | Броня: %d^nУровень: %d | Кредиты: %d^n^nНаблюдают:^n", szName, cs_get_user_money(alive), get_user_health(alive), ping, get_user_fps(alive), get_user_armor(alive),rpg_get_lvl(alive), rpg_get_credits(alive));

А нужно если за мной наблюдают мне показывалось только кто наблюдает без инфы, а наблюдателям показывалась полностью инфа и кто еще наблюдает тоесть что написано выше
Код: Выделить всё

format
(szHud, 245, "Наблюдают:^n");


Исходник
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <rpgmod>
#include <engine>

#pragma semicolon 1

#define RED 64
#define GREEN 64
#define BLUE 64
#define UPDATEINTERVAL 0.1

// Comment below if you do not want /speclist showing up on chat
#define ECHOCMD

// Admin flag used for immunity
#define FLAG ADMIN_CFG 

new const PLUGIN[] = "SpecList";
new const VERSION[] = "1.6";
new const AUTHOR[] = "DeIIyTaT";

new gMaxPlayers;
new gCvarOn;
new bool:gOnOff[33] = { true, ... };
new g_fps[33][11]; 
new g_i
[33]; 

public plugin_init
()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_cvar
(PLUGIN, VERSION, FCVAR_SERVER, 0.0);
    gCvarOn = register_cvar("amx_speclist", "1", 0, 0.0);
    
    register_clcmd
("speclist", "cmdSpecList", -1, "");
    
    gMaxPlayers 
= get_maxplayers();
    
    set_task
(UPDATEINTERVAL, "tskShowSpec", 123094, "", 0, "b", 0);
}

public cmdSpecList(id)
{
    if( gOnOff[id] )
    {
        Color_Print(id, "!y[!gНаблюдатели!y] !yСписок наблюдателей !tВыключен");
        gOnOff[id] = false;
    }
    else
    
{
        Color_Print(id, "!y[!gНаблюдатели!y] !yСписок наблюдателей !tВключен");
        gOnOff[id] = true;
    }
    
    
#if defined ECHOCMD
    return PLUGIN_CONTINUE;
    #else
    return PLUGIN_HANDLED;
    #endif
}

public tskShowSpec(id)
{
    if( !get_pcvar_num(gCvarOn) )
    {
        return PLUGIN_CONTINUE;
    }
    
    static szHud
[1102];//32*33+45
    static szName[34];
    static bool:send;
    
    
// FRUITLOOOOOOOOOOOOPS!
    for( new alive = 1; alive <= gMaxPlayers; alive++ )
    {
        new bool:sendTo[33];
        send = false;
        
        if
( !is_user_alive(alive) )
        {
            continue;
        }
        new ping,loss;
        sendTo[alive] = true;
        get_user_ping(alive, ping, loss); 
        get_user_name
(alive, szName, 32);
        format(szHud, 245, "Игрок: %s^nДеньги: $%d | Жизни: %d^nПинг: %i | FPS: %i | Броня: %d^nУровень: %d | Кредиты: %d^n^nНаблюдают:^n", szName, cs_get_user_money(alive), get_user_health(alive), ping, get_user_fps(alive), get_user_armor(alive),rpg_get_lvl(alive), rpg_get_credits(alive));
        
        for
( new dead = 1; dead <= gMaxPlayers; dead++ )
        {
            if( is_user_connected(dead) )
            {
                if( is_user_alive(dead) || is_user_bot(dead) )
                {
                    continue;
                }
                
                if
( pev(dead, pev_iuser2) == alive )
                {
                    if(get_user_flags(id) & ADMIN_CFG)
                    {
                        get_user_name(dead, szName, 32);
                        add(szName, 33, "^n", 0);
                        add(szHud, 1101, szName, 0);
                        send = true;
                    }

                    sendTo[dead] = true;
                    
                
}
            }
        }
        
        if
( send == true )
        {
            for( new i = 1; i <= gMaxPlayers; i++ )
            {
                if( sendTo[i] == true
                        
&& gOnOff[i] == true )
                {
                    set_hudmessage(0, 255, 0, 0.75, 0.15, 0, 0.0, 1.0, 0.0, 0.0, -1);
                
                    show_hudmessage
(i, szHud);
                }
            }
        }
    }
    
    return PLUGIN_CONTINUE
;
}

public client_PreThink(id)
g_fps[id][10]++; 

public client_putinserver
(id) 
set_task
(0.1, "count", id, "", 0, "b"); 

public count
(id) { 

    if 
( g_i[id] < 9 )
    g_i[id]++; 
    else
    g_i
[id] = 0; 
    
    g_fps
[id][g_i[id]] = g_fps[id][10]; 
    g_fps
[id][10] = 0; 
} 

get_user_fps
(id)  
{ 
    new i
; 
    new j 
= 0; 
    
    for 
( i = 0; i < 9; i++ ) 
    j 
+= g_fps[id][i]; 
    
    return j 
- 5; 
}

public client_connect(id)
{
    gOnOff[id] = true;
}

public client_disconnect(id)
{
    gOnOff[id] = true;
}

stock Color_Print(const id, const input[], any:...)
{
    new iCount = 1, iPlayers[32];

    static szMsg[191];
    vformat(szMsg, charsmax(szMsg), input, 3);

    replace_all(szMsg, 190, "!g", "^4");
    replace_all(szMsg, 190, "!y", "^1");
    replace_all(szMsg, 190, "!t", "^3");
    replace_all(szMsg, 190, "/w", "^0");

    if(id) iPlayers[0] = id;
    else get_players(iPlayers, iCount, "ch");

    for (new i = 0; i < iCount; i++)
    {
        if (is_user_connected(iPlayers[i]))
        {
            message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
            write_byte(iPlayers[i]);
            write_string(szMsg);
            message_end();
        }
    }
}
Мой проект CSSURF.RU | SURF Сервера с RPG
amx-x.ru - Вы красавчики спасибо что вы есть ! :thumbs_up
Аватара пользователя
DeIIyTaT
 
Сообщения: 66
Зарегистрирован: 29 авг 2014, 13:53
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
html,php

Re: Spectlist / Вопрос не решен =(

Сообщение DrScarii » 22 апр 2019, 20:49

Добрый День. В данном месте , у вас происходит заполнение массива szHUD(Точнее дозаполнение) , никами наблюдателей.
Код: Выделить всё
if(get_user_flags(id) & ADMIN_CFG)
                    {
                        get_user_name(dead, szName, 32);
                        add(szName, 33, "^n", 0);
                        add(szHud, 1101, szName, 0);
                        send = true;
                    }


Из-за чего, всё что вам необходимо это убрать из этой строчки:

Код: Выделить всё

format
(szHud, 245, "Игрок: %s^nДеньги: $%d | Жизни: %d^nПинг: %i | FPS: %i | Броня: %d^nУровень: %d | Кредиты: %d^n^nНаблюдают:^n", szName, cs_get_user_money(alive), get_user_health(alive), ping, get_user_fps(alive), get_user_armor(alive),rpg_get_lvl(alive), rpg_get_credits(alive));


Абсолютно всё, и оставить только << Наблюдают:^n >>.
Данное решение будет для всех, если же нужно разделение, то просто перед format... сделать проверку на жив ли игрок(is_user_alive). Удачи!
Я сделаю всё, если мне это нравится.
Аватара пользователя
DrScarii
 
Сообщения: 4
Зарегистрирован: 11 апр 2019, 15:36
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года

Re: Spectlist / Вопрос не решен =(

Сообщение DeIIyTaT » 26 апр 2019, 23:57

Благодарю за ответ !

Добавлено спустя 37 минут 51 секунду:
если я делаю проверку
Код: Выделить всё
        if(is_user_alive(id)){
            
format(szHud245"Наблюдают:^n");
        }
        if(!
is_user_alive(id)){
            
format(szHud245"Игрок: %s^nДеньги: $%d | Жизни: %d^nПинг: %i | FPS: %i | Броня: %d^nУровень: %d | Кредиты: %d^n^nНаблюдают:^n"szNamecs_get_user_money(alive), get_user_health(alive), pingget_user_fps(alive), get_user_armor(alive),rpg_get_lvl(alive), rpg_get_credits(alive));
        } 

то почему то всё равно мне выводит если я живой
Код: Выделить всё

        
if(!is_user_alive(id)){
            
format(szHud245"Игрок: %s^nДеньги: $%d | Жизни: %d^nПинг: %i | FPS: %i | Броня: %d^nУровень: %d | Кредиты: %d^n^nНаблюдают:^n"szNamecs_get_user_money(alive), get_user_health(alive), pingget_user_fps(alive), get_user_armor(alive),rpg_get_lvl(alive), rpg_get_credits(alive));
        }
 


Полный код
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <rpgmod>
#include <engine>

#pragma semicolon 1

#define RED 64
#define GREEN 64
#define BLUE 64
#define UPDATEINTERVAL 0.1

// Comment below if you do not want /speclist showing up on chat
#define ECHOCMD

// Admin flag used for immunity
#define FLAG ADMIN_IMMUNITY

new const PLUGIN[] = "SpecList";
new const 
VERSION[] = "1.6";
new const 
AUTHOR[] = "DeIIyTaT";

new 
gMaxPlayers;
new 
gCvarOn;
new 
gCvarImmunity;
new 
bool:gOnOff[33] = { true, ... };
new 
g_fps[33][11]; 
new 
g_i[33]; 

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_cvar(PLUGINVERSIONFCVAR_SERVER0.0);
    
gCvarOn register_cvar("amx_speclist""1"00.0);
    
gCvarImmunity register_cvar("amx_speclist_immunity""1"00.0);
    
    
register_clcmd("speclist""cmdSpecList", -1"");
    
    
gMaxPlayers get_maxplayers();
    
    
set_task(UPDATEINTERVAL"tskShowSpec"123094""0"b"0);
}

public 
cmdSpecList(id)
{
    if( 
gOnOff[id] )
    {
        
Color_Print(id"!y[!gНаблюдатели!y] !yСписок наблюдателей !tВыключен");
        
gOnOff[id] = false;
    }
    else
    {
        
Color_Print(id"!y[!gНаблюдатели!y] !yСписок наблюдателей !tВключен");
        
gOnOff[id] = true;
    }
    
    
#if defined ECHOCMD
    
return PLUGIN_CONTINUE;
    
#else
    
return PLUGIN_HANDLED;
    
#endif
}

public 
tskShowSpec(id)
{
    if( !
get_pcvar_num(gCvarOn) )
    {
        return 
PLUGIN_CONTINUE;
    }
    
    static 
szHud[1102];//32*33+45
    
static szName[34];
    static 
bool:send;
    
    
// FRUITLOOOOOOOOOOOOPS!
    
for( new alive 1alive <= gMaxPlayersalive++ )
    {
        new 
bool:sendTo[33];
        
send false;
        
        if( !
is_user_alive(alive) )
        {
            continue;
        }
        new 
ping,loss;
        
sendTo[alive] = true;
        
get_user_ping(alivepingloss); 
        
get_user_name(aliveszName32);
        if(
is_user_alive(id)){
            
format(szHud245"Наблюдают:^n");
        }
        if(!
is_user_alive(id)){
            
format(szHud245"Игрок: %s^nДеньги: $%d | Жизни: %d^nПинг: %i | FPS: %i | Броня: %d^nУровень: %d | Кредиты: %d^n^nНаблюдают:^n"szNamecs_get_user_money(alive), get_user_health(alive), pingget_user_fps(alive), get_user_armor(alive),rpg_get_lvl(alive), rpg_get_credits(alive));
        }
        for( new 
dead 1dead <= gMaxPlayersdead++ )
        {
            if( 
is_user_connected(dead) )
            {
                if(
is_user_alive(dead) || is_user_bot(dead) )
                {
                    continue;
                }
                
                if( 
pev(deadpev_iuser2) == alive )
                {
                    if( !(
get_pcvar_num(gCvarImmunity)&&get_user_flags(dead0) & FLAG) )
                    {
                        
get_user_name(deadszName32);
                        
add(szName33"^n"0);
                        
add(szHud1101szName0);
                        
sendTo[alive] = true;
                        
send true;
                    }
                    
sendTo[dead] = true;
                }
            }
        }
        
        if(
send == true )
        {
            for( new 
1<= gMaxPlayersi++ )
            {
                if(
sendTo[i] == true && gOnOff[i] == true )
                {
                    
set_hudmessage(025500.750.1500.0UPDATEINTERVAL 1.00.00.0, -1);
                    
show_hudmessage(iszHud);
                }
            }
        }
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
client_PreThink(id)
g_fps[id][10]++; 

public 
client_putinserver(id
set_task(0.1"count"id""0"b"); 

public 
count(id) { 

    if ( 
g_i[id] < )
    
g_i[id]++; 
    else
    
g_i[id] = 0
    
    
g_fps[id][g_i[id]] = g_fps[id][10]; 
    
g_fps[id][10] = 0


get_user_fps(id)  

    new 
i
    new 
0
    
    for ( 
09i++ ) 
    
+= g_fps[id][i]; 
    
    return 
5
}

public 
client_connect(id)
{
    
gOnOff[id] = true;
}

public 
client_disconnect(id)
{
    
gOnOff[id] = true;
}

stock Color_Print(const id, const input[], any:...)
{
    new 
iCount 1iPlayers[32];

    static 
szMsg[191];
    
vformat(szMsgcharsmax(szMsg), input3);

    
replace_all(szMsg190"!g""^4");
    
replace_all(szMsg190"!y""^1");
    
replace_all(szMsg190"!t""^3");
    
replace_all(szMsg190"/w""^0");

    if(
idiPlayers[0] = id;
    else 
get_players(iPlayersiCount"ch");

    for (new 
0iCounti++)
    {
        if (
is_user_connected(iPlayers[i]))
        {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _iPlayers[i]);
            
write_byte(iPlayers[i]);
            
write_string(szMsg);
            
message_end();
        }
    }
}
 
Мой проект CSSURF.RU | SURF Сервера с RPG
amx-x.ru - Вы красавчики спасибо что вы есть ! :thumbs_up
Аватара пользователя
DeIIyTaT
 
Сообщения: 66
Зарегистрирован: 29 авг 2014, 13:53
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
html,php

Re: Spectlist / Вопрос не решен =(

Сообщение xbass13 » 27 апр 2019, 11:30

id - это номер таска == 123094, поэтому условие !is_user_alive(id) всегда true.
Разберитесь что в tskShowSpec(id) вообще происходит, не пытайтесь впихнуть куда попало нужные вам условия
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8