Advertisement
Headache

[FS] Realistic damage (0.3z)

Jul 5th, 2014
2,681
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 17.04 KB | None | 0 0
  1. #include <a_samp>
  2. #include <fader>
  3. #include <foreach>
  4. #include <sscanf2>
  5. #include <zcmd>
  6.  
  7. new Power[MAX_PLAYERS];
  8.  
  9. public OnFilterScriptInit()
  10. {
  11.     EnableVehicleFriendlyFire();
  12.     foreach(new i: Player)
  13.     {
  14.         SetPlayerTeam(i, 1);
  15.     }
  16.     return 1;
  17. }
  18.  
  19. public OnFilterScriptExit()
  20. {
  21.     foreach(new i: Player)
  22.     {
  23.         SetPlayerTeam(i, -1);
  24.     }
  25.     Seifader_OnExit();
  26.     return 1;
  27. }
  28.  
  29. public OnPlayerConnect(playerid)
  30. {
  31.     SetPlayerTeam(playerid, 1);
  32.     Power[playerid] = 1;
  33.     return 1;
  34. }
  35.  
  36. public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
  37. {
  38.     new Float:damage, Float:health, Float:armour, string[256];
  39.     new power = Power[issuerid];
  40.     if(issuerid != INVALID_PLAYER_ID)
  41.     {
  42.         if(amount == 2.64)
  43.         {
  44.             if(GetPlayerWeapon(issuerid) > 21 && GetPlayerWeapon(issuerid) < 34)
  45.             {
  46.                 switch(power)
  47.                 {
  48.                     case 0..10: damage = 11.5;
  49.                     case 11..20: damage = 12.0;
  50.                     case 21..30: damage = 12.5;
  51.                     case 31..40: damage = 13.0;
  52.                     case 41..50: damage = 13.5;
  53.                     case 51..60: damage = 14.0;
  54.                     case 61..70: damage = 14.5;
  55.                     case 71..80: damage = 15.0;
  56.                     case 81..90: damage = 15.5;
  57.                     case 91..100: damage = 16.0;
  58.                 }
  59.             }
  60.         }
  61.         else
  62.         {
  63.             if(weaponid >= 0 && weaponid < 16)
  64.             {
  65.                 switch(weaponid)
  66.                 {
  67.                     case 0:
  68.                     {
  69.                         switch(bodypart)
  70.                         {
  71.                             case 3:
  72.                             {
  73.                                 switch(power)
  74.                                 {
  75.                                     case 0..10: damage = 3.0;
  76.                                     case 11..20: damage = 3.5;
  77.                                     case 21..30: damage = 4.0;
  78.                                     case 31..40: damage = 4.5;
  79.                                     case 41..50: damage = 5.0;
  80.                                     case 51..60: damage = 5.5;
  81.                                     case 61..70: damage = 6.0;
  82.                                     case 71..80: damage = 6.5;
  83.                                     case 81..90: damage = 7.0;
  84.                                     case 91..100: damage = 7.5;
  85.                                 }
  86.                             }
  87.                             case 4:
  88.                             {
  89.                                 switch(power)
  90.                                 {
  91.                                     case 0..10: damage = 4.5;
  92.                                     case 11..20: damage = 5.0;
  93.                                     case 21..30: damage = 5.5;
  94.                                     case 31..40: damage = 6.0;
  95.                                     case 41..50: damage = 6.5;
  96.                                     case 51..60: damage = 7.0;
  97.                                     case 61..70: damage = 7.5;
  98.                                     case 71..80: damage = 8.0;
  99.                                     case 81..90: damage = 8.5;
  100.                                     case 91..100: damage = 9.0;
  101.                                 }
  102.                             }
  103.                             case 5..8:
  104.                             {
  105.                                 switch(power)
  106.                                 {
  107.                                     case 0..10: damage = 2.0;
  108.                                     case 11..20: damage = 2.5;
  109.                                     case 21..30: damage = 3.0;
  110.                                     case 31..40: damage = 3.5;
  111.                                     case 41..50: damage = 4.0;
  112.                                     case 51..60: damage = 4.5;
  113.                                     case 61..70: damage = 5.0;
  114.                                     case 71..80: damage = 5.5;
  115.                                     case 81..90: damage = 6.0;
  116.                                     case 91..100: damage = 6.5;
  117.                                 }
  118.                             }
  119.                             case 9:
  120.                             {
  121.                                 switch(power)
  122.                                 {
  123.                                     case 0..10: damage = 4.0;
  124.                                     case 11..20: damage = 4.5;
  125.                                     case 21..30: damage = 5.0;
  126.                                     case 31..40: damage = 5.5;
  127.                                     case 41..50: damage = 6.0;
  128.                                     case 51..60: damage = 6.5;
  129.                                     case 61..70: damage = 7.0;
  130.                                     case 71..80: damage = 7.5;
  131.                                     case 81..90: damage = 8.0;
  132.                                     case 91..100: damage = 8.5;
  133.                                 }
  134.                             }
  135.                         }
  136.                     }
  137.                     case 1:
  138.                     {
  139.                         switch(bodypart)
  140.                         {
  141.                             case 3:
  142.                             {
  143.                                 switch(power)
  144.                                 {
  145.                                     case 0..10: damage = 4.0;
  146.                                     case 11..20: damage = 4.5;
  147.                                     case 21..30: damage = 5.0;
  148.                                     case 31..40: damage = 5.5;
  149.                                     case 41..50: damage = 6.0;
  150.                                     case 51..60: damage = 6.5;
  151.                                     case 61..70: damage = 7.0;
  152.                                     case 71..80: damage = 7.5;
  153.                                     case 81..90: damage = 8.0;
  154.                                     case 91..100: damage = 8.5;
  155.                                 }
  156.                             }
  157.                             case 4:
  158.                             {
  159.                                 switch(power)
  160.                                 {
  161.                                     case 0..10: damage = 5.5;
  162.                                     case 11..20: damage = 6.0;
  163.                                     case 21..30: damage = 6.5;
  164.                                     case 31..40: damage = 7.0;
  165.                                     case 41..50: damage = 7.5;
  166.                                     case 51..60: damage = 8.0;
  167.                                     case 61..70: damage = 8.5;
  168.                                     case 71..80: damage = 9.0;
  169.                                     case 81..90: damage = 9.5;
  170.                                     case 91..100: damage = 10.0;
  171.                                 }
  172.                             }
  173.                             case 5..8:
  174.                             {
  175.                                 switch(power)
  176.                                 {
  177.                                     case 0..10: damage = 3.0;
  178.                                     case 11..20: damage = 3.5;
  179.                                     case 21..30: damage = 4.0;
  180.                                     case 31..40: damage = 4.5;
  181.                                     case 41..50: damage = 5.0;
  182.                                     case 51..60: damage = 5.5;
  183.                                     case 61..70: damage = 6.0;
  184.                                     case 71..80: damage = 6.5;
  185.                                     case 81..90: damage = 7.0;
  186.                                     case 91..100: damage = 7.5;
  187.                                 }
  188.                             }
  189.                             case 9:
  190.                             {
  191.                                 switch(power)
  192.                                 {
  193.                                     case 0..10: damage = 5.0;
  194.                                     case 11..20: damage = 5.5;
  195.                                     case 21..30: damage = 6.0;
  196.                                     case 31..40: damage = 6.5;
  197.                                     case 41..50: damage = 7.0;
  198.                                     case 51..60: damage = 7.5;
  199.                                     case 61..70: damage = 8.0;
  200.                                     case 71..80: damage = 8.5;
  201.                                     case 81..90: damage = 9.0;
  202.                                     case 91..100: damage = 9.5;
  203.                                 }
  204.                             }
  205.                         }
  206.                     }
  207.                     case 2,3,5,6,7,15:
  208.                     {
  209.                         switch(bodypart)
  210.                         {
  211.                             case 3:
  212.                             {
  213.                                 switch(power)
  214.                                 {
  215.                                     case 0..10: damage = 6.0;
  216.                                     case 11..20: damage = 6.5;
  217.                                     case 21..30: damage = 7.0;
  218.                                     case 31..40: damage = 7.5;
  219.                                     case 41..50: damage = 8.0;
  220.                                     case 51..60: damage = 8.5;
  221.                                     case 61..70: damage = 9.0;
  222.                                     case 71..80: damage = 9.5;
  223.                                     case 81..90: damage = 10.0;
  224.                                     case 91..100: damage = 10.5;
  225.                                 }
  226.                             }
  227.                             case 4:
  228.                             {
  229.                                 switch(power)
  230.                                 {
  231.                                     case 0..10: damage = 10.5;
  232.                                     case 11..20: damage = 11.0;
  233.                                     case 21..30: damage = 11.5;
  234.                                     case 31..40: damage = 12.0;
  235.                                     case 41..50: damage = 12.5;
  236.                                     case 51..60: damage = 13.0;
  237.                                     case 61..70: damage = 13.5;
  238.                                     case 71..80: damage = 14.0;
  239.                                     case 81..90: damage = 14.5;
  240.                                     case 91..100: damage = 15.0;
  241.                                 }
  242.                             }
  243.                             case 5..8:
  244.                             {
  245.                                 switch(power)
  246.                                 {
  247.                                     case 0..10: damage = 5.0;
  248.                                     case 11..20: damage = 5.5;
  249.                                     case 21..30: damage = 6.0;
  250.                                     case 31..40: damage = 6.5;
  251.                                     case 41..50: damage = 7.0;
  252.                                     case 51..60: damage = 7.5;
  253.                                     case 61..70: damage = 8.0;
  254.                                     case 71..80: damage = 8.5;
  255.                                     case 81..90: damage = 9.0;
  256.                                     case 91..100: damage = 9.5;
  257.                                 }
  258.                             }
  259.                             case 9:
  260.                             {
  261.                                 switch(power)
  262.                                 {
  263.                                     case 0..10: damage = 10.0;
  264.                                     case 11..20: damage = 10.5;
  265.                                     case 21..30: damage = 11.0;
  266.                                     case 31..40: damage = 11.5;
  267.                                     case 41..50: damage = 12.0;
  268.                                     case 51..60: damage = 12.5;
  269.                                     case 61..70: damage = 13.0;
  270.                                     case 71..80: damage = 13.5;
  271.                                     case 81..90: damage = 14.0;
  272.                                     case 91..100: damage = 14.5;
  273.                                 }
  274.                             }
  275.                         }
  276.                     }
  277.                     case 4:
  278.                     {
  279.                         switch(bodypart)
  280.                         {
  281.                             case 3:
  282.                             {
  283.                                 switch(power)
  284.                                 {
  285.                                     case 0..10: damage = 10.0;
  286.                                     case 11..20: damage = 10.5;
  287.                                     case 21..30: damage = 11.0;
  288.                                     case 31..40: damage = 11.5;
  289.                                     case 41..50: damage = 12.0;
  290.                                     case 51..60: damage = 12.5;
  291.                                     case 61..70: damage = 13.0;
  292.                                     case 71..80: damage = 13.5;
  293.                                     case 81..90: damage = 14.0;
  294.                                     case 91..100: damage = 14.5;
  295.                                 }
  296.                             }
  297.                             case 4:
  298.                             {
  299.                                 switch(power)
  300.                                 {
  301.                                     case 0..10: damage = 12.5;
  302.                                     case 11..20: damage = 13.0;
  303.                                     case 21..30: damage = 13.5;
  304.                                     case 31..40: damage = 14.0;
  305.                                     case 41..50: damage = 14.5;
  306.                                     case 51..60: damage = 15.0;
  307.                                     case 61..70: damage = 15.5;
  308.                                     case 71..80: damage = 16.0;
  309.                                     case 81..90: damage = 16.5;
  310.                                     case 91..100: damage = 17.0;
  311.                                 }
  312.                             }
  313.                             case 5..8:
  314.                             {
  315.                                 switch(power)
  316.                                 {
  317.                                     case 0..10: damage = 6.0;
  318.                                     case 11..20: damage = 6.5;
  319.                                     case 21..30: damage = 7.0;
  320.                                     case 31..40: damage = 7.5;
  321.                                     case 41..50: damage = 8.0;
  322.                                     case 51..60: damage = 8.5;
  323.                                     case 61..70: damage = 9.0;
  324.                                     case 71..80: damage = 9.5;
  325.                                     case 81..90: damage = 10.0;
  326.                                     case 91..100: damage = 10.5;
  327.                                 }
  328.                             }
  329.                             case 9:
  330.                             {
  331.                                 switch(power)
  332.                                 {
  333.                                     case 0..10: damage = 12.0;
  334.                                     case 11..20: damage = 12.5;
  335.                                     case 21..30: damage = 13.0;
  336.                                     case 31..40: damage = 13.5;
  337.                                     case 41..50: damage = 14.0;
  338.                                     case 51..60: damage = 14.5;
  339.                                     case 61..70: damage = 15.0;
  340.                                     case 71..80: damage = 15.5;
  341.                                     case 81..90: damage = 16.0;
  342.                                     case 91..100: damage = 16.5;
  343.                                 }
  344.                             }
  345.                         }
  346.                     }
  347.                     case 8:
  348.                     {
  349.                         switch(bodypart)
  350.                         {
  351.                             case 3,4:
  352.                             {
  353.                                 switch(power)
  354.                                 {
  355.                                     case 0..10: damage = 15.0;
  356.                                     case 11..20: damage = 15.5;
  357.                                     case 21..30: damage = 16.0;
  358.                                     case 31..40: damage = 16.5;
  359.                                     case 41..50: damage = 17.0;
  360.                                     case 51..60: damage = 17.5;
  361.                                     case 61..70: damage = 18.0;
  362.                                     case 71..80: damage = 18.5;
  363.                                     case 81..90: damage = 19.0;
  364.                                     case 91..100: damage = 19.5;
  365.                                 }
  366.                             }
  367.                             case 5..8:
  368.                             {
  369.                                 switch(power)
  370.                                 {
  371.                                     case 0..10: damage = 12.0;
  372.                                     case 11..20: damage = 12.5;
  373.                                     case 21..30: damage = 13.0;
  374.                                     case 31..40: damage = 13.5;
  375.                                     case 41..50: damage = 14.0;
  376.                                     case 51..60: damage = 14.5;
  377.                                     case 61..70: damage = 15.0;
  378.                                     case 71..80: damage = 15.5;
  379.                                     case 81..90: damage = 16.0;
  380.                                     case 91..100: damage = 16.5;
  381.                                 }
  382.                             }
  383.                             case 9: damage = 200;
  384.                         }
  385.                     }
  386.                     default: damage = amount;
  387.                 }
  388.                 format(string, sizeof(string), "Damage produced by the blow or cut: %f | Aggressor power: %d | Weapon ID: %d | Bodypart: %s", damage, power, weaponid, GetBodypart(bodypart));
  389.                 SendClientMessageToAll(-1, string);
  390.                 SendClientMessageToAll(-1, "|-----------------|");
  391.             }
  392.             if(weaponid > 21 && weaponid < 52)
  393.             {
  394.                 switch(weaponid)
  395.                 {
  396.                     case 22,23:
  397.                     {
  398.                         switch(bodypart)
  399.                         {
  400.                             case 3,4: damage = 45.0;
  401.                             case 5..8: damage = 20.0;
  402.                             case 9: damage = 200.0;
  403.                         }
  404.                     }
  405.                     case 24:
  406.                     {
  407.                         switch(bodypart)
  408.                         {
  409.                             case 3,4: damage = 70.0;
  410.                             case 5..8: damage = 35.0;
  411.                             case 9: damage = 200.0;
  412.                         }
  413.                     }
  414.                     case 25..27:
  415.                     {
  416.                         switch(bodypart)
  417.                         {
  418.                             case 3,4: damage = 90.0;
  419.                             case 5..8: damage = 50.0;
  420.                             case 9: damage = 200.0;
  421.                         }
  422.                     }
  423.                     case 28,32:
  424.                     {
  425.                         switch(bodypart)
  426.                         {
  427.                             case 3,4: damage = 45.0;
  428.                             case 5..8: damage = 20.0;
  429.                             case 9: damage = 200.0;
  430.                         }
  431.                     }
  432.                     case 29:
  433.                     {
  434.                         switch(bodypart)
  435.                         {
  436.                             case 3,4: damage = 55.0;
  437.                             case 5..8: damage = 30.0;
  438.                             case 9: damage = 200.0;
  439.                         }
  440.                     }
  441.                     case 30:
  442.                     {
  443.                         switch(bodypart)
  444.                         {
  445.                             case 3,4: damage = 65.0;
  446.                             case 5..8: damage = 40.0;
  447.                             case 9: damage = 200.0;
  448.                         }
  449.                     }
  450.                     case 31:
  451.                     {
  452.                         switch(bodypart)
  453.                         {
  454.                             case 3,4: damage = 60.0;
  455.                             case 5..8: damage = 35.0;
  456.                             case 9: damage = 200.0;
  457.                         }
  458.                     }
  459.                     case 33:
  460.                     {
  461.                         switch(bodypart)
  462.                         {
  463.                             case 3,4: damage = 80.0;
  464.                             case 5..8: damage = 40.0;
  465.                             case 9: damage = 200.0;
  466.                         }
  467.                     }
  468.                     case 34:
  469.                     {
  470.                         switch(bodypart)
  471.                         {
  472.                             case 3,4: damage = 100.0;
  473.                             case 5..8: damage = 60.0;
  474.                             case 9: damage = 200.0;
  475.                         }
  476.                     }
  477.                     default: damage = amount;
  478.                 }
  479.                 format(string, sizeof(string), "Damage produced by the shot: %f | Weapon ID: %d | Bodypart: %s", damage, weaponid, GetBodypart(bodypart));
  480.                 SendClientMessageToAll(-1, string);
  481.                 SendClientMessageToAll(-1, "|-----------------|");
  482.                 FadePlayerScreen(playerid, 0xE20000FF, 25);
  483.             }
  484.         }
  485.         GetPlayerHealth(playerid, health);
  486.         GetPlayerArmour(playerid, armour);
  487.         if(armour)
  488.         {
  489.             if(armour > damage) SetPlayerArmour(playerid, armour-damage);
  490.             else
  491.             {
  492.                 SetPlayerArmour(playerid, 0.0);
  493.                 armour = damage-armour;
  494.                 if(armour >= health) SetPlayerHealth(playerid, 0.0);
  495.                 else SetPlayerHealth(playerid, health-armour);
  496.             }
  497.         }
  498.         else
  499.         {
  500.             if(health > damage) SetPlayerHealth(playerid, health-damage);
  501.             else SetPlayerHealth(playerid, 0.0);
  502.         }
  503.     }
  504.     return 1;
  505. }
  506.  
  507. stock PlayerName(playerid)
  508. {
  509.     new name[32];
  510.     GetPlayerName(playerid, name, 32);
  511.     return name;
  512. }
  513.  
  514. stock GetBodypart(id)
  515. {
  516.     new name[64] = "None";
  517.     if(id == 3) name = "Torso";
  518.     if(id == 4) name = "Groin";
  519.     if(id == 5) name = "Left arm";
  520.     if(id == 6) name = "Right arm";
  521.     if(id == 7) name = "Left leg";
  522.     if(id == 8) name = "Right leg";
  523.     if(id == 9) name = "Head";
  524.     return name;
  525. }
  526.  
  527. COMMAND:givepower(playerid, params[])
  528. {
  529.     if(!sscanf(params, "ui", params[0], params[1]))
  530.     {
  531.         if(params[0] != INVALID_PLAYER_ID)
  532.         {
  533.             if(params[1] < 0 || params[1] > 100) return SendClientMessage(playerid, -1, "[ERROR] You can only occur between 1 and 100 strength points");
  534.             Power[params[0]] = params[1];
  535.             new string[128];
  536.             format(string, sizeof(string), "%s has given you %d strength points.", PlayerName(playerid), params[1]);
  537.             SendClientMessage(params[0], -1, string);
  538.         }
  539.         else SendClientMessage(playerid, -1, "[ERROR] The selected player is not connected.");
  540.     }
  541.     else SendClientMessage(playerid, -1, "[USAGE] '/givepower' [Player ID] [Power 1-100]");
  542.     return 1;
  543. }
  544.  
  545. COMMAND:power(playerid, params[])
  546. {
  547.     new string[128];
  548.     format(string, sizeof(string), "You have %d strength points.", Power[playerid]);
  549.     SendClientMessage(playerid, -1, string);
  550.     return 1;
  551. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement