黃易群俠傳M脫機外掛應用程式黃易神行
24296
138

[分享] 被白目傳陣搞的煩死了,分享avoidskill.pl(2011.1.7更新)(內附使用方法)

hk8077 發表於 2011-1-7 14:18:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |
使用方法:

1.將以下avoidSkill.pl程式碼,另存檔案為UTF-8編碼格式,檔案名稱命名為 avoidSkill.pl
2..放入 plugins 資料夾中
3.config.txt新增以下設定

avoidSkill 傳送之陣,病毒散撥,滑動陷阱,定位陷阱,魔耗陷阱,睡魔陷阱,霜凍陷阱,人孔 {
source
radius 6
method 1
step 5
}
avoidSkill 自我毀滅 {
# <要避免的技能名稱>
        radius 5
# <要避免的技能的半徑範圍格數>
        source Monster
# <施放者類型,Monster=魔物;Player=玩家。若二者都有則留空白。有分大小寫>
        method 0
# <以下數字選一個>
# 0 - 隨機移動至半徑 <avoidSkill_#_radius> 以外 <avoidSkill_#_step> 格的地方
# 1 - 往施法點反方向移動 <avoidSkill_#_step> 格
# 2 - 移動至最接近的施法者
# 3 - 瞬移飛走(免服不適用)
# 4 - 攻擊施法者(只能用在魔物)
# 5 - 使用技能(只能用在魔物)
# (methods 0-1 的選項)
        step 7
# <要移動多遠的格數>
# (method 5 的選項)
        skill 後退迴避
# <用來對付魔物的技能>
        lvl
# <技能等級>
        isSelfSkill 1
# 技能是否用在自己身上
        maxCastTime
# like normal skill slots
        minCastTime
# like normal skill slots
}


===============以下為avoidSkill.pl程式碼==================

# avoidSkill by Joseph
# original code from MessyKoreXP
# licensed under GPL
package avoidSkill;
use strict;
#use warnings;
use Time::HiRes qw(time);
use Globals;
use Utils;
use Misc;
use Network::Send;
use Log qw(debug message warning error);
use Skill;
use encoding 'utf8';
Plugins::register('avoidSkill', 'React to skills.', \&onUnload);
my $hooks = Plugins::addHooks(
            ['is_casting', \&avoidSkill, undef],
            ['packet_skilluse', \&avoidSkill, undef]
);
sub onUnload {
        Plugins::delHooks($hooks);
}
sub avoidSkill {
        my (undef, $args) = @_;
        my $sourceID = $args->{sourceID};
        my $targetID = $args->{targetID};
        my $skillID = $args->{skillID};
        my $x = $args->{x};
        my $y = $args->{y};
        my $skill = new Skill(idn => $skillID);
        $skill = $skill->getName();
        my $source = Actor::get($sourceID);
        debug "checking if we should avoid $skill from $source\n";
        for (my $i = 0; exists $config{"avoidSkill_$i"}; $i++) {
                next if (!$config{"avoidSkill_$i"});
                if (existsInList($config{"avoidSkill_$i"}, $skill)) {
                        # if source is specified, make sure type is correct
                        next if ($config{"avoidSkill_$i"."_source"} && $config{"avoidSkill_$i"."_source"} ne $source->{actorType});
                        debug "checking avoid radius on $skill\n";
                        # check if we are inside the skill area of effect
                        my $inRange;
                        my ($left,$right,$top,$BOTtom);
                        if ($x != 0 || $y != 0) {
                                $left = $x - $config{"avoidSkill_$i"."_radius"};
                                $right = $x + $config{"avoidSkill_$i"."_radius"};
                                $top = $y - $config{"avoidSkill_$i"."_radius"};
                                $bottom = $y + $config{"avoidSkill_$i"."_radius"};
                                $inRange = 1 if ($left <= $char->{pos_to}{x} && $right >= $char->{pos_to}{x} && $top <= $char->{pos_to}{y} && $bottom >= $char->{pos_to}{y});
                        } elsif ($targetID eq $accountID) {
                                $inRange = 1;
                        }
                        if ($inRange) {
                                if ($char->{sitting}) {
                                        main::stand();
                                }
                                if ($config{"avoidSkill_$i"."_method"} == 0) {
                                        my $found = 1;
                                        my $count = 0;
                                        my %move;
                                        do {
                                                ($move{x}, $move{y}) = getRandPosition($config{"avoidSkill_${i}_step"});
                                                $count++;
                                                if ($count > 100) {
                                                        $found = 0;
                                                        last;
                                                }
                                        } while ($left <= $move{x} && $right >= $move{x} && $top <= $move{y} && $bottom >= $move{y});
                                        if ($found) {
                                                stopAttack();
                                                sendMove(\$remote_socket, $move{x}, $move{y});
                                                message "Avoid skill $skill, random move to $move{x}, $move{y}.\n";
                                        }
                                } elsif ($config{"avoidSkill_$i"."_method"} == 1) {
                                        my $dx = $x - $char->{pos_to}{x};
                                        my $dy = $y - $char->{pos_to}{y};
                                        my %random;
                                        my %move;
                                        my $found = 1;
                                        my $count = 0;
                                        do {
                                                $random{x} = int(rand($config{"avoidSkill_$i"."_step"})) + 1;
                                                $random{y} = int(rand($config{"avoidSkill_$i"."_step"})) + 1;
                                                if ($dx >= 0) {
                                                        $move{x} = $char->{pos_to}{x} - $random{x};
                                                } else {
                                                        $move{x} = $char->{pos_to}{x} + $random{x};
                                                }
                                                if ($dy >= 0) {
                                                        $move{y} = $char->{pos_to}{y} - $random{y};
                                                } else {
                                                        $move{y} = $char->{pos_to}{y} + $random{y};
                                                }
                                                $count++;
                                                if ($count > 100) {
                                                        $found = 0;
                                                        last;
                                                }
                                        } while (!($field->isWalkable($x, $y)));
                                        if ($found) {
                                                stopAttack();
                                                sendMove(\$remote_socket, $move{x}, $move{y});
                                                message "Avoid skill $skill, move to $move{x}, $move{y}.\n";
                                        }
                                } elsif ($config{"avoidSkill_$i"."_method"} == 2) {
                                        my %src;
                                        $src{x} = $source->{pos_to}{x};
                                        $src{y} = $source->{pos_to}{y};
                                        my $found = 0;
                                        my $count = 0;
                                        my ($ex_left, $ex_right, $ex_top, $ex_bottom);
                                        my ($in_left, $in_right, $in_top, $in_bottom);
                                        my %move;
                                        my %nearest;
                                        do {
                                                $ex_left = $src{'x'} - $count;
                                                $ex_right = $src{'x'} + $count;
                                                $ex_top = $src{'y'} - $count;
                                                $ex_bottom = $src{'y'} + $count;
                                                $count++;
                                                $in_left = $src{'x'} - $count;
                                                $in_right = $src{'x'} + $count;
                                                $in_top = $src{'y'} - $count;
                                                $in_bottom = $src{'y'} + $count;
                                                my $nearest_dist = 9999;
                                                for ($move{'y'} = $in_top; $move{'y'} <= $in_bottom; $move{'y'}++) {
                                                        for ($move{'x'} = $in_left; $move{'x'} <= $in_right; $move{'x'}++) {
                                                                if (($move{'x'} < $ex_left || $move{'x'} > $ex_right) && ($move{'y'} < $ex_top || $move{'y'} > $ex_bottom)) {
                                                                        next if (($left <= $move{'x'} && $right >= $move{'x'} && $top <= $move{'y'} && $bottom >= $move{'y'}) ||
                                                                                !($field->isWalkable($move{x}, $move{y})));
                                                                        my $dist = distance(\%move, \%src);
                                                                        if ($dist < $nearest_dist) {
                                                                                $nearest_dist = $dist;
                                                                                $nearest{'x'} = $move{'x'};
                                                                                $nearest{'y'} = $move{'y'};
                                                                                $found = 1;
                                                                        }
                                                                }
                                                        }
                                                }
                                        } while (($count < 100) && (!$found));
                                        if ($found) {
                                                stopAttack();
                                                sendMove(\$remote_socket, $nearest{x}, $nearest{y});
                                                message "Avoid skill $skill, move to nearest position $nearest{'x'}, $nearest{'y'}.\n";
                                        }
                                } elsif ($config{"avoidSkill_$i"."_method"} == 3) {
                                        message "Avoid skill $skill, use random teleport.\n";
                                        main::useTeleport(1);
                                } elsif ($config{"avoidSkill_$i"."_method"} == 4) {
                                        return unless ($source->{actorType} eq 'Monster');
                                        message "Avoid skill $skill, attack to $source->{name}\n";
                                        # may not care about portal distance, oh well
                                        stopAttack();
                                        main::attack($sourceID);
                                } elsif ($config{"avoidSkill_$i"."_method"} == 5 && timeOut($AI::Timeouts::avoidSkill_skill, 3)) {
                                        return unless ($source->{actorType} eq 'Monster');
                                        message "Avoid skill $skill, use ".$config{"avoidSkill_$i"."_skill"}." to $source->{name}\n";
                                        $skill = new Skill(name => $config{"avoidSkill_$i"."_skill"});
                                        message "Use ".$skill->getHandle." on target\n";
                                        if (main::ai_getSkillUseType($skill->getHandle)) {
                                                my $pos = ($config{"avoidSkill_${i}_isSelfSkill"}) ? $char->{pos_to} : $monsters{$sourceID}{pos_to};
                                                main::ai_skillUse(
                                                        $skill->getHandle,
                                                        $config{"avoidSkill_$i"."_lvl"},
                                                        $config{"avoidSkill_$i"."_maxCastTime"},
                                                        $config{"avoidSkill_$i"."_minCastTime"},
                                                        $pos->{x},
                                                        $pos->{y});
                                        } else {
                                                main::ai_skillUse(
                                                        $skill->getHandle,
                                                        $config{"avoidSkill_$i"."_lvl"},
                                                        $config{"avoidSkill_$i"."_maxCastTime"},
                                                        $config{"avoidSkill_$i"."_minCastTime"},
                                                        $config{"avoidSkill_${i}_isSelfSkill"} ? $accountID : $sourceID);
                                        }
                                        $AI::Timeouts::avoidSkill_skill = time;
                                }
                        }
                        last;
                }
        }
}
sub getRandPosition {
        my $range = shift;
        my $x_pos = shift;
        my $y_pos = shift;
        my $x_rand;
        my $y_rand;
        my $x;
        my $y;
        if ($x_pos eq "" || $y_pos eq "") {
                $x_pos = $char->{'pos_to'}{'x'};
                $y_pos = $char->{'pos_to'}{'y'};
        }
        do {
                $x_rand = int(rand($range)) + 1;
                $y_rand = int(rand($range)) + 1;
                if (int(rand(2))) {
                        $x = $x_pos + $x_rand;
                } else {
                        $x = $x_pos - $x_rand;
                }
                if (int(rand(2))) {
                        $y = $y_pos + $y_rand;
                } else {
                        $y = $y_pos - $y_rand;
                }
        } while (!($field->isWalkable($x, $y)));
        my @ret = ($x, $y);
        return @ret;
}


請多回覆唷,別讓此文沉掉了...
收藏收藏 分享分享 讚 幹 分享分享 FB分享
回覆

使用道具 舉報


az191986 當前離線
UID
1593827
熱心
6 值
嘉獎
0 次
違規
0 次
在線時間
18 小時
經驗
11 點
積分
11
精華
0
最後登錄
2011-2-11
閱讀權限
10
註冊時間
2010-12-22
論壇幣
42 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 1
az191986 2011-1-9 03:53:23
謝謝大大提供~~~
這個實用了~~收下嘍
感謝感謝!!!!!
回覆

使用道具 舉報

p12576999 當前離線
UID
1560809
熱心
61 值
嘉獎
0 次
違規
0 次
在線時間
26 小時
經驗
48 點
積分
153
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2010-10-7
論壇幣
0 幣
聯合幣
18 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
p12576999 2011-1-9 12:03:22
感謝大大的提供  馬上來試試看.....
回覆

使用道具 舉報

21347895 當前離線
UID
510650
熱心
30 值
嘉獎
0 次
違規
0 次
在線時間
5 小時
經驗
30 點
積分
30
精華
0
最後登錄
2011-2-26
閱讀權限
20
註冊時間
2007-8-23
論壇幣
4 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
21347895 2011-1-9 12:34:44
看不太懂.能請大大解釋一下嗎?..
回覆

使用道具 舉報

bc008096 當前離線
UID
1576485
熱心
48 值
嘉獎
0 次
違規
0 次
在線時間
11 小時
經驗
37 點
積分
129
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2010-11-1
論壇幣
8 幣
聯合幣
24 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
5
bc008096 2011-1-9 12:35:17
感謝大大分享哦
讓我們大家受惠良多
感恩您
回覆

使用道具 舉報

FBW240017 當前離線
UID
1577361
熱心
85 值
嘉獎
0 次
違規
0 次
在線時間
17 小時
經驗
89 點
積分
89
精華
0
最後登錄
2011-3-6
閱讀權限
20
註冊時間
2010-11-2
論壇幣
256 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
6
FBW240017 2011-1-9 12:41:09
感謝大大的提供  馬上來試試看.....
回覆

使用道具 舉報

770922 當前離線
UID
1382420
熱心
233 值
嘉獎
0 次
違規
0 次
在線時間
51 小時
經驗
190 點
積分
190
精華
0
最後登錄
2014-6-9
閱讀權限
20
註冊時間
2010-1-3
論壇幣
5 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
7
770922 2011-1-9 12:42:09
[老朋友分流(Chaosfree,Irisfree)]

ip 220.130.113.235

port 6900

master_version 5

version 211

serverType twRO

serverEncoding Traditional Chinese

storageEncryptKey 0x050B6F79, 0x0202C179, 0x00E20120, 0x04FA43E3, 0x0179B6C8, 0x05973DF2, 0x07D8D6B, 0x08CB9ED9

PINEncryptKey 0x050B6F79, 0x0202C179, 0x00E20120, 0x04FA43E3, 0x0179B6C8, 0x05973DF2, 0x07D8D6B, 0x08CB9ED9

recvpackets recvpackets-twRO-irisfree.txt

addTableFolders twRO
回覆

使用道具 舉報

a0915891496 當前離線
UID
216302
熱心
76 值
嘉獎
0 次
違規
0 次
在線時間
44 小時
經驗
47 點
積分
226
精華
0
最後登錄
2017-1-30
閱讀權限
25
註冊時間
2007-2-15
論壇幣
19 幣
聯合幣
39 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 3
8
a0915891496 2011-1-9 13:12:34
感恩大大無私分享!!!感恩您唷!!!趕快來研究研究唷!!!
回覆

使用道具 舉報

gfgoodbf 當前離線
UID
1524050
熱心
115 值
嘉獎
0 次
違規
0 次
在線時間
13 小時
經驗
101 點
積分
479
精華
0
最後登錄
2019-2-25
閱讀權限
25
註冊時間
2010-8-14
論壇幣
219 幣
聯合幣
28 枚
幸運鑽
1 顆
招待卷
0 點
查看詳細資料
Rank: 3
9
gfgoodbf 2011-1-9 13:14:15
真的很煩阿..
卡在那邊不能動= =
回覆

使用道具 舉報

godkiller4 當前離線
UID
1554684
熱心
30 值
嘉獎
0 次
違規
0 次
在線時間
6 小時
經驗
35 點
積分
35
精華
0
最後登錄
2011-3-2
閱讀權限
20
註冊時間
2010-9-26
論壇幣
23 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
10
godkiller4 2011-1-9 13:49:16
好麻煩的感覺
這個有沒有用我是不知道= =
不過我是用一種非常簡單的方式來替代了
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊


手機版 | Archiver | 外掛聯合國

GMT+8, 2024-11-22 08:41 , Processed in 0.080199 second(s), 17 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?