08/05/22 17:16:06 TO4whmqv0
ニコニコ動画のニコスクリプト「@」機能や未公開スクリプト「ニワン語」の
使用動画や可能性について語るスレです。動画をうpしていない人も参加OKです
スクリプト使用動画であれば自貼り・宣伝も構いません
マターリ進行でお願いします。sageなくてもOKです
公式ヘルプ・ニコスクリプトについて
URLリンク(help.nicovideo.jp)
ニコスクリプトwiki
URLリンク(nicowiki.com)
ニワン語wiki
URLリンク(nicowiki.com)
意図としては質問スレではないものの雑談よりもそっちの話題も多くなるかもしれないので、
全くの初心者による初歩の質問&回答の場としても使えるスレとします
質問は後述テンプレに沿った事務的な書き方でOKとしますが、最低限一度は上記のヘルプ、Wiki等を全て
読んで、それでもわからなかった問題のみ書いて下さい
その上での質問であれば簡単な見落としや理解不足でもお互い許し合いの精神で
2:名無しさん@お腹いっぱい。
08/05/22 17:17:57 TO4whmqv0
スクリプト以外がメインの話題なら
関連スレ
【ニコニコ】うp主・動画職人雑談所 Part7
スレリンク(streaming板)
ニコニコ動画質問スレ34
スレリンク(streaming板)
【全力】ニコニコ関連の質問に全力で答えるスレ3
スレリンク(streaming板)
~質問テンプレ~
【質問内容】(例:~~をしてみたいけど失敗する。解決法はありますか? or こういう事は出来る? etc)
【スクリプト】(自分で試してみた失敗スクリプトなど)
【動画】(実際にスクリプトを試している自分の動画のURLなど)
3:名無しさん@お腹いっぱい。
08/05/22 19:19:06 LkgXhKAO0
知ってると得する?ニコスクリプト
URLリンク(www.nicovideo.jp)
この講座が分かりやすかった
4:名無しさん@お腹いっぱい。
08/05/23 02:11:28 c4hd7ZIJ0
「ニコスクリプト」「未公開スクリプト」で検索して今見つかるもの
投票・アンケート動画、弾幕ボタン動画、クイズ動画
選択分岐ノベルゲー動画
オセロやポーカー等のカードゲーム・ボードゲーム動画
ジャンルとしては既にこれ以外思いつかない感も強いけど
それぞれ完成度を高める余地はまだありそう
ただ細かな作りにしようとするほど処理の重さが激しくなる…
図形描画機能がもっと充実してほしいところ
5:名無しさん@お腹いっぱい。
08/05/23 19:44:16 c4hd7ZIJ0
予想を裏切らん過疎だなあ
ニコ動作者向けの中でさらにこれほどマイナージャンルに限定した
スレじゃこんなもんか…人集まりさえすれば面白くなりそうなんだけど
6:名無しさん@お腹いっぱい。
08/05/23 20:53:35 M0iTXomc0
前に「ボタン+スコア+スコア表示」の動画作った事あるけど、
コメが300越えた辺りからめっちゃ重くなって、500辺りでは正常に動かなくなった
それ以来スクリプトはトラウマ
7:名無しさん@お腹いっぱい。
08/05/24 00:44:23 KgBEQ5uA0
ニコスクリプト専用スレ
URLリンク(bbs.nicovideo.jp)
8:名無しさん@お腹いっぱい。
08/05/24 10:43:11 q8+R2rsF0
面白いって思ってマイリスしてくれる人はいるのに
なんといっても重さが致命的な欠点
処理を軽くする改善とかでなくていいから
表示コメント総数の上限をうp主が設定できるように
なるだけであっさり解決するんだが…
150くらいまでならスムーズに動いた
9:名無しさん動画閲覧中@全板トナメ出場中
08/05/29 19:25:23 MztWy8FI0
ジャンプメッセージを表示しない強制ループってどう実装するんですか?
ちなみにプレミアム会員です。
10:名無しさん動画閲覧中@全板トナメ出場中
08/06/01 14:38:06 bzodJ7Gt0
たとえば動画再生終了時に最初へ戻すループなら
@ジャンプ #0:00
を動画の最後で書けばOK
11:名無しさん動画閲覧中@全板トナメ出場中
08/06/03 09:56:38 GkH4kT9M0
A動画からコメB動画ジャンプ→B動画でコメC動画再ジャンプ・・・した場合
C再生が終わったらAの飛び前のシークタイムに戻るんだろうか?
あ、いや自分で実験すればいいだけなんでやってみるけど・・・
12:名無しさん動画閲覧中@全板トナメ出場中
08/06/15 00:03:59 9hTg0IK00
.
13:名無しさん動画閲覧中@全板トナメ出場中
08/06/26 01:09:04 J7cpexd60
音量を制御することは出来ませんか?
14:名無しさん動画閲覧中@全板トナメ出場中
08/06/26 17:31:10 KA8jO0BE0
画像表示することってできる?
15:名無しさん動画閲覧中@全板トナメ出場中
08/06/27 01:20:54 iv7gzVZF0
こんな機能あったんだ!なんというプログラマー向け。
公式のニコスクリプトのページに何にも書いてないじゃん、
アナウンス不足すぎる。
重くなるからわざとなのかな…。
16:名無しさん動画閲覧中@全板トナメ出場中
08/06/27 19:46:38 iv7gzVZF0
過疎すぎるからage
今仕事中でちょっと試せないんだが
自分であとで試すつもりだがネタ振りだけしとく。
bigだけ禁止にしたい場合にさ、char.mailを調べることで
書き込みをやめさせられないかと考えたんだけど、
0::/ctrig(if(char.mail.indexOf('big')>=0),then:○○)
ここまではいいと思うんだ。○○でいったい何をすればよいだろう。
>>13,14
今のところむりぽ
画像は厳しいけど音量くらいなら今後実装されるかもね。
17:名無しさん動画閲覧中@全板トナメ出場中
08/06/27 19:48:52 iv7gzVZF0
×char→○chat
職業病だな…。
18:名無しさん動画閲覧中@全板トナメ出場中
08/06/27 23:21:52 D1RXZKoH0
コマンドの置換ってできないんだっけ?
19:名無しさん動画閲覧中@全板トナメ出場中
08/06/28 00:19:07 8FTjommQ0
今試してること書いていくわ。
【動作しない】
0::/ctrig(chat.message='代入可能?')
chatは参照専用のようだ。
【動作した】
0::/ctrig(replace(src:chat.message,dest:'おきかえ'))
ただしこれは、そのコメントそのものには間に合わない。
これがヒットしたあと別のコメントで同じ文字列があれば、置換するようだ。
つまりだ
>>18
コマンドの置換どころかコメントの置換ができない。
正確には「ctrigでまさに今ひっかけたコメント自体に
影響を与える方法が見つからない」だ。
あらかじめ0秒enable=falseのreplaceを仕込んでおいて、
そいつのsrcやenableを書き換えるってのも考えたんだが、
うまくいったとしてもそれじゃ同時に1つしかできないしな…。
20:名無しさん動画閲覧中@全板トナメ出場中
08/06/28 00:21:41 8FTjommQ0
もっと単純な実験
【動作しない】
0::/replace(src:'big',dest:'small')
コマンド欄は対象外のようだ。
当然、コメント欄のbigは置換された。
21:名無しさん動画閲覧中@全板トナメ出場中
08/06/28 00:50:17 8FTjommQ0
>>19の最後で書いたやつも試したけど、
これもその後のコメントにしか効かないからだめだ。
0::/r=replace(enabled=false)
0::/ctrig(r.src=chat.message;r.dest='おきかえ';r.enabled=true)
特定のコマンドを禁止するのは無理っぽい。
全強制で我慢するしかないか。
22:名無しさん動画閲覧中@全板トナメ出場中
08/07/01 13:48:13 RKekU5lV0
俺しかいない予感!
URLリンク(www.nicovideo.jp)
コレ↑を見て会得したイディオムを書いておく。いずれも動作確認済。
いずれwikiに載せるつもり。誰かやってくれたらそれはそれで嬉しい。
【繰り返し構文を使う方法】
C言語における以下のソースとだいたい同じ動作をするニワン語。
型 array[] = {"test1","test2","test3"}, i;
for(i=0;i<配列要素数;i++){
printf(array[i]);
}
↓
0::/array = ["test1","test2","test3"]
0::/i=0;def_kari("test",dt(array[i],x:10,y:20*i);i=i+1;if(i<array.size,then:test))
0::/test
・同様のことを変数iを使わなくても可能。
でも多分こっちのほうがいちいちスタックが増える分遅いと思う。
0::/array = ["test1","test2","test3"]
0::/def_kari("test",dt(array[$1],x:10,y:20*$1);if($1+1<array.size,then:test($1+1)))
0::/test(0)
・breakに相当することをしたい場合は、内部にif文を記述したうえ
そのelseで、iの増加と再帰を行うことで実現できる。
0::/array = ["test1","test2","test3"]
0::/i=0;def_kari("test",if(array[i]=="test2",then:dt("hit"+i),else:i=i+1;if(i<array.size,then:test)))
0::/test
23:名無しさん動画閲覧中@全板トナメ出場中
08/07/01 15:02:46 RKekU5lV0
【文字列の一部を切り取る関数】
・まず、これを固定で記述しておく
0::/def_kari("substr",substr_start=$2;if($1.size-1<$3,then:substr_end=$1.size-1,else:substr_end=$3);substr_ret="";substr_inner("$1"))
0::/def_kari("substr_inner",if(substr_start<=substr_end,then:substr_ret=substr_ret+$1.index(substr_start);substr_start=substr_start+1;substr_inner($1)))
・使うときは以下のように使う
substr(文字列,開始index,終了index)
結果の文字列はsubstr_retという変数に格納される。
使用例)0::/substr("abcde",2,3);dt("■"+substr_ret+"■") →結果「■cd■」
----以下プログラマ向け情報----
substringくらい作ってくれよ!
ということで作ってみたのだが…。
関数呼び出し時に、呼び出し元に値を返す手段がわからない。
引数渡しを試みるも、どうやら値渡しのようだ。
要素1個の配列にして、配列名で渡して[0]に代入してみたが
object:147というエラーになってしまった。
しょうがないので決まったグローバル値に入れて、それを見てもらうことにしてみた。
24:名無しさん動画閲覧中@全板トナメ出場中
08/07/01 22:55:00 /cYtd574O
substrすげえw
0::/def_kari("foo",$1+$2)
0::/dt(foo(4,6))
で10が取れるから、関数の結果が戻り値だな
0::/def_kari("bar",$1.push("foobar"))
0::/array=[];bar(array);dt(array[0])
参照私だな
これスゴスギ
URLリンク(www.nicovideo.jp)
25:名無しさん動画閲覧中@全板トナメ出場中
08/07/01 23:14:03 1bq+cfNO0
【substr注意事項】
substr_start、substr_endという変数が既にあった場合
へんな値が入っちゃうから、この名前は使わないでね!
>>24
>戻り値
ああ、その程度のであればそうなるんだけど…
substrみたいに複数の式を実行してる場合はどうなるんだろう。
最後の最後に、結果だけを記述(単体では文として意味を成さない)すれば
いいんだろうか…。
>参照渡し
なるほど、そういう渡し方ならいけるのか!
単に渡した変数に突っ込むとかやってた。
しかし「関数を使う時には必ず配列を渡し、popで値を取り出す」
という規約になるのか…それはそれで煩わしいな。
その動画は何度見ても凄いな。
26:名無しさん動画閲覧中@全板トナメ出場中
08/07/02 10:29:55 gs610Xb90
今更だけどfor文はどっちかっていうとdo-while的な動きだよなぁ。
条件を先にもってこないといかん。直します。
27:名無しさん動画閲覧中@全板トナメ出場中
08/07/03 10:55:56 MXEmNZmc0
値の返し方がわかった。
実行文の最後に、返したい値を記述しておけばいい。
substrも、びっくりするほど簡単な関数になった。
…んだけどさ。
再起が深さ14くらいで落ちる。フラッシュプレーヤーがフリーズして
リロードしないといけない状態になる。
for文も14回しかまわせないってことで。
考えてたいろんなアイデアが出鼻くじかれた。
もうちょっとスクリプト強化されるまでスルーするわ。
一応、substr。(読みやすいように改行してる)
0::/def_kari("substr",
if( $2 <= $3 && $2 < $1.size, then:
$1[$2] + substr( $1, $2+1, $3 )
,else:
""
)
これでret = substr("abcdefg",3,5)って感じで使える
28:名無しさん動画閲覧中@全板トナメ出場中
08/07/03 11:16:12 MXEmNZmc0
とじ括弧1個忘れた。
せっかくだからforも直しとく
0::/def_kari("
if( $1 < array.size, then:
dt(array[$1],y:20*$1);
test($1+1))test"
)
)
29:名無しさん動画閲覧中@全板トナメ出場中
08/07/04 21:36:18 e9lFZQ3d0
URLリンク(blog.nicovideo.jp)
30:名無しさん動画閲覧中@全板トナメ出場中
08/07/05 14:38:29 Vjb7xJH50
今回のメンテで、ニコスも変わるだろうね。
いままでにないプロパティ等も増えるのだろうか?
つーかあれらはみんなどうやって探したの?
それっぽいのをdt()して、undefined以外のが出るまで頑張ったんだろうか。
31:名無しさん動画閲覧中@全板トナメ出場中
08/07/05 15:17:52 57xSH9Au0
>>30
秘密の方法でソースファイルを・・・
@BGMも@ボタンみたいにニコスじゃ利用できないなんてならないといいんだが
32:名無しさん動画閲覧中@全板トナメ出場中
08/07/05 20:16:23 57xSH9Au0
vid = BGM(id:'sm??', x:, y:, width:, height:, visual:, volume:)
playBGM(vid)
stopBGM(vid)
addAtPausePoint(vpos:, wait:)
関数はあったけどニワン語からだとうまく使えないorz
とりあえず解析できた変更点は文字修飾の追加くらい
dt("hoge", filter:[フィルター])
[フィルター] = "fuchi" or "kasumi" or "kage"
33:名無しさん動画閲覧中@全板トナメ出場中
08/07/05 23:33:15 57xSH9Au0
0::@BGM
0::/stopBGM(0)
20::/playBGM(0)
25::/stopBGM(0)
30::/playBGM(0)
こういう使い方はできるのか
34:名無しさん動画閲覧中@全板トナメ出場中
08/07/06 02:38:46 aqf9OrQG0
なるほど、解析だったのか。
繰り返し構文はいまだ無し、ってことか…。
35:名無しさん動画閲覧中@全板トナメ出場中
08/07/06 11:01:17 LHfZ3n0i0
少し見ない間にいろいろできるようになったんだなw
36:名無しさん動画閲覧中@全板トナメ出場中
08/07/06 14:43:45 b1Mq8WTa0
>>27のsubstrを改良して再帰の深さに関する問題を解決しました。
foldを使えば回数の制限なしで繰り返し制御が可能です。
0::/def_kari("substr",
_a=[0];_s=$1;_i=$2;_e=$3;
_a.fold(
if(_i <= _e && _i < _s.size,
then:
_a.push(0);
$1 + _s[_i++],
else:
$1
),
""
)
)
繰り返しの話がよく出てくるようですが、
ニコスはコメントが投稿されるたびに最初から処理をやり直すので
多用すると大変なことになります。
37:名無しさん動画閲覧中@全板トナメ出場中
08/07/06 15:18:56 aqf9OrQG0
>>36
foldとはなんでしょうか?
自分はニワン語のwikiに書いてあることしか知らんのです…。
重くなるのはおっしゃる通りなので、
繰り返し構文が無いのはわざとなのかなぁとも思ってはいるのですが。
38:名無しさん動画閲覧中@全板トナメ出場中
08/07/06 16:04:44 b1Mq8WTa0
foldとは簡単に言えば配列の各要素に対して処理を行うメソッドです。
使用方法
配列.fold(処理,初期値)
処理の中では $1 が一つ前での実行結果、$2 が現在の要素になります。
初期値は先頭の要素の $1 の値です。
使用例
arr=[0,1,2,3,4,5,6,7,8,9,10]
dt( arr.fold( $1+$2 , 0) )
実行結果
55
繰り返し処理は、
最初に要素数が1の配列を用意して、
foldの処理文で配列の要素数を増やすことで実現しています。
39:名無しさん動画閲覧中@全板トナメ出場中
08/07/07 01:36:53 DBV2vhGt0
B.G.Mニコスクリプトでケツはたたけるのか?最終鬼畜兄貴のケツドラム
URLリンク(www.nicovideo.jp)
@BGMをつかって早速動画を作ってみました。
ボタンを押すと兄貴が唸ります。
40:名無しさん動画閲覧中@全板トナメ出場中
08/07/07 12:33:51 AEaReKh40
>>38
なるほど!
他にも、wikiに載ってないのがあれば教えてもらえると助かります
>>39
これって、再生位置を変えれば音源3つ以上使えたりしないかな?
41:名無しさん動画閲覧中@全板トナメ出場中
08/07/07 23:59:07 DBV2vhGt0
配列関係
join
0::/arr=[1,2,3,4,5]
0::/dt(arr.join("+") + " = " + arr.sum)
実行結果 : 1+2+3+4+5=15
数値関係
sin, cos, pow
0::/x=3.1415
0::/a=x.cos; b=x.sin; c=x.pow(2)
++ -- += -= *= /= %=
c言語などと同じ
オブジェクト関係
local, self
URLリンク(bbs.nicovideo.jp)
ここに詳しく乗ってます
大体使えそうなのはこんな感じかなと
42:名無しさん動画閲覧中@全板トナメ出場中
08/07/08 00:21:03 UBXXfNm3O
:=もあるみたいだ。=とかわらないみたいだけど
43:名無しさん動画閲覧中@全板トナメ出場中
08/07/08 04:45:02 sEHMRnn/0
以前はその書式使えなかったんだけどな
7/5以降だな、使えるようになったのは
44:41
08/07/08 23:54:34 knNmJ+yd0
ほかにも playStartTime ってのが増えてた。
実行結果: Tue Jul 8 23:11:14 GTM +900 2008
どうやら実行したパソコンの内蔵時計時間を返す模様。
さらに rand 関数の仕様も若干変わってるみたい。
引数に何も設定しないと自動的に playStartTime をシードにして乱数を生成する模様。
しかもソースを見る限り、呼び出すたびに値が変わるようになってる。
しかし playStartTime が文字列として長すぎるので毎回同じ値がかえってきてしまう。
(rand関数は11文字以上ではうまく動作しないみたい)
45:名無しさん動画閲覧中@全板トナメ出場中
08/07/09 21:19:30 btBxki5L0
バグ放置ってことか。
まぁ、未だ「未公開スクリプト」だしな…。
46:名無しさん@お腹いっぱい。
08/07/17 15:21:47 AzA/SzmR0
スクリプトに@キーワードジャンプや@キーワードメッセージを書いていて
書かれたキーワードを含むメッセージがコメント一覧に現れてないように見えるのですが
これは他の人にも見えてないのでしょうか? 若しくは表示させる方法がありますか?
47:名無しさん@お腹いっぱい。
08/07/17 16:00:45 5setO/UG0
公式ヘルプの「コメント保護機能について」を見ましょう、
それは「ニコスコメント一覧」に送られているのですよ。
表示する方法は…ないっぽい。
48:名無しさん@お腹いっぱい。
08/07/17 21:03:16 2fb7G3DU0
>>47
レスありがとう
ああ そういうことだったんですか orz
答えが丸見え・・・
49:名無しさん@お腹いっぱい。
08/07/17 21:23:05 5setO/UG0
>>48
ああ、なるほど。自分も同じことを考えて、そしてあきらめたクチ。
50:46
08/07/18 02:52:49 miq5uMtb0
どうやらフィルタを使うと答えが丸わかりなのは防げそうです
コメント一覧に表示する方法はなさそうですが・・・
51:名無しさん@お腹いっぱい。
08/07/18 11:05:35 oRvurqM90
フィルタによるクイズ動画だったら
ニコス実装前から(フィルタ実装直後に)あったからねぇ。
52:名無しさん@お腹いっぱい。
08/07/20 14:21:14 xS21zkW70
playStartTime が実数返すようになってるね。
計算しようと思ったらめんどい上にGTM+900しないといけない。
53:名無しさん@お腹いっぱい。
08/07/21 18:27:34 oofjze7f0
rand関数のバグも修正されてました。
無引数で関数を呼び出すと毎回違う値を返すようになりました。
54:名無しさん@お腹いっぱい。
08/07/26 21:15:06 xNYEtnTZ0
:=の意味が判明したよ。
0::/ a=6;
def_kari("b", a:=9; dt("local:"+ a, pos:"shita"));
b;
dt("global:"+ a, pos:"ue")
実行するとlocal:9 global:6と表示される。a:=9をa=9に直すとlocal:9 global:9になる
つまり:=は関数の中に限定した変数に代入するコマンドということだね。
55:名無しさん@お腹いっぱい。
08/07/26 21:19:15 xNYEtnTZ0
演算子のオーバーロードもできた。
0::/ a=[];
a.def_kari("add", self.push($1));
a + 8 + 9;
dt(a[0]+", "+ a[1])
8, 9を表示。
56:名無しさん@お腹いっぱい。
08/07/29 04:18:45 sCkr+sEy0
それはちょっとまずいんでねーの
57:名無しさん@お腹いっぱい。
08/08/05 08:17:02 1+dWM/8f0
全く皆さんの書いてることがアホで理解できん…。だが、>>39の様に、@ボタンと@BGMを組み合わせた
動画を作りたいのですが、いったい投稿者コメント欄にどんなスクリプトを入れればいいのでしょうか?
レベル低い質問でサーセン^^;