May 31, 2020, 09:06 pm

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Scriptis

Pages: [1] 2
1
DoorCoreEX
The Last E2 Door You'll Ever Need
also like the eight millionth auto door released here but who cares right



Overview
It's a E2 door controller, for all of your base's doors. Spawn the chip, aim at a fading door, and say .door. Add more doors to your door list the same way, with no limits. Add players to your base's whitelist with .wl [player]. Further manage your whitelist with .wlpurge, .wlprune, and .list. Open garage doors and quick-access doors, from inside vehicles or on the ground. Never accidentally let another player follow you in. Never get stuck in your own door again. Just spawn the chip and set up your doors. It's that simple.

Features
  • Incredibly low ops: idles at 150 or less with four players and five doors. Minimizes per-tick table accesses.
  • Entity collision check: Won't close if the player (or their vehicle) is still inside of the door. Never smash your car again.
  • Persistent memory: If the chip crashes or resets, you don't need to manually re-enter your doors or whitelists.
  • Offline players are players: If a player on your whitelist goes offline, they remain on the door list.
  • Ignores carried entities: Never get arrested trying to haul a printer back again.
  • Beautiful output: All commands give useful, easy-to-read output to chat.

Usage
  • .door: Adds or removes the aimed door to the list.
  • .wl [player]: Adds or removes a player from the whitelist.
  • .list: Prints the current whitelist, including offline players.
  • .wlprune - Removes disconnected players from the whitelist.
  • .wlpurge - Removes everyone from the whitelist except you.

By default, players must hold USE (bound by default to E) to open doors, and hold ATTACK2 (bound by default to right-click) to open doors while in a vehicle. DoorCoreEX supports both garage doors and player-access doors, making it especially useful for getting rid of excess E2s. Further instructions are included in the source code.

Download here.

Good luck, and have fun.


2
Wire / E2 / [Release] All the sShops (and other stuff, too)
« on: June 30, 2018, 09:42 am »
sShop Legacy Pack
Some old, some new! (to you, at least)



Hopefully this keeps you lot off of my back until I can write sShop17 for whatever the hell we're doing on s&box, assuming that actually ever happens. On the bright side, sShop17 probably won't be in Expression 2. So, here's my last Expression 2 release, for, well, the rest of eternity. Probably.

A fair warning: some of these chips don't account for changes made to Expression 2 functions at the start of the year; where I would typically use a return type (i.e., number) on a function, I often didn't actually return anything, which was technically UB and no longer compiles. Just change the return type on those functions to void.

Included Things and Stuff
  • Scriptis' Shop (sShop 0) - Straight out of 2011, my first solid attempt at E2. Revel in the hopeful ramblings of a small child trying to figure out how the hell this whole programming thing works anyway, armed only with E2 Helper and the sheer will of a moron.
  • sShop2 through sShop 9 - Old-school shops utilizing console screens or EGPs, depending on whatever was available at the time on whatever server I was active on. One or two of these might've been compatible with ByB, but they're pretty outdated at this point. A few of them might not even be finished. Neat!
  • sShop13 - An autovendor that let you purchase a variable amount of a single item.
  • sShop14 - An incredibly concise, extremely effective autovendor made on ByB. Displays all items in a large table, allowing users to quickly put together a cart and get out.
  • sShop15 - The best god-damn autovendor on the market for two years. EGP-based and looked pretty decent-ish for the time.
  • sShop16 - The best god-damn autovendor on the market until the heat death of the universe. EGP-based and looks beautiful.
  • Shrimp - Small single-item autovendor meant for small machines out in the streets.
  • sShop17 - Sorry, it's not finished. If it were, it would be the best god-damn--well, you get the point.
  • sShopKeeper - Another chip never used on ByB. Creates a holographic NPC that sells you guns through a holographic interface, utilizing moneyRequest.
  • sShopKeeper2 - A faster, more optimized, and generally more effective version of sShopKeeper, with some extra features.
  • sShopKeeper3 - An unfinished rework of sShopKeeper2 that was designed as a hot dog stand instead of a shop.
  • sShopPortable - It would've been better than whatever CanadianBill made, if I bothered to finish it.
  • sShop Nexus - You haven't seen this before. Designed for open-air maps, Nexus launches headcrab cannisters to players ordering weapons, and then teleports the relevant weapons out of a crate launched from the cannister on impact. This definitely wasn't built for ByB, but I was damn close to making it work anyway.
  • Art - Neat triangle and miscellaneous art included as a bonus. The sShop logo (which is not a zebra), a weed leaf by commission, a pretty orb-looking thing using a gold-cyan color scheme, and a rainbow staircase builder.
  • Miscellaneous ByB Nonsense - Single-E2 full meth automation, ultimate fort of superevil (slow-moving plate base) controller, self-driving cars, automated printer dropoff, whatever. Varying legality on ByB according to the old rules (and probably the future ones, too).
    • Automated Printer Dropoff - Allows you to move a prop or wire weight around the map with A* pathfinding, exclusively on rp_downtown_v4c with the included graph. Used to move printers back to your base while you're out raiding.
    • Stupid Car Thing - A self-driving car using the same aforementioned A* tech.
    • Ultimatum - An unfinished (but conceptually sound) all-in-one printer bank, automatic gun shop, and self-storage service (the trifecta of things I automated away entirely).
    • Police Hub - Counts remaining jail time for jailed players, as well as /wants. I forgot I had this one, and it's still pretty neat.
    • Meth Automator - Standalone meth automator. It's very simple to use: buy all the materials, spawn the chip, and go eat.

Okay Cool, But Why?

Well, why not?

I don't know, maybe these qualify as collectors' items or something, probably valued in the tens of hundreds of tenths of hundreds of pennies. Maybe they qualify as a memo for ByB. Maybe I just felt like it, and I can do what I want, god damn it, get off my back man.

That's not an excuse

You're not an excuse.

You're also ugly.

Download

Archive available here.

Anything Else

I'll probably just release literally everything when GMod finally just kicks the bucket. We're getting there.

If there's anything in particular I missed that you vaguely remember and still want, scream at me. I'll tie it to a brick and throw it at you. Except for HoloSlots (which I regret making), Blackjack (which is really ugly), or anything that is really cool but isn't from ByB.

Some little bonuses right off the bat: world's greatest moped (re-re-re-release), and the fancy sci-fi room that I've included a really soggy low-res picture of below because I really needed some pictures in this thread.

just build some cool stuff



AutoMerge: June 30, 2018, 01:08 pm
Missing library followup, in case you're missing an #include for it:

lib/ct/shipmentmetadata

3
Wire / E2 / [Release] sRadio3
« on: September 13, 2015, 06:32 pm »
sRadio 3

It's a radio.  It plays unified music.  That's literally it.

I'm releasing this due to popular demand.  Apparently, out of all the members on ByB, I'm the only one to have ever made a functional radio.

Usage

Place however many radios.  They'll handle themselves automatically.
If you need to force a song, you can use -play [song name].
You can change the overall volume on line 89.  You can also change the "scale" of the song on line 87 by changing the second number between one and twelve.
If for some reason you need radios to play different songs, change the Group variable on line 9.

To add a song, refer to this syntax:
Code: [Select]
array(string Song Name, int Length (seconds),string Path)
Installation


Right-click and save the download link as sRadio3.txt to:

Code: [Select]
C:\Program Files (x86)\Steam\steamapps\common\GarrysMod\garrysmod\data\Expression2
Download (Right click > save as)


don't be a plagiarist
or i'll bash your head in
not really

4
Wire / E2 / [Release] sShop16 4.1
« on: September 06, 2015, 02:55 am »
Preface


Yep, it's here, it's not completely finished, but it's functional and it's time to kick out all of those other ugly autovendors, because this thing kicks their ass, and all it took was two point four thousand lines of code.  4.2 coming soon with bundling/discounting/the rest of everything.

Anyway, I'm releasing this particular version because it's fairly unstable, which means that I've got the whole community available to tell me about all the times this thing fails/hits the tick quota (which I've taken steps to prevent, mostly)/has a few ugly bits that replacing.

Point withstanding, this chip is generally brutally efficient and idles at less than two hundred ops (a huge step up from sShop15) and does its best to calculate everything in advance so that it doesn't have to do it later (the wonders of caching).

Aptly Placed Video Demonstration





What it Does

  • Nearly fully self-wiring (you must wire the moneypot)
  • Virtually infinite users, up until ops limit (tested with up to 16)
  • So sexy that we hit the EGP object limit
  • Credit system
  • Cart system
  • Draws a fancy arrow pointing towards the moneypot so that your less-than-intelligent customers know where it is
  • Kick-ass loading bar that isn't a bar (it's the other thing)
  • Manages itself so it doesn't throw itself and the tick quota over a bridge
  • Pwns all those other crap autovendors



What it Don't (yet)

  • Work on an EGP emitter (never, ever going to happen)
  • Include the discount/bundling system (coming in build 4.2)
  • Automatically advertise itself (4.2)
  • Automatically create bundles & discounts based on available data (4.2)
  • Defend your base for you (4.2) (not really)
  • Auto-Update (never to be included; takes up too many ops)



Usage

  • Place users adjacent to shipments, an EGP wherever, and a moneypot.
  • Spawn the chip.
  • The chip will wire itself to all available users and the nearest EGP.
  • Wire the chip's Moneypot to your moneypot using the advanced wire tool.
  • Advertise the hell out of your new, shiny autovendor.



Installation

sShop16 is designed to be completely standalone.
Place the chip here:

Code: [Select]
C:\Program Files (x86)\Steam\steamapps\common\GarrysMod\garrysmod\data\Expression2
Right-click and save as to sShop16.txt in the above directory.

don't be a plagiarist
or else bad things will happen to you




5
Wire / E2 / [Release] sShop16's Unfinished Source Code
« on: May 20, 2015, 02:47 am »
sShop16 (sShop-Finale) - Dead Project - Defunct - Unfinished

For two years, we've waited on sShop16.  I never finished it, and when I finally returned to finish it this May, I hit the ops quota with drawing to an EGP, despite my tendency to over-optimize everything.

This is the incomplete source code to sShop16.  It does not function properly; it gets only to the point where it can draw items to the shop menu.  Drawing the shop menu in itself is extremely expensive, and for some outrageous reason hits the ops quota.

If you're in the mood to finish what I've started, that's all you.  I'm just tired of trying to finish this, in an environment so extremely oriented on simply disabling anything that has even the slightest potential to be abused, rather than patching the problem or giving it to higher ranks.  I have seen so much disabled in these past years-- it has driven me from ByB to other servers.

The code in itself is brutally efficient, running 3x as fast as sShop15 with even fewer ops (idles at 150 ops on interval 100), while being one of the best-looking things I've ever created.  This is accomplished by placing basically all of the code in function calls, so that it doesn't have to be interpreted per-execution, but rather only when it is needed.

I hope you can, at the bare minimum, learn something from this code.  It uses techniques employed by few, even if it's unfinished.

It works, but it doesn't accomplish any task.  If you want it to work, then it's up to you to make it work.

Features

  • Full auto-wire capabilities
  • Brutally efficient
  • Uses no materials from other games; only gradients & Mad Cows Weapons icons
  • Defunct & unusable in its stock state

Click here for the source.
Screenshots.
Save to C:\Program Files (x86)\Steam\steamapps\common\GarrysMod\garrysmod\data\Expression2.

"License" included within the source.
Don't be a plagiarist.

6
Wire / E2 / [Release] Bank Chips
« on: June 21, 2014, 07:25 am »
Bank Chips
Click the title of a chip for that chip.


What you're dealing with

If you've seen me over the past few weeks, you probably know that I've been making some pretty fancy stuff.  Not just any fancy stuff, but fancy stuff for our second least-used job ever: banker.

What we have here are a handful of chips that make your customers enjoy using your bank.  Also, you'll probably die a lot because those losers like to store explosive junk in their vaults.  So without further ado, banking!


Scriptis' Self-Store Service

The most important chip.  This one handles purchase management (timing, money, who owns what) and is wired to the EGP.

When a user buys time, they get that time.  Then, when their time runs out, they have a three minute grace period before their safe is forfeit.

Wiring
Scr [Wirelink] -> EGP [Create Wirelink]
Amount [Normal] -> Moneypot [StoredAmount]
UserTrigger [Entity] -> EGP [User]

Screenshots
Spoiler
This is all the user gets to see.  Safes appear on the left, they insert money and select one to rent.



Bank List

Gives a chart of who owns what for how long.  Functions off of the self-store serivce.

Wiring
Scr [Wirelink] -> Console Screen [Create Wirelink]


Bank Vault DoorCore

THIS IS THE MOST IMPORTANT CHIP.  TO USE ANY OTHER BANK CHIP, YOU MUST SPAWN THIS CHIP AND CHAT -reset*

This chip handles the vault doors and the overall data structure.  Without it, your bank will fall into ruin and everything will go defunct.

Wiring
DoorOverride [Normal] -> Your safe toggle

Usage
Players can hold E to open their safe.  You have access to every safe.

-reset* - Wipes and rebuilds the global bank datastructure.  Must be used to start a bank.
-addsafe [Name] - Adds the non-toggle fading door that you're looking at to the safe list.



Don't be a plagiarist.
That's the policy of the chip.  I'll show up, call you out, and then you'll have to deal with a buttload of raiders because of it.

7
Suggestions and Questions / Sort-Of Shooting Windows
« on: May 28, 2014, 04:14 am »
Hi guys.
I was on RP4 today and was raiding a base as a cop after sending in a bug.
But what really bothered me was how they killed raiders.

Instead of using shooting windows, they would use a gap between the raid door to kill players.  Being that it wasn't a shooting window, I thought I'd ask if it were allowed.

Attached are four pictures depicting the concept of the base I was raiding.  A, B, and C are legitimate places to shoot your raider.  D is the one in question.  It is not a shooting window, but rather the gap in the door.

Is the 'shooting window' shown in screenshot D valid to kill players with?

8
Wire / E2 / [Release] Holoslots & CasinoStats
« on: May 17, 2014, 03:54 am »
Scriptis' Holoslots & Casinostats
Let's make this quick, okay?


Heyo guys, I'm like super tired right now.  Giraffe won't stop bothering me about this, so I decided to release it to everybody at once.  So here it is: two lightweight chips that avoid using sShop16 levels of EGP objects.  Have fun!

Requires TF2 to be mounted to fully function!

Holoslots Chip

Code: [Select]
@name HoloSlots
@persist Draw MaxBid MinBid PayoutRate Texture:array Speed:array
@persist Rot1 Rot2 Rot3 Goal1 Goal2 Goal3 Disabled
@persist Credit Spinning Bid AnimState Changed Last
@persist Payout_Pot Payout_Two CurSound
@inputs Scr:wirelink Amount
@outputs Eject
@trigger all
Things=gTable("Casino")
if (first()) {
    MaxBid=2500
    MinBid=100
    Payout_Pot=3
    Payout_Two=0.75
    Last=Amount
    function string prettyInt(N:number) {
        #print(N)
        local Str=ceil(N):toString():reverse():explode("")
        local Count=Str:count()
        local Add=1
        for (I=0, Str:count(), 3) {
            if (I!=0 & I!=Count & Str[I+1,string]) {Str:insertString(I+Add,",") Add++}
        }
        return Str:concat():reverse()
    }
    function playSound(S:string) {
        CurSound=1
        if (CurSound>8) {CurSound=0}
        Scr:entity():soundPlay(CurSound,0,S)
    }
    function updateBits() {
        #3 12 22 32
        #1 10 20 30
        #2 11 21 31
        #print(_HUD_PRINTCENTER,""+Rot1+", "+Misc1+", "+Misc2)
        Scr:egpMaterial(10,Texture[ceil(Rot1),string])
        local Misc1=ceil(Rot1)-1
        if (Misc1<1) {Misc1=Texture:count()}
        local Misc2=ceil(Rot1)+1
        if (Misc2>Texture:count()) {Misc2=1}
        Scr:egpMaterial(11,Texture[Misc1,string])
        Scr:egpMaterial(12,Texture[Misc2,string])
       
        Scr:egpMaterial(20,Texture[ceil(Rot2),string])
        local Misc1=ceil(Rot2)-1
        if (Misc1<1) {Misc1=Texture:count()}
        local Misc2=ceil(Rot2)+1
        if (Misc2>Texture:count()) {Misc2=1}
        Scr:egpMaterial(21,Texture[Misc1,string])
        Scr:egpMaterial(22,Texture[Misc2,string])
       
        Scr:egpMaterial(30,Texture[ceil(Rot3),string])
        local Misc1=ceil(Rot3)-1
        if (Misc1<1) {Misc1=Texture:count()}
        local Misc2=ceil(Rot3)+1
        if (Misc2>Texture:count()) {Misc2=1}
        Scr:egpMaterial(31,Texture[Misc1,string])
        Scr:egpMaterial(32,Texture[Misc2,string])
       
       
    }
}

if (first() | changed(Scr)) {
    Scr:egpClear()
    Draw=1
    Texture[1,string]="weapons/weapon_mad_admin"
    Texture[2,string]="weapons/weapon_mad_deagle"
    Texture[3,string]="weapons/weapon_mad_grenade"
    #Texture[4,string]="weapons/weapon_mad_crow"
}
if (Draw) {
    #main
    Scr:egpText(1,"HoloSlots",vec2(256,236))
    Scr:egpAlign(1,1,0)
    Scr:egpAlpha(1,128)
    Scr:egpMaterial(1,"gui/gradient_down")
    Scr:egpFont(1,"Marlett",30)
   
    Scr:egpLine(2,vec2(200,266),vec2(512-200,266))
    Scr:egpSize(2,3)
    Scr:egpAlpha(2,128)
    Scr:egpMaterial(2,"gui/gradient_down")
   
    Scr:egpBox(3,vec2(128+64,315),vec2(50))
    Scr:egpMaterial(3,"vgui/button_central_disabled")
   
    Scr:egpBox(4,vec2(256,315),vec2(50))
    Scr:egpMaterial(4,"vgui/button_central_disabled")
   
    Scr:egpBox(5,vec2(256+64,315),vec2(50))
    Scr:egpMaterial(5,"vgui/button_central_disabled")
   
    Scr:egpText(6,"Insert $"+prettyInt(MinBid)+" to $"+prettyInt(MaxBid),vec2(256,360))
    Scr:egpSize(6,10)
    Scr:egpAlign(6,1,1)
   
    Scr:egpText(7,"Max Pot: $"+prettyInt(clamp(Amount,0,MaxBid*3)),vec2(256,370))
    Scr:egpAlign(7,1,1)
    Scr:egpSize(7,10)
    #10-13 slot1 images
    Pos1=0
    Rot1=0
    Scr:egpBox(10,vec2(0),vec2(50,25))
    Scr:egpParent(10,3)
    Scr:egpMaterial(10,Texture[1,string])
   
    Scr:egpBox(11,vec2(0,25),vec2(50,25)*0.5)
    Scr:egpAlpha(11,128)
    Scr:egpParent(11,3)
    Scr:egpMaterial(11,Texture[2,string])
   
    Scr:egpBox(12,vec2(0,-25),vec2(50,25)*0.5)
    Scr:egpAlpha(12,128)
    Scr:egpParent(12,3)
    Scr:egpMaterial(12,Texture[3,string])
   
    #20-23 slot2 images
    Pos2=0
    Rot2=0
    Scr:egpBox(20,vec2(0),vec2(50,25))
    Scr:egpParent(20,4)
    Scr:egpMaterial(20,Texture[1,string])
   
    Scr:egpBox(21,vec2(0,25),vec2(50,25)*0.5)
    Scr:egpAlpha(21,128)
    Scr:egpParent(21,4)
    Scr:egpMaterial(21,Texture[2,string])
   
    Scr:egpBox(22,vec2(0,-25),vec2(50,25)*0.5)
    Scr:egpAlpha(22,128)
    Scr:egpParent(22,4)
    Scr:egpMaterial(22,Texture[3,string])
   
    #30-33 slot3 images
    Pos3=0
    Rot3=0
    Scr:egpBox(30,vec2(0),vec2(50,25))
    Scr:egpParent(30,5)
    Scr:egpMaterial(30,Texture[1,string])
   
    Scr:egpBox(31,vec2(0,25),vec2(50,25)*0.5)
    Scr:egpAlpha(31,128)
    Scr:egpParent(31,5)
    Scr:egpMaterial(31,Texture[2,string])
   
    Scr:egpBox(32,vec2(0,-25),vec2(50,25)*0.5)
    Scr:egpAlpha(32,128)
    Scr:egpParent(32,5)
    Scr:egpMaterial(32,Texture[3,string])
}
if (changed(Amount)) {
    if (Disabled) {hint("[SLOTS] Ignoring money",3) Last=Amount}
    if (Amount>Last) {Credit+=Amount-Last hint("[SLOTS] Money inserted ["+Credit+"]",3) Last=Amount}
    if (Amount<Last) {Last=Amount}
    Scr:egpSetText(7,"Max Pot: $"+prettyInt(clamp(Amount,0,MaxBid*3)))
}
if (changed(Credit) & !Spinning & Credit>=MinBid) {
    Spinning=1
    timer("spin",100)
}
if (clk("spin")) {
    Things["Spins",number]=Things["Spins",number]+1
    Scr:egpMaterial(3,"vgui/button_central_disabled")
    Scr:egpMaterial(4,"vgui/button_central_disabled")
    Scr:egpMaterial(5,"vgui/button_central_disabled")
    Bid=clamp(Credit,MinBid,MaxBid)
    Bid=clamp(Bid,MinBid,Amount)
    hint("[SLOTS] Bidding "+Bid,3)
    Credit-=Bid
    Goal1=randint(1,Texture:count())
    Goal2=randint(1,Texture:count())
    Goal3=randint(1,Texture:count())
    playSound("ambient/alarms/klaxon1.wav")
    #buttons/button16.wav
    #buttons/button9.wav
    Speed[1,number]=1
    Speed[2,number]=1
    Speed[3,number]=1
    hint("[SLOTS] It will be "+Goal1+", "+Goal2+", "+Goal3,3)
    AnimState=0
    timer("spinanim",100)
}
if (clk("spinanim")) {
    Scr:egpSetText(6,"Bid: $"+prettyInt(Bid))
    Rot1+=Speed[1,number]
    if (Rot1>Texture:count()) {Rot1=1}
    Rot2+=Speed[2,number]
    if (Rot2>Texture:count()) {Rot2=1}
    Rot3+=Speed[3,number]
    if (Rot3>Texture:count()) {Rot3=1}
    if (Speed[1,number]>0 & randint(1,3)==3 & ceil(Rot1)==Goal1) {
        Speed[1,number]=0
        Rot1=Goal1
        Changed=1
    }
    if (Speed[2,number]>0 & randint(1,3)==3 & ceil(Rot2)==Goal2) {
        Speed[2,number]=0
        Rot2=Goal2
        Changed=1
    }
    if (Speed[3,number]>0 & randint(1,3)==3 & ceil(Rot3)==Goal3) {
        Speed[3,number]=0
        Rot3=Goal3
        Changed=1
    }
    if (egpCanSendUmsg()) {updateBits() if (Changed) {playSound("buttons/button9.wav") Changed=0}}
    #print(_HUD_PRINTCENTER,""+Rot1+", "+Rot2+", "+Rot3)
    if (Speed:sum()>0) {timer("spinanim",200)} else {timer("fin",1000)}
}

