1 :
名無しさん@お腹いっぱい。:
2 :
名無しさん@お腹いっぱい。:2008/05/22(木) 17:17:57 ID:TO4whmqv0
3 :
名無しさん@お腹いっぱい。:2008/05/22(木) 19:19:06 ID:LkgXhKAO0
「ニコスクリプト」「未公開スクリプト」で検索して今見つかるもの
投票・アンケート動画、弾幕ボタン動画、クイズ動画
選択分岐ノベルゲー動画
オセロやポーカー等のカードゲーム・ボードゲーム動画
ジャンルとしては既にこれ以外思いつかない感も強いけど
それぞれ完成度を高める余地はまだありそう
ただ細かな作りにしようとするほど処理の重さが激しくなる…
図形描画機能がもっと充実してほしいところ
5 :
名無しさん@お腹いっぱい。:2008/05/23(金) 19:44:16 ID:c4hd7ZIJ0
予想を裏切らん過疎だなあ
ニコ動作者向けの中でさらにこれほどマイナージャンルに限定した
スレじゃこんなもんか…人集まりさえすれば面白くなりそうなんだけど
前に「ボタン+スコア+スコア表示」の動画作った事あるけど、
コメが300越えた辺りからめっちゃ重くなって、500辺りでは正常に動かなくなった
それ以来スクリプトはトラウマ
8 :
名無しさん@お腹いっぱい。:2008/05/24(土) 10:43:11 ID:q8+R2rsF0
面白いって思ってマイリスしてくれる人はいるのに
なんといっても重さが致命的な欠点
処理を軽くする改善とかでなくていいから
表示コメント総数の上限をうp主が設定できるように
なるだけであっさり解決するんだが…
150くらいまでならスムーズに動いた
ジャンプメッセージを表示しない強制ループってどう実装するんですか?
ちなみにプレミアム会員です。
たとえば動画再生終了時に最初へ戻すループなら
@ジャンプ #0:00
を動画の最後で書けばOK
A動画からコメB動画ジャンプ→B動画でコメC動画再ジャンプ・・・した場合
C再生が終わったらAの飛び前のシークタイムに戻るんだろうか?
あ、いや自分で実験すればいいだけなんでやってみるけど・・・
.
音量を制御することは出来ませんか?
画像表示することってできる?
こんな機能あったんだ!なんというプログラマー向け。
公式のニコスクリプトのページに何にも書いてないじゃん、
アナウンス不足すぎる。
重くなるからわざとなのかな…。
16 :
名無しさん動画閲覧中@全板トナメ出場中:2008/06/27(金) 19:46:38 ID:iv7gzVZF0
過疎すぎるからage
今仕事中でちょっと試せないんだが
自分であとで試すつもりだがネタ振りだけしとく。
bigだけ禁止にしたい場合にさ、char.mailを調べることで
書き込みをやめさせられないかと考えたんだけど、
0::/ctrig(if(char.mail.indexOf('big')>=0),then:○○)
ここまではいいと思うんだ。○○でいったい何をすればよいだろう。
>>13,14
今のところむりぽ
画像は厳しいけど音量くらいなら今後実装されるかもね。
×char→○chat
職業病だな…。
コマンドの置換ってできないんだっけ?
今試してること書いていくわ。
【動作しない】
0::/ctrig(chat.message='代入可能?')
chatは参照専用のようだ。
【動作した】
0::/ctrig(replace(src:chat.message,dest:'おきかえ'))
ただしこれは、そのコメントそのものには間に合わない。
これがヒットしたあと別のコメントで同じ文字列があれば、置換するようだ。
つまりだ
>>18 コマンドの置換どころかコメントの置換ができない。
正確には「ctrigでまさに今ひっかけたコメント自体に
影響を与える方法が見つからない」だ。
あらかじめ0秒enable=falseのreplaceを仕込んでおいて、
そいつのsrcやenableを書き換えるってのも考えたんだが、
うまくいったとしてもそれじゃ同時に1つしかできないしな…。
もっと単純な実験
【動作しない】
0::/replace(src:'big',dest:'small')
コマンド欄は対象外のようだ。
当然、コメント欄のbigは置換された。
>>19の最後で書いたやつも試したけど、
これもその後のコメントにしか効かないからだめだ。
0::/r=replace(enabled=false)
0::/ctrig(r.src=chat.message;r.dest='おきかえ';r.enabled=true)
特定のコマンドを禁止するのは無理っぽい。
全強制で我慢するしかないか。
俺しかいない予感!
http://www.nicovideo.jp/watch/sm3039453 コレ↑を見て会得したイディオムを書いておく。いずれも動作確認済。
いずれ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
【文字列の一部を切り取る関数】
・まず、これを固定で記述しておく
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というエラーになってしまった。
しょうがないので決まったグローバル値に入れて、それを見てもらうことにしてみた。
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])
参照私だな
これスゴスギ
http://www.nicovideo.jp/watch/nm3716729
【substr注意事項】
substr_start、substr_endという変数が既にあった場合
へんな値が入っちゃうから、この名前は使わないでね!
>>24 >戻り値
ああ、その程度のであればそうなるんだけど…
substrみたいに複数の式を実行してる場合はどうなるんだろう。
最後の最後に、結果だけを記述(単体では文として意味を成さない)すれば
いいんだろうか…。
>参照渡し
なるほど、そういう渡し方ならいけるのか!
単に渡した変数に突っ込むとかやってた。
しかし「関数を使う時には必ず配列を渡し、popで値を取り出す」
という規約になるのか…それはそれで煩わしいな。
その動画は何度見ても凄いな。
今更だけどfor文はどっちかっていうとdo-while的な動きだよなぁ。
条件を先にもってこないといかん。直します。
値の返し方がわかった。
実行文の最後に、返したい値を記述しておけばいい。
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)って感じで使える
とじ括弧1個忘れた。
せっかくだからforも直しとく
0::/def_kari("
if( $1 < array.size, then:
dt(array[$1],y:20*$1);
test($1+1))test"
)
)
今回のメンテで、ニコスも変わるだろうね。
いままでにないプロパティ等も増えるのだろうか?
つーかあれらはみんなどうやって探したの?
それっぽいのをdt()して、undefined以外のが出るまで頑張ったんだろうか。
>>30 秘密の方法でソースファイルを・・・
@BGMも@ボタンみたいにニコスじゃ利用できないなんてならないといいんだが
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"
0::@BGM
0::/stopBGM(0)
20::/playBGM(0)
25::/stopBGM(0)
30::/playBGM(0)
こういう使い方はできるのか
なるほど、解析だったのか。
繰り返し構文はいまだ無し、ってことか…。
少し見ない間にいろいろできるようになったんだなw
>>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
),
""
)
)
繰り返しの話がよく出てくるようですが、
ニコスはコメントが投稿されるたびに最初から処理をやり直すので
多用すると大変なことになります。
>>36 foldとはなんでしょうか?
自分はニワン語のwikiに書いてあることしか知らんのです…。
重くなるのはおっしゃる通りなので、
繰り返し構文が無いのはわざとなのかなぁとも思ってはいるのですが。
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 :
名無しさん動画閲覧中@全板トナメ出場中:2008/07/07(月) 01:36:53 ID:DBV2vhGt0
>>38 なるほど!
他にも、wikiに載ってないのがあれば教えてもらえると助かります
>>39 これって、再生位置を変えれば音源3つ以上使えたりしないかな?
41 :
名無しさん動画閲覧中@全板トナメ出場中:2008/07/07(月) 23:59:07 ID:DBV2vhGt0
:=もあるみたいだ。=とかわらないみたいだけど
以前はその書式使えなかったんだけどな
7/5以降だな、使えるようになったのは
44 :
41:2008/07/08(火) 23:54:34 ID:knNmJ+yd0
ほかにも playStartTime ってのが増えてた。
実行結果: Tue Jul 8 23:11:14 GTM +900 2008
どうやら実行したパソコンの内蔵時計時間を返す模様。
さらに rand 関数の仕様も若干変わってるみたい。
引数に何も設定しないと自動的に playStartTime をシードにして乱数を生成する模様。
しかもソースを見る限り、呼び出すたびに値が変わるようになってる。
しかし playStartTime が文字列として長すぎるので毎回同じ値がかえってきてしまう。
(rand関数は11文字以上ではうまく動作しないみたい)
バグ放置ってことか。
まぁ、未だ「未公開スクリプト」だしな…。
スクリプトに@キーワードジャンプや@キーワードメッセージを書いていて
書かれたキーワードを含むメッセージがコメント一覧に現れてないように見えるのですが
これは他の人にも見えてないのでしょうか? 若しくは表示させる方法がありますか?
公式ヘルプの「コメント保護機能について」を見ましょう、
それは「ニコスコメント一覧」に送られているのですよ。
表示する方法は…ないっぽい。
>>47 レスありがとう
ああ そういうことだったんですか orz
答えが丸見え・・・
>>48 ああ、なるほど。自分も同じことを考えて、そしてあきらめたクチ。
50 :
46:2008/07/18(金) 02:52:49 ID:miq5uMtb0
どうやらフィルタを使うと答えが丸わかりなのは防げそうです
コメント一覧に表示する方法はなさそうですが・・・
フィルタによるクイズ動画だったら
ニコス実装前から(フィルタ実装直後に)あったからねぇ。
playStartTime が実数返すようになってるね。
計算しようと思ったらめんどい上にGTM+900しないといけない。
rand関数のバグも修正されてました。
無引数で関数を呼び出すと毎回違う値を返すようになりました。
:=の意味が判明したよ。
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になる
つまり:=は関数の中に限定した変数に代入するコマンドということだね。
演算子のオーバーロードもできた。
0::/ a=[];
a.def_kari("add", self.push($1));
a + 8 + 9;
dt(a[0]+", "+ a[1])
8, 9を表示。
それはちょっとまずいんでねーの
57 :
名無しさん@お腹いっぱい。:2008/08/05(火) 08:17:02 ID:1+dWM/8f0
全く皆さんの書いてることがアホで理解できん…。だが、
>>39の様に、@ボタンと@BGMを組み合わせた
動画を作りたいのですが、いったい投稿者コメント欄にどんなスクリプトを入れればいいのでしょうか?
レベル低い質問でサーセン^^;
>全く皆さんの書いてることがアホで理解できん…
けなしてるのか自虐なのか
↓を投稿者コメントのエディタに貼り付ければOK
0::/BGM(id:"sm3881670")
0:local shita @100:@ボタン 仕方ないね 仕方ないね 表示 white 100
0::/ctrig((chat.isYourPost&&chat.fromButton).alternative(playBGM(0)))
初心者でごめん、質問させてください。
投稿コメで文字を置換して色も変えたいんで
166::@ 置換 a (・∀・) orange
にしてみたら「a」を打っても置換されないんだが何処がおかしいのかな・・・
@と置換の間に半角スペースが入ってる・・・
166::@置換 a (・∀・) 表示 orange
投稿コマンド指定する場合は、その前の[表示/非表示]は省略できない。
>>61 ありがとう!
やってみたけど「a」打っても(・∀・)にならないでaが流れていく上に
コメントに表示されない・・・
そのコメを消そうと思っても消せないし何でだろう・・・そういうものなのかな
>>62 ごめん、@ボタン見てた('A`)
正しくは↓だな。
@置換[:ラベル] 置換前の言葉 [置換後の言葉] [単/全] [含む/含まない] [部分一致/完全一致]
>>63 それはやってみたんだけど色がつかない・・・orz
orangeってどこにつけたらいいのですか・・・
65 :
名無しさん@お腹いっぱい。:2008/08/06(水) 19:25:57 ID:/qD+8VDI0
>>58 >>59 馬鹿にしてるなんてトンでもない!自虐です!声が止まりませんが無事張り付きました。回答ありがとうございました!
@置換だとコマンド指定無理じゃね?
ニワン語使えば何とかなるが
0::/replace(src:"a",dest:"(・∀・)",color:0xff8800)
>>64 ごめんやっぱできた
166:orange:@置換 a (・∀・)
>>65 そういや停止処理忘れてました。
最後の行を↓に変えればok
0::/ctrig((chat.isYourPost&&chat.fromButton).alternative(playBGM(0);timer(timer:1,then:stopBGM(0)))
>>55 演算子のオーバーロードとfoldを組み合わせてmapが出来たよ。
0::/def_kari("sq", $1*$1)
0::/a = [];a.def_kari("add", self.push($1))
0::/a_org=[0,1,2,3,4,5,6,7,8,9,10]
0::/a_org.fold($1+sq($2),a)
1::/g_y=0;SIZE=10
1::/def_kari("print", dt($1,x:0,y:g_y,size:SIZE,pos:'hidari ue');g_y+=SIZE)
1::/a.fold(print($2),0)
普通に関数+再帰でmapを実装しようとしたけど、関数を引数に取れなかったのでこっちは
map関数の中に関数決めうち。
2::/def_kari("map",i=0;map_it($1,$2,i))
2::/def_kari("map_it",$2.push(sq($1[i]));i++;(i<$1.size).alternative(map_it($1,$2,i)))
2::/result = []
2::/map(a_org,result)
2::/result.fold(print($2),0)
どちらも 0,1,4,9,...,100を縦に並べて出力します。
おおwこれは凄い
lambda実装されないかなぁ
いきなり質問ですみません、”キーワード”を入力したら、
スクリプトが実行される式わかるかたいますでしょうか?
wikiを見てもいまいちわからなかったので素人ですみません。
例:Aと入力すればジャンプキャンセルが実行される。
この機能を搭載した動画ありましたのでどうやるのかがさっぱりです。
>例:Aと入力すればジャンプキャンセルが実行される。
/ctrig(chat.isYourPost.alternative((chat.message=="A").alternative(jumpCancel)))
でも普通はjumpCancelの替わりにフラグを立てて、ジャンプが実行される時に条件処理すると思う。
>>71様 レスありがとうございます
一応このスレにも似たようなやり方があったのでいろいろ試したんですが
/ctrig(chat.isYourPost.alternative((chat.message=="A").alternative(jumpCancel)))
↑このやり方でやってもやはりダメでした。あまり人様の動画のリンクを張るのは
自重したいところですが、説明が上手くできないもので(汗)
詳しくは
ttp://www.nicovideo.jp/watch/sm2890599の動画を 見ていただけたらと思います。簡単な特徴なんですが停止入力後、画面下中央に停止を一瞬表示されます。
コメント履歴には載らないのでメッセージは非表示設定です。一度ジャンプキャンセル実行したら
永遠とリピート状態のようです。簡単な説明で申し訳ありません
画面下に青枠で表示されるコメントは「local shita」に@置換されたものですね。
↑で書いてある通り、この動画でもジャンプキャンセルされてるのではなくフラグ処理をしてるようです。
0::/ctrig(chat.isYourPost.alternative((chat.message=="A").alternative(flg=true)))
XXX::/(!flg).alternative(jump("smXXXXXXX"))
のようにフラグ処理をしてやればいいんじゃないでしょうか。
また、コメント履歴を残したくない場合は↓のようにすると出来ます。
0:local:@置換 A 「A」 単 含まない 完全一致
@置換はデフォルトでは部分一致なので誤爆するので省略せずに完全一致指定する必要があります。
あと ×永遠と ○延々と
何度もご質問にお答えありがとうございます
試みたところ成功しました。本当に感謝します
ありがとうございました!