Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Wklejka 1qgj9bw2n334c dodana przez SqNw0w, 17.07.2012 05:37
soccerjam
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. 737. 738. 739. 740. 741. 742. 743. 744. 745. 746. 747. 748. 749. 750. 751. 752. 753. 754. 755. 756. 757. 758. 759. 760. 761. 762. 763. 764. 765. 766. 767. 768. 769. 770. 771. 772. 773. 774. 775. 776. 777. 778. 779. 780. 781. 782. 783. 784. 785. 786. 787. 788. 789. 790. 791. 792. 793. 794. 795. 796. 797. 798. 799. 800. 801. 802. 803. 804. 805. 806. 807. 808. 809. 810. 811. 812. 813. 814. 815. 816. 817. 818. 819. 820. 821. 822. 823. 824. 825. 826. 827. 828. 829. 830. 831. 832. 833. 834. 835. 836. 837. 838. 839. 840. 841. 842. 843. 844. 845. 846. 847. 848. 849. 850. 851. 852. 853. 854. 855. 856. 857. 858. 859. 860. 861. 862. 863. 864. 865. 866. 867. 868. 869. 870. 871. 872. 873. 874. 875. 876. 877. 878. 879. 880. 881. 882. 883. 884. 885. 886. 887. 888. 889. 890. 891. 892. 893. 894. 895. 896. 897. 898. 899. 900. 901. 902. 903. 904. 905. 906. 907. 908. 909. 910. 911. 912. 913. 914. 915. 916. 917. 918. 919. 920. 921. 922. 923. 924. 925. 926. 927. 928. 929. 930. 931. 932. 933. 934. 935. 936. 937. 938. 939. 940. 941. 942. 943. 944. 945. 946. 947. 948. 949. 950. 951. 952. 953. 954. 955. 956. 957. 958. 959. 960. 961. 962. 963. 964. 965. 966. 967. 968. 969. 970. 971. 972. 973. 974. 975. 976. 977. 978. 979. 980. 981. 982. 983. 984. 985. 986. 987. 988. 989. 990. 991. 992. 993. 994. 995. 996. 997. 998. 999. 1000. 1001. 1002. 1003. 1004. 1005. 1006. 1007. 1008. 1009. 1010. 1011. 1012. 1013. 1014. 1015. 1016. 1017. 1018. 1019. 1020. 1021. 1022. 1023. 1024. 1025. 1026. 1027. 1028. 1029. 1030. 1031. 1032. 1033. 1034. 1035. 1036. 1037. 1038. 1039. 1040. 1041. 1042. 1043. 1044. 1045. 1046. 1047. 1048. 1049. 1050. 1051. 1052. 1053. 1054. 1055. 1056. 1057. 1058. 1059. 1060. 1061. 1062. 1063. 1064. 1065. 1066. 1067. 1068. 1069. 1070. 1071. 1072. 1073. 1074. 1075. 1076. 1077. 1078. 1079. 1080. 1081. 1082. 1083. 1084. 1085. 1086. 1087. 1088. 1089. 1090. 1091. 1092. 1093. 1094. 1095. 1096. 1097. 1098. 1099. 1100. 1101. 1102. 1103. 1104. 1105. 1106. 1107. 1108. 1109. 1110. 1111. 1112. 1113. 1114. 1115. 1116. 1117. 1118. 1119. 1120. 1121. 1122. 1123. 1124. 1125. 1126. 1127. 1128. 1129. 1130. 1131. 1132. 1133. 1134. 1135. 1136. 1137. 1138. 1139. 1140. 1141. 1142. 1143. 1144. 1145. 1146. 1147. 1148. 1149. 1150. 1151. 1152. 1153. 1154. 1155. 1156. 1157. 1158. 1159. 1160. 1161. 1162. 1163. 1164. 1165. 1166. 1167. 1168. 1169. 1170. 1171. 1172. 1173. 1174. 1175. 1176. 1177. 1178. 1179. 1180. 1181. 1182. 1183. 1184. 1185. 1186. 1187. 1188. 1189. 1190. 1191. 1192. 1193. 1194. 1195. 1196. 1197. 1198. 1199. 1200. 1201. 1202. 1203. 1204. 1205. 1206. 1207. 1208. 1209. 1210. 1211. 1212. 1213. 1214. 1215. 1216. 1217. 1218. 1219. 1220. 1221. 1222. 1223. 1224. 1225. 1226. 1227. 1228. 1229. 1230. 1231. 1232. 1233. 1234. 1235. 1236. 1237. 1238. 1239. 1240. 1241. 1242. 1243. 1244. 1245. 1246. 1247. 1248. 1249. 1250. 1251. 1252. 1253. 1254. 1255. 1256. 1257. 1258. 1259. 1260. 1261. 1262. 1263. 1264. 1265. 1266. 1267. 1268. 1269. 1270. 1271. 1272. 1273. 1274. 1275. 1276. 1277. 1278. 1279. 1280. 1281. 1282. 1283. 1284. 1285. 1286. 1287. 1288. 1289. 1290. 1291. 1292. 1293. 1294. 1295. 1296. 1297. 1298. 1299. 1300. 1301. 1302. 1303. 1304. 1305. 1306. 1307. 1308. 1309. 1310. 1311. 1312. 1313. 1314. 1315. 1316. 1317. 1318. 1319. 1320. 1321. 1322. 1323. 1324. 1325. 1326. 1327. 1328. 1329. 1330. 1331. 1332. 1333. 1334. 1335. 1336. 1337. 1338. 1339. 1340. 1341. 1342. 1343. 1344. 1345. 1346. 1347. 1348. 1349. 1350. 1351. 1352. 1353. 1354. 1355. 1356. 1357. 1358. 1359. 1360. 1361. 1362. 1363. 1364. 1365. 1366. 1367. 1368. 1369. 1370. 1371. 1372. 1373. 1374. 1375. 1376. 1377. 1378. 1379. 1380. 1381. 1382. 1383. 1384. 1385. 1386. 1387. 1388. 1389. 1390. 1391. 1392. 1393. 1394. 1395. 1396. 1397. 1398. 1399. 1400. 1401. 1402. 1403. 1404. 1405. 1406. 1407. 1408. 1409. 1410. 1411. 1412. 1413. 1414. 1415. 1416. 1417. 1418. 1419. 1420. 1421. 1422. 1423. 1424. 1425. 1426. 1427. 1428. 1429. 1430. 1431. 1432. 1433. 1434. 1435. 1436. 1437. 1438. 1439. 1440. 1441. 1442. 1443. 1444. 1445. 1446. 1447. 1448. 1449. 1450. 1451. 1452. 1453. 1454. 1455. 1456. 1457. 1458. 1459. 1460. 1461. 1462. 1463. 1464. 1465. 1466. 1467. 1468. 1469. 1470. 1471. 1472. 1473. 1474. 1475. 1476. 1477. 1478. 1479. 1480. 1481. 1482. 1483. 1484. 1485. 1486. 1487. 1488. 1489. 1490. 1491. 1492. 1493. 1494. 1495. 1496. 1497. 1498. 1499. 1500. 1501. 1502. 1503. 1504. 1505. 1506. 1507. 1508. 1509. 1510. 1511. 1512. 1513. 1514. 1515. 1516. 1517. 1518. 1519. 1520. 1521. 1522. 1523. 1524. 1525. 1526. 1527. 1528. 1529. 1530. 1531. 1532. 1533. 1534. 1535. 1536. 1537. 1538. 1539. 1540. 1541. 1542. 1543. 1544. 1545. 1546. 1547. 1548. 1549. 1550. 1551. 1552. 1553. 1554. 1555. 1556. 1557. 1558. 1559. 1560. 1561. 1562. 1563. 1564. 1565. 1566. 1567. 1568. 1569. 1570. 1571. 1572. 1573. 1574. 1575. 1576. 1577. 1578. 1579. 1580. 1581. 1582. 1583. 1584. 1585. 1586. 1587. 1588. 1589. 1590. 1591. 1592. 1593. 1594. 1595. 1596. 1597. 1598. 1599. 1600. 1601. 1602. 1603. 1604. 1605. 1606. 1607. 1608. 1609. 1610. 1611. 1612. 1613. 1614. 1615. 1616. 1617. 1618. 1619. 1620. 1621. 1622. 1623. 1624. 1625. 1626. 1627. 1628. 1629. 1630. 1631. 1632. 1633. 1634. 1635. 1636. 1637. 1638. 1639. 1640. 1641. 1642. 1643. 1644. 1645. 1646. 1647. 1648. 1649. 1650. 1651. 1652. 1653. 1654. 1655. 1656. 1657. 1658. 1659. 1660. 1661. 1662. 1663. 1664. 1665. 1666. 1667. 1668. 1669. 1670. 1671. 1672. 1673. 1674. 1675. 1676. 1677. 1678. 1679. 1680. 1681. 1682. 1683. 1684. 1685. 1686. 1687. 1688. 1689. 1690. 1691. 1692. 1693. 1694. 1695. 1696. 1697. 1698. 1699. 1700. 1701. 1702. 1703. 1704. 1705. 1706. 1707. 1708. 1709. 1710. 1711. 1712. 1713. 1714. 1715. 1716. 1717. 1718. 1719. 1720. 1721. 1722. 1723. 1724. 1725. 1726. 1727. 1728. 1729. 1730. 1731. 1732. 1733. 1734. 1735. 1736. 1737. 1738. 1739. 1740. 1741. 1742. 1743. 1744. 1745. 1746. 1747. 1748. 1749. 1750. 1751. 1752. 1753. 1754. 1755. 1756. 1757. 1758. 1759. 1760. 1761. 1762. 1763. 1764. 1765. 1766. 1767. 1768. 1769. 1770. 1771. 1772. 1773. 1774. 1775. 1776. 1777. 1778. 1779. 1780. 1781. 1782. 1783. 1784. 1785. 1786. 1787. 1788. 1789. 1790. 1791. 1792. 1793. 1794. 1795. 1796. 1797. 1798. 1799. 1800. 1801. 1802. 1803. 1804. 1805. 1806. 1807. 1808. 1809. 1810. 1811. 1812. 1813. 1814. 1815. 1816. 1817. 1818. 1819. 1820. 1821. 1822. 1823. 1824. 1825. 1826. 1827. 1828. 1829. 1830. 1831. 1832. 1833. 1834. 1835. 1836. 1837. 1838. 1839. 1840. 1841. 1842. 1843. 1844. 1845. 1846. 1847. 1848. 1849. 1850. 1851. 1852. 1853. 1854. 1855. 1856. 1857. 1858. 1859. 1860. 1861. 1862. 1863. 1864. 1865. 1866. 1867. 1868. 1869. 1870. 1871. 1872. 1873. 1874. 1875. 1876. 1877. 1878. 1879. 1880. 1881. 1882. 1883. 1884. 1885. 1886. 1887. 1888. 1889. 1890. 1891. 1892. 1893. 1894. 1895. 1896. 1897. 1898. 1899. 1900. 1901. 1902. 1903. 1904. 1905. 1906. 1907. 1908. 1909. 1910. 1911. 1912. 1913. 1914. 1915. 1916. 1917. 1918. 1919. 1920. 1921. 1922. 1923. 1924. 1925. 1926. 1927. 1928. 1929. 1930. 1931. 1932. 1933. 1934. 1935. 1936. 1937. 1938. 1939. 1940. 1941. 1942. 1943. 1944. 1945. 1946. 1947. 1948. 1949. 1950. 1951. 1952. 1953. 1954. 1955. 1956. 1957. 1958. 1959. 1960. 1961. 1962. 1963. 1964. 1965. 1966. 1967. 1968. 1969. 1970. 1971. 1972. 1973. 1974. 1975. 1976. 1977. 1978. 1979. 1980. 1981. 1982. 1983. 1984. 1985. 1986. 1987. 1988. 1989. 1990. 1991. 1992. 1993. 1994. 1995. 1996. 1997. 1998. 1999. 2000. 2001. 2002. 2003. 2004. 2005. 2006. 2007. 2008. 2009. 2010. 2011. 2012. 2013. 2014. 2015. 2016. 2017. 2018. 2019. 2020. 2021. 2022. 2023. 2024. 2025. 2026. 2027. 2028. 2029. 2030. 2031. 2032. 2033. 2034. 2035. 2036. 2037. 2038. 2039. 2040. 2041. 2042. 2043. 2044. 2045. 2046. 2047. 2048. 2049. 2050. 2051. 2052. 2053. 2054. 2055. 2056. 2057. 2058. 2059. 2060. 2061. 2062. 2063. 2064. 2065. 2066. 2067. 2068. 2069. 2070. 2071. 2072. 2073. 2074. 2075. 2076. 2077. 2078. 2079. 2080. 2081. 2082. 2083. 2084. 2085. 2086. 2087. 2088. 2089. 2090. 2091. 2092. 2093. 2094. 2095. 2096. 2097. 2098. 2099. 2100. 2101. 2102. 2103. 2104. 2105. 2106. 2107. 2108. 2109. 2110. 2111. 2112. 2113. 2114. 2115. 2116. 2117. 2118. 2119. 2120. 2121. 2122. 2123. 2124. 2125. 2126. 2127. 2128. 2129. 2130. 2131. 2132. 2133. 2134. 2135. 2136. 2137. 2138. 2139. 2140. 2141. 2142. 2143. 2144. 2145. 2146. 2147. 2148. 2149. 2150. 2151. 2152. 2153. 2154. 2155. 2156. 2157. 2158. 2159. 2160. 2161. 2162. 2163. 2164. 2165. 2166. 2167. 2168. 2169. 2170. 2171. 2172. 2173. 2174. 2175. 2176. 2177. 2178. 2179. 2180. 2181. 2182. 2183. 2184. 2185. 2186. 2187. 2188. 2189. 2190. 2191. 2192. 2193. 2194. 2195. 2196. 2197. 2198. 2199. 2200. 2201. 2202. 2203. 2204. 2205. 2206. 2207. 2208. 2209. 2210. 2211. 2212. 2213. 2214. 2215. 2216. 2217. 2218. 2219. 2220. 2221. 2222. 2223. 2224. 2225. 2226. 2227. 2228. 2229. 2230. 2231. 2232. 2233.
// This is a modified version of OneEyed Soccer Jam plugin. // You may want to get the original: // http://forums.alliedmods.net/showthread.php?t=41447 #pragma dynamic 131072 //I used to much memory =( /* * CVARs: * - These CVARS can be changed at any time during round! * sj_kick (default: 650) - Default Kicking Speed. * sj_score (default: 15) - Scores needed to win a round. * sj_reset (default: 30.0) - Ball reset time, to respawn at ball spawn location. * sj_goalsafety (default: 650) - Distance around Mascot, that does damage to enemy. * sj_random (default: 1) - Turns Team Randomizing ON/OFF. * * Requires: AMXX 1.75+ * * Author: OneEyed * IRC: #soccerjam (irc.gamesurge.net) * Website: http://www.soccer-jam.com/ */ /* ------------------------------------------------------------------------- */ /* /----------------------- START OF CUSTOMIZATION -----------------------/ */ /* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */ /* /------------ CUSTOM DEFINES ------------ CUSTOM DEFINES ------------/ */ /* ------------------------------------------------------------------------- */ // Disable knife disarm ? (Leaves only ball disarm) // Comment this define to disable. #define KNIFE_DISARM_ON //When player reaches MAX level, they receive this many levels. #define MAX_LVL_BONUS 1 //Max levels for each upgrade #define MAX_LVL_STAMINA 7 #define MAX_LVL_STRENGTH 12 #define MAX_LVL_AGILITY 10 #define MAX_LVL_DEXTERITY 10 #define MAX_LVL_DISARM 10 #define MAX_LVL_POWERPLAY 10 //Prices for each upgrade. //price = ((UpgradeLevel * UpgradePrice) / 2) + UpgradePrice #define EXP_PRICE_STAMINA 250 #define EXP_PRICE_STRENGTH 150 #define EXP_PRICE_AGILITY 350 #define EXP_PRICE_DEXTERITY 150 #define EXP_PRICE_DISARM 150 //Experience per stat. #define EXP_GOALY 400 //for goaly save and goaly points. #define EXP_STEAL 500 #define EXP_KILL 300 #define EXP_ASSIST 500 #define EXP_GOAL 600 #define BASE_HP 100 //starting hp #define BASE_SPEED 250.0 //starting run speed #define BASE_DISARM 10 //starting disarm from lvl 1 #define COUNTDOWN_TIME 10 //Countdown time between rounds. #define GOALY_DELAY 8.0 //Delay for goaly exp //Curve Ball Defines #define CURVE_ANGLE 5 //Angle for spin kick multipled by current direction. #define CURVE_COUNT 6 //Curve this many times. #define CURVE_TIME 0.07 //Time to curve again. #define DIRECTIONS 5 //# of angles allowed. #define ANGLEDIVIDE 6 //Divide angle this many times for curve. //Misc. amounts #define AMOUNT_LATEJOINEXP 325 //latejoinexp * each scored point. #define AMOUNT_POWERPLAY 8 //added bonus to STR and AGI per powerplay lvl. #define AMOUNT_GOALY 10 //Goaly camper exp //Amount of points for each upgrade. #define AMOUNT_STA 20 //Health per lvl #define AMOUNT_STR 23 //Stronger kicking per lvl #define AMOUNT_AGI 13 //Faster Speed per lvl #define AMOUNT_DEX 10 //Better Catching #define AMOUNT_DISARM 3 //Disarm ball chance (disarm lvl * this) if random num 1-100 < disarm #define DISARM_MULTIPLIER 3 /* ------------------------------------------------------------------------- */ /* /---------------- TEAM NAMES ------------ TEAM NAMES ------------/ */ /* ------------------------------------------------------------------------- */ #define TEAMS 4 //Don't edit this. //Names to be put on scoreboard. static const TeamNames[TEAMS][] = { "BRAK", "Manchester United", //Manchester United "Chelsea Londyn", //Chelsea Londyn "BRAK" } /* ------------------------------------------------------------------------- */ /* /---------------- MODELS ---------------- MODELS ----------------/ */ /* ------------------------------------------------------------------------- */ //You may change the ball model. Just give correct path of new model. new ball[] = "models/kickball/csk_ball.mdl" static const TeamMascots[2][] = { "models/kingpin.mdl", //TERRORIST MASCOT "models/garg.mdl" //CT MASCOT } /* ------------------------------------------------------------------------- */ /* /---------------- COLORS ---------------- COLORS ----------------/ */ /* ------------------------------------------------------------------------- */ //Format is RGB 0-255 //TEAM MODEL GLOW COLORS #define TERR_GLOW_RED 250 #define TERR_GLOW_GREEN 10 #define TERR_GLOW_BLUE 10 #define CT_GLOW_RED 10 #define CT_GLOW_GREEN 10 #define CT_GLOW_BLUE 250 //TEAM HUD METER COLOR (Turbo/Curve Angle meters) #define TERR_METER_RED 250 #define TERR_METER_GREEN 10 #define TERR_METER_BLUE 10 #define CT_METER_RED 10 #define CT_METER_GREEN 10 #define CT_METER_BLUE 250 //BALL GLOW COLOR (default: yellow) //it glows only one color #define BALL_RED 255 #define BALL_GREEN 200 #define BALL_BLUE 100 //BALL BEAM #define BALL_BEAM_WIDTH 5 #define BALL_BEAM_LIFE 10 #define BALL_BEAM_RED 50 #define BALL_BEAM_GREEN 50 #define BALL_BEAM_BLUE 150 #define BALL_BEAM_ALPHA 255 /* ------------------------------------------------------------------------- */ /* /---------------- SOUNDS ---------------- SOUNDS ----------------/ */ /* ------------------------------------------------------------------------- */ //-- NOTE: Sounds must be located in sound/kickball/ folder. new BALL_BOUNCE_GROUND[] = "kickball/bounce.wav" new BALL_RESPAWN[] = "kickball/returned.wav" new BALL_KICKED[] = "kickball/kicked.wav" new BALL_PICKED_UP[] = "kickball/gotball.wav" new UPGRADED_MAX_LEVEL[] = "kickball/levelup.wav" new ROUND_START[] = "kickball/prepare.wav" new SCORED_GOAL[] = "kickball/distress.wav" new STOLE_BALL_FAST[] = "kickball/pussy.wav" //When a goal is scored, one of these will randomly play. #define MAX_SOUNDS 6 new SCORED_SOUNDS[MAX_SOUNDS][] = { "kickball/amaze.wav", "kickball/laugh.wav", "kickball/perfect.wav", "kickball/diebitch.wav", "kickball/bday.wav", "kickball/boomchakalaka.wav" } /* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */ /* /------------------------ END OF CUSTOMIZATION ------------------------/ */ /* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */ /* ------------ DO NOT EDIT BELOW ---------------------------------------------------------- */ /* -------------------------- DO NOT EDIT BELOW -------------------------------------------- */ /* --------------------------------------- DO NOT EDIT BELOW ------------------------------- */ /* ---------------------------------------------------- DO NOT EDIT BELOW ------------------ */ #include <amxmodx> #include <cstrike> #include <engine> #include <fakemeta> #include <fun> static const AUTHOR[] = "OneEyed" static const VERSION[] = "2.07a1" #define MAX_TEXT_BUFFER 2047 #define MAX_NAME_LENGTH 33 #define MAX_PLAYER 33 #define MAX_ASSISTERS 3 #define MAX_BALL_SPAWNS 5 #define POS_X -1.0 #define POS_Y 0.85 #define HUD_CHANNEL 4 #define MESSAGE_DELAY 4.0 enum { UNASSIGNED = 0, T, CT, SPECTATOR } #define RECORDS 6 enum { GOAL = 1, ASSIST, STEAL, KILL, DISTANCE, GOALY } #define UPGRADES 5 enum { STA = 1, //stamina STR, //strength AGI, //agility DEX, //dexterity DISARM, } static const UpgradeTitles[UPGRADES+1][] = { "BRAK", "Zycie", "Sila Kopniecia", "Szybkosc", "Lapanie Pilki", "Rozbrajanie" } new const UpgradeMax[UPGRADES+1] = { 0, //NULL MAX_LVL_STAMINA, //STAMINA MAX_LVL_STRENGTH, //STRENGTH MAX_LVL_AGILITY, //AGILITY MAX_LVL_DEXTERITY, //DEXTERITY MAX_LVL_DISARM, //DISARM } new const UpgradePrice[UPGRADES+1] = { 0, //NULL EXP_PRICE_STAMINA, EXP_PRICE_STRENGTH, EXP_PRICE_AGILITY, EXP_PRICE_DEXTERITY, EXP_PRICE_DISARM, } new TeamColors[TEAMS][3] = { { 0, 0, 0 }, { TERR_GLOW_RED, TERR_GLOW_GREEN, TERR_GLOW_BLUE } , { CT_GLOW_RED, CT_GLOW_GREEN, CT_GLOW_BLUE }, { 0, 0, 0 } } new TeamMeterColors[TEAMS][3] = { { 0, 0, 0 }, { TERR_METER_RED, TERR_METER_GREEN, TERR_METER_BLUE } , { CT_METER_RED, CT_METER_GREEN, CT_METER_BLUE }, { 0, 0, 0 } } new ballcolor[3] = { BALL_RED, BALL_GREEN, BALL_BLUE } new PlayerUpgrades[MAX_PLAYER][UPGRADES+1] new GoalEnt[TEAMS] new PressedAction[MAX_PLAYER] new seconds[MAX_PLAYER] new g_sprint[MAX_PLAYER] new SideJump[MAX_PLAYER] new Float:SideJumpDelay[MAX_PLAYER] new PlayerDeaths[MAX_PLAYER] new PlayerKills[MAX_PLAYER] new curvecount new direction new maxplayers new Float:BallSpinDirection[3] new ballspawncount new Float:TeamBallOrigins[TEAMS][3] new Float:TEMP_TeamBallOrigins[3] new Mascots[TEAMS] new Float:MascotsOrigins[3] new Float:MascotsAngles[3] new menu_upgrade[MAX_PLAYER] new Float:fire_delay new winner new Float:GoalyCheckDelay[MAX_PLAYER] new GoalyCheck[MAX_PLAYER] new GoalyPoints[MAX_PLAYER] new Float:BallSpawnOrigin[MAX_BALL_SPAWNS][3] new TopPlayer[2][RECORDS+1] new MadeRecord[MAX_PLAYER][RECORDS+1] new TopPlayerName[RECORDS+1][MAX_NAME_LENGTH] new g_Experience[MAX_PLAYER] new timer new Float:testorigin[3] new Float:velocity[3] new score[TEAMS] new scoreboard[1025] new temp1[64], temp2[64] new distorig[2][3] //distance recorder new gmsgShake new gmsgDeathMsg new gmsgSayText new gmsgTextMsg new goaldied[MAX_PLAYER] new bool:is_dead[MAX_PLAYER] new terr[33], ct[33], cntCT, cntT new PowerPlay, powerplay_list[MAX_LVL_POWERPLAY+1] new assist[16] new iassist[TEAMS] new gamePlayerEquip new CVAR_SCORE new CVAR_RESET new CVAR_GOALSAFETY new CVAR_KICK new Float:CVAR_RESPAWN new CVAR_RANDOM new CVAR_KILLNEARBALL new CVAR_KILLNEARHOLDER new fire new smoke new beamspr new g_fxBeamSprite new Burn_Sprite new ballholder new ballowner new aball new is_kickball new g_TimeLimit; new bool:has_knife[MAX_PLAYER] new pop=1 new OFFSET_INTERNALMODEL; /*==================================================================================================== [Precache] Purpose: $$ Comment: $$ ====================================================================================================*/ PrecacheSounds() { new x for(x=0;x<MAX_SOUNDS;x++) engfunc( EngFunc_PrecacheSound, SCORED_SOUNDS[x]) engfunc( EngFunc_PrecacheSound, STOLE_BALL_FAST) engfunc( EngFunc_PrecacheSound, ROUND_START) engfunc( EngFunc_PrecacheSound, BALL_BOUNCE_GROUND) engfunc( EngFunc_PrecacheSound, BALL_PICKED_UP) engfunc( EngFunc_PrecacheSound, BALL_RESPAWN) engfunc( EngFunc_PrecacheSound, SCORED_GOAL) engfunc( EngFunc_PrecacheSound, BALL_KICKED) engfunc( EngFunc_PrecacheSound, UPGRADED_MAX_LEVEL) } PrecacheBall() { engfunc( EngFunc_PrecacheModel, ball) } PrecacheMonsters(team) { engfunc( EngFunc_PrecacheModel, TeamMascots[team-1]) } PrecacheSprites() { beamspr = engfunc( EngFunc_PrecacheModel,"sprites/laserbeam.spr") fire = engfunc( EngFunc_PrecacheModel,"sprites/shockwave.spr") smoke = engfunc( EngFunc_PrecacheModel,"sprites/steam1.spr") Burn_Sprite = engfunc( EngFunc_PrecacheModel,"sprites/xfireball3.spr") g_fxBeamSprite = engfunc( EngFunc_PrecacheModel,"sprites/lgtning.spr") } PrecacheOther() { engfunc( EngFunc_PrecacheModel, "models/chick.mdl") } /*==================================================================================================== [Initialize] Purpose: $$ Comment: $$ ====================================================================================================*/ public plugin_init() { new mapname[64] get_mapname(mapname,63) register_cvar("soccer_jam_online", "0", FCVAR_SERVER) register_cvar("soccer_jam_version", VERSION, FCVAR_SERVER) set_cvar_string("soccer_jam_version", VERSION) register_dictionary("soccerjam.txt") register_dictionary("soccerjam_help.txt") if(is_kickball > 0) { PrecacheSprites() register_plugin("Soccer Jam(ON)", VERSION, AUTHOR) set_cvar_num("soccer_jam_online", 1) timer = COUNTDOWN_TIME gmsgTextMsg = get_user_msgid("TextMsg") gmsgDeathMsg = get_user_msgid("DeathMsg") gmsgShake = get_user_msgid("ScreenShake") gmsgSayText = get_user_msgid("SayText") maxplayers = get_maxplayers() if(equali(mapname,"soccerjam")) { PrecacheOther() CreateGoalNets() create_wall() } register_clcmd("say","handle_say") register_event("ResetHUD", "Event_ResetHud", "be") register_event("HLTV","Event_StartRound","a","1=0","2=0") register_event("Damage", "Event_Damage", "b", "2!0", "3=0", "4!0" ) CVAR_SCORE = register_cvar("sj_score","15") CVAR_RESET = register_cvar("sj_reset","30.0") CVAR_GOALSAFETY = register_cvar("sj_goalsafety","725") CVAR_KICK = register_cvar("sj_kick","680") CVAR_RESPAWN = 2.0 //register_cvar("kickball_respawn","2.0") CVAR_RANDOM = register_cvar("sj_random","1") CVAR_KILLNEARBALL = register_cvar("sj_kill_distance_ball", "200.0") CVAR_KILLNEARHOLDER = register_cvar("sj_kill_distance_holder", "96.0") register_cvar( "sj_timelimit", "0" ); register_cvar("SCORE_CT","0") register_cvar("SCORE_T","0") register_menucmd(register_menuid("Team_Select",1), (1<<0)|(1<<1)|(1<<4)|(1<<5), "team_select") register_touch("PwnBall", "player", "touchPlayer") register_touch("PwnBall", "soccerjam_goalnet", "touchNet") register_touch("PwnBall", "worldspawn", "touchWorld") register_touch("PwnBall", "func_wall", "touchWorld") register_touch("PwnBall", "func_door", "touchWorld") register_touch("PwnBall", "func_door_rotating", "touchWorld") register_touch("PwnBall", "func_wall_toggle", "touchWorld") register_touch("PwnBall", "func_breakable", "touchWorld") register_touch("PwnBall", "Blocker", "touchBlocker") register_touch("player", "player","touchtouch") set_task(0.4,"meter",0,_,_,"b") set_task(0.5,"statusDisplay",7654321,"",0,"b") register_think("PwnBall","ball_think") register_think("Mascot", "mascot_think") register_clcmd("radio1", "LeftDirection", 0) register_clcmd("radio2", "RightDirection", 0) register_clcmd("drop","Turbo") register_clcmd("lastinv","BuyUpgrade") register_clcmd("fullupdate","fullupdate") register_message(gmsgTextMsg, "editTextMsg") register_event("ShowMenu", "menuclass", "b", "4&CT_Select", "4&Terrorist_Select"); register_event("VGUIMenu", "menuclass", "b", "1=26", "1=27"); OFFSET_INTERNALMODEL = is_amd64_server() ? 152 : 126; } else { register_plugin("Soccer Jam(OFF)", VERSION, AUTHOR) set_cvar_num("soccer_jam_online",0) } return PLUGIN_HANDLED } //public plugin_end() { //server_cmd("mp_timelimit %i", g_TimeLimit) //} /*==================================================================================================== [Initialize Entities] Purpose: Handles our custom entities, created with Valve Hammer, and fixes for soccerjam.bsp. Comment: $$ ====================================================================================================*/ public pfn_keyvalue(entid) { new classname[32], key[32], value[32] copy_keyvalue(classname, 31, key, 31, value, 31) new temp_origins[3][10], x, team new temp_angles[3][10] if(equal(key, "classname") && equal(value, "soccerjam_goalnet")) DispatchKeyValue("classname", "func_wall") if(equal(classname, "game_player_equip")){ if(!is_kickball || !gamePlayerEquip) gamePlayerEquip = entid else { remove_entity(entid) } } else if(equal(classname, "func_wall")) { if(equal(key, "team")) { team = str_to_num(value) if(team == 1 || team == 2) { GoalEnt[team] = entid set_task(1.0, "FinalizeGoalNet", team) } } } else if(equal(classname, "soccerjam_mascot")) { if(equal(key, "team")) { team = str_to_num(value) create_mascot(team) } else if(equal(key, "origin")) { parse(value, temp_origins[0], 9, temp_origins[1], 9, temp_origins[2], 9) for(x=0; x<3; x++) MascotsOrigins[x] = floatstr(temp_origins[x]) } else if(equal(key, "angles")) { parse(value, temp_angles[0], 9, temp_angles[1], 9, temp_angles[2], 9) for(x=0; x<3; x++) MascotsAngles[x] = floatstr(temp_angles[x]) } } else if(equal(classname, "soccerjam_teamball")) { if(equal(key, "team")) { team = str_to_num(value) for(x=0; x<3; x++) TeamBallOrigins[team][x] = TEMP_TeamBallOrigins[x] } else if(equal(key, "origin")) { parse(value, temp_origins[0], 9, temp_origins[1], 9, temp_origins[2], 9) for(x=0; x<3; x++) TEMP_TeamBallOrigins[x] = floatstr(temp_origins[x]) } } else if(equal(classname, "soccerjam_ballspawn")) { if(equal(key, "origin")) { is_kickball = 1 create_Game_Player_Equip() PrecacheBall() PrecacheSounds() if(ballspawncount < MAX_BALL_SPAWNS) { parse(value, temp_origins[0], 9, temp_origins[1], 9, temp_origins[2], 9) BallSpawnOrigin[ballspawncount][0] = floatstr(temp_origins[0]) BallSpawnOrigin[ballspawncount][1] = floatstr(temp_origins[1]) BallSpawnOrigin[ballspawncount][2] = floatstr(temp_origins[2]) + 10.0 ballspawncount++ } } } } createball() { new entity = create_entity("info_target") if (entity) { entity_set_string(entity,EV_SZ_classname,"PwnBall") entity_set_model(entity, ball) entity_set_int(entity, EV_INT_solid, SOLID_BBOX) entity_set_int(entity, EV_INT_movetype, MOVETYPE_BOUNCE) new Float:MinBox[3] new Float:MaxBox[3] MinBox[0] = -15.0 MinBox[1] = -15.0 MinBox[2] = 0.0 MaxBox[0] = 15.0 MaxBox[1] = 15.0 MaxBox[2] = 12.0 entity_set_vector(entity, EV_VEC_mins, MinBox) entity_set_vector(entity, EV_VEC_maxs, MaxBox) glow(entity,ballcolor[0],ballcolor[1],ballcolor[2],10) entity_set_float(entity,EV_FL_framerate,0.0) entity_set_int(entity,EV_INT_sequence,0) } //save our entity ID to aball variable aball = entity entity_set_float(entity,EV_FL_nextthink,halflife_time() + 0.05) return PLUGIN_HANDLED } CreateGoalNets() { new endzone, x new Float:orig[3] new Float:MinBox[3], Float:MaxBox[3] for(x=1;x<3;x++) { endzone = create_entity("info_target") if (endzone) { entity_set_string(endzone,EV_SZ_classname,"soccerjam_goalnet") entity_set_model(endzone, "models/chick.mdl") entity_set_int(endzone, EV_INT_solid, SOLID_BBOX) entity_set_int(endzone, EV_INT_movetype, MOVETYPE_NONE) MinBox[0] = -25.0; MinBox[1] = -145.0; MinBox[2] = -36.0 MaxBox[0] = 25.0; MaxBox[1] = 145.0; MaxBox[2] = 70.0 entity_set_vector(endzone, EV_VEC_mins, MinBox) entity_set_vector(endzone, EV_VEC_maxs, MaxBox) switch(x) { case 1: { orig[0] = 2110.0 orig[1] = 0.0 orig[2] = 1604.0 } case 2: { orig[0] = -2550.0 orig[1] = 0.0 orig[2] = 1604.0 } } entity_set_origin(endzone,orig) entity_set_int(endzone, EV_INT_team, x) set_entity_visibility(endzone, 0) GoalEnt[x] = endzone } } } create_wall() { new wall = create_entity("func_wall") if(wall) { new Float:orig[3] new Float:MinBox[3], Float:MaxBox[3] entity_set_string(wall,EV_SZ_classname,"Blocker") entity_set_model(wall, "models/chick.mdl") entity_set_int(wall, EV_INT_solid, SOLID_BBOX) entity_set_int(wall, EV_INT_movetype, MOVETYPE_NONE) MinBox[0] = -72.0; MinBox[1] = -100.0; MinBox[2] = -72.0 MaxBox[0] = 72.0; MaxBox[1] = 100.0; MaxBox[2] = 72.0 entity_set_vector(wall, EV_VEC_mins, MinBox) entity_set_vector(wall, EV_VEC_maxs, MaxBox) orig[0] = 2355.0 orig[1] = 1696.0 orig[2] = 1604.0 entity_set_origin(wall,orig) set_entity_visibility(wall, 0) } } create_mascot(team) { new Float:MinBox[3], Float:MaxBox[3] new mascot = create_entity("info_target") if(mascot) { PrecacheMonsters(team) entity_set_string(mascot,EV_SZ_classname,"Mascot") entity_set_model(mascot, TeamMascots[team-1]) Mascots[team] = mascot entity_set_int(mascot, EV_INT_solid, SOLID_NOT) entity_set_int(mascot, EV_INT_movetype, MOVETYPE_NONE) entity_set_int(mascot, EV_INT_team, team) MinBox[0] = -16.0; MinBox[1] = -16.0; MinBox[2] = -72.0 MaxBox[0] = 16.0; MaxBox[1] = 16.0; MaxBox[2] = 72.0 entity_set_vector(mascot, EV_VEC_mins, MinBox) entity_set_vector(mascot, EV_VEC_maxs, MaxBox) //orig[2] += 200.0 entity_set_origin(mascot,MascotsOrigins) entity_set_float(mascot,EV_FL_animtime,2.0) entity_set_float(mascot,EV_FL_framerate,1.0) entity_set_int(mascot,EV_INT_sequence,0) if(team == 2) entity_set_byte(mascot, EV_BYTE_controller1, 115) entity_set_vector(mascot,EV_VEC_angles,MascotsAngles) entity_set_float(mascot,EV_FL_nextthink,halflife_time() + 1.0) } } create_Game_Player_Equip() { gamePlayerEquip = create_entity("game_player_equip") if(gamePlayerEquip) { //DispatchKeyValue(gamePlayerEquip, "weapon_knife", "1") //DispatchKeyValue(entity, "weapon_scout", "1") DispatchKeyValue(gamePlayerEquip, "targetname", "roundstart") DispatchSpawn(gamePlayerEquip) } } public FinalizeGoalNet(team) { new goalnet = GoalEnt[team] entity_set_string(goalnet,EV_SZ_classname,"soccerjam_goalnet") entity_set_int(goalnet, EV_INT_team, team) set_entity_visibility(goalnet, 0) } public RightDirection(id) { if(id == ballholder) { direction-- if(direction < -(DIRECTIONS)) direction = -(DIRECTIONS) new temp = direction * CURVE_ANGLE SendCenterText( id, temp ); } else client_print(id, print_chat, "%L", id, "CANT_CURVE_RIGHT"); return PLUGIN_HANDLED } public LeftDirection(id) { if(id == ballholder) { direction++ if(direction > DIRECTIONS) direction = DIRECTIONS new temp = direction * CURVE_ANGLE SendCenterText( id, temp ); } else { client_print(id, print_chat, "%L", id, "CANT_CURVE_LEFT"); } return PLUGIN_HANDLED } SendCenterText( id, dir ) { if(dir < 0) client_print(id, print_center, "%L", id, "CURVING_RIGHT", (dir<0?-(dir):dir)); else if(dir == 0) client_print(id, print_center, "0 degrees"); else if(dir > 0) client_print(id, print_center, "%L", id, "CURVING_LEFT", (dir<0?-(dir):dir)); } public plugin_cfg() { if(is_kickball) { server_cmd("sv_maxspeed 999") server_cmd("sv_airaccelerate 10") //Fallback to make sure our mp_timelimit is correct. new mpTimelimit = get_cvar_num("mp_timelimit"); new sjTimelimit = get_cvar_num("sj_timelimit"); if( mpTimelimit > 3 ) set_cvar_num("sj_timelimit", mpTimelimit); else { if(mpTimelimit && sjTimelimit > 3 ) set_cvar_num("mp_timelimit", sjTimelimit); } } else { //server_cmd("exec server.cfg") new failed[64]; format(failed,63,"%L", LANG_SERVER, "PLUGIN_FAILED"); set_fail_state(failed); } } /*==================================================================================================== [Ball Brain] Purpose: These functions help control the ball and its activities. Comment: $$ ====================================================================================================*/ public ball_think() { new maxscore = get_pcvar_num(CVAR_SCORE) if(score[1] >= maxscore || score[2] >= maxscore) { entity_set_float(aball,EV_FL_nextthink,halflife_time() + 0.05) return PLUGIN_HANDLED } if(is_valid_ent(aball)) { new Float:gametime = get_gametime() if(PowerPlay >= pop && gametime - fire_delay >= 0.3) on_fire() if(ballholder > 0) { new team = get_user_team(ballholder) entity_get_vector(ballholder, EV_VEC_origin,testorigin) if(!is_user_alive(ballholder)) { new tname[32] get_user_name(ballholder,tname,31) remove_task(55555) set_task(get_pcvar_float(CVAR_RESET),"clearBall",55555) if(!g_sprint[ballholder]) set_speedchange(ballholder) format(temp1,63,"%L", LANG_PLAYER, "DROPPED_BALL", TeamNames[team], tname) //remove glow of owner and set ball velocity really really low glow(ballholder,0,0,0,0) ballowner = ballholder ballholder = 0 testorigin[2] += 5 entity_set_origin(aball, testorigin) new Float:vel[3], x for(x=0;x<3;x++) vel[x] = 1.0 entity_set_vector(aball,EV_VEC_velocity,vel) entity_set_float(aball,EV_FL_nextthink,halflife_time() + 0.05) return PLUGIN_HANDLED } if(entity_get_int(aball,EV_INT_solid) != SOLID_NOT) entity_set_int(aball, EV_INT_solid, SOLID_NOT) //Put ball in front of player ball_infront(ballholder, 55.0) new i for(i=0;i<3;i++) velocity[i] = 0.0 //Add lift to z axis new flags = entity_get_int(ballholder, EV_INT_flags) if(flags & FL_DUCKING) testorigin[2] -= 10 else testorigin[2] -= 30 entity_set_vector(aball,EV_VEC_velocity,velocity) entity_set_origin(aball,testorigin) } else { if(entity_get_int(aball,EV_INT_solid) != SOLID_BBOX) entity_set_int(aball, EV_INT_solid, SOLID_BBOX) } } entity_set_float(aball,EV_FL_nextthink,halflife_time() + 0.05) return PLUGIN_HANDLED } moveBall(where, team=0) { if(is_valid_ent(aball)) { if(team) { new Float:bv[3] bv[2] = 50.0 entity_set_origin(aball, TeamBallOrigins[team]) entity_set_vector(aball,EV_VEC_velocity,bv) } else { switch(where) { case 0: { //outside map new Float:orig[3], x for(x=0;x<3;x++) orig[x] = -9999.9 entity_set_origin(aball,orig) ballholder = -1 } case 1: { //at middle new Float:v[3], rand v[2] = 400.0 if(ballspawncount > 1) rand = random_num(0, ballspawncount-1) else rand = 0 entity_set_origin(aball, BallSpawnOrigin[rand]) entity_set_vector(aball, EV_VEC_velocity, v) PowerPlay = 0 ballholder = 0 ballowner = 0 } } } } } public ball_infront(id, Float:dist) { new Float:nOrigin[3] new Float:vAngles[3] // plug in the view angles of the entity new Float:vReturn[3] // to get out an origin fDistance away entity_get_vector(aball,EV_VEC_origin,testorigin) entity_get_vector(id,EV_VEC_origin,nOrigin) entity_get_vector(id,EV_VEC_v_angle,vAngles) vReturn[0] = floatcos( vAngles[1], degrees ) * dist vReturn[1] = floatsin( vAngles[1], degrees ) * dist vReturn[0] += nOrigin[0] vReturn[1] += nOrigin[1] testorigin[0] = vReturn[0] testorigin[1] = vReturn[1] testorigin[2] = nOrigin[2] /* //Sets the angle to face the same as the player. new Float:ang[3] entity_get_vector(id,EV_VEC_angles,ang) ang[0] = 0.0 ang[1] -= 90.0 ang[2] = 0.0 entity_set_vector(aball,EV_VEC_angles,ang) */ } public CurveBall(id) { if(direction && get_speed(aball) > 5 && curvecount > 0) { new Float:dAmt = float((direction * CURVE_ANGLE) / ANGLEDIVIDE); new Float:v[3], Float:v_forward[3]; entity_get_vector(aball, EV_VEC_velocity, v); vector_to_angle(v, BallSpinDirection); BallSpinDirection[1] = normalize( BallSpinDirection[1] + dAmt ); BallSpinDirection[2] = 0.0; angle_vector(BallSpinDirection, 1, v_forward); new Float:speed = vector_length(v)// * 0.95; v[0] = v_forward[0] * speed v[1] = v_forward[1] * speed entity_set_vector(aball, EV_VEC_velocity, v); curvecount--; set_task(CURVE_TIME, "CurveBall", id); } } public clearBall() { play_wav(0, BALL_RESPAWN); format(temp1,63,"%L",LANG_PLAYER,"BALL_RESPAWNED") moveBall(1) } /*==================================================================================================== [Mascot Think] Purpose: $$ Comment: $$ ====================================================================================================*/ public mascot_think(mascot) { new team = entity_get_int(mascot, EV_INT_team) new indist[32], inNum, chosen new id, playerteam, dist for(id=1 ; id<=maxplayers ; id++) { if(is_user_alive(id)) { playerteam = get_user_team(id) if(playerteam != team) { if(!chosen) { dist = get_entity_distance(id, mascot) if(dist < get_pcvar_num(CVAR_GOALSAFETY)) if(id == ballholder) { chosen = id break } else indist[inNum++] = id } } } } if(!chosen) { new rnd = random_num(0, (inNum-1)) chosen = indist[rnd] } if(chosen) TerminatePlayer(chosen, mascot, team, ( ballholder == chosen ? 230.0 : random_float(10.0, 20.0) ) ) entity_set_float(mascot,EV_FL_nextthink,halflife_time() + 0.50) } goaly_checker(id, Float:gametime, team) { if(!is_user_alive(id) || (gametime - GoalyCheckDelay[id] < GOALY_DELAY) ) return PLUGIN_HANDLED new dist, gcheck new Float:pOrig[3] entity_get_vector(id, EV_VEC_origin, pOrig) dist = floatround(get_distance_f(pOrig, TeamBallOrigins[team])) //--/* Goaly Exp System */--// if(dist < 600 ) { gcheck = GoalyCheck[id] if(id == ballholder && gcheck >= 2) kickBall(id, 1) GoalyPoints[id]++ if(gcheck < 2) g_Experience[id] += gcheck * AMOUNT_GOALY else g_Experience[id] += gcheck * (AMOUNT_GOALY / 2) if(gcheck < 5) GoalyCheck[id]++ GoalyCheckDelay[id] = gametime } else GoalyCheck[id] = 0 return PLUGIN_HANDLED } /*==================================================================================================== [Status Display] Purpose: Displays the Scoreboard information. Comment: $$ ====================================================================================================*/ public statusDisplay() { new id, team, bteam = get_user_team(ballholder>0?ballholder:ballowner) new score_t = score[T], score_ct = score[CT] set_hudmessage(20, 255, 20, 0.95, 0.20, 0, 1.0, 1.5, 0.1, 0.1, HUD_CHANNEL) new Float:gametime = get_gametime() for(id=1; id<=maxplayers; id++) { if(is_user_connected(id)) { team = get_user_team(id) goaly_checker(id, gametime, team) if(!is_user_alive(id) && !is_dead[id] && (team == 1 || team == 2) && GetPlayerModel(id) != 0xFF) { //new Float:ballorig[3], x //entity_get_vector(id,EV_VEC_origin,ballorig) //for(x=0;x<3;x++) // distorig[0][x] = floatround(ballorig[x]) remove_task(id+1000) has_knife[id] = false; is_dead[id] = true new Float:respawntime = CVAR_RESPAWN set_task(respawntime,"AutoRespawn",id) set_task((respawntime+0.2), "AutoRespawn2",id) } if(!winner) { format(scoreboard,1024," %i %L^n%s - %i | %s - %i ^n%L %i ^n^n%s^n^n^n%s",get_pcvar_num(CVAR_SCORE),id,"GOALS_WINS",TeamNames[T],score_t,TeamNames[CT],score_ct,id,"EXPERIENCE",g_Experience[id],temp1,team==bteam?temp2:"") show_hudmessage(id,"%s",scoreboard) } } } } /*==================================================================================================== [Touched] Purpose: All touching stuff takes place here. Comment: $$ ====================================================================================================*/ public touchWorld(ball, world) { if(get_speed(ball) > 10) { new Float:v[3] entity_get_vector(ball, EV_VEC_velocity, v) v[0] = (v[0] * 0.85) v[1] = (v[1] * 0.85) v[2] = (v[2] * 0.85) entity_set_vector(ball, EV_VEC_velocity, v) emit_sound(ball, CHAN_ITEM, BALL_BOUNCE_GROUND, 1.0, ATTN_NORM, 0, PITCH_NORM) } return PLUGIN_HANDLED } public touchPlayer(ball, player) { new playerteam = get_user_team(player) if((playerteam != 1 && playerteam != 2)) return PLUGIN_HANDLED remove_task(55555) new aname[64], stolen, x get_user_name(player,aname,63) new ballteam = get_user_team(ballowner) if(ballowner > 0 && playerteam != ballteam ) { new speed = get_speed(aball) if(speed > 500) { //configure catching algorithm new rnd = random_num(0,100) new bstr = (PlayerUpgrades[ballowner][STR] * AMOUNT_STR) / 10 new dex = (PlayerUpgrades[player][DEX] * AMOUNT_DEX) new pct = ( PressedAction[player] ? 40:20 ) + dex pct += ( g_sprint[player] ? 5 : 0 ) //player turboing? give 5% pct -= ( g_sprint[ballowner] ? 5 : 0 ) //ballowner turboing? lose 5% pct -= bstr //ballowner has strength? remove bstr //will player avoid damage? if( rnd > pct ) { new Float:dodmg = (float(speed) / 13.0) + bstr client_print(0,print_chat,"%L",LANG_PLAYER,"BALL_SMACKED",aname,floatround(dodmg)) fakedamage(player,"AssWhoopin",dodmg,1) //set_msg_block(gmsgDeathMsg,BLOCK_ONCE) //new health=get_user_health(player) //set_user_health ( player, health -floatround(dodmg)) //set_msg_block(gmsgDeathMsg,BLOCK_NOT) if(!is_user_alive(player)) { message_begin(MSG_ALL, gmsgDeathMsg) write_byte(ballowner) write_byte(player) write_string("AssWhoopin") message_end() new frags = get_user_frags(ballowner) entity_set_float(ballowner, EV_FL_frags, float(frags + 1)) setScoreInfo(ballowner) //set_user_frags(ballowner, get_user_frags(ballowner)+1) Event_Record(ballowner, KILL, -1, EXP_KILL) client_print(player,print_chat,"%L",player,"KILLED_BY_BALL") client_print(ballowner,print_chat,"%L",ballowner,"EXP_FOR_BALLKILL") } else { new Float:pushVel[3] pushVel[0] = velocity[0] pushVel[1] = velocity[1] pushVel[2] = velocity[2] + ((velocity[2] < 0)?random_float(-200.0,-50.0):random_float(50.0,200.0)) entity_set_vector(player,EV_VEC_velocity,pushVel) } for(x=0;x<3;x++) velocity[x] = (velocity[x] * random_float(0.1,0.9)) entity_set_vector(aball,EV_VEC_velocity,velocity) direction = 0 return PLUGIN_HANDLED } } if(speed > 950) play_wav(0, STOLE_BALL_FAST) new Float:pOrig[3] entity_get_vector(player, EV_VEC_origin, pOrig) new dist = floatround(get_distance_f(pOrig, TeamBallOrigins[playerteam])) new gainedxp if(dist < 550) { gainedxp = EXP_STEAL + EXP_GOALY + (speed / 8) Event_Record(player, STEAL, -1, EXP_STEAL + EXP_GOALY + (speed / 8)) GoalyPoints[player] += EXP_GOALY/2 } else { gainedxp = EXP_STEAL Event_Record(player, STEAL, -1, EXP_STEAL) } format(temp1,63,"%L",LANG_PLAYER,"STOLE_BALL",TeamNames[playerteam],aname) client_print(0,print_console,"%s",temp1) stolen = 1 message_begin(MSG_ONE, gmsgShake, {0,0,0}, player) write_short(255 << 12) //ammount write_short(1 << 11) //lasts this long write_short(255 << 10) //frequency message_end() client_print(player,print_chat,"%L",player,"EXP_FOR_STEAL",gainedxp) } if(ballholder == 0) { emit_sound(aball, CHAN_ITEM, BALL_PICKED_UP, 1.0, ATTN_NORM, 0, PITCH_NORM) new msg[64], check if(!has_knife[player]) give_knife(player) if(stolen) PowerPlay = 0 else format(temp1,63,"%L",LANG_PLAYER,"BALL_PICKUP",TeamNames[playerteam],aname) if(((PowerPlay > 1 && powerplay_list[PowerPlay-2] == player) || (PowerPlay > 0 && powerplay_list[PowerPlay-1] == player)) && PowerPlay != MAX_LVL_POWERPLAY) check = true if(PowerPlay <= MAX_LVL_POWERPLAY && !check) { g_Experience[player] += (PowerPlay==2?10:25) powerplay_list[PowerPlay] = player PowerPlay++ new Players[32] new playerCountT,playerCountCT get_players(Players, playerCountT, "ce","TERRORIST") get_players(Players, playerCountCT, "ce","CT") if((playerCountT>3)&&( playerCountCT>3))pop=3 else if((playerCountT>2)&&( playerCountCT>2)) pop=2 else pop=1 } curvecount = 0 direction = 0 GoalyCheck[player] = 0 format(temp2, 63, "%L %i",LANG_PLAYER,"POWER_PLAY", PowerPlay>0?PowerPlay-1:0) ballholder = player ballowner = 0 if(!g_sprint[player]) set_speedchange(player) set_hudmessage(255, 20, 20, POS_X, 0.4, 1, 1.0, 1.5, 0.1, 0.1, 2) format(msg,63,"%L",player,"YOU_HAVE_BALL") show_hudmessage(player,"%s",msg) //Glow Player who has ball their team color beam() glow(player, TeamColors[playerteam][0], TeamColors[playerteam][1], TeamColors[playerteam][2], 1) } return PLUGIN_HANDLED } public touchNet(ball, goalpost) { remove_task(55555) new team = get_user_team(ballowner) new goalent = GoalEnt[team] if (goalpost != goalent && ballowner > 0) { new Players[32] new playerCountT,playerCountCT get_players(Players, playerCountT, "ce","TERRORIST") get_players(Players, playerCountCT, "ce","CT") if((playerCountT>3)&&( playerCountCT>3))pop=3 else if((playerCountT>2)&&( playerCountCT>2)) pop=2 else pop=1 if(PowerPlay<pop){ user_slap(ballowner, 5) if(get_speed(ball) > 10){ new Float:v[3] entity_get_vector(ball, EV_VEC_velocity, v) v[0] = (v[0] * 0.85) v[1] = (v[1] * 0.85) v[2] = (v[2] * 0.85) entity_set_vector(ball, EV_VEC_velocity, v) emit_sound(ball, CHAN_ITEM, BALL_BOUNCE_GROUND, 1.0, ATTN_NORM, 0, PITCH_NORM) } new text[64] format(text,63,"^x04*** By strzelic bramke PowerPlay musi byc minimum %i ***",pop-1) message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, ballowner) write_byte(ballowner) write_string(text) message_end() client_print(0, print_chat,"By zwiekszyc poziom power play nalezy podawac do swojej druzyny") client_print(0, print_chat,"Gdy power play bedzie conajmniej %i - bedzie mozna strzelic gola",pop-1) user_slap(ballowner, 5) return PLUGIN_HANDLED } // Powerpaly ograniczenie koniec new aname[64] new Float:netOrig[3] new netOrig2[3] entity_get_vector(ball, EV_VEC_origin,netOrig) new l for(l=0;l<3;l++) netOrig2[l] = floatround(netOrig[l]) flameWave(netOrig2) get_user_name(ballowner,aname,63) new frags = get_user_frags(ballowner) entity_set_float(ballowner, EV_FL_frags, float(frags + 10)) play_wav(0, SCORED_GOAL) /////////////////////ASSIST CODE HERE/////////// new assisters[4] = { 0, 0, 0, 0 } new iassisters = 0 new ilastplayer = iassist[ team ] // We just need the last player to kick the ball // 0 means it has passed 15 at least once if ( ilastplayer == 0 ) ilastplayer = 15 else ilastplayer-- if ( assist[ ilastplayer ] != 0 ) { new i, x, bool:canadd, playerid for(i=0; i<16; i++) { // Stop if we've already found 4 assisters if ( iassisters == MAX_ASSISTERS ) break playerid = assist[ i ] // Skip if player is invalid if ( playerid == 0 ) continue // Skip if kicker is counted as an assister if ( playerid == assist[ ilastplayer ] ) continue canadd = true // Loop through each assister value for(x=0; x<3; x++) // make sure we can add them if ( playerid == assisters[ x ] ) { canadd = false break } // Skip if they've already been added if ( canadd == false ) continue // They didn't kick the ball last, and they haven't been added, add them assisters[ iassisters++ ] = playerid } // This gives each person an assist, xp, and prints that out to them new c, pass for(c=0; c<iassisters; c++) { pass = assisters[ c ] Event_Record(pass, ASSIST, -1, EXP_ASSIST) client_print( pass, print_chat, "%L",pass,"EXP_FOR_ASSIST",EXP_ASSIST) } } iassist[ 0 ] = 0 /////////////////////ASSIST CODE HERE/////////// for(l=0; l<3; l++) distorig[1][l] = floatround(netOrig[l]) new distshot = (get_distance(distorig[0],distorig[1])/12) new gainedxp = distshot + EXP_GOAL format(temp1,63,"%L",LANG_PLAYER,"SCORED_GOAL",TeamNames[team],aname,distshot) client_print(0,print_console,"%s",temp1) if(distshot > MadeRecord[ballowner][DISTANCE]) Event_Record(ballowner, DISTANCE, distshot, 0)// record distance, and make that distance exp Event_Record(ballowner, GOAL, -1, gainedxp) //zero xp for goal cause distance is what gives it. //Increase Score, and update cvar score score[team]++ switch(team) { case 1: set_cvar_num("score_ct",score[team]) case 2: set_cvar_num("score_t",score[team]) } client_print(ballowner,print_chat,"%L",ballowner,"EXP_FOR_GOAL",gainedxp,distshot) new oteam = (team == 1 ? 2 : 1) increaseTeamXP(team, 75) increaseTeamXP(oteam, 50) moveBall(0) new x for(x=1; x<=maxplayers; x++) { if(is_user_connected(x)) { Event_Record(x, GOALY, GoalyPoints[x], 0) new kills = get_user_frags(x) new deaths = cs_get_user_deaths(x) setScoreInfo(x) if( deaths > 0) PlayerDeaths[x] = deaths if( kills > 0) PlayerKills[x] = kills } } if(score[team] < get_pcvar_num(CVAR_SCORE)) { new r = random_num(0,MAX_SOUNDS-1) play_wav(0, SCORED_SOUNDS[r]); } else { winner = team format(scoreboard,1024,"%L",LANG_PLAYER,"TEAM_WINS",TeamNames[team]) set_task(1.0,"showhud_winner",0,"",0,"a",3) } server_cmd("sv_restart 4") } else if(goalpost == goalent) { moveBall(0, team) client_print(ballowner,print_chat,"%L",ballowner,"CANNOT_KICK_GOAL") } return PLUGIN_HANDLED } //This is for soccerjam.bsp to fix locker room. public touchBlocker(pwnball, blocker) { new Float:orig[3] = { 2234.0, 1614.0, 1604.0 } entity_set_origin(pwnball, orig) } /*==================================================================================================== [Events] Purpose: $$ Comment: $$ ====================================================================================================*/ //public Event_DeathMsg() { // new id = read_data(2) // strip_user_weapons(id); //} public Event_Damage() { new victim = read_data(0) new attacker = get_user_attacker(victim) if(is_user_alive(attacker)) { if(is_user_alive(victim) ) { #if !defined KNIFE_DISARM_ON if(victim == ballholder) { #endif new upgrade = PlayerUpgrades[attacker][DISARM] if(upgrade) { new disarm = upgrade * AMOUNT_DISARM new disarmpct = BASE_DISARM + (victim==ballholder?(disarm*2):0) new rand = random_num(1,100) if(disarmpct >= rand) { new vname[32], aname[32] get_user_name(victim,vname,31) get_user_name(attacker,aname,31) #if defined KNIFE_DISARM_ON if(victim == ballholder) { #endif kickBall(victim, 1) client_print(attacker,print_chat,"%L",attacker,"DISARM_BALL_ATTACKER",vname) client_print(victim,print_chat,"%L",victim,"DISARM_BALL_VICTIM",aname) #if defined KNIFE_DISARM_ON } else { new weapon, clip, ammo weapon = get_user_weapon(victim,clip,ammo) if(weapon == CSW_KNIFE) { strip_user_weapons(victim); has_knife[victim] = false; set_task(float(disarm / DISARM_MULTIPLIER), "give_knife", victim+1000) client_print(attacker,print_chat,"%L",attacker,"DISARM_KNIFE_ATTACKER",vname) client_print(victim,print_chat,"%L",victim,"DISARM_KNIFE_VICTIM",aname) } } #endif } } #if !defined KNIFE_DISARM_ON } #endif } else g_Experience[attacker] += (EXP_KILL/2) } } public Event_StartRound() { g_TimeLimit = get_cvar_num("mp_timelimit"); if(winner) { set_task(1.0,"displayWinnerAwards",0) //MP_TIMELIMIT replication new Float:gtime = float(g_TimeLimit) - (get_gametime() / 60.0); if( g_TimeLimit && gtime <= 0.0 ) { //Fix for Map Vote plugins (2 min marker). new bool:check; if(cvar_exists("amx_extendmap_max")) check = true; server_cmd("mp_timelimit %i", (check ? 2 : 1)); set_task(10.0, "CheckExtendMap", 555666, "", 0, "b"); } else set_task(10.0,"PostGame",0) } else SetupRound() } public CheckExtendMap() { new timelimit = get_cvar_num("mp_timelimit"); if(timelimit > g_TimeLimit) { PostGame(); remove_task(555666); } } public SetupRound() { iassist[ 0 ] = 0 if(!is_valid_ent(aball)) createball() moveBall(1) new id for(id=1; id<=maxplayers; id++) { if(is_user_connected(id)) { is_dead[id] = false seconds[id] = 0 g_sprint[id] = 0 PressedAction[id] = 0 } } play_wav(0, ROUND_START) set_task(0.5, "PostSetupRound", 0) set_task(1.0, "PostPostSetupRound", 0) return PLUGIN_HANDLED } public PostSetupRound() { new id for(id=1; id<=maxplayers; id++) if(is_user_alive(id)) give_knife(id) } public PostPostSetupRound() { new id, kills, deaths for(id=1; id<=maxplayers; id++) { if(is_user_connected(id)) { kills = PlayerKills[id] deaths = PlayerDeaths[id] if(kills) entity_set_float(id, EV_FL_frags, float(kills)) if(deaths) cs_set_user_deaths(id,deaths) setScoreInfo(id) } } } public Event_ResetHud(id) { goaldied[id] = 0 set_task(1.0,"PostResetHud",id) } public PostResetHud(id) { if(is_user_alive(id)) { new stam = PlayerUpgrades[id][STA] if(!has_knife[id]) { give_knife(id) } //compensate for our turbo if(!g_sprint[id]) set_speedchange(id) if(stam > 0) entity_set_float(id, EV_FL_health, float(BASE_HP + (stam * AMOUNT_STA))) } } /*==================================================================================================== [Client Commands] Purpose: $$ Comment: $$ ====================================================================================================*/ public Turbo(id) { if(is_user_alive(id)) g_sprint[id] = 1 return PLUGIN_HANDLED } public client_PreThink(id) { if( is_kickball && is_valid_ent(aball) && is_user_connected(id)) { new button = entity_get_int(id, EV_INT_button) new usekey = (button & IN_USE) new relokay= (button & IN_RELOAD) new up = (button & IN_FORWARD) new down = (button & IN_BACK) new moveright = (button & IN_MOVERIGHT) new moveleft = (button & IN_MOVELEFT) new jump = (button & IN_JUMP) new flags = entity_get_int(id, EV_INT_flags) new onground = flags & FL_ONGROUND if( (moveright || moveleft) && !up && !down && jump && onground && !g_sprint[id] && id != ballholder) SideJump[id] = 1 if(g_sprint[id]) entity_set_float(id, EV_FL_fuser2, 0.0) if( id != ballholder ) PressedAction[id] = usekey else { if( usekey && !PressedAction[id]) { kickBall(ballholder, 0) } else if( relokay && !PressedAction[id]){ kickBall2(ballholder, 0) } else if( !usekey && PressedAction[id]) PressedAction[id] = 0 } if( id != ballholder && (button & IN_ATTACK || button & IN_ATTACK2) ) { static Float:maxdistance static reference if(ballholder > 0) { reference = ballholder maxdistance = get_pcvar_float(CVAR_KILLNEARHOLDER) } else { reference = aball maxdistance = get_pcvar_float(CVAR_KILLNEARBALL) } if(!maxdistance) return if(entity_range(id, reference) > maxdistance) entity_set_int(id, EV_INT_button, (button & ~IN_ATTACK) & ~IN_ATTACK2) } } } public client_PostThink(id) { if(is_kickball && is_user_connected(id)) { new Float:gametime = get_gametime() new button = entity_get_int(id, EV_INT_button) new up = (button & IN_FORWARD) new down = (button & IN_BACK) new moveright = (button & IN_MOVERIGHT) new moveleft = (button & IN_MOVELEFT) new jump = (button & IN_JUMP) new Float:vel[3] entity_get_vector(id,EV_VEC_velocity,vel) if( (gametime - SideJumpDelay[id] > 4.5) && SideJump[id] && jump && (moveright || moveleft) && !up && !down) { vel[0] *= 2.0 vel[1] *= 2.0 vel[2] = 300.0 entity_set_vector(id,EV_VEC_velocity,vel) SideJump[id] = 0 SideJumpDelay[id] = gametime } else SideJump[id] = 0 } } public kickBall(id, velType) { remove_task(55555) set_task(get_pcvar_float(CVAR_RESET),"clearBall",55555) new team = get_user_team(id) new a,x //Give it some lift ball_infront(id, 55.0) testorigin[2] += 10 new Float:tempO[3], Float:returned[3] new Float:dist2 entity_get_vector(id, EV_VEC_origin, tempO) new tempEnt = trace_line( id, tempO, testorigin, returned ) dist2 = get_distance_f(testorigin, returned) //ball_infront(id, 55.0) if( point_contents(testorigin) != CONTENTS_EMPTY || (!is_user_connected(tempEnt) && dist2 ) )//|| tempDist < 65) return PLUGIN_HANDLED else { //Check Make sure our ball isnt inside a wall before kicking new Float:ballF[3], Float:ballR[3], Float:ballL[3] new Float:ballB[3], Float:ballTR[3], Float:ballTL[3] new Float:ballBL[3], Float:ballBR[3] for(x=0; x<3; x++) { ballF[x] = testorigin[x]; ballR[x] = testorigin[x]; ballL[x] = testorigin[x]; ballB[x] = testorigin[x]; ballTR[x] = testorigin[x]; ballTL[x] = testorigin[x]; ballBL[x] = testorigin[x]; ballBR[x] = testorigin[x]; } for(a=1; a<=6; a++) { ballF[1] += 3.0; ballB[1] -= 3.0; ballR[0] += 3.0; ballL[0] -= 3.0; ballTL[0] -= 3.0; ballTL[1] += 3.0; ballTR[0] += 3.0; ballTR[1] += 3.0; ballBL[0] -= 3.0; ballBL[1] -= 3.0; ballBR[0] += 3.0; ballBR[1] -= 3.0; if(point_contents(ballF) != CONTENTS_EMPTY || point_contents(ballR) != CONTENTS_EMPTY || point_contents(ballL) != CONTENTS_EMPTY || point_contents(ballB) != CONTENTS_EMPTY || point_contents(ballTR) != CONTENTS_EMPTY || point_contents(ballTL) != CONTENTS_EMPTY || point_contents(ballBL) != CONTENTS_EMPTY || point_contents(ballBR) != CONTENTS_EMPTY) return PLUGIN_HANDLED } new ent = -1 testorigin[2] += 35.0 while((ent = find_ent_in_sphere(ent, testorigin, 35.0)) != 0) { if(ent > maxplayers) { new classname[32] entity_get_string(ent, EV_SZ_classname, classname, 31) if((contain(classname, "goalnet") != -1 || contain(classname, "func_") != -1) && !equal(classname, "func_water") && !equal(classname, "func_illusionary")) return PLUGIN_HANDLED } } testorigin[2] -= 35.0 } new kickVel if(!velType) { new str = (PlayerUpgrades[id][STR] * AMOUNT_STR) + (AMOUNT_POWERPLAY*(PowerPlay*5)) kickVel = get_pcvar_num(CVAR_KICK) + str kickVel += g_sprint[id] * 100 if(direction) { entity_get_vector(id, EV_VEC_angles, BallSpinDirection) curvecount = CURVE_COUNT } } else { curvecount = 0 direction = 0 kickVel = random_num(100, 600) } new Float:ballorig[3] entity_get_vector(id,EV_VEC_origin,ballorig) for(x=0; x<3; x++) distorig[0][x] = floatround(ballorig[x]) velocity_by_aim(id, kickVel, velocity) for(x=0; x<3; x++) distorig[0][x] = floatround(ballorig[x]) /////////////////////WRITE ASSIST CODE HERE IF NEEDED/////////// if ( iassist[ 0 ] == team ) { if ( iassist[ team ] == 15 ) iassist[ team ] = 0 } else { // clear the assist list new ind for(ind = 0; ind < 16; ind++ ) assist[ ind ] = 0 // clear the assist index iassist[ team ] = 0 // set which team to track iassist[ 0 ] = team } assist[ iassist[ team ]++ ] = id /////////////////////WRITE ASSIST CODE HERE IF NEEDED/////////// ballowner = id ballholder = 0 entity_set_origin(aball,testorigin) entity_set_vector(aball,EV_VEC_velocity,velocity) set_task(CURVE_TIME*2, "CurveBall", id) emit_sound(aball, CHAN_ITEM, BALL_KICKED, 1.0, ATTN_NORM, 0, PITCH_NORM) glow(id,0,0,0,0) beam() new aname[64] get_user_name(id,aname,63) if(!g_sprint[id]) set_speedchange(id) format(temp1,63,"%L",LANG_PLAYER,"KICKED_BALL",TeamNames[team],aname) client_print(0,print_console,"%s",temp1) return PLUGIN_HANDLED } public kickBall2(id, velType) { remove_task(55555) set_task(get_pcvar_float(CVAR_RESET),"clearBall",55555) new team = get_user_team(id) new a,x //Give it some lift ball_infront(id, 55.0) testorigin[2] += 10 new Float:tempO[3], Float:returned[3] new Float:dist2 entity_get_vector(id, EV_VEC_origin, tempO) new tempEnt = trace_line( id, tempO, testorigin, returned ) dist2 = get_distance_f(testorigin, returned) //ball_infront(id, 55.0) if( point_contents(testorigin) != CONTENTS_EMPTY || (!is_user_connected(tempEnt) && dist2 ) )//|| tempDist < 65) return PLUGIN_HANDLED else { //Check Make sure our ball isnt inside a wall before kicking new Float:ballF[3], Float:ballR[3], Float:ballL[3] new Float:ballB[3], Float:ballTR[3], Float:ballTL[3] new Float:ballBL[3], Float:ballBR[3] for(x=0; x<3; x++) { ballF[x] = testorigin[x]; ballR[x] = testorigin[x]; ballL[x] = testorigin[x]; ballB[x] = testorigin[x]; ballTR[x] = testorigin[x]; ballTL[x] = testorigin[x]; ballBL[x] = testorigin[x]; ballBR[x] = testorigin[x]; } for(a=1; a<=6; a++) { ballF[1] += 3.0; ballB[1] -= 3.0; ballR[0] += 3.0; ballL[0] -= 3.0; ballTL[0] -= 3.0; ballTL[1] += 3.0; ballTR[0] += 3.0; ballTR[1] += 3.0; ballBL[0] -= 3.0; ballBL[1] -= 3.0; ballBR[0] += 3.0; ballBR[1] -= 3.0; if(point_contents(ballF) != CONTENTS_EMPTY || point_contents(ballR) != CONTENTS_EMPTY || point_contents(ballL) != CONTENTS_EMPTY || point_contents(ballB) != CONTENTS_EMPTY || point_contents(ballTR) != CONTENTS_EMPTY || point_contents(ballTL) != CONTENTS_EMPTY || point_contents(ballBL) != CONTENTS_EMPTY || point_contents(ballBR) != CONTENTS_EMPTY) return PLUGIN_HANDLED } new ent = -1 testorigin[2] += 35.0 while((ent = find_ent_in_sphere(ent, testorigin, 35.0)) != 0) { if(ent > maxplayers) { new classname[32] entity_get_string(ent, EV_SZ_classname, classname, 31) if((contain(classname, "goalnet") != -1 || contain(classname, "func_") != -1) && !equal(classname, "func_water") && !equal(classname, "func_illusionary")) return PLUGIN_HANDLED } } testorigin[2] -= 35.0 } new kickVel if(!velType) { kickVel = get_pcvar_num(CVAR_KICK) kickVel += g_sprint[id] * 100 if(direction) { entity_get_vector(id, EV_VEC_angles, BallSpinDirection) curvecount = CURVE_COUNT } } else { curvecount = 0 direction = 0 kickVel = random_num(100, 600) } new Float:ballorig[3] entity_get_vector(id,EV_VEC_origin,ballorig) for(x=0; x<3; x++) distorig[0][x] = floatround(ballorig[x]) velocity_by_aim(id, kickVel, velocity) for(x=0; x<3; x++) distorig[0][x] = floatround(ballorig[x]) /////////////////////WRITE ASSIST CODE HERE IF NEEDED/////////// if ( iassist[ 0 ] == team ) { if ( iassist[ team ] == 15 ) iassist[ team ] = 0 } else { // clear the assist list new ind for(ind = 0; ind < 16; ind++ ) assist[ ind ] = 0 // clear the assist index iassist[ team ] = 0 // set which team to track iassist[ 0 ] = team } assist[ iassist[ team ]++ ] = id /////////////////////WRITE ASSIST CODE HERE IF NEEDED/////////// ballowner = id ballholder = 0 entity_set_origin(aball,testorigin) entity_set_vector(aball,EV_VEC_velocity,velocity) set_task(CURVE_TIME*2, "CurveBall", id) emit_sound(aball, CHAN_ITEM, BALL_KICKED, 1.0, ATTN_NORM, 0, PITCH_NORM) glow(id,0,0,0,0) beam() new aname[64] get_user_name(id,aname,63) if(!g_sprint[id]) set_speedchange(id) format(temp1,63,"%L",LANG_PLAYER,"KICKED_BALL",TeamNames[team],aname) client_print(0,print_console,"%s",temp1) return PLUGIN_HANDLED } /*==================================================================================================== [Command Blocks] Purpose: $$ Comment: $$ ====================================================================================================*/ public client_kill(id) { if(is_kickball) return PLUGIN_HANDLED return PLUGIN_CONTINUE } public client_command(id) { if(!is_kickball) return PLUGIN_CONTINUE new arg[13] read_argv( 0, arg , 12 ) if ( equal("buy",arg) || equal("autobuy",arg) ) return PLUGIN_HANDLED return PLUGIN_CONTINUE } //fix for an exploit. public menuclass(id) { // They changed teams SetPlayerModel(id, 0xFF); } GetPlayerModel(id) { if(!is_user_connected(id)) return 0; return get_pdata_int(id, OFFSET_INTERNALMODEL, 5); } SetPlayerModel(id, int) { if(!is_user_connected(id)) return; set_pdata_int(id, OFFSET_INTERNALMODEL, int, 5); } public team_select(id, key) { if(is_kickball) { new team = get_user_team(id) //SetPlayerModel(id, 0xFF); if( (team == 1 || team == 2) && (key == team-1) ) { new message[64] format(message, 63, "%L",id,"CANT_REJOIN_TEAM") message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0, 0, 0}, id) write_byte(0) write_string(message) message_end() engclient_cmd(id,"chooseteam") return PLUGIN_HANDLED } } return PLUGIN_CONTINUE } public fullupdate(id) return PLUGIN_HANDLED /*==================================================================================================== [Upgrades] Purpose: This handles the upgrade menu. Comment: $$ ====================================================================================================*/ public BuyUpgrade(id) { new level[65], num[11], mTitle[101]//, max_count format(mTitle,100,"%L",id,"MENU_TITLE") menu_upgrade[id] = menu_create(mTitle, "Upgrade_Handler") new x for(x=1; x<=UPGRADES; x++) { new price = ((PlayerUpgrades[id][x] * UpgradePrice[x]) / 2) + UpgradePrice[x] if((PlayerUpgrades[id][x] + 1) > UpgradeMax[x]) { //max_count++ format(level,64,"r%s %L",UpgradeTitles[x],id,"MENU_CHOICE_MAXED",UpgradeMax[x]) } else { format(level,64,"%s r%L y-- w%i XP",UpgradeTitles[x], id, "MENU_CHOICE_NEXT", PlayerUpgrades[id][x]+1, price) } format(num, 10,"%i",x) menu_additem(menu_upgrade[id], level, num, 0) } menu_addblank(menu_upgrade[id], (UPGRADES+1)) menu_setprop(menu_upgrade[id], MPROP_EXIT, MEXIT_NORMAL) menu_display(id, menu_upgrade[id], 0) return PLUGIN_HANDLED } public Upgrade_Handler(id, menu, item) { if(item == MENU_EXIT) return PLUGIN_HANDLED new cmd[6], iName[64] new access, callback menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback) new upgrade = str_to_num(cmd) new playerupgrade = PlayerUpgrades[id][upgrade] new price = ((playerupgrade * UpgradePrice[upgrade]) / 2) + UpgradePrice[upgrade] new maxupgrade = UpgradeMax[upgrade] if(playerupgrade != maxupgrade && playerupgrade != maxupgrade+MAX_LVL_BONUS) { new needed = g_Experience[id] - price if( (needed >= 0) ) { if(playerupgrade < maxupgrade-1) playerupgrade += 1 else playerupgrade += MAX_LVL_BONUS+1 g_Experience[id] -= price if(playerupgrade < maxupgrade) client_print(id,print_chat,"%L",id,"MENU_UPGRADED",playerupgrade,UpgradeTitles[upgrade],price) else { client_print(id,print_chat,"%L",id,"MENU_UPGRADED",maxupgrade,UpgradeTitles[upgrade],price) #if(MAX_LVL_BONUS > 1) client_print(id,print_chat,"%L",id,"MENU_MAX_LVL_BONUS",maxupgrade,MAX_LVL_BONUS) #else client_print(id,print_chat,"%L",id,"MENU_MAX_LVL",maxupgrade) #endif play_wav(id, UPGRADED_MAX_LEVEL) } switch(upgrade) { case STA: { new stam = playerupgrade * AMOUNT_STA entity_set_float(id, EV_FL_health, float(BASE_HP + stam)) } case AGI: { if(!g_sprint[id]) set_speedchange(id) } } PlayerUpgrades[id][upgrade] = playerupgrade } else client_print(id,print_chat,"%L",id,"MENU_MISSING_EXP",(needed * -1),(playerupgrade+1),UpgradeTitles[upgrade]) } else { client_print(id,print_chat,"%L",id,"MENU_UPGRADE_MAXED",UpgradeTitles[upgrade],maxupgrade) } return PLUGIN_HANDLED } /*==================================================================================================== [Meters] Purpose: This controls the turbo meter and curve angle meter. Comment: $$ ====================================================================================================*/ public meter() { new id new turboTitle[32] new sprintText[128], sec new r, g, b, team new len, x new ndir = -(DIRECTIONS) format(turboTitle,31,"%L",LANG_PLAYER,"TURBO_TITLE"); for(id=1; id<=maxplayers; id++) { if(!is_user_connected(id) || !is_user_alive(id)) continue sec = sec
Dodanych wklejek: 4382
Powered By (Pav32) Pastebin © 2011