Символы, буковки, горячая замена -
^Woozie^ - 22.02.2010
Предлагаю создать дискуссию по поводу символов и работы с ними. Например чтоб заменить арабские кракозябры на русские буквы в gametext.
Luxury когда то код выкладывал, который заменяет и даже в консоли пишет по русски.
Например ник: [HarD]Egoista
отображает как:
с этим реально бороться как нибудь, раздражает ппц.
Re: Символы, буковки, горячая замена -
MX_Master - 23.02.2010
У всех разные русификаторы или их ваще нет, и наборы символов, тем более русских, у всех практически разные.
У меня даже мультиязычность в моде сделана с учетом 6 русификаторов. Вощем, бред и трата времени.
Ну а чтобы просто выяснить какой спец символ нужно писать, чтобы получить скобки или что-то еще, достаточно сделать текст ТД - набором символов. Далее посмотреть какой реальный символ, соответствует набранному.
Re: Символы, буковки, горячая замена -
^Woozie^ - 23.02.2010
ну так чо мне делать с [ и ]? поместить в двойные ковычки со слешем?
Re: Символы, буковки, горячая замена -
Riaz - 23.02.2010
[] это ()
Re: Символы, буковки, горячая замена -
Riaz - 23.02.2010
там короче надо добавить
case '[':result[i] = '(';
case ']':result[i] = ')';
Re: Символы, буковки, горячая замена -
Butilka - 23.02.2010
Так сделать или выбрать другой шрифт. Только во втором шрифте [ и ] криво отображаются.
Re: Символы, буковки, горячая замена -
^Woozie^ - 23.02.2010
чо посоветуем-с
Dr.Psycho (17:52:33 23/02/2010)
у меня есть массив с 10ью никами
Dr.Psycho (17:52:41 23/02/2010)
я хочу чтобы введя кусокчек ника
Dr.Psycho (17:52:51 23/02/2010)
выдало первый похожий результат
Dr.Psycho (17:52:59 23/02/2010)
strfind не помогает, там ищет полные совпадения
Dup1ex (17:54:07 23/02/2010)
хы.. напиши свой аналог..
Dup1ex (17:54:26 23/02/2010)
чтоб там искало совпадения от 3х символов
Dr.Psycho (17:54:45 23/02/2010)
хм
Dr.Psycho (17:54:47 23/02/2010)
это вариант
Dr.Psycho (17:56:09 23/02/2010)
ведь была какая то стандартная функция
Re: Символы, буковки, горячая замена -
MX_Master - 23.02.2010
Quote:
Originally Posted by ^Psycho^
чо посоветуем-с
Dr.Psycho (17:52:33 23/02/2010)
у меня есть массив с 10ью никами
Dr.Psycho (17:52:41 23/02/2010)
я хочу чтобы введя кусокчек ника
Dr.Psycho (17:52:51 23/02/2010)
выдало первый похожий результат
Dr.Psycho (17:52:59 23/02/2010)
strfind не помогает, там ищет полные совпадения
Dup1ex (17:54:07 23/02/2010)
хы.. напиши свой аналог..
Dup1ex (17:54:26 23/02/2010)
чтоб там искало совпадения от 3х символов
Dr.Psycho (17:54:45 23/02/2010)
хм
Dr.Psycho (17:54:47 23/02/2010)
это вариант
Dr.Psycho (17:56:09 23/02/2010)
ведь была какая то стандартная функция
|
Code:
stock name[500][24], p;
// ...
for ( p = 0; p < 500; p++ )
if ( strfind( name[p], "ego", true ) >= 0 ) break;
// в name[p] сейчас имя 1го совпавшего ника
Re: Символы, буковки, горячая замена -
^Woozie^ - 23.02.2010
Полюбому работает некорректно. даже твой способ, MX_Master.
Quote:
if(strcmp(cmd, "/nstats", true) == 0){
tmp = strrest(cmdtext, idx);
if(!strlen(tmp)){
SendClientMessage(playerid, COLOR_MSG, "Ïèøèòå: /nstats < íèê èãðîêà >");
return 1;
}
if(24 < strlen(tmp) || strlen(tmp) < 3) {
SendClientMessage(playerid, COLOR_MSG, "Äëèíà íèêà äîëæíà áûòü 3-24 ñèìâîëà.");
return 1;
}
new result;
new wtf = GetFromServerStats("regplayers");
for(new i = 0; i < wtf; i++){
if(result == 0)
{
if(strfind(ImportAccountInfo[i][importnickname],tmp, true)){
ReturnPlayerStatsAsTextDraw(playerid,ImportAccount Info[i][importnickname]);
print(ImportAccountInfo[i][importnickname]);
result = 1;
}
}
}
if(result == 0){
format(string,256,"%s íå íàéäåí â ñòàòèñòèêå.",tmp);
SendClientMessage(playerid, COLOR_MSG, string);
}
return 1;
}
|
Re: Символы, буковки, горячая замена -
[JIeXa] - 24.02.2010
я писал функцию strfind...
смотрите в полезных функциях и макросах, на первый страничках..
Re: Символы, буковки, горячая замена -
MX_Master - 24.02.2010
не в strfind дело )) у него сам импорт данных барахлит, естессна в пустых строках найти ничо низя (:
Re: Символы, буковки, горячая замена -
^Woozie^ - 24.02.2010
С импортом данных уже разобрался, всё работает, проверил распечаткой.
Re: Символы, буковки, горячая замена -
Walk_M4n - 24.02.2010
Quote:
Originally Posted by ^Psycho^
Dr.Psycho (17:56:09 23/02/2010)
ведь была какая то стандартная функция
|
ReturnUser(playerid)
Код:
ReturnUser(text[], playerid = INVALID_PLAYER_ID)
{
new pos = 0;
while (text[pos] < 0x21) // Strip out leading spaces
{
if (text[pos] == 0) return INVALID_PLAYER_ID; // No passed text
pos++;
}
new userid = INVALID_PLAYER_ID;
if (IsNumeric(text[pos])) // Check whole passed string
{
// If they have a numeric name you have a problem (although names are checked on id failure)
userid = strval(text[pos]);
if (userid >=0 && userid < MAX_PLAYERS)
{
if(!IsPlayerConnected(userid))
{
/*if (playerid != INVALID_PLAYER_ID)
{
SendClientMessage(playerid, 0xFF0000AA, "User not connected");
}*/
userid = INVALID_PLAYER_ID;
}
else
{
return userid; // A player was found
}
}
/*else
{
if (playerid != INVALID_PLAYER_ID)
{
SendClientMessage(playerid, 0xFF0000AA, "Invalid user ID");
}
userid = INVALID_PLAYER_ID;
}
return userid;*/
// Removed for fallthrough code
}
// They entered [part of] a name or the id search failed (check names just incase)
new len = strlen(text[pos]);
new count = 0;
new name[MAX_PLAYER_NAME];
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{
GetPlayerName(i, name, sizeof (name));
if (strcmp(name, text[pos], true, len) == 0) // Check segment of name
{
if (len == strlen(name)) // Exact match
{
return i; // Return the exact player on an exact match
// Otherwise if there are two players:
// Me and MeYou any time you entered Me it would find both
// And never be able to return just Me's id
}
else // Partial match
{
count++;
userid = i;
}
}
}
}
if (count != 1)
{
if (playerid != INVALID_PLAYER_ID)
{
if (count)
{
SendClientMessage(playerid, 0xFF0000AA, "Multiple users found, please narrow earch");
}
else
{
SendClientMessage(playerid, 0xFF0000AA, "No matching user found");
}
}
userid = INVALID_PLAYER_ID;
}
return userid; // INVALID_USER_ID for bad return
}
Re: Символы, буковки, горячая замена -
CracK - 24.02.2010
можно ещё попробовать заюзать sscanf... типа sscanf(string,"r[24]",name);
Re: Символы, буковки, горячая замена -
^Woozie^ - 24.02.2010
разобрался чо там и как там.
метод копирования memcpy - не катит.
оптимально, делать приравнивани строки.
и ещё.. расскажите как замерять скорость работы функций.
Re: Символы, буковки, горячая замена -
^Woozie^ - 26.02.2010
гыы снова я здесь. расскажите как сделать запрет на хреновые ники.
Чтобы можно было использовать только A-Z, 0-9 и _.
За меня делать не прошу, тока рассказать как делается. Создавать массив с символами или что там. Просто я хз, в PHP в некоторых местах кодировка задаётся "A-Z","0-9" или как то так. Как в pawno - черт его знает.
А вот если делать запрет на ники состоящие из цифр то можно заюзать IsNumeric?
Re: Символы, буковки, горячая замена -
MX_Master - 27.02.2010
перебор всех буковок ника и проверка с помощью
switch ( ник[ид буквы] )
{
case `0`..`9`, `a`..`z`, `A`..`Z`, `_`: правильная буковка;
default: неправильная;
}
Re: Символы, буковки, горячая замена -
CracK - 27.02.2010
pawn Код:
NameCheck(name[])
{
new
i,
ch;
while ((ch = name[i++]) && (ch == '_') || ('0' <= ch <= '9') || ((ch |= 0x20) && ('a' <= ch <= 'z')))) {}
return !ch;
}
Re: Символы, буковки, горячая замена -
^Woozie^ - 27.02.2010
над способом Crack'a я чото запарился. И цикл while не нравиться. Но доработал способ MX_Master'a.
Quote:
NameCheck(name[])
{
new lol;
for(new i = 0; i < strlen(name); i++) {
switch (name[i]) {
case '0'..'9', 'a'..'z', 'A'..'Z', '_', ']', '[', ')', '(' : lol++;
}
}
if(lol != strlen(name)) {
return 0;
}
return 1;
}
|
и ещё, вместо ` надо ставить ', если выделяешь знак.
Re: Символы, буковки, горячая замена -
CracK - 27.02.2010
а что там парица? if(!NameCheck(playername)) Kick(playerid);