« General | Main | OSS / Linux »

Monday, April 17, 2006

Poseidon server now has a picky

I've added a picky in the poseidon server. Later on I'll probably add a Kafra, an item, open the storage, some skills, and some stuff in the inventory of our poseidon character. I'm planning to convert the server from just being a game guard solution into being a packet sniffing platform.

After all, it was my brainchild XD I should be the one to know how to exploit the poseidon server's abilities. It's kinda amazing when I look back from when it was still called fakeServer.

Posted by kaliwanagan at 11:38 PM
Categories: OpenKore

Wednesday, April 12, 2006

Rule of Thumb

After being a forum moderator for a long time, I've formulated some conclusions that I managed to encapsulate into ruls of thumb. I'm gonna be posting rules of thumbs every now and then.

Rule of Thumb: There are no stupid questions. Only stupid people.

Posted by kaliwanagan at 2:24 AM
Categories: OpenKore

Thursday, April 06, 2006

pRO Ragnarok packet changes

Looks like pRO is in for a really difficult lenten season :)

LU! has decided to punish pRO botters for their sins by mutating the attack/sit/stand and skill use packets. Apparently, these are the only packets that changed, as the other packets (login, chat, etc.) have not. Which is only logical, since these abilities are actually the ones which cause botters an undue advantage over other players. By mutating these packets, LU! retains their business while levelling up (pun not intended) the playing field.

Of course one can still use OpenKore to route to faraway maps (conserving zeny for warps), snoop in PvP by revealing cloaked and hidden players, auto-loot the caverns of the zenorcs, and many other things that do not use the skill use and attack packets.

Hmm. I guess no auto-vending either :)

Posted by kaliwanagan at 1:22 PM
Categories: OpenKore

Tuesday, March 28, 2006

Trace of Battle

This is an iRO mini-quest (not sure if this is also available in the other ROs).

Before you start the quest, make sure you at least have these in your inventory:

  • Green Potion x1
  • Red Gem x1
  • Green Herb x1

Note that some of the NPC you will be encountering will poison you, so better have Detoxify as a skill or bring more Green Herbs than required.

Start by talking to the NPC at moc_ruins 66 164 Thief Trainer#T and he will mention something about this quest. You would need to go through each NPC in order in order to complete it.

Here are the NPC locations:

  • moc_fild12 166 369 Trace of Battle#1
  • moc_fild12 173 215 Trace of Battle#2
  • moc_fild12 276 165 Trace of Battle#3
  • moc_fild11 39 163 Trace of Battle#4
  • moc_fild11 205 52 Trace of Battle#5
  • moc_fild11 184 342 Trace of Battle#7
  • moc_fild17 213 358 Trace of Battle#8
  • moc_fild17 228 274 Trace of Battle#9
  • moc_fild17 34 292 Trace of Battle#10
  • moc_fild18 346 296 Trace of Battle#11
  • moc_fild18 309 257 Trace of Battle#12
  • moc_fild18 177 333 Trace of Battle#13
  • moc_fild18 111 303 Trace of Battle#14
  • moc_fild18 109 197 Trace of Battle#15

I can't seem to find the 6th Trace of Battle, but I was able to complete the quest anyway. I got quite a good amount of EXP (I wasn't able to check the Base exp as it made me level up, but the Job exp was 3,000). It would seem that all 1st job classes can do the quest, the only difference being the typeof loot you would get as a reward (as a thief I got an unslotted Mantle). Also, this quest is best made when your character is still low levelled, since this will boost your levels up without risk of dying.

Posted by kaliwanagan at 4:49 PM
Categories: OpenKore

Sunday, March 12, 2006

Progress reports

Since I'm still offline (as expected, the maintenance guy doesn't show up on Sundays) I'll just put here the things I've done so far:

  • Minor cosmetic fix in 's' command
  • Added descriptions of config options removeActorWithDistance and route_randomWalk_inTown
  • Fixed disconnections when a guild member logs in/out
Posted by kaliwanagan at 10:29 AM
Edited on: Sunday, March 12, 2006 10:22 PM
Categories: OpenKore

Saturday, March 11, 2006

Research results

We don't have any internet today, and probably won't have one until Monday morning. Damn the french for their long vacations X_X

So to a bit productive I conducted a little research on some of the stuff vivi had been nagging me about (i.e. plugins that would allow us to avoid our guild members). It won't be comprehensive and I won't be able to give tangible results yet since I won't be able to properly test it, but these compilations would serve as my notes for my future work.

I've installed Nezumi (a Freya fork) and was able to compile and run it. This is to help in testing some of my code while I'm offline, but I really prefer doing the testing on VistaRO where there are already a few people on the server.

Okay, time for some reports:

  • Apparently, you can get a player's information just by sending the getPlayerInfo packet with a player ID (character ID?). OpenKore has had this functionality for quite some time now. In fact, we have a command called "getPlayerInfo" which does exactly that. Note: I'm not sure what will happen if you send a getPlayerInfo request on a player ID that is offline.
  • You are able to get the account ID and the character ID from the guild_members_list packet.
  • Combining the two bits of information above, it should be possible to retrieve the list of your guild members, bot your character, and then avoid any character that has the same account ID as one of your guildmates. We avoid those characters that share the same account ID because it is assumed that they are owned and played by the same person, and that we might get caught by our guild botting.
  • Mr_Incredible has also been writing some kind of "big brother" plugin that is a huge improvement in the player recorder plugin by isieo. He plans to use the information gathered to create a more accurate version of mercdb.
  • In line with mercdb, I'm planning to write a mini-version of the plugin called shopping. Just like the doCommand (which I consider to be a mini-macro plugin) shopping should allow me to visit vendors in (e.g.) Prontera and buy stuff according to conditions I specify. The plugin is intended to be used for automating the monotonous task of checking each vendor's shop window and comparing prices. This especially helps if you know what you're specifically looking for. For example, I'm currently looking for a mocking muffler. The plugin should (theoretically - I haven't written it yet) go around Prontera inside a set time, looking at all the vendors' shop windows, and at the end of the set time visit the merchants in order (from lowest price to highest price). The plugin should automatically buy the lowet priced mocking muffler it would find under the set time, up to a certain maximum price I'm willing to pay. The plugin should also be useful in buying low priced and "rush" items such as elunium, oridecon, etc. and beable to resell them at a higher price later on.

I also plan on doing some research on the following stuff, as well as finish some of the work I've done:

  • Figure out the packet that shows the client the location of guildmates at the map.
  • Add a "players" array to the webMonitor plugin
  • Fix some of kadiliman's problems and generally make it more newbie friendly (this for-fun project is increasingly getting used for serious anti-anti-bot maneuvers, and I guess there is merit in having more people test it).
  • Make some support code for the MediaServer, such as a classification function (poring, drops, poporing, marin, etc => poring; knife, stiletto, main-gauche, etc. => dagger; etc.)
  • At least commit the login packets for serverType 7 (which is going to be used for the new Aegis 10.2 zone).

As usual, so many things to do and so little time X_X What OpenKore really needs are more dedicated developers as well as testers that can help while we all work for hauling OpenKore into version 2.0, and be able to continue to claim being the best bot for Ragnarok Online there ever was.

Posted by kaliwanagan at 10:56 PM
Categories: OpenKore

Saturday, February 11, 2006

bRO and XKore 1

Gameguard has *finally* upgraded themselves and added a check that prevents any dll hooks from running. If a dll hooks into the ragexe.exe in memory (such as xstools.dll or any of the various ro-assist tools) gameguard would close ragexe down. Either gameguard references the checksum, or scans memory for a signature.

Like I posted in the OpenKore forum, this change is welcome - in a manner of speaking. It has been really boring lately, and as evidenced by the various projects sprouting (xkore2, webMonitor, fakeServer/Poseidon, wiki, etc.) the bot functions themselves haven't been really touched. Only now that gameguard seems to be active again that OpenKore developers can flex their muscles.

Most of the OpenKore devs are more interested in the challenge rather than in-game success anyway (of course we have some that are interested in both). I hope Gravity releases the Alchemist skill tree for the homunculus ASAP to official servers. That should provide enough of a challenge in order to fully revamp the OpenKore AI. Also, I hope Gravity would speed up the implementation of the mercenary system (if there ever will be one).

Posted by kaliwanagan at 11:02 AM
Categories: OpenKore

Friday, January 27, 2006

Living in Angers

I have arrived, and just got an internet connection, so I can probably start to brush up on whatever is happening online.

For starters, it would seem that inRO had the same packet changes as bRO, pRO, as well as idRO had. Maybe the server operators are taking advantage of the fact that a good public fakeServer hasn'tbeen written yet? Well, let them sit on their laurels. As long as the primary weakness of their approach isn't addressed, fakeServer will get written - somehow.

For the server operators who read this blog, welcome :)

Posted by kaliwanagan at 7:29 PM
Categories: General, OpenKore

Thursday, January 19, 2006

bRO packet problems

Looks like the server update that struck bRO last night is a tough nut to crack. Instead of the game guard sync packet coming in every five minutes, game guard now checks the packets during login, as well as character selection.

Previously, botters would simply ignore the game guard packet and would just allow themselves to be disconnected. This doesn't prevent novice harvesters and mules from botting, since the accounts are expendable anyway. At this point however, the bot can only logon using XKore 1 (which takes care of the gameguard syncs) and thus is not really suitable for harvesters or multiple players on a single PC.

I may need to stop work on the webMonitor plugin for the meantime in order to do some updates on the fakeServer. As was discussed before, I'm planing to change it into something that's less of a strain on the host system. Roger - admin of the Brasilian OpenKore forums - made a test using the current game guard and hosted the server publicly. ~200 users were able to connect, but the server gave in after a few hours of hammering.

VCL suggested that I use a pull protocol, and said that HTTP is a good transport protocol. I guess I can use Base::Webserver for this, since I already have experience in using that module form the webMonitor plugin.

What I'm afraid of is that this packet change would also come to pRO. Not that I won't be able to bot anymore, but I'm already expecting that botters from pRO would definitely flood the forums (yet again) asking how to solve the problem. Or even ask questions like they know everything but actually know nothing X_X

Posted by kaliwanagan at 5:49 AM
Categories: OpenKore

Thursday, January 12, 2006

OpenKore webMonitor

Lately I've been very busy with the webMonitor that I haven't been able to update this blog. It's just that I enjoy coding more than I enjoy speaking my mind :)

Posted by kaliwanagan at 7:47 AM
Categories: OpenKore

Thursday, December 22, 2005

idRO Problems- solved

The packet problems in idRO got solved - not because of any action on our part, but because the idRO provider decided to change the serverType to 0.

It was a nice challenge though. Too bad it ended all so quickly.

At least we got some packet tools written. jojobaoil made a plugin to automatically dissect a packet, whch can be helpful for easily figuring out packet formats. Also, we had some promising people helping out - seems like the best talents can be found during a crisis.

Posted by kaliwanagan at 10:39 AM
Categories: OpenKore

Wednesday, December 21, 2005

idRO Packet Problems - more solutions

id-mardi had observed that the attack/sit/stand packets change only after a sync packet has arrived. After a closer inspection of the packets posted, it turns out that the packet morphs when the client *sends* the sync packet, not when it receives the response. This brings more to light the nature of how the attack/sit/stand packet changes in relation to time.

Posted by kaliwanagan at 6:34 PM
Categories: OpenKore

idRO Packet Problems - partial solution

So far, with the help of a few idRO players, I've managed to track down the similar packets between the old format and the new. The only problem packets that remain (and that have variable lengths) are:

  • sendAttack (and along with it sendSit and sendStand since they use the same format)
  • sendSkillUse
  • sendSkillUseLoc

It would seem that idRO has changed the packets responsible for aggressive behaviors, while not changing those packets that are "benign" (i.e. will not cause an increase in level or zeny). Looks like idRO wants to curtail the bot population, but do not want to destroy their userbase. In my opinion, it's like a concession of sorts - bots still exist but can't harm nor take advantage of being automated, but they are also severely crippled. Bot users would probably hold on to their acocunts longer, and (they hope) would rediscover the fun of playing manually.

