Форум Pawn.Wiki - Воплоти мечту в реальность!: Система префиксов - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Система префиксов 2 тема за день...мощь Оценка: -----

#1
Пользователь офлайн   de343pawn 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Вообщем,работает она так:
Командой setprefix игроку ставится префикс,а командой removeprefix - удаляется.Уж думаю сохранить префикс игрока в бдшку вы и без меня сможете.
Код:
cmd:setprefix(playerid,params[])
{

if(sscanf(params, "ds[36]", params[0], params[1]))return SendClientMessage(playerid, -1, "{ffffff}Используйте: {c3c3c3}/setprefix [playerid] [prefix]");
if(Account[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,NO_DOSTUP);
SetPlayerPrefix(params[0],params[1]);
return 1;
}
cmd:removeprefix(playerid,params[])
{

if(sscanf(params, "d", params[0]))return SendClientMessage(playerid, -1, "{ffffff}Используйте: {c3c3c3}/removetprefix [playerid]");
if(Account[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,NO_DOSTUP);
RemovePlayerPrefix(params[0]);
return 1;
}
public SetPlayerPrefix(player,prefix[])
{
new p_prefix[256];
strcat(p_prefix,prefix,256);
strcat(Account[player][pPrefix],p_prefix,sizeof(p_prefix));

return 1;
}
public RemovePlayerPrefix(player)
{
Account[player][pPrefix] = EOS;

return 1;
}

P.S:Поменяйте Account на то,что у вас,создайте в своем енуме для данных игрока pPrefix[36]

Тут кстати есть пару недочётиков,ну и ладно.Они несерьёзные,и никак не повлияют на работу системы.
-2

#2
Пользователь офлайн   Tape 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияde343pawn (10 марта 2025 - 23:01) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Полностью не рабочий код. Нету смысла от данного кода предоставленного вами. Если хотите - могу сделать ревью кода.
0

#3
Пользователь офлайн   de343pawn 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияTape (11 марта 2025 - 01:08) писал:

Полностью не рабочий код. Нету смысла от данного кода предоставленного вами. Если хотите - могу сделать ревью кода.

Сделай.Я же в P.S сказал что надо сделать ещё.
0

#4
Пользователь офлайн   Tornamic 

  • reversed
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияde343pawn (10 марта 2025 - 23:01) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

мусор, оно даже ничего не делает
0

#5
Пользователь офлайн   joper 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияde343pawn (10 марта 2025 - 23:01) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Сообщение отредактировал joper: 11 марта 2025 - 15:54

0

#6
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияjoper (11 марта 2025 - 15:50) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Ну только strcopy не существует. Ну и если доводить этот код до рабочего состояния, то:

const MAX_PLAYER_PREFIX = 30;
new PlayerPrefix[MAX_PLAYERS][MAX_PLAYER_PREFIX+1];
new const NULL_PlayerPrefix[MAX_PLAYER_PREFIX+1];


public OnPlayerConnect(playerid)
{
    RemovePlayerPrefix(playerid);
}


cmd:setprefix(playerid, params[])
{
    new targetid;
    if(sscanf(params, "ds[36]", targetid, params))
    {
        SendClientMessage(playerid, -1, "Используйте: {c3c3c3}/setprefix [playerid] [prefix]");
        return 1;
    }

    if(!IsPlayerConnected(targetid))
    {
        SendClientMessage(playerid, -1, "Игрок не найден");
        return 1;
    }

    SetPlayerPrefix(targetid, params);
    return 1;
}
cmd:removeprefix(playerid, params[])
{
    new targetid;
    if(sscanf(params, "d", targetid))
    {
        SendClientMessage(playerid, -1, "Используйте: {c3c3c3}/removetprefix [playerid]");
        return 1;
    }

    if(!IsPlayerConnected(targetid))
    {
        SendClientMessage(playerid, -1, "Игрок не найден");
        return 1;
    }

    RemovePlayerPrefix(targetid);
    return 1;
}

stock SetPlayerPrefix(playerid, const prefix[])
{
    PlayerPrefix[playerid] = NULL_PlayerPrefix;
    strcat(PlayerPrefix[playerid], prefix);
}

stock RemovePlayerPrefix(playerid)
{
    PlayerPrefix[playerid] = NULL_PlayerPrefix;
}


Хотя всё ещё смысла в этом всём мало, ибо всё, что мы тут делаем - записываем текст в массив или удаляем его оттуда.

Сообщение отредактировал DeimoS: 11 марта 2025 - 16:01

0

#7
Пользователь офлайн   Tape 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияde343pawn (10 марта 2025 - 23:01) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Review:
/* 
    при компиляции у нас ошибки такие как

    error 017: undefined symbol "Account"
    warning 215: expression has no effect
    error 001: expected token: ";", but found "]"
    error 029: invalid expression, assumed zero
    fatal error 107: too many error messages on one line
*/
cmd:setprefix(playerid,params[])
{
    /* 
        -1 = лучше не использовать, магическое число.
        NO_DOSTUP - не понятный define, new, const, static const. Уже ошибка что нету такого.
    */
    if(sscanf(params, "ds[36]", params[0], params[1]))return SendClientMessage(playerid, -1, "{ffffff}Используйте: {c3c3c3}/setprefix [playerid] [prefix]");
    if(Account[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,NO_DOSTUP);
        SetPlayerPrefix(params[0],params[1]);
    return 1;
}
cmd:removeprefix(playerid,params[])
{
    /* 
        -1 = лучше не использовать, магическое число.
        NO_DOSTUP - не понятный define, new, const, static const. Уже ошибка что нету такого.
    
    */
    if(sscanf(params, "d", params[0]))return SendClientMessage(playerid, -1, "{ffffff}Используйте: {c3c3c3}/removetprefix [playerid]");
    if(Account[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,NO_DOSTUP);
    RemovePlayerPrefix(params[0]);
    return 1;
}
public SetPlayerPrefix(player,prefix[])
{
    /* 
        лучше перед prefix в аргументах(атрибутах) поставить const, так как у многих может быть проблемы с конст корректностью
        new p_prefix[256]; - 256 - магическое число, лучше написать: 
        
        const PREFIX_STRING = 256;
        new p_prefix[PREFIX_STRING];

        strcat(p_prefix, prefix, PREFIX_STRING);
    */
    new p_prefix[256];
    strcat(p_prefix,prefix,256);
    strcat(Account[player][pPrefix],p_prefix,sizeof(p_prefix));

    return 1;
}
public RemovePlayerPrefix(player)
{
    Account[player][pPrefix] = EOS;

    return 1;
}

/* Код реально надо оптимизировать, тут без этого не обойтись. Review by @tape_web */

0

#8
Пользователь офлайн   Tornamic 

  • reversed
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияTape (11 марта 2025 - 16:37) писал:

Код реально надо оптимизировать, тут без этого не обойтись.

ctrl+a delete
1

#9
Пользователь офлайн   Tape 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияTornamic (11 марта 2025 - 16:41) писал:

ctrl+a delete

Ага, ненужная система от данного человека)
0

#10
Пользователь офлайн   Saibot 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияTape (11 марта 2025 - 16:37) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Жесткое review.

Сообщение отредактировал Saibot: 11 марта 2025 - 19:33

1

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика