集中修改选项到config,新增了readme
This commit is contained in:
		
							parent
							
								
									67a38ef2b7
								
							
						
					
					
						commit
						12099853c3
					
				
							
								
								
									
										62
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								README.md
									
									
									
									
									
								
							@ -1,3 +1,65 @@
 | 
			
		||||
#Alex端的食用教程和修改选项
 | 
			
		||||
 | 
			
		||||
在config-vanilla.json底部可以看到已经配置好的默认参数
 | 
			
		||||
复制一份并改名为config.json就可以使其生效,之后对于参数的修改都在复制的这份config.json里进行
 | 
			
		||||
 | 
			
		||||
    //修改参数的说明
 | 
			
		||||
	//不需要额外奖励请设置为1,设置为0会导致没有任何奖励
 | 
			
		||||
    
 | 
			
		||||
    //集团声望设置为true时倒扣和掉段,设置为false则不倒扣不掉段
 | 
			
		||||
    SyndicateLoss?: boolean;
 | 
			
		||||
 | 
			
		||||
    //玄骸相关
 | 
			
		||||
	//玄骸密码总是正确,不需要密码即可击杀,且安魂mod不消耗耐久
 | 
			
		||||
    nemesisAlwaysCorrect?: boolean;
 | 
			
		||||
	
 | 
			
		||||
    //玄骸怒气倍率
 | 
			
		||||
    extraHenchmenKilledGrineer?: number;
 | 
			
		||||
    extraHenchmenKilledCorpus?: number;
 | 
			
		||||
    //对于i骸是杀毒进度
 | 
			
		||||
    extraHenchmenKilledInfestation?: number;
 | 
			
		||||
 | 
			
		||||
    //玄骸解密进度倍率
 | 
			
		||||
    extraHintProgressGrineer?: number;
 | 
			
		||||
    extraHintProgressCorpus?: number;
 | 
			
		||||
 | 
			
		||||
    //额外玄骸武器
 | 
			
		||||
    //抽取随机的同派系武器,与当前玄骸元素属性和加成数值相同,一起发放到铸造厂
 | 
			
		||||
    nemesisExtraWeapon?: number;
 | 
			
		||||
 | 
			
		||||
    //效价融合增强,在原版1.1后额外的乘数
 | 
			
		||||
    nemesisWeaponFuseMultiplier?: number;
 | 
			
		||||
 | 
			
		||||
    //玄骸额外等级,大于0的情况下猜错密码玄骸可能升更多级
 | 
			
		||||
    nemesisExtraLevel?: number;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //任务奖励倍率
 | 
			
		||||
    //包括生存、间谍、刺杀、赏金等,会在当前轮次奖池中额外抽取奖励
 | 
			
		||||
    //这个倍率也会影响王境进度
 | 
			
		||||
    extraRadomMissionDrops?: number;
 | 
			
		||||
 | 
			
		||||
    //单独的王境进度倍率(与上面相乘!)
 | 
			
		||||
    circuitProgressMuliplier?: number;
 | 
			
		||||
 | 
			
		||||
    //额外堕落mod奖励
 | 
			
		||||
    extraCorrputedMods?: number;
 | 
			
		||||
 | 
			
		||||
    //额外隐藏掉落奖励(例如落银树亭的成长之力)
 | 
			
		||||
    extraStrippedItems?: number;
 | 
			
		||||
 | 
			
		||||
    //额外內源之力,九重天和漂泊者
 | 
			
		||||
    extraPlayerSkillGainsSpace?: number;
 | 
			
		||||
    extraPlayerSkillGainsDrifter?: number;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //核桃相关
 | 
			
		||||
    //核桃按品质给白金的数值请在relicHelper.ts中修改
 | 
			
		||||
    //核桃掉落倍率,开一个核桃会多开几个奖励出来
 | 
			
		||||
    extraRelicRewards?: number;
 | 
			
		||||
 | 
			
		||||
#以下是原版readme说明
 | 
			
		||||
 | 
			
		||||
# Space Ninja Server
 | 
			
		||||
 | 
			
		||||
More information for the moment here: [https://discord.gg/PNNZ3asUuY](https://discord.gg/PNNZ3asUuY)
 | 
			
		||||
 | 
			
		||||
@ -78,5 +78,32 @@
 | 
			
		||||
  },
 | 
			
		||||
  "dev": {
 | 
			
		||||
    "keepVendorsExpired": false
 | 
			
		||||
  }
 | 
			
		||||
  },
 | 
			
		||||
  
 | 
			
		||||
  "SyndicateLoss": false,
 | 
			
		||||
  
 | 
			
		||||
  "nemesisAlwaysCorrect": false,
 | 
			
		||||
  
 | 
			
		||||
  "extraHenchmenKilledGrineer": 4.0,
 | 
			
		||||
  "extraHenchmenKilledCorpus": 1.0,
 | 
			
		||||
  "extraHenchmenKilledInfestation": 2.0,
 | 
			
		||||
  
 | 
			
		||||
  "extraHintProgressGrineer": 3.0,
 | 
			
		||||
  "extraHintProgressCorpus": 1.0,
 | 
			
		||||
  
 | 
			
		||||
  "nemesisExtraWeapon": 3,
 | 
			
		||||
  "nemesisWeaponFuseMultiplier": 1.15,
 | 
			
		||||
  "nemesisExtraLevel": 2,
 | 
			
		||||
  
 | 
			
		||||
  "extraRadomMissionDrops": 3,
 | 
			
		||||
  "circuitProgressMuliplier": 3,
 | 
			
		||||
  
 | 
			
		||||
  "extraCorrputedMods": 3,
 | 
			
		||||
  "extraStrippedItems": 3,
 | 
			
		||||
  
 | 
			
		||||
  "extraPlayerSkillGainsSpace": 1.0,
 | 
			
		||||
  "extraPlayerSkillGainsDrifter": 3,
 | 
			
		||||
  
 | 
			
		||||
  "extraRelicRewards": 3
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -37,6 +37,7 @@ import {
 | 
			
		||||
import { logger } from "@/src/utils/logger";
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
import { Types } from "mongoose";
 | 
			
		||||
import { config } from "@/src/services/configService";
 | 
			
		||||
 | 
			
		||||
export const nemesisController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const account = await getAccountForRequest(req);
 | 
			
		||||
@ -56,9 +57,9 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
			
		||||
        // Upgrade destination damage value
 | 
			
		||||
        const destDamage = 0.25 + (destFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
 | 
			
		||||
        const sourceDamage = 0.25 + (sourceFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
 | 
			
		||||
        // 融合系数增强
 | 
			
		||||
        let newDamage = Math.max(destDamage, sourceDamage) * 1.25;
 | 
			
		||||
        if (newDamage >= 0.57) {
 | 
			
		||||
        const nemesisWeaponFuseMultiplier = config.nemesisWeaponFuseMultiplier ?? 1
 | 
			
		||||
        let newDamage = Math.max(destDamage, sourceDamage) * 1.1 * nemesisWeaponFuseMultiplier;
 | 
			
		||||
        if (newDamage >= 0.5794998) {
 | 
			
		||||
            newDamage = 0.6;
 | 
			
		||||
        }
 | 
			
		||||
        destFingerprint.buffs[0].Value = Math.trunc(((newDamage - 0.25) / (0.6 - 0.25)) * 0x3fffffff);
 | 
			
		||||
@ -92,7 +93,13 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
			
		||||
        } else {
 | 
			
		||||
            for (let i = 0; i != 3; ++i) {
 | 
			
		||||
                if (body.guess[i] == passcode[i] || body.guess[i] == GUESS_WILDCARD) {
 | 
			
		||||
                    ++guessResult;
 | 
			
		||||
                    // 修改点1: 对于非感染系玄骸,直接返回全部位置正确
 | 
			
		||||
                    if (config.nemesisAlwaysCorrect) {
 | 
			
		||||
                        guessResult = 3
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        ++guessResult;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@ -196,8 +203,10 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Evaluate guess
 | 
			
		||||
            const correct =
 | 
			
		||||
            let correct =
 | 
			
		||||
                body.guess == GUESS_WILDCARD || getNemesisPasscode(inventory.Nemesis!)[body.position] == body.guess;
 | 
			
		||||
            // 修改点2: 非感染系玄骸无需密码即可击杀
 | 
			
		||||
            if (config.nemesisAlwaysCorrect){correct = true}
 | 
			
		||||
 | 
			
		||||
            // Update entry
 | 
			
		||||
            const guess = decodeNemesisGuess(
 | 
			
		||||
@ -220,23 +229,26 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
			
		||||
                    inventory.Nemesis!.Weakened = true;
 | 
			
		||||
 | 
			
		||||
                    // Subtract a charge from all requiem mods installed on parazon
 | 
			
		||||
                    const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
 | 
			
		||||
                    const dataknifeLoadout = loadout.DATAKNIFE.id(
 | 
			
		||||
                        fromDbOid(inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE])
 | 
			
		||||
                    );
 | 
			
		||||
                    const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
 | 
			
		||||
                    const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
 | 
			
		||||
                    for (let i = 3; i != 6; ++i) {
 | 
			
		||||
                        //logger.debug(`subtracting a charge from ${dataknifeUpgrades[i]}`);
 | 
			
		||||
                        const upgrade = parseUpgrade(inventory, dataknifeUpgrades[i]);
 | 
			
		||||
                        consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
			
		||||
                    // 修改点3:安魂符耐久消耗
 | 
			
		||||
                    if (config.nemesisAlwaysCorrect){
 | 
			
		||||
                        const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
 | 
			
		||||
                        const dataknifeLoadout = loadout.DATAKNIFE.id(
 | 
			
		||||
                            fromDbOid(inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE])
 | 
			
		||||
                        );
 | 
			
		||||
                        const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
 | 
			
		||||
                        const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
 | 
			
		||||
                        for (let i = 3; i != 6; ++i) {
 | 
			
		||||
                            //logger.debug(`subtracting a charge from ${dataknifeUpgrades[i]}`);
 | 
			
		||||
                            const upgrade = parseUpgrade(inventory, dataknifeUpgrades[i]);
 | 
			
		||||
                            consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                // Guess was incorrect, increase rank
 | 
			
		||||
                //玄骸有概率升两级
 | 
			
		||||
                const randomRank = Math.min((Math.random() > 0.5 ? 1 : 2));
 | 
			
		||||
                response.RankIncrease = 1;
 | 
			
		||||
                //玄骸有概率升级
 | 
			
		||||
                const randomRank = Math.floor(Math.random() * (config.nemesisExtraLevel ?? 1));
 | 
			
		||||
                response.RankIncrease = 1 + randomRank;
 | 
			
		||||
                const manifest = getNemesisManifest(inventory.Nemesis!.manifest);
 | 
			
		||||
                inventory.Nemesis!.Rank = Math.min(inventory.Nemesis!.Rank + randomRank, manifest.systemIndexes.length - 1);
 | 
			
		||||
                inventory.Nemesis!.InfNodes = getInfNodes(manifest, inventory.Nemesis!.Rank);
 | 
			
		||||
 | 
			
		||||
@ -55,7 +55,6 @@ import { config } from "@/src/services/configService";
 | 
			
		||||
//    return reward;
 | 
			
		||||
//};
 | 
			
		||||
 | 
			
		||||
//设置核桃按品质给白金
 | 
			
		||||
const premiumCreditsByRarity  = {
 | 
			
		||||
    COMMON:2,
 | 
			
		||||
    UNCOMMON:5,
 | 
			
		||||
@ -77,7 +76,6 @@ export function getPlatinumByRarity(rarity: TRarity): number {
 | 
			
		||||
    return premiumCreditsByRarity[rarity];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    // 开启遗物循环(修改的话,改let i = 0; i < 3,这个《3》数字,改成几就是遗物给几次奖励)
 | 
			
		||||
export const crackRelic = async (
 | 
			
		||||
    inventory: TInventoryDatabaseDocument,
 | 
			
		||||
    participant: IVoidTearParticipantInfo,
 | 
			
		||||
@ -92,11 +90,12 @@ export const crackRelic = async (
 | 
			
		||||
    
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
    // 存储三次奖励的详细信息
 | 
			
		||||
    // 存储奖励的详细信息
 | 
			
		||||
    const allRewards: { type: string; itemCount: number; rarity: TRarity }[] = [];
 | 
			
		||||
    
 | 
			
		||||
    // 循环生成三次奖励
 | 
			
		||||
    for (let i = 0; i < 3; i++) {
 | 
			
		||||
    // 循环生成奖励
 | 
			
		||||
    const extraRelicReward = config.extraRelicRewards ?? 1;
 | 
			
		||||
    for (let i = 0; i < extraRelicReward; i++) {
 | 
			
		||||
        let weights = {...baseWeights}; // 复制基础权重
 | 
			
		||||
        
 | 
			
		||||
        // 根据配置覆盖权重 (仅当配置开启时)
 | 
			
		||||
 | 
			
		||||
@ -91,6 +91,61 @@ export interface IConfig extends IConfigRemovedOptions {
 | 
			
		||||
    dev?: {
 | 
			
		||||
        keepVendorsExpired?: boolean;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    //Alex端的自定义接口
 | 
			
		||||
    
 | 
			
		||||
    //集团声望是否倒扣和掉段,设置为0则不倒扣不掉段
 | 
			
		||||
    SyndicateLoss?: boolean;
 | 
			
		||||
 | 
			
		||||
    //玄骸相关
 | 
			
		||||
    //玄骸密码总是正确,不需要密码即可击杀,且安魂mod不消耗耐久
 | 
			
		||||
    nemesisAlwaysCorrect?: boolean;
 | 
			
		||||
 | 
			
		||||
    //玄骸怒气倍率
 | 
			
		||||
    extraHenchmenKilledGrineer?: number;
 | 
			
		||||
    extraHenchmenKilledCorpus?: number;
 | 
			
		||||
    //对于i骸是杀毒进度
 | 
			
		||||
    extraHenchmenKilledInfestation?: number;
 | 
			
		||||
 | 
			
		||||
    //玄骸解密进度倍率
 | 
			
		||||
    extraHintProgressGrineer?: number;
 | 
			
		||||
    extraHintProgressCorpus?: number;
 | 
			
		||||
 | 
			
		||||
    //额外玄骸武器
 | 
			
		||||
    //抽取随机的同派系武器,与当前玄骸元素属性和加成数值相同,一起发放到铸造厂
 | 
			
		||||
    nemesisExtraWeapon?: number;
 | 
			
		||||
 | 
			
		||||
    //效价融合增强,在原版1.1后额外的乘数
 | 
			
		||||
    nemesisWeaponFuseMultiplier?: number;
 | 
			
		||||
 | 
			
		||||
    //玄骸额外等级,大于0的情况下猜错密码玄骸可能升更多级
 | 
			
		||||
    nemesisExtraLevel?: number;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //任务奖励倍率
 | 
			
		||||
    //包括生存、间谍、刺杀、赏金等,会在当前轮次奖池中额外抽取奖励
 | 
			
		||||
    //这个倍率也会影响王境进度
 | 
			
		||||
    extraRadomMissionDrops?: number;
 | 
			
		||||
 | 
			
		||||
    //单独的王境进度倍率(与上面相乘!)
 | 
			
		||||
    circuitProgressMuliplier?: number;
 | 
			
		||||
 | 
			
		||||
    //额外堕落mod奖励
 | 
			
		||||
    extraCorrputedMods?: number;
 | 
			
		||||
 | 
			
		||||
    //额外隐藏掉落奖励(例如落银树亭的成长之力)
 | 
			
		||||
    extraStrippedItems?: number;
 | 
			
		||||
 | 
			
		||||
    //额外內源之力,九重天和漂泊者
 | 
			
		||||
    extraPlayerSkillGainsSpace?: number;
 | 
			
		||||
    extraPlayerSkillGainsDrifter?: number;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //核桃相关
 | 
			
		||||
    //核桃按品质给白金的数值请在relicHelper.ts中修改
 | 
			
		||||
    //核桃掉落倍率,开一个核桃会多开几个奖励出来
 | 
			
		||||
    extraRelicRewards?: number;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const configRemovedOptionsKeys = [
 | 
			
		||||
 | 
			
		||||
@ -1348,7 +1348,14 @@ export const addStanding = (
 | 
			
		||||
    }
 | 
			
		||||
	
 | 
			
		||||
	//声望变化不会为负数
 | 
			
		||||
    syndicate.Standing += Math.max(0, gainedStanding);
 | 
			
		||||
    const SyndicateLoss = config.SyndicateLoss ?? true;
 | 
			
		||||
    if(SyndicateLoss){
 | 
			
		||||
        syndicate.Standing += gainedStanding;
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        syndicate.Standing += Math.max(0, gainedStanding);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const affiliationMod: IAffiliationMods = {
 | 
			
		||||
        Tag: syndicateTag,
 | 
			
		||||
        Standing: gainedStanding
 | 
			
		||||
@ -1362,12 +1369,13 @@ export const addStanding = (
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            while (syndicate.Standing < getMinStanding(syndicateMeta, syndicate.Title ?? 0)) {
 | 
			
		||||
                //阻止掉段
 | 
			
		||||
                syndicate.Title ??= 0;
 | 
			
		||||
                //syndicate.Title -= 1;
 | 
			
		||||
                affiliationMod.Title ??= 0;
 | 
			
		||||
                //affiliationMod.Title -= 1;
 | 
			
		||||
                //logger.debug(`${syndicateTag} is decreasing to title ${syndicate.Title} after applying alignment`);
 | 
			
		||||
                if (SyndicateLoss){
 | 
			
		||||
                    syndicate.Title ??= 0;
 | 
			
		||||
                    affiliationMod.Title ??= 0;
 | 
			
		||||
                    syndicate.Title -= 1;
 | 
			
		||||
                    affiliationMod.Title -= 1;
 | 
			
		||||
                    logger.debug(`${syndicateTag} is decreasing to title ${syndicate.Title} after applying alignment`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -201,18 +201,35 @@ export const addMissionInventoryUpdates = async (
 | 
			
		||||
            inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
 | 
			
		||||
        }
 | 
			
		||||
        if (inventoryUpdates.RewardInfo.NemesisHenchmenKills && inventory.Nemesis) {
 | 
			
		||||
            //G玄骸额外怒气
 | 
			
		||||
            //玄骸额外怒气
 | 
			
		||||
            let extraHenchmenKilled = 1;
 | 
			
		||||
            if (inventory.Nemesis.Faction == "FC_GRINEER") {
 | 
			
		||||
                extraHenchmenKilled = 3
 | 
			
		||||
            }
 | 
			
		||||
            switch (inventory.Nemesis.Faction) {
 | 
			
		||||
                 case "FC_GRINEER":
 | 
			
		||||
                    extraHenchmenKilled = config.extraHenchmenKilledGrineer ?? extraHenchmenKilled;
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
                 case "FC_CORPUS":
 | 
			
		||||
                    extraHenchmenKilled = config.extraHenchmenKilledCorpus ?? extraHenchmenKilled;
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
                 case "FC_INFESTATION":
 | 
			
		||||
                    extraHenchmenKilled = config.extraHenchmenKilledInfestation ?? extraHenchmenKilled;
 | 
			
		||||
                    break
 | 
			
		||||
            } 
 | 
			
		||||
            inventory.Nemesis.HenchmenKilled += inventoryUpdates.RewardInfo.NemesisHenchmenKills * extraHenchmenKilled;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (inventoryUpdates.RewardInfo.NemesisHintProgress && inventory.Nemesis) {
 | 
			
		||||
            //G玄骸额外解密进度
 | 
			
		||||
            let extraHintProgress = 1.5;
 | 
			
		||||
            if (inventory.Nemesis.Faction == "FC_GRINEER") {
 | 
			
		||||
                extraHintProgress = 4
 | 
			
		||||
            //玄骸额外解密进度
 | 
			
		||||
            let extraHintProgress = 1;
 | 
			
		||||
            switch (inventory.Nemesis.Faction) {
 | 
			
		||||
                 case "FC_GRINEER":
 | 
			
		||||
                    extraHintProgress = config.extraHintProgressGrineer ?? extraHintProgress;
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
                 case "FC_CORPUS":
 | 
			
		||||
                    extraHintProgress = config.extraHintProgressCorpus ?? extraHintProgress;
 | 
			
		||||
                    break
 | 
			
		||||
            }
 | 
			
		||||
            inventory.Nemesis.HintProgress += inventoryUpdates.RewardInfo.NemesisHintProgress * extraHintProgress;
 | 
			
		||||
            if (inventory.Nemesis.Faction != "FC_INFESTATION" && inventory.Nemesis.Hints.length != 3) {
 | 
			
		||||
@ -357,8 +374,10 @@ export const addMissionInventoryUpdates = async (
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case "PlayerSkillGains": {
 | 
			
		||||
                inventory.PlayerSkills.LPP_SPACE += value.LPP_SPACE ?? 0;
 | 
			
		||||
                inventory.PlayerSkills.LPP_DRIFTER += (value.LPP_DRIFTER ?? 0) * 3;
 | 
			
		||||
                const extraPlayerSkillGainsSpace = config.extraPlayerSkillGainsSpace ?? 1;
 | 
			
		||||
                const extraPlayerSkillGainsDrifter = config.extraPlayerSkillGainsDrifter ?? 1;
 | 
			
		||||
                inventory.PlayerSkills.LPP_SPACE += (value.LPP_SPACE?? 0) * extraPlayerSkillGainsSpace;
 | 
			
		||||
                inventory.PlayerSkills.LPP_DRIFTER += (value.LPP_DRIFTER ?? 0) * extraPlayerSkillGainsDrifter;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case "CustomMarkers": {
 | 
			
		||||
@ -812,6 +831,7 @@ export const addMissionInventoryUpdates = async (
 | 
			
		||||
                // Duviri cave offers (generated with the duviri seed) change after completing one of its game modes (not when aborting).
 | 
			
		||||
                if (inventoryUpdates.MissionStatus != "GS_QUIT") {
 | 
			
		||||
                    inventory.DuviriInfo!.Seed = generateRewardSeed();
 | 
			
		||||
                    inventory.DuviriInfo!.NumCompletions += 1;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
@ -855,14 +875,18 @@ export const addMissionInventoryUpdates = async (
 | 
			
		||||
                        ) {
 | 
			
		||||
                            const weaponType = manifest.weapons[inventory.Nemesis.WeaponIdx];
 | 
			
		||||
                            giveNemesisWeaponRecipe(inventory, weaponType, value.nemesisName, value.weaponLoc, profile);
 | 
			
		||||
 | 
			
		||||
                            //增强玄骸,额外随机给三个武器
 | 
			
		||||
                            for (let i = 0; i < 3; i++) {
 | 
			
		||||
                                let randomNemesisWeapon = getRandomNemesisWeaponByFactions(inventory.Nemesis.Faction)
 | 
			
		||||
                                giveNemesisWeaponRecipe(inventory, randomNemesisWeapon, value.nemesisName, undefined, profile);
 | 
			
		||||
                                logger.debug(`随机额外玄骸${value.nemesisName}武器${randomNemesisWeapon}`);
 | 
			
		||||
                            }
 | 
			
		||||
                            att.push(weaponType);
 | 
			
		||||
 | 
			
		||||
                            //玄骸额外随机给三个武器
 | 
			
		||||
                            const extraWeapon = config.nemesisExtraWeapon ?? 0;
 | 
			
		||||
                            if (extraWeapon > 0) {
 | 
			
		||||
                                for (let i = 0; i < extraWeapon; i++) {
 | 
			
		||||
                                    let randomNemesisWeapon = getRandomNemesisWeaponByFactions(inventory.Nemesis.Faction)
 | 
			
		||||
                                    giveNemesisWeaponRecipe(inventory, randomNemesisWeapon, value.nemesisName, undefined, profile);
 | 
			
		||||
                                    logger.debug(`随机额外玄骸${value.nemesisName}武器${randomNemesisWeapon}`);
 | 
			
		||||
                                    att.push(randomNemesisWeapon)
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        //if (value.petLoc) {
 | 
			
		||||
                        if (profile.petHead) {
 | 
			
		||||
@ -1242,7 +1266,8 @@ export const addMissionRewards = async (
 | 
			
		||||
 | 
			
		||||
    if (rewardInfo.useVaultManifest) {
 | 
			
		||||
		//堕落mod一次性掉落三张
 | 
			
		||||
		for (let i = 0; i < 3; i++) {
 | 
			
		||||
        const extraCorrputedMods = config.extraCorrputedMods ?? 1
 | 
			
		||||
		for (let i = 0; i < extraCorrputedMods; i++) {
 | 
			
		||||
			MissionRewards.push({
 | 
			
		||||
				StoreItem: getRandomElement(corruptedMods)!,
 | 
			
		||||
				ItemCount: 1
 | 
			
		||||
@ -1346,7 +1371,9 @@ export const addMissionRewards = async (
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (strippedItems) {
 | 
			
		||||
        for (let i = 0; i < 3; i++) {
 | 
			
		||||
        const extraStrippedItems = config.extraStrippedItems ?? 1;
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < extraStrippedItems; i++) {
 | 
			
		||||
            for (const si of strippedItems) {
 | 
			
		||||
                if (si.DropTable in droptableAliases) {
 | 
			
		||||
                    logger.debug(`rewriting ${si.DropTable} to ${droptableAliases[si.DropTable]}`);
 | 
			
		||||
@ -1729,9 +1756,9 @@ function getRandomMissionDrops(
 | 
			
		||||
    firstCompletion: boolean
 | 
			
		||||
): IMissionReward[] {
 | 
			
		||||
    const drops: IMissionReward[] = [];
 | 
			
		||||
	
 | 
			
		||||
	//重复执行三次方法,并将结果附加到最终的drops数组里
 | 
			
		||||
	for (let i = 0; i < 3; i++) {
 | 
			
		||||
    const extraRadomMissionDrops = config.extraRadomMissionDrops ?? 1;
 | 
			
		||||
 | 
			
		||||
	for (let i = 0; i < extraRadomMissionDrops; i++) {
 | 
			
		||||
		if (RewardInfo.sortieTag == "Final" && firstCompletion) {
 | 
			
		||||
			const arr = RewardInfo.sortieId!.split("_");
 | 
			
		||||
			let sortieId = arr[1];
 | 
			
		||||
@ -2077,24 +2104,25 @@ function getRandomMissionDrops(
 | 
			
		||||
					if (progress) {
 | 
			
		||||
						// https://wiki.warframe.com/w/The%20Circuit#Tiers_and_Weekly_Rewards
 | 
			
		||||
						const roundsCompleted = RewardInfo.rewardQualifications?.length || 0;
 | 
			
		||||
                        const circuitProgressMuliplier = config.circuitProgressMuliplier ?? 1;
 | 
			
		||||
						if (roundsCompleted >= 1) {
 | 
			
		||||
							progress.Earn += 100;
 | 
			
		||||
							progress.Earn += 100 * circuitProgressMuliplier;
 | 
			
		||||
						}
 | 
			
		||||
						if (roundsCompleted >= 2) {
 | 
			
		||||
							progress.Earn += 110;
 | 
			
		||||
							progress.Earn += 110 * circuitProgressMuliplier;
 | 
			
		||||
						}
 | 
			
		||||
						if (roundsCompleted >= 3) {
 | 
			
		||||
							progress.Earn += 120;
 | 
			
		||||
							progress.Earn += 120 * circuitProgressMuliplier;
 | 
			
		||||
						}
 | 
			
		||||
						if (roundsCompleted >= 4) {
 | 
			
		||||
							progress.Earn += 145;
 | 
			
		||||
							progress.Earn += 145 * circuitProgressMuliplier;
 | 
			
		||||
							if (progress.BonusAvailable && progress.BonusAvailable.getTime() <= Date.now()) {
 | 
			
		||||
								progress.Earn += 50;
 | 
			
		||||
								progress.BonusAvailable = new Date(Date.now() + 24 * 3600_000); // TOVERIFY
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						if (roundsCompleted >= 5) {
 | 
			
		||||
							progress.Earn += (roundsCompleted - 4) * 170;
 | 
			
		||||
							progress.Earn += (roundsCompleted - 4) * 170 * circuitProgressMuliplier;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					tierOverride = 0;
 | 
			
		||||
@ -2110,7 +2138,7 @@ function getRandomMissionDrops(
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//在循环中随机化奖励种子
 | 
			
		||||
			const rng = new SRng((BigInt(RewardInfo.rewardSeed ?? generateRewardSeed()) + BigInt(i * 7)) ^ 0xffffffffffffffffn);
 | 
			
		||||
			const rng = new SRng((BigInt(RewardInfo.rewardSeed ?? generateRewardSeed()) + BigInt(i * 17)) ^ 0xffffffffffffffffn);
 | 
			
		||||
			rewardManifests.forEach(name => {
 | 
			
		||||
				const table = ExportRewards[name];
 | 
			
		||||
				// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user