---------------------------------------------------------------------------------------------------- -- -- オーナー切替 -- -- SwitchOwner.lua -- -- Date Version Author Memo -- ---------- ------- ------------------------- ----------------------------------------------- -- 2006/04/07 1.0 食べるとレアが出るゼリー@sara 1stリリース -- --------------------------------------------------------------------------------------------------- -- -- 機能説明 -- オーナーを一時的に他のプレイヤーへ切り替えます。 -- 一定時間(デフォルトでは10秒)が経過するか -- 一定距離(デフォルトでは12セル)以上離れると -- 元のオーナーへ戻ります。 -- 時間はV_INTERVAL、距離はV_RANGEの値を -- 変更する事により自由に設定できます。 -- -- 組み込み方法 -- 1.require "./USER_AI/SwitchOwner.lua"を追加する。 -- 2.グローバル変数 MyOwner を追加する。 -- 3.GetV(V_OWNER, id)や、GetV(V_OWNER, myid)を使用して -- ケミのIDを取得している箇所を全て MyOwner で置き換える。 -- ☆注意☆ Util.lua の GetOwnerPositionも忘れずに置き換える。 -- 4.AI(myid) の開始直後に MyOwner = GetOwner() を記述する。 -- 5.OnMOVE_CMD(x, y)の開始直後に SetOwner(x, y) を記述する。 -- -- 実行方法 -- 1.上記組み込みが完了したら安息+コルホムしてAIをリロードして下さい。 -- 2.擬似オーナーを設定したいプレイヤーがいるセルをALT + 右クリックして下さい。 -- -- 使用上の注意 -- ●組み込みに関しては各自の責任で行って下さい。 -- ●擬似オーナーは餌を与える事はできません、 -- 忘れずに自分で餌をあげましょう。 -- ●擬似オーナーが元のオーナーの視界から外れると -- ホムは動かなくなります(たぶん)、 -- そうした場合はALT+T等のコマンドを送れば -- 復活すると思います(たぶん)。 -- ダメだったら安息+コルホムして下さい。 --☆☆☆組み込み上Util.luaのGetOwnerPositionの機能を変更しています。 -- 独自AI等でGetOwnerPositionの機能が必要な場合は -- 当パッケージで用意しているGetOriginalOwnerPositionを使用して下さい。 -- do -------------------------------------------------- -- constants # 定数 # -------------------------------------------------- V_INTERVAL = 10000 -- オーナー切替時間(ms) V_RANGE = 12 -- オーナー切替許容範囲 -------------------------------------------------- -- variable # 変数 # -------------------------------------------------- Owner = 0 -- オーナーID Timer = 0 -- 解除タイマー -------------------------------------------------- -- オーナー取得 -- IN :id ホムのid -- OUT :id オーナーのid -- -- 使用方法) -- AI()の開始直後で当functionを実行して下さい。 -- -- 動作) -- 現在のオーナーのidを取得します。 -- 一定時間(V_INTERVAL)が経過するか、 -- 一定距離(V_RANGE)以上離れた場合、 -- オーナーを元に戻します。 -------------------------------------------------- function GetOwner(id) local mx, my = GetV(V_POSITION, id) local ox, oy = GetOriginalOwnerPosition(id) local dis = GetDistance(mx, my, ox, oy) if GetTick() > Timer or dis > V_RANGE then ResetOwner() end return Owner end -------------------------------------------------- -- 新オーナー設定(座標) -- IN :x ホム移動先のx座標 -- IN :y ホム移動先のy座標 -- -- 使用方法) -- OnMOVE_CMD(x, y)の開始直後で当functionを実行して下さい。 -- -- 動作) -- ホムの移動先セルにプレイヤーがいた場合、 -- そのプレイヤーを新しいオーナーとして登録する -------------------------------------------------- function SetOwner(x, y) local actors = GetActors() for i, v in ipairs(actors) do if IsMonster(v) == 0 then local px, py = GetV(V_POSITION, v) if px == x and py == y then SetOwnerId(v) break end end end end -------------------------------------------------- -- 新オーナー設定(id) -- IN :id 新オーナーとして設定したいプレイヤーのid -------------------------------------------------- function SetOwnerId(id) Owner = id Timer = GetTick() + V_INTERVAL end -------------------------------------------------- -- オーナー切替解除 -------------------------------------------------- function ResetOwner() Owner = GetV(V_OWNER, 0) Timer = 0 end -------------------------------------------------- -- 元のオーナーの位置を取得 -- 組み込みの関係上Util.luaのGetOwnerPositionの -- 機能を殺してしまう為、同様の機能を提供。 -------------------------------------------------- function GetOriginalOwnerPosition(id) return GetV(V_POSITION, GetV(V_OWNER, 0)) end -------------------------------------------------- -- オーナーの位置へ移動する -------------------------------------------------- function MoveToOwner(id) local x, y = GetV(V_POSITION, Owner) Move(id, x, y) end end