do --[[ 取巻き無視ライブラリ Ver.071118 07/11/18 初回限定 使い方パターン1 target=slavefilter(target) ← スキル使用前にこの行を追加 SkillObject(id,level,skill,target) 使い方パターン2 設定で SkillObject関数やAttack関数のフックを有効にして require する。 ※GetSquareActors関数とGetNearActorID関数は SelectActors.lua からお借りしました。  有用なライブラリを公開したSelectActorsの中の人氏に感謝します。 --]] ------------------------------------------------ -- config local SkillObject_filter = false; -- スキル使用関数を書き換えるか。 true / false local Attack_filter = false; -- 攻撃関数を書き換えるか true / false local filterRange = 2; -- 取巻きと認識する距離 -- Attack_filter = true にする場合は、 -- 移動キャンセルで射程外へ移動してしまう可能性があるため -- filterRange = 1 を強く推奨します。 -- configここまで。 ------------------------------------------------ slavelist = { [1029]={[1038]="オシリス"}, [1522]={[1038]="オシリス"}, [1101]={[1039]="バフォメット"}, [1427]={[1046]="ドッペルゲンガー"}, [1604]={[1059]="ミストレス"}, [1156]={[1059]="ミストレス"}, [1608]={[1086]="黄金蟲"}, [1439]={[1087]="オークヒーロー"}, [1052]={[1088]="ボーカル"}, [1012]={[1089]="トード"}, [1113]={[1090]="マスターリング"}, [1002]={[1090]="マスターリング"}, [1011]={[1091]="ドラゴンフライ"}, [1013]={[1092]="さすらい狼"}, [1063]={[1093]="エクリプス"}, [1031]={[1096]="エンジェリング"}, [1062]={[1096]="エンジェリング"}, [1603]={[1115]="エドガ"}, [1060]={[1115]="エドガ"}, [1186]={[1120]="ゴーストリング"}, [1477]={[1147]="マヤー",[1289]="マヤパープル",[1511]="アモンラー"}, [1180]={[1150]="月夜花",[1307]="キャットナインテイル"}, [1471]={[1150]="月夜花"}, [1458]={[1157]="ファラオ"}, [1464]={[1157]="ファラオ"}, [1127]={[1159]="フリオニ"}, [1558]={[1159]="フリオニ"}, [1473]={[1190]="オークロード"}, [1189]={[1190]="オークロード"}, [1257]={[1200]="ジルタス"}, [1438]={[1219]="深淵の騎士",[1511]="アモンラー"}, [1249]={[1250]="チェペット"}, [1607]={[1251]="ストームナイト"}, [1606]={[1252]="ハティー"}, [1605]={[1272]="ダークロード"}, [1261]={[1275]="アリス"}, [1253]={[1283]="キメラ"}, [1028]={[1290]="ジェネラルスケルトン"}, [1016]={[1290]="ジェネラルスケルトン"}, [1109]={[1292]="ミニデモ"}, [1018]={[1293]="クリーミーフィアー"}, [1139]={[1294]="キラーマンティス"}, [1320]={[1295]="オウルバロン"}, [1282]={[1296]="コボルドリーダー"}, [1133]={[1296]="コボルドリーダー"}, [1134]={[1296]="コボルドリーダー"}, [1135]={[1296]="コボルドリーダー"}, [1036]={[1298]="ゾンビマスター"}, [1126]={[1299]="ゴブリンリーダー"}, [1125]={[1299]="ゴブリンリーダー"}, [1124]={[1299]="ゴブリンリーダー"}, [1123]={[1299]="ゴブリンリーダー"}, [1122]={[1299]="ゴブリンリーダー"}, [1110]={[1301]="アムムト"}, [1100]={[1304]="ジャイアントスパイダー"}, [1099]={[1305]="エンシェントワーム"}, [1243]={[1306]="レイブオルマイ"}, [1129]={[1309]="ガジョマート"}, [1149]={[1310]="ごっついミノタウロス"}, [1166]={[1311]="グリンブルスティ"}, [1600]={[1312]="タートルジェネラル"}, [1601]={[1312]="タートルジェネラル"}, [1602]={[1312]="タートルジェネラル"}, [1364]={[1312]="タートルジェネラル",[1315]="アサルトタートル"}, [1367]={[1366]="ラーヴァゴーレム"}, [1509]={[1373]="ロードオブデス"}, [1490]={[1373]="ロードオブデス"}, [1508]={[1373]="ロードオブデス"}, [1179]={[1373]="ロードオブデス"}, [1741]={[1388]="アークエンジェリング"}, [1742]={[1388]="アークエンジェリング"}, [1443]={[1388]="アークエンジェリング"}, [1743]={[1388]="アークエンジェリング"}, [1744]={[1388]="アークエンジェリング"}, [1419]={[1389]="ドラキュラ"}, [1005]={[1389]="ドラキュラ"}, [1412]={[1418]="黒蛇王"}, [1560]={[1492]="怨霊武士"}, [1474]={[1511]="アモンラー"}, [1433]={[1582]="デビルリング"}, [1595]={[1582]="デビルリング"}, [1793]={[1583]="タオグンカ"}, [1625]={[1618]="ウンゴリアント"}, [1624]={[1623]="RSX-0806"}, [1631]={[1630]="ペクソジン"}, [1645]={[1646]="セイレン=ウィンザー",[1647]="エレメス=ガイル",[1648]="ハワード=アルトアイゼン",[1649]="マーガレッタ=ソリン",[1650]="セシル=ディモン",[1651]="カトリーヌ=ケイロン"}, [1640]={[1646]="セイレン=ウィンザー",[1647]="エレメス=ガイル",[1648]="ハワード=アルトアイゼン",[1649]="マーガレッタ=ソリン",[1650]="セシル=ディモン",[1651]="カトリーヌ=ケイロン"}, [1641]={[1646]="セイレン=ウィンザー",[1647]="エレメス=ガイル",[1648]="ハワード=アルトアイゼン",[1649]="マーガレッタ=ソリン",[1650]="セシル=ディモン",[1651]="カトリーヌ=ケイロン"}, [1642]={[1646]="セイレン=ウィンザー",[1647]="エレメス=ガイル",[1648]="ハワード=アルトアイゼン",[1649]="マーガレッタ=ソリン",[1650]="セシル=ディモン",[1651]="カトリーヌ=ケイロン"}, [1643]={[1646]="セイレン=ウィンザー",[1647]="エレメス=ガイル",[1648]="ハワード=アルトアイゼン",[1649]="マーガレッタ=ソリン",[1650]="セシル=ディモン",[1651]="カトリーヌ=ケイロン"}, [1644]={[1646]="セイレン=ウィンザー",[1647]="エレメス=ガイル",[1648]="ハワード=アルトアイゼン",[1649]="マーガレッタ=ソリン",[1650]="セシル=ディモン",[1651]="カトリーヌ=ケイロン"}, [1660]={[1658]="イグニゼム=セニア"}, [1659]={[1658]="イグニゼム=セニア"}, [1663]={[1658]="イグニゼム=セニア"}, [1662]={[1658]="イグニゼム=セニア"}, [1661]={[1658]="イグニゼム=セニア"}, [1365]={[1685]="ヴェスパー"}, [1675]={[1685]="ヴェスパー"}, [1669]={[1685]="ヴェスパー"}, [1273]={[1686]="オークベイビー"}, [1023]={[1686]="オークベイビー"}, [1691]={[1688]="レディータニー"}, [1711]={[1708]="魔剣士タナトスの思念体"}, [1710]={[1708]="魔剣士タナトスの思念体"}, [1709]={[1708]="魔剣士タナトスの思念体"}, [1712]={[1708]="魔剣士タナトスの思念体"}, [1756]={[1719]="データルザウルス"}, [1757]={[1720]="ハイドラランサー",[1756]="X_ハイドラランサー"}, [1759]={[1720]="ハイドラランサー",[1756]="X_ハイドラランサー"}, [1760]={[1720]="ハイドラランサー",[1756]="X_ハイドラランサー"}, [1758]={[1720]="ハイドラランサー",[1756]="X_ハイドラランサー"}, [1739]={[1734]="キエル-D-01"}, [1740]={[1734]="キエル-D-01"}, [1891]={[1751]="ランドグリス"}, [1762]={[1752]="スコグル"}, [1761]={[1753]="プルス"}, [1763]={[1754]="スケゴルト(黒)"}, [1764]={[1755]="スケゴルト(青)"}, [1786]={[1768]="グルームアンダーナイト"}, [1787]={[1768]="グルームアンダーナイト"}, [1788]={[1779]="クトルラナックス"}, [1794]={[1783]="ガリオン",[1791]="X_ガリオン"}, [1791]={[1785]="アトロス"}, [1835]={[1832]="イフリート"}, [1834]={[1832]="イフリート"}, [1829]={[1839]="ビョルグ"}, [1830]={[1839]="ビョルグ"}, [1872]={[1873]="ヴェルゼブブ(小) ",[1874]="ヴェルゼブブ(大) "}, [1868]={[1871]="堕ちた大神官ヒバム "}, [1864]={[1870]="ネクロマンサー"}, } -- SkillObject と Attack のフック if SkillObject_filter then local raw_SkillObject = SkillObject; SkillObject = function(id,level,skill,obj) if (skill > 8*1000) then obj = slavefilter(obj); raw_SkillObject(id,level,skill,obj); end end -- end of function end if Attack_filter then local raw_Attack = Attack; Attack = function(id,obj) obj = slavefilter(obj); raw_Attack(id,obj); end -- end of function end function slavefilter(target) typ = GetV(V_HOMUNTYPE, target) if (slavelist[typ]==nil) then return target --リストにいないMobはとりまきを持たない end actors = GetActors(); tx,ty = GetV(V_POSITION,target); actors = GetSquareActors(actors, tx - filterRange ,ty - filterRange,tx + filterRange,ty + filterRange); actors = GetTypeInIDActors(actors,slavelist[typ]) result = GetNearActorID(target,actors) -- 親方候補が複数いた場合は一番近くの敵を選ぶ。 if result == 0 then -- result==0 は近くに親方はいない。 return target else return result end end ------------------------------------------------------------------------------------------------------------------------------------------- function GetSquareActors(argActors, x1,y1,x2,y2) --指定対角線を持つ四角形内の相手を返す local resultActors = {} local resultActorsIndex = 0 local actorX = 0 local actorY = 0 local w = 0 if x1 > x2 then w = x1 x1 = x2 x2 = w end if y1 > y2 then w = y1 y1 = y2 y2 = w end for argActorsIndex, actorID in ipairs(argActors) do actorX, actorY = GetV(V_POSITION, actorID) if actorX >= x1 and actorX <= x2 then if actorY >= y1 and actorY <= y2 then --頂点を指定した四角形の中に居たら resultActorsIndex = resultActorsIndex + 1 resultActors[resultActorsIndex] = actorID end end end return resultActors end ------------------------------------------------------------------------------------------------------------------------------------------ function GetTypeInIDActors(argActors, argTypeID) --指定したTypeIDテーブルに含まれる敵を返す。 ☆ local resultActors = {} local resultActorsIndex = 0 for argActorsIndex, actorID in ipairs(argActors) do if (argTypeID[GetV(V_HOMUNTYPE, actorID)]) then resultActorsIndex = resultActorsIndex + 1 resultActors[resultActorsIndex] = actorID end end return resultActors end ------------------------------------------------------------------------------------------------------------------------------------------- function GetNearActorID(argID, argActors) --テーブルから指定したIDと最短距離の相手を返す local resultID = 0 --戻り値 local min_dis = 100 --デフォルト比較距離 local dis = 100 --対象との距離 for argActorsIndex, actorID in ipairs(argActors) do dis = GetDistance2(argID,actorID) if dis < min_dis then resultID = actorID min_dis = dis end end return resultID end ------------------------------------------------------------------------------------------------------------------------------------------ end