Posted by kaliwanagan at 2:59 PM
Categories: OpenKore

idRO Packet Problems

idRO just had their server maintenace today, and are experiencing severe problems regarding certain packet changes. Most notably, the attack/sit/stand packet has changed - it now has a variable length. This means that the packet length isn't fixed and changes randomly. There are other packet changes, but the attack/sit/stand packet is the most interesting.

This is really frustrating; not only would figuring out the packet format be complicated, but I have to deal with more morons flooding the forums with stupid posts.

Like we don't know what is happening with their server X_X

Posted by kaliwanagan at 10:25 AM
Categories: OpenKore

Thursday, December 15, 2005

OpenKore plugin: checkSelfCondition

I just made a plugin for OpenKore called checkSelfCondition. The plugin hooks into the checkSelfCondition call in Misc.pm and is designed to extend the function, incorporating various other checks that won't be needed by most people, but would be useful for power users.

Also, I want the plugin to serve as some sort of inspiration to other people on how easy it is to contribute to OpenKore. Even if they don't have CVS access, OpenKore's plugin subsystem allows contributors to share their work with other people and benefit from the peer-review process in open source development. After all, I started from coding plugins, until VCL gave me CVS write access to the project and named me a developer.

Posted by kaliwanagan at 2:35 PM
Categories: OpenKore

Friday, December 09, 2005

OpenKore 1.9.0 has been released

After a very long wait, OpenKore beta version 1.9.0 has been released. View the announcement here 

This is the changelog:

==================
### 1.9.0
==================

*** INCOMPATIBLE CHANGES ***:
- NPC IDs are no longer supported, you must use the location syntax.
- A few more statuses have been renamed such as 'Cartboost' status renamed
  to 'Cart Boost' for consistency with the skill name.
  'Hide' to 'Hiding', too.
- \$remote_socket parameter removed from some Network/Send.pm functions:
  sendCartAdd sendCartGet
- hp, sp options now have a new format.
  hp > 50  - means more than 50hp
  hp > 50% - means more than 50 percent of you hp.
- Old hp_upper,sp_upper removed, use hp sp instead
  Old minAggressives, maxAggressives skill block options removed.
  Use aggressives instead.
- You must use the new tables/emotions.txt or emotions won't work.
  The "e" command now uses the RO client commands instead of the number.
- Vigor condensation renamed to Vigor Condensation for consistency
- equipAuto onTeleport changed to teleportAuto_equip_{slot}
  equipAuto skills is no longer used, use <skill slot>_equip_<slot>
  equipAuto syntax is changed, read below.
  equipAuto_def is removed.
- spells.txt "Big Magic (SG/LoV/MS/GX)" renamed to "Big Magic".
- avoid_ignore_# is replaced with avoidGM_ignoreList (see below)
- equipAuto misses changed to target_misses
  equipAuto totalMisses changed to target_totalMisses
- 'party create "<party_name>"' command renamed to
  'party create <party_name>'.
- 'Pink Spring' renamed to "Roki's Weil" to match the skill name
  in spells.txt (for whenGround/whenNotGround).
- All FileParsers must return 1 if the file was parsed successfully.
  Otherwise, kore will bail out with an error.
- Warp Portal-related spells.txt entries translated from Japanese.
- Cards in item names are now separated by ':' instead of ',', because
  ',' is also used as a separator in a list of items.
- Obsolete command 'equipment' removed; use 'eq' instead.

Bug fixes:
- 'i' command now displays equipped arrows under Equipment (Equipped).
- Fix useSelf_item dcOnEmpty and getAuto buggyness caused by lag.
- Don't try to statsAddAuto before the stat point info has been received.
- Shop title in shop.txt is detected better.
- Fix autoTalkCont (caused next step to happen too fast).
- Don't redirect command output if XKore_silent is enabled.
- Fix "party leave" crash when not in party.
- Only teleport-on-hit from monsters if they do not miss.
- Hopefully fix daggersins' weapons ending up on the wrong hand.
- Guild auto deny timeout was not included in timeouts.txt.
  Deal auto deny timeout was not being used.
- 'private 1' in servers.txt is also effective when changing map server.
- Fix crash with the weight command.
- Give an error if someone tries to storage an equipped item.
- Show unknown for public chat distance if player is off screen.
- Don't display PVP rank if you're not in PVP. (Workaround for server-side
  bug that still sends you your PVP rank for some reason.)
- Detect NPC spawning (only happens when server first loads).
- Don't storage or cart-add pets if they are in use (caused disconnect).
- Show full class name in the pl # command.
- 'as' command works now when attacking players.
- Detect when a targeted player dies ("attack" ai_seq will be dequeued).
- Fix cartAuto crash bug for Perl 5.6. Caused by:
  delete $cart{'inventory'}[$index];
- Don't show warnings when "vl" command has weird shops.
- Don't attempt to gather items near portals lest they suck you in.
- Fix avoid list for playerIDs near you.
- Faster buy/sellAuto conversation (Use steps "b e" and "s e" instead of "b").
- teleportAuto_hp responds faster now (is checked whenever you get attacked.)
- avoidGM was always happening if avoidGM_namePattern was blank.
- attackComboSlot fixed with Tiger Knuckle Fist and Chain Crush Combo.
- teleportAuto_equip should work for Teleport lv2 now too.
- Fix error message for if we are missing skill or item descriptions.
- Don't check cards on pet eggs (caused weirdly named eggs).
- Check storageAuto more reliably now (a bot logging in with insufficient
  supplies will now storageAuto before lockMap).
- Replace "version # failed." with a better error message.
- Zeny added to a deal via 'deal add z <#>' will now be correctly added
  when the deal is finalized automatically by dealAuto.
- Standpoint option in buyAuto and sellAuto did not work.
- Fixed mon_control <attack> syntax for monsters marked as Always 
  Aggressive (2). The bot won't attack anymore if the monster is 
  impossible to attack (blocked by walls) or if it is being already 
  attacked by someone else.
- Fixed monsters listed in the monsters condition of equipAuto now
  doesn't necessarily have to be your attack target.
- encrypt/decrypt was mangling some packets (at least on serverType 2; 
  I'm not sure for the other RO's) causing disconnections and
  unparsed erros.
- useSelf_skill equip_rightHand and similar constructs will now
  correctly equip items whose names have commas in them.
- Command storage will now check first if the storage has been opened.
- Use sane default for $config{sleepTime} when it is missing from
  Interface.pm.
- openkore will now realize immediately when a portals.txt NPC conversation
  terminated prematurely.
- Guild member list is correctly refreshed when you type 'guild' now.
  Previously, if you left a guild and joined another guild with less players,
  then some of the players from the old guild would falsely show up in the
  roster.
- Display walk speed in 'pl <#>' command at correct resolution.
- Avoid skill will move (3,3) instead of (2,2) blocks, e.g. for
  avoiding Minorous' Hammer Fall. Hopefully this will work better.
- Match.pm can now be reloaded via 'rc' command (it wasn't registered properly
  in openkore.pl).
- Match::inventoryItem() will no longer return false items in holes
  in the inventory array.
- On servers with the new party packet (01E9) follower bot will now correctly
  follow its master through portals.
- Bot should no longer cast teleport non-stop when teleportAuto_useSkill is 2,
  teleportAuto_equip is set, and another player is on screen.
- attackLooters will check for mon_control settings before attacking looters.

New features:
- Console::Unix interface no longer has "Press ENTER to continue"
  prompt, since UNIX terminals generally don't close when openkore exits.
- Your level/job level is now displayed when you level up.
- Player names are now cached, so that they don't have to be re-retrieved
  as often. This can save a lot of bandwidth, especially when you're
  walking in town.
- When teleportAuto_useSkill > 0, always cast Teleport skill if we are
  trying to respawn to saveMap (lets us auto-detect it).
- You must specify target_dead 1 to use a skill on a dead person.
  This will prevent any problems where the bot keeps trying to use a skill
  like Heal or Blessing on someone who is dead.
- You can now attack looters even if the are normally ignored
  set attackLooters to 1 in config.txt
- 'cart add' and 'cart get' commands now accept names.
- 'eq slots' displays list of slotnames
  'eq slotname item' will try to equip item in slotname
- Fractional weight in inventory is now displayed.
- Show proper SP for all skills (auto-detected).
- Improved storage list, sorts the items by category like the real client.
- Emotion command now uses the real commands from the RO client.
  Example: e thx
- When casting the Teleport skill, openkore will wait for the skill to
  be successfuly cast before actually teleporting, unless this is an
  emergency teleport (e.g. teleportAuto_deadly). (Looks less bot-like.)
  Be sure to update timeouts.txt to get ai_teleport_retry and
  ai_teleport_delay.
- Shop prices are now formatted with thousands separators.
- The 'vender' command now shows vender's name and index.
- Support "That person is in another deal." error.
- 'pl' command now displays everyone's level.
- tables/skills.txt: updated for almost all advanced class skills now.
- New "<player> got married!" message.
- Taekwon, Star Gladiator, Flying Star Gladiator and Soul Linker jobs
  are now recognized.
- 'exp' command will now display number of bytes sent and received.
  Helpful if you need to know your bandwidth usage.
- Error message when you specify an unknown skill name in skillsAddAuto.
- 'eq <item>' command now only matches unequipped items.
- When an item is identified, you will see its inventory index now.
- openkore will now return a fatal error if an !include file is missing
  in config.txt.
- Bot will now follow its master through warp portals.
- 'guild info' command now displays ally list.
- The vending limit has been increased to 1 billion (1,000,000,000) zeny.
- Support for bulk-selling items with the 'sell' command. Items
  are now put in a sell list instead of sold immediately.
  See the 'New commands' section.
- 'i desc' command now accepts item names.
- (partial) support for oRO commercial servers. Use serverType 6 for this.
- New Win32::GUI interface. Run 'openkore --interface=Win32' to enable.
- New Brehensam checkLineSnipable() algorithm. Maybe it'll work better
  in some cases, though it's still not perfect.
- Hunters that keep trying to shoot at something they don't really have
  LOS to will now "Cannot reach or damage target, dropping target"
  correctly (AI::args->{unstuck}{count}).
- Show coordinates of players when they are added/removed from 'pl'.
  (TODO: Do this for monsters too.)
- Ability to bypass the RO client's bot detection (the "Do not use bots!"
  message).
- Implemented 0189 no_teleport packet so that "Unavailable Area To
  Teleport/Memo" message is now displayed.
- 'is' command now accepts item names.
- Implement fail code 2 in packet deal_add_you. (happens when you try to
  trade wedding rings)

New commands:
- getplayerinfo (number)
  Ask the server for the name of the object with that ID. You will not
  see the reply unless you have debug level 2.
- storage addfromcart <cart_item> [<amount>]
  storage gettocart <storage_item> [<amount>]
  Support for adding/getting items directly to/from merchant cart
- storage [<eq|u|nu>]
  Only list equipments (eq), usable (u), or non usable (nu) items.
- whoami
  Displays your character and account ID.
- damage
  Displays the monsters and skills that damaged you.
- help [command]
  not new but updated and more useful
  you get now all options for a specific command
- guild break <guild name>
  Disband your guild.
- guild create <name>
  Create a guild.
- guild kick <list number> <reason>
  Kick a guild member out of the guild.
- storage desc <storage item #>
  Display storage item description.
- eq
  Lists what you are wearing in each equipment slot.
- take first
  Takes the first item on the ground.
- The sell commands have been changed. The new sell commands are:

  sell <inventory item #> [<amount>]
Put inventory items in sell list.

  sell list
Show items in the sell list.

  sell done
Sell everything in the sell list.

  sell cancel
Clear the sell list.

- The exp commands have been changed. The new exp commands are:

  exp
only shows exp

  exp report
shows the old exp report (shows everything)

  exp monster
shows monster killed count only

  exp item
shows item change count only

  exp reset
resets the exp report

New config options:
- partySkill: target_dist (range)
  This is the same as target_dist for attackSkillSlot.
  Only use the skill if the player is in the given range.
- partySkill: isSelfSkill (flag)
  Use this skill on yourself after checking the party conditions.
  Useful for Magnificat or Gloria.
- cachePlayerNames (flag)
Turns player name caching on or off.

  cachePlayerNames_duration (seconds)
Cache player names for a maximum time of (seconds). The default is
900 seconds (15 minutes).

  cachePlayerNames_maxSize (number)
Maximum cache size. The default is 100.

- storageAuto_keepOpen (flag)
  Set to true if you want to keep storage open after storageAuto sequence.
  Only enable this if you know what you're doing.
  (Note: You cannot use items while storage is open.)
- itemsTakeAuto_new (flag)
  Activates experimental new item taking code; might work better for
  archers who keep failing to take items.
- "s" sequence for NPC talk steps; the client sends this when you click
  "Sell" at a shop NPC.
- attackLooters (flag)
  Enables Looter attack. (Warning attacks all monsters.).
  Will only attack if item_pickup is not 0
- teleportAuto_dropTargetKS (flag)
  Teleport if Kore drops target due to kill-steal. This is a workaround
  for constantly dropping and selecting the same target.
- logConsole (flag)
  Log everything that openkore prints on the console to logs\console.txt.
- attackAuto_notInTown (flag)
  Don't attack monsters while inside a town.
- new option in buyAuto: zeny (range)
  only buy if you have the specified Zeny
- teleportAuto_equip_{slot} 
  use this instead of equipAuto onTeleport
  you can use all slots but it is recommended to
  use only either right or left Accessory slot
- buyAuto now uses checkSelfCondition. This means you can now specify options
  like hp, sp, and other options in useSelf* in your buyAuto config block e.g.

  buyAuto Monster's Feed {
npc prontera 64 125
distance 5
minAmount 0
maxAmount 100
hp < 20%
inInventory Red Potion <5, Yellow Potion <2
  }

- inCart
  much like its inInventory counterpart and uses the same syntax. Use this to
  check cart inventory before executing a config block.
- dcOnStorageFull (flag)
  If the character's weight >= itemsMaxWeight_sellOrStore just after having
  completed storageAuto, then log out because something is wrong.
- getAuto: dcOnEmpty (flag)
  If true, kore will disconnect if the amount of the item in inventory plus
  storage is below minAmount.
- dcOnLevel (level)
  If true, then when you gain a level, kore will log out if you are now
  >= the specified level.
- dcOnJobLevel (level)
  Like dcOnLevel, but for job levels.
- avoidGM_ignoreList (list of names)
  Ignore any player on this list when checking for GMs nearby.
- repairAuto (flag)
  Automatically repair items when using the repair skill on players.
- teleportAuto_search (number)
  Previously this was a flag. Now, set it to the minimum number of
  search-monsters that must be on the screen (area attack bots can
  use this to find mobs).
- attackComboSlot: autoCombo (flag)
  This will automatically calculate the waitBeforeUse time for you.
- notOnAction condition (opposite of onAction)
- logAppendUsername (flag) this will add _username_char# to your log files
- items_control.txt: store flag 2
  If you set the store flag to 2, it will automatically transfer items out of
  your cart into storage as well as from the inventory. Example:
  Zargon 0 2 0 1
  Automatically put Zargon into the cart while leveling, then storage later.
- cartMaxWeight (weight amount)
  Once the cart weight is above this amount, no longer auto add to cart.
  Default in config.txt is 7900, 100 less than the maximum.
- timeouts.txt:
  ai_cartAutoCheck 2
  Check if we need to do cartAuto functions every x seconds.
- inMap and notInMap (list)
  These shared block options are for using a block when you're (not) on a
  certain map.
- itemsMaxNum_sellOrStore
  Trigger the autosell AI sequence when the total amount of items in inventory is
  equal to or exceeds the specified amount. Similar to itemsMaxWeight_sellOrStore
  but uses amounts instead of weight percentage.
- equipAuto: target (monsters)
  If this option is set, auto-equip when you are attacking any of the
  specified comma-separated list of monsters.
