Saturday, December 29, 2007

Can finally have a break now.

The entire last week was spent on making the bot easier to use. The bot is fairly stable now, and AV ability has been added, and users can now customize all aspects of the bot with javascript. That leaves the only thing for me to do, is making the bot easier. Config utility has been totally re-write, now it can be invoked by one click on the "Config" button, and your current selected bindings file will be edited.

So this week will be my relax week :-)

Wednesday, December 26, 2007

Back from vacation

Finally back from 2 week vacation, and during last weekend I rushed out most of the improvements and fixes that were pending (battle ground, configuration utility, shama script, loot distance updates on UI).

Yesterday I finally thought I could put the development on zolofighter aside for a while and play on some other stuff, and found the looting is not as accurate as before :-( So still need to do this for 1 or 2 nights.

I will also post some pictures I have taken on the trip, one is with Root Berry!!!! They rock I have to say.

Tuesday, December 4, 2007

Javascript engine bug again!

I was very close to release of the initial beta battle ground AFK scripts, when all of a sudden I hit a strange problem when start run with release version of the code.

When the execution enters a javascript function that accepts 1 argument, the bot skips everything and starts the next round.

A close inspection found that happens when the bot is trying to access that argument. Isolate to that one function, and the script reports it does not known that argument! Samething running with debug mode is just fine.

The first thought I had is it is those #define statements again. But none of that is the case. While I was stepping through the code, parse of arguments mysteriously changed on a totally unrelated statement (on a compare statement)! Inspecting on the resulting assembly code, and I found the stock return was corrupting the arguments passed in. Turned out the Microsoft optimizer is optimizing on nuts!

After put all javascript engine code on /Od (disable optimization), problem solved.

So that concludes another wasted night.

Monday, December 3, 2007

Demo timeout increased to 1+ hour

I increased demo timeout to more than 1 hour, so now all demo users can enjoy at least 1 hours of play without buying a key (the time out is actually much higher).

I have decided that the buy link should be more or less a 'donate' link.

The main reason is health and family related. If the service is perceived to be paid, I am under pressure to perform, and recently there is a sudden surge in support emails etc, plus my family/work/WOW and other developments, I am stressed out.

I will keep working on maintain the current bot, but make it free so I could worry less when my job/family/life took priority (i.e. my upcoming vacation :-) )

Thursday, November 29, 2007

strange crashes give me headaches

I got an email from a user about program crashing. As usual they never include program version, os version, os language version. I do believe there is a crash, but debugging crashes that happens on a user's computer will be hard. It sort of ruined my afternoon, knowing that there are strange problems happens to users.

But all crashes happen with a reason. My steps will be to use logs (Yes, I tried DrWatson but the dmp file is always in use, and if I cancel the submit to Microsoft button, the dmp file will be deleted), and see exactly where the crash happens.

Good thing is users usually will be happy to go through some emails than spending hours fishing or grinding stuff, so I just got lucky.

Anyone else got better ideas as how to debug remote crashes without a debugger? This reminded me of the old serial port debugging days, upload a program, see the output of serial port (or sometimes even LEDs) and figure out problems. Could be fun :-)

Tuesday, November 20, 2007

bad script error

Just notice today while farming with zoloFighter. Someone speaks to me and the bot did nothing! so checked script file, and my whisper detection code is full of bugs LOL. Turned out I never tested it and was afk boting most of the time.

I have fixed it now and will put script.js on fighter website for download.

Saturday, November 17, 2007

Funny WOW on TV post

Just visited , the blog today features some of the TV appearences of WOW, and some of them are very funny :-) I will need to find out what the name of the show is, seems like a UK show?

Wednesday, November 14, 2007

patch 2.3 finished

Yes, WOW 2.3 is applied, and I have finally fixed all offsets. It was supposed to be an easy update, everything is working, users don't even need to download a new version. Very happy.

Then found out I forget to make message and whisper detection offsets. And found out one of the offset is hard coded and has changed.

So a new download is still necessary. I don't want to force users to do an update, so a new download page has to be written.

Again a simple update and a full night of work.

Sunday, November 11, 2007


This is bad. During the weekend, I actually got some free time and wanted to play. Logged on and few of the high level guilds are on, so no way to make a guild run. Don't want to wait for a random group either. Tried to get some PVP arena but only practice ones are available (don't know why, I don't do those XvX often), so can't earn PVP marks. And not sure what AV marks can gain for me.

So basically nothing to do. So bored. Watching StarGate DVD while boting LOL.

Thursday, November 8, 2007


Yesterday I found out from a user that my most recent update for almost 2 weeks has a random crash bug. I am assuming STL string are terminated with a zero, so if there are some random non-zero char at the end, C++ run time will assert on accessing past string bounds. I run for 2 weeks with the same code and always got lucky :-)

Well, that is not the first time such mistakes are made. For half an year after my initial release, I didn't realize that I was building the executable with dynamic link, which requires a dll that most of the users won't have (Unless they also are developers and install VC++). So the turn around time is pretty fast for my last weeks mistakes

Sunday, November 4, 2007

phpbb forum problem solved

I had a post about spamers on zoloFighter/fisher forum, and how to deal with them (use admin approved activation, and delay the approval).

The only problem is with that, I have to manuly click on each application email sent from phpBB2 and approve them myself. That is not a pleasent process.

I finally got time last week and did some digging into phpBB2 (my php is rahter bad), and add my own script to do a mass approval. That way I no longer need to approve each email, all I need to do is one click and all of the pending applications will be approved.

So far it has worked wonderfully, and the program even found a bounch of previous applications that I missed to approve.

Saturday, November 3, 2007

afk gamer

I found a real nice wow blog on afk gamer, Foton has been blogging a while there and some of the blogs are interesting! Nice job!

Also I have updated offsets for RTP server today, let's hope there won't be too many patches for RTP any more

Wednesday, October 24, 2007

From Robots to God

Yesterday I watch a show called robots on TV. It shows all type of different robots, from the simpler ones that you can program and help disabled people to walk, to the fun ones for research or recreational use. One example of a fun robot is a bot been developed in Japanese university that will move like a monkey and try to jump and grab from wire to wire (in a very controlled environment, where the wires are evenly spaced).

The fun bots, no matter it is for jumping/rolling/crawling, sort of struck me. I just realized that we bot writers who write bots for online/off line games are also design robots, in a very similar way. The only difference is our bots works in a simulated environment. We can call our bots poor man's robot, or virtual robots. There are advantages and disadvantages compare our bot to the real machine robots. Our bots run in a virtual world and there are no mechanical parts, so it is cheaper, easier to maintain (you don't need to worry about hardware limits/changes/costs), but what information available is limited (only what can be extracted from the games, while the real bots can have censors where they want). Both the virtual bots and real bots need to have some real time abilities (been real time means needs to response to real time events, been to coordinate all hardware movements to be able to grab a wire, or respond to mobs fast enough to keep alive).

We virtual bot creators are a level higher than the bots created for fun. The reason been is that we work on an abstract level, that we don't need to deal with feet dragging hardware. This way we focus more on the core part of robot design, that i design robot logic (or AI). The real mech bots creators are limited by hardware, and I don't see any machines that can surpass humans or animals in combination of efficiency and agility soon (machines might excel in a specific area, but will never be as flexible and efficient as humans. )

And before the end of this passage. I just want to say, I don't believe in AI (artificial intelligence). I remember I had this thought ever since I was young, I can't figure out how to design true intelligence. All we can do is design fake intelligence, that is something that looks intelligent, but if you fool around with it you will realize it is just a bot (and that is why it is so hard to make the bots looks truly human even in an online environment, even though only limited actions are available).

I first got this thought when I thought about how to make true random numbers in a computer. The final conclusion is there is no way to make a truly random generator unless you rely on hardware. There is just no way you can design a computer to be self aware, to have true feelings. It is this believe that draws me to the conclusion that there must be a GOD, or a spiritual world must exists that could use this physical world to manifest itself.

So in another sense, I don't believe we could live in multiple levels of virtual worlds (one real world designed a virtual world that has its own intelligence that then designed another virtual world, and possibly this virtual world which is designed by a virtual world would design another level of virtual world and so on), but I do believe that one spiritual world that could manifest itself onto different levels of physical world (for example, each tiny atom could be an solar system, and each of those tiny virtual solar systems are combined by even tinnier atoms and they are also tiny tiny solar systems, and all of them could have a spiritual manifestation, meaning truly intelligence life.

Tuesday, October 16, 2007

Bot improvements

During the weekend, I was boting and trying to farm some valuables. The area is populated but I was watching my toon while watching TV. During the commericals I noticed a hunter which is also a bot (It was very easy to tell, that is why never bot unattended in populated areas). From time to time we both tag on the same mob and dependend on who shoot first, one of us is not getting the loot.

The problem is his gun was faster and more than 50% of the time he tags first and my toon is there assisting him! That was very annoying so I decided to implement something to fix that (if a mob is targeting some other npc, give up).

Initially I thought it is an easy fix. I will just check with javascript (so no binary recompiles) after first attack and if mob is not targeting me, abort. However my gun was more powerfull and usually even he tags first, I could end up drawing argo after the first attack.

Eventually I have to recompile, implement a call back during my spell channeling to call the javascript function processMessages (I am lazy), with a state of "inChannel". That is good for any casters, so when you channel your spell, you will find out if someone has taged your mob and abort.

Most likely I will release it after some more testing. For now I will need to find a good place to farm some herbs. My current farming place is too hard, a lot of mobs and I die too much, with all the repair bill I might just buy stuff off AH.

Thursday, October 11, 2007

Bot crash on javascript

Wake up early this morning so I setup the bot to farm something and go back to sleep.

When I am ready for work, I found the bot has crashed. Curious about what caused it, I

did a trace and found it crashed inside the javascript engine, some assertion about

something variable in the stack frame that should be NULL but is not.

A bit more digging around the code, I found the javascript stock frame is actually

created on local stock. The global context frame is temporarily replaced by it, and

restored back upon execution exit.

Now it is clear. If something happends that prevented the restore of the original stock

frame, the global context frame will be pointed to non-exist space. That something is

usually exceptions raised upon native code (C++ code). It could be that because network

either on Blizzard's side or my side, connection is closed and native C++ raised

exception. I am catching the exception but was too far out thus the javascript did not

have a chance to clean up it's stock.

A good solution will be use the try{}finally{} replacement trick I mentioned before in

my blog to make sure the stock frame is restored upon function exit.

Wednesday, October 10, 2007

One Fun Patching Night

Yes, another patch yesterday and another pain. I forget that was Tuesday already, because Monday was a holiday. Come home around 8, lunched WOW after dinner and Blizzard stuck me with an patch. Surely enough most offsets are broken.

The first thing is of course change the offset download page's version to stop bots from running. Good thing is there was another patch last week so I was still warm on offset finding. Process was quick and everything was tested and good to go.

Edit version number, build both releases, uploaded zip files, modify the pages. Thought everything was set. Then remembered DTK's script on player detection. I should have included it in the release some time ago. No big deal. Added in the scripts, re-zip the files, take out the CVS (version control) folders from zips, upload again, then download for testing. That took a good 30+ minutes.

After some testing, found I forget to include Item names. All items names are showing as blank. No big deal, rebuild everything again, changed version number of bots, zip, upload, change web pages, download and test and another 40 minutes.

Some more testing. This time found I forget to get the messages offset. DTK's script is no good unless I fix that. At that time wife is starting to argo, and my tempers are high. Took me half an hour to get wife happy again, then found the offset, zip, upload, change web pages, test ... and found I didn't change module version. So repeat like a robot, upload, tested and went to bed. The whole night gone by like a blast and I didn't get to play a bit.

I was relaxed this morning. Feels free and get up late. Went to setup the toon for farming, and behold found the player's names are incorrect. Fix/zip/upload/download/test... Sometime during that process wife starts to argo, and for a good reason: "You are going to be late!" she said, like I don't know that. I am a bit late for work but now bots are up and running.

There might be one or two not important offsets that is still off, but let me play and have some fun first :-)

Sunday, October 7, 2007

Chinese WOW players

Recently I read a story about a chinese girl dead after playing WOW. I forget the details but looks like she played for 3 days straight, and her friend said she told them she was exhausted after playing.

There might be a culture difference between how Americans and Asians playing this game, where the chinese player take this game more seriously (less the Gold Farmers of course). Each chinese family can only have one child, so they might be spoil the child more as well.

I think it will be a good idea to make a bot for the chinese people, but there are huge problems. I have downloaded the Taiwanese version of the game and it works fine with my bot, but to download the Chinese version, I have to have a valid chinese citizen's card (Impossible for me). There is also no way to accept payment, but that will be fine, if I know my bot can help people, I will let them have it for free. All my previous freewares are free so no big deal.

Thursday, October 4, 2007

My new toy

This is totally unrelated to WOW. Sometime ago I bought a Cannon Rebel XT because my 2 year old digital camera can't shoot clearly in house without a flash. So after a lot of research, I decided to go with a mid range digital camera (Primarily for my wife's brother's new baby, we don't want to use flash on him).

The result is not very satisficatory. Even though the new camera looks good and feels great (I like that "click" sound when shooting, feels great and I got hooked on shooting), we still can't easily shoot non-blurry pictures inside our home most of the time.

After some more research, I found out that good camera heads with smaller aperture values can do well in this situation. So we got a Cannon f1.4. This head can't zoom, but man the picture quality is outstanding. I can't wait to use it on that new born (not so new any more anyway).

Will post more details later.

Wednesday, October 3, 2007

Patch 2.2.2

Yesterday was another patch day. In the morning I logged on thinking about get some herbs for this weekend's run, and to my surprise, another update (Yes I totally forget that was Tuesday).

And it drags on, extended by some hours so I can't do anything. At night I went home late (big release for my company) and had to work 2 hours to get a simple offset update. The biggest reason is I am trying something to send the offsets to users instead of letting them update the software, and that is not going well, just too many of them.

So instead of that, I am only sending a few :-), and that is still causing problems (when there is a parser error of any reason, it crashes because I forget to catch the error).

Anyway, the patched bot is finally out so hope everyone enjoy.

Monday, October 1, 2007

Deadly deadmines

First, interesting post on CNN about forgotten presidents of US.