if (clk("fin")) {
    function number ejectCash(Percent) {
        Eject=ceil(Bid*Percent)
        Scr:egpSetText(6,"$"+prettyInt(Bid)+"*"+(Percent*100)+"% = $"+prettyInt(Eject))
        hint("[SLOTS] Ejected $"+Eject,3)
        Things["Paid",number]=Things["Paid",number]+Eject
        timer("ne",0)
        return 1
    }
    if (Rot1==Rot2 & Rot2==Rot3) {
        Things["Wins",number]=Things["Wins",number]+1
        ejectCash(Payout_Pot)
        Scr:egpMaterial(3,"vgui/button_central_hover")
        Scr:egpMaterial(4,"vgui/button_central_hover")
        Scr:egpMaterial(5,"vgui/button_central_hover")
        playSound("ui/itemcrate_smash_ultrarare_short.wav")
    } elseif (Rot1==Rot2 | Rot2==Rot3) {
        ejectCash(Payout_Two)
        Scr:egpMaterial(4,"vgui/button_central_hover")
        playSound("mvm/mvm_bought_upgrade.wav")
        if (Rot1==Rot2) {Scr:egpMaterial(3,"vgui/button_central_hover")} else {Scr:egpMaterial(5,"vgui/button_central_hover")}
    } else {playSound("mvm/mvm_money_vanish.wav")}
    if (Credit>=MinBid) {timer("spin",3000)} else {timer("ns",3000)}
}
if (clk("ns")) {Scr:egpSetText(6,"Insert $"+prettyInt(MinBid)+" to $"+prettyInt(MaxBid)) Spinning=0 if (Credit>MinBid) {timer("spin",0)}}
if (clk("ne")) {Eject=0}
runOnChat(1)
if (chatClk(owner()) & owner():lastSaid()=="-d") {Disabled=!Disabled print(Disabled) hideChat(1)}
if (chatClk(owner()) & owner():lastSaid()=="-eject") {hideChat(1) if (Amount>7500) {Eject=Amount-7500 hint("[SLOTS] Ejected "+Eject,3) timer("ne",100)}}

Use=0
Draw=0


Wire Scr to an EGP Emitter, Amount to a moneypot, and a moneypot to Eject.

CasinoStats Chip

Code: [Select]
@name CasinoStats
@inputs Scr:wirelink

interval(1000)

    function string prettyInt(N:number) {
        #print(N)
        local Str=ceil(N):toString():reverse():explode("")
        local Count=Str:count()
        local Add=1
        for (I=0, Str:count(), 3) {
            if (I!=0 & I!=Count & Str[I+1,string]) {Str:insertString(I+Add,",") Add++}
        }
        return Str:concat():reverse()
    }
Things=gTable("Casino")
Wins=Things["Wins",number]
Spins=Things["Spins",number]
Paid=Things["Paid",number]

Scr:egpClear()
Scr:egpText(1,"Stats",vec2(256,300))
Scr:egpSize(1,50)
Scr:egpAlign(1,1,1)

Scr:egpText(2,"Spins",vec2(246,330))
Scr:egpAlign(2,2,1)
Scr:egpSize(2,25)
Scr:egpText(3,""+prettyInt(Spins),vec2(266,330))
Scr:egpAlign(3,0,1)
Scr:egpSize(3,25)

Scr:egpText(4,"Jackpots Won",vec2(246,360))
Scr:egpAlign(4,2,1)
Scr:egpSize(4,25)
Scr:egpText(5,""+prettyInt(Wins),vec2(266,360))
Scr:egpAlign(5,0,1)
Scr:egpSize(5,25)

Scr:egpText(6,"Cash Won",vec2(246,390))
Scr:egpAlign(6,2,1)
Scr:egpSize(6,25)
Scr:egpText(7,"$"+prettyInt(Paid),vec2(266,390))
Scr:egpSize(7,25)
Scr:egpAlign(7,0,1)
Scr:egpColor(7,vec(0,255,0))
prettyInt(Paid)
Offset=95
Scr:egpBox(8,vec2(128+64-Offset,435),vec2(50))
Scr:egpMaterial(8,"vgui/button_central_disabled")
   
