Advertisement
Guest User

Untitled

a guest
Aug 29th, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  1. #pragma semicolon 1
  2.  
  3. #include <sourcemod>
  4. #include <sdktools>
  5.  
  6. #define PLUGIN_VERSION "1.1.0"
  7.  
  8. #define MOVETYPE_WALK 2
  9. #define MOVETYPE_FLYGRAVITY 5
  10. #define MOVECOLLIDE_DEFAULT 0
  11. #define MOVECOLLIDE_FLY_BOUNCE 1
  12.  
  13. #define LIFE_ALIVE 0
  14.  
  15. // ConVars
  16. new Handle:sm_jetpack_admin = INVALID_HANDLE;
  17. new Handle:sm_jetpack_sound = INVALID_HANDLE;
  18. new Handle:sm_jetpack_speed = INVALID_HANDLE;
  19. new Handle:sm_jetpack_volume = INVALID_HANDLE;
  20.  
  21. // SendProp Offsets
  22. new g_iLifeState = -1;
  23. new g_iMoveCollide = -1;
  24. new g_iMoveType = -1;
  25. new g_iVelocity = -1;
  26.  
  27. // Soundfile
  28. new String:g_sSound[255] = "vehicles/airboat/fan_blade_fullthrottle_loop1.wav";
  29.  
  30. // Is Jetpack Enabled
  31. new bool:g_bJetpacks[MAXPLAYERS + 1] = {false,...};
  32.  
  33. // Timer For GameFrame
  34. new Float:g_fTimer = 0.0;
  35.  
  36. // MaxClients
  37. new g_iMaxClients = 0;
  38.  
  39. public Plugin:myinfo =
  40. {
  41. name = "Jetpack",
  42. author = "Knagg0",
  43. description = "",
  44. version = PLUGIN_VERSION,
  45. url = "http://www.mfzb.de"
  46. };
  47.  
  48. public OnPluginStart()
  49. {
  50. AutoExecConfig();
  51.  
  52. // Create ConVars
  53. CreateConVar("sm_jetpack_version", PLUGIN_VERSION, "", FCVAR_PLUGIN | FCVAR_REPLICATED | FCVAR_NOTIFY);
  54. sm_jetpack_admin = CreateConVar("sm_jetpack_admin", "1", "", FCVAR_PLUGIN | FCVAR_REPLICATED | FCVAR_NOTIFY);
  55. sm_jetpack_sound = CreateConVar("sm_jetpack_sound", g_sSound, "", FCVAR_PLUGIN);
  56. sm_jetpack_speed = CreateConVar("sm_jetpack_speed", "100", "", FCVAR_PLUGIN);
  57. sm_jetpack_volume = CreateConVar("sm_jetpack_volume", "0.5", "", FCVAR_PLUGIN);
  58.  
  59. // Create ConCommands
  60. RegConsoleCmd("+sm_jetpack_admin", JetpackP, "", FCVAR_GAMEDLL);
  61. RegConsoleCmd("-sm_jetpack_admin", JetpackM, "", FCVAR_GAMEDLL);
  62.  
  63. // Find SendProp Offsets
  64. if((g_iLifeState = FindSendPropOffs("CBasePlayer", "m_lifeState")) == -1)
  65. LogError("Could not find offset for CBasePlayer::m_lifeState");
  66.  
  67. if((g_iMoveCollide = FindSendPropOffs("CBaseEntity", "movecollide")) == -1)
  68. LogError("Could not find offset for CBaseEntity::movecollide");
  69.  
  70. if((g_iMoveType = FindSendPropOffs("CBaseEntity", "movetype")) == -1)
  71. LogError("Could not find offset for CBaseEntity::movetype");
  72.  
  73. if((g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]")) == -1)
  74. LogError("Could not find offset for CBasePlayer::m_vecVelocity[0]");
  75. }
  76.  
  77. public OnMapStart()
  78. {
  79. g_fTimer = 0.0;
  80. g_iMaxClients = GetMaxClients();
  81. }
  82.  
  83. public OnConfigsExecuted()
  84. {
  85. GetConVarString(sm_jetpack_sound, g_sSound, sizeof(g_sSound));
  86. PrecacheSound(g_sSound, true);
  87. }
  88.  
  89. public OnGameFrame()
  90. {
  91. if(GetConVarBool(sm_jetpack_admin) && g_fTimer < GetGameTime() - 0.075)
  92. {
  93. g_fTimer = GetGameTime();
  94.  
  95. for(new i = 1; i <= g_iMaxClients; i++)
  96. {
  97. if(g_bJetpacks[i])
  98. {
  99. if(!IsAlive(i)) StopJetpack(i);
  100. else AddVelocity(i, GetConVarFloat(sm_jetpack_speed));
  101. }
  102. }
  103. }
  104. }
  105.  
  106. public OnClientDisconnect(client)
  107. {
  108. StopJetpack(client);
  109. }
  110.  
  111. public Action:JetpackP(client, args)
  112. {
  113. if(GetConVarBool(sm_jetpack_admin) && !g_bJetpacks[client] && IsAlive(client))
  114. {
  115. new Float:vecPos[3];
  116. GetClientAbsOrigin(client, vecPos);
  117. EmitSoundToAll(g_sSound, client, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, GetConVarFloat(sm_jetpack_volume), SNDPITCH_NORMAL, -1, vecPos, NULL_VECTOR, true, 0.0);
  118. SetMoveType(client, MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE);
  119. g_bJetpacks[client] = true;
  120. }
  121.  
  122. return Plugin_Continue;
  123. }
  124.  
  125. public Action:JetpackM(client, args)
  126. {
  127. StopJetpack(client);
  128. return Plugin_Continue;
  129. }
  130.  
  131. StopJetpack(client)
  132. {
  133. if(g_bJetpacks[client])
  134. {
  135. if(IsAlive(client)) SetMoveType(client, MOVETYPE_WALK, MOVECOLLIDE_DEFAULT);
  136. StopSound(client, SNDCHAN_AUTO, g_sSound);
  137. g_bJetpacks[client] = false;
  138. }
  139. }
  140.  
  141. SetMoveType(client, movetype, movecollide)
  142. {
  143. if(g_iMoveType == -1) return;
  144. SetEntData(client, g_iMoveType, movetype);
  145. if(g_iMoveCollide == -1) return;
  146. SetEntData(client, g_iMoveCollide, movecollide);
  147. }
  148.  
  149. AddVelocity(client, Float:speed)
  150. {
  151. if(g_iVelocity == -1) return;
  152.  
  153. new Float:vecVelocity[3];
  154. GetEntDataVector(client, g_iVelocity, vecVelocity);
  155.  
  156. vecVelocity[2] += speed;
  157.  
  158. TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vecVelocity);
  159. }
  160.  
  161. bool:IsAlive(client)
  162. {
  163. if(g_iLifeState != -1 && GetEntData(client, g_iLifeState, 1) == LIFE_ALIVE)
  164. return true;
  165.  
  166. return false;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement