★RO kore情報交換所 中級者のマクロ(11体目)★
せっかく中級者と名前が変わったのにソースがまるで貼られてないのな。
まあどうせだいたいの人は実装してるっぽいが活気を取り戻せたらと
期待してモンスターによって装備武器切り替えるソースあげとくか。
この関数の呼び出しはattack関数呼び出す前あたりでやること。
(引数にモンスターIDを突っ込んでおく。$foundIDなど)
configに入る設定は武器は2つまでのみ(3つ以上やりたかったら自分で作れ)
1つめ:常用 2つめ:モンスター名を記載したモンスターへのみ使用
モンスターの設定はconfigで対象モンスター名を入れておく。連番の始まりは1から。
なお同一武器名に対する切替には対応してないので注意。ついでに
Jkoreと本家Koreの両方で使えるが、関数の呼び出しの時の引数の設定が
それぞれ異なるので自分で調べること
100 :
99:03/01/11 02:21 ID:???
sub useWeaponsChange {
my $monsterID = shift;
my $i = 1;
my $weaponName;
# useWeapons_1 & _2 の両方がない場合にはこのロジックを使わない
if ($config{'useWeapons_1'} ne "" || $config{'useWeapons_2'} ne ""){
$weaponName = $config{'useWeapons_1'};
while(1){
last if (!$config{"targetMonster_$i"});
if ($monsters{$monsterID}{'name'} =~ /\Q$config{"targetMonster_$i"}/){
$weaponName = $config{'useWeapons_2'};
print "Use Weapon : $weaponName\n" if ($config{'debug'});
last;
}
$i++;
}
for ($i = 0; $i < @equipment; $i++) {
print "Search Equip Item : $chars[$config{'char'}]{'inventory'}[$equipment[$i]]{'name'}\n" if ($config{'debug'} == 2);
if ($weaponName =~ /\Q$chars[$config{'char'}]{'inventory'}[$equipment[$i]]{'name'}\E/){
print "Equip Check Succesed : $chars[$config{'char'}]{'inventory'}[$equipment[$i]]{'name'}\n" if ($config{'debug'});
if (!$chars[$config{'char'}]{'inventory'}[$equipment[$i]]{'equipped'}){
print "Equip Packet Sended!\n" if ($config{'debug'});
sendEquip(\$remote_socket, $chars[$config{'char'}]{'inventory'}[$equipment[$i]]{'index'}, $chars[$config{'char'}]{'inventory'}[$equipment[$i]]{'type_equip'}, 0);
}
last;
}
}
}
}
101 :
99:03/01/11 02:24 ID:???
一応最後に書いておくと、上記を実装するに当たっての質問には
漏れはいっさい答えないんで宜しく。
#config.txtに追加する設定は上のソース見れば分かるはずだし
ただバグ指摘と改良ソースアップがあった場合には出張ってくるかも
>>99 以前の活気を取り戻してくれ!
プログラム板どうもつかいにくくなったのでこっちに戻ってきた。
期待しないでまっててくれ。
とりあえず
if ($monsters{$monsterID}{'name'} =~ /\Q$config{"targetMonster_$i"}/){
↓
if ($monsters{$monsterID}{'name'} =~ /\Q$config{"targetMonster_$i"}$E/){
だね
103 :
102:03/01/11 02:46 ID:???
なんか/\Q〜\E/を使うひとがここは多いけれども
素直に
my $weaponName = quotemeta $config{'useWeapons_1'};
にしたほうがいいと思うのは僕だけかなぁ?
104 :
名無しさん@お腹いっぱい。:03/01/11 02:53 ID:3OI4OGlA
105 :
102:03/01/11 02:54 ID:???
あと、これは求めていることと違う事なのかもしれないけれども(debug時の出力)
$i = findIndexString(\@{$chars[$config{'char'}]{'inventory'}}, 'name', $weaponName);
を使うほうがすっきりするとも思う。
まぁ、オーバーヘッドや装備品以外のアイテムまで走査したりと処理が微妙に多くなるから
ダメと言われればそれまでなんだけれどもね。
106 :
102:03/01/11 03:02 ID:???
一応、日本語環境でつかうことを前提としているのであるならば
parseFileもろもろの際にすべてquotemetaをかけておけば
/\Q$chars[$config{'char'}]{'inventory'}[$equipment[$i]]{'name'}\E/
の\Qと\Eを書く手間が省ける。他のルーチンでも同じ事をやるなら予めしておいたほうが
一見、処理量が増加してるように見えても、ログイン前にかけるだけなので、
ゲーム中にいちいちクォート処理をする分の処理量が減らせるとも思います。
あと、活気を盛り返すためにも、とりあえず寝ましょう。
僕ももう寝よーっと。