Free BSD Manual install commands

Free BSD Manual install commands

FreeBSD Manual Install Commands

DHCP Network


iface is interface of your NIC my computer is rl0.

# dhclient iface DHCP     (Optional)

# gpart show     #Verify

If disk had partitions

# gpart delete -i 1 ada0
  ada0s1 deleted
# gpart destroy ada0

# gpart create -s mbr ada0
  ada0 created
# gpart add -t freebsd -i 1 ada0
  =>      63  33554369  ada0  MBR  (16G)
          63  33554367     1  freebsd  (16G)
    33554430         2        - free - (1.0K)
  
# bsdlabel -wB /dev/ad0s1       # to create an empty table shown below

# bsdlabel /dev/ad0s1 > labeloutfile

# /dev/ad0s1:
8 partitions:
#          size     offset    fstype   [fsize bsize bps/cpg]
  a:   33554351         16    unused        0     0
  c:   33554367          0    unused        0     0     # "raw" part, don't edit

Edit this table to match similar ee can be used during this time
Edit this to your ways

ee labeloutfile

# bsdlabel /dev/ad0s1 (16 GB Drive)

# /dev/ad0s1:
8 partitions:
#          size     offset    fstype   [fsize bsize bps/cpg]
  a:         2G         16    4.2BSD        0     0     0
  b:         4G          *      swap        0     0
  c:   33554367          0    unused        0     0     # "raw" part, don't edit
  d:         5G          *    4.2BSD        0     0     0
  e:         *           *    4.2BSD        0     0     0

* Means use whatever and * on Size means use rest.

Restore disk information from your file

# bsdlabel -R /dev/ad0s1 labeloutfile

Display the information

# bsdlabel /dev/ad0s1

# /dev/ad0s1:
8 partitions:
#          size     offset    fstype   [fsize bsize bps/cpg]
  a:    4194304         16    4.2BSD        0     0     0
  b:    4194304    4194320      swap        0     0
  c:   33554367          0    unused        0     0     # "raw" part, don't edit
  d:    8388608    8388624    4.2BSD        0     0     0
  e:   16777135   16777232    4.2BSD        0     0     0
 
  then format each of the drives

# newfs -U -O2 /dev/ad0s1a
# newfs -U -O2 /dev/ad0s1d
# newfs -U -O2 /dev/ad0s1e

 then mount them

# mount /dev/ad0s1a /mnt
# mkdir /mnt/usr
# mkdir /mnt/usr/home
# mount /dev/ad0s1e  /usr
# mount /dev/ad0s1d    /home

# cd /mnt

 install bootblock
# boot0cfg -B /dev/ada0


# df -h
Filesystem                      Size    Used   Avail Capacity  Mounted on
/dev/iso9660/FREEBSD_INSTALL    564M    564M      0B   100%    /
devfs                           1.0K    1.0K      0B   100%    /dev
/dev/md0                         31M    316K     28M     1%    /var
/dev/md1                         19M     56K     17M     0%    /tmp
/dev/ad0s1a                     1.9G     16K    1.8G     0%    /mnt
/dev/ad0s1e                     7.7G     12K    7.1G     0%    /mnt/usr
/dev/ad0s1d                     3.9G    8.0K    3.6G     0%    /mnt/usr/home
# pwd
/tmp

# ls /usr/freebsd-dist/*.txz

To see the files in the directory on CD
then if wanted to a shell script can be created or they can be manually
extracted.

Script way (Example Script)
!/bin/sh
# forls

    for loop in `ls /usr/freebsd-dist/*.txz `
        do
           
            tar vxjpf $loop
        done   


Without script the command is

# tar xjpfv /usr/freebsd-dist/file.txz

and so on till each file in the directory requested is extracted.

Configuring the Fstab

Add lines to the /etc/fstab as it is blank similar to below

#Device                  Mount    FSTtype    Option   Dump    Pass

/dev/ad0s1a             /         ufs        rw       1         1
/dev/ad0s1b             none      swap       sw       0         0
/diskdev/usr            /usr      ufs        rw       0         0
/diskdev/home           /home     ufs        rw       0         0
proc                    /proc     procfs     rw       0         0


/diskdev/usr   Symbolic link to /dev/ad0s1e
/diskdev/home  Symbolic link to /dev/ad0s1d

Symbolic link will not work for the root filesystem

Then configure the /etc/rc.conf

Basic Configuration just to get it to work

# Set Hostname
hostname="TestComp"

#Set Keyboard
keymap="uk.iso.kbd"

#Set Network
ifconfig_rl0="DHCP"

# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"


Set the password for root

# cd /mnt
# chroot .
passwd
Enter password for root: Password
Confirm password for root: Password

adduser
Follow promptings on screen

exit # Exit the chroot environment

cd /
umount /mnt/usr/home
umount /mnt/usr
umount /mnt

Before rebooting verify the settings.

reboot

Legendary Studios Bot Commands

Legendary Studios Bot Commands

    Bot Commands
    http://deepbot.deep.sg/wiki/Bot+Commands
     
    Custom Commands
    !gameinsight, !joingame, !ign, !gold, !g2a, !youtube, !vipbenefits, !uptime, !links, !topic, !ranks, !giveusthetank, !topstreamers, !store, !worldid, !teamspeak, !nomad, !hype, !legenduminati, !legodairystewdoritos, !seanpai, !rigged, !bootyslap, !bobby, !shutupsean, !legendaryteaparty, !smashing, !kratos, !facepalm, !dragonmod, !crash, !arkhype

Plug.dj/forsen Rules

Plug.dj/forsen Rules

Plug.dj/forsen Rules

    Forsen's PlugDJ Rules (updated 02/05/15)
     
                    General Rules
     
    1. No songs over 5 minutes. Songs over 5 mins 30s will be auto skipped by a bot.
    NOTE: if you want to play longer song, ask for permission from moderators.
     
    2. Don't Ask for Skips.
    3. Don't spam the chat w/ ascii or copypastas.
    4. No songs that are in the DJ History (Past 50 songs).
    5. No asking for rank promotions
    6. No gore/ gore related videos (exceptions will be made for Music Videos).

Chatango bot commands

