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

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

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

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

2 страниц V   1 2

Почему не компилится

progamer
сообщение 27.4.2015, 10:50
Сообщение #1
Стаж: 11 лет

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

Прошу помочь объяснить в чем проблема. Я в скриптинге начинающий.

Создаю массив имен.
new const g_NewName[][] =
{
"Gamer",
"Gamer1",
"Gamer2"
}

Создаю переменную
new gamer_new_nick[32];

и хочу в переменную gamer_new_nick записать рандомный ник с массива g_NewName
gamer_new_nick = g_NewName[random(sizeof g_NewName)];

И вот эта строчка не компилится. Что я сделал не так??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя simba
сообщение 27.4.2015, 11:10
Сообщение #2
Стаж: 11 лет

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

напиши какую ошибку выдает компилятор
да и так по-моему c sizeof ты намудрил
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 27.4.2015, 11:23
Сообщение #3
Иконка группы

Стаж: 19 лет

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

new const g_NewName[][]

>>>

new const g_NewName[][32]


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 27.4.2015, 11:45
Сообщение #4
Стаж: 11 лет

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

Цитата(simba @ 27.4.2015, 11:10) *
напиши какую ошибку выдает компилятор
да и так по-моему c sizeof ты намудрил

Выдаёт ошибку
changer_v3.sma(36) : error 047: array sizes do not match, or destination array is too small
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 27.4.2015, 12:09
Сообщение #5
Стаж: 11 лет

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

Цитата(progamer @ 27.4.2015, 12:45) *
Выдаёт ошибку
changer_v3.sma(36) : error 047: array sizes do not match, or destination array is too small

Полный код выложить не судьба?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 27.4.2015, 12:14
Сообщение #6
Стаж: 11 лет

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

Разобрался, иллюзион был прав.
Теперь другая проблема, почему по
client_cmd(id, "name ^"%s^"", gamer_new_nick);
у клиента не меняется ник???
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 27.4.2015, 12:26
Сообщение #7


Иконка группы

Стаж: 13 лет

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

потому что на клиентах защита от client_cmd
set_info юзать надо
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 27.4.2015, 12:35
Сообщение #8
Стаж: 11 лет

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

Код:
#include < amxmodx >

new const names [ ][ ] =
{
"Username",
"Username 1",
"Username 2",
"Username 3"
}

public plugin_init ( )
{
register_plugin ( "Random Name", "1.0", "OverGame" )
}

public client_connected ( id )
{
new num = random_num ( 0, sizeof ( names ) )
set_user_info ( id, "name", names [ num ] )
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 27.4.2015, 12:46
Сообщение #9


Иконка группы

Стаж: 13 лет

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

OverGame, sizeof от нуля будешь брать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 27.4.2015, 12:57
Сообщение #10
Стаж: 11 лет

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

Цитата(GOOD FELLOW @ 27.4.2015, 13:46) *
OverGame, sizeof от нуля будешь брать?

sizeof возвращает кол-во строк.
В рандоме выходит от 0 до n, n - sizeof (который считывает строки с names).
Что тут трудного?

Отредактировал: OverGame, - 27.4.2015, 12:59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 27.4.2015, 13:21
Сообщение #11
Стаж: 11 лет

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

Цитата(GOOD FELLOW @ 27.4.2015, 13:26) *
потому что на клиентах защита от client_cmd
set_info юзать надо

Клиент без протектора, должно менять, наверно я не правильно использую команду client_cmd
set_info не меняет ник в клиенте, он меняет только отображение на сервере.
Через команду amx_nick ник меняется без проблем. Я посмотрел как это реализовано в плагине admincmd.sma
Код:

public cmdNick(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED

new arg1[32], arg2[32], authid[32], name[32], authid2[32], name2[32]

read_argv(1, arg1, 31)
read_argv(2, arg2, 31)

new player = cmd_target(id, arg1, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF)

if (!player)
return PLUGIN_HANDLED

get_user_authid(id, authid, 31)
get_user_name(id, name, 31)
get_user_authid(player, authid2, 31)
get_user_name(player, name2, 31)

client_cmd(player, "name ^"%s^"", arg2)
log_amx("Cmd: ^"%s<%d><%s><>^" change nick to ^"%s^" ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, arg2, name2, get_user_userid(player), authid2)
show_activity_key("ADMIN_NICK_1", "ADMIN_NICK_2", name, name2, arg2);
console_print(id, "[AMXX] %L", id, "CHANGED_NICK", name2, arg2)
return PLUGIN_HANDLED
}


Я так понимаю вся фишка в строчке client_cmd(player, "name ^"%s^"", arg2)

Зачем нужны функции
new player = cmd_target(id, arg1, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF)
и
show_activity_key("ADMIN_NICK_1", "ADMIN_NICK_2", name, name2, arg2);

Достаточно ли клиенту оправить client_cmd(id, "name ^"New_Nick^"") и ник изменится или нужны какие-то дополнительные команды??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 27.4.2015, 14:06
Сообщение #12
Иконка группы

Стаж: 19 лет

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

Цитата(OverGame @ 27.4.2015, 13:57) *
sizeof возвращает кол-во строк.
В рандоме выходит от 0 до n, n - sizeof (который считывает строки с names).
Что тут трудного?

В твоем случае будет рандом из чисел 0-4, а должно быть 0-3.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 27.4.2015, 14:19
Сообщение #13
Стаж: 11 лет

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

================================================================================
================
Следульщий вопрос!

Прошу помощи у специалистов.
Написал такой маленький плагин, который должен при входе игрока на сервер, проверять его имя
и если он не админ (нету флага ADMIN_KICK) и его имя "Player", то изменить ему имя на "Gamer 1" или "Gamer 2" или "Gamer 3".
Дальше пишется в лог players_new_nick.log новое имя игрока.

Протекторов и прочих защит нет, через админ функцию amx_nick "Player" "Gamer 1" ник меняется без проблем!

В плагине работает почти всё, имя "Player" определяется, в лог пишется факт смены ника, но в самом клиенте ник не меняется,
вроде бы проблема в функции client_cmd(id, "name ^"%s^"", gamer_new_nick);
Она не правильно выполняется или нужно ещё дополнительно что-то прописать, чтобы она выполнялась??


Код:

#include <amxmodx>
#include <amxmisc>

new const g_NewName[][32] =
{
"Gamer 1",
"Gamer 2",
"Gamer 3"
}

public plugin_init()
{
register_plugin("GamerName", "1.0", "Work");
}

public client_putinserver(id)
{
change_yourname(id);
}

public change_yourname(id)
{
new oldname[32];
new gamer_new_nick[32];

get_user_info( id, "name", oldname, charsmax(oldname) );

if(get_user_flags(id) & ADMIN_KICK)
return PLUGIN_HANDLED;

if(containi("Player", oldname) != -1)
{
gamer_new_nick = g_NewName[random(sizeof g_NewName)];
client_cmd(id, "name ^"%s^"", gamer_new_nick);

log_to_file("players_new_nick.log", "%s", gamer_new_nick);
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 27.4.2015, 14:24
Сообщение #14
Стаж: 13 лет

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

Цитата(progamer @ 27.4.2015, 14:21) *
set_info не меняет ник в клиенте, он меняет только отображение на сервере.

И это плохо что ли?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
OverGame
сообщение 27.4.2015, 14:44
Сообщение #15
Стаж: 11 лет

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

Цитата(iLLuSioN @ 27.4.2015, 14:06) *
В твоем случае будет рандом из чисел 0-4, а должно быть 0-3.

Код:
sizeof ( names )  - 1

тяжело?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 27.4.2015, 15:15
Сообщение #16
Стаж: 11 лет

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

Цитата([WPMG]PRoSToTeM@ @ 27.4.2015, 15:24) *

И это плохо что ли?


Это плохо. Так как половина игроков на сервер заходит с моей сборки, а там дефолтный ник Player.
В итоге на сервере (1)Player, (2)Player, (3)Player и так далее...
Приходится вручную заходить и править через
amx_nick "Player" "New Nick"
Вот и нашкрябал плагин который хоть как-то должен поменять ники.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 27.4.2015, 15:16
Сообщение #17
Стаж: 13 лет

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

progamer, дык для твоей цели достаточно set_user_info, зачем игроку name на клиенте менять? Это ему решать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 27.4.2015, 15:18
Сообщение #18
Стаж: 11 лет

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

в инете нашёл ещё такую функцию, тока не пойму как её прикрутить
server_cmd("amx_nick #%d ^"%s^"", get_user_userid(id), hold_name[id]);
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 27.4.2015, 15:27
Сообщение #19
Стаж: 11 лет

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

Цитата(progamer @ 27.4.2015, 16:18) *
в инете нашёл ещё такую функцию, тока не пойму как её прикрутить
server_cmd("amx_nick #%d ^"%s^"", get_user_userid(id), hold_name[id]);


Код:
#include < amxmodx >

new const names [ ][ ] =
{
"Username",
"Username 1",
"Username 2",
"Username 3"
}

public plugin_init ( )
{
register_plugin ( "Random Name", "1.0", "OverGame" )
}

public client_putinserver ( id )
{
new num = random_num ( 0, sizeof ( names ) - 1 )
server_cmd ( "amx_nick #%d ^"%s^"", id, names [ num ] )
}


Отредактировал: OverGame, - 27.4.2015, 15:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 27.4.2015, 16:03
Сообщение #20
Стаж: 11 лет

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

Цитата(OverGame @ 27.4.2015, 15:27) *
Код:
#include < amxmodx >

new const names [ ][ ] =
{
"Username",
"Username 1",
"Username 2",
"Username 3"
}

public plugin_init ( )
{
register_plugin ( "Random Name", "1.0", "OverGame" )
}

public client_putinserver ( id )
{
new num = random_num ( 0, sizeof ( names ) - 1 )
server_cmd ( "amx_nick #%d ^"%s^"", id, names [ num ] )
}


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