Scr:egpBox(9,vec2(256-Offset,435),vec2(50))
Scr:egpMaterial(9,"vgui/button_central_disabled")
   
Scr:egpBox(10,vec2(256+64-Offset,435),vec2(50))
Scr:egpMaterial(10,"vgui/button_central_disabled")



Scr:egpBox(11,vec2(256-Offset,485),vec2(50))
Scr:egpMaterial(11,"vgui/button_central_disabled")
   
Scr:egpBox(12,vec2(256+64-Offset,485),vec2(50))
Scr:egpMaterial(12,"vgui/button_central_disabled")

Scr:egpText(13,"300%",vec2(266,435))
Scr:egpSize(13,25)
Scr:egpAlign(13,0,1)

Scr:egpText(14,"75%",vec2(266,485))
Scr:egpSize(14,25)
Scr:egpAlign(14,0,1)

for (I=8,12,1) {
    Scr:egpText(12+I,"X",Scr:egpPos(I))
    Scr:egpAlign(12+I,1,1)
    Scr:egpSize(12+I,40)
    Scr:egpColor(12+I,vec(0))
}



Wire Scr to an EGP Emitter.

Don't be a plagiarist or I'll beat you up.
(I see you, Winston Churchill.)

9
scriptis and kgwilson's amazing bank of america
due to the sheer awesomeness of this e2 chip we could not post it on the forums

instead, get it on pastebucket


features

  • fully customizable
  • disco party

instructions

wire scr to a egp and usertrigger to a egp

this is a really cool e2 chip and you should support it

10
Scriptis' ApplyForceLib
Making things move made easy




WTF is this?

    Yes, I get it, this isn't sShop16.  I'm still hard at work on that-- but for now, here's something cool that I spent a lot of time making for use with sShop16.

    ApplyForceLib is self-explanatory-- a library that makes applyforce easier.  No more stupid crazy math cluttering up your lines-- just two simple functions that move/rotate an entity to whereever.


Code

Code: [Select]
#[
Scriptis' ApplyForceLib
    Entity:move(Vector)
    Entity:rotate(Angle)
    Works best on an interval(100)
]#
@persist Lib_Force_DeltaTable:table
if (first()) {
    function number entity:move(Vec:vector) {
        local CurPos=This:pos()
        local ThisID="v"+toString(This:id())
        local TargetForce=Vec-CurPos
        local LastPos=Lib_Force_DeltaTable[ThisID,vector]
        if (LastPos:length()==0) {LastPos=CurPos}
        local Delta=LastPos-CurPos
        Lib_Force_DeltaTable[ThisID,vector]=TargetForce
        This:applyForce(((Delta+CurPos)-This:vel())*This:mass()*(TargetForce:length()>0.1))
        return 1
    }
    function number entity:rot(Ang:angle) {
        local Ang=Ang-This:angles()
        local ThisID="a"+This:id()
        local LastAng=Lib_Force_DeltaTable[ThisID,angle]
        if (LastAng:pitch()+LastAng:yaw()+LastAng:roll()==0) {LastAng=Ang}
        Lib_Force_DeltaTable[ThisID,angle]=Ang
        local Delta=LastAng-Ang
        This:applyAngForce(((Delta+Ang-This:angVel()))*This:mass())
        return 1
    }
}


How to use it without burning your house down

This is simple to use.  Let's say you save it as ApplyForceLib.txt.
Code: [Select]
#include "ApplyForceLib"Now you can use Entity:move and Entity:rot.

Entity:rot(Angle) - Rotates an entity to the target goal.
Entity:move(Vector) - Moves an entity to the target goal.

For the best results, use Physical Properties to disable the gravity of the entity and Weight to set its mass to 50,000.

Physics Printer Holder

This code uses three props and holds your printers.
I recommend the following model:
Code: [Select]
models/Mechanics/gears2/vert_18t1.mdlA, B, and C are all wirelinked to props.  Carry a printer near the props and it will hover under the printer, and return with it.

Code:
Code: [Select]
@name Scriptis' Physics Printer Holder V2
@inputs [A B C]:wirelink
@persist Base:vector HoldState Out Tick Printer:entity PPos:vector
#include "lib/force/func"
if (first()) {
    Base=entity():pos()
    function say(S:string) {
        printColor(vec(0,255,255),"[PhysPrinters] ",vec(255),S)
    }
}
Tick=(Tick+1)%180
findByClass("player")
PlayerPos=findClosest(entity():pos()):pos()
if (!Printer) {
    findByModel("models/props_lab/reciever01a.mdl")
    #findByModel("models/hunter/blocks/cube025x025x025.mdl")
    Printerr=findClosest(PlayerPos)
    #print(Printer)
    if (Printerr:isPlayerHolding() & Printerr:pos():distance(entity():pos())<200) {
        Printer=Printerr
        local Printer1=findClosest(A:entity():pos())
        local Printer2=findClosest(B:entity():pos())
        local Printer3=findClosest(C:entity():pos())
        if (!Printer1 | Printer1:pos():distance(A:entity():pos())>=20) {
            timer("send1",750)
            say("Sending platform I")
        } elseif (!Printer2 | Printer2:pos():distance(B:entity():pos())>=20) {
            timer("send2",750)
            say("Sending platform II")
        } elseif (!Printer3 | Printer3:pos():distance(C:entity():pos())>=20) {
            timer("send3",750)
            say("Sending platform III")
        }
    }
} elseif (Printer & !Printer:isPlayerHolding()) {
    Printer=noentity()
    timer("return",750)
}
if (clk("send1")) {PPos=Printer:pos() HoldState=1}
if (clk("send2")) {PPos=Printer:pos() HoldState=2}
if (clk("send3")) {PPos=Printer:pos() HoldState=3}
if (clk("return")) {HoldState=0}

if (HoldState!=1) {
    A:entity():move(Base+vec(0,0,5))
} else {
    A:entity():move(PPos-vec(0,0,25))
}
A:entity():rot(ang(0,Tick,0))

if (HoldState!=2) {
    B:entity():move(Base+vec(0,0,35))
} else {
    B:entity():move(PPos-vec(0,0,25))
}
B:entity():rot(ang(0,Tick,0))

if (HoldState!=3) {
    C:entity():move(Base+vec(0,0,65))
} else {
    C:entity():move(PPos-vec(0,0,25))
}
C:entity():rot(ang(0,Tick,0))

interval(300)

WARNING: PHX props are EXTREMELY unstable with :angles.  AVOID!
Don't be a plagiarist.

11
Wire / E2 / [Release] Scriptis' Really Old Blackjack E2
« on: March 24, 2014, 10:28 pm »
Scriptis' Really Old Blackjack E2
the code that i'm only distributing because of unauthorized reselling

Heyo, I'm back.  SShop16 will happen sometime soon, but anyway,
I gave a blackjack e2 to somebody, he gave it to his friend, and then that friend started selling my chip without my permission, and my response to that is NO.

So here's the two-year-old chip that I really don't want to release in this state but I won't stand for people selling it without my permission.

Wiring Instructions

This code is super old.
Console Screen, E2
ConsoleScreen[Reset]->E2[Reset]
E2[Screen]->ConsoleScreen

Say -free to toggle freeplay.  If you DO want to use AMT and Eject, good luck with that.

Usage

Say !start while looking at the screen to start a game.
Say 'hit' to draw a card, or 'freeze' to stop.
Once you freeze, the dealer will start drawing his cards.  If he beats you, GG.  He always stops if he gets to 17 or above.

Bugs

This chip is OLD.
Quote from: Scriptis
So here's the two-year-old chip that I really don't want to release in this state but I won't stand for people selling it without my permission.
  • The chip must be reset after a tie/draw/whatever.
  • Sometimes the User variable doesn't reset.
I am done with this chip.  It's been two years.  If you want to improve/fix it, that's all you.
Code

Code: [Select]
@name Blackjack
@persist AiSetting Cards:array ECards:array Display:array Royal:array
@persist Playing Player:entity Card Cost Cardpos:array Total ETotal Frozen
@persist Freeplay
@inputs Scr:wirelink AMT
@outputs Reset Eject
@persist Credit Current
@model models/props_junk/PopCan01a.mdl
@trigger all
#/mvm/mvm_tank_end.wav
#/mvm/mvm_player_died.wav
#/mvm/mvm_money_vanish.wav
#/misc/achievement_earned.wav
runOnChat(1)
if (first()) {
    AiSetting=17
    Cost=20
    Royal=array("K","Q","J","A")
    Cardpos=array(2,6,10,14,18,22,26,30,34)
    function resetAll() {
        Reset=1
        timer("reset",50)
    }
    function pickCards() {
        for (I=1, 7) {
            Cards[I,number]=randint(1,14)
            ECards[I,number]=randint(1,14)
        }
    }
    function draw() {
        Scr:writeString(toChar(131)+"  Blackjack  "+toChar(130),7,0)
        if (Playing) {
            Total=0
            Scr:writeString("Dealer's Cards",0,2)
            Scr:writeString(" -  ":repeat(7),1,3)
            Scr:writeString("|#| ":repeat(7),1,4)
            Scr:writeString(" -  ":repeat(7),1,5)
           
            Scr:writeString("Your Cards",0,7)
            Scr:writeString(" -  ":repeat(7),1,8)
            Scr:writeString("|#| ":repeat(7),1,9)
            Scr:writeString(" -  ":repeat(7),1,10)
            Scr:writeString("Hit or Freeze? Chat!",6,17)
            Card=0
            pickCards()
    } elseif (Credit<Cost & !Freeplay) {
        Scr:writeString("Insert $"+(Cost-Credit),15-ceil(("Insert $"+(Cost-Credit)):length()/2),7,vec(255,255,255),vec(128,128,128),1)
    } else {
    if (!Freeplay) {
        findByClass("player")
        Player=findClosest(Scr:entity():pos())
        Scr:writeString(Player:name():sub(1,3)+", Say !start to begin",15-ceil((Player:name():sub(1,3)+", Say !start to begin"):length()/2),7,vec(255,255,255),vec(128,128,128),1)
} else {
        Scr:writeString("Say !start to begin",5,7)
    }
    }
}
    function string getRoyal(A) {
        return Royal[Cards[A,number]-10,string]
    }
    function string egetRoyal(A) {
        return Royal[ECards[A,number]-10,string]
    }
   
    function number getPos(A) {return Cardpos[A,number]}
   
    function bust() {
        Playing=0
        Scr:writeString("You busted!",9,16)
        Scr:entity():soundPlay(0,0,"/mvm/mvm_tank_end.wav")
        timer("resetall",10000)
       
    }
        function edrawOne() {
        Card++
        if (Card>7) {Card=7 return}
            if (ECards[Card,number]<10) {
                Scr:writeString(ECards[Card,number]:toString(),getPos(Card),4)
                ETotal+=ECards[Card,number]
            } else {Scr:writeString(egetRoyal(Card),getPos(Card),4) ETotal+=10}
        }

    function drawOne() {
        Card++
            if (Card>7) {Card=7 return}
                if (Cards[Card,number]<10) {
                    Scr:writeString(Cards[Card,number]:toString(),getPos(Card),9)
                    Total+=Cards[Card,number]
                } else {Scr:writeString(getRoyal(Card),getPos(Card),9) Total+=10}
            if (Total>21) {bust()}
    }
    function win() {
        if (Total>ETotal | ETotal>21) {
            soundPlay(0,0,"/misc/achievement_earned.wav")
            Scr:writeString("You won!",11,16)
            timer("stopplay",10000)
            Eject=100
        }
        if (ETotal>Total & ETotal<=21) {
            soundPlay(0,0,"/mvm/mvm_player_died.wav")
            Scr:writeString("You lost!",10,16)
            timer("stopplay",10000)
    }
    if (Total==ETotal & ETotal<=21) {
        soundPlay(0,0,"/mvm/mvm_money_vanish.wav")
        Scr:writeString("Tied! Wait, what?",6,15)
        Scr:writeString("New round!",10,16)
        timer("resetall",10000)
}
}
    resetAll()
}
if (clk("reset")) {Reset=0 timer("draw",50)}
if (clk("draw")) {draw()}
if (AMT>Current) {Credit+=AMT-Credit Current=AMT}
if (Current>AMT) {LastAMT=AMT}
if (changed(AMT) & !Playing) {draw()}
if (changed(Playing) & !Playing) {resetAll()}
if (chatClk(Player) & Player:aimEntity()==Scr:entity() & !Frozen) {
    Args=Player:lastSaid():lower():explode(" ")
    if (Args:count()==0) {Args[1,string]=Player:lastSaid():lower()}
    #print(Args[1,string])
    if (Args[1,string]=="!start" & Credit>=Cost) {
        Credit-=Cost
        Playing=1
        resetAll()
    }
    if (Playing) {
    if (Args[1,string]:matchFirst("hit")) {
        drawOne()
    }
    if (Args[1,string]:matchFirst("freeze")) {
        Frozen=1
        Card=0
        edrawOne()
        timer("dealerdraw",2000)
    }
}
}
if (clk("dealerdraw")) {
    edrawOne()
    if (ETotal>=17) {
        win()
} else {timer("dealerdraw",2000)}
   
}

