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

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

    Перенос мода на include(перехват)

    Начал переносить системы из мода по инклудам.
    У меня командный процессор dc_cmd, в консоли возникла ошибка, сама команда работает и проблем нет с ней, как и с альтернативной командой. Но пугает этот текст.
    Момент подключения в самом моде.
    PHP код:
    #include "server/player/cmd/pm.pwn" 
    сам pm.pwn
    PHP код:
    CMD:pm(playeridparams[])
    {
        if(
    sscanf(params"us[84]"params[0],params[1])) return send(playeridCOLOR_LIGHTBLUE"{ffffff} /pm [playerid] [Текст]");
        if(!
    IsPlayerConnected(params[0])) return send(playeridCOLOR_REDNoConnectGivePlayer);
        new 
    Float:pos[3], phoneIsHand IsAHandType(playerid17);
        
    GetPlayerPos(playeridpos[0], pos[1], pos[2]);
        if(!
    IsPlayerInRangeOfPoint(params[0], 10.0pos[0], pos[1], pos[2]) && phoneIsHand == -1)
        { 
            new 
    string[144];
            
    f(string"[ОШИБКА] {FFFFFF}Вы слишком далеко от %s[%i]"sendername(params[0]), params[0]);
            
    SendClientMessageError(playeridCOLOR_REDstring);
            
    send(playeridCOLOR_LIGHTBLUE"[ПОДСКАЗКА]{FFFFFF} Используйте телефон(переложите в руку), чтобы общаться с любой точки карты.");
            return 
    1;
        }
        if(
    pTogPm[params[0]] == 0) return SendClientMessageError(playeridCOLOR_RED"[ОШИБКА] {FFFFFF}Игрок заблокировал персональные сообщения.");
        new 
    string[144];
        if(
    IsIpFound(params[1]))
        {
            
    f(string"[Анти-реклама]:(IP:%s)%s[%d]: %s",ConnectIP[playerid],sendername(playerid),playerid,params[1]);
            
    ABroadCast(COLOR_YELLOW,string,1);
            return 
    0;
        }
        
    f(string"ПМ от %s[%d]: %s"sendername(playerid), playeridparams[1]);
        
    send(params[0], COLOR_YELLOWstring);
        
    f(string"ПМ к %s[%d]: %s"sendername(params[0]), params[0], params[1]);
        
    send(playerid,  TAXI_COLORstring);
        
    GivePlayerKapusta(playerid, -10);
        
    format(string,sizeof(string),"~r~ -$%d"10);
        
    GameTextForPlayer(playerid,string,2000,1);
        
    GiveBiznesTill(110);
        if(
    GetPVarInt(params[0], "PlayerInAFK") > 0)
        {
            
    f(string"Игрок находится в AFK: %s!",ConvertSeconds(GetPVarInt(params[0], "PlayerInAFK")));
            
    send(playeridCOLOR_YELLOWstring);
        }
        foreach(new 
    iPlayer)
        {
            if(
    apm[i] == 1)
            {
                
    f(string"ПМ от %s[%d] к %s[%d]: %s",sendername(playerid),playerid,sendername(params[0]),params[0],params[1]);
                
    send(i,0xFFFF80FF,string);
            }
        }
        return 
    1;
    }
    public 
    OnGameModeInit()
    {
        
    RegisterAlt("/pw""/w");
    #if defined pm__OnGameModeInit
        
    return pm__OnGameModeInit();
    #endif
    }
    #if defined _ALS_OnGameModeInit
        #undef    OnGameModeInit
    #else
        #define    _ALS_OnGameModeInit
    #endif
    #define    OnGameModeInit    pm__OnGameModeInit
    #if defined pm__OnGameModeInit
    forward pm__OnGameModeInit();
    #endif 
    Последний раз редактировалось Igoreshka; 12.03.2019 в 20:52.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    1. RegisterAlt("/pw", "/w");

    На
    1. RegisterAlt("/pm", "/pw", "/w");

    Сначала должна указываться оригинальная команда.

    И да, не советовал бы использовать перехваты при разделении мода на инклуды. Вот тут это обсуждалось
    Последний раз редактировалось DeimoS; 12.03.2019 в 20:28.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. #3
    Аватар для Igoreshka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.03.2015
    Сообщений
    32
    Репутация:
    0 ±
    почитал, предлагаешь лучше перехват пабликов делать один раз, и в этом месте записывать все мини функции разбитые по действиям?
    тип:
    PHP код:
    #include "server/object/create_map_icon.pwn"
    #include "server/object/object.pwn"
    #include "server/object/create_text3d.pwn"
    onGame()
    {
        
    LoadObject();
        
    LoadMapIcon();
        
    Load3dText();
        return 
    1;
    }
    public 
    OnGameModeInit()
    {
        
    onGame();
        
    #if defined onGameMode__OnGameModeInit
        
    return onGameMode__OnGameModeInit();
    #endif
    }
    #if defined _ALS_OnGameModeInit
        #undef    OnGameModeInit
    #else
        #define    _ALS_OnGameModeInit
    #endif
    #define    OnGameModeInit    onGameMode__OnGameModeInit
    #if defined onGameMode__OnGameModeInit
    forward onGameMode__OnGameModeInit();
    #endif  

    /*в файлах находятся LoadObject, LoadMapIcon, Load3dText*/ 

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Нет. В каждом инклуде создавать stock, в котором прописывать код, который нужно вызвать в паблике. А после уже в самом моде прописывать вызов этого stock.

    Типа такого
    PHP код:
    //Инклуд 1:
    stock includename1_OnGameModeInit()
    {
        
    //Нужный код
    }

    //Инклуд 2:
    stock includename2_OnGameModeInit()
    {
        
    //Нужный код
    }

    //Инклуд 3:
    stock includename3_OnGameModeInit()
    {
        
    //Нужный код
    }

    //Мод
    public OnGameModeInit()
    {
        
    includename3_OnGameModeInit();
        
    includename1_OnGameModeInit();
        
    includename2_OnGameModeInit();
        return 
    1;

    Это позволяет контролировать порядок вызова кода из инклудов, легко его меняя (например, создать 2 функции в инклуде и первую функцию вызывать в начале коллбэка, а другую - в конце. С перехватами это сделать сложнее и никогда не будет уверенности, что код действительно сработает первым/последним) + позволяет легко увидеть то, какие инклуды вызывают тот или иной паблик.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    24.03.2015
    Сообщений
    32
    Репутация:
    0 ±
    Спасибо, нашел ответ. Тему закройте.

 

 

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

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

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

Ваши права

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