Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ###### ## ## ####### ## ## ######## ## ####### V. 0.2a
- ## ## ### ### ## ## ## ## ## #### ## ## 18/12/14
- ## #### #### ## ## ## ## ## ## ##
- ###### ## ### ## ## ## ##### ###### ## #######
- ## ## ## ## ## ## ## ## ## ##
- ## ## ## ## ## ## ## ## ## ## ## ##
- ###### ## ## ####### ## ## ######## ###### #######
- by Bruno13
- Thanks:
- - Y_Less.
- - SA-MP Team.
- FUNCTIONS:
- - CreateSmoke(Float:x, Float:y, Float:z, type, time = -1);
- return: Smoke ID criada. -1 caso Smoke não for criado com sucesso.
- - DestroySmoke(smokeid);
- return: 1 caso for deletado com sucesso, 0 caso não for.
- - ResetSmokes();
- return: Não tem retornos.
- - FreeSmokes();
- return: Total de Smoke Slots livres.
- CALLBACKS:
- - IsPlayerInSmoke(playerid, smokeid, smoketype);
- * É chamada quando um player está próximo/sobre uma Smoke, especificando
- smokeid e smoketype referente a mesma.
- */
- //===================================[YSI <3]===================================
- #include <YSI\y_hooks>
- //===============================[DEFINES/MACROS]===============================
- #define MAX_SMOKES 50
- #define callback::%0(%1) forward %0(%1); public %0(%1)
- //==================================[VARIÁBLES]=================================
- new SmokeID[MAX_SMOKES];
- new SmokeSlot[MAX_OBJECTS];
- new Float:SmokePos[MAX_SMOKES][3];
- new SmokeType[MAX_SMOKES];
- new bool:FirstSpawn_SM[MAX_PLAYERS];
- //==================================[STOCKS's]==================================
- stock CreateSmoke(Float:x, Float:y, Float:z, type, time = -1)
- {
- new id = SmokeEmpty();
- if(id == -1)
- {
- printf("%s", SmokeError(0));
- return -1;
- }
- switch(type)
- {
- case 0: type = 18703;
- case 1: type = 18704;
- case 2: type = 18710;
- case 3: type = 18713;
- case 4: type = 18714;
- case 5: type = 18715;
- case 6: type = 18716;
- case 7: type = 18725;
- case 8: type = 18726;
- case 9: type = 18727;
- case 10: type = 18731;
- case 11: type = 18735;
- default:
- {
- printf("%s", SmokeError(1));
- return -1;
- }
- }
- if(time < -1)
- {
- printf("%s", SmokeError(2));
- return -1;
- }
- SmokeID[id] = CreateObject(type, x, y, z, 0.0, 0.0, 0.0);
- SmokeSlot[SmokeID[id]] = id;
- SmokePos[SmokeID[id]][0] = x;
- SmokePos[SmokeID[id]][1] = y;
- SmokePos[SmokeID[id]][2] = z;
- SmokeType[SmokeID[id]] = type;
- if(time != -1) SetTimerEx("DestroySmoke", time*1000, false, "d", SmokeID[id]);
- return SmokeID[id];
- }
- stock ResetSmokes()
- {
- for(new i; i < MAX_OBJECTS; i++)
- {
- SmokeSlot[i] = -1;
- if(i >= MAX_SMOKES) continue;
- if(SmokeID[i] != -1) DestroyObject(SmokeID[i]);
- SmokeID[i] = -1;
- SmokeType[i] = -1;
- }
- }
- stock FreeSmokes()
- {
- new a;
- for(new i; i < MAX_SMOKES; i++)
- {
- if(SmokeID[i] == -1) a++;
- }
- return a;
- }
- stock SmokeEmpty()
- {
- for(new i; i < MAX_SMOKES; i++)
- {
- if(SmokeID[i] == -1) return i;
- }
- return -1;
- }
- stock SmokeError(erroid)
- {
- new str[50];
- switch(erroid)
- {
- case 0: str = "[Smoke13 Erro] MAX_SMOKES está limitado";
- case 1: str = "[Smoke13 Erro] Smoke Type inválido";
- case 2: str = "[Smoke13 Erro] Smoke Time inválido";
- }
- return str;
- }
- stock GetSmokeType(smokeid)
- {
- switch(smokeid)
- {
- case 18703: smokeid = 0;
- case 18704: smokeid = 1;
- case 18710: smokeid = 2;
- case 18713: smokeid = 3;
- case 18714: smokeid = 4;
- case 18715: smokeid = 5;
- case 18716: smokeid = 6;
- case 18725: smokeid = 7;
- case 18726: smokeid = 8;
- case 18727: smokeid = 9;
- case 18731: smokeid = 10;
- case 18735: smokeid = 11;
- default: smokeid = -1;
- }
- return smokeid;
- }
- stock GetRangeSmoke(smokeid)
- {
- new value;
- switch(smokeid)
- {
- case 18703: value = 3;
- case 18704: value = 3;
- case 18710: value = 4;
- case 18713: value = 10;
- case 18714: value = 7;
- case 18715: value = 5;
- case 18716: value = 2;
- case 18725: value = 2;
- case 18726: value = 2;
- case 18727: value = 3;
- case 18731: value = 3;
- case 18735: value = 2;
- default: value = 0;
- }
- return _:value;
- }
- //==================================[CALLBACKS]=================================
- callback::DestroySmoke(smokeid)
- {
- if(SmokeID[SmokeSlot[smokeid]] == -1) return 0;
- DestroyObject(smokeid);
- SmokeID[SmokeSlot[smokeid]] = -1;
- SmokeSlot[smokeid] = -1;
- SmokeType[smokeid] = -1;
- return 1;
- }
- callback::CheckPlayerInSmoke(playerid)
- {
- for(new i; i < MAX_SMOKES; i++)
- {
- if(SmokeID[i] == -1) continue;
- new raio = GetRangeSmoke(SmokeType[SmokeID[i]]);
- if(IsPlayerInRangeOfPoint(playerid, raio, SmokePos[SmokeID[i]][0], SmokePos[SmokeID[i]][1], SmokePos[SmokeID[i]][2]))
- {
- CallLocalFunction("IsPlayerInSmoke", "iii", playerid, SmokeID[i], GetSmokeType(SmokeType[SmokeID[i]]));
- break;
- }
- }
- }
- //===================================[HOOK'S]===================================
- hook OnGameModeInit(playerid)
- {
- ResetSmokes();
- return 1;
- }
- hook OnPlayerConnect(playerid)
- {
- FirstSpawn_SM[playerid] = true;
- return 1;
- }
- hook OnPlayerSpawn(playerid)
- {
- if(FirstSpawn_SM[playerid]) FirstSpawn_SM[playerid] = false, SetTimerEx("CheckPlayerInSmoke", 1000, true, "i", playerid);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement