Giter Club home page Giter Club logo

modulemanager's People

Contributors

al2me6 avatar bengt avatar bfishman avatar blowfishpro avatar dhxgit avatar jberkman avatar jrossignol avatar kaisforza avatar kerbas-ad-astra avatar linuxgurugamer avatar nathankell avatar olympic1 avatar ozraven avatar pjf avatar sarbian avatar shadowmage45 avatar siimav avatar sirdiazo avatar swamp-ig avatar taraniselsu avatar teknoman117 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

modulemanager's Issues

KSP stuck on loading applying module manager patches

While loading KSP when it says loading Module manager patches it gets stuck at the part FS nose engine electric and just sits there. If I remove Firespitter it loads I've tried deleteing the module manager cache and reinstalling it.

From KSP log
'Firespitter/Parts/Engine/FS_noseEngineElectric/part/FSnoseEngineElectric'
[ERR 17:44:23.819] [ShipTemplate]: No Resource definition found for RESOURCE

[LOG 17:44:23.822] FSCoolant not found in resource database. Propellant Setup has failed.
[EXC 17:44:23.824] NullReferenceException: Object reference not set to an instance of an object
ModuleEngines.SetupPropellant ()
ModuleEngines.OnLoad (.ConfigNode node)
PartModule.Load (.ConfigNode node)
Part.AddModule (.ConfigNode node)
PartLoader.ParsePart (.UrlConfig urlConfig, .ConfigNode node)
PartLoader+��.MoveNext ()
[EXC 17:44:23.827] NullReferenceException: Object reference not set to an instance of an object
Firespitter.engine.FSengineSounds.createGroup (.FXGroup group, System.String name, Boolean loop)
Firespitter.engine.FSengineSounds.OnStart (StartState state)
Part.ModulesOnStart ()
Part+��.MoveNext ()
[LOG 17:44:41.074] RemoteTech: ModuleRTAntennaPassive: OnDestroy

Making on linux?

I have no idea how to make it on linux. simply trying to make yeilds error CS0006: Metadata file 'UnityEngine' could not be found . I assume I have to get the unity editor, but is there a mistake in the file first?

delete issues in 2.6.15

there's an issue in 2.6.15 with the delete (!) command for keys.

how to reproduce:

//// CFG /////////////////

TESTNODE
{
    testkey = 0
    testkey = 1
    testkey = 2
    testkey = 3
}
@TESTNODE
{
    !testkey,* = DEL
}
//////////////////////////


// RESULT ////////////////

UrlConfig
{
    name = TESTNODE
    type = TESTNODE
    parentUrl = /test
    url = /test/TESTNODE
    TESTNODE
    {
        testkey = 1
        testkey = 2
        testkey = 3
    }
}

//////////////////////////

!testkey,* = DEL

should delete all "testkey"s but deletes only the first one instead

I guess this is not intended, maybe it has something to do with the patch @ThomasKerman added for issue #37

Target All keys bug

using the feature FindAndReplace is now failing to apply when targetting all keys with ,*

Steps to reproduce:
1- clean install of KSP 1.2.1
2- MM 2.7.2
3- following custom config

TEST
{
	key = 1 2 3 4
	key = 4 5 6 7
	key = 7 8 9 0
	key = 10 11
}
@TEST
{
	@key ^= :$:x:
	@key,* ^= :$:y:
	@key,1 ^= :$:z:
	@key,* ^= :4:w:
	@key,2 ^= :7:k:
}

this is what the cache contains at the end:

UrlConfig
{
	name = TEST
	type = TEST
	parentUrl = /TEST
	url = /TEST/TEST
	TEST
	{
		key = 1 2 3 4x
		key = 4 5 6 7z
		key = k 8 9 0
		key = 10 11
	}
}

as you can see the only missing letters are y and w which are both supposed to be applied to all keys by using ,*

find attached logs and other relevant files
(I've added .txt at the end, because github)

output_log.txt
ModuleManager.ConfigCache.txt
TEST.cfg.txt

Spaces in Part name

Is there any way to properly deal with spaces in a part name while making a config? I am currently just putting a * where the space should go, but I would like to use a more eloquent solution if it is available.

White space errors message not readable.

A edit will Generate a error if there is a space in the wrong place

@PART[DERP_FuelCan | DERP_InlineTank] {...} 

compared to

@PART[DERP_FuelCan|DERP_InlineTank] {...} 

This error is very hard to find in the ksp logs.

MM_REINITIALIZE not working

KSP-1.3, MM 2.8.0

Hi.

I'm trying to utilize the MM_REINITIALIZE feature as described in the Wiki.

The setup is as follows:

  • A mod (ConfigurableContainers) is installed and a vessel is launched.
  • This vessel contains a stock part with a ModuleSwitchableTank installed via MM patch.
  • The game is saved and exited.
  • Then I edit the MM patch and replace ModuleSwitchableTank with the ModuleTankManager.
  • The game is loaded again, and ModuleTankManager tries to check for MM_REINITIALIZE value in OnLoad to recreate its configuration from scratch in flight.

But its OnLoad method never gets called, and it ends up with the configuration copied from the prefab, which is the opposite to the desired behaviour.

Hidden folder support on Linux

On ubuntu the default folder for steam games is ~/.local/share/Steam/steamapps/common
The dialogue for selecting the location of KSP does not show any hidden folders, at least having the option to input the folder path manually would fix it. As a workaround I had to create a link.

MM gets stuck in load screen.

If MM loads (not from cache) and works on the cfg files it's getting stuck and only continuous to load when I click into the KSP screen. I run KSP with the options -popupwindow and -force-opengl.
This happens only if I change to my to my second screen and doing something there like reading emails and so on.

No errors in the log related to this.

Handled exception when reloading the game database

[LOG 20:08:42.437] [ModuleManager] Checking Cache
[LOG 20:08:42.459] [ModuleManager] Exception in IsCacheUpToDate : An element with the same key already exists in the dictionary.
  at System.Collections.Generic.Dictionary`2[System.String,System.String].Add (System.String key, System.String value) [0x00000] in <filename unknown>:0 
  at ModuleManager.MMPatchLoader.IsCacheUpToDate () [0x00000] in <filename unknown>:0 
  at ModuleManager.MMPatchLoader+<ProcessPatch>d__46.MoveNext () [0x00000] in <filename unknown>:0 

I noticed this when making changes for the prerelease, but confirmed on KSP 1.2.2 and the last official release of MM. I discovered that filesSha isn't being cleared and MM tries to add all the configs in the database to it again.

Target all keys with a math operator bug

MM 2.7.3. Using target all keys with a math operator assigns garbage on the last match. It does appear to work fine with simple assignment. Can't access the server to grab the previous version. It does happen with 2.7.0 though.

(I'm trying to do this: @node_stack*,*[1,,] *= #$factor$)

Addition:

MMADD
{
	field_a = 1
	
	field_b = 1
	field_b = 1
	
	field_c = 1
	field_c = 1
	field_c = 1
	field_c = 1
}

@MMADD
{
	@field_a,* += 2
	@field_b,* += 2
	@field_c,* += 2
}

Result:

	MMADD
	{
		field_a = 15

		field_b = 3
		field_b = 13

		field_c = 3
		field_c = 3
		field_c = 3
		field_c = 9
	}

Multiplication:

MMMULT
{
	field_a = 1
	
	field_b = 1
	field_b = 1
	
	field_c = 1
	field_c = 1
	field_c = 1
	field_c = 1
}

@MMMULT
{
	@field_a,* *= 2
	@field_b,* *= 2
	@field_c,* *= 2
}

Result:

	MMMULT
	{
		field_a = 128

		field_b = 2
		field_b = 64

		field_c = 2
		field_c = 2
		field_c = 2
		field_c = 16
	}

Assignment is ok:

MMASSIGN
{
	field_a = 1
	
	field_b = 1
	field_b = 1
	
	field_c = 1
	field_c = 1
	field_c = 1
	field_c = 1
}

@MMASSIGN
{
	@field_a,* = 2
	@field_b,* = 2
	@field_c,* = 2
}

Result:

	MMASSIGN
	{
		field_a = 2

		field_b = 2
		field_b = 2

		field_c = 2
		field_c = 2
		field_c = 2
		field_c = 2
	}

Doing math on vectors

these are a couple of features that I think could be really useful:

1 - the ability of doing math on vectors

example:

key = 1,0,3,4  // original vector

@key[1] += 2 // adds 2 to the second element in the vector

key = 1,2,3,4  // final result

2- the ability of targetting a specific vector in a node that has multiple copies of it

example:

Curve  // Original Node
{
key = 1,2,3
key = 2,0,4
key = 3,4,5
}
@Curve
{
@key[1],1 += 3       // adds 3 to the second element, of the second "key"
}
Curve
{
key = 1,2,3
key = 2,3,4   // final result
key = 3,4,5
}

the syntax I used is just an example :)

PS:

I hope this will allow also for the modification of all "key" vectors by using " ,* " instead of a specific number

targetting + checking content weird bug

this is a really weird behaviour, when I made the test config I wasn't expecting this to be the result:

// CONFIG
TESTNODE
{
    SUBNODE
    {
        name = one
    }
    SUBNODE
    {
        name = two
    }
    SUBNODE
    {
        name = three
    }
}
@TESTNODE
{
    @SUBNODE,1:HAS[#name[*]]
    {
        second = true
    }
}

// RESULT
UrlConfig
{
    name = TESTNODE
    type = TESTNODE
    parentUrl = /test
    url = /test/TESTNODE
    TESTNODE
    {
        SUBNODE
        {
            name = one
        }
        SUBNODE
        {
            name = two
            second = true
        }
        SUBNODE
        {
            name = three
            second = true
        }
    }
}

the behaviour is the same both in 2.6.13 and 2.6.16

Possible problem with long parameters for NEEDS.

OK Sarbian, sorry for last time let's try this again with a log file this time:

Using the same example as the last time, check my log at line 10199. The patch is applied even though FAR is not present. That particular patch is:

@part[quizTechMk1K10Cockpit]:NEEDS[FerramAerospaceResearch]:BEFORE[FerramAerospaceResearch]
{
@minimum_drag = 0
@maximum_drag = 0
@angularDrag = 0
!MODULE[ModuleLiftingSurface] {}
}

Cannot attach the ZIP file here for some reason, here is a link to it:

http://www.mediafire.com/file/j80570uq9sx9h1e/LOG.zip

Checking pass-order as intended?

Hey Sarbian,

I'm very sorry to trouble you, but I'm in the process of writing a bunch of ModuleManager tutorials¹, as I keep finding myself needing to reference the same things over and over again, and assume other folks therefore must also do the same.

I'm wanting to check the pass order run by MM is "as intended". In particular, where a set of patches run depends on on if a mod has a .dll or not. I keep being surprised when AIES_Aerospace runs after RealismOverhaul, because the first doesn't have a .dll, and the second does.

At first glance these doesn't feel right; if AIES releases with a .dll in the future, then the run ordering changes, and folks writing MM .cfgs need to know if their target bundles a .dll or not. (This came up because RealismOverhaul clearly thought it was running after the AIES pass, but instead runs before it.)

If this is as-intended, I can say so in the tutorials. If not, then I can say the behaviour may change.

Many, many thanks!

~ Paul


¹ The tutorials are being written as part of my work on The Kerbal Book, which means they may take a little time to finish, but I can assure you they'll be unencumbered when they are.

Exception from doing stuff I shouldn't have

I deleted a file that I didn't need anymore while KSP was starting up, and managed to trigger this exception. I wouldn't bother to raise it, except that it did cause the coroutine to die, which caused KSP to stop loading. Also, figured it would be an easy enough fix, if you choose to do it.

[EXC 22:40:33.381] IsolatedStorageException: Could not find file "C:\Program Files (x86)\Kerbal Space Program\GameData\ContractConfigurator\kso.cfg".
    System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options)
    System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share)
    System.IO.File.OpenRead (System.String path)
    System.IO.File.ReadAllBytes (System.String path)
    ModuleManager.MMPatchLoader.IsCacheUpToDate ()
    ModuleManager.MMPatchLoader+<ProcessPatch>c__Iterator0.MoveNext ()
    UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
    ModuleManager.MMPatchLoader:StartCoroutine(IEnumerator, Boolean)
    ModuleManager.MMPatchLoader:StartLoad(Boolean)
    ModuleManager.MMPatchLoader:StartLoad()
    ��:MoveNext()

target keys based on their value

I was thinking that it could be useful to have a way to target a key based on its value

let's say we have a node that looks like this:

BASKET
{
    fruit = banana
    fruit = blueberry
    fruit = lemon
}

and a patch that looks like this:

@BASKET
{
    @fruit:IS[lemon] = orange
    !fruit:IS[banana] = DEL
}

to get this output:

BASKET
{
    fruit = blueberry
    fruit = orange
}

also, having support for wildcard characters and math would be awesome, so you could do :IS[*berry] or :IS[>0]
stuff like that

I could look into implement this myself, but I'm scared by MM code xD

so for now I'm putting the idea out there to see what ppl think about it

Cache patched configurations to speed up loading times

When launching KSP with modded installs, ModuleManager can frequently take a significant amount of time to patch all of the configurations that need patching. If ModuleManager could be modified to cache the patched files, this could help speed up loading times.

Wrong version can run if all dlls aren't located in the same folder

The version election code doesn't work as-is because KSP only instantiates the last type loaded. A simple example:

[KSPAddon(KSPAddon.Startup.Instantly, true)]
public class VersionTester : MonoBehaviour
{
    void Start()
    {
        print(string.Format("Hello, world from {0}", Assembly.GetExecutingAssembly().GetName().Version));
    }
}

If you build three different versions of this, you'll end up with the output of only the last version loaded. Normally this will be the correct version assuming a sane naming scheme. If you name them out of order, you break the versioning.

What makes this subtle is that KSP appears to select the correct version regardless of name if the assemblies have same-name but differing version KSPAssembly attributes. But this only works for same-folder assemblies; otherwise it defaults to the breadth-first last-loaded assembly when resolving types.

A concrete example: let's say some mod distributes an outdated version of MM inside its own subfolder:

GameData/ModuleManager_1_5.dll
GameData/ModuleManager_1_6.dll
GameData/ModDistributingMM/ModuleManager_1_4.dll

In the above example, the wrong really old version will be loaded. The exact same version of any KSPAddon-carrying MonoBehaviours will then be run, once for each dll found. Even if you specify the exact type using reflection and try to instantiate a GameObject from a particular version, Unity will end up resolving to the latest-loaded type matching its name. The only way I could find around this was to put each version of the DLL in its own namespace.

Possible problem with long parameters for NEEDS.

After seeing several patches getting applied even though their NEEDS is not met, I have come to the following conclusion:

Long parameters are not processed correctly by NEEDS.

Prime example of this, verifiable on several mod that use similar syntax:

@part[aeroPartxx]:NEEDS[FerramAerospaceResearch]:BEFORE[FerramAerospaceResearch]
{
@minimum_drag = 0
@maximum_drag = 0
@angularDrag = 0
!MODULE[ModuleLiftingSurface] {}
}

Even though FerramAerospaceResearch IS NOT available, the patch still gets applied.

MM cache is not compatible with \n

example:

NODE
{
    description = FirstLine\nSecondLine
}

will be saved to the cache as

UrlConfig
{
    name = NODE
    type = NODE
    parentUrl = /test
    url = /test/NODE
    NODE
    {
        description = FirstLine
SecondLine
    }
}

which means that when running KSP without MM cache the description will be loaded as

FirstLine\nSecondLine

while when running KSP and loading the nodes from the MM cache, the description will be loaded as just

FirstLine

/= operator produces the reciprocal of the expected value.

Test case:
The stock SP-L solar panel (solarPanels2) has a mass of 0.025.
Apply this patch with MM 2.3.2:

$PART[solarPanels2] {
    @name = solarPanelsMMTestDivide
    @title = SP-L Solar Panels (hacked)
    @mass /= 2
}

Expected: The "hacked" copy of the panel has a mass of 0.0125.
Actual: The "hacked" panel has a mass of 80.

Probable fix: Reverse the order of operands s and os on moduleManager.cs line 1130.

The same problem likely affects the subtraction operator a few lines later.

Create-or-replace semantics with nodes that don't have a name

This is a follow-up to Majiir/Kethane#263. I'm interested in writing MM patches for parts that use the Kethane modules, which are identified by the (hopefully) unique identifier Name, rather than the conventional name. I've been running into the problem that create-or-replace syntax doesn't work if you can't identify a node by name. Something like

%NODE[*]:HAS[#Name[Foo]]

doesn't work by design because of uniqueness issues. As @Majiir pointed out, the same problem can occur with other parts of the KSP config space, such as testing for the presence of an EXPERIMENT_DEFINITION (where id appears to be a unique key).

! Not deleting in .21

In a cfg I have

!mesh

Which used to remove "mesh=model". However when I check the database in game, the mesh=model key remains in ksp1.1. The various additions my cfg makes to the part in question appear as expected.

Among them is a MODEL{...} node of course.

Allow renaming of value.name

Right now the only way to rename a value is to create a new value with the same data as the original, i.e.
MoonSrfLanded = #$MunSrfLanded$
!MunSrfLanded = DEL

It would be very convenient to have a new operator (is % used?) like
MunSrfLanded %= MoonSrfLanded
where the value.name would be changed to MoonSrfLanded.

Even better would be supporting
Mun* %= Moon*

Save File Backup

Your save file backup method can overwrite every .sfs file in the save file directory when it triggers, including the quicksave.sfs and any backup .sfs files present. I'm not sure exactly which circumstances trigger the plugin to create a backup folder, and overwrite the default files (needsBackup and needsSave both set to true).

Only the persistent.sfs should be updated, as the quicksave and any backup files may have been created for a reason and should not be overwritten, even if the backup folder contains the originals.

Cloned parts appear to be located in same path (file?) as originals

When queried by other plugins, cloned parts appear as if they're all added to the file of the original part.
Filter Extensions uses the cfg path for some of the filtering and I've had several queries about cloned & modded Squad parts showing up as Squad parts rather than the associated mod.

Is there reason that this is not the file the clone patch was located in?
Alternatively, is there any data pointing to the patch location?

FE uses the following to load the path to the part (assuming ap.partURL is invalid, which it normally is):
https://github.com/Crzyrndm/FilterExtension/blob/master/FilterExtension/LoadAndProcess.cs#L425-L432

using :BEFORE and :AFTER on the same node

not sure if this is how MM is intended to work, or if it's a bug so I'll just leave this here to discussion

when doing something like:

TESTNODE
{
	name = testnode
}
@TESTNODE:FOR[MOD]
{
	mod = now
}
@TESTNODE:BEFORE[MOD]:AFTER[MOD]
{
	runs = now
}

basically, I wanted to check if I could use :BEFORE[MOD]:AFTER[MOD] to run the same patch 2 times once before and once after a certain mod

I was expecting 2 results, either:

1- The patch runs only at :BEFORE[] because it's the first condition that is met and then the patch is "deleted"

2- The patch runs both before and after the mod

of course, it didn't run at all :D

if this is not intended I can share logs

EDIT:
to clarify, MM throws no errors. but the cache only shows:

UrlConfig
{
	name = testnode
	type = TESTNODE
	parentUrl = /test1
	url = /test1/testnode
	TESTNODE
	{
		name = testnode
		mod = now
	}
}

when if I use 2 different patches, one with BEFORE and one with AFTER the result is as you would expect:

UrlConfig
{
	name = testnode
	type = TESTNODE
	parentUrl = /test1
	url = /test1/testnode
	TESTNODE
	{
		name = testnode
		runs = now
		mod = now
		runs = now
	}
}

Feature Request: Flags (and not the type you fly)

Is there a way we can get flag indicators. These are basically strings that would indicate either user preferences or the existence of mods.

For instance:
$FuelSwitch=Firespitter could be used to set to use Firespitter fuelswitch to switch fuels.
and
$FuelSwitch=Intersteller could be used to set to use Intersteller fuelswitch instead.

Likewise these two could be detected with
@if $FuelSwitch=Firespitter { . . . }
and
@if $FuelSwitch=Intersteller { . . . }

Likewise:
$Firespitter could indicate that Firespitter was installed AND should be used for mods that it is not mandatory for, without using problematic autodetection methods. By default it would be filled with a default value non-null value to indicate that the variable exists, because this type of flag would be searched for.

This would make life a lot easier for mod makers, who could best utilize the system provided to them.

& not working properly

I had reports that KWRocketry had issues with one of the tech node missing, so I investigated and found the following:

This is the original syntax:

RDNode :NEEDS[!CommunityTechTree&!B9_Aerospace]

The above syntax was not working, in that it was not seeing that both the CommunityTechTree & B9_Aerospace were not installed.

The following worked individually:

RDNode :NEEDS[&!B9_Aerospace]
and

RDNode :NEEDS[!CommunityTechTree]

but together, it fails.
here is a zip with all the logs: https://www.dropbox.com/s/y7xnckqlrrq7bq4/kw-mm%20logs.zip?dl=0

!EXPERIMENT_DEFINITION doesn't delete definition; duplicates cause KSP to throw exception

Affects: versions 1.5.6 and 2.0.3

A config like this:

!EXPERIMENT_DEFINITION[crewReport]
EXPERIMENT_DEFINITION
{
    id = crewReport
    title = Crew Report
    baseValue = 5
    scienceCap = 5
    dataScale = 1
    requireAtmosphere = False
    situationMask = 63
    biomeMask = 7
    RESULTS
    {
        default = You record the crew's assessment of the situation.
    }
}

Will cause two "crewReport" ConfigNodes to exist (verified by:)

foreach (var node in GameDatabase.Instance.GetConfigNodes("EXPERIMENT_DEFINITION"))
    Log.Write("Experiment_def: {0}", node.ToString());

Then, any time ResearchAndDevelopment.GetExperimentIDs() is called, KSP will throw the following exception:

ArgumentException: An element with the same key already exists in the dictionary.
  at System.Collections.Generic.Dictionary`2[System.String,ScienceExperiment].Add (System.String key, .ScienceExperiment value) [0x00000] in <filename unknown>:0 

  at ResearchAndDevelopment.loadExperiments () [0x00000] in <filename unknown>:0 

  at ResearchAndDevelopment.GetExperimentIDs () [0x00000] in <filename unknown>:0 

  at ScienceAlert.Settings..ctor () [0x00000] in <filename unknown>:0 

  at ScienceAlert.Settings.get_Instance () [0x00000] in <filename unknown>:0 

  at ScienceAlert.AudioController..ctor () [0x00000] in <filename unknown>:0 

  at ScienceAlert.EffectController..ctor (ScienceAlert.ScienceAlert indi) [0x00000] in <filename unknown>:0 

  at ScienceAlert.ScienceAlert.Start () [0x00000] in <filename unknown>:0 

@<node>,1 adds to first resource if there is only one.

When running the following script "testval" is added to the first resource (index 0) if there is only one.

@PART[*]:HAS[@RESOURCE[MonoPropellant]]
{
    @RESOURCE,1
    {
        testval = yes
    }
}

Any part that has ONLY MonoPropellant as a resource will have "testval" set on the resource. If the part has more than one resource, including MonoPropellant, "testval" is correctly added to the second resource (index 1).

If this is expected behavior, please close.

Killing KSP invalidates the cache

If I exit KSP properly, "Leave to main menu -> back -> quit -> yes really", I get to reload the configs from cache.

If I just kill it (close window, CTRL-C, or similar), ModuleManager will reprocess everything from scratch on the next startup.

Until just now, I've hardly ever bothered with leaving KSP. The unexpected reload of 14k modules from cache was quite a surprise :)

Makefile seems to mess up compilation?

If I compile MM using make, the assembly fails to load in KSP with the following error:

AddonLoader: Instantiating addon 'ModuleManager' from assembly 'ModuleManager'
[ModuleManager] Adding ModuleManager to the loading screen 2
MissingManifestResourceException: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "ModuleManager.Properties.Resources.resources" was correctly embedded or linked into assembly "ModuleManager" at compile time, or that all the satellite assemblies required are loadable and fully signed.
at System.Resources.ResourceManager.AssemblyResourceMissing (System.String fileName) [0x00000] in :0
at System.Resources.ResourceManager.InternalGetResourceSet (System.Globalization.CultureInfo culture, Boolean createIfNotExists, Boolean tryParents) [0x00000] in :0
at System.Resources.ResourceManager.GetObject (System.String name, System.Globalization.CultureInfo culture) [0x00000] in :0
at ModuleManager.Properties.Resources.get_cat () [0x00000] in :0
at ModuleManager.ModuleManager.Awake () [0x00000] in :0
UnityEngine.GameObject:Internal_AddComponentWithType(Type)
UnityEngine.GameObject:AddComponent(Type)
AddonLoader:StartAddon(LoadedAssembly, Type, KSPAddon, Startup)
AddonLoader:StartAddons(Startup)
^^C:MoveNext()
UnityEngine.MonoBehaviour:StartCoroutine_Auto(IEnumerator)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
ESC^C:MoveNext()
UnityEngine.MonoBehaviour:StartCoroutine_Auto(IEnumerator)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
GameDatabase:StartLoad()
^C^E:MoveNext()
UnityEngine.MonoBehaviour:StartCoroutine_Auto(IEnumerator)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
LoadingScreen:Start()

Since it appears related to a localization error I can point that my default locale is Spanish, although I run KSP in an English one.

If I compile from MonoDevelop I don't run into the same issue.

Mod Compatibility (KOS(0.13.1)

Not sure who to bother with this issue so have reported it on both repositories.
When using the following .cfg

@part[probeCoreSphere]
{
MODULE
{
name = kOSProcessor
diskSpace = 512
}
}

I can launch the craft as normal, open the terminal and everything works fine and as it should. However, if i revert to launch the part does not load properly. It doesn't become active, the throttle doesn't jump up to 50% and the physics is not loaded so no 'pop' out of the ground. (I have left it for half an hour and it still didn't load so not a just need to wait a bit longer issue.)

If you then press Esc you get the game paused menu and the buttons activate as you mouse over them but they don't do anything. To exit you have to Alt + Tab out of the game.

For me this has tested at 100% repeat-ability on both 32 and 64 bit versions of the game.
The KOS parts don't cause this and using Module Manager to edit parts in other ways doesn't cause the bug.

Other than these 2 mods ksp is a clean copy of 0.24.2.

Localization Modding

I'm working on localization for Dutch (later French and German), but in order to get it to work you need to edit the settings.cfg and buildID.txt files. Would it be possible to edit both files using MM?

"add only if missing" feature request

do not take this as an issue or anything, just a simple suggestion
if you have the time to do something like this I would really apreciate it, otherwise no hurt feelings :D

basically, I'd like to have an operation that adds a variable only if it's missing
example:

starting from this nodes

TESTNODE
{
    name = first
    notmissing = true
}
TESTNODE
{
    name = second
}
TESTNODE
{
    name = third
    notmissing = true
}

to add "notmissing = true" to the second node I would need to use this:

@TESTNODE:HAS[~notmissing[*]]
{
    notmissing = true
}

this will check all the nodes and add notmissing = true only to those without it.

this is fine when you have only 1 variable to check, but when (like in my case) there are many different values to check, the lenght of the cfg increases a lot.

it would be nice to have an operator (let's say §) that adds a variable only if it's missing so I could do something like this:

TESTNODE
{
    notmissing1 = true
    notmissing3 = true
    notmissing5 = true
}
@TESTNODE
{
    §notmissing1 = true
    §notmissing2 = true
    §notmissing3 = true
    §notmissing4 = true
    §notmissing5 = true
}

Spammed exception while in VAB/SPH or flying craft

Here is what the debug log shows:

This gets worse the more parts there are on a craft. Seems to be one exception per part, if I had to guess. No idea what the cause is, but it is occurring with only MM installed.

More consistent syntax

Can the & and | operators be added to the syntax for HAS blocks as well as NEEDS blocks? It would make some filters much easier to write than in the present version, where an or-clause can only be represented with multiple patches. Thanks!

Incorrect use of closing Curly Braces didn't result in a error?

The following file silently processed and didn't succeed totally, threw no mismatch or similar errors regards the brackets?

+PART[US_m_Wedge_Oxygen]
{
    @name = US_TAC_Wedge_Oxygen
    @title = TAC enabled Universal Storage Life Support Oxygen Block

    @RESOURCE[Oxygen]
    }
        @amount = 70
        @maxAmount = 70
    }

    RESOURCE
    }
        name = CarbonDioxide
        amount = 0
        maxAmount = 70
    }
}

+PART[US_Radial_Oxygen]
{
    @name = US_TAC_Radial_Oxygen
    @title = TAC enabled Universal Storage Radial Oxygen Tank

    @RESOURCE[Oxygen]
    }
        @amount = 20
        @maxAmount = 20
    }

    RESOURCE
    }
        name = CarbonDioxide
        amount = 0
        maxAmount = 20
    }
}

+PART[US_q_Wedge_Water]
{
    @name = US_TAC_Wedge_Water
    @title = TAC enabled Universal Storage Water Block

    @RESOURCE[Water]
    }
        @amount = 45
        @maxAmount = 45
    }

    RESOURCE
    }
        name = WasteWater
        amount = 0
        maxAmount = 45
    }
}

+PART[US_Wedge_KASContainer]
{
    @name = US_TAC_Wedge_FoodContainer
    @title = TAC Universal Storage Food Container

    -MODULE[KASModuleContainer]

    RESOURCE
    }
        name = Food
        amount = 50
        maxAmount = 50
    }

    RESOURCE
    }
        name = Waste
        amount = 0
        maxAmount = 50
    }
}

deleting .dll files and MM cache

when deleting a dll from gamedata all the patches that uses :NEEDS[thatDLLname] should not get loaded, however, if the cache is generated with the DLL in place, then the DLL gets removed, MM will still load the old cache instead of generating a new one, leading to weird issues

type-less nodes break mm

I know this is not a mm bug per se, and it's just the result of bad cfg from modders.

but I have received a decent number of bug reports that were related to this issue, so I would like to know if a simple solution could be found in mm.

THE ISSUE

these are a couple of examples of code that break mm

ROOTNODE
{
    SUBNODE
    {
        stuff = optional

        {
        }
    }
}
ROOTNODE
{
    SUBNODE
    {
        stuff = optional
        //DUMBNODE
        {
        }
    }
}

would it be possible to tell mm to just delete those "nodes" which do not have a type defined (either because it was commented out or because it was never defined) so that bad configs are less an issue than they are now?

thanks :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.