Chatango bot commands


    ############################################################################
    ############################################################################
    ####    Getting Started Bot                                     ############
    ####    File            = ExampleBot.py                         ############    
    ####    Originaly by    = clonerxyz                             ############
    ####    Edited by       = Thelorgorenk                          ############
    ####    you can PM for info about making a chatango             ############
    ####    bot in http://thelorgorenk.chatango.com, and you can    ############
    ####    and you can also chat in :                              ############
    ####            http://khususme.chatango.com                    ############
    ####    Last update:                                            ############
    ####            3.21 AM August, 1 2015 by Thelorgorenk          ############
    ############################################################################
    ############################################################################
    ##Importing Random Crap xD
    #here you can see that you're importing ch library
     
    import ch
    import random
    import sys
    import json
    import time
    import re
    if sys.version_info[0] > 2:
      import urllib.request as urlreq
    else:
      import urllib2 as urlreq
    from time import localtime, strftime
    wordtodaytime = dict()
    ##Dance moves!
    #kinda useless
     
    dancemoves = [
      "(>^.^)>",
      "(v^.^)v",
    ]
    song = [
      "Dirimu, dirimulah! Orang yang beriku senyum ini",
    "Jika kita bisa membuat air mata yang bersinar, itu 'kan 'jadi bintang jatuh",
    "Tanganmu t'lah terluka, tapi jangan pernah lepaskannya lagi",
    "Dari langit yang terpenuhi keinginan, hari esok 'kan segera datang",
     
    "Cahya yang membimbingku adalah dirimu",
    "Dan aku pun ditarik karenanya",
    "Sebelum kusadarim kita mulai sebrangi jalan itu",
    "Sekaranglah saatnya! Jikalau kita hanya bisa bersinar di sini",
    ]
     
    bete = [
    "kunci",
    ]
    pagi = [
    "ohayou oni-chan",
    ]
     
    # implied command?     
    # call bot name with command after
    # call bot name with command after
    #Setting Pretty Colors
    #Font setting for your bot
     
    class TestBot(ch.RoomManager):
      def onInit(self):
        self.setNameColor("F9F")
        self.setFontColor("F33")
        self.setFontFace("1")
        self.setFontSize(13)
        self.enableBg()
        self.enableRecording()
    ##### Pars Def
      def pars(args):
              args=args.lower()
              userlist = roomUsers()
              for name in userlist:
                if args in name:return name  
    ##Connecting Crap
    #This is what will be printed on your python console when event called
     
      def onConnect(self, room):
        print("Connected")
     
      def onReconnect(self, room):
        print("Reconnected")
     
      def onDisconnect(self, room):
        print("Disconnected")
     
     
    ##Ignore this, you dont need to worry about this
    #Well, you can actually take a little time to look at it and learn something
      def onMessage(self, room, user, message):
      #### Comenzi fara prefix
       if message.body.startswith("test"):
         room.message("Test request granted :v")
       if message.body.startswith("woi"):
         room.message("Apa njay? :v :)")
       if message.body.startswith("sepi"):
         room.message("I'am here. :)")
       if message.body.startswith("siang"):
         room.message("Hello, siang :)")
       if message.body.startswith("malam"):
         room.message("Hello, malam :)")
       if message.body.startswith("konbanwa"):
         room.message("Hello, konbanwa")
       if message.body.startswith("oyasumi"):
         room.message("Hello, oyasumi :v")
       if message.body.startswith("konichiwa"):
         room.message("Hello, konichiwa :)")
       if message.body.startswith("jam"):
          room.message(strftime("%H:%M:%S", localtime()))      
       if message.body.startswith("tanggal"):
         room.message(strftime ("HARI: %a,%d-%b-%Y ", localtime()))
       if message.body.startswith("siapa yang "):
         room.message(random.choice(room.usernames))
       if message.body.startswith("lol"):
         room.message("Yea lol  @"+user.name+".")
         room.message(random.choice(jawab)+" @"+user.name)
    ##COMMANDS!
    #Setting up commands for yer bot
     #commands section
    #### Invite
          if cmd == "invite" or cmd == "Invite":
            if len (args) > 0:
                self.pm.message(ch.RoomManager(args),"%s You have a group invite by ! http://%s.chatango.com ." %(owners[0],room.name))
                room.message("Invite on progress %s in Access group. :)" % args)
            else:
                room.message("Sry have problem. :3")
    ##You may want/need to evaluate something about your bot.
          if cmd == "ev" or cmd == "eval" or cmd == "e":
              ret = eval(args)
              if ret == None:
                room.message("Done.")
                return
              room.message(str(ret))
         
            ##Say
            #Make your bot say what you want
     
          elif cmd == "afk":
            jawab = ["See u"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "crunch":
            jawab = ["https://31.media.tumblr.com/50dcec4f797eb86ea483558695c874f1/tumblr_nqru66BNYc1u8lwqgo1_500.gif"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "nja":
            jawab = ["Njaa ne ^^"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "coeghd":
            jawab = ["anda kenapa?"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == ":v":
            jawab = ["emoticon dewa"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "lebaran":
            jawab = ["minal aidzin wal faizin kk"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "gue tamvan gak ?":
            jawab = ["kaga","tamvan","jelek","biasa aja"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "hmm":
            jawab = ["maho detcted"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "konbanwa":
            jawab = ["tidur sana jangan ngalong :v"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "naruto":
            jawab = ["adalah anime yang selalu flash back"]
            room.message(random.choice(jawab)+" @"+user.name)
          elif cmd == "bnp":
            jawab = ["erorr forbidden access denied"]
            room.message(random.choice(jawab)+" @"+user.name)
            ##Random User
            #What's this for ? this one cmd will make your boy say the name of a random user in a room
          if cmd == "randomuser":
            room.message(random.choice(room.usernames))
     
            ##Check Level
            #This one cmd is tho make your bot say your mod level in the current room you're in
          elif cmd == "mylvl":
            room.message("Your mod level: %i" %(room.getLevel(user)))
     
            ##List Mods
            #List of Mods and Owner name in the current room you're in
          elif cmd == "mods":
            room.message(", ".join(room.modnames + [room.ownername]))
            #### Seen
          elif cmd == "invitegroup" or cmd == "ig":
            if len (args) > 0:
             self.pm.message(ch.RoomManager(args),"%s You have group invite! check this Chatango Group http://%s.chatango.com ." %(room.ownername[0],room.name))
             room.message("Youre invite %s now is in Accest Group. :)" % args)
            else:
              room.message("gak mau ah nginvite dia")
            ##DANCE!!!!
            #Dance ? Of Course !!! ^_^
          elif cmd == "dance":
            for i, msg in enumerate(dancemoves):
              self.setTimeout(i / 2, room.message, msg)
                   #### Pm
          elif cmd == "pm" or cmd == "Pm" or cmd == "PM" or cmd == "Private Message":
            data = args.split(" ", 1)
            if len(data) > 1:
              name , args = data[0], data[1]
              self.pm.message(ch.User(name), "[Private.Message] By - "+user.name+" : "+args+" ")
              room.message("Has been sent to "+name+"")
            #### Invite
          elif cmd == "invite" or cmd == "Invite":
            if len (args) > 0:
                self.pm.message(ch.RoomManager(args),"%s You have a group invite by ! http://%s.chatango.com ." %(owners[0],room.name))
                room.message("Invite on progress %s in Access group. :)" % args)
            else:
                room.message("Sry have problem. :3")
            #### Profile
          elif cmd == "prof" or cmd == "profile" or cmd == "Prof" or cmd == "Profile":
            try:
              args=args.lower()
              stuff=str(urlreq.urlopen("http://"+args+".chatango.com").read().decode("utf-8"))
              crap, age = stuff.split('<span class="profile_text"><strong>Age:</strong></span></td><td><span class="profile_text">', 1)
              age, crap = age.split('<br /></span>', 1)
              crap, gender = stuff.split('<span class="profile_text"><strong>Gender:</strong></span></td><td><span class="profile_text">', 1)
              gender, crap = gender.split(' <br /></span>', 1)
              if gender == 'M':
                  gender = 'Male'
              elif gender == 'F':
                  gender = 'Female'
              else:
                  gender = '?'
              crap, location = stuff.split('<span class="profile_text"><strong>Location:</strong></span></td><td><span class="profile_text">', 1)
              location, crap = location.split(' <br /></span>', 1)
              crap,mini=stuff.split("<span class=\"profile_text\"><!-- google_ad_section_start -->",1)
              mini,crap=mini.split("<!-- google_ad_section_end --></span>",1)
              mini=mini.replace("<img","<!")
              picture = '<a href="http://fp.chatango.com/profileimg/' + args[0] + '/' + args[1] + '/' + args + '/full.jpg" style="z-index:59" target="_blank">http://fp.chatango.com/profileimg/' + args[0] + '/' + args[1] + '/' + args + '/full.jpg</a>'
              prodata = '<br/> <a href="http://chatango.com/fullpix?' + args + '" target="_blank">' + picture + '<br/><br/> Age: '+ age + ' <br/> Gender: ' + gender +  ' <br/> Location: ' +  location + '' '<br/> <a href="http://' + args + '.chatango.com" target="_blank"><u>Chat With User</u></a> ' "<br/><br/> "+ mini
              room.message(prodata,True)
            except:
              room.message(""+args+" doesn't exist o.o ")
            #
            if cmd =="wordtoday" or cmd=="wt":
                if user.name in owners:
                  if user.name in wordtodaytime:
                    w = json.loads(wordtodaytime[user.name])
                    if time.time() < w:
                      w = int(w) - int(time.time())
                      minute = 60
                      hour = minute * 60
                      day = hour * 24
                      days =  int(w / day)
                      hours = int((w % day) / hour)
                      minutes = int((w % hour) / minute)
                      seconds = int(w % minute)
                      string = ""
                      if days > 0:
                        string += str(days) + " " + (days == 1 and "day" or "days" ) + ", "
                      if len(string) > 0 or hours > 0:
                        string += str(hours) + " " + (hours == 1 and "hour

KeniBot Commands

KeniBot Commands

KeniBot Commands
    KeniBot Exclusive Commands
     
    For the general commands of Basic Bot use: https://github.com/Yemasthui/basicBot/blob/master/commands.md
     
    !ass - http://i.imgur.com/LlJGcPg.png
    !bait - http://i.imgur.com/zbl1OON.gif
    !banner - http://imgur.com/a/bYuHO
    !blastoise - it's fucken blastoise
    !blastoise2 - It's fucken blastoise
    !boss - ༼ ▀̿Ĺ̯▀̿ ̿ ༽ WE ARE BOSS ༼ ▀̿Ĺ̯▀̿ ̿ ༽
    !cancer - http://i.imgur.com/7EFlunu.gif
    !clap - http://i.imgur.com/urrL82C.gif
    !deal - http://i.imgur.com/GCn5BGT.gif
    !dog - http://i.imgur.com/JitHIzl.png
    !fatdarude - http://i.imgur.com/S5UL4NB.jpg
    !feg - You're all faggots :keepo:
    !fing - http://i.imgur.com/phr9V7v.png
    !flyin - fly in mouth, dafuq i can't see!!
    !forsen - http://i.imgur.com/Iwqr3C0.jpg
    !gachi - http://i.imgur.com/QGuuBTL.gif
    !gor - http://i.imgur.com/17FeUtG.png
    !gor2 - http://i.imgur.com/17FeUtG.png
    !grav - http://i.imgur.com/C4Vt39q.png
    !greenshot - greenshot > gyazo
    !grill - http://i.imgur.com/ygqbbCz.jpg
    !hp - heil Hornpub :forsensheffy:7:forsensheffy:/
    !hp2 - http://i.imgur.com/gCo4A0m.png
    !hp3 - http://i.imgur.com/jc5KJYS.png
    !hug - http://i.imgur.com/ZGSL7fa.png
    !hydra - https://i.imgur.com/d9OZevs.png
    !igor - http://i.imgur.com/fQ2irIZ.png
    !jack - http://i.imgur.com/VF7F5Tf.png
    !jack2 - http://i.imgur.com/3DtFyUo.png
    !jep - http://i.imgur.com/MTmwzqE.png
    !jep2 - http://i.imgur.com/PzRSYkZ.png
    !jep3 - http://i.imgur.com/wD1oEYb.png
    !jep4 - http://i.imgur.com/SGaexzU.png
    !keni - http://i.imgur.com/wD1oEYb.png
    !kev - http://i.imgur.com/AhdgaqK.png
    !kolento - :kolentohappy: http://i.imgur.com/nj1dvtu.gif
    !kr - http://i.imgur.com/x4YcuTx.jpg
    !ktv - http://i.imgur.com/pWx1tFs.png
    !ktv2 - http://i.imgur.com/BraCqeP.png
    !ktv3 - http://i.imgur.com/F5UE61u.png
    !lunac - http://i.imgur.com/G0HJfqk.gif
    !lol - LoL is for roleplayers :keepo:
    !mel - http://i.imgur.com/Jt3d1d2.png
    !newfeg - If your new to plug.dj Watch this Tutorial: https://www.youtube.com/watch?v=pXIoB9RPl6w
    !nipaface - http://i.imgur.com/iKY3GNW.png
    !notgay - not gay at all :kappa:
    !notsanic - not :sanic: :kappa:
    !ohmu - http://i.imgur.com/gNM8cpl.png
    !psy - http://i.imgur.com/r3aDdfY.png
    !rekt - NOT REKT ☐ REKT ☑  
    !rigged - Roulette not even rigged :opieop:
    !ripchat - RIP in peace chat :kappa:
    !rucka - rucka rucka :dansgame:
    !sanic - :sanic: http://i.imgur.com/76MZHjy.gif GOTTA GO FAST!!!!!
    !scotland - :scotland: FOREVVVVAAAHHHHH!!!!!
    !shr - http://i.imgur.com/2o6o9ZP.png
    !shr2 - http://i.imgur.com/Ub1pci4.png
    !snf - http://i.imgur.com/tRzgqn7.png
    !snoop - http://i.imgur.com/hkA5GJr.gif
    !snus - http://i.imgur.com/xgBqXMn.gif
    !tp - https://fungustime.pw/tastyplug/
    !tup - http://i.imgur.com/hhf39vN.gif
    !victorfm - when the bass drop¿
    !win - http://i.imgur.com/WmRiO.gif
    !wtf - WHAT IN THE FUCK ARE WE DOING HERE!!!!
    !yuki - (◕‿◕✿) YUKI YUKI (◕‿◕✿)

Commands list of my Xat Bots.

    Commands list of my Xat Bots.

     
    /* Normal cmd */
    - Say
    - Latest
    - Delistcheck : !delistcheck [chatname]
    - Roominfo : !roominfo [chatname]
    - Chatid : !chatid [chatname]
    - Chatname : !chatname [chatid]
    - Userinfo : !userinfo [users]
    - LS : !ls [power]
    - Price : !price [power]
    - Store : !store [power]
    - Shortname : !shortname [name]
    - Twitter : !twitter [name]
    - Youtube : !youtube [search]
    - Google : !google [search]
    - Isup : !isup [website]
    - Regname : !regname [id]
    - ID : !id [regname]
    - Rcheck : !rcheck [room]
    - Twitch : !twitch [user]
     
    /* Admin CMD */
     
    - Dev : !dev [restart/memory]
    - Editbot : !editbot [name/avatar/home/cmdcode/getmain] [value]
    - Automessage : !automessage [on/off]
    - Autogames : !autogames [on/off]
    - Acclist : !acclist [add/remove/check/reset] [user]
    - Blocklist : !blocklist [add/remove/check/reset] [user]
     
    That's all for now.

Draft Bot Commands

Draft Bot Commands


    Draft Bot Commands
     
    **Commands:**
     
     draft
        -- init (starts a new draft)
        -- reset (resets draft data in that room)
        -- team/addteam [name], [captain] (adds a new team)
        -- post (posts the data)
        -- export (exports results to hastebin)
        -- import/load [hastebin csv] (imports players)
            [to use this, simply export a csv file to hastebin and the bot will read it]
        -- guide/help (displays this guide)
        -- setnominate [name] (manually decide who will nominate)
        -- nom/nominate [name] (nominates the player to be drafted)
        -- playerlist (displays the list of players)
        -- override (an arbitrary command to fix the draft data)
                 -- money
                       -- give/add [team - no spaces] [amount]
                       -- take/remove [team - no spaces] [amount]
                 -- coach/captain [team - no spaces] [captain's name]
                 -- players
                         -- add [team - no spaces] [player name]
                         -- remove [team - no spaces] [player name]
                         -- list
                              -- add [player name]
                              -- remove [player name]
                 -- team
                      -- add [name], [captain]
                      -- remove [name]
     bid [amount] (amounts less than 100 will be multiplied by 1000)
     
    **END of commands**
     
    NOTE: Only spaces are needed unless specified with a comma.
    Ex.
    +d nominate deez nuts
    +d override players list add john cena (will add john cena to the pool of players that can be nominated for bidding)
    +d override team add Dank Memes, John Cena (adds a new team called Dank Memes, with John Cena as the coach)

Telegram Bot Commands

Telegram Bot Commands


Telegram Bot Commands

    <?php
     
    $botToken = "58164031:AAFV0nFXU7Mfla5ro5xp-tyXrd05d1g2pkM";
    $website = "https://api.telegram.org/bot".$botToken;
     
    $update = file_get_contents('php://input');
    $update = json_decode($update, TRUE);
     
     
    $chatId = $update["message"]["chat"]["id"];
    $message = $update["message"]["text"];
     
     
    switch($message) {
           
            case "/test":
                    sendMessage($chatId, "test");
                    break;
            case "/hi":
                    sendMessage($chatId, "hi there!");
                    break;
            default:
                    sendMessage($chatId, "default");
           
    }
     
    function sendMessage ($chatId, $message) {
           
            $url = $GLOBALS[website]."/sendMessage?chat_id=".$chatId."&text=".urlencode($message);
            file_get_contents($url);
           
    }
     
     
     
     
     
    ?>

ixat bot commands

ixat bot commands


ixat bot commands

    say message | makes the bot say a message
    !changename new_name | makes the bot change his name to the name specified, this is saved for re-logins
    !setavatar new_ava | makes the bot change his avatar to the avatar specified, this is saved for re-logins
    !setwebsite new_web | makes the bot change his website/homepage, this is saved for re-logins
    !choose arg_1 or arg_2 or arg_3 | You can add as much choices as you want, separated by or, makes the bot choose one of the args
    !spam message | makes the bot spam a specific message until !stopspam is called, interval is 500ms, could be faster if you call the command 2 times
    !pm user_id:message | makes the bot send a PM to the specified user and send the message specified
    !pmspam user_id:message | makes the bot spam one's pm, doesn't stop until !stoppmspam is called, interval is 500ms
    !8ball question | makes the bot do an "8ball" on your question and replies with an answer
    !insult user | makes the bot insult the user specified
    !kick user_id | if the bot has moderator powers, he kicks the user specified
    !lovetest person1 and person2 | makes a lovetest between the TWO persons specified, replies with a percentage and a note
    !changeWMSG new_WMSG | changes the welcome message the bot sends once he joins the chat, this is saved for re-logins
    !fartsscmd person | says that person farted..
    !bealertof message | makes users alert of a message, saying it's of "great importance"
    -sniffmode | makes the bot ignore all commands, and be used a sniff tool instead
    -giveaccess user_id | allows the user specified to use the bot's commands
    -removeaccess user_id | removes access of bot commands from the user_id specified

Zyths Skype Bot Commands

Zyths Skype Bot Commands


Zyths Skype Bot Commands

    !ping
    !topicappend
    !joke
    !dice
    !say
    !resolve
    !tube
    !8ball
    !define
    !google
    !commands
    !pwgen
    !ip2skype
    !fml
    !slap
    !kiss
    !webresolve
    !geo
    !spam
    !cmds

Modified ModBot Commands (ModBot v1.3)

Modified ModBot Commands (ModBot v1.3)


Modified ModBot Commands (ModBot v1.3)

    // Mod Levels :
    // 1 - Basic Mod
    // 2 - Super Mod
    // 3 - Trusted Mod
    // 4 - Streamer
     
    !raffle/giveaway announce - (Mod level 1 and above) Let the viewers know that a raffle is ongoing.
    !raffle/giveaway roll - (Mod level 2 and above) Roll for a winner.
    !raffle/giveaway help - (Everyone) Information about how to qualify for the raffle.
     
    !<currency> - (Everyone) Check your own currency points.
    !<currency> <name> - (Mod level 1 and above) Check the currency points of a user.
    !<currency> top5 - (Everyone) Prints a list of the 5 users with the most currency points.
    !<currency> lock - (Mod level 2 and above) Lock the currency command, keeps the command available to mods.
    !<currency> unlock - (Mod level 2 and above) Unlocks the currency command.
    !<currency> clear - (Mod level 3 and above) Clears all the points.
    !<currency> add/remove/set <amount> <name> - (Mod level 3 and above) Add or remove currency points from a user (or everyone if name is "all")
     
    !modbot payout <amount> - (Streamer only) Changes the currency payout amount for the session (does not save if the bot is restarted).
    !modbot interval <time> - (Streamer only) Changes the currency handout interval for the session (does not save if the bot is restarted).
    !modbot greetings on/off - (Streamer only) Enables/disables welcome greetings for the session (does not save if the bot is restarted, will change soon).
    !modbot greetings set <text> - (Streamer only) Changes the welcome greeting message (@user is replaced with the user's name).
    !modbot addsub <name> - (Streamer only) Adds a user as a subscriber (subscribers get double the amount of currency in handouts, hardcoded, will change soon).
    !modbot removesub <name> - (Streamer only) Removes a user from the subscribers list.
    !modbot addcommand <level> <command> <output text> - (Mod level 2 and above) Adds a command
    !modbot removecommand <command> - (Mod level 2 and above) Removes a command
    !modbot commandlist - (Mod level 1 and above) Prints a list of available commands (added through "!mod addcommand")
    !modbot addmod <name> - (Mod level 3 and above) Adds a basic mod.
    !modbot addsuper <name> - (Mod level 3 and above) Adds a super mod.
    !modbot demote <name> - (Mod level 3 and above) Demotes a mod by 1 level.
    !modbot setlevel <name> <level> - (Mod level 3 and above) Sets a user to a mod with a specific level (only the streamer can add a level 3 mod, level 3 mod can add a level 2 mod, no one can add a level 4 mod).
     
    !gamble open <maxbet> <option1> <option2> ... <optionN> - (Mod level 2 and above) Opens a betting pool.
    !gamble close - (Mod level 2 and above) Closes the betting pool.
    !gamble winner <optionname> - (Mod level 2 and above) Draws all of the users who chose that option as winners (must supply full option name).
    !gamble cancel - (Mod level 2 and above) Cancels the betting pool and refunds all of the bets.
     
    !bet help - (Everyone) Shows which options are available and how to bet.
    !bet <amount> <option> - (Everyone) Bet <amount> on <option>, must supply full option name.
    !bet - (Everyone) Tells you about your bet.
     
    !auction open - (Mod level 2 and above) Opens an auction.
    !auction close - (Mod level 2 and above) Closes the auction.
    !auction cancel - (Mod level 2 and above) Cancels the auction and refunds bids.
     
    !bid <amount> - (Everyone) Bids <amount> at the auction.
     
     
    Undocumented commands were not removed (except the !raffle commands), they were not modified and function the same.

Hera 2.4.7 NO CVAR3

Hera 2.4.7 NO CVAR3


--stupid hera edited by yuuki to get rid of cvar 3

--[[

-================================-


Hera v4 - A Garry's Mod aimbot [Multi-Hack]


-================================-

]]--


/************************************
Name: Localizing
Purpose: Make the cheat run faster
************************************/

//if ( Hera ) then _G.Hera = nil end -- noob !!

local g                     = table.Copy(_G)
local Hera                    = {}
Hera.hooks                    = {}
Hera.concommands            = {}
Hera.convars                = {}
Hera.timers                    = {}
Hera.spectators                = {}
Hera.admins                    = {}
Hera.version                = "4.2.7"
Hera.log                    = {}
Hera.files                    = {"Hera.lua","log.txt","gmcl_cvar3_win32.dll","gmcl_hera_win32.dll"}
Hera.traitors                = {}

Hera.bones                    = {
{"Head", "ValveBiped.Bip01_Head1"},
{"Neck", "ValveBiped.Bip01_Neck1"},
{"Spine", "ValveBiped.Bip01_Spine"},
{"Spine1", "ValveBiped.Bip01_Spine1"},
{"Spine2", "ValveBiped.Bip01_Spine2"},
{"Spine4", "ValveBiped.Bip01_Spine4"},
{"Pelvis", "ValveBiped.Bip01_Pelvis"},
{"R Upperarm", "ValveBiped.Bip01_R_UpperArm"},
{"R Forearm", "ValveBiped.Bip01_R_Forearm"},
{"R Hand", "ValveBiped.Bip01_R_Hand"},
{"L Upperarm", "ValveBiped.Bip01_L_UpperArm"},
{"L Forearm", "ValveBiped.Bip01_L_Forearm"},
{"L Hand", "ValveBiped.Bip01_L_Hand"},
{"R Thigh", "ValveBiped.Bip01_R_Thigh"},
{"R Calf", "ValveBiped.Bip01_R_Calf"},
{"R Foot", "ValveBiped.Bip01_R_Foot"},
{"R Toes", "ValveBiped.Bip01_R_Toe0"},
{"L Thigh", "ValveBiped.Bip01_L_Thigh"},
{"L Calf", "ValveBiped.Bip01_L_Calf"},
{"L Foot", "ValveBiped.Bip01_L_Foot"},
{"L Toes", "ValveBiped.Bip01_L_Toe0"},
}

Hera.espbones = {
{ S = "ValveBiped.Bip01_Head1", E = "ValveBiped.Bip01_Neck1" },
{ S = "ValveBiped.Bip01_Neck1", E = "ValveBiped.Bip01_Spine4" },
{ S = "ValveBiped.Bip01_Spine4", E = "ValveBiped.Bip01_Spine2" },
{ S = "ValveBiped.Bip01_Spine2", E = "ValveBiped.Bip01_Spine1" },
{ S = "ValveBiped.Bip01_Spine1", E = "ValveBiped.Bip01_Spine" },
{ S = "ValveBiped.Bip01_Spine", E = "ValveBiped.Bip01_Pelvis" },
{ S = "ValveBiped.Bip01_Spine4", E = "ValveBiped.Bip01_L_UpperArm" },
{ S = "ValveBiped.Bip01_L_UpperArm", E = "ValveBiped.Bip01_L_Forearm" },
{ S = "ValveBiped.Bip01_L_Forearm", E = "ValveBiped.Bip01_L_Hand" },
{ S = "ValveBiped.Bip01_Spine4", E = "ValveBiped.Bip01_R_UpperArm" },
{ S = "ValveBiped.Bip01_R_UpperArm", E = "ValveBiped.Bip01_R_Forearm" },
{ S = "ValveBiped.Bip01_R_Forearm", E = "ValveBiped.Bip01_R_Hand" },
{ S = "ValveBiped.Bip01_Pelvis", E = "ValveBiped.Bip01_L_Thigh" },
{ S = "ValveBiped.Bip01_L_Thigh", E = "ValveBiped.Bip01_L_Calf" },
{ S = "ValveBiped.Bip01_L_Calf", E = "ValveBiped.Bip01_L_Foot" },
{ S = "ValveBiped.Bip01_L_Foot", E = "ValveBiped.Bip01_L_Toe0" },
{ S = "ValveBiped.Bip01_Pelvis", E = "ValveBiped.Bip01_R_Thigh" },
{ S = "ValveBiped.Bip01_R_Thigh", E = "ValveBiped.Bip01_R_Calf" },
{ S = "ValveBiped.Bip01_R_Calf", E = "ValveBiped.Bip01_R_Foot" },
{ S = "ValveBiped.Bip01_R_Foot", E = "ValveBiped.Bip01_R_Toe0" },
}

Hera.aimmodels = {
["models/combine_scanner.mdl"] = "Scanner.Body",
["models/hunter.mdl"] = "MiniStrider.body_joint",
["models/combine_turrets/floor_turret.mdl"] = "Barrel",
["models/dog.mdl"] = "Dog_Model.Eye",
["models/antlion.mdl"] = "Antlion.Body_Bone",
["models/antlion_guard.mdl"] = "Antlion_Guard.Body",
["models/antlion_worker.mdl"] = "Antlion.Head_Bone",
["models/zombie/fast_torso.mdl"] = "ValveBiped.HC_BodyCube",
["models/zombie/fast.mdl"] = "ValveBiped.HC_BodyCube",
["models/headcrabclassic.mdl"] = "HeadcrabClassic.SpineControl",
["models/headcrabblack.mdl"] = "HCBlack.body",
["models/headcrab.mdl"] = "HCFast.body",
["models/zombie/poison.mdl"] = "ValveBiped.Headcrab_Cube1",
["models/zombie/classic.mdl"] = "ValveBiped.HC_Body_Bone",
["models/zombie/classic_torso.mdl"] = "ValveBiped.HC_Body_Bone",
["models/zombie/zombie_soldier.mdl"] = "ValveBiped.HC_Body_Bone",
["models/combine_strider.mdl"] = "Combine_Strider.Body_Bone",
["models/lamarr.mdl"] = "HeadcrabClassic.SpineControl",
}
Hera.prediction                = {
["weapon_crossbow"] = 3485,
["weapon_pistol"] = 40000,
["weapon_357"] = 20500,
["weapon_smg"] = 39000,
["weapon_ar2"] = 39000,
["weapon_shotgun"] = 35000,
["weapon_rpg"] = 0,   
}

Hera.props                    = {
"models/props/de_tides/gate_large.mdl",
"models/props_c17/FurnitureCouch001a.mdl",
"models/props_c17/furnitureStove001a.mdl",
"models/props_junk/sawblade001a.mdl",
"models/props_junk/TrashDumpster01a.mdl",
"models/props_combine/breendesk.mdl",
"models/props_c17/Lockers001a.mdl",
"models/props/de_train/lockers001a.mdl",
"models/props/de_train/lockers_long.mdl",
"models/props_canal/canal_bars004.mdl",
"models/props_c17/FurnitureCouch001a.mdl",
};

Hera.laser                    = {
"weapon_pocket",
"weapon_crowbar",
"keys",
"pocket",
"weapon_toolgun",
"weapon_physgun",
"weapon_camera",
"camera",
}

Hera.dev                    = { -- for module shit
"STEAM_0:0:40143824",
"STEAM_0:1:58058392",
}

local colors                = {}
red                            = Color(255,0,0,255);
black                        = Color(0,0,0,255);
green                        = Color(0,255,0,255);
white                        = Color(255,255,255,255);
blue                        = Color(0,0,255,255);
cyan                        = Color(0,255,255,255);
pink                         = Color(255,0,255,255);
blue                        = Color(0,0,255,255);
grey                        = Color(100,100,100,255);
gold                        = Color(255,228,0,255);
lblue                        = Color(155,205,248);
lgreen                        = Color(174,255,0);
iceblue                        = Color(116,187,251,255);
local COLOR_VISIBLE            = Color(0,255,0,150)
local COLOR_NONVISIBLE      = Color(255,0,0,150)
local COLOR_FROZEN            = Color(0,0,255,150)
local COLOR_FROZEN_NV        = Color(255,255,0,150)

local _G                    = table.Copy( _G )
local _R                    = _G.debug.getregistry()

local math                     = _G.math
local string                 = _G.string
local hook                     = _G.hook
local table                 = _G.table
local timer                 = _G.timer
local surface                 = _G.surface
local concommand             = _G.concommand
local cvars                 = _G.cvars
local ents                     = _G.ents
local player                 = _G.player
local team                     = _G.team
local util                     = _G.util
local draw                     = _G.draw
local usermessage             = _G.usermessage
local vgui                     = _G.vgui
local http                     = _G.http
local cam                     = _G.cam
local render                 = _G.render

local MsgN                     = _G.MsgN
local Msg                     = _G.Msg
local Vector                 = _G.Vector
local Angle                 = _G.Angle
local pairs                 = _G.pairs
local ipairs                 = _G.ipairs
local CreateSound             = _G.CreateSound
local setmetatable             = _G.setmetatable
local Sound                 = _G.Sound
local print                 = _G.print
local pcall                 = _G.pcall
local type                     = _G.type
local LocalPlayer             = _G.LocalPlayer
local KeyValuesToTable         = _G.KeyValuesToTable
local TableToKeyValues         = _G.TableToKeyValues
local Color                 = _G.Color
local CreateClientConVar     = _G.CreateClientConVar
local ErrorNoHalt             = _G.ErrorNoHalt
local IsValid                 = _G.IsValid
local CreateMaterial         = _G.CreateMaterial
local tonumber                 = _G.tonumber
local tostring                 = _G.tostring
local CurTime                 = _G.CurTime
local FrameTime             = _G.FrameTime
local ScrW                     = _G.ScrW
local ScrH                     = _G.ScrH
local SetClipboardText         = _G.SetClipboardText
local GetHostName             = _G.GetHostName
local unpack                 = _G.unpack
local AddConsoleCommand     = _G.AddConsoleCommand
local require                = _G.require
local include                = _G.include

local MOVETYPE_OBSERVER     = _G.MOVETYPE_OBSERVER
local MOVETYPE_NONE         = _G.MOVETYPE_NONE
local TEXT_ALIGN_LEFT         = _G.TEXT_ALIGN_LEFT
local TEXT_ALIGN_TOP         = _G.TEXT_ALIGN_TOP
local TEXT_ALIGN_RIGHT         = _G.TEXT_ALIGN_RIGHT
local TEXT_ALIGN_BOTTOM        = _G.TEXT_ALIGN_BOTTOM
local IN_JUMP                 = _G.IN_JUMP
local IN_FORWARD             = _G.IN_FORWARD
local IN_BACK                 = _G.IN_BACK
local IN_MOVERIGHT             = _G.IN_MOVERIGHT
local IN_MOVELEFT             = _G.IN_MOVELEFT
local IN_SPEED                 = _G.IN_SPEED
local IN_DUCK                 = _G.IN_DUCK
local TEAM_SPECTATOR         = 1002

-- old [copy]
local old_filecdir             = file.CreateDir;
local old_filedel             = file.Delete;
local old_fileexist         = file.Exists;
local old_fileexistex         = file.ExistsEx;
local old_filefind             = file.Find;
local old_filefinddir         = file.FindDir;
local old_filefindil         = file.FindInLua;
local old_fileisdir            = file.IsDir;
local old_fileread             = file.Read;
local old_filerename         = file.Rename;
local old_filesize             = file.Size;
local old_filetfind            = file.TFind;
local old_filetime             = file.Time;
local old_filewrite         = file.Write;
local old_dbginfo             = debug.getinfo;
local old_dbginfo             = debug.getupvalue;
local old_timerc            = timer.Create;
local old_cve                 = ConVarExists;
local old_gcv                 = GetConVar;
local old_gcvn                 = GetConVarNumber;
local old_gcvs                 = GetConVarString;
local old_rcc                 = RunConsoleCommand;
local old_hookadd            = hook.Add;
local old_hookrem             = hook.Remove;
local old_ccadd                = concommand.Add;
local old_ccrem             = concommand.Remove;
local old_cvaracc             = cvars.AddChangeCallback;
local old_cvargcvc             = cvars.GetConVarCallbacks;
local old_cvarchange         = cvars.OnConVarChanged;
local old_require            = require;
local old_eccommand         = engineConsoleCommand;
local old_rs                = RunString;
local old_ccmd                = _R.Player.ConCommand;
local old_include            = include;
local old_usermsginc        = usermessage.IncomingMessage;

--Fonts--
surface.CreateFont("ESPFont",{font = "ScoreboardText", size = 17, weight = 400, antialias = 0})
surface.CreateFont("ESPFont_Small",{font = "Default", size = 12, weight = 200, antialias = 0})
surface.CreateFont("Logo",{font = "akbar", size = 21, weight = 400, antialias = 0})
surface.CreateFont("Hera_ScoreboardText",{font = "ScoreboardText", size = 15, weight = 700, antialias = 0})
surface.CreateFont("Hera_coolvetica",{font = "coolvetica", size = 16, weight = 500, antialias = 0})
surface.CreateFont("Hera_hvh",{font = "ScoreboardTextt", size = 15, weight = 1000, antialias = 1})
surface.CreateFont("Hera_coolvetica2",{font = "coolvetica", size = 20, weight = 500, antialias = 1})


----------------
//require('cvar3')
----------------



--Materials--
function Hera:CreateMaterial()
local BaseInfo = {
["$basetexture"] = "models/debug/debugwhite",
["$model"]       = 1,
["$translucent"] = 1,
["$alpha"]       = 1,
["$nocull"]      = 1,
["$ignorez"]     = 1
}   
local mat   
if GetConVarString("Hera_ESP_Chams_Material") == "Solid" then
    mat = CreateMaterial( "hera_solid", "VertexLitGeneric", BaseInfo )
elseif GetConVarString("Hera_ESP_Chams_Material") == "Wireframe" then
    mat = CreateMaterial( "hera_wire", "Wireframe", BaseInfo )
end
   return mat
end

/*****
Hera:IsDev
*****/
function Hera:IsDev(ply)
    if table.HasValue(Hera.dev,ply:SteamID()) then
        return true
    else
        return false
    end
end

/*******************************************
Name: Print/Chat functions
Purpose: Notify the user of what's going on
********************************************/
function Hera.Print(msg)
    print("[Hera] "..msg)
end

function Hera.Notify(dosound,col,msg)
    if col then
        col = col
    end
chat.AddText(
iceblue, "[Hera] ",
col, msg)
    if dosound == sound then
        local beep = Sound( "/buttons/button17.wav" )
        local beepsound = CreateSound( LocalPlayer(), beep )
        beepsound:Play()
    end
end

/**************************************
Name: Logger
Purpose: Logs functions and shit
**************************************/ -- ..string.char(92).."Hera"
if !old_fileexist("Hera","DATA") then
    old_filecdir("Hera");
    Hera.Notify(false,lgreen,"Created directory data/Hera/")
end
function Hera:Log(msg)
    if !old_fileexist("Hera/log.txt","DATA") then
        Hera.Notify(false,lblue,"Started log in data/Hera/log.txt")
        old_filewrite("Hera/log.txt","Log started "..os.date().." \n")
    end
    table.insert(Hera.log,"["..os.date("%H:%M:%S").."]: "..msg)
    file.Append("Hera/log.txt","["..os.date().."]: "..msg.."\n")
end

/***********************************************
Name: Hook functions
Purpose: Add hooks and protect from anticheats
************************************************/

-- Hera:RegisterHook
function Hera:RegisterHook(Type,Function)
    Name = Type.." | "..math.random(1,1000),math.random(1,2000),math.random(1,3000) -- Simple hook names
    Hera.Print("[ADDED] Hook: ["..Type.."] | Name: "..Name.."")
    table.insert(Hera.hooks,Name)
    return old_hookadd(Type,Name,Function)
end

-- Hera:RemoveHook
function Hera:RemoveHook(Type,Function)
    Hera.Print("[REMOVED] Hook: ["..Type.."]")
    return old_hookrem(Type,Function)
end

/**************
Random String
**************/
function Hera:RandomString( len )
    local ret = ""
        for i = 1 , len do
            ret = ret .. string.char( math.random( 65 , 116 ) )
        end
    return ret
end

/**********************
Name: Timer shit
Purpose: Anything timer
***********************/
function Hera:AddTimer( sec, rep, func )
    local index = Hera:RandomString( 10 )   
    Hera.timers[ index ] = sec   
    old_timerc( index, sec, rep, func )
end

/******************************************
Name: ConCommand Shit
Purpose: Anything related to concommands
********************************************/

function Hera:AddCMD(Name,Function)
    table.insert(Hera.concommands,Name)
    Hera.Print("[ADDED] ConCommand: "..Name)
    return old_ccadd(Name,Function)
end

function Hera:RemoveCMD(Name)
    table.Empty(Hera.concommands)
    Hera.Print("[REMOVED] ConCommand: "..Name)
    return old_ccrem(Name)
end

/*******************************************
Name: ConVars
Purpose: Anything with ConVars
********************************************/

function Hera:CreateConVar(convar,str,save,data)
    table.insert(Hera.convars,"Hera_"..convar)
    return CreateClientConVar("Hera_"..convar,str,true,false), Hera.Print("[ADDED] ConVar: Hera_"..convar.." ["..str.."]")
end

/***************************************
Name: RunConsoleCommand shit
Purpose: Detours, Loggers, blockers
****************************************/
Hera.dontlog                = {
"+jump",
"-jump",
"+attack",
"-attack",
"impulse"
}
Hera.badcmds                = {
"__ac",
"__imacheater",
"gm_possess",
"__uc_", -- RIOT
"_____b__c",
"___m",
"sc",
"bg",
"bm",
"kickme",
"gw_iamacheater",
"imafaggot",
"birdcage_browse",
"reportmod",
"_fuckme",
"st_openmenu",
"_NOPENOPE",
"__ping",
"ar_check",
"GForceRecoil", -- Fake cmd, but fuck you RIOT servers
"~__ac_auth",
"blade_client_check",
"blade_client_detected_message",
"disconnect",
"exit",
"retry",
"kill",
"dac_imcheating", -- fuck u bich
"dac_pleasebanme", -- fuck u bich
"excl_banme", -- fuck u bitch
}

/*========================================

Detours, logggers, and other shit

==========================================*/

-- RunConsoleCommand log
function RunConsoleCommand(cmd,...)
    if !table.HasValue(Hera.dontlog, cmd) and !table.HasValue(Hera.convars,cmd) then
        Hera.Print("RunConsoleCommand: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        --Hera:Log("RunConsoleCommand: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        table.insert(Hera.log,"["..os.date("%H:%M:%S").."]: RunConsoleCommand: "..cmd.." ["..debug.getinfo(2).short_src.."]")
    end
    if !table.HasValue(Hera.badcmds,cmd) then
        return old_rcc(cmd,...)
    else
        Hera.Notify(sound,red,"Blocked command: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED COMMAND: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        return
    end
end

// ConCommand log
function _R.Player.ConCommand(pl,cmd)
    if !table.HasValue(Hera.dontlog, cmd) and !table.HasValue(Hera.concommands,cmd) and !table.HasValue(Hera.badcmds, cmd) then
        Hera.Print("ConCommand: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("ConCommand: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        return old_ccmd(pl, cmd)
    else
        Hera.Notify(sound, red, "Blocked ConCommand: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED ConCommand: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        return
    end
end

// concommand.Add log
function concommand.Add(cmd)
    if !table.HasValue(Hera.concommands, cmd) then
        Hera.Print("concommand.Add: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("concommand.Add: "..cmd.." ["..debug.getinfo(2).short_src.."]")
    end
return old_ccadd(cmd)
end

// concommand.Remove log
function concommand.Remove(cmd)
    if !table.HasValue(Hera.concommands, cmd) then
        Hera.Print("concommand.Remove: "..cmd.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("concommand.Remove: "..cmd.." ["..debug.getinfo(2).short_src.."]")
    end
return old_ccrem(cmd)
end

// RunString log
function RunString(s)
    Hera.Print("RunString: "..tostring(s).." ["..debug.getinfo(2).short_src.."]")
    Hera:Log("RunString: "..tostring(s).." ["..debug.getinfo(2).short_src.."]")
    return old_rs(s)
end

// include log
/*
function include(fn)
    if !table.HasValue(Hera.files, fn) then
        Hera.Print("Include: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("Include: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return old_include(fn)
    else
        Hera.Print("BLOCKED Include: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED Include: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return;
    end
end
*/

// file.Delete log
function file.Delete(fn)
    if !table.HasValue(Hera.files, fn) then
        Hera.Print("file.Delete: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("file.Delete: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return old_filedel(fn)
    else
        Hera.Print("BLOCKED file.Delete: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED file.Delete: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return;
    end
end

// file.Exists log
function file.Exists(fn, ad)
    if !table.HasValue(Hera.files, fn) then
        Hera.Print("file.Exists: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("file.Exists: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return old_fileexist(fn, ad)
    else
        Hera.Print("BLOCKED file.Exists: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED file.Exists: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return;
    end
end

// file.Find log
function file.Find(fn)
    if !table.HasValue(Hera.files, fn) then
        Hera.Print("file.Find: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("file.Find: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return old_filefind(fn)
    else
        Hera.Print("BLOCKED file.Find: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED file.Find: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return;
    end
end

// file.Read log
function file.Read(fn, ad)
    if !table.HasValue(Hera.files, fn) then
        Hera.Print("file.Read: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("file.Read: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return old_fileread(fn, ad)
    else
        Hera.Print("BLOCKED file.Read: "..fn.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED file.Read: "..fn.." ["..debug.getinfo(2).short_src.."]")
        return;
    end
end

// file.Write log
function file.Write(fn, data)
    Hera.Print("file.Write: "..fn.." ["..debug.getinfo(2).short_src.."]")
    Hera:Log("file.Write: "..fn.." ["..debug.getinfo(2).short_src.."]")
    return old_filewrite(fn, data)
end

// timer.Create log (useless)
function timer.Create( index, sec, rep, func)
    Hera.Print("timer.Create: "..index.." ["..debug.getinfo(2).short_src.."]")
    Hera:Log("timer.Create: "..index.." ["..debug.getinfo(2).short_src.."]")
    return old_timerc( index, sec, rep, func )
end

// usermessage.IncomingMessage log
/*
function usermessage.IncomingMessage(name, um, ...)
    if ( name == "ttt_role" ) then
        for k , v in pairs( Hera.traitors ) do
            Hera.traitors = {}
        end
    end
    Hera.Print("usermessage.IncomingMessage: "..name.." ["..debug.getinfo(2).short_src.."]")
    Hera:Log("usermessage.IncomingMessage: "..name.." ["..debug.getinfo(2).short_src.."]")
    return old_usermsginc(name, um, ...);
end
*/

// ConVarExists log
function ConVarExists(cvar)
    if !table.HasValue(Hera.convars,cvar) then
        Hera.Print("ConVarExists: "..cvar.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("ConVarExists: "..cvar.." ["..debug.getinfo(2).short_src.."]")
        return old_cve(cvar)
    else
        Hera.Print("BLOCKED ConVarExists: "..cvar.." ["..debug.getinfo(2).short_src.."]")
        Hera:Log("BLOCKED ConVarExists: "..cvar.." ["..debug.getinfo(2).short_src.."]")
        return;
    end
end


/**************************
Name: Derma shit
Purpose: Anything Derma
***************************/
function Hera:AddCheckBox( text, cvar, parent, x, y, tt )
local checkbox = vgui.Create( "DCheckBoxLabel", parent )
checkbox:SetPos( x, y )
checkbox:SetText( text )
checkbox:SetConVar( cvar )
checkbox:SetTextColor(white)
checkbox:SetTooltip( tt or "No Tool Tip" )
checkbox:SizeToContents()   
end

// Hera:AddSlider for the derma
function Hera:AddSlider( text, cvar, parent, min, max, decimals, x, y, wide, tt )
local slider = vgui.Create( "DNumSlider" )
slider:SetParent( parent )
slider:SetPos( x, y )
slider:SetWide( wide )
slider:SetText( text )
--slider:SetTextColor(BLACK)
slider:SetMin( min )
slider:SetMax( max )
slider:SetDecimals( decimals )
slider:SetConVar( cvar )
slider:SetTooltip( tt or "No Tool Tip" )
end

Gradient = surface.GetTextureID( "gui/gradient" )
function Hera:DrawBox( x, y, wide, tall, dropsize )
    draw.RoundedBoxEx( 4, x, y, wide, dropsize, iceblue, true, true, false, false )
    draw.RoundedBoxEx( 4, x, y + dropsize, wide, tall - dropsize, Color( 0, 0, 0, 100 ), false, false, true, true )
end

/*************************
Name: CreatePos
Purpose: Create a position
Credits: BaconBot
***************************/
function Hera:CreatePos(v)
local ply = LocalPlayer()
local ang = Angle( 0, LocalPlayer():EyeAngles().y, 0 )
local nom = v:GetPos()
local center = v:LocalToWorld( v:OBBCenter() )
local min, max = v:OBBMins(), v:OBBMaxs()
local dim = max - min    local z = max + min   
local frt    = ( v:GetForward() ) * ( dim.y / 2 )
local rgt    = ( v:GetRight() ) * ( dim.x / 2 )
local top    = ( v:GetUp() ) * ( dim.z / 2 )
local bak    = ( v:GetForward() * -1 ) * ( dim.y / 2 )
local lft    = ( v:GetRight() * -1 ) * ( dim.x / 2 )
local btm    = ( v:GetUp() * -1 ) * ( dim.z / 2 )
local s = 1
local FRT     = center + frt / s + rgt / s + top / s; FRT = FRT:ToScreen()
local BLB     = center + bak / s + lft / s + btm / s; BLB = BLB:ToScreen()
local FLT    = center + frt / s + lft / s + top / s; FLT = FLT:ToScreen()
local BRT     = center + bak / s + rgt / s + top / s; BRT = BRT:ToScreen()
local BLT     = center + bak / s + lft / s + top / s; BLT = BLT:ToScreen()
local FRB     = center + frt / s + rgt / s + btm / s; FRB = FRB:ToScreen()
local FLB     = center + frt / s + lft / s + btm / s; FLB = FLB:ToScreen()
local BRB     = center + bak / s + rgt / s + btm / s; BRB = BRB:ToScreen()   
local z = 100
if ( v:Health() <= 50 ) then z = 100 end
local x, y = ( ( v:Health() / 100 ) ), 1
if ( v:Health() <= 0 ) then x = 1 end
local FRT3     = center + frt + rgt + top / x; FRT3 = FRT3; FRT3 = FRT3:ToScreen()
local BLB3     = center + bak + lft + btm / x; BLB3 = BLB3; BLB3 = BLB3:ToScreen()
local FLT3    = center + frt + lft + top / x; FLT3 = FLT3; FLT3 = FLT3:ToScreen()
local BRT3     = center + bak + rgt + top / x; BRT3 = BRT3; BRT3 = BRT3:ToScreen()
local BLT3     = center + bak + lft + top / x; BLT3 = BLT3; BLT3 = BLT3:ToScreen()
local FRB3     = center + frt + rgt + btm / x; FRB3 = FRB3; FRB3 = FRB3:ToScreen()
local FLB3     = center + frt + lft + btm / x; FLB3 = FLB3; FLB3 = FLB3:ToScreen()
local BRB3     = center + bak + rgt + btm / x; BRB3 = BRB3; BRB3 = BRB3:ToScreen()   
local x, y, z = 1.1, 0.9, 1
local FRT2     = center + frt / y + rgt / z + top / x; FRT2 = FRT2:ToScreen()
local BLB2     = center + bak / y + lft / z + btm / x; BLB2 = BLB2:ToScreen()
local FLT2    = center + frt / y + lft / z + top / x; FLT2 = FLT2:ToScreen()
local BRT2     = center + bak / y + rgt / z + top / x; BRT2 = BRT2:ToScreen()
local BLT2     = center + bak / y + lft / z + top / x; BLT2 = BLT2:ToScreen()
local FRB2     = center + frt / y + rgt / z + btm / x; FRB2 = FRB2:ToScreen()
local FLB2     = center + frt / y + lft / z + btm / x; FLB2 = FLB2:ToScreen()
local BRB2     = center + bak / y + rgt / z + btm / x; BRB2 = BRB2:ToScreen()   
local maxX = math.max( FRT.x,BLB.x,FLT.x,BRT.x,BLT.x,FRB.x,FLB.x,BRB.x )
local minX = math.min( FRT.x,BLB.x,FLT.x,BRT.x,BLT.x,FRB.x,FLB.x,BRB.x )
local maxY = math.max( FRT.y,BLB.y,FLT.y,BRT.y,BLT.y,FRB.y,FLB.y,BRB.y )
local minY = math.min( FRT.y,BLB.y,FLT.y,BRT.y,BLT.y,FRB.y,FLB.y,BRB.y )
local minYhp2 = math.min( FRT.y,BLB.y,FLT.y,BRT.y,BLT.y,FRB.y,FLB.y,BRB.y )
local maxXhp = math.max( FRT3.x,BLB3.x,FLT3.x,BRT3.x,BLT3.x,FRB3.x,FLB3.x,BRB3.x )
local minXhp = math.min( FRT3.x,BLB3.x,FLT3.x,BRT3.x,BLT3.x,FRB3.x,FLB3.x,BRB3.x )
local maxYhp = math.max( FRT3.y,BLB3.y,FLT3.y,BRT3.y,BLT3.y,FRB3.y,FLB3.y,BRB3.y )
local minYhp = math.min( FRT3.y,BLB3.y,FLT3.y,BRT3.y,BLT3.y,FRB3.y,FLB3.y,BRB3.y )   
local maxX2 = math.max( FRT2.x,BLB2.x,FLT2.x,BRT2.x,BLT2.x,FRB2.x,FLB2.x,BRB2.x )
local minX2 = math.min( FRT2.x,BLB2.x,FLT2.x,BRT2.x,BLT2.x,FRB2.x,FLB2.x,BRB2.x )
local maxY2 = math.max( FRT2.y,BLB2.y,FLT2.y,BRT2.y,BLT2.y,FRB2.y,FLB2.y,BRB2.y )
local minY2 = math.min( FRT2.y,BLB2.y,FLT2.y,BRT2.y,BLT2.y,FRB2.y,FLB2.y,BRB2.y )
local mon = nom + Vector( 0, 0, LocalPlayer():OBBMaxs()[3] )           
local BOXPOS1 = Vector( 16, 16, 0 )
BOXPOS1:Rotate( ang )
BOXPOS1 = ( nom + BOXPOS1 ):ToScreen()
local BOXPOS2 = Vector( 16, -16, 0 )
BOXPOS2:Rotate( ang )
BOXPOS2 = ( nom + BOXPOS2 ):ToScreen()
local BOXPOS3 = Vector( -16, -16, 0 )
BOXPOS3:Rotate( ang )
BOXPOS3 = ( nom + BOXPOS3 ):ToScreen()
local BOXPOS4 = Vector( -16, 16, 0 )
BOXPOS4:Rotate( ang )
BOXPOS4 = ( nom + BOXPOS4 ):ToScreen()
local BOXPOS5 = Vector( 16, 16, 0 )
BOXPOS5:Rotate( ang )
BOXPOS5 = ( mon + BOXPOS5 ):ToScreen()
local BOXPOS6 = Vector( 16, -16, 0 )
BOXPOS6:Rotate( ang )
BOXPOS6 = ( mon + BOXPOS6 ):ToScreen()
local BOXPOS7 = Vector( -16, -16, 0 )
BOXPOS7:Rotate( ang )
BOXPOS7 = ( mon + BOXPOS7 ):ToScreen()
local BOXPOS8 = Vector( -16, 16, 0 )
BOXPOS8:Rotate( ang )
BOXPOS8 = ( mon + BOXPOS8 ):ToScreen()
return maxX, minX, maxY, minY, maxX2, minX2, maxY2, minY2, minYhp, maxYhp, BOXPOS1, BOXPOS2, BOXPOS3, BOXPOS4, BOXPOS5, BOXPOS6, BOXPOS7, BOXPOS8
end


/**************************
Name: GetServerGM
Purpose: Check server's GM
***************************/

function GetServerGM( notify,name )
    if notify == true then
        Hera.Print("This server is using the gamemode '"..GAMEMODE.Name.."'.")
    end
    if ( string.find( string.lower( GAMEMODE.Name ), name ) ) then
        return true
    end
    return false
end

/*************************************
Name: PlayerVisible
Purpose: Check if a player is visible
*************************************/
local function CanSee(ent)   
    local tr = {};   
    tr.start = LocalPlayer():GetShootPos();
    tr.endpos = ent:GetPos() + Vector(0, 0, 5)
    tr.filter = {LocalPlayer(), ent};
    tr.mask = MASK_SHOT;   
    local trace = util.TraceLine(tr) ;
    if (trace.Fraction == 1) then
        return true;
    else
        return false;
    end    
end

/**********************************
Name: GetColors
Purpose: Make a cool color!
***********************************/
local function GetColorCrosshair()
    if LocalPlayer():GetEyeTrace().Entity:IsPlayer() then
        return 0,255,0,255
    end
    if LocalPlayer():GetEyeTrace().Entity:IsNPC() then
        return 0,0,255,255
    end
    return team.GetColor(LocalPlayer():Team())
end

local function GetColorVisible(e)
    if CanSee(e) then
        return 0,255,0,255
    end
    if !CanSee(e) then
        return 255,0,0,255
    end
end

/*********************
Name: IsVehicle
Purpose: Find vehicles
*********************/
function Hera.IsVehicle( e )   
    local ply = LocalPlayer()   
    if ( string.find( e:GetClass(), "prop_vehicle_" ) && ply:GetMoveType() ~= 0 ) then
        return true
    end
    return false
end

/***************************
Name: SetColors
Purpose: Set Colors
****************************/
function Hera:IsCustomEnt( entclass )
    return table.HasValue( Hera.ents, entclass )
end

function SetColors(e)
    local ply, class, model = LocalPlayer(), e:GetClass(), e:GetModel()
    local col   
    if ( e:IsPlayer() ) then
        col = Color(0,255,0,255)
    elseif ( e:IsNPC() ) then
        col = Color( 255, 0, 0, 20 )       
    elseif Hera:IsCustomEnt( e:GetClass() ) then
        col = Color( 0, 200, 255, 50 )       
    else
        col = Color( 255, 255, 255, 255 )       
    end   
    return col
end

/******************************
Name: Get Admin Type
Purpose: Get Admin Type..
*******************************/
local function GetAdminType(e)
    if e:IsAdmin() && !e:IsSuperAdmin() then
        return " [A] "
    elseif( e:IsSuperAdmin() ) then
        return " [SA] "
    end
    return " "
end

function Hera:CheckUpdate()
Hera.Print("Checking cheat version...")
    http.Fetch("https://dl.dropbox.com/u/150309237/Hera/version.txt", function(body, len, headers, code)
        if body == Hera.version then
            Hera.Notify(sound,green,"Your version of Hera is up to date! You are currently running veresion "..Hera.version)
        else
            Hera.Notify(sound,red,"Your version of Hera is outdated! Please update to version "..body)
        end
    end)
end
Hera:CheckUpdate()

function Hera:DoUpdate()
    Hera.Notify(false,green, "Please visit https://dl.dropbox.com/u/150309237/Hera/Hera.lua for the latest update of the cheat.")
end

/****************************
Name: Create ConVars
Purpose: Create ConVars..
*****************************/

Hera:CreateConVar("ESP_Info",0)
Hera:CreateConVar("ESP_Box",0)
Hera:CreateConVar("ESP_Box_Type","3d")
Hera:CreateConVar("ESP_Skeleton",0)
Hera:CreateConVar("ESP_Laser",0)
Hera:CreateConVar("ESP_Crosshair",0)
Hera:CreateConVar("ESP_Crosshair_Type","Swastika")
Hera:CreateConVar("ESP_Chams",0)
Hera:CreateConVar("ESP_Chams_Material","Solid")
Hera:CreateConVar("ESP_Ents",0)
Hera:CreateConVar("ESP_Distance",1000)
Hera:CreateConVar("ESP_Info_Type","info")
Hera:CreateConVar("ESP_Text","outlined")
Hera:CreateConVar("ESP_XRay",0)
Hera:CreateConVar("ESP_PropTrace",0)
Hera:CreateConVar("ESP_HealthBar",0)

Hera:CreateConVar("MISC_Bunnyhop",0)
Hera:CreateConVar("MISC_TTT",0)
Hera:CreateConVar("MISC_ChatSpam",0)
Hera:CreateConVar("MISC_ChatSpam_Msg","visit www.sethhack.seth.im.me.co.cc.net.org.dk.uk.com.gov")
Hera:CreateConVar("MISC_AntiAFK",0)
Hera:CreateConVar("MISC_CSNoclip",0)
Hera:CreateConVar("MISC_CSNoclip_Speed",10)
Hera:CreateConVar("MISC_Thirdperson",0)
Hera:CreateConVar("MISC_RPGod",0)
Hera:CreateConVar("MISC_Namechanger",0)
Hera:CreateConVar("MISC_ShowNotifications",0)
Hera:CreateConVar("MISC_SpeedHack_Speed",3.5)
Hera:CreateConVar("MISC_ShowSpec",0)
Hera:CreateConVar("MISC_ShowAdmins",0)
Hera:CreateConVar("MISC_Thirdperson_dist",200)
Hera:CreateConVar("MISC_Flashlight",0)
Hera:CreateConVar("MISC_Fullbright",0)
Hera:CreateConVar("MISC_RemoveSkybox",0)
Hera:CreateConVar("MISC_NoHands",0)

Hera:CreateConVar("AIM_Friendly",0)
Hera:CreateConVar("AIM_Steam",0)
Hera:CreateConVar("AIM_Admins",0)
Hera:CreateConVar("AIM_Auto",0)
Hera:CreateConVar("AIM_NoRecoil",0)
Hera:CreateConVar("AIM_Offset",0)
Hera:CreateConVar("AIM_AimSpot","Head")
Hera:CreateConVar("AIM_Trigger",0)
Hera:CreateConVar("AIM_SH",0)
Hera:CreateConVar("AIM_Anti",0)
Hera:CreateConVar("AIM_Anti_Type","Invert")
Hera:CreateConVar("AIM_Anti_Angle_X","-181")
Hera:CreateConVar("AIM_Anti_Angle_Z","180")
Hera:CreateConVar("AIM_AntiSnap",0)
Hera:CreateConVar("AIM_AntiSnap_Speed",5)
Hera:CreateConVar("AIM_Fov",180)
Hera:CreateConVar("AIM_Reload",0)
Hera:CreateConVar("AIM_TargetBones",0)
Hera:CreateConVar("AIM_CheckLos",0)
Hera:CreateConVar("AIM_IgnoreNoWep",0)
Hera:CreateConVar("AIM_Prediction",0)
Hera:CreateConVar("AIM_SpawnProtection",0)
//Hera:CreateConVar("AIM_AutoWall",0)
Hera:CreateConVar("MISC_RapidFire",0)
Hera:CreateConVar("AIM_Method","Distance")
Hera:CreateConVar("AIM_Silent",0)
Hera:CreateConVar("AIM_AAA",0)

/***********************************
concommands to find entities and shit
**************************************/

Hera:AddCMD("_ents",function()
    PrintTable(ents.GetAll())
end)

/**********************
Set some ConVars to 0
**********************/
old_rcc("Hera_MISC_ChatSpam","0")
old_rcc("Hera_MISC_CSNoclip","0")
old_rcc("Hera_MISC_NameChanger","0")


--[[
    CHAMS
]]--

-- OnScreen and IsCloseEnough check
function OnScreen(ent)
    local a, f = debug.getregistry().Player["GetAimVector"](LocalPlayer()):Angle() - (ent:GetPos() - LocalPlayer():GetShootPos()):Angle(), debug.getregistry().Player["GetFOV"](LocalPlayer())   
    return (math.NormalizeAngle(a.y) < f + 2 && math.NormalizeAngle(a.p) < f + 2)
end
function IsCloseEnough(ent)
    local dist = ent:GetPos():Distance( LocalPlayer():GetPos() )
    if( dist <= GetConVarNumber("Hera_ESP_Distance") and ent:GetPos() != Vector( 0, 0, 0 ) ) then
        return true
    end
    return false   
end

function Chams()           
local mat = Hera:CreateMaterial()
    if GetConVarNumber("Hera_ESP_Chams") == 1 then
        for k,v in pairs(ents.GetAll()) do
            local col;
            if IsValid(v) and (IsCloseEnough(v) and v:IsPlayer() and v:Alive() and v:Health() > 0)  or (IsCloseEnough(v) and v:IsWeapon()) or (IsCloseEnough(v) and v:IsNPC()) then
                if (v:IsPlayer()) then
                    col = team.GetColor(v:Team())
                elseif (v:IsWeapon()) then
                    col = Color(255,0,0,255)
                elseif (v:IsNPC()) then
                    col = Color(0,255,0,255)
                else
                    col = Color(255,255,255,255)
                end
                cam.Start3D(EyePos(),EyeAngles())
                    render.SuppressEngineLighting( true )
                    render.SetColorModulation(col.r / 255, col.g / 255, col.b / 255);
                    render.SetBlend(col.a / 255);
                    render.MaterialOverride( mat )
                    v:DrawModel()       
                    render.SuppressEngineLighting( false )
                    render.SetColorModulation(1,1,1)
                    render.MaterialOverride( )
                    v:DrawModel()
                cam.End3D()
            end
        end
    end
end

--[[
    ESP
]]--

Hera.ents                    = { -- ents to be picked up by entity esp, add more if you want.
"ent_pot",
"npc_vendor",
"weapon_perp_glock",
"ent_item",
"ent_prop_item",
"sent_spawnpoint",
"spawned_weapon",
"spawned_shipment",
"weed_plant",
"gift",
"spawned_money",
"base_item",
"weapon_ak47_dayz",
"weapon_mp5_dayz",
"weapon_deagle_dayz",
"sapphire_money_printer",
"amethyst_money_printer",
"topaz_money_printer",
"emerald_money_printer",
"msc_scrapnug",
"food_rawant",
"ent_resource",
"food_rawhead",
"gmodz_item", -- TPS DayZ
"drug_plant",
}

local function GetBoxColor(e)
local LockedTarg = GetTargets();
    if Aimon == 1 and LockedTarg != nil and LockedTarg == e then
        return Color(0,255,255)
    elseif CanSee(e) then
        return Color(0,255,0)
    elseif !CanSee(e) then
        return Color(255,0,0)
    else
        return Color(255,255,255)
    end
end

function ESP()
    for k, e in pairs( player.GetAll() ) do
local TeamColor = team.GetColor(e:Team())
local HPColor;
local Dist = e:GetPos():Distance(LocalPlayer():GetPos());
local wep = "Unknown"
local SteamID = e:SteamID()
local Name = e:Nick()
local InfoCol = white
local maxX, minX, maxY, minY, maxX2, minX2, maxY2, minY2, minYhp, maxYhp, BOXPOS1, BOXPOS2, BOXPOS3, BOXPOS4, BOXPOS5, BOXPOS6, BOXPOS7, BOXPOS8 = Hera:CreatePos( e )
if( e:Health() <= 100 ) then
    HPColor = Color( 255, e:Health() * 2.55, e:Health() * 2.55, 255 );  // thanks fr1kin/stgn
else
    HPColor = white
end

-- AIMBOT SHIT --
local LockedTarg = GetTargets();
if ( Aimon == 1 and LockedTarg == nil ) or ( Aimon == 1 and LockedTarg == LocalPlayer() ) then
    draw.SimpleTextOutlined("Scanning...","Logo",ScrW() / 2 - 25, ScrH() / 2 + 15, Color(255,0,0,255),4,1,1,black)
elseif Aimon == 1 and LockedTarg != nil then
    draw.SimpleTextOutlined("Locked ("..LockedTarg:Nick()..")","Logo",ScrW() / 2 - 25, ScrH() / 2 + 15, Color(0,255,0,255),4,1,1,black)
end
   
-- WATERMARK --
function Hera:PulsateColor(col)
    return (math.cos(CurTime()*col)+1)/2
end
--draw.SimpleTextOutlined("Hera v"..Hera.version,"Logo",1285,15,Color( 0, 255, Hera:PulsateColor(3)*255, 255 ),4,1,1,black)

        if ( e:IsPlayer() && e:Alive() && e != LocalPlayer() ) then
            if e:GetActiveWeapon() != nil then
                if type(e:GetActiveWeapon()) == "Weapon" then
                    if e:GetActiveWeapon() and e:GetActiveWeapon():IsValid() then
                        wep = e:GetActiveWeapon():GetPrintName()
                       
                            -- ESP INFO --
                            if GetConVarNumber("Hera_ESP_Info") == 1 && IsCloseEnough(e) then
                                if GetConVarString("Hera_ESP_Text") == "outlined" then
                                    draw.SimpleTextOutlined( Name..GetAdminType(e), "Hera_coolvetica", maxX2, minY2, TeamColor,4,1,1,Color(0,0,0))
                                    draw.SimpleTextOutlined( "H: " .. e:Health(), "ESPFont_Small", maxX2, minY2 + 10, HPColor, 4,1, 1, black )
                                    draw.SimpleTextOutlined( "D: " .. math.floor(Dist), "ESPFont_Small", maxX2, minY2 + 20, InfoCol, 4, 1, 1, black )
                                    draw.SimpleTextOutlined( "W: " .. wep, "ESPFont_Small", maxX2, minY2 + 30, InfoCol, 4, 1, 1, black)
                                elseif GetConVarString("Hera_ESP_Text") == "normal" then       
                                    draw.SimpleTextOutlined( Name..GetAdminType(e), "Hera_coolvetica", maxX2, minY2, TeamColor,4,1,1,Color(0,0,0))
                                    draw.SimpleText( "H: " .. e:Health(), "ESPFont_Small", maxX2, minY2 + 10, HPColor, 4, 1 )
                                    draw.SimpleText( "D: " .. math.floor(Dist), "ESPFont_Small", maxX2, minY2 + 20, InfoCol, 4, 1 )
                                    draw.SimpleText( "W: " .. wep, "ESPFont_Small", maxX2, minY2 + 30, InfoCol, 4, 1 )
                                end                               
                                if e:GetFriendStatus() == "friend" then
                                    draw.SimpleTextOutlined( "[Friend]", "ESPFont_Small", maxX2, minY2 - 10, iceblue, 4, 1,1,black)
                                end
                            end
                           
                            -- ESP BOX --
                            if GetConVarNumber("Hera_ESP_Box") == 1 && IsCloseEnough(e) then
                                if GetConVarString("Hera_ESP_Box_Type") == "2d" then
                                    surface.SetDrawColor(GetBoxColor(e))               
                                    surface.DrawLine( maxX, maxY, maxX, minY )
                                    surface.DrawLine( maxX, minY, minX, minY )                   
                                    surface.DrawLine( minX, minY, minX, maxY )
                                    surface.DrawLine( minX, maxY, maxX, maxY )
                                elseif GetConVarString("Hera_ESP_Box_Type") == "3d" then   
                                    surface.SetDrawColor(GetBoxColor(e))
                                    -- thanks nano
                                    surface.DrawLine( BOXPOS1.x, BOXPOS1.y, BOXPOS2.x, BOXPOS2.y )
                                    surface.DrawLine( BOXPOS2.x, BOXPOS2.y, BOXPOS3.x, BOXPOS3.y )
                                    surface.DrawLine( BOXPOS3.x, BOXPOS3.y, BOXPOS4.x, BOXPOS4.y )
                                    surface.DrawLine( BOXPOS4.x, BOXPOS4.y, BOXPOS1.x, BOXPOS1.y )
           
                                    surface.DrawLine( BOXPOS5.x, BOXPOS5.y, BOXPOS6.x, BOXPOS6.y )
                                    surface.DrawLine( BOXPOS6.x, BOXPOS6.y, BOXPOS7.x, BOXPOS7.y )
                                    surface.DrawLine( BOXPOS7.x, BOXPOS7.y, BOXPOS8.x, BOXPOS8.y )
                                    surface.DrawLine( BOXPOS8.x, BOXPOS8.y, BOXPOS5.x, BOXPOS5.y )
           
                                    surface.DrawLine( BOXPOS1.x, BOXPOS1.y, BOXPOS5.x, BOXPOS5.y )
                                    surface.DrawLine( BOXPOS2.x, BOXPOS2.y, BOXPOS6.x, BOXPOS6.y )
                                    surface.DrawLine( BOXPOS3.x, BOXPOS3.y, BOXPOS7.x, BOXPOS7.y )
                                    surface.DrawLine( BOXPOS4.x, BOXPOS4.y, BOXPOS8.x, BOXPOS8.y )
                                end
                            end
                            -- ESP SKELETON --
                            if GetConVarNumber("Hera_ESP_Skeleton") == 1 && IsCloseEnough(e) then
                                for k, v in pairs( Hera.espbones ) do
                                    local sPos, ePos = e:GetBonePosition( e:LookupBone( v.S ) ):ToScreen(), e:GetBonePosition( e:LookupBone( v.E ) ):ToScreen()
                                    if e:IsPlayer() and !e:IsNPC() then
                                        surface.SetDrawColor(team.GetColor(e:Team()))
                                    end
                                    surface.DrawLine(sPos.x,sPos.y,ePos.x,ePos.y)
                                end
                            end
                            -- ESP TRACER --
                            if GetConVarNumber("Hera_ESP_Laser") == 1 and LocalPlayer():Alive() then
                                local LaserColor = Color(255,0,0,255)
                                if Aimon == 1 and LockedTarg != nil and LockedTarg != LocalPlayer() then
                                    LaserColor = Color(0,255,0,255)
                                else
                                    LaserColor = LaserColor
                                end
                                local ViewModel = LocalPlayer():GetViewModel()
                                local Attach = ViewModel:LookupAttachment("1")
                                if ( Attach == 0 ) then Attach = ViewModel:LookupAttachment("muzzle") end
                                if !LocalPlayer():Alive() then return end;
                                if( LocalPlayer():Alive() || LocalPlayer():GetActiveWeapon() == NULL ) then
                                    if( !table.HasValue( Hera.laser, LocalPlayer():GetActiveWeapon():GetClass() ) ) then
                                        local tr = util.TraceLine(util.GetPlayerTrace(LocalPlayer()));
                                        cam.Start3D( EyePos() , EyeAngles())                               
                                            -- Laser
                                            StartPos = ViewModel:GetAttachment( Attach ).Pos
                                            EndPos = LocalPlayer():GetEyeTrace().HitPos
                                            render.SetMaterial( Material( "trails/laser" ) )
                                            render.DrawBeam(StartPos, EndPos , 3, 0, 0, LaserColor)                               
                                            -- End
                                            render.SetMaterial(Material("Sprites/light_glow02_add_noz"))
                                            render.DrawQuadEasy(tr.HitPos, (EyePos() - tr.HitPos), 10, 10, LaserColor, 0 )
                                        cam.End3D()
                                    end
                                end
                            end
                           
                            -- ESP CROSSHAIR --
                            if GetConVarNumber("Hera_ESP_Crosshair") == 1 and GetConVarNumber("Hera_MISC_Thirdperson") == 0 then
                                if GetConVarString("Hera_ESP_Crosshair_Type") == "Spinning" then
                                    local x, y = ScrW() / 2, ScrH() / 2   
                                    local Speed
                                    if Aimon == 1 and AimbotTarget != nil and AimbotTarget != LocalPlayer() then
                                        Speed = 5
                                    else
                                        Speed = 1
                                    end
                                    surface.SetDrawColor(GetColorCrosshair())
                                    CHPosx = math.Clamp(LocalPlayer():GetEyeTrace().HitPos:ToScreen().x,0,ScrW())
                                    CHPosy = math.Clamp(LocalPlayer():GetEyeTrace().HitPos:ToScreen().y,0,ScrH())
                                    mathsin = math.sin(CurTime()*Speed)*4
                                    mathcos = math.cos(CurTime()*Speed)*4
                                    mathsin2 = math.sin(CurTime()*Speed+0.1)*4
                                    mathcos2 = math.cos(CurTime()*Speed+0.1)*4
                                    mathsin3 = math.sin(CurTime()*Speed-0.1)*4
                                    mathcos3 = math.cos(CurTime()*Speed-0.1)*4
                                    surface.DrawLine( CHPosx+mathcos*2,CHPosy+mathsin*2,CHPosx+mathcos*5,CHPosy+mathsin*5 );
                                    surface.DrawLine( CHPosx-mathcos*2,CHPosy-mathsin*2,CHPosx-mathcos*5,CHPosy-mathsin*5 );
                                    surface.DrawLine( CHPosx+mathsin*2,CHPosy-mathcos*2,CHPosx+mathsin*5,CHPosy-mathcos*5 );
                                    surface.DrawLine( CHPosx-mathsin*2,CHPosy+mathcos*2,CHPosx-mathsin*5,CHPosy+mathcos*5 );
                                elseif GetConVarString("Hera_ESP_Crosshair_Type") == "Swastika" then
                                    surface.SetDrawColor(red)
                                    surface.DrawLine(ScrW()/2, ScrH()/2, ScrW()/2 + 20, ScrH()/2)
                                    surface.DrawLine(ScrW()/2 + 20, ScrH()/2, ScrW()/2 + 20, ScrH()/2 + 20)
                                    surface.DrawLine(ScrW()/2 , ScrH()/2, ScrW()/2 - 20, ScrH()/2)
                                    surface.DrawLine(ScrW()/2 - 20 , ScrH()/2, ScrW()/2 - 20, ScrH()/2 - 20)
                                    surface.DrawLine(ScrW()/2, ScrH()/2, ScrW()/2, ScrH()/2 - 20)
                                    surface.DrawLine(ScrW()/2, ScrH()/2 - 20, ScrW()/2 + 20, ScrH()/2 - 20)
                                    surface.DrawLine(ScrW()/2, ScrH()/2, ScrW()/2, ScrH()/2 + 20)
                                    surface.DrawLine(ScrW()/2, ScrH()/2 + 20, ScrW()/2 - 20, ScrH()/2 + 20)
                                elseif GetConVarString("Hera_ESP_Crosshair_Type") == "Basic" then
                                    local x, y, s = ScrW() / 2, ScrH() / 2, 10
                                    surface.SetDrawColor(GetColorCrosshair())
                                    surface.DrawLine( x, y - s, x, y + s )
                                    surface.DrawLine( x - s, y, x + s, y )
                                elseif GetConVarString("Hera_ESP_Crosshair_Type") == "Diagonal" then
                                    local x, y, w = ScrW() / 2, ScrH() / 2, 7
                                    surface.SetDrawColor(GetColorCrosshair())
                                    surface.DrawLine(x - w, y - w, x + w, y + w)
                                    surface.DrawLine(x - w, y + w, x + w, y - w)                                   
                                end
                            end
                           
                            -- NOCLIP MARKER --
                            if GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
                                local me_pos = LocalPlayer():EyePos():ToScreen()
                                draw.SimpleText("YOU ARE HERE", "ESPFont_Small", me_pos.x,me_pos.y +10, red, 4, 1 ) // skiddie shit
                            end
                    end
                end
            end
        end
    end
    for _, v in ipairs( ents.GetAll() ) do
        if( v:IsValid() and Hera:IsCustomEnt( v:GetClass() ) ) then
            if GetConVarNumber("Hera_ESP_Ents") == 1 then
                local wepn = v:GetClass()
                local wname = string.Replace(wepn,"weapon_","")
                wname = string.Replace(wname,"_"," ")
                wname = string.upper(wname)
                local entpos = v:GetPos():ToScreen()
                draw.SimpleText(wname, "ESPFont_Small", entpos.x,entpos.y +10, red, 4, 1 )
                surface.SetDrawColor(255,0,255,255)
            end
        end                   
    end
end

function XRay()
local mat = Hera:CreateMaterial()
cam.Start3D(EyePos(), EyeAngles())
    for k,v in pairs(ents.FindByClass("prop_*")) do
    if (!CanSee(v)) then
        PropColor = COLOR_NONVISIBLE
    else
        PropColor = COLOR_VISIBLE
    end   
    if v:GetVelocity():Length() == 0 then
        PropColor = COLOR_FROZEN
    end
    if v:GetVelocity():Length() == 0 and (!CanSee(v)) then
        PropColor = COLOR_FROZEN_NV
    end
        if GetConVarNumber("Hera_ESP_XRay") == 1 then
            if IsValid(v) and table.HasValue(Hera.props,v:GetModel()) and IsCloseEnough(v) then
                render.SuppressEngineLighting( true )
                render.SetColorModulation(PropColor.r / 255, PropColor.g / 255, PropColor.b / 255)
                render.SetBlend(PropColor.a / 255);
                render.MaterialOverride( mat )
                v:DrawModel()       
                render.SuppressEngineLighting( false )
                render.SetColorModulation(1,1,1)
                render.MaterialOverride()
                v:DrawModel()
                v:SetRenderMode(RENDERMODE_TRANSALPHA)
            else
                v:SetColor(Color(255, 255, 255, 255))
            end
        end
    end
cam.End3D()
end



/*****************************************
Name: Aimbot/Aim functions
Purpose: Aim for you, because you suck
Credits: isis
*******************************************/


local shouldFire = 0
// So ugly, ugh.
// There's better ways of doing this, but making a "toggle" function seemed best.
function RapidFire()
    if GetConVarNumber("Hera_MISC_RapidFire") == 1 and input.IsMouseDown(MOUSE_LEFT) then
        if shouldFire == 0 then
            shouldFire = 1
        else
            shouldFire = 0
        end
        if shouldFire == 0 then
            old_rcc("+attack")
        else
            old_rcc("-attack")
        end
        elseif shouldFire == 0 then
            old_rcc("-attack")
        if shouldFire == 0 then
            shouldFire = 1
        else
            shouldFire = 0

        end
    end
end


/****************************************
Aimbot functions
****************************************/

/********
bonescan
hermes v1
*******/

-- get owned
function IsSpawnProtected(ent)
    if ((GAMEMODE.Name):lower()):find("stronghold") then
        local entcol = ent:GetColor(r, g, b, a)
        if entcol.a < 255 then
            return true
        else
            return false
        end
    end
end

function AimSpot(ent)
    if GetConVarNumber("Hera_AIM_TargetBones") == 0 then
        local eyes = ent:LookupAttachment("eyes")
        if GetConVarNumber("Hera_AIM_AAA") == 1 and (ent:EyeAngles().p < -89) then
            return ent:LocalToWorld( ent:OBBCenter())
        elseif(eyes ~= 0) then
            eyes = ent:GetAttachment(eyes)
            if(eyes and eyes.Pos) then
                return eyes.Pos, eyes.Ang
            end
        end
    end

local bonename = Hera.aimmodels[ent:GetModel()]
    if(not bonename) then
        for k, v in pairs(Hera.bones) do
            if(v[1] == GetConVarString("Hera_AIM_AimSpot")) then
                bonename = v[2]
            end
        end
        bonename = bonename or "ValveBiped.Bip01_Head1"
    end
    local aimbone = ent:LookupBone(bonename);
    if(aimbone) then
        local pos, ang = ent:GetBonePosition(aimbone)
        return pos, ang;
    end
return ent:LookupBone("ValveBiped.Bip01_Head1")
--return ent:LocalToWorld(ent:OBBCenter())
end

function Exception(ent)
    if (ent == LocalPlayer()) then return false end
    if (ent:Team() == TEAM_SPECTATOR) then return false end
    if (ent:GetMoveType() == MOVETYPE_OBSERVER) then return false end
    if (!ent:Alive() ) then return false end
    if (ent:InVehicle()) then return false end
    if (GetConVarNumber("Hera_AIM_Friendly") == 0 && ent:Team() == LocalPlayer():Team()) then return false end
    if (ent:IsPlayer() and (ent:IsAdmin() or ent:IsSuperAdmin()) and GetConVarNumber("Hera_AIM_Admins") == 0) then return false end   
    if (GetConVarNumber("Hera_AIM_Steam") == 0 && ent:GetFriendStatus() == "friend" ) then return false end
    if (GetConVarNumber("Hera_AIM_SH") == 1 && IsSpawnProtected(ent)) then return false end
    if (ent:IsPlayer() and GetConVarNumber("Hera_AIM_IgnoreNoWep") == 1 and not IsValid(ent:GetActiveWeapon())) then return false end
    if (GetConVarNumber("Hera_AIM_SpawnProtection") == 1 and ent:GetColor(r, g, b, a).a < 255) then return false end
return true
end

function HasLOS(ent)
    if(GetConVarNumber("Hera_AIM_CheckLOS") == 0) then return true end
    local trace = util.TraceLine( {
        start = LocalPlayer():GetShootPos(),
        endpos = AimSpot(ent),
        filter = { LocalPlayer(), e },
        mask = MASK_SHOT + CONTENTS_WINDOW
    } )
    if (( trace.Fraction >= 0.99 )) then return true end
    return false
end

function InFov( ent )
    local fov = GetConVarNumber("Hera_AIM_Fov")
    if( fov != 180 ) then
        local lpang = LocalPlayer():GetAngles()
        local ang = ( ent:GetBonePosition( ent:LookupBone("ValveBiped.Bip01_Head1") ) - LocalPlayer():EyePos() ):Angle()
        local ady = math.abs( math.NormalizeAngle( lpang.y - ang.y ) )
        local adp = math.abs( math.NormalizeAngle( lpang.p - ang.p ) )
        if( ady > fov || adp > fov ) then return false end
    end
    return true
end

/*
 local p, t = Vector(0, 0, 0), Vector(0, 0, 0)
if ( distance < 4000 && speed > 0 ) then p = self():GetVelocity() * distance / (speed * distance * 0.125) end
if ( weapon:IsWeapon() && prediction[weapon:GetClass()] != 0 ) then t = target:GetVelocity() * distance / (prediction[weapon:GetClass()] || 150000) end

vector = vector - p + t
end
*/

function AimPrediction( pos , pl )
    if IsValid( pl ) and type( pl:GetVelocity() ) == "Vector" and pl.GetPos and type( pl:GetPos() ) == "Vector" then
        local distance = LocalPlayer():GetPos():Distance( pl:GetPos() )
        local weapon = ( LocalPlayer().GetActiveWeapon and ( IsValid( LocalPlayer():GetActiveWeapon() ) and LocalPlayer():GetActiveWeapon():GetClass() ) )   
        if weapon and Hera.prediction[ weapon ] then
            local time = distance / Hera.prediction[ weapon ]
            return pos + pl:GetVelocity() * time
        end
    end
    return pos
end

function NormalizeAng(angle)
    if type(angle) == "Angle" then
        return Angle(math.NormalizeAngle(angle.p) , math.NormalizeAngle(angle.y) , math.NormalizeAngle(angle.r))
    end
    return angle
end

function GetTargets()
local target;
if target == nil then target = LocalPlayer() else target = target end
local ply = LocalPlayer()
local angA, angB = 0
local x, y = ScrW(), ScrH()
local distance = math.huge;
    for k, v in pairs(player.GetAll()) do
        if (v != LocalPlayer() and v:Alive() and HasLOS(v) and Exception(v) and InFov(v)) then
            local ePos, oldPos, myAngV = v:EyePos():ToScreen(), target:EyePos():ToScreen(), ply:GetAngles()
            local thedist = v:GetPos():DistToSqr(LocalPlayer():GetPos());
            angA = math.Dist( x / 2, y / 2, oldPos.x, oldPos.y )
            angB = math.Dist( x / 2, y / 2, ePos.x, ePos.y )
            if GetConVarString("Hera_AIM_Method") == "Closest To Crosshair" then
                if ( angB <= angA ) then
                    target = v;
                elseif target == ply then
                    target = v;
                end
            elseif GetConVarString("Hera_AIM_Method") == "Distance" then
                if (thedist < distance) then
                    distance = thedist;
                    target = v;
                end                   
            end
        end
    end
return target
end

local function Aimbot(ucmd)
local asspeed = GetConVarNumber("Hera_AIM_AntiSnap_Speed") / 10
local aimang = Angle(0,0,0)
    if Aimon == 1 then       
        local target = GetTargets()
        if target != nil and target != LocalPlayer() then
   
        -- Offset
        local Aimspot;
        if GetConVarNumber("Hera_AIM_Prediction") == 1 then
            Aimspot = AimPrediction(AimSpot(target)) - Vector(0,0,GetConVarNumber("Hera_AIM_Offset"))
            Aimspot = Aimspot + target:GetVelocity() * ( 1 / 66 ) - LocalPlayer():GetVelocity() * ( 1 / 66 )
        else
            Aimspot = (AimSpot(target)) - Vector(0,0,GetConVarNumber("Hera_AIM_Offset"))
            Aimspot = Aimspot + target:GetVelocity() / 50 - LocalPlayer():GetVelocity() / 50
        end
        Angel = (Aimspot - LocalPlayer():GetShootPos()):GetNormal():Angle()
        Angel.p = math.NormalizeAngle( Angel.p )
        Angel.y = math.NormalizeAngle( Angel.y )
       
        -- Anti snap
        if GetConVarNumber("Hera_AIM_AntiSnap") == 1 then
            Angle1 = LocalPlayer():EyeAngles()
            local Smooth1 = math.Approach(Angle1.p, Angel.p, asspeed)
            local Smooth2 = math.Approach(Angle1.y , Angel.y, asspeed)      
            aimang = Angle (Smooth1, Smooth2, 0)
        else
            -- Normal
            aimang = Angle( Angel.p, Angel.y, 0 )
        end
        -- faggot
            _G.debug.getregistry()["CUserCmd"].SetViewAngles(ucmd, aimang)
            if GetConVarNumber("Hera_AIM_Auto") == 1 then
               ucmd:SetButtons(bit.bor(ucmd:GetButtons(),IN_ATTACK))
            end
            if GetConVarNumber("Hera_AIM_SH") == 1 then
                ucmd:SetButtons(bit.bor(ucmd:GetButtons(),IN_ATTACK2)) 
            end
        end
    end
end

Hera:AddCMD("+Hera_Aim",function()
Aimon = 1
end)

Hera:AddCMD("-Hera_Aim",function()
Aimon = 0
end)

/**************************
Name: Anti-Aim
Purpose: HVH feature
**************************/
Hera:RegisterHook("CreateMove",function(cmd, u)
local caim
local getangs = cmd:GetViewAngles()
    if GetConVarNumber("Hera_AIM_Anti") == 1 then
        if GetConVarString("Hera_AIM_Anti_Type") == "Invert" then
            if (!LocalPlayer():KeyDown(IN_ATTACK)) then
                cmd:SetViewAngles(Angle(181, getangs.y, 180))
            end
        elseif GetConVarString("Hera_AIM_Anti_Type") == "Spin" then
            if (!LocalPlayer():KeyDown(IN_ATTACK) and !LocalPlayer():KeyDown(IN_ATTACK2)) then
                caim = Angle(0,math.random(-89,89),0)
                cmd:SetViewAngles(NormalizeAng(caim))
            end
        elseif GetConVarString("Hera_AIM_Anti_Type") == "Random Pitch" then
            if (!LocalPlayer():KeyDown(IN_ATTACK)) then
                cmd:SetViewAngles(Angle(math.random(181,180), getangs.y, 180))
            end   
        elseif GetConVarString("Hera_AIM_Anti_Type") == "Invert/Spin" then
            if (!LocalPlayer():KeyDown(IN_ATTACK) and !LocalPlayer():KeyDown(IN_ATTACK2)) then
                caim = math.random(-89,89)
                cmd:SetViewAngles(Angle(181, NormalizeAng(caim), 180))
            end
        elseif GetConVarString("Hera_AIM_Anti_Type") == "Var" then
            if (!LocalPlayer():KeyDown(IN_ATTACK) and !LocalPlayer():KeyDown(IN_ATTACK2)) then
                cmd:SetViewAngles(Angle(GetConVarNumber("Hera_AIM_Anti_Angle_X"),getangs.y,GetConVarNumber("Hera_AIM_Anti_Angle_Z")))
            end
        end
    end
end)

local LastReload = 0
local dontreload = {"weapon_physgun" , "gmod_tool" , "weapon_gravgun", "weapon_keys", "weapon_pocket", "pocket", "rp_pocket", "rp_keys", "keys"}
function AutoReload()
    if (GetConVarNumber("Hera_AIM_Reload") == 1 and LocalPlayer():Alive() and IsValid( LocalPlayer():GetActiveWeapon() ) and !table.HasValue( dontreload, LocalPlayer():GetActiveWeapon():GetClass() ) ) then
        if( LocalPlayer():GetActiveWeapon():Clip1() <= 0 and CurTime() > ( LastReload + 5 ) ) then
            old_rcc( "+reload" )
            LastReload = CurTime()
            Hera:AddTimer( .2, 1, function()
                old_rcc( "-reload" )
            end )
        end
    end
end

local function StartFire()
    old_rcc("+attack")
end

local function StopFire()
    old_rcc("-attack")
end
-- thx hyperion
function TriggerBot()
    if(GetConVarNumber("Hera_AIM_Trigger") == 1) then
        local pos = LocalPlayer():GetShootPos()
        local ang = LocalPlayer():GetAimVector()
        local tracedata = {};
        tracedata.start = pos
        tracedata.endpos = pos+(ang*9999999999999)
        local trace = util.TraceLine(tracedata)
        if(trace.HitNonWorld) then
            target = trace.Entity
            if(target:IsPlayer()) then
                StartFire()
                timer.Simple(0.1, StopFire)
            end
        end
    end
end

/****************************
Name: Misc
Purpose: Misc features
*****************************/
local Speedhacking = false
-- i use a private module for my convar forcing, so anyone else will use cvar3
Hera:AddCMD("+Hera_Speed",function()
Speedhacking = true
    //if Hera:IsDev(LocalPlayer()) then
    //--    hera.ForceCVar(GetConVar("sv_cheats"):SetValue(1))
    //--    hera.ForceCVar(GetConVar("host_timescale"):SetValue(GetConVarNumber("Hera_MISC_SpeedHack_Speed")))
    //    old_rcc("sp00f_bs_host_timescale",GetConVarNumber("Hera_MISC_SpeedHack_Speed"));
    //else
    //    GetConVar("sv_cheats"):SetValue(1)
    //    GetConVar("host_timescale"):SetValue(GetConVarNumber("Hera_MISC_SpeedHack_Speed"))
    //end
end)

Hera:AddCMD("-Hera_Speed",function()
Speedhacking = false
    //if Hera:IsDev(LocalPlayer()) then
    //    --hera.ForceCVar(GetConVar("sv_cheats"):SetValue(0))
    //    --hera.ForceCVar(GetConVar("host_timescale"):SetValue(1))
    //    old_rcc("sp00f_bs_host_timescale",1)
    //else
    //    GetConVar("sv_cheats"):SetValue(0)
    //    GetConVar("host_timescale"):SetValue(1)
    //end
end)

/*
local next_change = GetConVarNumber("sv_namechange_cooldown_seconds") + 0.5
function NameChanger()
local ply = LocalPlayer()
local e = player.GetAll()[ math.random( 1, #player.GetAll() ) ]
local curtime = CurTime()
    if GetConVarNumber("Hera_MISC_Namechanger") == 1 and Hera:IsDev(LocalPlayer()) then
        if next_change < curtime then
            if ( !e:IsAdmin() && e != ply ) then
                Hera:AddTimer( 1, 1 , function()
                    if ((GAMEMODE.Name):lower()):find("darkrp") then
                        LocalPlayer():ConCommand("say /rpname ".. e:Nick() .. " %" ) // 'can't rp name ~'
                    else
                        LocalPlayer():ConCommand( "bs_namechange " .. e:Nick() .. " ~" )
                        Hera.Notify(false,Color(255,255,255),"Changed your name to "..e:Nick().." ~")
                    end
                end)
            end
        end
    end
end
Hera:AddTimer( next_change , 0 , function() NameChanger() end )
*/

Hera:RegisterHook("CreateMove",function(cmd)
    if GetConVarNumber("Hera_MISC_BunnyHop") == 1 and bit.band( cmd:GetButtons(), IN_JUMP ) ~= 0 then
        if !LocalPlayer():IsOnGround() then
            cmd:SetButtons( bit.band( cmd:GetButtons(), bit.bnot( IN_JUMP ) ) )
        end
    end
end)

function Misc()
    if GetConVarNumber("Hera_AIM_NoRecoil") == 1 then
        if LocalPlayer():GetActiveWeapon().Primary then
            LocalPlayer():GetActiveWeapon().Primary.Recoil = 0
        end
    end
    if GetConVarNumber("Hera_MISC_ChatSpam") == 1 then
        LocalPlayer():ConCommand("say "..GetConVarString("Hera_MISC_ChatSpam_Msg").."["..math.random(1,999).."]")
    end
    if GetConVarNumber("Hera_MISC_RPGod") == 1 then
        if LocalPlayer():Health() < 100 then
            LocalPlayer():ConCommand("say /buyhealth") -- spam buyhealth
        end
    end
    if GetConVarNumber("Hera_MISC_Flashlight") == 1 then
        old_rcc("impulse","100")
    end
    //if GetConVarNumber("Hera_MISC_Fullbright") == 1 then
        //GetConVar("mat_fullbright"):SetValue(1)
    //else
        //GetConVar("mat_fullbright"):SetValue(0)
    //end
    if GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
        CS_NC = LocalPlayer():EyePos();
    end
    //if GetConVarNumber("Hera_MISC_RemoveSkybox") == 1 then
    //    GetConVar("gl_clear"):SetValue(1)
    //    GetConVar("r_drawskybox"):SetValue(0)
    //    GetConVar("r_3dsky"):SetValue(0)
    //else
    //    GetConVar("gl_clear"):SetValue(0)
    //    GetConVar("r_drawskybox"):SetValue(1)
    //    GetConVar("r_3dsky"):SetValue(1)
    //end
end

Hera:RegisterHook("CalcView",function(ply, pos, angles, fov)
    if GetConVarNumber("Hera_MISC_Thirdperson") == 1 and LocalPlayer():Alive() then
        local view = {}
        view.origin = pos-(angles:Forward()*GetConVarNumber("Hera_MISC_Thirdperson_Dist"))
        view.angles = angles
        view.fov = fov
        return view
    elseif(GetConVarNumber("Hera_MISC_CSNoclip") == 1 and CS_NC) then
        local ang = angles:Forward()
        if LocalPlayer():KeyDown( IN_FORWARD ) and GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
        CS_NC = CS_NC + LocalPlayer():GetAimVector() * speed
        end
        if LocalPlayer():KeyDown( IN_BACK ) and GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
            CS_NC = CS_NC - LocalPlayer():GetAimVector() * speed
        end
        if LocalPlayer():KeyDown( IN_MOVERIGHT ) and GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
            CS_NC = CS_NC + ang:Angle():Right() * speed
        end
        if LocalPlayer():KeyDown( IN_MOVELEFT ) and GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
            CS_NC = CS_NC - ang:Angle():Right() * speed
        end
        if LocalPlayer():KeyDown( IN_JUMP ) and GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
            CS_NC = CS_NC + Vector( 0, 0, speed )
        end
        if LocalPlayer():KeyDown( IN_SPEED ) and GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
            speed = ( GetConVarNumber("Hera_MISC_CSNoclip_Speed") * 3 * ( FrameTime() / 2 ) ) * 100
        elseif LocalPlayer():KeyDown( IN_DUCK ) and GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
            speed = ( GetConVarNumber("Hera_MISC_CSNoclip_Speed") / 3 * ( FrameTime() / 2 ) ) * 100
        else
            speed = ( GetConVarNumber("Hera_MISC_CSNoclip_Speed") * ( FrameTime() / 2 ) ) * 100
        end
        local view = {}
        view.origin = CS_NC
        view.angles = angles
        view.fov = fov
        return view
    else
        CS_NC = LocalPlayer():EyePos()
    end
    return GAMEMODE:CalcView(ply, pos, angles, fov)
end)
Hera:RegisterHook("ShouldDrawLocalPlayer",function()
    if GetConVarNumber("Hera_MISC_Thirdperson") == 1 then
        return true -- pro
    end
end)
function CSNoclip(ucmd)
    if GetConVarNumber("Hera_MISC_CSNoclip") == 1 then
        ucmd:SetForwardMove(0);
        ucmd:SetSideMove(0);
        ucmd:SetUpMove(0);
    end
end


function ShowNotifi()
    -- now spectating
    for k, v in pairs(player.GetAll()) do
        if (IsValid(v:GetObserverTarget()) and v:GetObserverTarget():IsPlayer() and v:GetObserverTarget() == LocalPlayer()) then
            if(not table.HasValue(Hera.spectators, v)) then
                table.insert(Hera.spectators, v);
                if GetConVarNumber("Hera_MISC_ShowSpec") == 1 then
                    Hera.Notify(true,red,""..v:Nick().." is now spectating you!")
                    surface.PlaySound("buttons/blip1.wav")
                end
            end
        end
    end
    -- no longer spectating
    for k, v in pairs(Hera.spectators) do
        if (not IsValid(v) or not IsValid(v:GetObserverTarget()) or not v:GetObserverTarget():IsPlayer() or (v:GetObserverTarget() ~= LocalPlayer())) then
            table.remove(Hera.spectators, k);
            if GetConVarNumber("Hera_MISC_ShowSpec") == 1 then
                Hera.Notify(true,green,""..v:Nick().." is no longer spectating you!")
            end
        end
    end
    -- admin join
    if GetConVarNumber("Hera_MISC_ShowAdmins") == 1 then
        for k, v in pairs(player.GetAll()) do
            if (v:IsAdmin() and not table.HasValue(Hera.admins, v)) then
                table.insert(Hera.admins, v);
                Hera.Notify(true,white,"Admin " .. v:Nick() .. " has joined!")
                surface.PlaySound("buttons/blip1.wav");
            end
        end
    end
end


local commands = { "forward" , "back" , "jump" , "moveleft" , "moveright", "duck" }
function AntiAfk()
    if GetConVarNumber("Hera_MISC_AntiAFK") == 1 then
        local command1 = table.Random( commands )
        local command2 = table.Random( commands )
        Hera:AddTimer( 1, 1, function()
            old_rcc( "+"..command1 )
            old_rcc( "+"..command2 )
        end )
        Hera:AddTimer( 2, 1, function()
            old_rcc("-"..command1 )
            old_rcc("-"..command2 )
        end )
    end
end
Hera:AddTimer( 5 , 0 , function() AntiAfk() end )

// Traitor finder functions
local PlayerIsTraitor = false
timer.Simple( 3, function()
    if ( gmod.GetGamemode().Name ) == "Trouble in Terrorist Town" then
        local UsedWeapons = {}
        local MapWeapons = {}
function IsATraitor( ply )
    for k, v in pairs( Hera.traitors ) do
        if v == ply then
            return true
        else
            return false
        end
    end
end
Hera.tweps                    = {
"weapon_ttt_c4",
"weapon_ttt_knife",
"weapon_ttt_phammer",
"weapon_ttt_sipistol",
"weapon_ttt_flaregun",
"weapon_ttt_push",
"weapon_ttt_radio",
"weapon_ttt_teleport",
"(Disguise)",
}
timer.Create("TTT", 0.8, 0, function()
    if GetConVarNumber("Hera_MISC_TTT") == 1 then
        if !IsATraitor( ply ) then
            for k, v in pairs( ents.FindByClass( "player" ) ) do
                if IsValid( v ) then
                    if (!v:IsDetective()) then
                        if v:Team() ~= TEAM_SPECTATOR then
                            for wepk, wepv in pairs( Hera.tweps ) do
                                for entk, entv in pairs( ents.FindByClass( wepv ) ) do
                                    if IsValid( entv ) then
                                        cookie.Set( entv, 100 - wepk )
                                        if !table.HasValue( UsedWeapons, cookie.GetNumber( entv ) ) then
                                            if !table.HasValue( MapWeapons, cookie.GetNumber( entv ) ) then
                                                local EntPos = ( entv:GetPos() - Vector(0,0,35) )
                                                    if entv:GetClass() == wepv then
                                                        if v:GetPos():Distance( EntPos ) <= 1 then
                                                            table.insert( Hera.traitors, v )
                                                            Hera.Notify(sound,red,v:Nick() .. " has traitor weapon: " .. wepv )
                                                            old_rcc("say",v:Nick() .. " is a traitor and I can prove it!")
                                                            if !table.HasValue( UsedWeapons, cookie.GetNumber( entv ) ) then
                                                                table.insert( UsedWeapons, cookie.GetNumber( entv ) )
                                                            else
                                                            if !table.HasValue( MapWeapons, cookie.GetNumber( entv ) ) then
                                                                table.insert( MapWeapons, cookie.GetNumber( entv ) )
                                                            end
                                                        end
                                                    end
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    end
end )

Hera:RegisterHook("HUDPaint",function()
    if GetConVarNumber("Hera_MISC_TTT") == 1 then
        for k, e in pairs( Hera.traitors ) do
            local maxX, minX, maxY, minY, maxX2, minX2, maxY2, minY2, minYhp, maxYhp = Hera:CreatePos( e )
            if IsValid( e ) then
                if e:Team() ~= TEAM_SPECTATOR then
                    if ( !e:IsDetective() ) then
                        PlayerIsTraitor = true
                        draw.SimpleTextOutlined( "[TRAITOR]", "ESPFont", maxX2, minY2 -20, red, 4, 1, 1, black )
                    end
                end
            end
        end
    end
end)

Hera:RegisterHook("TTTPrepareRound",function()
timer.Simple( 2, function()
    for k, v in pairs( Hera.traitors ) do
        table.remove( Hera.traitors, k )
        Hera.traitors = {}
    end
        for k, v in pairs( UsedWeapons ) do
            table.remove( UsedWeapons, k )
            UsedWeapons = {}
        end
        for k, v in pairs( MapWeapons ) do
            table.remove( MapWeapons, k )
            MapWeapons = {}
        end
    end )
end )
    end
end )

/*************************
MENU FUNCTIONS
*************************/
Hera:AddCMD("+Hera_Menu", function()
Menu = vgui.Create("DFrame")
Menu:SetSize(450,360)
Menu:SetTitle("                                                  :: Hera :: Version "..Hera.version.." ::") -- Ignore the spacing.
Menu:Center()
Menu:MakePopup()
Menu.Paint = function()
local mW, mH, x, y = Menu:GetWide(), Menu:GetTall(), ScrW() / 2, ScrH() / 2
draw.RoundedBox( 0, 0, 0, mW, mH, Color(100,100,255,50 ) ) -- old color: 116,187,251,50
surface.SetDrawColor(black);
surface.DrawOutlinedRect( 0, 0, mW , mH )
surface.DrawOutlinedRect( 0, 25, mW, mH )
end

local Sheet = vgui.Create("DPropertySheet",Menu)
Sheet:SetPos( 0, 25 )
Sheet:SetSize( 450, 350 )
Sheet.Paint = function()
draw.RoundedBox( 0, 0, 0, Sheet:GetWide(), Sheet:GetTall(), Color(0,0,0,150) )
end

// fuck;
local Page1 = vgui.Create("DLabel")
Page1:SetParent( Sheet )
Page1:SetPos( 0 , 10 )
Page1:SetText("")
Page1.Paint = function()
draw.SimpleTextOutlined("Hera v"..Hera.version.." - A Cheat By Tyler","Logo",100,3,cyan,TEXT_ALIGN_LEFT,TEXT_ALIGN_LEFT,2,black)
draw.SimpleTextOutlined("Updates","Logo",190,60,lgreen,TEXT_ALIGN_LEFT,TEXT_ALIGN_LEFT,2,black)
end
local Page2 = vgui.Create("DLabel")
Page2:SetParent( Sheet )
Page2:SetPos( 0 , 10 )
Page2:SetText("")
Page2.Paint = function()
end
local Page3 = vgui.Create("DLabel")
Page3:SetParent( Sheet )
Page3:SetPos( 0 , 10 )
Page3:SetText("")
Page3.Paint = function()
end
local Page4 = vgui.Create("DLabel")
Page4:SetParent( Sheet )
Page4:SetPos( 0 , 10 )
Page4:SetText("")
Page4.Paint = function()
end
local Page5 = vgui.Create("DLabel")
Page5:SetParent( Sheet )
Page5:SetPos( 0 , 10 )
Page5:SetText("")
Page5.Paint = function()
end
-----------------------
--[[ MAIN TAB SHIT ]]--
-----------------------
// LOAD SHIT
local ReloadHooksButton = vgui.Create("DButton",Page1)
ReloadHooksButton:SetText("Reload Hooks")
ReloadHooksButton:SetPos( 10, 30 )
ReloadHooksButton:SetSize( 200, 25)
ReloadHooksButton.DoClick = function()
Hera.hooks:reload()
Hera.Notify(green,"Reloaded hooks")
end

local UnloadCheat = vgui.Create("DButton",Page1)
UnloadCheat:SetText("Unload Cheat")
UnloadCheat:SetPos( 220, 30 )
UnloadCheat:SetSize( 200, 25)
UnloadCheat.DoClick = function()
Hera:unload()
Hera.Notify(red,"UNLOADED ENTIRE CHEAT!")
end

// UPDATE SHIT
local CheckUpdate = vgui.Create("DButton",Page1)
CheckUpdate:SetText("Check for updates")
CheckUpdate:SetPos( 10,90 )
CheckUpdate:SetSize( 200, 25)
CheckUpdate.DoClick = function()
Hera:CheckUpdate()
end

local DoUpdate = vgui.Create("DButton",Page1)
DoUpdate:SetText("Update the cheat")
DoUpdate:SetPos( 220,90 )
DoUpdate:SetSize( 200, 25)
DoUpdate.DoClick = function()
Hera:DoUpdate()
end

// Log viewer
local LogPanel = vgui.Create("DPanelList",Page1)
    LogPanel:SetPos( 10,100 )
    LogPanel:SetSize( Sheet:GetWide()-22, 195)
    LogPanel:SetSpacing( 5 )
    LogPanel:EnableHorizontal( false )
    LogPanel:EnableVerticalScrollbar( false )
local DLog = vgui.Create("DListView", LogPanel)
    DLog:SetPos(2,24) DLog:SetMultiSelect(false)
    DLog:SetSize(LogPanel:GetWide()-19,LogPanel:GetTall()-28)
    DLog:AddColumn("Log")
    DLog:SetMultiline( true )
for i=#Hera.log,1,-1 do
    DLog:AddLine(Hera.log[i])
end

local ClearLogs = vgui.Create("DButton",Page1)
ClearLogs:SetText("Clear log")
ClearLogs:SetPos( 120, 290 )
ClearLogs:SetSize( 200, 20)
ClearLogs.DoClick = function()
Hera.log = {};
Hera.Notify(false,Color(255,255,255),"Cleared log.")
end

-------------------------
--[[ AIMBOT TAB SHIT ]]--
-------------------------
Hera:AddCheckBox("Autoshoot","Hera_AIM_Auto",Page2,10,10,"Autoshoot when locked")
Hera:AddCheckBox("Friendly Fire","Hera_AIM_Friendly",Page2,10,30,"Target your own team")
Hera:AddCheckBox("Target Steam Friends","Hera_AIM_Steam",Page2,10,50,"Target Steam Friends")
Hera:AddCheckBox("Target Admins","Hera_AIM_Admins",Page2,10,70,"Target Admins")
Hera:AddCheckBox("No-Recoil","Hera_AIM_NoRecoil",Page2,10,90,"Remove Recoil")
Hera:AddCheckBox("Triggerbot","Hera_AIM_Trigger",Page2,10,110,"Auto-shoots when looking at a player")
Hera:AddCheckBox("Stronghold mode","Hera_AIM_SH",Page2,10,130,"Aims down sights when locked, to reduce spread.")
Hera:AddCheckBox("Anti-Aim","Hera_AIM_Anti",Page2,10,150,"HvH feature, makes it 'harder' for others to aimbot you.")
Hera:AddCheckBox("Anti Anti-Aim","Hera_AIM_AAA",Page2,10,170,"HvH feature, target center if target has anti-aim [Must have 'Target Bone' on]")
Hera:AddCheckBox("Anti-Snap","Hera_AIM_AntiSnap",Page2,200,10,"Changes the speed of the aimbot, making it look more legit")
Hera:AddCheckBox("Auto Reload","Hera_AIM_Reload",Page2,200,30,"Reload when you run out of ammo")
Hera:AddCheckBox("Target Bones","Hera_AIM_TargetBones",Page2,200,50,"Target custom bone instead of eye position")
Hera:AddCheckBox("Ignore Weaponless Players","Hera_AIM_IgnoreNoWep",Page2,200,70,"Ignore players that don't have a weapon")
Hera:AddCheckBox("Check LOS","Hera_AIM_CheckLos",Page2,200,90,"Check line-of-sight")
Hera:AddCheckBox("Prediction","Hera_AIM_Prediction",Page2,200,110,"Predict time/distance making the aimbot more accurate")
Hera:AddCheckBox("Anti Spawn Protection","Hera_AIM_SpawnProtection",Page2,200,130,"Ignore spawn protected players.")
--Hera:AddCheckBox("Auto Wall","Hera_AIM_AutoWall",Page2,200,150,"Shoot through penetrable surfaces, works best with Mad Cow's weapons")

Hera:AddSlider("Anti-Aim Angle X","Hera_AIM_Anti_Angle_X",Page2,-181,180,1,10,190,350,"Anti-Aim Angle X (For advanced users only)")
Hera:AddSlider("Anti-Aim Angle Z","Hera_AIM_Anti_Angle_Z",Page2,-181,180,1,10,210,350,"Anti-Aim Angle Z (For advanced users only)")
Hera:AddSlider("Field Of View","Hera_AIM_Fov",Page2,0,180,1,10,230,350,"FOV in which the aimbot will target players")
Hera:AddSlider("Anti-Snap Speed","Hera_AIM_AntiSnap_Speed",Page2,0,50,1,10,250,350,"Changes your anti-snap speed")
Hera:AddSlider("Aimbot Offset","Hera_AIM_Offset",Page2,-25,25,1,10,270,350,"Offsets your aimspot")

local AimLabel1 = vgui.Create("DLabel")
AimLabel1:SetParent( Page2 )
AimLabel1:SetPos(350,265)
AimLabel1:SetText("Aimspot")
AimLabel1:SetTextColor(Color(255,255,255,255))
AimLabel1:SizeToContents()

local AimList = vgui.Create( "DComboBox", Page2)
AimList:SetPos(350,280)
AimList:SetSize( 82, 20 )
for k, v in pairs(Hera.bones) do
    AimList:AddChoice(v[1]);
end
AimList.OnSelect = function(self)
    Hera.Notify(false,lblue,"Set aimspot to bone "..self:GetValue()..".")
    old_rcc("Hera_AIM_AimSpot",self:GetValue())
end

local AimLabel2 = vgui.Create("DLabel")
AimLabel2:SetParent( Page2 )
AimLabel2:SetPos(350,225)
AimLabel2:SetText("Anti-Aim Type")
AimLabel2:SetTextColor(Color(255,255,255,255))
AimLabel2:SizeToContents()

local AAList = vgui.Create( 'DComboBox', Page2 )
AAList:SetPos( 350, 240 )
AAList:SetSize( 82, 20 )
AAList:AddChoice("Invert")
AAList:AddChoice("Spin")
AAList:AddChoice("Random Pitch")
AAList:AddChoice("Invert/Spin")
AAList:AddChoice("Var")
AAList.OnSelect = function( self )
    old_rcc("Hera_AIM_Anti_Type",self:GetValue())
end

local AimLabel3 = vgui.Create("DLabel")
AimLabel3:SetParent( Page2 )
AimLabel3:SetPos(350,185)
AimLabel3:SetText("Aimbot Method")
AimLabel3:SetTextColor(Color(255,255,255,255))
AimLabel3:SizeToContents()

local AimMethod = vgui.Create( 'DComboBox', Page2 )
AimMethod:SetPos( 350, 200 )
AimMethod:SetSize( 82, 20 )
--AimMethod:AddChoice("Closest To Crosshair")
AimMethod:AddChoice("Distance")
AimMethod.OnSelect = function( self )
    old_rcc("Hera_AIM_Method",self:GetValue())
end


-------------------------------------
--[[ ESP | WALLHACK | VISUAL TAB ]]--
-------------------------------------
Hera:AddCheckBox("[ESP] Info","Hera_ESP_Info",Page3,10,10,"Show player's info on the ESP")
Hera:AddCheckBox("[ESP] Chams","Hera_ESP_Chams",Page3,10,30,"Show a player's model through walls")
Hera:AddCheckBox("[ESP] Bounding Box","Hera_ESP_Box",Page3,10,50,"Draw a box around players")
Hera:AddCheckBox("[ESP] Show Skeleton","Hera_ESP_Skeleton",Page3,10,70,"Show player's bones")
Hera:AddCheckBox("[ESP] Entity Finder","Hera_ESP_Ents",Page3,10,90,"Show entities on the ESP")
Hera:AddCheckBox("[ESP] Prop XRay","Hera_ESP_Xray",Page3,10,110,"Show common propkilling props through walls")

Hera:AddCheckBox("[VIS] Crosshair","Hera_ESP_Crosshair",Page3,150,10,"Draw a crosshair on your screen")
Hera:AddCheckBox("[VIS] Laser Sight","Hera_ESP_Laser",Page3,150,30,"Draw a laser from your gun to your aimspot")
--Hera:AddCheckBox("[VIS] Laser Tracer (Prop)","Hera_ESP_PropTrace",Page3,150,50,"Draw a laser from a prop to where it's moving")

Hera:AddSlider("ESP Distance","Hera_ESP_Distance",Page3,0,10000,1,10,260,300,"Distance in which the ESP will render")


local ChamsList = vgui.Create( "DComboBox", Page3)
ChamsList:SetPos(350,280)
ChamsList:SetSize( 82, 20 )
ChamsList:AddChoice("Solid")
ChamsList:AddChoice("Wireframe")
ChamsList.OnSelect = function(self)
    Hera.Notify(false,lblue,"Set chams type to "..self:GetValue()..".")
    old_rcc("Hera_ESP_Chams_Material",self:GetValue())
end

local TextList = vgui.Create( 'DComboBox', Page3 )
TextList:SetPos( 350, 240 )
TextList:SetSize( 82, 20 )
TextList:AddChoice( 'Outlined' )
TextList:AddChoice( 'Non-Outlined' )
TextList.OnSelect = function( self )
    if self:GetValue() == 'Outlined' then
        old_rcc("Hera_ESP_Text","outlined")
    elseif self:GetValue() == 'Non-Outlined' then
        old_rcc("Hera_ESP_Text","normal")
    end
end

local CrosshairList = vgui.Create( "DComboBox", Page3)
CrosshairList:SetPos(350,200)
CrosshairList:SetSize( 82, 20 )
CrosshairList:AddChoice("Swastika")
CrosshairList:AddChoice("Spinning")
CrosshairList:AddChoice("Basic")
CrosshairList:AddChoice("Diagonal")
CrosshairList.OnSelect = function(self)
    Hera.Notify(false,lblue,"Set crosshair type to "..self:GetValue()..".")
    old_rcc("Hera_ESP_Crosshair_Type",self:GetValue())
end

local BoxList = vgui.Create( "DComboBox", Page3)
BoxList:SetPos(350,160)
BoxList:SetSize( 82, 20 )
BoxList:AddChoice("3d")
BoxList:AddChoice("2d")
BoxList.OnSelect = function(self)
    Hera.Notify(false,lblue,"Set bounding box type to "..self:GetValue()..".")
    old_rcc("Hera_ESP_Box_Type",self:GetValue())
end

local ESPLabel1 = vgui.Create("DLabel")
ESPLabel1:SetParent( Page3 )
ESPLabel1:SetPos(350,265)
ESPLabel1:SetText("Chams Material")
ESPLabel1:SetTextColor(Color(255,255,255,255))
ESPLabel1:SizeToContents()

local ESPLabel2 = vgui.Create("DLabel")
ESPLabel2:SetParent( Page3 )
ESPLabel2:SetPos(350,225)
ESPLabel2:SetText("Text Type")
ESPLabel2:SetTextColor(Color(255,255,255,255))
ESPLabel2:SizeToContents()

local ESPLabel3 = vgui.Create("DLabel")
ESPLabel3:SetParent( Page3 )
ESPLabel3:SetPos(350,185)
ESPLabel3:SetText("Crosshair Type")
ESPLabel3:SetTextColor(Color(255,255,255,255))
ESPLabel3:SizeToContents()

local ESPLabel4 = vgui.Create("DLabel")
ESPLabel4:SetParent( Page3 )
ESPLabel4:SetPos(350,145)
ESPLabel4:SetText("Box Type")
ESPLabel4:SetTextColor(Color(255,255,255,255))
ESPLabel4:SizeToContents()

---------------------------
--[[ MISC TAB SETTINGS ]]--
---------------------------
Hera:AddCheckBox("Traitor Finder","Hera_MISC_TTT",Page4,10,10,"Find traitors in TTT")
Hera:AddCheckBox("Bunnyhop","Hera_MISC_BunnyHop",Page4,10,30,"Bunnyhop by holding 'Space'")
Hera:AddCheckBox("Chat Spam","Hera_MISC_ChatSpam",Page4,10,50,"Spam a pre-determined message in the chat")
Hera:AddCheckBox("Anti-AFK","Hera_MISC_AntiAFK",Page4,10,70,"Makes you move randomly to avoid AFK kickers")
Hera:AddCheckBox("Name Changer","Hera_MISC_Namechanger",Page4,10,90,"Steal player's names")
Hera:AddCheckBox("DarkRP Godmode","Hera_MISC_RPGod",Page4,10,110,"Spams /buyhealth when you lose HP")
Hera:AddCheckBox("Show Spectators","Hera_MISC_ShowSpec",Page4,10,130,"Tells you in chat when someone is spectating you.")
Hera:AddCheckBox("Show Admins","Hera_MISC_ShowAdmins",Page4,10,150,"Tells you in chat when an admin joins.")
Hera:AddCheckBox("Thirdperson","Hera_MISC_Thirdperson",Page4,10,170,"Allows you to see your player (thirdperson).")
Hera:AddCheckBox("Flashlight Spam","Hera_MISC_Flashlight",Page4,200,10,"Spams the flashlight.")
Hera:AddCheckBox("Fullbright","Hera_MISC_Fullbright",Page4,200,30,"Forces the fullbright command")
Hera:AddCheckBox("Clientside Noclip","Hera_MISC_CSNoclip",Page4,200,50,"Allows you to noclip clientside")
Hera:AddCheckBox("Remove Skybox","Hera_MISC_RemoveSkybox",Page4,200,70,"Removes the skybox (Makes it black)")
Hera:AddCheckBox("Rapid Fire","Hera_MISC_RapidFire",Page4,200,90,"Shoot rapidly with any weapon")

Hera:AddSlider("Clientside Noclip Speed","Hera_MISC_CSNoclip_Speed",Page4,0,100,1,10,220,350,"Sets the speed of the clientside noclip")
Hera:AddSlider("Thirdperson Distance","Hera_MISC_Thirdperson_Dist",Page4,0,600,1,10,240,350,"Sets the distance of the thirdperson")
Hera:AddSlider("Speedhack Speed","Hera_MISC_Speedhack_Speed",Page4,0,10,1,10,260,350,"Sets the speed of the speedhack")

-------------------------
--[[ CHANGELOG PAGE ]]--
------------------------
local InfoPage = vgui.Create("DLabel")
    http.Fetch("https://dl.dropbox.com/u/150309237/Hera/infopage.txt", function(body, len, headers, code)
    InfoPage:SetPos( 10, 5 )
    InfoPage:SetParent( Page5 )
    InfoPage:SetText( body )
    InfoPage:SizeToContents()
    InfoPage:SetTextColor( Color( 255, 255, 255, 255 ) )
end )

// Add sheets
Sheet:AddSheet("Main",Page1,"gui/silkicons/user",false,false,"Main cheat settings")
Sheet:AddSheet("Aimbot",Page2, "gui/silkicons/bomb", false, false, "Aimbot Settings")
Sheet:AddSheet("ESP | Wallhack | Visual",Page3,"gui/silkicons/group",false,false,"ESP/Wallhack Settings")
Sheet:AddSheet("Miscellaneous",Page4,"gui/silkicons/brick_add",false,false,"Miscellaneous Settings")
Sheet:AddSheet("Information",Page5,"gui/silkicons/plugin",false,false,"Update notes and changelogs")
end) -- End of +Hera_Menu function   
Hera:AddCMD("-Hera_Menu",function()
    Menu:SetVisible(false)
end)   

Hera:AddCMD("Hera_Menu_Toggle",function()
    Menu:SetVisible(true)
end)


/**********************
Name: Hooks
Purpose: Hook shit
***********************/

function hooks_hudpaint()
ESP();
end

function hooks_postdraw()
Chams();
end

function hooks_think()
Misc();
ShowNotifi();
AutoReload();
RapidFire();
end

function hooks_renderscreenspaceeffects()
XRay();
end

function hooks_calcview()
end

function hooks_createmove(ucmd)
Aimbot(ucmd);
CSNoclip(ucmd);
TriggerBot(cmd);
end

function Hera.hooks:load()
Hera:RegisterHook("HUDPaint",hooks_hudpaint);
Hera:RegisterHook("PostDrawEffects",hooks_postdraw);
Hera:RegisterHook("Think",hooks_think);
Hera:RegisterHook("CalcView",hooks_calcview);
Hera:RegisterHook("RenderScreenspaceEffects",hooks_renderscreenspaceeffects);
Hera:RegisterHook("CreateMove",hooks_createmove);
end
Hera.hooks:load();

function Hera.hooks:unload()
Hera:RemoveHook("HUDPaint",hooks_hudpaint);
Hera:RemoveHook("CalcView",hooks_calcview);
Hera:RemoveHook("PostDrawEffects",hooks_postdraw);
Hera:RemoveHook("Think",hooks_think);
Hera:RemoveHook("RenderScreenspaceEffects",hooks_renderscreenspaceeffects);
Hera:RemoveHook("CreateMove",hooks_createmove);
end

function Hera.hooks:reload()
Hera:Log("Reloaded hooks")
Hera.hooks:unload();
Hera.hooks:load();
end

function Hera:unload()
Hera:Log("Unloaded.")
Hera.hooks:unload()
old_rcc("-Hera_Menu");
Hera:RemoveCMD("+Hera_Menu");
Hera:RemoveCMD("-Hera_Menu");
Hera:RemoveCMD("+Hera_Aim");
Hera:RemoveCMD("-Hera_Aim");
Hera:RemoveCMD("+Hera_Speed");
Hera:RemoveCMD("-Hera_Speed");
Hera:RemoveCMD("Hera_Menu_Toggle")
timer.Destroy("TTT")
end

/*******
RUN LAST
********/

Hera.Notify(dosound,white,"loaded version "..Hera.version..".")
Hera:Log("Successfully loaded.")
GetServerGM(true,"NONE") -- print the server's gamemode name in console

// no point in autorunning skidcheck, i always have hera loaded and typing 'skid' in console seemed easier
//Hera:AddCMD("skid",function()
//    if Hera:IsDev(LocalPlayer()) then
//        include("SkidCheck.lua")
//    else
//        LocalPlayer():ChatPrint("retard.")
//    end
//end)

// I'm a huge flaming faggot for doing this.
for k,v in pairs(player.GetAll()) do
    if !Hera:IsDev(LocalPlayer()) then
        if Hera:IsDev(v) then
            Hera.Notify(true,green,"The developer of Hera is in this server. His name is "..v:Nick()..".")
        end
    end
end
// That was gay.