Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #tryinclude <YSI\y_hooks>
- #include <physics>
- #if defined USE_STREAMER
- #include <streamer>
- #endif
- #if !defined PRESSED
- #define PRESSED(%0) \
- (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
- #endif
- #if !defined HOLDING
- #define HOLDING(%0) \
- ((newkeys & (%0)) == (%0))
- #endif
- #if !defined RELEASED
- #define RELEASED(%0) \
- (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
- #endif
- #if !defined MAX_TEARGAS
- #define MAX_TEARGAS 2000
- #endif
- enum tInfo
- {
- player,
- Float:pos[4],
- tear,
- };
- new TearInfo[MAX_TEARGAS][tInfo], Iterator:Teargas<MAX_TEARGAS>, bool:entered[MAX_PLAYERS];
- stock CreateTear(playerid, Float:powa)
- {
- #if !defined Z_SPEED
- #define Z_SPEED 3.7
- #endif
- #if !defined GRAVITY
- #define GRAVITY 11.51
- #endif
- new Float:posi[4], i;
- entered[playerid] = true;
- GetPlayerPos(playerid, posi[0], posi[1], posi[2]);
- GetPlayerFacingAngle(playerid, posi[3]);
- for(i = 0; i < MAX_TEARGAS; i++)
- {
- #if defined USE_STREAMER
- if(!IsValidDynamicObject(TearInfo[i][tear])) break;
- #else
- if(!IsValidObject(TearInfo[i][tear])) break;
- #endif
- }
- TearInfo[i][player] = playerid;
- for(new j = 0; j < 4; j++)
- {
- TearInfo[i][pos][j] = posi[j];
- }
- #if defined USE_STREAMER
- TearInfo[i][tear] = CreateDynamicObject(343, posi[0], posi[1]-0.5 * floatcos(-(posi[3] + 90.0), degrees), posi[2], 93.7, 120.0, posi[3]+60.0, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
- #else
- TearInfo[i][tear] = CreateObject(343, posi[0], posi[1]-0.5 * floatcos(-(posi[3] + 90.0), degrees), posi[2], 93.7, 120.0, posi[3]+60.0);
- #endif
- CallLocalFunction("OnTeargasLaunched", "ii", playerid, TearInfo[i][tear]);
- PHY_InitObject(TearInfo[i][tear]);
- PHY_SetObjectVelocity(TearInfo[i][tear], powa/2 * floatsin(-posi[3], degrees), powa/2 * floatcos(-posi[3], degrees), Z_SPEED);
- PHY_SetObjectFriction(TearInfo[i][tear], 100);
- PHY_SetObjectGravity(TearInfo[i][tear], GRAVITY);
- PHY_SetObjectZBound(TearInfo[i][tear], posi[2] - 1.0, _, 0.0);
- SetTimerEx("throwcheck_Enable", 2000, false, "ii", TearInfo[i][tear], playerid);
- Iter_Add(Teargas, TearInfo[i][tear]);
- return 1;
- }
- hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- static Float:powa;
- #if !defined POWA_ADDING_FIRST
- #define POWA_ADDING_FIRST 1.0
- #endif
- #if !defined POWA_ADDING_HOLD
- #define POWA_ADDING_HOLD 0.1
- #endif
- if(!entered[playerid])
- {
- if(GetPlayerWeapon(playerid) == WEAPON_TEARGAS)
- {
- if(PRESSED(KEY_FIRE)) powa += POWA_ADDING_FIRST;
- if(HOLDING(KEY_FIRE))
- {
- if(powa + POWA_ADDING_HOLD >= 12.0) powa = 12.0;
- else powa += POWA_ADDING_HOLD;
- return 1;
- }
- if(RELEASED(KEY_FIRE)) return CreateTear(playerid, powa);
- }
- }
- return 1;
- }
- forward smoke_Start(objectid, playerid);
- public smoke_Start(objectid, playerid)
- {
- entered[playerid] = false;
- new i;
- foreach(i : Teargas)
- {
- if(TearInfo[i][tear] == objectid) break;
- }
- #if defined USE_STREAMER
- GetDynamicObjectPos(objectid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
- #else
- GetObjectPos(objectid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
- #endif
- CallLocalFunction("OnTeargasStartSmoking", "iifff", playerid, objectid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
- SetTimerEx("smoke_End", 12500, false, "iifffd", objectid, playerid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
- return 1;
- }
- forward smoke_End(objectid, playerid, Float:x, Float:y, Float:z);
- public smoke_End(objectid, playerid, Float:x, Float:y, Float:z)
- {
- #if defined USE_STREAMER
- GetDynamicObjectPos(objectid, x, y, z);
- #else
- GetObjectPos(objectid, x, y, z);
- #endif
- CallLocalFunction("OnTeargasStopSmoking", "iifff", playerid, objectid, x, y, z);
- Iter_Remove(Teargas, objectid);
- SetPlayerHealth(playerid, GetPlayerHealth(playerid)-12.0);
- #if defined USE_STREAMER
- return DestroyDynamicObject(objectid);
- #else
- return DestroyObject(objectid);
- #endif
- }
- forward OnTeargasLaunched(playerid, tearid);
- forward OnTeargasStartSmoking(playerid, tearid, Float:x, Float:y, Float:z);
- forward OnTeargasStopSmoking(playerid, tearid, Float:x, Float:y, Float:z);
- /****************************************
- Example
- *****************************************
- public OnTeargasStartSmoking(playerid, tearid, Float:x, Float:y, Float:z)
- {
- new Float:health;
- foreach(new i : Player)
- {
- if(IsPlayerInRangeOfPoint(i, 5.0, x, y, z))
- {
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health-12.5);
- SendClientMessage(i, -1, "Vous êtes dans le rayon d'une grenade fumigène active ! Vous avez perdu 12 pts de vie !");
- }
- }
- return 1;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement