Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для Prolific
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    13 ±

    Кэширование информации об игроке

    Приветствую, друзья. Написал полезный инклуд, которой кэширует некоторую информацию об игроке, для последующего быстрого доступа к ней.

     Описание функций
    cache_GetPlayerVehicleID(playerid)
    Возвращает ИД транспорта, в котором сидит игрок

    cache_IsPlayerInVehicle(playerid, vehicleid)
    Возвращает 1/0 в зависимости от того сидит игрок в vehicleid или нет

    cache_IsPlayerInAnyVehicle(playerid)
    Возвращает 1/0 в зависимости от того сидит ли игрок в каком либо транспорте

    cache_GetPlayerVehicleSeat(playerid)
    Возвращает ид места игрока в транспорте, либо -1, если игрок не в транспорте

    cache_GetPlayerState(playerid)
    Возвращает текущее положение игрока

    cache_GetPlayerInterior(playerid)
    Возвращает интерьер игрока

    cache_GetPlayerVirtualWorld(playerid)
    Возвращает виртуальный мир игрока

    cache_GetPlayerColor(playerid)
    Возвращает цвет игрока

    cache_GetPlayerName(playerid)
    Возвращает имя игрока (размер MAX_PLAYER_NAME+1)

    cache_GetPlayerScore(playerid)
    Возвращает очки игрока

    cache_GetPlayerSkin(playerid)
    Возвращает скин игрока

    cache_GetPlayerIp(playerid)
    Возвращает ип игрока (размер 15+1)

    cache_GetPlayerHealth(playerid)
    Возвращает ХП игрока (float)

    cache_GetPlayerArmour(playerid)
    Возвращает броню игрока (float)


     Исходный код

    PHP код:
    #include <a_samp>
    enum enum_player_sost
    {
        
    player_veh,
        
    player_seat,
        
    player_state,
        
    player_int,
        
    player_vw,
        
    player_color,
        
    player_name[MAX_PLAYER_NAME+1],
        
    player_score,
        
    player_skin,
        
    player_tmp_skin,
        
    player_ip[15+1],
        
    Float:player_health,
        
    Float:player_armour
    }
    new 
    cache_player_func[MAX_PLAYERS][enum_player_sost];

    #define cache_GetPlayerVehicleID(%0) cache_player_func[%0][player_veh]
    #define cache_IsPlayerInVehicle(%0,%1) ((%1 == cache_player_func[%0][player_veh]) ? (1) : (0))
    #define cache_IsPlayerInAnyVehicle(%0) ((cache_player_func[%0][player_veh]) ? (1) : (0))
    #define cache_GetPlayerVehicleSeat(%0) cache_player_func[%0][player_seat]
    #define cache_GetPlayerState(%0) cache_player_func[%0][player_state]
    #define cache_GetPlayerInterior(%0) cache_player_func[%0][player_int]
    #define cache_GetPlayerVirtualWorld(%0) cache_player_func[%0][player_vw]
    #define cache_GetPlayerColor(%0) cache_player_func[%0][player_color]
    #define cache_GetPlayerName(%0) cache_player_func[%0][player_name]
    #define cache_GetPlayerScore(%0) cache_player_func[%0][player_score]
    #define cache_GetPlayerSkin(%0) cache_player_func[%0][player_skin]
    #define cache_GetPlayerIp(%0) cache_player_func[%0][player_ip]
    #define cache_GetPlayerHealth(%0) cache_player_func[%0][player_health]
    #define cache_GetPlayerArmour(%0) cache_player_func[%0][player_armour]

    //Перехваты коллбэков
    public OnPlayerConnect(playerid)
    {
        
    GetPlayerName(playeridcache_player_func[playerid][player_name], 20+1);
        
    GetPlayerIp(playeridcache_player_func[playerid][player_ip], 15+1);

        
    SetPlayerColor(playerid0xFFFFFF00);
        
    SetPlayerHealth(playerid100.0);
        
    SetPlayerArmour(playerid0.0);
        
    SetPlayerSkin(playerid0);
        
        
    cache_player_func[playerid][player_tmp_skin] = -1;
        
    cache_player_func[playerid][player_veh] = 0;
        
    cache_player_func[playerid][player_seat] = -1;
        
    cache_player_func[playerid][player_state] = 0;
        
    cache_player_func[playerid][player_int] = 0;
        
    cache_player_func[playerid][player_vw] = 0;
        
    cache_player_func[playerid][player_score] = 0;
        
    #if defined cache_OnPlayerConnect
        
    return cache_OnPlayerConnect(playerid);
    #endif
    }
    #if defined _ALS_OnPlayerConnect
        #undef    OnPlayerConnect
    #else
        #define    _ALS_OnPlayerConnect
    #endif
    #define    OnPlayerConnect    cache_OnPlayerConnect
    #if defined cache_OnPlayerConnect
    forward cache_OnPlayerConnect(playerid);
    #endif

    public OnPlayerStateChange(playeridnewstateoldstate)
    {
        
    cache_player_func[playerid][player_state] = newstate;
        if(
    newstate == PLAYER_STATE_DRIVER)
        {
            
    cache_player_func[playerid][player_veh] = GetPlayerVehicleID(playerid);
            
    cache_player_func[playerid][player_seat] = 0;
        }
        else if(
    newstate == PLAYER_STATE_PASSENGER)
        {
            
    cache_player_func[playerid][player_veh] = GetPlayerVehicleID(playerid);
            
    cache_player_func[playerid][player_seat] = GetPlayerVehicleSeat(playerid);
        }
        else if(
    oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
        {
            
    cache_player_func[playerid][player_veh] = 0;
            
    cache_player_func[playerid][player_seat] = -1;
        }

    #if defined cache_OnPlayerStateChange
        
    return cache_OnPlayerStateChange(playeridnewstateoldstate);
    #endif
    }
    #if defined _ALS_OnPlayerStateChange
        #undef    OnPlayerStateChange
    #else
        #define    _ALS_OnPlayerStateChange
    #endif
    #define    OnPlayerStateChange    cache_OnPlayerStateChange
    #if defined cache_OnPlayerStateChange
    forward cache_OnPlayerStateChange(playeridnewstateoldstate);
    #endif

    public OnPlayerSpawn(playerid)
    {
        if(
    cache_player_func[playerid][player_tmp_skin] > -1)
        {
            
    SetPlayerSkin(playeridcache_player_func[playerid][player_tmp_skin]);
            
    cache_player_func[playerid][player_tmp_skin] = -1;
        }

    #if defined cache_OnPlayerSpawn
        
    return cache_OnPlayerSpawn(playerid);
    #endif
    }
    #if defined _ALS_OnPlayerSpawn
        #undef    OnPlayerSpawn
    #else
        #define    _ALS_OnPlayerSpawn
    #endif
    #define    OnPlayerSpawn    cache_OnPlayerSpawn
    #if defined cache_OnPlayerSpawn
    forward cache_OnPlayerSpawn(playerid);
    #endif

    public OnPlayerInteriorChange(playeridnewinterioridoldinteriorid)
    {
        
    cache_player_func[playerid][player_int] = newinteriorid;

    #if defined cache_OnPlayerInteriorChange
        
    return cache_OnPlayerInteriorChange(playeridnewinterioridoldinteriorid);
    #endif
    }
    #if defined _ALS_OnPlayerInteriorChange
        #undef    OnPlayerInteriorChange
    #else
        #define    _ALS_OnPlayerInteriorChange
    #endif
    #define    OnPlayerInteriorChange    cache_OnPlayerInteriorChange
    #if defined cache_OnPlayerInteriorChange
    forward cache_OnPlayerInteriorChange(playeridnewinterioridoldinteriorid);
    #endif


    //Перехват функций
    stock cache_SetPlayerVirtualWorld(playeridworldid)
    {
        
    cache_player_func[playerid][player_vw] = worldid;
        return 
    SetPlayerVirtualWorld(playeridworldid);
    }
    #if defined _ALS_SetPlayerVirtualWorld
        #undef    SetPlayerVirtualWorld
    #else
        #define    _ALS_SetPlayerVirtualWorld
    #endif
    #define    SetPlayerVirtualWorld    cache_SetPlayerVirtualWorld

    stock cache_SetPlayerColor(playeridcolor)
    {
        
    cache_player_func[playerid][player_color] = color;
        return 
    SetPlayerColor(playeridcolor);
    }
    #if defined _ALS_SetPlayerColor
        #undef    SetPlayerColor
    #else
        #define    _ALS_SetPlayerColor
    #endif
    #define    SetPlayerColor    cache_SetPlayerColor

    stock cache_SetPlayerName(playerid, const name[])
    {
        
    strins(cache_player_func[playerid][player_name], name0);
        return 
    SetPlayerName(playeridname);
    }
    #if defined _ALS_SetPlayerName
        #undef    SetPlayerName
    #else
        #define    _ALS_SetPlayerName
    #endif
    #define    SetPlayerName    cache_SetPlayerName

    stock cache_SetPlayerScore(playeridscore)
    {
        
    cache_player_func[playerid][player_score] = score;
        return 
    SetPlayerScore(playeridscore);
    }
    #if defined _ALS_SetPlayerScore
        #undef    SetPlayerScore
    #else
        #define    _ALS_SetPlayerScore
    #endif
    #define    SetPlayerScore    cache_SetPlayerScore

    stock cache_SetPlayerSkin(playeridskinid)
    {
        
    cache_player_func[playerid][player_skin] = skinid;
        return 
    SetPlayerSkin(playeridskinid);
    }
    #if defined _ALS_SetPlayerSkin
        #undef    SetPlayerSkin
    #else
        #define    _ALS_SetPlayerSkin
    #endif
    #define    SetPlayerSkin    cache_SetPlayerSkin

    stock cache_SetSpawnInfo(playeridteamskinFloat:xFloat:yFloat:zFloat:Angleweapon1weapon1_ammoweapon2weapon2_ammoweapon3weapon3_ammo)
    {
        
    cache_player_func[playerid][player_tmp_skin] = skin;
        return 
    SetSpawnInfo(playeridteamskinFloat:xFloat:yFloat:zFloat:Angleweapon1weapon1_ammoweapon2weapon2_ammoweapon3weapon3_ammo);
    }
    #if defined _ALS_SetSpawnInfo
        #undef    SetSpawnInfo
    #else
        #define    _ALS_SetSpawnInfo
    #endif
    #define    SetSpawnInfo    cache_SetSpawnInfo

    stock cache_SetPlayerHealth(playeridFloat:health)
    {
        
    cache_player_func[playerid][player_health] = health;
        return 
    SetPlayerHealth(playeridhealth);
    }
    #if defined _ALS_SetPlayerHealth
        #undef    SetPlayerHealth
    #else
        #define    _ALS_SetPlayerHealth
    #endif
    #define    SetPlayerHealth    cache_SetPlayerHealth

    stock cache_SetPlayerArmour(playeridFloat:armour)
    {
        
    cache_player_func[playerid][player_armour] = armour;
        return 
    SetPlayerArmour(playeridarmour);
    }
    #if defined _ALS_SetPlayerArmour
        #undef    SetPlayerArmour
    #else
        #define    _ALS_SetPlayerArmour
    #endif
    #define    SetPlayerArmour    cache_SetPlayerArmour 


    !!!Возможен выход за пределы массива!!!

    Автор: Prolific, постите где угодно с указанием автора.
    Последний раз редактировалось Prolific; 27.04.2016 в 21:27.

  2. Пользователь сказал cпасибо:
    Nexius_Tailer (28.04.2016)
  3. #2
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    272 ±
    Ммм, вопрос: ЗАЧЕМ? В каждом моде есть структура типа
    enum enum_player_sost
    {
    player_veh,
    player_seat,
    player_state,
    player_int,
    player_vw,
    player_color,
    player_name[MAX_PLAYER_NAME+1],
    player_score,
    player_skin,
    player_tmp_skin,
    player_ip[15+1],
    Float:player_health,
    Float:player_armour
    }
    new cache_player_func[MAX_PLAYERS][enum_player_sost];
    И каждый использует ее по своему назначению, если человеку не требуется часть того, что тут есть, то зачем ему это?

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

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    13 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    Ммм, вопрос: ЗАЧЕМ? В каждом моде есть структура типа

    И каждый использует ее по своему назначению, если человеку не требуется часть того, что тут есть, то зачем ему это?
    Благодаря этому инклуду она не нужна.

  5. #4
    Аватар для $continue$
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,466
    Репутация:
    265 ±
    Лель. Ну ладно :)
    Цитата Сообщение от Prolific Посмотреть сообщение
    Благодаря этому инклуду она не нужна.

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

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    13 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Лель. Ну ладно :)
    Как всегда мега тактично и аргументированно.
    Кстати, с запятыми у тебя уже лучше.

  7. #6
    Аватар для $continue$
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,466
    Репутация:
    265 ±
    Окей. На кой уй, мне твоя структура построения мода?
    Цитата Сообщение от Prolific Посмотреть сообщение
    Как всегда мега тактично и аргументированно.
    Кстати, с запятыми у тебя уже лучше.

  8. #7
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    272 ±
    Цитата Сообщение от Prolific Посмотреть сообщение
    Благодаря этому инклуду она не нужна.
    Окей. Если я хочу хранить другую информацию и манипулировать ей, мне нужно будет идти в твой инклуд и добавлять, либо же создавать новую структуру.
    Если мне не нужна часть функционала, некоторые данные будут просто висеть, вопрос, зачем?
    Мое мнение, но по мне дак лучше я потрачу 5 минут и сделаю всё то же самое, но буду знать, что и где используется.

  9. #8
    Аватар для Prolific
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    13 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    Окей. Если я хочу хранить другую информацию и манипулировать ей, мне нужно будет идти в твой инклуд и добавлять, либо же создавать новую структуру.
    Если мне не нужна часть функционала, некоторые данные будут просто висеть, вопрос, зачем?
    Мое мнение, но по мне дак лучше я потрачу 5 минут и сделаю всё то же самое, но буду знать, что и где используется.
    Ну так делай сам, в чем проблема, таким образом можно все самому делать. Вот дом мне построили, а я не знаю где там трубы идут, да, действительно, лучше снесу ка я его нахер и построю свой, не прочтя документацию (код инклуда) старого дома.

    Даже если так, делай свою структуру. Просто в 70% модов, что я видел, в каждом кусочке кода юзается GetPlayerName, GetPlayerVehicleID, etc. Инклуд рассчитан для таких модов. Хотя ни что не мешает его поставить на любой.

    - - - Добавлено - - -

    Цитата Сообщение от $continue$ Посмотреть сообщение
    Окей. На кой уй, мне твоя структура построения мода?
    Что значит структура построения мода?

  10. #9
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    272 ±
    Ну так делай сам, в чем проблема, таким образом можно все самому делать.
    ТАК ВО ВСЕХ МОДАХ/СКРИПТАХ ТАК ДЕЛАЮТ ВСЕ, ЛОЛ.

  11. #10
    Аватар для Prolific
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    13 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    ТАК ВО ВСЕХ МОДАХ/СКРИПТАХ ТАК ДЕЛАЮТ ВСЕ, ЛОЛ.
    Не кричи, я не быдло, чтобы отвечать тем же. Я уже писал выше зачем этот инклуд, для каких модов.

 

 
Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Ваши права

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