PDA

Просмотр полной версии : [Include] Кэширование информации об игроке



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

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)




#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(playerid, cache_player_func[playerid][player_name], 20+1);
GetPlayerIp(playerid, cache_player_func[playerid][player_ip], 15+1);

SetPlayerColor(playerid, 0xFFFFFF00);
SetPlayerHealth(playerid, 100.0);
SetPlayerArmour(playerid, 0.0);
SetPlayerSkin(playerid, 0);

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(playerid, newstate, oldstate)
{
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(playerid, newstate, oldstate);
#endif
}
#if defined _ALS_OnPlayerStateChange
#undef OnPlayerStateChange
#else
#define _ALS_OnPlayerStateChange
#endif
#define OnPlayerStateChange cache_OnPlayerStateChange
#if defined cache_OnPlayerStateChange
forward cache_OnPlayerStateChange(playerid, newstate, oldstate);
#endif

public OnPlayerSpawn(playerid)
{
if(cache_player_func[playerid][player_tmp_skin] > -1)
{
SetPlayerSkin(playerid, cache_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(playerid, newinteriorid, oldinteriorid)
{
cache_player_func[playerid][player_int] = newinteriorid;

#if defined cache_OnPlayerInteriorChange
return cache_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
#endif
}
#if defined _ALS_OnPlayerInteriorChange
#undef OnPlayerInteriorChange
#else
#define _ALS_OnPlayerInteriorChange
#endif
#define OnPlayerInteriorChange cache_OnPlayerInteriorChange
#if defined cache_OnPlayerInteriorChange
forward cache_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
#endif


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

stock cache_SetPlayerColor(playerid, color)
{
cache_player_func[playerid][player_color] = color;
return SetPlayerColor(playerid, color);
}
#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], name, 0);
return SetPlayerName(playerid, name);
}
#if defined _ALS_SetPlayerName
#undef SetPlayerName
#else
#define _ALS_SetPlayerName
#endif
#define SetPlayerName cache_SetPlayerName

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

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

stock cache_SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:Angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
{
cache_player_func[playerid][player_tmp_skin] = skin;
return SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:Angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
}
#if defined _ALS_SetSpawnInfo
#undef SetSpawnInfo
#else
#define _ALS_SetSpawnInfo
#endif
#define SetSpawnInfo cache_SetSpawnInfo

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

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



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

Автор: Prolific, постите где угодно с указанием автора.

Seregamil
27.04.2016, 20:03
Ммм, вопрос: ЗАЧЕМ? В каждом моде есть структура типа

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];

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

Prolific
27.04.2016, 20:04
Ммм, вопрос: ЗАЧЕМ? В каждом моде есть структура типа

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

Благодаря этому инклуду она не нужна.

$continue$
27.04.2016, 21:38
Лель. Ну ладно :)

Благодаря этому инклуду она не нужна.

Prolific
27.04.2016, 22:34
Лель. Ну ладно :)

Как всегда мега тактично и аргументированно.
Кстати, с запятыми у тебя уже лучше.

$continue$
27.04.2016, 23:13
Окей. На кой уй, мне твоя структура построения мода?

Как всегда мега тактично и аргументированно.
Кстати, с запятыми у тебя уже лучше.

Seregamil
28.04.2016, 04:32
Благодаря этому инклуду она не нужна.

Окей. Если я хочу хранить другую информацию и манипулировать ей, мне нужно будет идти в твой инклуд и добавлять, либо же создавать новую структуру.
Если мне не нужна часть функционала, некоторые данные будут просто висеть, вопрос, зачем?
Мое мнение, но по мне дак лучше я потрачу 5 минут и сделаю всё то же самое, но буду знать, что и где используется.

Prolific
28.04.2016, 11:20
Окей. Если я хочу хранить другую информацию и манипулировать ей, мне нужно будет идти в твой инклуд и добавлять, либо же создавать новую структуру.
Если мне не нужна часть функционала, некоторые данные будут просто висеть, вопрос, зачем?
Мое мнение, но по мне дак лучше я потрачу 5 минут и сделаю всё то же самое, но буду знать, что и где используется.

Ну так делай сам, в чем проблема, таким образом можно все самому делать. Вот дом мне построили, а я не знаю где там трубы идут, да, действительно, лучше снесу ка я его нахер и построю свой, не прочтя документацию (код инклуда) старого дома.

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

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


Окей. На кой уй, мне твоя структура построения мода?

Что значит структура построения мода?

Seregamil
28.04.2016, 17:47
Ну так делай сам, в чем проблема, таким образом можно все самому делать.
ТАК ВО ВСЕХ МОДАХ/СКРИПТАХ ТАК ДЕЛАЮТ ВСЕ, ЛОЛ.

Prolific
30.04.2016, 16:26
ТАК ВО ВСЕХ МОДАХ/СКРИПТАХ ТАК ДЕЛАЮТ ВСЕ, ЛОЛ.

Не кричи, я не быдло, чтобы отвечать тем же. Я уже писал выше зачем этот инклуд, для каких модов.

vovandolg
21.08.2016, 15:47
stock cache_SetPlayerName(playerid, const name[])
{
strins(cache_player_func[playerid][player_name], name, 0);
return SetPlayerName(playerid, name);
}
#if defined _ALS_SetPlayerName
#undef SetPlayerName
#else
#define _ALS_SetPlayerName
#endif
#define SetPlayerName cache_SetPlayerName

А не strmid ли надо тут?:scratch_one-s_head:

TBoPoIIIoK
22.08.2016, 09:47
stock cache_SetPlayerName(playerid, const name[])
{
strins(cache_player_func[playerid][player_name], name, 0);
return SetPlayerName(playerid, name);
}
#if defined _ALS_SetPlayerName
#undef SetPlayerName
#else
#define _ALS_SetPlayerName
#endif
#define SetPlayerName cache_SetPlayerName

А не strmid ли надо тут?:scratch_one-s_head:

Разницы нету, ну кроме того, что с помощью strins можно будет положить сервер из - за выхода за пределы массива.