Repetable Exp Quest

International

Moderator: Moderators

yomega
Noob
Noob
Posts: 6
Joined: 21 Oct 2009, 20:04
Noob?: No

Repetable Exp Quest

#1 Post by yomega »

Configuring repeatable exp quests | 2.0.7

I am trying to find a efficient and effective way to have Openkore go to a map start an exp quest kill the set amount of monsters and return to the npc to collect the reward and start another quest.

I have done some searching on the forum and found a option that set a macro to count the monsters you kill.
Subject: Counting Kills

The problem I have with this solution is that the counting would be done locally witch could lead to problems if you part time play the same account or if you restarted the bot it may reset the counter. And I believe it would be more efficient to have Openkore read the packet data sent from RO to tell it when you are done the quest.
I ran Openkore in debug mode and after comparing different situations i found that Openkore received a packet 02B5 16 bytes after killing one of the quest monster on the map while the quest is active and under the kill cap

Code: Select all

[ 80/100] You attack Monster Coco (0) - Dmg: 49 (delay 44.5)
Received packet: 00B0    [ 8 bytes]  [Your Status Info]
Received packet: 008A    [29 bytes]  [Item take / attack damage / sit / stand]
[ 74/100] You attack Monster Coco (0) - Dmg: 98 (delay 44.5)
Received packet: 0088    [10 bytes]  [Unit Position]
Received packet: 02E1    [33 bytes]
[ 74/100] Monster Coco (0) attacks you - Dmg: Miss! (delay 86.4)
Received packet: 0080    [ 7 bytes]  [Unit Lost (Died, Disappeared,
Disconnected)]
Monster Died: Coco (0)
Received packet: 00B1    [ 8 bytes]  [Your Status Info (Exp, Job Exp, Zeny)]
Exp: 9973
Received packet: 00B1    [ 8 bytes]  [Your Status Info (Exp, Job Exp, Zeny)]
Job Exp: 6281
Exp gained: 116/76 (0.74%/0.50%)
Received packet: 009E    [17 bytes]  [Item Appeared]
Item Appeared: Acorn (1) x 1 (314, 279)
Received packet: 009E    [17 bytes]  [Item Appeared]
Item Appeared: Animal Skin (2) x 1 (315, 278)
Received packet: 02B5    [16 bytes]
Received packet: 00B0    [ 8 bytes]  [Your Status Info]
Packet SENT_BY_CLIENT: 007E - Sync
Received packet: 007F    [ 6 bytes]  [Received Sync]
Packet SENT_BY_CLIENT: 0089 - Attack / Sit / Stand
Received packet: 008A    [29 bytes]  [Item take / attack damage / sit / stand]
I belive it would be most effective to set these quest right into the config.txt file or have them added with a !include. Assuming the npc would work like kafra storage I beleve it would be set like this for a 150 kill quest for Coco's.

Code: Select all

questAuto 1
questAuto_npc mjolnir_01 293 20
questAuto_distance 5
questAuto_npc_type 3
questAuto_npc_steps c c r1 c r1 c r3 n
questAuto_password
questAuto_keepOpen 0
questAuto_useChatCommand
relogAfterQuest 0
minQuestZeny 0
I currently play on Iro Valkyrie but this would also aply to the premium servers as well I also have a list of all the repetable exp quest locations if it would help.
Repetable Exp Quests
Image
EternalHarvest
Developers
Developers
Posts: 1798
Joined: 05 Dec 2008, 05:42
Noob?: Yes

Re: Repetable Exp Quest

#2 Post by EternalHarvest »

yomega wrote:The problem I have with this solution is that the counting would be done locally witch could lead to problems if you part time play the same account or if you restarted the bot it may reset the counter. And I believe it would be more efficient to have Openkore read the packet data sent from RO to tell it when you are done the quest.
As I know, OK already does this (receiving monster kill counter) - check the "quest" command.
yomega wrote:I belive it would be most effective to set these quest right into the config.txt file or have them added with a !include. Assuming the npc would work like kafra storage I beleve it would be set like this for a 150 kill quest for Coco's.

Code: Select all

questAuto 1
...
Maybe somebody who needs that will make plugin or macros and share it. Everything needed is checking OpenKore's quest data after killing a monster and simple move+talknpc, as it seems?
yomega
Noob
Noob
Posts: 6
Joined: 21 Oct 2009, 20:04
Noob?: No

Re: Repetable Exp Quest

#3 Post by yomega »

EternalHarvest wrote:

Code: Select all

questAuto 1
...
Maybe somebody who needs that will make plugin or macros and share it. Everything needed is checking OpenKore's quest data after killing a monster and simple move+talknpc, as it seems?
Ya I guess that would be alot simpler than adding a new option into the config file lol :D
EternalHarvest wrote: check the "quest" command.
Im sorry if im a noob but where is the quest command? I tryed typing it into the console and it didnt recognize it.
Image
User avatar
twist3d
Testers Team
Testers Team
Posts: 94
Joined: 09 Sep 2009, 04:34
Noob?: No
Location: USA

Re: Repetable Exp Quest

#4 Post by twist3d »

Okay this is how I have done it, it isn't flawless by any means but it works... The biggest problem I have is when its turning in the quest, if it dies or D/C's it doesn't pick the quest back up.

Put this in your macros.txt

Code: Select all

automacro checkQuest {
#	hook packet/quest_update_mission_hunt
	hook target_died
	exclusive 1
	call {
		if (@config(alligatorQuest) != 1 || $.lvl > 80) goto next
		$temp1 = @eval($::questList->{60121}->{missions}->{1271}->{count})
		if ($temp1 == 150) call alligator
		:next		
		if (@config(hodeQuest) != 1 || $.lvl > 60) goto nextAgain
		$temp2 = @eval($::questList->{60106}->{missions}->{1127}->{count})
		if ($temp2 == 150) call hode
		:nextAgain
		if (@config(frilldoraQuest) != 1 || $.lvl > 65) goto lastOne
		$temp3 = @eval($::questList->{60136}->{missions}->{1119}->{count})
		if ($temp3 == 150) call frilldora
		:lastOne
		if (@config(goatQuest) != 1 || $.lvl > 65) goto end
		$temp4 = @eval($::questList->{60136}->{missions}->{1372}->{count})
		if ($temp4 == 150) call goat
		if (@config(iceQuest) != 1 || $.lvl > 98) goto end
		$temp5 = @eval($::questList->{60136}->{missions}->{1777}->{count})
		if ($temp5 == 150) call iceMan
		:end
	}
}

macro iceMan {
	do move ice_dun03 154 30
	pause 1
	do talk @npc (154 27)
	pause 2
	do talk @npc (154 27)
	pause 2
	talk resp 0
	pause 2
	talk resp 0
	pause 2
	talk resp 2
}

macro frilldora {
	do move moc_fild17 68 270
	pause 1
	do talk @npc (66 273)
	pause 2
	do talk @npc (66 273)
	pause 2
	do talk resp 0
	pause 2
	do talk resp 0
	pause 2
	do talk resp 2
	:end
}

macro hode {
	do move moc_fild17 210 342
	pause 1
	do talk @npc (208 346)
	pause 2
	do talk @npc (208 346)
	pause 2
	do talk resp 0
	pause 2
	do talk resp 2
	:end
}

macro alligator {
	do move cmd_fild01 360 250
	pause 1
	do talk @npc (362 256)
	pause 2
	do talk @npc (362 256)
	pause 2
	do talk resp 0
	pause 2
	do talk resp 2	
	:end
}

macro goat{
	do move ein_fild06
	do move ein_fild06 80 170
	pause 1
	do talk @npc (82 171)
	pause 2
	do talk @npc (82 171)
	pause 2
	do talk resp 0
	pause 2
	do talk resp 2
	:end
}
And then in the config.txt add:

hodeQuest 0
frilldoraQuest 0
alligatorQuest 0
goatQuest 0
iceQuest 0

obviously 0 is off and 1 is on, just put them on the map, get the quest the first time and then just check on 'em every few hours with "quest list" to make sure they are still on said quest.
Member since 09/09/09, botter since its first creation days. Thanks Kura for the original Kore.
yomega
Noob
Noob
Posts: 6
Joined: 21 Oct 2009, 20:04
Noob?: No

Re: Repetable Exp Quest

#5 Post by yomega »

twist3d wrote:

Code: Select all

automacro checkQuest {
#	hook packet/quest_update_mission_hunt
	hook target_died
	exclusive 1
	call {
		if (@config(alligatorQuest) != 1 || $.lvl > 80) goto next
		$temp1 = @eval($::questList->{60121}->{missions}->{1271}->{count})
		if ($temp1 == 150) call alligator
		:next		
		if (@config(hodeQuest) != 1 || $.lvl > 60) goto nextAgain
		$temp2 = @eval($::questList->{60106}->{missions}->{1127}->{count})
		if ($temp2 == 150) call hode
		:nextAgain
		if (@config(frilldoraQuest) != 1 || $.lvl > 65) goto lastOne
		$temp3 = @eval($::questList->{60136}->{missions}->{1119}->{count})
		if ($temp3 == 150) call frilldora
		:lastOne
		if (@config(goatQuest) != 1 || $.lvl > 65) goto end
		$temp4 = @eval($::questList->{60136}->{missions}->{1372}->{count})
		if ($temp4 == 150) call goat
		if (@config(iceQuest) != 1 || $.lvl > 98) goto end
		$temp5 = @eval($::questList->{60136}->{missions}->{1777}->{count})
		if ($temp5 == 150) call iceMan
		:end
	}
}
I never evan thought to put al lvl cap on it this is what i have for a macro
http://forums.openkore.com/viewtopic.php?f=32&t=7731
as for if it d/c or dies im thinking about putting another macro to check on map load
Image
LethargicStupor
Noob
Noob
Posts: 2
Joined: 11 Dec 2009, 00:04
Noob?: No

Re: Repetable Exp Quest

#6 Post by LethargicStupor »

Awesome. After going through manual, the best I could do was get the wizard to "command" the leechers to get quest when he counted 160 kills. It was.... not very reliable.

Hmm... should probably remove the iceman since ice titan quest isn't up anymore? The next level up would be loli ruri and disguises but... given the large amount of agros there I don't think it would work very well. You'd have to bring a good party.
kisna
Noob
Noob
Posts: 15
Joined: 10 May 2009, 11:00
Noob?: Yes

Re: Repetable Exp Quest

#7 Post by kisna »

well i did try to use this macro but the problem is the bot does not turn it as soon as it hits 150...it does it very late..maybe if it goes out of the map or goes for storage or due to death returns to save point....any idea wat might be the problem?????

should i be changing something or maybe any tip on wat i should be doing???

Thnx :?
User avatar
twist3d
Testers Team
Testers Team
Posts: 94
Joined: 09 Sep 2009, 04:34
Noob?: No
Location: USA

Re: Repetable Exp Quest

#8 Post by twist3d »

As of how my code was written, it only checks when its (target) dies. If you make the following change, it will change every time the quest itself is updated. The problem with this is when you hit 150, if it errors for some reason it will never receive that it has hit 150 again, therefor never triggering to turn in the quest again. But this may work better for you, give it a go and see what happens, to test my theory just d/c your bot when its already at 150 and start it up again on the map to see what happens after it kills another monster of said quest.

Change
# hook packet/quest_update_mission_hunt
hook target_died

to

hook packet/quest_update_mission_hunt
# hook target_died
Member since 09/09/09, botter since its first creation days. Thanks Kura for the original Kore.
kisna
Noob
Noob
Posts: 15
Joined: 10 May 2009, 11:00
Noob?: Yes

Re: Repetable Exp Quest

#9 Post by kisna »

twist3d wrote:As of how my code was written, it only checks when its (target) dies. If you make the following change, it will change every time the quest itself is updated. The problem with this is when you hit 150, if it errors for some reason it will never receive that it has hit 150 again, therefor never triggering to turn in the quest again. But this may work better for you, give it a go and see what happens, to test my theory just d/c your bot when its already at 150 and start it up again on the map to see what happens after it kills another monster of said quest.

Change
# hook packet/quest_update_mission_hunt
hook target_died

to

hook packet/quest_update_mission_hunt
# hook target_died
Still same thing....does not submit when it touches 150 mark.... :?
User avatar
twist3d
Testers Team
Testers Team
Posts: 94
Joined: 09 Sep 2009, 04:34
Noob?: No
Location: USA

Re: Repetable Exp Quest

#10 Post by twist3d »

what version of kore are you using?
Member since 09/09/09, botter since its first creation days. Thanks Kura for the original Kore.