diff --git a/src/governor.js b/src/governor.js
index 666229c97..715643054 100644
--- a/src/governor.js
+++ b/src/governor.js
@@ -393,17 +393,22 @@ export function defineGovernor(){
export function clearSpyopDrag(){
Object.keys(global.civic.foreign).forEach(function (gov){
- let el = $(`#spyopConfig${gov}`)[0];
- if (el){
- let sort = Sortable.get(el);
- if (sort){
- sort.destroy();
+ if (canGovernorSpyOperate(gov)){
+ let el = $(`#spyopConfig${gov}`)[0];
+ if (el){
+ let sort = Sortable.get(el);
+ if (sort){
+ sort.destroy();
+ }
}
}
});
}
function dragSpyopList(gov){
+ if (!canGovernorSpyOperate(gov)){
+ return;
+ }
let el = $(`#spyopConfig${gov}`)[0];
if (el){
Sortable.create(el,{
@@ -417,6 +422,29 @@ function dragSpyopList(gov){
}
}
+function canGovernorSpyOperate(gov){
+ if (!global.civic.foreign || !global.civic.foreign.hasOwnProperty(gov)){
+ return false;
+ }
+
+ let id = Number(gov.substring(3));
+ if (Number.isNaN(id)){
+ return false;
+ }
+
+ if (global.civic.foreign[gov].anx || global.civic.foreign[gov].buy || global.civic.foreign[gov].occ){
+ return false;
+ }
+
+ if (id < 3){
+ return !global.tech['world_control'];
+ }
+ if (id === 3){
+ return global.race['truepath'] && global.tech['rival'];
+ }
+ return false;
+}
+
export function drawnGovernOffice(){
clearSpyopDrag();
let govern = $(`
`);
@@ -554,15 +582,22 @@ export function drawnGovernOffice(){
{ // Spy Operator
if (!global.race.governor.config.hasOwnProperty('spyop')){
global.race.governor.config['spyop'] = {};
- Object.keys(global.civic.foreign).forEach(function (gov){
- global.race.governor.config.spyop[gov] = gov === 'gov3' ? ['influence','sabotage'] : ['sabotage','incite','influence'];
- });
}
+ Object.keys(global.civic.foreign).forEach(function (gov){
+ if (canGovernorSpyOperate(gov)){
+ if (!global.race.governor.config.spyop.hasOwnProperty(gov)){
+ global.race.governor.config.spyop[gov] = gov === 'gov3' ? ['influence','sabotage'] : ['sabotage','incite','influence'];
+ }
+ }
+ else if (global.race.governor.config.spyop.hasOwnProperty(gov)){
+ delete global.race.governor.config.spyop[gov];
+ }
+ });
let contain = $(``);
options.append(contain);
Object.keys(global.civic.foreign).forEach(function (gov){
- if ((gov.substr(3,1) < 3 && !global.tech['world_control']) || (gov === 'gov3' && global.tech['rival'])){
+ if (canGovernorSpyOperate(gov)){
let spyop = $(``);
contain.append(spyop);
spyop.append(`
@@ -781,7 +816,9 @@ export function drawnGovernOffice(){
});
Object.keys(global.civic.foreign).forEach(function (gov){
- dragSpyopList(gov);
+ if (canGovernorSpyOperate(gov)){
+ dragSpyopList(gov);
+ }
});
}
@@ -1127,14 +1164,15 @@ export const gov_tasks = {
task(){
if ( $(this)[0].req() ){
let cashCap = global.resource.Money.max * (global.race.governor.config.spy.reserve / 100);
- let max = global.race['truepath'] && global.tech['rival'] ? 4 : 3;
- let min = global.tech['world_control'] ? 3 : 0;
- for (let i=min; i= cost && (global.resource.Money.diff >= cost || global.resource.Money.amount + global.resource.Money.diff >= cashCap)){
- govCivics('t_spy',i);
+ Object.keys(global.civic.foreign).forEach(function(gov){
+ if (canGovernorSpyOperate(gov)){
+ let i = Number(gov.substring(3));
+ let cost = govCivics('s_cost',i);
+ if (global.civic.foreign[gov].trn === 0 && global.resource.Money.amount >= cost && (global.resource.Money.diff >= cost || global.resource.Money.amount + global.resource.Money.diff >= cashCap)){
+ govCivics('t_spy',i);
+ }
}
- }
+ });
}
}
},
@@ -1151,27 +1189,29 @@ export const gov_tasks = {
},
task(){
if ( $(this)[0].req() ){
- let range = global.race['truepath'] && global.tech['rival'] ? [0,1,2,3] : [0,1,2];
- if (global.tech['world_control']){ range = [3]; }
- range.forEach(function(gov){
- if (global.civic.foreign[`gov${gov}`].sab === 0 && global.civic.foreign[`gov${gov}`].spy > 0 && !global.civic.foreign[`gov${gov}`].anx && !global.civic.foreign[`gov${gov}`].buy && !global.civic.foreign[`gov${gov}`].occ){
- global.race.governor.config.spyop[`gov${gov}`].every(function (mission){
+ Object.keys(global.civic.foreign).forEach(function(gov){
+ if (canGovernorSpyOperate(gov) && global.civic.foreign[gov].sab === 0 && global.civic.foreign[gov].spy > 0){
+ let id = Number(gov.substring(3));
+ if (!global.race.governor.config.spyop.hasOwnProperty(gov)){
+ global.race.governor.config.spyop[gov] = gov === 'gov3' ? ['influence','sabotage'] : ['sabotage','incite','influence'];
+ }
+ global.race.governor.config.spyop[gov].every(function (mission){
switch (mission){
case 'influence':
- if (global.civic.foreign[`gov${gov}`].hstl > 0 && global.civic.foreign[`gov${gov}`].spy > 1){
- govCivics('s_influence',gov);
+ if (global.civic.foreign[gov].hstl > 0 && global.civic.foreign[gov].spy > 1){
+ govCivics('s_influence',id);
return false;
}
break;
case 'sabotage':
- if (global.civic.foreign[`gov${gov}`].mil > 50){
- govCivics('s_sabotage',gov);
+ if (global.civic.foreign[gov].mil > 50){
+ govCivics('s_sabotage',id);
return false;
}
break;
case 'incite':
- if (global.civic.foreign[`gov${gov}`].unrest < 100 && global.civic.foreign[`gov${gov}`].spy > 2 && gov < 3){
- govCivics('s_incite',gov);
+ if (global.civic.foreign[gov].unrest < 100 && global.civic.foreign[gov].spy > 2 && id < 3){
+ govCivics('s_incite',id);
return false;
}
break;