- equipAuto:
  target_deltaHp
  target_dist
  target_timeout
  target_whenGround
  target_whenNotGround
  target_whenStatusActive
  target_whenStatusInactive
  These conditions are the same as those used in partySkill,
  but tested on your target monster.
- route_maxNpcTries
  Default 5. If an NPC conversation is used to reach your destination,
  this is the maximum number of times it will try to talk to that NPC before
  giving up and plotting an alternate path.
- XKore_bypassBotDetection
  Set to 1 if you want Kore to try to bypass the RO client's bot detection.
  This feature is experimental and has only been tested with the iRO client,
  so enable this at your own risk!
- timeouts.txt: ai_route_npcTalk
  Default 10. If an NPC conversation used to reach your destination takes
  longer than this, it will assume failure.
- clientSight
  Some private servers like Freya will send actor packets from a ridiculous
  distance from the bot, and use this for automated banning. This config option
  will make Kore ignore those actors and hopefully avoid auto-bans.

Internal:
- Obsolete getActorHash() function removed (use Actor::get() instead).
- The format of $npcs_lut has changed, IDs are completely abandoned.
- Attack AI routines should now support players as well.
- New Match::cartItem() function, similar to Match::inventoryItem().
- The S and L pack types have been completely removed. Do not use these
  anymore; use v and V respectively.
- 'ai print' command should mangle less characters into '.'.
- Moved packets to Network/Receive.pm:
	  cart_item_added
	  cart_item_removed
	  item_used
- New whenFlag/whenNotFlag condition references %flags in checkSelfCondition.
  Currently, only plugins or 'eval' command could change %flags so this is
  only useful to developers (you can turn on/off groups of skill blocks easily
  using %flags now).
- whenGroundStatus() now takes a third argument $mine which will make it only
  check for spells originating from you.
- inventory/storage/cart item added/removed packets now set $args->{item}
  so that plugins can access it.
- $ai_v{temp}{pvp} moved to $pvp because the former seems to get erroneously
  cleared sometimes.
- New Actor#snipable method; boolean whether you have snipable LOS to the
  actor.
- "Player Connected" did not trigger 'player' plugin call.
- Store $char->{attack_delay}. You attack once every
  $char->{attack_delay}/500 seconds.
- Use bitshift-packing/unpacking to deal with coordinates in the protocol.
- Support new packets 0229, 022A, 022B, 022C, 01E9 which caused some official
  servers (like mRO and pRO) to not handle actors correctly.

Credits:
- doenet: chatLangCode bugfixes.
- isieo: attackComboSlot fixes/improvements.
- piroJOKE: new emotions, new fields.
- hakore: commanddescriptions.txt, avoidGM_ignore/deltaHp fix,
  standpoint bug, equipAuto bug, storage desc command, attackLooters fix
- illusionist: fix for force-aggressive monsters not being dropped when no LOS,
  Follow master through warp portal.
- clovanzo: Louyang portals
- h4rry84: Auto Berserk/Preserve status support.
- jojobaoil: Bit-shift packing code, RO client bot detection bypassing,
  network & XKore stack overhaul.
- amacc_boy: Win32::GUI interface
- woeisiong: improvement in exp command
- punkpudding: factor meditatio in smartHeal
- mondlicht, ZLord: clientSight            

It's been one hell of a release, with really big changes in terms of features, internals, and overall performance.

Posted by kaliwanagan at 7:28 PM
Categories: OpenKore

Sunday, December 04, 2005

Rescuing Linux

Ahh, the irony of it all.

I tried updating my OpenSUSE using the edge repository, and I experienced a few segfaults while running some programs. It turns out glibc wasn't properly updated (I don't really know if it was my fault or if the edge repository was *that* unstable).

I had to boot into Windows and burn a new copy of the OpenSUSE DVD (I gave the original one away) in order to rescue my system. I'm especially glad of the way the filesystem is designed, as my /home and preferences remained the same way as I have customized them.

Most stories are about Linux rescuing Windows. Now I have experienced needing to use Windows (since that's the only other Operating System I have installed on this computer) to rescue Linux.

Posted by kaliwanagan at 4:16 AM
Categories: OpenKore