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

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

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

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

Переход в спектаторы и обратно

, помогите решить баг
Статус пользователя YrkinSon
сообщение 29.4.2015, 8:41
Сообщение #1
Стаж: 12 лет
Город: Новосибирск

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

Уважаемые скриптеры помогите пожалуйста разобраться в чем баг
Вот захожу я на сервер (ДМ) выбрал команду реснулся играю играю решил отойти перехожу в спектора с помощью паблика spec, все хорошо закинуло в спектора, возвращаюсь в игру с помощью паблика back, все возрождает все работает все отлично, но если при конекте на сервер не сразу зайти в игру а сначала в спектора, а только потом зайти в игру, при респавне пропадает прицел хп и патроны (в смысле отображение) подскажите пожалуйста как исправить этот баг?
Код
public spec(id)
{
    if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
    return PLUGIN_HANDLED
    else
    if(get_user_team(id) == 0)
    cs_set_user_team(id, CS_TEAM_SPECTATOR)
    else
    {
        zTeam[id] = get_user_team(id)
        if(is_user_alive(id))
        user_kill(id, 1)
        cs_set_user_team(id, CS_TEAM_SPECTATOR)
    }
    return PLUGIN_CONTINUE
}

public back(id)
{
    if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
    {
        if(zTeam[id] == 0)
        {
            new Random = random_num(1, 2)
            cs_set_user_team(id, Random == 1 ? CS_TEAM_CT : CS_TEAM_T)
        }
        else
        {
            cs_set_user_team(id, zTeam[id] == 1 ? CS_TEAM_T : CS_TEAM_CT)
            zTeam[id] = 0
        }
    }
    set_task(1.5,"respawn",id)
}

public respawn(id)
{
    if (is_user_alive(id))
    {
    return PLUGIN_HANDLED
    }
    else
    {
    ExecuteHamB(Ham_CS_RoundRespawn, id)
    if (cs_get_user_team(id) == CS_TEAM_T)
    {
        give_item(id,"weapon_knife")
    }
    if (cs_get_user_team(id) == CS_TEAM_CT)
    {
        give_item(id,"weapon_knife")
    }
}
    return PLUGIN_CONTINUE
}

public client_disconnect(id)
    zTeam[id] = 0
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя csnet
сообщение 29.4.2015, 8:55
Сообщение #2
Стаж: 12 лет

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

куча if ..еле осилил . switch используй.


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Denger167
сообщение 29.4.2015, 9:00
Сообщение #3


Стаж: 12 лет
Город: Магнитогорск

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

Пробуй - все работает отлично - сам пользуюсь!

Код:
#include < amxmodx >
#include < cstrike >
#include < csdm >

#define BALANCE_IMMUNITY ADMIN_IMMUNITY

/*
csdm_auto_balance
- 0: Disabled
- 1: Enabled
- 2: Enabled, obey immunity
*/

new bool:g_bConnected[ 33 ], bool:g_bImmunity[ 33 ], CsTeams:g_iNewTeam[ 33 ];
new g_pCvar, g_iMaxPlayers, g_iMsgSayText, g_iMsgScreenFade, g_iPlayers;

public plugin_init( ) {
register_plugin( "CSDM Auto Balance", "1.0", "xPaw" );

g_pCvar = register_cvar( "csdm_auto_balance", "2" );

g_iMsgScreenFade = get_user_msgid( "ScreenFade" );
g_iMsgSayText = get_user_msgid( "SayText" );
g_iMaxPlayers = get_maxplayers( );
}

public client_authorized( id )
g_bImmunity[ id ] = bool:( get_user_flags( id ) & BALANCE_IMMUNITY );

public client_putinserver( id ) {
g_bConnected[ id ] = true; // bool:!is_user_bot( id );
g_iPlayers++;
}

public client_disconnect( id ) {
g_iNewTeam[ id ] = CS_TEAM_UNASSIGNED;
g_bImmunity[ id ] = false;
g_bConnected[ id ] = false;
g_iPlayers--;
}

