diff --git a/%D0%A1%D1%82%D0%B0%D1%80%D1%8B%D0%B5-%D0%BD%D0%B0%D0%B1%D1%80%D0%BE%D1%81%D0%BA%D0%B8-%D0%BF%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2.md b/%D0%A1%D1%82%D0%B0%D1%80%D1%8B%D0%B5-%D0%BD%D0%B0%D0%B1%D1%80%D0%BE%D1%81%D0%BA%D0%B8-%D0%BF%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2.md new file mode 100644 index 0000000..ed51068 --- /dev/null +++ b/%D0%A1%D1%82%D0%B0%D1%80%D1%8B%D0%B5-%D0%BD%D0%B0%D0%B1%D1%80%D0%BE%D1%81%D0%BA%D0%B8-%D0%BF%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2.md @@ -0,0 +1,81 @@ +# Общий урон +Формула расчёта урона: `(Base Damage)*(1+Elemental Bonus%)*(1+Attribute Bonus%+Weapon Skill Bonus%+Misc Bonuses%)` + +Например (всё от балды): + +``` +Урон оружия: 10-20 +Берсерк: +55% +Одноручное оружие: +50% +Сила персонажа: 19 +Вмажем побольнее: +40% + +Base Damage = rand(10,20) = 14 +Attribute Bonus: 19 сила {10 base + 9 added}, 9 added = 5% * 9 = 45%, 14+45% = 20.3 +Elemental Bonus: 0 +Weapon Skill Bonus: 50%, 14+50% = 21 +Misc Bonuses: 55% + 40% = 95%, 14+95% = 27.3 +Total Damage = 14 * (1 + 0) * (1 + 20.3 + 21 + 27.3) = 14 * 1 * 69.6 = что-то дохрена… +``` + +## О поединках +```PHP +# [fightroll] +if ($comb_act == "magic_attack") { + $char_attack = round(($this->wisdom+$rollthedice)/2); +} else { + $char_attack = round(($this->dexterity+rand( + (int)($this->attack_skill_min()*$fight_reduction), + (int)($this->attack_skill_max()*$fight_reduction) + ) + +$rollthedice)/8); + +# [defenseroll] +if ($comb_act == "magic_attack") { + $char_defence= (int)(($this->wisdom+$rollthedice)/2+rand(0,99)*0.01); + } else { + $char_def = rand($this->defense_skill_min(),$this->defense_skill_max()); + $char_defence = (int)(($this->dexterity+$char_def+$rollthedice)/10 +rand(0,99)*0.01); +} +``` + +Рассчет рандомного врага с верхней планкой крутизны +1. статы по единице +2. свободные статы = число1 +3. `рандом_статM(0,N);` свободные статы = свободные статы - рандом_статM +4. если свободные статы !=0 то `рандом_статM+1(0,N); свободные статы = свободные статы - рандом_статM+1` + +повторять один раз на все статы. + +## Немного про интуицию +Everyone takes turn to attack, following a priority queue system. Each unit has a ''priority'' number and a ''speed'' factor that decides when their next turn will be. The idea is each one will have a priority number. Each attack bumps up the attacker’s priority number to the max and every cycle(meaning every attack scene we perform) we decrease each unit’s priority number with their speed. The unit with the lowest number attacks next. We will use a priority queue to store these information. + +Steps are as follows: +1. `create()` - Create the queue and put everyone in, with all but one hero’s priority number randomly set to simulate combat initiative. +2. `create()` - One hero will have his priority number initially set to 1 so our player goes to attack first. +3. `updateQueue()` or in `onInputDown()` - When an attack plays out, we take out the first one in the queue. +4. `attack()` - Perform the attack scene and increase the priority of the attacker. +5. `updateQueue()` - When we update the queue, we decrease each unit’s priority. +6. `updateQueue()` - Add the one we took out earlier back into the queue. + +Подробно с примерами: https://www.programmingmind.com/phaser/turn-based-battle + +## pg +```PHP +'udar' => rand(floor($this->user['sila'] / 3) + 1 + $this->user_dress[0], floor($this->user['sila'] / 3) + 5 + $this->user_dress[1]) - mt_rand(0, $this->enemy_dress[5 + $myattack] / 1.25) + +min = floor($this->user['sila'] / 3) + 1 + $this->user_dress[0] +max = floor($this->user['sila'] / 3) + 5 + $this->user_dress[1]) - mt_rand(0, $this->enemy_dress[5 + $myattack] / 1.25) + +min = 1 + Мин Урон Оружия + Сила / 3 +max = 5 + Макс Урон Оружичя + Сила / 3 - рандом (0, Броня в которую я бью / 1.25) +``` + +# Свежие мысли +Подробно описано в [таске №2](/lopar/battles/issues/2). + +Бойцы стоят в два ряда. В качестве хода они могут переходить из ряда в ряд. Дерутся только первые ряды. Ударить второй ряд можно только если никого нет в первом ряду. + +Когда боец наносит удар часть урона поглощает броня. Если брони много она может поглотить весь урон. При этом каждый удар по противнику и его броне понижает долговечность этой брони. То есть можно потерять броню прямо посреди поединка. + +Каждый удар снимает единицу долговечности из предмета у которого есть параметр броня. Если на персонаже не осталось предметов с броней удары начинают ломать предметы остальные. Смерть в поединке дополнительно понижает долговечность каждого предмета одетого на персонаже. \ No newline at end of file