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

Reply
 
Thread Tools Display Modes
  #1  
Old 06-21-2012, 06:40 PM
Blackdog_kt Blackdog_kt is offline
Approved Member
 
Join Date: Jan 2008
Posts: 2,715
Default Need some advice on C# documentation

I started a Bsc in computer science this year and today i just finished my final exams.
I'm probably going to keep myself busy with a few personal projects during the summer so that i don't get rusty, it turns out from what my professors tell me that i'm quite good at it for a beginner, plus i like the whole coding deal and i'm looking to expand my horizons a bit.

So, i'm thinking of taking up a side project on my free time that will revolve around CoD. I need some suggestions for books and/or online tutorials, but something that gets you through all key concepts.

What we're working on in uni is Java, so i have a grasp of key concepts in object oriented programming and modeling things comes very naturally to me. From what little i could find on C# (there's a lot available, but i didn't have the free time through the academic year to spend learning a second language on my own), it seems that the syntax at least is very similar.

However, i would prefer a comprehensive guide, because i think it's better to skip a chapter if i already know something, than not have documentation on something i lack knowledge of.

What i came up a few months ago was C# station: http://www.csharp-station.com/Default.aspx
At first glance it seems good, if someone with more knowledge on the subject could take a look and give me a second opinion it would be excellent.

Any other suggestions welcome, so that i can get working on it my spare time. Thanks in advance guys

P.S. What i'm thinking of is a supply tracking system for multiplayer, so that we can have some starting and victory conditions, then have a mini-campaign unfold depending on player actions.
Reply With Quote
  #2  
Old 06-21-2012, 09:02 PM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

The problem I have with many guides, especially online ones is they get too wordy.....because they can. When someone gets excited they have a need to purge all, .......

Anyway without falling into the same trap of wordy purging, I find dot pearl quite good for simple examples of basic methods for a newbie like me to understand.

http://www.dotnetperls.com/
Reply With Quote
  #3  
Old 06-22-2012, 04:59 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

The best way to learn a programming language is to use it

There are free e-books available for C#, you can take a look at:
http://www.readwriteweb.com/hack/201...books-on-c.php


And feel free to ask
Reply With Quote
  #4  
Old 06-22-2012, 08:15 AM
Blackdog_kt Blackdog_kt is offline
Approved Member
 
Join Date: Jan 2008
Posts: 2,715
Default

Thanks for the suggestions everyone.

Quote:
Originally Posted by FG28_Kodiak View Post
The best way to learn a programming language is to use it
True. I also got to reading the official documentation on MSDN.

The thing is that i'm in a spot where i know some things and foundation techniques that hold for most if not all OOP languages. For example, i had to create a card game for an assignment (we use Java in uni), so i'm familiar with modelling/extending classes properly, using control structures/statements, making a GUI with the built-in libraries and connecting it with the game state, exception handling, etc.

This brings me to a spot where i know how to do most of what i want to do, but having to translate it to another language: a matter of syntax and the specific language peculiarities.

For example, i see that C# can automatically create get/set methods, etc.
It's the small things like that which will be different.

I think i will start with the resources on MSDN and work in parallel with the links you guys gave me.

Also, i have one more question. When coding for a standalone program, i can just use the Visual Studio IDE to test and debug/execute, while following the language conventions.

But what are the conventions for using the code inside CoD? I always see people starting with a class declaration that is the same in all scripts, i think it's:

public class Mission : AMission

I assume the : symbol means extending a class, right?

Plus, is this a limitation of the public interface we're given by CoD? I assume the filename and class name have to match the name of the FMB-created mission and the class has to extend AMission (which is given to us by CoD), so that it inherits all the properties/methods we need. Am i correct?
Reply With Quote
  #5  
Old 06-22-2012, 08:40 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Quote:

public class Mission : AMission

I assume the : symbol means extending a class, right?
Mission is derived from AMission.

