├── OAuthLogin.md ├── README.txt ├── _core ├── data │ └── index.html ├── lib │ ├── ar2e │ │ ├── calc-chara.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── data-class.pl │ │ ├── data-races.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-ar2e.pl │ │ └── view-chara.pl │ ├── blp │ │ ├── calc-chara.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── data-factor.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-sub.pl │ │ └── view-chara.pl │ ├── delete.pl │ ├── dx3 │ │ ├── calc-chara.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── data-syndrome.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-dx3.pl │ │ └── view-chara.pl │ ├── edit.js │ ├── edit.pl │ ├── form.pl │ ├── gc │ │ ├── calc-chara.pl │ │ ├── calc-country.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── data-class.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── edit-country.js │ │ ├── edit-country.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── list-country.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-sub.pl │ │ ├── view-chara.pl │ │ └── view-country.pl │ ├── gs │ │ ├── calc-chara.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── data-class.pl │ │ ├── data-races.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── js-consts.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-sub.pl │ │ └── view-chara.pl │ ├── info.pl │ ├── json.pl │ ├── junction.pl │ ├── kiz │ │ ├── calc-chara.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-sub.pl │ │ └── view-chara.pl │ ├── ms │ │ ├── calc-chara.pl │ │ ├── calc-clan.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── edit-clan.js │ │ ├── edit-clan.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── list-clan.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-sub.pl │ │ ├── view-chara.pl │ │ └── view-clan.pl │ ├── oauth.pl │ ├── others.pl │ ├── palette.pl │ ├── register.pl │ ├── reminder.pl │ ├── save.pl │ ├── subroutine.pl │ ├── sw2.0 │ │ ├── config-default.pl │ │ ├── data-class.pl │ │ ├── data-feats.pl │ │ ├── data-mons.pl │ │ ├── edit-chara.js │ │ └── edit-chara.pl │ ├── sw2 │ │ ├── calc-arts.pl │ │ ├── calc-chara.pl │ │ ├── calc-item.pl │ │ ├── calc-mons.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── data-class.pl │ │ ├── data-faith.pl │ │ ├── data-feats.pl │ │ ├── data-items.pl │ │ ├── data-mons.pl │ │ ├── data-races.pl │ │ ├── edit-arts.js │ │ ├── edit-arts.pl │ │ ├── edit-chara-datalist.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── edit-item.js │ │ ├── edit-item.pl │ │ ├── edit-mons.js │ │ ├── edit-mons.pl │ │ ├── js-consts.pl │ │ ├── json-sub.pl │ │ ├── list-arts.pl │ │ ├── list-chara.pl │ │ ├── list-item.pl │ │ ├── list-making.pl │ │ ├── list-mons.pl │ │ ├── making.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-sw2.pl │ │ ├── view-arts.pl │ │ ├── view-chara.pl │ │ ├── view-item.pl │ │ └── view-mons.pl │ ├── vc │ │ ├── calc-chara.pl │ │ ├── config-default.pl │ │ ├── convert.pl │ │ ├── data-class.pl │ │ ├── data-races.pl │ │ ├── edit-chara.js │ │ ├── edit-chara.pl │ │ ├── json-sub.pl │ │ ├── list-chara.pl │ │ ├── palette-sub.pl │ │ ├── subroutine-sub.pl │ │ └── view-chara.pl │ └── view.pl ├── module │ ├── HTML │ │ └── Template.pm │ └── README.txt └── skin │ ├── _common │ ├── css │ │ ├── base.css │ │ ├── edit.css │ │ ├── form.css │ │ ├── list.css │ │ └── sheet.css │ ├── form.html │ ├── img │ │ ├── back-abstract-reverse.png │ │ ├── back-abstract.png │ │ └── back-pattern.png │ ├── index-menu.html │ ├── js │ │ ├── common.js │ │ ├── lib │ │ │ ├── Sortable.min.js │ │ │ ├── compressor.min.js │ │ │ ├── jszip-utils.min.js │ │ │ ├── jszip.min.js │ │ │ ├── sha256.js │ │ │ └── ytsheetCommon.js │ │ ├── list.js │ │ └── sheet.js │ └── sheet-head.html │ ├── ar2e │ ├── css │ │ ├── chara.css │ │ ├── edit.css │ │ └── list.css │ ├── img │ │ └── back-wheel.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ ├── ytsheetToText.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ └── sheet-chara.html │ ├── blp │ ├── css │ │ ├── chara.css │ │ ├── edit.css │ │ └── list.css │ ├── img │ │ ├── back-moon.png │ │ └── default.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ ├── ytsheetToText.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ └── sheet-chara.html │ ├── dx3 │ ├── css │ │ ├── chara.css │ │ ├── edit.css │ │ └── list.css │ ├── img │ │ ├── back-xx.png │ │ └── default.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ ├── ytsheetToText.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ └── sheet-chara.html │ ├── gc │ ├── css │ │ ├── chara.css │ │ ├── country.css │ │ ├── edit.css │ │ └── list.css │ ├── img │ │ ├── back-crest.png │ │ └── default_pc.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ ├── ytsheetToText.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ ├── list-country.html │ ├── sheet-chara.html │ └── sheet-country.html │ ├── gs │ ├── css │ │ ├── chara.css │ │ ├── edit.css │ │ └── list.css │ ├── img │ │ ├── back-sword.png │ │ ├── default_enemy.png │ │ └── default_pc.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ └── sheet-chara.html │ ├── kiz │ ├── css │ │ ├── chara.css │ │ ├── edit.css │ │ └── list.css │ ├── img │ │ ├── back-kiz.png │ │ ├── default.png │ │ ├── hibi-w.png │ │ ├── hibi.png │ │ ├── hibiware-w.png │ │ └── hibiware.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ ├── ytsheetToText.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ └── sheet-chara.html │ ├── ms │ ├── css │ │ ├── chara.css │ │ ├── clan.css │ │ ├── edit.css │ │ └── list.css │ ├── img │ │ ├── back-scramble.png │ │ └── default.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ ├── list-clan.html │ ├── sheet-chara.html │ └── sheet-clan.html │ ├── sw2.0 │ └── sheet-chara.html │ ├── sw2 │ ├── css │ │ ├── arts.css │ │ ├── chara.css │ │ ├── edit.css │ │ ├── icons.css │ │ ├── item.css │ │ ├── list.css │ │ └── monster.css │ ├── img │ │ ├── back-first.png │ │ ├── default_enemy.png │ │ ├── default_pc.png │ │ ├── wp_blow.png │ │ ├── wp_edge.png │ │ ├── wp_magic.png │ │ └── wp_school.png │ ├── index.html │ ├── js │ │ └── lib │ │ │ ├── ytsheetConsts.js │ │ │ ├── ytsheetToCcfolia.js │ │ │ ├── ytsheetToText.js │ │ │ └── ytsheetToUdonarium.js │ ├── list-arts.html │ ├── list-chara.html │ ├── list-item.html │ ├── list-mons.html │ ├── making.html │ ├── sheet-arts.html │ ├── sheet-chara.html │ ├── sheet-item.html │ └── sheet-monster.html │ └── vc │ ├── css │ ├── chara.css │ ├── edit.css │ └── list.css │ ├── img │ ├── back-circle.png │ └── default_pc.png │ ├── index.html │ ├── js │ └── lib │ │ ├── ytsheetConsts.js │ │ ├── ytsheetToCcfolia.js │ │ ├── ytsheetToText.js │ │ └── ytsheetToUdonarium.js │ ├── list-chara.html │ └── sheet-chara.html ├── ar2e ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi ├── blp ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi ├── dx3rd ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi ├── gc ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi ├── gs ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi ├── kiz ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi ├── ms ├── config.cgi.default ├── index.cgi └── oauth.cgi ├── sw2.0 ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi ├── sw2.5 ├── config.cgi.default ├── data │ └── index.html ├── index.cgi └── oauth.cgi └── vc ├── config.cgi.default ├── data └── index.html ├── index.cgi └── oauth.cgi /_core/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/data/index.html -------------------------------------------------------------------------------- /_core/lib/ar2e/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | sub addJsonData { 8 | my %pc = %{ $_[0] }; 9 | my $type = $_[1]; 10 | 11 | %pc = data_update_chara(\%pc) if $pc{ver}; 12 | 13 | ## 誓約 14 | my @geises; 15 | foreach my $num (1..$pc{geisesNum}){ 16 | if($pc{"geis${num}Name"}){ 17 | push(@geises, $pc{"geis${num}Name"}); 18 | } 19 | } 20 | ## 簡易プロフィール 21 | my $base = "性別:$pc{gender} 年齢:$pc{age}\n種族:$pc{race}"; 22 | my $class = "メインクラス:$pc{classMain} サポートクラス:$pc{classSupport}\n 称号クラス:$pc{classTitle}"; 23 | my $geis = (@geises ? '誓約:'.join('/', @geises) : ''); 24 | 25 | $pc{sheetDescriptionS} = $base."\n".$class."\n"; 26 | $pc{sheetDescriptionM} = $base."\n".$class."\n".($geis?"\n$geis":''); 27 | 28 | ## ユニット(コマ)用ステータス 29 | $pc{unitStatus} = createUnitStatus(\%pc); 30 | 31 | return \%pc; 32 | } 33 | 34 | 1; -------------------------------------------------------------------------------- /_core/lib/ar2e/subroutine-ar2e.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use CGI::Cookie; 6 | use List::Util qw/max min/; 7 | use Fcntl; 8 | 9 | ### サブルーチン-AR ################################################################################## 10 | 11 | ### ユニットステータス出力 -------------------------------------------------- 12 | sub createUnitStatus { 13 | my %pc = %{$_[0]}; 14 | my @unitStatus = ( 15 | { 'HP' => $pc{hpTotal}.'/'.$pc{hpTotal} }, 16 | { 'MP' => $pc{mpTotal}.'/'.$pc{mpTotal} }, 17 | { 'フェイト' => $pc{fateTotal}.'/'.$pc{fateTotal} }, 18 | { '行動値' => $pc{battleTotalIni} } 19 | ); 20 | 21 | foreach my $key (split ',', $pc{unitStatusNotOutput}){ 22 | @unitStatus = grep { !exists $_->{$key} } @unitStatus; 23 | } 24 | 25 | foreach my $num (1..$pc{unitStatusNum}){ 26 | next if !$pc{"unitStatus${num}Label"}; 27 | push(@unitStatus, { $pc{"unitStatus${num}Label"} => $pc{"unitStatus${num}Value"} }); 28 | } 29 | 30 | return \@unitStatus; 31 | } 32 | 33 | ### バージョンアップデート -------------------------------------------------- 34 | sub data_update_chara { 35 | my %pc = %{$_[0]}; 36 | my $ver = $pc{ver}; 37 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 38 | delete $pc{updateMessage}; 39 | 40 | if($ver < 1.24024){ 41 | if($pc{money} =~ /^(?:自動|auto)$/i){ $pc{moneyAuto} = 1; $pc{money} = commify $pc{moneyTotal}; } 42 | } 43 | $pc{ver} = $main::ver; 44 | $pc{lasttimever} = $ver; 45 | return %pc; 46 | } 47 | 48 | 1; -------------------------------------------------------------------------------- /_core/lib/blp/data-factor.pl: -------------------------------------------------------------------------------- 1 | #################### データ #################### 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | ### ファクターデータ -------------------------------------------------- 8 | our %factors = ( 9 | '人間' => { 10 | core => [ 11 | { '義士' => {stt1 => 4, stt2 => 5} }, 12 | { '讐人' => {stt1 => 3, stt2 => 6} }, 13 | { '傀儡' => {stt1 => 5, stt2 => 4} }, 14 | { '金愚' => {stt1 => 7, stt2 => 2} }, 15 | { '研人' => {stt1 => 2, stt2 => 7} }, 16 | { '求道' => {stt1 => 6, stt2 => 3} }, 17 | ], 18 | style => [ 19 | { '監者' => {stt1 => 4, stt2 => 5} }, 20 | { '戦衛' => {stt1 => 6, stt2 => 3} }, 21 | { '狩人' => {stt1 => 5, stt2 => 4} }, 22 | { '謀智' => {stt1 => 2, stt2 => 7} }, 23 | { '術師' => {stt1 => 5, stt2 => 4} }, 24 | { '資道' => {stt1 => 7, stt2 => 2} }, 25 | ], 26 | }, 27 | '吸血鬼' => { 28 | core => [ 29 | { '源祖' => {stt1 => 4, stt2 => 5} }, 30 | { '貴種' => {stt1 => 5, stt2 => 4} }, 31 | { '夜者' => {stt1 => 6, stt2 => 3} }, 32 | { '半鬼' => {stt1 => 2, stt2 => 7} }, 33 | { '屍鬼' => {stt1 => 8, stt2 => 1} }, 34 | { '綺獣' => {stt1 => 4, stt2 => 5} }, 35 | ], 36 | style => [ 37 | { '舞人' => {stt1 => 6, stt2 => 3} }, 38 | { '戦鬼' => {stt1 => 7, stt2 => 2} }, 39 | { '奏者' => {stt1 => 3, stt2 => 6} }, 40 | { '火華' => {stt1 => 4, stt2 => 5} }, 41 | { '群団' => {stt1 => 6, stt2 => 3} }, 42 | { '界律' => {stt1 => 2, stt2 => 7} }, 43 | ], 44 | }, 45 | ); 46 | 47 | our %factor_list; 48 | our %factor_data; 49 | foreach my $factor (keys %factors){ 50 | foreach my $type (keys %{$factors{$factor}}){ 51 | my @list; 52 | foreach my $data (@{$factors{$factor}{$type}}){ 53 | my $name = (keys %{$data})[0]; 54 | push(@list, $name); 55 | $factor_data{$name} = $data->{$name}; 56 | } 57 | $factor_list{$factor}{$type} = \@list; 58 | } 59 | } 60 | 61 | 1; -------------------------------------------------------------------------------- /_core/lib/blp/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | sub addJsonData { 8 | my %pc = %{ $_[0] }; 9 | my $type = $_[1]; 10 | 11 | %pc = data_update_chara(\%pc) if $pc{ver}; 12 | 13 | ### 簡易プロフィール -------------------------------------------------- 14 | my @classes; 15 | foreach (@data::class_names){ 16 | push(@classes, { "NAME" => $_, "LV" => $pc{'lv'.$data::class{$_}{id}} } ); 17 | } 18 | @classes = sort{$b->{LV} <=> $a->{LV}} @classes; 19 | my $class_text; 20 | foreach my $data (@classes){ 21 | $class_text .= ($class_text ? '/' : '') . $data->{NAME} . $data->{LV} if $data->{LV} > 0; 22 | } 23 | my $factor = "ファクター:$pc{factor}/$pc{factorCore}/$pc{factorStyle}"; 24 | my $base = "性別:$pc{gender} 年齢:$pc{age}".($pc{ageApp}?"(外見年齢:$pc{ageApp})":""); 25 | my $missing = ($pc{factor} eq '吸血鬼' ? "欠落" : "喪失").":$pc{missing}"; 26 | my $belong = "所属:$pc{belong}"; 27 | my $scar = $pc{scarName} ? "傷号:$pc{scarName}" : ''; 28 | 29 | $pc{sheetDescriptionS} = $factor."\n".$base."\n".$missing." ".$scar; 30 | $pc{sheetDescriptionM} = $factor."\n".$base."\n".$belong."\n".$missing.($scar?"\n$scar":''); 31 | 32 | ## ユニット(コマ)用ステータス 33 | $pc{unitStatus} = createUnitStatus(\%pc); 34 | 35 | return \%pc; 36 | } 37 | 38 | 1; -------------------------------------------------------------------------------- /_core/lib/blp/palette-sub.pl: -------------------------------------------------------------------------------- 1 | ################## チャットパレット用サブルーチン ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | 6 | ### プリセット ####################################################################################### 7 | sub palettePreset { 8 | my $tool = shift; 9 | my $type = shift; 10 | my $text; 11 | my %bot; 12 | if (!$tool) { $bot{YTC} = 1; } 13 | elsif($tool eq 'bcdice'){ $bot{BCD} = 1; } 14 | 15 | return $text; 16 | } 17 | 18 | ### プリセット(シンプル) ########################################################################### 19 | sub palettePresetSimple { 20 | my $tool = shift; 21 | my $type = shift; 22 | my $text; 23 | my %bot; 24 | if (!$tool) { $bot{YTC} = 1; } 25 | elsif($tool eq 'bcdice'){ $bot{BCD} = 1; } 26 | 27 | return $text; 28 | } 29 | 30 | ### デフォルト変数 ################################################################################### 31 | sub paletteProperties { 32 | my $tool = shift; 33 | my $type = shift; 34 | my @propaties; 35 | return @propaties; 36 | } 37 | 38 | 1; -------------------------------------------------------------------------------- /_core/lib/blp/subroutine-sub.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use CGI::Cookie; 6 | use List::Util qw/max min/; 7 | use Fcntl; 8 | 9 | ### サブルーチン-BLP ################################################################################# 10 | 11 | ### ユニットステータス出力 -------------------------------------------------- 12 | sub createUnitStatus { 13 | my %pc = %{$_[0]}; 14 | my @unitStatus = ( 15 | { '耐久値' => $pc{endurance} }, 16 | { '先制値' => $pc{initiative} }, 17 | ); 18 | 19 | foreach my $key (split ',', $pc{unitStatusNotOutput}){ 20 | @unitStatus = grep { !exists $_->{$key} } @unitStatus; 21 | } 22 | 23 | foreach my $num (1..$pc{unitStatusNum}){ 24 | next if !$pc{"unitStatus${num}Label"}; 25 | push(@unitStatus, { $pc{"unitStatus${num}Label"} => $pc{"unitStatus${num}Value"} }); 26 | } 27 | 28 | return \@unitStatus; 29 | } 30 | 31 | ### バージョンアップデート -------------------------------------------------- 32 | sub data_update_chara { 33 | my %pc = %{$_[0]}; 34 | my $ver = $pc{ver}; 35 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 36 | if($ver < 1.13002){ 37 | ($pc{characterName},$pc{characterNameRuby}) = split(':', $pc{characterName}); 38 | ($pc{aka},$pc{akaRuby}) = split(':', $pc{aka}); 39 | } 40 | $pc{ver} = $main::ver; 41 | $pc{lasttimever} = $ver; 42 | return %pc; 43 | } 44 | 45 | 1; -------------------------------------------------------------------------------- /_core/lib/dx3/data-syndrome.pl: -------------------------------------------------------------------------------- 1 | ################ シンドローム ################ 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | ## シンドロームリスト 8 | our @syndromes = ( 9 | 'エンジェルハィロゥ', 10 | 'バロール', 11 | 'ブラックドッグ', 12 | 'ブラム=ストーカー', 13 | 'キュマイラ', 14 | 'エグザイル', 15 | 'ハヌマーン', 16 | 'モルフェウス', 17 | 'ノイマン', 18 | 'オルクス', 19 | 'サラマンダー', 20 | 'ソラリス', 21 | 'ウロボロス', 22 | 'ミストルティン', 23 | 'グレイプニル', 24 | 'アザトース', 25 | ); 26 | 27 | ## 能力値補正 28 | our %syndrome_status = ( 29 | 'エンジェルハィロゥ' => [0,3,1,0], 30 | 'バロール' => [0,1,2,1], 31 | 'ブラックドッグ' => [2,1,1,0], 32 | 'ブラム=ストーカー' => [1,2,1,0], 33 | 'キュマイラ' => [3,0,0,1], 34 | 'エグザイル' => [2,1,0,1], 35 | 'ハヌマーン' => [1,1,1,1], 36 | 'モルフェウス' => [1,2,0,1], 37 | 'ノイマン' => [0,0,3,1], 38 | 'オルクス' => [0,1,1,2], 39 | 'サラマンダー' => [2,0,1,1], 40 | 'ソラリス' => [0,0,1,3], 41 | 'ウロボロス' => [1,1,2,0], 42 | 'ミストルティン' => [2,2,0,0], 43 | 'グレイプニル' => [1,0,2,1], 44 | 'アザトース' => [1,0,3,0], 45 | ); 46 | 47 | ## 覚醒・衝動リスト 48 | our @awakens = ( 49 | ['死' ,18], 50 | ['憤怒',17], 51 | ['素体',16], 52 | ['感染',14], 53 | ['渇望',17], 54 | ['無知',15], 55 | ['犠牲',16], 56 | ['命令',15], 57 | ['忘却',17], 58 | ['探求',14], 59 | ['償い',18], 60 | ['生誕',17], 61 | ['label=CRC用'], 62 | ['恐怖',17], 63 | ['救済',16], 64 | ['狂気',15], 65 | ['神命',15], 66 | ['実験',18], 67 | ); 68 | our @impulses = ( 69 | ['解放',18], 70 | ['吸血',17], 71 | ['飢餓',14], 72 | ['殺戮',18], 73 | ['破壊',16], 74 | ['加虐',15], 75 | ['嫌悪',15], 76 | ['闘争',16], 77 | ['妄想',14], 78 | ['自傷',16], 79 | ['恐怖',17], 80 | ['憎悪',18], 81 | ); 82 | 83 | 1; -------------------------------------------------------------------------------- /_core/lib/dx3/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | sub addJsonData { 8 | my %pc = %{ $_[0] }; 9 | my $type = $_[1]; 10 | 11 | %pc = data_update_chara(\%pc) if $pc{ver}; 12 | 13 | ## ロイス数 14 | my @dloises; $pc{loisHave} = 0; $pc{loisMax} = 0; $pc{titusHave} = 0; $pc{sublimated} = 0; 15 | foreach my $num (1..7){ 16 | if($pc{"lois${num}Relation"} =~ /[DDEE]ロイス|^[DDEE]$/){ 17 | $pc{"lois${num}Name"} =~ s#/#/#g; 18 | push(@dloises, $pc{"lois${num}Name"}); 19 | } 20 | else { 21 | if($pc{"lois${num}State"} =~ /タイタス/){ 22 | $pc{titusHave}++; 23 | } 24 | elsif($pc{"lois${num}State"} =~ /昇華/){ 25 | $pc{sublimated}++; 26 | } 27 | else{ 28 | $pc{loisMax}++; 29 | $pc{loisHave}++ if($pc{"lois${num}Name"}); 30 | } 31 | } 32 | } 33 | ## 簡易プロフィール 34 | my @classes; 35 | foreach (@data::class_names){ 36 | push(@classes, { "NAME" => $_, "LV" => $pc{'lv'.$data::class{$_}{id}} } ); 37 | } 38 | @classes = sort{$b->{LV} <=> $a->{LV}} @classes; 39 | my $class_text; 40 | foreach my $data (@classes){ 41 | $class_text .= ($class_text ? '/' : '') . $data->{NAME} . $data->{LV} if $data->{LV} > 0; 42 | } 43 | my $base = "性別:$pc{gender} 年齢:$pc{age}"; 44 | my $sub = "身長:$pc{height} 体重:$pc{weight}"; 45 | my $works = "ワークス:$pc{works} カヴァー:$pc{cover}"; 46 | my $syndrome = "シンドローム:$pc{syndrome1}" 47 | . ($pc{syndrome2}?"/$pc{syndrome2}":'') 48 | . ($pc{syndrome3}?"/$pc{syndrome3}":''); 49 | my $dlois = (@dloises ? 'Dロイス:'.join('/', @dloises) : ''); 50 | 51 | $pc{sheetDescriptionS} = $base."\n".$works."\n".$syndrome; 52 | $pc{sheetDescriptionM} = $base." ".$sub."\n".$works."\n".$syndrome.($dlois?"\n$dlois":''); 53 | 54 | ## ユニット(コマ)用ステータス 55 | $pc{unitStatus} = createUnitStatus(\%pc); 56 | 57 | return \%pc; 58 | } 59 | 60 | 1; -------------------------------------------------------------------------------- /_core/lib/form.pl: -------------------------------------------------------------------------------- 1 | ################## フォーム ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | use HTML::Template; 7 | 8 | my $mode = $::in{mode}; 9 | my $LOGIN_ID = check; 10 | if($LOGIN_ID && $mode =~ /register|login/){ print "Location: ./\n\n"; } 11 | 12 | my $token = random_id(12); 13 | 14 | my $mask = umask 0; 15 | if($mode eq 'register'){ 16 | sysopen (my $FH, $set::tokenfile, O_WRONLY | O_APPEND | O_CREAT, 0666); 17 | print $FH $token."<>".(time + 60*60*24)."<>\n"; 18 | close($FH); 19 | } 20 | if($mode eq 'reset'){ 21 | $token = $::in{code}; 22 | } 23 | 24 | ### テンプレート読み込み ############################################################################# 25 | my $INDEX = HTML::Template->new( filename => $set::skin_tmpl, utf8 => 1, 26 | path => ['./', $::core_dir."/skin/_common", $::core_dir], 27 | die_on_bad_params => 0, die_on_missing_include => 0, case_sensitive => 1); 28 | 29 | $INDEX->param(modeRegister => 1) if $mode eq 'register'; 30 | $INDEX->param(modeLogin => 1) if $mode eq 'login'; 31 | $INDEX->param(modeReminder => 1) if $mode eq 'reminder'; 32 | $INDEX->param(modeReset => 1) if $mode eq 'reset'; 33 | $INDEX->param(modeOption => 1) if $mode eq 'option'; 34 | $INDEX->param(modeOption => 1) if $mode eq 'passchange'; 35 | $INDEX->param(modeConvert => 1) if $mode eq 'convertform'; 36 | 37 | if($mode eq 'option' || $mode eq 'passchange'){ 38 | $INDEX->param(setMessage => $main::set_message); 39 | $INDEX->param(userName => (getplayername($LOGIN_ID))[0]); 40 | $INDEX->param(userMail => (getplayername($LOGIN_ID))[1]); 41 | } 42 | if($mode eq 'convertform'){ 43 | my @urls; 44 | foreach (keys %set::convert_url){ 45 | push(@urls, { URL => $_ }); 46 | } 47 | $INDEX->param(ConvertURLs => \@urls); 48 | } 49 | 50 | $INDEX->param(LOGIN_ID => $LOGIN_ID); 51 | $INDEX->param(OAUTH_MODE => $set::oauth_service); 52 | $INDEX->param(OAUTH_LOGIN_URL => $set::oauth_login_url); 53 | 54 | $INDEX->param(token => $token); 55 | $INDEX->param(registerkey => 1) if $set::registerkey; 56 | 57 | $INDEX->param(title => $set::title); 58 | $INDEX->param(ver => $main::ver); 59 | $INDEX->param(coreDir => $::core_dir); 60 | 61 | ### 出力 ############################################################################################# 62 | print "Content-Type: text/html\n\n"; 63 | print $INDEX->output; 64 | 65 | 1; -------------------------------------------------------------------------------- /_core/lib/gc/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | sub addJsonData { 8 | my %pc = %{ $_[0] }; 9 | my $type = $_[1]; 10 | if ($pc{type} eq 'c'){ 11 | } 12 | else { 13 | %pc = data_update_chara(\%pc) if $pc{ver}; 14 | 15 | ### 簡易プロフィール -------------------------------------------------- 16 | my $base = "レベル:$pc{level} クラス:$pc{class} スタイル:$pc{style}\n"; 17 | $base .= "ワークス:$pc{works}"; 18 | if($pc{styleSub}){ $base .= " サブスタイル:$pc{styleSub}" } 19 | my $profile = "所属国:$pc{country}\n性別:$pc{gender} 年齢:$pc{age} 身長:$pc{height} 体重:$pc{weight}"; 20 | 21 | my $status; 22 | foreach my $stt ('Str','Ref','Per','Int','Mnd','Emp'){ 23 | $status .= " " if $status; 24 | $status .= $set::sttE2J{$stt}.$pc{"stt${stt}Total"}."(".$pc{"stt${stt}CheckTotal"}.")"; 25 | my $i = 1; 26 | foreach my $label (@{$set::skill{$stt}}){ 27 | $pc{"skill${stt}${i}Label"} = $label.$::pc{"skill${stt}${i}LabelBranch"}; 28 | $i++; 29 | } 30 | $pc{"skill${stt}Num"} = $i - 1; 31 | } 32 | 33 | $pc{sheetDescriptionS} = $base."\n".$profile."\n"; 34 | $pc{sheetDescriptionM} = $base."\n".$profile."\n能力値(判定値):".$status."\n"; 35 | 36 | ## ユニット(コマ)用ステータス 37 | $pc{unitStatus} = createUnitStatus(\%pc); 38 | } 39 | 40 | return \%pc; 41 | } 42 | 43 | 1; -------------------------------------------------------------------------------- /_core/lib/gc/subroutine-sub.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use CGI::Cookie; 6 | use List::Util qw/max min/; 7 | use Fcntl; 8 | 9 | ### サブルーチン-AR ################################################################################## 10 | 11 | ### ユニットステータス出力 -------------------------------------------------- 12 | sub createUnitStatus { 13 | my %pc = %{$_[0]}; 14 | my @unitStatus = ( 15 | { 'HP' => $pc{sttHpTotal}.'/'.$pc{sttHpTotal} }, 16 | { 'MP' => $pc{sttMpTotal}.'/'.$pc{sttMpTotal} }, 17 | { '天運' => $pc{sttFateTotal}.'/'.($pc{sttFateTotal}+3) }, 18 | { '行動値' => $pc{sttInitTotal} }, 19 | { '移動力' => $pc{sttMoveTotal} }, 20 | ); 21 | 22 | foreach my $key (split ',', $pc{unitStatusNotOutput}){ 23 | @unitStatus = grep { !exists $_->{$key} } @unitStatus; 24 | } 25 | 26 | foreach my $num (1..$pc{unitStatusNum}){ 27 | next if !$pc{"unitStatus${num}Label"}; 28 | push(@unitStatus, { $pc{"unitStatus${num}Label"} => $pc{"unitStatus${num}Value"} }); 29 | } 30 | 31 | return \@unitStatus; 32 | } 33 | 34 | ### バージョンアップデート -------------------------------------------------- 35 | sub data_update_chara { 36 | my %pc = %{$_[0]}; 37 | my $ver = $pc{ver}; 38 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 39 | delete $pc{updateMessage}; 40 | 41 | #if($ver < 1.24003){ 42 | #} 43 | 44 | $pc{ver} = $main::ver; 45 | $pc{lasttimever} = $ver; 46 | return %pc; 47 | } 48 | 49 | 1; -------------------------------------------------------------------------------- /_core/lib/gs/js-consts.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use JSON::PP; 6 | 7 | ### データ読み込み ################################################################################### 8 | require $set::data_class; 9 | require $set::data_races; 10 | 11 | ### 出力 ############################################################################################# 12 | my %settings = ( 13 | gameSystem => $set::game, 14 | races => \%data::races, 15 | class => \%data::class, 16 | classNames => \@data::class_names, 17 | weaponType => \%set::weapon_type, 18 | ); 19 | print "const SET = ". JSON::PP->new->encode(\%settings); 20 | print "\n"; 21 | print "console.log('=====SET=====')"; 22 | 23 | 24 | 1; -------------------------------------------------------------------------------- /_core/lib/gs/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | require $set::data_class; 8 | 9 | sub addJsonData { 10 | my %pc = %{ $_[0] }; 11 | my $type = $_[1]; 12 | ### 魔物 -------------------------------------------------- 13 | if ($pc{type} eq 'm'){ 14 | 15 | } 16 | ### キャラクター -------------------------------------------------- 17 | else { 18 | %pc = data_update_chara(\%pc) if $pc{ver}; 19 | ## 簡易プロフィール 20 | my @classes; 21 | foreach (@data::class_names){ 22 | push(@classes, { "NAME" => $_, "LV" => $pc{'lv'.$data::class{$_}{id}} } ); 23 | } 24 | @classes = sort{$b->{LV} <=> $a->{LV}} @classes; 25 | my $class_text; 26 | foreach my $data (@classes){ 27 | $class_text .= ($class_text ? '/' : '') . $data->{NAME} . $data->{LV} if $data->{LV} > 0; 28 | } 29 | my $base = "種族:$pc{race} 性別:$pc{gender} 年齢:$pc{age}"; 30 | my $sub = "ランク:".($pc{rank}||'-')." 信仰:".($pc{faith}||'-'); 31 | my $classes = "職業:${class_text}"; 32 | $pc{sheetDescriptionS} = $base."\n".$classes; 33 | $pc{sheetDescriptionM} = $base."\n".$sub."\n".$classes."\n"; 34 | } 35 | 36 | ## ユニット(コマ)用ステータス 37 | $pc{unitStatus} = createUnitStatus(\%pc); 38 | 39 | return \%pc; 40 | } 41 | 42 | 1; -------------------------------------------------------------------------------- /_core/lib/gs/subroutine-sub.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use CGI::Cookie; 6 | use List::Util qw/max min/; 7 | use Fcntl; 8 | 9 | ### サブルーチン-GS ################################################################################## 10 | 11 | my %abilityToName = ( 12 | Str => '体力', 13 | Psy => '魂魄', 14 | Tec => '技量', 15 | Int => '知力', 16 | Foc => '集中', 17 | Edu => '持久', 18 | Ref => '反射', 19 | ); 20 | sub abilityToName { 21 | my $text = shift; 22 | $text =~ s/$_/$abilityToName{$_}/i foreach (keys %abilityToName); 23 | return $text; 24 | } 25 | 26 | ### ユニットステータス出力 -------------------------------------------------- 27 | sub createUnitStatus { 28 | my %pc = %{$_[0]}; 29 | my @unitStatus = ( 30 | { '生命力' => $pc{statusLife} }, 31 | { '負傷' => "0/$pc{statusLifeX2}"}, 32 | { '消耗' => "0/20" }, 33 | { '継戦' => "0/40" }, 34 | { '呪文使用回数' => $pc{statusSpell} }, 35 | ); 36 | 37 | foreach my $key (split ',', $pc{unitStatusNotOutput}){ 38 | @unitStatus = grep { !exists $_->{$key} } @unitStatus; 39 | } 40 | 41 | foreach my $num (1..$pc{unitStatusNum}){ 42 | next if !$pc{"unitStatus${num}Label"}; 43 | push(@unitStatus, { $pc{"unitStatus${num}Label"} => $pc{"unitStatus${num}Value"} }); 44 | } 45 | 46 | return \@unitStatus; 47 | } 48 | 49 | ### バージョンアップデート -------------------------------------------------- 50 | sub data_update_chara { 51 | my %pc = %{$_[0]}; 52 | my $ver = $pc{ver}; 53 | delete $pc{updateMessage}; 54 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 55 | 56 | if($ver < 1.24005){ 57 | $pc{statusResist} = $pc{abilityPsyRef} + $pc{level} + $pc{statusResistMod}; 58 | $pc{armor1MoveTotal} = $pc{statusMove} + $pc{MoveModValue} + $pc{armor1MoveMod}; 59 | } 60 | if($ver < 1.24013){ 61 | if($pc{race} eq '蜥蜴人' || ($pc{race} =~ /^昼歩く者/ && $pc{raceBase} eq '蜥蜴人')){ 62 | $pc{statusMoveRace} = 2; 63 | $pc{statusMove} = $pc{statusMoveDice} * $pc{statusMoveRace} + $pc{statusMoveMod}; 64 | } 65 | } 66 | 67 | $pc{ver} = $main::ver; 68 | $pc{lasttimever} = $ver; 69 | return %pc; 70 | } 71 | 72 | 1; -------------------------------------------------------------------------------- /_core/lib/info.pl: -------------------------------------------------------------------------------- 1 | ################## インフォメーション ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | use HTML::Template; 7 | 8 | my $LOGIN_ID = check; 9 | 10 | ### テンプレート読み込み ############################################################################# 11 | my $INDEX = HTML::Template->new( filename => $set::skin_tmpl, utf8 => 1, 12 | path => ['./', $::core_dir], 13 | die_on_bad_params => 0, die_on_missing_include => 0, case_sensitive => 1); 14 | 15 | $INDEX->param(modeInfo => 1); 16 | 17 | $INDEX->param(LOGIN_ID => $LOGIN_ID); 18 | $INDEX->param(OAUTH_MODE => $set::oauth_service); 19 | $INDEX->param(OAUTH_LOGIN_URL => $set::oauth_login_url); 20 | 21 | $INDEX->param(header => $main::header); 22 | $INDEX->param(message => $main::message); 23 | 24 | $INDEX->param(title => $set::title); 25 | $INDEX->param(ver => $main::ver); 26 | $INDEX->param(coreDir => $main::core_dir); 27 | 28 | ### 出力 ############################################################################################# 29 | print "Content-Type: text/html\n\n"; 30 | print $INDEX->output; 31 | 32 | 1; -------------------------------------------------------------------------------- /_core/lib/junction.pl: -------------------------------------------------------------------------------- 1 | ################## 各処理へ移動 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use Encode; 6 | 7 | our $ver = "1.26.100"; 8 | 9 | our %in; 10 | for (param()){ $in{$_} = param($_); } 11 | 12 | my $mode = $in{mode}; 13 | 14 | if($mode eq 'register'){ 15 | if($in{id}) { require $set::lib_register; } #登録処理 16 | else { require $set::lib_form; } #新規登録フォーム 17 | } 18 | elsif($mode eq 'option'){ 19 | if($in{name}) { require $set::lib_register; } #オプション変更処理 20 | else { require $set::lib_form; } #オプションフォーム 21 | } 22 | elsif($mode eq 'passchange'){ 23 | require $set::lib_register; #パスワード変更処理 24 | } 25 | elsif($mode eq 'login') { 26 | if($in{id}) { &log_in($in{id},$in{password}); } #ログイン 27 | else { require $set::lib_form; } #ログインフォーム 28 | } 29 | elsif($mode eq 'reminder') { 30 | if($in{mail}) { require $set::lib_reminder; } #IDリマインダ 31 | elsif($in{id}){ require $set::lib_reminder; } #メール送信 32 | else { require $set::lib_form; } #リマインダフォーム 33 | } 34 | elsif($mode eq 'reset') { 35 | if($in{password}) { require $set::lib_reminder; } #パスリセット処理 36 | else { require $set::lib_form; } #パスリセットフォーム 37 | } 38 | elsif($mode eq 'making') { 39 | if($in{make}) { require $set::lib_making; } #キャラクター作成 40 | else { require $set::lib_list_make; } #キャラクター作成フォーム 41 | } 42 | elsif($mode eq 'logout') { &log_out; } #ログアウト 43 | elsif($mode eq 'option') { require $set::lib_form; } #オプション 44 | elsif($mode eq 'blanksheet') { require $set::lib_edit; } #ブランクシート 45 | elsif($mode eq 'edit') { require $set::lib_edit; } #編集 46 | elsif($mode eq 'copy') { require $set::lib_edit; } #コピー 47 | elsif($mode eq 'convert') { require $set::lib_edit; } #コンバート編集 48 | elsif($mode eq 'convertform'){ require $set::lib_form; } #コンバートフォーム 49 | elsif($mode eq 'make') { require $set::lib_save; } #新規作成 50 | elsif($mode eq 'save') { require $set::lib_save; } #更新 51 | elsif($mode eq 'bu-naming') { require $set::lib_others; } #過去ログ命名 52 | elsif($mode eq 'delete') { require $set::lib_delete; } #削除 53 | elsif($mode eq 'img-delete') { require $set::lib_delete; } #画像削除 54 | elsif($mode eq 'palette') { require $set::lib_palette; }#チャットパレット表示 55 | elsif($mode eq 'js-consts') { &printJS('consts') } #JS用定数 56 | elsif($mode eq 'image') { &redirectToImage($in{id}); }#画像表示 57 | elsif(($in{id}||$in{url}) && $mode eq 'json') { require $set::lib_json; }#外部アプリ連携 58 | elsif($in{id}) { require $set::lib_view; } #シート表示 59 | elsif($in{url}) { require $set::lib_view; } #シート表示(コンバート) 60 | else { 61 | changeFileByType($in{type}); 62 | require $set::lib_list_char; 63 | } #一覧表示 64 | 65 | 1; -------------------------------------------------------------------------------- /_core/lib/kiz/convert.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | use LWP::UserAgent; 7 | use JSON::PP; 8 | 9 | sub urlDataGet { 10 | my $url = shift; 11 | my $ua = LWP::UserAgent->new; 12 | my $res = $ua->get($url); 13 | if ($res->is_success) { 14 | return $res->decoded_content; 15 | } 16 | else { 17 | return undef; 18 | } 19 | } 20 | 21 | sub dataConvert { 22 | my $set_url = shift; 23 | my $file; 24 | 25 | ## ゆとシートⅡ 26 | { 27 | my $data = urlDataGet($set_url.'&mode=json') or error 'コンバート元のデータが取得できませんでした'; 28 | if($data !~ /^{/){ error 'JSONデータが取得できませんでした' } 29 | $data = escapeThanSign($data); 30 | my %pc = utf8::is_utf8($data) ? %{ decode_json(encode('utf8', (join '', $data))) } : %{ decode_json(join '', $data) }; 31 | if($pc{result} eq 'OK'){ 32 | our $base_url = $set_url; 33 | $base_url =~ s|/[^/]+?$|/|; 34 | $pc{convertSource} = '別のゆとシートⅡ'; 35 | return %pc; 36 | } 37 | elsif($pc{result}) { 38 | error 'コンバート元のゆとシートⅡでエラーがありました
'.$pc{result}; 39 | } 40 | else { 41 | error '有効なデータが取得できませんでした'; 42 | } 43 | } 44 | } 45 | 46 | sub dataPartnerGet { 47 | my $set_url = shift; 48 | my $file; 49 | 50 | ## 同じゆとシートⅡ 51 | my $self = CGI->new()->url; 52 | if($set_url =~ m"^$self\?id=(.+?)(?:$|&)"){ 53 | my $id = $1; 54 | my ($file, $type, $author) = getfile_open($id); 55 | my %pc; 56 | open my $IN, '<', "${set::char_dir}${file}/data.cgi"; 57 | while (<$IN>){ 58 | chomp; 59 | my ($key, $value) = split(/<>/, $_, 2); 60 | $pc{$key} = $value; 61 | } 62 | close($IN); 63 | if($pc{image}){ 64 | $pc{imageURL} = "./?id=$id&mode=image&cache=$pc{imageUpdate}"; 65 | $pc{imagePath} = "${set::char_dir}${file}/image.$pc{image}"; 66 | } 67 | $pc{convertSource} = '同じゆとシートⅡ'; 68 | return %pc; 69 | } 70 | ## 他のゆとシートⅡ 71 | { 72 | my $data = urlDataGet($set_url.'&mode=json') or return; 73 | if($data !~ /^{/){ return } 74 | $data = escapeThanSign($data); 75 | my %pc = utf8::is_utf8($data) ? %{ decode_json(encode('utf8', (join '', $data))) } : %{ decode_json(join '', $data) }; 76 | if($pc{result} eq 'OK'){ 77 | our $base_url = $set_url; 78 | $base_url =~ s|/[^/]+?$|/|; 79 | $pc{convertSource} = '別のゆとシートⅡ'; 80 | return %pc; 81 | } 82 | else { 83 | return; 84 | } 85 | } 86 | } 87 | 88 | ## タグ:全角スペース・英数を半角に変換 -------------------------------------------------- 89 | sub convertTags { 90 | my $tags = shift; 91 | $tags =~ tr/ / /; 92 | $tags =~ tr/0-9A-Za-z/0-9A-Za-z/; 93 | $tags =~ tr/+-*/.,_/\+\-\*\/\.,_/; 94 | $tags =~ tr/ / /s; 95 | return $tags 96 | } 97 | 98 | 1; -------------------------------------------------------------------------------- /_core/lib/kiz/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | sub addJsonData { 8 | my %pc = %{ $_[0] }; 9 | my $type = $_[1]; 10 | 11 | %pc = data_update_chara(\%pc) if $pc{ver}; 12 | 13 | ### 簡易プロフィール 14 | my @classes; 15 | foreach (@data::class_names){ 16 | push(@classes, { "NAME" => $_, "LV" => $pc{'lv'.$data::class{$_}{id}} } ); 17 | } 18 | @classes = sort{$b->{LV} <=> $a->{LV}} @classes; 19 | my $class_text; 20 | foreach my $data (@classes){ 21 | $class_text .= ($class_text ? '/' : '') . $data->{NAME} . $data->{LV} if $data->{LV} > 0; 22 | } 23 | my $factor = "ファクター:$pc{factor}/$pc{factorCore}/$pc{factorStyle}"; 24 | my $base = "性別:$pc{gender} 年齢:$pc{age}".($pc{ageApp}?"(外見年齢:$pc{ageApp})":""); 25 | my $missing = ($pc{factor} eq '吸血鬼' ? "欠落" : "喪失").":$pc{missing}"; 26 | my $belong = "所属:$pc{belong}"; 27 | my $scar = $pc{scarName} ? "傷号:$pc{scarName}" : ''; 28 | 29 | $pc{sheetDescriptionS} = $factor."\n".$base."\n".$missing." ".$scar; 30 | $pc{sheetDescriptionM} = $factor."\n".$base."\n".$belong."\n".$missing.($scar?"\n$scar":''); 31 | 32 | ## ユニット(コマ)用ステータス 33 | $pc{unitStatus} = createUnitStatus(\%pc); 34 | 35 | return \%pc; 36 | } 37 | 38 | 1; -------------------------------------------------------------------------------- /_core/lib/kiz/palette-sub.pl: -------------------------------------------------------------------------------- 1 | ################## チャットパレット用サブルーチン ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | 6 | ### プリセット ####################################################################################### 7 | sub palettePreset { 8 | my $tool = shift; 9 | my $type = shift; 10 | my $text; 11 | my %bot; 12 | if (!$tool) { $bot{YTC} = 1; } 13 | elsif($tool eq 'bcdice'){ $bot{BCD} = 1; } 14 | 15 | return $text; 16 | } 17 | 18 | ### プリセット(シンプル) ########################################################################### 19 | sub palettePresetSimple { 20 | my $tool = shift; 21 | my $type = shift; 22 | my $text; 23 | my %bot; 24 | if (!$tool) { $bot{YTC} = 1; } 25 | elsif($tool eq 'bcdice'){ $bot{BCD} = 1; } 26 | 27 | return $text; 28 | } 29 | 30 | ### デフォルト変数 ################################################################################### 31 | sub paletteProperties { 32 | my $tool = shift; 33 | my $type = shift; 34 | my @propaties; 35 | return @propaties; 36 | } 37 | 38 | 1; -------------------------------------------------------------------------------- /_core/lib/kiz/subroutine-sub.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use CGI::Cookie; 6 | use List::Util qw/max min/; 7 | use Fcntl; 8 | 9 | ### サブルーチン-KIZ ################################################################################# 10 | 11 | ### ユニットステータス出力 -------------------------------------------------- 12 | sub createUnitStatus { 13 | my %pc = %{$_[0]}; 14 | my @unitStatus = ( 15 | { '耐久値' => $pc{endurance} }, 16 | { '作戦力' => $pc{operation} }, 17 | { '励起値' => '0' }, 18 | ); 19 | 20 | foreach my $key (split ',', $pc{unitStatusNotOutput}){ 21 | @unitStatus = grep { !exists $_->{$key} } @unitStatus; 22 | } 23 | 24 | foreach my $num (1..$pc{unitStatusNum}){ 25 | next if !$pc{"unitStatus${num}Label"}; 26 | push(@unitStatus, { $pc{"unitStatus${num}Label"} => $pc{"unitStatus${num}Value"} }); 27 | } 28 | 29 | return \@unitStatus; 30 | } 31 | 32 | ### バージョンアップデート -------------------------------------------------- 33 | sub data_update_chara { 34 | my %pc = %{$_[0]}; 35 | my $ver = $pc{ver}; 36 | delete $pc{updateMessage}; 37 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 38 | if($ver < 1.17021){ 39 | $pc{class} = $pc{type}; 40 | delete $pc{type}; 41 | } 42 | $pc{ver} = $main::ver; 43 | $pc{lasttimever} = $ver; 44 | return %pc; 45 | } 46 | 47 | 1; -------------------------------------------------------------------------------- /_core/lib/ms/calc-chara.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | 6 | sub data_calc { 7 | my %pc = %{$_[0]}; 8 | ### アップデート -------------------------------------------------- 9 | if($pc{ver}){ 10 | %pc = data_update_chara(\%pc); 11 | } 12 | 13 | ### レベル・成長 -------------------------------------------------- 14 | ## 履歴から 15 | $pc{level} = 0; 16 | 17 | foreach my $i (0 .. $pc{historyNum}){ 18 | $pc{level} += s_eval($pc{"history${i}Level"});; 19 | } 20 | 21 | ### 能力値 -------------------------------------------------- 22 | $pc{statusPhysical} = $pc{statusPhysicalBase} + $pc{statusPhysicalGrow}; 23 | $pc{statusSpecial } = $pc{statusSpecialBase } + $pc{statusSpecialGrow }; 24 | $pc{statusSocial } = $pc{statusSocialBase } + $pc{statusSocialGrow }; 25 | 26 | ### 耐久値 -------------------------------------------------- 27 | $pc{endurance} = 20 + $pc{enduranceMod}; 28 | 29 | 30 | ### 0を消去 -------------------------------------------------- 31 | #foreach ( 32 | # '', 33 | #){ 34 | # delete $pc{$_} if !$pc{$_}; 35 | #} 36 | 37 | #### 改行を
に変換 -------------------------------------------------- 38 | foreach ( 39 | 'words', 40 | 'freeNote', 41 | 'freeHistory', 42 | 'chatPalette', 43 | ){ 44 | $pc{$_} =~ s/\r\n?|\n/
/g; 45 | } 46 | 47 | #### 保存処理でなければここまで -------------------------------------------------- 48 | if(!$::mode_save){ return %pc; } 49 | 50 | #### エスケープ -------------------------------------------------- 51 | $pc{$_} = pcEscape($pc{$_}) foreach (keys %pc); 52 | $pc{tags} = normalizeHashtags($pc{tags}); 53 | 54 | ### 最終参加卓 -------------------------------------------------- 55 | foreach my $i (reverse 1 .. $pc{historyNum}){ 56 | if($pc{"history${i}Gm"} && $pc{"history${i}Title"}){ $pc{lastSession} = removeTags unescapeTags $pc{"history${i}Title"}; last; } 57 | } 58 | 59 | ### newline -------------------------------------------------- 60 | my %NL; 61 | foreach ('characterName','taxa','home','origin','background','clan','clanEmotion','address'){ 62 | $NL{$_} = $pc{$_} =~ s/[||]([^||]+?)《.+?》/$1/gr; 63 | $NL{$_} = removeTags unescapeTags $NL{$_}; 64 | } 65 | $::newline = "$pc{id}<>$::file<>". 66 | "$pc{birthTime}<>$::now<>$NL{characterName}<>$pc{playerName}<>$pc{group}<>". 67 | "$pc{image}<> $pc{tags} <>$pc{hide}<>$pc{lastSession}<>". 68 | 69 | "$pc{level}<>$pc{endurance}<>". 70 | "$NL{taxa}<>$NL{home}<>". 71 | "$NL{origin}<>$NL{background}<>". 72 | "$NL{clan}<>$NL{clanEmotion}<>$NL{address}<>"; 73 | 74 | return %pc; 75 | } 76 | 77 | 1; -------------------------------------------------------------------------------- /_core/lib/ms/calc-clan.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | 6 | sub data_calc { 7 | my %pc = %{$_[0]}; 8 | ### アップデート -------------------------------------------------- 9 | #if($pc{ver}){ 10 | # %pc = data_update_clan(\%pc); 11 | #} 12 | 13 | ### レベル・成長 -------------------------------------------------- 14 | ## 履歴から 15 | $pc{level} = 0; 16 | 17 | foreach my $i (0 .. $pc{historyNum}){ 18 | $pc{level} += s_eval($pc{"history${i}Level"});; 19 | } 20 | 21 | #### 改行を
に変換 -------------------------------------------------- 22 | foreach ( 23 | 'words', 24 | 'freeNote', 25 | 'freeHistory', 26 | 'chatPalette', 27 | ){ 28 | $pc{$_} =~ s/\r\n?|\n/
/g; 29 | } 30 | 31 | #### 保存処理でなければここまで -------------------------------------------------- 32 | if(!$::mode_save){ return %pc; } 33 | 34 | #### エスケープ -------------------------------------------------- 35 | $pc{$_} = pcEscape($pc{$_}) foreach (keys %pc); 36 | $pc{tags} = normalizeHashtags($pc{tags}); 37 | 38 | ### 最終参加卓 -------------------------------------------------- 39 | foreach my $i (reverse 1 .. $pc{historyNum}){ 40 | if($pc{"history${i}Gm"} && $pc{"history${i}Title"}){ $pc{lastSession} = removeTags unescapeTags $pc{"history${i}Title"}; last; } 41 | } 42 | 43 | ### newline -------------------------------------------------- 44 | my %NL; 45 | foreach ('clanName','leaderName','base','belong'){ 46 | $NL{$_} = $pc{$_} =~ s/[||]([^||]+?)《.+?》/$1/gr; 47 | $NL{$_} = removeTags unescapeTags $NL{$_}; 48 | } 49 | $NL{rule} = length($pc{rule}) > 50 ? substr($pc{rule}, 0, 50).'...' : $pc{rule}; 50 | $::newline = "$pc{id}<>$::file<>". 51 | "$pc{birthTime}<>$::now<>$NL{clanName}<>$pc{playerName}<>$pc{group}<>". 52 | "$pc{image}<> $pc{tags} <>$pc{hide}<>$pc{lastSession}<>". 53 | 54 | "$pc{level}<>". 55 | "$NL{base}<>$NL{belong}<>". 56 | "$NL{rule}<>". 57 | "$NL{leaderName}<>"; 58 | 59 | return %pc; 60 | } 61 | 62 | 1; -------------------------------------------------------------------------------- /_core/lib/ms/convert.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | use LWP::UserAgent; 7 | use JSON::PP; 8 | 9 | sub urlDataGet { 10 | my $url = shift; 11 | my $ua = LWP::UserAgent->new; 12 | my $res = $ua->get($url); 13 | if ($res->is_success) { 14 | return $res->decoded_content; 15 | } 16 | else { 17 | return undef; 18 | } 19 | } 20 | 21 | sub dataConvert { 22 | my $set_url = shift; 23 | my $file; 24 | 25 | ## ゆとシートⅡ 26 | { 27 | my $data = urlDataGet($set_url.'&mode=json') or error 'コンバート元のデータが取得できませんでした'; 28 | if($data !~ /^{/){ error 'JSONデータが取得できませんでした' } 29 | $data = escapeThanSign($data); 30 | my %pc = utf8::is_utf8($data) ? %{ decode_json(encode('utf8', (join '', $data))) } : %{ decode_json(join '', $data) }; 31 | if($pc{result} eq 'OK'){ 32 | our $base_url = $set_url; 33 | $base_url =~ s|/[^/]+?$|/|; 34 | $pc{convertSource} = '別のゆとシートⅡ'; 35 | return %pc; 36 | } 37 | elsif($pc{result}) { 38 | error 'コンバート元のゆとシートⅡでエラーがありました
'.$pc{result}; 39 | } 40 | else { 41 | error '有効なデータが取得できませんでした'; 42 | } 43 | } 44 | } 45 | 46 | sub dataPartnerGet { 47 | my $set_url = shift; 48 | my $file; 49 | 50 | ## 同じゆとシートⅡ 51 | my $self = CGI->new()->url; 52 | if($set_url =~ m"^$self\?id=(.+?)(?:$|&)"){ 53 | my $id = $1; 54 | my ($file, $type, $author) = getfile_open($id); 55 | my %pc; 56 | open my $IN, '<', "${set::char_dir}${file}/data.cgi"; 57 | while (<$IN>){ 58 | chomp; 59 | my ($key, $value) = split(/<>/, $_, 2); 60 | $pc{$key} = $value; 61 | } 62 | close($IN); 63 | if($pc{image}){ 64 | $pc{imageURL} = "./?id=$id&mode=image&cache=$pc{imageUpdate}"; 65 | $pc{imagePath} = "${set::char_dir}${file}/image.$pc{image}"; 66 | } 67 | $pc{convertSource} = '同じゆとシートⅡ'; 68 | return %pc; 69 | } 70 | ## 他のゆとシートⅡ 71 | { 72 | my $data = urlDataGet($set_url.'&mode=json') or return; 73 | if($data !~ /^{/){ return } 74 | $data = escapeThanSign($data); 75 | my %pc = utf8::is_utf8($data) ? %{ decode_json(encode('utf8', (join '', $data))) } : %{ decode_json(join '', $data) }; 76 | if($pc{result} eq 'OK'){ 77 | our $base_url = $set_url; 78 | $base_url =~ s|/[^/]+?$|/|; 79 | $pc{convertSource} = '別のゆとシートⅡ'; 80 | return %pc; 81 | } 82 | else { 83 | return; 84 | } 85 | } 86 | } 87 | 88 | ## タグ:全角スペース・英数を半角に変換 -------------------------------------------------- 89 | sub convertTags { 90 | my $tags = shift; 91 | $tags =~ tr/ / /; 92 | $tags =~ tr/0-9A-Za-z/0-9A-Za-z/; 93 | $tags =~ tr/+-*/.,_/\+\-\*\/\.,_/; 94 | $tags =~ tr/ / /s; 95 | return $tags 96 | } 97 | 98 | 1; -------------------------------------------------------------------------------- /_core/lib/ms/edit-clan.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const gameSystem = 'ms'; 3 | 4 | window.onload = function() { 5 | setName(); 6 | calcLevel(); 7 | checkAttribute(); 8 | checkMagi(); 9 | 10 | changeColor(); 11 | } 12 | 13 | // 送信前チェック ---------------------------------------- 14 | function formCheck(){ 15 | if(form.clanName.value === ''){ 16 | alert('クラン名を入力してください。'); 17 | form.clanName.focus(); 18 | return false; 19 | } 20 | if(form.protect.value === 'password' && form.pass.value === ''){ 21 | alert('パスワードが入力されていません。'); 22 | form.pass.focus(); 23 | return false; 24 | } 25 | return true; 26 | } 27 | 28 | // 名前 ---------------------------------------- 29 | function setName(){ 30 | let c = ruby(form.clanName.value); 31 | document.querySelector('#header-menu > h2 > span').innerHTML = c ?? '(名称未入力)'; 32 | 33 | function vCheck(id){ 34 | if(form[id]){ return form[id].value; } 35 | else { return '' } 36 | } 37 | } 38 | 39 | // 強度計算 ---------------------------------------- 40 | let level = 0; 41 | function calcLevel(){ 42 | level = 0; 43 | for (let num = 1; num <= Number(form.historyNum.value); num++){ 44 | const obj = form['history'+num+'Level']; 45 | let lv = safeEval(obj.value); 46 | if(isNaN(lv)){ 47 | obj.classList.add('error'); 48 | } 49 | else { 50 | level += lv; 51 | obj.classList.remove('error'); 52 | } 53 | } 54 | document.getElementById("level-value").textContent = level; 55 | document.getElementById("history-level-total").textContent = level; 56 | } 57 | 58 | // メンバー欄 ---------------------------------------- 59 | // 追加 60 | function addMember(){ 61 | document.getElementById('member-tbody').append(createRow('member','memberNum')); 62 | } 63 | // 削除 64 | function delMember(){ 65 | delRow('memberNum', '#member-tbody tr:last-of-type'); 66 | } 67 | // ソート 68 | setSortable('member','#member-tbody','tr'); 69 | 70 | // 特性欄 ---------------------------------------- 71 | function checkAttribute() { 72 | let count = 0; 73 | for (let num = 1; num <= 6; num++){ 74 | if(form['attribute'+num].value){ count++ } 75 | } 76 | document.getElementById('attribute').querySelector('.annotate').textContent 77 | = (count < 3) ? '特性を3つ記入してください' : ''; 78 | } 79 | 80 | // マギ欄 ---------------------------------------- 81 | function checkMagi() { 82 | let count = 0; 83 | for (let num = 1; num <= 4; num++){ 84 | if(form['magi'+num+'Name'].value){ count++ } 85 | } 86 | document.getElementById('magi').querySelector('.annotate').textContent 87 | = (count < 2) ? 'マギを《スクランブル!》と合わせて2つ取得してください' : ''; 88 | } 89 | 90 | // 履歴欄 ---------------------------------------- 91 | // 追加 92 | function addHistory(){ 93 | document.querySelector("#history-table tfoot").before(createRow('history','historyNum')); 94 | } 95 | // 削除 96 | function delHistory(){ 97 | if(delRow('historyNum', '#history-table tbody:last-of-type')){ 98 | calcLevel(); 99 | } 100 | } 101 | // ソート 102 | setSortable('history','#history-table','tbody'); 103 | -------------------------------------------------------------------------------- /_core/lib/ms/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | sub addJsonData { 8 | my %pc = %{ $_[0] }; 9 | my $type = $_[1]; 10 | if ($pc{type} eq 'c'){ 11 | } 12 | else { 13 | %pc = data_update_chara(\%pc) if $pc{ver}; 14 | 15 | ### 簡易プロフィール 16 | my @classes; 17 | foreach (@data::class_names){ 18 | push(@classes, { "NAME" => $_, "LV" => $pc{'lv'.$data::class{$_}{id}} } ); 19 | } 20 | @classes = sort{$b->{LV} <=> $a->{LV}} @classes; 21 | my $class_text; 22 | foreach my $data (@classes){ 23 | $class_text .= ($class_text ? '/' : '') . $data->{NAME} . $data->{LV} if $data->{LV} > 0; 24 | } 25 | my $base = "分類名:$pc{taxa} 出身地:$pc{home} 根源:$pc{origin} 経緯:$pc{background}"; 26 | my $clan = "クラン:$pc{clanName} クランへの感情:$pc{clanEmotion}"; 27 | my $address = "住所:$pc{address}"; 28 | my $level = "強度:$pc{level}"; 29 | my $physical = "【身体】$pc{statusPhysical} "; 30 | my $special = "【異質】$pc{statusSpecial} "; 31 | my $social = "【社会】$pc{statusSocial} "; 32 | foreach my $num (1..$pc{attributeRow}){ 33 | $physical .= "《$pc{'attributePhysical'.$num}》" if $pc{'attributePhysical'.$num}; 34 | $special .= "《$pc{'attributeSpecial'.$num}》" if $pc{'attributeSpecial'.$num}; 35 | $social .= "《$pc{'attributeSocial'.$num}》" if $pc{'attributeSocial'.$num}; 36 | } 37 | 38 | $pc{sheetDescriptionS} = $base." ".$address; 39 | $pc{sheetDescriptionM} = $base." ".$address."\n".$clan."\n".$level."\n".$physical."\n".$special."\n".$social; 40 | 41 | ## ユニット(コマ)用ステータス 42 | $pc{unitStatus} = createUnitStatus(\%pc); 43 | } 44 | 45 | return \%pc; 46 | } 47 | 48 | 1; -------------------------------------------------------------------------------- /_core/lib/ms/palette-sub.pl: -------------------------------------------------------------------------------- 1 | ################## チャットパレット用サブルーチン ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | 6 | ### プリセット ####################################################################################### 7 | sub palettePreset { 8 | my $tool = shift; 9 | my $type = shift; 10 | my $text; 11 | my %bot; 12 | if (!$tool) { $bot{YTC} = 1; } 13 | elsif($tool eq 'bcdice'){ $bot{BCD} = 1; } 14 | 15 | $text .= "1MS<={身体} 【身体】判定(ダイス1個)\n"; 16 | $text .= "2MS<={身体} 【身体】判定(ダイス2個)\n"; 17 | $text .= "3MS<={身体} 【身体】判定(ダイス3個)\n"; 18 | $text .= "\n"; 19 | $text .= "1MS<={異質} 【異質】判定(ダイス1個)\n"; 20 | $text .= "2MS<={異質} 【異質】判定(ダイス2個)\n"; 21 | $text .= "3MS<={異質} 【異質】判定(ダイス3個)\n"; 22 | $text .= "\n"; 23 | $text .= "1MS<={社会} 【社会】判定(ダイス1個)\n"; 24 | $text .= "2MS<={社会} 【社会】判定(ダイス2個)\n"; 25 | $text .= "3MS<={社会} 【社会】判定(ダイス3個)\n"; 26 | 27 | 28 | 29 | return $text; 30 | } 31 | 32 | ### プリセット(シンプル) ########################################################################### 33 | sub palettePresetSimple { 34 | my $tool = shift; 35 | my $type = shift; 36 | my $text; 37 | my %bot; 38 | if (!$tool) { $bot{YTC} = 1; } 39 | elsif($tool eq 'bcdice'){ $bot{BCD} = 1; } 40 | 41 | $text .= "1MS<=$::pc{statusPhysical} 【身体】判定(ダイス1個)\n"; 42 | $text .= "2MS<=$::pc{statusPhysical} 【身体】判定(ダイス2個)\n"; 43 | $text .= "3MS<=$::pc{statusPhysical} 【身体】判定(ダイス3個)\n"; 44 | $text .= "\n"; 45 | $text .= "1MS<=$::pc{statusSpecial} 【異質】判定(ダイス1個)\n"; 46 | $text .= "2MS<=$::pc{statusSpecial} 【異質】判定(ダイス2個)\n"; 47 | $text .= "3MS<=$::pc{statusSpecial} 【異質】判定(ダイス3個)\n"; 48 | $text .= "\n"; 49 | $text .= "1MS<=$::pc{statusSocial} 【社会】判定(ダイス1個)\n"; 50 | $text .= "2MS<=$::pc{statusSocial} 【社会】判定(ダイス2個)\n"; 51 | $text .= "3MS<=$::pc{statusSocial} 【社会】判定(ダイス3個)\n"; 52 | 53 | return $text; 54 | } 55 | 56 | ### デフォルト変数 ################################################################################### 57 | sub paletteProperties { 58 | my $tool = shift; 59 | my $type = shift; 60 | my @propaties; 61 | if(!$type){ 62 | push @propaties, "### ■能力値"; 63 | push @propaties, "//身体=$::pc{statusPhysical}"; 64 | push @propaties, "//異質=$::pc{statusSpecial}"; 65 | push @propaties, "//社会=$::pc{statusSocial}"; 66 | } 67 | return @propaties; 68 | } 69 | 70 | 1; -------------------------------------------------------------------------------- /_core/lib/ms/subroutine-sub.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use CGI::Cookie; 6 | use List::Util qw/max min/; 7 | use Fcntl; 8 | 9 | ### サブルーチン-MS ################################################################################# 10 | 11 | ### ユニットステータス出力 -------------------------------------------------- 12 | sub createUnitStatus { 13 | my %pc = %{$_[0]}; 14 | my @unitStatus = ( 15 | { '耐久値' => $pc{endurance} }, 16 | ); 17 | 18 | foreach my $key (split ',', $pc{unitStatusNotOutput}){ 19 | @unitStatus = grep { !exists $_->{$key} } @unitStatus; 20 | } 21 | 22 | foreach my $num (1..$pc{unitStatusNum}){ 23 | next if !$pc{"unitStatus${num}Label"}; 24 | push(@unitStatus, { $pc{"unitStatus${num}Label"} => $pc{"unitStatus${num}Value"} }); 25 | } 26 | 27 | return \@unitStatus; 28 | } 29 | 30 | ### バージョンアップデート -------------------------------------------------- 31 | sub data_update_chara { 32 | my %pc = %{$_[0]}; 33 | my $ver = $pc{ver}; 34 | delete $pc{updateMessage}; 35 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 36 | 37 | $pc{ver} = $main::ver; 38 | $pc{lasttimever} = $ver; 39 | return %pc; 40 | } 41 | 42 | ### バージョンアップデート・クラン -------------------------------------------------- 43 | sub data_update_clan { 44 | my %pc = %{$_[0]}; 45 | my $ver = $pc{ver}; 46 | delete $pc{updateMessage}; 47 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 48 | if($ver < 1.24002){ 49 | if($pc{magi1Name} eq 'スクランブル!' && $pc{magi1Cond} eq '7~12'){ 50 | $pc{magi1Cond} = '8~12' 51 | } 52 | } 53 | $pc{ver} = $main::ver; 54 | $pc{lasttimever} = $ver; 55 | return %pc; 56 | } 57 | 58 | 1; -------------------------------------------------------------------------------- /_core/lib/others.pl: -------------------------------------------------------------------------------- 1 | ################## その他の処理 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | our $LOGIN_ID = check; 8 | 9 | my $mode = $::in{mode}; 10 | 11 | ### バックアップ命名 ################################################################################# 12 | if($mode eq 'bu-naming'){ 13 | my $id = $::in{id}; 14 | my $pass = $::in{pass}; 15 | my $date = $::in{date} || 'latest'; 16 | my $name = pcEscape( decode('utf8',$::in{'log-name'}) ); 17 | 18 | ## パスワードチェック 19 | (undef, undef, my $file, my $type, my $user) = getfile($id,$pass,$LOGIN_ID); 20 | if(!$file){ error('パスワードが間違っているか、編集権限がありません。'); } 21 | changeFileByType($type); 22 | 23 | ## ディレクトリ 24 | my $fileDir = $set::char_dir .($user ? "_${user}/${file}" : $file); 25 | 26 | ## 読込 27 | sysopen (my $FH, "${fileDir}/log-list.cgi", O_RDWR) or error('ログ一覧が開けません。'.$fileDir); 28 | flock($FH, 2); 29 | my @list = <$FH>; 30 | 31 | ## 保存 32 | seek($FH, 0, 0); 33 | foreach my $line (@list) { 34 | if(index($line, $date) == 0){ 35 | chomp $line; 36 | my($_date, $_epoc, undef) = split(/<>/, $line); 37 | print $FH "${_date}<>${_epoc}<>${name}\n"; 38 | } 39 | else { print $FH $line; } 40 | } 41 | truncate($FH, tell($FH)); 42 | close($FH); 43 | 44 | ## キャラシートへ移動/編集画面に戻る 45 | if($date eq 'latest'){ print "Location: ./?id=${id}\n\n"; } 46 | else { print "Location: ./?id=${id}&log=${date}\n\n"; } 47 | } 48 | 49 | 50 | 1; -------------------------------------------------------------------------------- /_core/lib/register.pl: -------------------------------------------------------------------------------- 1 | ################## PLデータ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | my $mask = umask 0; 8 | 9 | my $mode = $::in{mode}; 10 | 11 | if($mode eq 'register'){ 12 | if(!token_check($::in{_token})){ error('セッションの有効期限が切れたか、二重投稿です'); } 13 | 14 | if($set::registerkey && $set::registerkey ne $::in{registerkey}){ error('登録キーが間違っています。'); } 15 | if($::in{password} ne $::in{password_confirm}){ error('パスワードの確認入力が一致しません'); } 16 | if ($::in{password} eq ''){ error('パスワードが入力されていません'); } 17 | else { 18 | if ($::in{password} =~ /[^0-9A-Za-z\.\-\/]/) { error('パスワードに使える文字は、半角の英数字とピリオド、ハイフン、スラッシュだけです'); } 19 | } 20 | 21 | open (my $FH, '<', $set::userfile); 22 | while (my $line = <$FH>){ 23 | if(index($line, "$::in{id}<") == 0){ error('そのIDは使用されています'); } 24 | } 25 | close ($FH); 26 | 27 | sysopen (my $FH, $set::userfile, O_WRONLY | O_APPEND | O_CREAT, 0666); 28 | print $FH $::in{id}."<>".&e_crypt($::in{password})."<>".decode('utf8', $::in{name})."<>".$::in{mail}."<>".time."<>\n"; 29 | close ($FH); 30 | 31 | if($set::player_dir){ 32 | if (!-d $set::player_dir.$::in{id}){ mkdir $set::player_dir.$::in{id}; } 33 | sysopen (my $FH, $set::player_dir.$::in{id}.'/data.cgi', O_WRONLY | O_APPEND | O_CREAT, 0666); 34 | print $FH "id<>".$::in{id}."\n"; 35 | print $FH "name<>".decode('utf8',$::in{name})."\n"; 36 | close ($FH); 37 | } 38 | 39 | log_in($::in{id},$::in{password}); 40 | } 41 | elsif($mode eq 'option'){ 42 | my $LOGIN_ID = check; 43 | 44 | sysopen (my $FH, $set::userfile, O_RDWR); 45 | flock($FH, 2); 46 | my @list = <$FH>; 47 | seek($FH, 0, 0); 48 | foreach my $line (@list){ 49 | if(index($line, "$LOGIN_ID<") == 0){ 50 | my @data= split(/<>/, $line); 51 | print $FH "$data[0]<>$data[1]<>".decode('utf8', $::in{name})."<>".$::in{mail}."<>\n"; 52 | }else{ 53 | print $FH $line; 54 | } 55 | } 56 | truncate($FH, tell($FH)); 57 | close($FH); 58 | 59 | our $set_message = '変更を保存しました。'; 60 | require $set::lib_form; 61 | } 62 | elsif($mode eq 'passchange'){ 63 | my $LOGIN_ID = check; 64 | 65 | if($::in{new_password} ne $::in{new_password_confirm}){ error('パスワードの確認入力が一致しません'); } 66 | if ($::in{password} eq ''){ error('パスワードが入力されていません'); } 67 | if ($::in{new_password} eq ''){ error('新しいパスワードが入力されていません'); } 68 | else { 69 | if ($::in{new_password} =~ /[^0-9A-Za-z\.\-\/]/) { error('パスワードに使える文字は、半角の英数字とピリオド、ハイフン、スラッシュだけです'); } 70 | } 71 | 72 | my $flag; 73 | sysopen (my $FH, $set::userfile, O_RDWR); 74 | flock($FH, 2); 75 | my @list = <$FH>; 76 | seek($FH, 0, 0); 77 | foreach (@list){ 78 | my @data= split /<>/; 79 | if ($data[0] eq $LOGIN_ID && c_crypt($::in{password},$data[1])){ 80 | print $FH "$data[0]<>".e_crypt($::in{new_password})."<>$data[2]<>$data[3]<>\n"; 81 | $flag = 1; 82 | }else{ 83 | print $FH $_; 84 | } 85 | } 86 | truncate($FH, tell($FH)); 87 | close($FH); 88 | 89 | if(!$flag){ error('パスワードが間違っています'); } 90 | 91 | our $set_message = '変更を保存しました。'; 92 | require $set::lib_form; 93 | } 94 | 1; -------------------------------------------------------------------------------- /_core/lib/reminder.pl: -------------------------------------------------------------------------------- 1 | ################### リマインダ ################### 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | my $mask = umask 0; 8 | 9 | 10 | if($::in{mail}){ 11 | 12 | open (my $FH, '<', $set::userfile) or &error('一覧データのオープンに失敗しました。'); 13 | my @list = <$FH>; 14 | close($FH); 15 | 16 | my @hit_id; 17 | foreach(@list){ 18 | my($id, $pass, $name, $mail) = (split /<>/, $_)[0..3]; 19 | if($mail eq $::in{mail}){ 20 | push(@hit_id, $id); 21 | } 22 | } 23 | if(!@hit_id){ error('入力したメールアドレスは登録されていません。'); } 24 | 25 | &sendmail($::in{mail}, $set::title." : ID-Reminder", "このメールアドレスで登録されているIDは\n".join("\n",@hit_id)."\nです。"); 26 | 27 | info('送信完了','入力されたメールアドレスにIDを送信しました。'); 28 | } 29 | elsif($::in{id}){ 30 | my $token = random_id(12); 31 | sysopen (my $FH, $set::tokenfile, O_WRONLY | O_APPEND | O_CREAT, 0666); 32 | print $FH $::in{id}.'-'.$token."<>".(time + 60*60*1)."<>\n"; 33 | close($FH); 34 | 35 | open (my $FH, '<', $set::userfile) or &error('一覧データのオープンに失敗しました。'); 36 | my @list = <$FH>; 37 | close($FH); 38 | 39 | my $in_mail; 40 | foreach(@list){ 41 | my($id, $pass, $name, $mail) = (split /<>/, $_)[0..3]; 42 | if($id eq $::in{id}){ 43 | $in_mail = $mail; 44 | } 45 | } 46 | 47 | if(!$in_mail){ error('存在しないIDか、メールアドレスが設定されていないIDです。'); } 48 | 49 | &sendmail($in_mail, $set::title." : PasswordReset", "パスワードを再設定します。\n下記のURLにアクセスしてください。\n\n".url()."?mode=reset&code=".$::in{id}.'-'.$token."\n\nパスワードを再設定したくない場合、このメッセージは無視してください。"); 50 | 51 | info('送信完了','登録されたメールアドレスにパスワードリセット用URLを送信しました。'); 52 | } 53 | elsif($::in{password}){ 54 | if(!token_check($::in{code})){ error('URLの有効期限が過ぎています。'); } 55 | 56 | if($::in{password} ne $::in{password_confirm}){ error('パスワードの確認入力が一致しません'); } 57 | if ($::in{password} eq ''){ error('パスワードが入力されていません'); } 58 | else { 59 | if ($::in{password} =~ /[^0-9A-Za-z\.\-\/]/) { error('パスワードに使える文字は、半角の英数字とピリオド、ハイフン、スラッシュだけです'); } 60 | } 61 | 62 | my $id = (split(/-/, $::in{code}))[0]; 63 | 64 | my $flag; 65 | sysopen (my $FH, $set::userfile, O_RDWR); 66 | flock($FH, 2); 67 | my @list = <$FH>; 68 | seek($FH, 0, 0); 69 | foreach (@list){ 70 | my @data= split /<>/; 71 | if ($data[0] eq $id){ 72 | print $FH "$data[0]<>".e_crypt($::in{password})."<>$data[2]<>$data[3]<>\n"; 73 | $flag = 1; 74 | }else{ 75 | print $FH $_; 76 | } 77 | } 78 | truncate($FH, tell($FH)); 79 | close($FH); 80 | 81 | if(!$flag){ error('IDが存在しません。'); } 82 | 83 | info('再設定完了','パスワードの変更が完了しました。'); 84 | } 85 | 86 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2.0/data-mons.pl: -------------------------------------------------------------------------------- 1 | #################### 種族 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | ## ●分類リスト 8 | # ['' , ''] 9 | our @taxa = ( 10 | ['未分類' , '99' , ''], 11 | ['蛮族' , '01' , ''], 12 | ['動物' , '02' , ''], 13 | ['植物' , '03' , ''], 14 | ['アンデッド', '04' , ''], 15 | ['魔法生物' , '05' , ''], 16 | ['幻獣' , '07' , ''], 17 | ['妖精' , '08' , ''], 18 | ['魔神' , '09' , ''], 19 | ['人族' , '10' , ''], 20 | ['神族' , '11' , ''], 21 | ['フォールン', '12' , ''], 22 | ['その他' , '88' , ''], 23 | ); 24 | 25 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2/calc-arts.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | #require $set::data_item; 8 | 9 | sub data_calc { 10 | my %pc = %{$_[0]}; 11 | 12 | my $name; 13 | my $sub; 14 | my $summary; 15 | if($pc{category} eq 'magic'){ 16 | $name = $pc{magicName}; 17 | $sub = $pc{magicClass}.'/'.$pc{magicLevel}; 18 | if($pc{magicMinor}){ $sub .= '/小魔法'; } 19 | if($pc{magicClass} =~ /呪印|貴格/) { $summary = substr($pc{magicEffect}, 0, 35).'..'; } 20 | else { $summary = $pc{magicSummary}; } 21 | } 22 | elsif($pc{category} eq 'god'){ 23 | $name = ($pc{godAka} ? "“$pc{godAka}”" : "").$pc{godName}; 24 | $sub = ($pc{godClass}||'―') . '/' . ($pc{godRank}||'―') . '/' . ($pc{godArea}||'―'); 25 | $summary = substr($pc{godDeity}, 0, 35).'..'; 26 | } 27 | elsif($pc{category} eq 'school'){ 28 | $name = $pc{schoolName}; 29 | $sub = ($pc{schoolArea}||'―'); 30 | $summary = substr($pc{schoolNote}, 0, 35).'..'; 31 | } 32 | $summary =~ s/\r|\n/ /g; 33 | $pc{artsName} = $name; 34 | 35 | $pc{magicSongPet} = join('、', 36 | grep $_, ($pc{magicSongPetBird}?'小鳥':undef) ,($pc{magicSongPetFrog}?'蛙':undef),($pc{magicSongPetBug}?'虫':undef) 37 | ); 38 | if($pc{magicClass} eq '騎芸'){ 39 | $pc{magicType} = join('、', 40 | grep $_, ($pc{magicMountTypeAnimal}?'動物':undef) ,($pc{magicMountTypeCryptid}?'幻獣':undef),($pc{magicMountTypeMachine}?'魔動機':undef) 41 | ); 42 | } 43 | #### カテゴリの全角半角変換 -------------------------------------------------- 44 | $pc{category} =~ tr/a-zA-Z/a-zA-Z/; 45 | 46 | #### 改行を
に変換 -------------------------------------------------- 47 | foreach ( 48 | 'magicEffect', 49 | 'magicDescription', 50 | 'godSymbol', 51 | 'godDeity', 52 | 'godNote', 53 | 'godMagic2Effect', 54 | 'godMagic4Effect', 55 | 'godMagic7Effect', 56 | 'godMagic10Effect', 57 | 'godMagic13Effect', 58 | 'schoolNote', 59 | 'schoolItemNote', 60 | 'schoolArtsNote', 61 | 'schoolMagicNote', 62 | ){ 63 | $pc{$_} =~ s/\r\n?|\n/
/g; 64 | } 65 | foreach my $num (1..$pc{schoolArtsNum}){ 66 | $pc{"schoolArts${num}Effect"} =~ s/\r\n?|\n/
/g; 67 | } 68 | foreach my $num (1..$pc{schoolMagicNum}){ 69 | $pc{"schoolMagic${num}Effect"} =~ s/\r\n?|\n/
/g; 70 | } 71 | 72 | #### 保存処理でなければここまで -------------------------------------------------- 73 | if(!$::mode_save){ return %pc; } 74 | 75 | #### エスケープ -------------------------------------------------- 76 | $pc{$_} = pcEscape($pc{$_}) foreach (keys %pc); 77 | $pc{tags} = normalizeHashtags($pc{tags}); 78 | 79 | ### newline -------------------------------------------------- 80 | $name =~ s/[||]([^||]+?)《.+?》/$1/g; 81 | $::newline = "$pc{id}<>$::file<>". 82 | "$pc{birthTime}<>$::now<>$name<>$pc{author}<>". 83 | "$pc{category}<>$sub<>$summary<>". 84 | "$pc{image}<> $pc{tags} <>$pc{hide}<>"; 85 | 86 | return %pc; 87 | } 88 | 89 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2/calc-item.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | #require $set::data_item; 8 | 9 | sub data_calc { 10 | my %pc = %{$_[0]}; 11 | 12 | #### カテゴリの全角半角変換 -------------------------------------------------- 13 | $pc{category} =~ tr/a-zA-Z/a-zA-Z/; 14 | 15 | #### 改行を
に変換 -------------------------------------------------- 16 | $pc{effects} =~ s/\r\n?|\n/
/g; 17 | $pc{description} =~ s/\r\n?|\n/
/g; 18 | 19 | #### 保存処理でなければここまで -------------------------------------------------- 20 | if(!$::mode_save){ return %pc; } 21 | 22 | #### エスケープ -------------------------------------------------- 23 | $pc{$_} = pcEscape($pc{$_}) foreach (keys %pc); 24 | $pc{tags} = normalizeHashtags($pc{tags}); 25 | 26 | ### newline -------------------------------------------------- 27 | my $name = $pc{itemName}; 28 | my $type = $pc{magic} ? '[ma]' : ''; 29 | $name =~ s/[||]([^||]+?)《.+?》/$1/g; 30 | $::newline = "$pc{id}<>$::file<>". 31 | "$pc{birthTime}<>$::now<>$name<>$pc{author}<>". 32 | "$pc{category}<>$pc{price}<>$pc{age}<>$pc{summary}<>$type<>". 33 | "$pc{image}<> $pc{tags} <>$pc{hide}<>"; 34 | 35 | return %pc; 36 | } 37 | 38 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2/calc-mons.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | 6 | require $set::data_mons; 7 | 8 | sub data_calc { 9 | my %pc = %{$_[0]}; 10 | 11 | #### -------------------------------------------------- 12 | $pc{partsNum} ||= 1; 13 | if(!$pc{taxa} && $pc{taxaSelect} eq 'その他'){ $pc{taxa} = 'その他' } 14 | 15 | #### 改行を
に変換 -------------------------------------------------- 16 | $pc{skills} =~ s/\r\n?|\n/
/g; 17 | $pc{description} =~ s/\r\n?|\n/
/g; 18 | $pc{chatPalette} =~ s/\r\n?|\n/
/g; 19 | 20 | #### 保存処理でなければここまで -------------------------------------------------- 21 | if(!$::mode_save){ return %pc; } 22 | 23 | #### エスケープ -------------------------------------------------- 24 | $pc{$_} = pcEscape($pc{$_}) foreach (keys %pc); 25 | $pc{tags} = normalizeHashtags($pc{tags}); 26 | 27 | ### newline -------------------------------------------------- 28 | my $name = $pc{characterName} ? $pc{characterName} : $pc{monsterName}; 29 | $name = "【${name}】" if $name eq $pc{monsterName} && $pc{mount}; 30 | $name =~ s/[||]([^||]+?)《.+?》/$1/g; 31 | $pc{hide} = 'IN' if(!$pc{hide} && $pc{description} =~ /#login-only/i); 32 | my $taxa = ($pc{mount} ? '騎獣/':'') 33 | . (($pc{taxa} && !grep { @$_[0] eq $pc{taxa} } @data::taxa) ? 'その他:' : '') 34 | . $pc{taxa}; 35 | my $lv = ($pc{mount} && $pc{lv} eq '') ? "$pc{lvMin}-$pc{lvMax}" : $pc{lv}; 36 | my $disposition = $pc{mount} ? '' : $pc{disposition}; 37 | my $initiative = $pc{mount} ? '' : $pc{initiative}; 38 | my $habitat = $pc{mount} ? '' : $pc{habitat}; 39 | my $price = $pc{mount} ? "$pc{price}/$pc{priceRental}" : ''; 40 | $::newline = "$pc{id}<>$::file<>". 41 | "$pc{birthTime}<>$::now<>$name<>$pc{author}<>$taxa<>$lv<>". 42 | "$pc{intellect}<>$pc{perception}<>$disposition<>$pc{sin}<>$initiative<>$pc{weakness}<>". 43 | "$pc{image}<> $pc{tags} <>$pc{hide}<>$pc{partsNum}<>$habitat<>$price"; 44 | 45 | return %pc; 46 | } 47 | 48 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2/data-faith.pl: -------------------------------------------------------------------------------- 1 | #################### 信仰 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | ## ●神リスト 8 | # [剣 , '神格' , '通称' , '名前'], 9 | our @gods = ( 10 | [ 1, '古', '始祖神' , 'ライフォス'], 11 | [ 1, '古', '太陽神' , 'ティダン'], 12 | [ 1, '古', '妖精神' , 'アステリア'], 13 | [ 1, '古', '炎武帝' , 'グレンダール'], 14 | [ 1, '古', '紡糸の女神', 'エルピュセ'], 15 | [ 1, '古', '貨幣神' , 'ガメル'], 16 | [ 1, '大', '月神' , 'シーン'], 17 | [ 1, '大', '奈落の盾神', 'イーヴ'], 18 | [ 1, '大', '導きの星神', 'ハルーラ'], 19 | [ 1, '大', '樹神' , 'ダリオン'], 20 | [ 1, '大', '慈愛と復讐の女神', 'ミリッツァ'], 21 | [ 1, '大', '食福神' , 'ミィルズ'], 22 | [ 1, '大', '機甲神' , 'アールマータ'], 23 | [ 1, '大', '酒幸神' , 'サカロス'], 24 | [ 1, '大', '騎士神' , 'ザイア'], 25 | [ 1, '大', '慈雨神' , 'フェトル'], 26 | [ 1, '大', '裁竜の魔女', 'ニコラ'], 27 | [ 1, '大', '放浪神' , 'サドゥール'], 28 | [ 1, '小', '風と雨の女神', 'フルシル'], 29 | [ 1, '小', '鉄道神王' , 'ストラスフォード'], 30 | [ 1, '小', '武妖精' , 'カグツ'], 31 | [ 1, '小', '魔狩王' , 'ドレイヴェン'], 32 | [ 1, '小', '水の神' , 'ルーフェリア'], 33 | [ 1, '小', '融合神' , 'リルズ'], 34 | [ 1, '小', '剣神' , 'ヒューレ'], 35 | [ 1, '小', '韋駄天' , 'ラトクレス'], 36 | [ 1, '小', '鉄槌神' , 'エセルフィン'], 37 | [ 1, '小', '竜帝神' , 'シムルグ'], 38 | [ 1, '小', '制裁の双子女神', 'ヴィルトルード&オイゲーニア'], 39 | [ 1, '小', '牧畜神' , 'ジャージュ'], 40 | [ 1, '小', '潮の女神' , 'マール'], 41 | [ 1, '小', '伝達神' , 'レータン'], 42 | [ 1, '小', '共生神' , 'ルイファ'], 43 | 44 | [ 3, '古', '賢神' , 'キルヒア'], 45 | [ 3, '古', '戦勝神' , 'ユリスカロア'], 46 | [ 3, '大', '神の指先' , 'ミルタバル'], 47 | [ 3, '大', '秘隠神' , 'クス'], 48 | [ 3, '大', '伝令神' , 'パロ'], 49 | [ 3, '大', '糸織神' , 'アーデニ'], 50 | [ 3, '小', '纏いの神' , 'ニールダ'], 51 | [ 3, '小', '学護神' , 'エッケザッカ'], 52 | [ 3, '小', '器械神' , 'レパラール'], 53 | [ 3, '小', '刃神' , 'マキシム'], 54 | 55 | [ 2, '古', '戦神' , 'ダルクレム'], 56 | [ 2, '古', '死の神' , 'ザールギアス'], 57 | [ 2, '古', '惑いと偽りの神', 'ソーンダーク'], 58 | [ 2, '大', '海掠神' , 'エイリャーク'], 59 | [ 2, '大', '不死の女王', 'ツァイデス'], 60 | [ 2, '大', '血浴み神' , 'ニバセプス'], 61 | [ 2, '大', '罠の神' , 'グルヴァゾ'], 62 | [ 2, '大', '荒天地神' , 'ゾラス=バレス'], 63 | [ 2, '大', '酔悦神' , 'ドゥヴルーク'], 64 | [ 2, '大', '風来神' , 'ル=ロウド'], 65 | [ 2, '大', '腐敗の女神', 'ブラグザバス'], 66 | [ 2, '大', '不死神' , 'メティシエ'], 67 | [ 2, '大', '眠りの神' , 'カオルルウプテ'], 68 | [ 2, '大', '不和神' , 'ニディスニオ'], 69 | [ 2, '大', '策謀神' , 'ワギル=イシナニ'], 70 | [ 2, '大', '霧闇神' , 'フラクシス'], 71 | [ 2, '小', '詐金神' , 'メイガル'], 72 | [ 2, '小', '宥和神' , 'アーメス'], 73 | [ 2, '小', '毒薬の神' , 'テメリオ'], 74 | [ 2, '小', '海風の神' , 'ヴァ=セアン'], 75 | [ 2, '小', '吸生神' , 'キュリアドラル'], 76 | [ 2, '小', '蹂躙の戦乙女', 'イズマイア'], 77 | [ 2, '小', '邪妖の女神', 'ネアン'], 78 | 79 | [ 0, '大', '狂神' , 'ラーリス'], 80 | [ 0, ' ', '' , 'その他の信仰'], 81 | ); 82 | 83 | 84 | 85 | 86 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2/data-items.pl: -------------------------------------------------------------------------------- 1 | #################### アイテム #################### 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | our @weapons = ( 8 | ['ソード', 'sword'], 9 | ['アックス', 'axe'], 10 | ['スピア', 'spear'], 11 | ['メイス', 'mace'], 12 | ['スタッフ', 'staff'], 13 | ['フレイル', 'flail'], 14 | ['ウォーハンマー','hammer'], 15 | ['絡み', 'entangle'], 16 | ['格闘', 'grapple'], 17 | ['投擲', 'throw'], 18 | ['ボウ', 'bow'], 19 | ['クロスボウ', 'crossbow'], 20 | ['ブロウガン', 'blowgun'], 21 | ['ガン', 'gun'], 22 | ); 23 | 24 | our @weapon_names; 25 | our %weapon_id; 26 | foreach (@weapons){ 27 | push (@weapon_names, @$_[0]); 28 | $weapon_id{@$_[0]} = @$_[1]; 29 | } 30 | 31 | our @drugs = ( 32 | { 33 | name => '救命草', 34 | category => '薬草', 35 | rate => 10, 36 | }, 37 | { 38 | name => '救難草', 39 | category => '薬草', 40 | rate => 50, 41 | }, 42 | { 43 | name => '魔香草', 44 | category => '薬草', 45 | rate => 0, 46 | }, 47 | { 48 | name => '魔海草', 49 | category => '薬草', 50 | rate => 10, 51 | }, 52 | { 53 | name => 'ヒーリングポーション', 54 | category => 'ポーション', 55 | rate => 20, 56 | }, 57 | { 58 | name => 'ヒーリングポーション+1', 59 | category => 'ポーション', 60 | rate => 20, 61 | add => 1, 62 | }, 63 | { 64 | name => 'トリートポーション', 65 | category => 'ポーション', 66 | rate => 30, 67 | }, 68 | { 69 | name => 'テインテッドポーション', 70 | category => 'ポーション', 71 | rate => 20, 72 | add => '{穢れ}', 73 | }, 74 | { 75 | name => '魔香水', 76 | category => 'ポーション', 77 | }, 78 | ); 79 | 80 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2/data-mons.pl: -------------------------------------------------------------------------------- 1 | #################### 種族 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | ## ●分類リスト 8 | # ['' , ''] 9 | our @taxa = ( 10 | ['未分類' , '99' , ''], 11 | ['蛮族' , '01' , ''], 12 | ['動物' , '02' , ''], 13 | ['植物' , '03' , ''], 14 | ['アンデッド', '04' , ''], 15 | ['魔法生物' , '05' , ''], 16 | ['魔動機' , '06' , ''], 17 | ['幻獣' , '07' , ''], 18 | ['妖精' , '08' , ''], 19 | ['魔神' , '09' , ''], 20 | ['人族' , '10' , ''], 21 | ['神族' , '11' , ''], 22 | ['その他' , '88' , ''], 23 | ); 24 | 25 | 1; -------------------------------------------------------------------------------- /_core/lib/sw2/edit-chara-datalist.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | use utf8; 3 | use open ":utf8"; 4 | 5 | sub printCharaDataList { 6 | print <<"HTML"; 7 | 8 | 15 | 16 | 25 | 26 | 29 | 30 | 41 | 42 | 46 | 47 | 54 | 55 | 86 | HTML 87 | } 88 | 89 | 1; 90 | -------------------------------------------------------------------------------- /_core/lib/sw2/edit-item.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const gameSystem = 'sw2'; 3 | 4 | window.onload = function() { 5 | setName('itemName'); 6 | checkCategory(); 7 | changeColor(); 8 | } 9 | 10 | // 送信前チェック ---------------------------------------- 11 | function formCheck(){ 12 | if(form.itemName.value === ''){ 13 | alert('名称を入力してください。'); 14 | form.itemName.focus(); 15 | return false; 16 | } 17 | if(form.protect.value === 'password' && form.pass.value === ''){ 18 | alert('パスワードが入力されていません。'); 19 | form.pass.focus(); 20 | return false; 21 | } 22 | return true; 23 | } 24 | 25 | // 入力値による挙動の変化 ---------------------------------------- 26 | function checkCategory() { 27 | const category = document.querySelector('[name="category"]').value?.trim() ?? ''; 28 | document.getElementById('section-common').classList.toggle( 29 | 'is-ranged-weapon', 30 | /投擲|ボウ|クロスボウ|ガン/.test(category) 31 | ); 32 | } 33 | // 武器データ欄 ---------------------------------------- 34 | // 追加 35 | function addWeapon(){ 36 | document.querySelector("#weapons-table tbody").append(createRow('weapon','weaponNum')); 37 | } 38 | // 削除 39 | function delWeapon(){ 40 | delRow('weaponNum', '#weapons-table tbody tr:last-of-type'); 41 | } 42 | // ソート 43 | setSortable('weapon','#weapons-table tbody','tr'); 44 | 45 | // 防具データ欄 ---------------------------------------- 46 | // 追加 47 | function addArmour(){ 48 | document.querySelector("#armours-table tbody").append(createRow('armour','armourNum')); 49 | } 50 | // 削除 51 | function delArmour(){ 52 | delRow('armourNum', '#armours-table tbody tr:last-of-type'); 53 | } 54 | // ソート 55 | setSortable('armour','#armours-table tbody','tr'); 56 | -------------------------------------------------------------------------------- /_core/lib/sw2/js-consts.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use JSON::PP; 6 | 7 | ### データ読み込み ################################################################################### 8 | require $set::data_class; 9 | require $set::data_races; 10 | require $set::data_items; 11 | require $set::data_faith; 12 | 13 | ### 出力 ############################################################################################# 14 | foreach (keys %data::class){ 15 | $data::class{$_}{magic}{data} &&= 1 if exists($data::class{$_}{magic}); 16 | $data::class{$_}{craft}{data} &&= 1 if exists($data::class{$_}{craft}); 17 | } 18 | my %aRank; my %bRank; my %effects; 19 | $aRank{@$_[0]} = { num => @$_[1], free => @$_[2] } foreach(@set::adventurer_rank); 20 | $bRank{@$_[0]} = { num => @$_[1], free => @$_[2] } foreach(@set::barbaros_rank); 21 | foreach (@set::effects){ 22 | $effects{$_->{name}} = $_; 23 | delete $effects{$_->{name}}{name}; 24 | } 25 | my %settings = ( 26 | gameSystem => $set::game, 27 | allClassOn => $set::all_class_on, 28 | battleItemOn => $set::battleitem, 29 | growType => $set::growtype, 30 | featsLv => ['1bat',@set::feats_lv], 31 | races => \%data::races, 32 | class => \%data::class, 33 | classNames => \@data::class_names, 34 | classCasters => \@data::class_caster, 35 | weapons => \@data::weapons, 36 | aRank => \%aRank, 37 | bRank => \%bRank, 38 | nRank => \@set::notoriety_rank, 39 | nBRank => \@set::notoriety_barbaros_rank, 40 | partsData => \%data::partsData, 41 | effects => \%effects, 42 | ); 43 | print "const SET = ". JSON::PP->new->encode(\%settings); 44 | print "\n"; 45 | print "console.log('=====SET=====')"; 46 | 47 | 48 | 1; -------------------------------------------------------------------------------- /_core/lib/vc/convert.pl: -------------------------------------------------------------------------------- 1 | ################## データ保存 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | use LWP::UserAgent; 7 | use JSON::PP; 8 | 9 | require $set::data_class; 10 | require $set::data_races; 11 | 12 | sub urlDataGet { 13 | my $url = shift; 14 | my $ua = LWP::UserAgent->new; 15 | my $res = $ua->get($url); 16 | if ($res->is_success) { 17 | return $res->decoded_content; 18 | } 19 | else { 20 | return undef; 21 | } 22 | } 23 | 24 | sub dataConvert { 25 | my $set_url = shift; 26 | my $file; 27 | 28 | ## ゆとシートⅡ 29 | { 30 | my $data = urlDataGet($set_url.'&mode=json') or error 'コンバート元のデータが取得できませんでした'; 31 | if($data !~ /^{/){ error 'JSONデータが取得できませんでした' } 32 | $data = escapeThanSign($data); 33 | my %pc = utf8::is_utf8($data) ? %{ decode_json(encode('utf8', (join '', $data))) } : %{ decode_json(join '', $data) }; 34 | if($pc{result} eq 'OK'){ 35 | our $base_url = $set_url; 36 | $base_url =~ s|/[^/]+?$|/|; 37 | $pc{convertSource} = '別のゆとシートⅡ'; 38 | return %pc; 39 | } 40 | elsif($pc{result}) { 41 | error 'コンバート元のゆとシートⅡでエラーがありました
>'.$pc{result}; 42 | } 43 | else { 44 | error '有効なデータが取得できませんでした'; 45 | } 46 | } 47 | } 48 | 49 | 1; -------------------------------------------------------------------------------- /_core/lib/vc/data-class.pl: -------------------------------------------------------------------------------- 1 | #################### データ #################### 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | ### クラスデータ -------------------------------------------------- 8 | our @classes = ( 9 | {name => 'ウォーリア' }, 10 | {name => 'ハイランダー'}, 11 | {name => 'フェンサー'}, 12 | {name => 'ランサー'}, 13 | {name => 'アーチャー'}, 14 | {name => 'ガンスリンガー'}, 15 | {name => 'クレリック'}, 16 | {name => 'モンク'}, 17 | {name => 'ウィザード'}, 18 | {name => 'ニンジャ'}, 19 | ); 20 | 21 | ### スタイルデータ -------------------------------------------------- 22 | our @styles = ( 23 | {name => 'ブレイブ' }, 24 | {name => 'マイスター' }, 25 | {name => 'ノービス' }, 26 | {name => 'リーダー' }, 27 | {name => 'ヘルパー' }, 28 | {name => 'フェイバリット' }, 29 | {name => 'ローンウルフ' }, 30 | {name => 'ブレイン' }, 31 | {name => 'ストリーマー' }, 32 | {name => 'ガジェッター' }, 33 | {name => 'カジュアル' }, 34 | {name => 'ハードコア' }, 35 | ); 36 | 37 | sub classNameList { 38 | my @list; 39 | foreach my $data (@classes){ 40 | push(@list, $data->{name}); 41 | } 42 | return @list; 43 | } 44 | sub styleNameList { 45 | my @list; 46 | foreach my $data (@styles){ 47 | push(@list, $data->{name}); 48 | } 49 | return @list; 50 | } 51 | 52 | 53 | 1; -------------------------------------------------------------------------------- /_core/lib/vc/data-races.pl: -------------------------------------------------------------------------------- 1 | #################### 種族 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package data; 6 | 7 | ### 種族データ -------------------------------------------------- 8 | our @races = ( 9 | {name => 'ヒューマン' }, 10 | {name => 'エルフ' }, 11 | {name => 'ドワーフ' }, 12 | {name => 'ティターン' }, 13 | {name => 'センリ' }, 14 | {name => 'ピクシー' }, 15 | ); 16 | 17 | sub raceNameList { 18 | my @list; 19 | foreach my $data (@races){ 20 | push(@list, $data->{name}); 21 | } 22 | return @list; 23 | } 24 | 25 | 26 | 1; -------------------------------------------------------------------------------- /_core/lib/vc/json-sub.pl: -------------------------------------------------------------------------------- 1 | ################## JSONデータ追加 ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | use open ":utf8"; 6 | 7 | sub addJsonData { 8 | my %pc = %{ $_[0] }; 9 | my $type = $_[1]; 10 | 11 | %pc = data_update_chara(\%pc) if $pc{ver}; 12 | 13 | ### 簡易プロフィール -------------------------------------------------- 14 | my $base = "種族:$pc{race}クラス:$pc{class}\nスタイル:$pc{style1}/$pc{style2}"; 15 | my $class = "バイタリティ:$pc{vitality} テクニック:$pc{technic} クレバー:$pc{clever} カリスマ:$pc{carisma}"; 16 | 17 | $pc{sheetDescriptionS} = $base."\n".$class."\n"; 18 | $pc{sheetDescriptionM} = $base."\n".$class."\n"; 19 | 20 | ## ユニット(コマ)用ステータス 21 | $pc{unitStatus} = createUnitStatus(\%pc); 22 | 23 | return \%pc; 24 | } 25 | 26 | 1; -------------------------------------------------------------------------------- /_core/lib/vc/palette-sub.pl: -------------------------------------------------------------------------------- 1 | ################## チャットパレット用サブルーチン ################## 2 | use strict; 3 | #use warnings; 4 | use utf8; 5 | 6 | ### プリセット ####################################################################################### 7 | sub palettePreset { 8 | my $tool = shift; 9 | my $type = shift; 10 | my $text; 11 | my %bot; 12 | if (!$tool) { $bot{YTC} = 1; } 13 | elsif($tool eq 'tekey' ){ $bot{TKY} = $bot{BCD} = 1; } 14 | elsif($tool eq 'bcdice'){ $bot{BCD} = 1; } 15 | 16 | if(!$type){ 17 | # 基本判定 18 | $text .= "### ■判定\n"; 19 | $text .= "2d6+{バイタリティ} 【バイタリティ】判定\n"; 20 | $text .= "2d6+{テクニック} 【テクニック】判定\n"; 21 | $text .= "2d6+{クレバー} 【クレバー】判定\n"; 22 | $text .= "2d6+{カリスマ} 【カリスマ】判定\n"; 23 | $text .= "2d6+{命中値} 【命中値】判定\n"; 24 | $text .= "2d6+{詠唱値} 【詠唱値】判定\n"; 25 | $text .= "2d6+{回避値} 【回避値】判定\n"; 26 | $text .= "2d6+{攻撃値} 【攻撃値】判定\n"; 27 | $text .= "2d6+{意志値} 【意志値】判定\n"; 28 | $text .= "2d6+{物防値} 【物防値】判定\n"; 29 | $text .= "2d6+{魔防値} 【魔防値】判定\n"; 30 | $text .= "2d6+{行動値} 【行動値】判定\n"; 31 | $text .= "2d6+{耐久値} 【耐久値】判定\n"; 32 | 33 | $text .= "###\n" if $bot{YTC} || $bot{TKY}; 34 | } 35 | 36 | return $text; 37 | } 38 | 39 | ### プリセット(シンプル) ########################################################################### 40 | sub palettePresetSimple { 41 | my $tool = shift; 42 | my $type = shift; 43 | 44 | my $text = palettePreset($tool,$type); 45 | my %propaty; 46 | foreach (paletteProperties($tool,$type)){ 47 | if($_ =~ /^\/\/(.+?)=(.*)$/){ 48 | $propaty{$1} = $2; 49 | } 50 | } 51 | my $hit = 1; 52 | while ($hit){ 53 | $hit = 0; 54 | foreach(keys %propaty){ 55 | if($text =~ s/\{$_\}/$propaty{$_}/i){ $hit = 1 } 56 | } 57 | } 58 | 1 while $text =~ s/\([+\-*0-9]+\)/s_eval($&)/egi; 59 | 60 | return $text; 61 | } 62 | 63 | ### デフォルト変数 ################################################################################### 64 | sub paletteProperties { 65 | my $tool = shift; 66 | my $type = shift; 67 | my @propaties; 68 | 69 | if (!$type){ 70 | push @propaties, "### ■能力値"; 71 | push @propaties, "//レベル=$::pc{level}"; 72 | push @propaties, "//バイタリティ=$::pc{vitality}"; 73 | push @propaties, "//テクニック=$::pc{technic}"; 74 | push @propaties, "//クレバー=$::pc{clever}"; 75 | push @propaties, "//カリスマ=$::pc{carisma}"; 76 | push @propaties, "//命中値=$::pc{battleTotalAcc}"; 77 | push @propaties, "//詠唱値=$::pc{battleTotalSpl}"; 78 | push @propaties, "//回避値=$::pc{battleTotalEva}"; 79 | push @propaties, "//攻撃値=$::pc{battleTotalAtk}"; 80 | push @propaties, "//意志値=$::pc{battleTotalDet}"; 81 | push @propaties, "//物防値=$::pc{battleTotalDef}"; 82 | push @propaties, "//魔防値=$::pc{battleTotalMdf}"; 83 | push @propaties, "//行動値=$::pc{battleTotalIni}"; 84 | push @propaties, "//耐久値=$::pc{battleTotalStr}"; 85 | #push @propaties, "### ■代入パラメータ"; 86 | } 87 | 88 | return @propaties; 89 | } 90 | 91 | 1; -------------------------------------------------------------------------------- /_core/lib/vc/subroutine-sub.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | #use warnings; 3 | use utf8; 4 | use open ":utf8"; 5 | use CGI::Cookie; 6 | use List::Util qw/max min/; 7 | use Fcntl; 8 | 9 | ### サブルーチン-AR ################################################################################## 10 | 11 | ### ユニットステータス出力 -------------------------------------------------- 12 | sub createUnitStatus { 13 | my %pc = %{$_[0]}; 14 | my @unitStatus = ( 15 | { 'HP' => $pc{hpMax}.'/'.$pc{hpMax} }, 16 | { 'スタミナ' => $pc{staminaMax}.'/'.$pc{staminaMax} }, 17 | { '回避値' => $pc{battleTotalEva} }, 18 | { '物防値' => $pc{battleTotalDef} }, 19 | { '魔防値' => $pc{battleTotalMdf} }, 20 | ); 21 | 22 | foreach my $key (split ',', $pc{unitStatusNotOutput}){ 23 | @unitStatus = grep { !exists $_->{$key} } @unitStatus; 24 | } 25 | 26 | foreach my $num (1..$pc{unitStatusNum}){ 27 | next if !$pc{"unitStatus${num}Label"}; 28 | push(@unitStatus, { $pc{"unitStatus${num}Label"} => $pc{"unitStatus${num}Value"} }); 29 | } 30 | 31 | return \@unitStatus; 32 | } 33 | 34 | ### バージョンアップデート -------------------------------------------------- 35 | sub data_update_chara { 36 | my %pc = %{$_[0]}; 37 | my $ver = $pc{ver}; 38 | $ver =~ s/^([0-9]+)\.([0-9]+)\.([0-9]+)$/$1.$2$3/; 39 | delete $pc{updateMessage}; 40 | 41 | if($ver < 1.24003){ 42 | $pc{staminaMax} += 5; 43 | $pc{staminaHalf} = int($pc{staminaMax} / 2); 44 | } 45 | 46 | $pc{ver} = $main::ver; 47 | $pc{lasttimever} = $ver; 48 | return %pc; 49 | } 50 | 51 | 1; -------------------------------------------------------------------------------- /_core/module/README.txt: -------------------------------------------------------------------------------- 1 | 同梱Perlモジュール一覧 2 | 3 | HTML::Template 4 | https://metacpan.org/release/HTML-Template 5 | -------------------------------------------------------------------------------- /_core/skin/_common/css/form.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer form { 4 | /* // Form 5 | ---------------------------------------------------------------------------------------------------- */ 6 | section.form { 7 | margin: 10%; 8 | padding: 0.5em; 9 | border-width: 1px; 10 | border-style: solid; 11 | border-radius: 10px; 12 | 13 | & h2 { 14 | font-size: 2rem; 15 | } 16 | } 17 | .night section.form { 18 | background-color: #fff1; 19 | } 20 | 21 | .form p { 22 | position: relative; 23 | margin: 1em; 24 | text-align: center; 25 | 26 | & > label > span { 27 | display: inline-block; 28 | width: 11em; 29 | text-align: right; 30 | } 31 | & > label > input + b { 32 | display: inline-block; 33 | position: absolute; 34 | bottom: 2px; 35 | margin-left: 5px; 36 | white-space: nowrap; 37 | overflow: visible; 38 | font-size: 12px; 39 | } 40 | & > input[type="submit"] { 41 | width: 5em; 42 | } 43 | } 44 | .form dl { 45 | margin: 1em; 46 | line-height: 2; 47 | > dd { 48 | padding-left: 1em; 49 | } 50 | } 51 | 52 | #convertform section.form { 53 | margin: 5% 10%; 54 | 55 | & section+section { 56 | margin-top: 1em; 57 | border-top-width: 1px; 58 | border-top-style: solid; 59 | } 60 | & h4 { 61 | font-size: 110%; 62 | &:before { content: "●"; } 63 | } 64 | & p { 65 | margin: .5em .5em 1em; 66 | } 67 | & section:last-child p:last-child { 68 | margin-bottom: .5em; 69 | } 70 | & dl { 71 | margin-left: .5em; 72 | + dl { margin-top: .8em; } 73 | } 74 | & dl dd + dt { 75 | margin-top: .2em; 76 | } 77 | & dl dt::before { 78 | content: "◆"; 79 | } 80 | & dl dd { 81 | font-size: 95%; 82 | &::before { 83 | content: "・"; 84 | } 85 | & i { 86 | font-style: normal; 87 | color: #5599aa; 88 | } 89 | } 90 | } 91 | 92 | /* ////////// LayerEnd ////////// */ 93 | } -------------------------------------------------------------------------------- /_core/skin/_common/img/back-abstract-reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/_common/img/back-abstract-reverse.png -------------------------------------------------------------------------------- /_core/skin/_common/img/back-abstract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/_common/img/back-abstract.png -------------------------------------------------------------------------------- /_core/skin/_common/img/back-pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/_common/img/back-pattern.png -------------------------------------------------------------------------------- /_core/skin/_common/index-menu.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_core/skin/_common/js/common.js: -------------------------------------------------------------------------------- 1 | // ナイトモード 2 | const htmlClass = document.getElementsByTagName('html')[0].classList; 3 | let nightMode = localStorage.getItem("nightMode"); 4 | if(nightMode == 1) { htmlClass.add('night'); } 5 | function nightModeChange() { 6 | if(nightMode != 1) { htmlClass.add('night');nightMode = 1; } 7 | else { htmlClass.remove('night'); nightMode = 0; } 8 | localStorage.setItem("nightMode", nightMode); 9 | } 10 | // カラーカスタムON/OFF 11 | let colorlessMode = localStorage.getItem("colorlessMode"); 12 | if(colorlessMode == 1) { htmlClass.add('colorless'); } 13 | function changeColorlessMode(){ 14 | if(colorlessMode != 1) { htmlClass.add('colorless'); colorlessMode = 1; } 15 | else { htmlClass.remove('colorless'); colorlessMode = 0; } 16 | localStorage.setItem("colorlessMode", colorlessMode); 17 | } 18 | window.addEventListener("DOMContentLoaded", () => { 19 | console.log('colorlessMode:'+colorlessMode); 20 | const obj = document.querySelector('[onchange*=changeColorlessMode]') || ''; 21 | if(obj && colorlessMode == 1){ 22 | obj.checked = true; 23 | } 24 | }) 25 | // ルビコピーON/OFF 26 | let rubyCopyMode = localStorage.getItem("rubyCopyMode") ?? 1; 27 | function changeRubyCopyMode(){ 28 | if(rubyCopyMode != 1) { rubyCopyMode = 1; } 29 | else { rubyCopyMode = 0; } 30 | localStorage.setItem("rubyCopyMode", rubyCopyMode); 31 | } 32 | window.addEventListener("DOMContentLoaded", () => { 33 | console.log('rubyCopyMode:'+rubyCopyMode) 34 | const obj = document.querySelector('[onchange*=changeRubyCopyMode]') || '' 35 | if(obj && rubyCopyMode == 1){ 36 | obj.checked = true; 37 | } 38 | }) 39 | // 検索フォーム 40 | function formSwitch(){ 41 | const viewMode = document.getElementById("form-search-area").style.display == 'none' ? 0 : 1; 42 | document.getElementById("form-search-area").style.display = viewMode ? 'none' : ''; 43 | } 44 | -------------------------------------------------------------------------------- /_core/skin/_common/js/lib/jszip-utils.min.js: -------------------------------------------------------------------------------- 1 | !function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){return function o(i,f,u){function s(n,e){if(!f[n]){if(!i[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(a)return a(n,!0);throw new Error("Cannot find module '"+n+"'")}var r=f[n]={exports:{}};i[n][0].call(r.exports,function(e){var t=i[n][1][e];return s(t||e)},r,r.exports,o,i,f,u)}return f[n].exports}for(var a="function"==typeof require&&require,e=0;e div { 48 | flex-grow: 1; 49 | margin: 0 -6%; 50 | transform: scaleX(0.88); 51 | } 52 | & td.class > div:empty { 53 | display: none; 54 | } 55 | @media screen and (width <= 735px){ 56 | & { 57 | grid-template-columns: 18rem 6em 2.8em 0.6fr 0.6fr 10em 4em; 58 | grid-template-areas: 59 | "NAME PL RACE RACE LVL CLS DATE" 60 | "NAME PL GEN AGE EXP CLS DATE" 61 | ; 62 | } 63 | & .geis { display: none; } 64 | } 65 | } 66 | 67 | /* // List-Simple 68 | ---------------------------------------------------------------------------------------------------- */ 69 | .list ul li a::before { 70 | content: 'Lv'attr(data-lv); 71 | } 72 | 73 | 74 | /* ////////// LayerEnd ////////// */ 75 | } -------------------------------------------------------------------------------- /_core/skin/ar2e/img/back-wheel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/ar2e/img/back-wheel.png -------------------------------------------------------------------------------- /_core/skin/ar2e/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <TMPL_VAR title> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |

27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 |
43 |

44 |

45 |
46 |
47 |
48 | 49 | 50 |
51 | 52 | 58 | 59 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /_core/skin/ar2e/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | output.consts = output.consts || {}; 5 | 6 | output.consts.dicebot = 'Arianrhod'; 7 | 8 | output.consts.initiative = { label:'行動値', name: 'battleTotalIni' }; 9 | 10 | output.consts.SKILL_COLUMNS = { 11 | name: '《エフェクト名》', 12 | level: 'Lv', 13 | timing: 'タイミング', 14 | target: '対象', 15 | range: '射程', 16 | cost: 'コスト', 17 | reqd: '使用条件', 18 | note: '効果' 19 | }; 20 | 21 | output.consts.CONNECTION_COLUMNS = { 22 | name: '名前', 23 | relation: '関係', 24 | }; 25 | 26 | output.consts.GEIS_COLUMNS = { 27 | name: '名前', 28 | cost: '成長点', 29 | note: 'メモ' 30 | }; 31 | 32 | output.consts.ARMAMENT_COLUMNS = { 33 | type: '', 34 | name: '名前', 35 | weight: '重量', 36 | acc: '命中', 37 | atk: '攻撃', 38 | eva: '回避', 39 | def: '物防', 40 | mdef: '魔防', 41 | ini: '行動', 42 | move: '移動', 43 | range: '射程', 44 | note: '備考' 45 | }; 46 | 47 | output.consts.AR2_STATUS = [ 48 | { 49 | name: '筋力', 50 | column: 'Str', 51 | }, 52 | { 53 | name: '器用', 54 | column: 'Dex', 55 | }, 56 | { 57 | name: '敏捷', 58 | column: 'Agi', 59 | }, 60 | { 61 | name: '知力', 62 | column: 'Int', 63 | }, 64 | { 65 | name: '感知', 66 | column: 'Sen', 67 | }, 68 | { 69 | name: '精神', 70 | column: 'Mnd', 71 | }, 72 | { 73 | name: '幸運', 74 | column: 'Luk', 75 | }, 76 | ]; 77 | -------------------------------------------------------------------------------- /_core/skin/ar2e/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfArianrhod2PC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName || json.aka; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += json.characterNameRuby ? '('+json.characterNameRuby+')\n' :''; 11 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 12 | character.memo += `${json.age || ''} / ${json.gender || ''} / ${json.race || ''}\n`; 13 | character.memo += `${json.classMain || ''}${json.classSupport ? ' / '+json.classSupport : ''}${json.classTitle ? ' / '+json.classTitle : ''}\n`; 14 | character.memo += `\n`; 15 | character.memo += json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''; 16 | 17 | let addedParam = {}; 18 | output.consts.AR2_STATUS.forEach((s)=>{ 19 | character.params.push({ 20 | label: s.name, value: json[`stt${s.column}Total`] || 0 21 | }); 22 | addedParam[s.name] = 1; 23 | }); 24 | 25 | defaultPalette.parameters.forEach(s => { 26 | if(addedParam[s.label]){ return ''; } 27 | character.params.push(s); 28 | }); 29 | 30 | return character; 31 | }; 32 | -------------------------------------------------------------------------------- /_core/skin/ar2e/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateUdonariumXmlDetailOfArianrhod2PC = (json, opt_url, defaultPalette, resources)=>{ 6 | const dataDetails = {'リソース':resources}; 7 | 8 | dataDetails['リソース'].push( 9 | ` ${json.fateLimit || 0}`, 10 | ` ${json.moneyTotal}`, 11 | ); 12 | dataDetails['情報'] = [ 13 | ` ${json.playerName || '?'}`, 14 | ` ${json.age || ''}`, 15 | ` ${json.gender || ''}`, 16 | ` ${json.race || ''}`, 17 | ` ${json.level || ''}`, 18 | ` ${json.classMain || ''}`, 19 | ` ${json.classSupport || ''}`, 20 | ` ${json.classTitle || ''}`, 21 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 22 | ]; 23 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 24 | 25 | let addedParam = {}; 26 | dataDetails['能力値'] = output.consts.AR2_STATUS.map((s)=>{ 27 | addedParam[s.name] = 1; 28 | return ` ${json['roll' + s.column]}` 29 | }); 30 | dataDetails['戦闘'] = [ 31 | ` {器用}+${json.battleAddAcc || 0}`, 32 | ` ${json.battleDiceAcc || 0}`, 33 | ` ${json.battleTotalAtk || 0}`, 34 | ` ${json.battleDiceAtk || 0}`, 35 | ` {敏捷}+${json.battleAddEva || 0}`, 36 | ` ${json.battleDiceEva || 0}`, 37 | ` ${json.battleTotalDef || 0}`, 38 | ` ${json.battleTotalMDef || 0}`, 39 | ` ${json.battleTotalIni || 0}`, 40 | ` ${json.battleTotalMove || 0}` 41 | ]; 42 | addedParam['命中'] = addedParam['命中ダイス'] = addedParam['攻撃力'] = addedParam['攻撃ダイス'] = addedParam['回避'] = addedParam['回避ダイス'] = addedParam['物理防御力'] = addedParam['魔法防御力'] = addedParam['行動値'] = addedParam['移動力'] = 1; 43 | 44 | dataDetails['バフ・デバフ'] = defaultPalette.parameters.map((param)=>{ 45 | if(addedParam[param.label]){ return `` } 46 | return ` ${param.value < 10 ? 10 : param.value}`; 47 | }); 48 | 49 | 50 | return dataDetails 51 | }; 52 | -------------------------------------------------------------------------------- /_core/skin/blp/css/list.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer system { 4 | /* // Body 5 | ---------------------------------------------------------------------------------------------------- */ 6 | body { 7 | background-image: url(../../_common/img/back-pattern.png), url(../img/back-moon.png); 8 | background-blend-mode: normal, hard-light; 9 | .night & { 10 | background-blend-mode: hard-light, hard-light; 11 | } 12 | @media screen and (width <= 735px){ 13 | background-size: auto, 120%; 14 | background-position-x: 0, 5vw; 15 | background-position-y: 0, 110%; 16 | } 17 | } 18 | /* // List 19 | ---------------------------------------------------------------------------------------------------- */ 20 | .list table { 21 | & tr { 22 | grid-template-columns: 26rem 0.7fr 6.5em 0.7fr 1.2fr 4em 0.6fr; 23 | } 24 | & thead tr { 25 | grid-template-areas: 26 | "NAME PL FACT GEN BLNG LVL DATE" 27 | "NAME PL FACT AGE MISS LVL DATE" 28 | ; 29 | } 30 | & tbody tr { 31 | grid-template-areas: 32 | "NAME PL FACT GEN BLNG LVL DATE" 33 | "NAME PL FACS AGE MISS LVL DATE" 34 | "NAME TAGS TAGS TAGS TAGS TAGS DATE" 35 | ; 36 | } 37 | & .name { grid-area: NAME; } 38 | & .player { grid-area: PL; } 39 | & .race { grid-area: RACE; } 40 | & .gender { grid-area: GEN; } 41 | & .age { grid-area: AGE; } 42 | & .factor { grid-area: FACT; } 43 | & .factors { grid-area: FACS; } 44 | & .belong { grid-area: BLNG; } 45 | & .missing { grid-area: MISS; } 46 | & .level { grid-area: LVL; } 47 | & .tags { grid-area: TAGS; } 48 | & .date { grid-area: DATE; } 49 | 50 | & td.belong, 51 | & td.missing { 52 | font-size: 90%; 53 | } 54 | @media screen and (width <= 735px){ 55 | & tr { 56 | grid-template-columns: 18rem 6em 7em 0.7fr 1fr 2.5em 4em; 57 | } 58 | & td.age, 59 | & td.factors { 60 | font-size: 90%; 61 | } 62 | } 63 | } 64 | 65 | 66 | /* // List-Simple 67 | ---------------------------------------------------------------------------------------------------- */ 68 | .list ul li a::before { 69 | content: attr(data-type); 70 | } 71 | 72 | 73 | /* ////////// LayerEnd ////////// */ 74 | } -------------------------------------------------------------------------------- /_core/skin/blp/img/back-moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/blp/img/back-moon.png -------------------------------------------------------------------------------- /_core/skin/blp/img/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/blp/img/default.png -------------------------------------------------------------------------------- /_core/skin/blp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <TMPL_VAR title> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |

27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 |
43 |

44 |

45 |
46 |
47 |
48 | 49 | 50 |
51 | 52 | 58 | 59 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /_core/skin/blp/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | output.consts = output.consts || {}; 5 | 6 | output.consts.dicebot = 'DiceBot'; 7 | 8 | output.consts.initiative = { label:'先制値', name: 'initiative' }; 9 | 10 | output.consts.BLOODARTS_COLUMNS = { 11 | name: '〈名称〉', 12 | timing: 'タイミング', 13 | target: '対象', 14 | note: '効果' 15 | }; 16 | 17 | output.consts.ARTS_COLUMNS = { 18 | name: '〈名称〉', 19 | timing: 'タイミング', 20 | target: '対象', 21 | cost: '代償', 22 | limited: '条件', 23 | note: '効果' 24 | }; 25 | -------------------------------------------------------------------------------- /_core/skin/blp/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfBloodPathPC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += json.characterNameRuby ? '('+json.characterNameRuby+')\n' :''; 11 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 12 | character.memo += `${json.factor || ''} / ${json.factorCore || ''} / ${json.factorStyle || ''}\n`; 13 | character.memo += `\n`; 14 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}`; 15 | 16 | if(json.factor === '人間'){ 17 | character.params.push({ label: '技', value: json.statusMain1 || 0 }); 18 | character.params.push({ label: '情', value: json.statusMain2 || 0 }); 19 | } 20 | else if(json.factor === '吸血鬼'){ 21 | character.params.push({ label: '心', value: json.statusMain1 || 0 }); 22 | character.params.push({ label: '想', value: json.statusMain2 || 0 }); 23 | } 24 | 25 | return character; 26 | }; 27 | -------------------------------------------------------------------------------- /_core/skin/blp/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateUdonariumXmlDetailOfBloodPathPC = (json, opt_url, defaultPalette, resources)=>{ 6 | const dataDetails = {'リソース':resources}; 7 | 8 | dataDetails['能力値'] = [ 9 | ` ${json.level || 0}`, 10 | ] 11 | if(json.factor === '人間'){ 12 | dataDetails['能力値'].push( 13 | ` ${json.statusMain1 || 0}`, 14 | ` ${json.statusMain2 || 0}`, 15 | ); 16 | } 17 | else if(json.factor === '吸血鬼'){ 18 | dataDetails['能力値'].push( 19 | ` ${json.statusMain1 || 0}`, 20 | ` ${json.statusMain2 || 0}`, 21 | ); 22 | } 23 | 24 | dataDetails['情報'] = [ 25 | ` ${json.playerName || '?'}`, 26 | ` ${json.factor || ''}/${json.factorCore || ''}/${json.factorStyle || ''}`, 27 | ` ${json.age || ''}${json.ageApp ? '(外見年齢:'+json.ageApp+')' : ''}`, 28 | ` ${json.gender || ''}`, 29 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 30 | ]; 31 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 32 | 33 | return dataDetails 34 | }; -------------------------------------------------------------------------------- /_core/skin/dx3/css/list.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer system { 4 | /* // Body 5 | ---------------------------------------------------------------------------------------------------- */ 6 | body { 7 | background-image: url(../../_common/img/back-pattern.png), url(../img/back-xx.png); 8 | @media screen and (width <= 735px){ 9 | background-size: auto, 70%; 10 | } 11 | } 12 | /* // List 13 | ---------------------------------------------------------------------------------------------------- */ 14 | .list table tr { 15 | grid-template-columns: 26rem 0.7fr 6.2em 1fr 1fr 4em 0.6fr; 16 | grid-template-areas: 17 | "NAME PL AGE WORK SYN EXP DATE" 18 | "NAME PL GEN DLOI SYN EXP DATE" 19 | "NAME TAGS TAGS TAGS TAGS TAGS DATE" 20 | ; 21 | } 22 | .list table .name { grid-area: NAME; } 23 | .list table .player { grid-area: PL; } 24 | .list table .race { grid-area: RACE; } 25 | .list table .gender { grid-area: GEN; } 26 | .list table .age { grid-area: AGE; } 27 | .list table .sign { grid-area: SIGN; display:none; } 28 | .list table .blood { grid-area: BLOD; display:none; } 29 | .list table .works { grid-area: WORK; } 30 | .list table .exp { grid-area: EXP; } 31 | .list table .syndrome{ grid-area: SYN; } 32 | .list table .dlois { grid-area: DLOI; } 33 | .list table .tags { grid-area: TAGS; } 34 | .list table .date { grid-area: DATE; } 35 | 36 | .list table td.age { 37 | align-items: end; 38 | } 39 | .list table td.dlois span { 40 | display: inline-block; 41 | } 42 | .list table td.syndrome { 43 | font-size: 85%; 44 | } 45 | .list table td.syndrome span { 46 | display: block; 47 | } 48 | @media screen and (width <= 735px){ 49 | .list table tr { 50 | grid-template-columns: 18rem 6em 3em 0.6fr 1fr 4em 4em; 51 | } 52 | } 53 | 54 | /* // List-Simple 55 | ---------------------------------------------------------------------------------------------------- */ 56 | .list ul li a::before { 57 | content: attr(data-lv); 58 | } 59 | 60 | 61 | /* ////////// LayerEnd ////////// */ 62 | } -------------------------------------------------------------------------------- /_core/skin/dx3/img/back-xx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/dx3/img/back-xx.png -------------------------------------------------------------------------------- /_core/skin/dx3/img/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/dx3/img/default.png -------------------------------------------------------------------------------- /_core/skin/dx3/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <TMPL_VAR title> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |

27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 |
43 |

44 |

45 |
46 |
47 |
48 | 49 | 50 |
51 | 52 | 58 | 59 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /_core/skin/dx3/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfDoubleCross3PC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName || json.aka; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += json.characterNameRuby ? '('+json.characterNameRuby+')\n' :''; 11 | character.memo += json.aka ? `コードネーム: ${json.aka}` : ''; 12 | character.memo += json.aka && json.akaRuby ? ` (${json.akaRuby})` : ''; 13 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 14 | character.memo += `${json.works || ''} / ${json.cover || ''}\n`; 15 | character.memo += `${json.syndrome1 || ''}${json.syndrome2 ? '、'+json.syndrome2 : ''}${json.syndrome3 ? '、'+json.syndrome3 : ''}\n`; 16 | character.memo += `\n`; 17 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}`; 18 | 19 | character.params = character.params.concat(defaultPalette.parameters || []); 20 | 21 | return character; 22 | }; 23 | -------------------------------------------------------------------------------- /_core/skin/dx3/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | /* MIT License 2 | 3 | Copyright 2020 @Shunshun94 4 | 5 | Customize & Refactoring by @yutorize 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | */ 25 | "use strict"; 26 | 27 | var output = output || {}; 28 | 29 | output.generateUdonariumXmlDetailOfDoubleCross3PC = (json, opt_url, defaultPalette, resources)=>{ 30 | const dataDetails = {'リソース':resources}; 31 | 32 | dataDetails['情報'] = [ 33 | ` ${json.playerName || '?'}`, 34 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 35 | ]; 36 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 37 | 38 | let addedParam = {}; 39 | dataDetails['能力値'] = output.consts.DX3_STATUS.map((s)=>{ 40 | addedParam[s.name] = 1; 41 | return ` ${json['sttTotal' + s.column]}` 42 | }); 43 | dataDetails['技能'] = output.consts.DX3_STATUS.map((s)=>{ 44 | const result = []; 45 | result.push(s.skills.map((skill)=>{ 46 | addedParam[skill.name] = 1; 47 | return ` ${json['skillTotal' + skill.column] || '0'}`; 48 | }).join('\n')); 49 | let cursor = 1; 50 | while(json[`skill${s.extendableSkill.column}${cursor}Name`]) { 51 | addedParam[json[`skill${s.extendableSkill.column}${cursor}Name`]] = 1; 52 | result.push(` ${json[`skillTotal${s.extendableSkill.column}${cursor}`] || 0}`); 53 | cursor++; 54 | } 55 | return result.join('\n'); 56 | }); 57 | 58 | dataDetails['バフ・デバフ'] = defaultPalette.parameters.map((param)=>{ 59 | if(addedParam[param.label]){ return `` } 60 | return ` ${param.value < 10 ? 10 : param.value}`; 61 | }); 62 | 63 | 64 | return dataDetails 65 | }; 66 | -------------------------------------------------------------------------------- /_core/skin/gc/css/list.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer system { 4 | /* // Body 5 | ---------------------------------------------------------------------------------------------------- */ 6 | body { 7 | background-image: url(../../_common/img/back-pattern.png), url(../img/back-crest.png); 8 | background-blend-mode: normal, normal; 9 | background-position: center, bottom -80px right -100px; 10 | background-size: auto, auto 110%; 11 | .night & { 12 | background-blend-mode: hard-light, normal; 13 | } 14 | @media screen and (width <= 735px){ 15 | background-size: auto, 100%; 16 | background-position-x: 0, 30vw; 17 | } 18 | } 19 | /* // List 20 | ---------------------------------------------------------------------------------------------------- */ 21 | .list table tr { 22 | grid-template-columns: 26rem 0.8fr 1fr 1fr 4em 1.1fr 0.7fr; 23 | grid-template-areas: 24 | "NAME PL CLS STYL LVL CNTR DATE" 25 | "NAME PL WRKS SSTL LVL PRF DATE" 26 | "NAME TAGS TAGS TAGS TAGS TAGS DATE" 27 | ; 28 | @media screen and (width <= 735px){ 29 | grid-template-columns: 18rem 6em 1fr 1fr 5.5em 3.5em; 30 | grid-template-areas: 31 | "NAME PL CLS STYL LVL DATE" 32 | "NAME PL WRKS SSTL PRF DATE" 33 | ; 34 | } 35 | .name { grid-area: NAME; } 36 | .player { grid-area: PL; } 37 | .race { grid-area: RACE; } 38 | .class { grid-area: CLS; } 39 | .style { grid-area: STYL; } 40 | .s-style{ grid-area: SSTL; } 41 | .works { grid-area: WRKS; } 42 | .lv { grid-area: LVL; } 43 | .country{ grid-area: CNTR; } 44 | .profile{ grid-area: PRF; } 45 | .tags { grid-area: TAGS; } 46 | .date { grid-area: DATE; } 47 | 48 | & .name { 49 | position: relative; 50 | } 51 | & td.lv { 52 | font-size: 1.4em; 53 | line-height: 1; 54 | } 55 | & td > .thin { 56 | display: inline-block; 57 | transform: scaleY(calc(1 / 0.85)); 58 | font-size: 85%; 59 | } 60 | @media screen and (width <= 735px){ 61 | .country { display: none; } 62 | } 63 | } 64 | 65 | /* // List-Country 66 | ---------------------------------------------------------------------------------------------------- */ 67 | .list.country table tr { 68 | grid-template-columns: 26rem 0.8fr 2.1fr 1fr 4em 0.7fr; 69 | grid-template-areas: 70 | "NAME PL LORD PERG LVL DATE" 71 | "NAME TAGS TAGS TAGS TAGS DATE" 72 | ; 73 | &:not(:has(.tags:not(:empty))){ 74 | grid-template-areas: 75 | "NAME PL LORD PERG LVL DATE" 76 | } 77 | @media screen and (width <= 735px){ 78 | grid-template-columns: 18rem 6em 1fr 1fr 5.5em 3.5em; 79 | grid-template-areas: 80 | "NAME PL LORD PERG LVL DATE" 81 | ; 82 | } 83 | .lord { grid-area: LORD; } 84 | .peerage{ grid-area: PERG; } 85 | } 86 | 87 | /* // List-Simple 88 | ---------------------------------------------------------------------------------------------------- */ 89 | .list ul li a::before { 90 | content: 'Lv'attr(data-lv); 91 | } 92 | 93 | 94 | /* ////////// LayerEnd ////////// */ 95 | } -------------------------------------------------------------------------------- /_core/skin/gc/img/back-crest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/gc/img/back-crest.png -------------------------------------------------------------------------------- /_core/skin/gc/img/default_pc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/gc/img/default_pc.png -------------------------------------------------------------------------------- /_core/skin/gc/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | output.consts = output.consts || {}; 5 | 6 | output.consts.dicebot = 'GranCrest'; 7 | 8 | output.consts.initiative = { label:'行動値', name: 'sttInitTotal' }; 9 | 10 | output.consts.GC_PARAMS = [ 11 | { name: 'レベル', value: 'level' }, 12 | { name: '筋力', value: 'sttStrCheckTotal', force:'force1Str' }, 13 | { name: '反射', value: 'sttRefCheckTotal', force:'force1Ref' }, 14 | { name: '感覚', value: 'sttPerCheckTotal', force:'force1Per' }, 15 | { name: '知力', value: 'sttIntCheckTotal', force:'force1Int' }, 16 | { name: '精神', value: 'sttMndCheckTotal', force:'force1Mnd' }, 17 | { name: '共感', value: 'sttEmpCheckTotal', force:'force1Emp' }, 18 | ]; -------------------------------------------------------------------------------- /_core/skin/gc/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfGranCrestPC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 11 | character.memo += `クラス:${json.class || '―'} / スタイル:${json.style || '―'}\n`; 12 | character.memo += `ワークス:${json.works || '―'} / サブスタイル:${json.styleSub || '―'}\n`; 13 | character.memo += `${json.age || ''} / ${json.gender || ''} / ${json.height || ''} / ${json.weight || ''}\n`; 14 | character.memo += `\n`; 15 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}\n`; 16 | 17 | let addedParam = {}; 18 | 19 | defaultPalette.parameters.forEach(s => { 20 | if(addedParam[s.label]){ return ''; } 21 | character.params.push(s); 22 | }); 23 | 24 | return character; 25 | }; 26 | -------------------------------------------------------------------------------- /_core/skin/gc/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateUdonariumXmlDetailOfGranCrestPC = (json, opt_url, defaultPalette, resources)=>{ 6 | const dataDetails = {'リソース':resources}; 7 | 8 | dataDetails['情報'] = [ 9 | ` ${json.playerName || '?'}`, 10 | ` ${json.class || ''}`, 11 | ` ${json.style || ''}`, 12 | ` ${json.works || ''}`, 13 | ` ${json.styleSub || ''}`, 14 | ` ${json.country || ''}`, 15 | ` ${json.gender || ''}`, 16 | ` ${json.age || ''}`, 17 | ` ${json.height || ''}`, 18 | ` ${json.weight || ''}`, 19 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 20 | ]; 21 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 22 | 23 | let addedParam = {}; 24 | dataDetails['レベル・判定値'] = []; 25 | output.consts.GC_PARAMS.forEach(data => { 26 | dataDetails['レベル・判定値'].push(` ${json[data.value] || 0}`); 27 | addedParam[data.name] = 1; 28 | }); 29 | if(json.forceLead){ 30 | output.consts.GC_PARAMS.forEach(data => { 31 | dataDetails['レベル・判定値'].push(` ${json[data.force.replace('1',json.forceLead)] || 0}`); 32 | addedParam['部隊'+data.name] = 1; 33 | }); 34 | } 35 | dataDetails['技能'] = []; 36 | for(const stt of ['Str','Ref','Per','Int','Mnd','Emp']){ 37 | for(let i = 1; i <= json[`skill${stt}Num`]; i++){ 38 | dataDetails['技能'].push(` ${json[`skill${stt}${i}Lv`] || 0}`); 39 | addedParam[json[`skill${stt}${i}Label`]] = 1; 40 | } 41 | } 42 | 43 | dataDetails['バフ・デバフ'] = defaultPalette.parameters.map((param)=>{ 44 | if(addedParam[param.label]){ return `` } 45 | return ` ${param.value < 10 ? 10 : param.value}`; 46 | }); 47 | 48 | 49 | return dataDetails 50 | }; 51 | -------------------------------------------------------------------------------- /_core/skin/gs/css/list.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer system { 4 | /* // Body 5 | ---------------------------------------------------------------------------------------------------- */ 6 | body { 7 | background-image: url(../../_common/img/back-pattern.png), url(../img/back-sword.png); 8 | background-blend-mode: normal, normal; 9 | .night & { 10 | background-blend-mode: hard-light, normal; 11 | } 12 | @media screen and (width <= 735px){ 13 | background-size: auto, 80%; 14 | } 15 | } 16 | /* // List 17 | ---------------------------------------------------------------------------------------------------- */ 18 | .list table tr { 19 | grid-template-columns: 26rem 0.7fr 2.5em 8.5em 2em 4.8em 1.7fr 0.6fr; 20 | grid-template-areas: 21 | "NAME PL RACE RACE RANK RANK CLS DATE" 22 | "NAME PL GEN AGE LVL EXP CLS DATE" 23 | "NAME TAGS TAGS TAGS TAGS TAGS TAGS DATE" 24 | ; 25 | } 26 | .list table .name { grid-area: NAME; } 27 | .list table .player { grid-area: PL; } 28 | .list table .race { grid-area: RACE; } 29 | .list table .age { grid-area: AGE; } 30 | .list table .gender { grid-area: GEN; } 31 | .list table .rank { grid-area: RANK; } 32 | .list table .lv { grid-area: LVL; } 33 | .list table .exp { grid-area: EXP; } 34 | .list table .class { grid-area: CLS; } 35 | .list table .tags { grid-area: TAGS; } 36 | .list table .date { grid-area: DATE; } 37 | 38 | .list table .name { 39 | position: relative; 40 | } 41 | .list table th.gender span.small { 42 | display: inline-block; 43 | transform: scaleY(calc(1/0.8)); 44 | font-size: 0.8em; 45 | } 46 | .list table td.lv { 47 | font-size: 1.15em; 48 | line-height: 1; 49 | } 50 | .list table td:is(.race, .rank) span.small { 51 | display: inline-block; 52 | transform: scaleY(calc(1/0.85)); 53 | } 54 | .list table td.class { 55 | text-align: left; 56 | line-height: 1; 57 | } 58 | .list table td.class > div { 59 | flex-grow: 1; 60 | display: flex; 61 | flex-wrap: wrap; 62 | gap: 0 1em; 63 | } 64 | .list table td.class > div > span { 65 | display: inline-block; 66 | padding: .1em 0; 67 | } 68 | @media screen and (width <= 735px){ 69 | .list table tr { 70 | grid-template-columns: 18rem 6em 2em 8em 5em auto 3.5em; 71 | grid-template-areas: 72 | "NAME PL RACE RACE EXP CLS DATE" 73 | "NAME PL GEN AGE EXP CLS DATE" 74 | "NAME TAGS TAGS TAGS TAGS TAGS DATE" 75 | ; 76 | } 77 | .list table .rank, 78 | .list table .lv { display: none; } 79 | } 80 | 81 | /* // List-Simple 82 | ---------------------------------------------------------------------------------------------------- */ 83 | .list ul li a[data-lv]::before { 84 | content: 'Lv'attr(data-lv); 85 | } 86 | 87 | 88 | /* ////////// LayerEnd ////////// */ 89 | } -------------------------------------------------------------------------------- /_core/skin/gs/img/back-sword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/gs/img/back-sword.png -------------------------------------------------------------------------------- /_core/skin/gs/img/default_enemy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/gs/img/default_enemy.png -------------------------------------------------------------------------------- /_core/skin/gs/img/default_pc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/gs/img/default_pc.png -------------------------------------------------------------------------------- /_core/skin/gs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <TMPL_VAR title> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |

27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 |
43 |

44 |

45 |
46 |
47 |
48 | 49 | 50 |
51 | 52 | 58 | 59 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /_core/skin/gs/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | output.consts = output.consts || {}; 5 | 6 | output.consts.dicebot = 'GoblinSlayer'; -------------------------------------------------------------------------------- /_core/skin/gs/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfGoblinSlayerPC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 11 | character.memo += `${json.race||'種族不明'}/${json.gender||'性別不明'}/${json.age||'年齢不明'}\n`; 12 | character.memo += `身体的特徴: ${json.traits || ''} 髪(${json.traitsHair} 瞳(${json.traitsEyes})\n`; 13 | character.memo += `等級: ${json.rank || '―'}\n`; 14 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}`; 15 | 16 | character.params = character.params.concat(defaultPalette.parameters || []); 17 | 18 | return character; 19 | }; 20 | -------------------------------------------------------------------------------- /_core/skin/gs/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateUdonariumXmlDetailOfGoblinSlayerPC = (json, opt_url, defaultPalette, resources)=>{ 6 | const dataDetails = {'リソース':resources}; 7 | 8 | dataDetails['情報'] = [ 9 | ` ${json.playerName || '?'}`, 10 | ` ${json.race || ''}${ json.raceFree ? `/${json.raceFree}` : '' }`, 11 | (json.raceBase ? ` ${json.raceBase || ''}${ json.raceBaseFree ? `/${json.raceBaseFree}` : '' }` : null), 12 | ` ${json.age || ''}${json.ageApp ? '(外見年齢:'+json.ageApp+')' : ''}`, 13 | ` ${json.gender || ''}`, 14 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 15 | ]; 16 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 17 | 18 | dataDetails['能力値'] = [ 19 | `${json.ability1Str}`, 20 | `${json.ability1Psy}`, 21 | `${json.ability1Tec}`, 22 | `${json.ability1Int}`, 23 | `${json.ability2Foc}`, 24 | `${json.ability2Edu}`, 25 | `${json.ability2Ref}`, 26 | ]; 27 | dataDetails['職業'] = []; 28 | for(const name of SET.classNames){ 29 | const level = json['lv'+SET.class[name].id]; 30 | if(!level) continue; 31 | dataDetails['職業'].push(`${level}`) 32 | } 33 | dataDetails['バフ・デバフ'] = defaultPalette.parameters.map((param)=>{ 34 | for (const name of SET.classNames){ 35 | if(name === param.label){ return `` } 36 | } 37 | if(param.label.match(/^(冒険者レベル|体力点|魂魄点|技量点|知力点|集中度|持久度|反射度)$/)){ return `` } 38 | 39 | if(param.value.match(/[^0-9]/) || param.value === ''){ return ` ${param.value}`; } 40 | else { return ` ${param.value < 10 ? 10 : param.value}`; } 41 | }); 42 | 43 | return dataDetails 44 | }; -------------------------------------------------------------------------------- /_core/skin/kiz/css/list.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer system { 4 | /* // Body 5 | ---------------------------------------------------------------------------------------------------- */ 6 | body { 7 | background-image: url(../../_common/img/back-pattern.png), url(../img/back-kiz.png); 8 | background-blend-mode: normal, normal; 9 | .night & { 10 | background-blend-mode: hard-light, hard-light; 11 | } 12 | @media screen and (width <= 735px){ 13 | background-size: auto, 100%; 14 | } 15 | } 16 | /* // List 17 | ---------------------------------------------------------------------------------------------------- */ 18 | .list table tr { 19 | grid-template-columns: 26rem 0.7fr 0.7fr minmax(6.5em, 0.7fr) 1fr 0.6fr; 20 | grid-template-areas: 21 | "NAME PL GEN TYPE BLNG DATE" 22 | "NAME PL AGE NGI KIZ DATE" 23 | "NAME TAGS TAGS TAGS TAGS DATE" 24 | ; 25 | @media screen and (width <= 735px){ 26 | grid-template-columns: 18rem 6em 7em 0.7fr 1fr 4em; 27 | } 28 | .name { grid-area: NAME; } 29 | .player { grid-area: PL; } 30 | .race { grid-area: RACE; } 31 | .gender { grid-area: GEN; } 32 | .age { grid-area: AGE; } 33 | .type { grid-area: TYPE; } 34 | .negai { grid-area: NGI; } 35 | .belong { grid-area: BLNG; } 36 | .kizuna { grid-area: KIZ; } 37 | .tags { grid-area: TAGS; } 38 | .date { grid-area: DATE; } 39 | } 40 | 41 | 42 | /* // List-Simple 43 | ---------------------------------------------------------------------------------------------------- */ 44 | .list ul li a::before { 45 | content: attr(data-type); 46 | } 47 | 48 | 49 | /* ////////// LayerEnd ////////// */ 50 | } -------------------------------------------------------------------------------- /_core/skin/kiz/img/back-kiz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/kiz/img/back-kiz.png -------------------------------------------------------------------------------- /_core/skin/kiz/img/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/kiz/img/default.png -------------------------------------------------------------------------------- /_core/skin/kiz/img/hibi-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/kiz/img/hibi-w.png -------------------------------------------------------------------------------- /_core/skin/kiz/img/hibi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/kiz/img/hibi.png -------------------------------------------------------------------------------- /_core/skin/kiz/img/hibiware-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/kiz/img/hibiware-w.png -------------------------------------------------------------------------------- /_core/skin/kiz/img/hibiware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/kiz/img/hibiware.png -------------------------------------------------------------------------------- /_core/skin/kiz/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <TMPL_VAR title> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |

27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 |
43 |

44 |

45 |
46 |
47 |
48 | 49 | 50 |
51 | 52 | 58 | 59 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /_core/skin/kiz/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | output.consts = {}; 5 | 6 | output.consts.dicebot = 'KizunaBullet'; 7 | 8 | output.consts.KIZUNA_COLUMNS = { 9 | num: '', 10 | name: '物・人・場所など', 11 | note: '感情・思い出など', 12 | hibi: 'ヒビ', 13 | ware: 'ワレ' 14 | }; 15 | 16 | output.consts.KIZUATO_COLUMNS = { 17 | name: '名称', 18 | type: '', 19 | timing: 'タイミング', 20 | target: '対象', 21 | cost: 'ヒトガラ・代償', 22 | limited: '制限', 23 | note: '解説', 24 | }; -------------------------------------------------------------------------------- /_core/skin/kiz/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfKizunaBulletPC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += json.characterNameRuby ? '('+json.characterNameRuby+')\n' :''; 11 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 12 | character.memo += `${json.class || ''} / ${json.negaiOutside || ''} / ${json.negaiInside || ''}\n`; 13 | character.memo += `\n`; 14 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}`; 15 | 16 | character.params = character.params.concat(defaultPalette.parameters || []); 17 | 18 | return character; 19 | }; 20 | -------------------------------------------------------------------------------- /_core/skin/kiz/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateUdonariumXmlDetailOfKizunaBulletPC = (json, opt_url, defaultPalette, resources)=>{ 6 | const dataDetails = {'リソース':resources}; 7 | 8 | const typeH = json.class === 'ハウンド' ? 1 : 0; 9 | 10 | dataDetails['情報'] = [ 11 | ` ${json.playerName || '?'}`, 12 | ` ${json.class || ''}`, 13 | ` ${json.negaiOutside || ''}`, 14 | ` ${json.negaiInside || ''}`, 15 | ` ${json.age || ''}`, 16 | ` ${json.gender || ''}`, 17 | ` ${json.past || ''}`, 18 | ` ${json.background || ''}`, 19 | ` ${json.appearance || ''}`, 20 | ` ${json.dwelling || ''}`, 21 | ` ${json.like || ''}`, 22 | ` ${json.dislike || ''}`, 23 | ` ${json.good || ''}`, 24 | ` ${json.notgood || ''}`, 25 | ` ${json.missing || ''}`, 26 | ` ${json.sideeffect || ''}`, 27 | ` ${json.resolution || ''}`, 28 | ` ${json.belong || ''}`, 29 | ` ${json.weapon || ''}`, 30 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 31 | ]; 32 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 33 | 34 | return dataDetails 35 | }; -------------------------------------------------------------------------------- /_core/skin/ms/css/list.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer system { 4 | /* // Body 5 | ---------------------------------------------------------------------------------------------------- */ 6 | body { 7 | background-image: url(../../_common/img/back-pattern.png), url(../img/back-scramble.png); 8 | background-blend-mode: normal, normal; 9 | background-position: center, bottom -100px right -20px; 10 | .night & { 11 | background-blend-mode: hard-light, hard-light; 12 | } 13 | @media screen and (width <= 735px){ 14 | background-size: auto, 100%; 15 | background-position: center, bottom 50px right 0px; 16 | } 17 | } 18 | /* // List 19 | ---------------------------------------------------------------------------------------------------- */ 20 | .list table tr { 21 | grid-template-columns: 26rem 0.6fr 4em minmax(6.5em, 1.1fr) 1.1fr 0.5fr; 22 | @media screen and (width <= 735px){ 23 | grid-template-columns: 18rem 6em 4em 0.7fr 1fr 4em; 24 | } 25 | grid-template-areas: 26 | "NAME PL LVL TAXA HOME DATE" 27 | "NAME PL ORGN CLAN ADRS DATE" 28 | "NAME TAGS TAGS TAGS TAGS DATE" 29 | ; 30 | .name { grid-area: NAME; } 31 | .player { grid-area: PL; } 32 | .level { grid-area: LVL; } 33 | .taxa { grid-area: TAXA; } 34 | .home { grid-area: HOME; } 35 | .origin { grid-area: ORGN; } 36 | .clan { grid-area: CLAN; } 37 | .address { grid-area: ADRS; } 38 | .tags { grid-area: TAGS; } 39 | .date { grid-area: DATE; } 40 | } 41 | .list.clan table tr { 42 | grid-template-areas: 43 | "NAME PL LVL BASE RULE DATE" 44 | "NAME PL LVL BLNG RULE DATE" 45 | "NAME TAGS TAGS TAGS TAGS DATE" 46 | ; 47 | .base { grid-area: BASE; } 48 | .belong { grid-area: BLNG; } 49 | .rule { grid-area: RULE; } 50 | } 51 | 52 | .list table td { 53 | &:is(.taxa, .home, .origin, .clan, .address, .base, .belong, .rule) > span { 54 | overflow: hidden; 55 | display: -webkit-box; 56 | -webkit-box-orient: vertical; 57 | -webkit-line-clamp: 2; 58 | line-height: 1.1; 59 | } 60 | &.rule { 61 | font-size: 90%; 62 | text-align: left; 63 | } 64 | &.rule span { 65 | line-height: 1.2; 66 | -webkit-line-clamp: 3; 67 | } 68 | } 69 | 70 | /* // List-Simple 71 | ---------------------------------------------------------------------------------------------------- */ 72 | .list ul li a::before { 73 | content: attr(data-type); 74 | } 75 | 76 | 77 | /* ////////// LayerEnd ////////// */ 78 | } -------------------------------------------------------------------------------- /_core/skin/ms/img/back-scramble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/ms/img/back-scramble.png -------------------------------------------------------------------------------- /_core/skin/ms/img/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/ms/img/default.png -------------------------------------------------------------------------------- /_core/skin/ms/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | output.consts = output.consts || {}; 5 | 6 | output.consts.dicebot = 'MamonoScramble'; 7 | 8 | output.MAGI_COLUMNS = { 9 | name: '名称', 10 | timing: 'タイミング', 11 | target: '対象', 12 | cond: '条件', 13 | note: '解説', 14 | }; -------------------------------------------------------------------------------- /_core/skin/ms/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfMamonoScramblePC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += json.characterNameRuby ? '('+json.characterNameRuby+')\n' :''; 11 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 12 | character.memo += `分類名: ${json.taxa || ''} / 出身: ${json.home || ''} / 根源: ${json.origin || ''}\n`; 13 | character.memo += `クランへの感情: ${json.clanEmotion || ''} / 住所: ${json.address || ''}\n`; 14 | character.memo += `\n`; 15 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}`; 16 | 17 | character.params = character.params.concat(defaultPalette.parameters || []); 18 | 19 | 20 | return character; 21 | }; 22 | 23 | 24 | -------------------------------------------------------------------------------- /_core/skin/ms/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateUdonariumXmlDetailOfMamonoScramblePC = (json, opt_url, defaultPalette, resources)=>{ 6 | const dataDetails = {'リソース':resources}; 7 | 8 | dataDetails['能力値'] = [ 9 | ` ${json.statusPhysical || ''}`, 10 | ` ${json.statusSpecial || ''}`, 11 | ` ${json.statusSocial || ''}`, 12 | ] 13 | dataDetails['情報'] = [ 14 | ` ${json.playerName || '?'}`, 15 | ` ${json.taxa || ''}`, 16 | ` ${json.home || ''}`, 17 | ` ${json.origin || ''}`, 18 | ` ${json.clan || ''}`, 19 | ` ${json.clanEmotion || ''}`, 20 | ` ${json.address || ''}`, 21 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 22 | ]; 23 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 24 | 25 | return dataDetails 26 | }; -------------------------------------------------------------------------------- /_core/skin/sw2/css/icons.css: -------------------------------------------------------------------------------- 1 | 2 | .s-icon { 3 | &.passive::before { 4 | content: "\ef4a"; 5 | } 6 | &.setup::before { 7 | content: "\e86b"; 8 | } 9 | &.major::before { 10 | content: "\e037"; 11 | font-variation-settings: 'FILL' 1; 12 | transform: scale(1.2) translateX(-.08em); 13 | } 14 | &.minor::before { 15 | content:"\e01f"; 16 | font-variation-settings: 'FILL' 1; 17 | transform: scaleY(1.3); 18 | } 19 | &.active::before { 20 | content: "\e625"; 21 | transform: scale(-0.95, 1) translate(.05em, 0.08em); 22 | } 23 | &.uplift::before { 24 | content: "\eba6"; 25 | transform: rotate(90deg) scaleX(1.2); 26 | text-shadow: 0 0 0 var(--text-color), 0 0 0 var(--text-color); 27 | } 28 | &.calm::before { 29 | content: "\ebab"; 30 | transform: rotate(90deg) scaleX(1.2); 31 | text-shadow: 0 0 0 var(--text-color), 0 0 0 var(--text-color); 32 | } 33 | &.heart::before { 34 | content: "\e87d"; 35 | } 36 | &.major0::before { 37 | content: "〆"; 38 | font-family: inherit; 39 | } 40 | &.minor0::before { 41 | content: "\e838"; 42 | } 43 | &.active0::before { 44 | content: "\e834"; 45 | } 46 | &.condition::before { 47 | content: "▽"; 48 | font-family: inherit; 49 | text-shadow: 0 0 0 var(--text-color); 50 | } 51 | &.selection::before { 52 | content: "▼"; 53 | font-family: inherit; 54 | text-shadow: 0 0 0 var(--text-color); 55 | } 56 | 57 | &.m-card { 58 | &[data-color="赤"]::before { content:'\e91d'; color: #a00; font-variation-settings: 'FILL' 1; } 59 | &[data-color="緑"]::before { content:'\e123'; color: #0c3; font-variation-settings: 'FILL' 1; } 60 | &[data-color="黒"]::before { content:'\ead5'; color: #777; font-variation-settings: 'FILL' 1; } 61 | &[data-color="白"]::before { content:'\e87d'; color: #aaa; font-variation-settings: 'FILL' 0; } 62 | &[data-color="金"]::before { content:'\e3e4'; color: #f90; font-variation-settings: 'FILL' 1; } 63 | .night &[data-color="白"]::before { color: #bbb; font-variation-settings: 'FILL' 1; } 64 | } 65 | } -------------------------------------------------------------------------------- /_core/skin/sw2/img/back-first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/sw2/img/back-first.png -------------------------------------------------------------------------------- /_core/skin/sw2/img/default_enemy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/sw2/img/default_enemy.png -------------------------------------------------------------------------------- /_core/skin/sw2/img/default_pc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/sw2/img/default_pc.png -------------------------------------------------------------------------------- /_core/skin/sw2/img/wp_blow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/sw2/img/wp_blow.png -------------------------------------------------------------------------------- /_core/skin/sw2/img/wp_edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/sw2/img/wp_edge.png -------------------------------------------------------------------------------- /_core/skin/sw2/img/wp_magic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/sw2/img/wp_magic.png -------------------------------------------------------------------------------- /_core/skin/sw2/img/wp_school.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/sw2/img/wp_school.png -------------------------------------------------------------------------------- /_core/skin/sw2/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | /* MIT License 2 | 3 | Copyright 2020 @Shunshun94 4 | 5 | Customize & Refactoring by @yutorize 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | */ 25 | "use strict"; 26 | 27 | var output = output || {}; 28 | output.consts = output.consts || {}; 29 | 30 | output.consts.dicebot = 'SwordWorld2.5'; 31 | 32 | output.consts.card = {}; 33 | output.consts.card.color = { 34 | 'Red': '赤', 35 | 'Gre': '緑', 36 | 'Bla': '黒', 37 | 'Whi': '白', 38 | 'Gol': '金' 39 | }; 40 | output.consts.card.rank = ['B', 'A', 'S', 'SS']; 41 | output.consts.accessory = {}; 42 | output.consts.accessory.part = { 43 | Head:' 頭 ', 44 | Face:' 顔 ', 45 | Ear:' 耳 ', 46 | Neck:' 首 ', 47 | Back:'背中', 48 | HandR:'右手', 49 | HandL:'左手', 50 | Waist:' 腰 ', 51 | Leg:' 足 ', 52 | Other:' 他 ', 53 | Other2:' 他 ', 54 | Other3:' 他 ', 55 | Other4:' 他 ', 56 | }; 57 | 58 | output.consts.PC_ARMORS_COLUMNS = { 59 | type: '', 60 | name: '名前', 61 | reqd: '必筋', 62 | dodge: '回避力', 63 | defense: '防護点', 64 | note: 'メモ' 65 | }; 66 | 67 | output.consts.PC_WEAPONS_COLUMNS = { 68 | name: '名前', 69 | usage: '用法', 70 | reqd: '必筋', 71 | acc: '命中修正', 72 | accTotal: '命中', 73 | rate: '威力', 74 | crit: 'C値', 75 | dmg: 'ダメ修正', 76 | dmgTotal: '追加ダメ', 77 | note: 'メモ' 78 | }; 79 | 80 | output.consts.ENEMY_STATUS_COLUMNS = { 81 | name: '攻撃方法', 82 | hit: ' 命中力 ', 83 | damage: ' 打撃点 ', 84 | dodge: ' 回避力 ', 85 | defense: ' 防護点 ', 86 | hp: ' HP ', 87 | mp: ' MP ' 88 | }; -------------------------------------------------------------------------------- /_core/skin/sw2/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfSwordWorld2PC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName || json.aka; 7 | 8 | character.memo = ''; 9 | character.memo += json.characterName && json.aka ? `“${json.aka}”` : ''; 10 | character.memo += json.characterName && json.aka && json.akaRuby ? ` (${json.akaRuby})` : ''; 11 | character.memo += json.namePlate?json.characterName+"\n":''; 12 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 13 | character.memo += `${json.race||'種族不明'}/${json.gender||'性別不明'}/${json.age||'年齢不明'}\n`; 14 | character.memo += `穢れ: ${json.sin || 0} `; 15 | character.memo += `信仰: ${json.faith || '―'}\n`; 16 | character.memo += `ランク: ${json.rank || '―'}\n`; 17 | character.memo += `\n`; 18 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}`; 19 | 20 | const originalParams = character.params; 21 | character.params = defaultPalette.parameters; 22 | character.params = character.params.filter(data => !/^(威力|C値|防護)[0-9]$/.test(data.label)); 23 | character.params = character.params.filter(data => !/^最大[MH]P$/.test(data.label)); 24 | if(!json.lvCaster){ 25 | character.params = character.params.filter(data => !/^(魔力修正|行使修正|魔法C|魔法D修正)$/.test(data.label)); 26 | } 27 | character.params = originalParams.concat(character.params); 28 | 29 | return character; 30 | }; 31 | 32 | output.generateCcfoliaJsonOfSwordWorld2Enemy = (json, character, defaultPalette) => { 33 | character.name = json.namePlate || json.characterName || json.monsterName; 34 | 35 | character.memo = ''; 36 | character.memo += json.namePlate?(json.characterName||json.monsterName)+"\n":''; 37 | character.memo += json.characterName?"("+json.monsterName+")\n":''; 38 | character.memo += json.sheetDescriptionM || ''; 39 | 40 | character.params = character.params.concat(defaultPalette.parameters); 41 | 42 | return character; 43 | }; 44 | 45 | -------------------------------------------------------------------------------- /_core/skin/sw2/list-arts.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | 魔法・神格・流派一覧 4 | 5 | :名称「」を含む 6 | :タグ「 7 | :小分類「 8 | さん 9 | 10 |

11 | 23 | 24 | 25 |
26 |

()

27 | 28 | 29 | 30 | 31 | 39 | class="hide"> 40 | 46 |
名称 32 | 製作者 33 | 大分類 34 | 小分類 35 | 概要 36 | 更新日時 37 | 38 |
41 | 42 | 43 | 44 | 45 |
47 | 48 |
49 | 50 |

>>MORE

51 |
52 |
53 |
54 |
    55 |
  • 56 |
57 |
58 |
59 |
60 | -------------------------------------------------------------------------------- /_core/skin/sw2/list-item.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | アイテム一覧 4 | 5 | :名称「」を含む 6 | :タグ「 7 | :カテゴリ「 8 | :製作時期「 9 | さん 10 | 11 |

12 | 24 | 25 | 26 |
27 |

()

28 | 29 | 30 | 31 | 32 | 39 | class="hide"> 40 | 46 |
名称 33 | 製作者 34 | カテゴリ 35 | 価格 36 | 概要 37 | 更新日時 38 |
41 | 42 | 43 | 44 | 45 |
47 | 48 |
49 | 50 |

>>MORE

51 |
52 |
53 |
54 |
    55 |
  • 56 |
57 |
58 |
59 |
60 | -------------------------------------------------------------------------------- /_core/skin/vc/css/list.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @layer system { 4 | /* // Body 5 | ---------------------------------------------------------------------------------------------------- */ 6 | body { 7 | background-image: url(../../_common/img/back-pattern.png), url(../img/back-circle.png); 8 | background-blend-mode: normal, normal; 9 | background-position: center, bottom -80px right -50px; 10 | .night & { 11 | background-blend-mode: hard-light, normal; 12 | } 13 | @media screen and (width <= 735px){ 14 | background-size: auto, 100%; 15 | background-position-x: 0, 15vw; 16 | } 17 | } 18 | /* // List 19 | ---------------------------------------------------------------------------------------------------- */ 20 | .list table tr { 21 | grid-template-columns: 26rem 0.7fr 1fr 4em 1.9fr 0.7fr; 22 | grid-template-areas: 23 | "NAME PL RACE RACE STYL DATE" 24 | "NAME PL CLS LVL PRF DATE" 25 | "NAME TAGS TAGS TAGS TAGS DATE" 26 | ; 27 | @media screen and (width <= 735px){ 28 | grid-template-columns: 18rem 6em 1fr 3.2em 1.9fr 3.5em; 29 | grid-template-areas: 30 | "NAME PL RACE RACE STYL DATE" 31 | "NAME PL CLS LVL PRF DATE" 32 | ; 33 | } 34 | .name { grid-area: NAME; } 35 | .player { grid-area: PL; } 36 | .race { grid-area: RACE; } 37 | .class { grid-area: CLS; } 38 | .styles { grid-area: STYL; } 39 | .lv { grid-area: LVL; } 40 | .profile{ grid-area: PRF; } 41 | .tags { grid-area: TAGS; } 42 | .date { grid-area: DATE; } 43 | 44 | & .name { 45 | position: relative; 46 | } 47 | & td.lv { 48 | font-size: 1.15em; 49 | line-height: 1; 50 | } 51 | @media screen and (width <= 735px){ 52 | .geis { display: none; } 53 | } 54 | } 55 | 56 | /* // List-Simple/Monster 57 | ---------------------------------------------------------------------------------------------------- */ 58 | .list ul li a::before { 59 | content: 'Lv'attr(data-lv); 60 | } 61 | 62 | 63 | /* ////////// LayerEnd ////////// */ 64 | } -------------------------------------------------------------------------------- /_core/skin/vc/img/back-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/vc/img/back-circle.png -------------------------------------------------------------------------------- /_core/skin/vc/img/default_pc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/_core/skin/vc/img/default_pc.png -------------------------------------------------------------------------------- /_core/skin/vc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <TMPL_VAR title> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |

27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 |
43 |

44 |

45 |
46 |
47 |
48 | 49 | 50 |
51 | 52 | 58 | 59 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /_core/skin/vc/js/lib/ytsheetConsts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | output.consts = output.consts || {}; 5 | 6 | output.consts.dicebot = 'VisionConnect'; 7 | 8 | output.consts.GOODS_COLUMNS = { 9 | name : '名称', 10 | type : '種別', 11 | note : '効果', 12 | }; 13 | 14 | output.consts.ITEMS_COLUMNS = { 15 | name : '名称', 16 | type : '種別', 17 | lv : 'レベル', 18 | note : '効果', 19 | }; 20 | 21 | output.consts.BATTLE_COLUMNS = { 22 | name : '名称', 23 | acc : '命中', 24 | spl : '詠唱', 25 | eva : '回避', 26 | atk : '攻撃', 27 | det : '意志', 28 | def : '物防', 29 | mdf : '魔防', 30 | ini : '行動', 31 | str : '耐久', 32 | }; 33 | 34 | output.consts.VC_PARAMS = [ 35 | { name: 'バイタリティ', value: 'vitality' }, 36 | { name: 'テクニック' , value: 'technic' }, 37 | { name: 'クレバー' , value: 'clever' }, 38 | { name: 'カリスマ' , value: 'carisma' }, 39 | { name: '命中値', value: 'battleTotalAcc' }, 40 | { name: '詠唱値', value: 'battleTotalSpl' }, 41 | { name: '回避値', value: 'battleTotalEva' }, 42 | { name: '攻撃値', value: 'battleTotalAtk' }, 43 | { name: '意志値', value: 'battleTotalDet' }, 44 | { name: '物防値', value: 'battleTotalDef' }, 45 | { name: '魔防値', value: 'battleTotalMdf' }, 46 | { name: '行動値', value: 'battleTotalIni' }, 47 | { name: '耐久値', value: 'battleTotalStr' }, 48 | ]; -------------------------------------------------------------------------------- /_core/skin/vc/js/lib/ytsheetToCcfolia.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateCcfoliaJsonOfVisionConnectPC = (json, character, defaultPalette) => { 6 | character.name = json.namePlate || json.characterName; 7 | 8 | character.memo = ''; 9 | character.memo += json.namePlate?json.characterName+"\n":''; 10 | character.memo += `PL: ${json.playerName || 'PL情報無し'}\n`; 11 | character.memo += `${json.age || ''} / ${json.gender || ''} / ${json.race || ''}\n`; 12 | character.memo += `${json.classMain || ''}${json.classSupport ? ' / '+json.classSupport : ''}${json.classTitle ? ' / '+json.classTitle : ''}\n`; 13 | character.memo += `\n`; 14 | character.memo += `${json.imageURL ? '立ち絵: ' + (json.imageCopyright || '権利情報なし') : ''}\n`; 15 | 16 | let addedParam = {}; 17 | output.consts.VC_PARAMS.forEach((s)=>{ 18 | character.params.push({ 19 | label: s.name, value: json[s.value] || 0 20 | }); 21 | addedParam[s.name] = 1; 22 | }); 23 | 24 | defaultPalette.parameters.forEach(s => { 25 | if(addedParam[s.label]){ return ''; } 26 | character.params.push(s); 27 | }); 28 | 29 | return character; 30 | }; 31 | -------------------------------------------------------------------------------- /_core/skin/vc/js/lib/ytsheetToUdonarium.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var output = output || {}; 4 | 5 | output.generateUdonariumXmlDetailOfVisionConnectPC = (json, opt_url, defaultPalette, resources)=>{ 6 | const dataDetails = {'リソース':resources}; 7 | 8 | dataDetails['情報'] = [ 9 | ` ${json.playerName || '?'}`, 10 | ` ${json.race || ''}`, 11 | ` ${json.class || ''}`, 12 | ` ${json.style1 || ''}`, 13 | ` ${json.style2 || ''}`, 14 | ` ${json.age || ''}`, 15 | ` ${json.gender || ''}`, 16 | ` ${json.eye || ''}`, 17 | ` ${json.skin || ''}`, 18 | ` ${json.hair || ''}`, 19 | ` ${json.height || ''}`, 20 | ` ${(json.freeNote || '').replace(/<br>/g, '\n')}` 21 | ]; 22 | if(opt_url) { dataDetails['情報'].push(` ${opt_url}`);} 23 | 24 | let addedParam = {}; 25 | dataDetails['能力値・戦闘値'] = []; 26 | for(let data of output.consts.VC_PARAMS){ 27 | dataDetails['能力値・戦闘値'].push(` ${json[data.value] || 0}`); 28 | addedParam[data.name] = 1; 29 | } 30 | 31 | dataDetails['その他のパラメータ'] = defaultPalette.parameters.map((param)=>{ 32 | if(addedParam[param.label]){ return `` } 33 | return ` ${param.value < 10 ? 10 : param.value}`; 34 | }); 35 | 36 | 37 | return dataDetails 38 | }; 39 | -------------------------------------------------------------------------------- /ar2e/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for AR2E'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | our $make_exp = 0; # 初期成長点 51 | our $make_money = 500; # 初期所持金 52 | our $make_fix = 0; # 初期値を固定にする(PLが変更出来ないようにする)=1 しない=0 53 | 54 | ## ●ログイン関係ファイル 55 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 56 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 57 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 58 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 59 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 60 | 61 | 62 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 63 | 64 | 1; -------------------------------------------------------------------------------- /ar2e/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/ar2e/data/index.html -------------------------------------------------------------------------------- /ar2e/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for AR2E ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/ar2e/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/ar2e/subroutine-ar2e.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /ar2e/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/ar2e/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /blp/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for BLP'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | our $make_endurance = 0; 51 | our $make_initiative = 0; 52 | 53 | ## ●ログイン関係ファイル 54 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 55 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 56 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 57 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 58 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 59 | 60 | 61 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 62 | 63 | 1; -------------------------------------------------------------------------------- /blp/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/blp/data/index.html -------------------------------------------------------------------------------- /blp/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for BLP ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/blp/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/blp/subroutine-sub.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /blp/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/blp/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /dx3rd/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for DX3rd'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | our $make_exp = 130; # 初期経験点 51 | our $make_fix = 0; # 初期値を固定にする(PLが変更出来ないようにする)=1 しない=0 52 | 53 | # コンバートしたいゆとシートⅠの '絶対URL' => 'ゆとシートⅡからの相対パス', 54 | our %convert_url = ( 55 | ); 56 | 57 | ## ●ログイン関係ファイル 58 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 59 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 60 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 61 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 62 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 63 | 64 | 65 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 66 | 67 | 1; -------------------------------------------------------------------------------- /dx3rd/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/dx3rd/data/index.html -------------------------------------------------------------------------------- /dx3rd/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for DX3rd ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/dx3/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/dx3/subroutine-dx3.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /dx3rd/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/dx3/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /gc/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for GC'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●保存時の送信モード 50 | # Base64にして送信するかどうか 51 | #(ロリポップなどでファイアウォールに引っ掛かる場合、「1」(=ON)にする) 52 | our $base64mode = 0; 53 | 54 | ## ●ログイン関係ファイル 55 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 56 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除してください)。 57 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 58 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 59 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 60 | 61 | 62 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 63 | 64 | 1; -------------------------------------------------------------------------------- /gc/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/gc/data/index.html -------------------------------------------------------------------------------- /gc/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for GC ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/gc/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/gc/subroutine-sub.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /gc/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/gc/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /gs/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for GS'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | our $make_exp = 3000; # 初期経験点 51 | our $make_adp = 0; # 追加成長点 52 | our $make_money = 100; # 初期所持金 53 | our $make_adventures = 0; # 冒険回数 54 | our $make_completed = 0; # 達成数 55 | our $make_fix = 0; # 初期値を固定にする(PLが変更出来ないようにする)=1 しない=0 56 | 57 | ## ●保存時の送信モード 58 | # Base64にして送信するかどうか 59 | #(ロリポップなどでファイアウォールに引っ掛かる場合、「1」(=ON)にする) 60 | our $base64mode = 0; 61 | 62 | ## ●ログイン関係ファイル 63 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 64 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 65 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 66 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 67 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 68 | 69 | 70 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 71 | 72 | 1; -------------------------------------------------------------------------------- /gs/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/gs/data/index.html -------------------------------------------------------------------------------- /gs/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for GS ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/gs/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/gs/subroutine-sub.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /gs/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/gs/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /kiz/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for KIZ'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | our $make_endurance = 0; 51 | our $make_initiative = 0; 52 | 53 | ## ●ログイン関係ファイル 54 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 55 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 56 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 57 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 58 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 59 | 60 | 61 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 62 | 63 | 1; -------------------------------------------------------------------------------- /kiz/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/kiz/data/index.html -------------------------------------------------------------------------------- /kiz/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for KIZ ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/kiz/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/kiz/subroutine-sub.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /kiz/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/kiz/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /ms/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for MS'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●保存時の送信モード 50 | # Base64にして送信するかどうか 51 | #(ロリポップなどでファイアウォールに引っ掛かる場合、「1」(=ON)にする) 52 | our $base64mode = 0; 53 | 54 | ## ●ログイン関係ファイル 55 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 56 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 57 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 58 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 59 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 60 | 61 | 62 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 63 | 64 | 1; -------------------------------------------------------------------------------- /ms/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for MS ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/ms/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/ms/subroutine-sub.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /ms/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/ms/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /sw2.0/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for SW2.0'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | our $make_exp = 3000; # 初期経験点 51 | our $make_money = 1200; # 初期所持金 52 | our $make_honor = 0; # 初期名誉点 53 | our $make_fix = 0; # 初期値を固定にする(PLが変更出来ないようにする)=1 しない=0 54 | 55 | ## ●2.0要素の表示設定 (ON=1) 56 | # 全ての技能を表示 57 | our $all_class_on = 1; 58 | 59 | ## ● コンバートしたいゆとシートⅠの '絶対URL' => 'ゆとシートⅡからの相対パス', 60 | our %convert_url = ( 61 | ); 62 | 63 | ## ●ログイン関係ファイル 64 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 65 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 66 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 67 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 68 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 69 | 70 | 71 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 72 | 73 | 1; -------------------------------------------------------------------------------- /sw2.0/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/sw2.0/data/index.html -------------------------------------------------------------------------------- /sw2.0/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for SW2.0 ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $SW2_0 = 1; 18 | our $core_dir = '../_core'; 19 | use lib '../_core/module'; 20 | 21 | require $core_dir.'/lib/sw2.0/config-default.pl'; 22 | require './config.cgi'; 23 | require $core_dir.'/lib/subroutine.pl'; 24 | require $core_dir.'/lib/sw2/subroutine-sw2.pl'; 25 | 26 | require $core_dir.'/lib/junction.pl'; 27 | 28 | exit; -------------------------------------------------------------------------------- /sw2.0/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/sw2/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /sw2.5/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for SW2.5'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | our $make_exp = 3000; # 初期経験点 51 | our $make_money = 1200; # 初期所持金 52 | our $make_honor = 0; # 初期名誉点 53 | our $make_fix = 0; # 初期値を固定にする(PLが変更出来ないようにする)=1 しない=0 54 | 55 | ## ●2.5未実装要素の表示設定 (ON=1) 56 | # 全ての技能を表示 57 | our $all_class_on = 1; 58 | # 秘伝 59 | our $mystic_arts_on = 1; 60 | 61 | 62 | ## ●ログイン関係ファイル 63 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 64 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 65 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 66 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 67 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 68 | 69 | 70 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 71 | 72 | 1; -------------------------------------------------------------------------------- /sw2.5/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/sw2.5/data/index.html -------------------------------------------------------------------------------- /sw2.5/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for SW2.5 ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/sw2/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/sw2/subroutine-sw2.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /sw2.5/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/sw2/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /vc/config.cgi.default: -------------------------------------------------------------------------------- 1 | #################### 基本設定 #################### 2 | use strict; 3 | use utf8; 4 | 5 | package set; 6 | 7 | ## ●管理ユーザーID 8 | # 指定したIDは全シートの閲覧と編集ができます。 9 | our $masterid = ''; 10 | 11 | ## ●登録キー 12 | # 新規登録をする際に必要な文字列。空欄なら誰でも登録可能。荒らし対策。 13 | our $registerkey = ''; 14 | 15 | ## ●タイトル 16 | # ページ左上のタイトル 17 | our $title = 'ゆとシートⅡ for VC'; 18 | 19 | ## ●画像関係 20 | # キャラクター画像のファイルサイズ上限(単位byte) 21 | our $image_maxsize = 1024 * 1024 * 1; 22 | 23 | ## ●削除関係 24 | # データを削除するとき、バックアップも削除 する=1 しない=0 25 | our $del_back = 0; 26 | 27 | ## ●グループ設定 28 | # ["ID", "ソート順(空欄で非表示)", "分類名", "分類の説明文"], 29 | # 選択時はここで書いた順番、キャラ一覧(グループ別)ではソート順で数字が小さい方から表示されます 30 | # 増減OK 31 | our @groups = ( 32 | ["pc", "01", "PC", "プレイヤーキャラクター"], 33 | ["npc", "99", "NPC", "ノンプレイヤーキャラクター"], 34 | 35 | # ["A", "01", "キャンペーン「A」", "GM:○○"], 36 | # ["B", "02", "キャンペーン「B」", "GM:××"], 37 | # ["", "", "", ""], 38 | ); 39 | 40 | # デフォルトのグループID 41 | our $group_default = 'pc'; 42 | 43 | # トップページのキャラクター最大表示数(1グループあたり/無制限=0) 44 | our $list_maxline = 0; 45 | 46 | # グループ個別表示時や検索結果表示時の1ページあたりの最大表示数(0で全部表示) 47 | our $pagemax = 0; 48 | 49 | ## ●キャラクターシートの各種初期値 50 | 51 | ## ●ログイン関係ファイル 52 | # ユーザー情報・ログイン状態はデフォルトでは別システム(別ディレクトリ)でも共通です。 53 | # ユーザー情報・ログイン状態を別にしたい場合、以下の設定にしてください(コメントアウト#を解除ください)。 54 | # our $userfile = './data/users.cgi'; # ユーザー一覧ファイル 55 | # our $login_users = './data/login_users.cgi'; # ログイン情報保存ファイル 56 | # our $tokenfile = './data/token.cgi'; # 一時トークン保存ファイル 57 | 58 | 59 | ## 上記以外の設定は lib/config-default.pl を参照してください。 ## 60 | 61 | 1; -------------------------------------------------------------------------------- /vc/data/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yutorize/ytsheet2/28d369527f5bc0963e28c37724a958cb2e41d062/vc/data/index.html -------------------------------------------------------------------------------- /vc/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | #################################### 3 | ## ゆとシートⅡ for VC ## 4 | ## by ゆとらいず工房 ## 5 | ## https://yutorize.2-d.jp ## 6 | #################################### 7 | use strict; 8 | #use warnings; 9 | use utf8; 10 | use open ":utf8"; 11 | binmode STDOUT, ':utf8'; 12 | use CGI::Carp qw(fatalsToBrowser); 13 | use CGI qw/:all/; 14 | use Fcntl; 15 | 16 | ### 設定読込 ######################################################################################### 17 | our $core_dir = '../_core'; 18 | use lib '../_core/module'; 19 | 20 | require $core_dir.'/lib/vc/config-default.pl'; 21 | require './config.cgi'; 22 | require $core_dir.'/lib/subroutine.pl'; 23 | require $core_dir.'/lib/vc/subroutine-sub.pl'; 24 | 25 | require $core_dir.'/lib/junction.pl'; 26 | 27 | exit; -------------------------------------------------------------------------------- /vc/oauth.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use utf8; 5 | use CGI::Carp qw(fatalsToBrowser); 6 | use CGI qw/:all/; 7 | 8 | our $core_dir = '../_core'; 9 | use lib '../_core/module'; 10 | 11 | require $core_dir.'/lib/vc/config-default.pl'; 12 | require './config.cgi'; 13 | require $core_dir.'/lib/subroutine.pl'; 14 | require $core_dir.'/lib/oauth.pl'; 15 | 16 | print "Content-type: text/html\n"; 17 | 18 | my $token = &getAccessToken(param("code")); 19 | 20 | if ($token) { 21 | my @userinfo = &getUserInfo($token); 22 | 23 | if ( ($set::oauth_service eq 'Discord') && (@set::oauth_discord_login_servers) ) { 24 | if ( &isDiscordServerIncluded($token, @set::oauth_discord_login_servers) ) { 25 | # 指定したサーバに所属している 26 | } else { 27 | &error("サーバに所属していないため利用できません"); 28 | exit; 29 | } 30 | } 31 | 32 | if (! &isIdExist($userinfo[0]) ) { 33 | ®isterUser(@userinfo); 34 | } 35 | 36 | my $token = &generateToken(); 37 | print ®isterToken($userinfo[0], $token); 38 | print "Location: ./\n\n"; 39 | } else { 40 | &error("ログインに失敗しました。やり直してみてください"); 41 | } 42 | 43 | 44 | --------------------------------------------------------------------------------