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

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

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

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

name1[32], name2[32]

[РЕШЕНО]
Статус пользователя Slavik
сообщение 29.6.2019, 17:21
Сообщение #1


Стаж: 12 лет

Сообщений: 185
Благодарностей: 13
Полезность: < 0

ColorChat(0,"!g*!t %s !yпопал мячом в !t%s", name1, name2)

Привет, проблема в том что, не отображается ник, того кто попал, а в кого попал, показывает, то есть в игре так видно:
* попал мячом в PLAYER2 , а после звездочки нету PLAYER1

Код:
		new i, name1[32], name2[32]

for(i=0; i<=32; i++)
if(szPlayerBall[i] == szBall)

get_user_name(i, name1, charsmax(name1))
get_user_name(id, name2, charsmax(name2))
ColorChat(0,"!g*!t %s !yпопал мячом в !t%s", name1, name2)


Ниже прикрепил исходник, 401 строчка.
Прикрепленные файлы:
Прикрепленный файл  jb_killball.sma ( 15,64 килобайт ) Кол-во скачиваний: 13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя denzeroff
сообщение 29.6.2019, 17:32
Сообщение #2
Стаж: 9 лет 8 месяцев

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

Код:
			new iPlayers[MAX_PLAYERS], iNum, name1[32], name2[32]

for(new i; i < iNum; i++)
{
new iPlayer = iPlayers[i];
if(szPlayerBall[iPlayer] == szBall)
{
get_user_name(iPlayer, name1, charsmax(name1));
break;
}
}
get_user_name(id, name2, charsmax(name2))
ColorChat(0,"!g*!t %s !yпопал мячом в !t%s", name1, name2)


Отредактировал: denzeroff, - 29.6.2019, 17:33
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Slavik
сообщение 29.6.2019, 17:48
Сообщение #3


Стаж: 12 лет

Сообщений: 185
Благодарностей: 13
Полезность: < 0

denzeroff,

Не работает, так же как у меня происходит, проверил 2 раза..
new iPlayers[MAX_PLAYERS], iNum, name1[32], name2[32]
переделал MAX_PLAYERS на 32, но врядли это из-за этого, Ошибку выдавал и не компилировал прост
new iPlayers[32], iNum, name1[32], name2[32]
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 29.6.2019, 19:32
Сообщение #4


Стаж: 9 лет 9 месяцев

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

какая версия amxmodx?

если 1.8.3, пробуй

Cкрытый текст
Код:
			new iPlayer;

for(new i = 1; i <= MaxClients; i++) {
if(szPlayerBall[i] == szBall)
iPlayer = i;
}

client_print_color(0, 0, "^4*^3 %n ^1попал мячом в ^3%n", iPlayer, id);
user_kill(id);


код не чекал, но мне кажется дело не в этих строках. в общем, решим.

Отредактировал: mOdest, - 29.6.2019, 19:37
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 29.6.2019, 19:41
Сообщение #5


Стаж: 9 лет 9 месяцев

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

denzeroff, зачем создавать глобальную переменную? че за бред ты высрал, парень?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 29.6.2019, 19:46
Сообщение #6
Стаж: 15 лет

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

public TouchBall(szBall, id)
{
if(!is_user_connected(id) || !is_user_alive(id))
return PLUGIN_CONTINUE

зачем тут коннект ? Как не подконнекченный игрок может тачиться об объект ? К тому же, проверка на коннект уже встроена в сам натив is_user_alive

Зачем дважды в таче (а это очень прожорливая функция), дергать нативу get_user_team....

Почему szBall ? sz - это обозначение массива.

Если вы собрались брать данные с "i" вне цикла, то сам цикл надо обязательно остановить при срабатывании условия. В итоге у вас цикл долитает до 32го ID и данные берутся именно с него.

Код
    for(i=0; i<=32; i++)
    {
        if(szPlayerBall[i] == szBall)
            break;
    }


Отредактировал: SISA, - 29.6.2019, 19:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 29.6.2019, 20:06
Сообщение #7
Стаж: 9 лет 8 месяцев

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

Цитата(mOdest @ 29.6.2019, 23:41) *
denzeroff, зачем создавать глобальную переменную? че за бред ты высрал, парень?

где ты видишь глобальную переменную? Это кусок кода чтоб вставить в функцию, не высирай ничего плиз.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 29.6.2019, 20:12
Сообщение #8


Стаж: 9 лет 9 месяцев

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

пока не занят, набросал код по рекомендациям SISA. также внёс свои правки, дерзай.

Cкрытый текст
Код:
public TouchBall(Ball, id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE

if(get_user_team(id) == 2)
{
if(!szPlayerBall[id])
{
if(Ball == (szPlayerBallCheck[id] - id))
{
szPlayerBall[id] = Ball
entity_set_int(Ball, EV_INT_iuser1, id)
}
}
else
entity_set_int(szPlayerBall[id], EV_INT_iuser1, id)
}
else
{
if(g_Run)
{
new iPlayer;

for(new i = 1; i <= MaxClients; i++)
{
if(szPlayerBall[i] == Ball)
{
client_print_color(0, 0, "^4*^3 %n ^1попал мячом в ^3%n", i, id);
user_kill(id);
break;
}
}
}


new szOrigin[3]
get_user_origin(id, szOrigin, 0)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_LAVASPLASH)
write_coord(szOrigin[0])
write_coord(szOrigin[1])
write_coord(szOrigin[2])
message_end()
}
return PLUGIN_HANDLED
}


