public void discoverMassiveEvidence(Evidence ev, Unit unit) { if (ev.pointsTo != null) { if (unit.person != null && ev.pointsTo.person != null) { unit.person.getRelation(ev.pointsTo.person).suspicion = 1; } else { //Can't use suspicion system, go straight to murder //Makes sense since they're probably non-human terrors unit.hostility.Add(ev.pointsTo); } //unit.location.map.addMessage(unit.getName() + " has found evidence from " + ev.pointsTo.getName(), MsgEvent.LEVEL_ORANGE, false, unit.location.hex); } if (unit is Unit_Investigator inv) { inv.evidenceCarried.Add(ev); ev.discoveredBy = inv; //Unit_Investigator inv = (Unit_Investigator)unit; //if (inv.state == Unit_Investigator.unitState.investigator) //{ if (ev.pointsTo != null && ev.pointsTo.person != null && unit.person.getRelation(ev.pointsTo.person).suspicion >= 1) { Task_HuntEnthralled_InvState task = new Task_HuntEnthralled_InvState(inv, ev.pointsTo); unit.task = task; unit.location.map.world.prefabStore.popMsgAgent(unit, ev.pointsTo, unit.getName() + " has discovered the evidence of " + ev.pointsTo.getName() + "'s presence, and will immediatelly begin to track them down due to the devastating effects of their truth." + "They know the location of " + ev.pointsTo.getName() + ", and will begin to chase them for " + task.turnsLeft + " turns."); } //} } ev.locationFound = unit.location; unit.location.evidence.Remove(ev); unit.location.map.overmind.panicFromCluesDiscovered += unit.location.map.param.panic_fromClueFound; if (unit.location.map.overmind.panicFromCluesDiscovered > 1) { unit.location.map.overmind.panicFromCluesDiscovered = 1; } }
public override void turnTick(Unit unit) { //Enthralled can't just eat clues if (unit.isEnthralled()) { unit.task = null; return; } if (unit.location.evidence.Count > 0) { Evidence massiveEvidence = null; foreach (Evidence ev in unit.location.evidence) { if (ev.instaDiscover) { massiveEvidence = ev; break; } } if (massiveEvidence != null) { discoverMassiveEvidence(massiveEvidence, unit); return; } dur += 1; if (dur >= unit.location.map.param.unit_investigateTime) { Evidence ev = unit.location.evidence[0]; if (ev.pointsTo != null) { if (unit.person != null && ev.pointsTo.person != null) { unit.person.getRelation(ev.pointsTo.person).suspicion = System.Math.Min(1, unit.person.getRelation(ev.pointsTo.person).suspicion + ev.weight); } else { //Can't use suspicion system, go straight to murder //Makes sense since they're probably non-human terrors unit.hostility.Add(ev.pointsTo); } unit.location.map.addMessage(unit.getName() + " has found evidence from " + ev.pointsTo.getName(), MsgEvent.LEVEL_ORANGE, false, unit.location.hex); } else if (ev.pointsToPerson != null) { if (unit.person != null && ev.pointsToPerson != null) { unit.person.getRelation(ev.pointsToPerson).suspicion = System.Math.Min(1, unit.person.getRelation(ev.pointsToPerson).suspicion + ev.weight); } unit.location.map.addMessage(unit.getName() + " has found evidence from " + ev.pointsToPerson.getFullName(), MsgEvent.LEVEL_ORANGE, false, unit.location.hex); } if (unit is Unit_Investigator) { Unit_Investigator inv = (Unit_Investigator)unit; inv.evidenceCarried.Add(ev); ev.discoveredBy = inv; } ev.locationFound = unit.location; unit.location.evidence.Remove(ev); unit.task = null; unit.location.map.overmind.panicFromCluesDiscovered += unit.location.map.param.panic_fromClueFound; if (unit.location.map.overmind.panicFromCluesDiscovered > 1) { unit.location.map.overmind.panicFromCluesDiscovered = 1; } //If we're already at maximum suspicion we can now begin pursuing them if (unit is Unit_Investigator) { Unit_Investigator inv = (Unit_Investigator)unit; if (inv.state == Unit_Investigator.unitState.investigator) { if (ev.pointsTo != null && ev.pointsTo.person != null && inv.person.getRelation(ev.pointsTo.person).suspicion >= 1) { Task_HuntEnthralled_InvState task = new Task_HuntEnthralled_InvState(inv, ev.pointsTo); inv.task = task; unit.location.map.world.prefabStore.popMsgAgent(inv, ev.pointsTo, inv.getName() + " has found evidence left by " + ev.pointsTo.getName() + ", and because they are an investigator who is 100% suspicious of " + ev.pointsTo.getName() + ", is able to use these clues to determine the location of " + ev.pointsTo.getName() + ", and will begin to chase them for " + task.turnsLeft + " turns."); } } } if (unit.task == null) { if (unit.location.person() != null) { Person noble = unit.location.person(); foreach (RelObj rel in unit.person.relations.Values) { ////Goes negative if they suspect more than we do, reaches 1.0 if we suspect 1.0 and they suspect 0.0 // if ((rel.suspicion - noble.getRelation(rel.them).suspicion) > Eleven.random.NextDouble()) if ((rel.suspicion > noble.getRelation(rel.them).suspicion * 1.1)) { unit.task = new Task_ShareSuspicions(); return; } } } } } } else { //Evidence gone. Probably eaten by someone else. Return to idle to retask next turn unit.task = null; } }