public csdm_PostDeath( iKiller, id, bHeadShot, const szWeapon[ ] ) {
if( g_iPlayers < 4 || iKiller == id || !g_bConnected[ id ] )
return;

new iCvar = get_pcvar_num( g_pCvar );

if( iCvar <= 0 || iCvar == 2 && g_bImmunity[ id ] )
return;

new iPlayers[ 2 ];

for( new i = 1; i <= g_iMaxPlayers; i++ ) {
if( !g_bConnected[ i ] )
continue;

switch( cs_get_user_team( i ) ) {
case CS_TEAM_T: iPlayers[ 0 ]++;
case CS_TEAM_CT: iPlayers[ 1 ]++;
}
}

new CsTeams:iCheck, iDifference = iPlayers[ 1 ] - iPlayers[ 0 ];

if( iDifference > 0 )
iCheck = CS_TEAM_T;
else if( iDifference < 0 )
iCheck = CS_TEAM_CT;
else
return;

if( abs( iDifference ) < 2 || cs_get_user_team( id ) == iCheck )
return;

cs_set_user_team( id, iCheck );

new szName[ 32 ];
get_user_name( id, szName, 31 );

UTIL_GreenPrintAll( id, "^4[Информация]^3 %s^1 перемещен за^3 %s^1.", szName,
iCheck == CS_TEAM_T ? "Terrorists" : "Counter-Terrorists" );

g_iNewTeam[ id ] = iCheck;
}

public csdm_PostSpawn( id, bool:bFake ) {
new CsTeams:iNewTeam = g_iNewTeam[ id ];

if( iNewTeam > CS_TEAM_UNASSIGNED ) {
g_iNewTeam[ id ] = CS_TEAM_UNASSIGNED;

set_hudmessage( 0, 127, 255, 0.42, 0.53, 2, 6.0, 4.0, 0.1, 0.2, -1 );
show_hudmessage( id, "Вас перебросило за %s!", iNewTeam == CS_TEAM_T ? "Terrorists" : "Counter-Terrorists" );

UTIL_ScreenFade( id, iNewTeam == CS_TEAM_T ? 175 : 0, 0, iNewTeam == CS_TEAM_CT ? 175 : 0 );
}
}

UTIL_GreenPrintAll( const iSender, const Message[ ], any:... ) {
new szMessage[ 192 ];
vformat( szMessage, 191, Message, 3 );

message_begin( MSG_BROADCAST, g_iMsgSayText );
write_byte( iSender );
write_string( szMessage );
message_end( );
}

UTIL_ScreenFade( const id, const iRed, const iGreen, const iBlue ) {
message_begin( MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id );
write_short( 2000 );
write_short( 2000 );
write_short( 0 );
write_byte( iRed );
write_byte( iGreen );
write_byte( iBlue );
write_byte( 175 );
message_end( );
}


Отредактировал: Bloo, - 29.4.2015, 10:53
Причина: Выдано устное предупреждение!


Имей смелость иметь свое мнение. Имей мудрость скрывать егo.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя YrkinSon
сообщение 29.4.2015, 9:14
Сообщение #4
Стаж: 12 лет
Город: Новосибирск

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

Цитата(csnet @ 29.4.2015, 9:55) *
куча if ..еле осилил . switch используй.

Можете поподробней рассказать?

Цитата(Denger167 @ 29.4.2015, 10:00) *
Пробуй - все работает отлично - сам пользуюсь!

csdm_auto_balance
#include < amxmodx >
#include < cstrike >
#include < csdm >

#define BALANCE_IMMUNITY ADMIN_IMMUNITY

/*
csdm_auto_balance
- 0: Disabled
- 1: Enabled
- 2: Enabled, obey immunity
*/

new bool:g_bConnected[ 33 ], bool:g_bImmunity[ 33 ], CsTeams:g_iNewTeam[ 33 ];
new g_pCvar, g_iMaxPlayers, g_iMsgSayText, g_iMsgScreenFade, g_iPlayers;

public plugin_init( ) {
register_plugin( "CSDM Auto Balance", "1.0", "xPaw" );

g_pCvar = register_cvar( "csdm_auto_balance", "2" );

g_iMsgScreenFade = get_user_msgid( "ScreenFade" );
g_iMsgSayText = get_user_msgid( "SayText" );
g_iMaxPlayers = get_maxplayers( );
}

public client_authorized( id )
g_bImmunity[ id ] = bool:( get_user_flags( id ) & BALANCE_IMMUNITY );

public client_putinserver( id ) {
g_bConnected[ id ] = true; // bool:!is_user_bot( id );
g_iPlayers++;
}

