Serious efficiency fixes to last few commits
ship.findNearestStation()
This commit is contained in:
parent
13b7c1afff
commit
ada2aa8a2d
@ -34,6 +34,7 @@ this.aiStarted = function() {
|
|||||||
var ai = new worldScripts["oolite-libPriorityAI"].AILib(this.ship);
|
var ai = new worldScripts["oolite-libPriorityAI"].AILib(this.ship);
|
||||||
|
|
||||||
ai.setParameter("oolite_flag_listenForDistressCall",true);
|
ai.setParameter("oolite_flag_listenForDistressCall",true);
|
||||||
|
|
||||||
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
|
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
|
||||||
|
|
||||||
ai.setCommunicationsRole("hunter");
|
ai.setCommunicationsRole("hunter");
|
||||||
|
@ -33,6 +33,7 @@ this.aiStarted = function() {
|
|||||||
var ai = new worldScripts["oolite-libPriorityAI"].AILib(this.ship);
|
var ai = new worldScripts["oolite-libPriorityAI"].AILib(this.ship);
|
||||||
|
|
||||||
ai.setParameter("oolite_flag_listenForDistressCall",true);
|
ai.setParameter("oolite_flag_listenForDistressCall",true);
|
||||||
|
|
||||||
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
|
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
|
||||||
|
|
||||||
ai.setCommunicationsRole("hunter");
|
ai.setCommunicationsRole("hunter");
|
||||||
|
@ -88,7 +88,7 @@ this.aiStarted = function() {
|
|||||||
/* Stay out of the way of hunters */
|
/* Stay out of the way of hunters */
|
||||||
{
|
{
|
||||||
condition: ai.conditionHostileStationNearby,
|
condition: ai.conditionHostileStationNearby,
|
||||||
configuration: ai.configurationSetDestinationToNearestHostileStation,
|
configuration: ai.configurationSetDestinationToNearestStation,
|
||||||
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
||||||
reconsider: 20
|
reconsider: 20
|
||||||
},
|
},
|
||||||
|
@ -78,7 +78,7 @@ this.aiStarted = function() {
|
|||||||
/* Stay away from dangerous stations */
|
/* Stay away from dangerous stations */
|
||||||
{
|
{
|
||||||
condition: ai.conditionHostileStationNearby,
|
condition: ai.conditionHostileStationNearby,
|
||||||
configuration: ai.configurationSetDestinationToNearestHostileStation,
|
configuration: ai.configurationSetDestinationToNearestStation,
|
||||||
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
||||||
reconsider: 20
|
reconsider: 20
|
||||||
},
|
},
|
||||||
|
@ -48,12 +48,13 @@ this.aiStarted = function() {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// chasing a bandit well off the spacelane is almost as good
|
||||||
|
// as destroying them
|
||||||
ai.setParameter("oolite_leaderRole","police");
|
ai.setParameter("oolite_leaderRole","police");
|
||||||
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
|
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
|
||||||
}
|
}
|
||||||
|
|
||||||
ai.setParameter("oolite_escortRole","wingman");
|
ai.setParameter("oolite_escortRole","wingman");
|
||||||
/* Needs to use existing entries in descriptions.plist */
|
|
||||||
|
|
||||||
ai.setCommunicationsRole("police");
|
ai.setCommunicationsRole("police");
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ this.aiStarted = function() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
condition: ai.conditionHostileStationNearby,
|
condition: ai.conditionHostileStationNearby,
|
||||||
configuration: ai.configurationSetDestinationToNearestHostileStation,
|
configuration: ai.configurationSetDestinationToNearestStation,
|
||||||
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
||||||
reconsider: 20
|
reconsider: 20
|
||||||
},
|
},
|
||||||
|
@ -72,7 +72,7 @@ this.aiStarted = function() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
condition: ai.conditionHostileStationNearby,
|
condition: ai.conditionHostileStationNearby,
|
||||||
configuration: ai.configurationSetDestinationToNearestHostileStation,
|
configuration: ai.configurationSetDestinationToNearestStation,
|
||||||
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
behaviour: ai.behaviourLeaveVicinityOfDestination,
|
||||||
reconsider: 20
|
reconsider: 20
|
||||||
},
|
},
|
||||||
|
@ -210,6 +210,10 @@ this.AILib = function(ship)
|
|||||||
this.__ltcache = {};
|
this.__ltcache = {};
|
||||||
this.__ltcachestart = clock.adjustedSeconds + 60;
|
this.__ltcachestart = clock.adjustedSeconds + 60;
|
||||||
}
|
}
|
||||||
|
if (!this.__ltcache.nearestStation)
|
||||||
|
{
|
||||||
|
this.__ltcache.nearestStation = this.ship.findNearestStation();
|
||||||
|
}
|
||||||
var newBehaviour = _reconsiderList.call(this,priorityList);
|
var newBehaviour = _reconsiderList.call(this,priorityList);
|
||||||
if (newBehaviour == null) {
|
if (newBehaviour == null) {
|
||||||
log(this.name,"AI '"+this.ship.AIScript.name+"' for ship "+this.ship+" had all priorities fail. All priority based AIs should end with an unconditional entry.");
|
log(this.name,"AI '"+this.ship.AIScript.name+"' for ship "+this.ship+" had all priorities fail. All priority based AIs should end with an unconditional entry.");
|
||||||
@ -635,7 +639,7 @@ AILib.prototype.fineThreshold = function()
|
|||||||
|
|
||||||
AILib.prototype.friendlyStation = function(station)
|
AILib.prototype.friendlyStation = function(station)
|
||||||
{
|
{
|
||||||
if (!station)
|
if (!station || !station.isInSpace)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -714,7 +718,7 @@ AILib.prototype.homeStation = function()
|
|||||||
// be an exact negation
|
// be an exact negation
|
||||||
AILib.prototype.hostileStation = function(station)
|
AILib.prototype.hostileStation = function(station)
|
||||||
{
|
{
|
||||||
if (!station)
|
if (!station || !station.isInSpace)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -764,6 +768,16 @@ AILib.prototype.isAggressive = function(ship)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AILib.prototype.isEscaping = function(ship)
|
||||||
|
{
|
||||||
|
if (ai.getParameter("oolite_flag_continueUnlikelyPursuits") != null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return !this.isAggressive(ship) && this.distance(ship) > 15000 && ship.speed > this.ship.maxSpeed && ship.speed > this.ship.speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
AILib.prototype.isFighting = function(ship)
|
AILib.prototype.isFighting = function(ship)
|
||||||
{
|
{
|
||||||
if (ship.isStation)
|
if (ship.isStation)
|
||||||
@ -990,6 +1004,10 @@ AILib.prototype.stationAllegiance = function(station)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (allegiance == "neutral" && system.mainStation.position.distanceTo(station) < 51200)
|
||||||
|
{
|
||||||
|
allegiance = "galcop"; // neutral stations in aegis
|
||||||
|
}
|
||||||
// cache default value
|
// cache default value
|
||||||
station.allegiance = allegiance;
|
station.allegiance = allegiance;
|
||||||
return allegiance;
|
return allegiance;
|
||||||
@ -1276,25 +1294,10 @@ AILib.prototype.conditionLosingCombat = function()
|
|||||||
// badly outnumbered; losing
|
// badly outnumbered; losing
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// if there is a hostile station nearby, probably best to leave
|
if (this.__ltcache.nearestStation && this.distance(this.__ltcache.nearestStation) < 51200 && this.hostileStation(this.__ltcache.nearestStation))
|
||||||
var ss = system.stations;
|
|
||||||
for (var i = 0; i < ss.length ; i++)
|
|
||||||
{
|
{
|
||||||
if (ss[i].isMainStation)
|
// if there is a hostile station nearby, probably best to leave
|
||||||
{
|
return true;
|
||||||
// avoid aegis entirely
|
|
||||||
if (this.distance(ss[i]) < 51200 && this.hostileStation(ss[i]))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (this.distance(ss[i]) < this.scannerRange && this.hostileStation(ss[i]))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; // not losing yet
|
return false; // not losing yet
|
||||||
@ -1426,8 +1429,6 @@ AILib.prototype.conditionFriendlyStationExists = function()
|
|||||||
var station = stations[i];
|
var station = stations[i];
|
||||||
if (this.friendlyStation(station))
|
if (this.friendlyStation(station))
|
||||||
{
|
{
|
||||||
// this is not a very good check for friendliness, but
|
|
||||||
// it will have to do for now
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1436,21 +1437,7 @@ AILib.prototype.conditionFriendlyStationExists = function()
|
|||||||
|
|
||||||
AILib.prototype.conditionFriendlyStationNearby = function()
|
AILib.prototype.conditionFriendlyStationNearby = function()
|
||||||
{
|
{
|
||||||
var stations = system.stations;
|
return this.friendlyStation(this.__ltcache.nearestStation) && this.distance(this.__ltcache.nearestStation) < 25600;
|
||||||
for (var i = 0 ; i < stations.length ; i++)
|
|
||||||
{
|
|
||||||
var station = stations[i];
|
|
||||||
if (this.friendlyStation(station))
|
|
||||||
{
|
|
||||||
// this is not a very good check for friendliness, but
|
|
||||||
// it will have to do for now
|
|
||||||
if (this.distance(station) < this.scannerRange)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1517,20 +1504,7 @@ AILib.prototype.conditionHomeStationNearby = function()
|
|||||||
|
|
||||||
AILib.prototype.conditionHostileStationNearby = function()
|
AILib.prototype.conditionHostileStationNearby = function()
|
||||||
{
|
{
|
||||||
var stations = system.stations;
|
return this.hostileStation(this.__ltcache.nearestStation) && this.distance(this.__ltcache.nearestStation) < 51200;
|
||||||
for (var i = 0 ; i < stations.length ; i++)
|
|
||||||
{
|
|
||||||
var station = stations[i];
|
|
||||||
if (this.hostileStation(station))
|
|
||||||
{
|
|
||||||
// stand well back
|
|
||||||
if (this.distance(station) < 51200)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2344,17 +2318,23 @@ AILib.prototype.behaviourDestroyCurrentTarget = function()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* This doesn't work: ships which are removed from the list
|
||||||
|
* because they're unreachable then end up being reselected the
|
||||||
|
* next time the ship scans for targets. */
|
||||||
|
/*
|
||||||
if (this.getParameter("oolite_flag_continueUnlikelyPursuits") == null)
|
if (this.getParameter("oolite_flag_continueUnlikelyPursuits") == null)
|
||||||
{
|
{
|
||||||
if (this.ship.target)
|
if (this.ship.target)
|
||||||
{
|
{
|
||||||
if (!this.isAggressive(this.ship.target) && this.distance(this.ship.target) > 15000 && this.ship.target.speed > this.ship.maxSpeed && this.ship.target.speed > this.ship.speed)
|
if (this.isEscaping(this.ship.target))
|
||||||
{
|
{
|
||||||
this.ship.removeDefenseTarget(this.ship.target);
|
this.ship.removeDefenseTarget(this.ship.target);
|
||||||
this.ship.target = null;
|
this.ship.target = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
if (this.ship.target)
|
if (this.ship.target)
|
||||||
{
|
{
|
||||||
@ -3531,6 +3511,59 @@ AILib.prototype.configurationSelectWitchspaceDestinationOutbound = function()
|
|||||||
|
|
||||||
/*** Destination configuration ***/
|
/*** Destination configuration ***/
|
||||||
|
|
||||||
|
|
||||||
|
AILib.prototype.configurationSetDestinationToHomeStation = function()
|
||||||
|
{
|
||||||
|
var home = this.homeStation();
|
||||||
|
if (home != null)
|
||||||
|
{
|
||||||
|
this.ship.destination = home.position;
|
||||||
|
this.ship.desiredRange = 15000;
|
||||||
|
this.ship.desiredSpeed = this.cruiseSpeed();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.ship.destination = this.ship.position;
|
||||||
|
this.ship.desiredRange = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AILib.prototype.configurationSetDestinationToGroupLeader = function()
|
||||||
|
{
|
||||||
|
if (!this.ship.group || !this.ship.group.leader)
|
||||||
|
{
|
||||||
|
this.ship.destination = this.ship.position;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.ship.destination = this.ship.group.leader.position;
|
||||||
|
}
|
||||||
|
this.ship.desiredRange = 2000;
|
||||||
|
this.ship.desiredSpeed = this.ship.maxSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AILib.prototype.configurationSetDestinationToMainPlanet = function()
|
||||||
|
{
|
||||||
|
if (system.mainPlanet)
|
||||||
|
{
|
||||||
|
this.ship.destination = system.mainPlanet.position;
|
||||||
|
this.ship.desiredRange = system.mainPlanet.radius * 3;
|
||||||
|
this.ship.desiredSpeed = this.cruiseSpeed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AILib.prototype.configurationSetDestinationToMainStation = function()
|
||||||
|
{
|
||||||
|
this.ship.destination = system.mainStation.position;
|
||||||
|
this.ship.desiredRange = 15000;
|
||||||
|
|
||||||
|
this.ship.desiredSpeed = this.cruiseSpeed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
AILib.prototype.configurationSetDestinationToNearestFriendlyStation = function()
|
AILib.prototype.configurationSetDestinationToNearestFriendlyStation = function()
|
||||||
{
|
{
|
||||||
var stations = system.stations;
|
var stations = system.stations;
|
||||||
@ -3595,12 +3628,11 @@ AILib.prototype.configurationSetDestinationToNearestHostileStation = function()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AILib.prototype.configurationSetDestinationToHomeStation = function()
|
AILib.prototype.configurationSetDestinationToNearestStation = function()
|
||||||
{
|
{
|
||||||
var home = this.homeStation();
|
if (this.__ltcache.nearestStation)
|
||||||
if (home != null)
|
|
||||||
{
|
{
|
||||||
this.ship.destination = home.position;
|
this.ship.destination = this.__ltcache.nearestStation.position;
|
||||||
this.ship.desiredRange = 15000;
|
this.ship.desiredRange = 15000;
|
||||||
this.ship.desiredSpeed = this.cruiseSpeed();
|
this.ship.desiredSpeed = this.cruiseSpeed();
|
||||||
}
|
}
|
||||||
@ -3612,41 +3644,6 @@ AILib.prototype.configurationSetDestinationToHomeStation = function()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AILib.prototype.configurationSetDestinationToGroupLeader = function()
|
|
||||||
{
|
|
||||||
if (!this.ship.group || !this.ship.group.leader)
|
|
||||||
{
|
|
||||||
this.ship.destination = this.ship.position;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.ship.destination = this.ship.group.leader.position;
|
|
||||||
}
|
|
||||||
this.ship.desiredRange = 2000;
|
|
||||||
this.ship.desiredSpeed = this.ship.maxSpeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
AILib.prototype.configurationSetDestinationToMainPlanet = function()
|
|
||||||
{
|
|
||||||
if (system.mainPlanet)
|
|
||||||
{
|
|
||||||
this.ship.destination = system.mainPlanet.position;
|
|
||||||
this.ship.desiredRange = system.mainPlanet.radius * 3;
|
|
||||||
this.ship.desiredSpeed = this.cruiseSpeed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
AILib.prototype.configurationSetDestinationToMainStation = function()
|
|
||||||
{
|
|
||||||
this.ship.destination = system.mainStation.position;
|
|
||||||
this.ship.desiredRange = 15000;
|
|
||||||
|
|
||||||
this.ship.desiredSpeed = this.cruiseSpeed();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
AILib.prototype.configurationSetDestinationToPirateLurk = function()
|
AILib.prototype.configurationSetDestinationToPirateLurk = function()
|
||||||
{
|
{
|
||||||
var lurk = this.getParameter("oolite_pirateLurk");
|
var lurk = this.getParameter("oolite_pirateLurk");
|
||||||
@ -3791,19 +3788,12 @@ AILib.prototype.configurationSetWaypoint = function()
|
|||||||
|
|
||||||
AILib.prototype.configurationSetNearbyFriendlyStationForDocking = function()
|
AILib.prototype.configurationSetNearbyFriendlyStationForDocking = function()
|
||||||
{
|
{
|
||||||
var stations = system.stations;
|
if (this.friendlyStation(this.__ltcache.nearestStation))
|
||||||
for (var i = 0 ; i < stations.length ; i++)
|
|
||||||
{
|
{
|
||||||
var station = stations[i];
|
if (this.distance(this.__ltcache.nearestStation) < this.scannerRange)
|
||||||
if (this.friendlyStation(station))
|
|
||||||
{
|
{
|
||||||
// this is not a very good check for friendliness, but
|
this.setParameter("oolite_dockingStation",this.__ltcache.nearestStation)
|
||||||
// it will have to do for now
|
return;
|
||||||
if (this.distance(station) < this.scannerRange)
|
|
||||||
{
|
|
||||||
this.setParameter("oolite_dockingStation",station)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ MA 02110-1301, USA.
|
|||||||
#import "OOCollectionExtractors.h"
|
#import "OOCollectionExtractors.h"
|
||||||
#import "OOMesh.h"
|
#import "OOMesh.h"
|
||||||
#import "OOConstToString.h"
|
#import "OOConstToString.h"
|
||||||
|
#import "OOEntityFilterPredicate.h"
|
||||||
|
|
||||||
|
|
||||||
static JSObject *sShipPrototype;
|
static JSObject *sShipPrototype;
|
||||||
@ -85,6 +86,7 @@ static JSBool ShipEquipmentStatus(JSContext *context, uintN argc, jsval *vp);
|
|||||||
static JSBool ShipSetEquipmentStatus(JSContext *context, uintN argc, jsval *vp);
|
static JSBool ShipSetEquipmentStatus(JSContext *context, uintN argc, jsval *vp);
|
||||||
static JSBool ShipSelectNewMissile(JSContext *context, uintN argc, jsval *vp);
|
static JSBool ShipSelectNewMissile(JSContext *context, uintN argc, jsval *vp);
|
||||||
static JSBool ShipFireMissile(JSContext *context, uintN argc, jsval *vp);
|
static JSBool ShipFireMissile(JSContext *context, uintN argc, jsval *vp);
|
||||||
|
static JSBool ShipFindNearestStation(JSContext *context, uintN argc, jsval *vp);
|
||||||
static JSBool ShipSetBounty(JSContext *context, uintN argc, jsval *vp);
|
static JSBool ShipSetBounty(JSContext *context, uintN argc, jsval *vp);
|
||||||
static JSBool ShipSetCargo(JSContext *context, uintN argc, jsval *vp);
|
static JSBool ShipSetCargo(JSContext *context, uintN argc, jsval *vp);
|
||||||
static JSBool ShipSetMaterials(JSContext *context, uintN argc, jsval *vp);
|
static JSBool ShipSetMaterials(JSContext *context, uintN argc, jsval *vp);
|
||||||
@ -448,6 +450,7 @@ static JSFunctionSpec sShipMethods[] =
|
|||||||
{ "explode", ShipExplode, 0 },
|
{ "explode", ShipExplode, 0 },
|
||||||
{ "fireECM", ShipFireECM, 0 },
|
{ "fireECM", ShipFireECM, 0 },
|
||||||
{ "fireMissile", ShipFireMissile, 0 },
|
{ "fireMissile", ShipFireMissile, 0 },
|
||||||
|
{ "findNearestStation", ShipFindNearestStation, 0 },
|
||||||
{ "getMaterials", ShipGetMaterials, 0 },
|
{ "getMaterials", ShipGetMaterials, 0 },
|
||||||
{ "getSafeCourseToDestination", ShipGetSafeCourseToDestination, 0 },
|
{ "getSafeCourseToDestination", ShipGetSafeCourseToDestination, 0 },
|
||||||
{ "getShaders", ShipGetShaders, 0 },
|
{ "getShaders", ShipGetShaders, 0 },
|
||||||
@ -2480,6 +2483,30 @@ static JSBool ShipFireMissile(JSContext *context, uintN argc, jsval *vp)
|
|||||||
OOJS_NATIVE_EXIT
|
OOJS_NATIVE_EXIT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// findNearestStation
|
||||||
|
static JSBool ShipFindNearestStation(JSContext *context, uintN argc, jsval *vp)
|
||||||
|
{
|
||||||
|
OOJS_NATIVE_ENTER(context)
|
||||||
|
|
||||||
|
ShipEntity *thisEnt = nil;
|
||||||
|
StationEntity *result = nil;
|
||||||
|
NSArray *stations = nil;
|
||||||
|
|
||||||
|
GET_THIS_SHIP(thisEnt);
|
||||||
|
|
||||||
|
OOJS_BEGIN_FULL_NATIVE(context)
|
||||||
|
stations = [UNIVERSE findShipsMatchingPredicate:IsStationPredicate parameter:NULL inRange:-1 ofEntity:thisEnt];
|
||||||
|
OOJS_END_FULL_NATIVE
|
||||||
|
|
||||||
|
result = [stations objectAtIndex:0];
|
||||||
|
|
||||||
|
OOJS_RETURN_OBJECT(result);
|
||||||
|
|
||||||
|
OOJS_NATIVE_EXIT
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// setBounty(amount, reason)
|
// setBounty(amount, reason)
|
||||||
static JSBool ShipSetBounty(JSContext *context, uintN argc, jsval *vp)
|
static JSBool ShipSetBounty(JSContext *context, uintN argc, jsval *vp)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user