Esempio n. 1
0
	void AttributeMeta<Option>::Set(SlkSingle& obj) const
	{
		if (valid_)
		{
			if (meta_->index == uint32_t(-1))
			{
				if (name_ == "auto" && meta_->slk == "UnitAbilities" && value_ == "")
				{
					obj[name_] = SlkValue("_", meta_->type == VariableData::OBJTYPE_STRING);
				}
				else
				{
					obj[name_] = SlkValue(value_, meta_->type == VariableData::OBJTYPE_STRING);
				}
				return ;
			}

			auto it = obj.find(name_);
			if (it == obj.end())
			{
				obj[name_] = SlkValue(value_, meta_->type == VariableData::OBJTYPE_STRING);
				return ;
			}

			SlkValue& val = it->second;
			std::vector<std::string> result;
			split(result, val.to_string(), char_equal(','));

			if (meta_->index >= result.size())
			{
				return ;
			}

			result[meta_->index] = value_;
			val.set(concat(result, ','));
		}
	}
Esempio n. 2
0
		MetaSingle SlkSingleToMetaSingle(SlkSingle const& slkSingle)
		{
			MetaSingle val;

			// type
			auto TypeIt = slkSingle.find("type");
			if (TypeIt == slkSingle.end())
			{
				assert(false);
				throw base::exception("meta slk file miss 'type'.");
			}
			std::string const& TypeStr = TypeIt->second.to_string();
			val.type = ConvertVariableDataType(TypeStr);

			// index
			auto IndexIt = slkSingle.find("index");
			if (IndexIt == slkSingle.end())
			{
				assert(false);
				throw base::exception("meta slk file miss 'index'.");
			}
			val.index = std::stol(IndexIt->second.to_string());

			// stringExt
			auto StringExtIt = slkSingle.find("stringExt");
			if (StringExtIt == slkSingle.end())
			{
				assert(false);
				throw base::exception("meta slk file miss 'stringExt'.");
			}
			val.stringExt = std::stol(StringExtIt->second.to_string());

			// field
			auto FieldIt = slkSingle.find("field");
			if (FieldIt == slkSingle.end())
			{
				assert(false);
				throw base::exception("meta slk file miss 'field'.");
			}
			if (FieldIt->second.to_string() == "Data")
			{
				auto DataIt = slkSingle.find("data");
				if (DataIt == slkSingle.end())
				{
					assert(false);
					throw base::exception("meta slk file miss 'data'.");
				}

				std::string const& Data = DataIt->second.to_string();
				if (Data.size() <= 0)
				{
					assert(false);
					throw base::exception("meta slk file miss 'data'.");
				}

				val.field = "Data"+ std::string(1, static_cast<char>('A'+Data[0]-'0'-1));
			}
			else
			{
				val.field = FieldIt->second.to_string();
			}

			// slk
			val.slk = SlkSingleGetValue(slkSingle, "slk");

			return std::move(val);
		}