Help Topic Summary- Read FAQ and Search Forum Before You Post
- Give Meaningful Title To Post Summarizing Problem Symptom
- Give Full Detail & Symptom About Your Problem In Body Of Post
- Attach Config Or Other Necessary Links To Data Or File
How to Ask for Help: Lite (If you think this is long, you should have seen the unedited one
)
Update: Do NOT post Ghost One issues in this forum. It is For GHost++ only. Ghost One now has its own forum HERE!
Note: Key themes are marked in red. Other things that should be paid attention to are in orange.
1. What to consider before you ask
2. What to consider when you ask
• Choosing which forum to post your topic in
• Choosing a suitable topic title
• Language points
• How to format your problem
• Using code tags
• When asking about code
• Do not use words of the sake of it…
• Be polite and say Thanks!
• Sum up the fix to help people in the future
3. What to make of your answers
• How to tell you have screwed up
• What to do if you do not understand the answers
• What to make of seeming rudeness
• What to do if you do not get any answers
4. Questions NOT to ask
Before You AskBefore asking a technical question on this forum, please do the following:
1. Try to find an answer by searching the archives of the Ghost++ forums.
2. Try to find an answer by searching Tutorials page
3. Try to find an answer by reading the FAQ
4. Try to find an answer by personal inspection or experimentation of/with your bot.5. If you're a programmer, try to find an answer by reading the source code.
Remember to
make it clear that you have already tried to do all of this when you post. If you don’t, we will probably assume that you couldn’t be bothered to follow these simple and easy steps, and tell you to go away and actually experiment a bit before you try. By doing this, it is very likely you will find your answer without waiting for one of us to reply; saving everyone time and energy.
When You Ask
Choose your forum carefullyBe sensitive in choosing where you ask your question. You are likely to be ignored, or just told to post somewhere else, if you:
• post your question to a forum where it's off topic
• post a very elementary question to a forum where advanced source code questions are asked, or vice versa
• send a PM to somebody who is neither an acquaintance of yours nor personally responsible for solving your problem
The first step, therefore, is to find the right forum. Look at the different forums available to you. Just because you are trying to connect to a PvPGN doesn’t mean than you should necessarily post your problem in the “GHost++ PVPGN Specific Help” If you seek general technical support, post elsewhere.
Use meaningful, specific topic titlesOn the forums, the topic title is your golden opportunity to attract qualified experts' attention in around 50 characters or fewer. Don't waste it on babble like “Please help me” (let alone “PLEASE HELP ME!!!!” messages with subjects like that get discarded by reflex). Don't try to impress us with the depth of your anguish; use the space for a super-concise problem description instead.
Stupid:
HELP! Bot keeps disconnecting!!!!
Smart:
[BNLSPROTO] Error code 3
Smarter:
Received error code 3 – auto-reconnect doesn’t solve
Write in clear, grammatical, correctly-spelled languageWe've found by experience that people who are careless and sloppy writers are usually also careless and sloppy at thinking and coding (often enough to bet on, anyway). Answering questions for careless and sloppy thinkers is not rewarding; we'd rather spend our time elsewhere.
More generally, if you write like a semi-literate boob you will very likely be ignored. So don't use instant-messaging shortcuts. Spelling "you" as "u" makes you look like a lazy moron who is willing to force us to decipher barely comprehensible cyber-babble in order to save two entire keystrokes. Worse: writing like a l33t script kiddie hax0r is the absolute kiss of death and guarantees you will receive nothing but stony silence (or, at best, a heaping helping of scorn and sarcasm) in return.
If you are asking questions in a forum that does not use your native language, you will get slack for spelling and grammar errors — but no extra slack at all for laziness (and yes, we can usually spot that difference). Also, unless you know what your respondent's language is, write in English.
How to format your questionWhen asking for help, you need to specify your issue. Remember to answer the following questions in your original post:
• Are you setting up GHost++ for the first time?
• Which release of GHost++ are you using?
• Has GHost worked previously?
• Are you experiencing a continuous or an intermittent problem?
Once you have answered those questions, include the following information in your post:
• GHost.cfg (if appropriate)
• GHost.log (if appropriate)
• Map.cfg (if appropriate)If you aren’t sure whether or not it is appropriate, include it anyway. We will not get angry if you include irrelevant information.
Remember to remove any CD Keys, passwords, etc. from your GHost.cfg !
Please, for the love of God, use Code tagsIf a technician asks anything from you (like or ghost.cfg, ghost.log, map.cfg, etc.), please make sure you put whatever is asked of you in code tags.
Code tags are used thus:
[code]Whatever you want in the code tags[/code]This turns that text into this:
Whatever you want in the code tags
These code tags are especially important because, when the text gets very long (which ghost.cfg, etc. are) a scroll bar is put down the side like this:
#####################
# BOT CONFIGURATION #
#####################
### the log file
bot_log = ghost.log
### the language file
bot_language = language.cfg
### the path to your local Warcraft III directory
### this path must contain war3.exe, storm.dll, and game.dll
### this path must end in your system's path seperator (i.e. "\" on Windows or "/" on Linux)
### if this path contains War3Patch.mpq the bot will attempt to extract "Scripts\common.j" and "Scripts\blizzard.j" on startup and write them to bot_mapcfgpath (which is defined later in this file)
### common.j and blizzard.j are only required for automatically calculating map_crc, you do not need them if your map config files already contain map_crc
bot_war3path = C:\Program Files\Warcraft III\
### the address GHost++ will bind to when hosting games (leave it blank to bind to all available addresses)
### if you don't know what this is just leave it blank
bot_bindaddress =
### the port GHost++ will host battle.net games on (this must be different from your admingame_port)
bot_hostport = 6112
### maximum number of games to host at once
bot_maxgames = 5
### command trigger for ingame only (battle.net command triggers are defined later)
bot_commandtrigger = -
### the path to the directory where you keep your map config files (must end in your system's path seperator)
### this directory can also contain common.j and blizzard.j (extracted from War3Patch.mpq)
### common.j and blizzard.j are only required for automatically calculating map_crc, you do not need them if your map config files already contain map_crc
bot_mapcfgpath = mapcfgs\
### the path to the directory where you keep your savegame files (must end in your system's path seperator)
bot_savegamepath = savegames\
### the path to the directory where you keep your map files (must end in your system's path seperator)
### GHost++ doesn't require map files but if it has access to them it can send them to players and automatically calculate most map config values
### GHost++ will search [bot_mappath + map_localpath] for the map file (map_localpath is set in each map's config file)
bot_mappath = maps\
### whether to save replays or not
bot_savereplays = 0
### the path to the directory where you want GHost++ to save replays (must end in your system's path seperator)
bot_replaypath = replays\
### the bot's virtual host name as it appears in the game lobby
### colour codes are defined by the sequence "|cFF" followed by a six character hexadecimal colour in RRGGBB format (e.g. 0000FF for pure blue)
### the virtual host name cannot be longer than 15 characters including the colour code, if you try to go over this limit GHost++ will use the default virtual host name
bot_virtualhostname = |cFF4080C0GHost
### whether to hide each player's IP address from other players or not
bot_hideipaddresses = 0
### whether to check for multiple IP address usage or not
bot_checkmultipleipusage = 1
### whether to require spoof checks or not
### disabling spoof checks just turns off automatic spoof checks and requiring players to be spoof checked before starting the game
### spoof checks need to be enabled if you want GHost++ to detect which realm each player came from (use the !check command to see the realm)
### you can always manually spoof check by whispering the bot (and in fact is required before running admin commands)
bot_spoofchecks = 1
### whether to display game refresh messages by default
### this can always be changed for a particular game with the !refresh command
bot_refreshmessages = 0
### whether to automatically lock games when the owner joins
bot_autolock = 0
### whether to automatically save games when a player disconnects
### this can always be changed for a particular game with the !autosave command
bot_autosave = 0
### whether to allow map downloads or not
### set to 0 to disable map downloads
### set to 1 to enable map downloads
### set to 2 to enable conditional map downloads (an admin must start each map download with the !download or !dl command)
bot_allowdownloads = 1
### whether to ping players during map downloads or not
### GHost++ will always stop pinging any players who are downloading the map
### this config value determines whether GHost++ should stop pinging *all* players when at least one player is downloading the map
bot_pingduringdownloads = 0
### the maximum number of players allowed to download the map at the same time
bot_maxdownloaders = 3
### the maximum combined download speed of all players downloading the map (in KB/sec)
bot_maxdownloadspeed = 100
### use LC style pings (divide actual pings by two)
bot_lcpings = 1
### auto kick players with ping higher than this
bot_autokickping = 400
### the ban method
### if bot_banmethod = 1, GHost++ will automatically reject players using a banned name
### if bot_banmethod = 2, GHost++ will automatically reject players using a banned IP address
### if bot_banmethod = 3, GHost++ will automatically reject players using a banned name or IP address
### if bot_banmethod is anything else GHost++ will print a message when a banned player joins but will not automatically reject them
bot_banmethod = 1
### the IP blacklist file
bot_ipblacklistfile = ipblacklist.txt
### automatically close the game lobby if a reserved player (or admin) doesn't join it for this many minutes
### games which are set to automatically start when enough players join are exempt from this limit (e.g. autohosted games)
bot_lobbytimelimit = 10
### the game latency
### this can always be changed for a particular game with the !latency command (which enforces a minimum of 50 and a maximum of 500)
bot_latency = 100
### the maximum number of packets a player is allowed to get out of sync by before starting the lag screen
### before version 8.0 GHost++ did not have a lag screen which is the same as setting this to a very high number
### this can always be changed for a particular game with the !synclimit command (which enforces a minimum of 10 and a maximum of 10000)
bot_synclimit = 50
### whether votekicks are allowed or not
bot_votekickallowed = 1
### the percentage of players required to vote yes for a votekick to pass
### the player starting the votekick is assumed to have voted yes and the player the votekick is started against is assumed to have voted no
### the formula for calculating the number of votes needed is votes_needed = ceil( ( num_players - 1 ) * bot_votekickpercentage / 100 )
### this means it will round UP the number of votes required
### if you set it to 100 it will require 2/3, 3/4, 4/5, 5/6, 6/7, 7/8, 8/9, 9/10, 10/11, and 11/12 votes to pass
### if you set it to 90 it will require 2/3, 3/4, 4/5, 5/6, 6/7, 7/8, 8/9, 9/10, 9/11, and 10/12 votes to pass
### if you set it to 80 it will require 2/3, 3/4, 4/5, 4/6, 5/7, 6/8, 7/9, 8/10, 8/11, and 9/12 votes to pass
### if you set it to 70 it will require 2/3, 3/4, 3/5, 4/6, 5/7, 5/8, 6/9, 7/10, 7/11, and 8/12 votes to pass
### if you set it to 60 it will require 2/3, 2/4, 3/5, 3/6, 4/7, 5/8, 5/9, 6/10, 6/11, and 7/12 votes to pass
bot_votekickpercentage = 100
### the default map (the .cfg is added automatically)
bot_defaultmap = dota6.59
### the MOTD file
### the first 8 lines of this file will be displayed when a player joins the game
### if this file doesn't exist a default MOTD will be used
bot_motdfile = motd.txt
### the gameloaded file
### the first 8 lines of this file will be displayed when the game finished loading (after the player loading times are displayed)
bot_gameloadedfile = gameloaded.txt
### the gameover file
### the first 8 lines of this file will be displayed when the game is over
### this only works when using a stats class - note: at the time of this writing the only stats class is for DotA maps
bot_gameoverfile = gameover.txt
############################
# ADMIN GAME CONFIGURATION #
############################
### whether to create the admin game or not (see readme.txt for more information)
admingame_create = 0
### the port GHost++ will host the admin game on (this must be different from your bot_hostport)
admingame_port = 6113
### the admin game password
admingame_password = Removed
##########################
# DATABASE CONFIGURATION #
##########################
### database type
### use "sqlite3" for a local SQLite database
### use "mysql" for any MySQL database
db_type = sqlite3
### sqlite3 database configuration
### this is only used if your database type is SQLite
db_sqlite3_file = ghost.dbs
### mysql database configuration
### this is only used if your database type is MySQL
db_mysql_server = localhost
db_mysql_database = ghost
db_mysql_user = YOUR_USERNAME
db_mysql_password = YOUR_PASSWORD
db_mysql_port = 0
############################
# BATTLE.NET CONFIGURATION #
############################
### which battle.net server to connect to
### 1.) useast.battle.net
### 2.) uswest.battle.net
### 3.) asia.battle.net
### 4.) europe.battle.net
### note that each banned player is tied to the realm it was created on and the realm is case sensitive
### so if you change your realm from useast.battle.net to USEAST.BATTLE.NET it'll still connect but anyone previously banned will not be counted as banned until you change it back
bnet_server = useast.battle.net
### your Warcraft III: Reign of Chaos CD key
bnet_cdkeyroc =
### your Warcraft III: The Frozen Throne CD key
bnet_cdkeytft =
### your battle.net username
bnet_username =
### your battle.net password
bnet_password =
### the first channel to join upon entering battle.net
bnet_firstchannel =
### the root admin on this battle.net server only
bnet_rootadmin =
### command trigger for this battle.net server only
bnet_commandtrigger = -
### whether to automatically add your friends list to each game's reserved list
bnet_holdfriends = 1
### whether to automatically add your clan members list to each game's reserved list
bnet_holdclan = 1
### BNLS server information for Warden handling (see readme.txt for more information)
### you will need to use a valid BNLS server here if you are connecting to an official battle.net realm or you will be disconnected every two minutes
bnet_server = useast.battle.net
bnet_bnlsserver = localhost
bnet_bnlsport = 9367
bnet_bnlswardencookie = 0
### you will need to edit this section of the config file if you're connecting to a PVPGN server
### your PVPGN server operator will tell you what to put here
bnet_custom_war3version = 23
bnet_custom_exeversion =
bnet_custom_exeversionhash =
bnet_custom_passwordhashtype =
###
### example configuration for connecting to a second official battle.net server
###
# bnet2_server = uswest.battle.net
# bnet2_cdkeyroc = FFFFFFFFFFFFFFFFFFFFFFFFFF
# bnet2_cdkeytft = FFFFFFFFFFFFFFFFFFFFFFFFFF
# bnet2_username =
# bnet2_password =
# bnet2_firstchannel = The Void
# bnet2_rootadmin =
# bnet2_commandtrigger = !
# bnet2_holdfriends = 1
# bnet2_holdclan = 1
# bnet2_bnlsserver = localhost
# bnet2_bnlsport = 9367
# bnet2_bnlswardencookie = 2
###
### example configuration for connecting to a third PVPGN battle.net server
###
# bnet3_server = server.eurobattle.net
# bnet3_cdkeyroc = FFFFFFFFFFFFFFFFFFFFFFFFFF
# bnet3_cdkeytft = FFFFFFFFFFFFFFFFFFFFFFFFFF
# bnet3_username =
# bnet3_password =
# bnet3_firstchannel = The Void
# bnet3_rootadmin =
# bnet3_commandtrigger = !
# bnet3_holdfriends = 1
# bnet3_holdclan = 1
# bnet3_custom_war3version = 23
# bnet3_custom_exeversion = 184 0 22 1
# bnet3_custom_exeversionhash = 219 152 153 144
# bnet3_custom_passwordhashtype = pvpgn
As you can see, that is much more manageable than the 8 pages of text it normally is.
Be precise and informative about your problem• Describe the symptoms of your problem or bug carefully and clearly.
• Describe the environment in which it occurs (machine, OS, Ghost version)
• Describe the research you did to try and understand the problem before you asked the question.
• Describe the diagnostic steps you took to try and pin down the problem yourself before you asked the question.
• Describe any possibly relevant recent changes in your computer or software configuration.
Please, provide your ghost.log and ghost.cfg (or map.cfg file) in your original post (see above).
Describe the problem's symptoms, not your guessesIt's not useful to tell the mod what you think is causing your problem. If you already think you know what the problem is, then why haven’t you tested that theory yet?
Be explicit about your questionOpen-ended questions tend to be perceived as open-ended time sinks. Those people most likely to be able to give you a useful answer are also the busiest people (if only because they take on the most work themselves). People like that are allergic to open-ended time sinks, thus they tend to be allergic to open-ended questions.
You are more likely to get a useful response if you are explicit about what you want respondents to do (provide pointers, send code, check your patch, whatever). This will focus their effort and implicitly put an upper bound on the time and energy a respondent must allocate to helping you. This is good.
So it is useful to frame your question to minimize the time commitment required for an expert to field it — but this is often not the same thing as simplifying the question. Thus, for example, “Would you give me a pointer to a good explanation of X?” is usually a smarter question than “Would you explain X, please?”. If you have some malfunctioning code, it is usually smarter to ask for someone to explain what's wrong with it than it is to ask someone to fix it.
When asking about codeDon't ask others to debug your broken code without giving a hint what sort of problem they should be searching for. Posting a few hundred lines of code, saying "it doesn't work", will get you ignored. Posting a dozen lines of code, saying "after line 7 I was expecting to see <x>, but <y> occurred instead" is much more likely to get you a response.
If you simply want a code review, say as much up front, and be sure to mention what areas you think might particularly need review and why.
Prune pointless queriesResist the temptation to close your request for help with semantically-null questions like “Can anyone help me?” or “Is there an answer?” First: if you've written your problem description halfway competently, such tacked-on questions are at best superfluous. Second: because they are superfluous, mods find them annoying — and are likely to return logically impeccable but dismissive answers like “Yes, you can be helped” and “No, there is no help for you.”
In general, asking yes-or-no questions is a good thing to avoid unless you want a yes-or-no answer.
Courtesy never hurts, and sometimes helpsBe courteous. Use “Please” and “Thanks for your attention” or “Thanks for your consideration”. Make it clear you appreciate the time people spend helping you for free.
To be honest, this isn't as important as (and cannot substitute for) being grammatical, clear, precise and descriptive, avoiding proprietary formats etc.; helpers in general would rather get somewhat brusque but technically sharp bug reports than polite vagueness. (If this puzzles you, remember that we value a question by what it teaches us.)
However, if you've got your technical ducks in a row, politeness does increase your chances of getting a useful answer.
Follow up with a brief note on the solutionSend a note after the problem has been solved to all who helped you; let them know how it came out and thank them again for their help.
Optimally, the reply should be to the thread started by the original question posting, and should have ‘FIXED’, ‘RESOLVED’ or an equally obvious tag in the subject line. A potential respondent who sees a thread about “Problem X” ending with “Problem X - FIXED” knows not to waste his/her time even reading the thread (unless (s)he) personally finds Problem X interesting) and can therefore use that time solving a different problem.
Your follow up doesn't have to be long and involved; a simple “Howdy — it was a space after my cdkey! Thanks, everyone. - Bill” would be better than nothing. In fact, a short and sweet summary is better than a long dissertation unless the solution has real technical depth. Say what action solved the problem, but you need not replay the whole troubleshooting sequence.
How to interpret answers
RTFM: How To Tell You've Seriously Screwed UpThere is an ancient and hallowed tradition: if you get a reply that reads “RTFM”, the person who sent it thinks you should have Read The Fucking Manual. He or she is almost certainly right. Go read it.
You may also be told to search the forum archives, although most people will provide a link of the place which they had hoped you might find on your own.
Often, the person telling you to do a search has just conducted it themselves. This reply mean that he thinks (a) the information you need is easy to find, and (b) you will learn more if you seek out the information than if you have it spoon-fed to you.
You shouldn't be offended by this; by most standards, your respondent is showing you a rough kind of respect simply by not ignoring you. You should instead be thankful for this grandmotherly kindness.
If you don't understand...Tell us! I, for one, would be happy to clarify any points or fixes I have given to you. However please do not come straight back and tell us we are speaking nonsense:
Stupid:
Wtf do you mean by <quote>?
Smart:
Sorry can you clarify what you meant when you said <quote> for me please?
If you opt for option 2, the answer will invariably be “Yes, of course I will clarify it for you.”
Dealing with rudenessMuch of what looks like rudeness is not intended to give offense. Rather, it's the product of the direct, cut-through-the-bullshit communications style that is natural to people who are more concerned about solving problems than making others feel warm and fuzzy.
When you perceive rudeness, try to react calmly. If someone is really acting out, it is very likely that someone else on the forum will call him or her on it. If that doesn't happen and you lose your temper, it is likely that the person you lose it at was behaving within the community's norms and you will be considered at fault. This will hurt your chances of getting the information or help you want.
If you cannot get an answerIf you can't get an answer, please don't take it personally that we don't feel we can help you. Sometimes the members of the asked group may simply not know the answer. No response is not the same as being ignored, though admittedly it's hard to spot the difference from outside.
In general, simply re-posting your question is a bad idea. This will be seen as pointlessly annoying. Also please do not bump your topics often. An occasional nudge to keep them on page one is acceptable, but no more than that.
Have patience! The person who is going to solve your problem may be asleep or unavailable.
Whatever you do, do not say things like:
Oh you are all so useless! Is anyone actually going to try to help me??
This will likely alienate people and you will be much less likely to receive help.
Questions NOT to askHere are some classic stupid questions, and what we are thinking when they don't answer them.
Q: Where can I find resource X?
Q: My {patch, configuration, SQL statement} doesn't work
Q: My bot doesn't work. I think system facility X is broken.
Q: How do I mod Ghost to steal CDKeys?
Q: Where can I find resource X? A: The same place I'd find it, fool — at the other end of a web search. God, doesn't everybody know how to use Google yet?
Q:
My {bot, configuration, SQL statement} doesn't workA: This is not a question, and I'm not interested in playing Twenty Questions to pry your actual question out of you — I have better things to do. On seeing something like this, my reaction is normally of one of the following:
• do you have anything else to add to that?
• oh, that's too bad, I hope you get it fixed.
• and this has exactly what to do with me?
If you would like someone to check your code, point them where you think the problem is and be precise at to the error.
Q:
My bot doesn't work. I think system facility X is broken. A: While it is possible that you are the first person to notice an obvious deficiency in a bot heavily used by hundreds if not thousands of people, it is rather more likely that you are utterly clueless. Extraordinary claims require extraordinary evidence; when you make a claim like this one, you must back it up with clear and exhaustive documentation of the failure case.
Q:
How do I mod Ghost to steal CDKeys?A: You're a lowlife for wanting to do such things and a moron for asking me to help you. Go throw yourself off something high.