Page 2 of 3
Re: Ship-to-Ship Comms OXP
Posted: Wed Jul 30, 2014 10:14 am
by phkb
With regard to requestDockingInstructions, I call the function and get a message like "Xeaten Station here. We have uploaded docking instructions to your flight console." No further messages come. If I send the request again nothing happens, so I'm assuming it's waiting for my ship to do something. If I try and dock I get fined for not following the protocol.
Unless there's something obvious I've missed, I going to call this one as "too hard for now" and move on.
Re: Ship-to-Ship Comms OXP
Posted: Wed Jul 30, 2014 3:33 pm
by cim
Definitely going for the autodock route. What it expects is that you'll carry out the docking instructions returned by requestDockingInstructions
, then call the method again to get the next step of the instructions. If you do that successfully enough times it probably will let you dock without fines, but you'll need to do quite a bit more work to give the player the necessary flight instructions.
Re: Ship-to-Ship Comms OXP
Posted: Wed Jul 30, 2014 5:27 pm
by Zireael
Phkb, how's the basic functionality coming along? Seeing as docking requests are a bit more problematic...
(3 more days until I can play Oolite again
)
Re: Ship-to-Ship Comms OXP
Posted: Wed Jul 30, 2014 10:24 pm
by phkb
What I have at the moment is a functional environment, but nothing that actually changes the gameplay. The MFD will display different message options based on what is currently targeted and the alert status. It will keep track of who you have sent a greeting to since your last launch, and remove that option when a ship is re-targeted. It will check if the targeted ship has cargo when determining whether to offer the "Drop 5 ton of cargo" message.
At the moment, you can send greetings, taunts and threats, and ships will respond to these messages after a suitable delay (ie, not straight away, so it looks more like they thought about the response). You can also ask if anyone is going to your destination system, and ships may choose to respond positively or negatively (ie. "Sure I'm going there. Tag along", or "Sorry, I'm going somewhere else").
Here's a question for everyone, though. If the player's alert status is "RED", should I hide the "Send greeting" option. It seems like an unnecessary option during combat, so my feeling is I should, but I'd like to hear some other opinions.
Anyway, the next phases of development are:
- Work out how to nudge the AI of NPC ships (eg, sending a taunt to a NPC firing at your could either make the NPC more accurate for a few seconds, or less accurate, or nothing at all. Sending a threat to a NPC brings in the small chance the ship might break off, based on it's own weaponry and the players, it's legal status and the players kill count. Sending a greeting to a NPC might make the NPC slight less likely to fire at the player)
- Work out how to tell an NPC ship to drop 5 tons of cargo without actually firing a shot.
- Work out how to tell NPC's "I surrender!" in a meaningful way
- Work out if it's possible to send a "I'm sorry" message to police or stations if you accidentally fire at them. Can their response be reduced to "OK, well, dock and pay a fine and we'll overlook it this time"?
- Building up a good set of transmissions and responses
- Testing with a variety of OXP's that I don't normally use.
Another thing I'd like to incorporate is a way for other OXP's to leverage the system. ie. an mission OXP can add a specific message to the list for specific targets, and have certain actions triggered when that message is sent. If someone can tell me of some OXP's that have ship-to-ship comms in them (like mission OXP's), I might have a look at what's been done before and how it could possibly use this system. But that's a longer term goal.
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 5:12 am
by phkb
Another question: What's the simplest method of making an entire pirate group leave the player alone, or decide to stop attacking? Completely, no refunds.
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 5:16 am
by phkb
And another question: Is there a simple way of assessing the power of one ship over another? ie. comparing a Krait to a Cobra, or a Sidewinder to a Fer-de-lance.
Edit: Actually I think I found this one: ship.threatAssessment.
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 6:02 am
by cim
phkb wrote:- Work out how to tell an NPC ship to drop 5 tons of cargo without actually firing a shot.
For a ship with a JS AI,
target.AIScript.oolite_intership.cargodemand = 5;
. You'll need to set the target to red alert somehow for it to notice the demand, which is easier to do by attacking it.
phkb wrote:- Work out how to tell NPC's "I surrender!" in a meaningful way
So long as the player is running away and not firing, NPCs will interpret that as surrender. It's just that many of them don't care... You can try removing the player from the target and defense target lists of nearby NPCs, and going from there.
phkb wrote:- Work out if it's possible to send a "I'm sorry" message to police or stations if you accidentally fire at them. Can their response be reduced to "OK, well, dock and pay a fine and we'll overlook it this time"?
1.80 does have situations in which a Clean pilot can hit a police ship or Coriolis and get away with it. If you want to add more, then probably the same mechanisms as surrender (though hitting the Coriolis is likely to put the player's bounty too high for a surrender to be accepted)
phkb wrote:Another question: What's the simplest method of making an entire pirate group leave the player alone, or decide to stop attacking? Completely, no refunds.
If the pirates attacked the player as a robbery, the detargeting (see "surrender" above) will work, and they won't attack the player again until they've tried to rob someone else, but once that's been done the player is fair game again.
If the pirates attacked the player because they thought the player was a bounty hunter and they wanted to get in first, they'll just do it again if you detarget them.
You can edit their
target.AIScript.playerRole
variable (on all ships in the group) to change it to something pirates will ignore.
phkb wrote:And another question: Is there a simple way of assessing the power of one ship over another?
You want the
ship.threatAssessment
method.
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 6:35 am
by phkb
For the dump cargo issue, could I run the "target.dumpCargo()" function, then do "target.performFlee()". Would that achieve the same thing?
For getting a pirate band to flee, how can I tell if the band is robbing you, as distinct to just wanting to kill you for the bounty?
Edit: Also, how can I tell the target is part of a pirate band, and find all the other members of the band?
Edit: One question from before: the "shipTargetLost" doesn't appear to fire when the player's target enters a wormhole. What event should I be looking at?
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 7:36 am
by phkb
cim, by the way, my summary back a few posts wasn't to indicate I hadn't read your earlier posts where you answered some of the questions. Sorry if it came across that way. I was just pointing out the progress I had made and where work is still to be done. All your suggestions have been really helpful and I don't want you to think I've rejected anything.
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 9:25 am
by Zireael
wow, phkb, you must be really good at programming if you managed to get that much done so quickly!
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 5:27 pm
by cim
phkb wrote:For the dump cargo issue, could I run the "target.dumpCargo()" function, then do "target.performFlee()". Would that achieve the same thing?
Probably better would be
Code: Select all
target.target = player.ship;
target.performAttack();
target.AIScript.oolite_priorityai.reconsiderNow();
after setting the demand. That way, if the player's target feels outclassed it'll switch to cargo dumping mode in a second or two, while if it (and its escorts) think they can take the player on, they won't dump cargo without a fight.
phkb wrote:For getting a pirate band to flee, how can I tell if the band is robbing you, as distinct to just wanting to kill you for the bounty?
Check the pirate AI. If they're in the middle of a robbery they'll have
target.AIScript.oolite_intership.cargodemanded
be the desired amount. That won't tell you if they're robbing the player or merely attacking the player because they interfered, but it doesn't really matter.
phkb wrote:Edit: Also, how can I tell the target is part of a pirate band, and find all the other members of the band?
Being certain about this is difficult.
Code: Select all
Ship.roleIsInCategory(ship.primaryRole,"oolite-pirate");
is probably the most reliable way to tell if a ship is a pirate.
ship.group
will then find the rest of them.
phkb wrote:Edit: One question from before: the "shipTargetLost" doesn't appear to fire when the player's target enters a wormhole. What event should I be looking at?
That may be a bug. I'll investigate further.
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 10:59 pm
by phkb
Zireael wrote:wow, phkb, you must be really good at programming if you managed to get that much done so quickly!
Well, programming is my day job!
cim, regarding the dump cargo response, in order to determine the response of the target (either "Here's some cargo", or "I'll fight you for it"), would I be able to look at "target.isFleeing", or "target.isPirateVictim"?
Re: Ship-to-Ship Comms OXP
Posted: Thu Jul 31, 2014 11:02 pm
by phkb
And a general OXP development question: is there a script I can use to easily put some specific ships in scanner range? Testing this OXP would be a lot simpler if I could launch and find a certain target to test on.
Re: Ship-to-Ship Comms OXP
Posted: Fri Aug 01, 2014 12:08 am
by Norby
This maybe useful, the another is surely not (a constant).
phkb wrote:put some specific ships in scanner range
Code: Select all
system.addShips("[adder]", 1, PS.position.add(PS.vectorForward.multiply(10000)),1000);
or
Code: Select all
var ships = system.addShips("pirate", 5, PS.position.add(PS.vectorForward.multiply(10000)),5000);
for(var i=0; i<ships.length; i++) {
if(ships[i]) ships[i].displayName = i+". Pirate "+ships[i].displayName;
}
Re: Ship-to-Ship Comms OXP
Posted: Fri Aug 01, 2014 5:41 am
by phkb
Thanks, Norby. That's very helpful.