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

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

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

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

     Описание функций
    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. 2 пользователя(ей) сказали cпасибо:
    Nexius_Tailer (28.04.2016) Unreal (21.03.2019)
  3. #2
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Ммм, вопрос: ЗАЧЕМ? В каждом моде есть структура типа
    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
    Репутация:
    14 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    Ммм, вопрос: ЗАЧЕМ? В каждом моде есть структура типа

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

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Лель. Ну ладно :)
    Цитата Сообщение от Prolific Посмотреть сообщение
    Благодаря этому инклуду она не нужна.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

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

  7. #6
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Окей. На кой уй, мне твоя структура построения мода?
    Цитата Сообщение от Prolific Посмотреть сообщение
    Как всегда мега тактично и аргументированно.
    Кстати, с запятыми у тебя уже лучше.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

Ваши права

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