Отредактировал: mOdest, - 29.6.2019, 20:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 29.6.2019, 20:13
Сообщение #9
Стаж: 9 лет 8 месяцев

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

mOdest, опять хрень высрал с циклом, говорю же, не пиши лучше
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 29.6.2019, 20:15
Сообщение #10


Стаж: 9 лет 9 месяцев

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

Цитата(denzeroff @ 29.6.2019, 21:13) *
mOdest, опять хрень высрал с циклом, говорю же, не пиши лучше

ты че, обиженный?

amxmodx 183

Cкрытый текст
Код:
public TouchBall(Ball, id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE

if(get_user_team(id) == 2)
{
if(!szPlayerBall[id])
{
if(Ball == (szPlayerBallCheck[id] - id))
{
szPlayerBall[id] = Ball
entity_set_int(Ball, EV_INT_iuser1, id)
}
}
else
entity_set_int(szPlayerBall[id], EV_INT_iuser1, id)
}
else
{
if(g_Run)
{
for(new i = 1; i <= MaxClients; i++)
{
if(szPlayerBall[i] == Ball)
{
client_print_color(0, 0, "^4*^3 %n ^1попал мячом в ^3%n", i, id);
user_kill(id);
break;
}
}
}


new szOrigin[3]
get_user_origin(id, szOrigin, 0)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_LAVASPLASH)
write_coord(szOrigin[0])
write_coord(szOrigin[1])
write_coord(szOrigin[2])
message_end()
}
return PLUGIN_HANDLED
}


amxmodx 182

Cкрытый текст
Код:
public TouchBall(Ball, id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE

if(get_user_team(id) == 2)
{
if(!szPlayerBall[id])
{
if(Ball == (szPlayerBallCheck[id] - id))
{
szPlayerBall[id] = Ball
entity_set_int(Ball, EV_INT_iuser1, id)
}
}
else
entity_set_int(szPlayerBall[id], EV_INT_iuser1, id)
}
else
{
if(g_Run)
{
new name1[32], name2[32];

for(new i = 1; i <= 32; i++)
{
if(szPlayerBall[i] == Ball)
{
get_user_name(i, name1, charsmax(name1));
get_user_name(id, name2, charsmax(name1));
client_print_color(0, 0, "^4*^3 %s ^1попал мячом в ^3%s", name1, name2);
user_kill(id);
break;
}
}
}


new szOrigin[3]
get_user_origin(id, szOrigin, 0)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_LAVASPLASH)
write_coord(szOrigin[0])
write_coord(szOrigin[1])
write_coord(szOrigin[2])
message_end()
}
return PLUGIN_HANDLED
}


Отредактировал: mOdest, - 29.6.2019, 20:20
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Slavik
сообщение 29.6.2019, 21:14
Сообщение #11


Стаж: 12 лет

Сообщений: 185
Благодарностей: 13
Полезность: < 0

mOdest, не работает, показывает что я пнул сам в себя мяч в чате)) (1.8.2 amxmod)

* PLAYER1 попал мячом в PLAYER1

Это закомментировал , а то вообще не убивал и не писало нечего, просто мяч ударялся об игрока и отлетал назад, а в чате пусто было))
// if(szPlayerBall[i] == Ball)
// {
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 29.6.2019, 21:28
Сообщение #12


Стаж: 9 лет 9 месяцев

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

Slavik, интересно. ну вынеси эти строки за цикл, создай переменную, в неё запиши айди из цикла, а потом получай имя и убивай id
проверишь, отпиши
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slavik
сообщение 29.6.2019, 21:44
Сообщение #13


Стаж: 12 лет

Сообщений: 185
Благодарностей: 13
Полезность: < 0

Цитата(mOdest @ 29.6.2019, 22:28) *
Slavik, интересно. ну вынеси эти строки за цикл, создай переменную, в неё запиши айди из цикла, а потом получай имя и убивай id
проверишь, отпиши

Офигеть заработало))



Код:
new name1[32], name2[32];

// тут вместо i = 1, сделал i = 0
for(new i = 0; i <= 32; i++)
{
if(szPlayerBall == Ball)
{
get_user_name(i, name1, charsmax(name1));

//тут вместо (name1) Сделал (name2)
get_user_name(id, name2, charsmax(name2));
ColorChat(0,"!g*!t %s !yпопал мячом в !t%s", name1, name2)
user_kill(id);
break;
}


Отредактировал: Slavik, - 29.6.2019, 21:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 29.6.2019, 22:23
Сообщение #14


Стаж: 9 лет 9 месяцев

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

Slavik, славно. тогда лучше for(new i; ...), ибо при объявлении она всё равно ровняется 0. с нейм1 / нейм2 я ошибся, не смотрел код, так что ты молодец.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя 3BEPb
сообщение 4.7.2019, 0:56
Сообщение #15
Стаж: 11 лет

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

Slavik,
Код
// тут вместо i = 1, сделал i = 0
for(new i = 0; i <= 32; i++)

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