27.01.2017, 10:49
(
Last edited by DANGER1979; 27/01/2017 at 05:16 PM.
)
vw_inspection v1.1
Не претендую ни на что. Возможно многим покажется - это баян.
OnPlayerInfoChange
Описание:
Этот колбэк вызывается, когда игрок вызывает какой либо колбэк. Вызывается каждый раз когда вызывается любой из пабликов в параметрах которого есть playerid.Параметры:
(playerid, callback)Пример использования:
playerid ID игрока, который вызывает колбэк.
callback ID колбэка, который вызвал или использует данный игрок.
Для получения названия колбэка используйте ф-ию GetNameCallback(callback)
Code:
#define MAX_CALLBACK 57 new counter[MAX_CALLBACK];//счётчик входов в данную ф-ию
Code:
stock GetNameCallback(callback)
{
new Message[32];
switch(callback)
{
case 5: Message = "PlayerConnect";
case 6: Message = "PlayerDisconnect";
case 7: Message = "PlayerSpawn";
case 8: Message = "PlayerDeath";
case 9: Message = "VehicleSpawn";
case 10: Message = "VehicleDeath";
case 11: Message = "PlayerTxt";
case 12: Message = "PlayerCommandText";
case 13: Message = "PlayerRequestClass";
case 14: Message = "PlayerEnterVehicle";
case 15: Message = "PlayerExitVehicle";
case 16: Message = "PlayerStateChange";
case 17: Message = "PlayerEnterCheckpoint";
case 18: Message = "PlayerLeaveCheckpoint";
case 19: Message = "PlayerEnterRaceCheckpoint";
case 20: Message = "PlayerLeaveRaceCheckpoint";
case 21: Message = "RconCommand";
case 22: Message = "PlayerRequestSpawn";
case 23: Message = "ObjectMoved";
case 24: Message = "PlayerObjectMoved";
case 25: Message = "PlayerPickUpPickup";
case 26: Message = "VehicleMod";
case 27: Message = "EnterExitModShop";
case 28: Message = "VehiclePaintjob";
case 29: Message = "VehicleRespray";
case 30: Message = "VehicleDamageStatusUpdate";
case 31: Message = "UnoccupiedVehicleUpdate";
case 32: Message = "PlayerSelectedMenuRow";
case 33: Message = "PlayerExitedMenu";
case 34: Message = "PlayerInteriorChange";
case 35: Message = "PlayerKeyStateChange";
case 36: Message = "RconLoginAttempt";
case 37: Message = "PlayerUpdate";
case 38: Message = "PlayerStreamIn";
case 39: Message = "PlayerStreamOut";
case 40: Message = "VehicleStreamIn";
case 41: Message = "VehicleStreamOut";
case 42: Message = "ActorStreamIn";
case 43: Message = "ActorStreamOut";
case 44: Message = "DialogResponse";
case 45: Message = "PlayerTakeDamage";
case 46: Message = "PlayerGiveDamage";
case 47: Message = "PlayerGiveDamageActor";
case 48: Message = "PlayerClickMap";
case 49: Message = "PlayerClickTextDraw";
case 50: Message = "PlayerClickPlayerTextDraw";
case 51: Message = "IncomingConnection";
case 52: Message = "TrailerUpdate";
case 53: Message = "VehicleSirenStateChange";
case 54: Message = "PlayerClickPlayer";
case 55: Message = "PlayerEditObject";
case 56: Message = "PlayerEditAttachedObject";
case 57: Message = "PlayerWeaponShot";
case 58: Message = "PlayerSelectObject";
default: Message = "Unknown";
}
return Message;
}
Code:
//Вызывается каждый раз когда вызывается любой из пабликов, который меняет массив PlayerInfo
forward OnPlayerInfoChange(playerid, callback);
public OnPlayerInfoChange(playerid, callback)
//Данная процедура обрабатывается при изменении информации о игроке.
{
counter[callback]++;
if( callback == UnoccupiedVehicleUpdate || //callback == PlayerKeyStateChange || callback == TrailerUpdate ||
callback == PlayerStreamIn || callback == PlayerStreamOut ||
callback == VehicleStreamIn || callback == VehicleStreamOut)
{
return 1;
}
//ИНФОРМИРОВАНИЕ
new str[137+32+3+32+2+6];
format(str, sizeof(str),
"Information about player {0080FF}%s{FFFFFF}[%d] has changed. Callback: {0080FF}%s{FFFFFF}[%d] call: {00FF00}%d",
PlayerName(playerid), playerid, GetNameCallback(callback), callback, counter[callback]);
SendClientMessage(playerid, -1, str);
//print(str);
return 1;
}
Quote:
|
Основное назначение: для вывода данных по игроку тогда, когда они меняются. Для сохранения данных игрока тогда когда они меняются, а не постоянно каждую милисекунду или интервал заданный таймером. Данные на экране по переменным игрока будут меняться не каждую секунду, а только тогда когда игрок что то сделает. Дополнительное назначение: Скрипт для замены таймеров и OnPlayerUpdate, т.к. они постоянно с заданным интервалом запускаются. Данный же колбэк запускается только тогда, когда игрок меняет своё состояние, меняет интерьер, садиться или выходит из тачки, т.е. если просто перемещается - данный колбэк вызываться не будет. За счёт этого нагрузка на сервер будет минимальна. Также можно видеть каким игроком, когда, в какой последовательности и сколько раз вызывается какой либо колбэк. |
Исходный код: vw_inspect.pwn
Если подскажите как его сделать ввиде инклюда и при этом не использовать CallRemoteFunction буду очень признателен, чтобы можно было использовать данный колбэк как в моде так и в скриптах.


