Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ============================================================
- // Attached Object Ex (AOX)
- // by Corekt a.k.a. robotmonkey
- // © 2014
- //
- // ***IMPORTANT***
- // You must include this before any other
- // include that uses SetPlayerAttachedObject or
- // RemovePlayerAttachedObject
- //
- // For updates please visit
- // http://forum.sa-mp.com/showthread.php?t=506429
- // ============================================================
- #if !defined _samp_included
- #error You must include a_samp before attachedobjex.
- #endif
- forward _AOX_CheckWeaponZoom(playerid);
- forward RemovePlayerTempAttachedObject(playerid, index, aoid);
- forward MovePlayerAttachedObject_Timer(playerid, index, aoid, Float:OffsetX1, Float:OffsetY1, Float:OffsetZ1, Float:OffsetX2, Float:OffsetY2, Float:OffsetZ2, Float:Speed, Float:pfactor);
- // Callbacks
- forward OnTempAttachedObjectDestroy(playerid, index);
- forward OnPlayerAttachedObjectMoved(playerid, index);
- enum E_AOX_DATA
- {
- eAO_modelid,
- eAO_bone,
- Float:eAO_fOffsetX,
- Float:eAO_fOffsetY,
- Float:eAO_fOffsetZ,
- Float:eAO_fRotX,
- Float:eAO_fRotY,
- Float:eAO_fRotZ,
- Float:eAO_fScaleX,
- Float:eAO_fScaleY,
- Float:eAO_fScaleZ,
- eAO_materialcolor1,
- eAO_materialcolor2,
- eAO_id,
- eAO_idTemp,
- eAO_tempBirth,
- eAO_tempTime,
- bool:eAO_tempRemoved,
- bool:eAO_isMoving
- }
- static
- gAOX_Tickrate = 15,
- gPlayerAO[MAX_PLAYERS][MAX_PLAYER_ATTACHED_OBJECTS][E_AOX_DATA],
- gTempAttachedObjectCount[MAX_PLAYERS],
- gIsPlayerWeaponZoomedIn[MAX_PLAYERS],
- gTimerWeaponZoom[MAX_PLAYERS],
- bool:gAOWeaponZoomEnabled[MAX_PLAYERS],
- bool:gRemoveNormAOWeaponZoom[MAX_PLAYERS];
- // CALLBACK HOOK
- public OnPlayerConnect(playerid)
- {
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- RemovePlayerAttachedObject(playerid, i);
- gPlayerAO[playerid][i][eAO_modelid] = INVALID_OBJECT_ID;
- gPlayerAO[playerid][i][eAO_bone] = 0;
- gPlayerAO[playerid][i][eAO_fOffsetX] = 0;
- gPlayerAO[playerid][i][eAO_fOffsetY] = 0;
- gPlayerAO[playerid][i][eAO_fOffsetZ] = 0;
- gPlayerAO[playerid][i][eAO_fRotX] = 0;
- gPlayerAO[playerid][i][eAO_fRotY] = 0;
- gPlayerAO[playerid][i][eAO_fRotZ] = 0;
- gPlayerAO[playerid][i][eAO_fScaleX] = 0;
- gPlayerAO[playerid][i][eAO_fScaleY] = 0;
- gPlayerAO[playerid][i][eAO_fScaleZ] = 0;
- gPlayerAO[playerid][i][eAO_materialcolor1] = 0;
- gPlayerAO[playerid][i][eAO_materialcolor2] = 0;
- gPlayerAO[playerid][i][eAO_id] = 0;
- gPlayerAO[playerid][i][eAO_tempBirth] = 0;
- gPlayerAO[playerid][i][eAO_tempRemoved] = false;
- gPlayerAO[playerid][i][eAO_isMoving] = false;
- }
- gTempAttachedObjectCount[playerid] = 0;
- gIsPlayerWeaponZoomedIn[playerid] = false;
- gAOWeaponZoomEnabled[playerid] = true;
- gRemoveNormAOWeaponZoom[playerid] = false;
- if (funcidx("AOXhook_OnPlayerConnect") != -1) {
- return CallLocalFunction("AOXhook_OnPlayerConnect", "d", playerid);
- }
- return 1;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect AOXhook_OnPlayerConnect
- forward AOXhook_OnPlayerConnect(playerid);
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if (gAOWeaponZoomEnabled[playerid]) {
- if (((newkeys & (KEY_HANDBRAKE)) == (KEY_HANDBRAKE)) && ((oldkeys & (KEY_HANDBRAKE)) != (KEY_HANDBRAKE)) && !IsPlayerInAnyVehicle(playerid)) {
- if (GetPlayerWeapon(playerid) == WEAPON_SNIPER || GetPlayerWeapon(playerid) == WEAPON_ROCKETLAUNCHER || GetPlayerWeapon(playerid) == WEAPON_HEATSEEKER || GetPlayerWeapon(playerid) == WEAPON_CAMERA) {
- if (!gIsPlayerWeaponZoomedIn[playerid]) {
- if (GetAttachedObjectCount(playerid) > 0) {
- gIsPlayerWeaponZoomedIn[playerid] = true;
- RemoveAllTempAttachedObjects(playerid);
- gTimerWeaponZoom[playerid] = SetTimerEx("_AOX_CheckWeaponZoom", 500, true, "d", playerid);
- } else {
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- gPlayerAO[playerid][i][eAO_modelid] = INVALID_OBJECT_ID;
- gPlayerAO[playerid][i][eAO_bone] = 0;
- gPlayerAO[playerid][i][eAO_fOffsetX] = 0;
- gPlayerAO[playerid][i][eAO_fOffsetY] = 0;
- gPlayerAO[playerid][i][eAO_fOffsetZ] = 0;
- gPlayerAO[playerid][i][eAO_fRotX] = 0;
- gPlayerAO[playerid][i][eAO_fRotY] = 0;
- gPlayerAO[playerid][i][eAO_fRotZ] = 0;
- gPlayerAO[playerid][i][eAO_fScaleX] = 0;
- gPlayerAO[playerid][i][eAO_fScaleY] = 0;
- gPlayerAO[playerid][i][eAO_fScaleZ] = 0;
- gPlayerAO[playerid][i][eAO_materialcolor1] = 0;
- gPlayerAO[playerid][i][eAO_materialcolor2] = 0;
- gPlayerAO[playerid][i][eAO_id] = 0;
- gPlayerAO[playerid][i][eAO_tempBirth] = 0;
- gPlayerAO[playerid][i][eAO_tempTime] = 0;
- gPlayerAO[playerid][i][eAO_tempRemoved] = false;
- gPlayerAO[playerid][i][eAO_isMoving] = false;
- }
- gTempAttachedObjectCount[playerid] = 0;
- }
- }
- }
- }
- }
- if (funcidx("AOXhook_OnPlayerKeyStateChange") != -1) {
- return CallLocalFunction("AOXhook_OnPlayerKeyStateChange", "ddd", playerid, newkeys, oldkeys);
- }
- return 1;
- }
- #if defined _ALS_OnPlayerKeyStateChange
- #undef OnPlayerKeyStateChange
- #else
- #define _ALS_OnPlayerKeyStateChange
- #endif
- #define OnPlayerKeyStateChange AOXhook_OnPlayerKeyStateChange
- forward AOXhook_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
- // =========================================
- // FUNC HOOK
- stock _AOX_SetPlayerAttachedObject(playerid, index, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0, materialcolor1 = 0, materialcolor2 = 0)
- {
- if (index < 0 || index >= MAX_PLAYER_ATTACHED_OBJECTS) return 0; // prevent array index out of bounds exception
- new
- bool:replace = false;
- if (IsPlayerAttachedObjectSlotUsed(playerid, index)) replace = true;
- if (SetPlayerAttachedObject(playerid, index, modelid, bone, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ, materialcolor1, materialcolor2) != 0) {
- if (!replace && !gPlayerAO[playerid][index][eAO_tempRemoved]) gPlayerAO[playerid][index][eAO_id]++;
- gPlayerAO[playerid][index][eAO_modelid] = modelid;
- gPlayerAO[playerid][index][eAO_bone] = bone;
- gPlayerAO[playerid][index][eAO_fOffsetX] = fOffsetX;
- gPlayerAO[playerid][index][eAO_fOffsetY] = fOffsetY;
- gPlayerAO[playerid][index][eAO_fOffsetZ] = fOffsetZ;
- gPlayerAO[playerid][index][eAO_fRotX] = fRotX;
- gPlayerAO[playerid][index][eAO_fRotY] = fRotY;
- gPlayerAO[playerid][index][eAO_fRotZ] = fRotZ;
- gPlayerAO[playerid][index][eAO_fScaleX] = fScaleX;
- gPlayerAO[playerid][index][eAO_fScaleY] = fScaleY;
- gPlayerAO[playerid][index][eAO_fScaleZ] = fScaleZ;
- gPlayerAO[playerid][index][eAO_materialcolor1] = materialcolor1;
- gPlayerAO[playerid][index][eAO_materialcolor2] = materialcolor2;
- return 1;
- } else {
- return 0;
- }
- }
- #if defined _ALS_SetPlayerAttachedObject
- #undef SetPlayerAttachedObject
- #else
- #define _ALS_SetPlayerAttachedObject
- #endif
- #define SetPlayerAttachedObject _AOX_SetPlayerAttachedObject
- stock _AOX_RemovePlayerAttachedObject(playerid, index)
- {
- if (index < 0 || index >= MAX_PLAYER_ATTACHED_OBJECTS) return 0; // prevent array index out of bounds exception
- if (!gPlayerAO[playerid][index][eAO_tempRemoved]) {
- if (gPlayerAO[playerid][index][eAO_tempBirth] != 0) {
- gTempAttachedObjectCount[playerid]--;
- }
- gPlayerAO[playerid][index][eAO_modelid] = INVALID_OBJECT_ID;
- gPlayerAO[playerid][index][eAO_bone] = 0;
- gPlayerAO[playerid][index][eAO_fOffsetX] = 0;
- gPlayerAO[playerid][index][eAO_fOffsetY] = 0;
- gPlayerAO[playerid][index][eAO_fOffsetZ] = 0;
- gPlayerAO[playerid][index][eAO_fRotX] = 0;
- gPlayerAO[playerid][index][eAO_fRotY] = 0;
- gPlayerAO[playerid][index][eAO_fRotZ] = 0;
- gPlayerAO[playerid][index][eAO_fScaleX] = 0;
- gPlayerAO[playerid][index][eAO_fScaleY] = 0;
- gPlayerAO[playerid][index][eAO_fScaleZ] = 0;
- gPlayerAO[playerid][index][eAO_materialcolor1] = 0;
- gPlayerAO[playerid][index][eAO_materialcolor2] = 0;
- gPlayerAO[playerid][index][eAO_tempBirth] = 0;
- gPlayerAO[playerid][index][eAO_tempTime] = 0;
- gPlayerAO[playerid][index][eAO_isMoving] = false;
- }
- return RemovePlayerAttachedObject(playerid, index);
- }
- #if defined _ALS_RemovePlayerAttachedObject
- #undef RemovePlayerAttachedObject
- #else
- #define _ALS_RemovePlayerAttachedObject
- #endif
- #define RemovePlayerAttachedObject _AOX_RemovePlayerAttachedObject
- // ==========================================================
- stock AOX_GetTickRate()
- {
- return gAOX_Tickrate;
- }
- stock AOX_SetTickRate(tickrate)
- {
- gAOX_Tickrate = tickrate;
- }
- stock IsPlayerAttachedObjectTemp(playerid, index)
- {
- return (gPlayerAO[playerid][index][eAO_tempBirth] != 0) ? true : false;
- }
- stock GetFreePlayerAttachedObjectSlot(playerid)
- {
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, i))
- return i;
- }
- return -1;
- }
- stock GetTempAttachedObjectCount(playerid)
- {
- return (!GetAttachedObjectCount(playerid)) ? 0 : gTempAttachedObjectCount[playerid];
- }
- stock GetAttachedObjectCount(playerid)
- {
- new count;
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- if (IsPlayerAttachedObjectSlotUsed(playerid, i))
- count++;
- }
- return count;
- }
- stock GetPlayerAttachedObjectID(playerid, index)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) && !gPlayerAO[playerid][index][eAO_tempRemoved])
- return -1;
- return (gPlayerAO[playerid][index][eAO_tempBirth] != 0) ? gPlayerAO[playerid][index][eAO_id] : -1;
- }
- stock GetPlayerAttachedObjectBone(playerid, index)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) && !gPlayerAO[playerid][index][eAO_tempRemoved])
- return 0;
- return gPlayerAO[playerid][index][eAO_bone];
- }
- stock SetPlayerAttachedObjectBone(playerid, index, bone)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index))
- return 0;
- gPlayerAO[playerid][index][bone] = bone;
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][bone],
- gPlayerAO[playerid][index][eAO_fOffsetX], gPlayerAO[playerid][index][eAO_fOffsetY], gPlayerAO[playerid][index][eAO_fOffsetZ],
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- return 1;
- }
- stock GetPlayerAttachedObjectModel(playerid, index)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) && !gPlayerAO[playerid][index][eAO_tempRemoved])
- return INVALID_OBJECT_ID;
- return gPlayerAO[playerid][index][eAO_modelid];
- }
- stock SetPlayerAttachedObjectModel(playerid, index, modelid)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index))
- return 0;
- gPlayerAO[playerid][index][eAO_modelid] = modelid;
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][eAO_bone],
- gPlayerAO[playerid][index][eAO_fOffsetX], gPlayerAO[playerid][index][eAO_fOffsetY], gPlayerAO[playerid][index][eAO_fOffsetZ],
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- return 1;
- }
- stock GetPlayerAttachedObjectOffset(playerid, index, &Float:fOffsetX, &Float:fOffsetY, &Float:fOffsetZ)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) && !gPlayerAO[playerid][index][eAO_tempRemoved])
- return 0;
- fOffsetX = gPlayerAO[playerid][index][eAO_fOffsetX];
- fOffsetY = gPlayerAO[playerid][index][eAO_fOffsetY];
- fOffsetZ = gPlayerAO[playerid][index][eAO_fOffsetZ];
- return 1;
- }
- stock SetPlayerAttachedObjectOffset(playerid, index, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) || gPlayerAO[playerid][index][eAO_isMoving])
- return 0;
- gPlayerAO[playerid][index][eAO_fOffsetX] = fOffsetX;
- gPlayerAO[playerid][index][eAO_fOffsetY] = fOffsetY;
- gPlayerAO[playerid][index][eAO_fOffsetZ] = fOffsetZ;
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][eAO_bone],
- gPlayerAO[playerid][index][eAO_fOffsetX], gPlayerAO[playerid][index][eAO_fOffsetY], gPlayerAO[playerid][index][eAO_fOffsetZ],
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- return 1;
- }
- stock GetPlayerAttachedObjectRot(playerid, index, &Float:fRotX, &Float:fRotY, &Float:fRotZ)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) && !gPlayerAO[playerid][index][eAO_tempRemoved])
- return 0;
- fRotX = gPlayerAO[playerid][index][eAO_fRotX];
- fRotY = gPlayerAO[playerid][index][eAO_fRotY];
- fRotZ = gPlayerAO[playerid][index][eAO_fRotZ];
- return 1;
- }
- stock SetPlayerAttachedObjectRot(playerid, index, Float:fRotX, Float:fRotY, Float:fRotZ)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) || gPlayerAO[playerid][index][eAO_isMoving])
- return 0;
- gPlayerAO[playerid][index][eAO_fRotX] = fRotX;
- gPlayerAO[playerid][index][eAO_fRotY] = fRotY;
- gPlayerAO[playerid][index][eAO_fRotZ] = fRotZ;
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][eAO_bone],
- gPlayerAO[playerid][index][eAO_fOffsetX], gPlayerAO[playerid][index][eAO_fOffsetY], gPlayerAO[playerid][index][eAO_fOffsetZ],
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- return 1;
- }
- stock GetPlayerAttachedObjectScale(playerid, index, &Float:fScaleX, &Float:fScaleY, &Float:fScaleZ)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) && !gPlayerAO[playerid][index][eAO_tempRemoved])
- return 0;
- fScaleX = gPlayerAO[playerid][index][eAO_fScaleX];
- fScaleY = gPlayerAO[playerid][index][eAO_fScaleY];
- fScaleZ = gPlayerAO[playerid][index][eAO_fScaleZ];
- return 1;
- }
- stock SetPlayerAttachedObjectScale(playerid, index, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index))
- return 0;
- gPlayerAO[playerid][index][eAO_fScaleX] = fScaleX;
- gPlayerAO[playerid][index][eAO_fScaleY] = fScaleY;
- gPlayerAO[playerid][index][eAO_fScaleZ] = fScaleZ;
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][eAO_bone],
- gPlayerAO[playerid][index][eAO_fOffsetX], gPlayerAO[playerid][index][eAO_fOffsetY], gPlayerAO[playerid][index][eAO_fOffsetZ],
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- return 1;
- }
- stock GetPlayerAttachedObjectColor(playerid, index, &materialcolor1, &materialcolor2)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) && !gPlayerAO[playerid][index][eAO_tempRemoved]) return 0;
- materialcolor1 = gPlayerAO[playerid][index][eAO_materialcolor1];
- materialcolor2 = gPlayerAO[playerid][index][eAO_materialcolor2];
- return 1;
- }
- stock SetPlayerAttachedObjectColor(playerid, index, materialcolor1, materialcolor2)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index))
- return 0;
- gPlayerAO[playerid][index][eAO_materialcolor1] = materialcolor1;
- gPlayerAO[playerid][index][eAO_materialcolor2] = materialcolor2;
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][eAO_bone],
- gPlayerAO[playerid][index][eAO_fOffsetX], gPlayerAO[playerid][index][eAO_fOffsetY], gPlayerAO[playerid][index][eAO_fOffsetZ],
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- return 1;
- }
- stock GetOldestTempAttachedObject(playerid)
- {
- new
- oldestAO = -1,
- oldestTime = -1;
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- if (!gPlayerAO[playerid][i][eAO_tempBirth]) continue;
- if (gPlayerAO[playerid][i][eAO_tempBirth] < oldestTime || oldestTime == -1) {
- oldestAO = i;
- oldestTime = gPlayerAO[playerid][i][eAO_tempBirth];
- }
- }
- return oldestAO;
- }
- stock GetNewestTempAttachedObject(playerid)
- {
- new
- newestAO = -1,
- newestTime = -1;
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- if (!gPlayerAO[playerid][i][eAO_tempBirth]) continue;
- if (gPlayerAO[playerid][i][eAO_tempBirth] > newestAO || newestTime == -1) {
- newestAO = i;
- newestTime = gPlayerAO[playerid][i][eAO_tempBirth];
- }
- }
- return newestAO;
- }
- stock GetTempAttachedObjectTime(playerid, index)
- {
- return gPlayerAO[playerid][index][eAO_tempTime];
- }
- stock ToggleRemoveAOWeaponZoom(playerid, toggle)
- {
- gAOWeaponZoomEnabled[playerid] = (toggle) ? true : false;
- }
- stock ToggleRemoveNormAOWeaponZoom(playerid, toggle)
- {
- gRemoveNormAOWeaponZoom[playerid] = (toggle) ? true : false;
- }
- stock IsPlayerAttachedObjectMoving(playerid, index)
- {
- return (IsPlayerAttachedObjectSlotUsed(playerid, index)) ? gPlayerAO[playerid][index][eAO_isMoving] : false;
- }
- stock SetPlayerTempAttachedObject
- (playerid, time, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0, materialcolor1 = 0, materialcolor2 = 0)
- {
- new
- index = GetFreePlayerAttachedObjectSlot(playerid);
- if (index == -1) {
- // All slots used
- new
- oldestTemp = GetOldestTempAttachedObject(playerid);
- if (oldestTemp == -1) return -1;
- index = oldestTemp;
- RemovePlayerAttachedObject(playerid, index); // no need for count decrement; hook handles it
- } else {
- gTempAttachedObjectCount[playerid]++;
- }
- gPlayerAO[playerid][index][eAO_tempBirth] = gettime();
- SetPlayerAttachedObject(playerid, index, modelid, bone, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ, materialcolor1, materialcolor2);
- if (time != -1) {
- gPlayerAO[playerid][index][eAO_tempTime] = time;
- SetTimerEx("RemovePlayerTempAttachedObject", time, false, "ddd", playerid, index, gPlayerAO[playerid][index][eAO_id]);
- }
- return index;
- }
- stock RemoveAllTempAttachedObjects(playerid)
- {
- if (!gIsPlayerWeaponZoomedIn[playerid]) return 0;
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, i)) continue;
- if (gPlayerAO[playerid][i][eAO_tempBirth] != 0 || gRemoveNormAOWeaponZoom[playerid]) {
- gPlayerAO[playerid][i][eAO_tempRemoved] = true;
- RemovePlayerAttachedObject(playerid, i);
- }
- }
- return 1;
- }
- stock RestoreAllTempAttachedObjects(playerid)
- {
- if (!gIsPlayerWeaponZoomedIn[playerid]) return 0;
- for (new i = 0; i < MAX_PLAYER_ATTACHED_OBJECTS; i++) {
- if ((gPlayerAO[playerid][i][eAO_tempBirth] != 0 || gRemoveNormAOWeaponZoom[playerid]) && gPlayerAO[playerid][i][eAO_tempRemoved]) {
- SetPlayerAttachedObject(playerid, i, gPlayerAO[playerid][i][eAO_modelid], gPlayerAO[playerid][i][eAO_bone],
- gPlayerAO[playerid][i][eAO_fOffsetX], gPlayerAO[playerid][i][eAO_fOffsetY], gPlayerAO[playerid][i][eAO_fOffsetZ],
- gPlayerAO[playerid][i][eAO_fRotX], gPlayerAO[playerid][i][eAO_fRotY], gPlayerAO[playerid][i][eAO_fRotZ],
- gPlayerAO[playerid][i][eAO_fScaleX], gPlayerAO[playerid][i][eAO_fScaleY], gPlayerAO[playerid][i][eAO_fScaleZ],
- gPlayerAO[playerid][i][eAO_materialcolor1], gPlayerAO[playerid][i][eAO_materialcolor2]);
- gPlayerAO[playerid][i][eAO_tempRemoved] = false;
- }
- }
- return 1;
- }
- public _AOX_CheckWeaponZoom(playerid)
- {
- if (!gIsPlayerWeaponZoomedIn[playerid]) return 0;
- new camMode = GetPlayerCameraMode(playerid);
- if (camMode != 7 && camMode != 8 && camMode != 16 && camMode != 46 && camMode != 51) {
- RestoreAllTempAttachedObjects(playerid);
- gIsPlayerWeaponZoomedIn[playerid] = false;
- KillTimer(gTimerWeaponZoom[playerid]);
- }
- return 1;
- }
- public RemovePlayerTempAttachedObject(playerid, index, aoid)
- {
- if (aoid == -1) aoid = GetPlayerAttachedObjectID(playerid, index);
- // Avoid conflicts
- if (aoid != gPlayerAO[playerid][index][eAO_id] || !IsPlayerConnected(playerid)) return 0;
- new
- bool:setRemove = true;
- if (funcidx("OnTempAttachedObjectDestroy") != -1) {
- if (CallLocalFunction("OnTempAttachedObjectDestroy", "dd", playerid, index) == 0 && gPlayerAO[playerid][index][eAO_tempTime] != 0) {
- // Don't remove if callback returns 0 and temp AO has expiry time
- setRemove = false;
- }
- }
- gPlayerAO[playerid][index][eAO_tempRemoved] = false;
- if (setRemove) {
- RemovePlayerAttachedObject(playerid, index);
- } else {
- SetTimerEx("RemovePlayerTempAttachedObject", gPlayerAO[playerid][index][eAO_tempTime], false, "ddd", playerid, index, gPlayerAO[playerid][index][eAO_id]);
- }
- return 1;
- }
- // ============= MOVE ATTACHED OBJECT ==============
- stock MovePlayerAttachedObject(playerid, index, Float:OffsetX, Float:OffsetY, Float:OffsetZ, Float:Speed)
- {
- if (!IsPlayerAttachedObjectSlotUsed(playerid, index) || gPlayerAO[playerid][index][eAO_isMoving] || floatcmp(Speed, 0.0) == 0) return 0;
- gPlayerAO[playerid][index][eAO_isMoving] = true;
- // Begin movement
- SetTimerEx("MovePlayerAttachedObject_Timer", gAOX_Tickrate, false, "dddffffffff", playerid, index, gPlayerAO[playerid][index][eAO_id],
- gPlayerAO[playerid][index][eAO_fOffsetX], gPlayerAO[playerid][index][eAO_fOffsetY], gPlayerAO[playerid][index][eAO_fOffsetZ],
- OffsetX, OffsetY, OffsetZ,
- floatabs(Speed), 0.0);
- return 1;
- }
- public MovePlayerAttachedObject_Timer(playerid, index, aoid, Float:OffsetX1, Float:OffsetY1, Float:OffsetZ1, Float:OffsetX2, Float:OffsetY2, Float:OffsetZ2, Float:Speed, Float:pfactor)
- {
- // Avoid conflicts
- if (!IsPlayerConnected(playerid) || !IsPlayerAttachedObjectSlotUsed(playerid, index) || aoid != gPlayerAO[playerid][index][eAO_id] || !gPlayerAO[playerid][index][eAO_isMoving])
- return 0;
- new
- Float:newPFact = floatadd(pfactor, floatdiv(Speed, floatdiv(1000, gAOX_Tickrate)));
- if (floatcmp(newPFact, 1.0) == 1 || floatcmp(newPFact, 1.0) == 0) {
- // AO has reached its offset destination
- gPlayerAO[playerid][index][eAO_isMoving] = false;
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][eAO_bone],
- OffsetX2, OffsetY2, OffsetZ2,
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- CallLocalFunction("OnPlayerAttachedObjectMoved", "dd", playerid, index);
- return 0;
- }
- new
- Float:newOffsetX = floatadd(OffsetX1, newPFact * floatsub(OffsetX2, OffsetX1)),
- Float:newOffsetY = floatadd(OffsetY1, newPFact * floatsub(OffsetY2, OffsetY1)),
- Float:newOffsetZ = floatadd(OffsetZ1, newPFact * floatsub(OffsetZ2, OffsetZ1));
- SetPlayerAttachedObject(playerid, index,
- gPlayerAO[playerid][index][eAO_modelid], gPlayerAO[playerid][index][eAO_bone],
- newOffsetX, newOffsetY, newOffsetZ,
- gPlayerAO[playerid][index][eAO_fRotX], gPlayerAO[playerid][index][eAO_fRotY], gPlayerAO[playerid][index][eAO_fRotZ],
- gPlayerAO[playerid][index][eAO_fScaleX], gPlayerAO[playerid][index][eAO_fScaleY], gPlayerAO[playerid][index][eAO_fScaleZ],
- gPlayerAO[playerid][index][eAO_materialcolor1], gPlayerAO[playerid][index][eAO_materialcolor2]);
- SetTimerEx("MovePlayerAttachedObject_Timer", gAOX_Tickrate, false, "dddffffffff", playerid, index, aoid,
- OffsetX1, OffsetY1, OffsetZ1, OffsetX2, OffsetY2, OffsetZ2,
- Speed, newPFact);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement