Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion _core/lib/junction.pl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
use utf8;
use Encode;

our $ver = "1.27.009";
our $ver = "1.27.010";

our %in;
for (param()){ $in{$_} = param($_); }
Expand Down
6 changes: 6 additions & 0 deletions _core/lib/sw2/calc-chara.pl
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,11 @@ sub data_calc {
$acc += $pc{"weapon${_}Acc"}; # 武器の修正値
## ダメージ
my $str = $pc{sttStr} + ($partNum ? $pc{sttPartC} : $pc{sttAddC}+$pc{sttEquipC});
if($pc{"weapon${_}Note"} =~ /[巨人化]/){ $str += 12; }
if ($pc{"weapon${_}Note"} =~ /〈レッサー・?アームスフィアⅠ〉/){ $str = 1; }
elsif($pc{"weapon${_}Note"} =~ /〈レッサー・?アームスフィアⅡ〉/){ $str = 5; }
elsif($pc{"weapon${_}Note"} =~ /〈レッサー・?アームスフィアⅢ〉/){ $str = 10; }
elsif($pc{"weapon${_}Note"} =~ /〈アームスフィア〉/){ $str = 20; }
my $dmg = 0;
$dmg = $pc{"weapon${_}Dmg"};
if ($category eq 'クロスボウ'){
Expand Down Expand Up @@ -634,6 +639,7 @@ sub data_calc {

## 基礎値
my $agi = $pc{sttAgi} + ($partNum ? $pc{sttPartB} : $pc{sttAddB}+$pc{sttEquipB});
if($pc{"defenseTotal${i}Note"} =~ /[巨人化]/){ $agi -= 6; }
my $eva = $data::class{$class}{evaUnlock}{mod};
my $def = 0;
## 部位(コア含)
Expand Down
2 changes: 1 addition & 1 deletion _core/lib/sw2/edit-chara-palette-option.pl
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ sub chatPaletteFormOptional {
foreach ('TMPL',1 .. $pc{chatPaletteInsertNum}){
$html .= '<template id="palette-insert-template">' if $_ eq 'TMPL';
$html .= "<li>"
. ::selectBox("chatPaletteInsert${_}Position", 'setChatPalette', 'def=|<先頭>','general|<非戦闘系の直後>','common|<一般技能の直後>','feats|<宣言特技の直後>','magic|<魔法系の直後>','attack|<武器攻撃系の直後>','defense|<抵抗回避の直後>')
. ::selectBox("chatPaletteInsert${_}Position", 'setChatPalette', 'def=|<先頭>','general|<非戦闘系の直後>','common|<一般技能の直後>','feats|<宣言特技の直後>','magic|<魔法系の直後>','attack_head|<武器攻撃系の先頭>','attack|<武器攻撃系の直後>','defense|<抵抗回避の直後>')
. "に挿入"
. "<textarea name=\"chatPaletteInsert${_}\" onchange=\"setChatPalette()\">$pc{'chatPaletteInsert'.$_}</textarea>";
$html .= '</template>' if $_ eq 'TMPL';
Expand Down
42 changes: 36 additions & 6 deletions _core/lib/sw2/edit-chara.js
Original file line number Diff line number Diff line change
Expand Up @@ -1548,6 +1548,7 @@ function calcAttack() {
document.getElementById(`attack-${SET.weapons[i][1]}-mastery`).style.display = feats['武器習熟/'+SET.weapons[i][0]] ? '' : 'none';
document.getElementById(`attack-${SET.weapons[i][1]}-mastery-dmg`).textContent = feats['武器習熟/'+SET.weapons[i][0]] || 0;
}
document.getElementById("giantize-annotate").style.display = raceAbilities.includes('巨人化') ? '' : 'none';
document.getElementById("attack-artisan-mastery").style.display = feats['魔器習熟'] ? '' : 'none';
document.getElementById("attack-artisan-mastery-dmg").textContent = feats['魔器習熟'] || 0 ;
document.getElementById("artisan-annotate").style.display = feats['魔器習熟'] ? '' : 'none';
Expand Down Expand Up @@ -1577,11 +1578,21 @@ function calcWeapon() {
let str = (partNum ? stt.Str+Number(form.sttPartC.value || 0) : stt.totalStr);
let accBase = 0;
let dmgBase = 0;
const giantize = note.match(/[巨人化]/) ? 12 : 0;
const constStr
= note.match(/〈レッサー・?アームスフィアⅠ〉/) ? 1
: note.match(/〈レッサー・?アームスフィアⅡ〉/) ? 5
: note.match(/〈レッサー・?アームスフィアⅢ〉/) ? 10
: note.match(/〈アームスフィア〉/) ? 20
: 0;
// 技能選択のエラーチェック
form["weapon"+i+"Class"].classList.toggle('error', errorAccClass[className] == true);
// 必筋チェック
const maxReqd
= SET.class[className]?.reqdHalf ? reqdStrHalf
= constStr ? constStr
: giantize && SET.class[className]?.reqdHalf ? Math.ceil((reqdStr+12) / 2)
: giantize ? (reqdStr+12)
: SET.class[className]?.reqdHalf ? reqdStrHalf
: /^\d+w$/i.test(weaponReqdRaw) ? reqdMnd
: SET.class[className]?.accUnlock?.reqd ? stt['total'+SET.class[className]?.accUnlock?.reqd]
: reqdStr;
Expand All @@ -1600,7 +1611,8 @@ function calcWeapon() {
else if(category === 'ガン') { dmgBase = magicPowers['Mag']; }
else if(SET.class[className]?.accUnlock?.dmg === 'power')
{ dmgBase = magicPowers[SET.class[className].id] }
else if(classLv) { dmgBase = classLv + parseInt(str / 6); }
else if(constStr) { dmgBase = classLv + parseInt(constStr / 6); }
else if(classLv) { dmgBase = classLv + parseInt((str + giantize) / 6); }

// 戦闘特技
if(!partNum || partNum == form.partCore.value) {
Expand Down Expand Up @@ -1746,19 +1758,23 @@ function calcArmour(evaAdd,defBase) {
const className = form['evasionClass'+i].value;
const partNum = form['evasionPart'+i].value;
const partName = form[`part${partNum}Name`]?.value || '';
const giantize = form[`defenseTotal${i}Note`].value.match(/[巨人化]/) ? -6 : 0;

// 技能選択のエラーチェック
form['evasionClass'+i].classList.toggle('error', errorEvaClass[className] == true);

// 最大必筋
const maxReqd = (SET.class[className]?.reqdHalf) ? reqdStrHalf : reqdStr;
const maxReqd
= (giantize && SET.class[className]?.reqdHalf) ? math((reqdStr+12) / 2)
: (giantize) ? (reqdStr+12)
: (SET.class[className]?.reqdHalf) ? reqdStrHalf : reqdStr;

// 計算
const classLv = lv[SET.class[className]?.id] || 0;

let eva = (SET.class[className]?.evaUnlock?.mod || 0);
let def = 0;
let agi = (partNum ? stt.Agi+Number(form.sttPartB.value || 0) : stt.totalAgi);
let agi = (partNum ? stt.Agi+Number(form.sttPartB.value || 0) : stt.totalAgi+giantize);
if(!partNum || partNum == form.partCore.value) {
def += defBase;
eva += evaAdd;
Expand All @@ -1781,14 +1797,28 @@ function calcArmour(evaAdd,defBase) {
for (let num = 1; num <= form.armourNum.value; num++){
const checkObj = form[`defTotal${i}CheckArmour${num}`];
checkObj.parentNode.classList.remove('error')
const note = form["armour"+num+"Note"].value;
const constStr
= note.match(/〈レッサー・?アームスフィアⅠ〉/) ? 1
: note.match(/〈レッサー・?アームスフィアⅡ〉/) ? 5
: note.match(/〈レッサー・?アームスフィアⅢ〉/) ? 10
: note.match(/〈アームスフィア〉/) ? 20
: 0;

if(!checkObj.checked) continue;

const category = form[`armour${num}Category`].value;

let reqdMod = (category == '盾') ? (equipMod.WeaponReqd||0) : 0;
if((safeEval(form[`armour${num}Reqd`].value) || 0) > maxReqd + reqdMod){
form[`armour${num}Reqd`].classList.add('error');
if(constStr){
if((safeEval(form[`armour${num}Reqd`].value) || 0) > constStr){
form[`armour${num}Reqd`].classList.add('error');
}
}
else {
if((safeEval(form[`armour${num}Reqd`].value) || 0) > maxReqd + reqdMod){
form[`armour${num}Reqd`].classList.add('error');
}
}

eva += Number(form[`armour${num}Eva`].value);
Expand Down
11 changes: 7 additions & 4 deletions _core/lib/sw2/edit-chara.pl
Original file line number Diff line number Diff line change
Expand Up @@ -1062,8 +1062,10 @@ sub classInputBox {
<div class="add-del-button"><a onclick="addWeapons();setupBracketInputCompletion()">▼</a><a onclick="delWeapons()">▲</a></div>
<ul class="annotate">
<li>C値は自動計算されません。
<li><code>\@防護点+1</code>や<code>\@回避力+1</code>のように記述すると、<span class="text-em">常時</span>有効な上昇効果が自動計算されます。<br>有効な項目は、装飾品欄と同様です。
<li>備考欄に<code>\@防護点+1</code>や<code>\@回避力+1</code>のように記述すると、<span class="text-em">常時</span>有効な上昇効果が自動計算されます。<br>有効な項目は、装飾品欄と同様です。
<li>備考欄に<code>〈レッサー・アームスフィアⅠ〉</code>のように記述すると、対応した筋力で計算されます。
<li id="artisan-annotate" @{[ display $pc{masteryArtisan} ]}>備考欄に<code>〈魔器〉</code>と記入すると魔器習熟が反映されます。
<li id="giantize-annotate">備考欄に<code>[巨人化]</code>と記述すると、[巨人化]後の筋力で計算されます。
</ul>
@{[input('weaponNum','hidden')]}
</div>
Expand Down Expand Up @@ -1179,7 +1181,7 @@ sub classInputBox {
<td>@{[ input "armour${num}Eva",'number','calcDefense' ]}
<td>@{[ input "armour${num}Def",'number','calcDefense' ]}
<td>@{[ input "armour${num}Own",'checkbox','calcDefense();calcMobility','disabled' ]}
<td>@{[ input "armour${num}Note",'','','onchange="changeEquipMod()"' ]}
<td>@{[ input "armour${num}Note",'','','onchange="changeEquipMod();calcDefense()"' ]}
HTML
if($num eq 'TMPL'){ print '</template>' }
}
Expand Down Expand Up @@ -1215,7 +1217,7 @@ sub classInputBox {
print <<"HTML";
<td id="defense-total${i}-eva">0
<td id="defense-total${i}-def">0
<td colspan="3">@{[input("defenseTotal${i}Note")]}
<td colspan="3">@{[ input "defenseTotal${i}Note",'','','onchange="calcDefense()"' ]}
HTML
print '</template>' if ($i eq 'TMPL');
}
Expand All @@ -1225,9 +1227,10 @@ sub classInputBox {
</table>
<div class="add-del-button"><a onclick="addDefense()">▼</a><a onclick="delDefense()">▲</a></div>
<ul class="annotate">
<li><code>\@敏捷度-6</code>や<code>\@精神抵抗力+2</code>のように記述すると、<span class="text-em">常時</span>有効な上昇効果が自動計算されます。<br>
<li>防具の備考欄に<code>\@敏捷度-6</code>や<code>\@精神抵抗力+2</code>のように記述すると、<span class="text-em">常時</span>有効な上昇効果が自動計算されます。<br>
有効な項目は、装飾品欄と同様です。<br>
<code>\@</code>による修正は合算のチェックに関わらず計算されるため、予備装備や切り替えが想定されるものは注意してください。<br>
<li id="giantize-annotate">合計行の備考欄に<code>[巨人化]</code>と記述すると、[巨人化]後の敏捷度で計算されます。
</ul>
</div>

Expand Down
1 change: 1 addition & 0 deletions _core/lib/sw2/palette-sub.pl
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,7 @@ sub palettePreset {
$::pc{'weapon'.$_.'Crit'}.$::pc{'weapon'.$_.'Dmg'} eq '';
$text .= "###\n" if $bot{TKY};
$text .= "### ■武器攻撃系\n";
$text .= appendPaletteInsert('attack_head');
$text .= "//命中修正=0\n";
$text .= "//C修正=0\n";
$text .= "//追加D修正=0\n";
Expand Down
3 changes: 3 additions & 0 deletions _core/lib/sw2/view-chara.pl
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,7 @@ sub replaceModificationNotation {
$pc{'weapon'.$_.'Acc'} = 0;
$pc{'weapon'.$_.'Dmg'} = 0;
}
$pc{"weapon${_}Note"} =~ s#〈(レッサー・?アームスフィア[ⅠⅡⅢ]|アームスフィア)〉|[巨人化]#<b class="term-em">$&</b>#;
push(@weapons, {
NAME => $pc{'weapon'.$_.'Name'},
PART => $pc{'part'.$pc{'weapon'.$_.'Part'}.'Name'},
Expand Down Expand Up @@ -886,6 +887,7 @@ sub replaceModificationNotation {

if($pc{'armour'.$_.'Type'} =~ /^(鎧|盾|他|龍骸)[0-9]+/ && $count{$1} <= 1){ $pc{'armour'.$_.'Type'} = $1 }

$pc{"armour${_}Note"} =~ s#〈(レッサー・?アームスフィア[ⅠⅡⅢ]|アームスフィア)〉#<b class="term-em">$&</b>#;
push(@armours, {
TYPE => $pc{'armour'.$_.'Type'},
NAME => $pc{'armour'.$_.'Name'},
Expand Down Expand Up @@ -920,6 +922,7 @@ sub replaceModificationNotation {
.($class ? "${class}/" : '')
.(@ths == @armours ? 'すべての防具・効果' : join('+', @ths) || '');
$th =~ s|/$||;
$pc{"defenseTotal${i}Note"} =~ s#[巨人化]#<b class="term-em">$&</b>#;
push(@total, {
TH => $th,
EVA => $pc{"defenseTotal${i}Eva"},
Expand Down