謎に重い自作関数

引数に渡したentityに 引数に渡したパラメータをもとにした性能の 弾丸を発射させる関数なのですが こいつを実行させると妙に重くなります ※2個目の関数です
function entityHeadVec(e: entity) :: vector:
set {_vec} to vector from {_e}'s head to location 1 meter infront of {_e}'s head
return {_vec}

function mobShootGun(entity: entity,dmg: number, prc: number, kb: number, speed: number, spread: number):
# 雪玉発射
make {_entity} shoot snowball at speed 0
# 変数設定
set {_projectile} to last shot projectile
# 重力消去
set gravity of {_projectile} to false
# 射撃者設定
set shooter of {_projectile} to {_entity}
# 弾のばらつきを作るためのランダムなvector生成
set {_spreadVec} to vector randNum(-1,1),randNum(-1,1),randNum(-1,1)
# 弾の直進vector生成
set {_shootVec} to entityHeadVec({_entity})
# spreadVecの強さをランダムで再設定
set normal length of {_spreadVec} to randNum(0,{_spread})*0.1
# velocityを消去
delete velocity of {_projectile}
# 再push
push {_projectile} {_shootVec}
push {_projectile} {_spreadVec}
# 弾速をspeedに基づいて再設定
set normal length of velocity of {_projectile} to {_speed}
#broadcast "%{_dmg}, {_prc}, {_spread}%"
# metadataで性能を保存
set metadata value "damage" of {_projectile} to {_dmg}
set metadata value "piercing" of {_projectile} to {_prc}
set metadata value "kb" of {_projectile} to {_kb}
function entityHeadVec(e: entity) :: vector:
set {_vec} to vector from {_e}'s head to location 1 meter infront of {_e}'s head
return {_vec}

function mobShootGun(entity: entity,dmg: number, prc: number, kb: number, speed: number, spread: number):
# 雪玉発射
make {_entity} shoot snowball at speed 0
# 変数設定
set {_projectile} to last shot projectile
# 重力消去
set gravity of {_projectile} to false
# 射撃者設定
set shooter of {_projectile} to {_entity}
# 弾のばらつきを作るためのランダムなvector生成
set {_spreadVec} to vector randNum(-1,1),randNum(-1,1),randNum(-1,1)
# 弾の直進vector生成
set {_shootVec} to entityHeadVec({_entity})
# spreadVecの強さをランダムで再設定
set normal length of {_spreadVec} to randNum(0,{_spread})*0.1
# velocityを消去
delete velocity of {_projectile}
# 再push
push {_projectile} {_shootVec}
push {_projectile} {_spreadVec}
# 弾速をspeedに基づいて再設定
set normal length of velocity of {_projectile} to {_speed}
#broadcast "%{_dmg}, {_prc}, {_spread}%"
# metadataで性能を保存
set metadata value "damage" of {_projectile} to {_dmg}
set metadata value "piercing" of {_projectile} to {_prc}
set metadata value "kb" of {_projectile} to {_kb}
こいつを何とか改善する方法はありませんか…?
No description
21 Replies
___
___11mo ago
function entityHeadVec(e: entity) :: vector:
set {_vec} to vector from {_e}'s head to location 1 meter infront of {_e}'s head
return {_vec}

function mobShootGun(entity: entity,dmg: number, prc: number, kb: number, speed: number, spread: number):
# 雪玉発射
make {_entity} shoot snowball at speed 0
# 変数設定
set {_projectile} to last shot projectile
# 重力消去
set gravity of {_projectile} to false
# 射撃者設定
set shooter of {_projectile} to {_entity}
# 弾のばらつきを作るためのランダムなvector生成
set {_yaw} to random number between 0 and 360
set {_pitch} to random number between -90 and 90
set {_spreadVec} to (vector from yaw {_yaw} and pitch {_pitch})
# 弾の直進vector生成
set {_shootVec} to entityHeadVec({_entity})
# spreadVecの強さをランダムで再設定
set normal length of {_spreadVec} to (random number between 0 and {_spread}) * 0.1
# velocityを消去
delete velocity of {_projectile}
# 再push
push {_projectile} {_shootVec}
push {_projectile} {_spreadVec}
# 弾速をspeedに基づいて再設定
set normal length of velocity of {_projectile} to {_speed}
#broadcast "%{_dmg}, {_prc}, {_spread}%"
# metadataで性能を保存
set metadata value "damage" of {_projectile} to {_dmg}
set metadata value "piercing" of {_projectile} to {_prc}
set metadata value "kb" of {_projectile} to {_kb}
set {_id} to id of {_projectile}
# 10秒後に削除
set {projectiles::%{_id}%} to {_projectile}
set {projectiles::%{_id}%::ticks} to 20 * 10

on every tick:
loop {projectiles::*}:
subtract 1 from {projectiles::%loop-index%::ticks}
{projectiles::%loop-index%::ticks} <= 0
kill {projectiles::%loop-index%}
delete {projectiles::%loop-index%::*}
delete {projectiles::%loop-index%}
function entityHeadVec(e: entity) :: vector:
set {_vec} to vector from {_e}'s head to location 1 meter infront of {_e}'s head
return {_vec}

