Added favor system for companies and factions

This commit is contained in:
Daniel Xie 2017-06-20 11:11:33 -05:00
parent e2fbca1ef0
commit 0449460c4f
13 changed files with 508 additions and 137 deletions

@ -417,6 +417,10 @@ background-color: #555;
margin: 6px; margin: 6px;
} }
#faction-favor, #faction-reputation {
display: inline;
}
#faction-hack-div, #faction-hack-div,
#faction-fieldwork-div, #faction-fieldwork-div,
#faction-securitywork-div, #faction-securitywork-div,
@ -473,6 +477,7 @@ div.faction-clear {
margin-left: 10%; margin-left: 10%;
width: 99%; width: 99%;
color: var(--my-font-color); color: var(--my-font-color);
overflow-y: auto;
} }
#faction-augmentations-container p, #faction-augmentations-container p,
@ -566,3 +571,7 @@ div.faction-clear {
margin: 10px 5px 10px 5px; margin: 10px 5px 10px 5px;
} }
#location-job-reputation, #location-company-favor {
display: inline;
}

@ -457,9 +457,11 @@
<div id="faction-container"> <div id="faction-container">
<h1 id="faction-name"></h1> <h1 id="faction-name"></h1>
<p id="faction-info"></p> <p id="faction-info"></p>
<p> --------------- </p>
<p id="faction-reputation"></p> <p id="faction-reputation" class="tooltip"></p>
<p> --------------- </p>
<p id="faction-favor" class="tooltip"></p>
<p> --------------- </p>
<p id="faction-work-description-text"> <p id="faction-work-description-text">
Perform work/carry out assignments for your faction to help further its cause! By doing so Perform work/carry out assignments for your faction to help further its cause! By doing so
you will gain reputation for your faction. You will also gain reputation passively over time, you will gain reputation for your faction. You will also gain reputation passively over time,
@ -569,7 +571,11 @@
<p id="location-info"> </p> <p id="location-info"> </p>
<p id="location-job-title"> </p> <p id="location-job-title"> </p>
<p id="location-job-reputation"> </p> <p id="location-text-divider-1"> --------------- </p>
<p id="location-job-reputation" class="tooltip"> </p>
<p id="location-text-divider-2"> --------------- </p>
<p id="location-company-favor" class="tooltip"> </p>
<p id="location-text-divider-3"> --------------- </p>
<!-- Jobs/Work at a company --> <!-- Jobs/Work at a company -->
<a id="location-software-job" class="a-link-button"> Apply for Software Job</a> <a id="location-software-job" class="a-link-button"> Apply for Software Job</a>

@ -1,32 +1,26 @@
//Netburner Company class //Netburner Company class
// Note: Company Positions can be loaded every time with init() but Company class needs // Note: Company Positions can be loaded every time with init() but Company class needs
// to be saved/loaded from localStorage // to be saved/loaded from localStorage
function Company() { function Company(name, salaryMult, expMult, jobStatReqOffset) {
this.companyName = ""; this.companyName = name;
this.info = ""; this.info = "";
this.companyPositions = []; //Names (only name, not object) of all company positions this.companyPositions = []; //Names (only name, not object) of all company positions
this.perks = []; //Available Perks this.perks = []; //Available Perks
this.salaryMultiplier = 1; //Multiplier for base salary this.salaryMultiplier = salaryMult; //Multiplier for base salary
this.expMultiplier = 1; //Multiplier for base exp gain this.expMultiplier = expMult; //Multiplier for base exp gain
//The additional levels you need in the relevant stat to qualify for a job. //The additional levels you need in the relevant stat to qualify for a job.
//E.g the offset for a megacorporation will be high, let's say 200, so the //E.g the offset for a megacorporation will be high, let's say 200, so the
//stat level you'd need to get an intern job would be 200 instead of 1. //stat level you'd need to get an intern job would be 200 instead of 1.
this.jobStatReqOffset = 1; this.jobStatReqOffset = jobStatReqOffset;
//Player-related properties for company //Player-related properties for company
this.isPlayerEmployed = false; this.isPlayerEmployed = false;
this.playerPosition = ""; //Name (only name, not object) of the current position player holds this.playerPosition = ""; //Name (only name, not object) of the current position player holds
this.playerReputation = 1; //"Reputation" within company, gain reputation by working for company this.playerReputation = 1; //"Reputation" within company, gain reputation by working for company
this.favor = 0;
}; };
Company.prototype.init = function(name, salaryMult, expMult, jobStatReqOffset) {
this.companyName = name;
this.salaryMultiplier = salaryMult;
this.expMultiplier = expMult;
this.jobStatReqOffset = jobStatReqOffset;
}
Company.prototype.setInfo = function(inf) { Company.prototype.setInfo = function(inf) {
this.info = inf; this.info = inf;
} }
@ -50,6 +44,11 @@ Company.prototype.hasPosition = function(pos) {
return false; return false;
} }
Company.prototype.gainFavor = function() {
if (this.favor == null || this.favor == undefined) {this.favor = 0;}
this.favor += (this.playerReputation / CONSTANTS.CompanyReputationToFavor);
}
Company.prototype.toJSON = function() { Company.prototype.toJSON = function() {
return Generic_toJSON("Company", this); return Generic_toJSON("Company", this);
} }
@ -481,8 +480,7 @@ getNextCompanyPosition = function(currPos) {
initCompanies = function() { initCompanies = function() {
/* Companies that also have servers */ /* Companies that also have servers */
//Megacorporations //Megacorporations
var ECorp = new Company(); var ECorp = new Company(Locations.AevumECorp, 3.0, 3.0, 249);
ECorp.init(Locations.AevumECorp, 3.0, 3.0, 249);
ECorp.addPositions([ ECorp.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -493,10 +491,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.AevumECorp)) {
ECorp.favor = Companies[Locations.AevumECorp].favor;
delete Companies[Locations.AevumECorp];
}
AddToCompanies(ECorp); AddToCompanies(ECorp);
var MegaCorp = new Company(); var MegaCorp = new Company(Locations.Sector12MegaCorp, 3.0, 3.0, 249);
MegaCorp.init(Locations.Sector12MegaCorp, 3.0, 3.0, 249);
MegaCorp.addPositions([ MegaCorp.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -507,10 +508,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.Sector12MegaCorp)) {
MegaCorp.favor = Companies[Locations.Sector12MegaCorp].favor;
delete Companies[Locations.Sector12MegaCorp];
}
AddToCompanies(MegaCorp); AddToCompanies(MegaCorp);
var BachmanAndAssociates = new Company(); var BachmanAndAssociates = new Company(Locations.AevumBachmanAndAssociates, 2.6, 2.6, 224);
BachmanAndAssociates.init(Locations.AevumBachmanAndAssociates, 2.6, 2.6, 224);
BachmanAndAssociates.addPositions([ BachmanAndAssociates.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -521,10 +525,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.AevumBachmanAndAssociates)) {
BachmanAndAssociates.favor = Companies[Locations.AevumBachmanAndAssociates].favor;
delete Companies[Locations.AevumBachmanAndAssociates];
}
AddToCompanies(BachmanAndAssociates); AddToCompanies(BachmanAndAssociates);
var BladeIndustries = new Company(); var BladeIndustries = new Company(Locations.Sector12BladeIndustries, 2.75, 2.75, 224);
BladeIndustries.init(Locations.Sector12BladeIndustries, 2.75, 2.75, 224);
BladeIndustries.addPositions([ BladeIndustries.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -535,10 +542,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.Sector12BladeIndustries)) {
BladeIndustries.favor = Companies[Locations.Sector12BladeIndustries].favor;
delete Companies[Locations.Sector12BladeIndustries];
}
AddToCompanies(BladeIndustries); AddToCompanies(BladeIndustries);
var NWO = new Company(); var NWO = new Company(Locations.VolhavenNWO, 2.75, 2.75, 249);
NWO.init(Locations.VolhavenNWO, 2.75, 2.75, 249);
NWO.addPositions([ NWO.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -549,10 +559,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.VolhavenNWO)) {
NWO.favor = Companies[Locations.VolhavenNWO].favor;
delete Companies[Locations.VolhavenNWO];
}
AddToCompanies(NWO); AddToCompanies(NWO);
var ClarkeIncorporated = new Company(); var ClarkeIncorporated = new Company(Locations.AevumClarkeIncorporated, 2.25, 2.25, 224);
ClarkeIncorporated.init(Locations.AevumClarkeIncorporated, 2.25, 2.25, 224);
ClarkeIncorporated.addPositions([ ClarkeIncorporated.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -563,10 +576,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.AevumClarkeIncorporated)) {
ClarkeIncorporated.favor = Companies[Locations.AevumClarkeIncorporated].favor;
delete Companies[Locations.AevumClarkeIncorporated];
}
AddToCompanies(ClarkeIncorporated); AddToCompanies(ClarkeIncorporated);
var OmniTekIncorporated = new Company(); var OmniTekIncorporated = new Company(Locations.VolhavenOmniTekIncorporated, 2.25, 2.25, 224);
OmniTekIncorporated.init(Locations.VolhavenOmniTekIncorporated, 2.25, 2.25, 224);
OmniTekIncorporated.addPositions([ OmniTekIncorporated.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -577,10 +593,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.VolhavenOmniTekIncorporated)) {
OmniTekIncorporated.favor = Companies[Locations.VolhavenOmniTekIncorporated].favor;
delete Companies[Locations.VolhavenOmniTekIncorporated];
}
AddToCompanies(OmniTekIncorporated); AddToCompanies(OmniTekIncorporated);
var FourSigma = new Company(); var FourSigma = new Company(Locations.Sector12FourSigma, 2.5, 2.5, 224);
FourSigma.init(Locations.Sector12FourSigma, 2.5, 2.5, 224);
FourSigma.addPositions([ FourSigma.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -591,10 +610,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.Sector12FourSigma)) {
FourSigma.favor = Companies[Locations.Sector12FourSigma].favor;
delete Companies[Locations.Sector12FourSigma];
}
AddToCompanies(FourSigma); AddToCompanies(FourSigma);
var KuaiGongInternational = new Company(); var KuaiGongInternational = new Company(Locations.ChongqingKuaiGongInternational, 2.2, 2.2, 224);
KuaiGongInternational.init(Locations.ChongqingKuaiGongInternational, 2.2, 2.2, 224);
KuaiGongInternational.addPositions([ KuaiGongInternational.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -605,11 +627,14 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.ChongqingKuaiGongInternational)) {
KuaiGongInternational.favor = Companies[Locations.ChongqingKuaiGongInternational].favor;
delete Companies[Locations.ChongqingKuaiGongInternational];
}
AddToCompanies(KuaiGongInternational); AddToCompanies(KuaiGongInternational);
//Technology and communication companies ("Large" servers) //Technology and communication companies ("Large" servers)
var FulcrumTechnologies = new Company(); var FulcrumTechnologies = new Company(Locations.AevumFulcrumTechnologies, 2.0, 2.0, 224);
FulcrumTechnologies.init(Locations.AevumFulcrumTechnologies, 2.0, 2.0, 224);
FulcrumTechnologies.addPositions([ FulcrumTechnologies.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -619,10 +644,13 @@ initCompanies = function() {
CompanyPositions.VicePresident, CompanyPositions.CTO, CompanyPositions.BusinessAnalyst, CompanyPositions.VicePresident, CompanyPositions.CTO, CompanyPositions.BusinessAnalyst,
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO]); CompanyPositions.CEO]);
if (companyExists(Locations.AevumFulcrumTechnologies)) {
FulcrumTechnologies.favor = Companies[Locations.AevumFulcrumTechnologies].favor;
delete Companies[Locations.AevumFulcrumTechnologies];
}
AddToCompanies(FulcrumTechnologies); AddToCompanies(FulcrumTechnologies);
var StormTechnologies = new Company(); var StormTechnologies = new Company(Locations.IshimaStormTechnologies, 1.8, 1.8, 199);
StormTechnologies.init(Locations.IshimaStormTechnologies, 1.8, 1.8, 199);
StormTechnologies.addPositions([ StormTechnologies.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.SoftwareIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -633,10 +661,13 @@ initCompanies = function() {
CompanyPositions.VicePresident, CompanyPositions.CTO, CompanyPositions.BusinessAnalyst, CompanyPositions.VicePresident, CompanyPositions.CTO, CompanyPositions.BusinessAnalyst,
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
CompanyPositions.CEO]); CompanyPositions.CEO]);
if (companyExists(Locations.IshimaStormTechnologies)) {
StormTechnologies.favor = Companies[Locations.IshimaStormTechnologies].favor;
delete Companies[Locations.IshimaStormTechnologies];
}
AddToCompanies(StormTechnologies); AddToCompanies(StormTechnologies);
var DefComm = new Company(); var DefComm = new Company(Locations.NewTokyoDefComm, 1.75, 1.75, 199);
DefComm.init(Locations.NewTokyoDefComm, 1.75, 1.75, 199);
DefComm.addPositions([ DefComm.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -644,10 +675,13 @@ initCompanies = function() {
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer, CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CFO, CompanyPositions.CEO]); CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CFO, CompanyPositions.CEO]);
if (companyExists(Locations.NewTokyoDefComm)) {
DefComm.favor = Companies[Locations.NewTokyoDefComm].favor;
delete Companies[Locations.NewTokyoDefComm];
}
AddToCompanies(DefComm); AddToCompanies(DefComm);
var HeliosLabs = new Company(); var HeliosLabs = new Company(Locations.VolhavenHeliosLabs, 1.8, 1.8, 199);
HeliosLabs.init(Locations.VolhavenHeliosLabs, 1.8, 1.8, 199);
HeliosLabs.addPositions([ HeliosLabs.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -655,10 +689,13 @@ initCompanies = function() {
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer, CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CFO, CompanyPositions.CEO]); CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CFO, CompanyPositions.CEO]);
if (companyExists(Locations.VolhavenHeliosLabs)) {
HeliosLabs.favor = Companies[Locations.VolhavenHeliosLabs].favor;
delete Companies[Locations.VolhavenHeliosLabs];
}
AddToCompanies(HeliosLabs); AddToCompanies(HeliosLabs);
var VitaLife = new Company(); var VitaLife = new Company(Locations.NewTokyoVitaLife, 1.8, 1.8, 199);
VitaLife.init(Locations.NewTokyoVitaLife, 1.8, 1.8, 199);
VitaLife.addPositions([ VitaLife.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -667,10 +704,13 @@ initCompanies = function() {
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager, CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]); CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
if (companyExists(Locations.NewTokyoVitaLife)) {
VitaLife.favor = Companies[Locations.NewTokyoVitaLife].favor;
delete Companies[Locations.NewTokyoVitaLife];
}
AddToCompanies(VitaLife); AddToCompanies(VitaLife);
var IcarusMicrosystems = new Company(); var IcarusMicrosystems = new Company(Locations.Sector12IcarusMicrosystems, 1.9, 1.9, 199);
IcarusMicrosystems.init(Locations.Sector12IcarusMicrosystems, 1.9, 1.9, 199);
IcarusMicrosystems.addPositions([ IcarusMicrosystems.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -679,10 +719,13 @@ initCompanies = function() {
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager, CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]); CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
if (companyExists(Locations.Sector12IcarusMicrosystems)) {
IcarusMicrosystems.favor = Companies[Locations.Sector12IcarusMicrosystems].favor;
delete Companies[Locations.Sector12IcarusMicrosystems];
}
AddToCompanies(IcarusMicrosystems); AddToCompanies(IcarusMicrosystems);
var UniversalEnergy = new Company(); var UniversalEnergy = new Company(Locations.Sector12UniversalEnergy, 2.0, 2.0, 199);
UniversalEnergy.init(Locations.Sector12UniversalEnergy, 2.0, 2.0, 199);
UniversalEnergy.addPositions([ UniversalEnergy.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -691,10 +734,13 @@ initCompanies = function() {
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager, CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]); CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
if (companyExists(Locations.Sector12UniversalEnergy)) {
UniversalEnergy.favor = Companies[Locations.Sector12UniversalEnergy].favor;
delete Companies[Locations.Sector12UniversalEnergy];
}
AddToCompanies(UniversalEnergy); AddToCompanies(UniversalEnergy);
var GalacticCybersystems = new Company(); var GalacticCybersystems = new Company(Locations.AevumGalacticCybersystems, 1.9, 1.9, 199);
GalacticCybersystems.init(Locations.AevumGalacticCybersystems, 1.9, 1.9, 199);
GalacticCybersystems.addPositions([ GalacticCybersystems.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -703,11 +749,14 @@ initCompanies = function() {
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager, CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]); CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
if (companyExists(Locations.AevumGalacticCybersystems)) {
GalacticCybersystems.favor = Companies[Locations.AevumGalacticCybersystems].favor;
delete Companies[Locations.AevumGalacticCybersystems];
}
AddToCompanies(GalacticCybersystems); AddToCompanies(GalacticCybersystems);
//Defense Companies ("Large" Companies) //Defense Companies ("Large" Companies)
var AeroCorp = new Company(); var AeroCorp = new Company(Locations.AevumAeroCorp, 1.7, 1.7, 199);
AeroCorp.init(Locations.AevumAeroCorp, 1.7, 1.7, 199);
AeroCorp.addPositions([ AeroCorp.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
@ -717,10 +766,13 @@ initCompanies = function() {
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
CompanyPositions.HeadOfSecurity]); CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.AevumAeroCorp)) {
AeroCorp.favor = Companies[Locations.AevumAeroCorp].favor;
delete Companies[Locations.AevumAeroCorp];
}
AddToCompanies(AeroCorp); AddToCompanies(AeroCorp);
var OmniaCybersystems = new Company(); var OmniaCybersystems = new Company(Locations.VolhavenOmniaCybersystems, 1.7, 1.7, 199);
OmniaCybersystems.init(Locations.VolhavenOmniaCybersystems, 1.7, 1.7, 199);
OmniaCybersystems.addPositions([ OmniaCybersystems.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
@ -730,10 +782,13 @@ initCompanies = function() {
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
CompanyPositions.HeadOfSecurity]); CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.VolhavenOmniaCybersystems)) {
OmniaCybersystems.favor = Companies[Locations.VolhavenOmniaCybersystems].favor;
delete Companies[Locations.VolhavenOmniaCybersystems];
}
AddToCompanies(OmniaCybersystems); AddToCompanies(OmniaCybersystems);
var SolarisSpaceSystems = new Company(); var SolarisSpaceSystems = new Company(Locations.ChongqingSolarisSpaceSystems, 1.7, 1.7, 199);
SolarisSpaceSystems.init(Locations.ChongqingSolarisSpaceSystems, 1.7, 1.7, 199);
SolarisSpaceSystems.addPositions([ SolarisSpaceSystems.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
@ -743,10 +798,13 @@ initCompanies = function() {
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
CompanyPositions.HeadOfSecurity]); CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.ChongqingSolarisSpaceSystems)) {
SolarisSpaceSystems.favor = Companies[Locations.ChongqingSolarisSpaceSystems].favor;
delete Companies[Locations.ChongqingSolarisSpaceSystems];
}
AddToCompanies(SolarisSpaceSystems); AddToCompanies(SolarisSpaceSystems);
var DeltaOne = new Company(); var DeltaOne = new Company(Locations.Sector12DeltaOne, 1.6, 1.6, 199);
DeltaOne.init(Locations.Sector12DeltaOne, 1.6, 1.6, 199);
DeltaOne.addPositions([ DeltaOne.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
@ -756,11 +814,14 @@ initCompanies = function() {
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
CompanyPositions.HeadOfSecurity]); CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.Sector12DeltaOne)) {
DeltaOne.favor = Companies[Locations.Sector12DeltaOne].favor;
delete Companies[Locations.Sector12DeltaOne];
}
AddToCompanies(DeltaOne); AddToCompanies(DeltaOne);
//Health, medicine, pharmaceutical companies ("Large" servers) //Health, medicine, pharmaceutical companies ("Large" servers)
var GlobalPharmaceuticals = new Company(); var GlobalPharmaceuticals = new Company(Locations.NewTokyoGlobalPharmaceuticals, 1.8, 1.8, 224);
GlobalPharmaceuticals.init(Locations.NewTokyoGlobalPharmaceuticals, 1.8, 1.8, 224);
GlobalPharmaceuticals.addPositions([ GlobalPharmaceuticals.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -771,10 +832,13 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager,
CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.SecurityGuard,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.NewTokyoGlobalPharmaceuticals)) {
GlobalPharmaceuticals.favor = Companies[Locations.NewTokyoGlobalPharmaceuticals].favor;
delete Companies[Locations.NewTokyoGlobalPharmaceuticals];
}
AddToCompanies(GlobalPharmaceuticals); AddToCompanies(GlobalPharmaceuticals);
var NovaMedical = new Company(); var NovaMedical = new Company(Locations.IshimaNovaMedical, 1.75, 1.75, 199);
NovaMedical.init(Locations.IshimaNovaMedical, 1.75, 1.75, 199);
NovaMedical.addPositions([ NovaMedical.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern, CompanyPositions.SoftwareIntern, CompanyPositions.ITIntern, CompanyPositions.BusinessIntern,
CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.LeadDev,
@ -785,11 +849,14 @@ initCompanies = function() {
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.BusinessManager, CompanyPositions.OperationsManager,
CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.SecurityGuard, CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.SecurityGuard,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.IshimaNovaMedical)) {
NovaMedical.favor = Companies[Locations.IshimaNovaMedical].favor;
delete Companies[Locations.IshimaNovaMedical];
}
AddToCompanies(NovaMedical); AddToCompanies(NovaMedical);
//Other large companies //Other large companies
var CIA = new Company(); var CIA = new Company(Locations.Sector12CIA, 2.0, 2.0, 149);
CIA.init(Locations.Sector12CIA, 2.0, 2.0, 149);
CIA.addPositions([ CIA.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
@ -798,10 +865,13 @@ initCompanies = function() {
CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent, CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent,
CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]); CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]);
if (companyExists(Locations.Sector12CIA)) {
CIA.favor = Companies[Locations.Sector12CIA].favor;
delete Companies[Locations.Sector12CIA];
}
AddToCompanies(CIA); AddToCompanies(CIA);
var NSA = new Company(); var NSA = new Company(Locations.Sector12NSA, 2.0, 2.0, 149);
NSA.init(Locations.Sector12NSA, 2.0, 2.0, 149);
NSA.addPositions([ NSA.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
@ -810,10 +880,13 @@ initCompanies = function() {
CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent, CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent,
CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]); CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]);
if (companyExists(Locations.Sector12NSA)) {
NSA.favor = Companies[Locations.Sector12NSA].favor;
delete Companies[Locations.Sector12NSA];
}
AddToCompanies(NSA); AddToCompanies(NSA);
var WatchdogSecurity = new Company(); var WatchdogSecurity = new Company(Locations.AevumWatchdogSecurity, 1.5, 1.5, 124);
WatchdogSecurity.init(Locations.AevumWatchdogSecurity, 1.5, 1.5, 124);
WatchdogSecurity.addPositions([ WatchdogSecurity.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -823,11 +896,14 @@ initCompanies = function() {
CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent, CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent,
CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]); CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]);
if (companyExists(Locations.AevumWatchdogSecurity)) {
WatchdogSecurity.favor = Companies[Locations.AevumWatchdogSecurity].favor;
delete Companies[Locations.AevumWatchdogSecurity];
}
AddToCompanies(WatchdogSecurity); AddToCompanies(WatchdogSecurity);
//"Medium level" companies //"Medium level" companies
var LexoCorp = new Company(); var LexoCorp = new Company(Locations.VolhavenLexoCorp, 1.4, 1.4, 99);
LexoCorp.init(Locations.VolhavenLexoCorp, 1.4, 1.4, 99);
LexoCorp.addPositions([ LexoCorp.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -837,44 +913,59 @@ initCompanies = function() {
CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst, CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst,
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO, CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.HeadOfSecurity]); CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.HeadOfSecurity]);
if (companyExists(Locations.VolhavenLexoCorp)) {
LexoCorp.favor = Companies[Locations.VolhavenLexoCorp].favor;
delete Companies[Locations.VolhavenLexoCorp];
}
AddToCompanies(LexoCorp); AddToCompanies(LexoCorp);
var RhoConstruction = new Company(); var RhoConstruction = new Company(Locations.AevumRhoConstruction, 1.3, 1.3, 49);
RhoConstruction.init(Locations.AevumRhoConstruction, 1.3, 1.3, 49);
RhoConstruction.addPositions([ RhoConstruction.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst, CompanyPositions.LeadDev, CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst,
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager]); CompanyPositions.BusinessManager, CompanyPositions.OperationsManager]);
if (companyExists(Locations.AevumRhoConstruction)) {
RhoConstruction.favor = Companies[Locations.AevumRhoConstruction].favor;
delete Companies[Locations.AevumRhoConstruction];
}
AddToCompanies(RhoConstruction); AddToCompanies(RhoConstruction);
var AlphaEnterprises = new Company(); var AlphaEnterprises = new Company(Locations.Sector12AlphaEnterprises, 1.5, 1.5, 99);
AlphaEnterprises.init(Locations.Sector12AlphaEnterprises, 1.5, 1.5, 99);
AlphaEnterprises.addPositions([ AlphaEnterprises.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst, CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst,
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager]); CompanyPositions.BusinessManager, CompanyPositions.OperationsManager]);
if (companyExists(Locations.Sector12AlphaEnterprises)) {
AlphaEnterprises.favor = Companies[Locations.Sector12AlphaEnterprises].favor;
delete Companies[Locations.Sector12AlphaEnterprises];
}
AddToCompanies(AlphaEnterprises); AddToCompanies(AlphaEnterprises);
var AevumPolice = new Company(); var AevumPolice = new Company(Locations.AevumPolice, 1.3, 1.3, 99);
AevumPolice.init(Locations.AevumPolice, 1.3, 1.3, 99);
AevumPolice.addPositions([ AevumPolice.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SecurityGuard, CompanyPositions.PoliceOfficer]); CompanyPositions.LeadDev, CompanyPositions.SecurityGuard, CompanyPositions.PoliceOfficer]);
if (companyExists(Locations.AevumPolice)) {
AevumPolice.favor = Companies[Locations.AevumPolice].favor;
delete Companies[Locations.AevumPolice];
}
AddToCompanies(AevumPolice); AddToCompanies(AevumPolice);
var SysCoreSecurities = new Company(); var SysCoreSecurities = new Company(Locations.VolhavenSysCoreSecurities, 1.3, 1.3, 124);
SysCoreSecurities.init(Locations.VolhavenSysCoreSecurities, 1.3, 1.3, 124);
SysCoreSecurities.addPositions([ SysCoreSecurities.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.LeadDev, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer, CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.CTO]); CompanyPositions.CTO]);
if (companyExists(Locations.VolhavenSysCoreSecurities)) {
SysCoreSecurities.favor = Companies[Locations.VolhavenSysCoreSecurities].favor;
delete Companies[Locations.VolhavenSysCoreSecurities];
}
AddToCompanies(SysCoreSecurities); AddToCompanies(SysCoreSecurities);
var CompuTek = new Company(); var CompuTek = new Company(Locations.VolhavenCompuTek, 1.2, 1.2, 74);
CompuTek.init(Locations.VolhavenCompuTek, 1.2, 1.2, 74);
CompuTek.addPositions([ CompuTek.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -882,10 +973,13 @@ initCompanies = function() {
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer, CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.CTO]); CompanyPositions.CTO]);
if (companyExists(Locations.VolhavenCompuTek)) {
CompuTek.favor = Companies[Locations.VolhavenCompuTek].favor;
delete Companies[Locations.VolhavenCompuTek];
}
AddToCompanies(CompuTek); AddToCompanies(CompuTek);
var NetLinkTechnologies = new Company(); var NetLinkTechnologies = new Company(Locations.AevumNetLinkTechnologies, 1.2, 1.2, 99);
NetLinkTechnologies.init(Locations.AevumNetLinkTechnologies, 1.2, 1.2, 99);
NetLinkTechnologies.addPositions([ NetLinkTechnologies.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -893,10 +987,13 @@ initCompanies = function() {
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer, CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
CompanyPositions.CTO]); CompanyPositions.CTO]);
if (companyExists(Locations.AevumNetLinkTechnologies)) {
NetLinkTechnologies.favor = Companies[Locations.AevumNetLinkTechnologies].favor;
delete Companies[Locations.AevumNetLinkTechnologies];
}
AddToCompanies(NetLinkTechnologies); AddToCompanies(NetLinkTechnologies);
var CarmichaelSecurity = new Company(); var CarmichaelSecurity = new Company(Locations.Sector12CarmichaelSecurity, 1.2, 1.2, 74);
CarmichaelSecurity.init(Locations.Sector12CarmichaelSecurity, 1.2, 1.2, 74);
CarmichaelSecurity.addPositions([ CarmichaelSecurity.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
@ -906,32 +1003,48 @@ initCompanies = function() {
CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.HeadOfEngineering, CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer,
CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent, CompanyPositions.SecuritySupervisor, CompanyPositions.HeadOfSecurity, CompanyPositions.FieldAgent,
CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]); CompanyPositions.SecretAgent, CompanyPositions.SpecialOperative]);
if (companyExists(Locations.Sector12CarmichaelSecurity)) {
CarmichaelSecurity.favor = Companies[Locations.Sector12CarmichaelSecurity].favor;
delete Companies[Locations.Sector12CarmichaelSecurity];
}
AddToCompanies(CarmichaelSecurity); AddToCompanies(CarmichaelSecurity);
//"Low level" companies //"Low level" companies
var FoodNStuff = new Company(); var FoodNStuff = new Company(Locations.Sector12FoodNStuff, 1, 1, 0);
FoodNStuff.init(Locations.Sector12FoodNStuff, 1, 1, 0);
FoodNStuff.addPositions([CompanyPositions.Employee, CompanyPositions.PartTimeEmployee]); FoodNStuff.addPositions([CompanyPositions.Employee, CompanyPositions.PartTimeEmployee]);
if (companyExists(Locations.Sector12FoodNStuff)) {
FoodNStuff.favor = Companies[Locations.Sector12FoodNStuff].favor;
delete Companies[Locations.Sector12FoodNStuff];
}
AddToCompanies(FoodNStuff); AddToCompanies(FoodNStuff);
var JoesGuns = new Company(); var JoesGuns = new Company(Locations.Sector12JoesGuns, 1, 1, 0);
JoesGuns.init(Locations.Sector12JoesGuns, 1, 1, 0);
JoesGuns.addPositions([CompanyPositions.Employee, CompanyPositions.PartTimeEmployee]); JoesGuns.addPositions([CompanyPositions.Employee, CompanyPositions.PartTimeEmployee]);
if (companyExists(Locations.Sector12JoesGuns)) {
JoesGuns.favor = Companies[Locations.Sector12JoesGuns].favor;
delete Companies[Locations.Sector12JoesGuns];
}
AddToCompanies(JoesGuns); AddToCompanies(JoesGuns);
var OmegaSoftware = new Company(); var OmegaSoftware = new Company(Locations.IshimaOmegaSoftware, 1.1, 1.1, 49);
OmegaSoftware.init(Locations.IshimaOmegaSoftware, 1.1, 1.1, 49);
OmegaSoftware.addPositions([ OmegaSoftware.addPositions([
CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev, CompanyPositions.SoftwareIntern, CompanyPositions.JuniorDev, CompanyPositions.SeniorDev,
CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant, CompanyPositions.LeadDev, CompanyPositions.SoftwareConsultant, CompanyPositions.SeniorSoftwareConsultant,
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst, CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
CompanyPositions.ITManager, CompanyPositions.CTO, CompanyPositions.CEO]); CompanyPositions.ITManager, CompanyPositions.CTO, CompanyPositions.CEO]);
if (companyExists(Locations.IshimaOmegaSoftware)) {
OmegaSoftware.favor = Companies[Locations.IshimaOmegaSoftware].favor;
delete Companies[Locations.IshimaOmegaSoftware];
}
AddToCompanies(OmegaSoftware); AddToCompanies(OmegaSoftware);
/* Companies that do not have servers */ /* Companies that do not have servers */
var NoodleBar = new Company(); var NoodleBar = new Company(Locations.NewTokyoNoodleBar, 1, 1, 0);
NoodleBar.init(Locations.NewTokyoNoodleBar, 1, 1, 0);
NoodleBar.addPositions([CompanyPositions.Waiter, CompanyPositions.PartTimeWaiter]); NoodleBar.addPositions([CompanyPositions.Waiter, CompanyPositions.PartTimeWaiter]);
if (companyExists(Locations.NewTokyoNoodleBar)) {
NoodleBar.favor = Companies[Locations.NewTokyoNoodleBar].favor;
delete Companies[Locations.NewTokyoNoodleBar];
}
AddToCompanies(NoodleBar); AddToCompanies(NoodleBar);
} }
@ -943,3 +1056,7 @@ AddToCompanies = function (company) {
var name = company.companyName; var name = company.companyName;
Companies[name] = company; Companies[name] = company;
} }
function companyExists(name) {
return Companies.hasOwnProperty(name);
}

@ -28,6 +28,10 @@ CONSTANTS = {
HacknetNodeMaxRam: 64, HacknetNodeMaxRam: 64,
HacknetNodeMaxCores: 16, HacknetNodeMaxCores: 16,
/* Faction and Company favor */
FactionReputationToFavor: 7500,
CompanyReputationToFavor: 5000,
/* Augmentation */ /* Augmentation */
//NeuroFlux Governor cost multiplier as you level up //NeuroFlux Governor cost multiplier as you level up
NeuroFluxGovernorLevelMult: 1.13, NeuroFluxGovernorLevelMult: 1.13,
@ -67,6 +71,8 @@ CONSTANTS = {
ScriptHNUpgRamRamCost: 0.6, ScriptHNUpgRamRamCost: 0.6,
ScriptHNUpgCoreRamCost: 0.8, ScriptHNUpgCoreRamCost: 0.8,
MultithreadingRAMCost: 1.002,
//Server constants //Server constants
ServerBaseGrowthRate: 1.03, //Unadjusted Growth rate ServerBaseGrowthRate: 1.03, //Unadjusted Growth rate
ServerMaxGrowthRate: 1.0045, //Maximum possible growth rate (max rate accounting for server security) ServerMaxGrowthRate: 1.0045, //Maximum possible growth rate (max rate accounting for server security)
@ -281,7 +287,7 @@ CONSTANTS = {
"yield $50,000. <br><br> " + "yield $50,000. <br><br> " +
"Each additional thread to a script will slightly increase the RAM usage for that thread. The total cost of running a script with " + "Each additional thread to a script will slightly increase the RAM usage for that thread. The total cost of running a script with " +
"n threads can be calculated with: <br>" + "n threads can be calculated with: <br>" +
"base cost * n * (1.01 ^ n) <br>" + "base cost * n * (1.005 ^ n) <br>" +
"where the base cost is the amount of RAM required to run the script with a single thread. In the terminal, you can run the " + "where the base cost is the amount of RAM required to run the script with a single thread. In the terminal, you can run the " +
"'mem [scriptname] -t n' command to see how much RAM a script requires with n threads. <br><br>" + "'mem [scriptname] -t n' command to see how much RAM a script requires with n threads. <br><br>" +
"Every method for running a script has an option for making it multihreaded. To run a script with " + "Every method for running a script has an option for making it multihreaded. To run a script with " +
@ -471,6 +477,11 @@ CONSTANTS = {
"hostname or IP of the target server. Does NOT work while offline <br> Example: getServerMoneyAvailable('foodnstuff');<br><br>" + "hostname or IP of the target server. Does NOT work while offline <br> Example: getServerMoneyAvailable('foodnstuff');<br><br>" +
"<i>getServerSecurityLevel(hostname/ip)</i><br>Returns the security level of a server. The argument passed in must be a string with either the " + "<i>getServerSecurityLevel(hostname/ip)</i><br>Returns the security level of a server. The argument passed in must be a string with either the " +
"hostname or IP of the target server. A server's security is denoted by a number between 1 and 100. Does NOT work while offline.<br><br>" + "hostname or IP of the target server. A server's security is denoted by a number between 1 and 100. Does NOT work while offline.<br><br>" +
"<i>getServerBaseSecurityLevel(hostname/ip)</i><br> Returns the base security level of a server. This is the security level that the server starts out with. " +
"This is different than getServerSecurityLevel() because getServerSecurityLevel() returns the current security level of a server, which can constantly change " +
"due to hack(), grow(), and weaken() calls on that server. The base security level will stay the same until you reset by installing an Augmentation. <br><br>" +
"The argument passed in must be a string with either the hostname or IP of the target server. A server's base security is denoted by a number between 1 and 100. " +
"Does NOT work while offline.<br><br>" +
"<i>getServerRequiredHackingLevel(hostname/ip)</i><br> Returns the required hacking level of a server. The argument passed in must be a string with either the " + "<i>getServerRequiredHackingLevel(hostname/ip)</i><br> Returns the required hacking level of a server. The argument passed in must be a string with either the " +
"hostname or IP or the target server. Does NOT work while offline <br><br>" + "hostname or IP or the target server. Does NOT work while offline <br><br>" +
"<i>fileExists(filename, [hostname/ip])</i><br> Returns a boolean (true or false) indicating whether the specified file exists on a server. " + "<i>fileExists(filename, [hostname/ip])</i><br> Returns a boolean (true or false) indicating whether the specified file exists on a server. " +
@ -643,21 +654,26 @@ CONSTANTS = {
"RAM Upgrades on your home computer", "RAM Upgrades on your home computer",
Changelog: Changelog:
"v0.21.2<br>" + "v0.22.0 - Major rebalancing, optimization, and favor system<br>" +
"-Significantly nerfed most augmentations<br>" + "-Significantly nerfed most augmentations<br>" +
"-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation " + "-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation " +
"purchase, the required hacking level, base security level, and growth factor of these servers will all be slightly different<br>" + "purchase, the required hacking level, base security level, and growth factor of these servers will all be slightly different<br>" +
"-The hacking speed multiplier now increases rather than decreases. The hacking time is divided by your hacking speed " + "-The hacking speed multiplier now increases rather than decreases. The hacking time is now divided by your hacking speed " +
"multiplier rather than multiplied. In other words, a higher hacking speed multiplier is better now<br>" + "multiplier rather than multiplied. In other words, a higher hacking speed multiplier is better<br>" +
"-Servers now have a minimum server security, which is approximately one third of their starting server security<br>" + "-Servers now have a minimum server security, which is approximately one third of their starting ('base') server security<br>" +
"-If you do not steal any money from a server, then you gain hacking experience equal to the amount you would have gained " + "-If you do not steal any money from a server, then you gain hacking experience equal to the amount you would have gained " +
"had you failed the hack<br>" + "had you failed the hack<br>" +
"-The effects of grow() increased by 50%<br>" + "-The effects of grow() were increased by 50%<br>" +
"-grow() and weaken() now give hacking experience based on the server's base security level, rather than a flat exp amount<br>" + "-grow() and weaken() now give hacking experience based on the server's base security level, rather than a flat exp amount<br>" +
"-Slightly reduced amount of exp gained from hack(), weaken(), and grow()<br>" + "-Slightly reduced amount of exp gained from hack(), weaken(), and grow()<br>" +
"-Rebalanced formulas that determine crime success<br>" + "-Rebalanced formulas that determine crime success<br>" +
"-Reduced RAM cost for multithreading a script. The RAM multiplier for each thread was reduced from 1.02 to 1.01<br>" + "-Reduced RAM cost for multithreading a script. The RAM multiplier for each thread was reduced from 1.02 to 1.005<br>" +
"-Optimized Script objects so they take less space in the save file<br>" + "-Optimized Script objects so they take less space in the save file<br>" +
"-Added getServerBaseSecurityLevel() Netscript function<br>" +
"-New favor system for companies and factions. Earning reputation at a company/faction will give you favor for that entity when you " +
"reset after installing an Augmentation. This favor persists through the rest of the game. The more favor you have, the faster you will earn " +
"reputation with that faction<br>" +
"-You can no longer donate to a faction for reputation until you have 150 favor with that faction<br><br>" +
"v0.21.1<br>" + "v0.21.1<br>" +
"-IF YOUR GAME BREAKS, DO THE FOLLOWING: Options -> Soft Reset -> Save Game -> Reload Page. Sorry about that! <br>" + "-IF YOUR GAME BREAKS, DO THE FOLLOWING: Options -> Soft Reset -> Save Game -> Reload Page. Sorry about that! <br>" +
"-Autocompletion for aliases - courtesy of Github user LTCNugget<br><br>" + "-Autocompletion for aliases - courtesy of Github user LTCNugget<br><br>" +

@ -30,6 +30,9 @@ function Faction(name) {
//Multipliers for unlocking and purchasing augmentations //Multipliers for unlocking and purchasing augmentations
this.augmentationPriceMult = 1; this.augmentationPriceMult = 1;
this.augmentationRepRequirementMult = 1; this.augmentationRepRequirementMult = 1;
//Faction favor
this.favor = 0;
}; };
Faction.prototype.setAugmentationMultipliers = function(price, rep) { Faction.prototype.setAugmentationMultipliers = function(price, rep) {
@ -41,6 +44,12 @@ Faction.prototype.setInfo = function(inf) {
this.info = inf; this.info = inf;
} }
Faction.prototype.gainFavor = function() {
if (this.favor == null || this.favor == undefined) {this.favor = 0;}
var gain = (this.playerReputation / CONSTANTS.FactionReputationToFavor);
this.favor += gain;
}
Faction.prototype.toJSON = function() { Faction.prototype.toJSON = function() {
return Generic_toJSON("Faction", this); return Generic_toJSON("Faction", this);
} }
@ -59,115 +68,267 @@ AddToFactions = function(faction) {
Factions[name] = faction; Factions[name] = faction;
} }
function factionExists(name) {
return Factions.hasOwnProperty(name);
}
//TODO Augmentation price and rep requirement mult are 1 for everything right now, //TODO Augmentation price and rep requirement mult are 1 for everything right now,
// This might change in the future for balance // This might change in the future for balance
initFactions = function() { initFactions = function() {
//Endgame //Endgame
var Illuminati = new Faction("Illuminati"); var Illuminati = new Faction("Illuminati");
Illuminati.setInfo(FactionInfo.IlluminatiInfo); Illuminati.setInfo(FactionInfo.IlluminatiInfo);
if (factionExists("Illuminati")) {
Illuminati.favor = Factions["Illuminati"].favor;
delete Factions["Illuminati"];
}
AddToFactions(Illuminati); AddToFactions(Illuminati);
var Daedalus = new Faction("Daedalus"); var Daedalus = new Faction("Daedalus");
Daedalus.setInfo(FactionInfo.DaedalusInfo); Daedalus.setInfo(FactionInfo.DaedalusInfo);
if (factionExists("Daedalus")) {
Daedalus.favor = Factions["Daedalus"].favor;
delete Factions["Daedalus"];
}
AddToFactions(Daedalus); AddToFactions(Daedalus);
var Covenant = new Faction("The Covenant"); var Covenant = new Faction("The Covenant");
Covenant.setInfo(FactionInfo.CovenantInfo); Covenant.setInfo(FactionInfo.CovenantInfo);
if (factionExists("The Covenant")) {
Covenant.favor = Factions["The Covenant"].favor;
delete Factions["The Covenant"];
}
AddToFactions(Covenant); AddToFactions(Covenant);
//Megacorporations, each forms its own faction //Megacorporations, each forms its own faction
var ECorp = new Faction("ECorp"); var ECorp = new Faction("ECorp");
ECorp.setInfo(FactionInfo.ECorpInfo); ECorp.setInfo(FactionInfo.ECorpInfo);
if (factionExists("ECorp")) {
ECorp.favor = Factions["ECorp"].favor;
delete Factions["ECorp"];
}
AddToFactions(ECorp); AddToFactions(ECorp);
var MegaCorp = new Faction("MegaCorp"); var MegaCorp = new Faction("MegaCorp");
MegaCorp.setInfo(FactionInfo.MegaCorpInfo); MegaCorp.setInfo(FactionInfo.MegaCorpInfo);
if (factionExists("MegaCorp")) {
MegaCorp.favor = Factions["MegaCorp"].favor;
delete Factions["MegaCorp"];
}
AddToFactions(MegaCorp); AddToFactions(MegaCorp);
var BachmanAndAssociates = new Faction("Bachman & Associates"); var BachmanAndAssociates = new Faction("Bachman & Associates");
BachmanAndAssociates.setInfo(FactionInfo.BachmanAndAssociatesInfo); BachmanAndAssociates.setInfo(FactionInfo.BachmanAndAssociatesInfo);
if (factionExists("Bachman & Associates")) {
BachmanAndAssociates.favor = Factions["Bachman & Associates"].favor;
delete Factions["Bachman & Associates"];
}
AddToFactions(BachmanAndAssociates); AddToFactions(BachmanAndAssociates);
var BladeIndustries = new Faction("Blade Industries"); var BladeIndustries = new Faction("Blade Industries");
BladeIndustries.setInfo(FactionInfo.BladeIndustriesInfo); BladeIndustries.setInfo(FactionInfo.BladeIndustriesInfo);
if (factionExists("Blade Industries")) {
BladeIndustries.favor = Factions["Blade Industries"].favor;
delete Factions["Blade Industries"];
}
AddToFactions(BladeIndustries); AddToFactions(BladeIndustries);
var NWO = new Faction("NWO"); var NWO = new Faction("NWO");
NWO.setInfo(FactionInfo.NWOInfo); NWO.setInfo(FactionInfo.NWOInfo);
if (factionExists("NWO")) {
NWO.favor = Factions["NWO"].favor;
delete Factions["NWO"];
}
AddToFactions(NWO); AddToFactions(NWO);
var ClarkeIncorporated = new Faction("Clarke Incorporated"); var ClarkeIncorporated = new Faction("Clarke Incorporated");
ClarkeIncorporated.setInfo(FactionInfo.ClarkeIncorporatedInfo); ClarkeIncorporated.setInfo(FactionInfo.ClarkeIncorporatedInfo);
if (factionExists("Clarke Incorporated")) {
ClarkeIncorporated.favor = Factions["Clarke Incorporated"].favor;
delete Factions["Clarke Incorporated"];
}
AddToFactions(ClarkeIncorporated); AddToFactions(ClarkeIncorporated);
var OmniTekIncorporated = new Faction("OmniTek Incorporated"); var OmniTekIncorporated = new Faction("OmniTek Incorporated");
OmniTekIncorporated.setInfo(FactionInfo.OmniTekIncorporatedInfo); OmniTekIncorporated.setInfo(FactionInfo.OmniTekIncorporatedInfo);
if (factionExists("OmniTek Incorporated")) {
OmniTekIncorporated.favor = Factions["OmniTek Incorporated"].favor;
delete Factions["OmniTek Incorporated"];
}
AddToFactions(OmniTekIncorporated); AddToFactions(OmniTekIncorporated);
var FourSigma = new Faction("Four Sigma"); var FourSigma = new Faction("Four Sigma");
FourSigma.setInfo(FactionInfo.FourSigmaInfo); FourSigma.setInfo(FactionInfo.FourSigmaInfo);
if (factionExists("Four Sigma")) {
FourSigma.favor = Factions["Four Sigma"].favor;
delete Factions["Four Sigma"];
}
AddToFactions(FourSigma); AddToFactions(FourSigma);
var KuaiGongInternational = new Faction("KuaiGong International"); var KuaiGongInternational = new Faction("KuaiGong International");
KuaiGongInternational.setInfo(FactionInfo.KuaiGongInternationalInfo); KuaiGongInternational.setInfo(FactionInfo.KuaiGongInternationalInfo);
if (factionExists("KuaiGong International")) {
KuaiGongInternational.favor = Factions["KuaiGong International"].favor;
delete Factions["KuaiGong International"];
}
AddToFactions(KuaiGongInternational); AddToFactions(KuaiGongInternational);
//Other corporations //Other corporations
var FulcrumTechnologies = new Faction("Fulcrum Secret Technologies"); var FulcrumTechnologies = new Faction("Fulcrum Secret Technologies");
FulcrumTechnologies.setInfo(FactionInfo.FulcrumSecretTechnologiesInfo); FulcrumTechnologies.setInfo(FactionInfo.FulcrumSecretTechnologiesInfo);
if (factionExists("Fulcrum Secret Technologies")) {
FulcrumTechnologies.favor = Factions["Fulcrum Secret Technologies"].favor;
delete Factions["Fulcrum Secret Technologies"];
}
AddToFactions(FulcrumTechnologies); AddToFactions(FulcrumTechnologies);
//Hacker groups //Hacker groups
var BitRunners = new Faction("BitRunners"); var BitRunners = new Faction("BitRunners");
BitRunners.setInfo(FactionInfo.BitRunnersInfo); BitRunners.setInfo(FactionInfo.BitRunnersInfo);
if (factionExists("BitRunners")) {
BitRunners.favor = Factions["BitRunners"].favor;
delete Factions["BitRunners"];
}
AddToFactions(BitRunners); AddToFactions(BitRunners);
var BlackHand = new Faction("The Black Hand"); var BlackHand = new Faction("The Black Hand");
BlackHand.setInfo(FactionInfo.BlackHandInfo); BlackHand.setInfo(FactionInfo.BlackHandInfo);
if (factionExists("The Black Hand")) {
BlackHand.favor = Factions["The Black Hand"].favor;
delete Factions["The Black Hand"];
}
AddToFactions(BlackHand); AddToFactions(BlackHand);
var NiteSec = new Faction("NiteSec"); var NiteSec = new Faction("NiteSec");
NiteSec.setInfo(FactionInfo.NiteSecInfo); NiteSec.setInfo(FactionInfo.NiteSecInfo);
if (factionExists("NiteSec")) {
NiteSec.favor = Factions["NiteSec"].favor;
delete Factions["NiteSec"];
}
AddToFactions(NiteSec); AddToFactions(NiteSec);
//City factions, essentially governments //City factions, essentially governments
var Chongqing = new Faction("Chongqing"); var Chongqing = new Faction("Chongqing");
Chongqing.setInfo(FactionInfo.ChongqingInfo); Chongqing.setInfo(FactionInfo.ChongqingInfo);
if (factionExists("Chongqing")) {
Chongqing.favor = Factions["Chongqing"].favor;
delete Factions["Chongqing"];
}
AddToFactions(Chongqing); AddToFactions(Chongqing);
var Sector12 = new Faction("Sector-12"); var Sector12 = new Faction("Sector-12");
Sector12.setInfo(FactionInfo.Sector12Info); Sector12.setInfo(FactionInfo.Sector12Info);
if (factionExists("Sector-12")) {
Sector12.favor = Factions["Sector-12"].favor;
delete Factions["Sector-12"];
}
AddToFactions(Sector12); AddToFactions(Sector12);
var NewTokyo = new Faction("New Tokyo"); var NewTokyo = new Faction("New Tokyo");
NewTokyo.setInfo(FactionInfo.NewTokyoInfo); NewTokyo.setInfo(FactionInfo.NewTokyoInfo);
if (factionExists("New Tokyo")) {
NewTokyo.favor = Factions["New Tokyo"].favor;
delete Factions["New Tokyo"];
}
AddToFactions(NewTokyo); AddToFactions(NewTokyo);
var Aevum = new Faction("Aevum"); var Aevum = new Faction("Aevum");
Aevum.setInfo(FactionInfo.AevumInfo); Aevum.setInfo(FactionInfo.AevumInfo);
if (factionExists("Aevum")) {
Aevum.favor = Factions["Aevum"].favor;
delete Factions["Aevum"];
}
AddToFactions(Aevum); AddToFactions(Aevum);
var Ishima = new Faction("Ishima"); var Ishima = new Faction("Ishima");
Ishima.setInfo(FactionInfo.IshimaInfo); Ishima.setInfo
AddToFactions(Ishima);
var Volhaven = new Faction("Volhaven"); var Volhaven = new Faction("Volhaven");
Volhaven.setInfo(FactionInfo.VolhavenInfo); Volhaven.setInfo(FactionInfo.VolhavenInfo);
AddToFactions(Volhaven); if (factionExists("Volhaven")) {
Volhaven.favor = Factions["Volhaven"].favor;
delete Factions["Volhaven"];
}
AddToFactions(Volhaven);(FactionInfo.IshimaInfo);
if (factionExists("Ishima")) {
Ishima.favor = Factions["Ishima"].favor;
delete Factions["Ishima"];
}
AddToFactions(Ishima);
//Criminal Organizations/Gangs //Criminal Organizations/Gangs
var SpeakersForTheDead = new Faction("Speakers for the Dead"); var SpeakersForTheDead = new Faction("Speakers for the Dead");
SpeakersForTheDead.setInfo(FactionInfo.SpeakersForTheDeadInfo); SpeakersForTheDead.setInfo(FactionInfo.SpeakersForTheDeadInfo);
if (factionExists("Speakers for the Dead")) {
SpeakersForTheDead.favor = Factions["Speakers for the Dead"].favor;
delete Factions["Speakers for the Dead"];
}
AddToFactions(SpeakersForTheDead); AddToFactions(SpeakersForTheDead);
var DarkArmy = new Faction("The Dark Army"); var DarkArmy = new Faction("The Dark Army");
DarkArmy.setInfo(FactionInfo.DarkArmyInfo); DarkArmy.setInfo(FactionInfo.DarkArmyInfo);
if (factionExists("The Dark Army")) {
DarkArmy.favor = Factions["The Dark Army"].favor;
delete Factions["The Dark Army"];
}
AddToFactions(DarkArmy); AddToFactions(DarkArmy);
var TheSyndicate = new Faction("The Syndicate"); var TheSyndicate = new Faction("The Syndicate");
TheSyndicate.setInfo(FactionInfo.TheSyndicateInfo); TheSyndicate.setInfo(FactionInfo.TheSyndicateInfo);
if (factionExists("The Syndicate")) {
TheSyndicate.favor = Factions["The Syndicate"].favor;
delete Factions["The Syndicate"];
}
AddToFactions(TheSyndicate); AddToFactions(TheSyndicate);
var Silhouette = new Faction("Silhouette"); var Silhouette = new Faction("Silhouette");
Silhouette.setInfo(FactionInfo.SilhouetteInfo); Silhouette.setInfo(FactionInfo.SilhouetteInfo);
if (factionExists("Silhouette")) {
Silhouette.favor = Factions["Silhouette"].favor;
delete Factions["Silhouette"];
}
AddToFactions(Silhouette); AddToFactions(Silhouette);
var Tetrads = new Faction("Tetrads"); //Low-medium level asian crime gang var Tetrads = new Faction("Tetrads"); //Low-medium level asian crime gang
Tetrads.setInfo(FactionInfo.TetradsInfo); Tetrads.setInfo(FactionInfo.TetradsInfo);
if (factionExists("Tetrads")) {
Tetrads.favor = Factions["Tetrads"].favor;
delete Factions["Tetrads"];
}
AddToFactions(Tetrads); AddToFactions(Tetrads);
var SlumSnakes = new Faction("Slum Snakes"); //Low level crime gang var SlumSnakes = new Faction("Slum Snakes"); //Low level crime gang
SlumSnakes.setInfo(FactionInfo.SlumSnakesInfo); SlumSnakes.setInfo(FactionInfo.SlumSnakesInfo);
if (factionExists("Slum Snakes")) {
SlumSnakes.favor = Factions["Slum Snakes"].favor;
delete Factions["Slum Snakes"];
}
AddToFactions(SlumSnakes); AddToFactions(SlumSnakes);
//Earlygame factions - factions the player will prestige with early on that don't //Earlygame factions - factions the player will prestige with early on that don't
//belong in other categories //belong in other categories
var Netburners = new Faction("Netburners"); var Netburners = new Faction("Netburners");
Netburners.setInfo(FactionInfo.NetburnersInfo); Netburners.setInfo(FactionInfo.NetburnersInfo);
if (factionExists("Netburners")) {
Netburners.favor = Factions["Netburners"].favor;
delete Factions["Netburners"];
}
AddToFactions(Netburners); AddToFactions(Netburners);
var TianDiHui = new Faction("Tian Di Hui"); //Society of the Heaven and Earth var TianDiHui = new Faction("Tian Di Hui"); //Society of the Heaven and Earth
TianDiHui.setInfo(FactionInfo.TianDiHuiInfo); TianDiHui.setInfo(FactionInfo.TianDiHuiInfo);
if (factionExists("Tian Di Hui")) {
TianDiHui.favor = Factions["Tian Di Hui"].favor;
delete Factions["Tian Di Hui"];
}
AddToFactions(TianDiHui); AddToFactions(TianDiHui);
var CyberSec = new Faction("CyberSec"); var CyberSec = new Faction("CyberSec");
CyberSec.setInfo(FactionInfo.CyberSecInfo); CyberSec.setInfo(FactionInfo.CyberSecInfo);
if (factionExists("CyberSec")) {
CyberSec.favor = Factions["CyberSec"].favor;
delete Factions["CyberSec"];
}
AddToFactions(CyberSec); AddToFactions(CyberSec);
} }
@ -550,7 +711,15 @@ displayFactionContent = function(factionName) {
var faction = Factions[factionName]; var faction = Factions[factionName];
document.getElementById("faction-name").innerHTML = factionName; document.getElementById("faction-name").innerHTML = factionName;
document.getElementById("faction-info").innerHTML = "<i>" + faction.info + "</i>"; document.getElementById("faction-info").innerHTML = "<i>" + faction.info + "</i>";
document.getElementById("faction-reputation").innerHTML = "Reputation: " + formatNumber(faction.playerReputation, 4); document.getElementById("faction-reputation").innerHTML = "Reputation: " + formatNumber(faction.playerReputation, 4) +
"<span class='tooltiptext'>You will earn " +
formatNumber(faction.playerReputation / CONSTANTS.FactionReputationToFavor, 4) +
" faction favor upon resetting after installing an Augmentation</span>";
document.getElementById("faction-favor").innerHTML = "Faction Favor: " + formatNumber(faction.favor, 4) +
"<span class='tooltiptext'>Faction favor increases the rate at which " +
"you earn reputation for this faction by 1% per favor. Faction favor " +
"is gained whenever you reset after installing an Augmentation. The amount of " +
"favor you gain depends on how much reputation you have with the faction</span>";
var hackDiv = document.getElementById("faction-hack-div"); var hackDiv = document.getElementById("faction-hack-div");
var fieldWorkDiv = document.getElementById("faction-fieldwork-div"); var fieldWorkDiv = document.getElementById("faction-fieldwork-div");
@ -618,7 +787,12 @@ displayFactionContent = function(factionName) {
}); });
if (faction.isMember) { if (faction.isMember) {
donateDiv.style.display = "inline"; if (faction.favor >= 150) {
donateDiv.style.display = "inline";
} else {
donateDiv.style.display = "none";
}
switch(faction.name) { switch(faction.name) {
case "Illuminati": case "Illuminati":
hackDiv.style.display = "inline"; hackDiv.style.display = "inline";

@ -111,6 +111,10 @@ displayLocationContent = function() {
var jobTitle = document.getElementById("location-job-title"); var jobTitle = document.getElementById("location-job-title");
var jobReputation = document.getElementById("location-job-reputation"); var jobReputation = document.getElementById("location-job-reputation");
var companyFavor = document.getElementById("location-company-favor");
var locationTxtDiv1 = document.getElementById("location-text-divider-1");
var locationTxtDiv2 = document.getElementById("location-text-divider-2");
var locationTxtDiv3 = document.getElementById("location-text-divider-3");
var gymTrainStr = document.getElementById("location-gym-train-str"); var gymTrainStr = document.getElementById("location-gym-train-str");
var gymTrainDef = document.getElementById("location-gym-train-def"); var gymTrainDef = document.getElementById("location-gym-train-def");
@ -259,9 +263,21 @@ displayLocationContent = function() {
var company = Companies[loc]; var company = Companies[loc];
jobTitle.style.display = "block"; jobTitle.style.display = "block";
jobReputation.style.display = "block"; jobReputation.style.display = "inline";
companyFavor.style.display = "inline";
locationTxtDiv1.style.display = "block";
locationTxtDiv2.style.display = "block";
locationTxtDiv3.style.display = "block";
jobTitle.innerHTML = "Job Title: " + Player.companyPosition.positionName; jobTitle.innerHTML = "Job Title: " + Player.companyPosition.positionName;
jobReputation.innerHTML = "Company reputation: " + (company.playerReputation.toFixed(4)).toLocaleString(); jobReputation.innerHTML = "Company reputation: " + formatNumber(company.playerReputation, 4) +
"<span class='tooltiptext'>You will earn " +
formatNumber(company.playerReputation / CONSTANTS.CompanyReputationToFavor, 4) +
" faction favor upon resetting after installing an Augmentation</span>";
companyFavor.innerHTML = "Company Favor: " + formatNumber(company.favor, 4) +
"<span class='tooltiptext'>Company favor increases the rate at which " +
"you earn reputation for this company by 1% per favor. Company favor " +
"is gained whenever you reset after installing an Augmentation. The amount of " +
"favor you gain depends on how much reputation you have with the company</span>";
work.style.display = "block"; work.style.display = "block";
var currPos = Player.companyPosition; var currPos = Player.companyPosition;
@ -298,6 +314,10 @@ displayLocationContent = function() {
} else { } else {
jobTitle.style.display = "none"; jobTitle.style.display = "none";
jobReputation.style.display = "none"; jobReputation.style.display = "none";
companyFavor.style.display = "none";
locationTxtDiv1.style.display = "none";
locationTxtDiv2.style.display = "none";
locationTxtDiv3.style.display = "none";
} }
switch (loc) { switch (loc) {

@ -498,6 +498,22 @@ function evaluate(exp, workerScript) {
}, function(e) { }, function(e) {
reject(e); reject(e);
}); });
} else if (exp.func.value == "getServerBaseSecurityLevel") {
if (exp.args.length != 1) {
return reject(makeRuntimeRejectMsg(workerScript, "getServerBaseSecurityLevel() call has incorrect number of arguments. Takes 1 arguments"));
}
var ipPromise = evaluate(exp.args[0], workerScript);
ipPromise.then(function(ip) {
var server = getServer(ip);
if (server == null) {
workerScript.scriptRef.log("getServerBaseSecurityLevel() failed. Invalid IP or hostname passed in: " + ip);
return reject(makeRuntimeRejectMsg(workerScript, "Invalid IP or hostname passed into getServerBaseSecurityLevel() command"));;
}
workerScript.scriptRef.log("getServerBaseSecurityLevel() returned " + formatNumber(server.baseDifficulty, 3) + " for " + server.hostname);
resolve(server.baseDifficulty);
}, function(e) {
reject(e);
});
} else if (exp.func.value == "getServerRequiredHackingLevel") { } else if (exp.func.value == "getServerRequiredHackingLevel") {
if (exp.args.length != 1) { if (exp.args.length != 1) {
return reject(makeRuntimeRejectMsg(workerScript, "getServerRequiredHackingLevel() call has incorrect number of arguments. Takes 1 argument")); return reject(makeRuntimeRejectMsg(workerScript, "getServerRequiredHackingLevel() call has incorrect number of arguments. Takes 1 argument"));
@ -971,7 +987,7 @@ function runScriptFromScript(server, scriptname, args, workerScript, threads=1)
//Check for admin rights and that there is enough RAM availble to run //Check for admin rights and that there is enough RAM availble to run
var script = server.scripts[i]; var script = server.scripts[i];
var ramUsage = script.ramUsage; var ramUsage = script.ramUsage;
ramUsage = ramUsage * threads * Math.pow(1.01, threads-1); ramUsage = ramUsage * threads * Math.pow(CONSTANTS.MultithreadingRAMCost, threads-1);
var ramAvailable = server.maxRam - server.ramUsed; var ramAvailable = server.maxRam - server.ramUsed;
if (server.hasAdminRights == false) { if (server.hasAdminRights == false) {
@ -1032,7 +1048,7 @@ function scriptCalculateExpGain(server) {
if (server.baseDifficulty == null) { if (server.baseDifficulty == null) {
server.baseDifficulty = server.hackDifficulty; server.baseDifficulty = server.hackDifficulty;
} }
return (server.baseDifficulty * Player.hacking_exp_mult * 0.5 + 3); return (server.baseDifficulty * Player.hacking_exp_mult * 0.5 + 1);
} }
//The same as Player's calculatePercentMoneyHacked() function but takes in the server as an argument //The same as Player's calculatePercentMoneyHacked() function but takes in the server as an argument

@ -142,7 +142,8 @@ function addWorkerScript(runningScriptObj, server) {
} else { } else {
runningScriptObj.threads = 1; runningScriptObj.threads = 1;
} }
var ramUsage = runningScriptObj.scriptRef.ramUsage * threads * Math.pow(1.01, threads-1); var ramUsage = runningScriptObj.scriptRef.ramUsage * threads
* Math.pow(CONSTANTS.MultithreadingRAMCost, threads-1);
server.ramUsed += ramUsage; server.ramUsed += ramUsage;
//Create the WorkerScript //Create the WorkerScript

@ -259,7 +259,7 @@ PlayerObject.prototype.calculateExpGain = function() {
if (s.baseDifficulty == null) { if (s.baseDifficulty == null) {
s.baseDifficulty = s.hackDifficulty; s.baseDifficulty = s.hackDifficulty;
} }
return (s.baseDifficulty * this.hacking_exp_mult * 0.5 + 3); return (s.baseDifficulty * this.hacking_exp_mult * 0.5 + 1);
} }
//Hack/Analyze a server. Return the amount of time the hack will take. This lets the Terminal object know how long to disable itself for //Hack/Analyze a server. Return the amount of time the hack will take. This lets the Terminal object know how long to disable itself for
@ -635,6 +635,11 @@ PlayerObject.prototype.finishFactionWork = function(cancelled, faction) {
} }
PlayerObject.prototype.startFactionWork = function(faction) { PlayerObject.prototype.startFactionWork = function(faction) {
//Update reputation gain rate to account for faction favor
var favorMult = 1 + (faction.favor / 100);
if (isNaN(favorMult)) {favorMult = 1;}
this.workRepGainRate *= favorMult;
this.isWorking = true; this.isWorking = true;
this.workType = CONSTANTS.WorkTypeFaction; this.workType = CONSTANTS.WorkTypeFaction;
this.currentWorkFactionName = faction.name; this.currentWorkFactionName = faction.name;
@ -655,8 +660,8 @@ PlayerObject.prototype.startFactionWork = function(faction) {
PlayerObject.prototype.startFactionHackWork = function(faction) { PlayerObject.prototype.startFactionHackWork = function(faction) {
this.resetWorkStatus(); this.resetWorkStatus();
this.workHackExpGainRate = .175 * this.hacking_exp_mult; this.workHackExpGainRate = .15 * this.hacking_exp_mult;
this.workRepGainRate = this.hacking_skill / CONSTANTS.MaxSkillLevel * this.faction_rep_mult; this.workRepGainRate = 0.9 * this.hacking_skill / CONSTANTS.MaxSkillLevel * this.faction_rep_mult;
this.factionWorkType = CONSTANTS.FactionWorkHacking; this.factionWorkType = CONSTANTS.FactionWorkHacking;
this.currentWorkFactionDescription = "carrying out hacking contracts"; this.currentWorkFactionDescription = "carrying out hacking contracts";
@ -716,6 +721,11 @@ PlayerObject.prototype.workForFaction = function(numCycles) {
break; break;
} }
//Update reputation gain rate to account for faction favor
var favorMult = 1 + (faction.favor / 100);
if (isNaN(favorMult)) {favorMult = 1;}
this.workRepGainRate *= favorMult;
this.workHackExpGained += this.workHackExpGainRate * numCycles; this.workHackExpGained += this.workHackExpGainRate * numCycles;
this.workStrExpGained += this.workStrExpGainRate * numCycles; this.workStrExpGained += this.workStrExpGainRate * numCycles;
this.workDefExpGained += this.workDefExpGainRate * numCycles; this.workDefExpGained += this.workDefExpGainRate * numCycles;
@ -805,29 +815,32 @@ PlayerObject.prototype.getWorkChaExpGain = function() {
//Reputation gained per game cycle //Reputation gained per game cycle
PlayerObject.prototype.getWorkRepGain = function() { PlayerObject.prototype.getWorkRepGain = function() {
var company = Companies[this.companyName];
var jobPerformance = this.companyPosition.calculateJobPerformance(this.hacking_skill, this.strength, var jobPerformance = this.companyPosition.calculateJobPerformance(this.hacking_skill, this.strength,
this.defense, this.dexterity, this.defense, this.dexterity,
this.agility, this.charisma); this.agility, this.charisma);
return jobPerformance * this.company_rep_mult; //Update reputation gain rate to account for company favor
var favorMult = 1 + (company.favor / 100);
if (isNaN(favorMult)) {favorMult = 1;}
return jobPerformance * this.company_rep_mult * favorMult;
} }
PlayerObject.prototype.getFactionSecurityWorkRepGain = function() { PlayerObject.prototype.getFactionSecurityWorkRepGain = function() {
var t = (this.hacking_skill / CONSTANTS.MaxSkillLevel + var t = 0.9 * (this.hacking_skill / CONSTANTS.MaxSkillLevel +
this.strength / CONSTANTS.MaxSkillLevel + this.strength / CONSTANTS.MaxSkillLevel +
this.defense / CONSTANTS.MaxSkillLevel + this.defense / CONSTANTS.MaxSkillLevel +
this.dexterity / CONSTANTS.MaxSkillLevel + this.dexterity / CONSTANTS.MaxSkillLevel +
this.agility / CONSTANTS.MaxSkillLevel) / 5; this.agility / CONSTANTS.MaxSkillLevel) / 5;
return t * this.faction_rep_mult; return t * this.faction_rep_mult;
} }
PlayerObject.prototype.getFactionFieldWorkRepGain = function() { PlayerObject.prototype.getFactionFieldWorkRepGain = function() {
var t = (this.hacking_skill / CONSTANTS.MaxSkillLevel + var t = 0.9 * (this.hacking_skill / CONSTANTS.MaxSkillLevel +
this.strength / CONSTANTS.MaxSkillLevel + this.strength / CONSTANTS.MaxSkillLevel +
this.defense / CONSTANTS.MaxSkillLevel + this.defense / CONSTANTS.MaxSkillLevel +
this.dexterity / CONSTANTS.MaxSkillLevel + this.dexterity / CONSTANTS.MaxSkillLevel +
this.agility / CONSTANTS.MaxSkillLevel + this.agility / CONSTANTS.MaxSkillLevel +
this.charisma / CONSTANTS.MaxSkillLevel) / 6; this.charisma / CONSTANTS.MaxSkillLevel) / 6;
return t * this.faction_rep_mult; return t * this.faction_rep_mult;
} }

@ -166,21 +166,19 @@ function prestigeAugmentation() {
Player.hacknetNodes.length = 0; Player.hacknetNodes.length = 0;
Player.totalHacknetNodeProduction = 0; Player.totalHacknetNodeProduction = 0;
//Delete Companies //Gain favor for Companies
for (var member in Companies) { for (var member in Companies) {
if (Companies.hasOwnProperty(member)) { if (Companies.hasOwnProperty(member)) {
delete Companies[member]; Companies[member].gainFavor();
} }
} }
Companies = {};
//Reset Factions //Gain favor for factions
for (var member in Factions) { for (var member in Factions) {
if (Factions.hasOwnProperty(member)) { if (Factions.hasOwnProperty(member)) {
delete Factions[member]; Factions[member].gainFavor();
} }
} }
Factions = {};
//Stop a Terminal action if there is onerror //Stop a Terminal action if there is onerror
if (Engine._actionInProgress) { if (Engine._actionInProgress) {

@ -278,6 +278,7 @@ scriptCalculateOfflineProduction = function(runningScriptObj) {
runningScriptObj.log(runningScriptObj.filename + " generated $" + production + " while offline by hacking " + serv.hostname); runningScriptObj.log(runningScriptObj.filename + " generated $" + production + " while offline by hacking " + serv.hostname);
serv.moneyAvailable -= production; serv.moneyAvailable -= production;
if (serv.moneyAvailable < 0) {serv.moneyAvailable = 0;} if (serv.moneyAvailable < 0) {serv.moneyAvailable = 0;}
if (isNaN(serv.moneyAvailable)) {serv.moneyAvailable = 0;}
} }
} }

@ -790,7 +790,7 @@ var Terminal = {
for (var i = 0; i < currServ.scripts.length; ++i) { for (var i = 0; i < currServ.scripts.length; ++i) {
if (scriptName == currServ.scripts[i].filename) { if (scriptName == currServ.scripts[i].filename) {
var scriptBaseRamUsage = currServ.scripts[i].ramUsage; var scriptBaseRamUsage = currServ.scripts[i].ramUsage;
var ramUsage = scriptBaseRamUsage * numThreads * Math.pow(1.01, numThreads-1); var ramUsage = scriptBaseRamUsage * numThreads * Math.pow(CONSTANTS.MultithreadingRAMCost, numThreads-1);
post("This script requires " + formatNumber(ramUsage, 2) + "GB of RAM to run for " + numThreads + " thread(s)"); post("This script requires " + formatNumber(ramUsage, 2) + "GB of RAM to run for " + numThreads + " thread(s)");
return; return;
@ -1304,7 +1304,7 @@ var Terminal = {
if (server.scripts[i].filename == scriptName) { if (server.scripts[i].filename == scriptName) {
//Check for admin rights and that there is enough RAM availble to run //Check for admin rights and that there is enough RAM availble to run
var script = server.scripts[i]; var script = server.scripts[i];
var ramUsage = script.ramUsage * numThreads * Math.pow(1.01, numThreads-1); var ramUsage = script.ramUsage * numThreads * Math.pow(CONSTANTS.MultithreadingRAMCost, numThreads-1);
var ramAvailable = server.maxRam - server.ramUsed; var ramAvailable = server.maxRam - server.ramUsed;
if (server.hasAdminRights == false) { if (server.hasAdminRights == false) {

@ -36,7 +36,7 @@ purchaseRamForHomeBoxCreate = function() {
//Calculate cost //Calculate cost
//Have cost increase by some percentage each time RAM has been upgraded //Have cost increase by some percentage each time RAM has been upgraded
var cost = currentRam * CONSTANTS.BaseCostFor1GBOfRamHome; var cost = currentRam * CONSTANTS.BaseCostFor1GBOfRamHome;
var mult = Math.pow(1.43, numUpgrades); var mult = Math.pow(1.45, numUpgrades);
cost = cost * mult; cost = cost * mult;
purchaseRamForHomeBoxSetText("Would you like to purchase additional RAM for your home computer? <br><br>" + purchaseRamForHomeBoxSetText("Would you like to purchase additional RAM for your home computer? <br><br>" +