if (Playing & Player:pos():distance(Scr:entity():pos())>300) {Player=noentity() Playing=0 resetAll()}
if (clk("resetall")) {resetAll()}
if (Playing | changed(Total) | changed(ETotal)) {
    if (Total>21) {TBack=vec(255,0,0)} else {TBack=vec(0,0,0)}
    if (ETotal>21) {ETBack=vec(255,0,0)} else {ETBack=vec(0,0,0)}
    Scr:writeString("Total: "+ETotal,30-(("Total: "+ETotal):length()),2,vec(255,255,255),ETBack)
    Scr:writeString("Total: "+Total,30-(("Total: "+Total):length()),7,vec(255,255,255),TBack)
}
if (clk("stopplay")) {Playing=0 Frozen=0 Player=noentity() resetAll()}
if (AMT<Current) {Current=AMT}
if (chatClk(owner()) & owner():lastSaid()=="-free") {
    hideChat(1)
    Freeplay=!Freeplay
    print("toggled freeplay")
}
if (chatClk(owner()) & owner():lastSaid()=="-cards") {
    hideChat(1)
    Stuffs=array()
    for (I=1, Cards:count()) {
        if (Cards[I,number]>10) {
            Stuffs[Stuffs:count()+1,string]=getRoyal(I)
        } else {Stuffs[Stuffs:count()+1,string]=Cards[I,number]:toString()
    }
}
Sayer="Cards are "+(Stuffs:concat(", "))+"."
printColor(vec(0,255,0),Sayer)
    Stuffs2=array()
    for (I=1, ECards:count()) {
        if (ECards[I,number]>10) {
            Stuffs2[Stuffs2:count()+1,string]=egetRoyal(I)
        } else {Stuffs2[Stuffs2:count()+1,string]=ECards[I,number]:toString()
    }
}
Sayer2="Opponent Cards are "+(Stuffs2:concat(", "))+"."
printColor(vec(255,0,0),Sayer2)
Last=0
LastLast=0
Cardsr=0
for (I=1, Cards:count()) {
    LastLast=Last
    if (Cards[I,number]>10) {Last+=10} else {Last+=Cards[I,number]}
    Cardsr++
    if (Last>21) {CardsToDraw="For the best results, draw "+(Cardsr-1)+" cards." break}
}
printColor(vec(0,255,0),CardsToDraw)
}
if (!Playing) {Total=0 ETotal=0}
if (changed(Freeplay) & !Playing) {draw()}
if (Freeplay & lastSpoke():aimEntity()==Scr:entity()) {
    if (lastSaid():lower()=="!start") {
        Player=lastSpoke()
        Playing=1
        resetAll()
    }
}


and remember not to be a plagiarist, but do feel free to build upon my code
once again, I only released this to stop idiots from selling bad code
yes, this is bad code

12
Wire / E2 / [Release] VoxxeDL
« on: November 16, 2013, 06:06 am »
VoxxeDL
Because I'm running out of subtitles

Generic Greeting
Hi there, ByB!  You know me, right?  The guy who vanished for a month?  Well, I've got something fancy for you today, something so fancy that you wouldn't believe that it downloads files.

Well, it downloads files!  So start believing, because this is the only way you're going to get the thing!

WTF am I on about?!
Alright, so get this, I promised SQL syncing, then sScriptis.com went down, and then this miracle happened: I got bored of what I was doing and showed back up!  Then, Vox was like, "our site went down," and I was all like "yeah, I know," so then we made another thing!  So then I did as I promised and made SQL syncing!
sshop16 isn't done yet because i have to finish the rp3 database i'm so sorry


THE CODE
1. insert to e2 chip
2. follow the on-chat instructions
3. enjoy files that I bothered to give you
4. pls dont hack us

Code: [Select]
@name VoxxeDL
@persist [Files Tags Links]:table Current
@persist [Site SavePrefix Filename SaveName SaveData]:string
@persist State

#[
    VoxxeDL by Scriptis and Vox
    Downloads files from voxxe.pw and saves them to >e2shared.
    Easy-to-use chat interface.  Originally as an easy way of getting SShop.
    Now supports any E2s that we happen to publish.
   
    steamcommunity.com/id/VoxTheVoice/
    steamcommunity.com/id/Dakota99/
   
    How to use
    1. Spawn
    2. Choose a file
    3. It downloads
    4. Repeat steps 1-3 for however long
    5. Remove chip
   
]#
runOnChat(1)
runOnHTTP(1)

if (first()) {
    Site="http://www.voxxe.pw"
    Links["echo",string]=Site+"/echo.php"
    Links["request",string]=Site+"/request.php?filename="
    printColor(vec(0,255,0),"Connecting to voxxe...")
    timer("echothings",1000)
}

if (clk("echothings")){
    if (httpCanRequest()) {
        State=0.5
        printColor(vec(0,255,0),"Request sent to voxxe...")
        httpRequest(Links["echo",string])
    } else {timer("echothings",1000)}
}

if (httpClk()) {
    if (State==0.5) {#1stecho
        State=1
        local List=httpData():explode("
")
    for (I=1, List:count()-1) {
        printColor(vec(0,255,0),""+I+". ",vec(255,255,255),List[I,string])
        Files[I,string]=List[I,string]
    }
    printColor(vec(0,255,255),"Please type a number into chat to download a file.")
    } elseif (State==1.5) {#download
        printColor(vec(0,255,0),"Data receieved.")
        local Data=httpData()
        printColor(vec(0,255,255),Data:length()+" characters in file.")
        local TagEnd=Data:find("//ENDTAGS//")
        local FileStart=TagEnd+12
        if (TagEnd<=0) {FileStart=0}
        Tags=table()
        local RawTags=Data:sub(1,TagEnd):explode("
")
        for (I=1, RawTags:count()-1) {
            local MiscData=RawTags[I,string]:explode("=")
            Tags[MiscData[1,string],string]=MiscData[2,string]
        }
        foreach(I,V:string=Tags) {
            printColor(vec(0,255,0),"["+I+"] ",vec(255,255,255),V)
        }
        printColor(vec(255,255,255),"Say ",vec(0,255,0),"save ",vec(255,255,255),"to save or ",vec(255,0,0),"cancel ",vec(255,255,255),"to cancel.")
        SaveData=Data:sub(FileStart)
        State=2
    }
}
     
if (chatClk(owner())) {
    if (State==1) {
        local Var=owner():lastSaid():toNumber()
        if (Var<=0 | Var>Files:count()) {
            printColor(vec(255,0,0),"Invalid input.")
        } else {
            printColor(vec(255,255,255),"Downloading "+Files[Var,string]+"...")
            Current=Var
            State=1.5
            timer("req_dl",1000)
        }
    } elseif (State==1.5) {
        printColor(vec(255,0,0),"Download in progress.")
    } elseif (State==2) {#save/discard
        local Chat=owner():lastSaid():lower()
        if (Chat=="save") {
            if (Tags["filename",string]) {
                SaveName=Tags["filename",string]
            } else {SaveName=Filename}
            printColor(vec(0,255,0),"Saving to e2shared/"+SaveName)
            timer("req_save",1000)
        } elseif (Chat=="cancel") {
            State=1
            printColor(vec(0,255,255),"Please state the ID of a file to continue.")
        } else {printColor(vec(255,0,0),"Invalid command.")}
    }
}   

if (clk("req_dl")) {
    if (httpCanRequest()) {
        Filename=Files[Current,string]
        #printColor(vec(255,255,0),Filename)
        if (Filename:matchFirst(".txt")) {
            local Fin=Filename:find(".txt")
            #printColor(vec(0,255,255),"Removing ugly .txt...")
            Filename=Filename:sub(1,Fin-1)
        }
        httpRequest(Links["request",string]+Filename)
        printColor(vec(0,255,255),"Request sent for "+Filename)
    } else {
        timer("req_dl",1000)
    }
}

if (clk("req_save")) {
    if (fileCanWrite()) {
        fileWrite(">e2shared/vDL_"+SaveName+".txt",SaveData)
        printColor(vec(0,255,0),"Saved file to "+">e2shared/vDL_"+SaveName+".txt")
        State=1
        printColor(vec(0,255,255),"Please choose a file ID.")
    } else {
        timer("req_save",1000)
    }
}

Things that it comes with on 11/16/2013
  • Metal Detector
  • Pointless button
  • Police E2 Door
  • Printing Press
  • SShop15 v1.4
  • SShop Original -- Yes, the real one!
  • VoxxeDL (VOXCEPTION!)for updating if we release a new one

Now go and do things
All of the code I ever release is open-source and free for you to use, enjoy, and be violently murdered as I rage over the fact that you plagiarized it from me.  So enjoy, and remember, this is the only way you're going to get the thing!

13

NOTABLE FEATURES & OFFICIAL UPDATE THREAD



You think I'm not serious?
Please, look at the title image.  I spent approximately five minutes on that.  I'm really serious about this.  As we know, I took ideas from you guys for SShop16.  Now let's just wait for this painfully slow slide-down animation to finish so I can tell you what made it in...

Here's your list.
  • MySQL Database Syncing
    Everything is getting synced every time the chip boots.  We're not working with filesystems anymore. 
    Thanks, Vox the Voice!

  • Coupon Code System
    Get coupon code, approach machine, paste coupon code in chat, receive discount on item(s).
    Coupon codes are stored in a private gTable, so that any chip of yours can access them.
    Coupon codes are formatted as such:
    gTable("Coupons")["Name",array]=array("Title","Code","Class;;;Class;;;Class",Discount,Uses,Timeout)

  • Admin Panel
    You know how you just can't code?  You can barely type three words per minute, let alone program a 2,000 line program.  No problem!  SShop16's admin panel lets you change interest rates, revoke coupons and even put the system into lockdown mode.  Plus, anything you can press on the admin panel has a chat command!

  • Animated... EVERYTHING!
    Some of you have already seen this, as it's one of the first things I put in SShop16.
    Everything-- even the background-- is animated*.
    *may or may not be true

  • And much more!
    Probably not cross-server functionality. 
    Sorry guys, maybe I'll get around to it, but not on first release.
    - Sound effects
    - Persistent credit??  Probably only on the master chip
    - Emitter version after first release
    - Review system

And other random (pointless) goodies!
Let's imagine that Darth Vader is in front of you.  Behind him is a pile of SShop16 addons.  If you come any closer, Darth Vader will kick your ass.  Then, imagine as the MySQL train derails and runs over Darth Vader, leaving you to all of that code.  That's the magic of the syncing system that I'm working on.  Every time you paste the SShop16 chip, more and more pointless goodies will be dumped into your SShop/SShop16/Addons folder.
Random (pointless) goodie #1
Spoiler

Hey, I exist and you can talk to me!
Feedback is great!  So great, that I'm planning on harnessing its power to take over the world.  But ignore that part, and pay me a visit on RP#1!  I'm leaving for vacation on the third, so I've got to push this thing out fast!  I'm going to be on as much as I can, and I'd love about twenty people or so standing outside the glass window that I put over the garage door, with one or two micspamming.

So here's what's done, since you're all hungry:
Spoiler

And, for your information, the animated background wasn't that hard to make.
Get ready for the fun of being lazy!

I'll be posting here on occasion with status updates since I know that you're all impatient.  I'll (probably) have the first version done within two days.  valve time

14
Wire / E2 / What do you want to see in SShop16?
« on: July 29, 2013, 06:37 am »
SShop15 was a masterpiece.  Days of work poured into a single project to reveal what is possibly the most gorgeous autovendor UI ever made.

But what if I told you that SShop15 was just an experiment?
SShop15 was just an experiment.  I wanted to see what people wanted.  The results were highly informative: people hate how long it takes to manually purchase a weapon.  Autovendors are much more likely to profit, as they don't have to stand there and figure out how much money you need to feed them.  They give you a number, you pay, you receive your weapon.  No questions asked.

If people didn't want to support it, they wouldn't.
I visited RP1 today, and to my luck, found somebody with a gorgeous shop utilizing SShop15.  I asked what his opinion was- and, I quote:
Quote
i used robbys one before that you made his look like shit

A few minutes later, Nitro Make got on.  I told them that once I reach $200,000, I would start work on SShop16.  I had $400,000 within a minute.

So now, I ask you:
What do you want in SShop16?  What is, in your opinion, the perfect autovendor?


15
Wire / E2 / [Release] SShop15UI
« on: July 11, 2013, 12:11 pm »
SShop15 UI

Hey guys, I've got bad news.
I was one of the unlucky few who got globally banned from Garry's mod the other day.  I'm planning on sending in an appeal next month, but for the moment I'm just saving up to set up an alternate account.

But, hey, until then, I might as well release SShop15.  I never did finish a user core, so you're on your own with that.  Maybe somebody will make a user core and post it here?

User Core Info
To get the user que, get gTable("SShop15Que")
it will have a list of entities, each one for something that needs to be vended.
Once the gTable is cleared, SShop15 will ask the user for a rating, and then let them leave/shop some more.

Wiring
I made SShop15 user-friendly.
Components you'll need:
1 Money Pot
1 EGP
A privacy door (optional)
A money slot door (optional)

Object[Input Name] -> Object[Output Name]
SShop15[Scr:wirelink] -> EGP
SShop15[Usertrigger:entity] -> EGP
SShop15[Amt] -> MoneyPot[StoredAmount]

PrivacyDoor[Fade] -> SShop15[Door]
MoneyDoor[Fade] -> SShop15[MoneyOpen]

How to install
Extract SShop15UI.rar into garrysmod/garrysmod/data.  Merge all folders.
You'll find the e2 chip in SShop/SShop15/SShop15.txt now.


If anyone out there is willing to get me an alt set up (gifted games, etc) contact me on steam, thanks.

Classic end-message:
Don't be a plagiarist, if you claim this is yours I'll just link everybody to this thread.


AutoMerge: July 11, 2013, 12:28 pm
derp, in my rush I forgot to tell you how to use the damned thing
Chat Commands
-add [name] - adds a shipment (that you're aiming at) to the vendor list
-remove - removes the shipment that you're aiming at from the vendor list

To Download Please go to http://sshop.sscriptis.com/

Pages: [1] 2