Advertisement
IdoGame

Stand on hs down hp

Aug 10th, 2014
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.66 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <cstrike>
  4.  
  5. #define PLUGIN_VERSION "1.4"
  6.  
  7. #define MINIMUM_FALL_SPEED 300
  8. #define MAXIMUM_DAMAGE_FROM_JUMP 70.0
  9.  
  10.  
  11.  
  12. #define DAMAGE 10.0
  13. #define DELAY 2.0
  14.  
  15. new Float:falling_speed[33];
  16. new Float:damage_after[33][33];
  17. new sprite_blood;
  18. new sprite_bloodspray;
  19.  
  20.  
  21. public plugin_init()
  22. {
  23.     register_plugin("Head Splash", PLUGIN_VERSION, "Someones..");
  24.     register_forward(FM_Touch, "forward_touch");
  25.     register_forward(FM_PlayerPreThink, "forward_PlayerPreThink");
  26.    
  27.    
  28. }
  29.  
  30. public plugin_precache()
  31. {
  32.     sprite_blood = precache_model("sprites/blood.spr");
  33.     sprite_bloodspray = precache_model("sprites/bloodspray.spr");
  34. }
  35.  
  36. public forward_touch(toucher, touched)
  37. {
  38.    
  39.     if(!is_user_alive(toucher) || !is_user_alive(touched))
  40.         return;
  41.    
  42.     if(falling_speed[touched])
  43.         return;
  44.    
  45.     if(get_user_team(toucher) == get_user_team(touched) && !get_cvar_num("mp_friendlyfire"))
  46.         return;
  47.    
  48.     new touched_origin[3], toucher_origin[3];
  49.     get_user_origin(touched, touched_origin);
  50.     get_user_origin(toucher, toucher_origin);
  51.    
  52.     new Float:toucher_minsize[3], Float:touched_minsize[3];
  53.     pev(toucher,pev_mins,toucher_minsize);
  54.     pev(touched,pev_mins,touched_minsize);
  55.    
  56.     if(touched_minsize[2] != -18.0)
  57.     {
  58.         if(!(toucher_origin[2] == touched_origin[2]+72 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+54 && toucher_minsize[2] == -18.0))
  59.         {
  60.             return;
  61.         }
  62.     }
  63.     else
  64.     {
  65.         if(!(toucher_origin[2] == touched_origin[2]+68 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+50 && toucher_minsize[2] == -18.0))
  66.         {
  67.             return;
  68.         }
  69.     }
  70.    
  71.     if(falling_speed[toucher] >= MINIMUM_FALL_SPEED)
  72.     {
  73.         new Float:damage = ((falling_speed[toucher] - MINIMUM_FALL_SPEED + 30) * (falling_speed[toucher] - MINIMUM_FALL_SPEED + 30)) / 1300;
  74.         if(damage > MAXIMUM_DAMAGE_FROM_JUMP)
  75.             damage = MAXIMUM_DAMAGE_FROM_JUMP;
  76.         damage_player(touched, toucher, damage);
  77.         damage_after[toucher][touched] = 0.0;
  78.     }
  79.     if(is_user_alive(touched) && damage_after[toucher][touched] <= get_gametime())
  80.     {
  81.         damage_after[toucher][touched] = get_gametime() + DELAY;
  82.         damage_player(touched, toucher, DAMAGE);
  83.     }
  84. }
  85.  
  86. public forward_PlayerPreThink(id)
  87. {
  88.    
  89.     pev(id, pev_flFallVelocity, falling_speed[id])
  90. }
  91.  
  92. public damage_player(pwned, pwnzor, Float:damage)
  93. {
  94.     new health = get_user_health(pwned);
  95.     if(get_user_team(pwned) == get_user_team(pwnzor))
  96.         damage /= 1.4;
  97.     new CsArmorType:armortype;
  98.     cs_get_user_armor(pwned, armortype);
  99.     if(armortype == CS_ARMOR_VESTHELM)
  100.         damage *= 0.7;
  101.     if(health >  damage)
  102.     {
  103.         new pwned_origin[3];
  104.         get_user_origin(pwned, pwned_origin);
  105.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  106.         write_byte(TE_BLOODSPRITE);
  107.         write_coord(pwned_origin[0]+8);
  108.         write_coord(pwned_origin[1]);
  109.         write_coord(pwned_origin[2]+26);
  110.         write_short(sprite_bloodspray);
  111.         write_short(sprite_blood);
  112.         write_byte(248);
  113.         write_byte(4);
  114.         message_end();
  115.        
  116.         new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "trigger_hurt"));
  117.         if(!ent)
  118.             return;
  119.         new value[16];
  120.         float_to_str(damage * 2, value, sizeof value - 1);
  121.         set_kvd(0, KV_ClassName, "trigger_hurt");
  122.         set_kvd(0, KV_KeyName, "dmg");
  123.         set_kvd(0, KV_Value, value);
  124.         set_kvd(0, KV_fHandled, 0);
  125.         dllfunc(DLLFunc_KeyValue, ent, 0);
  126.         num_to_str(DMG_GENERIC, value, sizeof value - 1);
  127.         set_kvd(0, KV_ClassName, "trigger_hurt");
  128.         set_kvd(0, KV_KeyName, "damagetype");
  129.         set_kvd(0, KV_Value, value);
  130.         set_kvd(0, KV_fHandled, 0);
  131.         dllfunc(DLLFunc_KeyValue, ent, 0);
  132.         set_kvd(0, KV_ClassName, "trigger_hurt");
  133.         set_kvd(0, KV_KeyName, "origin");
  134.         set_kvd(0, KV_Value, "8192 8192 8192");
  135.         set_kvd(0, KV_fHandled, 0);
  136.         dllfunc(DLLFunc_KeyValue, ent, 0);
  137.         dllfunc(DLLFunc_Spawn, ent);
  138.         set_pev(ent, pev_classname, "head_splash");
  139.         dllfunc(DLLFunc_Touch, ent, pwned);
  140.         engfunc(EngFunc_RemoveEntity, ent);
  141.     }
  142.     else
  143.     {
  144.         new pwned_origin[3];
  145.         get_user_origin(pwned, pwned_origin);
  146.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  147.         write_byte(TE_BLOODSPRITE);
  148.         write_coord(pwned_origin[0]+8);
  149.         write_coord(pwned_origin[1]);
  150.         write_coord(pwned_origin[2]+26);
  151.         write_short(sprite_bloodspray);
  152.         write_short(sprite_blood);
  153.         write_byte(248);
  154.         write_byte(12);
  155.         message_end();
  156.        
  157.         set_pev(pwned, pev_frags, float(get_user_frags(pwned) + 1));
  158.         user_silentkill(pwned);
  159.         make_deathmsg(pwnzor, pwned, 1, "his/her feet :)");
  160.        
  161.         message_begin(MSG_ALL, get_user_msgid("ScoreInfo"));
  162.         write_byte(pwnzor);
  163.         write_short(get_user_frags(pwnzor));
  164.         write_short(cs_get_user_deaths(pwnzor));
  165.         write_short(0);
  166.         write_short(get_user_team(pwnzor));
  167.         message_end();
  168.        
  169.         message_begin(MSG_ALL, get_user_msgid("ScoreInfo"));
  170.         write_byte(pwned);
  171.         write_short(get_user_frags(pwned));
  172.         write_short(cs_get_user_deaths(pwned));
  173.         write_short(0);
  174.         write_short(get_user_team(pwned));
  175.         message_end();
  176.         set_pev(pwned, pev_frags, float(get_user_frags(pwned) - 1));
  177.     }
  178. }
  179.  
  180. /*************
  181. *** STOCKS ***
  182. *************/
  183.  
  184. stock ColorMessage(const id, const input[], any:...){
  185.     new count = 1, players[32];
  186.     static msg[ 191 ];
  187.     vformat(msg, 190, input, 3);
  188.     if (id) players[0] = id; else get_players(players , count , "ch"); {
  189.         for (new i = 0; i < count; i++){
  190.             if (is_user_connected(players[i])){
  191.                 message_begin(MSG_ONE_UNRELIABLE , get_user_msgid("SayText"), _, players[i]);
  192.                 write_byte(players[i]);
  193.                 write_string(msg);
  194.     message_end();}}}
  195. }
  196.  
  197. stock hnsxp_add_user_xp(client, xp)
  198. {
  199.     return hnsxp_set_user_xp(client, hnsxp_get_user_xp(client) + xp);
  200. }
  201.  
  202. stock hnsxp_decrease_user_xp(client, xp)
  203. {
  204.     return hnsxp_set_user_xp(client, hnsxp_get_user_xp(client) - xp);
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement