Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Introduction
- This is a c1 version of throwing-knives, There are some new features added to it.
- Now aiming completely depends upon player's crosshair. Players can throw knives vertically upwards and
- downwards. Enhances gameplay as well.
- NOTE: • Uses PlayerAttachedObject slot '0','1','2','3'.
- • "Do not" set the distance according to you for better response from the include.
- Functions
- • EquipPlayerThrowingKnife(playerid,color=-1)
- • RemoveAttachedKnives(playerid)
- • UnEquipPlayerThrowingKnife(playerid)
- • RemovePlayerThrowingKnife(playerid)
- • GivePlayerThrowingKnife(playerid,amount)
- • LetPlayerThrowKnife(playerid, clienterror[], errorcolor,Float:distance=MAX_KNIFE_DISTANCE)
- Source Code
- https://github.com/codectile/Throwing-Knife
- Dependencies
- Streamer Plug-in (Incognito)
- Credits
- Incognito - streamer plug-in
- */
- /* The following codes are too much fragile, please "do not edit them". */
- /* Description
- MAX_KNIFE_SPEED - maximum knife velocity
- MAX_KNIFE_DISTANCE - Distance which will be covered by the moving knife
- */
- #define MAX_KNIFE_SPEED 13.5
- #define MAX_KNIFE_DISTANCE 36.0
- /* Description
- Identifiers required for functioning the knife
- */
- new _@TKNF[MAX_PLAYERS];
- new knife@_counter[MAX_PLAYERS];
- new knife@_movetime[MAX_PLAYERS];
- new _@equiped[MAX_PLAYERS];
- new bool:_@has[MAX_PLAYERS];
- new PlayerText:crosshair[MAX_PLAYERS];
- /* Description
- Removes attached knifes from the player's body
- */
- stock RemoveAttachedKnives(playerid)
- {
- new c=0;
- for(new i=0;i<3;i++)
- {
- if(IsPlayerAttachedObjectSlotUsed(playerid, c))
- {
- RemovePlayerAttachedObject(playerid, c);
- c+=1;
- }
- }
- if(c >= 1)
- {
- ApplyAnimation(playerid, "PED", "HIT_GUN_BUTT", 4.1, 0, 1, 1, 0, 350, 1);
- }
- else SendClientMessage(playerid,-1,"SERVER: There are no knives attached on your player's body");
- return 1;
- }
- /* Description
- Removes throwing knifes of a player
- */
- stock RemovePlayerThrowingKnife(playerid)
- {
- if(IsPlayerConnected(playerid))
- {
- if(_@has[playerid] == true)
- {
- if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
- knife@_counter[playerid] = 0;
- _@equiped[playerid]=0;
- _@has[playerid] = false;
- }
- return 1;
- }
- else return 0;
- }
- /* Description
- Unequips throwing knives
- */
- stock UnEquipPlayerThrowingKnife(playerid)
- {
- if(IsPlayerConnected(playerid))
- {
- if(_@has[playerid] == true)
- {
- if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
- PlayerTextDrawDestroy(playerid, crosshair[playerid]);
- _@equiped[playerid]=0;
- }
- else SendClientMessage(playerid,-1,"SERVER: You don't have throwing knives.");
- return 1;
- }
- else return 0;
- }
- /* Description
- Equips throwing knives
- */
- stock EquipPlayerThrowingKnife(playerid,color=-1)
- {
- if(IsPlayerConnected(playerid))
- {
- if(_@equiped[playerid] == 0)
- {
- if(_@has[playerid] == true)
- {
- if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
- SetPlayerAttachedObject(playerid, 3, 335, 6, 0.127,-0.017,0.281,-1.50,174.20,-0.50);
- crosshair[playerid]=CreatePlayerTextDraw(playerid, 320.0-15.0, 240.0-62.0, "( )");
- PlayerTextDrawSetShadow(playerid, crosshair[playerid], 0);
- PlayerTextDrawColor(playerid,crosshair[playerid], color);
- PlayerTextDrawFont(playerid, crosshair[playerid], 1);
- PlayerTextDrawShow(playerid, crosshair[playerid]);
- _@equiped[playerid]=1;
- }
- else SendClientMessage(playerid,-1,"SERVER: You don't have throwing knives.");
- }
- else SendClientMessage(playerid,-1,"SERVER: You have already equipped throwing knives.");
- return 1;
- }
- else return 0;
- }
- /* Description
- Gives player specified amount of throwing knives
- */
- stock GivePlayerThrowingKnife(playerid,amount)
- {
- if(IsPlayerConnected(playerid))
- {
- knife@_counter[playerid]+=amount;
- return 1;
- }
- else return 0;
- }
- /* Description
- Makes player throw knife
- */
- stock LetPlayerThrowKnife(playerid, clienterror[], errorcolor, Float:distance=MAX_KNIFE_DISTANCE)
- {
- if(_@has[playerid] == true)
- {
- if(_@equiped[playerid] == 1)
- {
- if(knife@_counter[playerid] > 0)
- {
- if(!IsValidDynamicObject(_@TKNF[playerid]))
- {
- ApplyAnimation(playerid, "GRENADE", "WEAPON_THROW", 3.5, 0, 1, 1, 0, 500, 1);
- new Float:vecx,Float:vecy,Float:vecz,Float:Angle;
- new Float:fPX, Float:fPY, Float:fPZ,Float:fVX, Float:fVY, Float:fVZ,Float:object_x, Float:object_y, Float:object_z;
- GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
- GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
- GetPlayerPos(playerid, vecx, vecy, vecz);
- new Float:fScale = distance;
- object_x = fPX + (fVX*(fScale-30));
- object_y = fPY + (fVY*(fScale-30));
- object_z = fPZ+0.6 + (fVZ*(fScale-30));
- Angle=atan2(object_x-vecx,object_y-vecy);
- SetPlayerFacingAngle(playerid,360.0-Angle);
- #if defined KNIFE_NEW
- _@TKNF[playerid]=CreateDynamicObject(19583, vecx,vecy,vecz+0.7,-1.5+180.0, 270.0, (360.0-Angle)+270,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),-1,700.0,1000.0);
- #else
- _@TKNF[playerid]=CreateDynamicObject(335, vecx,vecy,vecz+0.7,-1.5+180.0, 270.0, (360.0-Angle)+270,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),-1,700.0,1000.0);
- #endif
- knife@_movetime[playerid]=MoveDynamicObject(_@TKNF[playerid],object_x,object_y,object_z,MAX_KNIFE_SPEED,-1.5+180.0,270.0-360.0, (360.0-Angle)+270.0);
- SetTimerEx("knife@_track",knife@_movetime[playerid],0,"iffffffffi",playerid,distance,Angle,fPX,fPY,fPZ,fVX, fVY, fVZ, 1);
- #if defined OnPlayerThrowKnife
- OnPlayerThrowKnife(playerid);
- #endif
- knife@_counter[playerid]-=1;
- }
- else SendClientMessage(playerid,errorcolor, clienterror);
- }
- }
- else SendClientMessage(playerid,-1,"SERVER: You are not eqipped with throwing knives.");
- }
- else SendClientMessage(playerid,-1,"SERVER: You don't have throwing knives.");
- return 1;
- }
- forward knife@_track(playerid,Float:distance,Float:Angle,Float:fPX,Float:fPY,Float:fPZ,Float:fVX, Float:fVY, Float:fVZ, step);
- public knife@_track(playerid,Float:distance,Float:Angle,Float:fPX,Float:fPY,Float:fPZ,Float:fVX, Float:fVY, Float:fVZ, step)
- {
- StopDynamicObject(_@TKNF[playerid]);
- new Float:rx,Float:ry,Float:rz;
- GetDynamicObjectRot(_@TKNF[playerid], rx, ry,rz);
- new Float:object_x, Float:object_y, Float:object_z;
- new Float:fScale = distance;
- new Float:fAddition = 0.0f;
- new bool:destroy = false;
- switch(step)
- {
- case 1:
- {
- fScale -= 24;
- fAddition = 0.8f;
- }
- case 2:
- {
- fScale -= 18;
- fAddition = 1.2f;
- }
- case 3:
- {
- fScale -= 12;
- fAddition = 1.6f;
- }
- case 4:
- {
- fScale -= 6;
- fAddition = 2.0f;
- }
- case 5:
- {
- fAddition = 2.4f;
- destroy = true;
- }
- }
- object_x = fPX + (fVX*(fScale));
- object_y = fPY + (fVY*(fScale));
- object_z = fPZ+fAddition + (fVZ*(fScale));
- knife@_movetime[playerid]=MoveDynamicObject(_@TKNF[playerid],object_x,object_y,object_z,MAX_KNIFE_SPEED,rx,(ry+180.0), rz);
- if(destroy)
- {
- SetTimerEx("destroy@_knives",knife@_movetime[playerid]-90,0,"i",playerid);
- }
- else
- {
- SetTimerEx("knife@_track",knife@_movetime[playerid],0,"iffffffffi",playerid,distance,Angle,fPX,fPY,fPZ,fVX, fVY, fVZ, (step+1));
- }
- return 1;
- }
- forward destroy@_knives(playerid);
- public destroy@_knives(playerid)
- {
- DestroyDynamicObject(_@TKNF[playerid]);
- _@TKNF[playerid]=-1;
- knife@_movetime[playerid]=-1;
- return 1;
- }
- /* Core Hooks */
- /* OnPlayerConnect */
- public OnPlayerConnect(playerid)
- {
- _@TKNF[playerid]=-1;
- knife@_counter[playerid]=0;
- knife@_movetime[playerid]=-1;
- _@equiped[playerid]=0;
- #if defined CRF_OnPlayerConnect
- CRF_OnPlayerConnect(playerid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect CRF_OnPlayerConnect
- #if defined CRF_OnPlayerConnect
- forward CRF_OnPlayerConnect(playerid);
- #endif
- /* OnPlayerDisconnect */
- public OnPlayerDisconnect(playerid, reason)
- {
- _@TKNF[playerid]=-1;
- knife@_counter[playerid]=0;
- knife@_movetime[playerid]=-1;
- _@equiped[playerid]=0;
- #if defined CRF_OnPlayerDisconnect
- CRF_OnPlayerDisconnect(playerid, reason);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerDisconnect
- #undef OnPlayerDisconnect
- #else
- #define _ALS_OnPlayerDisconnect
- #endif
- #define OnPlayerDisconnect CRF_OnPlayerDisconnect
- #if defined CRF_OnPlayerDisconnect
- forward CRF_OnPlayerDisconnect(playerid, reason);
- #endif
- /* OnPlayerDeath */
- public OnPlayerDeath(playerid, killerid, reason)
- {
- _@equiped[playerid]=0;
- PlayerTextDrawDestroy(playerid, crosshair[playerid]);
- #if defined CRF_OnPlayerDeath
- CRF_OnPlayerDeath(playerid, killerid, reason);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerDeath
- #undef OnPlayerDeath
- #else
- #define _ALS_OnPlayerDeath
- #endif
- #define OnPlayerDeath CRF_OnPlayerDeath
- #if defined CRF_OnPlayerDeath
- forward CRF_OnPlayerDeath(playerid, killerid, reason);
- #endif
- /* OnPlayerUpdate */
- public OnPlayerUpdate(playerid)
- {
- if(IsValidDynamicObject(_@TKNF[playerid]))
- {
- new rnd=random(3);
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- Streamer_Update(i);
- if(i != playerid)
- {
- new Float:x,Float:y,Float:z;
- GetDynamicObjectPos(_@TKNF[playerid],x,y,z);
- if(IsPlayerInRangeOfPoint(i,1.6,x,y,z))
- {
- new Float:health;
- GetPlayerHealth(i,health);
- SetPlayerHealth(i,health-random(100));
- x=-1;
- y=-1;
- z=-1;
- DestroyDynamicObject(_@TKNF[playerid]);
- _@TKNF[playerid]=-1;
- #if defined KNIFE_NEW
- if(rnd == 0)
- {
- SetPlayerAttachedObject(i, 0, 19583, 15, -0.119,-0.15,0.116,62.4,169.6,-91.9);
- }
- else if(rnd == 1)
- {
- SetPlayerAttachedObject(i, 1, 19583, 8, 0.347,0.208,-0.092,79.09,15.0,0.0);
- }
- else
- {
- SetPlayerAttachedObject(i, 2, 19583, 1, 0.13,0.251,0.09,87.8,-30.8,-178.2);
- }
- #else
- if(rnd == 0)
- {
- SetPlayerAttachedObject(i, 0, 335, 15, -0.119,-0.15,0.116,62.4,169.6,-91.9);
- }
- else if(rnd == 1)
- {
- SetPlayerAttachedObject(i, 1, 335, 8, 0.347,0.208,-0.092,79.09,15.0,0.0);
- }
- else
- {
- SetPlayerAttachedObject(i, 2, 335, 1, 0.13,0.251,0.09,87.8,-30.8,-178.2);
- }
- #endif
- ApplyAnimation(i, "PED", "HIT_GUN_BUTT", 4.1, 0, 1, 1, 0, 350, 1);
- #if defined OnPlayerGetKnifed
- OnPlayerGetKnifed(i, playerid);
- #endif
- break;
- }
- }
- }
- }
- if(knife@_counter[playerid] == 0)
- {
- RemovePlayerAttachedObject(playerid, 3);
- knife@_movetime[playerid] = -1;
- _@equiped[playerid] = 0;
- }
- if(knife@_counter[playerid] > 0)
- {
- _@has[playerid] = true;
- }
- else
- {
- _@has[playerid] = false;
- _@equiped[playerid] = 0;
- PlayerTextDrawDestroy(playerid, crosshair[playerid]);
- }
- #if defined CRF_OnPlayerUpdate
- CRF_OnPlayerUpdate(playerid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerUpdate
- #undef OnPlayerUpdate
- #else
- #define _ALS_OnPlayerUpdate
- #endif
- #define OnPlayerUpdate CRF_OnPlayerUpdate
- #if defined CRF_OnPlayerUpdate
- forward CRF_OnPlayerUpdate(playerid);
- #endif
- /* Callback */
- #if defined OnPlayerThrowKnife
- forward OnPlayerThrowKnife(playerid);
- #endif
- #if defined OnPlayerGetKnifed
- forward OnPlayerGetKnifed(playerid, killerid);
- #endif
- /* ***************************************************************************** */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement