1. Напиши сначала что за ошибка. Дело в том, что конструкция //$reference не родная для С#, и там может быть все что угодно.
2. Всегда
3. Ну тут вопрос на миллион. Множественное наследование есть в плюсах, но от него зачастую больше проблем, чем пользы. )
В твоем случае можно
1. Наследоваться AMission -> LocMission - > StatMission
2. Сделать по аналогии с Battle. Т.е. делаешь AMission -> LocMission, AMission -> StatMission, после еще делаешь AMission - > MyBattle. В MyBattle добавляешь приватным мембером List<AMission> myMissions. Там же переопределяешь каждый метод, и в методе, к примеру OnBattleStarted() пишешь foreach(AMission mis in myMissions) mis.OnBattleStarted(); Аналогично для остальных. Далее все легко и просто. На этапе инициализации надо просто сделать

AMission mission = new LocMission();
myMissions.Add(mission);
mission = new StatMission();
myMissions.Add(mission);

От кого наследоваться собственно в скрипте миссии - задача на сообразительность )

3. Событийная модель. Долго объяснять, если интересно, покопай мою dll из коммандера.