Thursday, August 30, 2007

Java: Hotline Update #2

This time around the update was very simple. No new buttons required so this meant I didn't have to add to that massive if-then statement in the reports section with another clarifying statement.

Instead the only update required was to add the name of the new Customer Service representative so that he could utilize the program. This required me to add a new variable to the repString String array so that his name appeared in the JComboBox drop-down menu. Along with this changes were also made to the ReportPanel file. A new variable was added to the repNames and techNames String arrays along with the corresponding JRadioButton for selecting the report type. Other than this the only necessary changes were updating the Listeners to incorporate the new variables.

At first I thought this update was going to have to take place at the beginning of next month, just like the last one. However since no additional call options are being added I didn't have to alter any of the existing reports, only create a new one for the new Customer Service representative.

Monday, August 6, 2007

Diablo II: All Alone Tournament III

The concept of an All Alone Tournament is that the character cannot enter town or talk to anyone unless it is necessary to continue questing. This means quest rewards such as the Charsi imbue reward, Larzuk socket reward or Akara skill point reward are not obtainable. Also since it is not possible to go back to town no mercenary is available to the character and equipment cannot be repaired in the normal fashion nor potions bought. Living off of the land is the name of the game.

I decided to play a Necromancer summoner, even though my last (and first) one was a bit boring. I wanted something other than the lightning sorceress I seem to always play in tournaments. I needed a character that wasn't too mana intensive since pots cannot be bought and also a character that wasn't dependent on the durability of their items, in other words a melee character.

I did see a few problems that may occur, mainly getting that first monster corpse to begin building my army. In the beginning I was able to use a bow along with a clay golem, but this only worked for Normal. Once in Nightmare I had to switch to using curses such as Attract, Iron Maiden and Amplify Damage to get the army going. It was slower and required a few mana potions but still possible. However once I got to Hell it required a good 15 minutes and a majority of my mana pots to create my first army in the Blood Moor. After that I decided to not close down the game session and simply paused the game between playing sessions. This meant I didn't have to raise an army again, but also that muling off any interesting finds was not possible.

Even without a mercenary this character was faster than my twinkled one from before. I'm thinking I was not playing correctly the first time and that were I to create another twinkled character it would be about as enjoyable as this one.

I was fairly satisfied with how well I did, getting all the way to Act II of Hell and level 75 before deeds were encountered. Especially since my resistances were terrible:

Cold: -64%
Lightning: 5%
Fire: 23%
Poison: 50%

I decided to not go the normal route of getting revives since they are so mana intensive. Instead I put extra points into Clay Golem to ensure it was more durable during the initial army gathering stage and then I dumped points into Skeleton Mage for more soldiers. Mages aren't the most effective minions, but they are extra shields for my character, Anubis, to soak up elemental damage and they did come in quite handy in tight areas where only single skeleton could attack at a time. At the time of Anubis' demise he had 10 skeleton warriors, 7 skeleton mages and a clay golem at his disposal. I believe were I to make another Fishymancer I would go this route again with a single point in Revive as well.

This will be the last tournament for me for a while as I want to concentrate on my Softcore characters. I have only a single matriarch/patriarch since my restart a few months ago. I'm going to get back to my poison Javazon for now so I can utilize all these nice items found during the MFO.

Thursday, July 26, 2007

Diablo II: Meteorb Skill Layout

This should have been posted when Malice became a Matriarch, but better late than never. Guides on how to build a Meteorb in Diablo II have been done and redone to death, however this is an explanation on how I built my current magic finder and how she is used.

The skill setup is very traditional:

Frozen Orb - 20
Meteor - 20
Fireball - 20
Fire Mastery - 20
Static Field - 1
Teleport - 1
Warmth - 1
Cold Mastery - 1+

However I like to provide a breakdown of when the points were allocated:

Warmth - 1
Firebolt - 1
Static Field - 1
Fireball - 1

This will bring us to character level 12. Static Field is used only on unique boss monsters while Fireball has become the main skill, replacing Firebolt. From here onward we'll be trying to max out Fireball to level 18, which bring us to character level 29 with some points saved up to obtain Frozen Orb.

Fireball - 19
Fire Mastery - 1
Ice Bolt - 1
Ice Blast - 1
Frost Nova - 1
Glacial Spike - 1
Blizzard - 1
Frozen Orb - 1
Cold Mastery - 1

At character level 30 Frozen Orb becomes the main skill with Fireball as a backup for Act bosses.

Frozen Orb - 2
Fireball - 20

Fireball is now maxed, time for Frozen Orb now.

Frozen Orb - 20
Telekinesis - 1
Teleport - 1

This brings us to character level 49, still in Act I of Nightmare. At this point everything becomes rather simple. Spam Frozen Orb until all monsters are dead since there aren't any immunes yet. Act bosses should still be weakened with Static Field before finishing them off with Frozen Orb.

Inferno - 1
Blaze - 1
Firewall - 1
Meteor - 20

At character level 68 Meteor has been introduced to the character's arsenal. It's uses are rather limited in Nightmare due to Frozen Orb's power, but it will come into play later on in Hell. It does however synergize with Fireball nicely to add some punch to that spell.

Fire Mastery - 20

This is basically all that is left to max until the character has completed questing, at level 83. From this point onward Cold Mastery is what should be maximized to increase the killing power of Frozen Orb for general magic finding purposes.

In Hell Fireball replaced Frozen Orb as the main killing spell. However Frozen Orb is used to chill/slow the monsters before Fireball is spammed to finish them off. For normal monsters Meteor is only used for stationary(ish) targets, such as those the mercenary is tanking or Unravellers.

Act bosses are dealt with fairly simply. First use a Frozen Orb to chill them and their minions, then Static Field to cut their health in half. Then hit them with Meteors and Fireballs until finished off. Since Meteor is a timed spell normally 2-3 Fireballs can be launched in between Meteor casts.

Any area or boss can be run with this build, even the Countess due to her cold/fire dual immunity as long as a powerful mercenary is present. She's especially good at Andariel, Mephisto and Pindleskin runs. Since these are the main boss runs for magic finding, equipping any future characters is a simple matter.

Tuesday, July 24, 2007

Java: En Guard Update #3

A bug came up recently in the En Guard program that allowed a representative to save a record without filling in the information as to which rep took the call and what platform the problem occurred on.

The fix itself was rather simple as there is already a check to ensure that the other fields (contact name, number, subscriber number) are filled in.

if ((tempNumber.compareTo("") == 0) || (name.compareTo("") == 0) || (input.compareTo("") == 0) || (contact.compareTo("") == 0))
JOptionPane.showMessageDialog(recordPanel, "Please fill in all fields before saving record.", "Incomplete Record", JOptionPane.ERROR_MESSAGE);

In order to include the two additional fields the compound OR statement needed to be expanded.

if ((tempNumber.compareTo("") == 0) || (name.compareTo("") == 0) || (input.compareTo("") == 0) || (contact.compareTo("") == 0) || (platformBox.getSelectedIndex() == 0) || (repBox.getSelectedIndex() == 0))

PlatformBox and RepBox are the JComboBox variables for the two associated fields. If their currently selected option is the initial value of a blank space then the statements will be true and the record will not be saved.

Originally I thought I would need to create another variable or two to track when the selected index of either JComboBox changed, but the getSelectedIndex() method made things so much simpler. Hopefully no other changes will need to be made to the En Guard program as this is the only report of an issue within the past three months.

Friday, July 20, 2007

Diablo II: Magic Find Olympics

The Magic Find Olympics (MFO) is a contest run twice a year on the Single Player Diablo II forum. The basic premise is that each contestant picks something to run: Baal, Mephisto, Level 85 areas or Super Uniques. Then everyone has nine days to run those areas as much as possible, the person with the best items found wins their respective section and can then take a few items from the losers.

I joined this with my one and only magic finder, Malice. In preparation for the tournament I leveled her from 83 to 88 in both the Pits and World Stone Keep (WSK). This was to make her more powerful, her mercenary better able to survive when tanking Mephisto and in search of a four open socket Monarch shield in order to make a Spirit runeword. On my very last Pit run before the tournament a zero socket Monarch dropped, so I used Malice's Hell difficulty socket quest reward to turn it into a mid level Spirit shield.

Then the games were on:

Sign-up Thread
Progress Thread
Results Thread
Meet the Olympians Thread


I ended up 7th in the Mephisto category, the winner actually took a week of vacation to participate so I didn't have a chance as I was only magic finding when I had free time instead of all day long. Overall here are some numbers of my participation:

201 qualifiers
2091 runs completed
10.4 runs per qualifier
39 hours 55 minutes 41 seconds spent overall

Each Mephisto run started off taking 74.35 seconds per each run. For each run I start in Act IV, use the Waypoint (WP) to Act III Durance Level 2 and then teleport to Mephisto. Once Mephisto is eliminated pick up my winnings, use a Town Portal (TP) to Act III town, visit Cain to identify the items and then Ormus to restock on potions and sell unneeded items. Then return via the WP to Act IV and quit the game. Rinse and repeat.

Obviously this is rather time consuming and as I played better ways were found that shortened the running time to 60.6 seconds per run. First was re-rolling the map to look more like this one, where only four teleports are required to reach level 3 of the Durance rather than the 12 I was using before. Also apparently it is possible to active a WP with the Telekinesis spell rather than having to walk/run to each one. These changes shaved 14 seconds off of my time and make the runs more effective, which became apparently when my best two drops occurred in the last two days of the tournament.

Overall it was fun, but a bit draining. I'm sure I won't be running Mephisto again anytime soon. Not only because I'm sick of seeing him but also because I have the vast majority of times he can drop in duplicate so the rewards wouldn't be very good. There won't be another one for six months so we'll see at that time if I partake again or not.

Monday, July 9, 2007

Diablo II: Six of One, Half Dozen of Another Tournament

Going a bit into the past here, but this was the very first tournament that I joined in the DiabloII Single Player Forum. The basic premise of this tournament is that your character can only be equipped with items that have a multiple of six in their description, anywhere in the description. At first this sounds very limiting, but as you get to playing you'll find that such items fall at a fairly regular pace.

Devils_Advocate was a lightning sorceress, a fairly overpowered build that I got rather good at on Battle.net. She's simply to play and since magic finding and rerunning of areas was allowed in this tournament the perfect character.

Questing through Normal and Nightmare was simple enough, some Near Death Experiences (NDE) were encountered but nothing to serious. Quite a bit of MFing was required in NM before moving onward to Hell, where things got very interesting. The going was rather slow in Hell, but I was able to get all the way to Act V before the guest monsters got the best of me. Encountered a pack that eliminated the mercenary and I panicked, which lead to deeds.

Regardless I see this as a successful tournament, not just because I ended up winning with the highest overall score either. This was my very first Hardcore character and I learned quite a bit that should help me with other tournaments, as well as my normal Softcore characters.

Wednesday, June 27, 2007

Java: Hotline Update

Apparently I get to now experience what programmers worldwide already know, those in charge of a program's content like to add all sorts of features without regard for how this will affect the coding of the program itself. I had confirmed that the call options were static and would not change, but apparently that is not the case.

Five additional call options needed to be added to Hotline along with removing a representative's name and adding an additional reporting option. Obviously, removing the rep's name was by far the easiest of all the changes needed, this just required altering a few variables and removing a few lines of code. This did not change any functionality of the program, unlike the other changes that needed to be made.

Adding the five new buttons, each one representing a call type, was not much more involved. New variables needed to be added and then listeners associated with those JButton variables defined. Once this was set it was only a matter of arranging the new buttons to make logical sense, and then resetting the grid layout to incorporate those new buttons. Unfortunately I was unable to convince the others to leave the number of possible buttons at a decent numbers, such as fifteen or sixteen, so instead they settled on seventeen. This makes the program look a little chunky due to the wasted space at the bottom, but it is only a visual issue and not a functionality problem.

The problem with adding new call options after the program went live to the call center is that now the files for June are formatted one way, and the files for July another. Running a report for one month has to be done differently than the report for the other as a result. Due to the changes a few variables must change value for each report type. Instead of rewriting the reporting call and having a separate call for each month I decided to use an If-Else statement to set the values of those variables. If the month being reported is June then the variables are set to deal with a twelve call option file, otherwise they are set to deal with a seventeen call option file.

Finally a new report was required that would acquire the total values for two types of calls, labeled as technical calls, and display those values in the JTextArea. This was needed by the tech group for month end reporting purposes. Thankfully the location of these buttons didn't change from the twelve to seventeen option frame so the same call would obtain the necessary information from each file due to it being in the exact same location.

With these changes the program itself is ready to be re-released to the call center starting in July. Hopefully no major changes will be needed for August, but at least the groundwork is laid to make these changes much easier to accomplish.