Second, using a very high level char to help your bodies in very low level dungeons is not a smart idea. I was in dead mines with a full group of level 10s, and guess what happened?

Well, deadlines is one dark place. I could walk by the mobs without noticing them, and they of course, ignores me. However my buddies attracts them like dead meat on flies. No matter how careful I try to be, my buddies often got killed by mobs, often a wipe. It was still worth it because we did have a good laugh together see how long the train of mob was when they were running around.

Sunday, September 30, 2007

Miracle revisited

In my previouse blog, Sharing a Miracle, I stated that a lot of people heard a beatifull music the day before sister E died. I was wrong. After confirm with friends, only the family members heard that, and non of my friends that I know directly heard that music.

Friday, September 28, 2007

Bubble problem solved!

Continue on yesterday's problem. It actually is not a capture problem. What happend is, first, some how I remove the initial start up delay, so I was capturing screen when bubble is just appearing (at that time bubble is transparent!).

The second problem is, I was not counting on the position of WOW window. Before patch 2.2.0 the window is always on top left corner of screen. After patch the window is centered, so my mouse (x,y) position is totally off.

Anyway another bug resolved.

Thursday, September 27, 2007

Screen capture horror

Just found fisher got problem recognizing the blubber on light waters. It could miss 60% of the time.

The problem appears to be, when capture the screen with my current code, the blubber turned to partial transparent. If I do it with ASP.NET code, the capture was correct, so I think the problem happens when I convert the captured image to actual data. I am still not very sure yet, so I will try again today to see what caused this problem.

Yes, when capturing using .NET application with the same function calls, the image is correct, the only different part is I am saving the image with .NET bitmap saving code. And the image is also correct is I use print screen. So the only possibility might be that when I call GetDIBBits, it convert the transparency stuff onto the raw data and passed it to me, resulting in image recognizing errors.

Wednesday, September 26, 2007

WOW 2.2.0 patch status

Well, this patch didn't change too much and Fisher is already online.

However fighter has some problems. Beside some of the recently added features, I have forgotten most of the method I used to re-discover offsets. Yesterday I released fighter, but after the release found it has some strange problems with running way points. It keep running back and forth. I have to go to bed because I got a full load of work (at my day job) today. This morning I get up early and finally found that I left some debug code uncommented and that is creating a huge performance penalty, which delays the way point detection and cause the toon to over shoot :-)

Well, I will do some more check tonight and hopefully release it soon.

Tuesday, September 25, 2007

MSVCR71.dll missing and WOW patch 2.2.0

First, after I install Vista and tried to run zoloFighter and zoloFisher, I found out that I didn't include msvcr71.dll with my distributions. So basically if someone is not a developer or don't have the version of VC++ I used to compile the program, they can't run them (will get dll missing message, or long delays when trying to start WOW via the lunch button).

So sorry to all who has tried and failed. I will add that dll in the next release, and since there is a patch going on today, possibly the next release will be today.

Second, WOW finally patched. I am a bit scared since some recent offsets I got is not so easy to re-discover. Let's hope today's update is an easy one :-)

Monday, September 24, 2007

Vista woos

Installed Vista, looks pretty. Bot does not work off hand.

I didn't install WOW on vista yet, too much time. What I did try is to lunch a program using zoloRunAs and see if it could be lunched. I tried to lunch notepad.exe, and right after the enter key the message "Access denied" showed up.

So more worked needed for Vista :-(

Anyway here are my first impressions on Vista:

1. Very pretty. Everything from desktop to minesweeper got a cool look and feel. I am impressed.
2. Not so user friendly. I had an hard time to find out how to customize my desktop, how to get my computer to show up. And when exploring files, the top bar that used to show file path in XP are now showing an URL ...
3. Annoying security. Every time you try to adjust some settings (i.e, lunch control panel etc), a window pop up and ask for my permission. I mean, can't Microsoft just do a memory check sum and figure out it is the original windows utility I am lunching??!! It is getting annoying after a while.

Friday, September 21, 2007

WOW accounting again

A few days back I did an analysis on how much money I can earn by botting, the result is about 10g per hour.

Yesterday I did it again at another location, with mobs at much lower level than me. I sold about 20g of vendor trash in 1 hour, and not counting the herbs (which will be used for dungeon run) and other stuff I intend to keep.

So I guess how much you earn can be rather different depend on place. I always thought Blizzard will balance out different places (i.e, mobs that don't drop cash will drop good vendor trashes to match up), apparently not always true. No one can really balance out everything, so just keep searching for the best places.

Thursday, September 20, 2007

Rich and poor

I don't have much time, need to bot and prepare for Friday night's dungeon run. Here is my random thoughts of the day.

I just realized that even poor people in US today are living much better than rich guys 200 years ago. Here are some examples:

1. Social security make it fail safe. If those old rich guys did bad investments, they could broke and die in hunger. Not possible today (Unless the poor guy spend all SS money on alcohol).
2. Air condition, running water, sanitation system. Unheard of by the rich guys 200 years ago. Even king of France has to cover poop smell with fragrance.
3. Knowledge base. Now every poor guy can use free internet/books in public libraries and give them selfs a good education. I did that while working as a waiter to get my college money.
4. Education is much easier to get. Elementary school, high schools are free and waiter/waitress money can get you through college. Before only the wealthiest man can afford that.

All that said, I am sure 99% of us will rather be a norm or even poor man at our time than to be a king and have to live without AC and all the other convinces and worry about invasions from barbarians in the middle ages.

So if 99% of us are better than kings, why so complains?

Wednesday, September 19, 2007

Blogger's digest?

It was real fun to read other blogs, as my recent visit to iron realms and found some very good links. However not every day they have great ones, so it will be a great idea to have a blogger's digest so we can just visit each day and find the best of them instead of need to go to each blogger's site and read.

Tuesday, September 18, 2007

Money rate

I did a rough calculation about how much gold I made when boting in not-so-hot areas and sales all to vendor. it is about 20 gold for 2 hours. In that rate if a player bot 6 hour a day, it will take him about 3 month to get an epic flying mount, and that is $45 for 5000g.

Monday, September 17, 2007

Safe botting

Safe boting in WOW (and all other games) requires 2 things. First of course is a bot that is safe. For a bot to be safe, it must limit the privilege of WOW, so WOW can't check on the bot program, and it must NOT modify the game in anyway (injecting, call trapping etc).

For zolo fisher and fighter, I lunch WOW as guest so it can't check any other programs running under administrator privilege, and another standard windows privilege safe guard so if the user forget to do the first (i.e starts WOW first), WOW only got a small window of chance of catching it.

The second one is mainly on the user. He/she must take caution while boting, for example, don't bot in populated areas, don't bot in areas where quest items drop, or the mobs them selfs are quest items (Players will be real annoyed if they have to delay their quest due to bots). Also don't be greedy and sale all your loots/fish on AH. No player crazy enough will fish 12 hours and sale 20 stacks of stonescales (maybe there are but I am sure they will be 1 in a million).

Sunday, September 16, 2007

Difference of windows

When I created the bot, to make it max secure, I launch WOW on guest account. This way even my security is broken, WOW still can't check anything (except programs that also run on guest account).

However I just found out today, on international version of windows, Guest account are called different names! For example, on German version, Guest is called Gas, and my luncher failed to lunch WOW because of that.

Well now I know and I will implement a fix :-)

Just want to share with you all.

Saturday, September 15, 2007

Sharing a Miracle

This has nothing to do with WOW/bot or hacking, but a real life miracle.

One of the sisters in our church, E, who is a friend with several of my friends, died last week due to cancer. She was diagnosed 6 month ago and has combating the cancer since. 2 days before she die, she had a dream that Jesus is coming to take her on a boat. And at some point after that (I forget if it is before or after she dies), when a group of friends and family members was at the home, they all hear a beautiful music. At the time they thought the radio was on and checked downstairs, can't find the source.

Just want to share. I was not there but I have heard this from 2 of my friends who was there now. They are trying to reproduce the music, if they got it reproduced, I will put on a website somewhere.

Friday, September 14, 2007

bindings for Paladin

Some user requested for a paladin bindings file, and his fighting sequence. I will make a bindings_paladin.cfg base on that and release to the public. Finally a paladin profile.

Thursday, September 13, 2007

Combat log, finally!

Well, after yesterday's total crash (I followed on some dead lead and went real deep), I almost give up. The good news is I still got several solid leads from hours of analyzing WOW.exe's disassembly (the bad news is I am not a very organized person, as you can see my website is a total mess), and I forget where I got them lol.

So anyway, I was able to find some relations from those solid leads, and I got a working version that works on both mine and my friend's machine :-).

Appears there is no static route to trace to the memory that contain the links to the display strings. Blizzard appears to using a rotation method, and there was one dynamically allocated address that contains the pointer to the starting link base on some selection. (maybe it is one DMA pointer that is used by hardware, so Blizzard has to rotate). I just used what ever blizzard uses to determine if the pointer is currently point to messages, and use that instead.

What that means is, there is a slight chance that when you call wowGetCombatMsgs(), it might return nothing even thought there are logs. In that case just call again and you might get them (but 99% of time you get stuff).

The new release is at
now I will go on to improve the scripts. Also need to change some profiles. I got complains that some people don't like see code on top of profiles, that gives them headaches.

Wednesday, September 12, 2007

Need to re-trace combat log offsets

Well. There were warning signs and I ignored them. What happened is I didn't have a deep enough snapshot of the system, and I got fooled by the stack analysis.

You can get information about who is calling, what parameters was passed, but only an estimate. I got too confident about the tool, and only found out yesterday that the trace is not accurate. This is mostly likely caused by the fact that the calling convention can be different and no one can really guess it (the function call can either be pass parameter on stack or register, or both, so how do you guess where is the first argument, and where is the return address? The answer is no way except for the last call which the stack pointer is in ebx.

Also something happened today, either the spell checker is not working or I am not making spelling mistakes, which is unlikely, this window is not showing me any bad spellings.

Edit: I changed browser to Firefox, and there come the spelling checker :-) So another reason to choose Firefox over IE.

Monday, September 10, 2007

One Busy Weekend

Last weekend was packed. A sport event that supposed to last a morning turned to a full day event. Our sucking team that finished number one from the rear last year, but this year we finished 11th amount 48 teams, so the race lasted till afternoon and everyone was exhausted.

Sunday we had a birthday party for a close family member, at the evening everyone was tired because there are very small kids that needs attention. Overall it is a great weekend.

I did find some extra time during the off peak hours to do some more finding on combat log offsets. I got some better lead this time and was amazed to find how deep the combat log is compare to all other offsets. Right now it is about 6 to 7 levels to the more obvious blocks, and tracking down from that deep is not easy because those offsets keep changing and I got confused easily :-)

