![]() |
#1
|
|||
|
|||
![]()
I spent a short bit of time looking at the new Beta API for a 'Mission Menu' and figuring out how to direct traffic. When you crash you can call for an ambulance.
Details and test mission download here: http://simhq.com/forum/ubbthreads.ph...ml#Post3387861 The interesting part of the script is here: Code:
else if (menuItemIndex == 6) { GamePlay.gpHUDLogCenter("Ambulance Dispatched!"); Player[] all = { player }; AiActor amb = GamePlay.gpActorByName("0_Chief"); // Our ambulance, defined as first vehicle in mission if (amb != null) { AiGroup g = (AiGroup)amb; // Everything with waypoints is always in groups AiWayPoint[] waypoints = g.GetWay(); // Get the waypoints it had foreach (AiWayPoint waypoint in waypoints) { //GamePlay.gpLogServer(all, "waypoint: x=" + waypoint.P.x.ToString() + " y=" + waypoint.P.y.ToString(), null); x = waypoint.P.x; y = waypoint.P.y; z = waypoint.P.z; // Remember this for late, as we need a good height from somewhere } Player me = GamePlay.gpPlayer(); AiActor where = me.Place(); Point3d pos = where.Pos(); // Get our position, i.e. where to send the ambulance Point3d target = new Point3d(pos.x, pos.y, z); // Set our target to be us //GamePlay.gpLogServer(all, "me: x=" + pos.x.ToString() + " y=" + pos.y.ToString() + " z=" + pos.z.ToString(), null); // Note: Set the z height to be the last waypoint height rather than it's real height, Pos seems a PoS Point3d last_known = new Point3d(amb.Pos().x, amb.Pos().y, z); AiGroundWayPoint[] newWaypoints = { new AiGroundWayPoint(ref last_known, 50.0, 0.0, 10.0), new AiGroundWayPoint(ref target, 50.0, 0.0, 10.0) }; g.SetWay(newWaypoints); // Off we go, on new route! AiWayPoint[] resetWaypoints = g.GetWay(); // Just diagnostics, i.e. can be removed but basically to check they took foreach (AiWayPoint waypoint in resetWaypoints) { //GamePlay.gpLogServer(all, "New waypoint: x=" + waypoint.P.x.ToString() + " y=" + waypoint.P.y.ToString(), null); } } setMainMenu(player); } |
|
|