示例#1
0
        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);
            }
        }
示例#2
0
 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;
 }