Scripts/logevents.js |
"use strict";
this.name = "logevents";
this.author = "Norby";
this.copyright = "Norbert Nagy";
this.licence = "CC BY-NC-SA 4.0";
this.description = "Log player events to review a battle, with added ShipVersion OXP support.";
this.$LogEvents_On = true; //turn off means no event logging at all
this.$LogEvents_Prefix = "LogEvents"; //this will be the messageClass string in the log
this.$LogEvents_Ships = []; //store the ships spawned during timer
this.$LogEvents_Timer = null; //store the timer pointer
//these documented as ship script events but usually works as a world script event for the player also
this.shipTargetAcquired = function(target) {
this.$LogEvents_Player( "targeted", target, "who has "+this.$LogEvents_NPCLeft( target ) );
}
this.shipTakingDamage = function(amount, whom, type) {
var s = "shield damage";
if( amount > 0 ) s = Math.round( amount ) + " " + type;
this.$LogEvents_Player( "taking "+s+" from", whom, this.$LogEvents_PlayerLeft() );
}
this.cascadeWeaponDetected = function(weapon) {
this.$LogEvents_Player( "detected cascade weapon "+weapon );
}
this.shipBeingAttackedUnsuccessfully = function(whom) {
this.$LogEvents_Player( "attacked unsuccessfully by", whom );
}
this.shipCloakActivated = function() {
this.$LogEvents_Player( "cloak is activated" );
}
this.shipCloakDectivated = function() {
this.$LogEvents_Player( "cloak is deactivated" );
}
this.shipEnergyBecameFull = function() {
this.$LogEvents_Player( "energy is full" );
}
this.shipEnergyIsLow = function() {
this.$LogEvents_Player( "energy is low" );
}
this.shipHitByECM = function(pulsesRemaining) {
this.$LogEvents_Player( "hit by ECM, "+pulsesRemaining+" remaining" );
}
this.commsMessageReceived = function(message, sender) {
this.$LogEvents_Player( "got message from", sender, ": "+message );
}
this.distressMessageReceived = function(aggressor, sender) {
this.$LogEvents_Player( "got distress message from", sender,
": Help! "+this.$LogEvents_TargetName(aggressor)+" attacking me!" );
}
this.shipBountyChanged = function(delta, reason) {
if(delta != 0) this.$LogEvents_Player( "bounty is changed by "+delta+
" to "+player.bounty+" due to "+reason );
}
this.shipCloseContact = function(otherShip) {
this.$LogEvents_Player( "is in close contact with", otherShip);
}
this.shipReachedEndPoint = function() {
this.$LogEvents_Player( "reached endpoint" );
}
this.shipReachedNavPoint = function() {
this.$LogEvents_Player( "reached navpoint" );
}
//world script events, in the same order than in the wiki (grouped by type)
//Game State
this.gamePaused = function() {
this.$LogEvents_Player( "paused the game" );
}
this.gameResumed = function() {
this.$LogEvents_Player( "resumed the game" );
}
this.playerWillSaveGame = function(message) {
this.$LogEvents_Player( message );
}
this.startUpComplete = function(target) {
this.$LogEvents_Populators();
}
//Docking
this.shipWillDockWithStation = function(station) {
this.$LogEvents_Player( "will dock to", station );
}
this.shipDockedWithStation = function(station) {
this.$LogEvents_Player( "docked to", station );
}
this.shipWillLaunchFromStation = function(station) {
var m2 = "";
if( player.ship ) m2 = "flying "+this.$LogEvents_TargetName(player.ship);
this.$LogEvents_Player( "will launch from", station, m2 );
}
this.shipLaunchedFromStation = function(station) {
this.$LogEvents_Player( "launched from", station );
}
this.playerStartedAutoPilot = function() {
this.$LogEvents_Player( "started AutoPilot" );
}
this.playerCancelledAutoPilot = function() {
this.$LogEvents_Player( "cancelled AutoPilot" );
}
this.playerChangedPrimedEquipment = function(equipmentKey) {
this.$LogEvents_Player( "primed "+equipmentKey );
}
this.playerDockingClearanceCancelled = function() {
this.$LogEvents_Player( "docking clearance cancelled" );
}
this.playerDockingClearanceExpired = function() {
this.$LogEvents_Player( "docking clearance expired" );
}
this.playerDockingClearanceGranted = function() {
this.$LogEvents_Player( "docking clearance granted" );
}
this.playerDockingRefused = function() {
this.$LogEvents_Player( "docking refused" );
}
this.playerRequestedDockingClearance = function(message) {
this.$LogEvents_Player( "requested docking clearance and "+message);
}
this.playerRescuedEscapePod = function(fee, reason, occupant) {
var m = "";
if( reason == "slave" ) m = "with a slave";
else m = "for "+(fee/10)+" credits "+reason; //insurance or bounty
this.$LogEvents_Player( "rescued escape pod "+m+" occuped by ", occupant);
}
this.playerCompletedContract = function(type, result, fee, contract) {
this.$LogEvents_Player( "completed "+type+" contract with "+result
+" result, got "+(fee/10)+" credits ", contract);
}
this.playerEnteredContract = function(type, contract) {
this.$LogEvents_Player( "entereted "+type+" contract", contract);
}
//Witchspace Jumps
this.playerStartedJumpCountdown = function(type, seconds) {
this.$LogEvents_Player( "started "+seconds+" seconds "+type+" jump countdown");
}
this.playerCancelledJumpCountdown = function() {
this.$LogEvents_Player( "cancelled jump countdown");
}
this.playerJumpFailed = function(reason) {
this.$LogEvents_Player( "jump failed due to "+reason);
}
this.shipWillEnterWitchspace = function(cause, destination) {
var dest = "";
if( destination ) {
if( cause == "galactic jump" ) dest = " to galaxy "+destination;
else dest = " to system "+destination;
}
this.$LogEvents_Player( "will enter witchspace "+dest+" due to "+cause);
}
this.shipWillExitWitchspace = function() {
this.$LogEvents_Populators();
this.$LogEvents_Player( "will exit witchspace");
}
this.shipExitedWitchspace = function() {
this.$LogEvents_Player( "exited from witchspace");
}
this.playerEnteredNewGalaxy = function(galaxyNumber) {
this.$LogEvents_Player( "entered "+galaxyNumber+". galaxy");
}
//Enter/Exit Aegis
this.shipEnteredStationAegis = function(station) {
this.$LogEvents_Player( "entered to the aegis of", station);
}
this.shipExitedStationAegis = function(station) {
this.$LogEvents_Player( "exited from aegis of", station);
}
this.shipEnteredPlanetaryVicinity = function(planet) {
this.$LogEvents_Player( "entered to the vicinity of "+planet.toString());
}
this.shipExitedPlanetaryVicinity = function(planet) {
this.$LogEvents_Player( "exited from the vicinity of "+planet.toString());
}
this.shipApproachingPlanetSurface = function(planet) {
this.$LogEvents_Player( "approaching the surface of "+planet.toString());
}
this.shipLeavingPlanetSurface = function(planet) {
this.$LogEvents_Player( "leaving the surface of "+planet.toString());
}
//Combat
this.alertConditionChanged = function(newCondition, oldCondition) {
this.$LogEvents_Player( "alert condition changed from "+oldCondition+" to "+newCondition);
}
this.playerTargetedMissile = function(missile) {
this.$LogEvents_Player( "targeted missile "+missile.name );
}
this.shipAttackedOther = function(other) {
this.$LogEvents_Player( "attacked", other, "who has "+this.$LogEvents_NPCLeft( other ) );
}
this.shipAttackedWithMissile = function(missile, whom) {
this.$LogEvents_Player( "attacked with "+missile.name+" from", whom );
}
this.shipBeingAttacked = function(whom) {
this.$LogEvents_Player( "attacked by", whom, this.$LogEvents_PlayerLeft() );
}
this.shipBeingAttackedByCloaked = function() {
this.$LogEvents_Player( "attacked by a cloaked ship "+this.$LogEvents_PlayerLeft() );
}
this.shipKilledOther = function(whom, damageType) {
this.$LogEvents_Player( "killed", whom, "with "+damageType);
}
this.shipReleasedEquipment = function(mine) {
this.$LogEvents_Player( "released equipment ", mine);
}
this.shipTargetDestroyed = function(target) {
this.$LogEvents_Player( "target", target, "is destroyed");
}
this.shipDied = function(whom, why) {
this.$LogEvents_Player( "got "+why+" from", whom, "and died!");
}
this.shipFiredMissile = function(missile, target) {
this.$LogEvents_Player( "fired missile "+missile.name+" to", target);
}
this.shipTargetLost = function(target) {
if( target ) this.$LogEvents_Player( "lost lock on", target);
}
this.shipTargetCloaked = function() {
this.$LogEvents_Player( "target cloaked");
}
this.weaponsSystemsToggled = function(state) {
this.$LogEvents_Player( "weapons systems toggled to "+state);
}
//Equipment and Cargo
this.equipmentAdded = function(equipmentKey) {
this.$LogEvents_Player( "ship got "+equipmentKey );
}
this.equipmentDamaged = function(equipment) {
// if( equipment.isVisible ) //to avoid HUD control equipments
this.$LogEvents_Player( equipment.toString()+" damaged" );
}
this.equipmentRemoved = function(equipmentKey) {
this.$LogEvents_Player( "ship lost "+equipmentKey );
}
this.equipmentDestroyed = function(equipment) {
// if( equipment.isVisible ) //to avoid HUD control equipments
this.$LogEvents_Player( equipment.toString()+" destroyed" );
}
this.equipmentRepaired = function(equipment){
// if( equipment.isVisible ) //to avoid HUD control equipments
this.$LogEvents_Player( equipment.toString()+" repaired" );
}
this.playerBoughtCargo = function(commodity, units, price) {
this.$LogEvents_Player( "bought "+units+" "
+expandDescription("[commodity-name "+commodity+"]")
+" for "+(price/10)+" credits");
}
this.playerBoughtEquipment = function(equipment) {
this.$LogEvents_Player( "bought "+equipment.toString() );
}
this.playerBoughtNewShip = function(ship) {
this.$LogEvents_Player( "bought new ship:", ship );
}
this.playerSoldCargo = function(commodity, units, price) {
this.$LogEvents_Player( "sold "+units+" "
+expandDescription("[commodity-name "+commodity+"]")
+" for "+(price/10)+" credits");
}
this.shipScoopedFuel = function() {
this.$LogEvents_Player( "scooped 0.1 LY fuel" );
}
this.shipScoopedOther = function(whom) {
this.$LogEvents_Player( "scooped", whom );
}
//Other
this.chartHightlightModeChanged = function(newMode){
this.$LogEvents_Player( "chartHightlightMode is changed to "+newMode );
}
this.compassTargetChanged = function(whom, mode) {
this.$LogEvents_Player( "compass targeted", whom, "in mode "+mode );
}
this.dayChanged = function(newday) {
this.$LogEvents_Player( "new day "+newday );
}
this.escapePodSequenceOver = function() {
this.$LogEvents_Player( "escape pod sequence over");
}
this.guiScreenChanged = function(to, from) {
this.$LogEvents_Player( "gui screen changed from "+from+" to "+to );
}
this.guiScreenWillChange = function(to, from) {
this.$LogEvents_Player( "gui screen will change from "+from+" to "+to );
}
this.infoSystemChanged = function(to, from) {
this.$LogEvents_Player( "info system changed from "+from+" to "+to );
}
this.infoSystemWillChange = function(to, from) {
this.$LogEvents_Player( "info system will change from "+from+" to "+to );
}
this.mfdKeyChanged = function(activeMFD, mfdKey) {
this.$LogEvents_Player( "mfd "+activeMFD+" changed to "+mfdKey );
}
this.missionChoiceWasReset= function() {
this.$LogEvents_Player( "mission choice was reset" );
}
this.missionScreenEnded = function() {
this.$LogEvents_Player( "mission screen ended" );
}
this.missionScreenOpportunity= function() {
this.$LogEvents_Player( "mission screen opportunity" );
}
this.reportScreenEnded = function() {
this.$LogEvents_Player( "report screen ended" );
}
this.selectedMFDChanged = function(activeMFD) {
this.$LogEvents_Player( "selected mfd "+activeMFD );
}
this.shipCollided = function(otherShip) {
this.$LogEvents_Player( "collided with", otherShip );
}
this.shipSpawned = function(ship) {
this.$LogEvents_Ships[ this.$LogEvents_Ships.length ] = ship;
if( !this.$LogEvents_Timer ) //give some time to run all shipSpawned before get ShipVersion
this.$LogEvents_Timer = new Timer(this, this.$LogEvents_Timed, 0.1, 0);
}
this.shipLaunchedEscapePod = function(escapepod) {
this.$LogEvents_Player( "launched Escape Pod" );
}
this.systemInformationChanged = function(galaxy,system,key,newValue) {
if( key == "concealment") return; //prevent too many logs
this.$LogEvents_Player( "system information changed in galaxy "+galaxy
+" system "+system+" key "+key+" to "+newValue );
}
this.viewDirectionChanged = function(viewString) {
this.$LogEvents_Player( viewString );
}
//LogEvents functions
this.$LogEvents_NPCLeft = function( target ) {
if( !target ) return("unknown energy");
var sh = "";
if( worldScripts["customshields"] && target && target.script
&& target.script.customshieldsforwardshieldlevel ) { //asteroids have no shield
sh = Math.round( target.script.customshieldsforwardshieldlevel ) + "+" +
Math.round( target.script.customshieldsaftshieldlevel ) + " shield and ";
}
return( sh + Math.round( target.energy ) + " energy" );
}
this.$LogEvents_Player = function( message1, target, message2, nolosttarget ) { //with target
if( worldScripts["logevents"].$LogEvents_On ) {
var n = "";
if( typeof( target ) != 'undefined' ) //give "lost target" message only if null
n = worldScripts["logevents"].$LogEvents_TargetName( target );
var s = "";
if( n && n.length > 0 ) s += " "+n;
if( message2 && message2.length > 0 ) s += " " + message2;
if( message1 ) ;//message1 = " " + message1;
else message1 = "";
log( this.$LogEvents_Prefix, message1 + s ); //assume Player by default
}
}
this.$LogEvents_PlayerLeft = function() {
if( player.ship ) return( Math.round( player.ship.forwardShield ) + "+" +
+ Math.round( player.ship.aftShield ) + " shield and "
+ Math.round( player.ship.energy ) + " energy left");
}
this.$LogEvents_Populators = function() {
log( this.$LogEvents_Prefix, "Populators:\n "
+ JSON.stringify(system.populatorSettings).replace(/},/g, "},\n ") );
}
this.$LogEvents_TargetName = function( target ) { //support for ShipVersion OXP to log ship version also
if( !target ) return("lost target");
var n = "";
if( target.dataKey ) n = target.dataKey; //fallback to key if no name nor stringify
if( target.name ) n = target.name;
else {
try {
n = JSON.stringify(target); //sometimes get TypeError: cyclic object value, for example if dataKey is planetaryCompass_moon
} catch( err ) {
//log(this.name, '**************************************************************************************' );
//log(this.name, 'in LogEvents_TargetName, caught error: ' + err + ' target = ' + target );
//if( err /*instanceof TypeError*/ ) this._rpt_error( err );
//log(this.name, '**************************************************************************************' );
//throw err;//do not stop here, log dataKey instead
}
}
if( target.script && target.script.$Detectors_Origname )
n = target.script.$Detectors_Origname;
var p = target.entityPersonality;
if( !p ) p = target.beaconLabel; //for moons
return( n + " " + p );
}
this.$LogEvents_Timed = function $LogEvents_Timed() {
for(var i = 0; i < this.$LogEvents_Ships.length; i++ ) {
var ship = this.$LogEvents_Ships[i];
if( !ship.isVisualEffect && ship.isVisible && ship.name.indexOf("customshields") == -1 ) {
var d = "unknown";
if( player.ship && player.ship.position && ship && ship.position ) //no ship when died
d = Math.round( player.ship.position.distanceTo( ship.position ) /1000 );
var o = "";
var owner = this.$LogEvents_Ships[i].owner;
if( owner ) o = " from " + this.$LogEvents_TargetName( owner );
log( this.$LogEvents_Prefix,
this.$LogEvents_TargetName( ship ) + o + " spawned at " + d + " km" );
}
}
this.$LogEvents_Ships = []; //start new array
this.$LogEvents_Timer.stop();
delete this.$LogEvents_Timer;
}
|