Im Grunde wurde von TheOnlyTrueWitchking schon alles gesagt.^^ Ich antwort nur nochmal, weil ich hier auch genannt wurde. 
![[ugly]](https://modding-union.com/Smileys/mu/ugly.gif)
Wenn du es per map.ini machen willst ein paar allgemeine Sachen noch:
Wenn du einen Spell normalerweise neu einfügen willst, musst du es in zwei CommandSets einfügen, einmal das Spellbook, wo man ihn kauft und einmal die Liste am Rand, wo man ihn einsetzt. 
Wenn du es aber durch Scripts machst, reicht glaube ich das zweite. (ich hab bisher immer beide gemacht, daher hier keine 100% Sicherheit)
Hierbei musst du beachten:
Es gibt die Playertemplate für jedes Volk, die sieht ungefähr so aus:
PlayerTemplate FactionMen
	Side              = Men
	PlayableSide      = Yes
	Evil		  = No
	StartMoney        = 0
	MaxLevelMP	  = #DIVIDE( PLAYER_MAX_PURCHASE_POINTS_DEFAULT PLAYER_PURCHASE_POINTS_GRANTED )
	MaxLevelSP	  = #DIVIDE( PLAYER_MAX_PURCHASE_POINTS_GOOD PLAYER_PURCHASE_POINTS_GRANTED )
	PreferredColor	  = R:43 G:150 B:179
	StartingBuilding  = MenFortress
	
	;------------- NO STARTING UNITS FOR YOU -------
	;StartingUnit0 		= GondorFighterHorde 
	;StartingUnitOffset0 	= X:-60 Y:185 Z:0
	
	
	StartingUnit1 		= MenPorter 
	StartingUnitOffset1 	= X:30 Y:200 Z:0
	StartingUnit0 		= MenPorter 
	StartingUnitOffset0 	= X:1 Y:130 Z:0
	
	StartingUnitTacticalWOTR	= MenPorter			;// This unit is placed in tactical mode when playing WOTR. Add multiple lines for multiple units.
	StartingUnitTacticalWOTR	= MenPorter
	IntrinsicSciences		= SCIENCE_GOOD
	IntrinsicSciencesMP 		= SCIENCE_MEN
	SpellBook			= GoodSpellBook
	SpellBookMp			= MenSpellBook
	PurchaseScienceCommandSet	= GoodSpellStoreCommandSet
	PurchaseScienceCommandSetMP	= MenSpellStoreCommandSet
	DisplayName			= INI:FactionMen
	DefaultPlayerAIType		= MenSkirmishAI
	BeaconName			= MultiplayerBeacon
	LightPointsUpSound		= GondorLightPointsUp
	ObjectiveAddedSound		= Gui_MissionObjectiveNew
	ObjectiveCompletedSound		= Gui_MissionObjectiveCompleted
	InitialUpgrades			= Upgrade_MenFaction		; Any upgrades this player template is born with.
	// NOTE: It is very important that the create-a-hero be the first buildable hero, to ensure that the create-a-hero and the ring hero are always 
	// attached to the first two buttons in the command set.
	BuildableHeroesMP		= CreateAHero RohanEowyn RohanEomer GondorBoromir RohanTheoden GondorFaramir GondorAragornMP GondorGandalf 
	BuildableRingHeroesMP		= ElvenGaladriel_RingHero
	SpellStoreCurrentPowerLabel 	= APT:SpellStoreCurrentEvenstarPower
	SpellStoreMaximumPowerLabel 	= APT:SpellStoreMaximumEvenstarPower
	ResourceModifierObjectFilter 	= RESOURCE_MODIFIER_OBJECT_FILTER
	ResourceModifierValues		= 100 100 100 100 90 85 80 75 71 68 66
	MultiSelectionPortrait		= UPGondor_Army
	LoadScreenMusic				= Shell2MusicForLoadScreen
End
Wichtig für dich sind folgende Einträge:
	SpellBook			= GoodSpellBook
	SpellBookMp			= MenSpellBook
	PurchaseScienceCommandSetMP	= MenSpellStoreCommandSet
Die ersten zwei sind Objekte - in diesen Objekten ist definiert welche Fähigkeiten du verwenden kannst. (das zweite ist ein ChildObject vom ersten)
In diesem Objekt sollte auch die CommandSet sein, wo definiert ist, welche Buttons alle am Rand sein können.
Das andere ist das CommandSet, wo alle Spells drinnen sind, die man im Spellbook "kaufen" kann.
Ab hier kann man dann sich durchwühlen und immer sehen, was man als nächstes braucht, damit eine Fähigkeit drinnen ist. 
Über das Object kommt man zu den SpecialPowers, die definieren was welcher Button macht - in denen ist dann die SCIENCE vermerkt (also das, was den Spell freischaltet - quasi was man im Spellbook kauft).
Wichtig ist hier nur:
Wenn die Karte MP tauglich sein soll, dann darfst du über map.inis keine neuen SCIENCES definieren. Du musst welche von anderen Spellbooks verwenden, die also schon definiert sind, aber nicht in deinem Spellbook verwendet werden. Diese kannst du dann verändern. Ebenso kannst du keine neuen CommandButtons erstellen oder das Bild von vorhandenen verändern. (außer über einige Umwege, die hier zu weit führen würden)
Wenn die Truppen vom Rand in die Karte reinlaufen wollen musst du das noch extra über Scripts machen.
Der Befehl ist dann sowas nach dem Motto:
"If Player used ability xyz
then 
spawn troups at waypoint aaa 
let troups walk at waypointspath bbb"
ganz grob sollte das so aussehen.^^
Was sehr viel einfacher geht wäre dem Gebäude direkt den Spell zu geben (dann hätte aber jedes Gebäude diesen Spell, unabhängig voneinander), quasi wie Fähigkeiten bei Helden. Da kann man einige Schritte überspringen.^^