# 會議記錄-2020/12/19
###### tags: `會議記錄`
<!-- 頁首通用模組 -->
{%hackmd xcsnQTMQQ0SZQ9QF7YUp_g %}
---
:::info
:::spoiler 大綱
[TOC]
:::
---
## 備註
- [ ] 記得拿思樂冰杯
## 新資料結構之討論
### 原本的長這樣
```json=
// one skill
{
"TimeStamp" : <number>,
"AttackerInfo" :
{
"AttackerID" : <number>,
"SkillID" : <number>,
"HpChange" : [<number>] // 攻擊者每回合的血量變化
},
"DefenserInfo" : // 存成陣列,因為可能有很多石頭
[{
"DefenserID": <number>,
"DefenserReaction":
[{
"ReactID" : <number>, // 防禦者對於攻擊動作的回應
"HpChange": <number> // 血量變化
}]
}]
}
```
### 會需要的資料
- Timestamp
- 使用攻擊技能
每次連擊會記錄:
- 攻擊者的
- HP 變化
- 防禦者的
- ID
- HP變化
- 使用防禦技
### 新的
```
ballteRecord = [skillRecord]
```
```javascript=
skill: {
timeStamp: <number>, // unix timestamp : long, $int64
attackerID: <number>,
attackerSkillID: <number>,
hits: [<hit>]
}
```
```javascript=
hit: {
defenserID: <number>,
defenserSkillID: <number>,
defenserHPChange: <number>,
attackerHPChange: <number>,
isAttackCritical: <bool>
}
```
## 技能的選擇方式
- 攻擊技:從技能池裡面依照【某種規則】選出一種攻擊技
- 防禦技:在技能池內依照丟入【沒有技能】、【閃避】、【格檔】、【反擊】,再依照【某種規則】選出一種防禦技
```javascript=
let attackerStone = priQue.pop();
let skill = attackerStone.choseSkill();
let enemyStones = attackerStone.owner.enemyStones;
let allyStones = attackerStone.owner.allyStones;
let targetSet = skill.choseTarget(enemyStones, allyStones;
let hitsRecord = skill.apply(targetSet)
let newSkillRecord = new SkillRecordModel({
timeStamp: attackerStome.time,
...
})
battleRecord.append(newSkillRecord);
attackerStone.updateTime();
if (!attackerStone.dead)
priQue.push(attaackerStone);
```
```javascript=
skill.apply = function(targetSet) {
}
```