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

Как сравнить переменные типа String

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

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

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sp плагина.

Как сравнить переменные типа String

Сообщение 1_fps » 20 окт 2014, 14:24

Подскажите как правильно сделать проверку в данной ситуации:
[pawn]
  1. public Action:ChangeMap(client, args)

  2. {

  3.         new String:SteamIDS[] = {"STEAM_1:1:45926907", "STEAM_1:0:61146158"}

  4.         new String:ClientArgs[64], String:GetSteamID[32]

  5.         GetClientAuthString(client, GetSteamID, sizeof(GetSteamID), true)

  6.         GetCmdArgString(ClientArgs, sizeof(ClientArgs))

  7.         //if(StrEqual(GetSteamID, SteamIDS)) - Компилирует без ошибок, но отказывает в доступе хотя стим ид присутствует в переменной

  8.         if(GetSteamID == SteamIDS) - не компилит ибо я дурак

  9.         {

  10.                 if(ClientArgs[0])

  11.                 {

  12.                         PrintToChat(client, "\x01 \x02Вы не указали карту")

  13.                 }

  14.                 else

  15.                 {

  16.                         ServerCommand("changelevel %s", ClientArgs)

  17.                 }

  18.         }

  19.         else

  20.         {

  21.                 PrintToChat(client, "\x01 \x02У вас нет прав на использование этой команды \n Разрешено только для \x04%s", SteamIDS)

  22.         }

  23. }
[/pawn]
В чем моя ошибка?
и как сделать перенос строки? в amxx делалось \n а тут непереносит(

Добавлено спустя 25 минут 29 секунд:
и как проверить if(ClientArgs[0]) что если ничего не введено
Аватара пользователя
1_fps
 
Сообщения: 35
Зарегистрирован: 22 июн 2013, 19:20
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
Counter-Strike: GO

Re: Как сравнить переменные типа String

Сообщение maks » 20 окт 2014, 20:02

\n прекрасно переносит на новую строку.
Странная конструкция у тебя \x01 \x02
Образец
[pawn]
  1. PrintToChatAll ("\x01 1 .. \x02 2 .. \x03 3 .. \x04 4 .. \x05 5 .. \x06 6 .. \x07 7 .. \x08 8");
[/pawn]



Примерно так. Совместим с соурсмодом 1.6 и 1.7
[pawn]
  1. #pragma semicolon 1

  2. #include <sourcemod>

  3.  

  4. public OnPluginStart()

  5. {

  6.         RegConsoleCmd("sm_changemap", ChangeMap, "");

  7. }

  8.  

  9. public Action:ChangeMap(client, args)

  10. {

  11.         if(client)

  12.         {

  13.                 if(args < 1)

  14.                 {

  15.                         PrintToChat(client, "\x02Вы не указали карту");

  16.                         return Plugin_Handled;

  17.                 }

  18.  

  19.                 decl String:sArgs[64];

  20.                 decl String:Steamid[32];

  21.  

  22.                 GetCmdArg(1, sArgs, sizeof(sArgs));

  23.         #if SOURCEMOD_V_MINOR > 6

  24.                 GetClientAuthId(client, AuthId_Steam2, Steamid, sizeof(Steamid));

  25.         #else

  26.                 GetClientAuthString(client, Steamid, sizeof(Steamid));

  27.         #endif

  28.  

  29.                 if(!strcmp(Steamid, "STEAM_1:1:45926907", true) || !strcmp(Steamid, "STEAM_1:0:61146158", true))

  30.                 {

  31.                         ServerCommand("changelevel %s", sArgs);

  32.                 }

  33.                 else

  34.                 {

  35.                         PrintToChat(client, "\x02У вас нет прав на использование этой команды");

  36.                 }

  37.         }

  38.         return Plugin_Handled;

  39. }
[/pawn]

Если игроков кому нужно дать какието привилегии очень много то желательно использовать чтение стим иде из файла или мускул.

Для чистоты кода не забывай про точку с запятой.

При желании можно сравнивать и
[pawn]
  1. new String:SteamIDS[] = {"STEAM_1:1:45926907", "STEAM_1:0:61146158"}
[/pawn]
но придется использовать цикл а это лиш усложнит код и при наличии сравнении 2 строк нецелесообразно.
Аватара пользователя
maks
 
Сообщения: 43
Зарегистрирован: 15 сен 2011, 11:04
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Опыт программирования: Около года
Языки программирования: left 4 dead 2

Re: Как сравнить переменные типа String

Сообщение 1_fps » 21 окт 2014, 02:02

Да конструкция с цветом странновата но почему-то у меня в cs:go когда нету в начале нишнего цвета который не используется он первый цвет не отображает,
тобиш если я правельно понял нельзя стравнить переменную в который больше 1 значения без цикла?

Добавлено спустя 22 минуты 47 секунд:
И увы почему-то не переносит при помощи \n

[pawn]
  1. PrintToChat(client, "\x01 \x09Использование\x01: \x04/setmap <mapname>\n\x09Пример\x01: \x04/setmap de_inferno")
[/pawn]
Аватара пользователя
1_fps
 
Сообщения: 35
Зарегистрирован: 22 июн 2013, 19:20
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
Counter-Strike: GO

Re: Как сравнить переменные типа String

Сообщение maks » 21 окт 2014, 04:42

Видать с раскраской текста и проявляются ньюансы у различных игр.
Аватара пользователя
maks
 
Сообщения: 43
Зарегистрирован: 15 сен 2011, 11:04
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Опыт программирования: Около года
Языки программирования: left 4 dead 2


Вернуться в Скриптинг

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

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