Jump to content

Compatibility for mission builders: Blitz only mission for Tobruk owners?


Recommended Posts

I/JG54_chuishan
Posted (edited)

Hello folks!

I've encountered some trouble in mission building. I'm a TOBRUK owner and I'd like to build BLITZ only missions for my friends to share. 

 

However I have no clue on "BLITZ only" content in my FMB... All contents from TOBRUK and BLITZ mix together.

 

I made a full scale "Operation Dynamo" mission but found that only TOBRUK owners can enter my mission hosted... Also my friends with BLITZ could not open my mission, showing "This mission requires parts that have not been required Tobruk:100".

 

I tried to delete ALL the contents and objects that may possibly come from TOBRUK, but get disappointing results.

 

Any idea on this? If I need a "BLITZ only" game version to make a "BLITZ only" mission??

 

The compressed file contains my "Dynamo" missions made. v1.0 is the original mission made and v2.0 is my attempt to delete all TOBRUK contents.

Dunkirk test.zip

Edited by I/JG54_chuishan
Posted (edited)

The "Tobruk" only contend are the planes and some ground vehicles - besides de map, of couse; specific for North Africa scenery.

No reason for use then in the Channel, and if player don't own Tobruk, have no access for example at Bf 109 F's even non tropical versions.

 

But if is a "what if scenery" the solution is you make a version of the  mission for those who own Tobruk and one only for those who own only Channel map.

 

Tobruk - At top of mission .mis file:

 

[PARTS]
  core.100
  bob.100
  tobruk.100

 

Channel - remove the tobruk.100 reference, as well any plane, vehicle specific of Tobruk package.

[PARTS]
  core.100
  bob.100

BTW - I load mission 1 - just remove the Tobruk reference and at start two fishing boats colide, case this was not intentional, put some separation in between.

Paths for AI vehicles on ground/sea may differ from what run in FMB and what run when start the game and load this mission normally. seem this two

 


  Static616 ShipUnit.Boat_Fishing_Medium1 gb 319915.75 226634.22 -75.00 /sleep 0/skill 2/slowfire 1
  Static615 ShipUnit.Boat_Fishing_Medium1 gb 319915.75 226638.20 -30.00 /sleep 0/skill 2/slowfire 1

 

Change coordinates of their position a bit (specially the first)  in mission code (lines above), find then in FMB will be difficult. 

 

Other detail, player don't have plane, is just spectator, this was planed?

This is OK for MP, and for SP pPlayer can take control of any flyable aircraft of the mission, if have the correct options and controls set, but many people don't know this.

 

The scenery are good, well decorated places and the tank battle are running well, with some knocked out. :) 

 

BTW - If takeoff is required put windsock (Static > Environment) near the runway, for educate players about wind.

 

Put some Static Camera for some key points of the scenery, eg. the tank battle, adjusting  their height for ground level (minimal 2 meters).

 

 

Edited by Sokol1
I/JG54_chuishan
Posted
13 hours ago, Sokol1 said:

Tobruk - At top of mission .mis file:

 

Thank you for the answer and advice! I was wondering why the "parts" option in FMB is unclickable ?

 

Still practicing mission building skills, making full use of basic triggers. This mission is specifically designed for MP Luftwaffe side, since my Chinese friends prefer MP experiences.

 

I suppose we still lack some handy function for MP players, for example some markers on the map telling the location of major targets, like those in GB series. Also I found a lack of damaged objects in the FMB, especially damaged armor units and vehicles, thus raising some issues in recreating some scenarios like Dunkirk beach head... which should have contained a lot of deserted equipment. Finally, may be adding some sort of tags on FMB objects for mission builders to recognize which module they come from is a good idea? I believe it can reduce the confusion drastically. ?

 

 

Posted (edited)

CloD FMB functions basically allow visually place objects, plane/vehicles routes (waypoints)...

This editor was unfinished when original developers abandon the game,  and remain "as is", so have only 3 pre-made scripts for triggers and 1 for action, that became non functional if an  C# script is added to the mission.

 

