internal static ItemInstance FromXML(XElement xml, Game g)
        {
            ItemInstance i = new ItemInstance(new ItemRef {
                LinkedItemId = Guid.Parse(xml.Element("ItemId").Value)
            }.LinkedItem);

            if (xml.Element("Name").Value != null && xml.Element("Name").Value != "")
            {
                i.CurrentName = xml.Element("Name").Value;
            }
            if (xml.Element("IconPath").Value != null && xml.Element("IconPath").Value != "")
            {
                i.CurrentIconPath = new ImageRef {
                    Path = xml.Element("IconPath").Value
                };
            }
            if (xml.Element("CanBeDropped").Value != null && xml.Element("CanBeDropped").Value != "")
            {
                i.CanBeDropped = Convert.ToBoolean(xml.Element("IconPath").Value);
            }
            foreach (var property in xml.Element("Properties").Elements("Property").Where(a => i.Properties.ContainsKey(a.Element("Name").Value)))
            {
                var propObj = i.Properties[property.Element("Name").Value];
                var propVar = VariableWrapper.FromXML(property.Element("Value").Element("Variable"), g, propObj.VariableBase);
                propObj.CurrentCommonEventValue = propVar.CurrentCommonEventValue;
                propObj.CurrentStringValue      = propVar.CurrentStringValue;
                propObj.CurrentNumberValue      = propVar.CurrentNumberValue;
                propObj.CurrentItemValue        = propVar.CurrentItemValue;
            }

            return(i);
        }
 public ItemInstance(Item i)
 {
     item        = i;
     CurrentName = i.DefaultName;
     if (!string.IsNullOrWhiteSpace(i.Icon))
     {
         CurrentIconPath = new ImageRef {
             Path = Editor.MainViewModel.AbsolutePath(MainViewModel.GetMainViewModelStatic().Location, i.Icon)
         };
     }
     else
     {
         CurrentIconPath = new ImageRef {
             Path = ""
         };
     }
     foreach (var property in i.ItemProperties)
     {
         var baseVar = property.BaseVariable;
         var wrapper = new VariableWrapper(baseVar);
         if (!property.UseDefaultValue)
         {
             if (baseVar.IsDateTime)
             {
                 wrapper.CurrentDateTimeValue = Convert.ToDateTime(property.Value);
             }
             else if (baseVar.IsNumber)
             {
                 wrapper.CurrentNumberValue = Convert.ToInt32(property.Value);
             }
             else if (baseVar.IsString)
             {
                 wrapper.CurrentStringValue = Convert.ToString(property.Value);
             }
             this.Properties.Add(property.Name, wrapper);
         }
         else
         {
             wrapper.CurrentDateTimeValue = baseVar.DefaultDateTime;
             wrapper.CurrentNumberValue   = baseVar.DefaultNumber;
             wrapper.CurrentStringValue   = baseVar.DefaultString;
             this.Properties.Add(property.Name, wrapper);
         }
     }
     this.CanBeDropped = i.Removable;
 }
        public static StatusEffectWrapper FromXML(XElement xml, Game g)
        {
            var seRef = GenericRef <StatusEffect> .GetStatusEffectRef();

            seRef.Ref = Guid.Parse(xml.Element("LinkedStatusEffect").Value);
            StatusEffectWrapper wrapper = new StatusEffectWrapper(seRef, g);

            foreach (var tempVariableXml in xml.Element("TempVariables").Elements())
            {
                var tempVariable = VariableWrapper.FromXML(tempVariableXml, g, g.VarById[Guid.Parse(tempVariableXml.Element("Id").Value)].VariableBase);
                foreach (var a in wrapper.TempVariables)
                {
                    if (a.VariableBase.Id == tempVariable.VariableBase.Id)
                    {
                        a.CurrentCommonEventValue = tempVariable.CurrentCommonEventValue;
                        a.CurrentDateTimeValue    = tempVariable.CurrentDateTimeValue;
                        a.CurrentItemValue        = tempVariable.CurrentItemValue;
                        a.CurrentNumberValue      = tempVariable.CurrentNumberValue;
                        a.CurrentStringValue      = tempVariable.CurrentStringValue;
                    }
                }
            }
            foreach (var a in xml.Element("Arguments").Elements("Argument"))
            {
                Guid id = Guid.Parse(a.Element("Id").Value);

                if (a.Element("Type").Value == "number")
                {
                    wrapper.numberArguments.Add(new ScriptStatusEffectArgumentValue {
                        IsNumber = true, Id = id, NumberValue = Convert.ToInt32(a.Element("Value").Value)
                    });
                }
                else
                {
                    wrapper.stringArguments.Add(new ScriptStatusEffectArgumentValue {
                        IsString = true, Id = id, StringValue = a.Element("Value").Value
                    });
                }
            }

            return(wrapper);
        }
 public bool?Execute(bool dontCopyLocals = false)
 {
     TextResult.Clear();
     if (parent == null && !dontCopyLocals)
     {
         foreach (var a in MainViewModel.GetMainViewModelStatic().CurrentGame.VarById.Where(a => a.Value.VariableBase.Name.StartsWith("_")))
         {
             var wrapper = new VariableWrapper(a.Value.VariableBase);
             if (!localVars.ContainsKey(a.Key))
             {
                 localVars.Add(a.Key, wrapper);
                 localVarsByName.Add(a.Value.VariableBase.Name, a.Value);
             }
         }
     }
     foreach (var line in ScriptBase.ScriptLines.Where(a => a.GetType() != typeof(CommentWrapper)))
     {
         ScriptLineWrapper currentLine = ScriptLineWrapper.GetScriptLineWrapper(line, this);
         if (currentLine != null)
         {
             var result = currentLine.Execute();
             //Stop executing the script once a return statement has been triggered.
             if (result != null)
             {
                 return(result);
             }
         }
         if (StopExecution)
         {
             if (this.parent != null && !this.IsRootScript)
             {
                 this.parent.StopExecution = true;
             }
             break;
         }
         //currentLine.Dispose();
     }
     return(null);
 }
        public void DupeVars(ScriptWrapper s)
        {
            ScriptWrapper parent = s;

            while (parent != null && parent.localVars.Count() == 0)
            {
                parent = parent.parent;
            }
            if (parent != null)
            {
                foreach (var a in parent.localVars)
                {
                    VariableWrapper vw = new VariableWrapper(a.Value.VariableBase);
                    vw.CurrentCommonEventValue = a.Value.CurrentCommonEventValue;
                    vw.CurrentDateTimeValue    = a.Value.CurrentDateTimeValue;
                    vw.CurrentItemValue        = a.Value.CurrentItemValue;
                    vw.CurrentNumberValue      = a.Value.CurrentNumberValue;
                    vw.CurrentStringValue      = a.Value.CurrentStringValue;
                    localVars.Add(a.Key, vw);
                    localVarsByName.Add(a.Value.VariableBase.Name, vw);
                }
            }
        }