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: 12861
Powered By (Pav32) Pastebin © 2011


Dodatki SourceMod


