XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

fix: some problems with 1999 calendar rotation (#1829)

- First day was incorrect for summer & autumn - Only 1 reward was shown, now is a choice of 2 - Only 1 upgrade was shown, now is a choice of 3 - First 2 challenges in the season are now guaranteed to be "easy" Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1829 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

fa6fac49
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

1 个文件 +89 -53
Modified src/services/worldStateService.ts +89 -53
@@ -7,6 +7,7 @@ import { CRng } from "@/src/services/rngService";
7 7 import { eMissionType, ExportNightwave, ExportRegions, IRegion } from "warframe-public-export-plus";
8 8 import {
9 9 ICalendarDay,
10 ICalendarEvent,
10 11 ICalendarSeason,
11 12 ILiteSortie,
12 13 ISeasonChallenge,
@@ -466,8 +467,8 @@ const birthdays: number[] = [
466 467
467 468 const getCalendarSeason = (week: number): ICalendarSeason => {
468 469 const seasonIndex = week % 4;
469 const seasonDay1 = seasonIndex * 90 + 1;
470 const seasonDay91 = seasonIndex * 90 + 91;
470 const seasonDay1 = [1, 91, 182, 274][seasonIndex];
471 const seasonDay91 = seasonDay1 + 90;
471 472 const eventDays: ICalendarDay[] = [];
472 473 for (const day of birthdays) {
473 474 if (day < seasonDay1) {
@@ -526,8 +527,12 @@ const getCalendarSeason = (week: number): ICalendarSeason => {
526 527 challengeDay = rng.randomInt(chunkDay1, chunkDay13);
527 528 } while (birthdays.indexOf(challengeDay) != -1);
528 529
529 const challengeIndex = rng.randomInt(0, challenges.length - 1);
530 const challenge = challenges[challengeIndex];
530 let challengeIndex;
531 let challenge;
532 do {
533 challengeIndex = rng.randomInt(0, challenges.length - 1);
534 challenge = challenges[challengeIndex];
535 } while (i < 2 && !challenge.endsWith("Easy")); // First 2 challenges should be easy
531 536 challenges.splice(challengeIndex, 1);
532 537
533 538 //logger.debug(`challenge on day ${challengeDay}`);
@@ -574,69 +579,100 @@ const getCalendarSeason = (week: number): ICalendarSeason => {
574 579 "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalViolet"
575 580 ];
576 581 for (let i = 0; i != rewardRanges.length - 1; ++i) {
577 const rewardIndex = rng.randomInt(0, rewards.length - 1);
578 const reward = rewards[rewardIndex];
579 rewards.splice(rewardIndex, 1);
582 const events: ICalendarEvent[] = [];
583 for (let j = 0; j != 2; ++j) {
584 const rewardIndex = rng.randomInt(0, rewards.length - 1);
585 events.push({ type: "CET_REWARD", reward: rewards[rewardIndex] });
586 rewards.splice(rewardIndex, 1);
587 }
580 588
581 //logger.debug(`trying to fit a reward between day ${rewardRanges[i]} and ${rewardRanges[i + 1]}`);
589 //logger.debug(`trying to fit rewards between day ${rewardRanges[i]} and ${rewardRanges[i + 1]}`);
582 590 let day: number;
583 591 do {
584 592 day = rng.randomInt(rewardRanges[i] + 1, rewardRanges[i + 1] - 1);
585 593 } while (eventDays.find(x => x.day == day));
586 eventDays.push({ day, events: [{ type: "CET_REWARD", reward }] });
594 eventDays.push({ day, events });
587 595 }
588 596
589 const upgrades = [
590 "/Lotus/Upgrades/Calendar/MeleeCritChance",
591 "/Lotus/Upgrades/Calendar/MeleeAttackSpeed",
592 "/Lotus/Upgrades/Calendar/EnergyOrbToAbilityRange",
593 "/Lotus/Upgrades/Calendar/AbilityStrength",
594 "/Lotus/Upgrades/Calendar/Armor",
595 "/Lotus/Upgrades/Calendar/RadiationProcOnTakeDamage",
596 "/Lotus/Upgrades/Calendar/CompanionDamage",
597 "/Lotus/Upgrades/Calendar/GasChanceToPrimaryAndSecondary",
598 "/Lotus/Upgrades/Calendar/MagazineCapacity",
599 "/Lotus/Upgrades/Calendar/PunchToPrimary",
600 "/Lotus/Upgrades/Calendar/HealingEffects",
601 "/Lotus/Upgrades/Calendar/EnergyRestoration",
602 "/Lotus/Upgrades/Calendar/OvershieldCap",
603 "/Lotus/Upgrades/Calendar/ElectricStatusDamageAndChance",
604 "/Lotus/Upgrades/Calendar/FinisherChancePerComboMultiplier",
605 "/Lotus/Upgrades/Calendar/MagnetStatusPull",
606 "/Lotus/Upgrades/Calendar/CompanionsBuffNearbyPlayer",
607 "/Lotus/Upgrades/Calendar/StatusChancePerAmmoSpent",
608 "/Lotus/Upgrades/Calendar/OrbsDuplicateOnPickup",
609 "/Lotus/Upgrades/Calendar/AttackAndMovementSpeedOnCritMelee",
610 "/Lotus/Upgrades/Calendar/RadialJavelinOnHeavy",
611 "/Lotus/Upgrades/Calendar/MagnitizeWithinRangeEveryXCasts",
612 "/Lotus/Upgrades/Calendar/CompanionsRadiationChance",
613 "/Lotus/Upgrades/Calendar/BlastEveryXShots",
614 "/Lotus/Upgrades/Calendar/GenerateOmniOrbsOnWeakKill",
615 "/Lotus/Upgrades/Calendar/ElectricDamagePerDistance",
616 "/Lotus/Upgrades/Calendar/MeleeSlideFowardMomentumOnEnemyHit",
617 "/Lotus/Upgrades/Calendar/SharedFreeAbilityEveryXCasts",
618 "/Lotus/Upgrades/Calendar/ReviveEnemyAsSpectreOnKill",
619 "/Lotus/Upgrades/Calendar/RefundBulletOnStatusProc",
620 "/Lotus/Upgrades/Calendar/ExplodingHealthOrbs",
621 "/Lotus/Upgrades/Calendar/SpeedBuffsWhenAirborne",
622 "/Lotus/Upgrades/Calendar/EnergyWavesOnCombo",
623 "/Lotus/Upgrades/Calendar/PowerStrengthAndEfficiencyPerEnergySpent",
624 "/Lotus/Upgrades/Calendar/CloneActiveCompanionForEnergySpent",
625 "/Lotus/Upgrades/Calendar/GuidingMissilesChance",
626 "/Lotus/Upgrades/Calendar/EnergyOrbsGrantShield",
627 "/Lotus/Upgrades/Calendar/ElectricalDamageOnBulletJump"
597 const upgradesByHexMember = [
598 [
599 "/Lotus/Upgrades/Calendar/AttackAndMovementSpeedOnCritMelee",
600 "/Lotus/Upgrades/Calendar/ElectricalDamageOnBulletJump",
601 "/Lotus/Upgrades/Calendar/ElectricDamagePerDistance",
602 "/Lotus/Upgrades/Calendar/ElectricStatusDamageAndChance",
603 "/Lotus/Upgrades/Calendar/OvershieldCap",
604 "/Lotus/Upgrades/Calendar/SpeedBuffsWhenAirborne"
605 ],
606 [
607 "/Lotus/Upgrades/Calendar/AbilityStrength",
608 "/Lotus/Upgrades/Calendar/EnergyOrbToAbilityRange",
609 "/Lotus/Upgrades/Calendar/MagnetStatusPull",
610 "/Lotus/Upgrades/Calendar/MagnitizeWithinRangeEveryXCasts",
611 "/Lotus/Upgrades/Calendar/PowerStrengthAndEfficiencyPerEnergySpent",
612 "/Lotus/Upgrades/Calendar/SharedFreeAbilityEveryXCasts"
613 ],
614 [
615 "/Lotus/Upgrades/Calendar/EnergyWavesOnCombo",
616 "/Lotus/Upgrades/Calendar/FinisherChancePerComboMultiplier",
617 "/Lotus/Upgrades/Calendar/MeleeAttackSpeed",
618 "/Lotus/Upgrades/Calendar/MeleeCritChance",
619 "/Lotus/Upgrades/Calendar/MeleeSlideFowardMomentumOnEnemyHit",
620 "/Lotus/Upgrades/Calendar/RadialJavelinOnHeavy"
621 ],
622 [
623 "/Lotus/Upgrades/Calendar/Armor",
624 "/Lotus/Upgrades/Calendar/CloneActiveCompanionForEnergySpent",
625 "/Lotus/Upgrades/Calendar/CompanionDamage",
626 "/Lotus/Upgrades/Calendar/CompanionsBuffNearbyPlayer",
627 "/Lotus/Upgrades/Calendar/CompanionsRadiationChance",
628 "/Lotus/Upgrades/Calendar/RadiationProcOnTakeDamage",
629 "/Lotus/Upgrades/Calendar/ReviveEnemyAsSpectreOnKill"
630 ],
631 [
632 "/Lotus/Upgrades/Calendar/EnergyOrbsGrantShield",
633 "/Lotus/Upgrades/Calendar/EnergyRestoration",
634 "/Lotus/Upgrades/Calendar/ExplodingHealthOrbs",
635 "/Lotus/Upgrades/Calendar/GenerateOmniOrbsOnWeakKill",
636 "/Lotus/Upgrades/Calendar/HealingEffects",
637 "/Lotus/Upgrades/Calendar/OrbsDuplicateOnPickup"
638 ],
639 [
640 "/Lotus/Upgrades/Calendar/BlastEveryXShots",
641 "/Lotus/Upgrades/Calendar/GasChanceToPrimaryAndSecondary",
642 "/Lotus/Upgrades/Calendar/GuidingMissilesChance",
643 "/Lotus/Upgrades/Calendar/MagazineCapacity",
644 "/Lotus/Upgrades/Calendar/PunchToPrimary",
645 "/Lotus/Upgrades/Calendar/RefundBulletOnStatusProc",
646 "/Lotus/Upgrades/Calendar/StatusChancePerAmmoSpent"
647 ]
628 648 ];
629 649 for (let i = 0; i != upgradeRanges.length - 1; ++i) {
630 const upgradeIndex = rng.randomInt(0, upgrades.length - 1);
631 const upgrade = upgrades[upgradeIndex];
632 upgrades.splice(upgradeIndex, 1);
650 // Pick 3 unique hex members
651 const hexMembersPickedForThisDay: number[] = [];
652 for (let j = 0; j != 3; ++j) {
653 let hexMemberIndex: number;
654 do {
655 hexMemberIndex = rng.randomInt(0, upgradesByHexMember.length - 1);
656 } while (hexMembersPickedForThisDay.indexOf(hexMemberIndex) != -1);
657 hexMembersPickedForThisDay.push(hexMemberIndex);
658 }
659 hexMembersPickedForThisDay.sort(); // Always present them in the same order
660
661 // For each hex member, pick an upgrade that was not yet picked this season.
662 const events: ICalendarEvent[] = [];
663 for (const hexMemberIndex of hexMembersPickedForThisDay) {
664 const upgrades = upgradesByHexMember[hexMemberIndex];
665 const upgradeIndex = rng.randomInt(0, upgrades.length - 1);
666 events.push({ type: "CET_UPGRADE", upgrade: upgrades[upgradeIndex] });
667 upgrades.splice(upgradeIndex, 1);
668 }
633 669
634 //logger.debug(`trying to fit an upgrade between day ${upgradeRanges[i]} and ${upgradeRanges[i + 1]}`);
670 //logger.debug(`trying to fit upgrades between day ${upgradeRanges[i]} and ${upgradeRanges[i + 1]}`);
635 671 let day: number;
636 672 do {
637 673 day = rng.randomInt(upgradeRanges[i] + 1, upgradeRanges[i + 1] - 1);
638 674 } while (eventDays.find(x => x.day == day));
639 eventDays.push({ day, events: [{ type: "CET_UPGRADE", upgrade }] });
675 eventDays.push({ day, events });
640 676 }
641 677
642 678 eventDays.sort((a, b) => a.day - b.day);