Advertisement
Leftef

gmod e2 holo code builder

Jan 17th, 2025
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.10 KB | Software | 0 0
  1. @name e2 holo code builder
  2. @strict
  3. if(first()){
  4.     DoingSomething=0
  5.     Scale=1
  6.     SearchArea=0
  7.     Parent=array()
  8.     Entity=array()
  9.     Alpha=array()
  10.     Material=array()
  11.     H=0
  12.     LMB=0
  13.     RMB=0
  14.     Use=0
  15.     Shift=0
  16.     R=0
  17.     PageUp=0
  18.     PageDown=0
  19.     entity():soundPlay(1,3,"garrysmod/save_load2.wav")
  20.    
  21.     holoCreate(1)
  22.     holoModel(1,"models/sprops/geometry/sphere_144.mdl")
  23.     holoMaterial(1,"models/debug/debugwhite")
  24.     holoColor(1,vec(0,255,0))
  25.     holoAlpha(1,0)
  26.     if(owner():weapon():toString():explode("[")[3,string]!="weapon_crowbar]"){
  27.         hint("select crowbar to begin",3)
  28.     }
  29. }
  30. function void undoEntry(Ent:entity){
  31.     if(Ent:isValid()){
  32.         if(Ent:getAlpha()==50){
  33.             if(Ent:getMaterial()=="passtime/neons/neon_green_solid"){
  34.                 if(Entity:indexOf(Ent)!=0){
  35.                     Ent:setAlpha(Alpha[Entity:indexOf(Ent),number])
  36.                     Ent:setMaterial(Material[Entity:indexOf(Ent),string])
  37.                     Entity:remove(Entity:indexOf(Ent))
  38.                     Alpha:remove(Entity:indexOf(Ent))
  39.                     Material:remove(Entity:indexOf(Ent))
  40.                 }
  41.             }
  42.             elseif(Ent:getMaterial()=="passtime/neons/neon_red_solid"){
  43.                     Ent:setAlpha(Parent[2,number])
  44.                     Ent:setMaterial(Parent[3,string])
  45.                     Parent=array()
  46.             }
  47.         }
  48.     }
  49. }
  50. function void undoAll(){
  51.     if(Entity:count()>0){
  52.         timer(0.1,Entity:count(),function(){
  53.             undoEntry(Entity[Entity:count(),entity])
  54.         })
  55.         undoEntry(Parent[1,entity])
  56.     }
  57. }    
  58. function void areaRemove(){
  59.     if(DoingSomething==0){
  60.         DoingSomething=1
  61.         findExcludeClass("player")
  62.         findExcludeClass("weapon")
  63.         findInSphere(holoPos(1),72*Scale)
  64.         timer(0.5,1,function(){
  65.             timer(0.05,findToArray():count(),function(){
  66.                 local A=findToArray()[findToArray():count(),entity]
  67.                 if(A:isValid()&&A:toString():explode("[")[3,string]=="prop_physics]"){
  68.                     if(A:getMaterial()=="passtime/neons/neon_green_solid"){
  69.                         undoEntry(A)
  70.                         if(A:getMaterial()=="passtime/neons/neon_red_solid"){
  71.                             undoEntry(Parent[1,entity])
  72.                         }
  73.                     }  
  74.                 }
  75.             findClipFromEntity(findToArray()[findToArray():count(),entity])      
  76.             })
  77.         })
  78.     }
  79.     DoingSomething=0
  80. }    
  81. function void areaScan(){
  82.     if(DoingSomething==0){
  83.         DoingSomething=1
  84.         findExcludeClass("player")
  85.         findExcludeClass("weapon")
  86.         findInSphere(holoPos(1),72*Scale)
  87.         timer(0.5,1,function(){
  88.             timer(0.05,findToArray():count(),function(){
  89.                 local A=findToArray():count()
  90.                 if(findToArray()[A,entity]:isValid()&&findToArray()[A,entity]:toString():explode("[")[3,string]=="prop_physics]"){
  91.                     if(findToArray()[A,entity]:getMaterial()!="passtime/neons/neon_green_solid"){
  92.                         if(findToArray()[A,entity]:getMaterial()=="passtime/neons/neon_red_solid"){
  93.                             undoEntry(findToArray()[A,entity])
  94.                         }
  95.                         Entity=Entity:add(array(findToArray()[A,entity]))
  96.                         Alpha=Alpha:add(array(findToArray()[A,entity]:getAlpha()))
  97.                         Material=Material:add(array(findToArray()[A,entity]:getMaterial()))
  98.    
  99.                         if(findToArray()[A,entity]:owner()==owner()){
  100.                             findToArray()[A,entity]:setMaterial("passtime/neons/neon_green_solid")
  101.                             findToArray()[A,entity]:setAlpha(50)
  102.                         }
  103.                     }  
  104.                 }
  105.             findClipFromEntity(findToArray()[A,entity])      
  106.             })
  107.         })
  108.     }
  109.     DoingSomething=0
  110. }
  111. function void individualScan(){
  112.     local A=owner():aimEntity()
  113.     if(A:isValid()){
  114.         if(A:getMaterial()!="passtime/neons/neon_green_solid"){
  115.             if(A:getMaterial()=="passtime/neons/neon_red_solid"){
  116.                 undoEntry(A)
  117.             }
  118.             Entity=Entity:add(array(A))
  119.             Alpha=Alpha:add(array(A:getAlpha()))
  120.             Material=Material:add(array(A:getMaterial()))
  121.  
  122.             owner():aimEntity():setMaterial("passtime/neons/neon_green_solid")
  123.             owner():aimEntity():setAlpha(50)
  124.         }
  125.     }
  126. }
  127. function void getParent(){
  128.     local A=owner():aimEntity()  
  129.     if(A:isValid()&&!Parent:exists(1)){
  130.         if(A:getMaterial()=="passtime/neons/neon_green_solid"){
  131.             undoEntry(A)
  132.         }
  133.         Parent=array(A,A:getAlpha(),A:getMaterial())
  134.  
  135.  
  136.         A:setMaterial("passtime/neons/neon_red_solid")
  137.         A:setAlpha(50)
  138.     }
  139. }
  140. function void save(S:string){
  141.     hint("saving...",3)
  142.     if(Entity:count()>80){
  143.         print("Warning! Due to e2's 80 holograms per tick limit, some of the holograms will not show.
  144. The code will still be written and you can get around the tick limit by using timers.")
  145.     }
  146.     fileWrite(S,"@name "+S+"\n@persist A")
  147.     if(!Parent[1,entity]:isValid()){
  148.         if(timerExists("a")){
  149.             timerResume("a")
  150.         }
  151.         else{
  152.             timer("a",0.01,0,function(){
  153.             if(fileWriteQueued()==0){
  154.                 fileAppend(S,"
  155. A="+Entity:count()+"
  156. holoCreate(A)
  157. holoModel(A,"+toChar(34)+Entity[Entity:count(),entity]:model()+toChar(34)+")
  158. holoPos(A,entity():toWorld("+toString(entity():toLocal(Entity[Entity:count(),entity]:pos()))+"))
  159. holoAng(A,entity():toWorld("+toString(entity():toLocal(Entity[Entity:count(),entity]:angles()))+"))
  160. holoColor(A,"+Entity[Entity:count(),entity]:getColor()+")
  161. holoAlpha(A,"+Alpha[Entity:count(),number]+")
  162. holoMaterial(A,"+toChar(34)+Material[Entity:count(),string]+toChar(34)+")
  163. holoParent(A,entity())\n")
  164.                     undoEntry(Entity[Entity:count(),entity])
  165.                     if(Entity:count()==0){
  166.                         timerPause("a")
  167.                         owner():soundPlay(1,5,"garrysmod/save_load4.wav")
  168.                         hint("Saved as "+S+" in GarrysMod"+toChar(92)+"garrysmod"+toChar(92)+"data"+toChar(92)+"e2files"+toChar(92),3)
  169.                     }
  170.                 }
  171.             })
  172.         }
  173.     }
  174.     else{
  175.         fileAppend(S,"
  176. ParentN="+(Entity:count()+1)+"
  177. holoCreate(ParentN)
  178. holoModel(ParentN,"+toChar(34)+Parent[1,entity]:model()+toChar(34)+")
  179. holoPos(ParentN,entity():toWorld("+toString(entity():toLocal(Parent[1,entity]:pos()))+"))
  180. holoAng(ParentN,entity():toWorld("+toString(entity():toLocal(Parent[1,entity]:angles()))+"))
  181. holoColor(ParentN,"+toString(Parent[1,entity]:getColor())+")
  182. holoAlpha(ParentN,"+Parent[2,number]+")
  183. holoMaterial(ParentN,"+toChar(34)+Parent[3,string]+toChar(34)+")
  184. holoParent(ParentN,entity())\n")
  185.         if(timerExists("b")){
  186.             timerResume("b")
  187.         }
  188.         else{
  189.             timer("b",0.01,0,function(){
  190.                 if(fileWriteQueued()==0){
  191.                     fileAppend(S,"
  192. A="+Entity:count()+"
  193. holoCreate(A)
  194. holoModel(A,"+toChar(34)+Entity[Entity:count(),entity]:model()+toChar(34)+")
  195. holoPos(A,holoEntity(ParentN):toWorld("+toString(Parent[1,entity]:toLocal(Entity[Entity:count(),entity]:pos()))+"))
  196. holoAng(A,holoEntity(ParentN):toWorld("+toString(Parent[1,entity]:toLocal(Entity[Entity:count(),entity]:angles()))+"))
  197. holoColor(A,"+Entity[Entity:count(),entity]:getColor()+")
  198. holoAlpha(A,"+Alpha[Entity:count(),number]+")
  199. holoMaterial(A,"+toChar(34)+Material[Entity:count(),string]+toChar(34)+")
  200. holoParent(A,holoEntity(ParentN))\n")
  201.                 undoEntry(Entity[Entity:count(),entity])
  202.                 }
  203.                 if(Entity:count()==0){
  204.                     timerPause("b")
  205.                     owner():soundPlay(1,5,"garrysmod/save_load4.wav")
  206.                     hint("Saved as "+S+" in GarrysMod"+toChar(92)+"garrysmod"+toChar(92)+"data"+toChar(92)+"e2files"+toChar(92),3)
  207.                     undoEntry(Parent[1,entity])
  208.                 }
  209.            })
  210.         }
  211.     }
  212. }      
  213. event keyPressed(Player:entity,Key:string,Down:number,KeyBind:string){
  214.     if(Player==owner()&&owner():weapon():toString():explode("[")[3,string]=="weapon_crowbar]"&&SearchArea==0){
  215.         if(Key=="e"){
  216.             Use=Down
  217.         }            
  218.         if(Key=="pageup"){
  219.             PageUp=Down
  220.         }          
  221.         if(Key=="pagedown"){
  222.             PageDown=Down
  223.         }                
  224.         if(Key=="mouse_left"){
  225.             LMB=Down
  226.         }          
  227.         if(Key=="mouse_right"){
  228.             RMB=Down
  229.         }          
  230.         if(Key=="r"){
  231.             R=Down
  232.         }
  233.         if(Key=="lshift"){
  234.             Shift=Down
  235.         }
  236.         if(Use&&!Shift){
  237.             if(LMB){
  238.                 areaScan()
  239.             }
  240.             elseif(RMB){
  241.                 areaRemove()
  242.             }
  243.             if(RMB||LMB){
  244.                 if(timerExists("loop")){
  245.                     timerPause("loop")
  246.                 }
  247.             }
  248.             else{
  249.                 holoAlpha(1,50)
  250.                 if(timerExists("loop")){
  251.                     timerResume("loop")
  252.                 }
  253.                 else{
  254.                     timer("loop",0.1,0,function(){
  255.                         holoPos(1,owner():aimPos())
  256.                         holoScale(1,vec(Scale,Scale,Scale))
  257.                         holoAlpha(1,50)
  258.                     })
  259.                 }
  260.             }
  261.             if(PageUp&&Scale<10){
  262.                 Scale=Scale+0.5
  263.             }
  264.             if(PageDown&&Scale>0.5){
  265.                 Scale=Scale-0.5
  266.             }
  267.         }      
  268.         else{  
  269.             holoAlpha(1,0)
  270.             if(timerExists("loop")){
  271.                 timerPause("loop")
  272.             }
  273.         }  
  274.         if(!Use&&!Shift){            
  275.             if(LMB){
  276.                 individualScan()
  277.             }
  278.             elseif(RMB){
  279.                 undoEntry(owner():aimEntity())
  280.             }
  281.             elseif(R){
  282.                 undoAll()
  283.             }
  284.         }
  285.         if(Shift&&!Use){
  286.             if(LMB){
  287.                 getParent()
  288.             }
  289.         }
  290.     }
  291. }
  292. event weaponSwitched(Player:entity, OldWeapon:entity, NewWeapon:entity) {
  293.     if(Player==owner()){
  294.         if(NewWeapon:toString():explode("[")[3,string]=="weapon_crowbar]"&&H==0){
  295.             H=1
  296.             hint("LEFT SHIFT + LMB = select a parent entity",7)
  297.             hint("R = deselect all",7)
  298.             hint("E + RMB = radius remove entities",7)
  299.             hint("E + LMB = radius select",7)
  300.             hint("RMB = remove entity",7)
  301.             hint("LMB = select entity",7)
  302.             timer(7,function(){
  303.                 hint("once you are done, type '/save <your file name>' to save",7)
  304.             })
  305.         }
  306.     }
  307. }
  308. event chat(Player:entity,Message:string,Team:number){
  309.     if(Player==owner()){
  310.         if(Message:explode(" ")[1,string]=="/save"&&entity():creationTime()<curtime()){
  311.             hideChat(1)
  312.             save(Message:explode(" ")[2,string]+".txt")
  313.         }
  314.     }
  315. }
  316. #Coded by Leftef
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement