仙境傳說|RO私服
標題:
配合1/28,1/31系統異動,自己動手修改 openkore
[打印本頁]
作者:
sofax222
時間:
2011-2-1 10:36
標題:
配合1/28,1/31系統異動,自己動手修改 openkore
1/28、1/30 twRO 官方修改了系統,造成 openkore 無法掛網
小弟不才已經修改部分 table 檔以及程式檔就可以掛了....
因為我用的是 SVN r7572 版 (基本上在此版本上我己修改了許多程式碼,包括 XKore 功能)
和最新版 r7639 可能有些出入 (我尚未將我自行修改的程式碼反應到此一新版上)
所以不便打包上傳給各位大大
配合官方的變動,以下是我修改 openkore SVN r7572 的詳細步驟:
1. 修改
tables/servers.txt
將該檔案中凡是 Taiwan - twRO: 的區塊,將原
"charBlockSize 112"
都改成
"charBlockSize 116"
2. 修改
tables/twRO/recvpackets-twRO-free.txt
在該檔的最後面加上下列三行
0856 0
0857 0
0858 0
PS: 因為我只玩免服和全區,所以只改這個檔
3. 修改程式檔
src/Network/Receive/ServerType0.pm
這個對不會寫程式的大大可能會是個大工程... 其實也沒有很難
這次官方的變動影響 openkore 的資料封包,目前我測出有三類,其對應的修改如下:
(1). 角色資料封包 006B:
找到以下程式區塊
sub received_characters_unpackString {
if ($masterServer && $masterServer->{charBlockSize} == 112) {
return 'a4 V9 v V2 v14 Z24 C6 v2';
} else {
return 'a4 V9 v17 Z24 C6 v2';
}
}
複製代碼
修改成以下程式碼 (基本上是加入中間兩行):
sub received_characters_unpackString {
if ($masterServer && $masterServer->{charBlockSize} == 112) {
return 'a4 V9 v V2 v14 Z24 C6 v2';
} elsif ($masterServer && $masterServer->{charBlockSize} == 116) {
return 'a4 V9 v V2 v14 Z24 C6 v4';
} else {
return 'a4 V9 v17 Z24 C6 v2';
}
}
複製代碼
(2). 角色身上物品資料封包 02D0 (這要改兩個地方):
先找到
"sub inventory_items_nonstackable"
,
(A).
往下再找到以下程式區塊
} elsif ($args->{switch} eq '02D0') {
$psize = 26;
} else {
warning "inventory_items_nonstackable: unsupported packet ($args->{switch})!\n";
}
複製代碼
修改成以下程式碼 (基本上是把 26 改成 28):
} elsif ($args->{switch} eq '02D0') {
$psize = 28;
} else {
warning "inventory_items_nonstackable: unsupported packet ($args->{switch})!\n";
}
複製代碼
(B)
往下再找到以下程式區塊
if ($psize == 26) {
my $expire = unpack("a4", substr($msg, $i + 20, 4)); #a4 or V1 unpacking?
$item->{expire} = $expire if (defined $expire);
#$item->{unknown} = unpack("v1", substr($msg, $i + 26, 2));
}
複製代碼
修改成以下程式碼 (基本上是把 26 改成 28,再把 "$i + 20" 改成 "$i + 22"):
if ($psize == 28) {
my $expire = unpack("a4", substr($msg, $i + 22, 4)); #a4 or V1 unpacking?
$item->{expire} = $expire if (defined $expire);
#$item->{unknown} = unpack("v1", substr($msg, $i + 26, 2));
}
複製代碼
(3). 怪物/NPC 資料封包 0856 / 0857 / 0858
先找到以下程式區塊
sub new {
my ($class) = @_;
my $self = $class->SUPER::new();
$self->{packet_list} = {
複製代碼
原程式區塊是
sub new {
my ($class) = @_;
my $self = $class->SUPER::new();
$self->{packet_list} = {
........
........
};
複製代碼
在此區塊的最後 ("};" 之前) 加入三行,成以下程式區塊:
sub new {
my ($class) = @_;
my $self = $class->SUPER::new();
$self->{packet_list} = {
........
........
'0856' => ['actor_display', 'v C a4 v3 V v5 a4 v5 a4 a2 v V v C2 a6 C2 v2 Z*', [qw(len 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 opt4 karma sex coords xSize ySize lv font name)]], # -1 # walking
'0858' => ['actor_display', 'v C a4 v3 V v10 a4 a2 v V v C2 a3 C2 v2 Z*', [qw(len object_type ID walk_speed opt1 opt2 option type hair_style weapon shield lowhead tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 opt4 karma sex coords xSize ySize lv font name)]], # -1 # spawning
'0857' => ['actor_display', 'v C a4 v3 V v10 a4 a2 v V v C2 a3 C3 v2 Z*', [qw(len object_type ID walk_speed opt1 opt2 option type hair_style weapon shield lowhead tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 opt4 karma sex coords xSize ySize act lv font name)]], # -1 # standing
};
複製代碼
如果你的 Bot 因為 1/28、1/31 官方的異動而不能正常工作的話,可試試以上的方法
作者:
sofax222
時間:
2011-2-1 16:33
目前又發現一個問題...
就下 "eq" 裝備指令時會出現異常...
我想這和新增的 "服裝裝備" 有關...
正在研究問題所在....
作者:
sofax222
時間:
2011-2-8 08:30
存取倉庫時也會有資料亂掉的問題,修改如下:
角色倉庫物品資料封包 02D1,也要要改兩個地方(和身上物品資料封包 02D0 類似):
先找到 "
sub storage_items_nonstackable
",
(A).
往下再找到以下程式區塊
} elsif ($args->{switch} eq '02D1') {
$psize = 26;
} else {
warning "storage_items_nonstackable: unsupported packet ($args->{switch})!\n";
}
複製代碼
複製代碼修改成以下程式碼 (
基本上是把 26 改成 28
):
} elsif ($args->{switch} eq '02D1') {
$psize = 28;
} else {
warning "storage_items_nonstackable: unsupported packet ($args->{switch})!\n";
}
複製代碼
複製代碼(B)
往下再找到以下程式區塊
if ($psize == 28) {
my $expire = unpack("a4", substr($msg, $i + 20, 4)); #a4 or V1 unpacking?
$item->{expire} = $expire if (defined $expire);
#$item->{unknown} = unpack("v1", substr($msg, $i + 24, 2));
}
複製代碼
複製代碼修改成以下程式碼 (
基本上是把 26 改成 28,再把 "$i + 20" 改成 "$i + 22"
):
if ($psize == 28) {
my $expire = unpack("a4", substr($msg, $i + 22, 4)); #a4 or V1 unpacking?
$item->{expire} = $expire if (defined $expire);
#$item->{unknown} = unpack("v1", substr($msg, $i + 24, 2));
}
複製代碼
作者:
Robert
時間:
2011-2-8 10:55
幾乎沒什麼問題了, 感謝大大分享
作者:
sofax222
時間:
2011-2-16 10:35
又發現一個小問題:
在更換裝備時會發生錯誤....
修改如下:
修改
tables/twRO/recvpackets-twRO-free.txt
將原
00AA 7
改成
00AA 9
修改程式檔
src/Network/Receive/ServerType0.pm
裝備封包:
將原
'00AA' => ['equip_item', 'v2 C', [qw(index type success)]],
複製代碼
改成
'00AA' => ['equip_item', 'v3 C', [qw(index type opt success)]],
複製代碼
歡迎光臨 仙境傳說|RO私服 (http://ro.private-servers-game.com/)
Powered by Discuz! X3.2