Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. The Criminal Enterprises
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

    3. Suggestions

*DO NOT* SHARE MEDIA OR LINKS TO LEAKED COPYRIGHTED MATERIAL. Discussion is allowed.

[C#] Mod application structure for clean and short code


Art of Simulation
 Share

Recommended Posts

Art of Simulation

Hi,

 

I'm currently thinking about a mod / application structure for my mod, but I'm not sure about the structure I'm currently applying. What application structure do you use for your (big) mod projects?

 

For example, I'm having a Main class, which just handles enabling/disabling of the mod and some global stuff. I also have folders containing "Handlers", which execute certain parts of code. The handlers donot derive from GTA.Script, but they do set properties to Peds for example. So I would be calling the handler from the Main class for example. This way I can keep things seperated, and maintainable. So for example when I want to check if the current weapon of a ped is a pistol, I would have following code.

 

Normally, you could just do it like this all in your main class:

 

private void SomeMethod()
{
  if (Game.Player.Character.Weapons.Current == WeaponHash.Pistol || Game.Player.Character.Weapons.Current == WeaponHash.Pistol50 || Game.Player.Character.Weapons.Current == WeaponHash.MachinePistol
      || Game.Player.Character.Weapons.Current == WeaponHash.PistolMk2 || Game.Player.Character.Weapons.Current == WeaponHash.SNSPistol || Game.Player.Character.Weapons.Current == 	WeaponHash.CombatPistol)
  {
    // Yes, it's a pistol.
  }
}

 

But, eventually the class will grow and grow, and you could do some checks in seperate classes (in my opinion), to keep the code clean, readable and maintainable. So I create a "weaponHandler" for it. So I make a class "WeaponHandler.cs" (not deriving from GTA.Script).

 

Eventually it will look like this:

 

WeaponHandler.cs:

        public bool IsPistol(WeaponHash weaponHash)
        {
            if (weaponHash == WeaponHash.Pistol || weaponHash == WeaponHash.Pistol50 || weaponHash == WeaponHash.MachinePistol
                                                || weaponHash == WeaponHash.PistolMk2 || weaponHash == WeaponHash.SNSPistol || weaponHash == WeaponHash.CombatPistol)
            {
                return true;
            }

            return false;
        }

 

Main.cs:

private void SomeMethod()
{
 if (weaponHandler.IsPistol(Game.Player.Character.Weapons.Current))
 {
   // Yes, it's a pistol!
 }
}

 

You see, the main method is now much shorter, and when there's something wrong in checking the weapon type, or you want to add another weapon, you can do it in the weaponHandler.

 

But, I'm wondering, is this a good way to do this combined with scripthook? I'm used to this application structure as an WebAPI developer, but scripthook is a whole different thing.

What ways do you use to organize your code and keep it short, clean and readable?

 

I would be happy to hear them!

 

Link to comment
Share on other sites

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
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.