スポンサード リンク

[ [[ニコスクリプト]] - ニワン語 - [[ニコスクリプト⇔二ワン語]] - [[投稿者コメントレシピ]] ]

&size(30){ニワン語};
----
#contents
----
*基本概要[#gaiyou]
[[ニコスクリプト]]の「@」機能を使用しないで、独自に手動でスクリプトを書き込むことが可能です。

-投稿者コメントのコメント欄で、「/」の後にスクリプトを書き込みます。
-基本的にニコスクリプトの内容は全て再現できます。
むしろニコスクリプトの内部処理はニワン語で行っています。
-コマンド欄の内容は無視されます。
-式は;で区切る事で一行に複数の式を書けます。ただし、行の一番最後の文字を;にする事はできません。また利便性が無いので通常は使用しませんが下のafterという構文で書くことも出来ます。また , でも同等の処理が出来るようです。
 0::/txt='テスト';dt(txt)
 0::/(txt='テスト').after(dt(txt))

-=の右側が命令の場合は代入式として作用せず、=の左側がラベルとして設定され即実行されます。
(関数がコメントへの参照を返すわけではないようです)
 0::/a=dt('テスト')

-文字列を囲む記号はダブルクォート(")とシングルクォート(')のどちらでも構いません。
ただし各々バックスラッシュの処理が違います。
前者の場合のみ常にエスケープ文字として扱われます。例えば\nと入れると文中で改行が出来ます。
後者の場合はシングルクォートの直前にある場合のみエスケープ文字として扱われます。改行できません。
 0::/txt="1行目\n2行目";dt(txt)

-基本的に一度表示すると消去するように命令を送らない限り消えません。
具体的には下のように直接visibleの要素を書き換えることによって非表示にします。
 0::/a=dt('テスト')
 10::/a.visible=false

-独自スクリプト使用動画については「[[未公開スクリプト>http://www.nicovideo.jp/tag/%E6%9C%AA%E5%85%AC%E9%96%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88]]」タグを参照して下さい。


----
*命令または関数 [#function]

**drawShape [#drawshape]
drawShape(x:'''x座標''',y:'''y座標''',z:'''順序''',shape:'''図形''',width:'''幅''',height:'''高さ''',color:'''色''',visible:'''表示''',pos:'''位置''',mask:'''マスク''',commentmask:'''コメントマスク''',alpha:'''透明度''',rotation:'''回転''',mover:'''移動方法''')

画面上に任意の図形を描く。
設定の必要性が無い項目は省略できる。
省略した場合の初期値は()の中のものとなる。

-x:'''x座標'''(0)、y:'''y座標'''(0)
--表示を行う座標。
--後述のposで設定した座標を(0,0)とし、右下に向かって値が大きくなる。

-z:'''順序'''(0)
--図形の重ね合わせの順序。
--値が大きいほど前面に表示される。

-shape:'''図形'''('circle')
--'circle'または'rect'を設定する。
--'circle'は楕円、'rect'は長方形を描画する。

-width:'''幅'''(30)、height:'''高さ'''(30)
--図形の大きさを設定する。

-color:'''色'''(16777215)
--数値を設定する。
--RGB(#000000~#FFFFFF)を10進数に変換した値を指定する。
--もし変換が面倒であれば「0xffffff」のような書き方をすればよい。

-visible:'''表示'''(true)
--trueまたはfalseを設定。
--flaseを指定すると描画されなくなる。

-pos:'''位置'''('naka')
--'naka'、'ue'、'shita'、'hidari'、'migi'を組み合わせた文字列を設定する。
--'naka'は初期値なので特に設定する必要はない。

-mask:'''マスク'''(false)
--trueまたはfalseを設定する。
--falseは図形を塗りつぶし、trueは図形外を塗りつぶす。
--図形外を塗りつぶした際はcolorとalphaが無効になる。

-commentmask:'''コメントマスク'''(false)
--trueなら図形と重なる位置のコメントを透過する。
--ただしmaskがtrueなら動作しない。
--colorは無効だがalphaは効果がある。
--drawText、dtには効果がない。

-alpha:'''透明度'''(0)
--透過度を設定する。
--不透明 0~100 透明

-rotation:'''回転'''(0)
--図形の角度を設定する。角度は度で指定する。
--図形の左上を中心に回転する。
--※図形の大きさか変わってしまうというバグ有り

-mover:'''移動方法'''('')
--x、yを変更したときの移動方法を設定する。
--空欄、smooth、rolling、kageから選択。
--空欄以外を指定すると、移動過程が見えるようになる。

-ex.
 0::/drawShape(x:50,y:80,shape:'circle',width:100,height:60,color:0xff0000,pos:'ue hidari',alpha:50)



**drawText [#drawtext]
drawText(text:'''文字列''',x:'''x座標''',y:'''y座標''',z:'''順序''',size:'''大きさ''',pos:'''位置''',color:'''色''',bold:'''太字''',visible:'''表示''',filter'''フィルター''',alpha:'''透明度''',mover:'''移動方法''')

画面上に文字を表示する。
特に説明の無い項目はdrawShapeと同じ。
省略した場合の初期値は()の中のものとなる。

-text:'''文字列'''('')
--表示する文字列を設定する。

-x:'''x座標'''(0),y:'''y座標'''(0)

-z:'''順序'''(0)

-size:'''大きさ'''(14)
--フォントの大きさを設定する。

-pos:'''位置'''('naka')

-color:'''色'''(0)

-bold:'''太字'''(false)
--trueまたはfalseを設定する。trueであれば文字が太字になる。

-visible:'''表示'''(true)

-filter:'''フィルター'''('')
--文字装飾を行う。
--空欄、fuchi、kasumi、kageから選択。それぞれ、フィルター無し、縁取りを行う、文字を霞ませる、右下に影をつける。

-alpha:'''透明度'''(0)

-mover:'''移動方法'''('')

-ex.
 0::/drawText(text:'本文',x:100,y:100,size:40,pos:'hidari ue',color:0xff0000)



**dt [#dt]
dt(text:'''文字列''',x:'''x座標''',y:'''y座標''',z:'''順序''',size:'''大きさ''',pos:'''位置''',color:'''色''',bold:'''太字''',visible:'''表示''',filter'''フィルター''',alpha:'''透明度''',mover:'''移動方法''')

画面上に文字を表示する。
drawTextの簡易版と思って間違いない。
特に説明の無い項目はdrawTextと同じ。
省略した場合の初期値は()の中のものとなる。

-text:'''文字列'''('')
--text: は省略できる。

-x:'''x座標'''(0),y:'''y座標'''(0)

-z:'''順序'''(0)

-size:'''大きさ'''(30)

-pos:'''位置'''('naka')

-color:'''色'''(1677215)

-bold:'''太字'''(false)

-visible:'''表示'''(true)

-filter:'''フィルター'''('fuchi')

-alpha:'''透明度'''(0)

-mover:'''移動方法'''('')

//-初期値でvisibleの設定は出来ませんがfalseに書き換えることはできます。

-ex.
 0::/a=dt('表示する文字列')
// 30::/a.visible=false



**commentTrigger [#commenttrigger]
commentTrigger(then:'''式''',timer:'''有効時間''')

有効時間内にコメントが画面に表示される度にthen:'''式'''の処理を行う。
注意して設定しないと非常に重くなる。
定義変数chatは主にこの中で使う。

-then:'''式'''
--コメントが画面に表示されたら式を実行する。
--ちなみにthen:の部分は省略可能。

-timer:'''有効時間'''
--commentTriggerが設定された時間からの有効期間(単位:秒)。省略した場合は動画が終わるまで。

-ex.
 0::/commentTrigger(t.visible=false;t=dt(chat.message),timer:30)


**ctrig [#ctrig]
commentTriggerと同じ動作をする。要は短縮形。

-ex.
 0::/ctrig(t.visible=false;t=dt(chat.message),timer:30)
**if [#if]
if(when:'''評価式''',then:'''式1''',else:'''式2''')

条件分岐。

-when:'''評価式'''が真ならthen:'''式1'''を実行し、偽ならelse:'''式2'''を実行する。引数を指定しない最初の項目でも同様。つまりwhen:という記述は省略できる。

-then時、またはelse時に何も実行しない場合はその項目を省略できる。

-ex. 上はwhenが真なのでthenが実行されます。下はwhenが偽なのでthenが実行されません。
 0::/a=true;if(a,then:dt(a,pos:'hidari'))
 0::/b=false;if(b,then:dt(b,pos:'migi'))

**timer [#timer]
timer(timer:'''待機時間''',then:'''動作''')

指定時間経過後に指定した動作を行う

-timer:'''待機時間'''で指定した時間(単位:秒)が経過した後にthen:'''動作'''を実行する。then: は省略できる。

-ex.
 0::/t=dt('テスト');timer(timer:10,then:t.visible=false)



**jump [#jump]
jump(id:'''動画ID''',msg:'''ジャンプメッセージ''',from:'''開始位置''',length:'''再生時間''',return:'''戻り''',returnmsg:'''戻りメッセージ''',newwindow:'''対象窓''')

他の動画に移動する

-id:'''動画ID'''('')
--動画のIDを指定する。ちなみに id: は省略できる。
-msg:'''ジャンプメッセージ'''('')
--ジャンプする直前にメッセージを表示する。未設定でもそれ用のメッセージが表示される。\nで改行可。
-from:'''開始位置'''('')
--指定した再生時から再生する。ただし、移動先は動画を完全に読み込むまで再生が開始されなくなる。
-length:'''再生時間'''('')
--ジャンプした先の動画の再生を指定時間で終了する。
-return:'''戻り'''(false)
--trueなら再生終了時に移動前の動画へ戻る。
-returnmsg:'''戻りメッセージ'''('')
--ジャンプ先から戻るときに表示される
-newwindow:'''対象窓'''(false)
--trueなら新しいウインドウで、falseなら同じウィンドウでURLを開く。

-ex.
 60::/jump('sm9',msg:'このメッセージが表示された後に移動')
 80::/jump('sm9',length:10,return:true)

-備考
--jumpは一つの動画では基本的に一度しか作動しない。細かい挙動は[[@ジャンプ>ニコスクリプト#jump]]を参照。
ジャンプ先から戻ってきた後の更にジャンプを再現する(@数値に当たる設定を行う)には[[jumpCancel>#jumpcancel]]を使用すればよい。
ただし@ジャンプ同様確実に意図した通りに動作する保障は無い。
 20::/jump('sm9',length:10,return:true)
 21::/jumpCancel
 40::/jump('sm13',length:10,return:true)


**jumpCancel [#jumpcancel]
jumpCancel('')

-[[jump>#jump]]、若しくは[[seek>#seek]]の処理が開始される前に行うと該当の処理をキャンセルさせる。

-ex. 何も起きません。 
 10::/jump('sm9');jumpCancel
また以下のような設定でjumpが発生する前にjumpCancel以降の再生時へ直接シークした場合もjumpは発生しません。
 30::/jump('sm9')
 60::/jumpCancel


**seek [#seek]
seek(vpos:'''時間''',msg:'''文字列''')

-vpos:'''時間'''
--動画の再生位置を'''時間'''まで移動させる。
-msg:'''文字列'''
--文字列を設定した場合は移動する瞬間に画面が白で塗りつぶされ'''文字列'''が中央に表示される。

※移動できる位置はキーフレームの位置に限られる。
※エコノミーモードでは指定した時間に飛ばない、おまけにリロードすると飛び先時間が変わるという状態で、全く使い物にならない。

**addMarker [#addmarker]
addMarker(name:'''名前''',vpos:'''再生時''')

-name:'''名前'''
-vpos:'''再生時'''


**getMarker [#getmarker]
getMarker(name:'''名前''')

-name:'''名前'''

-あらかじめaddMarkerを行い、同名のnameをgetMarkerで呼び出すと数値を呼び出せる。
-@ジャンプマーカーで使用しているが、直接ニワン語を作るならわざわざ使用する意味は無いかと。
-ex.
 /0::addMarker(name:'test',vpos:90)
 /10::val=getMarker(name:'test');dt(val)


//**counter [#counter]このスクリプトは廃止されました


**sum [#sum]
sum(x:'''x座標''',y:'''y座標''',size:'''大きさ''',color:'''色''',visible:'''表示''',enabled:'''有効''',pos:'''位置''',asc:'''昇降''',unit:'''単位''',buttononly:'''ボタン限定''',words:'''単語''')

投票。
基本的に表示に関する設定はdrawTextと同じ。

-x:'''x座標'''(0)、y:'''y座標'''(0)
-size:'''大きさ'''(30)
-color:'''色'''(16777215)
-visible:'''表示'''(true)
-enabled:'''有効'''(true)
--trueなら投票を受け付ける。falseなら受け付けない。
-pos:'''位置'''('naka')
-asc:'''昇降'''(false)
--ソートの昇順、降順の設定のはずですが上手く動作しません(player: 2008-02-04 17:00)
-unit:'''単位'''('人')
--画面に表示される単位。
-buttononly:'''ボタン限定'''(false)
--trueなら@ボタンからの投稿からしか受け付けないようにする。(正確にはコマンド欄に「from_button」があるものであれば受け付ける)
-words:'''単語'''
--選択肢の設定
--['選択肢1','選択肢2'] のようにArray形式で設定していく(括弧も含む)
-partial:'''一致部分'''(true)
--trueなら部分一致、falseなら全体一致。

-ex. ちなみに下のような方法で特定の項目の投票数を取得できます。
 0::/a=sum(words:['犬','猫','兎'],unit:'票')
 60::/b=a.words['犬'];dt(b,pos:'shita')


**showResult [#showresult]
showResult(x:'''x座標''',y:'''y座標''',size:'''大きさ''',color:'''色''',visible:'''表示''',pos:'''位置''',unit:'''単位''',asc:'''昇降''',sum:'''投票''')

あらかじめ[[sum>#sum]]を行い、その投票結果をまとめて表示するのに使用する。

-x:'''x座標'''(0)、y:'''y座標'''(0)
-size:'''大きさ'''(30)
-color:'''色'''(16777215)
-visible:'''表示'''(true)
-pos:'''位置'''('naka')
-unit:'''単位'''('人')
-asc:'''昇降'''(false)
-sum:'''投票'''
--まとめて表示する投票項目をArray形式で指定する。
--同じ投票名の項目が複数ある場合は後に設定された方が優先される。

-ex.
 0::/a=sum(words:['選択肢1'],pos:'migi')
 30::/b=sum(words:['選択肢2'],pos:'hidari')
 60::/showResult(sum:[a,b])


**replace [#replace]
replace(src:'''置換え対象''',dest:'''置換え後''',enabled:'''有効''',target:'''対象者''',fill:'''置換え部分''',partial:'''一致部分''',color:'''色''',size:'''大きさ''',pos:'''位置''')

置き換え。
省略した場合の初期値は()の中のものとなる。

-src:'''置換え対象'''('')
--これを省略すると全てのコメントが置換えの対象になります。
-dest:'''置換え後'''('''srcと同じ文字列''')
-enabled:'''有効'''(true)
--trueだと有効、falseだと無効。
-target:'''対象者'''('')
-target:'''対象者'''('owner user')
--userは視聴者コメントに有効、ownerは投稿者コメントに有効にする。
-fill:'''置換え部分'''(false)
--trueなら全文置換え、falseなら該当部分のみ置換え。
-partial:'''一致部分'''(true)
--trueなら部分一致、falseなら完全一致で置換え。
-以下3項目はreplaceが作動したコメントのcolor、size、posをそれぞれ書き換えます。
-color:'''色'''('''元のまま変更しない''')
--RGB値で指定
-size:'''大きさ'''('''元のまま変更しない''')
-pos:'''位置'''('''元のまま変更しない''')

-ex. 視聴者コメントのみ「w」を「…」に置換え。
 0::/replace(src:'w',dest:'…',target:'user')
以下のような方法で全てのコメントのコマンドを強制的に書き換える事ができます。
 0::/replace(color:0xff0000,size:'big',pos:'ue')


**rand [#rand]
rand('''文字列''')

文字列、もしくは数値を渡すと対応した特定の数値が返ってくる。
ただしその数値はまず推測できない。
(数値を指定した場合は、0以上その数値未満の数が返ってくるものと思われる)
数値の範囲はおそらく 0 ~ 2^31-1 (=2147483647)

-ex.
 0::/a=rand('文字列');dt(a)
 0::/b=rand(10);dt(b,y:40)


**distance [#distance]
distance('''X1''','''Y1''','''X2''','''Y2''')

-座標(X1,Y1)と座標(X2,Y2)間の距離を返り値とする。

--ex.
 0::/a=distance(0,0,512,384);dt(a)


**screenWidth [#screenwidth]
screenWidth('')

-画面の幅(通常は512)を返す。
-この値が100%の幅となる。

--ex.
 0::/val=screenWidth;dt(val)


**screenHeight [#screenheight]
screenHeight('')

-画面の高さ(通常は384)を返す。
-この値が100%の高さとなる。

--ex.
 0::/val=screenHeight;dt(val)


**addButton [#addButton]
addButton(message:'''コメント''',mail:'''コマンド''',vpos:'''再生時''',commes:'''投稿コメント''',commail:'''投稿コマンド''',comvisible:'''投稿表示''',limit:'''有効回数''',hidden:'''隠し''')

-message:'''コメント'''('')
-mail:'''コマンド'''('')
-vpos:'''再生時'''
-commes:'''投稿コメント'''('''ボタン部分のコメントの内容''')
-commail:'''投稿コマンド'''('')
-comvisible:'''投稿表示'''(true)
--falseにするとこの機能を使って投稿したコメントはその投稿者以外から見えなくなる。
-limit:'''有効回数'''(1)
--ボタンの使用回数の制限。
-hidden:'''隠し'''(false)
--ボタン状の表示を隠し、通常の文字と同じにする。クリックした際の効果は変わらない。

-どうやらニワン語で設定すると正常に動作しないようです。正常に動作された方は修正お願いします。(player: 2008-03-13 15:00)


**playStartTime [#playStartTime]
playStartTime('')

-該当のページを開いた時刻を返す。
時刻は、unix秒(1970年1月1日からの秒数)のミリ秒単位の数字で表記される。つまり、unix秒の1000倍の数値となる。

 0::/dt(playStartTime)
**BGM [#BGM]
BGM(id:'''動画ID''',x:'''x座標''',y:'''y座標''',width:'''幅''',height:'''高さ''',visual:'''表示方法''',volume:'''音量''')

あらかじめBGM(BackGroundMovie)として使用する動画を定義する。

-id:'''動画ID'''('sm9')
--「@BGM使用可」と表示されている動画のみ指定できます。ちなみにsm9は使用できない動画です。

-x:'''x座標'''(0)
--指定した動画を小窓で表示する際の設定。

-y:'''y座標'''(0)

-width:'''幅'''(120)

-height:'''高さ'''(90)

-visual:'''表示方法'''(0)
--trueなら表示、falseなら非表示、それ以外なら5秒でフェードアウト。

-volume:'''音量'''(50)
--音量の設定。0~100で設定。

-/BGMを定義した順番に0番から順に番号がつけられます。この番号は後述の[[playBGM>#playBGM]]等で使用します。

-@BGMのデフォルトはsm3844507、@BGMで指定した動画が削除されていた場合はsm3844508が再生される。ちなみに使用できる動画は2MB以下のものに制限されています。
-使用できる動画は[[@BGM推奨>http://www.nicovideo.jp/tag/%EF%BC%A0%EF%BC%A2%EF%BC%A7%EF%BC%AD%E6%8E%A8%E5%A5%A8]]から検索するといい。

-ex.
 0::/BGM(id:'sm3844507',x:128,y:96,width:256,height:192,visual:true,volume:80)
 5::/playBGM
 30::/stopBGM

**playBGM [#playBGM]
playBGM('''番号''')

-[[BGM>#BGM]]で定義したBGMを再生する。
-番号を省略した場合は0番

**stopBGM [#stopBGM]
stopBGM('''番号''')

-[[BGM>#BGM]]で定義し[[playBGM>#playBGM]]で再生したBGMを停止する。

**addAtPausePoint [#addAtPausePoint]
addAtPausePoint(vpos:'''再生時''',wait:'''静止時間''')

-このスクリプトの動作は確認されていません。

**addPostRoute [#addPostRoute]
addPostRoute(match:'一致',id:'レイヤ',button:'ボタン')

コメントの表示レイヤを指定します。addPostRouteは事前実行スクリプトなので、動画の途中での変更は効きません。

-match:'一致'
レイヤを変更したいコメント内の文字列を指定します。部分一致です。

-id:'''レイヤ'''('default')
表示レイヤを以下から指定する。
--'default':通常スレッド
--'local':ローカルスレッド
--'game':ニコススレッド

-ボタン:動作が確認されていません。

**CM [#CM]
CM(id:'''動画ID''',time:'''時刻''',pause:'''停止''',link:'''リンク''',volume:'''音量''')

あらかじめCMとして再生される動画を定義する。

-id:'''動画ID'''('')

-time:'''時刻'''(Underfined)

-pause:'''停止'''(false)

-link:'''リンク'''('')

-volume:'''音量'''(0)
--音量の設定。0~100で設定。

-/CMを定義した順番に0番から順に番号がつけられます。この番号は後述の[[playCM>#playCM]]で使用します。


**playCM [#playCM]
playCM('''番号''')


----
*定義変数 [#parameter]

**chat [#chat]
直前に処理されたコメントの情報を返す。
commentTrigger内で使用すると常にcommentTriggerを発生させたコメントのものを取得できるので有用。

-chat.message
該当のコメントの文字列を返す。
-chat.vpos
該当のコメントの再生時を返す。
-chat.isYourPost
該当のコメントの投稿者が現在の視聴者だったらtrue、そうでなければfalseを返す。
-chat.mail
該当のコメントのコマンド欄を返す。
-chat.fromButton
該当のコメントのコマンド欄にfrom_buttonがあるならtrue、なければfalseを返す。@ボタンなどのボタンをクリックして生成されたコメントかどうかを判断する。
-chat.isPremium
該当のコメントの投稿者がプレミアム会員だったらtrue、そうでなければfalseを返す。
-chat.color
該当のコメントの色(0~16777215)を返す。未指定の場合はundefined。
-chat.size
該当のコメントの文字サイズを返す。medium、big、smallの順に0、1、2。未指定の場合はundefined。
-chat.no
該当のコメントのコメ番号を返す。




**commentColor [#commentColor]
任意のRBG系の数値を代入するとデフォルトのコメント色を変更する。
初期値はundefinedで何も代入されていない。
undefined時は次の設定と同等の処理を行う(commentColor=0xffffff)
commentColorに数値を代入した段階で変更が適応される。
 0::/commentColor=0xff0000


**commentPlace [#commentPlace]
"naka","shita","ue"のいずれかを代入するとデフォルトのコメントの流れ方を変更する。
undefined時の処理値(commentPlace='naka')
 0::/commentPlace='shita'


**commentSize [#commentSize]
"big","medium","small"のいずれかを代入するとデフォルトのコメントのサイズを変更する。
undefined時の処理値(commentSize='medium')
 0::/commentSize='small'


**commentInvisible [#commentInvisible]
コメントの表示を制御する。
undefined時の処理値(commentInvisible=false)
trueの時コメントを非表示にする。
ただし、drawTextなどで描画された文字はこの限りでない。
この変数によってコメント非表示した場合、プレイヤー中のコメント表示/非表示ボタンではコメントを再度表示させることができない。
 30::/commentInvisible=true


**commentReverse [#commentReverse]
数値を代入することでコメントが逆に流れるようになる。
undefined時の処理値(commentReverse=0)
0なら無効、1なら視聴者コメントのみ、2なら投稿者コメントのみ、3なら全て。
 0::/commentReverse=1


**defaultSage [#defaultSage]
動画をsageるかを決めるブール値が入っている。
undefined時の処理値(defaultSage=false)
trueを指定した場合に、デフォルトで動画のコマンド欄にsageと書いているとされる。
現状の仕様では@デフォルトを行うと強制的にfalseになる。
 0::/defaultSage=true
がバグのせいで仮にこれがtrueでもsageを記入したことにはならない模様。
//皮肉なことに処理の一部でコメント禁止のpostDisabledの値を参照しているっぽい。


**postDisabled [#postDisabled]
コメントの入力、投稿を制御する。
undefined時の処理値(postDisabled=false)
trueの時コメントの入力を拒否する。
 30::/postDisabled=true


**seekDisabled [#seekDisabled]
シークバーの操作をできなくするかを決めるブール値が入っている。
undefined時の処理値(seekDisabled=false)
trueを代入するとシークバーの操作ができなくなる。
 0::/seekDisabled=true


**isLoaded [#isloaded]
動画の読み込みが完了していればtrue、そうでなければfalseを返す。
 5::/if(when:isLoaded,then:dt('読み込み済'),else:dt('読み込み中'))
動作しないっぽい。

**isWide [#isWide]
false以外の何らかの値を代入することで、drawShape等の描画命令が16:9モードに対応するようになる。
undefined時の処理値(isWide=false)
-ex
画面全体を塗りつぶす
 0::/isWide=true
 0::/drawShape(x:0,y:0,shape:'rect',width:screenWidth,height:screenHeight,color:0xffffff, pos:'ue hidari')

**lastVideo [#lastVideo]
未実装。一つ前に見た動画のIDが入っているように、そのうち実装されるかもしれません。現状では常に''sm1''を返します。

----
*演算子 [#operator]
以下の演算子が使用可能です。
別記の方法でも同様の結果が得られます。

**算術演算子 [#p1812861]
|CENTER:BGCOLOR(#EFEBEF):|CENTER:|||c
|演算子|用例|解説|別記|h
|+|exp1 + exp2|和を求めます|exp1.add(exp2)|
|-|exp1 - exp2|差を求めます|exp1.subtract(exp2)|
|*|exp1 * exp2|積を求めます|exp1.multiply(exp2)|
|/|exp1 / exp2|商を求めます|exp1.divide(exp2)|
|%|exp1 % exp2|商の余りを求めます|exp1.modulo(exp2)|

**比較演算子 [#q3a49b63]
真ならtrue、偽ならfalseを返します。
|CENTER:BGCOLOR(#EFEBEF):|CENTER:|||c
|演算子|用例|解説|別記|h
|==|exp1 == exp2|exp1とexp2が等しいなら真|exp1.equals(exp2)|
|!=|exp1 != exp2|exp1とexp2が等しくないなら真|exp1.notEquals(exp2)|
|>=|exp1 >= exp2|大なりイコール|exp1.notLessThan(exp2)|
|<=|exp1 <= exp2|小なりイコール|exp1.notGreaterThan(exp2)|
|&gt;|exp1 > exp2|大なり(exp1はexp2より大きい)|exp1.greaterThan(exp2)|
|<|exp1 < exp2|小なり(exp1はexp2より小さい)|exp1.lessThan(exp2)|

**論理演算子 [#ef5c2275]
真ならtrue、偽ならfalseを返します。
|CENTER:BGCOLOR(#EFEBEF):|CENTER:|||c
|演算子|用例|解説|別記|h
|&&|exp1 && exp2|exp1がtrueで且つexp2がtrueならtrueを返します|exp1.and(exp2)|
|&#124;&#124;|exp1 &#124;&#124; exp2|exp1がtrue、又はexp2がtrueならtrueを返します|exp1.or(exp2)|
|!|!exp1|exp1がfalseならtrueを返します|exp1.not|

**未分類(用途不明含む) [#g2a003b7]
|CENTER:BGCOLOR(#EFEBEF):|CENTER:|||c
|演算子|用例|解説|別記|h
|=|exp1 = exp2|exp1にexp2を代入します||
|:=|exp1 := exp2|関数内でローカル変数の初期化に使います||
|+|+exp1|exp1が数値ならそのまま、文字列なら0を返します|exp1.plus|
|-|-exp1|exp1が数値なら-1をかけたもの、文字列なら0を返します|exp1.minus|
|++|exp1 ++|exp1を返し、exp1に1を加えたものをexp1に格納します。|exp1=exp1.increase|
|--|exp1 --|exp1を返し、exp1に-1を加えたものをexp1に格納します|exp1=exp1.decrease|
|++|++ exp1|exp1+1を返し、exp1に1を加えたものをexp1に格納します|exp1=exp1.increase|
|--|-- exp1|exp1-1を返し、exp1に-1を加えたものをexp1に格納します|exp1=exp1.decrease|
|+=|exp1 += exp2|exp1+exp2の結果をexp1に格納します|exp1=exp1.add(exp2)|
|-=|exp1 -= exp2|exp1-exp2の結果をexp1に格納します|exp1=exp1.subtract(exp2)|
|*=|exp1 *= exp2|exp1*exp2の結果をexp1に格納します|exp1=exp1.multiply(exp2)|
|/=|exp1 /= exp2|exp1/exp2の結果をexp1に格納します|exp1=exp1.divide(exp2)|
|%=|exp1 %= exp2|exp1%exp2の結果をexp1に格納します|exp1=exp1.modulo(exp2)|

----
*数値 [#numeric_object]
数値です。

**基本操作[#numeric_introduce]

-数値に文字列を加えるようにすると自動的に文字列に変換されます。加える文字列は空でも同様です。
--ex. 上は「2525動画」、下は「25251」と表示されます。
 0::/a = 2525; a += "動画"; dt(a)
 0::/a = 2525; a += ""; a += 1; dt(a)

-数字のみからなる文字列の場合、0を引くことにより数値に変換されます。
--ex. 上は「25251」、下は「2526」と表示されます。
 0::/a = "2525"; a += 1; dt(a)
 0::/a = "2525"; a -= 0; a += 1; dt(a)

-0から始まる数値は8進数、0xから始まる数値は16進数として扱われます。
--ex. 上は「1365」、下は「9509」と表示されます。
 0::/a = 02525; dt(a)
 0::/a = 0x2525; dt(a)


**floor [#numeric_floor]
numeric.''floor''
-その値を超えない最小の整数を求めます。つまり正の数なら小数点以下を切り捨てる事になります。
-ex. 「3」を表示
 0::/dt("ゆとりのある円周率="+ 3.14.floor)

**sin [#numeric_sin]
numeric.''sin''
-正弦を求めます
-ex. 多分0に近い値を表示
 0::/dt(3.14.sin)

**cos [#numeric_cos]
numeric.''cos''
-余弦を求めます
-ex. 多分-1に近い値を表示
 0::/dt(3.14.cos)

**pow [#numeric_pow]
exp1.pow(exp2)
-exp1のexp2乗を求めます
-ex. 「4」を表示
 0::/dt(2.pow(2))

**abs [#numeric_abs]
numeric.''abs''
-絶対値を求めます
-ex. 「1」を表示
 0::/dt((-1).abs)


----
*文字列 [#string_object]
文字列です。


**基本操作[#string_introduce]
-文字列を代入します。
 0::/a = "ニコニコ動画"; b = "で遊ぼう"
-文字列を連結します。この場合は"ニコニコ動画で遊ぼう"を表示します。
 0::/a = "ニコニコ動画"; b = "で遊ぼう"; c = a + b
 1::/dt(c)


**index [#string_index]
string.''index''(value)
-1文字目を0としてvalueの文字を取得します。
-数値の場合は常にundefinedを返します。
-ex. この場合は ''動'' を返します。
 0::/str='ニコニコ動画'; dt(str.index(4))
下の記述方法でも同じ動作をします。
 0::/str='ニコニコ動画'; dt(str[4])


**size [#string_size]
string.''size''
-文字列の長さを返します。
-ex. この場合は6を表示します。
 0::/dt("ニコニコ動画".size)


**indexOf [#string_indexOf]
string.''indexOf''(key [, from])
-stringの1文字目を0としてkeyが何文字目にあるのかを返します。fromを2とした場合は2つめのkeyが何文字目にあるかを返します。存在しない場合は-1を返します。
-これを利用してstringがkeyの文字列を含むこと、もしくは含まない事を検出できます。
-ex. この場合は3を返します。
 0::/dt('abcdef'.indexOf('d'))
文字列検索の例。t1の文字列にt2の文字列が含まれるかをチェックする。文字列があればcheckにtrueが格納される。
 0::/t1='abcdef';t2='d';check=(t1.indexOf(t2)>=0);if(when:check,then:dt('ある'),else:dt('ない'))


**slice [#string_slice]
string.''slice''
-文字列を切り出します。
-ex. "CD"を表示します。
 0::/dt('ABCDEF'.slice(2,2))
-負の整数を指定した場合、指定した値の絶対数だけ文字列の最後尾から切り出します。
-ex. "CDEF"を表示します。
 0::/dt('ABCDEF'.slice(-4))


**toInteger [#string_toInteger]
string.''toInteger''
-文字列を10進数の整数に変換します。小数点以下は切り捨てられます。
-文字列の一文字目を0にし全ての桁が7以下の場合は8進数、0xにすると16進数として扱います。
-数値以外の文字列を渡した場合はNaNを返します。
-ex. 511 を返します。
 0::/dt('0777'.toInteger)


**toFloat [#string_toFloat]
string.''toFloat''
-文字列を整数に変換します。小数点以下も保持されます。
-数値以外の文字列を渡した場合はNaNを返します。
-ex. 2525.96 を返します。
 0::/dt('2525.96'.toFloat)

**eval [#string_eval]
string.''eval''
-文字列をプログラムとして計算します。
-ex. "2525" を表示します。
 0::/dt('25 * 100 + 5.pow(2)'.eval)

----
*配列 [#array_object]
配列です。


**基本操作 [#array_introduce]
-変数のarrayに、"A","B","C"を要素に持つ配列を代入します。取り出し方は後述の[[index>#array_index]]にて。
 0::/ array = ["A","B","C"]
-二次元配列や三次元配列も作成できます。この場合"F"を表示します。
 0::/ array = [["A","B"],["C",["D",["F"],"E"],"G"],"H","I"]
 0::/ dt( array[1][1][1][0] )


**index [#array_index]
array.''index''(value)
-配列の先頭の要素を0とし、valueの要素を返します。
-ex. この場合はCを返します。
 0::/dt(["A","B","C"].index(2))
下の記述方法でも同じ動作をします。
 0::/dt(["A","B","C"][2])


**size [#array_size]
array.''size''
-配列の要素数を返します。
-ex. この場合は3を表示します。
 0::/ dt( ["A","B","C"].size )


**unshift [#array_unshift]
array.''unshift''(value)
-arrayの最初にvalueをその要素として追加します。
-ex. この場合は"4:D"を表示します。
 0::/ array = ["A","B","C"]
 0::/ array.unshift("D")
 0::/ dt( array.size + ":" + array[0] )

**push [#array_push]
array.''push''(value)
-arrayの最後にvalueをその要素として追加します。
-ex. この場合は"4:D"を表示します。
 0::/ array = ["A","B","C"]
 0::/ array.push("D")
 0::/ dt( array.size + ":" + array[array.size-1] )


**shift [#array_shift]
array.''shift''
-arrayの最初の要素を削除します。
-ex. この場合は"2:B"を表示します。
 0::/ array = ["A","B","C"]
 0::/ array.shift
 0::/ dt( array.size + ":" + array[0] )


**pop [#array_pop]
array.''pop''
-arrayの最後の要素を削除します。
-ex. この場合は"2:B"を表示します。
 0::/ array = ["A","B","C"]
 0::/ array.pop
 0::/ dt( array.size + ":" + array[array.size-1] )


**sort [#array_sort]
array.''sort''
-配列をソートします・
-ex. "1,2,3" を表示します。
 0::/ array = [2,1,3]
 0::/ array.sort
 0::/ dt( array.join(',') )

**sum [#array_sum]
array.''sum''
-全ての要素の数値の和を返します。
-ex. 30を返します。
 0::/array=[10,8,12];dt(array.sum)


**product [#array_product]
array.''product''
-全ての要素の数値の積を返します。
-ex. 960を返します。
 0::/array=[10,8,12];dt(array.product)

**join [#array_join]
array.''join''(value)
-全ての要素を単純に連結したものを返します。
-数値は自動的に文字列として扱われます。
-valueを指定した場合はその文字列を要素と要素の間に挟みます。
- ex. ''A-B-C''を表示する
 0::/array=['A','B','C'];dt(array.join('-'))


*オブジェクト [#object]
オブジェクトに関連する処理。

**def [#def]
''def''(name, script)
-関数を作成します。
-ex. "こんにちは世界"が表示されます。
 0::/def(hoge(target), dt('こんにちは'+ target))
 0::/hoge('世界')
オブジェクトに対してメソッドとして追加することも出来ます。
 0::/obj = ['ほげ']
 0::/obj.def(hoge, dt('配列の中身は' + self[0]))
 0::/obj.hoge
ローカル変数の使用例です。"val=ローカル" "val=グローバル" と表示されます。
 0::/val = 'グローバル'
 0::/def(hoge, val := 'ローカル'; dt('val='+ val))
 0::/hoge
 0::/dt('val='+ val).pos = "migi"

**def_kari [#def_kari]
''def_kari''(obj , script)
-オブジェクトを作成します。objを記述するとscriptを実行するようになります。
-ex. "テスト"が表示されます。
 0::/def_kari('test',dt('テスト'))
 0::/test
下記の方法で引数を渡すことも出来ます。id無しで渡したものは$1等の指定で呼び出せます。
"456テスト123"が表示されます。
 0::/def_kari('test',dt($2+txt+$1))
 0::/test('123',txt:'テスト','456')


**setSlot [#setSlot]
label.''setSlot''(id,value)
-オブジェクトの指定したidの内容を書き換える。
-ex. textの内容を書き換えます。
 0::/label=drawText(text:'test');label.setSlot('text','書き換え')
下の記述方法でも同じ動作をします。
 0::/label=drawText(text:'test');label.text='書き換え'


**getSlot [#getSlot]
label.''getSlot''(id)
-オブジェクトの指定したidの内容を取得する。
-ex. textの内容取得します。
 0::/label=drawText(text:'test',pos:'ue');dt(label.getSlot('text'))
下の記述方法でも同じ動作をします。
 0::/label=drawText(text:'test',pos:'ue');dt(label.text)


**clone [#clone]
object.''clone''
-オブジェクトを複製します。


----
*その他構文 [#etc]

**while_kari [#while_kari]
while_kari(''評価式'', ''実行式'')
-''評価式''が真である間、''実行式''を繰り返し実行します。
-ex. "i=1" "i=2" "i=3" と表示します。
 0::/ i=0
 0::/ while_kari(i++ < 3, dt('i='+ i).y = 30*i)
- 無限ループに陥らないように注意しましょう。


**__nicoscript_x [#nicoscript_x]
-ラベルを指定せずにマクロを宣言したときにラベルとして自動的に宣言される
-ラベルを指定していないマクロに対してのアクセスする時に用いる
-xは自然数が入る。ラベルを指定していないマクロが宣言された順番に__nicoscript_1、__nicoscript_2・・・と付加される
-ex. aには「あ」の投票数が入る
 0::@投票 あ、い、う
 10::/a=__nicoscript_1.words["あ"]


**alternative [#alternative]
''評価式''.alternative(''式1'', ''式2'')
-''評価式''が真であるときには''式1''、そうでなければ''式2''を実行してその結果を返します。
-ifの代わりになります。
-ex. この例では、"A"がコメントとして入力されると"正解です"と表示され、それ以外の場合は"不正解です"と表示されます。
 0::/ ctrig( (chat.message == "A").alternative(dt("正解です"), dt("不正解です")) )
-このスクリプトは、ifを使って次のように書き換えられます。
 0::/ ctrig( if(chat.message == "A", then: dt("正解です"), else: dt("不正解です")) )


**alt [#alt]
''評価式''.alt(''式1'', ''式2'')
- alternative と同じようです。
- ex.
 0::/ ctrig( (chat.message == "A").alt(dt("正解です"), dt("不正解です")) )


**lambda [#lambda]
lambda(''スクリプトの処理'')
- [[クロージャ>http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3]]を作成します。
- ex. "ほげ" を表示します。
 0::/ func = lambda(@(msg); dt(msg))
 0::/ func['ほげ']


**timethis [#timethis]
timethis(''スクリプトの処理'')
- スクリプトの処理時間を出力します。
- ex. 1+1を100万回試行した場合の処理時間を出力します。
 0::/ dt(timethis(1000000.times(\(1+1))));
- result
 ** TIMETHIS RESULT **
     + VALUE:スクリプトの処理結果
     + スクリプトの処理時間(ミリ秒) msec
     + 処理で生成されたオブジェクト数 objects

----
*コメントまたはwikiの編集がわからない人はこちらから投稿してください。 [#comments]
#br
#pcomment(コメント/ニコスクリプト,10,below)
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS  ニコニコ関連記事のRSS 
Site admin: takechan
Powered by はてなウェブサービス SimpleAPI