天幻网

 找回密码
 立即注册
搜索
热搜: 最终幻想
查看: 1399|回复: 4

你所不知道的生产

[复制链接]

11

主题

28

帖子

74

积分

魔导士

Rank: 2

积分
74
QQ
发表于 2015-2-23 19:39:29 | 显示全部楼层 |阅读模式
一、生产技能基础公式
  感谢http://yuyuko.chu.jp/ff14/CCG/提供的JS代码,以下内容来自skill.js
       加工类技能基础公式:
品质值=(3.58*(0.1^5)*(加工精度^2))+(0.34975*加工精度)+35.0

  制作类技能基础公式:
进展值=0.000019*(作业精度^2)+0.207*作业精度+2

为了内容简洁,加工函数和制作函数的源代码在2楼放出。

二、生产小知识 
  根据CalcSkillProcessingCalcSkillWork这2个函数总结出几条小知识。
  1.在使用加工类技能时,“新颖”和“新颖II”效果一样。
  2.当制作物品等级高于职业等级的物品时,会受到等级惩罚(最大值为5级),可以通过“新颖(新颖II)”消除等级惩罚。
  3.制作1星及以上物品时会受到额外惩罚。

三、扩展
  通过CalcSkillProcessing这个加工函数,我们可以得加工技能与品质值的矩阵图。  

作业精度:391,加工精度:351,制作物品:番茄酱
A:仓促(加工),B:中级加工,C:上级加工,D:比尔格的祝福

内静x1 内静x2 内静x3 内静x4 内静x5 内静x6 内静x7 内静x8 内静x9 内静x10内静x11
A118137157177197317238259280301323
B148172196221246272298324350377404
C177206236265295326357389420452485
D118165220283335435524622729845971
后面加BUFF的情况就不往下列举了

  通过这个矩阵图,最终我们能算出满足100%HQ的加工技能组合。








回复

使用道具 举报

11

主题

28

帖子

74

积分

魔导士

Rank: 2

积分
74
QQ
 楼主| 发表于 2015-2-23 19:41:17 | 显示全部楼层
加工技能函数:
  1. function CalcSkillProcessing(data, blnTemp, usually) {

  2.         //インナークワイエット、イノベーション加工精度上昇%計算
  3.         if (data["processing"] !== 0) {
  4.                 var ret = nowStatus[c_ArayPProcessing] + dataFood.pProcessing;
  5.                 var per = 100;
  6.                 if (now_SkillMode["s_11"]) {
  7.                         per = per + (now_SkillMode["s_11_processing"] * 20);
  8.                 }
  9.                 //イノベーション計算
  10.                 if (now_SkillMode["s_50_4"]) {
  11.                         per = per + 50;
  12.                 }
  13.                 ret = Math.floor(ret * per / 100);

  14.                 //補正値の計算
  15.                 ret = (3.58 * Math.pow(0.1, 5) * Math.pow(ret, 2)) + (0.34975 * ret) + 35.0;
  16.                 // var ret = ( 0.3728 * ret ) + 31.597;

  17.                 //作業倍率
  18.                 //ビエルゴの場合、他の場合
  19.                 if (data["id"] == "s_50_1") {
  20.                         ret = ret * ((100 + (now_SkillMode["s_11_processing"] * 20)) / 100);
  21.                 } else {
  22.                         ret = ret * data["processing"] / 100;
  23.                 }

  24.                 //グレートストライド
  25.                 if (now_SkillMode["s_21"]) {
  26.                         ret = ret * 2;
  27.                 }

  28.                 //インナークワイエット状態の加工アップチェック
  29.                 if (blnTemp) {
  30.                         if (now_SkillMode["s_11"] && data["processing"] > 0) {
  31.                                 now_SkillMode["s_11_processing"] ++;
  32.                         }
  33.                 }

  34.                 //レベル差計算
  35.                 if (nowStatus[c_ArayMLv] - nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]] > 5) {
  36.                         var differenceLv = 5;
  37.                 } else {
  38.                         var differenceLv = nowStatus[c_ArayMLv] - nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]];
  39.                 }
  40.                 //レベル補正
  41.                 if (ret > 0) {
  42.                         if (now_SkillMode["s_15_2"]) {
  43.                                 //工面算段中は変化なし
  44.                         } else if (now_SkillMode["s_50_2"]) {
  45.                                 //工面算段IIは-3補正 ですが、加工ではLv差補正無し
  46.                         } else if (nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]] > nowStatus[c_ArayMLv]) {
  47.                                 //プレイヤーレベルが高い場合 補正無し
  48.                         } else if (nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]] < nowStatus[c_ArayMLv]) {
  49.                                 //製造レベルが高い場合
  50.                                 ret = ret * (1 - 0.05 * differenceLv);
  51.                         }
  52.                 }
  53.                 //☆製造については補正する
  54.                 if (nowStatus[c_ArayMLv] >= 51) {
  55.                         ret = ret * (1 - (0.005 * differenceLv));
  56.                 } else {
  57.                         //難易度補正
  58.                         if (nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]] > nowStatus[c_ArayMLv]) {
  59.                                 var tmp = (nowStatus[c_ArayPProcessing] + dataFood.pProcessing) * (0.0001 * (nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]] - nowStatus[c_ArayMLv]));
  60.                                 ret = ret + tmp;
  61.                         }
  62.                 }

  63.                 //状態処理
  64.                 switch (usually) {
  65.                         case 1:
  66.                                 ret = ret * 1.5;
  67.                                 break;
  68.                         case 2:
  69.                                 ret = ret * 4;
  70.                                 break;
  71.                         case 3:
  72.                                 ret = ret * 0.5;
  73.                                 break;
  74.                 }

  75.                 ret = Math.floor(ret);
  76.         } else {
  77.                 var ret = 0;
  78.         }
  79.         return (ret);
  80. }