function mobShootGun(entity: entity,dmg: number, prc: number, kb: number, speed: number, spread: number):
# 雪玉発射
make {_entity} shoot snowball at speed 0
# 変数設定
set {_projectile} to last shot projectile
# 重力消去
set gravity of {_projectile} to false
# 射撃者設定
set shooter of {_projectile} to {_entity}
# 弾のばらつきを作るためのランダムなvector生成
set {_yaw} to random number between 0 and 360
set {_pitch} to random number between -90 and 90
set {_spreadVec} to (vector from yaw {_yaw} and pitch {_pitch})
# 弾の直進vector生成
set {_shootVec} to entityHeadVec({_entity})
# spreadVecの強さをランダムで再設定
set normal length of {_spreadVec} to (random number between 0 and {_spread}) * 0.1
# velocityを消去
delete velocity of {_projectile}
# 再push
push {_projectile} {_shootVec}
push {_projectile} {_spreadVec}
# 弾速をspeedに基づいて再設定
set normal length of velocity of {_projectile} to {_speed}
#broadcast "%{_dmg}, {_prc}, {_spread}%"
# metadataで性能を保存
set metadata value "damage" of {_projectile} to {_dmg}
set metadata value "piercing" of {_projectile} to {_prc}
set metadata value "kb" of {_projectile} to {_kb}
set {_id} to id of {_projectile}
# 10秒後に削除
set {projectiles::%{_id}%} to {_projectile}
set {projectiles::%{_id}%::ticks} to 20 * 10

on every tick:
loop {projectiles::*}:
subtract 1 from {projectiles::%loop-index%::ticks}
{projectiles::%loop-index%::ticks} <= 0
kill {projectiles::%loop-index%}
delete {projectiles::%loop-index%::*}
delete {projectiles::%loop-index%}
重くないけど、発射した雪玉がロードされていないチャンクに入ると更新されなくなって静止するから、その残留してる雪玉が重さの原因だと思います タイマーとか付けて消しましょう
月猫ch
月猫chOP11mo ago
なるほど… となると、一般playerの発射した玉も怪しいんですかね
___
___11mo ago
そうなるね send "%all entities%" で確かめてみるといい
___
___11mo ago
マップの広さによっては、そのまま進めば当たるはずの弾でもあたらないことがある
No description
月猫ch
月猫chOP11mo ago
一応400x400です
___
___11mo ago
view-distanceがデフォルトで10チャンクで最大でも15なら十分ありえる
No description
___
___11mo ago
弾が残留することを利用すれば高台から撃ちまくって、間の読み込まれてないチャンクに残留させておけば、敵が読み込んだ時に動き出して当てることができる 空に撃ちまくればサーバーを落とすこともできる
月猫ch
月猫chOP11mo ago
うえぇぇ…
___
___11mo ago
今更だけど画像の160じゃなくて48ですね
unnnnnnnnnnn
unnnnnnnnnnn11mo ago
これ解決しました?
月猫ch
月猫chOP11mo ago
結局してないですね… なんだか射出した弾がplayerに当たると重くなるみたいで
unnnnnnnnnnn
unnnnnnnnnnn11mo ago
set metadata value "damage" of {_projectile} to {_dmg}
set metadata value "piercing" of {_projectile} to {_prc}
set metadata value "kb" of {_projectile} to {_kb}
set metadata value "damage" of {_projectile} to {_dmg}
set metadata value "piercing" of {_projectile} to {_prc}
set metadata value "kb" of {_projectile} to {_kb}
これを読み取ってる部分見せてほしい こっちの環境でやってみたら全く重くならなかったから
月猫ch
月猫chOP11mo ago
Agames突然コンソールいじれなくなっちゃった…
月猫ch
月猫chOP11mo ago
No description
unnnnnnnnnnn
unnnnnnnnnnn11mo ago
ええ 今どうしてるの
月猫ch
月猫chOP11mo ago
月猫ch
月猫chOP11mo ago
@unnnnnnnnnnn 持ってこれました 一部補足ですが、getGun~とか 銃のスペックを取得してるような変数は 事前にymlから読み取って変数に保存されたデータを呼び出しているだけなので 特に問題はないと思います ちなみに現状ありえそうだと思っているのは rotate_() ※rotationを変えるpacket送信関数 を player以外( それこそゾンビとか)に適応しようとして重くなってるのかなって感じです
unnnnnnnnnnn
unnnnnnnnnnn11mo ago
on cs shootってskriptで出した雪玉にも反応するの? setしたmetadataをどこで使ってるか見たい 多分どこかにon cs shootで設定したmetadataとmobShootGunで雪玉出すときに設定したmetadataを両方処理してるイベントがあるはずで
on damage:
event-projectile is set
metadata value "damage" of event-projectile is set
set damage to metadata value "damage" of event-projectile
on damage:
event-projectile is set
metadata value "damage" of event-projectile is set
set damage to metadata value "damage" of event-projectile
みたいなのない? これが本当ならそこでおかしくなってそうだなって思った
unnnnnnnnnnn
unnnnnnnnnnn11mo ago
GitHub
SkRage/src/main/java/com/akon/skrage/skript/syntaxes/CrackShot/EvtC...
Skript Addon. Contribute to akon1248/SkRage development by creating an account on GitHub.
月猫ch
月猫chOP11mo ago
月猫ch
月猫chOP11mo ago
Want results from more Discord servers?
Add your server