銃のサンプルコードが欲しい

これまで矢の射撃速度を上げて疑似的な銃として使用していましたが、エフェクトを射線につけることができなくて他の方法で弾丸を射撃できるようにしたいです。どなたかサンプルコードをください Skript 2.6.4 ServerVer 1.17.1
54 Replies
Tsukineko(月雲)
矢のvectorとって長さ1とか0.5にして locationに加算しながらエフェクト表示すればいけるで
Deer
Deer9mo ago
何時間か悩んだのですがどうコードを書けばいいのか分かりません。
Tsukineko(月雲)
要素別に教えてクレメンス ・射出した矢のvectorのとりかた ・そのvectorの長さを1(0.5?)にする方法 ・そのvectorをつかってパーティクルを表示する場所を決める方法 この3つわかる?
gladiolus8789
gladiolus87899mo ago
Minehut Forums
Skript Vector Tutorial
Hopefully this will be a complete tutorial in vectors within vanilla Skript (might add onto this with Biosphere stuff) Terms you will learn (definitions of each one will be in the tutorial) : Pitch and yaw Vector Magnitude Normalization Location Velocity Basic arithmetic Dot product Cross product...
gladiolus8789
gladiolus87899mo ago
一応vectorを使わなくても、locationを取り続ければできます
Tsukineko(月雲)
1tick毎に? それすると早い矢とか間あかね?
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
矢を使わずに銃を作りたいってことなら、 vectorを頭の向きで取って「頭の位置のlocに足していって、そのlocの周囲rメートル以内のプレイヤーにダメージを与える+locにエフェクト」×n回 が大まかな流れ
Tsukineko(月雲)
そのほうほう 太いレーザーしか作り方分からなくてつらい playerの当たり判定に近づける方法…
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
正直ちょっとめんどくさくはある
Tsukineko(月雲)
ってか俺にはできない
gladiolus8789
gladiolus87899mo ago
projectileの位置にパーティクル表示だとどうしても間空きそう レーザー自作のほうがいいのかな?
Deer
Deer9mo ago
on right click with bedrock:
set {_l} to location of player
set {_v} to vector from yaw player's yaw and pitch player's pitch
loop 40 times:
set standard length of {_v} to loop-value / 2
set {_pewpew} to {_l} ~ {_v}
make 10 of dust using dustOption(yellow, 1) at location {_pewpew}
kill all entities in radius 1.5 of {_pewpew} where [input is not player]
on right click with bedrock:
set {_l} to location of player
set {_v} to vector from yaw player's yaw and pitch player's pitch
loop 40 times:
set standard length of {_v} to loop-value / 2
set {_pewpew} to {_l} ~ {_v}
make 10 of dust using dustOption(yellow, 1) at location {_pewpew}
kill all entities in radius 1.5 of {_pewpew} where [input is not player]
パーティクルはどう表示させればいいんですか?
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
set {_pewpew} to {_l} ~ {_v} ↓ set {_pewpew} to {_pewpew} ~ {_v} にしないと{_pewpew}の中身がずっと{_l} ~ {_v}のままだよ
Tsukineko(月雲)
skript hubでeffectで検索
Deer
Deer9mo ago
Tsukineko(月雲)
skript hubわかる? えーと、先に聞きたい ①とりあえずskript完成させたい ②今後も書くので、勉強しながら書きたい どっち?
Deer
Deer9mo ago
このコードのmake 10 ofってところにも書いてあるとおりeffectParticleの構文は存じてます
Tsukineko(月雲)
あ、ごめん、てっきり構文自体まだ入れてないのかと こりゃ失敬
Deer
Deer9mo ago
とりあえず完成出切ればそれから学びます
Tsukineko(月雲)
ちな之は結局 矢とか使わずに作る方針なの? これ、{_pewpew}に随時vector加算してるんじゃなくて loop回数に応じて『加算するvectorの長さ』を伸ばしてる から一応正しいっちゃ正しい…? ごめん話戻るね 俺的には↑のコードでもうパーティクル表示されそうなもんだけど されないの?
Deer
Deer9mo ago
教えてもらったurlの構文見てやったので上のコードでは矢無しですね。でもこれは範囲内のエンティティ全てをkillしてしまうので、今後一体のみに当たるようなコードを書くことを考えたら矢のサンプルコードも知りたいですね 今外出中なので確認は出来ませんがParticleの数を増やせば表示されるかも知れません
Tsukineko(月雲)
個人的には矢のほうが当たり判定も厳密なので そっちを勧めたいです okです
Deer
Deer9mo ago
当たり判定等々が厳密なのは良いですね
Tsukineko(月雲)
何より制御しやすいので 『矢』という実態がある分
Deer
Deer9mo ago
矢だと1tickずつParticleを表示させた時に弾速によってはParticleとParticleの間が空いちゃいませんか?
Tsukineko(月雲)
開きます でもそれを補う方法はちゃんとあります vectorの概念はもう(学校その他で)習いました?
Deer
Deer9mo ago
習ってません
Tsukineko(月雲)
例えば物を動かすときに 動かす力には ・力の量(または速度) ・動かす向き の要素があるのはわかります?
Deer
Deer9mo ago
はい
Tsukineko(月雲)
vectorはそれらの情報がまとめて入ってるオブジェクトです
Deer
Deer9mo ago
なるほど
Tsukineko(月雲)
実際に動かす力のある矢印のようなものですね 矢印の長さ = 力の強さ(または動く速さ) 矢印の向き = 動く向き です これが矢にも存在します
Tsukineko(月雲)
ざっくり書くとこんな感じです 発射された矢から取ったvector(画像では青矢印)には 矢の速度と 矢の向きが入ってます
No description
Tsukineko(月雲)
ではこのvectorを使ってどうパーティクルを表示するのか 矢のvectorの長さから取得できる『矢の速度』は 『矢が1tickで進む距離』と同じです つまり、vectorの長さは 今の矢と 1tick後の間の距離と一致します
Deer
Deer9mo ago
hm あ、なるほど
Tsukineko(月雲)
on 何かしらのイベント:
# ここに 矢を射出する処理
set {_arrow} to last shot arrow
# ここに 射出した矢の速度を調整する処理
# ↓矢のvectorを取得する
set {_vec} to velocity of {_arrow}
# ↓vectorの長さを取得する (1tick後には 矢はその長さ分先にある)
set {_length} to normal length of {_vec}
on 何かしらのイベント:
# ここに 矢を射出する処理
set {_arrow} to last shot arrow
# ここに 射出した矢の速度を調整する処理
# ↓矢のvectorを取得する
set {_vec} to velocity of {_arrow}
# ↓vectorの長さを取得する (1tick後には 矢はその長さ分先にある)
set {_length} to normal length of {_vec}
↑のコードで、とりあえず矢の速度がとれます これを使ってパーティクル書きます 1tick後の矢の位置と 今の矢の位置が取得できれば簡単です 仮に1tick後に40m先にあるとして 今のlocationから1tick後の位置に向かって,1mずつ、合計40m(40回)場所を取得して そこにパーティクルを表示させれば 1m感覚にエフェクトが表示されます
Deer
Deer9mo ago
おぉ…!
Tsukineko(月雲)
~40m~◄ これを ◄~1m~~1m~~1m~~1m~(割愛)~1m~~1m~◄ こうする もっというと 1tick後                 今の矢 ◄ ◄             ~1m~◄ ◄ ◄         ~1m~~1m~◄ ◄ ◄     ~1m~~1m~~1m~◄ ◄ こうやって、1mずつ伸ばして、40mまでパーティクルを表示する
Deer
Deer9mo ago
オカゲで仕組みは理解出来ました。これをコードにするとloop数をvectorに合わせる感じですかね?
Tsukineko(月雲)
sousou vectorには長さと向きが含まれてるから
on 何かしらのイベント:
# ここに 矢を射出する処理

set {_arrow} to last shot arrow

# ここに 射出した矢の速度を調整する処理

# ↓矢の位置を取得する
set {_loc} to location of {_arrow}

# ↓矢のvectorを取得する
set {_vec} to velocity of {_arrow}

# ↓vectorの長さを取得する (1tick後には 矢はその長さ分先にある)
set {_length} to normal length of {_vec}

# ↓1mの長さしかない矢のvectorを作る
set {_1mVec} to velocity of {_arrow}
set normal length of {_1mVec} to 1

# ↓距離分伸ばすので vectorの長さと同じ回数loop
loop floor({_length) times:
set {_loc} to {_loc} ~ {_1mVec}
show ~(割愛)
on 何かしらのイベント:
# ここに 矢を射出する処理

set {_arrow} to last shot arrow

# ここに 射出した矢の速度を調整する処理

# ↓矢の位置を取得する
set {_loc} to location of {_arrow}

# ↓矢のvectorを取得する
set {_vec} to velocity of {_arrow}

# ↓vectorの長さを取得する (1tick後には 矢はその長さ分先にある)
set {_length} to normal length of {_vec}

# ↓1mの長さしかない矢のvectorを作る
set {_1mVec} to velocity of {_arrow}
set normal length of {_1mVec} to 1

# ↓距離分伸ばすので vectorの長さと同じ回数loop
loop floor({_length) times:
set {_loc} to {_loc} ~ {_1mVec}
show ~(割愛)
こんな感じ?(未テスト)
Deer
Deer9mo ago
帰宅後ためしてみます。詳しく教えてくださりありがとうございます。
Tsukineko(月雲)
こっちでも試してみるわ ちな之応用すれば HSとか作れるよ
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
ほんとだ
Tsukineko(月雲)
逆に新しいだろこの方法
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
これに関しては矢を使うと斜め45度のときに真正面からと比べて1.4倍当たりやすくなるから個人的には微妙
Tsukineko(月雲)
雪玉普段使いしてるから失念してた でも1.5mの範囲攻撃よりはまし(
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
範囲攻撃になるかならないかはコード次第だと思う そのあたりはライントレースの鬼のじごくさんがなんとかしてくれる
Tsukineko(月雲)
実際↑の方法で 雪玉や矢並みに厳密な当たり判定って可能なの?
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
プレイヤーが近くにいるときにより細かい間隔でチェックするようにするとか、当たり判定に弾道の直線が交差するか調べるとかすればそこそこ厳密に行けると思う
Tsukineko(月雲)
やっぱ判定の細分化しかないかぁ
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
直線なら楽だけど重力実装したくなるだろうから計算だと厳しいよね
Tsukineko(月雲)
そこよな 重力計算メッチャだるそう
unnnnnnnnnnn
unnnnnnnnnnn9mo ago
初心者には少し難しいかもしれないから最初は矢でokだと思う
Tsukineko(月雲)
同意
Want results from more Discord servers?
Add your server
More Posts
リスト変数にテキストを入れたい```command /setname [<text>]: permission: op permission message: &cあなたは運営ではありません aliaseson console log ではspawnが使えない!?**コード**``` # location指定を関数にしてみた # 動作自体は正常 function lobbyLocation() :: location: set {_loc} to loNPCに防具を持ってクリックしたときに装備されないようにしたい``` Citizen Right Click: if npc is named "test": cancel event send "a" ``` みたいな感skript作動しないSkriptは動かないです Spigot 1.17.1 Skript 2.7.0特定のtagがついている人だけチェストが明けれなくなるやつ```on right click: if event-entity is chest named "ガチャ": if player is has tag "oni": UUIDから名前を取りたいランキングを作りたくて今までUUIDの変数を使っていたのでUUIDからプレイヤーの名前をとれますかね?インベントリに入っているアイテムの説明にある数字が読み込めない``` if name of current inventory contain "&7&l修復": cancel event if event-inventory i特定アイテムの識別による条件分岐が不動``` function getBuckPack() :: item: set {_value} to "省略" set {_item} to skull with value {_v特定スロットにおけるアイテム設置の禁止インベントリ内で特定のスロットに、特定のアイテム以外置けなくしたいのですが 『アイテム設置をキャンセル』する方法が分かりません inventory clickをキャンセルするだけでは置いただけ置いて外effect付与'apply potion of resistance 1 without particles to player for 1 second'を実行すると14秒の耐性が付きます。1秒と指定しているのに