复制代码

制作技能函数:
  1. function CalcSkillWork(data) {

  2.         var ret = 0;
  3.         if (data["work"] !== 0) {
  4.                 //ピースバイピース特別処理
  5.                 if (data["id"] == "s_50_3") {
  6.                         ret = Math.floor((nowStatus[c_ArayMWork] - nowStatus[c_ArayWWork]) * (Math.floor(1 / 3 * 10000) / 10000));
  7.                         //堅実作業特別処理
  8.                 } else if (data["id"] == "s_37_4") {
  9.                         ret = data["work"];
  10.                 } else {
  11.                         var setPlayerWork = nowStatus[c_ArayPWork] + dataFood.pWork;
  12.                         //基礎値取得
  13.                         ret = 0.000019 * Math.pow(setPlayerWork, 2) + 0.207 * setPlayerWork + 2;
  14.                        
  15.                         //ret = 2.5 * Math.pow( 0.1, 5 ) * Math.pow( setPlayerWork, 2 ) + 0.2046 * setPlayerWork + 1.744;

  16.                         //レベル補正
  17.                         if (now_SkillMode["s_15_2"]) {
  18.                                 //工面算段中は変化なし
  19.                         } else if (now_SkillMode["s_50_2"]) {
  20.                                 //工面算段IIは-3補正
  21.                                 //プレイヤーレベルが高い場合
  22.                                 ret = ret * ((0.05 * 3) + 1);
  23.                         } else {
  24.                                 if (nowStatus[c_ArayPLv] !== "") {
  25.                                         var tmpPLv = nowStatus[c_ArayPLv + "_" + Number(nowStatus[c_ArayPLv])];
  26.                                 } else {
  27.                                         var tmpPLv = 1;
  28.                                 }
  29.                                 //プレイヤーレベルが高い場合
  30.                                 if (tmpPLv > nowStatus[c_ArayMLv]) {
  31.                                         if (tmpPLv <= nowStatus[c_ArayMLv] + 5) {
  32.                                                 ret = ret * ((0.05 * (tmpPLv - nowStatus[c_ArayMLv])) + 1);
  33.                                         } else if (tmpPLv <= nowStatus[c_ArayMLv] + 16) {
  34.                                                 ret = ret * ((0.02 * (tmpPLv - nowStatus[c_ArayMLv])) + 1.15);
  35.                                         } else if (tmpPLv <= nowStatus[c_ArayMLv] + 19) {
  36.                                                 ret = ret * ((0.0043 * (tmpPLv - nowStatus[c_ArayMLv])) + 1.3989);
  37.                                         } else {
  38.                                                 ret = ret * (0.00005 * (tmpPLv - nowStatus[c_ArayMLv]) + 1.499);
  39.                                         }
  40.                                         //プレイヤーレベルが低い場合
  41.                                 } else if (tmpPLv < nowStatus[c_ArayMLv]) {
  42.                                         //var tmp = 1 - ( 0.0904 * ( nowStatus[ c_ArayMLv ] - tmpPLv ) );
  43.                                         if (nowStatus[c_ArayMLv] - tmpPLv <= 5) {
  44.                                                 var tmp = 0.0036 * Math.pow((nowStatus[c_ArayMLv] - tmpPLv), 4) - 0.0354 * Math.pow((nowStatus[c_ArayMLv] - tmpPLv), 3) + 0.1116 * Math.pow((nowStatus[c_ArayMLv] - tmpPLv), 2) - 0.2142 * (nowStatus[c_ArayMLv] - tmpPLv) + 1.03;
  45.                                                 if (tmp < 0.570) {
  46.                                                         tmp = 0.570;
  47.                                                 }
  48.                                         } else {
  49.                                                 tmp = 0.570;
  50.                                         }
  51.                                         ret = ret * tmp;
  52.                                 }
  53.                         }

  54.                         //☆製造については補正する
  55.                         if (nowStatus[c_ArayMLv] >= 51) {
  56.                                 if (now_SkillMode["s_15_2"] || now_SkillMode["s_50_2"]) {
  57.                                         //工面、工面II中は補正値が低い?
  58.                                         ret = ret * 0.986;
  59.                                 } else {
  60.                                         //ret = ret * ( 1 - ( 0.002 * ( nowStatus[ c_ArayMLv ] - nowStatus[ c_ArayPLv + "_" + nowStatus[ c_ArayPLv ] ] ) ) );
  61.                                         ret = ret * 0.945;
  62.                                 }
  63.                         } else if (nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]] > nowStatus[c_ArayMLv]) {
  64.                                 //難易度補正
  65.                                 var tmp = setPlayerWork * (0.000095 * (nowStatus[c_ArayPLv + "_" + nowStatus[c_ArayPLv]] - nowStatus[c_ArayMLv]));
  66.                                 ret = ret + tmp;
  67.                         }

  68.                         //属性補正
  69.                         if (nowStatus[c_ArayAttribute] != 0) {
  70.                                 if (data["id"] == "s_37_1" && nowStatus[c_ArayAttribute] == 5 ||
  71.                                         data["id"] == "s_37_2" && nowStatus[c_ArayAttribute] == 1 ||
  72.                                         data["id"] == "s_37_3" && nowStatus[c_ArayAttribute] == 2 ||
  73.                                         data["id"] == "s_37_5" && nowStatus[c_ArayAttribute] == 4 ||
  74.                                         data["id"] == "s_37_6" && nowStatus[c_ArayAttribute] == 3 ||
  75.                                         data["id"] == "s_37_7" && nowStatus[c_ArayAttribute] == 6
  76.                                 ) {
  77.                                         ret = ret;
  78.                                 } else {
  79.                                         ret = ret * 0.5;
  80.                                 }
  81.                         }

  82.                         //スキル数値倍率
  83.                         ret = ret * data["work"] / 100;

  84.                         //切り捨て処理
  85.                         ret = Math.floor(ret);

  86.                 }
  87.         }
  88.         return (ret);
  89. }
复制代码


回复 支持 反对

使用道具 举报

90

主题

8867

帖子

1万

积分

版主

Rank: 9Rank: 9Rank: 9

积分
10565
QQ
发表于 2015-2-23 20:29:49 | 显示全部楼层
本帖最后由 光之战士 于 2015-2-23 20:30 编辑

恩,夏空研究的貌似不止这点吧
回复 支持 反对

使用道具 举报

11

主题

28

帖子

74

积分

魔导士

Rank: 2

积分
74
QQ
 楼主| 发表于 2015-2-24 00:13:45 | 显示全部楼层
光之战士 发表于 2015-2-23 20:29
恩,夏空研究的貌似不止这点吧

基于游戏的研究大概就这些。大部分时间都花在跟游戏无关的事情上了。
生产本来就是个简单的数字游戏,大多数规则都包含在那2个函数里了,可以讲的东西实在不多。
对于普通玩家而言,可能只想知道装备从哪来,魔晶石怎么插,手法是怎样的,成功率是多少.....
所以,这样的一篇基于过程的攻略会满足大多数人的需求:从50级到3星制作大神

回复 支持 反对

使用道具 举报

2

主题

460

帖子

614

积分

龙骑士

Rank: 4

积分
614
发表于 2015-2-26 17:22:11 | 显示全部楼层
好厉害的样子,拜读了。没看懂……
Who am I?
[IMG]http://fe.ffsky.cn/FE-TAEM.jpg[/IMG]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|FFsky 1999~2017 ( 老子在国外备个毛案o^o^o

GMT+8, 2017-6-26 09:54 , Processed in 3.995000 second(s), 15 queries , WinCache On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表