 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Бан по тэгу
| |
| Vagrant | Дата: Воскресенье, 21.03.2010, 08:42 | Сообщение # 1 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| Проблема заключается в следующем. Я сделал команду бан по тэгу клана. А если быть точным то пытаюсь сделать. Сделал раньше но сейчас решил проверить её. Всё вроди бы правильно но при вводе команды она почему-то не видит тэг который я ввожу и не банит игроков с данным тэгом. В начало: [pwn] stock GetPlayerNameClan(playerid) { new str[MAX_PLAYER_NAME]; GetPlayerName(playerid,str,sizeof(str)); return str; } [/pwn] На счёт этого кода у меня небольшой вопрос. Я не хотел использовать этот код в команде. А хотел написать вот так: [pwn] GetPlayerName(i,ncl,sizeof(ncl)); // в каком месте написано ниже. [/pwn] [pwn] if (strcmp(cmd,"/banc", true) == 0) { if(IsPlayerAdmin(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /banc [Тэг клана] [Причина]"); new cl = 0; new clan[64]; new tegclan[256]; new banc[256]; new length = strlen(cmdtext); new offset = idx; /* Если можно объясните мне эти строки. Вторые 3 строки я добавил для вывода причины так как иначе если написать таким способом: tmp = strtok(cmdtext, idx); reas = strval(tmp); то сообщение не выводит даже если на его вывод ставишь %s и выделяешь память под переменную. Но тэг клана так же состоит из символов а не цифр (как я понял strtok можно использовать если вводятся цифры). А эти строки я выдернул из другого мода они использовались так же для бана и вывода причины. */ while ((idx < length) && (cmdtext[idx] <= ' ')) {idx++;} while ((idx < length) && ((idx - offset) < (sizeof(clan) - 1))){clan[idx - offset] = cmdtext[idx];idx++;} clan[idx - offset] = EOS; while ((idx < length) && (cmdtext[idx] <= ' ')) {idx++;} while ((idx < length) && ((idx - offset) < (sizeof(reas) - 1))){reas[idx - offset] = cmdtext[idx];idx++;} reas[idx - offset] = EOS; for(new i=0;i<MAX_PLAYERS;i++) { /* Если тут я напишу так GetPlayerName(i,ncl,sizeof(ncl)); а не так. tegclan = GetPlayerNameClan(i); То функция запишит в переменную "ncl" ник игрока? */ if(strfind(tegclan,clan) == 0) /* И тут за место переменной tegclan-а напишу ncl. Будет одно и то же что tegclana просто короче? Надеюсь меня поняли. За место переменной clan тут пишется тэг который по идее вводится при вводе команды.*/ { format(banc, 256, "Вас забанила Администрация сервера. Причина: [%s]",reas); SendClientMessage(i,0xFF00FF00,banc); Ban(i); cl++; // Счётчик } } if(cl>0) { format(banc, 256, "Администрация сервера забанила [%d] членов клана: [ %s ]. Причина: [%s]",cl,clan,reas); /* Эту строку ещё ни разу не выводило. Ники ботов канечно же с тэгами [B13]. */ SendClientMessageToAll(0xFF00FF00,banc); } else { format(banc, 256, "Ни одного игрока с тэгом [ %s ] на сервере не обнаружено!",clan); /* Запускаю ботов на сервер ввожу /banc [B13] Боты мне пишет это сообщение. причём где %s в этом поле просто пусто. Хотя должно выводиться сообщение: "Ни одного игрока с тэгом [ [B13] ] на сервере не обнаружено!" */ SendClientMessage(playerid,0xFF00FF00,banc); } } else SendClientMessage(playerid, COLOR_WHITE, "SERVER: Unknown command."); return 1; } [/pwn] За помощь канечно же + и медальку поставлю.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
|
| |
|
|
| s3ap | Дата: Воскресенье, 21.03.2010, 10:03 | Сообщение # 2 |
|
Местный
Группа:
Продвинутые
Сообщений: 570
Награды: 7
Город: Саратов
Репутация: 382
Замечания: 80%
Статус: 
| обьясняю: при вводе команды отправляется запрос в commandtext с данными игрока (playerid, cmdtext). после, cmdtext с помощью strtoka разделяется на пробелы, т.е. строку cmdtext: "/help 1 2 3" разделит на "/help", "1", "2" и "3". Так вот, при вводе "/banc [TAG] причина" будет делится на "/banc", "[TAG]" и "причина"... Честно говоря мне проще всё это делать вручную: Code if (strcmp(cmdtext,"/banc", true) == 0) { if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Вы не админ"); if(!strlen(cmdtext[6])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /banc [Тэг клана] [Причина]"); new cl = 0; new tegclan[256]; new reas[256]; new clan[24]; new banc[256]; strmid(tegclan, cmdtext, 7, strfind(cmdtext, " ", true, 7), 256); strmid(reas, cmdtext, strfind(cmdtext, " ", true, 7)+1, strlen(cmdtext), 256); format(banc, 256, "Вас забанила Администрация сервера. Причина: [%s]",reas); for(new i=0;i<MAX_PLAYERS;i++)if(IsPlayerConnected(i)){GetPlayerName(i, clan, 24);if(strfind(tegclan,clan, true)!=-1){SendClientMessage(i,0xFF00FF00,banc);Ban(i);cl++;}} if(cl>0){ format(banc, 256, "Администрация сервера забанила (%d) членов клана: [ %s ]. Причина: [%s]",cl,tegclan,reas); SendClientMessageToAll(0xFF00FF00,banc); }else{ format(reas, 256, "Ни одного игрока с тэгом [ %s ] на сервере не обнаружено!",reas); SendClientMessage(playerid,0xFF00FF00,banc);} return 1;}
Сообщение отредактировал VCOScript - Понедельник, 22.03.2010, 00:17 |
| |
|
|
| Vagrant | Дата: Воскресенье, 21.03.2010, 17:14 | Сообщение # 3 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| объясни работу функции strmid если не сложно.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
|
| |
|
|
| Dima-kun | Дата: Воскресенье, 21.03.2010, 19:52 | Сообщение # 4 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| VCOScript, хз не проверял твой код не много просмотрел [pwn]if (strcmp(cmd,"/banc", true) == 0) { if(IsPlayerAdmin(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /banc [Тэг клана] [Причина]"); new cl = 0; new clan[64]; new tegclan[256]; new banc[256]; new length = strlen(cmdtext); new offset = idx; while ((idx < length) && (cmdtext[idx] <= ' ')) {idx++;} while ((idx < length) && ((idx - offset) < (sizeof(clan) - 1))){clan[idx - offset] = cmdtext[idx];idx++;} clan[idx - offset] = EOS; while ((idx < length) && (cmdtext[idx] <= ' ')) {idx++;} while ((idx < length) && ((idx - offset) < (sizeof(reas) - 1))){reas[idx - offset] = cmdtext[idx];idx++;} reas[idx - offset] = EOS; for(new i=0;i<MAX_PLAYERS;i++) { new nc1[MAX_PLAYER_NAME]; GetPlayerName(i,ncl,sizeof(ncl)); if(strfind(ncl,clan,true) == 0) { format(banc, 256, "Вас забанила Администрация сервера. Причина: [%s]",reas); SendClientMessage(i,0xFF00FF00,banc); Ban(i); cl++; // Счётчик } } if(cl>0) { format(banc, 256, "Администрация сервера забанила [%d] членов клана: [ %s ]. Причина: [%s]",cl,clan,reas); SendClientMessageToAll(0xFF00FF00,banc); } else { format(banc, 256, "Ни одного игрока с тэгом [ %s ] на сервере не обнаружено!",clan); /* Запускаю ботов на сервер ввожу /banc [B13] Боты мне пишет это сообщение. причём где %s в этом поле просто пусто. Хотя должно выводиться сообщение: "Ни одного игрока с тэгом [ [B13] ] на сервере не обнаружено!" */ SendClientMessage(playerid,0xFF00FF00,banc); } } else SendClientMessage(playerid, COLOR_WHITE, "SERVER: Unknown command."); return 1; }[/pwn]
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| s3ap | Дата: Воскресенье, 21.03.2010, 20:27 | Сообщение # 5 |
|
Местный
Группа:
Продвинутые
Сообщений: 570
Награды: 7
Город: Саратов
Репутация: 382
Замечания: 80%
Статус: 
| strmid берёт интервал строки из строчки, т.е. strmid(string, "Мама рыла яму", 0, 5, sizeof(string)); printf("%s", string); выведет: "Мама"
|
| |
|
|
| stepmex | Дата: Воскресенье, 21.03.2010, 20:34 | Сообщение # 6 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Code if (strcmp(cmd,"/banc", true) == 0) { if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Unknown command."); new clanteg[] = strtok(cmdtext, idx); if(!strlen(clanteg)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /banc [Тэг клана] [Причина]"); new reason[128],temp[196],num = 0,player_name[MAX_PLAYER_NAME]; strmid(reason,cmdtext,7 + strlen(clanteg),strlrn(cmdtext),128); for(new i=0;i<MAX_PLAYERS;i++) { if(!IsPlayerConnect(i))continue; GetPlayerName(i,player_name,sizeof(ncl)); if(strfind(player_name,clanteg,false) != -1) { format(temp, sizeof(temp), "Вас забанила Администрация сервера. Причина: [%s]",reason); SendClientMessage(i,0xFF00FF00,temp); BanEx(i,reason); num++; } } if(num) { format(temp, sizeof(temp), "Администрация сервера забанила [%d] членов клана: [ %s ]. Причина: [%s]",num,clanteg,reason); SendClientMessageToAll(0xFF00FF00,temp); } else { format(temp, sizeof(temp), "Ни одного игрока с тэгом [ %s ] на сервере не обнаружено!",clanteg); SendClientMessage(playerid,0xFF00FF00,temp); } return 1; } не проверял но должно работать Замечания тем кто пытался помочь но попал в просак: Quote (VCOScript) if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Вы не админ"); если игрокадмин, нописать ему что он не админ и послать на*** Quote (VCOScript) if(!strlen(tmp)) а где задаяется tmp? Quote (VCOScript) strmid(reas, cmdtext, strfind(cmdtext, " ", true, 7)+1, strlen(cmdtext), 256); от причины оставим только первое слово Quote (VCOScript) if(strfind(tegclan,clan)!=-1 почему вы всегда забываете про регистр Quote (DizeL-ZR) while ((idx < length) && (cmdtext[idx] <= ' ')) {idx++;} while ((idx < length) && ((idx - offset) < (sizeof(clan) - 1))){clan[idx - offset] = cmdtext[idx];idx++;} clan[idx - offset] = EOS; while ((idx < length) && (cmdtext[idx] <= ' ')) {idx++;} while ((idx < length) && ((idx - offset) < (sizeof(reas) - 1))){reas[idx - offset] = cmdtext[idx];idx++;} reas[idx - offset] = EOS; згинь нечистая, згинь! про Quote (DizeL-ZR) if(IsPlayerAdmin(playerid)) { дохуя кода } else SendClientMessage(playerid, COLOR_WHITE, "SERVER: Unknown command."); вы прастите себя опытным скриптером чсчитаете или тоько начали?
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| Vagrant | Дата: Понедельник, 22.03.2010, 02:43 | Сообщение # 7 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| stepmex, 9 ошибок. [pwn] new clanteg[] = strtok(cmdtext, idx); [/pwn] error 008: must be a constant expression; assumed zero error 036: empty statement [pwn] if(!strlen(clanteg)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /banc [Тэг клана] [Причина]"); [/pwn] error 017: undefined symbol "clanteg" [pwn] strmid(reason,cmdtext,7 + strlen(clanteg),strlrn(cmdtext),128); [/pwn] error 017: undefined symbol "clanteg" [pwn] GetPlayerName(i,player_name,sizeof(ncl)); [/pwn] error 017: undefined symbol "ncl" error 029: invalid expression, assumed zero warning 215: expression has no effect [pwn] if(strfind(player_name,clanteg,false) != -1) [/pwn] error 017: undefined symbol "clanteg" [pwn] format(temp, sizeof(temp), "Администрация сервера забанила [%d] членов клана: [ %s ]. Причина: [%s]",num,clanteg,reason); [/pwn] error 017: undefined symbol "clanteg" [pwn] format(temp, sizeof(temp), "Ни одного игрока с тэгом [ %s ] на сервере не обнаружено!",clanteg); [/pwn] error 017: undefined symbol "clanteg" Ему не нравится что в new clanteg[] со [] а дальше используется без них как я понял. Что означают скобки? Добавлено (22.03.2010, 02:43) --------------------------------------------- VCOScript, Команду просто не выполняет Unknow Command. Всё перепробовал. У меня через cmd а не cmdtext. Но даже удалив все cmd и все команды с их использованием и всё равно не работает.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
|
| |
|
|
| stepmex | Дата: Понедельник, 22.03.2010, 07:44 | Сообщение # 8 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Quote (Vagrant) VCOScript, Команду просто не выполняет Unknow Command. Всё перепробовал. У меня через cmd а не cmdtext. Но даже удалив все cmd и все команды с их использованием и всё равно не работает. ты под админом залогиниться пробывал? Code if (strcmp(cmd,"/banc", true) == 0) { if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Unknown command."); new clanteg[24]; clanteg = strtok(cmdtext, idx); if(!strlen(clanteg)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /banc [Тэг клана] [Причина]"); new reason[128],temp[196],num = 0; strmid(reason,cmdtext,7 + strlen(clanteg),strlen(cmdtext),128); for(new i=0;i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i))continue; new player_name[MAX_PLAYER_NAME]; GetPlayerName(i,player_name,MAX_PLAYER_NAME); if(strfind(player_name,clanteg,false) == 0) { format(temp, sizeof(temp), "Вас забанила Администрация сервера. Причина: [%s]",reason); SendClientMessage(i,0xFF00FF00,temp); BanEx(i,reason); num++; } } if(num) { format(temp, sizeof(temp), "Администрация сервера забанила [%d] членов клана: [ %s ]. Причина: [%s]",num,clanteg,reason); SendClientMessageToAll(0xFF00FF00,temp); } else { format(temp, sizeof(temp), "Ни одного игрока с тэгом [ %s ] на сервере не обнаружено!",clanteg); SendClientMessage(playerid,0xFF00FF00,temp); } return 1; } без ошибок, все работает, проверил!
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| Interpol | Дата: Понедельник, 22.03.2010, 08:46 | Сообщение # 9 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 5358
Награды: 77
Город: НеБаку
Репутация: 3795
Замечания: 20%
Статус: 
| Vagrant, new задал не правильно, если в скобках ничего не написано,значит он засчитывает это за массив [pwn] if (strcmp(cmd,"/banc", true) == 0) { if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Unknown command."); new clanteg[24]; clanteg = strtok(cmdtext, idx); if(!strlen(clanteg)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /banc [Тэг клана] [Причина]"); new reason[128],temp[196],num = 0; strmid(reason,cmdtext,7 + strlen(clanteg),strlen(cmdtext),128); for(new i=0;i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i))continue; new player_name[MAX_PLAYER_NAME]; GetPlayerName(i,player_name,MAX_PLAYER_NAME); if(strfind(player_name,clanteg,false) == 0) { format(temp, sizeof(temp), "Вас забанила Администрация сервера. Причина: [%s]",reason); SendClientMessage(i,0xFF00FF00,temp); BanEx(i,reason); num++; } } if(num) { format(temp, sizeof(temp), "Администрация сервера забанила [%d] членов клана: [ %s ]. Причина: [%s]",num,clanteg,reason); SendClientMessageToAll(0xFF00FF00,temp); } else { format(temp, sizeof(temp), "Ни одного игрока с тэгом [ %s ] на сервере не обнаружено!",clanteg); SendClientMessage(playerid,0xFF00FF00,temp); } return 1; }[/pwn] P.S код команды правильный вроде
Сообщение отредактировал Karleon - Понедельник, 22.03.2010, 09:06 |
| |
|
|
| s3ap | Дата: Понедельник, 22.03.2010, 09:46 | Сообщение # 10 |
|
Местный
Группа:
Продвинутые
Сообщений: 570
Награды: 7
Город: Саратов
Репутация: 382
Замечания: 80%
Статус: 
| Quote от причины оставим только первое слово mda? cmdtext[]="/banc [TAG] причина тын-тын-тын" "причина тын-тын-тын" начинается с первого символа пробела после [TAG] и заканчивается концом cmdtext'a или я ошибаюсь?
|
| |
|
|
| stepmex | Дата: Понедельник, 22.03.2010, 09:59 | Сообщение # 11 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Karleon, new задан правильно, если ты не в курсе что это означает свали читать основы програмирования! Да и копироавть мой код не надо, я его сам исправить могу! Quote (VCOScript) "причина тын-тын-тын" начинается с первого символа пробела после [TAG] и заканчивается концом cmdtext'a или я ошибаюсь? да уже понял.
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| toneysix | Дата: Понедельник, 22.03.2010, 10:40 | Сообщение # 12 |
|
Джэдай
Группа:
I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус: 
| А ещё проще воспользоваться отличном плагином sscanf, который упрощает создание команд в 3-4 раза. Этот плагин служит как раз для разделения строк.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
|
| |
|
|
| stepmex | Дата: Понедельник, 22.03.2010, 11:24 | Сообщение # 13 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| toneysix, предложении из серии: "Мне тут надо снег на коврике перед дверью убрать - пойду бульдозер пригоню."
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| toneysix | Дата: Понедельник, 22.03.2010, 11:25 | Сообщение # 14 |
|
Джэдай
Группа:
I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус: 
| stepmex да я знаю, что я конечно не в тему, но всё же, пусть народ знает, ибо в своё время сам мучался этими тупыми командами. Сейчас это конечно уже в прошлом, так как я больше не занимаюсь скриптингом.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
|
| |
|
|
| Vagrant | Дата: Понедельник, 22.03.2010, 14:54 | Сообщение # 15 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| stepmex, спасибо медаль и + поставил. toneysix, кинь ссылку на плагин.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
|
| |
|
|
|
 |
|
 | |
| |
|