Alhaitham / Kujou Sara / Fischl / Kirara
62,976 DPS
Calculated like your results, against the same enemy with the rotation looped, using the build from the community gcsim config the rotation comes from. Your own build will score differently.
The source reports 66,116 DPS for one rotation under its own conditions.
This team's rotation is not validated yet. The score may change.
Score your own build
Only characters in the Character Showcase of your in-game profile can be loaded. Turn on "Show Character Details".
Sources
Rotation script (gcsim)
active kirara;
let shieldEarlier = true;
fn doActionList() {
for let r=0; r<3; r=r+1 {
kirara skill[short_hold=r>0];
sara skill, aim;
fischl attack, skill;
sara burst;
alhaitham skill[hold=1], low_plunge[short=rand()<1/3],
attack:2, charge, dash,
attack:3, charge;
if shieldEarlier == true {
kirara skill, burst;
}
sara skill;
fischl attack:2, burst;
if shieldEarlier == false {
kirara skill, burst;
}
alhaitham burst;
sara aim;
alhaitham attack:4, charge, dash,
attack:4, charge, dash,
attack:3;
}
}
fn randy(mean, standardDeviation, min, max, display) {
let value = randnorm() * standardDeviation + mean;
if value > max {
value = max;
} else if value < min {
value = min;
}
if display {
print(value);
}
return value;
}
let prev_char_id = -1;
switch {
case .alhaitham.onfield:
prev_char_id = .keys.char.alhaitham;
case .sara.onfield:
prev_char_id = .keys.char.sara;
case .fischl.onfield:
prev_char_id = .keys.char.fischl;
default:
prev_char_id = .keys.char.kirara;
}
let prev_action_id = -1;
let _execute_action = execute_action;
fn execute_action(char_id number, action_id number, p map) {
if prev_char_id != char_id && action_id != .action.swap {
execute_action(char_id, .action.swap, []);
}
if action_id == .action.burst {
while .alhaitham.onfield && !.alhaitham.burst.ready {
alhaitham attack;
}
while .sara.onfield && !.sara.burst.ready {
sara attack;
}
while .fischl.onfield && !.fischl.burst.ready {
fischl attack;
}
while .kirara.onfield && !.kirara.burst.ready {
kirara attack;
}
}
if action_id == .action.swap {
delay(randy(9.5, 1.5, 8, 17, 0));
} else if prev_action_id == .action.attack && action_id != .action.attack && action_id != .action.charge {
delay(randy(3, 1, 0, 6, 0));
} else if prev_action_id != .action.attack {
delay(randy(3, 1, 0, 6, 0));
}
prev_char_id = char_id;
prev_action_id = action_id;
return _execute_action(char_id, action_id, p);
}
doActionList();