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 1rxuo0xrh9rdc dodana przez d0naciak, 07.05.2017 19:25
dawid35456
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.
#include <amxmodx> #include <amxmisc> #include <codmod> #include <fakemeta> #include <fakemeta_util> #include <engine> #include <hamsandwich> #include <cstrike> #include <xs> #include <fun> #define MAX_DIST 8192.0 #define MAX 32 new const nazwa[] = "Gunner [Premium]"; new const opis[] = ""; new const bronie = (1<<CSW_XM1014)|(1<<CSW_P90); new const zdrowie = 0; new const kondycja = 0; new const inteligencja = 0; new const wytrzymalosc = 0; new const frakcja[] = "Klasy [Premium]"; #define SENTRY_THINK 0.3 #define OFFSET_WPN_LINUX 4 #define OFFSET_WPN_WIN 41 #define fm_point_contents(%1) engfunc(EngFunc_PointContents, %1) #define fm_DispatchSpawn(%1) dllfunc(DLLFunc_Spawn, %1) new bool:ma_dzialko[33]; new gMenuDzialko[33] new g_maxplayers; new mdl_gib_build1 new mdl_gib_build2 new mdl_gib_build3 new mdl_gib_build4 static const Nazwy_broni[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90" } new pcvarPercent,pcvarHealth,pcvarDamage; new ma_klase[33]; new bool:sentrys[MAX+1]; new ilosc[33]; new ZmienKilla[2]; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc, frakcja); register_event("HLTV", "NowaRunda_Dzialko", "a", "1=0", "2=0"); register_event("HLTV", "NowaRunda", "a", "1=0", "2=0"); register_message(get_user_msgid("DeathMsg"), "message_DeathMsg") RegisterHam(Ham_Spawn, "player", "DajNoweDzialko", 1); RegisterHam(Ham_Spawn, "player", "Spawn", 1) RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamage_Dzialko" ); RegisterHam(Ham_TakeDamage, "func_breakable", "TakeDamage"); RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack_Building") for (new i = 1; i < sizeof Nazwy_broni; i++) { if (Nazwy_broni[i][0]) RegisterHam(Ham_Item_Deploy, Nazwy_broni[i], "ham_ItemDeploy_Post", 1) } register_think("sentry_shot","sentry_shot") register_think("sentryG","SentryThink"); g_maxplayers = get_maxplayers(); pcvarPercent = register_cvar("inzynier_percent","4") pcvarHealth = register_cvar("inzynier_health","600") pcvarDamage = register_cvar("inzynier_damage","15.0"); register_cvar("zycie_sentry", "2500"); register_cvar("usun_sentry", "1"); } public plugin_precache() { precache_sound("sentry_shoot.wav"); precache_sound("debris/bustmetal1.wav"); precache_sound("debris/bustmetal2.wav"); precache_sound("mw/firemw.wav"); precache_sound("mw/plant.wav"); precache_sound("mw/sentrygun_starts.wav"); precache_sound("mw/sentrygun_stops.wav"); precache_sound("mw/sentrygun_gone.wav"); precache_sound("mw/sentrygun_friend.wav"); precache_sound("mw/sentrygun_enemy.wav"); precache_model("models/v_tfc_spanner.mdl") precache_model("models/base2.mdl") precache_model("models/sentry2.mdl") precache_model("models/sentrygun_mw2.mdl"); mdl_gib_build1 = engfunc(EngFunc_PrecacheModel,"models/mbarrel.mdl") mdl_gib_build2 = engfunc(EngFunc_PrecacheModel,"models/computergibs.mdl") mdl_gib_build3 = engfunc(EngFunc_PrecacheModel,"models/metalplategibs.mdl") mdl_gib_build4 = engfunc(EngFunc_PrecacheModel,"models/cindergibs.mdl") } public cod_class_enabled(id) { if(!(get_user_flags(id) & ADMIN_LEVEL_G)) { client_print(id, print_chat, "Nie masz uprawnien, aby uzywac tej klasy.") return COD_STOP; } ilosc[id] = 1; ma_dzialko[id] = true; ma_klase[id] = true; return COD_CONTINUE; } public cod_class_disabled(id) { ilosc[id] = 0; ma_klase[id] = false; } public fwHamTakeDamage_Dzialko( this, idinflictor, idattacker, Float:damage, damagebits ) { static classname[ 20 ]; pev( this, pev_classname, classname, 19 ); if( ( equal( classname, "sentry_shot" ) || equal( classname, "sentry_base" ) ) && is_user_connected( idattacker ) && get_user_team(pev(this,pev_iuser1)) == get_user_team(idattacker) ){ return HAM_SUPERCEDE; } return HAM_IGNORED; } public NowaRunda_Dzialko() { remove_entity_name("sentry_base") remove_entity_name("sentry_shot") } public OpcjeDzialka(id) { new menu,newmenu,menupage player_menu_info(id,menu,newmenu,menupage); if(menu > 0 || newmenu != -1) { return PLUGIN_CONTINUE; } gMenuDzialko[id] = menu_create("Dzialo", "OpcjeDziala_Handle"); menu_additem(gMenuDzialko[id],"Postaw dzialo"); menu_additem(gMenuDzialko[id],"Zniszcz dzialo"); menu_setprop(gMenuDzialko[id],MPROP_NUMBER_COLOR,"r") menu_display(id,gMenuDzialko[id]); return PLUGIN_CONTINUE; } public OpcjeDziala_Handle(id,menu,item) { if(item == MENU_EXIT || !is_user_alive(id)) { menu_destroy(menu); return PLUGIN_CONTINUE; } switch(item) { case 0: { if(ma_klase[id] && ma_dzialko[id]) { new Float:Origin[3] pev(id, pev_origin, Origin) new Float:vNewOrigin[3] new Float:vTraceDirection[3] new Float:vTraceEnd[3] new Float:vTraceResult[3] velocity_by_aim(id, 64, vTraceDirection) // get a velocity in the directino player is aiming, with a multiplier of 64... vTraceEnd[0] = vTraceDirection[0] + Origin[0] vTraceEnd[1] = vTraceDirection[1] + Origin[1] vTraceEnd[2] = vTraceDirection[2] + Origin[2] fm_trace_line(id, Origin, vTraceEnd, vTraceResult) vNewOrigin[0] = vTraceResult[0] vNewOrigin[1] = vTraceResult[1] vNewOrigin[2] = Origin[2] if(!(StawDzialo(vNewOrigin,id))) { client_print(id, print_center, "Nie mozesz tu postawic dziala!") } else { ma_dzialko[id] = false; } } } case 1: { new iEnt = -1; while((iEnt = find_ent_by_class(iEnt,"sentry_shot")) != 0) { if(pev_valid(iEnt) && pev(iEnt,pev_iuser1) == id) { FX_Demolish(iEnt) remove_entity(iEnt); } } iEnt = -1; while((iEnt = find_ent_by_class(iEnt,"sentry_base")) != 0) { if(pev_valid(iEnt) && pev(iEnt,pev_iuser1) == id) { FX_Demolish(iEnt) remove_entity(iEnt); } } } } menu_destroy(menu); return PLUGIN_CONTINUE; } public bool:StawDzialo(Float:origin[3],id) { if (fm_point_contents(origin) != CONTENTS_EMPTY || is_hull_default(origin, 32.0)) { return false } new Float:hitPoint[3], Float:originDown[3] originDown = origin originDown[2] = -5000.0 fm_trace_line(0, origin, originDown, hitPoint) new Float:DistanceFromGround = vector_distance(origin, hitPoint) new Float:difference = 36.0 - DistanceFromGround if (difference < -1 * 10.0 || difference > 10.0) return false new sentry_base = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_breakable")) if (!sentry_base){ return false } set_pev(sentry_base, pev_classname, "sentry_base") engfunc(EngFunc_SetModel, sentry_base, "models/base2.mdl") engfunc(EngFunc_SetSize, sentry_base, {-16.0, -16.0, 0.0}, {16.0, 16.0, 25.0}) engfunc(EngFunc_SetOrigin, sentry_base, origin) new Float:fAngle[3]; pev(id, pev_v_angle, fAngle) fAngle[0] = 0.0 fAngle[1] += 180.0 fAngle[2] = 0.0 set_pev(sentry_base, pev_angles, fAngle) set_pev(sentry_base, pev_solid, SOLID_BBOX) set_pev(sentry_base, pev_movetype, MOVETYPE_TOSS) set_pev(sentry_base, pev_iuser1, id) set_pev(sentry_base, pev_iuser2, 0) set_pev(sentry_base, pev_iuser3, 0) return true; } public ham_ItemDeploy_Post(weapon_ent) { static owner owner = get_pdata_cbase(weapon_ent, OFFSET_WPN_WIN, OFFSET_WPN_LINUX); static weaponid weaponid = cs_get_weapon_id(weapon_ent) if(!is_user_alive(owner)) { return HAM_IGNORED; } static menu,newmenu,menupage player_menu_info(owner,menu,newmenu,menupage); if(gMenuDzialko[owner] && newmenu == gMenuDzialko[owner]) { show_menu(owner,0,"^n"); gMenuDzialko[owner] = 0; } if(weaponid == CSW_KNIFE && ma_klase[owner]) { entity_set_string(owner, EV_SZ_viewmodel, "models/v_tfc_spanner.mdl") OpcjeDzialka(owner); } return HAM_IGNORED; } stock FX_Demolish(build) { if(!pev_valid(build)) return; new Float:forigin[3],iorigin[3],i pev(build, pev_origin, forigin) FVecIVec(forigin,iorigin) for(i = 1;i <= 1;i++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(iorigin[0]) write_coord(iorigin[1]) write_coord(iorigin[2]) write_coord(random_num(-150,150)) write_coord(random_num(-150,150)) write_coord(random_num(150,350)) write_angle(random_num(0,360)) write_short(mdl_gib_build1) write_byte(0) // bounce write_byte(10) // life message_end() } for(i = 1;i <= 1;i++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(iorigin[0]) write_coord(iorigin[1]) write_coord(iorigin[2]) write_coord(random_num(-150,150)) write_coord(random_num(-150,150)) write_coord(random_num(150,350)) write_angle(random_num(0,360)) write_short(mdl_gib_build2) write_byte(0) // bounce write_byte(10) // life message_end() } for(i = 1;i <= 1;i++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(iorigin[0]) write_coord(iorigin[1]) write_coord(iorigin[2]) write_coord(random_num(-150,150)) write_coord(random_num(-150,150)) write_coord(random_num(150,350)) write_angle(random_num(0,360)) write_short(mdl_gib_build3) write_byte(0) // bounce write_byte(10) // life message_end() } for(i = 1;i <= 1;i++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(iorigin[0]) write_coord(iorigin[1]) write_coord(iorigin[2]) write_coord(random_num(-150,150)) write_coord(random_num(-150,150)) write_coord(random_num(150,350)) write_angle(random_num(0,360)) write_short(mdl_gib_build4) write_byte(0) // bounce write_byte(10) // life message_end() } } public DajNoweDzialko(id) { if(!is_user_connected(id) || !is_user_alive(id)) return PLUGIN_CONTINUE; if(ma_klase[id]) { ma_dzialko[id] = true; } return PLUGIN_CONTINUE; } set_animation(id, anim) { set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id) write_byte(anim) write_byte(pev(id, pev_body)) message_end() } public fw_TraceAttack_Building(id, enemy, Float:damage, Float:direction[3], tracehandle, damagetype){ if (!(1 <= enemy <= g_maxplayers) || get_user_weapon(enemy) != CSW_KNIFE || !is_user_alive(enemy)) { return HAM_IGNORED } new classname[24] pev(id, pev_classname, classname, sizeof classname - 1) new weapon = get_user_weapon(enemy) if(weapon == CSW_KNIFE && ma_klase[enemy] && pev(id,pev_iuser1) == enemy && equal(classname,"sentry_base") && pev(id,pev_iuser2) < 100){ set_pev(id,pev_iuser2,pev(id,pev_iuser2)+get_pcvar_num(pcvarPercent) > 100 ? 100 : pev(id,pev_iuser2)+get_pcvar_num(pcvarPercent)); set_animation(enemy,8); if(pev(id,pev_iuser2) >= 100 && !pev(id,pev_iuser3)){ client_print(enemy,print_center,"%d %%",pev(id,pev_iuser2)) set_pev(id,pev_iuser3,stawdzialo2(id)); } else { client_print(enemy,print_center,"%d %%",pev(id,pev_iuser2)) } } return HAM_IGNORED } public stawdzialo2(ent) { new Float:origin[3]; pev(ent,pev_origin,origin); new sentry_shot2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_breakable")) if (!sentry_shot2) { return 0 } new szHealth[16] get_pcvar_string(pcvarHealth,szHealth,charsmax(szHealth)) fm_set_kvd(sentry_shot2, "health", szHealth, "func_breakable") fm_set_kvd(sentry_shot2, "material", "6", "func_breakable") fm_DispatchSpawn(sentry_shot2) set_pev(sentry_shot2, pev_classname, "sentry_shot") engfunc(EngFunc_SetModel, sentry_shot2, "models/sentry2.mdl") engfunc(EngFunc_SetSize, sentry_shot2, {-16.0, -16.0, 0.0}, {16.0, 16.0, 20.0}) origin[2] += 25.0; engfunc(EngFunc_SetOrigin, sentry_shot2, origin) new Float:fAngle[3]; pev(pev(ent,pev_iuser1), pev_v_angle, fAngle) fAngle[0] = 0.0 fAngle[1] += 180.0 fAngle[2] = 0.0 set_pev(sentry_shot2, pev_angles, fAngle) set_pev(sentry_shot2, pev_solid, SOLID_BBOX) set_pev(sentry_shot2, pev_movetype, MOVETYPE_TOSS) set_pev(sentry_shot2, pev_iuser1, pev(ent,pev_iuser1)) set_pev(sentry_shot2, pev_iuser2, ent) set_pev( sentry_shot2, pev_sequence, 0 ); set_pev( sentry_shot2, pev_animtime, get_gametime() ); set_pev( sentry_shot2, pev_framerate, 1.0 ); set_pev(sentry_shot2, pev_nextthink, get_gametime() + SENTRY_THINK) return sentry_shot2; } public sentry_find_player(ent) { new Float:fOrigin[3],Float:fOrigin2[3],Float:distance = 999999.0,Float:hitOrigin[3],iCloseId = 0,iOwner = 0; iOwner = pev(ent,pev_iuser1) pev(ent,pev_origin,fOrigin) for(new i = 1;i<33;i++) { if(!is_user_alive(i) || get_user_team(i) == get_user_team(iOwner)) { continue; } pev(i, pev_origin, fOrigin2) new hitent = fm_trace_line(ent, fOrigin, fOrigin2, hitOrigin) if(distance > vector_distance(fOrigin,fOrigin2) && hitent == i) { distance = vector_distance(fOrigin,fOrigin2) iCloseId = i; } } return iCloseId; } public sentry_shot(ent) { if(!pev_valid(ent)) { return PLUGIN_CONTINUE; } if(entity_get_float(ent,EV_FL_health) <= 0.0) { if(pev_valid(pev(ent,pev_iuser2))) { remove_entity(pev(ent,pev_iuser2)); } remove_entity(ent); return PLUGIN_CONTINUE; } new iFind = 0; if((iFind = sentry_find_player(ent))) { remove_task(ent+45676); turntotarget(ent,iFind); sentry_shot3(ent,iFind); set_task(0.5,"stop_anim",ent+45676) } set_pev(ent, pev_nextthink, get_gametime() + SENTRY_THINK) return PLUGIN_CONTINUE; } public sentry_shot3(ent,target) { new Float:sentryOrigin[3], Float:targetOrigin[3], Float:hitOrigin[3] pev(ent, pev_origin, sentryOrigin) sentryOrigin[2] += 18.0 pev(target, pev_origin, targetOrigin) targetOrigin[0] += random_float(-16.0, 16.0) targetOrigin[1] += random_float(-16.0, 16.0) targetOrigin[2] += random_float(-16.0, 16.0) new hit = fm_trace_line(ent, sentryOrigin, targetOrigin, hitOrigin) if(hit == target) { knockback_explode(target, sentryOrigin, 5.0) ExecuteHam(Ham_TakeDamage, target, 0, pev(ent,pev_iuser1),get_pcvar_float(pcvarDamage) , 1); set_pev( ent, pev_sequence, 1 ); set_pev( ent, pev_animtime, get_gametime() ); set_pev( ent, pev_framerate, 1.0 ); } FX_Trace(sentryOrigin, hitOrigin) engfunc(EngFunc_EmitSound, ent, CHAN_STATIC, "sentry_shoot.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } public stop_anim(ent){ ent -= 45676; if(pev_valid(ent)){ set_pev( ent, pev_sequence, 0 ); set_pev(ent, pev_animtime, get_gametime() ); set_pev( ent, pev_framerate, 1.0 ); } } public knockback_explode(id, const Float:exp_origin[3], Float:force) { if(!is_user_alive(id)) return if(force == 0.0) return new Float:old_velocity[3], Float:velocity[3], Float:id_origin[3], Float:output[3] pev(id, pev_origin, id_origin); get_speed_vector(exp_origin, id_origin, force, velocity); pev(id, pev_velocity, old_velocity); xs_vec_add(velocity, old_velocity, output) set_pev(id, pev_velocity, output) } public turntotarget(ent, target) { if (target) { new Float:closestOrigin[3],Float:sentryOrigin[3] pev(target, pev_origin, closestOrigin) pev(ent, pev_origin, sentryOrigin) new Float:newAngle[3] pev(ent, pev_angles, newAngle) new Float:x = closestOrigin[0] - sentryOrigin[0] new Float:z = closestOrigin[1] - sentryOrigin[1] new Float:radians = floatatan(z/x, radian) newAngle[1] = radians * 180.0 / 3.14159 if (closestOrigin[0] < sentryOrigin[0]) newAngle[1] -= 180.0 new Float:h = closestOrigin[2] - sentryOrigin[2] new Float:b = vector_distance(sentryOrigin, closestOrigin) radians = floatatan(h/b, radian) new Float:degs = radians * 180.0 / 3.14159 new Float:RADIUS = 830.0 new Float:degreeByte = RADIUS/256.0 new Float:tilt = 127.0 - degreeByte * degs set_pev(ent, pev_angles, newAngle) set_pev(ent, pev_controller_1, floatround(tilt)) } } stock FX_Trace(const Float:idorigin[3], const Float:targetorigin[3]) { new id[3],target[3] FVecIVec(idorigin,id) FVecIVec(targetorigin,target) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(6)//TE_TRACER write_coord(id[0]) write_coord(id[1]) write_coord(id[2]) write_coord(target[0]) write_coord(target[1]) write_coord(target[2]) message_end() } stock bool:is_hull_default(Float:origin[3], const Float:BOUNDS){ new Float:traceEnds[8][3], Float:traceHit[3], hitEnt traceEnds[0][0] = origin[0] - BOUNDS traceEnds[0][1] = origin[1] - BOUNDS traceEnds[0][2] = origin[2] - BOUNDS traceEnds[1][0] = origin[0] - BOUNDS traceEnds[1][1] = origin[1] - BOUNDS traceEnds[1][2] = origin[2] + BOUNDS traceEnds[2][0] = origin[0] + BOUNDS traceEnds[2][1] = origin[1] - BOUNDS traceEnds[2][2] = origin[2] + BOUNDS traceEnds[3][0] = origin[0] + BOUNDS traceEnds[3][1] = origin[1] - BOUNDS traceEnds[3][2] = origin[2] - BOUNDS traceEnds[4][0] = origin[0] - BOUNDS traceEnds[4][1] = origin[1] + BOUNDS traceEnds[4][2] = origin[2] - BOUNDS traceEnds[5][0] = origin[0] - BOUNDS traceEnds[5][1] = origin[1] + BOUNDS traceEnds[5][2] = origin[2] + BOUNDS traceEnds[6][0] = origin[0] + BOUNDS traceEnds[6][1] = origin[1] + BOUNDS traceEnds[6][2] = origin[2] + BOUNDS traceEnds[7][0] = origin[0] + BOUNDS traceEnds[7][1] = origin[1] + BOUNDS traceEnds[7][2] = origin[2] - BOUNDS for (new i = 0; i < 8; i++) { if (fm_point_contents(traceEnds[i]) != CONTENTS_EMPTY) return true hitEnt = fm_trace_line(0, origin, traceEnds[i], traceHit) if (hitEnt != 0) return true for (new j = 0; j < 3; j++) if (traceEnds[i][j] != traceHit[j]) return true } return false } stock get_speed_vector(const Float:origin1[3], const Float:origin2[3], Float:force, Float:new_velocity[3]) { new_velocity[0] = origin2[0] - origin1[0] new_velocity[1] = origin2[1] - origin1[1] new_velocity[2] = origin2[2] - origin1[2] new Float:num = floatsqroot(force*force / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2])) new_velocity[0] *= num new_velocity[1] *= num new_velocity[2] *= num return 1; } public NowaRunda() { new num, players[32]; get_players(players, num, "gh"); for(new i = 0; i < num; i++) { if(task_exists(players[i]+997)) remove_task(players[i]+997); } if(get_cvar_num("usun_sentry")) remove_entity_name("sentryG") } public client_disconnect(id) { new ent = -1 while((ent = find_ent_by_class(ent, "sentryG"))) { if(entity_get_int(ent, EV_INT_iuser2) == id) remove_entity(ent); } return PLUGIN_CONTINUE; } public message_DeathMsg() { new killer = get_msg_arg_int(1); if(ZmienKilla[1] & (1<<killer)) { set_msg_arg_string(4, "m249"); return PLUGIN_CONTINUE; } return PLUGIN_CONTINUE; } public Spawn(id) { if(!is_user_alive(id) || !is_user_connected(id)) return PLUGIN_CONTINUE; if(ma_klase[id]) ilosc[id] = 1; return PLUGIN_CONTINUE; } public cod_class_skill_used(id) { if(!ilosc[id]) { client_print(id, print_center, "Masz tylko jednego Sentry na runde!"); return PLUGIN_CONTINUE; } else { if (is_user_alive(id)) { ilosc[id]--; CreateSentry(id); } } return PLUGIN_CONTINUE; } public CreateSentry(id) { if(!(entity_get_int(id, EV_INT_flags) & FL_ONGROUND)) return; new entlist[3]; if(find_sphere_class(id, "func_bomb_target", 650.0, entlist, 2)) { client_print(id, print_chat, "Jestes zbyt blisko BS'A"); return; } if(find_sphere_class(id, "func_buyzone", 650.0, entlist, 2)) { client_print(id, print_chat, "Jestes zbyt blisko Respa"); return; } new num, players[32], Float:Origin[3]; get_players(players, num, "gh"); for(new a = 0; a < num; a++) { new i = players[a]; if(get_user_team(id) != get_user_team(i)) client_cmd(i, "spk sound/mw/sentrygun_enemy.wav"); else client_cmd(i, "spk sound/mw/sentrygun_friend.wav"); } print_info(id, "Sentry Gun"); entity_get_vector(id, EV_VEC_origin, Origin); Origin[2] += 45.0; new health[12], ent = create_entity("func_breakable"); get_cvar_string("zycie_sentry",health, charsmax(health)); DispatchKeyValue(ent, "health", health); DispatchKeyValue(ent, "material", "6"); entity_set_string(ent, EV_SZ_classname, "sentryG"); entity_set_model(ent, "models/sentrygun_mw2.mdl"); entity_set_float(ent, EV_FL_takedamage, DAMAGE_YES); entity_set_size(ent, Float:{-16.0, -16.0, 0.0}, Float:{16.0, 16.0, 48.0}); entity_set_origin(ent, Origin); entity_set_int(ent, EV_INT_solid, SOLID_SLIDEBOX); entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS); entity_set_int(ent, EV_INT_iuser2, id); entity_set_vector(ent, EV_VEC_angles, Float:{0.0, 0.0, 0.0}); entity_set_byte(ent, EV_BYTE_controller2, 127); entity_set_float(ent, EV_FL_nextthink, get_gametime()+1.0); sentrys[id] = false; emit_sound(ent, CHAN_ITEM, "mw/plant.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); } public SentryThink(ent) { if(!is_valid_ent(ent)) return PLUGIN_CONTINUE; new Float:SentryOrigin[3], Float:closestOrigin[3]; entity_get_vector(ent, EV_VEC_origin, SentryOrigin); new id = entity_get_int(ent, EV_INT_iuser2); new target = entity_get_edict(ent, EV_ENT_euser1); new firemods = entity_get_int(ent, EV_INT_iuser1); if(firemods) { if(/*ExecuteHam(Ham_FVisible, target, ent)*/fm_is_ent_visible(target, ent) && is_user_alive(target)) { if(UTIL_In_FOV(target,ent)) { goto fireoff; } new Float:TargetOrigin[3]; entity_get_vector(target, EV_VEC_origin, TargetOrigin); emit_sound(ent, CHAN_AUTO, "mw/firemw.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); sentry_turntotarget(ent, SentryOrigin, TargetOrigin); new Float:hitRatio = random_float(0.0, 1.0) - 0.2; if(hitRatio <= 0.0) { UTIL_Kill(id, target, random_float(5.0, 35.0), DMG_BULLET, 1); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_TRACER); write_coord(floatround(SentryOrigin[0])); write_coord(floatround(SentryOrigin[1])); write_coord(floatround(SentryOrigin[2])); write_coord(floatround(TargetOrigin[0])); write_coord(floatround(TargetOrigin[1])); write_coord(floatround(TargetOrigin[2])); message_end(); } entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1); return PLUGIN_CONTINUE; } else { fireoff: firemods = 0; entity_set_int(ent, EV_INT_iuser1, 0); entity_set_edict(ent, EV_ENT_euser1, 0); emit_sound(ent, CHAN_AUTO, "mw/sentrygun_stops.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); entity_set_float(ent, EV_FL_nextthink, get_gametime()+1.0); return PLUGIN_CONTINUE; } } new closestTarget = getClosestPlayer(ent) if(closestTarget) { emit_sound(ent, CHAN_AUTO, "mw/sentrygun_starts.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); entity_get_vector(closestTarget, EV_VEC_origin, closestOrigin); sentry_turntotarget(ent, SentryOrigin, closestOrigin); entity_set_int(ent, EV_INT_iuser1, 1); entity_set_edict(ent, EV_ENT_euser1, closestTarget); entity_set_float(ent, EV_FL_nextthink, get_gametime()+1.0); return PLUGIN_CONTINUE; } if(!firemods) { new controler1 = entity_get_byte(ent, EV_BYTE_controller1)+1; if(controler1 > 255) controler1 = 0; entity_set_byte(ent, EV_BYTE_controller1, controler1); new controler2 = entity_get_byte(ent, EV_BYTE_controller2); if(controler2 > 127 || controler2 < 127) entity_set_byte(ent, EV_BYTE_controller2, 127); entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.05); } return PLUGIN_CONTINUE } public sentry_turntotarget(ent, Float:sentryOrigin[3], Float:closestOrigin[3]) { new newTrip, Float:newAngle = floatatan(((closestOrigin[1]-sentryOrigin[1])/(closestOrigin[0]-sentryOrigin[0])), radian) * 57.2957795; if(closestOrigin[0] < sentryOrigin[0]) newAngle += 180.0; if(newAngle < 0.0) newAngle += 360.0; sentryOrigin[2] += 35.0 if(closestOrigin[2] > sentryOrigin[2]) newTrip = 0; if(closestOrigin[2] < sentryOrigin[2]) newTrip = 255; if(closestOrigin[2] == sentryOrigin[2]) newTrip = 127; entity_set_byte(ent, EV_BYTE_controller1,floatround(newAngle*0.70833)); entity_set_byte(ent, EV_BYTE_controller2, newTrip); entity_set_byte(ent, EV_BYTE_controller3, entity_get_byte(ent, EV_BYTE_controller3)+20>255? 0: entity_get_byte(ent, EV_BYTE_controller3)+20); } public TakeDamage(ent, idinflictor, attacker, Float:damage, damagebits) { if(!is_user_alive(attacker)) return HAM_IGNORED; new classname[32]; entity_get_string(ent, EV_SZ_classname, classname, 31); if(equal(classname, "sentryG")) { new id = entity_get_int(ent, EV_INT_iuser2); if(get_user_team(attacker) == get_user_team(id)) return HAM_SUPERCEDE; if(damage >= entity_get_float(ent, EV_FL_health)) { new Float:Origin[3]; entity_get_vector(ent, EV_VEC_origin, Origin); new entlist[33]; new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32); for(new i=0; i < numfound; i++) { new pid = entlist[i]; if(!is_user_alive(pid) || get_user_team(id) == get_user_team(pid)) continue; UTIL_Kill(id, pid, 70.0, (1<<24)); } client_cmd(id, "spk sound/mw/sentrygun_gone.wav"); set_task(1.0, "del_sentry", ent); } } return HAM_IGNORED; } public del_sentry(ent) { remove_entity(ent); } stock UTIL_Kill(atakujacy, obrywajacy, Float:damage, damagebits, ile=0) { ZmienKilla[ile] |= (1<<atakujacy); ExecuteHam(Ham_TakeDamage, obrywajacy, atakujacy, atakujacy, damage, damagebits); ZmienKilla[ile] &= ~(1<<atakujacy); } stock print_info(id, const nagroda[], const nazwa[] = "y") { new nick[64]; get_user_name(id, nick, 63); client_print(0, print_chat, "%s wezwan%s przez %s", nagroda, nazwa, nick); } stock bool:UTIL_In_FOV(id,ent) { if((get_pdata_int(id, 510) & (1<<16)) && (Find_Angle(id, ent) > 0.0)) return true; return false; } stock getClosestPlayer(ent) { new iClosestPlayer = 0, Float:flClosestDist = MAX_DIST, Float:flDistanse, Float:fOrigin[2][3]; new num, players[32]; get_players(players, num, "gh") for(new a = 0; a < num; a++) { new i = players[a]; if(!is_user_connected(i) || !is_user_alive(i) || /*!ExecuteHam(Ham_FVisible, i, ent)*/!fm_is_ent_visible(i, ent) || get_user_team(i) == get_user_team(entity_get_int(ent, EV_INT_iuser2))) continue; if(UTIL_In_FOV(i, ent)) continue; entity_get_vector(i, EV_VEC_origin, fOrigin[0]); entity_get_vector(ent, EV_VEC_origin, fOrigin[1]); flDistanse = get_distance_f(fOrigin[0], fOrigin[1]); if(flDistanse <= flClosestDist) { iClosestPlayer = i; flClosestDist = flDistanse; } } return iClosestPlayer; } stock Float:Find_Angle(id, target) { new Float:Origin[3], Float:TargetOrigin[3]; pev(id,pev_origin, Origin); pev(target,pev_origin,TargetOrigin); new Float:Angles[3], Float:vec2LOS[3]; pev(id,pev_angles, Angles); xs_vec_sub(TargetOrigin, Origin, vec2LOS); vec2LOS[2] = 0.0; new Float:veclength = vector_length(vec2LOS); if (veclength <= 0.0) vec2LOS[0] = vec2LOS[1] = 0.0; else { new Float:flLen = 1.0 / veclength; vec2LOS[0] = vec2LOS[0]*flLen; vec2LOS[1] = vec2LOS[1]*flLen; } engfunc(EngFunc_MakeVectors, Angles); new Float:v_forward[3]; get_global_vector(GL_v_forward, v_forward); new Float:flDot = vec2LOS[0]*v_forward[0]+vec2LOS[1]*v_forward[1]; if(flDot > 0.5) return flDot; return 0.0; }
Dodanych wklejek: 4031
Powered By (Pav32) Pastebin © 2011