July 30th 2009

Status Updates, Best Friends, and Feeds, oh my

We were feeling social these last few weeks, so we’ve brought you a whole bunch of new social features to enjoy on Roblox.com.

Status Updates

Now you can update your status on Roblox, and tell all your friends what you’re doing right now. You can update your status by clicking on My Roblox or by viewing your own profile page while logged in. All status updates will be visble to all of your friends, and will show up in the feeds of those who have you as a best friend. Tell them how you’re pwning the opposition… then shamefully admit how you got pwned 5 minutes in.


Best Friends

Choose up to 10 of your friends to be “best friends.” You can do this by going to your friends page and clicking “Add Best Friend” next to any of your friends, or go to a friend’s profile page and click the “Add Best Friend” link next to their avatar. Your best friends will show up in a list on your “My Roblox” page, and you’ll be able to see what they’re up to in your feed.

Feeds

Follow your best friends! The new Roblox Feed collects and displays status updates from your best friends, so you’re always in the loop. And status updates are just the beginning - expect to see all kinds of interesting info about your best friends coming soon.

As always, we’ll be filtering and moderating your status updates, so be nice!

Enjoy!

Your formerly Canadian Roblo-Sam

AddThis Social Bookmark Button

July 30th 2009

Social Feature Bonanza!

GROUPS!!!!!


Ever wanted to have your OWN forum for just you and your friends? Your own hang out spot? A place to talk about how much cooler pirates are than ninjas? Have you ever had the desire to show everyone where your allegiance lies? Well now you can. Groups are here!

Groups, one of our two social features this release, can be created by Builders Club and Turbo Builders Club members, but can be joined by all users. You may have up to FIVE groups at any time, and may leave your groups freely at any time with one exception: group owners can not leave the groups they’ve created!

Group Setttings

We’ve given you a few options to manage the way users interact with your group so you can make it as exclusive, or as open, as you’d like.

Users can currently be one of three roles within a group: Owner, Admin, or Member. A group may only have one Owner at any time, but may have as many Admins and Members as you’d like. Admins can do everything an owner can do except for changing the group description.

Additionally, Owners and Admins can change their group’s settings to restrict group entry to invite only, make the group wall viewable to group members only, and restrict posting to admins only.

How do I find a group?
The easiest way to find a group right now is by looking on a user’s profile page in the new “Groups” panel. Here you can see all of the groups a user is in, and go to that group’s public profile page by clicking on the emblem. We realize the ability to search for a goup will be in high demand are working on a search feature.

How much does it cost?
Joining a group is FREE! And Builders Club and Turbo Builders Club members can create a new group for only 100 ROBUX!

Enjoy!
-RobloTim

AddThis Social Bookmark Button

May 13th 2009

Focusing on Performance

I’ve been talking to a bunch of you and I know that everyone wants more performance. ROBLOX users will achieve ultimate happiness when we have a 1,000,000 block world with 1,000 players updating at 100 FPS (frames per second). No promises on when that day will be, but until then, here is what we are doing to improve performance. We just pushed a new release today that will allow us to measure many things that our users experience, such as…

Install Success Rate: We want to see how high we can push this (already pretty high)

Silent Upgrade speed and success rate: We want to make this faster (already pretty good)

Graphics, physics and networking FPS (frames per second): We will push these numbers as high as we can. If we have every player getting better than 30 FPS for graphics, physics and networking I think we can safely say that "lag" will be a thing of the past.

Join a game time: We want to make this much faster. Here is a chart of the average time it takes a player to join a game (actual numbers have been removed because we are currently not super happy with them)

Game Join Time

We’re now measuring our website uptime and the speed of page loads. Our goal is to get every page load below one second and to have zero website down time.

MTBF (mean time between failure): I.e. - how often do users experience a crash or lockup. We have already been measuring and improving this, and we’re getting pretty good here.

Let me know if there are other performance related areas that you think would make ROBLOX more fun!

- Builderman

AddThis Social Bookmark Button

February 12th 2009

Performance Testing for Ads

It’s been several months since we released our exciting feature that allows users to run ads on our website for places, models, and clothing that they have made. It has been a huge success and the quality of our users’ ads continues to improve over time as people figure out what works and what doesn’t.

There’s a lot of information in the wiki to help you get started making your own ads.

Today I want to talk to our advanced-level advertisers who have already run a couple of ads and know their way around the system. I’ve got some tips that will help you performance test your ads to make sure you are getting the most bang for your advertising budget.

Ad Performance Stats

LastRunAdStats

The first thing you need to know about is your Ad Performance Stats. These are the numbers that tell you exactly how good your ad is. Better ads give your more traffic for the same amount of money. This is key.

What do these numbers mean?

Impressions – This is the number of times your ad has been shown on the site. Higher numbers here mean more traffic for you. The main way to make this number bigger is by bidding more tickets when you place an ad.