For  events variety is need C# scripts, done outside (VIsual Studio, Notepad++...) and added in FMB Edit > Scripts > script box.

 

With script you can make that recon flight reveal targets on map, putting a icon in the place for the side of plane that make the recon.

But the function has an "It's CloD!"  (shortcoming/limitation/awkward way...), if the Recon was made by human player, this player will no see the icon in this map).

 

 

 

 

 

 

 

 

 


using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
using maddox.GP;


public class Mission : AMission
{

    class Recon
    {
        public Player ReconPlayer { get; internal set; }
        public List<GPUserLabel> Labels = new List<GPUserLabel>();
    
    
        public Recon(Player player, GPUserLabel userLabel)
        {
            ReconPlayer = player;
            if (userLabel != null)
            {
                Labels.Add(userLabel);
            }
        }
    }


    List<Recon> ActiveRecons = new List<Recon>();


    public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
    {
        base.OnPlaceEnter(player, actor, placeIndex);

        SetMainMenu(player);

    }


    enum MenuID
    {
        MainMenu,
        ReconMenu,
    }


    
    public void SetMainMenu(Player player)
    {
        GamePlay.gpSetOrderMissionMenu(player, false, (int)MenuID.MainMenu, new string[] { "Recon" }, new bool[] { true });
    }


    public void SetReconMenu(Player player)
    {
        GamePlay.gpSetOrderMissionMenu(player, true, (int)MenuID.ReconMenu, new string[] { "Set AAA Mark", "Set Tank Mark", "Set Plane Mark", "Set Factory Mark", "Set Car Mark", "Set Label", "Set Ship Mark", "Set WayPoint Mark", "Delete Marks" }, new bool[] { false, false, false, false, false, false, false, false, false });
    }


