├── 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 |
15 |
25 |
29 |
41 |
46 |
54 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 | 名称
32 | | 製作者
33 | | 大分類
34 | | 小分類
35 | | 概要
36 | | 更新日時
37 |
38 | |
39 | class="hide">
40 |
41 | |
42 |
43 |
44 |
45 | |
46 |
47 |
48 | | | | | |
49 |
50 | >>MORE
51 |
52 |
53 |
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 | 名称
33 | | 製作者
34 | | カテゴリ
35 | | 価格
36 | | 概要
37 | | 更新日時
38 | |
39 | class="hide">
40 |
41 | |
42 |
43 |
44 |
45 | |
46 |
47 |
48 | | | | | |
49 |
50 | >>MORE
51 |
52 |
53 |
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 |
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 |
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 |
--------------------------------------------------------------------------------