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

[FS] Sistema de daños / fuerza (por Headache)