    public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex)
    {
        base.OnOrderMissionMenuSelected(player, ID, menuItemIndex);

        if (ID == 0)
        {
            // main menu
            if (menuItemIndex == 1)
            {
                SetReconMenu(player);
            }
            else
            {
                SetMainMenu(player);
            }
        }
        else if (ID == (int)MenuID.ReconMenu)
        {

            switch (menuItemIndex)
            {
                case 1:
                    AddReconMark(player, GPUserIconType.AAGun);
                    SetMainMenu(player);
                    break;
                case 2:
                    AddReconMark(player, GPUserIconType.Tank);
                    SetMainMenu(player);
                    break;
                case 3:
                    AddReconMark(player, GPUserIconType.Plane);
                    SetMainMenu(player);
                    break;
                case 4:
                    AddReconMark(player, GPUserIconType.Factory);
                    SetMainMenu(player);
                    break;
                case 5:
                    AddReconMark(player, GPUserIconType.Car);
                    SetMainMenu(player);
                    break;
                case 6:
                    AddReconMark(player, GPUserIconType.Label);
                    SetMainMenu(player);
                    break;
                case 7:
                    AddReconMark(player, GPUserIconType.Ship);
                    SetMainMenu(player);
                    break;
                case 8:
                    AddReconMark(player, GPUserIconType.Waypoint);
                    SetMainMenu(player);
                    break;
                case 9:
                    RemoveMarks(player);
                    SetMainMenu(player);
                    break;
                default:
                    SetMainMenu(player);
                    break;
            }
        }
    }


    private void RemoveMarks(Player player)
    {
        if (ActiveRecons.Exists(item => item.ReconPlayer == player))
        {
            Recon recon = ActiveRecons.Find(item => item.ReconPlayer == player);
            recon.Labels.ForEach(item => GamePlay.gpDeleteUserLabel(item));
            recon.Labels.Clear();
        }
        
    }


    private void AddReconMark(Player player, GPUserIconType iconType)
    {
        AiActor actor = player.Place();
        GPUserLabel newLable =null;

        if (actor != null)
        {
            Point2d pos = new Point2d(actor.Pos().x, actor.Pos().y);

            switch (iconType)
            {
                case GPUserIconType.AAGun:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "AAA", GamePlay.gpTimeofDay(), (int)GPUserIconType.AAGun);
                    break;
                case GPUserIconType.Tank:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "Tanks", GamePlay.gpTimeofDay(), (int)GPUserIconType.Tank);
                    break;
                case GPUserIconType.Plane:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "Planes", GamePlay.gpTimeofDay(), (int)GPUserIconType.Plane);
                    break;
                case GPUserIconType.Factory:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "Factory", GamePlay.gpTimeofDay(), (int)GPUserIconType.Factory);
                    break;
                case GPUserIconType.Car:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "Car", GamePlay.gpTimeofDay(), (int)GPUserIconType.Car);
                    break;
                case GPUserIconType.Label:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "Label", GamePlay.gpTimeofDay(), (int)GPUserIconType.Label);
                    break;
                case GPUserIconType.Ship:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "Ship", GamePlay.gpTimeofDay(), (int)GPUserIconType.Ship);
                    break;
                case GPUserIconType.Waypoint:
                    newLable = GamePlay.gpMakeUserLabel(pos, player, "Waypoint", GamePlay.gpTimeofDay(), (int)GPUserIconType.Waypoint);
                    break;
            }


            if (newLable != null)
            {
                if (ActiveRecons.Exists(item => item.ReconPlayer == player))
                    ActiveRecons.Find(item => item.ReconPlayer == player).Labels.Add(newLable);
                else
                    ActiveRecons.Add(new Recon (player, newLable));
                

                GamePlay.gpDrawUserLabel(player.Army(), newLable);

            }
        }
    }

    static string CreateTimeString(double num)
    {
        double hours = Math.Floor(num);
        double minutes = (num - hours) * 60.0;
        double seconds = (minutes - Math.Floor(minutes)) * 60.0;
        int H = (int)Math.Floor(hours);
        int M = (int)Math.Floor(minutes);
        int S = (int)Math.Floor(seconds);
        return H.ToString("00") + ":" + M.ToString("00") + ":" + S.ToString("00");
    }


    public override void OnUserCreateUserLabel(GPUserLabel ul)
    {
        base.OnUserCreateUserLabel(ul);

        GamePlay.gpLogServer(null, "OnUserCreateUserLabel: {0} created {1} Mark at {2} ", new object[] { ul.Player.Name(), ul.Text, CreateTimeString(ul.time) });

    }
}
 

From: http://forum.1cpublishing.eu/showthread.php?t=34676&highlight=show+user+label&page=2

 

 

Several vehicles and objects have an "destroyed" version.

 

See this example, a bombed area with damaged objects. The bomb crater  is an object and damage planes if they run over.

 

3567920.jpg?941

 

Truck destroyed: http://jimeez.weebly.com/uploads/7/5/7/2/7572658/5887952.jpg?941

 

Pictures from there (download links for templates no more functional, Aiwarfare "is history" now).?

 

I don't know nothing about C# script creation. 

You may find better help about FMB/scripts in ATAG or TWC forums, but now most of CloD "script'ers" are "retired". 

 

 

 

Quote

 


Dunkirk beach head... which should have contained a lot of deserted equipment. 
 

 

 

Regard Channel (bob) or Tobruk versions of objects/vehicles,  excluding few vehicles available only in Tobruk map, most vehicles object have can be use in both maps.

 

Just in object/vehicle properties > Actor  tick the box > "Show skin" and select the "tech skin" appropriated,  "default"  and "summer" for Channel and "desert" for Tobruk, same is applied to Crew Uniform.

 

Default is Army ~light brow uniform, RAF blue uniform and Desert an yellowish uniform.

 

"Mixed" put bot types (RAF and ARMY) together in some vehicles, e.g. in a Bus.

 

BTW - For see "persons" and their uniforms Conf.ini  nee have, under [Core] section.

SpawnHumans=1

Edited by Sokol1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...