Friday, September 7, 2007

Combat logs again

After a bunch of tracing last night (and huge wasted of time tracing what turned out to be printf code), I got a non-conclusive result.

Yes I found the list that contain the pointers to the combat message strings, found the position contain current combat message count, however it was not firm because the address of address that point to all the good stuff can't be confirmed in the disassembly.

Anyway, I was still happy because it works on my account, I was ready to release, than I thought, this happens before, let's try on my friends computer first. Sure enough, it didn't work on his computer.

So, I will be back tonight or tomorrow and try again.

Thursday, September 6, 2007

Bigger is not always better

Today I went to site by the way) and saw some comment about America is a democracy, so here is my comment, has nothing to do with hacking World of Warcraft (got stuck on combat log lol)

America is not a democracy, it is a democratic republic. The difference is democracy is basically mob rule, it will die once people notice they can vote them selfs gifts (too sad America is near that point now). A democratic republic is a democracy governed by constitution and laws, so it last a bit longer :-)

Initially I thought the bigger the better, so the stronger the central (or federal) government, the stronger the country. Well, that is to a certain extent. The bigger the government, the further it is to the people and the lesser impact to them if they mess up. And that is when you see defense departments spend $10k on shipping $.2 screws to bases (and didn't notice it for years), Big Government schools fiercely against school choices, New Orleans Governor run away from storms (the best he did was plea for help, other than that no action), and Bush sends Billions of dollars to him without thinking (that is enough for everyone in there to buy a house, yet New Orleans still have not fully recovered).

States and local government should take full responsibility of their people, simply because they know better. There should not be any federal grants to any local state. This way no one will be wasting one million to paint an airplane. When money is handled locally, they will try to conserve, because it is their money :-)

Any organization, government or private, can't be too big. At certain size they operate most efficient, and if bigger, it is just pure waste.

Wednesday, September 5, 2007

combat logs

Yesterday I spend 2 hours cracking combat logs. I was so close than the power went down and my full notepad of notes are all lost :-)

Anyway for some reason the combat logs are much harder than the ordinary logs, the formats are totally different. It might take some good cracking to get it. I don't have much time every day for this second job of mine (yes it was fun at the beginning but now it feels like a job, similar to my other free ware projects). It can be very tiring especially when wife is there trying to haste you up.

So instead I posted the javascript API on the zolo fighter forum
let's hope I can get the combat log soon, so I can resume my normal life.

Tuesday, September 4, 2007

Recent activities.

It is not so polite to not letting your users know what you are doing.
For example, Blizzard never tells us what they are doing when they do server maintenance. They didn't post any updates recently and it still takes 5 to 6 hours to reboot the servers (I notice once they brought it right up).
As an engineer, I know sometimes after an update unexpected things happen and you just have to take time to deal with the mysteries, but when no updates are out and it still takes that long? Just a little explanation on their part can ease a lot of pain on the user side.

So I decided to post my activities often, even if I didn't do much.

I have promised some users to post all the methods and properties used in java script, I haven't done it yet. The reason? I always got distracted. Last week I was pushing out remote server, fixed several targeting bugs and added multiple ghost waypoints. This week? Well I had added pet happiness, and trying to add combat log.

Combat log is important, it tells you if enemy is dodging (important for fighters), if some one is healing you (need to say TY). I watched some one heal me while I was boting, so I decided to put combat log on a high priority.

I have tried to get combat log before, while I was implementing whisper service. The problem is, one of my tools for hacking is flawed, and it didn't find any trace of combat log so i thought Blizzard just pushed it on to the video cards memory and forget about it. During the long weekend when I did a review of my program, wala here goes combat log.

Anyway, the problem with the long weekend is, it is packed. I had to do some outdoor activity (kept secret, I will only say it is about some kind of group racing), a full party and almost a full day of dungeon run with old friends.

So assuming wife won't argo, I will try to implement combat log, pet happiness and then publish the new javascript api sets.

Friday, August 31, 2007

How should Blizzard respond to botting

I read a interesting post on World of Warcraft botting,
Below is part of my response:

There will always be botters. That is because anyone with a real job and life will be hard pressed to squeeze the time to grind to 70, or spend 5 hours in raids. Instead of trying to ban botters, Blizzard should think of ways to please the gamers better.

Below are some examples that I could think of:
1. Create dungeons that are soloable, but hard enough for the stupid bots.
2. Add more XP/rewards for quests to encourage players to play instead of botting.

Have you ever tried to block the flow of water in a stream? See how hard that is? If you try to lead it away, it is much easier. Always lead, don't block.

good business and bad engineers

I was doing some re-structuring on one of my company's project, and immediately noticed how bad the project was written. It is almost like the guy who wrote it is fresh out of college or don't know the language at all. I was wondering how our company (which was still young) survived the initial period.

What can be extract from the above is, you don't need good engineers at the start if you want to start your own company. As long as you got a good idea and have a good business sense, you can afford to hire crappy engineers from the edge of no where (at least initially). The important thing is to push the product out (no matter how bad it is).

Now looking back, if that kind of engineer was hired here today, he/she won't survive a week.
So in a business word, if you are the owner, your priority is to push your products out first, even if it is still buggy. If the product is there, people will use it. Once you made it, you will be able to afford better engineers and fix all the mistakes you made in the past :-)

Just my 2 cents.

Thursday, August 30, 2007

Stupid mistakes ....

I finally found out why sometimes zoloFighter run around without attacking. It is not bad memory reader, not timing issue, not priority, but I put in a line of code that if not full health, ignore all mobs! Must been there for a reason before, now it is just causing headaches.

Also found two cool fan site, and
The second guy even went to BlizzCon, I wish I could have been there (or I might been there without you knowing :-)

Wednesday, August 29, 2007

The way zoloFighter should be used

Fighter is meant to be used as a supplement for your questing. When I first enter Outland, I run fighter and it estimates I will level in 12hours, and during the late level 60s, it jumped to 30+ hours. The first impression was, this is going to be impossible.

As I get impatient, I started to do questing, and as you guessed, huge huge differences. After a bunch of quests, most of them solo-able, the time dropped dramatically, and I was able to leave it farming over night and be confident that the next day I will find it leveled (not recommended to leave it like that). Not only that, the quests give great items and I was able to get much better equipment then farming.

So the moral of the story is, don't be too lazy and use the bot for everything. Quest reasonably, and use zoloFighter to fill in the blanks. The best will be, 50% questing and 50% boting while you and your girlfriend/wife/family members having fun.

This way, you are having fun, enjoying the vast content Blizzard created, avoiding the boring grinding, and at the same time, you can afford to relax on the questing a bit (doing green quests are much easier and less annoying then the yellow/red ones).

Now enjoy!

Monday, August 20, 2007

Java, C#, C++, why C++??

Last Sunday while boting, I noticed bot stopped with an "Unknown Errror" in the log. I do a catch on all exceptions in the main loop, and the unknown error is usually memory access exception (using memory that has been freed).

This was not a problem before, but since javascript is introduced, there are just many more ways for this to happen. Example, native code calls javascript code then call back to native code again, where some of the previous auto functions might became recurisive...

This bring up another interest question, why I didn't use C# at the begining? That will make all of memory access problems a NULL problem.

Well, in the very begining, I had 3 choices, Java (my previous favorite), C++ or C#.
Java is out because it is kinda slow (at least feels) and the bot uses too many windows APIs and JNI is a pain in the axx.
I almost pick C# but at the time I am not very familar with it and don't want spend time to find the invoke syntexs.
So I used C++ for testing and modeling, and what begins as an fun poking around habby turned out to be a full blown bot.
And now since all of the stuff already written, I don't want to convert any more.

After all, if I know the scope the current project is, I would not write it in the first place. They all comes small, like all my other proejcts, open source or not.

javascript (spidermonkey) embedding pitfalls

Here is some experiences I had with Mozilla's spidermonkey during my attempts to embedded it into zoloFisher and zoloFighter.

1. the engine is built for speed, not much around user friendliness. Examples will be, engine provides INT_TO_JSVAL, FLOAT_TO_JSVAL macros, but if you look at them, they simply uses part of the bits ON THE VALUE itself to mark them as int or float (or object). So what value you can put in them are restricted, the macros are just a faster way to make jsvals when permits. To be on the safe side, always use the js_MakeNumber functions to make an object out of it.

