Do you think I could just leave this part blank and it'd be okay? We're just going to replace the whole thing with a header image anyway, right?
You are not logged in.
Pages: 1
Hey there, forums!
Bot development is such an open world. There are dozens of ways to accomplish the exact same task. And it can be argued that some are better than others, either for the player or for the computer running it.
Since most people don't have a wise sage hovering over their shoulder, I thought it would be beneficial to the community to compile a list of things they should, should avoid, and should NEVER do.
Feel free to contribute to this list by posting below. Anyone who has played a bot level knows what they like and what they don't like.
You should
• Be creative.
I know creativity is thrown around a lot in this forum, but you DEFINITELY need to be creative if you want your bot to be fun.• Use "Everybodyedits" + MyClient.BigDB.Load("config", "config")["version"]
Instead of throwing an error at PlayerIO and extracting the version from the exception thrown.• Store the players' progress frequently, and load them when your bot starts up.
You can use XML, SQL, or just a text file to accomplish this.
By "progress", I mean things like location, score, settings, etc.• Know what your bot can do and what your bot can't do.
Your bot can do a lot of things. Your bot can do EVERYTHING that a player can do, including movement, buying items, and adding friends.
Use these functions to your advantage.
You should avoid
• Chat commands
Stopping the game to type out a command can get old fast. Sometimes you need it, other times you do not.
If players are frequently running into the spam filter, then you know that there is a better way.
Some alternatives:
key combinations (using arrows/WASD and spacebar);
when a user enters a certain area;
smileys• Flooding the chat with a million bot messages.
• A help feature that gives you a long list of commands. (Give them a link to a pastebin or forum topic instead)
• A way to win. If you want players to come back, there can't be a finish line.
If you want a finish line, then make the level complicated and store their progress.
You should NEVER use
• Dozens upon dozens of chat commands.
Players are not dictionaries. Part of being a good bot developer is being creative with your commands to minimize how many you need.
You know what's more annoying than stopping to type a command every few moments? Stopping and then scanning some huge and convoluted guide that you made.• Snake bots
There are waaay too many snake bots out there. If you're still making these, please try harder.• Dig bots
Unless you can revolutionize the way you dig blocks, please don't bother with this one either.• A bot that joins every room.
Thanks for reading, and please take this advice into account if you want success with your bot.
Yeah, well, you know that's just like, uh, your opinion, man.
Offline
We don't need Snake bots or Dig bots again, Snake bots even adding more stuff never will be fun, and we have lot of Dig Bots, including the ones with lot of stuffs like Jababot, also, it's annoying do repetitive commands to see if get a ore.
This is a false statement.
Offline
I think that these tips are definitely useful. Another thing is don't make your bot join worlds that it isn't authorized to join. That is, don't join a few different worlds on the basis of trying to make a global chat, because it can be quite spammy very fast.
Something else is if the owner kicks the bot out of the world, do not rejoin it.
Offline
• Store the players' progress frequently, and load them when your bot starts up.
This can be done with a StreamReader, StreamWriter, and a text file.
By "progress", I mean things like location, score, settings, etc.
Guys, don't actually do this. StreamWriter and StreamReader are NOT for storing player data.
Use already existing formats that won't break instead of coming up with your own that will no doubt fail.
(e.g. INI/XML/SQL)
Also, StreamWriter and StreamReader cause plenty of errors when you don't manage it properly.
File.WriteText and File.ReadToEnd are better in this aspect.
• Know what your bot can do and what your bot can't do. Your bot can do a lot of things. It can do things that other players can't, like place text or trick the server into thinking you are MrShoe.
No, you cannot trick the server into thinking you are MrShoe, nor can you place text with bots.
• Snake bots There are waaay too many snake bots out there. If you're still making these, please try harder. • Dig bots Unless you can revolutionize the way you dig blocks, please don't bother with this one either.
You've already cleared this up pretty much with:
• Be creative. I know creativity is thrown around a lot in this forum, but you DEFINITELY need to be creative if you want your bot to be fun.
*u stinky*
Offline
• Use Convert.ToString(MyClient.BigDB.Load("config", "config")["version"]);
Eh, there's no sense in using Convert.ToString() with something like this, which should never return a null value.
I would argue to just use it like this:
string version = MyClient.BigDB.Load("config", "config")["version"].ToString();
Last edited by BuzzerBee (Jun 17 2014 3:18:07 pm)
Offline
Tako wrote:• Use Convert.ToString(MyClient.BigDB.Load("config", "config")["version"]);
Eh, there's no sense in using Convert.ToString() with something like this, which should never return a null value.
I would argue to just use it like this:string version = MyClient.BigDB.Load("config", "config")["version"].ToString();
Or you could do CreateJoinRoom(worldid, "Everybodyedits" + MyClient.BigDB.Load("config", "config")["version"](the rest of the code is unneccisary)
so yeah you could make it shorter unless you wanted a global version thing not sure why you would
Offline
BuzzerBee wrote:Tako wrote:• Use Convert.ToString(MyClient.BigDB.Load("config", "config")["version"]);
Eh, there's no sense in using Convert.ToString() with something like this, which should never return a null value.
I would argue to just use it like this:string version = MyClient.BigDB.Load("config", "config")["version"].ToString();
Or you could do CreateJoinRoom(worldid, "Everybodyedits" + MyClient.BigDB.Load("config", "config")["version"](the rest of the code is unneccisary)
so yeah you could make it shorter unless you wanted a global version thing not sure why you would
Yeah, I agree with you there.
A global string for version could be needed, though, if you were to have multiple connections and didn't feel like having that bulky code multiple times.
Offline
abrar11 wrote:BuzzerBee wrote:Eh, there's no sense in using Convert.ToString() with something like this, which should never return a null value.
I would argue to just use it like this:string version = MyClient.BigDB.Load("config", "config")["version"].ToString();
Or you could do CreateJoinRoom(worldid, "Everybodyedits" + MyClient.BigDB.Load("config", "config")["version"](the rest of the code is unneccisary)
so yeah you could make it shorter unless you wanted a global version thing not sure why you wouldYeah, I agree with you there.
A global string for version could be needed, though, if you were to have multiple connections and didn't feel like having that bulky code multiple times.
lets not get to into it but
Connection[] con = new Connection[connectionamount]
for(int i = connectionamount) loop
con[ i ].Send(connection.Send(client.BigDB.Load("config", "config")["version"]);
its not really a 'bulky code' but i see where your going
Offline
A way to win. If you want players to come back, there can't be a finish line.
If you want a finish line, then make the level complicated and store their progress.
I don't understand this, if is win saves, it shouldn't be avoid, cause who won get it as reward and fight for a good rank. Also, if is other thing, explain me.
This is a false statement.
Offline
Tako wrote:A way to win. If you want players to come back, there can't be a finish line.
If you want a finish line, then make the level complicated and store their progress.I don't understand this, if is win saves, it shouldn't be avoid, cause who won get it as reward and fight for a good rank. Also, if is other thing, explain me.
What he means is, you should never be able to completely finish a level. You can win rounds, but not the entire level.
Last edited by BuzzerBee (Jun 17 2014 5:29:55 pm)
Offline
Creature wrote:Tako wrote:A way to win. If you want players to come back, there can't be a finish line.
If you want a finish line, then make the level complicated and store their progress.I don't understand this, if is win saves, it shouldn't be avoid, cause who won get it as reward and fight for a good rank. Also, if is other thing, explain me.
What he means is, you should never be able to completely finish a level. You can win rounds, but not the entire level.
Yes. The important thing to understand is that once people finish your entire level, they're unlikely to come back.
Unless it's just amazing. Or... different the second time around.
Yeah, well, you know that's just like, uh, your opinion, man.
Offline
Good advice, I would also recommend JSON.NET for storage, very easy serialization and readability.
I was going to recommend that before, but I wasn't logged in.
Another recommendation is ProtoBuf if you don't need readability.
Offline
Pages: 1
[ Started around 1732681395.8429 - Generated in 0.170 seconds, 10 queries executed - Memory usage: 1.66 MiB (Peak: 1.86 MiB) ]