recv packet problem

Private server support - Only post connectivity issues in the subforum!

Moderator: Moderators

Message
Author
Tieol
Noob
Noob
Posts: 10
Joined: 02 Apr 2017, 03:50
Noob?: No

Re: Old 2008_01_02a Monsters appear as PLAYERS

#11 Post by Tieol »

'022A' => ['actor_exists', 'a4 v3 V v10 a4 a2 v V C2 a3 C3 v', [qw(ID walk_speed opt1 opt2 option type hair_style weapon shield lowhead tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 stance sex coords xSize ySize act lv)]], # 58 # standing

'0078' => ['actor_exists', 'C a4 v14 a4 a2 v2 C2 a3 C3 v', [qw(object_type ID walk_speed opt1 opt2 option type hair_style weapon lowhead shield tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 stance sex coords xSize ySize act lv)]], # 55 #standing

#'02EC' => ['actor_exists', 'C a4 v3 V v5 V v5 a4 a4 V C2 a6 C2 v2', [qw(object_type ID walk_speed opt1 opt2 option type hair_style weapon shield lowhead tick tophead midhead hair_color clothes_color head_dir guildID emblemID opt3 stance sex coords xSize ySize lv font)]], # 67 # Moving # TODO: C struct is different

User avatar
SkylorD
Moderators
Moderators
Posts: 1166
Joined: 16 Dec 2011, 02:53
Noob?: No
Location: Brazil
Contact:

Re: Old 2008_01_02a Monsters appear as PLAYERS

#12 Post by SkylorD »

Image
Learn rules

Tieol
Noob
Noob
Posts: 10
Joined: 02 Apr 2017, 03:50
Noob?: No

Re: Old 2008_01_02a Monsters appear as PLAYERS

#13 Post by Tieol »

Offering payment for solution. details discussed over irc, or PM

Code: Select all

Move You - done
Route You - trimming down solution (19) by 8 steps
Route You - next step moving to (255, 63), index 10, 11 steps left
Move You - (re)trying
<< Received packet:      0095 - Unit Get Info [30 bytes]
Move You - (re)trying
<< Received packet:      0078 - actor_display (actor exists) [55 bytes]
Player Exists: Unknown #110002481 (3) Level 1 Girl  (268, 45)
<< Received packet:      0087 - You Move [12 bytes]
You're moving from (253, 61) to (255, 63) - distance 2.8
<< Received packet:      0080 - Unit Lost (Died, Disappeared, Disconnected) [ 7 bytes]
Player Disappeared: Unknown #110002481 (3) Girl  (268, 45)
<< Received packet:      0078 - actor_display (actor exists) [55 bytes]
Player Exists: Unknown #110574008 (3) Level 13 Girl  (270, 55)
<< Received packet:      0087 - You Move [12 bytes]
You're moving from (254, 62) to (255, 63) - distance 1.4
Move You - done
Route You - trimming down solution (11) by 7 steps
Route You - next step moving to (255, 63), index 3, 4 steps left
Move You - (re)trying
<< Received packet:      0095 - Unit Get Info [30 bytes]
Move You - (re)trying
<< Received packet:      0087 - You Move [12 bytes]
You're moving from (255, 63) to (255, 63) - distance 0.0
<< Received packet:      0087 - You Move [12 bytes]
You're moving from (255, 63) to (255, 63) - distance 0.0
Move You - done
Route You - trimming down solution (4) by 4 steps
You reached the destination.
Map Router has finished traversing the map solution
<< Received packet:      0095 - Unit Get Info [30 bytes]
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Hornet (2) Level 8 Girl  - (263, 71) -> (265, 66)
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Ambernite (3) Level 13 Girl  - (270, 55) -> (280, 50)
<< Received packet:      00C0 - Emotion [ 7 bytes]
[dist=28.2] Ambernite (3): *Sweat*
<< Received packet:      0088 - Unit Position [10 bytes]
<< Received packet:      022C - actor_display (actor moved) [65 bytes]
Player Moved: Unknown #26216087 (1) Level   Novice - (206, 128) -> (0, 13)
<< Received packet:      007F - Received Sync [ 6 bytes]
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Hornet (2) Level 8 Girl  - (265, 66) -> (261, 70)
<< Received packet:      008A - Item take / attack damage / sit / stand [29 bytes]
You are sitting.
HP is now > 100
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Hornet (2) Level 8 Girl  - (261, 70) -> (260, 64)
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Ambernite (3) Level 13 Girl  - (271, 54) -> (267, 56)
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Hornet (2) Level 8 Girl  - (260, 64) -> (268, 71)
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
NPC Moved: Unknown #110574009 (0) - (271, 51) -> (277, 39)
<< Received packet:      007F - Received Sync [ 6 bytes]
<< Received packet:      0080 - Unit Lost (Died, Disappeared, Disconnected) [ 7 bytes]
NPC Disappeared: Unknown #110574009 (110574009)
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Ambernite (3) Level 13 Girl  - (267, 56) -> (277, 55)
<< Received packet:      0080 - Unit Lost (Died, Disappeared, Disconnected) [ 7 bytes]
Player Disappeared: Ambernite (3) Girl  (277, 55)
<< Received packet:      0086 - actor_display (actor moved) [16 bytes]
Player Moved: Hornet (2) Level 8 Girl  - (268, 71) -> (275, 83)
<< Received packet:      0080 - Unit Lost (Died, Disappeared, Disconnected) [ 7 bytes]
Player Disappeared: Hornet (2) Girl  (275, 83)
I've tried Kore, xkore, xkore2, xkore3, all avail server types...

User avatar
SkylorD
Moderators
Moderators
Posts: 1166
Joined: 16 Dec 2011, 02:53
Noob?: No
Location: Brazil
Contact:

Re: Old 2008_01_02a Monsters appear as PLAYERS

#14 Post by SkylorD »

Don't need to offer nothing.

Just post a link to the server, the connectivity information that u are using.

http://openkore.com/index.php/Connectivity_Guide

How about the recvpackets? if you've extracted, you don't talked nothing about your situation. We're a community ! ^^
Well brother i've posted something such as 0x009b packet and i've saw that you talked about this too.
Then i have removed my comment and posted an idiot meme ^^ because i was so confused that my brain has stopped.

You is going to the doctor at now, because u are feeling something in your stomach. That can't not be really in your stomach but can be in your liver or in your kidney.
You need to give more information to the doctor to get the correct diagnostic. And it can't be a disease, could be a fishbone and nearly of of 10~20 years you will be dying silently. And you thinking that was food intoxication !

We won't help you case your server is using gepard, a gameguard modified, something like that you need to hire someone. ^^

What u want ? in da hand ?

Try to type in console the kill command, to attack the player. kkkkkkkkkkkkk

kill <id>

It would be amazing
Learn rules

Tieol
Noob
Noob
Posts: 10
Joined: 02 Apr 2017, 03:50
Noob?: No

Re: Old 2008_01_02a Monsters appear as PLAYERS

#15 Post by Tieol »

Connectivity:
https://pastebin.com/DJr4P1Yq
recvpackets:
https://pastebin.com/mtshSHaE

I had a chat with mortimal over IRC, and i indicated that i have ripped the RECV packets from another person asking questions RE this same server; this is because i can not find a working URL to jcv ROTOOLS, and all other recvpacket extractors either cannot find the 'entrance point' or simply just don't work with this executable.


Requested "kill id"
https://pastebin.com/nfGitskE

Poring dead, but still listed in the PL as id 2, and does not clear until hitting another map.

User avatar
SkylorD
Moderators
Moderators
Posts: 1166
Joined: 16 Dec 2011, 02:53
Noob?: No
Location: Brazil
Contact:

Re: Old 2008_01_02a Monsters appear as PLAYERS

#16 Post by SkylorD »

Because monster list was not made to show players.
Then it not clean the list, anything like this...
Well i believe that for your server should be mounter an serverType in especial to see it working good and if it applies for all servers. Maybe not
Learn rules

Tieol
Noob
Noob
Posts: 10
Joined: 02 Apr 2017, 03:50
Noob?: No

Re: Old 2008_01_02a Monsters appear as PLAYERS

#17 Post by Tieol »

If i understand correctly, and that is the case; then the starting point is here.
Receive.pm
lines 469-491

Code: Select all

unless (defined $object_class) {
		if ($jobs_lut{$args->{type}}) {
			unless ($args->{type} > 6000) {
				$object_class = 'Actor::Player';
			} else {
				$object_class = 'Actor::Slave';
			}
		} elsif ($args->{type} == 45) {
			$object_class = 'Actor::Portal';

		} elsif ($args->{type} >= 1000) {
			if ($args->{hair_style} == 0x64) {
				$object_class = 'Actor::Pet';
			} else {
				$object_class = 'Actor::Monster';
			}
		} elsif ($args->{type} != 45 && !$jobs_lut{$args->{type}}){ #    $args->{type} < 1000 
			$object_class = 'Actor::NPC';
		}
		else {
		$object_class = 'Actor::Monster';
		}
	}
Say monsters start at 6001, which would satisfy the >=1000 arguement... however this is never allowed to happen. Because the first if statement only checks if greater than 6000...

So... is there a direct way to determine within openkore structure ...

Code: Select all

if ($jobs_lut{$args->{type}}) {
			unless ($args->{type} > 6000 && $args->{MONSTERS NAME VS A DATABASE OF MONSTER NAMES?}) {
				$object_class = 'Actor::Monster';
			} elseif ($args->{type} > 6000) {
				$object_class = 'Actor::Player';
                        } else {
				$object_class = 'Actor::Slave';
			}
?? the way openkore implements that code looks quite arbitrary

Mortimal
Developers
Developers
Posts: 389
Joined: 01 Nov 2008, 15:31
Noob?: No

Re: Old 2008_01_02a Monsters appear as PLAYERS

#18 Post by Mortimal »

the packet is ok there is all needed info in there.

Code: Select all

<< Received packet:      0078 - actor_display (actor exists) [55 bytes]   Apr 17 16:01:17 2017
  0>  78 00 00 06 59 97 06 90    01 00 00 00 00 00 00 EF    x...Y...........
 16>  03 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00    ................
 32>  00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 3D    ...............=
 48>  CA 60 00 00 00 02 00                                  .`.....
EF03 is -> 03EF -> 1007 -> Fabre.... the problem is in:

Code: Select all

'0078' => ['actor_exists', 'C a4 v14 a4 a2 v2 C2 a3 C3 v', [qw(object_type ID walk_speed opt1 opt2 option type hair_style weapon lowhead shield tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 stance sex coords xSize ySize act lv)]],
it is incorrect but i don't know how to fix this and cant find any guide i can understand(((
Please use pin function for uploading your file contents!

Mortimal
Developers
Developers
Posts: 389
Joined: 01 Nov 2008, 15:31
Noob?: No

Re: Old 2008_01_02a Monsters appear as PLAYERS

#19 Post by Mortimal »

I fixed that.

Change Recieve/Sakexe_2007_11_06a.pm to :

Code: Select all

#########################################################################
#  OpenKore - Packet Receiveing
#  This module contains functions for Receiveing packets to the server.
#
#  This software is open source, licensed under the GNU General Public
#  License, version 2.
#  Basically, this means that you're allowed to modify and distribute
#  this software. However, if you distribute modified versions, you MUST
#  also distribute the source code.
#  See http://www.gnu.org/licenses/gpl.html for the full license.
#
#  $Revision: 6687 $
#  $Id: kRO.pm 6687 2009-04-19 19:04:25Z technologyguild $
########################################################################
# Korea (kRO)
# The majority of private servers use eAthena, this is a clone of kRO

package Network::Receive::kRO::Sakexe_2007_11_06a;

use strict;
use base qw(Network::Receive::kRO::Sakexe_2007_10_23a);

use Globals qw(%config $char);
use Misc qw(configModify);

sub new {
	my ($class) = @_;
	my $self = $class->SUPER::new(@_);
	my %packets = (
		#'0078' => ['actor_exists', 'C a4 v14 a4 a2 v2 C2 a3 C3 v', [qw(object_type ID walk_speed opt1 opt2 option type hair_style weapon lowhead shield tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 stance sex coords xSize ySize act lv)]], # 55 #standing
		#'007C' => ['actor_connected', 'C a4 v14 C2 a3 C2', [qw(object_type ID walk_speed opt1 opt2 option hair_style weapon lowhead type shield tophead midhead hair_color clothes_color head_dir stance sex coords xSize ySize)]], #spawning (eA does not send this for players) # 42
		#'022C' => ['actor_moved', 'C a4 v3 V v5 V v5 a4 a2 v V C2 a6 C2 v', [qw(object_type ID walk_speed opt1 opt2 option type hair_style weapon shield lowhead tick tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 stance sex coords xSize ySize lv)]], # walking # 65 # TODO: figure out what eA does here (shield is in GEmblemVer?): # v5 => v2 V v
		'0078' => ['actor_exists', 'x a4 v14 a4 a2 v2 C2 a3 C3 v', [qw(ID walk_speed opt1 opt2 option type hair_style weapon lowhead shield tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 stance sex coords unknown1 unknown2 act lv)]],
		'007C' => ['actor_connected', 'x a4 v14 C2 a3 C2', [qw(ID walk_speed opt1 opt2 option hair_style weapon lowhead type shield tophead midhead hair_color clothes_color head_dir stance sex coords unknown1 unknown2)]],
		'022C' => ['actor_moved', 'x a4 v3 V v5 V v5 a4 a2 v V C2 a6 C2 v', [qw(ID walk_speed opt1 opt2 option type hair_style weapon shield lowhead tick tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 stance sex coords unknown1 unknown2 lv)]],
		'029B' => ['mercenary_init', 'a4 v8 Z24 v V5 v V2 v',	[qw(ID atk matk hit critical def mdef flee aspd name level hp hp_max sp sp_max contract_end faith summons kills attack_range)]], # 80
	);

	foreach my $switch (keys %packets) {
		$self->{packet_list}{$switch} = $packets{$switch};
	}

	return $self;
}

# 029B
sub mercenary_init {	# attack_range param was added
	my ($self, $args) = @_;
	$self->SUPER::mercenary_init($args);
	
	my $slave = $char->{mercenary};

	# TODO: we do this for homunculus, mercenary and our char... make 1 function and pass actor and attack_range?
	if ($config{mercenary_attackDistanceAuto} && $config{attackDistance} != $slave->{attack_range}) {
		message TF("Autodetected attackDistance for mercenary = %s\n", $slave->{attack_range}), "success";
		configModify('mercenary_attackDistance', $slave->{attack_range}, 1);
		configModify('mercenary_attackMaxDistance', $slave->{attack_range}, 1);
	}
}

=pod
//2007-11-06aSakexe
0x0078,55
0x007c,42
0x022c,65
0x029b,80
=cut

1;
Please use pin function for uploading your file contents!

User avatar
SkylorD
Moderators
Moderators
Posts: 1166
Joined: 16 Dec 2011, 02:53
Noob?: No
Location: Brazil
Contact:

Re: recv packet problem

#20 Post by SkylorD »

http://forums.openkore.com/viewtopic.php?f=56&t=49526
Now instead of compare pets as monster, it's doing at that way we've saw here. I believe !
The real problem here is that the object_type it's equal to 0!

I believe that should be exists some comparison with serverType date using object_type !
I believe too that should be a second way to compare. I'll think

$args->{type} has not common with monster ID. Not need to check inside monster database.
$args->{type} never will be more than 1000. Because it's not monster ID.
I don't know why it's reading monster as player. Cause no one func match with this case.

Mortimal : Please, post the values of

$args->{type} (check before if it's defined)
$args->{object_type}
$args->{hair_style} please.

I don't know how to solve by another way !
The best way is fork from roBrowser :

Code: Select all

	PACKET.ZC.NOTIFY_STANDENTRY_NPC = function PACKET_ZC_NOTIFY_STANDENTRY_NPC(fp, end) {
		this.objecttype = fp.readUChar();
		this.GID = fp.readULong();
		this.speed = fp.readShort();
		this.bodyState = fp.readShort();
		this.healthState = fp.readShort();
		this.effectState = fp.readShort();
		this.head = fp.readShort();
		this.weapon = fp.readShort();
		this.accessory = fp.readShort();
		this.job = fp.readShort();
		this.shield = fp.readShort();
		this.accessory2 = fp.readShort();
		this.accessory3 = fp.readShort();
		this.headpalette = fp.readShort();
		this.bodypalette = fp.readShort();
		this.headDir = fp.readShort();
		this.isPKModeON = fp.readUChar();
		this.sex = fp.readUChar();
		this.PosDir = fp.readPos();
		this.xSize = fp.readUChar();
		this.ySize = fp.readUChar();
	};

Code: Select all

	var objecttype = (
122					job < 45   ? Entity.TYPE_PC   :
123					job < 46   ? Entity.TYPE_WARP :
124					job < 1000 ? Entity.TYPE_NPC  :
…	
134					EntityAction.call(this);
135				}
136			}
137	
138			// Invisible sprites
139			if (job === 111 || job === 139 || job === 45) {
140				this.files.body.spr = null;
I believe that should fix this packet pack format.
Tomorrow i'll try to provide a general fix for this kind.
I believe that the $args->{type} should be verified if is < 45 ! If is, declare as monster.
Learn rules

Post Reply