スクリプト

「スクリプト」の編集履歴(バックアップ)一覧に戻る

スクリプト - (2015/02/14 (土) 20:40:15) のソース

[[config.txt]]の"scripts"の項目に記述してあるスクリプトが有効になる
各スクリプトの設定方法は[[script設定>script設定]]へ
----
&bold(){scriptsフォルダに最初から入っているスクリプト}
#region(closed,airstrike)
*airstrike
死なずに連続で指定回数キルすると、空爆を利用できるようになる

**設定
必要な連続キル数
        airstrike_streak_req = 6

**コマンド
・/airstrike <座標>
指定したエリアを空爆する
Mキーを押してマップを表示すると座標を確認できる

#endregion
#region(closed,dirtnade)
*dirtnade
グレネードが爆発したときにブロックを生成するようになる
[[こんな感じ>http://www.youtube.com/watch?v=2g7sihtdWW8]]

#endregion
#region(closed,flagreturn)
*flagreturn
敵がドロップした自チームのintelに触れると、intelが自陣に戻るようになる

#endregion
#region(closed,medkit)
*medkit
回復アイテムを使えるようにする

**設定
スポーン時に持っている回復アイテムの数
    default_medkits = config.get('medkits', 1)

回復量(100で全回復)
    medkit_heal_amount = config.get('medkit_heal_amount', 40)

**コマンド
・/medkit
回復アイテムを使用する

#endregion
#region(closed,platform)
*platform
ボタンアクション等が可能になる

**設定
マップが変わった時に台とボタンの情報を保存する
    SAVE_ON_MAP_CHANGE = True

台とボタンの情報を定期的に自動保存する(分単位、0.0は自動保存無効)
    AUTOSAVE_EVERY = 0.0

**コマンド
(説明の※印は、コマンド実行後に各コマンドの実行対象をシャベルで叩いて選択する必要があることを意味する)

***/platform (/p)
台の作成・設定を行う
この台はplatformスクリプトで用いられる特別なブロック構造物として扱われる
アクションと無関係の直方体を作りたいだけの場合は、mapmakingtools.pyの/insert等を用いるべきである

-/platform new <ラベル>
名前が"ラベル"の台を作成する
コマンドを実行してからブロックを2つ配置し、再度/platformを実行すると新しい台が出来上がる
配置する2つのブロックは同じ高度でなければならない
「new <ラベル>」なしで実行することもできる(名前は自動的に割り振られる)

-/platform name <ラベル>
台の名前を変更する※

-/platform height <高さ>
台の高さを変更する※

-/platform freeze
台を固定してアクションを無効化する(再度実行すると元に戻る)※

-/platform destroy
台を削除する※
台に接触しているブロックも削除されるので注意

-/platform last
台の選択時に実行すると、最後に選択・作成された台が選択される

台の選択時等に台に向けてスネークキー(V)を押すと、その台の情報が表示される
但し、シャベルを持っている必要がある

***/button (/b)
ボタンの作成・設定を行う
ボタンは/triggerで設定したトリガーが成立する場合に/actionで設定したアクションが実行される。
ボタン作成時のトリガーは「シャベルで叩く」であり、アクションは設定されていない。

-/button new <ラベル>
名前が"ラベル"のボタンを作成する
コマンドを実行してからブロックを1つ配置すると、配置したブロックがボタンになる
「new <ラベル>」なしで実行することもできる(名前は自動的に割り振られる)

-/button name <ラベル>
ボタンの名前を変更する※

-/button toggle
ボタンを無効化する(再度実行すると元に戻る)※

-/button cooldown <時間(秒)>
ボタンアクションの最小間隔を設定する※
デフォルトは0.5秒

-/button destroy
ボタンを削除する※

-/button last
ボタンの選択時に実行すると、最後に選択・作成されたボタンが選択される

***/action (/ac)
ボタンアクションを設定する

以下で「/action add <アクション>」はアクションをボタンに追加する
addの部分をsetとすると、設定されていたアクションを全て削除して新たに設定する
(説明の※※印は、コマンド実行後に台とボタンを順にシャベルで叩いて選択する必要があることを意味する)

-/action add height <height> [speed=0.25] [delay]
台の高さを"height"に変更する※※
speedで台の高さが変更される速さ、delayで変更が始まるまでの時間(秒)を設定する(省略可能)

-/action add raise <amount> [speed=0.25] [delay]
台の高さを"amount"だけ増やす※※
speedで台の高さが変更される速さ、delayで変更が始まるまでの時間(秒)を設定する(省略可能)

-/action add lower <amount> [speed=0.25] [delay]
台の高さを"amount"だけ減らす※※
speedで台の高さが変更される速さ、delayで変更が始まるまでの時間(秒)を設定する(省略可能)

-/action add elevator <height> [speed=0.25] [delay] [wait=3.0]
台の高さを"height"まで変化させ、その後もとの高さに戻る※※
speedで台の高さが変更される速さ、delayで変更が始まるまでの時間(秒)を設定する(省略可能)
またwaitで途中止まっている時間(秒)を設定する(省略可能)

-/action add output [delay]
台の高さを一瞬で1にする。※※
delayで変更が始まるまでの時間(秒)を調整する。(省略可)

-/action add teleport <x y z|where>
"x y z"で示した座標にテレポートする※
「where」を指定すると、あらかじめ/whereコマンドで指定した位置にテレポートする

-/action add chat <text>
チャットにメッセージを送信する※
「"」でメッセージを囲うこともできる

-/action add damage <amount>
実行したプレイヤーに"amount"のダメージを与える※
"amount"に負値を設定すると回復となる

-/action list
ボタンに設定されたアクションを表示する※
表示されるインデックスは次のdelで用いる

-/action del <#|all>
ボタンに設定されたアクションを削除する※
数字でインデックスを指定して削除するか、「all」を指定して全てのアクションを削除する

***/trigger (/t)
ボタンのトリガーを設定する

以下で「/trigger add <アクション>」はアクションをトリガーとしてボタンに追加する
addの部分をsetとすると、設定されていたトリガーを全て削除して新たに設定する
add, set の直後にnotを挿入すると、指定したアクションの否定をトリガーとして設定する
(説明の※※印は、コマンド実行後に台とボタンを順にシャベルで叩いて選択する必要があることを意味する)

/trigger add press
ボタンをシャベルで叩く※

/trigger add distance [radius=3]
ボタンとの距離が"radius"以内※
領域は球状ではなく箱状に捉える必要がある

/trigger add track [radius=3]
ボタンとの距離が"radius"以内※
領域は球状ではなく箱状に捉える必要がある
distanceとは異なり、誰かがこのトリガーを満たしていれば別のプレイヤーに対しては満たしていないと判断される

/trigger add height <height>
台の高さが"height"である※※
別のトリガーと組み合わせて使うべきであろう

-/trigger list
ボタンに設定されたトリガーを表示する※
表示されるインデックスは次のdelで用いる

-/trigger del <#|all>
ボタンに設定されたトリガーを削除する※
数字でインデックスを指定して削除するか、「all」を指定して全てのトリガーを削除する

-/trigger logic <and|or>
複数設定されたトリガーの条件に対して行う論理演算を設定する※
「and」ではすべての条件が満たされる場合、「or」では少なくともどれか1つの条件が満たされる場合にトリガーが成立する
デフォルトでは「and」の状態である

-/trigger quiet
トリガー成立時になる音を消す再度実行すると元に戻る※

***/save
設定した台とボタンの情報を「マップ名_platform.txt」に保存する

#endregion
#region(closed,protect)
*protect
指定したエリアを保護できるようにする

**コマンド
・/protect <座標>
指定したエリア内でのブロックの設置/破壊をできなくする
/protectとだけ打つと、全エリアの保護を解除する

#endregion
#region(closed,rampage)
*rampage
指定時間内に指定回数キルすると、rampage状態(しばらく銃のRPMが上がる)になる

**設定
必要なキル数
        KILL_REQUIREMENT = 3

何秒以内に指定回数キルすればいいか
        TIME_REQUIREMENT = 8.0

グレネードでのキルもカウントするかどうか
        GRENADE_KILLS_COUNT = True

効果時間
        RAMPAGE_DURATION = 20.0

rampage状態での銃のレート(何秒毎に1発撃てるか?)
        RAPID_INTERVALS = {
            RIFLE_WEAPON : 0.16,
            SMG_WEAPON : 0.08,
            SHOTGUN_WEAPON : 0.18
        }

#endregion
#region(closed,rangedamage)
*rangedamage
銃の威力が距離によって変化するようになる

#endregion
#region(closed,rollback)
*rollback
指定したエリアの地形を初期状態にリセットできるようにする

・/rollback <座標>
指定したエリアの地形をマップがロードされた時の状態に戻す

#endregion
#region(closed,runningman)
*runningman
スポーンしたときに自動でペアが指定され、相方から一定距離離れると爆死するようになる

**設定
ゲーム開始時にrunningmanモードを有効にするかどうか
        ENABLED_AT_START = False

**コマンド
・/runnnigman
runningmanモードを有効にする

・/unlink <プレイヤー名>
指定したプレイヤーのペアを解除する

#endregion
#region(closed,squad)
*squad
Battlefieldシリーズにあるような分隊機能を追加する
同じ分隊のメンバーの近くにリスポーンする

**設定
[[config.txt]]に設定項目がある

分隊を組んでいるときのリスポン時間?
    "squad_respawn_time" : 45,

分隊の最大人数
    "squad_size" : 4,

自動で分隊を組ませるかどうか
    "auto_squad" : false,

**コマンド
・/squad <分隊名>
指定した分隊に入る
/squad noneと打つと、分隊を抜ける
/squadとだけ打つと、今あるsquadのリストが表示される

・/follow <プレイヤー名>
分隊内の指定したプレイヤーの近くにリスポンするようにする
/followとだけ打つと、今あるsquadのどれかに自動で入る

#endregion
#region(closed,tdm)
*tdm
ゲームモードをTDM(チームデスマッチ)にする
CTFをベースにしているため、intelがある

**設定
勝利するために必要な合計キル数
        kill_limit = config.get('kill_limit', 100)

intelをキャプチャーしたときに獲得するポイント
        intel_points = config.get('intel_points', 10)

**コマンド
・/score
各チームのスコアを表示する

#endregion
----
&bold(){scriptsフォルダに最初は入っていないスクリプト}
#region(closed,aimbot2.py)
*[[aimbot2.py>https://github.com/matpow2/pyspades-userscripts/blob/master/aimbot2.py]]
aimbot対策。HEADSHOT_SNAP(一定時間ヘッドショット数)、HIT_PERCENT(命中率)、KILLS_IN_TIME(一定時間キル数)、MULTIPLE_BULLETS(同時ショット)からaimbotかどうか判断する。判断、対処は自動的に行われる。

**設定
データを「aimbot2log.txt」に収集するかどうか
 DATA_COLLECTION = False

aimbotと判断した理由毎にどのような対処を取るか
DISABLED(何もしない), KICK, BAN, WARN_ADMIN(管理者プレイヤーに通知)から選択
 HEADSHOT_SNAP = WARN_ADMIN
 HIT_PERCENT = WARN_ADMIN
 KILLS_IN_TIME = WARN_ADMIN
 MULTIPLE_BULLETS = WARN_ADMIN

受けたダメージがその武器の規定ダメージより大きい場合に無効にするかどうか
 DETECT_DAMAGE_HACK = True

管理者プレイヤーへの通知頻度(秒)(WARN_ADMIN設定時)
 WARN_INTERVAL_MINIMUM = 300

BANの期間(分)(BAN設定時)
0で永久的にBAN
 HEADSHOT_SNAP_BAN_DURATION = 1400
 HIT_PERCENT_BAN_DURATION = 1440
 KILLS_IN_TIME_BAN_DURATION = 2880
 MULTIPLE_BULLETS_BAN_DURATION = 10080

同時ショット最大数
通常はライフルとSMGでは同時ショットは不可能なため、この値以上なら明らかにaimbotと判断
 RIFLE_MULTIPLE_BULLETS_MAX = 8
 SMG_MULTIPLE_BULLETS_MAX = 8

命中率でaimbot判断する場合、この値以上撃ってから判断
 RIFLE_KICK_MINIMUM = 45
 SMG_KICK_MINIMUM = 90
 SHOTGUN_KICK_MINIMUM = 45

命中率で判断する場合の閾値(この値を上回るとaimbotと判断)
 RIFLE_KICK_PERC = 0.90
 SMG_KICK_PERC = 0.80
 SHOTGUN_KICK_PERC = 0.90

一定時間キル数で判断する場合の閾値
KILL_TIME秒以内にKILL_THRESHOLDキルするとaimbotと判断
 KILL_TIME = 20.0
 KILL_THRESHOLD = 15

一定時間ヘッドショット数で判断する場合の閾値
HEADSHOT_SNAP_TIME秒以内にHEADSHOT_SNAP_THRESHOLD回ヘッドショットするとaimbotと判断
 HEADSHOT_SNAP_TIME = 20.0
 HEADSHOT_SNAP_THRESHOLD = 6

aimbotによるヘッドショットと判断されるプレイヤーの回転角度下限
 HEADSHOT_SNAP_ANGLE = 90.0

**コマンド
-/accuracy
自分の撃った弾の命中率を表示

-/hackinfo <プレイヤー>
管理者のみ使用可能
指定したプレイヤーの情報を表示

#endregion
#region(closed,mapmakingtools.py)
*[[mapmakingtools.py>http://ux.getuploader.com/aosuploader/download/419/mapmakingtools.py]]
マップ作成ツール。位置の指定は何らかの方法でブロックを破壊する動作によって行う。(シャベルで2回叩く、ライフルで二度撃つ等)
MMT(&bold(){M}ap&bold(){M}aking&bold(){T}ools)と略されることもある。

**コマンド
-/tunnel <r> <d> <h>
指定したブロックのhブロックだけ下のブロックを中心とした、半径r、奥行dのかまぼこ型(半円)のトンネルを掘る
コマンド入力後、トンネル入り口位置を指定

-/insert
指定した直方体領域に持っている色のブロックを配置する
コマンド入力後、開始座標、終了座標を順に指定
あまりに広い領域を指定するとフリーズするので要注意

-/delete
指定した直方体領域のブロックを除去する
コマンド入力後、開始座標、終了座標を順に指定
このコマンドによって支点となっっているブロックが消去されてブロックの塊が崩壊した場合は、崩壊したように見えてもサーバーに入りなおすと崩壊せずに浮いている状態に見えることがあるので注意
コマンド使用時にブロックが崩壊する音が聞こえたら一度サーバーに入りなおすことを推奨する

-/pattern <コピー回数>
指定した直方体領域のブロックを上方向にコピーする
コマンド入力後、開始座標、終了座標を順に指定
うまく使えば完全に浮いたオブジェクトを作ることもできる

-/hollow <d>
指定した直方体領域を厚さdの外殻を残して中空にする
コマンド入力後、開始座標、終了座標を順に指定
領域内で外気と触れていないブロックが全て除かれる

#endregion
#region(closed,paint.py)
*[[paint.py>http://ux.getuploader.com/aosuploader/download/212/paint.py]]

ブロックを破壊せずに色だけを変更できるようになるペイントスクリプト

**コマンド
-/paint
ブロックを持っているとき、足音消しキー(V)で狙ったブロックを持っているブロックの色でペイントできるようになる.

-/fill
エイリアス /fi
/paint実行後に可能
コマンド入力後、開始ブロック、終了ブロックを順に指定(指定方法はブロック破壊動作を行うかVキーでペイントする)
2ブロックで作られる直方体領域内を持っているブロックの色で塗りつぶす
※/fillを使用するためにはmapmakingtools.pyも入れておく必要がある。


#endregion
#region(closed,buildtools.py)
*[[buildtools.py>http://ux.getuploader.com/aosuploader2/download/65/buildtools.py]]

建築に役立つコマンド群.

**コマンド
-/コマンド
未完.

-/BTコマンド
誰か書いて


#endregion
----
&bold(){Tips}
#region(closed,管理者権限)
*管理者権限
ゲーム内で使用できるコマンド(ここではhogehogeとする)は、スクリプト内でaddを使って「add(hogehoge)」のように指定される。
コマンドhogehogeの実行内容は、defを使った関数定義「def hogehoge(…):」から記述される。

関数定義の直前の行に「@admin」を記述することによって、そのコマンドを管理者権限でのみ使用できるようにする。
adminはスクリプトの最初で「from commands import admin」のようにcommands.pyからインポートする必要がある。

管理者権限でしか使用できないコマンドを管理者権限を持たない"builder"等が使用可能にするには、「config.txt」の"rights"の項にそのコマンド名を加えればよい。

#endregion