public client_disconnect( id ) {
g_iNewTeam[ id ] = CS_TEAM_UNASSIGNED;
g_bImmunity[ id ] = false;
g_bConnected[ id ] = false;
g_iPlayers--;
}

public csdm_PostDeath( iKiller, id, bHeadShot, const szWeapon[ ] ) {
if( g_iPlayers < 4 || iKiller == id || !g_bConnected[ id ] )
return;

new iCvar = get_pcvar_num( g_pCvar );

if( iCvar <= 0 || iCvar == 2 && g_bImmunity[ id ] )
return;

new iPlayers[ 2 ];

for( new i = 1; i <= g_iMaxPlayers; i++ ) {
if( !g_bConnected[ i ] )
continue;

switch( cs_get_user_team( i ) ) {
case CS_TEAM_T: iPlayers[ 0 ]++;
case CS_TEAM_CT: iPlayers[ 1 ]++;
}
}

new CsTeams:iCheck, iDifference = iPlayers[ 1 ] - iPlayers[ 0 ];

if( iDifference > 0 )
iCheck = CS_TEAM_T;
else if( iDifference < 0 )
iCheck = CS_TEAM_CT;
else
return;

if( abs( iDifference ) < 2 || cs_get_user_team( id ) == iCheck )
return;

cs_set_user_team( id, iCheck );

new szName[ 32 ];
get_user_name( id, szName, 31 );

UTIL_GreenPrintAll( id, "^4[Информация]^3 %s^1 перемещен за^3 %s^1.", szName,
iCheck == CS_TEAM_T ? "Terrorists" : "Counter-Terrorists" );

g_iNewTeam[ id ] = iCheck;
}

public csdm_PostSpawn( id, bool:bFake ) {
new CsTeams:iNewTeam = g_iNewTeam[ id ];

if( iNewTeam > CS_TEAM_UNASSIGNED ) {
g_iNewTeam[ id ] = CS_TEAM_UNASSIGNED;

set_hudmessage( 0, 127, 255, 0.42, 0.53, 2, 6.0, 4.0, 0.1, 0.2, -1 );
show_hudmessage( id, "Вас перебросило за %s!", iNewTeam == CS_TEAM_T ? "Terrorists" : "Counter-Terrorists" );

UTIL_ScreenFade( id, iNewTeam == CS_TEAM_T ? 175 : 0, 0, iNewTeam == CS_TEAM_CT ? 175 : 0 );
}
}

UTIL_GreenPrintAll( const iSender, const Message[ ], any:... ) {
new szMessage[ 192 ];
vformat( szMessage, 191, Message, 3 );

message_begin( MSG_BROADCAST, g_iMsgSayText );
write_byte( iSender );
write_string( szMessage );
message_end( );
}

UTIL_ScreenFade( const id, const iRed, const iGreen, const iBlue ) {
message_begin( MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id );
write_short( 2000 );
write_short( 2000 );
write_short( 0 );
write_byte( iRed );
write_byte( iGreen );
write_byte( iBlue );
write_byte( 175 );
message_end( );
}

Спасибо, но автобаланс меня не интересует, да и по мне он слишком нагрузку дает так как проверка идет каждого килла а они на ДМ каждую секунду происходят.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Denger167
сообщение 29.4.2015, 9:19
Сообщение #5


Стаж: 12 лет
Город: Магнитогорск

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

Не туда написал про балансер (пардон), вот то что тебе нужно:

Spec_Switch_rus
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN "Spec Switch"
#define VERSION "0.0.3"
#define AUTHOR "many"

new CsTeams:zTeam
new zDeath

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /spec", "spec")
register_clcmd("say_team /spec", "spec")
register_clcmd("say /back", "back")
register_clcmd("say_team /back", "back")
}

public spec(id) {
zDeath = cs_get_user_deaths(id)
if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
return PLUGIN_HANDLED
else
zTeam = cs_get_user_team(id)
cs_set_user_team(id, CS_TEAM_SPECTATOR)
user_kill(id, 1)
return PLUGIN_CONTINUE
}

public back(id) {
if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
cs_set_user_team(id, zTeam)
cs_set_user_deaths(id, zDeath)
set_task(1.5,"respawn",id)
}
public rule(id){
client_print(id,print_chat,"Введите /spec чтобы перейти в Спектаторы")
client_print(id,print_chat,"Введите /back чтобы вернуться в игру")
}

