Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5
  1. #1
    Аватар для Sash.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    12.07.2018
    Сообщений
    15
    Репутация:
    0 ±

    Помогите с командой!

    Всем привет. Изучаю язык pawn в целом, около месяца, дается тяжело.
    При создании команды /setskin я представлял ее отображение в следующем виде: "Администратор Denis_Ivanov изменил Ваш скин" - это сообщение для игрока, которому был изменен скин.
    Для админа, сменившего скин следующий текст: "Вы изменили скин игроку Ivan_Denisov".
    Но в игре, ни одно имя не отображается.
    Прошу помощи.
    По поводу быдлокода не ругайте, я ж новичек.
    Сам код:
    PHP код:
    CMD:setskin(playerid,params[])
    {
        new 
    string[128], aName[MAX_PLAYER_NAME],str[128];
        
    GetPlayerName(playerid,aName,sizeof(aName));
        if(!
    IsPlayerAdmin(playerid)) return SCM(playerid,0x696969AA,"Неизвестная команда");
        if(
    sscanf(params,"dd",params[0],params[1])) return SCM(playerid,-1,"Используйте: /setskin [ID игрока] [ID скина]");
        if(!
    IsPlayerConnected(params[0])) return SCM(playerid,-1,"Игрока нет на сервере");
        if((
    params[1] < 0) || (params[1] > 311)) return SCM(playerid,-1,"ID cкина не менее 0 и не более 311!");
        
    format(string,sizeof(string),"Администратор %s изменил Ваш скин"aName);
        
    format(str,sizeof(str),"Вы изменили скин игроку %s"params[0]);
        
    SetPlayerSkin(params[0],params[1]);
        if(
    IsPlayerAdmin(playerid)) return SCM(playerid,0x00C0FFAA,str);
        
    SCM(params[0],0x00C0FFAA,string);
        return 
    1;

    Последний раз редактировалось DeimoS; 12.07.2018 в 20:17.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ты ник не получил второго игрока. Ну и есть другие проблемы. Вот так, в общем
    1. CMD:setskin_id(playerid,params[])
    2. {
    3. if(!IsPlayerAdmin(playerid))
    4. return SendClientMessage(playerid,0x696969AA,"Неизвестная команда");
    5.  
    6. new giveplayerid,
    7. skin_id;
    8. if(sscanf(params,"ud", giveplayerid, skin_id))
    9. return SendClientMessage(playerid,-1,"Используйте: /setskin_id [ID игрока] [ID скина]");
    10.  
    11. if(giveplayerid == INVALID_PLAYER_ID)
    12. return SendClientMessage(playerid,-1,"Игрока нет на сервере");
    13.  
    14. if((skin_id < 0) || (skin_id > 311))
    15. return SendClientMessage(playerid,-1,"ID cкина не менее 0 и не более 311!");
    16.  
    17. new string[33+MAX_PLAYER_NAME+1];
    18.  
    19. GetPlayerName(giveplayerid, string, MAX_PLAYER_NAME);
    20. format(string, sizeof(string), "Вы изменили скин игроку %s", string);
    21. SendClientMessage(playerid, 0x00C0FFAA, string);
    22.  
    23. GetPlayerName(playerid, string, MAX_PLAYER_NAME);
    24. format(string,sizeof(string),"Администратор %s изменил Ваш скин", string);
    25. SendClientMessage(giveplayerid, 0x00C0FFAA, string);
    26.  
    27. SetPlayerSkin(giveplayerid, skin_id);
    28. return 1;
    29. }
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Sash. (12.07.2018)
  4. #3
    Аватар для Sash.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    12.07.2018
    Сообщений
    15
    Репутация:
    0 ±
    - - - Добавлено - - -

    Спасибо! А какие другие проблемы? Укажите, приму во внимание

  5. #4
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    1. К примеру ты юзаешь массив, вместо переменных, которые работают быстрее.
    2. Указываешь индификатор, который получает только число а не ник/ID.
    3. Сделать лучше в enum pInfo:
    PHP код:
    pName 
    в OnPlayerConnect
    PHP код:
    GetPlayerName(playeridpInfo[playerid][pName], MAX_PLAYER_NAME); 
    Чтобы постоянно не узнавать имя игрока, а юзать pInfo[playerid][pName].
    Размер массива, для этого 128 - слишком большой, выделяешь много лишнего и даешь нагрузку ненужную.

  6. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну, как видишь, я, например, перенёс вот этот код
    PHP код:
    new string[128], aName[MAX_PLAYER_NAME],str[128];
    GetPlayerName(playerid,aName,sizeof(aName)); 
    после всех условий, дабы он не срабатывал впустую тогда, когда игрок, например, не админ.

    Так же, в твоём случае, можно было обойтись одним массивом, а не тремя, что тоже видно в моём примере.

    Ну и лучше сразу привыкать писать нормальные имена функций/переменных, а не использовать SCM/params[0]. Это на производительность не влияет (ну не во всех случаях), но читаемость кода ухудшается, что тоже немаловажно.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •