Fulqrum Publishing Home   |   Register   |   Today Posts   |   Members   |   UserCP   |   Calendar   |   Search   |   FAQ

Go Back   Official Fulqrum Publishing forum > Fulqrum Publishing > IL-2 Sturmovik: Cliffs of Dover > FMB, Mission & Campaign builder Discussions

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #11  
Old 05-18-2011, 04:11 AM
TheEnlightenedFlorist TheEnlightenedFlorist is offline
Approved Member
 
Join Date: May 2011
Location: SLC, Utah, USA
Posts: 143
Default

Well, I've been messing around with changing spawn points for a while and I've got it mostly working except for one huge problem. The new spawn points don't update until I switch teams. For example, if I'm on red team and BirthPlace_1 switches to blue, I can still spawn there until I switch to blue and then back to red. I suspect it has something to do with the first mission still running after the second one is started, or the code isn't destroying BirthPlaces properly. It destroys "AiBirthPlaces". Do players use "AiBirthPlaces", or is that only for the AI. I saw no way to get a list of player "BirthPlaces".

Here's the code and the missions attached. If anybody sees any problems with it, please tell me. The spawn points and front lines will change sixty seconds after the mission starts.

Code:
using System;
using System.Collections;
using maddox.game;
using maddox.game.world;


public class Mission : AMission
{
    // MissionMarker class. Equivalent to "Front Markers" in FMB
    internal class MissionMarker
    {
        internal double x;  //x coordinate
        internal double y;  //y coordinate
        internal int army;  //army that "owns" the marker. 1 is red. 2 is blue.

        internal MissionMarker(double x, double y, int army) { this.x = x; this.y = y; this.army = army; }
    }

    //create mission markers
    private MissionMarker[] MissionMarkers = new MissionMarker[]
    {   new MissionMarker(12741, 16068, 1),
        new MissionMarker(17372, 11070, 1),
        new MissionMarker(23349, 23045, 2),
        new MissionMarker(29122, 22331, 2)
    };

    //wheter or not markers have been initialized
    bool markersNotInitialized = true;

    public override void OnTickGame()
    {
        //if markers are not initialized, they won't show up on the player's map
        if (markersNotInitialized)
        {
            //just setting the markers army equal to it's current army
            for (int i = 0; i < MissionMarkers.Length; i++)
                GamePlay.gpPostMissionLoad(CreateNewFrontLineMission(i, MissionMarkers[i].army));

            markersNotInitialized = false;
        }
    }

    internal ISectionFile CreateNewFrontLineMission(int markerNum, int newArmy)
    {
        //change the mission markers army to the new army
        MissionMarkers[markerNum].army = newArmy;

        //destroy all existing BirthPlaces/SpawnPoints, but only if the markers have been initialized
        if (!markersNotInitialized)
        {
            foreach (AiBirthPlace bp in GamePlay.gpBirthPlaces())
            {
                if (bp != null)
                    bp.destroy();
            }
        }

        //?? This must be the code that turns MissionMarkers into FrontMarkers
        ISectionFile f = GamePlay.gpCreateSectionFile();
        string sect;
        string key;
        string value;
        sect = "FrontMarker";
        for (int i = 0; i < MissionMarkers.Length; i++)
        {
            key = "FrontMarker" + i.ToString();
            value = MissionMarkers[i].x.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat) + " " + MissionMarkers[i].y.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat) + " " + MissionMarkers[i].army.ToString();
            f.add(sect, key, value);
        }

        return f;
    }

    public override void OnTrigger(int missionNumber, string shortName, bool active)
    {
        //call base classes OnTrigger method.
        base.OnTrigger(missionNumber, shortName, active);

        //if the trigger that was called is the trigger that we're looking for
        if (shortName.Equals("trigger1") && active)
        {
            GamePlay.gpHUDLogCenter("Trigger1");

            //change the mission marker at 0 to blue army
            GamePlay.gpPostMissionLoad(CreateNewFrontLineMission(0, 2));

            //load new mission to change base ownership
            GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/triggerTest/changeBase.mis");

        }

        //not sure what this does either. Do some action. From where?
        AiAction action = GamePlay.gpGetAction(ActorName.Full(missionNumber, shortName));
        if (action != null)
            action.Do();
    }
}
Attached Files
File Type: zip triggerTest.zip (2.6 KB, 6 views)
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 04:40 PM.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.