Clicks – This is the number of times your ad has been clicked. You want this number to be as big as possible.

CTR – “CTR” stands for “Click Through Rate”. This is exactly equal to the probability that someone who sees your ad actually clicks on it. This is the number you most care about.

Bid – This is how much you spent to run your ad. If 100,000 tickets are spent on advertising on Roblox in one day and you bid 1,000 tickets, you will receive 1% of all available user ad impressions that day.

It’s All About the Click Through Rate

CTR is basically a measure of how good your ad is. No one clicks on an ugly ad. It doesn’t matter how many people see your ad if no one clicks on it. A CTR of less than 1% is bad. Most of my ads average between 2-3%. Any ad that has a CTR of higher than 5% is awesome. Remember though, even if your ad has a CTR of 10%, it won’t matter if you’re advertising a place that no one wants to visit or clothing that no one wants to buy. So quality counts everywhere.

Ad Performance Testing – How to Max Out Your CTR

Even if you are a brilliant artist and can make great ads, you can make your ads even better with performance testing.

Performance testing means running experiments to figure out which of your ads is the best.

I did a little experiment a while ago, and made three versions of the same ad for my place, Sword Fight on the Heights IV. Then, I ran all 3 ads at the same time with the same bid.

Which do you think is the best ad? (scroll down for the answer)

AdStats

Answer: Version 3 is the best. Version 1 is the worst.

How do I know? Version 3 had a CTR of 4.76% – almost 5% of all people to see this ad clicked on it. That’s pretty good. Version 1 scored only 3.15%. That’s ok, but not great.

The Bottom Line

At the end of the day, you have to watch your bottom line. I spent 1000 on each of these ads. With version 3, I got 280 clicks for my 1000 tix. With version 1 I only got 180 clicks. That’s 55% more clicks with version 3. That’s huge!

What to Do Next

An ad’s CTR will usually go down over time as people get bored of the ad and stop clicking on it.  Your CTR will also go down if you run your ad too often – if one out of every two pages on Roblox is showing my ad, people are going to stop clicking on it.

You need to keep an eye on your CTR all the time. I’ll run version 3 of my ad until it gets down to around 3.5%. Then I’ll design a new ad.

That’s It For Now 

There’s a lot more that could be said about designing great ads. But hopefully this information is enough to get you into the game.

Congratulations. You now know more about internet advertising than most adults.

- Telamon

AddThis Social Bookmark Button

June 30th 2008

Scripting With Telamon: Debugging

Howdy! Today’s article is for Roblox power users who want to learn how to develop scripts in Roblox. This is not a programming language tutorial - I will assume you know enough about Lua to look at a piece of code and guess at what it does. Rather I am going to teach you how to deal with buggy scripts and show how to debug them. Debugging in general is a mystical art - I use the word "art", which is the product of innate creative forces, in contrast to "science", which can be dissected, reduced, and taught. We’ve built some tools into Roblox Studio to help you though.

Part 1 - Mission Statement

We’re going to build a secret door. An easy way to make a secret door is to make a brick and set its CanCollide property to false. Anyone can them walk through such a brick. No. Our secret door is going to be special. It’s eventually going to guard the treasure room in my castle and it’s only going to let approved members of the Pirate Army through (Arrrrr!). Clearly we need some scripting here, me hearties.

Part 2 - Build From Simpler Pieces

When I’m making a complicated script, I try to test it as I go along. I’ve seen a lot of people in intro programming classes try to write all their code at once and then test it. This is about the most painful way to write code. Don’t do it. Instead, write the shortest bit of code that you can test. Test it. If it works, add some more stuff. Then test it. If something broke, you know where to start looking.

A more simple version of the door we want to make is a door that just turns transparent whenever anything touches it.

simpledoor1.pngGo ahead and open up Roblox Studio. Create a simple test level, like the one pictured. In my level, the first test door is red. Use the Insert -> Object menu to insert a script under your test door (when the dialog box pops up, type the word "Script"). Do yourself a favor and give the script a descriptive name like "DoorScript".

Part 3 - Power Tools

Ok, time to break out the power tools. If you have been scripting without these, I feel sorry for you. There are two that I will talk about today: the Output window and the Command toolbar. The first is by far the most useful, so I will focus on it.

To bring up the Output window, use the View -> Output menu option. This is add a window pane to the bottom of your screen. This window will show the output from your scripts while they are running. If your script has an error in it, the error will be printed here along with the line number telling you where the script broke. Let’s look at both of these right now. In your new script, paste the following code:

print("Hello world!")

for i=1,10 do
print(i)
end

script.ThisPropertyDoesNotExist = 6

As you can probably tell, this script prints "Hello world!", spits out the numbers 1 to 10 and then crashes on an error. If you press the Run button in Studio, you can see this. The output will look like this:

Tue Feb 13 15:56:07 2007 - Script Heap Stats: Max Size = 21945 bytes, Max Count = 401 blocks
Hello world!
1
2
3
4
5
6
7
8
9
10
Tue Feb 13 15:56:16 2007 - ThisPropertyDoesNotExist is not a valid member of Script - =Workspace.Script, line 7: (null)

This is telling us that line 7 of our script is bad, which is something we already knew. However, in a more complicated script, it can be very helpful to print out stuff as the script is running so that you can see where things are going wrong. It may seem obvious once I’ve said it, but if something is broken with your script, start printing stuff out - rare is the bug that will not succumb to this level of scrutiny. I once wrote an entire operating system, using only printf to debug it.

commandtoolbar.pngI started programming when I was in 2nd grade and a popular language to learn back then was something called QBASIC - some of you may know it. One feature of the QBASIC programming environment was something called the Immediate Window, which you could type code into and immediately see it execute. On occasion this can be helpful to debug a script while it is running. However, this is more for advanced users. You can bring up Roblox Studio’s equivalent of the Immediate Window by using the View -> Toolbars -> Command menu option to bring up the Command Toolbar. You can type code into this at any time and run it. For example, if you wanted to, you could type:

game.Workspace.Door.Position = Vector3.new(0,100,0)

And if you have a part named "Door" in your level, it will be immediately teleported to (0, 100 ,0) while the game is running. This is kindof arcane, but I mention it because I have found the Command Toolbar useful on occasion.

Part 4 - Simple Door Script

Here it is:

print("Simple Secret Door Script Loaded")

Door = script.Parent

function onTouched(hit)
 
  print("Door Hit")
  Door.Transparency = .5
  wait(5)
  Door.Transparency = 0

end

connection = Door.Touched:connect(onTouched)

If you have ever seriously tried to learn lua scripting for Roblox, you have looked at some Roblox scripts. The code for listening to a Touch event should look familiar. Basically I have wired up the Part.Touched event to call the onTouched function whenever the part is touched by another part. When this happens, the door will turn semi-transparent for 5 seconds. Add this to your Door script, save your map, and try it. If you touch or shoot the door, you will see a nice effect. If you have the Output Window up, you will also see a "Door Hit" message printed whenever the door is touched. If you did not see this message, you would know that the onTouch function was not being called and that you had not wired up the event handler correctly.

Part 5 - A More Complicated Door

Like I said, this is not a tutorial on actually writing code, only debugging it. So here is the finished script:

print("Advanced SpecialDoor Script loaded")

— list of account names allowed to go through the door.
permission = { "Telamon", "PirateArmy", "CaptainMorgan", "SilverShanks", "JackRackam" }
Door = script.Parent

function checkOkToLetIn(name)
for i = 1,#permission do
  — convert strings to all upper case, otherwise we will let in
  — "Telamon" but not "telamon" or "tELAMON"
  if (string.upper(name) == string.upper(permission[i])) then return true end
end
return false
end

function onTouched(hit)
  print("Door Hit")
  local human = hit.Parent.FindFirstChild("Humanoid")
  if (human ~= nil ) then
   — a human has touched this door!
   print("Human touched door")
   — test the human’s name against the permission list
   if (checkOkToLetIn(human.Parent.Name)) then
    print("Human passed test")
    Door.Transparency = .5
    Door.CanCollide = false
    wait(7)
    Door.CanCollide = true
    Door.Transparency = 0
   end
  end

end

connection = Door.Touched:connect(onTouched)

It has one bug in it. Without using the Output Window, the only thing you will be able to tell is that the script is not working. With the Output Window, the problem becomes obvious:

Advanced SpecialDoor Script loaded
Simple Secret Door Script Loaded
Door Hit
Tue Feb 13 16:44:19 2007 - Workspace.YellowDoor.DoorScript2:18: bad argument #1 to ‘findFirstChild’ (Instance expected, got string) -

Since the script prints out "Door Hit", but not "Human touched door", we know the problem is somewhere in line 18 or 19 of the code. The Output window tells us that there is a problem on line 18 - FindFirstChild is failing. Ah! That is because in Lua methods are invoked using a colon (:) instead of a dot (.) (all other languages of consequence use dots for this - curse the inventors of Lua!) Change the line 18 to be:

local human = hit.Parent:FindFirstChild("Humanoid")

simpledoor3.pngAnd you have a working secret door that can be programmed to only let in your friends. To see it in action, check out SpecialDoor’s Place. If you are a new scripter and you are looking for some projects to work on, here are some easy adaptations of this script that you could do:

 

  1. Make the door let in everyone except those people who are on a blacklist (this is the opposite of the current door).
  2. Make the door flash different colors while it is open.
  3. Make the door heal you as you walk through it.

- Telamon

AddThis Social Bookmark Button

Next Page »