Advanced update
- Added hybrid reactions - changed blueprints DataBase - Started creating advanced page for composite reactions
This commit is contained in:
parent
27c57a9167
commit
27a69d8ecb
|
@ -0,0 +1,834 @@
|
|||
[
|
||||
{
|
||||
"_id":28688,
|
||||
"bpid":46219,
|
||||
"name":"Pure Synth Drop Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28701,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28688,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":28689,
|
||||
"bpid":46220,
|
||||
"name":"Pure Synth Exile Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28696,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28689,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":28690,
|
||||
"bpid":46221,
|
||||
"name":"Pure Synth Frentix Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28698,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28690,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25252,
|
||||
"bpid":46222,
|
||||
"name":"Pure Standard Frentix Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25277,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25252,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25330,
|
||||
"bpid":46223,
|
||||
"name":"Pure Standard Drop Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25274,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25330,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25331,
|
||||
"bpid":46224,
|
||||
"name":"Pure Standard Exile Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25275,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25331,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25332,
|
||||
"bpid":46225,
|
||||
"name":"Pure Standard Mindflood Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25276,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25332,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25333,
|
||||
"bpid":46226,
|
||||
"name":"Pure Standard X-Instinct Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25278,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25333,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25334,
|
||||
"bpid":46227,
|
||||
"name":"Pure Standard Sooth Sayer Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25279,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25334,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":28691,
|
||||
"bpid":46228,
|
||||
"name":"Pure Synth Mindflood Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28699,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28691,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":28692,
|
||||
"bpid":46229,
|
||||
"name":"Pure Synth Sooth Sayer Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28695,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28692,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25237,
|
||||
"bpid":46230,
|
||||
"name":"Pure Standard Blue Pill Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25268,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25237,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25242,
|
||||
"bpid":46231,
|
||||
"name":"Pure Standard Crash Booster",
|
||||
"type":"stand",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":3645,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":25273,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25242,
|
||||
"qt":15
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":28693,
|
||||
"bpid":46232,
|
||||
"name":"Pure Synth X-Instinct Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28700,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28693,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":28686,
|
||||
"bpid":46233,
|
||||
"name":"Pure Synth Blue Pill Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28694,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28686,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":28687,
|
||||
"bpid":46234,
|
||||
"name":"Pure Synth Crash Booster",
|
||||
"type":"synth",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":41,
|
||||
"qt":20
|
||||
},
|
||||
{
|
||||
"id":28697,
|
||||
"qt":40
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":28687,
|
||||
"qt":30
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25283,
|
||||
"bpid":46235,
|
||||
"name":"Pure Strong Blue Pill Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25241,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25332,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25283,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25335,
|
||||
"bpid":46236,
|
||||
"name":"Pure Improved Crash Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25237,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25242,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":9850,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25335,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25336,
|
||||
"bpid":46237,
|
||||
"name":"Pure Improved Drop Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25330,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25331,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3683,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25336,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25337,
|
||||
"bpid":46238,
|
||||
"name":"Pure Improved Exile Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25330,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25331,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":9850,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25337,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25338,
|
||||
"bpid":46240,
|
||||
"name":"Pure Improved Mindflood Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25252,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25332,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3683,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25338,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25339,
|
||||
"bpid":46241,
|
||||
"name":"Pure Improved Frentix Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25252,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25332,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":9850,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25339,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25340,
|
||||
"bpid":46242,
|
||||
"name":"Pure Improved X-Instinct Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25333,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25334,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3683,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25340,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25341,
|
||||
"bpid":46243,
|
||||
"name":"Pure Improved Sooth Sayer Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25333,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25334,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":9850,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25341,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25342,
|
||||
"bpid":46244,
|
||||
"name":"Pure Strong Crash Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25335,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25252,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25342,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25343,
|
||||
"bpid":46245,
|
||||
"name":"Pure Strong Drop Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25336,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25333,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25343,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25344,
|
||||
"bpid":46246,
|
||||
"name":"Pure Strong Exile Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25337,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25334,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25344,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25345,
|
||||
"bpid":46247,
|
||||
"name":"Pure Strong Mindflood Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25338,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25242,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25345,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25346,
|
||||
"bpid":46248,
|
||||
"name":"Pure Strong Frentix Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25339,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25237,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":100
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25346,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25347,
|
||||
"bpid":46249,
|
||||
"name":"Pure Strong X-Instinct Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25340,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25331,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25347,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25348,
|
||||
"bpid":46250,
|
||||
"name":"Pure Strong Sooth Sayer Booster",
|
||||
"type":"strong",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25341,
|
||||
"qt":12
|
||||
},
|
||||
{
|
||||
"id":25330,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3773,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25348,
|
||||
"qt":12
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":25241,
|
||||
"bpid":46251,
|
||||
"name":"Pure Improved Blue Pill Booster",
|
||||
"type":"impro",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":25237,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":25242,
|
||||
"qt":15
|
||||
},
|
||||
{
|
||||
"id":3683,
|
||||
"qt":20
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":25241,
|
||||
"qt":12
|
||||
}
|
||||
}
|
||||
]
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,254 @@
|
|||
[
|
||||
{
|
||||
"_id":30306,
|
||||
"bpid":46157,
|
||||
"name":"Methanofullerene",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":30372,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30373,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":37,
|
||||
"qt":300
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30306,
|
||||
"qt":160
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30303,
|
||||
"bpid":46158,
|
||||
"name":"Fulleroferrocene",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":30371,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30370,
|
||||
"qt":200
|
||||
},
|
||||
{
|
||||
"id":34,
|
||||
"qt":1000
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30303,
|
||||
"qt":1000
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30304,
|
||||
"bpid":46159,
|
||||
"name":"PPD Fullerene Fibers",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":30371,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30370,
|
||||
"qt":300
|
||||
},
|
||||
{
|
||||
"id":35,
|
||||
"qt":800
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30304,
|
||||
"qt":250
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30305,
|
||||
"bpid":46160,
|
||||
"name":"Fullerene Intercalated Graphite",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4246,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":30371,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30372,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":36,
|
||||
"qt":600
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30305,
|
||||
"qt":120
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30307,
|
||||
"bpid":46161,
|
||||
"name":"Lanthanum Metallofullerene",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4312,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":30372,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30374,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":38,
|
||||
"qt":200
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30307,
|
||||
"qt":120
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30308,
|
||||
"bpid":46162,
|
||||
"name":"Scandium Metallofullerene",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":39,
|
||||
"qt":25
|
||||
},
|
||||
{
|
||||
"id":30373,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30375,
|
||||
"qt":100
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30308,
|
||||
"qt":160
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30309,
|
||||
"bpid":46163,
|
||||
"name":"Graphene Nanoribbons",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":30375,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30376,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":38,
|
||||
"qt":400
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30309,
|
||||
"qt":120
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30310,
|
||||
"bpid":46164,
|
||||
"name":"Carbon-86 Epoxy Resin",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4051,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":39,
|
||||
"qt":30
|
||||
},
|
||||
{
|
||||
"id":30376,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30377,
|
||||
"qt":100
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30310,
|
||||
"qt":160
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id":30311,
|
||||
"bpid":46165,
|
||||
"name":"C3-FTM Acid",
|
||||
"type":"-",
|
||||
"inputs":[
|
||||
{
|
||||
"id":4247,
|
||||
"qt":5
|
||||
},
|
||||
{
|
||||
"id":40,
|
||||
"qt":80
|
||||
},
|
||||
{
|
||||
"id":30374,
|
||||
"qt":100
|
||||
},
|
||||
{
|
||||
"id":30378,
|
||||
"qt":100
|
||||
}
|
||||
],
|
||||
"output":{
|
||||
"id":30311,
|
||||
"qt":100
|
||||
}
|
||||
}
|
||||
]
|
|
@ -1,824 +0,0 @@
|
|||
{
|
||||
"_id": "composite",
|
||||
"reaction": [{
|
||||
"name": "Caesarium Cadmide",
|
||||
"id": 16663,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16643,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16647,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16663,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Carbon Polymers",
|
||||
"id": 16659,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16633,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16636,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16659,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Ceramic Powder",
|
||||
"id": 16660,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16635,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16636,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16660,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Crystallite Alloy",
|
||||
"id": 16655,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16640,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16643,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16655,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Dysporite",
|
||||
"id": 16668,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16646,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16650,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16668,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Fernite Alloy",
|
||||
"id": 16656,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16639,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16642,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16656,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Ferrofluid",
|
||||
"id": 16669,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16648,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16650,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16669,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Fluxed Condensates",
|
||||
"id": 17769,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16651,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16653,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 17769,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Hexite",
|
||||
"id": 16665,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16641,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16644,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16665,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Hyperflurite",
|
||||
"id": 16666,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16642,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16652,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16666,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Neo Mercurite",
|
||||
"id": 16667,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16646,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16651,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16667,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Platinum Technite",
|
||||
"id": 16662,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16644,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16649,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16662,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Promethium Mercurite",
|
||||
"id": 33337,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16646,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16652,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 33337,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Prometium",
|
||||
"id": 17960,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16643,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16652,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 17960,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Rolled Tungsten Alloy",
|
||||
"id": 16657,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16637,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16644,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16657,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Silicon Diborite",
|
||||
"id": 16658,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16635,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16636,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16658,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Solerium",
|
||||
"id": 16664,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16641,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16647,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16664,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Sulfuric Acid",
|
||||
"id": 16661,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16634,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16635,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16661,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Thulium Hafnite",
|
||||
"id": 33336,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16648,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16653,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 33336,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Titanium Chromide",
|
||||
"id": 16654,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16638,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16641,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16654,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Vanadium Hafnite",
|
||||
"id": 17959,
|
||||
"type": "simple",
|
||||
"inputs": [{
|
||||
"id": 16642,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16648,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 17959,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Crystalline Carbonide",
|
||||
"id": 16670,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16655,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16659,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16670,
|
||||
"qt": 10000
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Fermionic Condensates",
|
||||
"id": 17317,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16663,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16668,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 17769,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 17960,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 17317,
|
||||
"qt": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Fernite Carbide",
|
||||
"id": 16673,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16656,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16660,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16673,
|
||||
"qt": 10000
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Ferrogel",
|
||||
"id": 16683,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16665,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16666,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16669,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 17960,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16683,
|
||||
"qt": 400
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Fullerides",
|
||||
"id": 16679,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16659,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16662,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16679,
|
||||
"qt": 3000
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Hypersynaptic Fibers",
|
||||
"id": 16682,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16664,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16668,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 17959,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16682,
|
||||
"qt": 750
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Nanotransistors",
|
||||
"id": 16681,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16661,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16662,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16667,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16681,
|
||||
"qt": 1500
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Nonlinear Metamaterials",
|
||||
"id": 33362,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16654,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16669,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 33362,
|
||||
"qt": 300
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Phenolic Composites",
|
||||
"id": 16680,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16658,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16663,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 17959,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16680,
|
||||
"qt": 2200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Photonic Metamaterials",
|
||||
"id": 33359,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16655,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 33336,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 33359,
|
||||
"qt": 300
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Plasmonic Metamaterials",
|
||||
"id": 33361,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16656,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16667,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4246,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 33361,
|
||||
"qt": 300
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Sylramic Fibers",
|
||||
"id": 16678,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16660,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16665,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16678,
|
||||
"qt": 6000
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Terahertz Metamaterials",
|
||||
"id": 33360,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16657,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 17960,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4247,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 33360,
|
||||
"qt": 300
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Titanium Carbide",
|
||||
"id": 16671,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16654,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16658,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4312,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16671,
|
||||
"qt": 10000
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Tungsten Carbide",
|
||||
"id": 16672,
|
||||
"type": "complex",
|
||||
"inputs": [{
|
||||
"id": 16657,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 16661,
|
||||
"qt": 100
|
||||
},
|
||||
{
|
||||
"id": 4051,
|
||||
"qt": 5
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"id": 16672,
|
||||
"qt": 10000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -26,6 +26,48 @@ cron.schedule('10 12 * * *', function() {
|
|||
});
|
||||
|
||||
|
||||
function bpBuilder(){
|
||||
var bparr = [];
|
||||
for(let i = 0;i<outs.length;i++){
|
||||
var bp = {};
|
||||
bp._id = outs[i].productTypeID;
|
||||
bp.bpid = outs[i].typeID;
|
||||
bp.name = getItemName(outs[i].productTypeID);
|
||||
bp.type = "-";
|
||||
bp.inputs = [];
|
||||
bp.output = {
|
||||
"id" : outs[i].productTypeID,
|
||||
"qt" : outs[i].quantity
|
||||
}
|
||||
mats.forEach(function(elem){
|
||||
if(elem.typeID === outs[i].typeID){
|
||||
var inItem = {
|
||||
"id" : elem.materialTypeID,
|
||||
"qt" : elem.quantity
|
||||
}
|
||||
bp.inputs.push(inItem);
|
||||
}
|
||||
});
|
||||
bparr.push(bp);
|
||||
console.log(i);
|
||||
}
|
||||
console.log("Array criado!");
|
||||
writeToFile(bparr);
|
||||
}
|
||||
|
||||
function writeToFile(arr){
|
||||
console.log("A escrever ficheiro...");
|
||||
fs.writeFile("./new_bps.json",JSON.stringify(arr));
|
||||
}
|
||||
|
||||
function getItemName(id) {
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].TypeID === id) {
|
||||
return items[i].NAME;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getItemID(name) {
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].NAME === name) {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -25,4 +25,10 @@ a {
|
|||
|
||||
.col-sm-12{
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
tr.link-row { cursor: pointer; }
|
||||
|
||||
.table{
|
||||
margin-bottom: 0 !important;
|
||||
}
|
274
routes/comp.js
274
routes/comp.js
|
@ -46,7 +46,7 @@ function getSimplePrice(data, id) {
|
|||
function getChainTax(prof, reac, id) {
|
||||
let temp = 0;
|
||||
for (let i = 0; i < reac.length; i++) {
|
||||
if (reac[i].id === id) {
|
||||
if (reac[i]._id === id) {
|
||||
let inp = reac[i].inputs;
|
||||
for (let ii = 0; ii < inp.length; ii++) {
|
||||
for (let iii = 0; iii < prof.length; iii++) {
|
||||
|
@ -60,6 +60,30 @@ function getChainTax(prof, reac, id) {
|
|||
}
|
||||
}
|
||||
|
||||
function isEmpty(obj) {
|
||||
for(var key in obj) {
|
||||
if(obj.hasOwnProperty(key))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function getItemName(items,id) {
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i]._id === id) {
|
||||
return items[i].name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getItemID(items,name) {
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].name === name) {
|
||||
return items[i]._id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* GET comp page. */
|
||||
router.get('/', function(req, res, next) {
|
||||
//set cookies if not found
|
||||
|
@ -173,7 +197,7 @@ router.get('/', function(req, res, next) {
|
|||
|
||||
//vars
|
||||
let lvid = 30000891;
|
||||
let querry = ['items', 'bps', 'systems'];
|
||||
let querry = ['items', 'bp-comp', 'systems'];
|
||||
|
||||
async.map(querry, function(coll, callback) {
|
||||
mongo.connect(svurl, function(err, db) {
|
||||
|
@ -188,12 +212,11 @@ router.get('/', function(req, res, next) {
|
|||
});
|
||||
}, function(err, results) {
|
||||
let itemData = results[0];
|
||||
let bpsData = results[1];
|
||||
let reac = results[1];
|
||||
let systems = results[2];
|
||||
//get cost index
|
||||
var costIndex = getCostIndex(systems, syst);
|
||||
let calc = [];
|
||||
let reac = bpsData[0].reaction;
|
||||
//START build new BP array with prices
|
||||
for (let i = 0; i < reac.length; i++) {
|
||||
let tempin = [];
|
||||
|
@ -215,7 +238,7 @@ router.get('/', function(req, res, next) {
|
|||
"buy": getItem(itemData, reac[i].output.id).buy * reac[i].output.qt * cycles
|
||||
}
|
||||
ttmp = {
|
||||
"id": reac[i].id,
|
||||
"id": reac[i]._id,
|
||||
"name": reac[i].name,
|
||||
"type": reac[i].type,
|
||||
"chain": "No",
|
||||
|
@ -242,7 +265,7 @@ router.get('/', function(req, res, next) {
|
|||
"buy": getItem(itemData, reac[i].output.id).buy * reac[i].output.qt * cycles
|
||||
}
|
||||
ttmp = {
|
||||
"id": reac[i].id,
|
||||
"id": reac[i]._id,
|
||||
"name": reac[i].name,
|
||||
"type": reac[i].type,
|
||||
"chain": "No",
|
||||
|
@ -255,7 +278,7 @@ router.get('/', function(req, res, next) {
|
|||
tmpPrc = {};
|
||||
tempout = {};
|
||||
for (let inp = 0; inp < reac[i].inputs.length; inp++) {
|
||||
if (inp === reac[i].inputs.length - 1) { //look for fuel block
|
||||
if (inp === 0) { //look for fuel block
|
||||
tmpPrc = {
|
||||
"id": reac[i].inputs[inp].id,
|
||||
"buy": getItem(itemData, reac[i].inputs[inp].id).buy * reac[i].inputs[inp].qt * cycles,
|
||||
|
@ -276,7 +299,7 @@ router.get('/', function(req, res, next) {
|
|||
"buy": getItem(itemData, reac[i].output.id).buy * reac[i].output.qt * cycles
|
||||
}
|
||||
ttmp = {
|
||||
"id": reac[i].id,
|
||||
"id": reac[i]._id,
|
||||
"name": reac[i].name,
|
||||
"type": reac[i].type,
|
||||
"chain": "yes",
|
||||
|
@ -284,8 +307,33 @@ router.get('/', function(req, res, next) {
|
|||
"output": tempout
|
||||
}
|
||||
calc.push(ttmp);
|
||||
}else if(reac[i].type === "unrefined"){
|
||||
tempin = [];
|
||||
tempout = {};
|
||||
tmpPrc = {};
|
||||
for (let inp = 0; inp < reac[i].inputs.length; inp++) {
|
||||
tmpPrc = {
|
||||
"id": reac[i].inputs[inp].id,
|
||||
"buy": getItem(itemData, reac[i].inputs[inp].id).buy * reac[i].inputs[inp].qt * cycles,
|
||||
"sell": getItem(itemData, reac[i].inputs[inp].id).sell * reac[i].inputs[inp].qt * cycles
|
||||
}
|
||||
tempin.push(tmpPrc);
|
||||
}
|
||||
tempout = {
|
||||
"id": reac[i].output.id,
|
||||
"sell": getItem(itemData, reac[i].output.id).sell * reac[i].output.qt * cycles,
|
||||
"buy": getItem(itemData, reac[i].output.id).buy * reac[i].output.qt * cycles
|
||||
}
|
||||
ttmp = {
|
||||
"id": reac[i]._id,
|
||||
"name": reac[i].name,
|
||||
"type": reac[i].type,
|
||||
"chain": "No",
|
||||
"inputs": tempin,
|
||||
"output": tempout
|
||||
}
|
||||
calc.push(ttmp);
|
||||
}
|
||||
|
||||
}
|
||||
//console.log(calc);
|
||||
//END build new BP array with prices
|
||||
|
@ -293,6 +341,7 @@ router.get('/', function(req, res, next) {
|
|||
let sprof = [];
|
||||
let cprof = [];
|
||||
let chprof = [];
|
||||
let unprof = [];
|
||||
var temp = {};
|
||||
for (let i = 0; i < calc.length; i++) {
|
||||
let rin = calc[i].inputs;
|
||||
|
@ -464,17 +513,220 @@ router.get('/', function(req, res, next) {
|
|||
}
|
||||
if (temp.type === "simple") {
|
||||
sprof.push(temp);
|
||||
} else {
|
||||
} else if(temp.type === "complex") {
|
||||
if (temp.chain === "yes") {
|
||||
chprof.push(temp);
|
||||
} else {
|
||||
cprof.push(temp);
|
||||
}
|
||||
}else if(temp.type === "unrefined"){
|
||||
unprof.push(temp);
|
||||
}
|
||||
}
|
||||
//END build array with total input cost, output cost & profits
|
||||
res.render('comp', { title: 'Composite Reactions', comp: true, stable: sprof, ctable: cprof, chtable: chprof, sett: ck });
|
||||
res.render('comp', { title: 'Composite Reactions', comp: true, stable: sprof, ctable: cprof, chtable: chprof, untable: unprof, sett: ck });
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:id',function(req, res, next){
|
||||
const reqid = parseInt(req.params.id);
|
||||
//set cookies if not found
|
||||
var ck = req.cookies;
|
||||
//console.log(ck);
|
||||
if (!ck.input) { res.cookie('input', 'buy', { maxAge: 31556952000, }); var imeth = "buy"; }
|
||||
if (!ck.output) { res.cookie('output', 'sell', { maxAge: 31556952000, }); var ometh = "sell"; }
|
||||
if (!ck.skill) { res.cookie('skill', 5, { maxAge: 31556952000, }); var skill = 5; }
|
||||
if (!ck.facility) { res.cookie('facility', 'large', { maxAge: 31556952000, }); var facility = "large"; }
|
||||
if (!ck.rig) { res.cookie('rig', 1, { maxAge: 31556952000, }); var rig = 1; var rige = true; }
|
||||
if (!ck.space) { res.cookie('space', 'null', { maxAge: 31556952000, }); var space = "null"; }
|
||||
if (!ck.indyTax) { res.cookie('indyTax', 0, { maxAge: 31556952000, }); var indyTax = 0; }
|
||||
if (!ck.duration) { res.cookie('duration', 10080, { maxAge: 31556952000, }); var duration = 10080; }
|
||||
if (!ck.adv-cycles) { res.cookie('adv-cycles', 50, { maxAge: 31556952000, }); var cycles = 50; }
|
||||
if (!ck.system) { res.cookie('system', 'Basgerin', { maxAge: 31556952000, }); var syst = "Basgerin" }
|
||||
|
||||
//set internal vars to use cookie values
|
||||
if (ck.input.toLowerCase() === "buy" || ck.input.toLowerCase() === "sell") {
|
||||
var imeth = ck.input.toLowerCase();
|
||||
} else {
|
||||
var imeth = "buy";
|
||||
}
|
||||
if (ck.output.toLowerCase() === "buy" || ck.output.toLowerCase() === "sell") {
|
||||
var ometh = ck.output.toLowerCase();
|
||||
} else {
|
||||
var ometh = "sell";
|
||||
}
|
||||
if (parseInt(ck.skill) >= 0 && parseInt(ck.skill) <= 5) {
|
||||
var skill = parseInt(ck.skill);
|
||||
} else {
|
||||
var skill = 5;
|
||||
}
|
||||
if (ck.facility.toLowerCase() === "med" || ck.facility.toLowerCase() === "large") {
|
||||
var facility = ck.facility.toLowerCase();
|
||||
} else {
|
||||
var facility = "large";
|
||||
}
|
||||
if (parseInt(ck.rig) >= 0 && parseInt(ck.rig) <= 2) {
|
||||
var rig = parseInt(ck.rig);
|
||||
var rige = true;
|
||||
} else {
|
||||
var rig = 1;
|
||||
var rige = true;
|
||||
}
|
||||
if (ck.space.toLowerCase() === "low" || ck.space.toLowerCase() === "null") {
|
||||
var space = ck.space.toLowerCase();
|
||||
} else {
|
||||
var space = "null";
|
||||
}
|
||||
if (ck.indyTax >= 0 && ck.indyTax <= 50) {
|
||||
var indyTax = ck.indyTax
|
||||
} else {
|
||||
var indyTax = 0;
|
||||
}
|
||||
if (ck.duration >= 1 && ck.duration <= 43200) {
|
||||
var duration = ck.duration
|
||||
} else {
|
||||
var duration = 10080;
|
||||
}
|
||||
if (ck.adv-cycles >= 1 && ck.adv-cycles <= 300) {
|
||||
var cycles = ck.adv-cycles
|
||||
} else {
|
||||
var cycles = 50;
|
||||
}
|
||||
if (ck.system) {
|
||||
var re = /^[a-zA-Z0-9-]+$/;
|
||||
if (re.test(ck.system)) {
|
||||
var syst = ck.system;
|
||||
} else {
|
||||
var syst = 'Basgerin';
|
||||
}
|
||||
}
|
||||
|
||||
//calc bonus with opts
|
||||
var matb = 1;
|
||||
var time = 180;
|
||||
var bonus = {};
|
||||
//default is Skill (Reactions) 5, Large facility & T1 rig in NullSec
|
||||
//calc material bonus
|
||||
if (rig === 1 && space === "null") {
|
||||
matb = 1 - (2 * 1.1) / 100
|
||||
} else if (rig === 1 && space === "low") {
|
||||
matb = 1 - 2 / 100
|
||||
} else if (rig === 2 && space === "null") {
|
||||
matb = 1 - (2.4 * 1.1) / 100
|
||||
} else if (rig === 2 && space === "low") {
|
||||
matb = 1 - 2.4 / 100
|
||||
} else {
|
||||
matb = 1;
|
||||
}
|
||||
//calc time bonus
|
||||
time = 180 * (1 - (4 * skill) / 100); //skill bonus
|
||||
//facility bonus
|
||||
if (facility === "med") {
|
||||
time = time * (1 - 0)
|
||||
} else if (facility === "large") {
|
||||
time = time * (1 - (25 / 100))
|
||||
}
|
||||
//rig bonus
|
||||
if (rig === 1 && space === "null") {
|
||||
time = time * (1 - (20 * 1.1 / 100))
|
||||
} else if (rig === 1 && space === "low") {
|
||||
time = time * (1 - (20 / 100))
|
||||
} else if (rig === 2 && space === "null") {
|
||||
time = time * (1 - (24 * 1.1 / 100))
|
||||
} else if (rig === 2 && space === "low") {
|
||||
time = time * (1 - (24 / 100))
|
||||
} else {
|
||||
time = time;
|
||||
}
|
||||
//final result
|
||||
bonus = {
|
||||
"mat": matb,
|
||||
"time": time
|
||||
}
|
||||
|
||||
let querry = ['items', 'bp-comp', 'systems'];
|
||||
async.map(querry, function(coll, callback) {
|
||||
mongo.connect(svurl, function(err, db) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
} else {
|
||||
db.collection(coll).find().toArray(function(err, res) {
|
||||
callback(null, res);
|
||||
db.close();
|
||||
});
|
||||
}
|
||||
});
|
||||
}, function(err, results) {
|
||||
let itemData = results[0];
|
||||
let reac = results[1];
|
||||
let systems = results[2];
|
||||
//get cost index
|
||||
var costIndex = getCostIndex(systems, syst);
|
||||
//define vars for information
|
||||
var inpArr = [];
|
||||
let inptotal = {};
|
||||
var taxArr = [];
|
||||
let taxtotal = {};
|
||||
var outArr = [];
|
||||
let outtotal = {};
|
||||
|
||||
//START build new BP array with prices
|
||||
var itembp = {};
|
||||
|
||||
for(let i=0;i<reac.length;i++){
|
||||
if(reac[i]._id === reqid){
|
||||
itembp = reac[i];
|
||||
}
|
||||
}
|
||||
|
||||
if(isEmpty(itembp)){
|
||||
var err = new Error('Item not found!!');
|
||||
err.status = 404;
|
||||
res.locals.message = err.message;
|
||||
// render the error page
|
||||
res.status(404);
|
||||
res.render('error');
|
||||
}else{
|
||||
|
||||
if(itembp.type === "simple"){
|
||||
//build input array
|
||||
|
||||
itembp.inputs.forEach(function(elem){
|
||||
let inrow = {};
|
||||
inrow.id = elem.id;
|
||||
inrow.name = getItemName(itemData,elem.id);
|
||||
inrow.qt = Math.ceil(elem.qt * cycles * bonus.mat);
|
||||
inrow.price = inrow.qt * getItem(itemData,elem.id).buy;
|
||||
inrow.pricestr = numeral(inrow.qt * getItem(itemData,elem.id).buy).format('0,0.00');
|
||||
|
||||
inpArr.push(inrow);
|
||||
});
|
||||
inptotal = {
|
||||
"name": "TOTAL",
|
||||
"qt": 0,
|
||||
"price": 0
|
||||
};
|
||||
inpArr.forEach(function(elem){
|
||||
inptotal.qt += elem.qt;
|
||||
inptotal.price += elem.price;
|
||||
});
|
||||
inptotal.price = numeral(inptotal.price).format('0,0.00');
|
||||
|
||||
//build tax array
|
||||
|
||||
//build output array
|
||||
}else if(itembp.type === "complex"){
|
||||
|
||||
}else if(itembp.type === "unrefined"){
|
||||
|
||||
}
|
||||
|
||||
|
||||
let prodData = {};
|
||||
prodData.name = getItemName(itemData,itembp._id);
|
||||
res.render('comp-adv', { title: prodData.name + ' Reaction', comp: true, data: prodData, intable: inpArr, intt: inptotal, sett: ck });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
362
routes/hyb.js
362
routes/hyb.js
|
@ -1,9 +1,367 @@
|
|||
var express = require('express');
|
||||
var mongo = require('mongodb');
|
||||
var request = require('request');
|
||||
var async = require('async');
|
||||
var numeral = require('numeral');
|
||||
var cookieParser = require('cookie-parser');
|
||||
var xmljs = require('xml-js');
|
||||
var router = express.Router();
|
||||
|
||||
/* GET home page. */
|
||||
var svurl = "mongodb://localhost:27017/eve-reactor";
|
||||
|
||||
function getCostIndex(sys, name) {
|
||||
for (let i = 0; i < sys.length; i++) {
|
||||
if (sys[i].name.toLowerCase() === name.toLowerCase()) {
|
||||
return sys[i].index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getItem(data, id) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i]._id === id) {
|
||||
return data[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* GET comp page. */
|
||||
router.get('/', function(req, res, next) {
|
||||
res.render('hyb', { title: 'Hybrid Reactions', hyb: true });
|
||||
//set cookies if not found
|
||||
var ck = req.cookies;
|
||||
//console.log(ck);
|
||||
if (!ck.input) { res.cookie('input', 'buy', { maxAge: 31556952000, }); var imeth = "buy"; }
|
||||
if (!ck.output) { res.cookie('output', 'sell', { maxAge: 31556952000, }); var ometh = "sell"; }
|
||||
if (!ck.skill) { res.cookie('skill', 5, { maxAge: 31556952000, }); var skill = 5; }
|
||||
if (!ck.facility) { res.cookie('facility', 'large', { maxAge: 31556952000, }); var facility = "large"; }
|
||||
if (!ck.rig) { res.cookie('rig', 1, { maxAge: 31556952000, }); var rig = 1; var rige = true; }
|
||||
if (!ck.space) { res.cookie('space', 'null', { maxAge: 31556952000, }); var space = "null"; }
|
||||
if (!ck.indyTax) { res.cookie('indyTax', 0, { maxAge: 31556952000, }); var indyTax = 0; }
|
||||
if (!ck.duration) { res.cookie('duration', 10080, { maxAge: 31556952000, }); var duration = 10080; }
|
||||
if (!ck.system) { res.cookie('system', 'Basgerin', { maxAge: 31556952000, }); var syst = "Basgerin" }
|
||||
|
||||
//set internal vars to use cookie values
|
||||
if (ck.input.toLowerCase() === "buy" || ck.input.toLowerCase() === "sell") {
|
||||
var imeth = ck.input.toLowerCase();
|
||||
} else {
|
||||
var imeth = "buy";
|
||||
}
|
||||
if (ck.output.toLowerCase() === "buy" || ck.output.toLowerCase() === "sell") {
|
||||
var ometh = ck.output.toLowerCase();
|
||||
} else {
|
||||
var ometh = "sell";
|
||||
}
|
||||
if (parseInt(ck.skill) >= 0 && parseInt(ck.skill) <= 5) {
|
||||
var skill = parseInt(ck.skill);
|
||||
} else {
|
||||
var skill = 5;
|
||||
}
|
||||
if (ck.facility.toLowerCase() === "med" || ck.facility.toLowerCase() === "large") {
|
||||
var facility = ck.facility.toLowerCase();
|
||||
} else {
|
||||
var facility = "large";
|
||||
}
|
||||
if (parseInt(ck.rig) >= 0 && parseInt(ck.rig) <= 2) {
|
||||
var rig = parseInt(ck.rig);
|
||||
var rige = true;
|
||||
} else {
|
||||
var rig = 1;
|
||||
var rige = true;
|
||||
}
|
||||
if (ck.space.toLowerCase() === "low" || ck.space.toLowerCase() === "null") {
|
||||
var space = ck.space.toLowerCase();
|
||||
} else {
|
||||
var space = "null";
|
||||
}
|
||||
if (ck.indyTax >= 0 && ck.indyTax <= 50) {
|
||||
var indyTax = ck.indyTax
|
||||
} else {
|
||||
var indyTax = 0;
|
||||
}
|
||||
if (ck.duration >= 1 && ck.duration <= 43200) {
|
||||
var duration = ck.duration
|
||||
} else {
|
||||
var duration = 10080;
|
||||
}
|
||||
if (ck.system) {
|
||||
var re = /^[a-zA-Z0-9-]+$/;
|
||||
if (re.test(ck.system)) {
|
||||
var syst = ck.system;
|
||||
} else {
|
||||
var syst = 'Basgerin';
|
||||
}
|
||||
}
|
||||
|
||||
//calc bonus with opts
|
||||
var matb = 1;
|
||||
var time = 180;
|
||||
var bonus = {};
|
||||
//default is Skill (Reactions) 5, Large facility & T1 rig in NullSec
|
||||
//calc material bonus
|
||||
if (rig === 1 && space === "null") {
|
||||
matb = 1 - (2 * 1.1) / 100
|
||||
} else if (rig === 1 && space === "low") {
|
||||
matb = 1 - 2 / 100
|
||||
} else if (rig === 2 && space === "null") {
|
||||
matb = 1 - (2.4 * 1.1) / 100
|
||||
} else if (rig === 2 && space === "low") {
|
||||
matb = 1 - 2.4 / 100
|
||||
} else {
|
||||
matb = 1;
|
||||
}
|
||||
//calc time bonus
|
||||
time = 180 * (1 - (4 * skill) / 100); //skill bonus
|
||||
//facility bonus
|
||||
if (facility === "med") {
|
||||
time = time * (1 - 0)
|
||||
} else if (facility === "large") {
|
||||
time = time * (1 - (25 / 100))
|
||||
}
|
||||
//rig bonus
|
||||
if (rig === 1 && space === "null") {
|
||||
time = time * (1 - (20 * 1.1 / 100))
|
||||
} else if (rig === 1 && space === "low") {
|
||||
time = time * (1 - (20 / 100))
|
||||
} else if (rig === 2 && space === "null") {
|
||||
time = time * (1 - (24 * 1.1 / 100))
|
||||
} else if (rig === 2 && space === "low") {
|
||||
time = time * (1 - (24 / 100))
|
||||
} else {
|
||||
time = time;
|
||||
}
|
||||
//final result
|
||||
bonus = {
|
||||
"mat": matb,
|
||||
"time": time
|
||||
}
|
||||
var cycles = Math.floor(duration / bonus.time);
|
||||
|
||||
//vars
|
||||
let lvid = 30000891;
|
||||
let querry = ['items', 'bp-hybrid', 'systems'];
|
||||
|
||||
async.map(querry, function(coll, callback) {
|
||||
mongo.connect(svurl, function(err, db) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
} else {
|
||||
db.collection(coll).find().toArray(function(err, res) {
|
||||
callback(null, res);
|
||||
db.close();
|
||||
});
|
||||
}
|
||||
});
|
||||
}, function(err, results) {
|
||||
let itemData = results[0];
|
||||
let reac = results[1];
|
||||
let systems = results[2];
|
||||
//get cost index
|
||||
var costIndex = getCostIndex(systems, syst);
|
||||
let calc = [];
|
||||
//START build new BP array with prices
|
||||
for (let i = 0; i < reac.length; i++) {
|
||||
let tempin = [];
|
||||
let tempout = {};
|
||||
let ttmp = {};
|
||||
let tmpPrc = {};
|
||||
for (let inp = 0; inp < reac[i].inputs.length; inp++) {
|
||||
tmpPrc = {
|
||||
"id": reac[i].inputs[inp].id,
|
||||
"buy": getItem(itemData, reac[i].inputs[inp].id).buy * reac[i].inputs[inp].qt * cycles,
|
||||
"sell": getItem(itemData, reac[i].inputs[inp].id).sell * reac[i].inputs[inp].qt * cycles
|
||||
}
|
||||
tempin.push(tmpPrc);
|
||||
}
|
||||
tempout = {
|
||||
"id": reac[i].output.id,
|
||||
"sell": getItem(itemData, reac[i].output.id).sell * reac[i].output.qt * cycles,
|
||||
"buy": getItem(itemData, reac[i].output.id).buy * reac[i].output.qt * cycles
|
||||
}
|
||||
ttmp = {
|
||||
"id": reac[i]._id,
|
||||
"name": reac[i].name,
|
||||
"type": reac[i].type,
|
||||
"chain": "No",
|
||||
"inputs": tempin,
|
||||
"output": tempout
|
||||
}
|
||||
calc.push(ttmp);
|
||||
}
|
||||
//console.log(calc);
|
||||
//END build new BP array with prices
|
||||
//START build array with total input cost, output cost & profits
|
||||
let tabprof = [];
|
||||
var temp = {};
|
||||
for (let i = 0; i < calc.length; i++) {
|
||||
let rin = calc[i].inputs;
|
||||
let rout = calc[i].output;
|
||||
let tisell = 0;
|
||||
let tibuy = 0;
|
||||
var indexTax = 0;
|
||||
indexTax += rout.buy * costIndex;
|
||||
//calc build tax based on cost index
|
||||
var buildTax = indexTax * (indyTax / 100);
|
||||
//total tax
|
||||
var ttax = indexTax + buildTax;
|
||||
//calc total input prices
|
||||
for (let ii = 0; ii < rin.length; ii++) {
|
||||
tisell += rin[ii].sell * bonus.mat;
|
||||
tibuy += rin[ii].buy * bonus.mat;
|
||||
}
|
||||
if (imeth === "buy" && ometh === "sell") {
|
||||
temp = {
|
||||
"id": calc[i].id,
|
||||
"name": calc[i].name,
|
||||
"type": calc[i].type,
|
||||
"chain": calc[i].chain,
|
||||
"i": numeral(tibuy).format('0,0.00'),
|
||||
"taxes": {
|
||||
"index": indexTax,
|
||||
"build": buildTax
|
||||
},
|
||||
"tax": numeral(ttax).format('0,0.00'),
|
||||
"o": numeral(rout.sell).format('0,0.00'),
|
||||
"prof": numeral(rout.sell - (tibuy + ttax)).format('0,0.00'),
|
||||
"per": numeral(((rout.sell - (tibuy + ttax)) / rout.sell)).format('0.00%')
|
||||
}
|
||||
if (((rout.sell - (tibuy + ttax)) / rout.sell) > 0) {
|
||||
temp.pos = true;
|
||||
} else if (((rout.sell - (tibuy + ttax)) / rout.sell) < 0) {
|
||||
temp.neg = true;
|
||||
}
|
||||
} else if (imeth === "buy" && ometh === "buy") {
|
||||
temp = {
|
||||
"id": calc[i].id,
|
||||
"name": calc[i].name,
|
||||
"type": calc[i].type,
|
||||
"chain": calc[i].chain,
|
||||
"i": numeral(tibuy).format('0,0.00'),
|
||||
"taxes": {
|
||||
"index": indexTax,
|
||||
"build": buildTax
|
||||
},
|
||||
"tax": numeral(ttax).format('0,0.00'),
|
||||
"o": numeral(rout.buy).format('0,0.00'),
|
||||
"prof": numeral(rout.buy - (tibuy + ttax)).format('0,0.00'),
|
||||
"per": numeral(((rout.buy - (tibuy + ttax)) / rout.buy)).format('0.00%')
|
||||
}
|
||||
if (((rout.buy - (tibuy + ttax)) / rout.buy) > 0) {
|
||||
temp.pos = true;
|
||||
} else if (((rout.buy - (tibuy + ttax)) / rout.buy) < 0) {
|
||||
temp.neg = true;
|
||||
}
|
||||
} else if (imeth === "sell" && ometh === "sell") {
|
||||
temp = {
|
||||
"id": calc[i].id,
|
||||
"name": calc[i].name,
|
||||
"type": calc[i].type,
|
||||
"chain": calc[i].chain,
|
||||
"i": numeral(tisell).format('0,0.00'),
|
||||
"taxes": {
|
||||
"index": indexTax,
|
||||
"build": buildTax
|
||||
},
|
||||
"tax": numeral(ttax).format('0,0.00'),
|
||||
"o": numeral(rout.sell).format('0,0.00'),
|
||||
"prof": numeral(rout.sell - (tisell + ttax)).format('0,0.00'),
|
||||
"per": numeral(((rout.sell - (tisell + ttax)) / rout.sell)).format('0.00%')
|
||||
}
|
||||
if (((rout.sell - (tisell + ttax)) / rout.sell) > 0) {
|
||||
temp.pos = true;
|
||||
} else if (((rout.sell - (tisell + ttax)) / rout.sell) < 0) {
|
||||
temp.neg = true;
|
||||
}
|
||||
} else if (imeth === "sell" && ometh === "buy") {
|
||||
temp = {
|
||||
"id": calc[i].id,
|
||||
"name": calc[i].name,
|
||||
"type": calc[i].type,
|
||||
"chain": calc[i].chain,
|
||||
"i": numeral(tisell).format('0,0.00'),
|
||||
"taxes": {
|
||||
"index": indexTax,
|
||||
"build": buildTax
|
||||
},
|
||||
"tax": numeral(ttax).format('0,0.00'),
|
||||
"o": numeral(rout.buy).format('0,0.00'),
|
||||
"prof": numeral(rout.buy - (tisell + ttax)).format('0,0.00'),
|
||||
"per": numeral(((rout.buy - (tisell + ttax)) / rout.buy)).format('0.00%')
|
||||
}
|
||||
if (((rout.buy - (tisell + ttax)) / rout.buy) > 0) {
|
||||
temp.pos = true;
|
||||
} else if (((rout.buy - (tisell + ttax)) / rout.buy) < 0) {
|
||||
temp.neg = true;
|
||||
}
|
||||
} else if (ometh === "buy") {
|
||||
temp = {
|
||||
"id": calc[i].id,
|
||||
"name": calc[i].name,
|
||||
"type": calc[i].type,
|
||||
"chain": calc[i].chain,
|
||||
"i": numeral(tibuy).format('0,0.00'),
|
||||
"taxes": {
|
||||
"index": indexTax,
|
||||
"build": buildTax
|
||||
},
|
||||
"tax": numeral(ttax).format('0,0.00'),
|
||||
"o": numeral(rout.buy).format('0,0.00'),
|
||||
"prof": numeral(rout.buy - (tibuy + ttax)).format('0,0.00'),
|
||||
"per": numeral(((rout.buy - (tibuy + ttax)) / rout.buy)).format('0.00%')
|
||||
}
|
||||
if (((rout.buy - (tibuy + ttax)) / rout.buy) > 0) {
|
||||
temp.pos = true;
|
||||
} else if (((rout.buy - (tibuy + ttax)) / rout.buy) < 0) {
|
||||
temp.neg = true;
|
||||
}
|
||||
} else if (imeth === "sell") {
|
||||
temp = {
|
||||
"id": calc[i].id,
|
||||
"name": calc[i].name,
|
||||
"type": calc[i].type,
|
||||
"chain": calc[i].chain,
|
||||
"i": numeral(tisell).format('0,0.00'),
|
||||
"taxes": {
|
||||
"index": indexTax,
|
||||
"build": buildTax
|
||||
},
|
||||
"tax": numeral(ttax).format('0,0.00'),
|
||||
"o": numeral(rout.sell).format('0,0.00'),
|
||||
"prof": numeral(rout.sell - (tisell + ttax)).format('0,0.00'),
|
||||
"per": numeral(((rout.sell - (tisell + ttax)) / rout.sell)).format('0.00%')
|
||||
}
|
||||
if (((rout.sell - (tisell + ttax)) / rout.sell) > 0) {
|
||||
temp.pos = true;
|
||||
} else if (((rout.sell - (tisell + ttax)) / rout.sell) < 0) {
|
||||
temp.neg = true;
|
||||
}
|
||||
} else { //default I BUY / S SELL
|
||||
temp = {
|
||||
"id": calc[i].id,
|
||||
"name": calc[i].name,
|
||||
"type": calc[i].type,
|
||||
"chain": calc[i].chain,
|
||||
"i": numeral(tibuy).format('0,0.00'),
|
||||
"taxes": {
|
||||
"index": indexTax,
|
||||
"build": buildTax
|
||||
},
|
||||
"tax": numeral(ttax).format('0,0.00'),
|
||||
"o": numeral(rout.sell).format('0,0.00'),
|
||||
"prof": numeral(rout.sell - (tibuy + ttax)).format('0,0.00'),
|
||||
"per": numeral(((rout.sell - (tibuy + ttax)) / rout.sell)).format('0.00%')
|
||||
}
|
||||
if (((rout.sell - (tibuy + ttax)) / rout.sell) > 0) {
|
||||
temp.pos = true;
|
||||
} else if (((rout.sell - (tibuy + ttax)) / rout.sell) < 0) {
|
||||
temp.neg = true;
|
||||
}
|
||||
}
|
||||
tabprof.push(temp);
|
||||
}
|
||||
//END build array with total input cost, output cost & profits
|
||||
res.render('hyb', { title: 'Hybrid Reactions', hyb: true, htab: tabprof, sett: ck });
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,97 @@
|
|||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#stab').DataTable( {
|
||||
searching: false,
|
||||
info: false,
|
||||
paging: false,
|
||||
columnsDefs: [
|
||||
null,
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
null
|
||||
]
|
||||
} );
|
||||
});
|
||||
</script>
|
||||
<div class="container">
|
||||
<div class="row mt-4">
|
||||
<h1 class="text-center w-100">{{data.name}} Reaction</h1>
|
||||
</div>
|
||||
<div class="row mt-4">
|
||||
<table class="table table-sm table-bordered text-center">
|
||||
<thead>
|
||||
<th>In Method</th>
|
||||
<th>Out Method</th>
|
||||
<th>Reactions</th>
|
||||
<th>Facility</th>
|
||||
<th>Rig</th>
|
||||
<th>Space</th>
|
||||
<th>System</th>
|
||||
<th>IndyTax</th>
|
||||
<th>Build Time</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<td>{{sett.input}}</td>
|
||||
<td>{{sett.output}}</td>
|
||||
<td>Level {{sett.skill}}</td>
|
||||
<td>{{sett.facility}} Refinery</td>
|
||||
<td>T{{sett.rig}} Rig</td>
|
||||
<td>{{sett.space}}sec</td>
|
||||
<td>{{sett.system}}</td>
|
||||
<td>{{sett.indyTax}}</td>
|
||||
<td>{{sett.duration}} Minutes</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row mt-5">
|
||||
<div class="col-6">
|
||||
<div class="card w-100">
|
||||
<div class="card-header bg-danger text-white text-center w-100">
|
||||
INPUTS
|
||||
</div>
|
||||
<table width="100%" class="table table-sm table-bordered text-center">
|
||||
<thead>
|
||||
<th>Name</th>
|
||||
<th>Quantity</th>
|
||||
<th>Price</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#intable}}
|
||||
<tr class="">
|
||||
<td>{{name}}</td>
|
||||
<td>{{qt}}</td>
|
||||
<td class="isk">{{pricestr}}</td>
|
||||
</tr>
|
||||
{{/intable}}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>{{intt.name}}</td>
|
||||
<th>{{intt.qt}}</td>
|
||||
<th class="isk">{{intt.price}}</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<div class="card w-100 mt-4">
|
||||
<div class="card-header bg-danger text-white text-center w-100">
|
||||
TAXES
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="card w-100">
|
||||
<div class="card-header bg-success text-white text-center w-100">
|
||||
OUTPUTS
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -42,6 +42,23 @@
|
|||
null
|
||||
]
|
||||
} );
|
||||
$('#untab').DataTable( {
|
||||
searching: false,
|
||||
info: false,
|
||||
paging: false,
|
||||
columnsDefs: [
|
||||
null,
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
null
|
||||
]
|
||||
} );
|
||||
$(".link-row").click(function() {
|
||||
window.location = $(this).data("href");
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div class="container">
|
||||
|
@ -89,7 +106,7 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
{{#stable}}
|
||||
<tr class="text-white {{#if pos}}bg-success{{/if}}{{#if neg}}bg-danger{{/if}}">
|
||||
<tr class="text-white {{#if pos}}bg-success{{/if}}{{#if neg}}bg-danger{{/if}} link-row" data-href='/composite/{{id}}'>
|
||||
<td>{{name}}</td>
|
||||
<td class="isk">{{i}}</td>
|
||||
<td class="isk">{{tax}}</td>
|
||||
|
@ -156,6 +173,34 @@
|
|||
{{/chtable}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card w-100 mt-3">
|
||||
<div class="card-header bg-info text-white text-center w-100">
|
||||
Unrefined Reactions (not reprocessed)
|
||||
</div>
|
||||
<table width="100%" id="untab" class="table table-bordered text-center">
|
||||
<thead>
|
||||
<th>Reaction</th>
|
||||
<th>Inputs</th>
|
||||
<th>Tax</th>
|
||||
<th>Output</th>
|
||||
<th>Profit</th>
|
||||
<th>% prof.</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#untable}}
|
||||
<tr class="text-white {{#if pos}}bg-success{{/if}}{{#if neg}}bg-danger{{/if}}">
|
||||
<td>{{name}}</td>
|
||||
<td class="isk">{{i}}</td>
|
||||
<td class="isk">{{tax}}</td>
|
||||
<td class="isk">{{o}}</td>
|
||||
<td class="isk">{{prof}}</td>
|
||||
<td>{{per}}</td>
|
||||
</tr>
|
||||
{{/untable}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,77 @@
|
|||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#tab').DataTable( {
|
||||
searching: false,
|
||||
info: false,
|
||||
paging: false,
|
||||
columnsDefs: [
|
||||
null,
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
{ "sType": "numeric" },
|
||||
null
|
||||
]
|
||||
} );
|
||||
});
|
||||
</script>
|
||||
<div class="container">
|
||||
<div class="row mt-5">
|
||||
<h1 class="text-center">Not implemented yet</h1>
|
||||
<div class="row mt-4">
|
||||
<table class="table table-sm table-bordered text-center">
|
||||
<thead>
|
||||
<th>In Method</th>
|
||||
<th>Out Method</th>
|
||||
<th>Reactions</th>
|
||||
<th>Facility</th>
|
||||
<th>Rig</th>
|
||||
<th>Space</th>
|
||||
<th>System</th>
|
||||
<th>IndyTax</th>
|
||||
<th>Build Time</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<td>{{sett.input}}</td>
|
||||
<td>{{sett.output}}</td>
|
||||
<td>Level {{sett.skill}}</td>
|
||||
<td>{{sett.facility}} Refinery</td>
|
||||
<td>T{{sett.rig}} Rig</td>
|
||||
<td>{{sett.space}}sec</td>
|
||||
<td>{{sett.system}}</td>
|
||||
<td>{{sett.indyTax}}</td>
|
||||
<td>{{sett.duration}} Minutes</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row mt-3">
|
||||
<div class="card w-100">
|
||||
<div class="card-header bg-info text-white text-center w-100">
|
||||
Hybrid Reactions
|
||||
</div>
|
||||
<table width="100%" id="tab" class="table table-bordered text-center">
|
||||
<thead>
|
||||
<th>Reaction</th>
|
||||
<th>Inputs</th>
|
||||
<th>Tax</th>
|
||||
<th>Output</th>
|
||||
<th>Profit</th>
|
||||
<th>% prof.</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#htab}}
|
||||
<tr class="text-white {{#if pos}}bg-success{{/if}}{{#if neg}}bg-danger{{/if}}">
|
||||
<td>{{name}}</td>
|
||||
<td class="isk">{{i}}</td>
|
||||
<td class="isk">{{tax}}</td>
|
||||
<td class="isk">{{o}}</td>
|
||||
<td class="isk">{{prof}}</td>
|
||||
<td>{{per}}</td>
|
||||
</tr>
|
||||
{{/htab}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue