public ActorType(pActorType a) { switch (a.Owner) { case "Hostile": this.owner = ScoringDB.ActorInfo.OwnerInfo.OwnerType.HostileDM; break; case "Friendly": this.owner = ScoringDB.ActorInfo.OwnerInfo.OwnerType.FriendlyDM; break; case "This": this.owner = ScoringDB.ActorInfo.OwnerInfo.OwnerType.Myself; break; default: throw new ApplicationException("Scoring rule contains unknown actor specifier " + a.Owner); } if ("Any" == a.Id) { this.id = new ScoringDB.ActorInfo.IdentifierInfo(ScoringDB.ActorInfo.IdentifierInfo.IdentifierType.Any, a.Id); } else if (NameLists.speciesNames.ContainsKey(a.Id)) { this.id = new ScoringDB.ActorInfo.IdentifierInfo(ScoringDB.ActorInfo.IdentifierInfo.IdentifierType.Species, a.Id);; } else if (NameLists.unitNames.ContainsKey(a.Id)) { this.id = new ScoringDB.ActorInfo.IdentifierInfo(ScoringDB.ActorInfo.IdentifierInfo.IdentifierType.Instance, a.Id);; } else { throw new ApplicationException("Unknown scoring rule identifier " + a.Id); } if (null != a.Region) { this.region = new ScoringLocationType(a.Region); } else { List <string> anywhere = new List <string>(); anywhere.Add("Anywhere"); this.region = new ScoringLocationType(anywhere, ScoringDB.ActorInfo.LocationInfo.LocationType.Anywhere); } }
public static void Register(ScoreType st) { ScoringDB.Score s = new ScoringDB.Score(st.Name, new List <string>(), new List <string>(), st.Initial); for (int i = 0; i < st.Applies.Count; i++) { s.calculateDMs.Add(st.Applies[i]); } for (int i = 0; i < st.Viewers.Count; i++) { s.displayDMs.Add(st.Viewers[i]); } for (int i = 0; i < st.Rules.Count; i++) { string thisRuleName = st.Rules[i]; ScoringRuleType thisRule = ScoringRules.Get(thisRuleName); if (ScoringDB.ConditionInfo.ConditionType.ObjectExists == thisRule.Condition.conditionType) { for (int unitLoc = 0; unitLoc < thisRule.Unit.Region.Zone.Count; unitLoc++) { ScoringDB.ActorInfo.OwnerInfo unitOwnerInfo = new ScoringDB.ActorInfo.OwnerInfo(thisRule.Unit.Owner); ScoringDB.ActorInfo.IdentifierInfo unitIdentifierInfo = thisRule.Unit.ID; ScoringDB.ActorInfo.LocationInfo unitLocationInfo = new ScoringDB.ActorInfo.LocationInfo(thisRule.Unit.Region.Relationship, thisRule.Unit.Region.Zone[unitLoc]); ScoringDB.ConditionInfo conditionInfo = new ScoringDB.ConditionInfo(thisRule.Condition.conditionType, thisRule.Condition.oldState, thisRule.Condition.newState); s.rules.Add(new ScoringDB.ScoringRule(new ScoringDB.ActorInfo(unitOwnerInfo, unitIdentifierInfo, unitLocationInfo), conditionInfo, null, thisRule.Increment)); } } else { for (int unitLoc = 0; unitLoc < thisRule.Unit.Region.Zone.Count; unitLoc++) { for (int objectLoc = 0; objectLoc < thisRule.Unit.Region.Zone.Count; objectLoc++) { ScoringDB.ActorInfo.OwnerInfo unitOwnerInfo = new ScoringDB.ActorInfo.OwnerInfo(thisRule.Unit.Owner); ScoringDB.ActorInfo.IdentifierInfo unitIdentifierInfo = thisRule.Unit.ID; ScoringDB.ActorInfo.LocationInfo unitLocationInfo = new ScoringDB.ActorInfo.LocationInfo(thisRule.Unit.Region.Relationship, thisRule.Unit.Region.Zone[unitLoc]); ScoringDB.ActorInfo.OwnerInfo objectOwnerInfo = new ScoringDB.ActorInfo.OwnerInfo(thisRule.ObjectID.Owner); ScoringDB.ActorInfo.IdentifierInfo objectIdentifierInfo = thisRule.ObjectID.ID; ScoringDB.ActorInfo.LocationInfo objectLocationInfo = new ScoringDB.ActorInfo.LocationInfo(thisRule.ObjectID.Region.Relationship, thisRule.ObjectID.Region.Zone[objectLoc]); ScoringDB.ConditionInfo conditionInfo = new ScoringDB.ConditionInfo(thisRule.Condition.conditionType, thisRule.Condition.oldState, thisRule.Condition.newState); s.rules.Add(new ScoringDB.ScoringRule(new ScoringDB.ActorInfo(unitOwnerInfo, unitIdentifierInfo, unitLocationInfo), conditionInfo, new ScoringDB.ActorInfo(objectOwnerInfo, objectIdentifierInfo, objectLocationInfo), thisRule.Increment)); } } } } ScoringDB.scores[st.Name] = s; }