public respawn(id){
if (is_user_alive(id)){
return PLUGIN_HANDLED
}
else{
cs_user_spawn(id)
if (cs_get_user_team(id) == CS_TEAM_T){
give_item(id,"weapon_knife")
give_item(id,"weapon_glock18")
give_item(id,"ammo_9mm")
}
if (cs_get_user_team(id) == CS_TEAM_CT){
give_item(id,"weapon_knife")
give_item(id,"weapon_usp")
give_item(id,"ammo_45acp")
give_item(id,"ammo_45acp")
}
}
return PLUGIN_CONTINUE
}


public client_putinserver(id) {
set_task(20.0,"rule",id)
}


/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang1033\\ b\\ f0\\ fs16 \n\\ par }
*/


Имей смелость иметь свое мнение. Имей мудрость скрывать егo.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя YrkinSon
сообщение 29.4.2015, 9:23
Сообщение #6
Стаж: 12 лет
Город: Новосибирск

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

Цитата(Denger167 @ 29.4.2015, 10:19) *
Не туда написал про балансер (пардон), вот то что тебе нужно:

Spec_Switch_rus
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN "Spec Switch"
#define VERSION "0.0.3"
#define AUTHOR "many"

new CsTeams:zTeam
new zDeath

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /spec", "spec")
register_clcmd("say_team /spec", "spec")
register_clcmd("say /back", "back")
register_clcmd("say_team /back", "back")
}

public spec(id) {
zDeath = cs_get_user_deaths(id)
if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
return PLUGIN_HANDLED
else
zTeam = cs_get_user_team(id)
cs_set_user_team(id, CS_TEAM_SPECTATOR)
user_kill(id, 1)
return PLUGIN_CONTINUE
}

public back(id) {
if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
cs_set_user_team(id, zTeam)
cs_set_user_deaths(id, zDeath)
set_task(1.5,"respawn",id)
}
public rule(id){
client_print(id,print_chat,"Введите /spec чтобы перейти в Спектаторы")
client_print(id,print_chat,"Введите /back чтобы вернуться в игру")
}

public respawn(id){
if (is_user_alive(id)){
return PLUGIN_HANDLED
}
else{
cs_user_spawn(id)
if (cs_get_user_team(id) == CS_TEAM_T){
give_item(id,"weapon_knife")
give_item(id,"weapon_glock18")
give_item(id,"ammo_9mm")
}
if (cs_get_user_team(id) == CS_TEAM_CT){
give_item(id,"weapon_knife")
give_item(id,"weapon_usp")
give_item(id,"ammo_45acp")
give_item(id,"ammo_45acp")
}
}
return PLUGIN_CONTINUE
}


public client_putinserver(id) {
set_task(20.0,"rule",id)
}


/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang1033\\ b\\ f0\\ fs16 \n\\ par }
*/

Попробуй зайти на сервер, зайти в спектора, потом заюзай /back если я не ошибаюсь то когда тебя убьют ты попадешь в спектора.
Как бы из игры в спектора а потом обратно в игру это все работает
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Denger167
сообщение 29.4.2015, 9:27
Сообщение #7


Стаж: 12 лет
Город: Магнитогорск

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

Цитата(YrkinSon @ 29.4.2015, 12:23) *
Попробуй зайти на сервер, зайти в спектора, потом заюзай /back если я не ошибаюсь то когда тебя убьют ты попадешь в спектора.
Как бы из игры в спектора а потом обратно в игру это все работает


У меня на одном из серверов стоит и работает превосходно (DM) сразу в игру заходит! Кинь ip сервера своего зайду гляну!


Имей смелость иметь свое мнение. Имей мудрость скрывать егo.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя YrkinSon
сообщение 29.4.2015, 9:30
Сообщение #8
Стаж: 12 лет
Город: Новосибирск

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

Цитата(Denger167 @ 29.4.2015, 9:27) *
У меня на одном из серверов стоит и работает превосходно (DM) сразу в игру заходит! Кинь ip сервера своего зайду гляну!

Правильно ли ты меня понял? Конектишься на сервер, не надо сразу в игру входить, а сначала в спектора, а только потом с помощью /back попытаться войти в игру, и пусть тебя убьют.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: