Advertisement
Garey

Prestrafe Fixed

Mar 12th, 2019
580
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.12 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4.  
  5. #define PLUGIN "Simple Prestrafe"
  6. #define VERSION "1.0"
  7. #define AUTHOR "Destroman"
  8.  
  9. new bool:g_userConnected[33],bool:g_alive[33];
  10. new max_players;                                            ///////////////////////////////////////
  11. new ddnum[33];
  12. new bhop_num[33];
  13. new bool:firstfall_ground[33],Float:FallTime[33];
  14. new bool:plrPre[33];                                                /////////////////////////////////
  15. new bool:g_Jumped[33],bool:g_reset[33];
  16. new Float:speed[33];
  17. new bool:ladderjump[33];
  18. new movetype[33];
  19. new g_iObject;
  20. static bool:is_user_duck[33], bool:in_air[33];
  21. new bool:notjump[33];
  22. new Float:duckgainspeed[33];
  23. new Float:prebhopspeed[33];
  24. new Float:preladderspeed[33];
  25. new Float:preduckspeed[33];
  26. new Float:bhopgainspeed[33];
  27.  
  28. public plugin_init() {
  29.     register_plugin(PLUGIN, VERSION, AUTHOR);
  30.     register_forward( FM_PlayerPreThink,    "fwdPreThink"0 );
  31.     RegisterHam(Ham_Spawn, "player", "FwdPlayerSpawn", 1);
  32.     RegisterHam(Ham_Killed, "player", "FwdPlayerDeath", 1);
  33.     max_players=get_maxplayers()+1;        
  34.     g_iObject = CreateHudSyncObj();
  35.     register_clcmd("say /pre", "tooglePre")
  36.  
  37. }
  38.  
  39.  
  40. public tooglePre(id)
  41. {
  42.     plrPre[id] = plrPre[id] ? false : true
  43.     set_hudmessage(0, 100, 255, -1.0, 0.74, 2, 0.1, 2.5, 0.01, 0.01, 3);
  44.     if(!plrPre[id]) {
  45.         show_hudmessage( id, "SHOWPRE: OFF" );
  46.     } else {
  47.         show_hudmessage( id, "SHOWPRE: ON" );
  48.     }
  49. //  return PLUGIN_HANDLED
  50. }
  51.  
  52. public fwdPreThink( id )
  53. {
  54.     if(g_userConnected[id]==true)
  55.     {  
  56.        
  57.         new tmpTeam[33],dead_flag; 
  58.         get_user_team(id,tmpTeam,32);
  59.         dead_flag=pev(id, pev_deadflag);
  60.        
  61.         if(equali(tmpTeam,"SPECTATOR") && g_alive[id])
  62.         {
  63.             g_alive[id]=false;
  64.         }
  65.         else if(equali(tmpTeam,"TERRORIST") || equali(tmpTeam,"CT"))
  66.         {
  67.             if(dead_flag==2 && g_alive[id])
  68.             {
  69.                 g_alive[id]=false;
  70.             }
  71.             else if(dead_flag==0 && g_alive[id]==false)
  72.             {
  73.                 g_alive[id]=true;
  74.             }
  75.         }
  76.        
  77.         if( g_alive[id])
  78.         {
  79.             if( g_reset[id] ==true)
  80.             {
  81.                 g_reset[id] = false;
  82.                 g_Jumped[id]= false;
  83.                 in_air[id]  = false;
  84.                 is_user_duck[id]    = false;
  85.                 notjump[id] = false;
  86.                 ladderjump[id] = false;
  87.             }
  88.            
  89.             static button, oldbuttons, flags;
  90.             button = pev(id, pev_button );
  91.             flags = pev(id, pev_flags );
  92.             oldbuttons = pev( id, pev_oldbuttons );
  93.            
  94.             new Float:velocity[3];
  95.             pev(id, pev_velocity, velocity);
  96.             movetype[id] = pev(id, pev_movetype);
  97.            
  98.             if( flags&FL_ONGROUND && flags&FL_INWATER )  
  99.                     velocity[2] = 0.0;
  100.             if( velocity[2] != 0 )
  101.                 velocity[2]-=velocity[2];
  102.                
  103.             speed[id] = vector_length(velocity);   
  104.            
  105.             new is_spec_user[33];
  106.             for( new i = 1; i < max_players; i++ )
  107.             {
  108.                 is_spec_user[i]=is_user_spectating_player(i, id);
  109.             }
  110.            
  111.             if(notjump[id])
  112.             {
  113.                 notjump[id]=false;
  114.             }
  115.            
  116.             if( flags&FL_ONGROUND )
  117.             {
  118.                 notjump[id]=true;
  119.                
  120.             }
  121.  
  122.             if( (movetype[id] == MOVETYPE_FLY) &&  (button&IN_FORWARD || button&IN_BACK || button&IN_LEFT || button&IN_RIGHT ) )
  123.             {
  124.                 ladderjump[id]=true;
  125.             }
  126.            
  127.             if( (movetype[id] == MOVETYPE_FLY) &&  button&IN_JUMP )
  128.             {
  129.                 ladderjump[id]=false;
  130.                 in_air[id]=false;
  131.                 notjump[id]=true;
  132.             }
  133.            
  134.             if( movetype[id] != MOVETYPE_FLY && ladderjump[id]==true)
  135.             {
  136.                 notjump[id]=true;
  137.                 ladderjump[id]=false;  
  138.  
  139.                 static i;
  140.                 in_air[id]  = true;
  141.                 g_Jumped[id]    = true;
  142.                 prebhopspeed[id] = 0.0;
  143.                 preduckspeed[id] = 0.0;
  144.                 for( i = 1; i < max_players; i++ )
  145.                 {
  146.                     if( (i == id || is_spec_user[i]))
  147.                     {
  148.                         if(plrPre[i])
  149.                         {
  150.                             preladderspeed[id] = speed[id]
  151.                             ClearSyncHud(i, g_iObject)             
  152.                             set_hudmessage( 0 , 100 , 255 , -1.0 , 0.665 , 0 , 0.0 , 3.0 , 0.01 , 0.0 );
  153.                             ShowSyncHudMsg( i , g_iObject, "%d", floatround(speed[id]));                //////////////////////////ladderjump
  154.                         }
  155.                     }
  156.                 }
  157.             }
  158.            
  159.             if( button & IN_DUCK && !(oldbuttons &IN_DUCK) && flags & FL_ONGROUND)
  160.             {
  161.                 if (speed[id] > 110) {
  162.                     ddnum[id]++;
  163.                 } else {
  164.                     ddnum[id] = 0;
  165.                 }
  166.             }
  167.    
  168.             if( button & IN_JUMP && !( oldbuttons & IN_JUMP ) && flags & FL_ONGROUND )
  169.             {  
  170.                 bhop_num[id]++;
  171.                 notjump[id]=false;
  172.  
  173.                 ddnum[id]=0;
  174.                 pev(id, pev_velocity, velocity);
  175.                 static i;
  176.                 in_air[id]  = true;
  177.                 g_Jumped[id]    = true;
  178.        
  179.                 for( i = 1; i < max_players; i++ )
  180.                 {
  181.                     if( (i == id || is_spec_user[i]))
  182.                     {
  183.                         if(plrPre[i])
  184.                         {
  185.                             if(bhop_num[id] > 0) {
  186.                                 preduckspeed[id] = speed[id]
  187.                                 if ( floatround(preladderspeed[id]) > 20) {
  188.                                     bhopgainspeed[id] = preladderspeed[id];                                    
  189. //                                  client_print(0,print_chat, "%f speed" , bhopgainspeed[id]);     ////wtf ??? pre for cj mcj dcj scj ......... for BUTAMUH )))
  190.                                     preladderspeed[id] = 0.0;
  191.                                 }
  192.                                 else if ( floatround(prebhopspeed[id]) > 100) {
  193.                                     bhopgainspeed[id] = prebhopspeed[id];                                      
  194. //                                  client_print(0,print_chat, "%f speed" , bhopgainspeed[id]);     ////wtf ??? pre for cj mcj dcj scj ......... for BUTAMUH )))
  195.                                     prebhopspeed[id] = 0.0;
  196.                                 }
  197.                                
  198.                                 if ( bhopgainspeed[id] > speed[id] ) {
  199.                                     ClearSyncHud(i, g_iObject)                                                 
  200.                                     set_hudmessage( 255 , 0 , 0 , -1.0 , 0.665 , 0 , 0.0 , 3.0 , 0.01 , 0.0 );
  201.                                     ShowSyncHudMsg( i , g_iObject, "%d(-%d)", floatround(speed[id]), floatround(bhopgainspeed[id] - speed[id]));   //////////  bhop or pre
  202.                                 }
  203.                                 else if ( bhopgainspeed[id] == 0.0 || bhopgainspeed[id] == speed[id]) {
  204.                                     ClearSyncHud(i, g_iObject)                                                 
  205.                                     set_hudmessage( 0 , 100 , 255 , -1.0 , 0.665 , 0 , 0.0 , 3.0 , 0.01 , 0.0 );
  206.                                     ShowSyncHudMsg( i , g_iObject, "%d", floatround(speed[id]));   //////////  bhop
  207.                                 }
  208.                                 else if ( bhopgainspeed[id] < speed[id] ) {
  209.                                     ClearSyncHud(i, g_iObject)                                                 
  210.                                     set_hudmessage( 0 , 255 , 0 , -1.0 , 0.665 , 0 , 0.0 , 3.0 , 0.01 , 0.0 );
  211.                                     ShowSyncHudMsg( i , g_iObject, "%d(+%d)", floatround(speed[id]), floatround(speed[id] - bhopgainspeed[id]));   //////////  bhop
  212.                                 }
  213.                             }
  214.                         }
  215.                     }
  216.                 }
  217.                 bhopgainspeed[id] = speed[id];
  218.             }
  219.             else if( flags & FL_ONGROUND && in_air[id])
  220.             {  
  221.                 g_reset[id] = true;
  222.             }
  223.            
  224.             if( button & IN_DUCK && !(oldbuttons &IN_DUCK) && flags & FL_ONGROUND  && !is_user_duck[id] )
  225.             {  
  226.                 for( new i = 1; i < max_players; i++ )
  227.                 {
  228.                     if( (i == id || is_spec_user[i]))
  229.                     {
  230.                         if(plrPre[i])
  231.                         {
  232.                             if(ddnum[id] > 0) {
  233.                                 prebhopspeed[id] = speed[id]
  234.                                 if ( floatround(preladderspeed[id]) > 20) {
  235.                                     bhopgainspeed[id] = preladderspeed[id];                                    
  236. //                                  client_print(0,print_chat, "%f speed" , bhopgainspeed[id]);     ////wtf ??? pre for cj mcj dcj scj ......... for BUTAMUH )))
  237.                                     preladderspeed[id] = 0.0;
  238.                                 }
  239.                                 else if ( floatround(preduckspeed[id]) > 100) {
  240.                                     duckgainspeed[id] = preduckspeed[id];                                      
  241. //                                  client_print(0,print_chat, "%f speed" , duckgainspeed[id]);     ////wtf ??? pre for cj mcj dcj scj ......... for BUTAMUH )))
  242.                                     preduckspeed[id] = 0.0;
  243.                                 }
  244.                                 if ( duckgainspeed[id] > speed[id] ) {
  245.                                     ClearSyncHud(i, g_iObject);            
  246.                                     set_hudmessage( 255 , 0 , 0 , -1.0 , 0.665 , 0 , 0.0 , 3.0 , 0.01 , 0.0 );
  247.                                     ShowSyncHudMsg( i , g_iObject,  "%d(-%d)", floatround(speed[id]), floatround(duckgainspeed[id] - speed[id]));   //////////  bhop or pre
  248.                                 }
  249.                                 else if ( duckgainspeed[id] == 0.0 || duckgainspeed[id] == speed[id]) {
  250.                                     ClearSyncHud(i, g_iObject);                                                
  251.                                     set_hudmessage( 0 , 100 , 255 , -1.0 , 0.665 , 0 , 0.0 , 3.0 , 0.01 , 0.0 );
  252.                                     ShowSyncHudMsg( i, g_iObject , "%d", floatround(speed[id]));   //////////  bhop
  253.                                 }
  254.                                 else if ( duckgainspeed[id] < speed[id] ) {
  255.                                     ClearSyncHud(i, g_iObject);                                            
  256.                                     set_hudmessage( 0 , 255 , 0 , -1.0 , 0.665 , 0 , 0.0 , 3.0 , 0.01 , 0.0 );
  257.                                     ShowSyncHudMsg( i, g_iObject, "%d(+%d)", floatround(speed[id]), floatround(speed[id] - duckgainspeed[id]));   //////////  bhop
  258.                                 }
  259.                             }
  260.                         }
  261.                     }
  262.                 }
  263.                 duckgainspeed[id] = speed[id];
  264.                 is_user_duck[id] = true;
  265.             }
  266.             else if( !in_air[id] && oldbuttons & IN_DUCK && flags & FL_ONGROUND )
  267.             {
  268.                 if( !is_user_duckk( id ) )
  269.                 {  
  270.                     is_user_duck[id] = false;
  271.                 }
  272.             }
  273.            
  274.            
  275.             if(flags&FL_ONGROUND && firstfall_ground[id]==true && get_gametime()-FallTime[id]>0.5)
  276.             {
  277.                 ddnum[id]=0;
  278.                 bhop_num[id]=0;
  279.                 firstfall_ground[id] = false;
  280.                 duckgainspeed[id] = 0.0;
  281.                 prebhopspeed[id] = 0.0;
  282.                 preduckspeed[id] = 0.0;
  283.                 bhopgainspeed[id] = 0.0;
  284.                 preladderspeed[id] = 0.0;
  285.             }
  286.            
  287.             if(flags&FL_ONGROUND && firstfall_ground[id]==false)
  288.             {
  289.                 FallTime[id]=get_gametime();
  290.                 firstfall_ground[id]=true;
  291.             }
  292.             else if(!(flags&FL_ONGROUND) && firstfall_ground[id]==true)
  293.             {
  294.                 firstfall_ground[id]=false;
  295.             }  
  296.  
  297.                
  298.         }
  299.     }
  300.     return FMRES_IGNORED;
  301. }
  302.  
  303. public FwdPlayerSpawn(id)
  304. {
  305.     if( is_user_alive(id) && !is_user_hltv(id))
  306.     {
  307.         g_alive[id] = true;
  308.     }
  309. }
  310.  
  311. public FwdPlayerDeath(id)
  312. {
  313.     g_alive[id] = false;
  314. }
  315.  
  316. bool:is_user_duckk( id )
  317. {
  318.     if( !pev_valid( id )  )
  319.         return false
  320.    
  321.     new Float:abs_min[3], Float:abs_max[3]
  322.    
  323.     pev( id, pev_absmin, abs_min )
  324.     pev( id, pev_absmax, abs_max )
  325.    
  326.     abs_min[2] += 64.0
  327.    
  328.     if( abs_min[2] < abs_max[2] )
  329.         return false
  330.    
  331.     return true
  332. }
  333.  
  334. public client_connect( plr )
  335. {
  336.  
  337.    
  338.     g_userConnected[plr]=true;
  339.     plrPre[plr]=true;
  340.  
  341.     ddnum[plr]=0;
  342.     bhopgainspeed[plr] = 0.0
  343.     duckgainspeed[plr] = 0.0
  344.     prebhopspeed[plr] = 0.0
  345.     preduckspeed[plr] = 0.0
  346.     preladderspeed[plr] = 0.0;
  347. }
  348.  
  349. public client_disconnect(id) {
  350.    
  351.     g_userConnected[id]=false;
  352.     g_alive[id]=false;
  353.  
  354. }
  355.  
  356. stock is_user_spectating_player(spectator, player)
  357. {
  358.     if( !pev_valid(spectator) || !pev_valid(player) )
  359.         return 0;
  360.     if( !is_user_connected(spectator) || !is_user_connected(player) )
  361.         return 0;
  362.     if( is_user_alive(spectator) || !is_user_alive(player) )
  363.         return 0;
  364.     if( pev(spectator, pev_deadflag) != 2 )
  365.         return 0;
  366.    
  367.     static specmode;
  368.     specmode = pev(spectator, pev_iuser1);
  369.     if( !(specmode == 1 || specmode == 2 || specmode == 4) )
  370.         return 0;
  371.    
  372.     if( pev(spectator, pev_iuser2) == player )
  373.         return 1;
  374.    
  375.     return 0;
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement