Toggle navigation
Toggle navigation
This project
Loading...
Sign in
오윤석
/
maplespec.ga
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
4
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
오윤석
2020-06-18 05:01:55 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
bfec7afc5d3ebe8f58a95507fe623505a78efaac
bfec7afc
1 parent
1922929b
analysis model
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
160 additions
and
155 deletions
app/node/model/analysis.js
app/node/routes/character.js
app/node/model/analysis.js
0 → 100644
View file @
bfec7af
const
analyzeStats
=
function
(
characterInfo
,
analysisEquipment
)
{
const
jobModel
=
require
(
'./job'
);
const
job
=
jobModel
[
characterInfo
.
character
.
job
];
const
jobDefault
=
jobModel
.
default
;
const
weaponConst
=
require
(
'./weapon'
)[
analysisEquipment
.
weapon
]
||
1
;
let
rebootDamage
=
0
;
if
(
characterInfo
.
character
.
server
.
name
.
indexOf
(
"리부트"
)
==
0
)
{
// 리부트, 리부트2 월드 반영
rebootDamage
=
parseInt
(
characterInfo
.
character
.
level
/
2
);
}
const
stats
=
{
major
:
{
pure
:
0
,
percent
:
analysisEquipment
.
majorPercent
+
job
.
stats
.
passive
.
major
.
percent
+
jobDefault
.
stats
.
passive
.
major
.
percent
,
added
:
0
},
minor
:
characterInfo
.
stats
.
minor
,
damage
:
{
all
:
characterInfo
.
stats
.
damageHyper
+
analysisEquipment
.
damagePercent
+
job
.
stats
.
passive
.
damage
.
all
+
jobDefault
.
stats
.
passive
.
damage
.
all
+
rebootDamage
,
boss
:
characterInfo
.
stats
.
bossAttackDamage
},
finalDamage
:
job
.
stats
.
passive
.
finalDamage
,
criticalDamage
:
characterInfo
.
stats
.
criticalDamage
+
jobDefault
.
stats
.
passive
.
criticalDamage
,
attackPower
:
{
pure
:
0
,
percent
:
analysisEquipment
.
attackPowerPercent
+
job
.
stats
.
passive
.
attackPower
.
percent
},
ignoreGuard
:
characterInfo
.
stats
.
ignoreGuard
};
stats
.
major
.
added
=
characterInfo
.
stats
.
majorHyper
+
analysisEquipment
.
majorArcane
+
jobDefault
.
stats
.
passive
.
major
.
added
;
stats
.
major
.
pure
=
(
characterInfo
.
stats
.
major
-
stats
.
major
.
added
)
/
(
1
+
stats
.
major
.
percent
/
100
);
stats
.
attackPower
.
pure
=
characterInfo
.
stats
.
statAttackPower
*
100
/
(
characterInfo
.
stats
.
major
*
4
+
stats
.
minor
)
/
job
.
jobConst
/
weaponConst
/
(
1
+
stats
.
attackPower
.
percent
/
100
)
/
(
1
+
stats
.
damage
.
all
/
100
)
/
(
1
+
stats
.
finalDamage
/
100
);
return
stats
;
}
const
calculateEfficiency
=
function
(
stats
,
job
,
weapon
)
{
const
efficiency
=
{
major
:
{
pure
:
1
,
percent
:
0
},
attackPower
:
{
pure
:
0
,
percent
:
0
,
},
damage
:
0
,
criticalDamage
:
0
,
ignoreGuard
:
0
};
const
defaultPower
=
calculatePower
(
stats
,
job
,
weapon
);
stats
.
major
.
pure
+=
1
;
const
majorPure
=
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
;
stats
.
major
.
pure
-=
1
;
if
(
majorPure
==
0
)
return
efficiency
;
stats
.
major
.
percent
+=
1
;
efficiency
.
major
.
percent
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
major
.
percent
-=
1
;
stats
.
attackPower
.
pure
+=
1
;
efficiency
.
attackPower
.
pure
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
attackPower
.
pure
-=
1
;
stats
.
attackPower
.
percent
+=
1
;
efficiency
.
attackPower
.
percent
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
attackPower
.
percent
-=
1
;
stats
.
damage
.
all
+=
1
;
efficiency
.
damage
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
damage
.
all
-=
1
;
stats
.
criticalDamage
+=
1
;
efficiency
.
criticalDamage
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
criticalDamage
-=
1
;
// 곱연산
const
ignoreGuardSaved
=
stats
.
ignoreGuard
;
stats
.
ignoreGuard
=
(
1
-
(
1
-
stats
.
ignoreGuard
/
100
)
*
0.99
)
*
100
;
efficiency
.
ignoreGuard
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
ignoreGuard
=
ignoreGuardSaved
;
return
efficiency
;
}
// 버프 적용 스탯 구하기
const
getBuffStats
=
function
(
stats
,
job
)
{
const
jobModel
=
require
(
'./job'
);
const
buff
=
jobModel
[
job
].
stats
.
active
;
const
defaultBuff
=
jobModel
.
default
.
stats
.
active
;
return
{
major
:
{
pure
:
stats
.
major
.
pure
+
buff
.
major
.
pure
,
percent
:
stats
.
major
.
percent
+
buff
.
major
.
percent
,
added
:
stats
.
major
.
added
},
minor
:
stats
.
minor
,
damage
:
{
all
:
stats
.
damage
.
all
+
buff
.
damage
.
all
+
defaultBuff
.
damage
.
all
,
boss
:
stats
.
damage
.
boss
+
buff
.
damage
.
boss
+
defaultBuff
.
damage
.
boss
},
finalDamage
:
stats
.
finalDamage
,
criticalDamage
:
stats
.
criticalDamage
+
buff
.
criticalDamage
+
defaultBuff
.
criticalDamage
,
attackPower
:
{
pure
:
stats
.
attackPower
.
pure
+
buff
.
attackPower
.
pure
,
percent
:
stats
.
attackPower
.
percent
+
buff
.
attackPower
.
percent
+
defaultBuff
.
attackPower
.
percent
},
ignoreGuard
:
(
1
-
(
1
-
(
stats
.
ignoreGuard
/
100
))
*
(
1
-
(
buff
.
ignoreGuard
/
100
))
*
(
1
-
(
defaultBuff
.
ignoreGuard
/
100
)))
*
100
};
}
// 크리티컬 데미지, 보스 공격력, 방어율 무시를 반영하여 방어율 300% 몬스터 공격시 데미지 산출 값
const
calculatePower
=
function
(
stats
,
job
,
weapon
)
{
const
jobConst
=
require
(
'./job'
)[
job
].
jobConst
;
const
weaponConst
=
require
(
'./weapon'
)[
weapon
];
return
Math
.
max
(
(
(
stats
.
major
.
pure
*
(
1
+
stats
.
major
.
percent
/
100
)
+
stats
.
major
.
added
)
*
4
+
stats
.
minor
)
*
0.01
*
(
stats
.
attackPower
.
pure
*
(
1
+
stats
.
attackPower
.
percent
/
100
))
*
jobConst
*
weaponConst
*
(
1
+
stats
.
damage
.
all
/
100
+
stats
.
damage
.
boss
/
100
)
*
(
1
+
stats
.
finalDamage
/
100
)
*
(
1.35
+
stats
.
criticalDamage
/
100
)
*
(
1
-
3
*
(
1
-
stats
.
ignoreGuard
/
100
)),
1
);
}
module
.
exports
=
{
analyzeStats
:
analyzeStats
,
calculateEfficiency
:
calculateEfficiency
,
getBuffStats
:
getBuffStats
,
calculatePower
:
calculatePower
,
}
\ No newline at end of file
app/node/routes/character.js
View file @
bfec7af
const
characterModel
=
require
(
'../model/character'
);
const
analyzeStats
=
function
(
characterInfo
,
analysisEquipment
)
{
const
jobModel
=
require
(
'../model/job'
);
const
job
=
jobModel
[
characterInfo
.
character
.
job
];
const
jobDefault
=
jobModel
.
default
;
const
weaponConst
=
require
(
'../model/weapon'
)[
analysisEquipment
.
weapon
]
||
1
;
let
rebootDamage
=
0
;
if
(
characterInfo
.
character
.
server
.
name
.
indexOf
(
"리부트"
)
==
0
)
{
// 리부트, 리부트2 월드 반영
rebootDamage
=
parseInt
(
characterInfo
.
character
.
level
/
2
);
}
const
stats
=
{
major
:
{
pure
:
0
,
percent
:
analysisEquipment
.
majorPercent
+
job
.
stats
.
passive
.
major
.
percent
+
jobDefault
.
stats
.
passive
.
major
.
percent
,
added
:
0
},
minor
:
characterInfo
.
stats
.
minor
,
damage
:
{
all
:
characterInfo
.
stats
.
damageHyper
+
analysisEquipment
.
damagePercent
+
job
.
stats
.
passive
.
damage
.
all
+
jobDefault
.
stats
.
passive
.
damage
.
all
+
rebootDamage
,
boss
:
characterInfo
.
stats
.
bossAttackDamage
},
finalDamage
:
job
.
stats
.
passive
.
finalDamage
,
criticalDamage
:
characterInfo
.
stats
.
criticalDamage
+
jobDefault
.
stats
.
passive
.
criticalDamage
,
attackPower
:
{
pure
:
0
,
percent
:
analysisEquipment
.
attackPowerPercent
+
job
.
stats
.
passive
.
attackPower
.
percent
},
ignoreGuard
:
characterInfo
.
stats
.
ignoreGuard
};
stats
.
major
.
added
=
characterInfo
.
stats
.
majorHyper
+
analysisEquipment
.
majorArcane
+
jobDefault
.
stats
.
passive
.
major
.
added
;
stats
.
major
.
pure
=
(
characterInfo
.
stats
.
major
-
stats
.
major
.
added
)
/
(
1
+
stats
.
major
.
percent
/
100
);
stats
.
attackPower
.
pure
=
characterInfo
.
stats
.
statAttackPower
*
100
/
(
characterInfo
.
stats
.
major
*
4
+
stats
.
minor
)
/
job
.
jobConst
/
weaponConst
/
(
1
+
stats
.
attackPower
.
percent
/
100
)
/
(
1
+
stats
.
damage
.
all
/
100
)
/
(
1
+
stats
.
finalDamage
/
100
);
return
stats
;
}
const
calculateEfficiency
=
function
(
stats
,
job
,
weapon
)
{
const
efficiency
=
{
major
:
{
pure
:
1
,
percent
:
0
},
attackPower
:
{
pure
:
0
,
percent
:
0
,
},
damage
:
0
,
criticalDamage
:
0
,
ignoreGuard
:
0
};
const
defaultPower
=
calculatePower
(
stats
,
job
,
weapon
);
stats
.
major
.
pure
+=
1
;
const
majorPure
=
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
;
stats
.
major
.
pure
-=
1
;
if
(
majorPure
==
0
)
return
efficiency
;
stats
.
major
.
percent
+=
1
;
efficiency
.
major
.
percent
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
major
.
percent
-=
1
;
stats
.
attackPower
.
pure
+=
1
;
efficiency
.
attackPower
.
pure
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
attackPower
.
pure
-=
1
;
stats
.
attackPower
.
percent
+=
1
;
efficiency
.
attackPower
.
percent
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
attackPower
.
percent
-=
1
;
stats
.
damage
.
all
+=
1
;
efficiency
.
damage
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
damage
.
all
-=
1
;
stats
.
criticalDamage
+=
1
;
efficiency
.
criticalDamage
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
criticalDamage
-=
1
;
// 곱연산
const
ignoreGuardSaved
=
stats
.
ignoreGuard
;
stats
.
ignoreGuard
=
(
1
-
(
1
-
stats
.
ignoreGuard
/
100
)
*
0.99
)
*
100
;
efficiency
.
ignoreGuard
=
(
calculatePower
(
stats
,
job
,
weapon
)
-
defaultPower
)
/
majorPure
;
stats
.
ignoreGuard
=
ignoreGuardSaved
;
return
efficiency
;
}
// 버프 적용 스탯 구하기
const
getBuffStats
=
function
(
stats
,
job
)
{
const
jobModel
=
require
(
'../model/job'
);
const
buff
=
jobModel
[
job
].
stats
.
active
;
const
defaultBuff
=
jobModel
.
default
.
stats
.
active
;
return
{
major
:
{
pure
:
stats
.
major
.
pure
+
buff
.
major
.
pure
,
percent
:
stats
.
major
.
percent
+
buff
.
major
.
percent
,
added
:
stats
.
major
.
added
},
minor
:
stats
.
minor
,
damage
:
{
all
:
stats
.
damage
.
all
+
buff
.
damage
.
all
+
defaultBuff
.
damage
.
all
,
boss
:
stats
.
damage
.
boss
+
buff
.
damage
.
boss
+
defaultBuff
.
damage
.
boss
},
finalDamage
:
stats
.
finalDamage
,
criticalDamage
:
stats
.
criticalDamage
+
buff
.
criticalDamage
+
defaultBuff
.
criticalDamage
,
attackPower
:
{
pure
:
stats
.
attackPower
.
pure
+
buff
.
attackPower
.
pure
,
percent
:
stats
.
attackPower
.
percent
+
buff
.
attackPower
.
percent
+
defaultBuff
.
attackPower
.
percent
},
ignoreGuard
:
(
1
-
(
1
-
(
stats
.
ignoreGuard
/
100
))
*
(
1
-
(
buff
.
ignoreGuard
/
100
))
*
(
1
-
(
defaultBuff
.
ignoreGuard
/
100
)))
*
100
};
}
// 크리티컬 데미지, 보스 공격력, 방어율 무시를 반영하여 방어율 300% 몬스터 공격시 데미지 산출 값
const
calculatePower
=
function
(
stats
,
job
,
weapon
)
{
const
jobConst
=
require
(
'../model/job'
)[
job
].
jobConst
;
const
weaponConst
=
require
(
'../model/weapon'
)[
weapon
];
return
Math
.
max
(
(
(
stats
.
major
.
pure
*
(
1
+
stats
.
major
.
percent
/
100
)
+
stats
.
major
.
added
)
*
4
+
stats
.
minor
)
*
0.01
*
(
stats
.
attackPower
.
pure
*
(
1
+
stats
.
attackPower
.
percent
/
100
))
*
jobConst
*
weaponConst
*
(
1
+
stats
.
damage
.
all
/
100
+
stats
.
damage
.
boss
/
100
)
*
(
1
+
stats
.
finalDamage
/
100
)
*
(
1.35
+
stats
.
criticalDamage
/
100
)
*
(
1
-
3
*
(
1
-
stats
.
ignoreGuard
/
100
)),
1
);
}
const
analysisModel
=
require
(
'../model/analysis'
);
module
.
exports
=
{
getCharacter
:
async
function
(
req
,
res
)
{
...
...
@@ -195,21 +47,19 @@ module.exports = {
return
;
}
const
stats
=
analyzeStats
(
characterInfo
,
analysisEquipment
);
const
buffStats
=
getBuffStats
(
stats
,
characterInfo
.
character
.
job
);
const
efficiency
=
calculateEfficiency
(
stats
,
characterInfo
.
character
.
job
,
analysisEquipment
.
weapon
);
const
buffEfficiency
=
calculateEfficiency
(
buffStats
,
characterInfo
.
character
.
job
,
analysisEquipment
.
weapon
);
const
stats
=
analysisModel
.
analyzeStats
(
characterInfo
,
analysisEquipment
);
const
buffStats
=
analysisModel
.
getBuffStats
(
stats
,
characterInfo
.
character
.
job
);
const
result
=
{
info
:
characterInfo
.
character
,
analysis
:
{
default
:
{
stats
:
stats
,
efficiency
:
efficiency
efficiency
:
analysisModel
.
calculateEfficiency
(
stats
,
characterInfo
.
character
.
job
,
analysisEquipment
.
weapon
)
},
buff
:
{
stats
:
buffStats
,
efficiency
:
buffEfficiency
efficiency
:
analysisModel
.
calculateEfficiency
(
buffStats
,
characterInfo
.
character
.
job
,
analysisEquipment
.
weapon
)
}
}
};
...
...
Please
register
or
login
to post a comment