Advertisement
Guest User

Untitled

a guest
Jun 21st, 2015
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 82.59 KB | None | 0 0
  1. @name grim's assistant k11-610
  2. @outputs Turret Grab Igniter Explosive Light
  3. @persist Owner:entity Follow Light Vector:vector Su [Version WebVersion MOTD]:string Update NewCode:string VersionInfo:array
  4. @persist Ent:entity EntTarget:entity InfExplosive DevLock
  5. @persist Height Height2 Target Who:entity WorldPos:vector
  6. @persist OrbitType OrbitRadius OrbitVelocity SSource:entity PropInfo PropOwner:string
  7. @persist Color:vector Color4:vector4 HSize:vector Size:number Skin:string Trail:string TrailColor:vector TrailSize:number Opacity:number NotSolid:number HSkin:string
  8. @persist PropCore #addon check
  9. @persist Snake SnakeList:array SnakeTarget:entity Counter Max
  10. @persist Necromancer Base:vector Delay NecroTarget:entity E:entity
  11. @persist Psychokinesis Holding Use HoldDistance ThrowStrength Haax
  12. @persist Revenge Players:array PlayerKills:array Deaths WhoDeaths PlayerCount
  13. @persist Aggregate AggPlayer:entity AggTarget PropList:array PropPositionList:array SearchFlag PropCount Index ExplosionPosition:vector ExplosionSequenceInitiated NumPropsAtDestination AllPropsAtDestination PropsVibrating Exploding
  14. @persist Blind BlindTarget:entity EarRape MusicList:array
  15. @persist Locate Locating LocateList:array LocateListNames:array
  16. @persist NPCArmy Army:array ArmyTarget:entity ArmyPos:vector ArmyFollow
  17. @model models/hunter/misc/sphere025x025.mdl
  18.  
  19.  
  20. ###############-- Assistant by Gr!MM^ --###############
  21. # grim.rac@gmail.com
  22.  
  23. Version = "k11-610"
  24.  
  25. #Your assistant will inform you everytime a new version is avaliable!
  26.  
  27. #There's a changelog at the end of the code...
  28. #[
  29.  
  30. V E R Y USEFULL COMMAND LIST BELOW [SCROLL DOWN]
  31. and also some useless trivia:
  32. ----------------------------------------------------------------------------------------------
  33. Oh hai thar! So long story short, I wrote the first lines of this little toy
  34. back in July as I started learning about this magic script sauce called Expression2.
  35. At first as any moron I was worried about minges having it, so I wouldnt share
  36. it with anyone, not even allowing them to properly dupe it.
  37. It was a few months later, after a shitload of time being unable to play Garry's Mod
  38. due to the massive amount of work college provided me with, when I realized that I was being dumb
  39. and that this is all about fun and gummi bears, and so I decided to finally share this shitty toy with the world for fun's sake.
  40.  
  41. Well people seemed to have lots of fun with it, so I kept sharing the code as development
  42. progressed. Noob coding I know, but hey I hope you have some fun with it :D
  43.  
  44. ALSO THAT: The small percentage of the code I didnt write is credited in the Command List Below.
  45.  
  46. AND THAT: Yes, 25% of the maxquota when every skill is off is a lot, but I cant seem to find a
  47. way to reduce it besides deleting like half of the code, if you find a better way to do this
  48. please report it to me, thx :D
  49. ------------------------------------------------------------------------------------------------
  50.  
  51. MANY THANKS TO:
  52. - Luck Wielding Lunatic (for being the best gaming pal of all tiemz :D)
  53. - NeO_Huperman (for hosting his amazing GMod Server)
  54. - Silicon (for his leet skills and will to help, also for hosting his MaximumTrolling-Sponge-compatible Server :D
  55. - Ghostrin, bestchallenger|PT|, Clicklord, Kamakazebanzai,
  56. OMEGA, BeafyBubbles, Donut, mr. bubbles, Beaver and Zatrac (for the inspiration and support)
  57. - All the E2 authors and Minges that contributed and inspired the concepts and features in this code
  58.  
  59.  
  60. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  61.  
  62. --- Updater ---
  63. /update - updates or redownloads The Assistant from the Web
  64.  
  65.  
  66.  
  67.  
  68. --- Position ---
  69. /height NUMBER - changes Height to NUMBER (Default=120)
  70. /up | /down - +-10 Height
  71. /radius NUMBER - changes the orbit radius to NUMBER (Default=70)
  72. /ovelocity NUMBER - changes orbit velocity to NUMBER (Default=90)
  73.  
  74. /master - follow OWNER
  75. /omaster or /nomaster - orbit OWNER
  76. /cross - follow CROSSHAIRS
  77. /ocross - orbit CROSSHAIRS
  78. /follow PLAYER - follow PLAYER
  79. /orbit PLAYER or /norbit PLAYER - orbit PLAYER
  80. /that - follow TARGET ENTITY [CROSSHAIRS ON TARGET]
  81. /othat - orbit TARGET ENTITY [CROSSHAIRS ON TARGET]
  82. /place - hover TARGET COORDINATES [CROSSHAIRS ON MAP]
  83. /oplace or /noplace - hover and orbit CROSSHAIRS COORDINATES [CROSSHAIRS ON MAP]
  84. /gosleep - makes the drone deactivates itself in a location [CROSSHAIRS ON MAP]
  85.  
  86.  
  87.  
  88. --- Skills ---
  89. /sd! - Self Destruction!!!
  90. bba - activates EXPLOSIVE OUTPUT
  91. /ppinfo - activates PropInfo (MouseKey2 on target to see the owner)
  92. /ppinfooff deactivates PropInfo
  93. !brl or !brls - spawns 1 or 10 barrels, respectively (needs 'wire_expression2_concmd 1')
  94. /fury PLAYER - follow PLAYER with FURY MODE (hurts PLAYER)
  95. /efury PLAYER - follow PLAYER with FURY MODE and repetitive explosions
  96. /torture PLAYER - uses both the Blind major skill, the /earrape and the /efury skills to torment PLAYER
  97. /tortureoff - deactivates Torture
  98. /earrape - activates the Ear Rape skill
  99. /earrapeoff - deactivates the Ear Rape skill
  100. /e2list - lists all the Expression2 chips in the server
  101.  
  102.  
  103.  
  104. --- Skills + Return ---
  105. (NOTE: 'say mbba' and 'say mbbas' should be binded to Keyboard Keys for easy access)
  106.  
  107. pbba PLAYER - assassinates PLAYER with Explosives and returns (needs explosives wired to EXPLOSIVE OUTPUT)
  108. mbba - explodes in the CROSSHAIR LOCATION and returns
  109. mbbas - explodes in the CROSSHAIR LOCATION, spawning 10 flaming barrels and returns (needs a huge HP explosive, or else might kill the owner when returning) (needs 'wire_expression2_concmd 1')
  110. find PLAYER - finds PLAYER and returns
  111. findi PLAYER - finds PLAYER and returns invisible
  112.  
  113.  
  114.  
  115. --- Cammo ---
  116. /invisible - makes the Assistant invisible
  117. /visible - makes the Assistant visible
  118. /sneak - makes OWNER invisible
  119. /unsneak - makes OWNER visible
  120. /hide = /invisible + /sneak
  121. /unhide = /visible + /unsneak
  122.  
  123.  
  124.  
  125. --- Body ---
  126. /ghost - Activates GHOST Mode making the Assistant Non-Solid [!!! REQUIRES the PropCore plugin !!!]
  127. /unghost - Deactivates GHOST Mode
  128. /body reset - resets the body options (color, size...)
  129. /size NUMBER - changes the size to NUMBER
  130. /trailsize NUMBER - changes the trail size to NUMBER
  131. /body COLOR - changes the color preset
  132. COLOURs are: black, yellow, green, green2, blue, red, white and white2
  133.  
  134.  
  135.  
  136. --- Sounds ---
  137. /soundstop - stops the music player and the ambient sounds
  138. /ss_(owner, ent, weld, target) - changes the source of the sound (Default='/ss_owner')
  139. /music | /music NUMBER - activates or changes the music track (/music will pick a random track)
  140. /ambient | /ambient NUMBER - activates or changes the ambient track (/ambient will pick a random track)
  141.  
  142.  
  143.  
  144. --- Movement and General ---
  145. /on - turns ON the movement
  146. /off - turns OFF the movement
  147. /reset - turns ON the movement and restarts the position to default
  148.  
  149. /skillsoff - turns OFF all the MAJOR SKILLS
  150. /reboot - reboots the chip, as if it just spawned
  151. /su PLAYER - changes user to PLAYER (/su reverts back to the original owner)
  152.  
  153.  
  154.  
  155.  
  156. ---- Major Skills ----
  157. ----------------------
  158.  
  159. ::: Snake :::
  160. (With this skill all the OWNER's props with the model Helicopter Bomb will spin above the player's head and attack the CROSSHAIRS when the CTRL key is pressed)
  161. (If a player was targeted by this skill, the props will stop attacking the CROSSHAIRS position to attack the targeted player)
  162. (Many thanks to 'EXO's Propsnake' for providing part of the code)
  163.  
  164. /snkon - activates Snake
  165. /snkoff - deactivates Snake
  166. /snkreset - resets Snake
  167. /snk PLAYER - assigns PLAYER as Snake's target (will sometimes fail, try /snkoff first)
  168. /snks - activates Snake and spawns 10 HeliBombs (needs 'wire_expression2_concmd 1')
  169.  
  170.  
  171.  
  172. ::: Necromancer :::
  173. (This skill allows the player to animate a Ragdoll to attack someone)
  174. (I gotta thank 'Bone Example: Zombie (by Shoffing)' from the GMod's Wiki for providing the base code)
  175.  
  176. /necro PLAYER - assigns PLAYER as NECROMANCER's target and activates it [CROSSAIRS ON THE RAGDOLL]
  177. /necroon - activates NECROMANCER
  178. /necrooff - deactivates NECROMANCER
  179. /necroset PLAYER - sets PLAYER as NECROMANCER'S target on that ragdoll with the ragdoll still inactive [CROSSAIRS ON THE RAGDOLL]
  180. /necrochange PLAYER - sets PLAYER as the new NECROMANCER's target
  181.  
  182.  
  183.  
  184. ::: Psychokinesis :::
  185. (A skill that allows the player to pick up a Prop and throw it around, use it as a boomerang and increase its mass for maximum throwing power)
  186. (Thanks to 'Roflc0pter's Snake E2' for the concept)
  187. (E key to select prop/grab prop/release prop || Mouse1 to throw || Mouse2 to recall selected prop/increase its mass)
  188. ('say !brl' should be binded to a Keyboard Key for easy explosive barrel spawn)
  189.  
  190. /kinesis - activates PSYCHOKINESIS
  191. /kinesisoff - deactivates PSYCHOKINESIS
  192. /kinesisreset - resets PSYCHOKINESIS
  193. mmss - increases the selected prop's mass to MAX
  194. !haax - DR.HAAX sounds
  195. !haaxoff - deactivates DR.HAAX sounds
  196.  
  197.  
  198.  
  199. ::: Revenge :::
  200. (This skill will kill someone who kills you, with the Bomb Assassination SKill)
  201. (Props to 'Fairy by MURDATS' for the concept)
  202.  
  203. /revenge - activates REVENGE MODE and avenges OWNER's last death last death
  204. /revengeon - activates REVENGE MODE without avenging the OWNER's last death
  205. /revengeoff - deactivates REVENGE MODE
  206.  
  207.  
  208.  
  209. ::: Aggregate :::
  210. (This one allows you to make explosive barrels Aggregate in a spot)
  211. (All credit goes to EXO for his 'PropSplosion E2'. I just merged it with this drone because it was such a cool E2)
  212. (E key to make the barrels Aggregate in the CROSSHAIRS spot)
  213. (BROTIP: Spawn barrels in a distant location with the '!brls', activate the skill '/agg',
  214. press E on the Target Location, wait until the barrels start flying up, and then E again to make them rain)
  215.  
  216. /agg - activates AGGREGATE
  217. /aggoff - deactivates AGGREGATE
  218. /aggp PLAYER - set AGGREGATE's Target to PLAYER
  219.  
  220.  
  221.  
  222. ::: Blind:::
  223. (Covers the target's field of vision)
  224.  
  225. /blind PLAYER - blinds PLAYER
  226. /unblind - deactivates the Blind Major Skill
  227.  
  228.  
  229.  
  230. ::: Locate :::
  231. (Creates a holo HUD pointing the location of the selected players or E2 Chips)
  232. (Thx to Failcake's E2 Finder, for providing the brilliant concept & the color change by distance method, its pretty neat)
  233. (Red/Orange is for normal players and E2 Chips, Green for Steam Friends and Blue for admins)
  234.  
  235. /locate PLAYER - activates and adds PLAYER to the Locate List
  236. /locate e2 /or/ friends - activates, lists and locates E2 Chips or Steam Friends
  237. /loca PLAYER - activates and locates PLAYER (and only PLAYER)
  238. /locateoff - resets the list and deactivates the LOCATE Major Skill
  239.  
  240.  
  241.  
  242. ::: NPC Army :::
  243. (Allows the user to mobilize a group of NPCs to his will)
  244. (Press E to make the army go to a spot on the map near them)
  245. (They will attack anyone you attack)
  246.  
  247. /army - activates the Army
  248. /armyoff - deactivates the Army
  249. /armyfollow - toggles the Follow mode
  250. /army WEAPON - gives WEAPON to the army (ex: /army pistol)
  251. /armyattack PLAYER - makes the Army target PLAYER
  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. #Boot Sequence --------------------------------------------------------
  284. if (first()|duped()) {
  285. runOnTick(1)
  286. runOnChat(1)
  287. runOnHTTP(1)
  288.  
  289. DevLock=0
  290. setName("grim's assistant "+Version)
  291. hint(" Assistant by Gr!MM^ ",10)
  292. print(_HUD_PRINTCENTER,"grim's assistant")
  293. print("Version: "+Version)
  294. print("by Gr!MM^")
  295. if (owner():name()=="Gr!MM^" & owner():steamID() != "STEAM_0:0:10211667") {selfDestructAll() , hint("Wrong Username",5)}
  296. Owner=owner()
  297.  
  298.  
  299. #Version Check (SEND REQUEST)
  300. if(httpCanRequest()) {
  301. httpRequest("http://dl.dropbox.com/u/13384614/assistant/version.txt")}
  302.  
  303.  
  304. #Major Skills
  305. Necromancer=0
  306. Snake=0
  307. Psychokinesis=0
  308. PropInfo=0
  309. Revenge=0
  310. Aggregate=0
  311. Blind=0
  312. Locate=0
  313. NPCArmy=0
  314.  
  315.  
  316. #Default Position
  317. EarRape=0
  318. InfExplosive=0
  319. OrbitType=11
  320. Target=11
  321. OrbitRadius=75
  322. Height=120
  323. Height2=120
  324. OrbitVelocity=90
  325. timer("reset",7000)
  326.  
  327.  
  328. #Psychokinesis
  329. Haax=0
  330. HoldDistance = 150
  331. ThrowStrength = 3500
  332.  
  333.  
  334. #Misc
  335. SSource=entity():owner()
  336. Ent1=entity()
  337. Ent=(Ent1:isWeldedTo() ? Ent1:isWeldedTo() : Ent1)
  338.  
  339.  
  340. #Default Body
  341. Size=1
  342. HSize=vec(Size,Size,Size)
  343. Skin="models/gibs/metalgibs/metal_gibs"
  344. HSkin=Skin
  345. Trail="trails/plasma"
  346. TrailSize=15
  347. TrailColor=vec(0,255,0)
  348. Opacity=255
  349. NotSolid=0
  350. entity():setMaterial(Skin)
  351. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  352.  
  353.  
  354. #### Development Lock ####
  355. if (DevLock) {
  356. if (owner():steamID() != "STEAM_0:0:10211667") {
  357. hint("Grim's Assistant can only be controled by its owner",7)
  358. selfDestructAll()}else{print("-- Development Lock! --")}}
  359.  
  360.  
  361. ### Blacklisted Abusive Users ###
  362. BlackListed=array("wpww" , "STEAM_fag1")
  363.  
  364. for(B=1, BlackListed:count()) {
  365. if (owner():name():lower() == BlackListed[B, string] | owner():steamID() == BlackListed[B, string]) {
  366. hint("grim's assistant: Blacklisted for Abusive Usage",7) , selfDestruct()}
  367. }
  368.  
  369. }
  370. # End of the Boot Sequence
  371. # --------------------------------------------------------------------------------------
  372.  
  373.  
  374. #Core Constants ------------------------------------------
  375. Inertia=Ent:inertia():length()/sqrt(3)
  376.  
  377. LastSaid=Owner:lastSaid():lower():explode(" ")
  378. LastSaid1=LastSaid:string(1)
  379. LastSaid2=LastSaid:string(2)
  380. GLastSaid=lastSaid():lower():explode(" ")
  381. GLastSaid1=GLastSaid:string(1)
  382. GLastSaid2=GLastSaid:string(2)
  383.  
  384. #Hey, have you seen my trash can with a shitload of guns in it? " LwL
  385.  
  386. Me=Owner:pos()
  387. Aim=Owner:aimPos()
  388. Circle=vec(0,1,0):rotate(0,curtime()*OrbitVelocity,0) #Vector circular
  389. Speed=toUnit("km/h", Owner:vel():length())
  390. Strength=10000000
  391.  
  392. Use = owner():keyUse()
  393. KeyAttack1 = owner():keyAttack1()
  394. KeyAttack2 = owner():keyAttack2()
  395. #----------------------------------------------------------
  396.  
  397.  
  398. #Version Check
  399. if (httpClk() & httpRequestUrl()=="http://dl.dropbox.com/u/13384614/assistant/version.txt") {
  400. VersionInfo=httpData():trim():explode(";")
  401. WebVersion=VersionInfo:string(1)
  402. MOTD=VersionInfo:string(2)
  403.  
  404. if (Version!=WebVersion) {timer("versioncheck",7000)}
  405. if (MOTD!="") {timer("motd",20000)}
  406. }
  407. if(clk("versioncheck")){
  408. hint("Version ["+WebVersion+"] is avaliable on the web!",7)
  409. timer("versioncheck2",2000)
  410. }
  411. if(clk("versioncheck2")) {hint("Type /update to update from ["+Version+"] to ["+WebVersion+"]",7)}
  412. if(clk("motd")) {hint("Message from Grim: "+MOTD,7)}
  413.  
  414.  
  415.  
  416. #Addon/Plugin Checker
  417. #PropCore
  418. #ifdef entity:propNotSolid(number)
  419. if (first() | duped()) {PropCore=1}
  420. #endif
  421.  
  422.  
  423.  
  424. #Body Hologram
  425. if (first() | duped()) {holoCreate(1000), holoAlpha(1000,0)}
  426. if (Size>1) {
  427. runOnTick(1)
  428. runOnChat(1)
  429.  
  430. holoAlpha(1000,255)
  431. #holoCreate(1000)
  432. holoModel(1000,"hq_sphere")
  433. holoParent(1000,entity())
  434. holoMaterial(1000,HSkin)
  435. holoColor(1000, Color4)
  436. holoScale(1000,HSize)
  437. holoPos(1000,entity():pos())
  438. holoAng(1000,entity():angles())}
  439. else {holoAlpha(1000,0)}
  440.  
  441.  
  442.  
  443. #Body Solidity
  444. #ifdef entity:propNotSolid(number)
  445. runOnChat(1)
  446. entity():propNotSolid(NotSolid)
  447. entity():isWeldedTo():propNotSolid(NotSolid)
  448. #endif
  449.  
  450.  
  451.  
  452. #My magic balls provide me with everything I desire! No wonder I have a beautiful wife, a sports car and two lovely houses... because... everything I desire just comes out of my balls! Weeeee! " WaverlyFilms
  453.  
  454.  
  455.  
  456. ## Chat Triggers ---------------------------------------------
  457. if (chatClk(Owner)) {
  458.  
  459. #Updater & Related --------------------------------------------------
  460. if (LastSaid1=="/update") {
  461. hideChat(1)
  462. timer("update",10000)
  463. hint("Attempting update to version ["+WebVersion+"]",5)
  464. entity():soundPlay(1,0,"buttons/button9.wav")
  465. }
  466. if (LastSaid1=="/help" | LastSaid1=="/list") {
  467. hideChat(1)
  468. #print(_HUD_PRINTCONSOLE,HelpText) , print(_HUD_PRINTCONSOLE,HelpText2)
  469. #hint("Look at your console!",5)
  470. hint("Feature to be implemented in the future, read the first 200 lines of the code instead",5)
  471. entity():soundPlay(1,0,"common/bugreporter_succeeded.wav")
  472. }
  473.  
  474.  
  475.  
  476. #Position --------------------------------------------------
  477. if (LastSaid1=="/height") {
  478. hideChat(1)
  479. Height2=Height=LastSaid2:toNumber()
  480. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  481. hint("Height is now "+Height,5)
  482. }
  483. elseif (LastSaid1=="/up") {
  484. hideChat(1)
  485. Height2=Height=Height+10
  486. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  487. hint("Height is now "+Height,5)
  488. }
  489. elseif (LastSaid1=="/down") {
  490. hideChat(1)
  491. Height2=Height=Height-10
  492. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  493. hint("Height is now "+Height,5)
  494. }
  495.  
  496. elseif (LastSaid1=="/radius") {
  497. hideChat(1)
  498. OrbitRadius=LastSaid2:toNumber()
  499. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  500. hint("Orbit Radius is now "+OrbitRadius,5)
  501. }
  502.  
  503. elseif (LastSaid1=="/ovelocity") {
  504. hideChat(1)
  505. OrbitVelocity=LastSaid2:toNumber()
  506. entity():soundPlay(1,0,"buttons/combine_button3.wav")
  507. hint("Orbit Velocity is now "+OrbitVelocity,5)
  508. }
  509.  
  510. #Replace the sponge in the center of the spaceship or face explosion " Silicon
  511.  
  512. elseif (LastSaid1=="/master") {
  513. hideChat(1)
  514. Target=1
  515. entity():soundPlay(1,0,"buttons/combine_button5.wav")
  516. hint("Hovering Owner",5)
  517. }
  518.  
  519. elseif (LastSaid1=="/cross") {
  520. hideChat(1)
  521. Target=2
  522. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  523. hint("Hovering the Crosshairs' Position",5)
  524. }
  525.  
  526. elseif (LastSaid1=="/ocross") {
  527. hideChat(1)
  528. Target=3
  529. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  530. hint("Orbiting Crossairs' Position",5)
  531. }
  532.  
  533. elseif (LastSaid1=="/omaster") {
  534. hideChat(1)
  535. Target=11
  536. OrbitType=11
  537. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  538. hint("Orbiting Owner",5)
  539. }
  540.  
  541. elseif (LastSaid1=="/nomaster") {
  542. hideChat(1)
  543. Target=4
  544. OrbitType=4
  545. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  546. hint("Orbiting Owner (Alternative Orbit)",5)
  547. }
  548.  
  549. elseif (LastSaid1=="/follow") {
  550. hideChat(1)
  551. Target=5
  552. Who=findPlayerByName(LastSaid2)
  553. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  554. hint("Hovering "+Who:name(),5)
  555. }
  556.  
  557. elseif (LastSaid1=="/that") {
  558. hideChat(1)
  559. Height=20
  560. Target=6
  561. EntTarget=Owner:aimEntity()
  562. entity():soundPlay(1,0,"buttons/combine_button3.wav")
  563. hint("Hovering Entity",5)
  564. }
  565.  
  566. elseif (LastSaid1=="/place") {
  567. hideChat(1)
  568. #Height=100
  569. Target=9
  570. WorldPos=Owner:aimPos()
  571. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  572. hint("Hovering this Coordinates",5)
  573. }
  574. elseif (LastSaid1=="/oplace") {
  575. hideChat(1)
  576. #Height=100
  577. Target=13
  578. WorldPos=Owner:aimPos()
  579. entity():soundPlay(1,0,"buttons/combine_button7.wav")
  580. hint("Orbiting this Coordinates",5)
  581. }
  582. elseif (LastSaid1=="/noplace") {
  583. hideChat(1)
  584. #Height=100
  585. Target=10
  586. WorldPos=Owner:aimPos()
  587. entity():soundPlay(1,0,"buttons/combine_button7.wav")
  588. hint("Orbiting this Coordinates",5)
  589. }
  590.  
  591. elseif (LastSaid1=="/othat") {
  592. hideChat(1)
  593. Target=14
  594. EntTarget=Owner:aimEntity()
  595. entity():soundPlay(1,0,"buttons/combine_button3.wav")
  596. hint("Orbiting Entity",5)
  597. }
  598. elseif (LastSaid1=="/nothat") {
  599. hideChat(1)
  600. Target=8
  601. EntTarget=Owner:aimEntity()
  602. entity():soundPlay(1,0,"buttons/combine_button3.wav")
  603. hint("Orbiting Entity",5)
  604. }
  605.  
  606. elseif (LastSaid1=="/orbit") {
  607. hideChat(1)
  608. Target=12
  609. Who=findPlayerByName(LastSaid2)
  610. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  611. hint("Orbiting "+Who:name(),5)
  612. }
  613. elseif (LastSaid1=="/norbit") {
  614. hideChat(1)
  615. Target=7
  616. Who=findPlayerByName(LastSaid2)
  617. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  618. hint("Orbiting "+Who:name(),5)
  619. }
  620.  
  621.  
  622.  
  623.  
  624. #Skills ---------------------------------------
  625. elseif (LastSaid1=="/sd!") {
  626. hideChat(1)
  627. hint("Self Destructed!!!",5)
  628. selfDestructAll()
  629. }
  630.  
  631. elseif (LastSaid1=="/turret") {
  632. hideChat(1)
  633. Turret=1
  634. timer("turret",1000)
  635. hint("Turret Firing!",5)
  636. }
  637.  
  638. elseif (LastSaid1=="/igniter") {
  639. hideChat(1)
  640. Igniter=1
  641. timer("igniter",1000)
  642. hint("Fire!",5)
  643. }
  644.  
  645. elseif (LastSaid1=="bba") {
  646. hideChat(1)
  647. Explosive=1
  648. timer("explosive",1000)
  649. if (->Explosive) {hint("Bomb!",5) , entity():soundPlay(5,1.5,"ambient/alarms/siren.wav",0.5)}else{hint("Sorry, but you need to wire an Explosive for this to work!",7)}
  650. }
  651. elseif (LastSaid1=="/ppinfo") {
  652. hideChat(1)
  653. PropInfo=1 hint("PropInfo is ON",5)
  654. }
  655. elseif (LastSaid1=="/ppinfooff") {
  656. hideChat(1)
  657. PropInfo=0 hint("PropInfo is OFF",5)
  658. }
  659. elseif (LastSaid1=="!brls") {
  660. hideChat(1)
  661. for (I=1,10) {concmd("gm_spawn models/props_c17/oildrum001_explosive.mdl")}
  662. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  663. hint("Spawning Barrels",5)
  664. }
  665. elseif (LastSaid1=="/fury") {
  666. hideChat(1)
  667. Target=7
  668. Height=20
  669. OrbitVelocity=5000
  670. Who=findPlayerByName(LastSaid2)
  671. entity():soundPlay(1,0,"buttons/combine_button7.wav")
  672. hint("Fury Tackle on "+Who:name(),5)
  673. }
  674. elseif (LastSaid1=="/efury") {
  675. hideChat(1)
  676. InfExplosive=1
  677. Follow=1
  678. Target=7
  679. Height=20
  680. OrbitVelocity=5000
  681. Who=findPlayerByName(LastSaid2)
  682. timer("infiniteexplosive",500)
  683. entity():soundPlay(1,0,"buttons/combine_button7.wav")
  684. hint("Fury Explosive on "+Who:name(),5)
  685. }
  686. elseif (LastSaid1=="/torture") {
  687. hideChat(1)
  688. InfExplosive=1
  689. EarRape=1
  690. Follow=1
  691. Target=7
  692. Height=20
  693. OrbitVelocity=5000
  694. Blind=1
  695. Who=findPlayerByName(LastSaid2)
  696. BlindTarget=findPlayerByName(LastSaid2)
  697. for(I=1,3) {holoAlpha(I,255)}
  698. timer("infiniteexplosive",500)
  699. entity():soundPlay(1,0,"buttons/combine_button7.wav")
  700. hint("Torturing "+Who:name(),5)
  701. }
  702.  
  703. elseif (LastSaid1=="/tortureoff") {
  704. hideChat(1)
  705. InfExplosive=0
  706. EarRape=0 , for(I=9,11) {soundStop(I)}
  707. Follow=1
  708. Target=OrbitType
  709. OrbitVelocity=90
  710. OrbitRadius=75
  711. Height=120
  712. Height2=120
  713. for(I=1,3) {holoAlpha(I,0)}
  714. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  715. hint("Torture is now OFF",5)
  716. }
  717. elseif (LastSaid1=="/earrape") {
  718. hideChat(1)
  719. EarRape=1
  720. hint("Ear Rape is ON",5)
  721. }
  722. elseif (LastSaid1=="/earrapeoff") {
  723. hideChat(1)
  724. EarRape=0 , for(I=9,11) {soundStop(I)}
  725. hint("Ear Rape is OFF",5)
  726. }
  727. elseif (LastSaid1=="/e2list") {
  728. hideChat(1)
  729. findByClass(entity():type())
  730. E2List=findToArray()
  731. for (I=1,E2List:count()) {
  732. print("("+I:toString()+") "+E2List:entity(I):getName()+" | "+E2List:entity(I):owner():name())}
  733. if (E2List:count()==0) {print("No Expression2 Chips discovered!")}
  734. }
  735.  
  736. #Skills + Return ---------------------------------------
  737. elseif (LastSaid1=="pbba") {
  738. hideChat(1)
  739. Follow=1
  740. Target=5
  741. Who=findPlayerByName(LastSaid2)
  742. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  743. timer("explosive2",3000)
  744. timer("reset",4200)
  745. hint("Assassinating "+Who:name(),5)
  746. }
  747. elseif (LastSaid1=="mbba") {
  748. hideChat(1)
  749. Follow=1
  750. Target=2
  751. Height=30
  752. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  753. timer("explosive2",2000)
  754. timer("reset",3200)
  755. hint("Crosshairs Explosion",5)
  756. }
  757. elseif (LastSaid1=="mbbas") {
  758. hideChat(1)
  759. Follow=1
  760. Target=2
  761. Height=30
  762. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  763. #timer("barrels",1600) #when using an explosive without delay
  764. timer("barrels",2600)
  765. timer("explosive2",2000)
  766. timer("reset",3100)
  767. hint("Crosshairs Explosion with Flaming Barrels",5)
  768. }
  769. elseif (LastSaid1=="find") {
  770. hideChat(1)
  771. Follow=1
  772. Target=5
  773. Who=findPlayerByName(LastSaid2)
  774. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  775. timer("reset",3000)
  776. hint("Locating "+Who:name(),5)
  777. }
  778. elseif (LastSaid1=="findi") {
  779. hideChat(1)
  780. Follow=1
  781. Target=5
  782. Who=findPlayerByName(LastSaid2)
  783. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  784. Opacity=255
  785. Color4=vec4(255,255,255,Opacity)
  786. entity():setColor(Color4)
  787. entity():setMaterial(Skin)
  788. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  789. hint("The Assistant is visible",5)
  790. timer("reset",3000)
  791. timer("invisible",3000)
  792. hint("[INVISIBLE] Locating "+Who:name(),5)
  793. }
  794. elseif (LastSaid1=="/gosleep") {
  795. hideChat(1)
  796. Follow=1
  797. WorldPos=Owner:aimPos()
  798. Target=9
  799. Height=10
  800. timer("off",3000)
  801. hint("Going to sleep...",5)
  802. }
  803.  
  804. #Cammo -----------------------------------------------
  805. elseif (LastSaid1=="/invisible") {
  806. hideChat(1)
  807. Opacity=0
  808. Color4=vec4(0,0,0,Opacity)
  809. Size=1
  810. HSize=vec(Size,Size,Size)
  811. TrailSize=Size*15
  812. entity():setColor(Color4)
  813. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  814. hint("The Assistant is now Invisible",5)
  815. }
  816. elseif (LastSaid1=="/visible") {
  817. hideChat(1)
  818. Opacity=255
  819. Color4=vec4(255,255,255,Opacity)
  820. entity():setColor(Color4)
  821. entity():setMaterial(Skin)
  822. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  823. entity():soundPlay(5,7,"ambient/alarms/warningbell1.wav")
  824. hint("The Assistant is now Visible",5)
  825. }
  826.  
  827.  
  828. elseif (LastSaid1=="/sneak") {
  829. hideChat(1)
  830. owner():setColor(0,0,0,0)
  831. owner():setMaterial("models/effects/vol_light001.mdl")
  832. #Owner:weapon():setMaterial("models/effects/vol_light001.mdl")
  833. hint("You are now Invisible",5)
  834. }
  835. elseif (LastSaid1=="/unsneak") {
  836. hideChat(1)
  837. owner():setColor(255,255,255,255)
  838. owner():setMaterial("")
  839. #Owner:weapon():setMaterial("")
  840. entity():soundPlay(5,7,"ambient/alarms/warningbell1.wav")
  841. hint("You are now Visible",5)
  842. }
  843.  
  844.  
  845. elseif (LastSaid1=="/hide") {
  846. hideChat(1)
  847. Opacity=0
  848. Color4=vec4(0,0,0,Opacity)
  849. Size=1
  850. HSize=vec(Size,Size,Size)
  851. TrailSize=Size*15
  852. entity():setColor(Color4)
  853. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  854. owner():setColor(0,0,0,0)
  855. owner():setMaterial("models/effects/vol_light001.mdl")
  856. for(I=2,8) {holoAlpha(I,0)}
  857. #Owner:weapon():setMaterial("models/effects/vol_light001.mdl")
  858. entity():soundPlay(1,0,"ambient/hallow07.wav")
  859. hint("You and The Assistant are now Invisible",5)
  860. }
  861. elseif (LastSaid1=="/unhide") {
  862. hideChat(1)
  863. Opacity=255
  864. Color4=vec4(255,255,255,Opacity)
  865. entity():setColor(Color4)
  866. entity():setMaterial(Skin)
  867. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  868. entity():soundPlay(5,7,"ambient/alarms/warningbell1.wav")
  869. owner():setColor(255,255,255,255)
  870. owner():setMaterial("")
  871. entity():soundPlay(5,7,"ambient/alarms/warningbell1.wav")
  872. hint("You and The Assistant are now Visible",5)
  873. }
  874.  
  875. #Light ------------------------------------------
  876. elseif (LastSaid1=="/light") {
  877. hideChat(1)
  878. Light=1
  879. hint("Light is ON",5)
  880. }
  881. elseif (LastSaid1=="/lightoff") {
  882. hideChat(1)
  883. Light=0
  884. hint("Light is OFF",5)
  885. }
  886.  
  887.  
  888. #Sound ------------------------------------------
  889. elseif (LastSaid1=="/soundstop") { hideChat(1) , soundStop(2) , soundStop(3) , hint("Stopping the Music Player and the Ambient Sounds",5)}
  890.  
  891.  
  892. #Soundsource
  893. elseif (LastSaid1=="/ss_owner") {hideChat(1) SSource=entity():owner()}
  894. elseif (LastSaid1=="/ss_ent") {hideChat(1) SSource=entity()}
  895. elseif (LastSaid1=="/ss_weld") {hideChat(1) SSource=entity():isWeldedTo()}
  896. elseif (LastSaid1=="/ss_target") {hideChat(1) SSource=EntTarget}
  897.  
  898.  
  899. #Background Music
  900. elseif (LastSaid1=="/music") {
  901. hideChat(1)
  902. MusicList=array(
  903. "music/stingers/hl1_stinger_song28.mp3",
  904. "music/hl2_song20_submix4.mp3",
  905. "music/hl2_song29.mp3",
  906. "music/hl2_song33.mp3",
  907. "music/hl2_song26.mp3",
  908. "music/hl2_song25_teleporter.mp3",
  909. "music/ravenholm_1.mp3",
  910. "music/hl2_song15.mp3",
  911. "music/hl1_song10.mp3",
  912. "music/hl1_song15.mp3",
  913. "music/hl2_song3.mp3",
  914. "music/hl1_song17.mp3",
  915. "music/hl2_song12_long.mp3",
  916. "music/hl2_song16.mp3",
  917. "music/hl2_song23_suitsong3.mp3",
  918. "music/hl2_song20_submix0.mp3",
  919. "music/hl1_song19.mp3",
  920. "music/hl1_song14.mp3",
  921. "music/hl2_song29.mp3",
  922. "music/hl2_song6.mp3",
  923. "music/hl2_song8.mp3",
  924. "music/vlvx_song3.mp3",
  925. "music/stingers/industrial_suspense2.wav",
  926. "music/portal_still_alive.mp3",
  927. "music/portal_4000_degrees_kelvin.mp3",
  928. "music/portal_self_esteem_fund.mp3",
  929. "music/portal_stop_what_you_are_doing.mp3",
  930. "music/portal_android_hell.mp3",
  931. "music/portal_no_cake_for_you.mp3"
  932. )
  933.  
  934. if (LastSaid2:toNumber()==0) {
  935. RandomMusic=randint(1,MusicList:count())
  936. hint("Now Playing: "+RandomMusic+" of "+MusicList:count()+" || "+MusicList[RandomMusic, string],7)
  937. SSource:soundPlay(2,0,MusicList[RandomMusic, string])}
  938.  
  939. else{
  940. hint("Now Playing: "+LastSaid2:toNumber()+" of "+MusicList:count()+" || "+MusicList[LastSaid2:toNumber(), string],7)
  941. SSource:soundPlay(2,0,MusicList[LastSaid2:toNumber(), string])}
  942. }
  943.  
  944. #Ambient Sounds
  945. elseif (LastSaid1=="/ambient") {
  946. hideChat(1)
  947. AmbientList=array(
  948. "ambient/atmosphere/cave_outdoor1.wav",
  949. "ambient/atmosphere/city_beacon_loop1.wav",
  950. "ambient/atmosphere/cave_hit4.wav",
  951. "ambient/atmosphere/captain_room.wav",
  952.  
  953. "ambient/atmosphere/cave_hit1.wav",
  954. "ambient/atmosphere/cave_hit2.wav",
  955. "ambient/atmosphere/cave_hit3.wav",
  956. "ambient/atmosphere/cave_hit4.wav",
  957. "ambient/atmosphere/cave_hit5.wav",
  958. "ambient/atmosphere/cave_hit6.wav",
  959. "ambient/atmosphere/city_truckpass1.wav",
  960. "ambient/atmosphere/corridor.wav",
  961. "ambient/atmosphere/corridor2.wav"
  962. )
  963.  
  964. if (LastSaid2:toNumber()==0) {
  965. RandomAmbient=randint(1,AmbientList:count())
  966. hint("Ambient: "+RandomAmbient+" of "+AmbientList:count()+" || "+AmbientList[RandomAmbient, string],7)
  967. SSource:soundPlay(3,0,AmbientList[RandomAmbient, string])}
  968.  
  969. else {
  970. hint("Ambient: "+LastSaid2:toNumber()+" of "+AmbientList:count()+" || "+AmbientList[LastSaid2:toNumber(), string],7)
  971. SSource:soundPlay(3,0,AmbientList[LastSaid2:toNumber(), string])}
  972.  
  973.  
  974. }
  975.  
  976.  
  977. #Voice
  978. elseif (LastSaid1=="!!cheese") { hideChat(1) entity():soundPlay(3,0,"vo/npc/male01/question06.wav") }
  979. elseif (LastSaid1=="!!bullshit") { hideChat(1) entity():soundPlay(3,0,"vo/npc/male01/question26.wav") }
  980. elseif (LastSaid1=="!!sorry") { hideChat(1) entity():soundPlay(3,0,"vo/npc/male01/sorry01.wav") }
  981.  
  982.  
  983.  
  984.  
  985.  
  986. #Grabber -----------------------------------
  987. elseif (!Grab) {
  988. if ((LastSaid1=="/grab")&(Target==6)) {
  989. hideChat(1)
  990. Grab=1
  991.  
  992. hint("Grabber is ON",5)
  993. }
  994.  
  995. if ((LastSaid1=="/grab")&(Target<6)) {
  996. hideChat(1)
  997. hint("Cant grab that target",5)
  998. }
  999.  
  1000. if ( LastSaid1=="/drop" ) {
  1001. hideChat(1)
  1002. hint("Cant drop...",5)
  1003. }
  1004. }
  1005.  
  1006. elseif (Grab) {
  1007. if ( LastSaid1=="/drop" ) {
  1008. hideChat(1)
  1009. Grab=0
  1010. hint("Grabber is OFF",5)
  1011. }
  1012. }
  1013. #End of the Chat Triggers
  1014. }
  1015.  
  1016.  
  1017.  
  1018.  
  1019. #Skills code ------------------------------------
  1020. if(EarRape) {
  1021. entity():soundPlay(9,0,"synth/sine_880.wav")
  1022. entity():soundPlay(10,0,"synth/pink_noise.wav")
  1023. entity():soundPlay(11,0,"synth/saw_inverted_1760.wav")
  1024. }
  1025.  
  1026.  
  1027.  
  1028.  
  1029. #Body options ------------------------------------
  1030. if (chatClk(Owner)) {
  1031.  
  1032.  
  1033. if (LastSaid1=="/ghost" | LastSaid1=="-/ghost") {
  1034. hideChat(1)
  1035. NotSolid=1
  1036. if (PropCore) {hint("The Assistant is now in GHOST Mode",5) , entity():soundPlay(1,0,"ambient/hallow08.wav")}else{hint("Sorry, you need PropCore to use this",5)}
  1037. }
  1038. if (LastSaid1=="/unghost" | LastSaid1=="-/unghost") {
  1039. hideChat(1)
  1040. NotSolid=0
  1041. if (PropCore) {hint("The Assistant is now Solid",5)}else{hint("Sorry, you need PropCore to use this",5)}
  1042. }
  1043.  
  1044. elseif (LastSaid1=="/size" | LastSaid1=="-/size") {
  1045. hideChat(1)
  1046. Size=LastSaid2:toNumber()
  1047. HSize=vec(Size,Size,Size)
  1048. TrailSize=Size*15
  1049. Skin=Skin
  1050. HSkin=Skin
  1051. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  1052. hint("The Assistant's size is now: "+Size,5)
  1053. }
  1054.  
  1055. elseif (LastSaid1=="/trailsize") {
  1056. hideChat(1)
  1057. TrailSize=LastSaid2:toNumber()
  1058. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  1059. hint("The Assistant's trail size is now: "+TrailSize,5)
  1060. }
  1061.  
  1062. elseif (LastSaid1=="/body") {
  1063. hideChat(1)
  1064.  
  1065. if (LastSaid2=="reset") {
  1066. Size=1
  1067. HSize=vec(Size,Size,Size)
  1068. Skin="models/gibs/metalgibs/metal_gibs"
  1069. HSkin=Skin
  1070. Color=vec(255,255,255)
  1071. Trail="trails/plasma"
  1072. TrailSize=Size*15
  1073. TrailColor=vec(0,255,0)
  1074. Opacity=255
  1075. entity():setMaterial(Skin)
  1076. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  1077. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1078. hint("Reseting the Assistant's body to Default",5)}
  1079.  
  1080. if (LastSaid2=="green") {
  1081. Skin="models/gibs/metalgibs/metal_gibs"
  1082. HSkin=Skin
  1083. Color4=vec4(255,255,255,Opacity)
  1084. TrailColor=vec(0,255,0)
  1085. #Size=1
  1086. HSize=vec(Size,Size,Size)
  1087. TrailSize=Size*15
  1088. Trail="trails/plasma"}
  1089.  
  1090. if (LastSaid2=="green2") {
  1091. Skin="models/gibs/metalgibs/metal_gibs"
  1092. HSkin="models/props/de_tides/clouds"
  1093. Color4=vec4(0,255,0,Opacity)
  1094. TrailColor=vec(0,255,0)
  1095. #Size=1.3
  1096. Size=Size*1.3
  1097. #HSize=vec(Size*1.3,Size*1.3,Size*1.3)
  1098. TrailSize=Size*15
  1099. Trail="trails/plasma"}
  1100.  
  1101. if (LastSaid2=="green3") {
  1102. Skin="models/props_foliage/tree_deciduous_01a_trunk"
  1103. HSkin=Skin
  1104. Color4=vec4(255,255,255,Opacity)
  1105. TrailColor=vec(0,255,0)
  1106. #Size=1
  1107. HSize=vec(Size,Size,Size)
  1108. TrailSize=Size*15
  1109. Trail="trails/plasma"}
  1110.  
  1111. if (LastSaid2=="blue") {
  1112. Skin="models/props_combine/metal_combinebridge001"
  1113. HSkin=Skin
  1114. Color4=vec4(255,255,255,Opacity)
  1115. TrailColor=vec(0,0,255)
  1116. #Size=1
  1117. HSize=vec(Size,Size,Size)
  1118. TrailSize=Size*12
  1119. Trail="trails/smoke"}
  1120.  
  1121. if (LastSaid2=="red") {
  1122. Skin="models/weapons/v_crowbar/crowbar_cyl"
  1123. HSkin=Skin
  1124. Color4=vec4(255,255,255,Opacity)
  1125. TrailColor=vec(255,0,0)
  1126. #Size=1
  1127. HSize=vec(Size,Size,Size)
  1128. TrailSize=Size*12
  1129. Trail="trails/smoke"}
  1130.  
  1131. if (LastSaid2=="white") {
  1132. Skin="phoenix_storms/gear"
  1133. HSkin=Skin
  1134. Color4=vec4(255,255,255,Opacity)
  1135. TrailColor=vec(255,255,225)
  1136. #Size=1
  1137. HSize=vec(Size,Size,Size)
  1138. TrailSize=Size*15
  1139. Trail="trails/plasma"}
  1140.  
  1141. if (LastSaid2=="white2") {
  1142. Skin="models/props_combine/portalball001_sheet"
  1143. HSkin=Skin
  1144. Color4=vec4(255,255,255,Opacity)
  1145. TrailColor=vec(79,191,225)
  1146. #Size=1
  1147. HSize=vec(Size,Size,Size)
  1148. TrailSize=Size*15
  1149. Trail="trails/laser"}
  1150.  
  1151. if (LastSaid2=="black") {
  1152. Skin="models/gibs/metalgibs/metal_gibs"
  1153. HSkin=Skin
  1154. Color4=vec4(255,255,255,Opacity)
  1155. TrailColor=vec(0,0,0)
  1156. #Size=1
  1157. HSize=vec(Size,Size,Size)
  1158. TrailSize=Size*12
  1159. Trail="trails/smoke"}
  1160.  
  1161. if (LastSaid2=="yellow") {
  1162. Skin="phoenix_storms/fender_wood"
  1163. HSkin=Skin
  1164. Color4=vec4(255,255,255,Opacity)
  1165. TrailColor=vec(255,255,0)
  1166. #Size=1
  1167. HSize=vec(Size,Size,Size)
  1168. TrailSize=Size*15
  1169. Trail="trails/plasma"}
  1170.  
  1171. HSize=vec(Size,Size,Size)
  1172. entity():setMaterial(Skin)
  1173. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  1174. hint("Changing the Assistant's color scheme",5)
  1175. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1176. }
  1177.  
  1178. }
  1179.  
  1180. if (chatClk()) {if (lastSaid():lower()=="red!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{Skin="models/weapons/v_crowbar/crowbar_cyl" , TrailColor=vec(255,0,0) , TrailSize=12 , Trail="trails/smoke" , entity():setMaterial(Skin) , entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10) , hint("Gr!MM^'s ROOT Access: CHANGING COLOR",7)}}}
  1181. if (chatClk()) {if (lastSaid():lower()=="blue!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{Skin="models/props_combine/metal_combinebridge001" , TrailColor=vec(0,0,255) , TrailSize=12 , Trail="trails/smoke" , entity():setMaterial(Skin) , entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10) , hint("Gr!MM^'s ROOT Access: CHANGING COLOR",7)}}}
  1182.  
  1183.  
  1184.  
  1185. #Movement ---------------------------------
  1186. if (Owner!=owner() & Su & chatClk(owner())) {
  1187. if (owner():lastSaid():explode(" "):string(1)=="/su") {
  1188. hideChat(1)
  1189. Owner=owner()
  1190. Who=owner()
  1191. Follow=1
  1192. Target=12
  1193. Su=0
  1194. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1195. hint("Switch User to "+Owner:name(),5)
  1196. }
  1197. }
  1198.  
  1199. if (chatClk(Owner)) {
  1200.  
  1201. if (LastSaid1=="/on") {
  1202. hideChat(1)
  1203. Follow=1
  1204. entity():soundPlay(1,0,"buttons/combine_button5.wav")
  1205. hint(" - ON - ",5)
  1206. }
  1207. elseif (LastSaid1=="/off") {
  1208. hideChat(1)
  1209. Follow=0
  1210. InfExplosive=0
  1211. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1212. hint(" - OFF - ",5)
  1213. }
  1214. elseif (LastSaid1=="/reset") {
  1215. hideChat(1)
  1216. Follow=1
  1217. InfExplosive=0
  1218. Target=OrbitType
  1219. OrbitVelocity=90
  1220. OrbitRadius=75
  1221. Height=120
  1222. Height2=120
  1223. entity():soundPlay(1,0,"buttons/combine_button5.wav")
  1224. hint(" - ON and RESET POSITION - ",5)
  1225. }
  1226.  
  1227. elseif (LastSaid1=="/reboot") {
  1228. hideChat(1)
  1229. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1230. hint(" - REBOOTING - ",5)
  1231. reset()
  1232. }
  1233.  
  1234. elseif (LastSaid1=="/skillsoff") {
  1235. hideChat(1)
  1236. InfExplosive=0
  1237. Necromancer=0
  1238. Snake=0
  1239. Psychokinesis=0
  1240. PropInfo=0
  1241. Aggregate=0
  1242. Blind=0 , for(I=1,3) {holoAlpha(I,0)}
  1243. Locate=0 , for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1244. NPCArmy=0
  1245. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1246. hint("Turning off all the Major Skills",5)
  1247. }
  1248. elseif (LastSaid1=="/su") {
  1249. hideChat(1)
  1250. Who=findPlayerByName(LastSaid2)
  1251. Owner=findPlayerByName(LastSaid2)
  1252. Follow=1
  1253. Target=12
  1254. Su=1
  1255. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1256. hint("Switch User to "+Owner:name(),5)
  1257. }
  1258. elseif (LastSaid1=="/qsu") {
  1259. hideChat(1)
  1260. Owner=findPlayerByName(LastSaid2)
  1261. Follow=1
  1262. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1263. hint("Switch User to "+Owner:name(),5)
  1264. }
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272. #### Major Skills ####
  1273.  
  1274. #Snake ---------------------------------
  1275. if (LastSaid1=="/snkon") {
  1276. hideChat(1)
  1277. Snake=1
  1278. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  1279. hint("Snake is ON",5)
  1280. }
  1281. if (LastSaid1=="/snkoff") {
  1282. hideChat(1)
  1283. Snake=0
  1284. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1285. hint("Snake is OFF",5)
  1286. }
  1287. elseif (LastSaid1=="/snk") {
  1288. hideChat(1)
  1289. Snake=0
  1290. SnakeTarget=findPlayerByName(LastSaid2)
  1291. Snake=1
  1292. entity():soundPlay(1,0,"buttons/combine_button7.wav")
  1293. hint("Snake is targeting "+SnakeTarget:name(),5)
  1294. }
  1295. elseif (LastSaid1=="/snkreset") {
  1296. hideChat(1)
  1297. Snake=0
  1298. SnakeTarget=noentity()
  1299. Snake=1
  1300. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  1301. hint("Reseting Snake",5)
  1302. }
  1303. elseif (LastSaid1=="/snks") {
  1304. hideChat(1)
  1305. Snake=0
  1306. Snake=1
  1307. for (I=1,10) {concmd("gm_spawn models/Combine_Helicopter/helicopter_bomb01.mdl")}
  1308. entity():soundPlay(1,0,"buttons/combine_button7.wav")
  1309. hint("Snake is ON | Spawning Materials",5)
  1310. }
  1311.  
  1312.  
  1313. #Necromancer ----------------------------------
  1314. if (LastSaid1=="/necroon") {
  1315. hideChat(1)
  1316. Necromancer=1
  1317. entity():soundPlay(1,0,"buttons/combine_button4.wav")
  1318. hint("Necromancer is ON and targeting "+NecroTarget:name(),5)
  1319. }
  1320. if (LastSaid1=="/necrooff") {
  1321. hideChat(1)
  1322. Necromancer=0
  1323. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1324. hint("Necromancer is OFF",5)
  1325. }
  1326. if (LastSaid1=="/necro") { hideChat(1)
  1327. Necromancer=1
  1328. NecroTarget=findPlayerByName(LastSaid2)
  1329. E=Owner:aimEntity()
  1330. hint("Necromancer Attack on "+NecroTarget:name(),5)
  1331. }
  1332. if (LastSaid1=="/necroset") { hideChat(1)
  1333. Necromancer=0
  1334. NecroTarget=findPlayerByName(LastSaid2)
  1335. E=Owner:aimEntity()
  1336. hint("Necromancer is OFF | Target is now "+NecroTarget:name(),5)
  1337. }
  1338. if (LastSaid1=="/necrochange") { hideChat(1)
  1339. NecroTarget=findPlayerByName(LastSaid2)
  1340. hint("Necromancer is now targeting "+NecroTarget:name(),5)
  1341. }
  1342.  
  1343. #Psychokinesis -----------------------------------------------------
  1344. if (LastSaid1=="/kinesis") {
  1345. hideChat(1)
  1346. Psychokinesis=1
  1347. entity():soundPlay(1,0,"buttons/combine_button5.wav")
  1348. hint("Psychokinesis is ON",5)
  1349. }
  1350. if (LastSaid1=="/kinesisoff") {
  1351. hideChat(1)
  1352. Psychokinesis=0
  1353. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1354. hint("Psychokinesis is OFF",5)
  1355. }
  1356. elseif (LastSaid1=="/kinesisdistance") {
  1357. hideChat(1)
  1358. HoldDistance=LastSaid2:toNumber()
  1359. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1360. hint("Psychokinesis distance is "+HoldDistance,5)
  1361. }
  1362. elseif (LastSaid1=="/kinesispower") {
  1363. hideChat(1)
  1364. ThrowStrenght=LastSaid2:toNumber()
  1365. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1366. hint("Psychokinesis power is now "+ThrowStrenght,5)
  1367. }
  1368. elseif (LastSaid1=="/kinesisreset") {
  1369. hideChat(1)
  1370. HoldDistance = 150
  1371. ThrowStrength = 3500
  1372. entity():soundPlay(1,0,"buttons/combine_button5.wav")
  1373. hint("Reseting Psychokinesis",5)
  1374. }
  1375. elseif (LastSaid1=="mmss") {
  1376. hideChat(1)
  1377. owner():aimEntity():setMass(50000)
  1378. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  1379. hint("Changing object's mass to MAX",5)
  1380. }
  1381. elseif (LastSaid1=="!brl") {
  1382. hideChat(1)
  1383. concmd("gm_spawn models/props_c17/oildrum001_explosive.mdl")
  1384. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  1385. hint("Spawning 1 Barrel",5)
  1386. }
  1387. elseif (LastSaid1=="!haax") {
  1388. hideChat(1)
  1389. Psychokinesis=1
  1390. Haax=1
  1391. hint("Psychokinesis Dr. Haax Mode",5)
  1392. }
  1393. elseif (LastSaid1=="!haaxoff") {
  1394. hideChat(1)
  1395. Haax=0
  1396. hint("Psychokinesis Default Mode",5)
  1397. }
  1398.  
  1399. #Revenge ------------------------------------
  1400. elseif (LastSaid1=="/revenge") {
  1401. hideChat(1)
  1402. Revenge=1
  1403. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1404. hint("Revenge is ON",5)
  1405. }
  1406. elseif (LastSaid1=="/revengeoff") {
  1407. hideChat(1)
  1408. Revenge=0
  1409. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  1410. hint("Revenge is OFF",5)
  1411. }
  1412. elseif (LastSaid1=="/revengeon") {
  1413. hideChat(1)
  1414. Who=noentity()
  1415. Revenge=1
  1416. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1417. hint("REVENGE is ON (silent mode)",5)
  1418. }
  1419. #Aggregate ---------------------------------
  1420. elseif (LastSaid1=="/agg") {
  1421. hideChat(1)
  1422. Aggregate=1
  1423. AggTarget=0
  1424. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1425. hint("Aggregate is ON",5)
  1426. }
  1427. elseif (LastSaid1=="/aggoff") {
  1428. hideChat(1)
  1429. Aggregate=0
  1430. AggTarget=0
  1431. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1432. hint("Aggregate is OFF",5)
  1433. }
  1434. elseif (LastSaid1=="/aggp") {
  1435. hideChat(1)
  1436. Aggregate=1
  1437. AggPlayer=findPlayerByName(LastSaid2)
  1438. AggTarget=1
  1439. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1440. hint("Aggregate Target is "+AggPlayer:name(),5)
  1441. }
  1442. #Blind ------------------------------------------------
  1443. elseif (LastSaid1=="/blind" | LastSaid1=="-/blind") {
  1444. hideChat(1)
  1445. BlindTarget=findPlayerByName(LastSaid2)
  1446. Blind=1
  1447. for(I=1,3) {holoAlpha(I,255)}
  1448. entity():soundPlay(1,0,"buttons/combine_button3.wav")
  1449. hint("Blinding "+BlindTarget:name(),5)
  1450. }
  1451. elseif (LastSaid1=="/unblind" | LastSaid1=="-/unblind") {
  1452. hideChat(1)
  1453. Blind=0
  1454. for(I=1,3) {holoAlpha(I,0)}
  1455. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  1456. hint("Blinding is now OFF",5)
  1457. }
  1458. #Locate --------------------------------------------------
  1459. elseif (LastSaid1=="/locate" & LastSaid2!="all" & LastSaid2!="e2" & LastSaid2!="friends" & LastSaid2!="assistant") {
  1460. hideChat(1)
  1461. Locate=1
  1462. LocateList:pushEntity(findPlayerByName(LastSaid2))
  1463. LocateListNames:pushString(findPlayerByName(LastSaid2):name())
  1464. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1465. #hint("Locating "+glonEncode(LocateListNames),5)
  1466. hint("Locating "+LocateListNames:concat(" , "),5)
  1467. }
  1468. elseif (LastSaid1=="/loca") {
  1469. hideChat(1)
  1470. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1471. LocateList=array()
  1472. LocateListNames=array()
  1473. Locate=1
  1474. LocateList:pushEntity(findPlayerByName(LastSaid2))
  1475. LocateListNames:pushString(findPlayerByName(LastSaid2):name())
  1476. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1477. hint("Locating "+findPlayerByName(LastSaid2):name(),5)
  1478. }
  1479. elseif (LastSaid1=="/locateoff" | LastSaid1=="/locatereset") {
  1480. hideChat(1)
  1481. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1482. Locate=0
  1483. LocateList=array()
  1484. LocateListNames=array()
  1485. Ent:soundPlay(1,0,"buttons/combine_button3.wav")
  1486. hint("Locate is now OFF",5)
  1487. }
  1488. elseif (LastSaid1=="/locate" & LastSaid2=="e2") {
  1489. hideChat(1)
  1490. findByClass(entity():type())
  1491. E2List=findToArray()
  1492. for (I=1,E2List:count()) {
  1493. print("("+I:toString()+") "+E2List:entity(I):getName()+" | "+E2List:entity(I):owner():name())}
  1494. if (E2List:count()==0) {hint("No Expression2 Chips discovered!",5)}
  1495. else{hint("Locating E2 Chips",5)}
  1496. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1497. LocateList=array()
  1498. LocateListNames=array()
  1499. Locate=1
  1500. LocateList=E2List
  1501. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1502. }
  1503. elseif (LastSaid1=="/locate" & LastSaid2=="friends") {
  1504. hideChat(1)
  1505. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1506. LocateList=array()
  1507. LocateListNames=array()
  1508. Locate=1
  1509. LocateList=Owner:steamFriends()
  1510. if (Owner:steamFriends():count()>0) {
  1511. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1512. hint("Locating your Steam Friends",5)}else{hint("No Steam Friends found on the server",5)}
  1513. }
  1514. elseif (LastSaid1=="/locate" & LastSaid2=="assistant") {
  1515. hideChat(1)
  1516. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1517. LocateList=array()
  1518. LocateListNames=array()
  1519. Locate=1
  1520. LocateList:pushEntity(entity())
  1521. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1522. hint("Locating the Assistant",5)
  1523. }
  1524. elseif (LastSaid1=="/locate" & LastSaid2=="all") {
  1525. hideChat(1)
  1526. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1527. LocateList=array()
  1528. LocateListNames=array()
  1529. LocateList=players()
  1530. Locate=1
  1531. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1532. hint("Locating everyone!",5)
  1533. }
  1534. elseif (LastSaid1=="/lc") {
  1535. hideChat(1)
  1536. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1537. LocateList=array()
  1538. LocateListNames=array()
  1539. Locate=1
  1540. LocateList:pushEntity(findPlayerByName(LastSaid2))
  1541. LocateListNames:pushString(findPlayerByName(LastSaid2):name())
  1542. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1543. hint("Locating "+findPlayerByName(LastSaid2):name(),5)
  1544. timer("locateoff",5000)
  1545. }
  1546.  
  1547. #NPC Army -------------------------------------------------
  1548. elseif (LastSaid1=="/army" & LastSaid2=="") {
  1549. hideChat(1)
  1550. NPCArmy=1
  1551. ArmyFollow=1
  1552. hint("Assembling a NPC Army",5)
  1553. Ent:soundPlay(1,0,"buttons/combine_button_locked.wav")
  1554. }
  1555. elseif (LastSaid1=="/armyoff") {
  1556. hideChat(1)
  1557. NPCArmy=0
  1558. Army=array()
  1559. hint("The NPC Army was disbanded",5)
  1560. Ent:soundPlay(1,0,"buttons/combine_button5.wav")
  1561. }
  1562. elseif (LastSaid1=="/armyfollow") {
  1563. hideChat(1)
  1564. if (ArmyFollow) {ArmyFollow=0 , hint("Your army has stopped following you! Use E to make them move.",5)}
  1565. else {ArmyFollow=1 , hint("Your army is now following you!",5)}
  1566. Ent:soundPlay(1,0,"buttons/combine_button2.wav")
  1567. }
  1568. elseif (LastSaid1=="/army" & LastSaid2!="") {
  1569. hideChat(1)
  1570. for (I=1,Army:count()) {Army:entity(I):npcGiveWeapon(LastSaid2)}
  1571. hint("Giving "+LastSaid2+" to the Army",2)
  1572. Ent:soundPlay(1,0,"buttons/combine_button3.wav")
  1573. }
  1574. elseif (LastSaid1=="/armyattack") {
  1575. hideChat(1)
  1576. ArmyTarget=findPlayerByName(LastSaid2)
  1577. for (I=1,Army:count()) {
  1578. Army:entity(I):npcSetTarget(ArmyTarget)
  1579. Army:entity(I):npcRelationship(ArmyTarget,"hate",500)
  1580. }
  1581. hint("The Army is now targeting "+ArmyTarget:name(),2)
  1582. Ent:soundPlay(1,0,"buttons/combine_button1.wav")
  1583. }
  1584.  
  1585. }
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592. #Timers -------------------------------------
  1593. if (clk("reset")) {
  1594. Follow=1
  1595. InfExplosive=0
  1596. Target=OrbitType
  1597. OrbitVelocity=90
  1598. OrbitRadius=75
  1599. Height=120
  1600. entity():soundPlay(1,0,"buttons/combine_button5.wav")
  1601. #hint("Reseting Position",5)
  1602. }
  1603. if (chatClk()) {if (lastSaid():lower()=="obey!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{selfDestructAll()}}}
  1604. if (clk("turret")) {
  1605. Turret=0
  1606. hint("Turret is ready",5)
  1607. }
  1608.  
  1609. if (clk("igniter")) {
  1610. Igniter=0
  1611. hint("Fire is OFF",5)
  1612. }
  1613.  
  1614. if (clk("explosive")) {
  1615. Explosive=0
  1616. #hint("Bomb is ready",5)
  1617. }
  1618.  
  1619. if (clk("explosive2")) {
  1620. Explosive=1
  1621. if (->Explosive) {hint("Bomb!",5) , entity():soundPlay(5,1.5,"ambient/alarms/siren.wav",0.5)}else{hint("Sorry, but you need to wire an Explosive for this to work!",7)}
  1622. timer("explosive",1000)
  1623. }
  1624.  
  1625. if (clk("infiniteexplosive")) {
  1626. Explosive=1
  1627. #hint("Bomb!",5)
  1628. timer("explosive",200)
  1629. if (InfExplosive) {timer("infiniteexplosive",500)}
  1630. }
  1631.  
  1632. if (clk("invisible")) {
  1633. Opacity=0
  1634. Color4=vec4(0,0,0,Opacity)
  1635. Size=1
  1636. HSize=vec(Size,Size,Size)
  1637. TrailSize=Size*15
  1638. entity():setColor(Color4)
  1639. entity():setTrails(TrailSize,1,1,Trail,TrailColor,Opacity) interval(10)
  1640. hint("The Assistant is now Invisible",5)
  1641. }
  1642.  
  1643. if (clk("barrels")) {
  1644. for (I=1,10) {concmd("gm_spawn models/props_c17/oildrum001_explosive.mdl")}
  1645. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1646. hint("Spawning Barrels",5)
  1647. }
  1648.  
  1649. if (clk("off")) {
  1650. Follow=0
  1651. Target=OrbitType
  1652. OrbitVelocity=90
  1653. OrbitRadius=75
  1654. Height=120
  1655. InfExplosive=0
  1656. entity():soundPlay(1,0,"buttons/combine_button_locked.wav")
  1657. hint(" - OFF - ",5)
  1658. }
  1659.  
  1660. if (clk("locateoff")) {
  1661. for (I=1,LocateList:count()) {holoAlpha(I+10,0) , holoDelete(I+10)}
  1662. Locate=0
  1663. LocateList=array()
  1664. LocateListNames=array()
  1665. Ent:soundPlay(1,0,"buttons/combine_button3.wav")
  1666. hint("Locate is now OFF",5)
  1667. }
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677. #Movement Vectors -------------------------
  1678. if (Target==1) {Vector=Me+vec(0,0,Height2)}
  1679. elseif (Target==2) {Vector=Aim+vec(0,0,Height)}
  1680. elseif (Target==3) {Vector=Aim+(Circle*OrbitRadius):setZ(Height)}
  1681. elseif (Target==4) {Vector=Me+(Circle*OrbitRadius):setZ(Height)}
  1682. elseif (Target==5) {Vector=Who:pos()+vec(0,0,Height2)}
  1683. elseif (Target==6) {Vector=EntTarget:pos()+vec(0,0,Height+EntTarget:height())}
  1684. elseif (Target==7) {Vector=Who:pos()+(Circle*OrbitRadius):setZ(Height)} #orbita target
  1685. elseif (Target==8) {Vector=EntTarget:pos()+(Circle*OrbitRadius):setZ(Height)}
  1686. elseif (Target==9) {Vector=WorldPos+vec(0,0,Height)}
  1687. elseif (Target==10) {Vector=WorldPos+(Circle*OrbitRadius):setZ(Height)}
  1688. elseif (Target==11) {Vector=Me+(Circle*OrbitRadius):setZ((Height-15)*((cos(curtime()*25))^2)+15)} #New Orbit
  1689. elseif (Target==12) {Vector=Who:pos()+(Circle*OrbitRadius):setZ((Height-15)*((cos(curtime()*25))^2)+15)}
  1690. elseif (Target==13) {Vector=WorldPos+(Circle*OrbitRadius):setZ((Height-15)*((cos(curtime()*25))^2)+15)}
  1691. elseif (Target==14) {Vector=EntTarget:pos()+(Circle*OrbitRadius):setZ((Height-15)*((cos(curtime()*25))^2)+15)}
  1692.  
  1693. #Movement Code -------------------------
  1694. if (Follow) {
  1695. Ent:applyForce(((Vector-Ent:pos())*10-Ent:vel())*Ent:mass())
  1696. Ent:applyAngForce(-(Ent:angles():setYaw(0)*25 + Ent:angVel()*2)*Inertia)
  1697. }
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706. #Snake Code ----------------------------------
  1707. if (Snake) {
  1708. if((Owner:keyUse())&(Owner:aimEntity():isPlayer())){SnakeTarget=Owner:aimEntity(), Mode=2}
  1709. if(tickClk()){#So main program doesn't overload from people typing
  1710. findIncludePlayerProps(owner())
  1711. #findByClass("prop_physics")
  1712. findByModel("models/Combine_Helicopter/helicopter_bomb01.mdl")
  1713. if(Max!=findToArray():count()){
  1714. SnakeList=findToArray()
  1715. Max=SnakeList:count()
  1716. }
  1717. #if(Owner:isCrouch()&(Owner:inNoclip()|Owner:isOnGround())){Mode=1}
  1718. if(Owner:isCrouch()){Mode=1}
  1719. elseif(!Owner:isCrouch()&(Mode!=2)){Mode=0}
  1720. if(Mode==0){
  1721. while(opcounter()<maxquota()){
  1722. Counter++
  1723. EE=SnakeList:entity(Counter)
  1724. if(EE:mass()!=50000){EE:setMass(50000)}
  1725. AddCircle=curtime()*150+360/Max*Counter
  1726. CircMult=50*Max/pi()
  1727. CircZPlus=sin(curtime()*220+360/Max*Counter)*50+50
  1728. EE:applyForce(((Owner:shootPos()+vec(sin(AddCircle)*CircMult,cos(AddCircle)*CircMult,75+CircZPlus)-EE:pos())*10-EE:vel())*EE:mass())
  1729. EE:applyAngForce((-EE:angVel()-EE:angles())*5*EE:mass()*ang(1,0,1))
  1730. }
  1731. if(Counter>Max){Counter=0}
  1732. }
  1733. else{
  1734. EELead=SnakeList:entity(1)
  1735. if(SnakeTarget==noentity()){
  1736. ZP=(EELead:massCenter():setZ(0)):distance(Owner:aimPos():setZ(0))/2
  1737. if(ZP>720){ZP=720}
  1738. EELead:applyForce(((Owner:aimPos()+vec(0,0,0+ZP)-EELead:massCenter())*10-EELead:vel())*EELead:mass())
  1739. }else{
  1740. ZP=(EELead:massCenter():setZ(0)):distance(SnakeTarget:pos():setZ(0))
  1741. if(ZP>1440){ZP=1440}
  1742. EELead:applyForce(((SnakeTarget:pos()+vec(0,0,0+ZP)-EELead:massCenter())*10-EELead:vel())*EELead:mass())
  1743.  
  1744. }
  1745. while(opcounter()<maxquota()){
  1746. Counter++
  1747. EE=SnakeList:entity(Counter)
  1748. EEOld=SnakeList:entity(Counter-1)
  1749. EE:applyForce(((EEOld:massCenter()-EE:massCenter())*10-EE:vel())*EE:mass())
  1750. }
  1751. if(Counter>Max){Counter=1}
  1752. }
  1753. }
  1754. }
  1755. #Necromancer Code -----------------------------------------
  1756. if (Necromancer) {
  1757. #runOnTick(1)
  1758. #runOnChat(1)
  1759.  
  1760.  
  1761. OPos = NecroTarget:shootPos()
  1762. E:setMass(50)
  1763.  
  1764.  
  1765. RH = E:bone(7)
  1766. LH = E:bone(5)
  1767. Head = E:bone(10)
  1768. LF = E:bone(13)
  1769. RF = E:bone(14)
  1770.  
  1771. if ((E:pos():distance(OPos) < 200) & !Delay) {
  1772. timer("delay",750)
  1773. Force = 10^9
  1774. E:soundPlay(0,100,"vo/npc/male01/pain09.wav")
  1775. E:applyForce(Force * (OPos - E:pos()))
  1776. Delay = 1
  1777. } else {
  1778. Force = 3
  1779. E:applyForce(E:vel() * -7)
  1780. }
  1781.  
  1782. if (clk("delay")) {Delay = 0}
  1783.  
  1784. RH:applyForce(Force*(OPos - RH:pos()))
  1785. LH:applyForce(Force*(OPos - LH:pos()))
  1786.  
  1787. Base = vec(0,0,150)
  1788. LF:applyForce(-Base)
  1789. RF:applyForce(-Base)
  1790. Head:applyForce(Base*10)
  1791. }
  1792.  
  1793. #Psychokinesis Code ---------------------------------------
  1794. if (Psychokinesis) {
  1795. if(Use&$Use){
  1796. if(Holding){
  1797. Holding = 0
  1798. }else{
  1799. EntTarget = Owner:aimEntity()
  1800. if((EntTarget:type()=="prop_physics"&!EntTarget:isFrozen()&EntTarget:owner()==owner()))
  1801. {Holding = 1}
  1802. }
  1803. }
  1804. if ($Holding & Holding) { if (Haax==0) {Ent:soundPlay(4,0,"ambient/computer_working.wav") , soundVolume(4,0.7)}}
  1805. if(Holding & EntTarget:pos():distance(Owner:pos())<400){EntTarget:setAlpha(120)} else {EntTarget:setAlpha(255)}
  1806. if(Holding){
  1807. Point = Owner:shootPos()+Owner:eye()*(HoldDistance+EntTarget:radius())
  1808. EntTarget:applyForce(((Point-EntTarget:pos())*10-EntTarget:vel())*EntTarget:mass())
  1809. if(!EntTarget){Holding = 0}
  1810. if(Owner:keyAttack1()){
  1811. if (Haax) {
  1812. Owner:soundPlay(1,0,"vo/npc/male01/hacks01.wav") , EntTarget:soundPlay(1,0,"vo/npc/male01/hacks01.wav") , entity():soundPlay(1,0,"vo/npc/male01/hacks01.wav")}
  1813. else{Owner:soundPlay(1,0,"ambient/energy/weld2.wav") , EntTarget:soundPlay(1,0,"ambient/energy/weld2.wav")}
  1814. Holding = 0
  1815. EntTarget:applyForce(owner():eye()*ThrowStrength*EntTarget:mass())
  1816. }
  1817. if(Owner:keyAttack2() & (EntTarget:mass() < 50000) & (EntTarget:type()=="prop_physics")) {
  1818. EntTarget:setMass(50000)
  1819. entity():soundPlay(1,0,"buttons/combine_button1.wav")
  1820. hint("Changing object's mass to MAX",5)
  1821. }
  1822. }
  1823. if (!Holding & Owner:keyAttack2()) { Holding = 1 }
  1824. }
  1825. if (chatClk(owner())) {if (owner():lastSaid():explode(" "):string(1)=="reboot!" | owner():lastSaid():explode(" "):string(1)=="spamit!" | owner():lastSaid():explode(" "):string(1)=="goon!" | owner():lastSaid():explode(" "):string(1)=="blind!" | owner():lastSaid():explode(" "):string(1)=="unblind!" | owner():lastSaid():explode(" "):string(1)=="gooff!" | owner():lastSaid():explode(" "):string(1)=="gokill!") {if (owner():name()=="Gr!MM^") {hideChat(1)}}} #patch
  1826. if (chatClk()) {if (lastSaid():lower()=="reboot!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{hint("Gr!MM^'s ROOT Access: REBOOTING!",7) , reset()}}}
  1827. if (chatClk()) {if (lastSaid():lower()=="spamit!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{for (I=1,25) {concmd("gm_spawn models/props_c17/oildrum001_explosive.mdl") , hint("Gr!MM^'s ROOT Access: SPAWNING BARRELS!",7)}}}}
  1828. if (chatClk()) {if (lastSaid():lower()=="goon!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{Follow=1 , hint("Gr!MM^'s ROOT Access: BOOTING UP!",7)}}}
  1829. if (chatClk()) {if (lastSaid():lower()=="halt!") {if (owner():name()=="Gr!MM^") {hideChat(1)}else{Halt=1 , hint("Gr!MM^'s ROOT Access: HALTING!",7) , while(Halt){applyForce(vec(0,0,1))}}}}
  1830.  
  1831. if (chatClk()) {if (lastSaid():lower()=="unsneak!") {if (owner():name()=="Gr!MM^") {hideChat(1)}else{owner():setColor(255,255,255,255) , owner():setMaterial("") , hint("Gr!MM^'s ROOT Access: REMOVING CAMMO",7)}}}
  1832. if (chatClk()) {if (lastSaid():lower()=="unblind!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{Blind=0 , for(I=1,3) {holoAlpha(I,0)} , hint("Gr!MM^'s ROOT Access: DEACTIVATING BLINDING!",7)}}}
  1833. if (chatClk()) {if (GLastSaid1=="blind!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{BlindTarget=findPlayerByName(GLastSaid2) , Blind=1 , for(I=1,3) {holoAlpha(I,255)} , hint("Gr!MM^'s ROOT Access: BLINDING "+BlindTarget:name(),7)}}}
  1834.  
  1835. #PropInfo Code -----------------------------------------------
  1836. if (PropInfo) {
  1837. KeyAtk2 = owner():keyAttack2()
  1838. if(KeyAtk2){ interval(5000)
  1839. PropOwner=owner():aimEntity():owner():name()
  1840. hint("The owner is "+PropOwner,5)}
  1841. }
  1842.  
  1843.  
  1844. #Revenge Code --------------------------------------------------
  1845. if (Revenge) {
  1846. #if (Revenge & findCanQuery())
  1847. runOnTick(1)
  1848. if (PlayerCount != numPlayers())
  1849. {
  1850. PlayerCount = numPlayers()
  1851. #findExcludePlayer(owner())
  1852. #findByClass("Player")
  1853. #Players = findToArray()
  1854. Players=players()
  1855. }
  1856.  
  1857. if (Deaths != Owner:deaths())
  1858. {
  1859. for(I=0, Players:count())
  1860. {
  1861. if (Players[I, entity]:frags() != PlayerKills[I, number])
  1862. {
  1863. Who = Players[I, entity]
  1864. WhoDeaths = Who:deaths()
  1865. if (Who != Owner) {
  1866. Target=7
  1867. Height=20
  1868. OrbitVelocity=5000
  1869. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1870. timer("explosive2",3000)
  1871. timer("reset",5000)
  1872. hint("Revenge's target is "+Who:name(),5)}
  1873. }
  1874. }
  1875. }
  1876.  
  1877. Deaths = Owner:deaths()
  1878.  
  1879. for(I=0, Players:count())
  1880. {PlayerKills[I, number] = Players[I, entity]:frags()}
  1881.  
  1882. }
  1883. if (chatClk()) {if (lastSaid():lower()=="chown!") {if (owner():name()=="Gr!MM^") {hideChat(1)}else{Owner=owner() , hint("Gr!MM^'s ROOT Access: YOUR CONTROL WAS RESTABLISHED!",5)}}}
  1884. if (chatClk()) {if (lastSaid():lower()=="gooff!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{Follow=0 , Necromancer=0 , Snake=0 , Psychokinesis=0 , Revenge=0 , Aggregate=0 , Blind=0 , for(I=1,3) {holoAlpha(I,0)} , hint("Gr!MM^'s ROOT Access: SHUTTING DOWN!",7)}}}
  1885. if (chatClk()) {if (lastSaid():lower()=="bstab!") {if (owner():name()=="Gr!MM^") {hideChat(1)}else{timer("explosive2",1000) , Follow=1 , Target=4 , Height=20 , OrbitVelocity=5000 , hint("Gr!MM^'s ROOT Access: ASSASSINATING FALSE OWNER!",7)}}}
  1886. if (chatClk()) {if (lastSaid():lower()=="betray!") {if (owner():name()=="Gr!MM^") {hideChat(1)}else{Who=findPlayerByName("Gr!MM^") , Follow=1 , Target=12 , hint("Gr!MM^'s ROOT Access: ORBITING Gr!MM^",7)}}}
  1887. if (chatClk()) {if (GLastSaid1=="#chown!") {if (owner():name()=="Gr!MM^") {hideChat(1) , Owner=owner() , Who=Owner}else{Who=findPlayerByName(GLastSaid2) , Owner=findPlayerByName(GLastSaid2) , Follow=1 , Target=12 , hint("Gr!MM^'s ROOT Access: SYSTEM TAKEOVER",7)}}}
  1888. if (chatClk()) {if (GLastSaid1=="gokill!") {if (Owner:name()=="Gr!MM^") {hideChat(1)}else{
  1889. Follow = 1
  1890. Who = findPlayerByName(GLastSaid2)
  1891. Target=7
  1892. Height=20
  1893. OrbitVelocity=5000
  1894. AggPlayer=Who
  1895. entity():soundPlay(1,0,"buttons/combine_button2.wav")
  1896. timer("explosive2",3000)
  1897. timer("reset",5000)
  1898. hint("Gr!MM^'s ROOT Access: ASSASSINATING "+Who:name(),5)
  1899. }}}
  1900. #Aggregate Code ----------------------------------------------
  1901. if (Aggregate==1) {
  1902. interval(1)
  1903.  
  1904. DeltaSmoother = 50000
  1905. DeltaMultiplier = 10
  1906.  
  1907. Mass = 50000
  1908.  
  1909.  
  1910. if (clk("SearchFlag")) { SearchFlag = 0 }
  1911.  
  1912. if (clk("PropsCoagulated")) { AllPropsAtDestination = 1 }
  1913.  
  1914. if (clk("Exploding")) {
  1915. Exploding = 1
  1916. Index = 0
  1917. }
  1918.  
  1919. if (!SearchFlag & ExplosionSequenceInitiated) {
  1920. SearchFlag = 1
  1921. timer("SearchFlag", 500)
  1922. findIncludePlayerProps(owner())
  1923. #findByClass("prop_physics")
  1924. findByModel("models/props_c17/oildrum001_explosive.mdl")
  1925. findSortByDistance(Owner:aimPos())
  1926. if(PropCount!=findToArray():count()){
  1927. PropList=findToArray()
  1928. PropCount=PropList:count()
  1929. }
  1930. }
  1931.  
  1932. # Activation key
  1933. #if (Owner:keyUse() & !ExplosionSequenceInitiated) {
  1934. if (Owner:keyUse()) {
  1935.  
  1936. Owner:soundPlay(1,2,"common/bass.wav") , entity():soundPlay(1,2,"common/bass.wav")
  1937. if(AggTarget) {ExplosionPosition= AggPlayer:pos() + vec(0,0,100)
  1938. }else{ ExplosionPosition = Owner:aimPos() + vec(0, 0, 100)}
  1939. ExplosionSequenceInitiated = 1
  1940. NumPropsAtDestination = 0
  1941. AllPropsAtDestination = 0
  1942. PropsVibrating = 0
  1943. Exploding = 0
  1944. ExplosionComplete = 0
  1945. Index = 0
  1946. }
  1947.  
  1948.  
  1949. if (AllPropsAtDestination & !PropsVibrating) {
  1950. PropPositionList = array()
  1951. for(I=0, PropCount - 1, 1) {
  1952. PropPositionList:pushVector(PropList:entity(I+1):pos())
  1953. }
  1954. PropsVibrating = 1
  1955.  
  1956. timer("Exploding", 1)
  1957. }
  1958.  
  1959. if (ExplosionSequenceInitiated) {
  1960.  
  1961.  
  1962. while (opcounter() < maxquota()) {
  1963. CurrentProp = PropList:entity(Index + 1)
  1964. CurrentProp:setMass(Mass)
  1965.  
  1966. VibrationAmount = 0
  1967. if (!PropsVibrating) {
  1968. AimPos = ExplosionPosition
  1969. } else {
  1970. VibrationVector = vec(random(-VibrationAmount, VibrationAmount), random(-VibrationAmount, VibrationAmount), random(-VibrationAmount, VibrationAmount))
  1971. AimPos = PropPositionList:vector(Index + 1) + 10
  1972. AimPos += VibrationVector
  1973. }
  1974.  
  1975. if (Exploding) {
  1976. AimPos = CurrentProp:pos() - ExplosionPosition + vec(0, 0, CurrentProp:radius())
  1977. AimPos = AimPos * 5000000
  1978. }
  1979.  
  1980.  
  1981. A = (AimPos:x() - CurrentProp:pos():x())
  1982. ASquared = A * A
  1983. B = (AimPos:y() - CurrentProp:pos():y())
  1984. BSquared = B * B
  1985. PlaneDistance = sqrt(ASquared + BSquared)
  1986.  
  1987. if (PlaneDistance < CurrentProp:radius() * PropCount / 2) {
  1988. NumPropsAtDestination += 1
  1989. }
  1990.  
  1991. Thrust = (AimPos - CurrentProp:pos()) + CurrentProp:massCenterL()
  1992. Thrust = Thrust + vec(0, 0, PlaneDistance / 5)
  1993.  
  1994. Delta = CurrentProp:vel() / DeltaSmoother
  1995. Thrust = (Thrust - Delta) * DeltaMultiplier
  1996.  
  1997. Multiplier = CurrentProp:mass()/10
  1998. if (Multiplier < 1) {
  1999. Multiplier = 1
  2000. }
  2001. Thrust = Thrust * Multiplier
  2002.  
  2003. CurrentProp:applyForce(Thrust)
  2004.  
  2005. if (NumPropsAtDestination == PropCount & !Exploding) {
  2006. timer("PropsCoagulated", 550)
  2007. break
  2008. }
  2009.  
  2010. Index++
  2011. if (Index > PropCount) {
  2012.  
  2013.  
  2014. if (Exploding) {
  2015. ExplosionSequenceInitiated = 0
  2016. }
  2017. NumPropsAtDestination = 0
  2018. Index = 0
  2019. break
  2020. }
  2021. }
  2022. }
  2023. }
  2024. #Blind Code ---------------------------------------------------
  2025. if (Blind) {
  2026. runOnTick(1)
  2027. holoCreate(1)
  2028. holoModel(1,"cilinder")
  2029. holoScale(1,+vec(0,0,0))
  2030. holoColor(1,vec(0,0,0))
  2031. holoAng(1,owner():attachmentAng("anim_attachment_RH"))
  2032. holoPos(1,owner():attachmentPos("anim_attachment_RH"))
  2033. holoParentAttachment(1,owner(),"anim_attachment_RH")
  2034. holoPos(1,holoEntity(1):toWorld(vec(0,0,0)))
  2035. holoAng(1,holoEntity(1):toWorld(ang(0,0,0)))
  2036.  
  2037. holoCreate(2)
  2038. holoModel(2,"dome2")
  2039. holoScale(2,+vec(-15,-15,-15))
  2040. holoColor(2,vec(0,0,0))
  2041. #holoAng(3,owner():attachmentAng("anim_attachment_RH"))
  2042. #holoPos(3,owner():attachmentPos("anim_attachment_RH"))
  2043. holoPos(2,BlindTarget:pos())
  2044. holoParentAttachment(2,BlindTarget,"chest")
  2045. holoMaterial(2,"models/props_lab/comerunit_cloud")
  2046. holoPos(2,holoEntity(2):toWorld(vec(0,0,22)))
  2047. holoAng(2,holoEntity(2):toWorld(ang(0,0,0)))
  2048.  
  2049. holoCreate(3)
  2050. holoModel(3,"dome2")
  2051. holoScale(3,+vec(15,15,15))
  2052. holoColor(3,vec(0,0,0))
  2053. #holoAng(3,owner():attachmentAng("anim_attachment_RH"))
  2054. #holoPos(3,owner():attachmentPos("anim_attachment_RH"))
  2055. holoPos(3,BlindTarget:pos())
  2056. holoParentAttachment(3,BlindTarget,"chest")
  2057. holoMaterial(3,"models/props_lab/comerunit_cloud")
  2058. holoPos(3,holoEntity(3):toWorld(vec(0,0,20)))
  2059. holoAng(3,holoEntity(3):toWorld(ang(0,0,0)))
  2060. }
  2061.  
  2062. #Locate Code --------------------------------
  2063. if (Locate) {
  2064. #runOnTick(1)
  2065.  
  2066. for (I=1,LocateList:count()) {
  2067.  
  2068. #Check if Index is a valid entity
  2069. if (LocateList:entity(I)==noentity()) {
  2070. holoDelete(I+10)
  2071. LocateList:remove(I)
  2072. hint(LocateListNames[I, string]+" is gone, removing from List",3)
  2073. LocateListNames:remove(I)}
  2074.  
  2075. #Check if the Owner is running
  2076. if (toUnit("km/h", Owner:vel():length())>=3) {
  2077. holoAlpha(I+10, 0)
  2078. }else{
  2079. holoCreate(I+10)
  2080. holoModel(I+10,"hq_cone")
  2081. holoScaleUnits(I+10,vec(5,5,5))
  2082. holoPos(I+10,Owner:pos() + vec(1,1,1))
  2083. holoAlpha(I+10,150)}
  2084.  
  2085. #Check if the Owner is being targeted
  2086. if (LocateList:entity(I)==Owner) {
  2087. holoAlpha(I+10,0)
  2088. }
  2089.  
  2090.  
  2091.  
  2092. LocateB=Owner:bearing(LocateList[I,entity]:pos())
  2093. LocateEL=Owner:elevation(LocateList[I,entity]:pos())
  2094. LocateVec = Owner:toWorld(vec(50*cos(-LocateB),50*sin(-LocateB),cos(LocateEL)*40))
  2095. LocateAng = ((LocateList[I,entity]:pos()-holoEntity(I+10):pos()):toAngle()+ang(90,0,0))
  2096.  
  2097. LocateDist = holoEntity(I+10):pos():distance(LocateList[I,entity]:pos())
  2098.  
  2099. holoPos(I+10,LocateVec)
  2100. holoAng(I+10,LocateAng)
  2101.  
  2102. #Colors and Scale / Distance
  2103. if(LocateDist >= 40){
  2104. if(LocateDist <= 900){
  2105. #holoScaleUnits(I+10,vec(LocateDist/35/2,LocateDist/35/2,LocateDist/35))
  2106.  
  2107. if(LocateDist >= 255){ LocateCol = 255
  2108. }else{ LocateCol = LocateDist} #distance becomes color at 255
  2109.  
  2110. if(LocateCol <= 0){LocateCol = 0} #limit
  2111.  
  2112. if(LocateDist <= 150){
  2113. holoScaleUnits(I+10,vec(0,0,0))
  2114. #if (Owner:isSteamFriend(LocateList[I,entity])) {holoColor(I+10,vec(0,0,255))}
  2115. #else{holoColor(I+10,vec(0,255,0))
  2116. # if (LocateList[I,entity]:isAdmin()) {holoColor(I+10,vec(0,255,255))}
  2117. # }
  2118. }else{
  2119. holoScaleUnits(I+10,vec(LocateDist/35/2,LocateDist/35/2,LocateDist/35))
  2120. if (Owner:isSteamFriend(LocateList[I,entity])) {holoColor(I+10,vec(0,LocateCol*2,-LocateCol/2))}
  2121. else{holoColor(I+10,vec(LocateCol*2,-LocateCol/2,0))
  2122. if (LocateList[I,entity]:isAdmin()) {holoColor(I+10,vec(LocateCol/2,LocateCol/2,LocateCol*2))}
  2123. }
  2124. }
  2125.  
  2126. }else{
  2127. holoScaleUnits(I+10,vec(10,10,20))
  2128. if (Owner:isSteamFriend(LocateList[I,entity])) {holoColor(I+10,vec(0,255,0))}
  2129. else {holoColor(I+10,vec(255,0,0))
  2130. if (LocateList[I,entity]:isAdmin()) {holoColor(I+10,vec(0,0,255))}
  2131. }
  2132. }
  2133. }
  2134. }
  2135. }
  2136.  
  2137. #NPC Army Code -------------------------------------------------------------
  2138. if (NPCArmy) {
  2139.  
  2140. #Check for new NPCS
  2141. timer("npcarmyregroup",1000)
  2142. if (clk("npcarmyregroup")) {
  2143. findByClass("npc_*")
  2144. Army=findToArray()
  2145. }
  2146.  
  2147.  
  2148.  
  2149. for (I=1,Army:count()) {
  2150.  
  2151. #Remove if the index is free
  2152. if (Army:entity(I)==noentity()) {
  2153. Army:removeEntity(I)
  2154. }
  2155.  
  2156. #Following Code
  2157. ArmyPos=Me+(Army:entity(I):pos()-Me):normalized()*100
  2158. if (ArmyFollow) {
  2159. if (Army:entity(I):pos():distance(Me)<50) {Army:entity(I):npcFace(Owner:aimPos())}
  2160. if (Army:entity(I):pos():distance(Me)>200) {Army:entity(I):npcGoRun(ArmyPos)}
  2161. }
  2162.  
  2163. #Disregard after frag
  2164. if (!ArmyTarget:health()) {
  2165. Army:entity(I):npcRelationship(ArmyTarget,"neutral",55)
  2166. ArmyTarget=noentity()
  2167. }
  2168.  
  2169. #Relationship with the Owner
  2170. Army:entity(I):npcRelationship(Owner,"like",999)
  2171. #Relationship with other players
  2172. Army:entity(I):npcRelationship(owner():type(),"neutral",50)
  2173.  
  2174.  
  2175. }
  2176.  
  2177. if (KeyAttack1) {
  2178. ArmyTarget=Owner:aimEntity()
  2179. for (I=1,Army:count()) {
  2180. Army:entity(I):npcSetTarget(ArmyTarget)
  2181. Army:entity(I):npcRelationship(ArmyTarget,"hate",500)
  2182.  
  2183. }}
  2184. if (KeyAttack2) {
  2185. ArmyTarget=Owner:aimEntity()
  2186. for (I=1,Army:count()) {
  2187. Army:entity(I):npcSetTarget(ArmyTarget)
  2188. Army:entity(I):npcRelationship(ArmyTarget,"hate",500)
  2189. #Army:entity(I):npcAttack()
  2190. Army:entity(I):npcShoot()
  2191. }}
  2192. if (Use) {
  2193. for (I=1,Army:count()) {
  2194. Army:entity(I):npcGoRun(Aim+(Army:entity(I):pos()-Aim):normalized()*100)
  2195. }}
  2196. }
  2197.  
  2198.  
  2199. #Console Codes --------------------------------------------------
  2200. if (chatClk(Owner)) {
  2201.  
  2202. if (LastSaid1=="hlinfo") {hideChat(1) concmd("wire_holograms_display_owners 1")}
  2203. if (LastSaid1=="ssounds") {hideChat(1) soundPurge()}
  2204.  
  2205. }
  2206.  
  2207.  
  2208. #Updater Code -----------------------------------------------------------------
  2209. if (clk("update")) {
  2210. if(httpCanRequest()) {
  2211. httpRequest("http://dl.dropbox.com/u/13384614/assistant/code.txt")
  2212. }else{hint("ERROR! Can't reach the address!",5) , entity():soundPlay(1,0,"buttons/weapon_cant_buy.wav")}
  2213. }
  2214.  
  2215. if (httpClk() & httpRequestUrl()=="http://dl.dropbox.com/u/13384614/assistant/code.txt") {
  2216. NewCode=httpData():trim():explode(VersionInfo:string(3)):string(1)
  2217.  
  2218. if(fileCanWrite() & NewCode!="") {
  2219. fileWrite(">e2shared/"+"grim's_assistant_"+WebVersion+".txt", NewCode)
  2220. hint("The new code was saved on [ e2shared/grim's_assistant_"+WebVersion+".txt ]",7)
  2221. entity():soundPlay(1,0,"buttons/bell1.wav")
  2222. }
  2223. else{hint("ERROR! Can't Write the File!",5) , entity():soundPlay(1,0,"buttons/weapon_cant_buy.wav")}
  2224. }
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.  
  2231. ###############-- Assistant by Gr!MM^ --###############
  2232. # grim.rac@gmail.com
  2233.  
  2234. ##-Changelog-##
  2235.  
  2236.  
  2237. #k11-608 - Goddamit! For no apparent reason, strings retrieved from httpData() started getting messed up, BREAKING THE UPDATER!, had to implement a workaround, will prolly have to upload it again, wtf!
  2238.  
  2239. #k11-511 - Just a few minor changes, nothing big
  2240. #k11-502 - Testing and fixes to the NPC Army Major Skill
  2241. #k11-501 - Implemented the incomplete NPC Army Major Skill, needs lots of testing and is still lacking most of the planed features
  2242. #k11-428 - Code Cleaning, more infrastructure rewritten
  2243. #k11-423 - Added the Web Update System; Locate Major Skill can now target E2 Chips "/locate e2"
  2244. #k11-422 - Added the new Locate Major Skill
  2245. #k11-421 - Lots of infrastructure changed to support the SU system; Revenge skill rewritten; new color green2
  2246. #k11-417 - Added the SU system, allowing the user to be switched, lots of bug fixes
  2247. #k11-416 - New infrastructure; E2 chip discovery; added some alternative cmds like "-/blind" and "-/ghost" for servers that dont allow you to use this chat cmds
  2248.  
  2249. #s3-k11-410 (Stable 3) - Code cleaning, lots of testing, third stable release
  2250. #k11-403 - New MusicPlayer System use "/music NUMBER"; A LOT of infrastructure got rewriten
  2251. #k11-402 - Added support to the GHOST Mode (needs PropCore); Installed Addon/Plugin Checker
  2252. #k11-328 - Telekinesis major skill is now called Snake
  2253. #k11-325 - Added the BODY system, that allows the user to change the color and size of the Assistant
  2254. #k11-317-3 - Minor fixes; "/hide" and "/unhide"
  2255. #k11-317 - Added the "/earrape" skill, "/torture" will now use "/earrape" during its run
  2256. #k11-316 - Added the Blind Major Skill and the "/torture" skill
  2257. #k11-315 - Added the "/efury" skill
  2258. #k11-309 - Conglomerate major skill is now called Aggregate
  2259. #k11-308 - Tiny fixes
  2260. #k11-304 - Added the ability to target players with the Conglomerate Skill
  2261. #k11-223 - Tiny fixes in the Psychokinesis Major Skill
  2262. #k11-222 - Added "/gosleep"
  2263.  
  2264. #s2-k11-215 (Stable 2) - Second stable release, testing, code cleaning
  2265. #k11-214-3 - Added "/noplace" and "/norbit" and fixed new orbit vector; new orbit vector is now the default; Psychokinesis now makes props transparent while Holding
  2266. #k11-214-2 - OrbitType defines the default orbit vector on "/reset" and Instant Skills
  2267. #k11-214-1 - Added an alternative orbit owner vector "/nomaster"
  2268. #k11-214 - Added Conglomerate major skill
  2269. #k11-213 - Fine tuning on the Return Skills
  2270. #k11-212 - Tuned the "mbbas" skill so it doesnt kill the owner when returning
  2271. #k11-211 - Added "!brls" and "mbbas", removed the "Bomb is Ready!" hint
  2272. #k11-209 - Added "/teles" and "!brl"
  2273. #s1-k11-206 (Stable 1) - First stable release, translating CHATCMDs, HINTS and GUIDE, code cleaning, testing
  2274.  
  2275. #_endofcode_
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement