2016年11月24日木曜日

Blogger に初めて投稿

もし使いやすかったら、こっちに移設しようかな。🐧
うわ、絵文字かわいくないなw🐇

これ以前の記事は PALog(http://blog.pandako.com)やパンダコメモ(http://memo.pandako.com)からの移植です。

2016年11月10日木曜日

RPGツクールMV アイテムなどの所持できる数を重量制にするプラグイン

武器とか99個も持って移動できるとか意味分からん!ってことでこんなプラグインを作りました。

このプラグインを有効にすると、個々のアイテムや武器・防具に重さが設定できるようになり、パーティーは決められた総重量までしかアイテムを所持できなくなります。

ローグライクなゲームやダンジョン系のゲームなどでは、所持品の吟味も楽しみの1つかと思うので、こいつを使ったらいいと思うよ。


変数による最大積載量(?)のコントロールや単位の変更なども可能です。
詳しくはプラグインのヘルプを読んでね。

★サンプルゲームはこちら

なお、メニューのレイアウトを変更するプラグインとかをいれてると崩れちゃうかと思いますが、そのへんは個々に対応するしか無いと思うのでガンバレ。

総重量ウィンドウの位置と不透明度を変更できるようにしました。 これによりメニューやショップのレイアウトを変更するプラグイン(例えば神無月サスケさん、Yoji Ojimaさん作の AltMenuScreen など)にも対応できるようになりました。



なお、例によって例のごとく理想的な Javascript の書き方ってのがよく分かってないので変なコードかもしれないけど我慢してくださいw

★最新の PNDK_LuggageCapacitySampleのダウンロードはこちら。(ツクマテ)


ライセンスは MIT だよ。どうぞご自由にお使いください。

2016年10月28日金曜日

RPGツクールMV かんたんにデータの送受信ができるプラグイン

とてもかんたんにサーバーへデータを送信したり受信したりできるようになります。
工夫次第でランキングや掲示板、1日1回のログインボーナス配布などなど色々なことに利用できるプラグインです。

例えば単純なランキングへのデータ送受信なら↓のように数行で作れちゃいます。



※もちろん別途ランキングを処理する PHP や CGI などが必要ですガ(^皿^)

サンプルゲームはこちら(PC・スマホ)
IE 用音無しサンプルゲームはこちら

PNDK_HttpRequest プラグインのダウンロードはこちら

■サンプルコードによる使い方説明

以下は PHP に name と score というデータを送り、ランキングの結果を表示するサンプルです。

◆文章:なし, ウィンドウ, 下
:文章:得点を送信するよ☆
◆変数の操作:#0001 受信データ = 0 ←(1)
◆プラグインコマンド:PNDK_HR clear ←(2)
◆プラグインコマンド:PNDK_HR add name \V[10] ←(3)
◆プラグインコマンド:PNDK_HR add score \V[11] ←(4)
◆プラグインコマンド:PNDK_HR send http://sample.jp/sample.php ←(5)
◆文章(S):速度 2 ←(6)
:文章(S):送受信中♪
◆文章:なし, ウィンドウ, 下
:文章:それではランキングの発表です!
◆文章:なし, ウィンドウ, 下 ←(7)
:文章:\V[1]

(1)まず、受信したデータが格納されるツクールの変数を初期化しています。
※必ずしも 0 である必要はありません。
受信したデータが格納されるツクールの変数はパラメータで設定できます。



(2)次に、このプラグインには送信データ専用の変数が予め用意されています。
前回の送信データが残っているとマズイので PNDK_HR clear で、その変数をキレイにしています。

(3)PNDK_HR add で送信データ専用の変数にデータを追加します。
PNDK_HR add name \V[10]
↑この場合、name というデータ名でツクールの変数ID 10番の値を送信データ専用の変数に追加しています。

(4)同様にツクールの変数ID 11番の値を score というデータ名で追加しています。
データはいくつでも追加できます。

(5)PNDK_HR send でデータを送信しています。
この例では http://sample.jp/sample.php に送信しています。
無事に通信が成功すればパラメータで設定した変数にサーバーより返信されたデータが格納されます。
(テキストデータの受信を想定しています。)

なお、エラーが発生した場合も、その変数にエラーメッセージが格納されます。
エラーメッセージとその意味は以下のとおりです。
ERROR TIMEOUT (タイムアウト)
ERROR ABORT (中止)
ERROR (なんやかんやエラー)
ERROR RESPONSE (サーバー側エラー)

(6)単なる時間稼ぎですw
送受信は一瞬では終わりません。
通信環境とデータ量によっては数秒かかることもあるでしょう。
そのため、受信が終わる前に受信用の変数を参照しても値は 0 です。
逆にそれを利用して受信が終わっているかを判断することもできますが、上記の例では割愛しています。

(7)受信したデータを文章として表示します。
このサンプルでは PHP がランキング結果のテキストを返信してくれることを想定しています。
万一、エラーが発生していたり受信が終わっていなければ、0 や ERROR なんたら、という文字列が表示されることになります。
そんなかっこ悪いことしたくない方は、いい感じに条件分岐してくださいw

■プラグインコマンドの説明

PNDK_HR clear
送信データ専用の変数を初期化します。

PNDK_HR add [データ名] [値]
送信データ専用の変数へデータを追加します。
[値]には制御文字が利用できます。

PNDK_HR send [URL]
送信データ専用の変数を[URL]へ POST メソッドで送信するとともに、パラメータで設定したツクールの変数にサーバーより返信されたデータが格納されます。

■注意点

通信はセキュリティで保護されません。
簡単に傍受できるので秘匿性の高い情報の通信には利用しないでください。
(クレカ番号とかパスワードとか個人情報とか)
このプラグインの利用により利用者または第三者に生じたいかなる損害や不利益も、このプラグインの開発者はその責任を負いません。

■使いみち

要はサーバー側の処理次第なのですが、これだけでも色々できるようになります。
以下はその一例です。
サーバー側のプログラムは別途根性で用意してください。
ただ、必ずしもデータを送信する必要はありませんし、プログラムではなくただのテキストファイルを読むだけにも利用できます。
  1. バージョン判定(古いバージョンで遊ばれるのを防ぐ)
  2. カウンター…というかプレイヤー動向分析(ゲームアナリティクス)
  3. UNIX タイムの取得(ズルされにくい日時の取得ができる)
    1. 毎日ボーナス
    2. 季節イベントとか
  4. プレイヤー間での情報共有
    1. ランキング
    2. 掲示板
    3. チャット(負荷かかりすぎかも)
    4. その他いろいろな情報
とはいえ仕様上、あまりリアルタイム性を求められるものには向きません。
他にもなにか面白い使いみちがありましたら教えて下さいませ。

2016年10月26日水曜日

RPGツクールMV 変数に小数を代入できるようにするプラグイン

なぜかツクールの変数には小数を代入できないようになっていたので、それを可能にするプラグインを作りました。
小数点以下第何位で四捨五入するかの設定も可能です。

ただ何故わざわざ小数を代入できないようにしていたのかが謎なので、その点ご留意ください。
一応、セーブしても問題ないことは確認済みです。

ちなみに、イベントコマンド「変数の操作」で小数を利用したい場合は、「オペランド」の「スクリプト」欄に小数を入力する方法がらくちんです。

↓ダウンロードはこちら
PNDK_FloatingPointVariables

2016年10月24日月曜日

RPGツクールMV ショプの価格変更プラグイン

たとえば魔王城近くの村は物価が高いとかできます。
まぁそれ自体はプラグイン使わなくてもできますが、総じて1.5倍とかできるので、個々に設定するより楽です。
また、買取価格(売却レート)も変更できます。
半額買い取りではなく等価買い取りとか、逆に引き取り手数料取ったりできます。

【2016/10/27追記】
小数ではなく整数の%で設定できるように仕様変更。


【2016/10/26追記】
新たに制御文字に対応しました。
これによりレートを変数で管理することができるようになり、例えばプレイヤーの選択によって世界の物価が変動する、などということも可能になります。
また変数なのでレートもセーブされることになります。

ただしツクールの変数には小数を代入できないので、変数を用いてレートをコントロールする場合は、小数を代入できるようにするプラグインを利用することをおすすめします。(パラメータやプラグインコマンドでの小数の利用は可能です)
サンプルゲームでは自前の「PNDK_FloatingPointVariables」プラグインを使用しています。


プラグインのコードもお作法にのっとった形に修正して、ファイル名も他とかぶりにくいように修正しました。

サンプルゲームはこちら(IE不可)
IE用サンプルゲームはこちら(音無し)

■ プラグインコマンドの使い方例

PNDK_ShopPriceChanger buy 50      #購入価格を半額(50%)にする
PNDK_ShopPriceChanger sell 100    #売却価格を購入価格と同じ(100%)にする
PNDK_ShopPriceChanger sell \V[n]  #売却価格を変数n番のレートにする
PNDK_ShopPriceChanger reset       #パラメータで設定した値にリセット

初めて作ったプラグインなので、やらかしてたらご指摘頂けると助かります。
PNDK_ShopPriceChangerのダウンロードはこちら

2016年4月6日水曜日

Adobe AIR で作った Android アプリの OpenSSL 脆弱性アラート解決法

先日 Google Play から 「Google Play warning: You are using a vulnerable version of OpenSSL」 ってメールが来て、デベロッパーコンソールへ見に行ったら「セキュリティ アラート アプリで使用中の OpenSSL のバージョンにセキュリティの脆弱性があります。」的なアラートが出ていてオイオイどないしたらえーねん状態だったのですが、解決できたのでメモります。

まず対象のアプリは Adobe AIR for Android で作ったものだったので、そのあたりでググったら、どうやら Adobe AIR SDK を 最新(この時は AIR21.0 以上)にアップすれば解決するってことらしいので、以下 Animate CC にそいつをぶっこむ手順です。

1.最新の Adobe AIR SDK をダウンロードする

↓から入手する。
Download Adobe AIR SDK

2.解凍した Adobe AIR SDK の内容一式をどっかにコピーする

Animate CC のメニュー「ヘルプ(H)」に「Adobe AIR SDK を管理(R)」ってのがあって、AIR20.0 が入ってる場所が確認できたので、そのとなりに AIR21.0 ってフォルダ作ってコピーしました。
具体的には
C:\Program Files\Adobe\Adobe Animate CC 2015\AIR21.0\
です。え?Mac?知るかっ!

3.コピーした SDK を選択できるようにする

Animate CC のメニュー「ヘルプ(H)」に「Adobe AIR SDK を管理(R)」を選択すると出てくるウィンドウで、さっきのフォルダを追加する。

4.ターゲットでコピーした SDK のバージョンを選択してパブリッシュ!

これで無事 OpenSSL 1.0.2f になりました!ヽ(=´▽`=)ノ
放置されてる ANEs に原因があったら終わるので、SDK の問題でほんと良かったと思いました。ε-(´∀`*)

おまけ

Google 先生のヘルプ「How to address OpenSSL vulnerabilities in your apps」では、「$ unzip -p YourApp.apk | strings | grep “OpenSSL”」ってやれば調べられるよイエイ!とか書いてありますがオイオイこちとら安定の Windows なんですけど!ってことで、私は以下のようにしてアプリ内で使われている OpenSSL のバージョンを調べました。

まず対象の apk ファイルを解凍します。
そのままだと解凍できないなら拡張子を .zip にしちゃってください。
んでコマンド プロンプト立ち上げて解凍したフォルダまで移動する。(dir とか cd コマンドだ!)
一番簡単なのは「cd[半角スペース]」って入力した後、コマンド プロンプトウィンドウに解凍したフォルダをドロップしちゃう方法です。
それで「cd C:\なんたらかんたら」と勝手に記述されるはずなので enter キーをッターーンて押せば移動できます。

そしたら「findstr」コマンドでファイル内検索します。
具体的には「findstr /s /m “OpenSSL” *.*」としました。
オプションの意味とかこのコマンドの使い方を知りたい時は「findstr /?」で、ッターーンだ!
UTF-8 には対応してないらしいけど、まぁ英字だしヒットはします。

今回の場合は「\lib\armeabi-v7a\libCore.so」がヒットしました。
それをエディターで開いて「OpenSSL」って検索したらたくさんヒットして、そのなかに「OpenSSL 1.0.0」とか書かれていたりしたので、こいつが悪いんだと思います。
上記の SDK アップ後はこれが「OpenSSL 1.0.2f」になりました。

これでめでたしめでたしです。

2016年3月7日月曜日

ANE でアプリ内課金(In App Purchase)を Flash CC (Animate CC) で導入する手順

はいはいFlashは死にましたね。そーですね。
(とか書いてる間に Adobe Animate CC になったよ)
おかげで2016年にもなるとANEの使い方すら見つけ難い始末ですよ。
あっても Flash Builder での使い方とかばっかで意味わからんワー。
ってなわけで、自分で書きます。

■ やりたいこと
AIR for android で作ったアプリに課金機能を追加してジャブジャブ課金してもらう。

■ 使ったソフト
・ Adobe Flash Professional CC 2015

■ あまり参考にしてはいけないページ
Adobe AIR 用ネイティブ拡張の使用
http://help.adobe.com/ja_JP/air/build/WS597e5dadb9cc1e0253f7d2fc1311b491071-8000.html
「ANEの使い方」などと検索するといまだに上位に出てくるけど、一部の情報が古く既に不要となった手順なども含まれているという公式マニュアルとは思えないページ。

■ 一般的な ANE の使い方手順
1)ANE ファイルを用意する
GitHub とかから落とすなりなんなりする。

2)FlashでさっきのANEを登録。
1、2、3で完了だ。


3)ActionScript でなんやかんやする。
まともなマニュアルやリファレンスが用意されてる ANE なんてこの世に存在しないけど頑張れ!

4)AIR でパブリッシュ!
おわり。
うわチョー簡単!上記公式マニュアルのクソっぷりが際立つ!

ただし、利用する ANE によっては上記以外に、なんたら-app.xml への追記なども行う必要があるぞ。
あと、ANE は AIR じゃないと使えないからパブリッシュのターゲットは AIR のやつを選ぼう。
Flash Player とのマルチプラットフォームの場合は条件付きコンパイルとか使ってコードも実行されないようにしないとダメだぞ。

■ 試してみた ANE
いずれも2016年1月時点でダウンロードしたものを使用。

・ Freshplanet の ANE-In-App-Purchase
おそらく最も利用されているであろう有名な ANE なので、当然動くものと思い実装してみるもパブリッシュ時にエラーを吐血する始末。
フォーラムでも同症状の人が質問しているが、もー3ヶ月ぐらい経ってるけど現時点でも回答なし。
自己解決はあきらめて次へ進んだ。

・ StudioPixMix の ANE-InAppPurchase
ちょっと試してみた ANE。
驚いたことにどうやらライセンスキー(パブリックキー)を設定する手段がないという ANE なので完全に使い物にならない。
これをもとに自分で作れる人向けなのか?それにしてはリファレンスまで用意してるのが謎…;

・ pozirk の AndroidInAppPurchase
Android のみ。ANE と swc のハイブリッドw

今回は消去法で pozirk の AndroidInAppPurchase を使用することに決定。
もーこの時点で不安しかない。

■ 具体的に実装手順
1)AndroidInAppPurchase のページから一式ダウンロードする。
https://github.com/pozirk/AndroidInAppPurchase
「Download ZIP」から落とせるよ。探せ。

2)必要なファイルをコピーする。
比較的親切な readme.md の指示に従い
「InAppPurchase.ane」と
「air\InAppPurchase\bin\InAppPurchase.swc」をflaファイルと同じ場所にコピー。
フォルダ構成は無視して2つともファイルだけ直に置けばOKだ。
それ以外はゴミだ捨てろ。

3)FlashでさっきのANEを登録。
上記の「1、2、3で完了だ」を2つ分やる。

4)なんたら-app.xml にアプリ内課金の権限(パーミッション)を追加。
権限の設定は「AIR for Android 設定」の「権限」タブでできるが、残念ながら課金権限のチェックボックスは用意されていない。
つまり自分で xml に追記する必要がある。
一度でもパブリッシュしていれば xml も勝手に生成されているはずなので、それを利用するが、その前に「権限」タブで「アプリケーション記述ファイルへの権限およびマニュフェストの追加を主導で管理します」にチェックを入れておかないと、毎回追記するはめになる。
ちなみにチェックを入れても権限とマニュフェスト周辺以外は引き続き更新してくれるので、毎回バージョンを書きなおすとかはしなくてもOKだ!

んで、追記する場所は <manifestAdditions> のなかということだけれど、具体的には…
<uses-permission android:name="android.permission.INTERNET"/>
とかの次でいいんじゃね?てきとーてきとー。
え?そんなのどこにもない?しるか!「権限」タブでチェック入れとけや!

んでそこに↓を追記する。
<uses-permission android:name="com.android.vending.BILLING" />
<application android:enabled="true">
<activity android:name="com.pozirk.payment.BillingActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:background="#30000000" />
</application>
あと <extensions> に <extensionID> を追加する必要があるけど、これは自動的におこなわれるはず。

5)ActionScript を書く!
ありがたいことに readme.md に例が記述されているので参考にする。

[サンプル準備中]

6)テストする
当たり前だけど Flash のプレビューとかでは Google アカウントと紐付いていないからエラーが出てテストにはならないよ。
実機でテストしませう。
ただし、開発者アカウントでインストールすると「出版社はこのアイテムを購入できません。」とかいうネイティブな日本語エラーが返ってくるだけなので、別のアカウントを使わないとテストにならない。
で、その別アカもテストユーザーとして登録しておかないと、ベータ版テストだろうと容赦なく課金されるので注意だ。
ちゃんとデベロッパーコンソールの「設定」>「アカウントの詳細」>「ライセンス テスト」でメアドを登録しておきませう。(2016年3月現在)
さすれば数時間後には効果が発揮され、テス垢で購入しようとすると「これはテスト用の注文です。課金は発生しません。」というメッセージが表示されるようになって課金テストし放題になるでござる。

7)公開する!
そして現実は甘くないことを実感するがいい!