2. If you compile with VC++, certain macros are not compiled correctly (visual c++ problem). So if you ever wondering why some exception was generated during GC under certain conditions or why 'new Array()' won't work, move 2 of the macros in jsobj.h, OBJ_SET_PROPERTY and OBJ_GET_PROPERTY, make them functions (VC++ still sucks in compile, but great to use).

3. Last but not the least, when compile, always define XP_WIN

How to do finally in C++

A couple of days ago, I was trying to add some new functionality to zoloFighter, and run into some trouble with the
} finally{

block, VC++ complained about some unfolding stuff. The __try{}__finally{} block is used to clean up the javascript engine, so even if some exception has been thrown, the engine don't leak memory.

I don't want to remove the try/finally block, but I am tired tweaking my code around to fit it. So some internet search later, I found a post with a great idea (sorry, I lost the post, because I was too lazy to blog right there).

allocate resource
class doFinally{
release resource

doFianlly f();
do your stuff;

Very smart. Just want to make a record about it.

Why create a bot?

Finally, I have created this blog. I wanted to do this for a long time now but keep delaying because of lazyness.

Anyway, like many people, I am a computer Gamer, currently playing World of Warcraft (WOW).

About a year ago, I started playing WOW because of my friends. We are a close group of friends playing C&C, Diablo since college. We just want to get the good memory back, and yes we had a lot of fun playing WOW together. Initially I started about 2 weeks late then my other friends, and that translated to about 10 level of difference (when we started). Oh God that 10 level is a huge difference. We tried to play WOW like Diablo II, but I just can't survive, you can't hurt mobs 5 level above you, that pretty much prevented me from playing with my friends! Yes there is a rest bouns, but since we are so new, none of us have much use of that. Also most of us are married and have a day job, so it is impossible to play the same style when we were in college (Yes, huge difference). Beside that, Wifes, Girlfriends all have huge impace too, so for us working class, there is no way we can spend more than 3 to 4 horus a day playing.

The initial excitment around WOW also caused major argo upon my wife. With the 3 to 4 hour of my life each day spend to WOW, I don't have much time with her any more. Well, I tried to get her to play WOW, but she doesn't like the 3D interface. The argo was so bad the tension is killing me (imaging half way in a dungen I have to hold all my teammates and go argo management on her).

WoW also has other interesting spots, like professions. Very usefull but very time consuming! One day while I was fishing, I got so bored and I thought, this should not be done by me, this should be done by a program! As a engineer major I was interested in computer programming since highschool, so a fishing bot is piece of cake. Basically image recogination (finally stuff learned in school became usefull). At the time I was not aware of any EULA etc, but since I am the only user this is no big deal. The result? fishing 300 without much argoing from wife Smile And ZoloFisher is born (At the time I call it WowFisher), if you are interested check out at

So why stop there? why not making a Fighter bot? I am no stranger at hacking, back in college years, I hacked school's network (appletalk share), various games. I still remember we laughed so hard one day when I helped my friend with a hacked c&c beat a much skillfull player, and of course diablo fix file offsets etc. I was a warrior with a ton of mana and a mana shell top of my head. One PKer with a huge axe tried to kill me, and got a huge surprise instead Smile

OK, long story short. hacking started. @#@$%^$E%! WTF?? This is not the old C style game any more, this is post Y2K DX9 MMORPG!! The hardware mapped memories, uses of std library, threads OMG. Well, I am no average programmer either, I have a wide range of interest, from how CPU works (back in high school, read that whole book), embedded systems, linux kernels , C/C++ to Java, C#, php, I know a lot of crap. This is certainly different than when I was digging RFCs, but presistance paid off (You will know what real presistance is if you are debuging on a 3 year old single core machine with a 5 year old graphics card, dumping 300mg of memory and analyzing on it).

With the initial link open, the rest is to implement a program to take advantage on it. All it remains is to read my position, and find the nearest mob, and keep pressing the same set of keys over and over till the mob is dead. I was so happy! I still remember the first day when I was testing out the turning, that was learned either from high school or mid school (tan, atan etc), at last have some real usefullness. why we need schools? The stuff I learned from school, beside reading and basic math, most are useless (Well, history is very important, if the teacher is good, you will learn the mistakes of your predcessors, if the teacher is bad, you learn the event and forget afterwards).

Well, that is pretty much how zoloFisher and zoloFighter are born. Wife still argos, but not as badly, most of the time I just need to setup the toon and check back once a while, and I am very proud of my work, so I decide to share it out. That was a hard process. If the product is just for you, you don't need to make it user friendly at all. Now it must be user friendly (that is good to me too, the initial row product is very very hard to use, even the waypoint has to be set 1 by 1). Also I found the EULA, and because the bot will be open for inspecting, proper hidden method must be used. To make the product flexiable, javascript engine from Mozilla is embedded so other engineer types can use it to customize the fisher/fighter to their own needs. Initially it is used to let people add their own whisper engine.

Well, I will stop here today, back to work now.