the abstract class AMission contains:
Code:
public abstract class AMission
{
    // Methods
    protected AMission();
    public virtual void Init(ABattle battle, int missionNumber);
    public virtual void Inited();
    public virtual bool IsMissionListener(int missionNumber);
    public virtual void OnActorCreated(int missionNumber, string shortName, AiActor actor);
    public virtual void OnActorDamaged(int missionNumber, string shortName, AiActor actor, AiDamageInitiator initiator, NamedDamageTypes damageType);
    public virtual void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages);
    public virtual void OnActorDestroyed(int missionNumber, string shortName, AiActor actor);
    public virtual void OnActorTaskCompleted(int missionNumber, string shortName, AiActor actor);
    public virtual void OnAiAirNewEnemy(AiAirEnemyElement element, int army);
    public virtual void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft);
    public virtual void OnAircraftCutLimb(int missionNumber, string shortName, AiAircraft aircraft, AiDamageInitiator initiator, LimbNames limbName);
    public virtual void OnAircraftDamaged(int missionNumber, string shortName, AiAircraft aircraft, AiDamageInitiator initiator, NamedDamageTypes damageType);
    public virtual void OnAircraftKilled(int missionNumber, string shortName, AiAircraft aircraft);
    public virtual void OnAircraftLanded(int missionNumber, string shortName, AiAircraft aircraft);
    public virtual void OnAircraftLimbDamaged(int missionNumber, string shortName, AiAircraft aircraft, AiLimbDamage limbDamage);
    public virtual void OnAircraftTookOff(int missionNumber, string shortName, AiAircraft aircraft);
    public virtual void OnAutopilotOff(AiActor actor, int placeIndex);
    public virtual void OnAutopilotOn(AiActor actor, int placeIndex);
    public virtual void OnBattleInit();
    public virtual void OnBattleStarted();
    public virtual void OnBattleStoped();
    public virtual void OnCarter(AiActor actor, int placeIndex);
    public virtual void OnMissionLoaded(int missionNumber);
    public virtual void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex);
    public virtual void OnPersonHealth(AiPerson person, AiDamageInitiator initiator, float deltaHealth);
    public virtual void OnPersonMoved(AiPerson person, AiActor fromCart, int fromPlaceIndex);
    public virtual void OnPersonParachuteFailed(AiPerson person);
    public virtual void OnPersonParachuteLanded(AiPerson person);
    public virtual void OnPlaceEnter(Player player, AiActor actor, int placeIndex);
    public virtual void OnPlaceLeave(Player player, AiActor actor, int placeIndex);
    public virtual void OnPlayerArmy(Player player, int army);
    public virtual void OnPlayerConnected(Player player);
    public virtual void OnPlayerDisconnected(Player player, string diagnostic);
    public virtual void OnSingleBattleSuccess(bool success);
    public virtual void OnTickGame();
    public virtual void OnTickReal();
    public virtual void OnTrigger(int missionNumber, string shortName, bool active);
    public virtual void Timeout(double sec, DoTimeout doTimeout);

    // Properties
    public ABattle Battle { get; private set; }
    public IGamePlay GamePlay { get; }
    public int MissionNumber { get; private set; }
    public int MissionNumberListener { get; protected set; }
    public ITime Time { get; }
}
the virtual methods are called by events (Player enters an AiActor, Plane is Landing etc.) and can replaced by the programmer (override) so you can react to the game events.

AMission and in addition the GamePlay Object (from interface class IGamePlay) are the two important classes to get informations from the Game.

IGamePlay:
Code:
public interface IGamePlay
{
    // Methods
    AiActor gpActorByName(string actorName);
    bool gpActorIsValid(AiActor actor);
    AiAirGroup gpAiAirGroup(int ID, int army);
    AiAirGroup[] gpAirGroups(int Army);
    AiAirport[] gpAirports();
    int[] gpArmies();
    string gpArmyName(int army);
    void gpAviPlay(string args);
    bool gpBattleIsRun();
    void gpBattleStop();
    AiBirthPlace[] gpBirthPlaces();
    ISectionFile gpConfigUserFile();
    ISectionFile gpCreateSectionFile();
    ISectionFile gpCreateSectionFile(string line, out string firstWord);
    DifficultySetting gpDifficultyGet();
    IRecalcPathParams gpFindPath(Point2d a, double ra, Point2d b, double rb, PathType type, int army);
    int gpFrontArmy(double x, double y);
    double gpFrontDistance(int army, double x, double y);
    bool gpFrontExist();
    AiAction gpGetAction(string name);
    AiTrigger gpGetTrigger(string name);
    AiGroundGroup[] gpGroundGroups(int Army);
    void gpHUDLogCenter(string msg);
    void gpHUDLogCenter(Player[] to, string msg);
    void gpHUDLogCenter(Player[] to, string msg, object[] parms);
    void gpHUDLogCenter(Player[] to, string msg, object[] parms, double lifeTime);
    object[] gpInvoke(object[] args);
    bool gpIsServerDedicated();
    bool gpIsServerSingle();
    bool gpIsValidAccess();
    LandTypes gpLandType(double x, double y);
    ISectionFile gpLoadSectionFile(string fileName);
    void gpLogServer(Player[] to, string format, object[] args);
    void gpLogServerArg(bool newArg, string format, object[] parms);
    void gpLogServerBegin(Player[] to, string format);
    void gpLogServerEnd();
    AiAirGroup gpMakeAirGroup(AiAircraft[] items, AiAirWayPoint[] way);
    int gpNextMissionNumber();
    Player gpPlayer();
    void gpPostMissionLoad(ISectionFile file);
    void gpPostMissionLoad(string fileName);
    Player[] gpRemotePlayers();
    string gpSectorName(double x, double y);
    void gpSetOrderMissionMenu(Player player, bool thisSubMenu, int ID, string[] keys, bool[] bSubMenu);
    ITime gpTime();
}
Reply With Quote
  #6  
Old 06-22-2012, 02:16 PM
Blackdog_kt Blackdog_kt is offline
Approved Member
 
Join Date: Jan 2008
Posts: 2,715
Default

Cheers, thanks a lot. I'll try to have a look over the weekend and see what i make out of it all.
Reply With Quote
  #7  
Old 06-23-2012, 03:11 PM
ATAG_MajorBorris's Avatar
ATAG_MajorBorris ATAG_MajorBorris is offline
Approved Member
 
Join Date: Mar 2010
Location: Minnesota, USA
Posts: 342
Default

Good Luck Blackdog

If all goes well will you use these skills for missions building too?
__________________
ASUS Sabertooth MB--Intel 2600k@4.7--EVGA GTX580 3GB--Corasir 1200 watt psu--Corsair 16gb 1866--Corsair H70 cooler--Corsair 650d case--OCZ Vertex 3--Track IR5--CH Eclipse Yoke--CH Trottle Quadrant--CH MFP--CH Rudders-MSFF2
Reply With Quote
Reply


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 12:35 AM.


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