ゆとシート(DX3rd版) 設置時のソース修正まとめ

はじめに

今回はゆとシートの『ダブルクロス the 3rd Edition』版をさくらのレンタルサーバ(ライト)へ導入します。

「ゆとシート」とはゆとらいず工房様制作のTRPGキャラシート保管庫みたいなものです。
ソード・ワールド2.5発売時も迅速な導入をしてもらえてかなり重宝してます。

タイトルの通りですけど本記事は「2013/03/21 update」版のソースコード修正をメインに書いてます。

将来的には、今後リリースされていくであろうオンセツールのチャッパレ生成機能を付けたい所存。
改造・再配布は自由とありますのでめいっぱいいじくっていきます。

ゆとシート入手からセットアップ

配布CGIは以下より入手。
http://yutorize.2-d.jp/page/YtSheet-for-DX3rd

サーバへのアップロードとReadme通りのパーミッション設定を施します。
さくらのレンタルサーバの場合、ディレクトリへは「707」ではなく「705」を設定。

ここで本来は接続可能になるようなのですが、僕の場合は内部エラー……。
「index.cgi」と「color.cgi」の改行コードが「CR+LF」になっていたところをテキストエディタから「LF」へ変更したら接続できました。

※ SW2.5ゆとシⅡ設置の時に試したことですが、上記でも接続不可の場合はさくらのコンソールからpearlのバージョンをダウングレードしてみると行けるかも。

ソースコードの改造

そして本題。

アップロードした各種ファイルを以下のように修正します。
「★」付きの項目は修正しないと支障がでそうなもの。

lib/form.pl:62-64行目

僕の場合利用しなかったので、パスワード紛失時のメール送信機能を消します。

<a href="${set::cgi}?mode=form&m=change">パスワード変更</a> /
<a href="${set::cgi}?mode=form&m=remind">IDを忘れた</a> /
<a href="${set::cgi}?mode=form&m=forget">パスワード忘れた</a><br>
<a href="${set::cgi}?mode=form&m=change">パスワード変更</a><!-- /
<a href="${set::cgi}?mode=form&m=remind">IDを忘れた</a> /
<a href="${set::cgi}?mode=form&m=forget">パスワード忘れた</a>--><br>

lib/editform.pl:192行目

キャラシート作成時のメールアドレス入力を省略させます。

print ' mail:<input type="text" name="mail" style="width:180px;">';
print ' <input type="hidden" name="mail" style="width:180px;" value="trpg@example.com">';

lib/editform.pl:637行目

ロイスの関係で「Dロイス」と「固定」をプルダウン入力可にします。
手入力でもいいのですが、一覧上でDロイスの情報を引っ張ってくる項目があったので、半角全角の差異が出ないようにする目的。

<td class="inp"><input (省略) value="$pc{'lois'.$num.'_relation'}"></td>
<td class="inp"><input (省略) value="$pc{'lois'.$num.'_relation'}" list="limit_lois" autocomplete="off"><datalist id="lois_list"><option value="Dロイス"><option value="固定"></datalist></td>

lib/editform.pl:652行目(★)

メモリーで消費中の経験値表示要素追記。

※メモリーはデフォルトで経験値計算されてないのであとでjs弄ります。

<caption>メモリー</caption>
<caption>メモリー  (<span id="MemoryTotalExp"></span>)</caption>

lib/editform.pl:672行目(★)

メモリーの関係入力時に経験値計算実行。

<td class="inp"><input (省略) value="$pc{'memory'.$num.'_relation'}"></td>
<td class="inp"><input (省略) value="$pc{'memory'.$num.'_relation'}" onchange="calc()"></td>

lib/editform.pl:750行目

エフェクト制限に「Dロイス」と「自動」のプルダウン入力を追加。
「Dロイス」は半角”D”+全角”ロイス”で固定に。
自動は本来制限にはないけど、RBエフェクト等取得する際にあると便利なので。

※「自動」はデフォルトでは経験値免除されないので、あとでjs側を弄ります。

<td class="inp"><input (省略) onChange="calc()"></td>
<td class="inp"><input (省略) onChange="calc()" list="limit_list" autocomplete="off"><datalist id="limit_list"><option value="Dロイス"><option value="自動"></datalist></td>

lib/editform.pl:875行目(★)

100%未満コンボのC値が入力できない不具合修正。

<td class="inp num"><input (省略) value="$pc{'combo'.$num.'}_under_crit'}"></td>
<td class="inp num"><input (省略) value="$pc{'combo'.$num.'_under_crit'}"></td>

lib/editform.js:68行目(★)

能力値:社会の「その他の修正」が精神を参照している不具合修正。

var SttSocial = (省略) + SttAddSpirit;
var SttSocial = (省略) + SttAddSocial;

lib/editform.js:194行目(★)

エフェクト取得経験値を免除する制限を「Dロイス」「自動」に変更。

if(Limit === "Dロイス" || Limit === "Dロイス"){ EffectTotalExp -= 15; }
if(Limit === "Dロイス" || Limit === "自動"){ EffectTotalExp -= 15; }

lib/editform.js:203行目(★)

イージーエフェクトのレベル上昇分が計算されない不具合修正。

if(Lv > 0) { EffectEzTotalExp += 2; }
if(Lv > 0) { EffectEzTotalExp += Lv*2; }

lib/editform.js:207行目(★)

メモリーの関係を入力した際の経験点消費処理。
加えてメモリーで使用した経験点を全体の利用経験点に計上。

var ExpUse = SttTotalExp + EffectTotalExp + EffectEzTotalExp + SkillTotalExp + ItemTotalExp;
var MemoryTotalExp = 0;
if(document.forms.chr.memory1_relation.value != ''){ MemoryTotalExp += 15; }
if(document.forms.chr.memory2_relation.value != ''){ MemoryTotalExp += 15; }
if(document.forms.chr.memory3_relation.value != ''){ MemoryTotalExp += 15; }
document.getElementById("MemoryTotalExp").innerHTML = MemoryTotalExp;

var ExpUse = SttTotalExp + EffectTotalExp + EffectEzTotalExp + SkillTotalExp + ItemTotalExp + MemoryTotalExp;

lib/editform.js:288行目 (元282行目)(★)

イージーエフェクト追加行の不正なname属性を修正。

※フォーム側でボタン押下時に渡される引数を修正するのもアリ。

if(Ez){ CountEffectEz++; }
if(Ez){ CountEffectEz++; Ez = '_ez';}

lib/editform.js:355行目 (元349行目)

追加行のエフェクトレベル項目にクラスを追加。
数字が中央ぞろえになるだけ。

cell3.setAttribute("class","inp");
cell3.setAttribute("class","inp lv");

lib/editform.js:370-379行目 (元364-373行目)(★)

エフェクト・イージーエフェクトの追加行がシート更新後でないと入力反映されない不具合修正。

cell2.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_name">';
cell3.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_lv">';
cell4.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_timing">';
cell5.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_skill">';
cell6.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_diffi">';
cell7.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_target">';
cell8.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_range">';
cell9.innerHTML = '<input type="text" name="effect'+ Ez + CountEffect + '_point">';
cell10.innerHTML= '<input type="text" name="effect'+ Ez + CountEffect + '_limit">';
cell11.innerHTML= '<input type="text" name="effect'+ Ez + CountEffect + '_note">';
cell2.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_name">';
cell3.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_lv" value onchange="calc()">';
cell4.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_timing">';
cell5.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_skill">';
cell6.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_diffi">';
cell7.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_target">';
cell8.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_range">';
cell9.innerHTML = '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_point">';
cell10.innerHTML= '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_limit">';
cell11.innerHTML= '<input type="text" name="effect'+ Ez + cell1.innerHTML + '_note">';

(2019/10/14追記)
データアップロード時のPerlスクリプトも修正しないと閲覧画面上で経験点が反映されない事に気付いたので以下も修正として実施します。
※既に登録したデータはスクリプト修正後にキャラシ更新をすると直るはず。

lib/dataupdate.pl:123行目(★)

    if($pc{'effect'.$_.'_limit'} eq 'Dロイス' || $pc{'effect'.$_.'_limit'} eq 'Dロイス'){ $exp_use -= 15; }
    if($pc{'effect'.$_.'_limit'} eq 'Dロイス' || $pc{'effect'.$_.'_limit'} eq '自動'){ $exp_use -= 15; }

lib/dataupdate.pl:125行目(★)

  foreach(1..$pc{'count_effect_ez'}){ $exp_use += ($pc{'effect_ez'.$_.'_lv'}) ? 2 : 0; }
  foreach(1..$pc{'count_effect_ez'}){ $exp_use += ($pc{'effect_ez'.$_.'_lv'}) ? 2*($pc{'effect_ez'.$_.'_lv'}) : 0; }

おわりに

「ゆとシートⅡ for DX3」なんてものが出来ればお役御免の記事ですが、備忘録としてはこんな具合。

上記でとりあえず機能的には問題なくなる……と思いたい。
素人の拙いコードであれですが、あわよくばご本家様のゆとシ更新やこれからご利用を検討されている方のお役に立てればなぁと。


不具合見つけたら随時更新します。

/以上