diff --git a/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs
new file mode 100644
index 0000000000..19770a56ff
--- /dev/null
+++ b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs
@@ -0,0 +1,45 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
+ * This file is part of OpenRA.
+ *
+ * OpenRA is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenRA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with OpenRA. If not, see .
+ */
+#endregion
+
+namespace OpenRA.Mods.RA
+{
+ class LevelUpCrateActionInfo : CrateActionInfo
+ {
+ public override object Create(ActorInitializer init) { return new LevelUpCrateAction(init.self, this); }
+ }
+
+ class LevelUpCrateAction : CrateAction
+ {
+ public LevelUpCrateAction(Actor self, LevelUpCrateActionInfo info)
+ : base(self,info) {}
+
+ public override void Activate(Actor collector)
+ {
+ collector.World.AddFrameEndTask(w =>
+ {
+ var gainsExperience = collector.traits.GetOrDefault();
+ if (gainsExperience != null)
+ gainsExperience.GiveOneLevel();
+ });
+
+ base.Activate(collector);
+ }
+ }
+}
diff --git a/OpenRA.Mods.RA/GainsExperience.cs b/OpenRA.Mods.RA/GainsExperience.cs
index 1a9e89600f..33ee67a511 100644
--- a/OpenRA.Mods.RA/GainsExperience.cs
+++ b/OpenRA.Mods.RA/GainsExperience.cs
@@ -58,6 +58,12 @@ namespace OpenRA.Mods.RA
[Sync]
int Level = 0;
+ public void GiveOneLevel()
+ {
+ if (Level < Levels.Count())
+ GiveExperience(Levels[Level] - Experience);
+ }
+
public void GiveExperience(int amount)
{
Experience += amount;
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index 8535ad5591..bf6f38d76f 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -1,4 +1,4 @@
-
+
Debug
@@ -89,6 +89,7 @@
+