diff --git a/.kilocode/mcp.json b/.kilocode/mcp.json
index f7cb78f5..266cf16a 100644
--- a/.kilocode/mcp.json
+++ b/.kilocode/mcp.json
@@ -8,25 +8,15 @@
"cwd": "${workspaceFolder}/MCP/",
"disabled": false,
"alwaysAllow": []
- }
- },
- "tools": {
- "rimworld-knowledge-base": {
- "description": "从RimWorld本地知识库(包括C#源码和XML)中检索上下文。",
- "server_name": "rimworld-knowledge-base",
- "tool_name": "get_context",
- "input_schema": {
- "type": "object",
- "properties": {
- "question": {
- "type": "string",
- "description": "关于RimWorld开发的问题,应包含代码或XML中的关键词。"
- }
- },
- "required": [
- "question"
- ]
- }
+ },
+ "rimworld-knowledge-base-proxy": {
+ "command": "python",
+ "args": [
+ "mcpserver_stdio_simple_proxy.py"
+ ],
+ "cwd": "${workspaceFolder}/MCP/",
+ "disabled": true,
+ "alwaysAllow": []
}
}
}
\ No newline at end of file
diff --git a/MCP/mcpserver_stdio.py b/MCP/mcpserver_stdio.py
index 25e48854..df04bc2e 100644
--- a/MCP/mcpserver_stdio.py
+++ b/MCP/mcpserver_stdio.py
@@ -4,700 +4,168 @@ import sys
import logging
import json
import re
-
-# 1. --- 导入库 ---
-# 动态将 mcp sdk 添加到 python 路径
-MCP_DIR = os.path.dirname(os.path.abspath(__file__))
-SDK_PATH = os.path.join(MCP_DIR, 'python-sdk', 'src')
-if SDK_PATH not in sys.path:
- sys.path.insert(0, SDK_PATH)
-
-from mcp.server.fastmcp import FastMCP
-# 新增:阿里云模型服务和向量计算库
+from http import HTTPStatus
import dashscope
-from dashscope.api_entities.dashscope_response import Role
from tenacity import retry, stop_after_attempt, wait_random_exponential
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
from dotenv import load_dotenv
-from openai import OpenAI
+import threading
+
+# 1. --- 导入MCP SDK ---
+MCP_DIR = os.path.dirname(os.path.abspath(__file__))
+SDK_PATH = os.path.join(MCP_DIR, 'python-sdk', 'src')
+if SDK_PATH not in sys.path:
+ sys.path.insert(0, SDK_PATH)
+from mcp.server.fastmcp import FastMCP
# 2. --- 日志、缓存和知识库配置 ---
-MCP_DIR = os.path.dirname(os.path.abspath(__file__))
-LOG_FILE_PATH = os.path.join(MCP_DIR, 'mcpserver.log')
-CACHE_DIR = os.path.join(MCP_DIR, 'vector_cache')
-CACHE_FILE_PATH = os.path.join(CACHE_DIR, 'knowledge_cache.json')
-os.makedirs(CACHE_DIR, exist_ok=True)
-
+LOG_FILE_PATH = os.path.join(MCP_DIR, 'mcpserver_parallel.log')
logging.basicConfig(filename=LOG_FILE_PATH, level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
encoding='utf-8')
-# 新增: 加载 .env 文件并设置 API Key
-# 指定 .env 文件的确切路径,以确保脚本在任何工作目录下都能正确加载
env_path = os.path.join(MCP_DIR, '.env')
load_dotenv(dotenv_path=env_path)
-dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
+DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
+DASHSCOPE_APP_ID = os.getenv("DASHSCOPE_APP_ID")
+dashscope.api_key = DASHSCOPE_API_KEY
-if not dashscope.api_key:
- logging.error("错误:未在 .env 文件中找到或加载 DASHSCOPE_API_KEY。")
- # 如果没有Key,服务器无法工作,可以选择退出或继续运行但功能受限
- # sys.exit("错误:API Key 未配置。")
-else:
- logging.info("成功加载 DASHSCOPE_API_KEY。")
+if not DASHSCOPE_API_KEY or not DASHSCOPE_APP_ID:
+ error_msg = "错误:请确保 MCP/.env 文件中已正确配置 DASHSCOPE_API_KEY 和 DASHSCOPE_APP_ID。"
+ logging.error(error_msg)
+ sys.exit(error_msg)
-# 定义知识库路径
-KNOWLEDGE_BASE_PATHS = [
- r"C:\Steam\steamapps\common\RimWorld\Data"
-]
+KNOWLEDGE_BASE_PATHS = [r"C:\Steam\steamapps\common\RimWorld\Data"]
-# 初始化OpenAI客户端用于Qwen模型
-qwen_client = OpenAI(
- api_key=os.getenv("DASHSCOPE_API_KEY"),
- base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
- timeout=15.0 # 设置15秒超时,避免MCP初始化超时
-)
+# 3. --- 辅助函数 ---
-# 3. --- 向量缓存管理 ---
-def load_vector_cache():
- """加载向量缓存数据库"""
- if os.path.exists(CACHE_FILE_PATH):
- try:
- with open(CACHE_FILE_PATH, 'r', encoding='utf-8') as f:
- return json.load(f)
- except Exception as e:
- logging.error(f"读取向量缓存数据库失败: {e}")
- return {}
- return {}
-
-def save_vector_cache(cache_data):
- """保存向量缓存数据库"""
- try:
- with open(CACHE_FILE_PATH, 'w', encoding='utf-8') as f:
- json.dump(cache_data, f, ensure_ascii=False, indent=2)
- except Exception as e:
- logging.error(f"保存向量缓存数据库失败: {e}")
-
-def get_cache_key(keywords: list[str]) -> str:
- """生成缓存键"""
- return "-".join(sorted(keywords))
-
-def load_cache_for_question(question: str, keywords: list[str]):
- """为指定问题和关键词加载缓存结果"""
- cache_data = load_vector_cache()
- cache_key = get_cache_key(keywords)
-
- # 检查是否有完全匹配的缓存
- if cache_key in cache_data:
- cached_entry = cache_data[cache_key]
- logging.info(f"缓存命中: 关键词 '{cache_key}'")
- return cached_entry.get("result", "")
-
- # 检查是否有相似问题的缓存(基于向量相似度)
- question_embedding = get_embedding(question)
- if not question_embedding:
- return None
-
- best_similarity = 0
- best_result = None
-
- for key, entry in cache_data.items():
- if "embedding" in entry:
- try:
- cached_embedding = entry["embedding"]
- similarity = cosine_similarity(
- np.array(question_embedding).reshape(1, -1),
- np.array(cached_embedding).reshape(1, -1)
- )[0][0]
-
- if similarity > best_similarity and similarity > 0.9: # 相似度阈值
- best_similarity = similarity
- best_result = entry.get("result", "")
- except Exception as e:
- logging.error(f"计算缓存相似度时出错: {e}")
-
- if best_result:
- logging.info(f"相似问题缓存命中,相似度: {best_similarity:.3f}")
- return best_result
-
- return None
-
-def save_cache_for_question(question: str, keywords: list[str], result: str):
- """为指定问题和关键词保存缓存结果"""
- try:
- cache_data = load_vector_cache()
- cache_key = get_cache_key(keywords)
-
- # 获取问题的向量嵌入
- question_embedding = get_embedding(question)
- if not question_embedding:
- return
-
- cache_data[cache_key] = {
- "keywords": keywords,
- "question": question,
- "embedding": question_embedding,
- "result": result,
- "timestamp": logging.Formatter('%(asctime)s').format(logging.LogRecord('', 0, '', 0, '', (), None))
- }
-
- save_vector_cache(cache_data)
- except Exception as e:
- logging.error(f"保存缓存时出错: {e}")
-
-# 4. --- 向量化与相似度计算 ---
-@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
+@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(3))
def get_embedding(text: str):
- """获取文本的向量嵌入"""
- try:
- # 根据用户文档,选用v4模型,更适合代码和文本
- response = dashscope.TextEmbedding.call(
- model='text-embedding-v4',
- input=text
- )
- if response.status_code == 200:
- return response.output['embeddings'][0]['embedding']
- else:
- logging.error(f"获取向量失败: {response.message}")
- return None
- except Exception as e:
- logging.error(f"调用向量API时出错: {e}", exc_info=True)
- raise
-
-def find_most_similar_files(question_embedding, file_embeddings, top_n=3, min_similarity=0.5):
- """在文件向量中找到与问题向量最相似的 top_n 个文件。"""
- if not question_embedding or not file_embeddings:
- return []
-
- file_vectors = np.array([emb['embedding'] for emb in file_embeddings])
- question_vector = np.array(question_embedding).reshape(1, -1)
-
- similarities = cosine_similarity(question_vector, file_vectors)[0]
-
- # 获取排序后的索引
- sorted_indices = np.argsort(similarities)[::-1]
-
- # 筛选出最相关的结果
- results = []
- for i in sorted_indices:
- similarity_score = similarities[i]
- if similarity_score >= min_similarity and len(results) < top_n:
- results.append({
- 'path': file_embeddings[i]['path'],
- 'similarity': similarity_score
- })
- else:
- break
-
- return results
-
-# 新增:重排序函数
-def rerank_files(question, file_matches, top_n=3): # 减少默认数量
- """使用DashScope重排序API对文件进行重新排序"""
- try:
- # 限制输入数量以减少超时风险
- if len(file_matches) > 5: # 进一步限制最大输入数量以避免超时
- file_matches = file_matches[:5]
-
- # 准备重排序输入
- documents = []
- for match in file_matches:
- # 读取文件内容
- try:
- with open(match['path'], 'r', encoding='utf-8') as f:
- content = f.read()[:1500] # 进一步限制内容长度以提高效率
- documents.append(content)
- except Exception as e:
- logging.error(f"读取文件 {match['path']} 失败: {e}")
- continue
-
- if not documents:
- logging.warning("重排序时未能读取任何文件内容")
- return file_matches[:top_n]
-
- # 调用重排序API,添加超时处理
- import time
- start_time = time.time()
-
- response = dashscope.TextReRank.call(
- model='gte-rerank',
- query=question,
- documents=documents
- )
-
- elapsed_time = time.time() - start_time
- logging.info(f"重排序API调用耗时: {elapsed_time:.2f}秒")
-
- if response.status_code == 200:
- # 根据重排序结果重新排序文件
- reranked_results = []
- for i, result in enumerate(response.output['results']):
- if i < len(file_matches) and i < len(documents): # 添加边界检查
- reranked_results.append({
- 'path': file_matches[i]['path'],
- 'similarity': result['relevance_score']
- })
-
- # 按重排序分数排序
- reranked_results.sort(key=lambda x: x['similarity'], reverse=True)
- return reranked_results[:top_n]
- else:
- logging.error(f"重排序失败: {response.message}")
- return file_matches[:top_n]
- except Exception as e:
- logging.error(f"重排序时出错: {e}", exc_info=True)
- return file_matches[:top_n]
-
-def extract_relevant_code(file_path, keyword):
- """从文件中智能提取包含关键词的完整代码块 (C#类 或 XML Def)。"""
- try:
- with open(file_path, 'r', encoding='utf-8') as f:
- content = f.read()
-
- lines = content.split('\n')
- keyword_lower = keyword.lower()
-
- found_line_index = -1
- for i, line in enumerate(lines):
- if keyword_lower in line.lower():
- found_line_index = i
- break
-
- if found_line_index == -1:
- return ""
-
- # 根据文件类型选择提取策略
- if file_path.endswith(('.cs', '.txt')):
- # C# 提取策略:寻找完整的类
- return extract_csharp_class(lines, found_line_index)
- elif file_path.endswith('.xml'):
- # XML 提取策略:寻找完整的 Def
- return extract_xml_def(lines, found_line_index)
- else:
- return "" # 不支持的文件类型
-
- except Exception as e:
- logging.error(f"提取代码时出错 {file_path}: {e}")
- return f"# Error reading file: {e}"
-
-def extract_csharp_class(lines, start_index):
- """从C#代码行中提取完整的类定义。"""
- # 向上找到 class 声明
- class_start_index = -1
- brace_level_at_class_start = -1
- for i in range(start_index, -1, -1):
- line = lines[i]
- if 'class ' in line:
- class_start_index = i
- brace_level_at_class_start = line.count('{') - line.count('}')
- break
-
- if class_start_index == -1: return "" # 没找到类
-
- # 从 class 声明开始,向下找到匹配的 '}'
- brace_count = brace_level_at_class_start
- class_end_index = -1
- for i in range(class_start_index + 1, len(lines)):
- line = lines[i]
- brace_count += line.count('{')
- brace_count -= line.count('}')
- if brace_count <= 0: # 找到匹配的闭合括号
- class_end_index = i
- break
-
- if class_end_index != -1:
- return "\n".join(lines[class_start_index:class_end_index+1])
- return "" # 未找到完整的类块
-
-def extract_xml_def(lines, start_index):
- """从XML行中提取完整的Def块。"""
- import re
- # 向上找到 或
- def_start_index = -1
- def_tag = ""
- for i in range(start_index, -1, -1):
- line = lines[i].strip()
- match = re.match(r'<(\w+)\s+.*>', line) or re.match(r'<(\w+)>', line)
- if match and ('Def' in match.group(1) or 'def' in match.group(1)):
- # 这是一个简化的判断,实际中可能需要更复杂的逻辑
- def_start_index = i
- def_tag = match.group(1)
- break
-
- if def_start_index == -1: return ""
-
- # 向下找到匹配的
- def_end_index = -1
- for i in range(def_start_index + 1, len(lines)):
- if f'{def_tag}>' in lines[i]:
- def_end_index = i
- break
-
- if def_end_index != -1:
- return "\n".join(lines[def_start_index:def_end_index+1])
- return ""
-
-def find_keywords_in_question(question: str) -> list[str]:
- """从问题中提取所有可能的关键词 (类型名, defName等)。"""
- # 简化关键词提取逻辑,主要依赖LLM进行分析
- # 这里仅作为备用方案,用于LLM不可用时的基本关键词提取
-
- # 正则表达式优先,用于精确匹配定义
- # 匹配 C# class, struct, enum, interface 定义, 例如 "public class MyClass : Base"
- csharp_def_pattern = re.compile(r'\b(?:public|private|internal|protected|sealed|abstract|static|new)\s+(?:class|struct|enum|interface)\s+([A-Za-z_][A-Za-z0-9_]*)')
- # 匹配 XML Def, 例如 "" or ""
- xml_def_pattern = re.compile(r'<([A-Za-z_][A-Za-z0-9_]*Def)\b')
-
- found_keywords = set()
-
- # 1. 正则匹配
- csharp_matches = csharp_def_pattern.findall(question)
- xml_matches = xml_def_pattern.findall(question)
-
- for match in csharp_matches:
- found_keywords.add(match)
- for match in xml_matches:
- found_keywords.add(match)
-
- # 2. 启发式单词匹配 - 简化版
- parts = re.split(r'[\s,.:;\'"`()<>]+', question)
-
- for part in parts:
- if not part:
- continue
-
- # 规则1: 包含下划线 (很可能是 defName)
- if '_' in part:
- found_keywords.add(part)
- # 规则2: 驼峰命名或混合大小写 (很可能是 C# 类型名)
- elif any(c.islower() for c in part) and any(c.isupper() for c in part) and len(part) > 3:
- found_keywords.add(part)
- # 规则3: 多个大写字母(例如 CompPsychicScaling)
- elif sum(1 for c in part if c.isupper()) > 1 and not part.isupper() and len(part) > 3:
- found_keywords.add(part)
-
- if not found_keywords:
- logging.warning(f"在 '{question}' 中未找到合适的关键词。")
- # 如果找不到关键词,尝试使用整个问题作为关键词
- return [question]
-
- logging.info(f"找到的潜在关键词: {list(found_keywords)}")
- return list(found_keywords)
-
-def analyze_question_with_llm(question: str) -> dict:
- """使用Qwen模型分析问题并提取关键词和意图"""
- try:
- system_prompt = """你是一个关键词提取机器人,专门用于从 RimWorld 模组开发相关问题中提取精确的搜索关键词。你的任务是识别问题中提到的核心技术术语,并将它们正确地拆分成独立的关键词。
-
-严格按照以下格式回复,不要添加任何额外说明:
-问题类型:[问题分类]
-关键类/方法名:[类名或方法名]
-关键概念:[关键概念]
-搜索关键词:[关键词1,关键词2,关键词3]
-
-提取规则:
-1. 搜索关键词只能包含问题中明确出现的技术术语
-2. 不要添加任何推测或联想的词
-3. 不要添加通用词如"RimWorld"、"游戏"、"定义"、"用法"等
-4. 不要添加缩写或扩展形式如"Def"、"XML"等除非问题中明确提到
-5. 只提取具体的技术名词,忽略动词、形容词等
-6. 当遇到用空格连接的多个技术术语时,应将它们拆分为独立的关键词
-7. 关键词之间用英文逗号分隔,不要有空格
-
-示例:
-问题:ThingDef的定义和用法是什么?
-问题类型:API 使用和定义说明
-关键类/方法名:ThingDef
-关键概念:定义, 用法
-搜索关键词:ThingDef
-
-问题:GenExplosion.DoExplosion 和 Projectile.Launch 方法如何使用?
-问题类型:API 使用说明
-关键类/方法名:GenExplosion.DoExplosion,Projectile.Launch
-关键概念:API 使用
-搜索关键词:GenExplosion.DoExplosion,Projectile.Launch
-
-问题:RimWorld Pawn_HealthTracker PreApplyDamage
-问题类型:API 使用说明
-关键类/方法名:Pawn_HealthTracker,PreApplyDamage
-关键概念:伤害处理
-搜索关键词:Pawn_HealthTracker,PreApplyDamage
-
-现在请分析以下问题:"""
-
- messages = [
- {"role": "system", "content": system_prompt},
- {"role": "user", "content": question}
- ]
-
- response = qwen_client.chat.completions.create(
- model="qwen-plus",
- messages=messages,
- temperature=0.0, # 使用最低温度确保输出稳定
- max_tokens=300,
- timeout=12.0, # 12秒超时,避免MCP初始化超时
- stop=["\n\n"] # 防止模型生成过多内容
- )
-
- analysis_result = response.choices[0].message.content
- logging.info(f"LLM分析结果: {analysis_result}")
-
- # 解析LLM的分析结果
- lines = analysis_result.strip().split('\n')
- result = {
- "question_type": "",
- "key_classes_methods": [],
- "key_concepts": [],
- "search_keywords": []
- }
-
- for line in lines:
- if line.startswith("问题类型:"):
- result["question_type"] = line.replace("问题类型:", "").strip()
- elif line.startswith("关键类/方法名:"):
- methods = line.replace("关键类/方法名:", "").strip()
- result["key_classes_methods"] = [m.strip() for m in methods.split(",") if m.strip()]
- elif line.startswith("关键概念:"):
- concepts = line.replace("关键概念:", "").strip()
- result["key_concepts"] = [c.strip() for c in concepts.split(",") if c.strip()]
- elif line.startswith("搜索关键词:"):
- keywords = line.replace("搜索关键词:", "").strip()
- # 直接按逗号分割,不进行额外处理
- result["search_keywords"] = [k.strip() for k in keywords.split(",") if k.strip()]
-
- # 如果LLM没有返回有效的关键词,则使用备用方案
- if not result["search_keywords"]:
- result["search_keywords"] = find_keywords_in_question(question)
-
- return result
- except Exception as e:
- logging.error(f"使用LLM分析问题时出错: {e}", exc_info=True)
- # 备用方案:使用原始关键词提取方法
- return {
- "question_type": "未知",
- "key_classes_methods": [],
- "key_concepts": [],
- "search_keywords": find_keywords_in_question(question)
- }
+ response = dashscope.TextEmbedding.call(model='text-embedding-v2', input=text)
+ return response.output['embeddings'][0]['embedding'] if response.status_code == HTTPStatus.OK else None
def find_files_with_keyword(base_paths: list[str], keywords: list[str]) -> list[str]:
- """
- 在基础路径中递归搜索包含任意一个关键词的文件。
- 搜索范围包括文件名。
- """
found_files = set()
- keywords_lower = [k.lower() for k in keywords]
-
for base_path in base_paths:
for root, _, files in os.walk(base_path):
for file in files:
- file_lower = file.lower()
- if any(keyword in file_lower for keyword in keywords_lower):
+ if any(keyword.lower() in file.lower() for keyword in keywords):
found_files.add(os.path.join(root, file))
-
- logging.info(f"通过关键词找到 {len(found_files)} 个文件。")
return list(found_files)
-# 5. --- 创建和配置 MCP 服务器 ---
-# 使用 FastMCP 创建服务器实例
-mcp = FastMCP(
- "rimworld-knowledge-base",
- "1.0.0-fastmcp",
-)
+def rerank_files(question, file_paths, top_n=5):
+ documents, valid_paths = [], []
+ for path in file_paths:
+ try:
+ with open(path, 'r', encoding='utf-8') as f: documents.append(f.read(2000))
+ valid_paths.append(path)
+ except Exception: continue
+ if not documents: return []
+ response = dashscope.TextReRank.call(model='gte-rerank', query=question, documents=documents, top_n=top_n)
+ return [valid_paths[r['index']] for r in response.output['results']] if response.status_code == HTTPStatus.OK else valid_paths[:top_n]
+
+def extract_full_code_block(file_path, keyword):
+ try:
+ with open(file_path, 'r', encoding='utf-8') as f: lines = f.read().split('\n')
+ found_line_index = -1
+ for i, line in enumerate(lines):
+ if re.search(r'\b' + re.escape(keyword) + r'\b', line, re.IGNORECASE):
+ found_line_index = i
+ break
+ if found_line_index == -1: return ""
+ if file_path.endswith(('.cs', '.txt')):
+ start_index, brace_count = -1, 0
+ for i in range(found_line_index, -1, -1):
+ if 'class ' in lines[i] or 'struct ' in lines[i] or 'enum ' in lines[i]: start_index = i; break
+ if start_index == -1: return ""
+ end_index = -1
+ for i in range(start_index, len(lines)):
+ brace_count += lines[i].count('{') - lines[i].count('}')
+ if brace_count == 0 and '{' in "".join(lines[start_index:i+1]): end_index = i; break
+ return "\n".join(lines[start_index:end_index+1]) if end_index != -1 else ""
+ elif file_path.endswith('.xml'): return "\n".join(lines)
+ except Exception as e: logging.error(f"提取代码时出错 {file_path}: {e}"); return ""
+
+def find_keywords_in_question(question: str) -> list[str]:
+ return list(set(re.findall(r'\b[A-Z][a-zA-Z0-9_]*\b', question))) or [question.split(" ")[-1]]
+
+# 4. --- 并行任务定义 ---
+
+def get_cloud_response(question, result_container):
+ logging.info("开始请求云端智能体...")
+ try:
+ response = dashscope.Application.call(app_id=DASHSCOPE_APP_ID, api_key=DASHSCOPE_API_KEY, prompt=question)
+ if response.status_code == HTTPStatus.OK:
+ result_container['cloud'] = response.output.text
+ logging.info("成功获取云端智能体回复。")
+ else:
+ result_container['cloud'] = f"云端智能体请求失败: {response.message}"
+ logging.error(f"云端智能体请求失败: {response.message}")
+ except Exception as e:
+ result_container['cloud'] = f"云端智能体请求异常: {e}"
+ logging.error(f"云端智能体请求异常: {e}", exc_info=True)
+
+def get_local_rag_response(question, result_container):
+ logging.info("开始本地RAG流程...")
+ try:
+ keywords = find_keywords_in_question(question)
+ found_files = find_files_with_keyword(KNOWLEDGE_BASE_PATHS, keywords)
+ if not found_files:
+ result_container['local'] = "本地RAG:未找到相关文件。"
+ return
+
+ reranked_files = rerank_files(question, found_files)
+
+ context_blocks = []
+ for file_path in reranked_files:
+ for keyword in keywords:
+ if keyword.lower() in file_path.lower():
+ code = extract_full_code_block(file_path, keyword)
+ if code:
+ header = f"\n--- 本地文件: {os.path.basename(file_path)} ---\n"
+ context_blocks.append(header + code)
+ break
+ result_container['local'] = "\n".join(context_blocks) if context_blocks else "本地RAG:找到文件但未能提取代码。"
+ logging.info("本地RAG流程完成。")
+ except Exception as e:
+ result_container['local'] = f"本地RAG流程异常: {e}"
+ logging.error(f"本地RAG流程异常: {e}", exc_info=True)
+
+# 5. --- MCP服务器 ---
+mcp = FastMCP(name="rimworld-knowledge-base")
@mcp.tool()
def get_context(question: str) -> str:
- """
- 根据问题中的关键词和向量相似度,在RimWorld知识库中搜索最相关的多个代码片段,
- 并将其整合后返回。
- """
- logging.info(f"收到问题: {question}")
-
- try:
- # 使用LLM分析问题,添加超时保护
- analysis = analyze_question_with_llm(question)
- keywords = analysis["search_keywords"]
-
- # 确保关键词被正确拆分
- split_keywords = []
- for keyword in keywords:
- # 如果关键词中包含空格,将其拆分为多个关键词
- if ' ' in keyword:
- split_keywords.extend(keyword.split())
- else:
- split_keywords.append(keyword)
- keywords = split_keywords
-
- if not keywords:
- logging.warning("无法从问题中提取关键词。")
- return "无法从问题中提取关键词,请提供更具体的信息。"
- except Exception as e:
- logging.error(f"LLM分析失败,使用备用方案: {e}")
- # 备用方案:使用简单的关键词提取
- keywords = find_keywords_in_question(question)
- if not keywords:
- return "无法分析问题,请检查网络连接或稍后重试。"
-
- logging.info(f"提取到关键词: {keywords}")
-
- # 基于所有关键词创建缓存键
- cache_key = "-".join(sorted(keywords))
-
- # 1. 检查缓存
- cached_result = load_cache_for_question(question, keywords)
- if cached_result:
- return cached_result
-
- logging.info(f"缓存未命中,开始实时搜索: {cache_key}")
-
- # 2. 对每个关键词分别执行搜索过程,然后合并结果
- try:
- all_results = []
- processed_files = set() # 避免重复处理相同文件
-
- for keyword in keywords:
- logging.info(f"开始搜索关键词: {keyword}")
-
- # 为当前关键词搜索文件
- candidate_files = find_files_with_keyword(KNOWLEDGE_BASE_PATHS, [keyword])
-
- if not candidate_files:
- logging.info(f"未找到与 '{keyword}' 相关的文件。")
- continue
-
- logging.info(f"找到 {len(candidate_files)} 个候选文件用于关键词 '{keyword}',开始向量化处理...")
-
- # 文件名精确匹配优先
- priority_results = []
- remaining_files = []
- for file_path in candidate_files:
- # 避免重复处理相同文件
- if file_path in processed_files:
- continue
-
- filename_no_ext = os.path.splitext(os.path.basename(file_path))[0]
- if filename_no_ext.lower() == keyword.lower():
- logging.info(f"文件名精确匹配: {file_path}")
- code_block = extract_relevant_code(file_path, keyword)
- if code_block:
- priority_results.append({
- 'path': file_path,
- 'similarity': 1.0, # 精确匹配给予最高分
- 'code': code_block
- })
- processed_files.add(file_path)
- else:
- remaining_files.append(file_path)
-
- # 更新候选文件列表,排除已优先处理的文件
- candidate_files = [f for f in remaining_files if f not in processed_files]
-
- # 限制向量化的文件数量以避免超时
- MAX_FILES_TO_VECTORIZE = 5
- if len(candidate_files) > MAX_FILES_TO_VECTORIZE:
- logging.warning(f"候选文件过多 ({len(candidate_files)}),仅处理前 {MAX_FILES_TO_VECTORIZE} 个。")
- candidate_files = candidate_files[:MAX_FILES_TO_VECTORIZE]
-
- # 为剩余文件生成向量
- question_embedding = get_embedding(keyword) # 使用关键词而不是整个问题
- if not question_embedding:
- logging.warning(f"无法为关键词 '{keyword}' 生成向量。")
- # 将优先结果添加到总结果中
- all_results.extend(priority_results)
- continue
-
- file_embeddings = []
- for i, file_path in enumerate(candidate_files):
- try:
- # 避免重复处理相同文件
- if file_path in processed_files:
- continue
-
- with open(file_path, 'r', encoding='utf-8') as f:
- content = f.read()
- # 添加处理进度日志
- if i % 5 == 0: # 每5个文件记录一次进度
- logging.info(f"正在处理第 {i+1}/{len(candidate_files)} 个文件: {os.path.basename(file_path)}")
-
- file_embedding = get_embedding(content[:8000]) # 限制内容长度以提高效率
- if file_embedding:
- file_embeddings.append({'path': file_path, 'embedding': file_embedding})
- except Exception as e:
- logging.error(f"处理文件 {file_path} 时出错: {e}")
- continue # 继续处理下一个文件,而不是完全失败
-
- if not file_embeddings and not priority_results:
- logging.warning(f"未能为关键词 '{keyword}' 的任何候选文件生成向量。")
- continue
-
- # 找到最相似的多个文件
- best_matches = find_most_similar_files(question_embedding, file_embeddings, top_n=3)
-
- # 重排序处理
- if len(best_matches) > 1:
- reranked_matches = rerank_files(keyword, best_matches, top_n=2) # 减少重排序数量
- else:
- reranked_matches = best_matches
-
- # 提取代码内容
- results_with_code = []
- for match in reranked_matches:
- # 避免重复处理相同文件
- if match['path'] in processed_files:
- continue
-
- code_block = extract_relevant_code(match['path'], "")
- if code_block:
- match['code'] = code_block
- results_with_code.append(match)
- processed_files.add(match['path'])
-
- # 将优先结果和相似度结果合并
- results_with_code = priority_results + results_with_code
-
- # 将当前关键词的结果添加到总结果中
- all_results.extend(results_with_code)
-
- # 检查是否有任何结果
- if len(all_results) <= 0:
- return f"未在知识库中找到与 '{keywords}' 相关的文件定义。"
-
- # 整理最终输出
- final_output = ""
- for i, result in enumerate(all_results, 1):
- final_output += f"--- 结果 {i} (相似度: {result['similarity']:.3f}) ---\n"
- final_output += f"文件路径: {result['path']}\n\n"
- final_output += f"{result['code']}\n\n"
-
- # 5. 更新缓存并返回结果
- logging.info(f"向量搜索完成。找到了 {len(all_results)} 个匹配项并成功提取了代码。")
- save_cache_for_question(question, keywords, final_output)
-
- return final_output
-
- except Exception as e:
- logging.error(f"处理请求时发生意外错误: {e}", exc_info=True)
- return f"处理您的请求时发生错误: {e}"
+ """并行获取云端分析和本地代码,并组合输出。"""
+ results = {}
+
+ # 创建并启动线程
+ cloud_thread = threading.Thread(target=get_cloud_response, args=(question, results))
+ local_thread = threading.Thread(target=get_local_rag_response, args=(question, results))
+
+ cloud_thread.start()
+ local_thread.start()
+
+ # 等待两个线程完成
+ cloud_thread.join()
+ local_thread.join()
+
+ # 组合结果
+ cloud_result = results.get('cloud', "未能获取云端回复。")
+ local_result = results.get('local', "未能获取本地代码。")
+
+ final_response = (
+ f"--- 云端智能体分析 ---\n\n{cloud_result}\n\n"
+ f"====================\n\n"
+ f"--- 本地完整代码参考 ---\n{local_result}"
+ )
+
+ return final_response
# 6. --- 启动服务器 ---
-# FastMCP 实例可以直接运行
if __name__ == "__main__":
- logging.info(f"Python Executable: {sys.executable}")
- logging.info("RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...")
-
- # 快速启动:延迟初始化重量级组件
- try:
- # 验证基本配置
- if not dashscope.api_key:
- logging.warning("警告:DASHSCOPE_API_KEY 未配置,部分功能可能受限。")
-
- # 创建必要目录
- os.makedirs(CACHE_DIR, exist_ok=True)
-
- logging.info("MCP服务器快速启动完成,等待客户端连接...")
- except Exception as e:
- logging.error(f"服务器启动时出错: {e}")
-
- # 使用 'stdio' 传输协议
- mcp.run(transport="stdio")
\ No newline at end of file
+ logging.info("启动并行模式MCP服务器...")
+ mcp.run()
+ logging.info("并行模式MCP服务器已停止。")
\ No newline at end of file
diff --git a/MCP/mcpserver_stdio_simple_proxy.py b/MCP/mcpserver_stdio_simple_proxy.py
new file mode 100644
index 00000000..8ea45dd9
--- /dev/null
+++ b/MCP/mcpserver_stdio_simple_proxy.py
@@ -0,0 +1,271 @@
+# -*- coding: utf-8 -*-
+import os
+import sys
+import logging
+import re
+from http import HTTPStatus
+import dashscope
+
+# 1. --- 导入MCP SDK ---
+MCP_DIR = os.path.dirname(os.path.abspath(__file__))
+SDK_PATH = os.path.join(MCP_DIR, 'python-sdk', 'src')
+if SDK_PATH not in sys.path:
+ sys.path.insert(0, SDK_PATH)
+
+from mcp.server.fastmcp import FastMCP
+from dotenv import load_dotenv
+
+# 2. --- 日志和环境配置 ---
+LOG_FILE_PATH = os.path.join(MCP_DIR, 'mcpserver_hybrid.log')
+logging.basicConfig(filename=LOG_FILE_PATH, level=logging.INFO,
+ format='%(asctime)s - %(levelname)s - %(message)s',
+ encoding='utf-8')
+
+# 加载 .env 文件 (API_KEY 和 APP_ID)
+env_path = os.path.join(MCP_DIR, '.env')
+load_dotenv(dotenv_path=env_path)
+
+DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
+DASHSCOPE_APP_ID = os.getenv("DASHSCOPE_APP_ID")
+
+if not DASHSCOPE_API_KEY or not DASHSCOPE_APP_ID:
+ error_msg = "错误:请确保 MCP/.env 文件中已正确配置 DASHSCOPE_API_KEY 和 DASHSCOPE_APP_ID。"
+ logging.error(error_msg)
+ sys.exit(error_msg)
+
+# 定义本地知识库路径
+KNOWLEDGE_BASE_PATHS = [
+ r"C:\Steam\steamapps\common\RimWorld\Data"
+]
+
+# 3. --- 本地代码搜索与提取函数 (从旧版移植) ---
+
+def find_files_with_keyword(base_paths: list[str], keywords: list[str]) -> list[str]:
+ """在基础路径中递归搜索包含任意一个关键词的文件。"""
+ found_files = set()
+ # 完全匹配,区分大小写
+ for base_path in base_paths:
+ for root, _, files in os.walk(base_path):
+ for file in files:
+ if any(keyword in file for keyword in keywords):
+ found_files.add(os.path.join(root, file))
+ logging.info(f"通过文件名关键词找到 {len(found_files)} 个文件: {found_files}")
+ return list(found_files)
+
+def extract_csharp_class(lines, start_index):
+ """从C#代码行中提取完整的类定义。"""
+ class_start_index = -1
+ brace_level_at_class_start = -1
+ # 向上找到 class, struct, or enum 声明
+ for i in range(start_index, -1, -1):
+ line = lines[i]
+ if 'class ' in line or 'struct ' in line or 'enum ' in line:
+ class_start_index = i
+ # 计算声明行的初始大括号层级
+ brace_level_at_class_start = lines[i].count('{')
+ # 如果声明行没有'{', 则从下一行开始计算
+ if '{' not in lines[i]:
+ brace_level_at_class_start = 0
+ # 寻找第一个'{'
+ for j in range(i + 1, len(lines)):
+ if '{' in lines[j]:
+ class_start_index = j
+ brace_level_at_class_start = lines[j].count('{')
+ break
+ break
+
+ if class_start_index == -1: return ""
+
+ brace_count = 0
+ # 从class声明之后的第一行或包含`{`的行开始计数
+ start_line_for_brace_count = class_start_index
+ if '{' in lines[class_start_index]:
+ brace_count = lines[class_start_index].count('{') - lines[class_start_index].count('}')
+ start_line_for_brace_count += 1
+
+ class_end_index = -1
+ for i in range(start_line_for_brace_count, len(lines)):
+ line = lines[i]
+ brace_count += line.count('{')
+ brace_count -= line.count('}')
+ if brace_count <= 0:
+ class_end_index = i
+ break
+
+ if class_end_index != -1:
+ # 实际截取时,从包含 class 声明的那一行开始
+ original_start_index = -1
+ for i in range(start_index, -1, -1):
+ if 'class ' in lines[i] or 'struct ' in lines[i] or 'enum ' in lines[i]:
+ original_start_index = i
+ break
+ if original_start_index != -1:
+ return "\n".join(lines[original_start_index:class_end_index+1])
+ return ""
+
+def extract_xml_def(lines, start_index):
+ """从XML行中提取完整的Def块。"""
+ def_start_index = -1
+ def_tag = ""
+ # 向上找到Def的起始标签
+ for i in range(start_index, -1, -1):
+ line = lines[i].strip()
+ match = re.search(r'<([A-Za-z_][A-Za-z0-9_]*Def)\s*.*>', line)
+ if match:
+ def_start_index = i
+ def_tag = match.group(1)
+ break
+
+ if def_start_index == -1: return ""
+
+ # 向下找到匹配的
+ def_end_index = -1
+ for i in range(def_start_index + 1, len(lines)):
+ if f'{def_tag}>' in lines[i]:
+ def_end_index = i
+ break
+
+ if def_end_index != -1:
+ return "\n".join(lines[def_start_index:def_end_index+1])
+ return ""
+
+def extract_relevant_code(file_path, keyword):
+ """从文件中智能提取包含关键词的完整代码块 (C#类 或 XML Def)。"""
+ try:
+ with open(file_path, 'r', encoding='utf-8') as f:
+ content = f.read()
+
+ lines = content.split('\n')
+
+ found_line_index = -1
+ for i, line in enumerate(lines):
+ # 使用更精确的匹配,例如匹配 "class Keyword" 或 "Keyword"
+ if re.search(r'\b' + re.escape(keyword) + r'\b', line):
+ found_line_index = i
+ break
+
+ if found_line_index == -1:
+ return ""
+
+ if file_path.endswith(('.cs', '.txt')):
+ return extract_csharp_class(lines, found_line_index)
+ elif file_path.endswith('.xml'):
+ return extract_xml_def(lines, found_line_index)
+ else:
+ return ""
+
+ except Exception as e:
+ logging.error(f"提取代码时出错 {file_path}: {e}")
+ return f"# Error reading file: {e}"
+
+def extract_keywords_from_response(text: str) -> list[str]:
+ """从LLM的回复中提取所有看起来像C#类或XML Def的关键词。"""
+ # 匹配驼峰命名且以大写字母开头的单词,可能是C#类
+ csharp_pattern = r'\b([A-Z][a-zA-Z0-9_]*)\b'
+ # 匹配XML DefName的通用模式
+ xml_pattern = r'\b([a-zA-Z0-9_]+?Def)\b'
+
+ keywords = set()
+
+ # 先找精确的XML Def
+ for match in re.finditer(xml_pattern, text):
+ keywords.add(match.group(1))
+
+ # 再找可能是C#的类
+ for match in re.finditer(csharp_pattern, text):
+ word = match.group(1)
+ # 过滤掉一些常见非类名词和全大写的缩写
+ if word.upper() != word and len(word) > 2 and not word.endswith('Def'):
+ # 检查是否包含小写字母,以排除全大写的缩写词
+ if any(c.islower() for c in word):
+ keywords.add(word)
+
+ # 从 `// 来自文档X (ClassName 类)` 中提取
+ doc_pattern = r'\(([\w_]+)\s+类\)'
+ for match in re.finditer(doc_pattern, text):
+ keywords.add(match.group(1))
+
+ logging.info(f"从LLM回复中提取的关键词: {list(keywords)}")
+ return list(keywords)
+
+
+# 4. --- 创建MCP服务器实例 ---
+mcp = FastMCP(
+ name="rimworld-knowledge-base"
+)
+
+# 5. --- 定义核心工具 ---
+@mcp.tool()
+def get_context(question: str) -> str:
+ """
+ 接收一个问题,调用云端智能体获取分析,然后用本地文件增强代码的完整性。
+ """
+ # --- 第一阶段:调用云端智能体 ---
+ logging.info(f"收到问题: {question}")
+ enhanced_prompt = (
+ f"{question}\n\n"
+ f"--- \n"
+ f"请注意:如果回答中包含代码,必须提供完整的类或Def定义,不要省略任何部分。"
+ )
+
+ try:
+ response = dashscope.Application.call(
+ app_id=DASHSCOPE_APP_ID,
+ api_key=DASHSCOPE_API_KEY,
+ prompt=enhanced_prompt
+ )
+
+ if response.status_code != HTTPStatus.OK:
+ error_info = (f'请求失败: request_id={response.request_id}, '
+ f'code={response.status_code}, message={response.message}')
+ logging.error(error_info)
+ return f"Error: 调用AI智能体失败。{error_info}"
+
+ llm_response_text = response.output.text
+ logging.info(f"收到智能体回复: {llm_response_text[:300]}...")
+
+ except Exception as e:
+ logging.error(f"调用智能体时发生未知异常: {e}", exc_info=True)
+ return f"Error: 调用AI智能体时发生未知异常 - {e}"
+
+ # --- 第二阶段:本地增强 ---
+ logging.info("开始本地增强流程...")
+ keywords = extract_keywords_from_response(llm_response_text)
+ if not keywords:
+ logging.info("未从回复中提取到关键词,直接返回云端结果。")
+ return llm_response_text
+
+ found_code_blocks = []
+ processed_files = set()
+
+ # 优先根据文件名搜索
+ found_files = find_files_with_keyword(KNOWLEDGE_BASE_PATHS, keywords)
+ for file_path in found_files:
+ if file_path in processed_files:
+ continue
+ # 从文件名中找出是哪个关键词匹配的
+ matching_keyword = next((k for k in keywords if k in os.path.basename(file_path)), None)
+ if matching_keyword:
+ logging.info(f"在文件 {file_path} 中为关键词 '{matching_keyword}' 提取代码...")
+ code = extract_relevant_code(file_path, matching_keyword)
+ if code:
+ header = f"\n\n--- 完整代码定义: {matching_keyword} (来自 {os.path.basename(file_path)}) ---\n"
+ found_code_blocks.append(header + code)
+ processed_files.add(file_path)
+
+ # --- 组合最终结果 ---
+ final_response = llm_response_text
+ if found_code_blocks:
+ final_response += "\n\n" + "="*40
+ final_response += "\n本地知识库补充的完整代码定义:\n" + "="*40
+ final_response += "".join(found_code_blocks)
+
+ return final_response
+
+# 6. --- 启动服务器 ---
+if __name__ == "__main__":
+ logging.info("启动混合模式MCP服务器...")
+ logging.info(f"将使用 App ID: {DASHSCOPE_APP_ID}")
+ logging.info(f"Python Executable: {sys.executable}")
+ mcp.run()
+ logging.info("混合模式MCP服务器已停止。")
\ No newline at end of file
diff --git a/MCP/vector_cache/knowledge_cache.json b/MCP/vector_cache/knowledge_cache.json
deleted file mode 100644
index 22bcc7ef..00000000
--- a/MCP/vector_cache/knowledge_cache.json
+++ /dev/null
@@ -1,47603 +0,0 @@
-{
- "ThingDef": {
- "keywords": [
- "ThingDef"
- ],
- "question": "What is a ThingDef?",
- "embedding": [
- -0.019440101459622383,
- 0.0362212248146534,
- 0.00969050731509924,
- 0.03294181451201439,
- -0.04809800535440445,
- -0.0006195055320858955,
- -0.016131149604916573,
- 0.06724266707897186,
- 0.04210052639245987,
- 0.11746785044670105,
- -0.053061433136463165,
- -0.06990164518356323,
- -0.038112055510282516,
- -0.0914689302444458,
- 0.029056748375296593,
- -0.017874257639050484,
- 0.00430237827822566,
- -0.07279697805643082,
- 0.01387840136885643,
- -0.013413080014288425,
- 0.027978384867310524,
- 0.022675195708870888,
- -0.029115837067365646,
- 0.06281103193759918,
- 0.019454874098300934,
- -0.05279553681612015,
- 0.01324320025742054,
- 0.06245649978518486,
- -0.03876202926039696,
- 0.011958026327192783,
- -0.0014559765113517642,
- 0.04142100736498833,
- 0.012238696217536926,
- 0.007696271408349276,
- 0.002598045626655221,
- 0.03973698616027832,
- 0.0067877862602472305,
- -0.014247704297304153,
- 0.020001443102955818,
- -0.037107549607753754,
- 0.036191679537296295,
- -0.01231255754828453,
- -0.02537849172949791,
- -0.0331190787255764,
- -0.04130282998085022,
- -0.007703657727688551,
- 0.03693028539419174,
- -0.06446550786495209,
- -0.05066835135221481,
- 0.03394631668925285,
- -0.012002342380583286,
- 0.02050369419157505,
- -0.03636894375085831,
- -0.017726536840200424,
- 0.012777878902852535,
- 0.03282363712787628,
- 0.03970744460821152,
- -0.028569268062710762,
- -0.004054945427924395,
- 0.008715547621250153,
- 0.009764367714524269,
- 0.032557740807533264,
- -0.07220609486103058,
- -0.023133130744099617,
- 0.07108341157436371,
- -0.06594271957874298,
- -0.011529634706676006,
- -0.02477283589541912,
- 0.04839344695210457,
- -0.016278870403766632,
- -0.03831886500120163,
- 0.04836390167474747,
- -0.07622411102056503,
- -0.021818412467837334,
- -0.07356512546539307,
- 0.026102324947714806,
- -0.023133130744099617,
- -0.00922518502920866,
- -0.02286723256111145,
- -0.022305892780423164,
- 0.020400289446115494,
- -0.004095568787306547,
- -0.03264637291431427,
- -0.005713114980608225,
- 0.03678256273269653,
- 0.025629617273807526,
- -0.009904702194035053,
- -0.03595532476902008,
- -0.028968116268515587,
- 0.09383247047662735,
- -0.05932481214404106,
- 0.046620793640613556,
- 0.0299430750310421,
- -0.01830264925956726,
- 0.04546856880187988,
- 0.07474689930677414,
- -0.04446406289935112,
- 0.03958926722407341,
- 0.016603855416178703,
- 0.02034120075404644,
- -0.03291226923465729,
- -0.040948301553726196,
- -0.010340480133891106,
- 0.06812898814678192,
- 0.015244822017848492,
- 0.07126067578792572,
- -0.028569268062710762,
- -0.040593769401311874,
- -0.016485679894685745,
- -0.0028251667972654104,
- -0.006086111068725586,
- 0.04210052639245987,
- -0.00900360383093357,
- 0.01716519705951214,
- -0.008021257817745209,
- 0.06121564283967018,
- -0.030312377959489822,
- -0.027815891429781914,
- 0.05264781415462494,
- -0.005343812517821789,
- 0.032557740807533264,
- -0.051170602440834045,
- 0.013029004447162151,
- -0.027092058211565018,
- -0.002982120495289564,
- 0.013989192433655262,
- 0.040977843105793,
- 0.03595532476902008,
- -0.01024446077644825,
- -0.04797982797026634,
- -0.05250009521842003,
- -0.012260855175554752,
- 0.013582958839833736,
- -0.007312196306884289,
- -0.020562782883644104,
- -0.0457049198448658,
- 0.04269140958786011,
- 0.03261682763695717,
- -0.04682760313153267,
- 0.027092058211565018,
- -0.037934787571430206,
- -0.0015778464730829,
- -0.05031381919980049,
- 0.009993335232138634,
- 0.11398163437843323,
- -0.0022195102646946907,
- -0.0013165646232664585,
- -0.055277250707149506,
- -0.02901243232190609,
- 0.020385516807436943,
- 0.018169701099395752,
- -0.029381735250353813,
- -0.010340480133891106,
- 0.015422087162733078,
- -0.001591695356182754,
- 0.016278870403766632,
- -0.009845614433288574,
- -0.04452315345406532,
- 0.0022878311574459076,
- -0.012186993844807148,
- 0.039973340928554535,
- 0.006987209897488356,
- -0.04331183806061745,
- 0.009158710949122906,
- 0.004956044256687164,
- -0.02161160297691822,
- -0.05725671350955963,
- 0.03548261895775795,
- -0.07202883064746857,
- 0.003549000481143594,
- 0.026235274970531464,
- -0.020725276321172714,
- -0.01087966188788414,
- -0.0004101569938939065,
- -0.004114033654332161,
- -0.03072599694132805,
- 0.007711043581366539,
- 0.01349432673305273,
- 0.048659343272447586,
- -0.04765484109520912,
- 0.03820068761706352,
- 0.009720050729811192,
- 0.08083301037549973,
- 0.010606378316879272,
- 0.012054044753313065,
- -0.023384256288409233,
- -0.03196685388684273,
- 0.03214412182569504,
- -0.0055986312218010426,
- 0.0027328410651534796,
- -0.033975861966609955,
- 0.041893716901540756,
- 0.050875160843133926,
- 0.06133381649851799,
- -0.05693172663450241,
- -0.009409836493432522,
- 0.006270762532949448,
- 0.02808178961277008,
- 0.017889030277729034,
- 0.0015981581527739763,
- 0.025452353060245514,
- 0.011175104416906834,
- 0.022187715396285057,
- -0.011817690916359425,
- 0.05282508209347725,
- -0.027225006371736526,
- 0.03025328926742077,
- -0.00884111039340496,
- 0.013102864846587181,
- 0.0012353180209174752,
- 0.027313638478517532,
- -0.01277049258351326,
- 0.04018015041947365,
- -0.01921852119266987,
- -0.014786886051297188,
- -0.01118987612426281,
- -0.04475950449705124,
- -0.0007441452471539378,
- -0.028332915157079697,
- -0.0061267344281077385,
- 0.0024170870892703533,
- -0.009956404566764832,
- 0.02651594579219818,
- 0.02729886770248413,
- 0.028510181233286858,
- -0.006507116369903088,
- 0.03122824989259243,
- 0.013834085315465927,
- 0.02301495335996151,
- -0.03580760583281517,
- 0.023413801565766335,
- 0.03598487004637718,
- -0.08898721635341644,
- 0.06759719550609589,
- 0.039973340928554535,
- -0.0020311656408011913,
- -0.028598813340067863,
- -0.025023961439728737,
- 0.03663484379649162,
- 0.03731435909867287,
- -0.028303369879722595,
- 0.018494686111807823,
- -0.0457935556769371,
- 0.030208973214030266,
- -0.027239779010415077,
- 0.0013073320733383298,
- -0.06399279832839966,
- -0.06411097198724747,
- 0.028022700920701027,
- -0.009653576649725437,
- -0.017726536840200424,
- 0.0053548915311694145,
- -0.055247705429792404,
- -0.009358134120702744,
- -0.02068096026778221,
- 0.0457344651222229,
- -0.03105098381638527,
- -0.01474995631724596,
- 0.005188704933971167,
- 0.02443307638168335,
- -0.007866150699555874,
- -0.0037687355652451515,
- 0.0005137926200404763,
- -0.036664389073848724,
- -0.03447811305522919,
- 0.017268601804971695,
- -0.0031132230069488287,
- -0.05406593903899193,
- -0.07959215342998505,
- -0.038112055510282516,
- 0.004051252268254757,
- 0.0378757007420063,
- 0.01720951311290264,
- -0.029691949486732483,
- 0.001599081326276064,
- 0.023768331855535507,
- 0.007917853072285652,
- 0.0457344651222229,
- -0.08059665560722351,
- -0.0141886156052351,
- -0.01765267550945282,
- 0.00536597054451704,
- -0.011219420470297337,
- -0.05001837760210037,
- -0.023871736600995064,
- 0.019115116447210312,
- 0.024698974564671516,
- 0.021980905905365944,
- 0.039057470858097076,
- 0.021212756633758545,
- 0.061865612864494324,
- 0.015259593725204468,
- -0.007441452704370022,
- -0.004904341883957386,
- -0.026885248720645905,
- -0.018081067129969597,
- 0.025319403037428856,
- 0.03480309993028641,
- -0.006832102779299021,
- 0.027963612228631973,
- 0.0009601874044165015,
- 0.014159071259200573,
- -0.0047012255527079105,
- -0.0204889215528965,
- 0.0866236761212349,
- 0.00962403230369091,
- -0.013435238040983677,
- -0.07480598986148834,
- -0.005949468817561865,
- -0.05060926452279091,
- 0.025452353060245514,
- -0.016943614929914474,
- -0.0016886373050510883,
- -0.011980184353888035,
- 0.020592326298356056,
- 0.025334175676107407,
- -0.04665033519268036,
- -0.004435327369719744,
- -0.028126105666160583,
- 0.01386362873017788,
- -0.048009369522333145,
- -0.012984688393771648,
- -0.003803819417953491,
- 0.0181549284607172,
- -0.03217366337776184,
- -0.013029004447162151,
- 0.02588074468076229,
- -0.001548302243463695,
- -0.00992686115205288,
- 0.0012473204405978322,
- 0.010510358959436417,
- 0.004715997260063887,
- 0.02161160297691822,
- 0.016840210184454918,
- -0.05489317700266838,
- 0.008338858373463154,
- 0.015377771109342575,
- 0.034596290439367294,
- 0.007755360100418329,
- 0.009542785584926605,
- -0.032557740807533264,
- 0.018095839768648148,
- 0.023561522364616394,
- -0.023694470524787903,
- 0.04085966944694519,
- -0.008966673165559769,
- 0.02348766103386879,
- 0.056370388716459274,
- -0.0378166139125824,
- 0.021966133266687393,
- -0.006802558433264494,
- -0.02619095891714096,
- -0.028273826465010643,
- 0.024344444274902344,
- -0.01278526522219181,
- 0.0014799812342971563,
- -0.004756620619446039,
- -0.0165447685867548,
- -0.024241039529442787,
- 0.006152585614472628,
- -0.02065141499042511,
- 0.054154571145772934,
- -0.0020145471207797527,
- 0.006492344196885824,
- 0.03551216423511505,
- -0.0017800397472456098,
- -0.001140222535468638,
- 0.08130571991205215,
- 0.007245722226798534,
- 0.024373987689614296,
- 0.02963286079466343,
- -0.03294181451201439,
- 0.010754099115729332,
- 0.01638227514922619,
- -0.0347440131008625,
- -0.0014605928445234895,
- 0.01497153751552105,
- 0.0204889215528965,
- -0.017076563090085983,
- -0.0005784205859526992,
- 0.07628319412469864,
- 0.016441363841295242,
- 0.004291299264878035,
- -0.055572692304849625,
- -0.021168438717722893,
- -0.002655287506058812,
- 0.013272744603455067,
- 0.010517745278775692,
- -0.011064313352108002,
- -0.035718973726034164,
- 0.05114106088876724,
- -0.014314178377389908,
- 0.024004684761166573,
- -0.01302161905914545,
- 0.04747757315635681,
- 0.006001171190291643,
- -0.015451631508767605,
- 0.01985372230410576,
- -0.01874581351876259,
- -0.0291453804820776,
- 0.015348226763308048,
- -0.029248785227537155,
- -0.03820068761706352,
- 0.018539004027843475,
- -0.023000182583928108,
- -0.021345704793930054,
- -0.005528463516384363,
- 0.04325275123119354,
- -0.0009878851706162095,
- 0.020769592374563217,
- -0.03592578321695328,
- 0.012689245864748955,
- 0.042336877435445786,
- -0.020060531795024872,
- -0.07746496796607971,
- -0.018184471875429153,
- -0.009136552922427654,
- -0.0019111422589048743,
- 0.06192470341920853,
- -0.04647307097911835,
- 0.012733562849462032,
- 0.03435993939638138,
- 0.0023506127763539553,
- -0.015119259245693684,
- -0.010813187807798386,
- -0.021552514284849167,
- -0.017874257639050484,
- -0.0038444427773356438,
- -0.015540264546871185,
- -0.0028897947631776333,
- -0.06860169768333435,
- -0.0173572339117527,
- -0.03344406560063362,
- 0.05628175660967827,
- 0.014550532214343548,
- -0.05063880607485771,
- 0.027328411117196083,
- -0.00037230344605632126,
- -0.006684381514787674,
- -0.0040290942415595055,
- -0.07043343782424927,
- -0.01356818713247776,
- 0.01458746287971735,
- -0.037284817546606064,
- -0.03701891750097275,
- 0.012002342380583286,
- 0.047566208988428116,
- -0.0048009371384978294,
- 0.004350387491285801,
- 0.01018537301570177,
- -0.034448571503162384,
- 0.024654658511281013,
- 0.022010449320077896,
- 0.03329634666442871,
- -0.016810666769742966,
- 0.009173482656478882,
- -0.005048369988799095,
- 0.0094615388661623,
- -0.00322955334559083,
- -0.04936840385198593,
- 0.006584669928997755,
- -0.014594849199056625,
- 0.03858476132154465,
- 0.03825977444648743,
- -0.016914071515202522,
- -0.021065033972263336,
- -0.02115366794168949,
- 0.03181913495063782,
- 0.003914610482752323,
- -0.03858476132154465,
- 0.027860207483172417,
- 0.0038333635311573744,
- 0.0014116601087152958,
- 0.00116422725841403,
- 0.030814630910754204,
- 0.002893487922847271,
- 0.017445866018533707,
- 0.004933886229991913,
- 0.019513962790369987,
- 0.016337959095835686,
- 0.030179429799318314,
- 0.010155828669667244,
- 0.02427058294415474,
- 0.005325347185134888,
- -0.08461467176675797,
- -0.015687985345721245,
- -0.013531256467103958,
- -0.0315532349050045,
- 0.015835706144571304,
- -0.024255812168121338,
- 0.0007898464682511985,
- -0.01986849308013916,
- 0.0013304135063663125,
- -0.006736083887517452,
- 0.011950640007853508,
- -0.05533634126186371,
- -0.009941632859408855,
- 0.05598631128668785,
- 0.0029359576292335987,
- -0.08810088783502579,
- -0.015481175854802132,
- 0.044552695006132126,
- -0.014218159951269627,
- 0.027476131916046143,
- -0.01284435298293829,
- 0.016057288274168968,
- -0.034596290439367294,
- -2.3831575163058005e-05,
- -0.021330932155251503,
- 0.012644929811358452,
- 0.009439380839467049,
- -0.033680420368909836,
- 0.020917313173413277,
- -0.02853972464799881,
- -0.037609804421663284,
- 0.0035766982473433018,
- 0.10653648525476456,
- -0.004623671527951956,
- -0.02020825259387493,
- -0.02175932377576828,
- -0.029721492901444435,
- -0.012704018503427505,
- -0.019838949665427208,
- -0.03896883875131607,
- -0.05740443617105484,
- 0.05264781415462494,
- 0.01610160432755947,
- -0.012659701518714428,
- 0.03864385187625885,
- -0.032055485993623734,
- -0.05152513459324837,
- 0.01104215532541275,
- 0.0519978404045105,
- -0.017623132094740868,
- 0.031464602798223495,
- 0.027564765885472298,
- 0.03695983067154884,
- 0.01409998256713152,
- -0.02961808815598488,
- 0.1197132095694542,
- 0.051318325102329254,
- 0.039057470858097076,
- -0.01222392451018095,
- 0.03923473507165909,
- 0.03403495252132416,
- 0.05613403394818306,
- 0.023399028927087784,
- -0.022808143869042397,
- 0.011485318653285503,
- -0.03294181451201439,
- -0.012711403891444206,
- 0.01988326571881771,
- -0.057315804064273834,
- -0.02725454978644848,
- 0.005724194459617138,
- -0.0006171974237076938,
- 0.02082868106663227,
- 0.043282292783260345,
- 0.007349126972258091,
- -0.037609804421663284,
- -0.026560261845588684,
- -0.009040533564984798,
- -0.01970599964261055,
- -0.03560079634189606,
- 0.005015132948756218,
- 0.02793406881392002,
- 0.004287606105208397,
- 0.014292020350694656,
- 0.054302290081977844,
- -0.013125023804605007,
- -0.02396036870777607,
- 0.030031709000468254,
- -0.043134573847055435,
- 0.01042172685265541,
- 0.011463160626590252,
- -0.020237796008586884,
- 0.007666727062314749,
- -0.022527474910020828,
- 0.08408287167549133,
- 0.007777518127113581,
- -0.024639885872602463,
- 0.024713747203350067,
- 0.0472707636654377,
- -0.007282652426511049,
- -0.0029156459495425224,
- 0.01830264925956726,
- 0.06476094573736191,
- -0.0020625563338398933,
- 0.013782382942736149,
- 0.010074581950902939,
- 0.008493965491652489,
- 0.003914610482752323,
- -0.0054176729172468185,
- -0.011618267744779587,
- -0.01893785037100315,
- 0.03388722985982895,
- 0.01970599964261055,
- 0.009380292147397995,
- 0.012349487282335758,
- 0.04930931702256203,
- -0.008759863674640656,
- -0.04511403664946556,
- -0.02743181586265564,
- 0.016337959095835686,
- 0.03279409185051918,
- 0.0013054856099188328,
- -0.012763106264173985,
- -0.006108269095420837,
- 0.0015021393774077296,
- -0.0029378042090684175,
- 0.03926428034901619,
- 0.029204469174146652,
- -0.029248785227537155,
- 0.00915132462978363,
- 0.06375644356012344,
- -0.0037114936858415604,
- -0.004487029742449522,
- 0.014690867625176907,
- -0.01970599964261055,
- -0.010946136899292469,
- -0.053061433136463165,
- 0.003803819417953491,
- -0.001126373652368784,
- -0.049279771745204926,
- -0.015481175854802132,
- -0.005269951652735472,
- -0.0009731129975989461,
- -0.002095793606713414,
- -0.05285462364554405,
- -0.020902542397379875,
- 0.0094541534781456,
- 0.05613403394818306,
- -0.026752298697829247,
- 0.050520628690719604,
- -0.022822916507720947,
- -0.011802919209003448,
- -0.029041975736618042,
- -0.013893173076212406,
- 0.035246264189481735,
- -0.0048821838572621346,
- -0.0015732301399111748,
- 0.019203748553991318,
- 0.017431095242500305,
- -0.02979535423219204,
- 0.01254891138523817,
- -0.009993335232138634,
- -0.04608899727463722,
- 0.011019997298717499,
- -0.015555036254227161,
- 0.001864979392848909,
- -0.026264818385243416,
- 0.002450324362143874,
- 0.03503945469856262,
- 0.0457049198448658,
- 0.021005947142839432,
- 0.022808143869042397,
- -0.03560079634189606,
- 0.03235093131661415,
- 0.0058349850587546825,
- 0.0015039858408272266,
- -0.0025518827605992556,
- 0.03173050284385681,
- 0.008013871498405933,
- -0.0050631421618163586,
- 0.01750495471060276,
- -0.0024097012355923653,
- -0.0059531619772315025,
- -0.04608899727463722,
- 0.010214917361736298,
- 0.01689929887652397,
- 0.0023746173828840256,
- 0.006374167278409004,
- -0.0029950460884720087,
- -0.027210233733057976,
- 0.022305892780423164,
- 0.012046659365296364,
- -0.03885066136717796,
- -0.03802342340350151,
- 0.017933346331119537,
- 0.024359216913580894,
- -0.00309660448692739,
- 0.026235274970531464,
- -0.04526175931096077,
- -0.026131870225071907,
- -0.015215277671813965,
- 0.031021440401673317,
- -0.020754819735884666,
- 0.01766744814813137,
- -0.07663773000240326,
- 0.024994418025016785,
- 0.05350459739565849,
- -0.02493532933294773,
- 0.010347865521907806,
- 0.02162637561559677,
- -0.043282292783260345,
- -0.02193658985197544,
- -0.03769843652844429,
- -0.04348910227417946,
- -0.01040695421397686,
- 0.04783210530877113,
- -0.012792650610208511,
- -0.04670942574739456,
- 0.07291515916585922,
- 0.024728519842028618,
- 0.008538281545042992,
- 0.02178886905312538,
- 0.012105747126042843,
- -0.021360477432608604,
- -0.005506305489689112,
- 0.007474689744412899,
- 0.024388760328292847,
- 0.02633867971599102,
- -0.010310935787856579,
- -0.0009961944306269288,
- -0.009247343055903912,
- -0.015584580600261688,
- 0.014085210859775543,
- -0.007851378992199898,
- -0.06919258087873459,
- -0.020769592374563217,
- -0.015185733325779438,
- 0.025156909599900246,
- 0.026885248720645905,
- 0.026678437367081642,
- -0.05610448867082596,
- -0.025777339935302734,
- -0.008058188483119011,
- -0.0362803116440773,
- 0.027402272447943687,
- 0.06653360277414322,
- -0.028126105666160583,
- -0.029573772102594376,
- 0.002005314454436302,
- -0.03341452404856682,
- -0.011640425771474838,
- -0.027180690318346024,
- -0.028820395469665527,
- -0.009801297448575497,
- -0.016795894131064415,
- -0.008612142875790596,
- 0.02979535423219204,
- -0.013767610304057598,
- 0.03601441532373428,
- -0.01373068057000637,
- 0.05309097841382027,
- -0.025319403037428856,
- 0.004557197447866201,
- -0.007755360100418329,
- 0.03028283454477787,
- -0.01371590793132782,
- 0.02304449863731861,
- -0.03347361087799072,
- -0.051347870379686356,
- -0.05580904707312584,
- -0.03580760583281517,
- 0.017386779189109802,
- 0.019750317558646202,
- 0.000533642596565187,
- -0.012113133445382118,
- 0.044375430792570114,
- -0.017948118969798088,
- 0.049427494406700134,
- 0.008501351810991764,
- 0.06806990504264832,
- 0.050845615565776825,
- 0.010820573195815086,
- -0.006448027677834034,
- 0.0020237795542925596,
- 0.005532156676054001,
- -0.04183462634682655,
- -0.04088921099901199,
- -0.02961808815598488,
- -0.020754819735884666,
- 0.0758104920387268,
- 0.025452353060245514,
- -0.003166771959513426,
- 0.017756082117557526,
- -0.005735273472964764,
- -0.02240929752588272,
- 0.0033218790777027607,
- 0.0032443255186080933,
- -0.02462511509656906,
- -0.03766889125108719,
- 0.009971177205443382,
- 0.025511441752314568,
- 0.021242300048470497,
- -0.005908845458179712,
- 0.05057971924543381,
- 0.014365880750119686,
- 0.010370024479925632,
- 5.444332055049017e-05,
- -0.0009740362875163555,
- 0.04304594174027443,
- 0.05347505211830139,
- 0.01765267550945282,
- -0.020282112061977386,
- -0.03249865025281906,
- 0.0645836815237999,
- -0.006950279697775841,
- 0.031139615923166275,
- 0.01426247600466013,
- -0.07391966134309769,
- 0.04930931702256203,
- -0.012467664666473866,
- -0.03515763208270073,
- 0.014033508487045765,
- -0.01474995631724596,
- -0.03953017666935921,
- -0.0033791211899369955,
- 0.007947397418320179,
- 0.04387317970395088,
- 0.012253468856215477,
- 0.022778600454330444,
- 0.015407315455377102,
- 0.018657179549336433,
- -0.02162637561559677,
- -0.031021440401673317,
- -0.005177625920623541,
- 0.006592055782675743,
- 0.026707982644438744,
- 0.027712486684322357,
- 0.045970819890499115,
- -0.01018537301570177,
- 0.01768222078680992,
- -0.0017283373745158315,
- -0.017948118969798088,
- 0.027993155643343925,
- -0.014676094986498356,
- -0.007485768757760525,
- -0.019277609884738922,
- 0.0024447848554700613,
- -0.005746352486312389,
- -0.020592326298356056,
- -0.018686724826693535,
- 0.0330895371735096,
- -0.03229184076189995,
- -0.009660962969064713,
- -0.01167735643684864,
- -0.007459917571395636,
- -0.019277609884738922,
- -0.020577555522322655,
- 0.0314941480755806,
- 0.0003095219435635954,
- 0.008058188483119011,
- 0.0005798054626211524,
- 0.02446262165904045,
- 0.019838949665427208,
- -0.020784365013241768,
- -0.004933886229991913,
- -0.08278292417526245,
- -0.012268240563571453,
- 0.04159827530384064,
- 0.011396686546504498,
- 0.00016584005788899958,
- 0.021079806610941887,
- 0.03799387812614441,
- -0.013560800813138485,
- -0.004202666692435741,
- -0.03072599694132805,
- 0.022601334378123283,
- -0.02791929617524147,
- 0.005295802839100361,
- -0.03108052909374237,
- 0.0037170331925153732,
- -0.024831924587488174,
- 0.04496631398797035,
- -0.012955144047737122,
- 0.00020577093528117985,
- -0.007341740652918816,
- -0.05223419517278671,
- 0.040771033614873886,
- 0.07149703055620193,
- -0.0063150785863399506,
- 0.029869215562939644,
- 0.017298145219683647,
- 0.023768331855535507,
- -0.008139435201883316,
- 0.016795894131064415,
- -0.010598991997539997,
- 0.04638443887233734,
- -0.00047640068805776536,
- -0.027372727170586586,
- 0.022985409945249557,
- 0.01672203280031681,
- 0.037609804421663284,
- -0.02430012822151184,
- 0.01766744814813137,
- -0.02540803700685501,
- -0.0005830368609167635,
- 0.020459378138184547,
- 0.03134642541408539,
- -0.038407497107982635,
- -0.007201405707746744,
- 0.025201227515935898,
- -0.030238518491387367,
- -0.011056927032768726,
- -0.03920518979430199,
- -0.017475411295890808,
- -0.03480309993028641,
- -0.015702757984399796,
- 0.003316339571028948,
- -0.04210052639245987,
- 0.0010866736993193626,
- -0.04981156811118126,
- -0.01938101463019848,
- 0.02428535558283329,
- -0.025304632261395454,
- -0.014018736779689789,
- -0.025348948314785957,
- 0.039027925580739975,
- 0.004974509589374065,
- 0.018051523715257645,
- 0.027165917679667473,
- 0.020223025232553482,
- -0.03687119856476784,
- -0.0260432381182909,
- -0.03911655768752098,
- 0.04337092861533165,
- 0.01378976833075285,
- -0.02650117315351963,
- 0.0268113873898983,
- 0.026146642863750458,
- -0.02697388082742691,
- -0.007829220965504646,
- 0.012526752427220345,
- -7.657263631699607e-05,
- -0.046768512576818466,
- 0.09495514631271362,
- -0.006776707246899605,
- 0.02096162922680378,
- 0.01626409776508808,
- 0.02602846547961235,
- 0.029839670285582542,
- 0.0022915243171155453,
- 0.00834624469280243,
- -0.01065808068960905,
- -0.014402811415493488,
- -0.04032787308096886,
- 0.006451720837503672,
- -0.002365384716540575,
- 0.01340569369494915,
- -0.00971266534179449,
- 0.025777339935302734,
- 0.0029710414819419384,
- 0.018804902210831642,
- 0.0006208904087543488,
- 0.00045470413169823587,
- -0.0189526230096817,
- 0.045675378292798996,
- 0.029041975736618042,
- -0.0007252185023389757,
- -0.03187822178006172,
- 0.0060159433633089066,
- -0.0033237256575375795,
- -0.057463523000478745,
- 0.0038333635311573744,
- 0.0034382096491754055,
- -0.020769592374563217,
- 0.02130138874053955,
- -0.024713747203350067,
- 0.06399279832839966,
- 0.01800720766186714,
- -0.008641687221825123,
- -0.05707944929599762,
- 0.03009079582989216,
- -0.018391281366348267,
- -0.030666908249258995,
- -0.05492272228002548,
- -0.0013165646232664585,
- 0.03181913495063782,
- -0.03090326301753521,
- 0.034300848841667175,
- 0.0018585165962576866,
- -0.017918573692440987,
- -0.022808143869042397,
- 0.0027346876449882984,
- 0.005443524103611708,
- -0.0315236933529377,
- -0.04922068491578102,
- 0.0027623854111880064,
- -0.0021124123595654964,
- 0.026427311822772026,
- -0.01862763613462448,
- 0.035896237939596176,
- -0.011212035082280636,
- -0.0030541345477104187,
- 0.022187715396285057,
- -0.000870631483849138,
- 0.024950100108981133,
- -0.012415962293744087,
- -0.02459556981921196,
- -0.030194200575351715,
- -0.010104126296937466,
- -0.00884111039340496,
- 0.01039956882596016,
- 0.005731580313295126,
- 0.025127366185188293,
- -0.01497153751552105,
- 0.04242551326751709,
- -0.0027273015584796667,
- -0.02697388082742691,
- 0.05232282727956772,
- -0.0033569629304111004,
- -0.025939833372831345,
- -0.006592055782675743,
- 0.0189230777323246,
- -0.08733274042606354,
- 0.028347687795758247,
- -0.007441452704370022,
- -0.008242839947342873,
- 0.017091335728764534,
- 0.03456674888730049,
- 0.018568547442555428,
- -0.011219420470297337,
- 0.01732769049704075,
- 0.02554098516702652,
- -0.0003939999733120203,
- -0.0019259144319221377,
- 0.004298685118556023,
- -0.002891641343012452,
- -0.030238518491387367,
- 0.08709638565778732,
- -0.015525491908192635,
- 0.0027273015584796667
- ],
- "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\ThingDef.txt\n\npublic class ThingDef : BuildableDef\n{\n\tpublic Type thingClass;\n\n\tpublic ThingCategory category;\n\n\tpublic TickerType tickerType;\n\n\tpublic int stackLimit = 1;\n\n\tpublic IntVec2 size = IntVec2.One;\n\n\tpublic bool destroyable = true;\n\n\tpublic bool rotatable = true;\n\n\tpublic bool smallVolume;\n\n\tpublic bool useHitPoints = true;\n\n\tpublic bool receivesSignals;\n\n\tpublic List comps = new List();\n\n\tpublic List virtualDefs = new List();\n\n\tpublic ThingDef virtualDefParent;\n\n\t[NoTranslate]\n\tpublic string devNote;\n\n\tpublic List killedLeavingsRanges;\n\n\tpublic List killedLeavings;\n\n\tpublic List killedLeavingsPlayerHostile;\n\n\tpublic float killedLeavingsChance = 1f;\n\n\tpublic bool forceLeavingsAllowed;\n\n\tpublic List butcherProducts;\n\n\tpublic List smeltProducts;\n\n\tpublic bool smeltable;\n\n\tpublic bool burnableByRecipe;\n\n\tpublic bool randomizeRotationOnSpawn;\n\n\tpublic List damageMultipliers;\n\n\tpublic bool isTechHediff;\n\n\tpublic RecipeMakerProperties recipeMaker;\n\n\tpublic ThingDef minifiedDef;\n\n\tpublic bool isUnfinishedThing;\n\n\tpublic bool leaveResourcesWhenKilled;\n\n\tpublic ThingDef slagDef;\n\n\tpublic bool isFrameInt;\n\n\tpublic List multipleInteractionCellOffsets;\n\n\tpublic IntVec3 interactionCellOffset = IntVec3.Zero;\n\n\tpublic bool hasInteractionCell;\n\n\tpublic ThingDef interactionCellIcon;\n\n\tpublic bool interactionCellIconReverse;\n\n\tpublic ThingDef filthLeaving;\n\n\tpublic bool forceDebugSpawnable;\n\n\tpublic bool intricate;\n\n\tpublic bool scatterableOnMapGen = true;\n\n\tpublic float deepCommonality;\n\n\tpublic int deepCountPerCell = 300;\n\n\tpublic int deepCountPerPortion = -1;\n\n\tpublic IntRange deepLumpSizeRange = IntRange.Zero;\n\n\tpublic float generateCommonality = 1f;\n\n\tpublic float generateAllowChance = 1f;\n\n\tprivate bool canOverlapZones = true;\n\n\tpublic FloatRange startingHpRange = FloatRange.One;\n\n\t[NoTranslate]\n\tpublic List thingSetMakerTags;\n\n\tpublic bool alwaysFlee;\n\n\tpublic List recipes;\n\n\tpublic bool messageOnDeteriorateInStorage = true;\n\n\tpublic bool deteriorateFromEnvironmentalEffects = true;\n\n\tpublic bool canDeteriorateUnspawned;\n\n\tpublic bool canLoadIntoCaravan = true;\n\n\tpublic bool isMechClusterThreat;\n\n\tpublic FloatRange displayNumbersBetweenSameDefDistRange = FloatRange.Zero;\n\n\tpublic int minRewardCount = 1;\n\n\tpublic bool preventSkyfallersLandingOn;\n\n\tpublic FactionDef requiresFactionToAcquire;\n\n\tpublic float relicChance;\n\n\tpublic OrderedTakeGroupDef orderedTakeGroup;\n\n\tpublic int allowedArchonexusCount;\n\n\tpublic int possessionCount;\n\n\tpublic bool notifyMapRemoved;\n\n\tpublic bool canScatterOver = true;\n\n\tpublic bool genericMarketSellable = true;\n\n\tpublic bool drawHighlight;\n\n\tpublic Color? highlightColor;\n\n\tpublic bool drawHighlightOnlyForHostile;\n\n\tpublic bool autoTargetNearbyIdenticalThings;\n\n\tpublic bool preventDroppingThingsOn;\n\n\tpublic bool hiddenWhileUndiscovered;\n\n\tpublic bool disableImpassableShotOverConfigError;\n\n\tpublic bool showInSearch = true;\n\n\tpublic bool bringAlongOnGravship = true;\n\n\tpublic ThingDef dropPodFaller;\n\n\tpublic bool preventSpawningInResourcePod;\n\n\tpublic bool pathfinderDangerous;\n\n\tpublic bool noRightClickDraftAttack;\n\n\tpublic int gravshipSpawnPriority = 1;\n\n\tpublic List replaceTags;\n\n\tpublic GraphicData graphicData;\n\n\tpublic DrawerType drawerType = DrawerType.RealtimeOnly;\n\n\tpublic bool drawOffscreen;\n\n\tpublic ColorGenerator colorGenerator;\n\n\tpublic float hideAtSnowOrSandDepth = 99999f;\n\n\tpublic bool drawDamagedOverlay = true;\n\n\tpublic bool castEdgeShadows;\n\n\tpublic float staticSunShadowHeight;\n\n\tpublic bool useSameGraphicForGhost;\n\n\tpublic bool useBlueprintGraphicAsGhost;\n\n\tpublic List randomStyle;\n\n\tpublic float randomStyleChance;\n\n\tpublic bool canEditAnyStyle;\n\n\tpublic bool dontPrint;\n\n\tpublic ThingDef defaultStuff;\n\n\tpublic int killedLeavingsExpandRect;\n\n\tpublic bool minifiedManualDraw;\n\n\tpublic float minifiedDrawScale = 1f;\n\n\tpublic Rot4 overrideMinifiedRot = Rot4.Invalid;\n\n\tpublic Vector3 minifiedDrawOffset = Vector3.zero;\n\n\tpublic float deselectedSelectionBracketFactor = 1f;\n\n\tpublic bool selectable;\n\n\tpublic bool containedPawnsSelectable;\n\n\tpublic bool containedItemsSelectable;\n\n\tpublic bool neverMultiSelect;\n\n\tpublic bool isAutoAttackableMapObject;\n\n\tpublic bool hasTooltip;\n\n\tpublic List inspectorTabs;\n\n\t[Unsaved(false)]\n\tpublic List inspectorTabsResolved;\n\n\tpublic bool seeThroughFog;\n\n\tpublic bool drawGUIOverlay;\n\n\tpublic bool drawGUIOverlayQuality = true;\n\n\tpublic ResourceCountPriority resourceReadoutPriority;\n\n\tpublic bool resourceReadoutAlwaysShow;\n\n\tpublic bool drawPlaceWorkersWhileSelected;\n\n\tpublic bool drawPlaceWorkersWhileInstallBlueprintSelected;\n\n\tpublic ConceptDef storedConceptLearnOpportunity;\n\n\tpublic float uiIconScale = 1f;\n\n\tpublic bool hasCustomRectForSelector;\n\n\tpublic bool hideStats;\n\n\tpublic bool hideInspect;\n\n\tpublic bool onlyShowInspectString;\n\n\tpublic bool hideMainDesc;\n\n\tpublic bool alwaysHaulable;\n\n\tpublic bool designateHaulable;\n\n\tpublic List thingCategories;\n\n\tpublic bool mineable;\n\n\tpublic bool socialPropernessMatters;\n\n\tpublic bool stealable = true;\n\n\tpublic SoundDef soundSpawned;\n\n\tpublic SoundDef soundDrop;\n\n\tpublic SoundDef soundPickup;\n\n\tpublic SoundDef soundInteract;\n\n\tpublic SoundDef soundImpactDefault;\n\n\tpublic SoundDef soundPlayInstrument;\n\n\tpublic SoundDef soundOpen;\n\n\tpublic bool saveCompressible;\n\n\tpublic bool isSaveable = true;\n\n\tpublic bool holdsRoof;\n\n\tpublic float fillPercent;\n\n\tpublic bool coversFloor;\n\n\tpublic bool neverOverlapFloors;\n\n\tpublic SurfaceType surfaceType;\n\n\tpublic bool wipesPlants;\n\n\tpublic bool blockPlants;\n\n\tpublic bool blockLight;\n\n\tpublic bool blockWind;\n\n\tpublic bool blockWeather;\n\n\tpublic Tradeability tradeability = Tradeability.All;\n\n\t[NoTranslate]\n\tpublic List tradeTags;\n\n\tpublic bool tradeNeverStack;\n\n\tpublic bool tradeNeverGenerateStacked;\n\n\tpublic bool healthAffectsPrice = true;\n\n\tpublic ColorGenerator colorGeneratorInTraderStock;\n\n\tprivate List verbs;\n\n\tpublic List tools;\n\n\tpublic float equippedAngleOffset;\n\n\tpublic float equippedDistanceOffset;\n\n\tpublic EquipmentType equipmentType;\n\n\tpublic TechLevel techLevel;\n\n\tpublic List weaponClasses;\n\n\t[NoTranslate]\n\tpublic List weaponTags;\n\n\t[NoTranslate]\n\tpublic List techHediffsTags;\n\n\tpublic bool violentTechHediff;\n\n\tpublic bool destroyOnDrop;\n\n\tpublic List equippedStatOffsets;\n\n\tpublic SoundDef meleeHitSound;\n\n\tpublic float recoilPower = 1f;\n\n\tpublic float recoilRelaxation = 10f;\n\n\tpublic bool rotateInShelves = true;\n\n\tpublic bool mergeVerbGizmos = true;\n\n\tpublic BuildableDef entityDefToBuild;\n\n\tpublic ThingDef projectileWhenLoaded;\n\n\tpublic RulePackDef ideoBuildingNamerBase;\n\n\tpublic EntityCodexEntryDef entityCodexEntry;\n\n\tpublic IngestibleProperties ingestible;\n\n\tpublic FilthProperties filth;\n\n\tpublic GasProperties gas;\n\n\tpublic BuildingProperties building;\n\n\tpublic RaceProperties race;\n\n\tpublic ApparelProperties apparel;\n\n\tpublic MoteProperties mote;\n\n\tpublic PlantProperties plant;\n\n\tpublic ProjectileProperties projectile;\n\n\tpublic StuffProperties stuffProps;\n\n\tpublic SkyfallerProperties skyfaller;\n\n\tpublic PawnFlyerProperties pawnFlyer;\n\n\tpublic RitualFocusProperties ritualFocus;\n\n\tpublic IngredientProperties ingredient;\n\n\tpublic MapPortalProperties portal;\n\n\tpublic bool canBeUsedUnderRoof = true;\n\n\t[Unsaved(false)]\n\tprivate string descriptionDetailedCached;\n\n\t[Unsaved(false)]\n\tpublic Graphic interactionCellGraphic;\n\n\t[Unsaved(false)]\n\tprivate bool? isNaturalOrganCached;\n\n\t[Unsaved(false)]\n\tprivate bool? hasSunShadowsCached;\n\n\t[Unsaved(false)]\n\tprivate List cachedRelevantStyleCategories;\n\n\tpublic const int SmallUnitPerVolume = 10;\n\n\tpublic const float SmallVolumePerUnit = 0.1f;\n\n\tpublic const float ArchonexusMaxItemStackMass = 5f;\n\n\tpublic const int ArchonexusMaxItemStackCount = 25;\n\n\tpublic const float ArchonexusMaxItemStackValue = 2000f;\n\n\tpublic const int ArchonexusAutoCalculateValue = -1;\n\n\tprivate List allRecipesCached;\n\n\tprivate static List EmptyVerbPropertiesList = new List();\n\n\tprivate Dictionary concreteExamplesInt;\n\n\tpublic bool EverHaulable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!alwaysHaulable)\n\t\t\t{\n\t\t\t\treturn designateHaulable;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool EverPollutable => !building.isNaturalRock;\n\n\tpublic float VolumePerUnit\n\t{\n\t\tget\n\t\t{\n\t\t\tif (smallVolume)\n\t\t\t{\n\t\t\t\treturn 0.1f;\n\t\t\t}\n\t\t\treturn 1f;\n\t\t}\n\t}\n\n\tpublic override IntVec2 Size => size;\n\n\tpublic bool DiscardOnDestroyed => race == null;\n\n\tpublic int BaseMaxHitPoints => Mathf.RoundToInt(this.GetStatValueAbstract(StatDefOf.MaxHitPoints));\n\n\tpublic float BaseFlammability => this.GetStatValueAbstract(StatDefOf.Flammability);\n\n\tpublic float BaseMarketValue\n\t{\n\t\tget\n\t\t{\n\t\t\treturn this.GetStatValueAbstract(StatDefOf.MarketValue);\n\t\t}\n\t\tset\n\t\t{\n\t\t\tthis.SetStatBaseValue(StatDefOf.MarketValue, value);\n\t\t}\n\t}\n\n\tpublic float BaseMass => this.GetStatValueAbstract(StatDefOf.Mass);\n\n\tpublic int ArchonexusMaxAllowedCount\n\t{\n\t\tget\n\t\t{\n\t\t\tif (allowedArchonexusCount == -1)\n\t\t\t{\n\t\t\t\treturn Mathf.Min(stackLimit, 25, (BaseMass > 0f) ? ((int)(5f / BaseMass)) : 0, (BaseMarketValue > 0f) ? ((int)(2000f / BaseMarketValue)) : 0);\n\t\t\t}\n\t\t\treturn allowedArchonexusCount;\n\t\t}\n\t}\n\n\tpublic bool PlayerAcquirable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (destroyOnDrop)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this == ThingDefOf.ReinforcedBarrel && Find.Storyteller != null && Find.Storyteller.difficulty.classicMortars)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (requiresFactionToAcquire != null && Find.World != null && Find.World.factionManager != null)\n\t\t\t{\n\t\t\t\treturn Find.FactionManager.FirstFactionOfDef(requiresFactionToAcquire) != null;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool EverTransmitsPower\n\t{\n\t\tget\n\t\t{\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tif (comps[i] is CompProperties_Power { transmitsPower: not false })\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool Minifiable => minifiedDef != null;\n\n\tpublic bool HasThingIDNumber => category != ThingCategory.Mote;\n\n\tpublic List AllRecipes\n\t{\n\t\tget\n\t\t{\n\t\t\tif (allRecipesCached == null)\n\t\t\t{\n\t\t\t\tallRecipesCached = new List();\n\t\t\t\tif (recipes != null)\n\t\t\t\t{\n\t\t\t\t\tfor (int i = 0; i < recipes.Count; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tallRecipesCached.Add(recipes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tList allDefsListForReading = DefDatabase.AllDefsListForReading;\n\t\t\t\tfor (int j = 0; j < allDefsListForReading.Count; j++)\n\t\t\t\t{\n\t\t\t\t\tif (allDefsListForReading[j].recipeUsers != null && allDefsListForReading[j].recipeUsers.Contains(this))\n\t\t\t\t\t{\n\t\t\t\t\t\tallRecipesCached.Add(allDefsListForReading[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn allRecipesCached;\n\t\t}\n\t}\n\n\tpublic bool ConnectToPower\n\t{\n\t\tget\n\t\t{\n\t\t\tif (EverTransmitsPower)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tif (comps[i].compClass == typeof(CompPowerBattery))\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (comps[i].compClass == typeof(CompPowerTrader))\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool CoexistsWithFloors\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!neverOverlapFloors)\n\t\t\t{\n\t\t\t\treturn !coversFloor;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic FillCategory Fillage\n\t{\n\t\tget\n\t\t{\n\t\t\tif (fillPercent < 0.01f)\n\t\t\t{\n\t\t\t\treturn FillCategory.None;\n\t\t\t}\n\t\t\tif (fillPercent > 0.99f)\n\t\t\t{\n\t\t\t\treturn FillCategory.Full;\n\t\t\t}\n\t\t\treturn FillCategory.Partial;\n\t\t}\n\t}\n\n\tpublic bool MakeFog => Fillage == FillCategory.Full;\n\n\tpublic bool CanOverlapZones\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null && building.SupportsPlants)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (passability == Traversability.Impassable && category != ThingCategory.Plant && !HasComp(typeof(CompTransporter)))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ((int)surfaceType >= 1)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (typeof(ISlotGroupParent).IsAssignableFrom(thingClass))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!canOverlapZones)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ((IsBlueprint || IsFrame) && entityDefToBuild is ThingDef thingDef)\n\t\t\t{\n\t\t\t\treturn thingDef.CanOverlapZones;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool CountAsResource => resourceReadoutPriority != ResourceCountPriority.Uncounted;\n\n\tpublic List Verbs\n\t{\n\t\tget\n\t\t{\n\t\t\tif (verbs != null)\n\t\t\t{\n\t\t\t\treturn verbs;\n\t\t\t}\n\t\t\treturn EmptyVerbPropertiesList;\n\t\t}\n\t}\n\n\tpublic bool CanHaveFaction\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsBlueprint || IsFrame)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn category switch\n\t\t\t{\n\t\t\t\tThingCategory.Pawn => true, \n\t\t\t\tThingCategory.Building => true, \n\t\t\t\t_ => false, \n\t\t\t};\n\t\t}\n\t}\n\n\tpublic bool Claimable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null && building.claimable)\n\t\t\t{\n\t\t\t\treturn !building.isNaturalRock;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic ThingCategoryDef FirstThingCategory\n\t{\n\t\tget\n\t\t{\n\t\t\tif (thingCategories.NullOrEmpty())\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn thingCategories[0];\n\t\t}\n\t}\n\n\tpublic float MedicineTendXpGainFactor => Mathf.Clamp(this.GetStatValueAbstract(StatDefOf.MedicalPotency) * 0.7f, 0.5f, 1f);\n\n\tpublic bool CanEverDeteriorate\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!useHitPoints)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (category != ThingCategory.Item)\n\t\t\t{\n\t\t\t\tif (plant != null)\n\t\t\t\t{\n\t\t\t\t\treturn plant.canDeteriorate;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool CanInteractThroughCorners\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category != ThingCategory.Building)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!holdsRoof)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (building != null && building.isNaturalRock && !IsSmoothed)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool AffectsRegions\n\t{\n\t\tget\n\t\t{\n\t\t\tif (passability != Traversability.Impassable && !IsDoor)\n\t\t\t{\n\t\t\t\treturn IsFence;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool AffectsReachability\n\t{\n\t\tget\n\t\t{\n\t\t\tif (AffectsRegions)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (passability == Traversability.Impassable || IsDoor)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (TouchPathEndModeUtility.MakesOccupiedCellsAlwaysReachableDiagonally(this))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic string DescriptionDetailed\n\t{\n\t\tget\n\t\t{\n\t\t\tif (descriptionDetailedCached == null)\n\t\t\t{\n\t\t\t\tStringBuilder stringBuilder = new StringBuilder();\n\t\t\t\tstringBuilder.Append(description);\n\t\t\t\tif (IsApparel)\n\t\t\t\t{\n\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\tstringBuilder.AppendLine(string.Format(\"{0}: {1}\", \"Layer\".Translate(), apparel.GetLayersString()));\n\t\t\t\t\tstringBuilder.Append(string.Format(\"{0}: {1}\", \"Covers\".Translate(), apparel.GetCoveredOuterPartsString(BodyDefOf.Human)));\n\t\t\t\t\tif (equippedStatOffsets != null && equippedStatOffsets.Count > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\tfor (int i = 0; i < equippedStatOffsets.Count; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tStatModifier statModifier = equippedStatOffsets[i];\n\t\t\t\t\t\t\tstringBuilder.Append($\"{statModifier.stat.LabelCap}: {statModifier.ValueToStringAsOffset}\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescriptionDetailedCached = stringBuilder.ToString();\n\t\t\t}\n\t\t\treturn descriptionDetailedCached;\n\t\t}\n\t}\n\n\tpublic bool CanBenefitFromCover\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Pawn)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (building != null && building.IsTurret)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool PotentiallySmeltable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!smeltable)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (base.MadeFromStuff)\n\t\t\t{\n\t\t\t\tforeach (ThingDef item in GenStuff.AllowedStuffsFor(this))\n\t\t\t\t{\n\t\t\t\t\tif (item.smeltable)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool HasSingleOrMultipleInteractionCells\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!hasInteractionCell)\n\t\t\t{\n\t\t\t\treturn !multipleInteractionCellOffsets.NullOrEmpty();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool IsApparel => apparel != null;\n\n\tpublic bool IsBed => typeof(Building_Bed).IsAssignableFrom(thingClass);\n\n\tpublic bool IsWall\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null)\n\t\t\t{\n\t\t\t\treturn building.isWall;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsCorpse => typeof(Corpse).IsAssignableFrom(thingClass);\n\n\tpublic bool IsFrame => isFrameInt;\n\n\tpublic bool IsBlueprint\n\t{\n\t\tget\n\t\t{\n\t\t\tif (entityDefToBuild != null)\n\t\t\t{\n\t\t\t\treturn category == ThingCategory.Ethereal;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsStuff => stuffProps != null;\n\n\tpublic bool IsMedicine => statBases.StatListContains(StatDefOf.MedicalPotency);\n\n\tpublic bool IsDoor => typeof(Building_Door).IsAssignableFrom(thingClass);\n\n\tpublic bool IsFence\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null)\n\t\t\t{\n\t\t\t\treturn building.isFence;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsFilth => filth != null;\n\n\tpublic bool IsIngestible => ingestible != null;\n\n\tpublic bool IsNutritionGivingIngestible\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsIngestible)\n\t\t\t{\n\t\t\t\treturn ingestible.CachedNutrition > 0f;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsNutritionGivingIngestibleForHumanlikeBabies\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsNutritionGivingIngestible && ingestible.HumanEdible)\n\t\t\t{\n\t\t\t\treturn ingestible.babiesCanIngest;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWeapon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && (!verbs.NullOrEmpty() || !tools.NullOrEmpty()))\n\t\t\t{\n\t\t\t\treturn !IsApparel;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsCommsConsole => typeof(Building_CommsConsole).IsAssignableFrom(thingClass);\n\n\tpublic bool IsOrbitalTradeBeacon => typeof(Building_OrbitalTradeBeacon).IsAssignableFrom(thingClass);\n\n\tpublic bool IsFoodDispenser => typeof(Building_NutrientPasteDispenser).IsAssignableFrom(thingClass);\n\n\tpublic bool IsDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.drugCategory != DrugCategory.None;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsPleasureDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsDrug)\n\t\t\t{\n\t\t\t\treturn ingestible.joy > 0f;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsNonMedicalDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsDrug)\n\t\t\t{\n\t\t\t\treturn ingestible.drugCategory != DrugCategory.Medical;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsTable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (surfaceType == SurfaceType.Eat)\n\t\t\t{\n\t\t\t\treturn HasComp(typeof(CompGatherSpot));\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWorkTable => typeof(Building_WorkTable).IsAssignableFrom(thingClass);\n\n\tpublic bool IsShell => projectileWhenLoaded != null;\n\n\tpublic bool IsArt => IsWithinCategory(ThingCategoryDefOf.BuildingsArt);\n\n\tpublic bool IsSmoothable => building?.smoothedThing != null;\n\n\tpublic bool IsSmoothed => building?.unsmoothedThing != null;\n\n\tpublic bool IsMetal\n\t{\n\t\tget\n\t\t{\n\t\t\tif (stuffProps != null)\n\t\t\t{\n\t\t\t\treturn stuffProps.categories.Contains(StuffCategoryDefOf.Metallic);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsCryptosleepCasket => typeof(Building_CryptosleepCasket).IsAssignableFrom(thingClass);\n\n\tpublic bool IsGibbetCage => typeof(Building_GibbetCage).IsAssignableFrom(thingClass);\n\n\tpublic bool IsMechGestator => typeof(Building_MechGestator).IsAssignableFrom(thingClass);\n\n\tpublic bool IsMechRecharger => typeof(Building_MechCharger).IsAssignableFrom(thingClass);\n\n\tpublic bool IsAddictiveDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tCompProperties_Drug compProperties = GetCompProperties();\n\t\t\tif (compProperties != null)\n\t\t\t{\n\t\t\t\treturn compProperties.addictiveness > 0f;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsMeat\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.MeatRaw);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsEgg\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\tif (!thingCategories.Contains(ThingCategoryDefOf.EggsFertilized))\n\t\t\t\t{\n\t\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.EggsUnfertilized);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsLeather\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.Leathers);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWool\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.Wools);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsRangedWeapon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!IsWeapon)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!verbs.NullOrEmpty())\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < verbs.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tif (!verbs[i].IsMeleeAttack)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsMeleeWeapon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsWeapon)\n\t\t\t{\n\t\t\t\treturn !IsRangedWeapon;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWeaponUsingProjectiles\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!IsWeapon)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!verbs.NullOrEmpty())\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < verbs.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tif (verbs[i].LaunchesProjectile)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsShieldThatBlocksRanged\n\t{\n\t\tget\n\t\t{\n\t\t\tif (HasComp(typeof(CompShield)))\n\t\t\t{\n\t\t\t\treturn GetCompProperties().blocksRangedWeapons;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsBuildingArtificial\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Building || IsFrame)\n\t\t\t{\n\t\t\t\tif (building != null)\n\t\t\t\t{\n\t\t\t\t\tif (!building.isNaturalRock)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn !building.isResourceRock;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsNonResourceNaturalRock\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Building && building.isNaturalRock && !building.isResourceRock && !building.mineablePreventNaturalRockOnSurface)\n\t\t\t{\n\t\t\t\treturn !IsSmoothed;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool HasSunShadows\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!hasSunShadowsCached.HasValue)\n\t\t\t{\n\t\t\t\thasSunShadowsCached = typeof(Pawn).IsAssignableFrom(thingClass);\n\t\t\t}\n\t\t\treturn hasSunShadowsCached.Value;\n\t\t}\n\t}\n\n\tpublic bool IsNaturalOrgan\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!isNaturalOrganCached.HasValue)\n\t\t\t{\n\t\t\t\tif (category != ThingCategory.Item)\n\t\t\t\t{\n\t\t\t\t\tisNaturalOrganCached = false;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tList allDefsListForReading = DefDatabase.AllDefsListForReading;\n\t\t\t\t\tisNaturalOrganCached = false;\n\t\t\t\t\tfor (int i = 0; i < allDefsListForReading.Count; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (allDefsListForReading[i].spawnThingOnRemoved == this)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisNaturalOrganCached = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn isNaturalOrganCached.Value;\n\t\t}\n\t}\n\n\tpublic bool IsFungus\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.foodType.HasFlag(FoodTypeFlags.Fungus);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsAnimalProduct\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.foodType.HasFlag(FoodTypeFlags.AnimalProduct);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsProcessedFood\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.foodType.HasFlag(FoodTypeFlags.Processed);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool CanAffectLinker\n\t{\n\t\tget\n\t\t{\n\t\t\tif (graphicData == null || !graphicData.Linked)\n\t\t\t{\n\t\t\t\treturn IsDoor;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool IsNonDeconstructibleAttackableBuilding\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsBuildingArtificial && !building.IsDeconstructible && destroyable && !mineable && building.isTargetable)\n\t\t\t{\n\t\t\t\treturn building.draftAttackNonDeconstructable;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsPlant => typeof(Plant).IsAssignableFrom(thingClass);\n\n\tpublic bool IsDeadPlant => typeof(DeadPlant).IsAssignableFrom(thingClass);\n\n\tpublic bool IsStudiable => HasAssignableCompFrom(typeof(CompStudiable));\n\n\tpublic List RelevantStyleCategories\n\t{\n\t\tget\n\t\t{\n\t\t\tif (cachedRelevantStyleCategories == null)\n\t\t\t{\n\t\t\t\tcachedRelevantStyleCategories = new List();\n\t\t\t\tforeach (StyleCategoryDef allDef in DefDatabase.AllDefs)\n\t\t\t\t{\n\t\t\t\t\tif (allDef.thingDefStyles.NullOrEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tforeach (ThingDefStyle thingDefStyle in allDef.thingDefStyles)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (thingDefStyle.ThingDef == this)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcachedRelevantStyleCategories.Add(allDef);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cachedRelevantStyleCategories;\n\t\t}\n\t}\n\n\tpublic string LabelAsStuff\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!stuffProps.stuffAdjective.NullOrEmpty())\n\t\t\t{\n\t\t\t\treturn stuffProps.stuffAdjective;\n\t\t\t}\n\t\t\treturn label;\n\t\t}\n\t}\n\n\tpublic bool BlocksPlanting(bool canWipePlants = false)\n\t{\n\t\tif (building != null && building.SupportsPlants)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (building != null && building.isAttachment)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (blockPlants)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (!canWipePlants && category == ThingCategory.Plant)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif ((int)Fillage > 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (this.IsEdifice())\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic virtual bool CanSpawnAt(IntVec3 pos, Rot4 rot, Map map)\n\t{\n\t\treturn true;\n\t}\n\n\tpublic bool EverStorable(bool willMinifyIfPossible)\n\t{\n\t\tif (typeof(MinifiedThing).IsAssignableFrom(thingClass))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (!thingCategories.NullOrEmpty())\n\t\t{\n\t\t\tif (category == ThingCategory.Item)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (willMinifyIfPossible && Minifiable)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic Thing GetConcreteExample(ThingDef stuff = null)\n\t{\n\t\tif (concreteExamplesInt == null)\n\t\t{\n\t\t\tconcreteExamplesInt = new Dictionary();\n\t\t}\n\t\tif (stuff == null)\n\t\t{\n\t\t\tstuff = ThingDefOf.Steel;\n\t\t}\n\t\tif (!concreteExamplesInt.ContainsKey(stuff))\n\t\t{\n\t\t\tif (race == null)\n\t\t\t{\n\t\t\t\tconcreteExamplesInt[stuff] = ThingMaker.MakeThing(this, base.MadeFromStuff ? stuff : null);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconcreteExamplesInt[stuff] = PawnGenerator.GeneratePawn(DefDatabase.AllDefsListForReading.FirstOrDefault((PawnKindDef pkd) => pkd.race == this));\n\t\t\t}\n\t\t}\n\t\treturn concreteExamplesInt[stuff];\n\t}\n\n\tpublic CompProperties CompDefFor() where T : ThingComp\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i].compClass == typeof(T))\n\t\t\t{\n\t\t\t\treturn comps[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic CompProperties CompDefForAssignableFrom() where T : ThingComp\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (typeof(T).IsAssignableFrom(comps[i].compClass))\n\t\t\t{\n\t\t\t\treturn comps[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic bool HasComp(Type compType)\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i].compClass == compType)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic bool HasComp() where T : ThingComp\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i].compClass == typeof(T) || typeof(T).IsAssignableFrom(comps[i].compClass))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic bool HasAssignableCompFrom(Type compType)\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (compType.IsAssignableFrom(comps[i].compClass))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic T GetCompProperties() where T : CompProperties\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i] is T result)\n\t\t\t{\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic override void PostLoad()\n\t{\n\t\tif (graphicData != null)\n\t\t{\n\t\t\tLongEventHandler.ExecuteWhenFinished(delegate\n\t\t\t{\n\t\t\t\tGraphicData graphicData = this.graphicData;\n\t\t\t\tif (graphicData.shaderType == null)\n\t\t\t\t{\n\t\t\t\t\tgraphicData.shaderType = ShaderTypeDefOf.Cutout;\n\t\t\t\t}\n\t\t\t\tContentFinderRequester.requester = this;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tgraphic = this.graphicData.Graphic;\n\t\t\t\t\tif (drawerType != DrawerType.RealtimeOnly)\n\t\t\t\t\t{\n\t\t\t\t\t\tTextureAtlasGroup textureAtlasGroup = category.ToAtlasGroup();\n\t\t\t\t\t\tgraphic.TryInsertIntoAtlas(textureAtlasGroup);\n\t\t\t\t\t\tif (textureAtlasGroup == TextureAtlasGroup.Building && Minifiable)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgraphic.TryInsertIntoAtlas(TextureAtlasGroup.Item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfinally\n\t\t\t\t{\n\t\t\t\t\tContentFinderRequester.requester = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (tools != null)\n\t\t{\n\t\t\tfor (int i = 0; i < tools.Count; i++)\n\t\t\t{\n\t\t\t\ttools[i].id = i.ToString();\n\t\t\t}\n\t\t}\n\t\tif (verbs != null && verbs.Count == 1 && verbs[0].label.NullOrEmpty())\n\t\t{\n\t\t\tverbs[0].label = label;\n\t\t}\n\t\tbase.PostLoad();\n\t\tif (category == ThingCategory.Building && building == null)\n\t\t{\n\t\t\tbuilding = new BuildingProperties();\n\t\t}\n\t\tbuilding?.PostLoadSpecial(this);\n\t\tapparel?.PostLoadSpecial(this);\n\t\tplant?.PostLoadSpecial(this);\n\t\tif (comps == null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tforeach (CompProperties comp in comps)\n\t\t{\n\t\t\tcomp.PostLoadSpecial(this);\n\t\t}\n\t}\n\n\tprotected override void ResolveIcon()\n\t{\n\t\tbase.ResolveIcon();\n\t\tif (category == ThingCategory.Pawn)\n\t\t{\n\t\t\tif (!uiIconPath.NullOrEmpty())\n\t\t\t{\n\t\t\t\tuiIcon = ContentFinder.Get(uiIconPath);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (race.Humanlike)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tPawnKindDef anyPawnKind = race.AnyPawnKind;\n\t\t\t\tif (anyPawnKind != null)\n\t\t\t\t{\n\t\t\t\t\tMaterial material = ((ModsConfig.BiotechActive && anyPawnKind.RaceProps.IsMechanoid) ? anyPawnKind.lifeStages.First() : anyPawnKind.lifeStages.Last()).bodyGraphicData.Graphic.MatAt(Rot4.East);\n\t\t\t\t\tuiIcon = (Texture2D)material.mainTexture;\n\t\t\t\t\tuiIconColor = material.color;\n\t\t\t\t\tif (ShaderDatabase.TryGetUIShader(material.shader, out var uiShader) && MaterialPool.TryGetRequestForMat(material, out var request))\n\t\t\t\t\t{\n\t\t\t\t\t\trequest.shader = uiShader;\n\t\t\t\t\t\tuiIconMaterial = MaterialPool.MatFrom(request);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tThingDef thingDef = GenStuff.DefaultStuffFor(this);\n\t\t\tif (colorGenerator != null && (thingDef == null || thingDef.stuffProps.allowColorGenerators))\n\t\t\t{\n\t\t\t\tuiIconColor = colorGenerator.ExemplaryColor;\n\t\t\t}\n\t\t\telse if (thingDef != null)\n\t\t\t{\n\t\t\t\tuiIconColor = GetColorForStuff(thingDef);\n\t\t\t}\n\t\t\telse if (graphicData != null)\n\t\t\t{\n\t\t\t\tuiIconColor = graphicData.color;\n\t\t\t}\n\t\t\tif (rotatable && graphic != null && graphic != BaseContent.BadGraphic && graphic.ShouldDrawRotated && defaultPlacingRot == Rot4.South)\n\t\t\t{\n\t\t\t\tuiIconAngle = 180f + graphic.DrawRotatedExtraAngleOffset;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override void ResolveReferences()\n\t{\n\t\tbase.ResolveReferences();\n\t\tif (ingestible != null)\n\t\t{\n\t\t\tingestible.parent = this;\n\t\t}\n\t\tif (stuffProps != null)\n\t\t{\n\t\t\tstuffProps.parent = this;\n\t\t}\n\t\tbuilding?.ResolveReferencesSpecial();\n\t\tgraphicData?.ResolveReferencesSpecial();\n\t\trace?.ResolveReferencesSpecial();\n\t\tstuffProps?.ResolveReferencesSpecial();\n\t\tapparel?.ResolveReferencesSpecial();\n\t\tif (soundImpactDefault == null)\n\t\t{\n\t\t\tsoundImpactDefault = SoundDefOf.BulletImpact_Ground;\n\t\t}\n\t\tif (soundDrop == null)\n\t\t{\n\t\t\tsoundDrop = SoundDefOf.Standard_Drop;\n\t\t}\n\t\tif (soundPickup == null)\n\t\t{\n\t\t\tsoundPickup = SoundDefOf.Standard_Pickup;\n\t\t}\n\t\tif (soundInteract == null)\n\t\t{\n\t\t\tsoundInteract = SoundDefOf.Standard_Pickup;\n\t\t}\n\t\tif (inspectorTabs != null && inspectorTabs.Any())\n\t\t{\n\t\t\tinspectorTabsResolved = new List();\n\t\t\tfor (int i = 0; i < inspectorTabs.Count; i++)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tinspectorTabsResolved.Add(InspectTabManager.GetSharedInstance(inspectorTabs[i]));\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tLog.Error(\"Could not instantiate inspector tab of type \" + inspectorTabs[i]?.ToString() + \": \" + ex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (comps != null)\n\t\t{\n\t\t\tfor (int j = 0; j < comps.Count; j++)\n\t\t\t{\n\t\t\t\tcomps[j].ResolveReferences(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override IEnumerable ConfigErrors()\n\t{\n\t\tforeach (string item in base.ConfigErrors())\n\t\t{\n\t\t\tyield return item;\n\t\t}\n\t\tif (category != ThingCategory.Ethereal && label.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"no label\";\n\t\t}\n\t\tif (category == ThingCategory.Building && !IsFrame && building.IsDeconstructible && thingClass != null && typeof(Building).IsSubclassOf(thingClass))\n\t\t{\n\t\t\tyield return \"has building category and is marked as deconstructible, but thing class is not a subclass of building (\" + thingClass.Name + \")\";\n\t\t}\n\t\tif (graphicData != null)\n\t\t{\n\t\t\tforeach (string item2 in graphicData.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item2;\n\t\t\t}\n\t\t}\n\t\tif (projectile != null)\n\t\t{\n\t\t\tforeach (string item3 in projectile.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item3;\n\t\t\t}\n\t\t}\n\t\tif (statBases != null)\n\t\t{\n\t\t\tforeach (StatModifier statBase in statBases)\n\t\t\t{\n\t\t\t\tif (statBases.Count((StatModifier st) => st.stat == statBase.stat) > 1)\n\t\t\t\t{\n\t\t\t\t\tyield return \"defines the stat base \" + statBase.stat?.ToString() + \" more than once.\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!BeautyUtility.BeautyRelevant(category) && this.StatBaseDefined(StatDefOf.Beauty))\n\t\t{\n\t\t\tyield return \"Beauty stat base is defined, but Things of category \" + category.ToString() + \" cannot have beauty.\";\n\t\t}\n\t\tif (!BeautyUtility.BeautyRelevant(category) && this.StatBaseDefined(StatDefOf.BeautyOutdoors))\n\t\t{\n\t\t\tyield return \"BeautyOutdoors stat base is defined, but Things of category \" + category.ToString() + \" cannot have beauty.\";\n\t\t}\n\t\tif (char.IsNumber(defName[defName.Length - 1]))\n\t\t{\n\t\t\tyield return \"ends with a numerical digit, which is not allowed on ThingDefs.\";\n\t\t}\n\t\tif (thingClass == null)\n\t\t{\n\t\t\tyield return \"has null thingClass.\";\n\t\t}\n\t\tif (comps.Count > 0 && !typeof(ThingWithComps).IsAssignableFrom(thingClass))\n\t\t{\n\t\t\tyield return \"has components but it's thingClass is not a ThingWithComps\";\n\t\t}\n\t\tif (ConnectToPower && drawerType == DrawerType.RealtimeOnly && IsFrame)\n\t\t{\n\t\t\tyield return \"connects to power but does not add to map mesh. Will not create wire meshes.\";\n\t\t}\n\t\tif (costList != null)\n\t\t{\n\t\t\tforeach (ThingDefCountClass cost in costList)\n\t\t\t{\n\t\t\t\tif (cost.count == 0)\n\t\t\t\t{\n\t\t\t\t\tyield return \"cost in \" + cost.thingDef?.ToString() + \" is zero.\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tThingCategoryDef thingCategoryDef = thingCategories?.FirstOrDefault((ThingCategoryDef cat) => thingCategories.Count((ThingCategoryDef c) => c == cat) > 1);\n\t\tif (thingCategoryDef != null)\n\t\t{\n\t\t\tyield return \"has duplicate thingCategory \" + thingCategoryDef?.ToString() + \".\";\n\t\t}\n\t\tif (Fillage == FillCategory.Full && category != ThingCategory.Building)\n\t\t{\n\t\t\tyield return \"gives full cover but is not a building.\";\n\t\t}\n\t\tif (equipmentType != 0)\n\t\t{\n\t\t\tif (techLevel == TechLevel.Undefined && !destroyOnDrop)\n\t\t\t{\n\t\t\t\tyield return \"is equipment but has no tech level.\";\n\t\t\t}\n\t\t\tif (!comps.Any((CompProperties c) => typeof(CompEquippable).IsAssignableFrom(c.compClass)))\n\t\t\t{\n\t\t\t\tyield return \"is equipment but has no CompEquippable\";\n\t\t\t}\n\t\t}\n\t\tif (thingClass == typeof(Bullet) && projectile.damageDef == null)\n\t\t{\n\t\t\tyield return \" is a bullet but has no damageDef.\";\n\t\t}\n\t\tif (destroyOnDrop && tradeability != 0)\n\t\t{\n\t\t\tyield return \"destroyOnDrop but tradeability is \" + tradeability;\n\t\t}\n\t\tif (stackLimit > 1 && !drawGUIOverlay)\n\t\t{\n\t\t\tyield return \"has stackLimit > 1 but also has drawGUIOverlay = false.\";\n\t\t}\n\t\tif (damageMultipliers != null)\n\t\t{\n\t\t\tforeach (DamageMultiplier mult in damageMultipliers)\n\t\t\t{\n\t\t\t\tif (damageMultipliers.Count((DamageMultiplier m) => m.damageDef == mult.damageDef) > 1)\n\t\t\t\t{\n\t\t\t\t\tyield return \"has multiple damage multipliers for damageDef \" + mult.damageDef;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Fillage == FillCategory.Full && !this.IsEdifice())\n\t\t{\n\t\t\tyield return \"fillPercent is 1.00 but is not edifice\";\n\t\t}\n\t\tif (base.MadeFromStuff && constructEffect != null)\n\t\t{\n\t\t\tyield return \"madeFromStuff but has a defined constructEffect (which will always be overridden by stuff's construct animation).\";\n\t\t}\n\t\tif (base.MadeFromStuff && stuffCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"madeFromStuff but has no stuffCategories.\";\n\t\t}\n\t\tif (costList.NullOrEmpty() && costStuffCount <= 0 && recipeMaker != null)\n\t\t{\n\t\t\tyield return \"has a recipeMaker but no costList or costStuffCount.\";\n\t\t}\n\t\tif (costStuffCount > 0 && stuffCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"has costStuffCount but no stuffCategories.\";\n\t\t}\n\t\tif (this.GetStatValueAbstract(StatDefOf.DeteriorationRate) > 1E-05f && !CanEverDeteriorate && !destroyOnDrop)\n\t\t{\n\t\t\tyield return \"has >0 DeteriorationRate but can't deteriorate.\";\n\t\t}\n\t\tif (smeltProducts != null && !smeltable)\n\t\t{\n\t\t\tyield return \"has smeltProducts but has smeltable=false\";\n\t\t}\n\t\tif (smeltable && smeltProducts.NullOrEmpty() && base.CostList.NullOrEmpty() && !IsStuff && !base.MadeFromStuff && !destroyOnDrop)\n\t\t{\n\t\t\tyield return \"is smeltable but does not give anything for smelting.\";\n\t\t}\n\t\tif (equipmentType != 0 && verbs.NullOrEmpty() && tools.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"is equipment but has no verbs or tools\";\n\t\t}\n\t\tif (Minifiable && thingCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"is minifiable but not in any thing category\";\n\t\t}\n\t\tif (category == ThingCategory.Building && !Minifiable && !thingCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"is not minifiable yet has thing categories (could be confusing in thing filters because it can't be moved/stored anyway)\";\n\t\t}\n\t\tif (!destroyOnDrop && !typeof(MinifiedThing).IsAssignableFrom(thingClass) && (EverHaulable || Minifiable) && (statBases.NullOrEmpty() || !statBases.Any((StatModifier s) => s.stat == StatDefOf.Mass)))\n\t\t{\n\t\t\tyield return \"is haulable, but does not have an authored mass value\";\n\t\t}\n\t\tif (ingestible == null && this.GetStatValueAbstract(StatDefOf.Nutrition) != 0f)\n\t\t{\n\t\t\tyield return \"has nutrition but ingestible properties are null\";\n\t\t}\n\t\tif (BaseFlammability != 0f && !useHitPoints && category != ThingCategory.Pawn && !destroyOnDrop)\n\t\t{\n\t\t\tyield return \"flammable but has no hitpoints (will burn indefinitely)\";\n\t\t}\n\t\tif (graphicData?.shadowData != null && staticSunShadowHeight > 0f)\n\t\t{\n\t\t\tyield return \"graphicData defines a shadowInfo but staticSunShadowHeight > 0\";\n\t\t}\n\t\tif (saveCompressible && Claimable)\n\t\t{\n\t\t\tyield return \"claimable item is compressible; faction will be unset after load\";\n\t\t}\n\t\tif (deepCommonality > 0f != deepLumpSizeRange.TrueMax > 0)\n\t\t{\n\t\t\tyield return \"if deepCommonality or deepLumpSizeRange is set, the other also must be set\";\n\t\t}\n\t\tif (deepCommonality > 0f && deepCountPerPortion <= 0)\n\t\t{\n\t\t\tyield return \"deepCommonality > 0 but deepCountPerPortion is not set\";\n\t\t}\n\t\tif (verbs != null)\n\t\t{\n\t\t\tfor (int i = 0; i < verbs.Count; i++)\n\t\t\t{\n\t\t\t\tforeach (string item4 in verbs[i].ConfigErrors(this))\n\t\t\t\t{\n\t\t\t\t\tyield return $\"verb {i}: {item4}\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (building != null)\n\t\t{\n\t\t\tforeach (string item5 in building.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item5;\n\t\t\t}\n\t\t\tif ((building.isAirtight || building.isStuffableAirtight) && Fillage != FillCategory.Full)\n\t\t\t{\n\t\t\t\tyield return \"is airtight but Fillage is not Full\";\n\t\t\t}\n\t\t}\n\t\tif (apparel != null)\n\t\t{\n\t\t\tforeach (string item6 in apparel.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item6;\n\t\t\t}\n\t\t}\n\t\tif (comps != null)\n\t\t{\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tforeach (string item7 in comps[i].ConfigErrors(this))\n\t\t\t\t{\n\t\t\t\t\tyield return item7;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (race != null)\n\t\t{\n\t\t\tforeach (string item8 in race.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item8;\n\t\t\t}\n\t\t\tif (race.body != null && race != null && tools != null)\n\t\t\t{\n\t\t\t\tint i;\n\t\t\t\tfor (i = 0; i < tools.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tif (tools[i].linkedBodyPartsGroup != null && !race.body.AllParts.Any((BodyPartRecord part) => part.groups.Contains(tools[i].linkedBodyPartsGroup)))\n\t\t\t\t\t{\n\t\t\t\t\t\tyield return \"has tool with linkedBodyPartsGroup \" + tools[i].linkedBodyPartsGroup?.ToString() + \" but body \" + race.body?.ToString() + \" has no parts with that group.\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (race.Animal && this.GetStatValueAbstract(StatDefOf.Wildness) < 0f)\n\t\t\t{\n\t\t\t\tyield return \"is animal but wildness is not defined\";\n\t\t\t}\n\t\t}\n\t\tif (ingestible != null)\n\t\t{\n\t\t\tforeach (string item9 in ingestible.ConfigErrors())\n\t\t\t{\n\t\t\t\tyield return item9;\n\t\t\t}\n\t\t}\n\t\tif (plant != null)\n\t\t{\n\t\t\tforeach (string item10 in plant.ConfigErrors())\n\t\t\t{\n\t\t\t\tyield return item10;\n\t\t\t}\n\t\t}\n\t\tif (tools != null)\n\t\t{\n\t\t\tTool tool = tools.SelectMany((Tool lhs) => tools.Where((Tool rhs) => lhs != rhs && lhs.id == rhs.id)).FirstOrDefault();\n\t\t\tif (tool != null)\n\t\t\t{\n\t\t\t\tyield return \"duplicate thingdef tool id \" + tool.id;\n\t\t\t}\n\t\t\tforeach (Tool tool2 in tools)\n\t\t\t{\n\t\t\t\tforeach (string item11 in tool2.ConfigErrors())\n\t\t\t\t{\n\t\t\t\t\tyield return item11;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!randomStyle.NullOrEmpty())\n\t\t{\n\t\t\tforeach (ThingStyleChance item12 in randomStyle)\n\t\t\t{\n\t\t\t\tif (item12.Chance <= 0f)\n\t\t\t\t{\n\t\t\t\t\tyield return \"style chance <= 0.\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!comps.Any((CompProperties c) => c.compClass == typeof(CompStyleable)))\n\t\t\t{\n\t\t\t\tyield return \"random style assigned, but missing CompStyleable!\";\n\t\t\t}\n\t\t}\n\t\tif (relicChance > 0f && category != ThingCategory.Item)\n\t\t{\n\t\t\tyield return \"relic chance > 0 but category != item\";\n\t\t}\n\t\tif (hasInteractionCell && !multipleInteractionCellOffsets.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"both single and multiple interaction cells are defined, it should be one or the other\";\n\t\t}\n\t\tif (Fillage != FillCategory.Full && passability == Traversability.Impassable && !IsDoor && base.BuildableByPlayer && !disableImpassableShotOverConfigError)\n\t\t{\n\t\t\tyield return \"impassable, player-buildable building that can be shot/seen over.\";\n\t\t}\n\t}\n\n\tpublic static ThingDef Named(string defName)\n\t{\n\t\treturn DefDatabase.GetNamed(defName);\n\t}\n\n\tpublic bool IsWithinCategory(ThingCategoryDef category)\n\t{\n\t\tif (thingCategories == null)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (int i = 0; i < thingCategories.Count; i++)\n\t\t{\n\t\t\tfor (ThingCategoryDef thingCategoryDef = thingCategories[i]; thingCategoryDef != null; thingCategoryDef = thingCategoryDef.parent)\n\t\t\t{\n\t\t\t\tif (thingCategoryDef == category)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic void Notify_UnlockedByResearch()\n\t{\n\t\tif (comps != null)\n\t\t{\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tcomps[i].Notify_PostUnlockedByResearch(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override IEnumerable SpecialDisplayStats(StatRequest req)\n\t{\n\t\tforeach (StatDrawEntry item in base.SpecialDisplayStats(req))\n\t\t{\n\t\t\tyield return item;\n\t\t}\n\t\tif (apparel != null)\n\t\t{\n\t\t\tstring coveredOuterPartsString = apparel.GetCoveredOuterPartsString(BodyDefOf.Human);\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Covers\".Translate(), coveredOuterPartsString, \"Stat_Thing_Apparel_Covers_Desc\".Translate(), 2750);\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Layer\".Translate(), apparel.GetLayersString(), \"Stat_Thing_Apparel_Layer_Desc\".Translate(), 2751);\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Stat_Thing_Apparel_CountsAsClothingNudity_Name\".Translate(), apparel.countsAsClothingForNudity ? \"Yes\".Translate() : \"No\".Translate(), \"Stat_Thing_Apparel_CountsAsClothingNudity_Desc\".Translate(), 2753);\n\t\t\tif (ModsConfig.BiotechActive)\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Stat_Thing_Apparel_ValidLifestage\".Translate(), apparel.developmentalStageFilter.ToCommaList().CapitalizeFirst(), \"Stat_Thing_Apparel_ValidLifestage_Desc\".Translate(), 2748);\n\t\t\t}\n\t\t\tif (apparel.gender != 0)\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Stat_Thing_Apparel_Gender\".Translate(), apparel.gender.GetLabel().CapitalizeFirst(), \"Stat_Thing_Apparel_Gender_Desc\".Translate(), 2749);\n\t\t\t}\n\t\t}\n\t\tif (IsMedicine && MedicineTendXpGainFactor != 1f)\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"MedicineXpGainFactor\".Translate(), MedicineTendXpGainFactor.ToStringPercent(), \"Stat_Thing_Drug_MedicineXpGainFactor_Desc\".Translate(), 1000);\n\t\t}\n\t\tif (fillPercent > 0f && (category == ThingCategory.Item || category == ThingCategory.Building || category == ThingCategory.Plant))\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"CoverEffectiveness\".Translate(), this.BaseBlockChance().ToStringPercent(), \"CoverEffectivenessExplanation\".Translate(), 2000);\n\t\t}\n\t\tif (constructionSkillPrerequisite > 0)\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"SkillRequiredToBuild\".Translate(SkillDefOf.Construction.LabelCap), constructionSkillPrerequisite.ToString(), \"SkillRequiredToBuildExplanation\".Translate(SkillDefOf.Construction.LabelCap), 1100);\n\t\t}\n\t\tif (artisticSkillPrerequisite > 0)\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"SkillRequiredToBuild\".Translate(SkillDefOf.Artistic.LabelCap), artisticSkillPrerequisite.ToString(), \"SkillRequiredToBuildExplanation\".Translate(SkillDefOf.Artistic.LabelCap), 1100);\n\t\t}\n\t\tIEnumerable recipes = DefDatabase.AllDefsListForReading.Where((RecipeDef r) => r.products.Count == 1 && r.products.Any((ThingDefCountClass p) => p.thingDef == this) && !r.IsSurgery);\n\t\tif (recipes.Any())\n\t\t{\n\t\t\tIEnumerable enumerable = (from u in recipes.Where((RecipeDef x) => x.recipeUsers != null).SelectMany((RecipeDef r) => r.recipeUsers)\n\t\t\t\tselect u.label).Concat(from x in DefDatabase.AllDefsListForReading\n\t\t\t\twhere x.recipes != null && x.recipes.Any((RecipeDef y) => y.products.Any((ThingDefCountClass z) => z.thingDef == this))\n\t\t\t\tselect x.label).Distinct();\n\t\t\tif (enumerable.Any())\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"CreatedAt\".Translate(), enumerable.ToCommaList().CapitalizeFirst(), \"Stat_Thing_CreatedAt_Desc\".Translate(), 1103);\n\t\t\t}\n\t\t\tRecipeDef recipeDef = recipes.FirstOrDefault();\n\t\t\tif (recipeDef != null && !recipeDef.ingredients.NullOrEmpty())\n\t\t\t{\n\t\t\t\tBuildableDef.tmpCostList.Clear();\n\t\t\t\tBuildableDef.tmpHyperlinks.Clear();\n\t\t\t\tfor (int j = 0; j < recipeDef.ingredients.Count; j++)\n\t\t\t\t{\n\t\t\t\t\tIngredientCount ingredientCount = recipeDef.ingredients[j];\n\t\t\t\t\tif (ingredientCount.filter.Summary.NullOrEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tIEnumerable allowedThingDefs = ingredientCount.filter.AllowedThingDefs;\n\t\t\t\t\tif (allowedThingDefs.Any())\n\t\t\t\t\t{\n\t\t\t\t\t\tforeach (ThingDef p in allowedThingDefs)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!BuildableDef.tmpHyperlinks.Any((Dialog_InfoCard.Hyperlink x) => x.def == p))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tBuildableDef.tmpHyperlinks.Add(new Dialog_InfoCard.Hyperlink(p));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tBuildableDef.tmpCostList.Add(recipeDef.IngredientValueGetter.BillRequirementsDescription(recipeDef, ingredientCount));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (BuildableDef.tmpCostList.Any())\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"Ingredients\".Translate(), BuildableDef.tmpCostList.ToCommaList(), \"Stat_Thing_Ingredients\".Translate(), 1102, null, BuildableDef.tmpHyperlinks);\n\t\t\t}\n\t\t}\n\t\tif (thingClass != null && typeof(Building_Bed).IsAssignableFrom(thingClass) && !statBases.StatListContains(StatDefOf.BedRestEffectiveness))\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Building, StatDefOf.BedRestEffectiveness, StatDefOf.BedRestEffectiveness.valueIfMissing, StatRequest.ForEmpty());\n\t\t}\n\t\tif (!verbs.NullOrEmpty())\n\t\t{\n\t\t\tVerbProperties verb = verbs.First((VerbProperties x) => x.isPrimary);\n\t\t\tStatCategoryDef verbStatCategory = ((category == ThingCategory.Pawn) ? StatCategoryDefOf.PawnCombat : null);\n\t\t\tfloat num = verb.warmupTime;\n\t\t\tStringBuilder stringBuilder = new StringBuilder(\"Stat_Thing_Weapon_RangedWarmupTime_Desc\".Translate());\n\t\t\tstringBuilder.AppendLine();\n\t\t\tstringBuilder.AppendLine();\n\t\t\tstringBuilder.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + num.ToString(\"0.##\") + \" \" + \"LetterSecond\".Translate());\n\t\t\tif (num > 0f)\n\t\t\t{\n\t\t\t\tif (req.HasThing)\n\t\t\t\t{\n\t\t\t\t\tfloat statValue = req.Thing.GetStatValue(StatDefOf.RangedWeapon_WarmupMultiplier);\n\t\t\t\t\tnum *= statValue;\n\t\t\t\t\tif (!Mathf.Approximately(statValue, 1f))\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\tstringBuilder.AppendLine(\"Stat_Thing_Weapon_WarmupTime_Multiplier\".Translate() + \": x\" + statValue.ToStringPercent());\n\t\t\t\t\t\tstringBuilder.Append(StatUtility.GetOffsetsAndFactorsFor(StatDefOf.RangedWeapon_WarmupMultiplier, req.Thing));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\tstringBuilder.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + num.ToString(\"0.##\") + \" \" + \"LetterSecond\".Translate());\n\t\t\t\tyield return new StatDrawEntry(verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged, \"RangedWarmupTime\".Translate(), num.ToString(\"0.##\") + \" \" + \"LetterSecond\".Translate(), stringBuilder.ToString(), 3555);\n\t\t\t}\n\t\t\tif (verb.defaultProjectile?.projectile.damageDef != null && verb.defaultProjectile.projectile.damageDef.harmsHealth)\n\t\t\t{\n\t\t\t\tStatCategoryDef statCat = verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged;\n\t\t\t\tStringBuilder stringBuilder2 = new StringBuilder();\n\t\t\t\tstringBuilder2.AppendLine(\"Stat_Thing_Damage_Desc\".Translate());\n\t\t\t\tstringBuilder2.AppendLine();\n\t\t\t\tfloat num2 = verb.defaultProjectile.projectile.GetDamageAmount(req.Thing, stringBuilder2);\n\t\t\t\tyield return new StatDrawEntry(statCat, \"Damage\".Translate(), num2.ToString(), stringBuilder2.ToString(), 5500);\n\t\t\t\tif (verb.defaultProjectile.projectile.damageDef.armorCategory != null)\n\t\t\t\t{\n\t\t\t\t\tStringBuilder stringBuilder3 = new StringBuilder();\n\t\t\t\t\tfloat armorPenetration = verb.defaultProjectile.projectile.GetArmorPenetration(req.Thing, stringBuilder3);\n\t\t\t\t\tTaggedString taggedString = \"ArmorPenetrationExplanation\".Translate();\n\t\t\t\t\tif (stringBuilder3.Length != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\ttaggedString += \"\\n\\n\" + stringBuilder3;\n\t\t\t\t\t}\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"ArmorPenetration\".Translate(), armorPenetration.ToStringPercent(), taggedString, 5400);\n\t\t\t\t}\n\t\t\t\tfloat buildingDamageFactor = verb.defaultProjectile.projectile.damageDef.buildingDamageFactor;\n\t\t\t\tfloat dmgBuildingsImpassable = verb.defaultProjectile.projectile.damageDef.buildingDamageFactorImpassable;\n\t\t\t\tfloat dmgBuildingsPassable = verb.defaultProjectile.projectile.damageDef.buildingDamageFactorPassable;\n\t\t\t\tif (buildingDamageFactor != 1f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BuildingDamageFactor\".Translate(), buildingDamageFactor.ToStringPercent(), \"BuildingDamageFactorExplanation\".Translate(), 5410);\n\t\t\t\t}\n\t\t\t\tif (dmgBuildingsImpassable != 1f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BuildingDamageFactorImpassable\".Translate(), dmgBuildingsImpassable.ToStringPercent(), \"BuildingDamageFactorImpassableExplanation\".Translate(), 5420);\n\t\t\t\t}\n\t\t\t\tif (dmgBuildingsPassable != 1f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BuildingDamageFactorPassable\".Translate(), dmgBuildingsPassable.ToStringPercent(), \"BuildingDamageFactorPassableExplanation\".Translate(), 5430);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (verb.defaultProjectile == null && verb.beamDamageDef != null)\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged, \"ArmorPenetration\".Translate(), verb.beamDamageDef.defaultArmorPenetration.ToStringPercent(), \"ArmorPenetrationExplanation\".Translate(), 5400);\n\t\t\t}\n\t\t\tif (verb.Ranged)\n\t\t\t{\n\t\t\t\tfloat num3 = verb.burstShotCount;\n\t\t\t\tfloat num4 = verb.ticksBetweenBurstShots;\n\t\t\t\tfloat dmgBuildingsPassable = (verb?.defaultProjectile?.projectile?.stoppingPower).GetValueOrDefault();\n\t\t\t\tStringBuilder stringBuilder4 = new StringBuilder(\"Stat_Thing_Weapon_BurstShotFireRate_Desc\".Translate());\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tstringBuilder4.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + verb.burstShotCount.ToString());\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tStringBuilder ticksBetweenBurstShotsExplanation = new StringBuilder(\"Stat_Thing_Weapon_BurstShotFireRate_Desc\".Translate());\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + (60f / verb.ticksBetweenBurstShots.TicksToSeconds()).ToString(\"0.##\") + \" rpm\");\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tStringBuilder stoppingPowerExplanation = new StringBuilder(\"StoppingPowerExplanation\".Translate());\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tstoppingPowerExplanation.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + dmgBuildingsPassable.ToString(\"F1\"));\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tif (req.HasThing && req.Thing.TryGetComp(out CompUniqueWeapon comp))\n\t\t\t\t{\n\t\t\t\t\tbool flag = false;\n\t\t\t\t\tbool flag2 = false;\n\t\t\t\t\tbool flag3 = false;\n\t\t\t\t\tforeach (WeaponTraitDef item2 in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!Mathf.Approximately(item2.burstShotCountMultiplier, 1f))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!flag)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstringBuilder4.AppendLine(\"StatsReport_WeaponTraits\".Translate() + \":\");\n\t\t\t\t\t\t\t\tflag = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnum3 *= item2.burstShotCountMultiplier;\n\t\t\t\t\t\t\tstringBuilder4.AppendLine(\" \" + item2.LabelCap + \": \" + item2.burstShotCountMultiplier.ToStringByStyle(ToStringStyle.PercentOne, ToStringNumberSense.Factor));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!Mathf.Approximately(item2.burstShotSpeedMultiplier, 1f))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!flag2)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\"StatsReport_WeaponTraits\".Translate() + \":\");\n\t\t\t\t\t\t\t\tflag2 = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnum4 /= item2.burstShotSpeedMultiplier;\n\t\t\t\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\" \" + item2.LabelCap + \": \" + item2.burstShotSpeedMultiplier.ToStringByStyle(ToStringStyle.PercentOne, ToStringNumberSense.Factor));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!Mathf.Approximately(item2.additionalStoppingPower, 0f))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!flag3)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstoppingPowerExplanation.AppendLine(\"StatsReport_WeaponTraits\".Translate() + \":\");\n\t\t\t\t\t\t\t\tflag3 = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdmgBuildingsPassable += item2.additionalStoppingPower;\n\t\t\t\t\t\t\tstoppingPowerExplanation.AppendLine(\" \" + item2.LabelCap + \": \" + item2.additionalStoppingPower.ToStringByStyle(ToStringStyle.FloatOne, ToStringNumberSense.Offset));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tstringBuilder4.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + Mathf.CeilToInt(num3).ToString());\n\t\t\t\tfloat dmgBuildingsImpassable = 60f / ((int)num4).TicksToSeconds();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + dmgBuildingsImpassable.ToString(\"0.##\") + \" rpm\");\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tstoppingPowerExplanation.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + dmgBuildingsPassable.ToString(\"F1\"));\n\t\t\t\tStatCategoryDef statCat = verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged;\n\t\t\t\tif (verb.showBurstShotStats && verb.burstShotCount > 1)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BurstShotCount\".Translate(), Mathf.CeilToInt(num3).ToString(), stringBuilder4.ToString(), 5391);\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BurstShotFireRate\".Translate(), dmgBuildingsImpassable.ToString(\"0.##\") + \" rpm\", ticksBetweenBurstShotsExplanation.ToString(), 5395);\n\t\t\t\t}\n\t\t\t\tif (dmgBuildingsPassable > 0f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"StoppingPower\".Translate(), dmgBuildingsPassable.ToString(\"F1\"), stoppingPowerExplanation.ToString(), 5402);\n\t\t\t\t}\n\t\t\t\tfloat num5 = verb.range;\n\t\t\t\tStringBuilder stringBuilder5 = new StringBuilder(\"Stat_Thing_Weapon_Range_Desc\".Translate());\n\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\tstringBuilder5.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + num5.ToString(\"F0\"));\n\t\t\t\tif (req.HasThing)\n\t\t\t\t{\n\t\t\t\t\tfloat statValue2 = req.Thing.GetStatValue(StatDefOf.RangedWeapon_RangeMultiplier);\n\t\t\t\t\tnum5 *= statValue2;\n\t\t\t\t\tif (!Mathf.Approximately(statValue2, 1f))\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\t\t\tstringBuilder5.AppendLine(\"Stat_Thing_Weapon_Range_Multiplier\".Translate() + \": x\" + statValue2.ToStringPercent());\n\t\t\t\t\t\tstringBuilder5.Append(StatUtility.GetOffsetsAndFactorsFor(StatDefOf.RangedWeapon_RangeMultiplier, req.Thing));\n\t\t\t\t\t}\n\t\t\t\t\tMap obj = req.Thing.Map ?? req.Thing.MapHeld;\n\t\t\t\t\tif (obj != null && obj.weatherManager.CurWeatherMaxRangeCap >= 0f)\n\t\t\t\t\t{\n\t\t\t\t\t\tWeatherManager weatherManager = (req.Thing.Map ?? req.Thing.MapHeld).weatherManager;\n\t\t\t\t\t\tbool num6 = num5 > weatherManager.CurWeatherMaxRangeCap;\n\t\t\t\t\t\tfloat num7 = num5;\n\t\t\t\t\t\tnum5 = Mathf.Min(num5, weatherManager.CurWeatherMaxRangeCap);\n\t\t\t\t\t\tif (num6)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\t\t\t\tstringBuilder5.AppendLine(\" \" + \"Stat_Thing_Weapon_Range_Clamped\".Translate(num5.ToString(\"F0\").Named(\"CAP\"), num7.ToString(\"F0\").Named(\"ORIGINAL\")));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\tstringBuilder5.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + num5.ToString(\"F0\"));\n\t\t\t\tyield return new StatDrawEntry(statCat, \"Range\".Translate(), num5.ToString(\"F0\"), stringBuilder5.ToString(), 5390);\n\t\t\t}\n\t\t\tif (verb.ForcedMissRadius > 0f)\n\t\t\t{\n\t\t\t\tStatCategoryDef statCat = verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged;\n\t\t\t\tyield return new StatDrawEntry(statCat, \"MissRadius\".Translate(), verb.ForcedMissRadius.ToString(\"0.#\"), \"Stat_Thing_Weapon_MissRadius_Desc\".Translate(), 3557);\n\t\t\t\tyield return new StatDrawEntry(statCat, \"DirectHitChance\".Translate(), (1f / (float)GenRadial.NumCellsInRadius(verb.ForcedMissRadius)).ToStringPercent(), \"Stat_Thing_Weapon_DirectHitChance_Desc\".Translate(), 3560);\n\t\t\t}\n\t\t}\n\t\tif (plant != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item3 in plant.SpecialDisplayStats())\n\t\t\t{\n\t\t\t\tyield return item3;\n\t\t\t}\n\t\t}\n\t\tif (ingestible != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item4 in ingestible.SpecialDisplayStats())\n\t\t\t{\n\t\t\t\tyield return item4;\n\t\t\t}\n\t\t}\n\t\tif (race != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item5 in race.SpecialDisplayStats(this, req))\n\t\t\t{\n\t\t\t\tyield return item5;\n\t\t\t}\n\t\t}\n\t\tif (building != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item6 in building.SpecialDisplayStats(this, req))\n\t\t\t{\n\t\t\t\tyield return item6;\n\t\t\t}\n\t\t}\n\t\tif (isTechHediff)\n\t\t{\n\t\t\tIEnumerable enumerable2 = DefDatabase.AllDefs.Where((RecipeDef x) => x.addsHediff != null && x.IsIngredient(this));\n\t\t\tforeach (StatDrawEntry medicalStatsFromRecipeDef in MedicalRecipesUtility.GetMedicalStatsFromRecipeDefs(enumerable2))\n\t\t\t{\n\t\t\t\tyield return medicalStatsFromRecipeDef;\n\t\t\t}\n\t\t}\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tforeach (StatDrawEntry item7 in comps[i].SpecialDisplayStats(req))\n\t\t\t{\n\t\t\t\tyield return item7;\n\t\t\t}\n\t\t}\n\t\tif (building != null)\n\t\t{\n\t\t\tif (building.mineableThing != null)\n\t\t\t{\n\t\t\t\tDialog_InfoCard.Hyperlink[] hyperlinks = new Dialog_InfoCard.Hyperlink[1]\n\t\t\t\t{\n\t\t\t\t\tnew Dialog_InfoCard.Hyperlink(building.mineableThing)\n\t\t\t\t};\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.BasicsImportant, \"Stat_MineableThing_Name\".Translate(), building.mineableThing.LabelCap, \"Stat_MineableThing_Desc\".Translate(), 2200, null, hyperlinks);\n\t\t\t\tStringBuilder stringBuilder6 = new StringBuilder();\n\t\t\t\tstringBuilder6.AppendLine(\"Stat_MiningYield_Desc\".Translate());\n\t\t\t\tstringBuilder6.AppendLine();\n\t\t\t\tstringBuilder6.AppendLine(\"StatsReport_DifficultyMultiplier\".Translate(Find.Storyteller.difficultyDef.label) + \": \" + Find.Storyteller.difficulty.mineYieldFactor.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor));\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"Stat_MiningYield_Name\".Translate(), Mathf.CeilToInt(building.EffectiveMineableYield).ToString(\"F0\"), stringBuilder6.ToString(), 2200, null, hyperlinks);\n\t\t\t}\n\t\t\tif (building.IsTurret)\n\t\t\t{\n\t\t\t\tThingDef turret = building.turretGunDef;\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.BasicsImportant, \"Stat_Weapon_Name\".Translate(), turret.LabelCap, \"Stat_Weapon_Desc\".Translate(), 5389, null, new Dialog_InfoCard.Hyperlink[1]\n\t\t\t\t{\n\t\t\t\t\tnew Dialog_InfoCard.Hyperlink(turret)\n\t\t\t\t});\n\t\t\t\tStatRequest request = StatRequest.For(turret, null);\n\t\t\t\tforeach (StatDrawEntry item8 in turret.SpecialDisplayStats(request))\n\t\t\t\t{\n\t\t\t\t\tif (item8.category == StatCategoryDefOf.Weapon_Ranged)\n\t\t\t\t\t{\n\t\t\t\t\t\tyield return item8;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (int i = 0; i < turret.statBases.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tStatModifier statModifier = turret.statBases[i];\n\t\t\t\t\tif (statModifier.stat.category == StatCategoryDefOf.Weapon_Ranged)\n\t\t\t\t\t{\n\t\t\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Weapon_Ranged, statModifier.stat, statModifier.value, request);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ModsConfig.OdysseyActive && Fillage == FillCategory.Full)\n\t\t\t{\n\t\t\t\tbool b = building.isAirtight || (building.isStuffableAirtight && req.StuffDef.stuffProps.isAirtight);\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Building, \"Stat_Airtight\".Translate(), b.ToStringYesNo(), \"Stat_Airtight_Desc\".Translate(), 6100);\n\t\t\t}\n\t\t}\n\t\tif (IsMeat)\n\t\t{\n\t\t\tList list = new List();\n\t\t\tbool flag4 = false;\n\t\t\tforeach (ThingDef allDef in DefDatabase.AllDefs)\n\t\t\t{\n\t\t\t\tif (allDef.race != null && allDef.race.meatDef == this && !allDef.IsCorpse)\n\t\t\t\t{\n\t\t\t\t\tif (!Find.HiddenItemsManager.Hidden(allDef))\n\t\t\t\t\t{\n\t\t\t\t\t\tflag4 = true;\n\t\t\t\t\t}\n\t\t\t\t\tlist.Add(allDef);\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield return new StatDrawEntry(valueString: (!flag4) ? string.Format(\"({0})\", \"NotYetDiscovered\".Translate()) : string.Join(\", \", (from x in list\n\t\t\t\twhere !Find.HiddenItemsManager.Hidden(x)\n\t\t\t\tselect x into p\n\t\t\t\tselect p.label).ToArray()).CapitalizeFirst(), category: StatCategoryDefOf.BasicsPawn, label: \"Stat_SourceSpecies_Name\".Translate(), reportText: \"Stat_SourceSpecies_Desc\".Translate(), displayPriorityWithinCategory: 1200, overrideReportTitle: null, hyperlinks: Dialog_InfoCard.DefsToHyperlinks(list));\n\t\t}\n\t\tif (IsLeather)\n\t\t{\n\t\t\tList list2 = new List();\n\t\t\tbool flag5 = false;\n\t\t\tforeach (ThingDef allDef2 in DefDatabase.AllDefs)\n\t\t\t{\n\t\t\t\tif (allDef2.race != null && allDef2.race.leatherDef == this && !allDef2.IsCorpse)\n\t\t\t\t{\n\t\t\t\t\tif (!Find.HiddenItemsManager.Hidden(allDef2))\n\t\t\t\t\t{\n\t\t\t\t\t\tflag5 = true;\n\t\t\t\t\t}\n\t\t\t\t\tlist2.Add(allDef2);\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield return new StatDrawEntry(valueString: (!flag5) ? string.Format(\"({0})\", \"NotYetDiscovered\".Translate()) : string.Join(\", \", (from x in list2\n\t\t\t\twhere !Find.HiddenItemsManager.Hidden(x)\n\t\t\t\tselect x into p\n\t\t\t\tselect p.label).ToArray()).CapitalizeFirst(), category: StatCategoryDefOf.BasicsPawn, label: \"Stat_SourceSpecies_Name\".Translate(), reportText: \"Stat_SourceSpecies_Desc\".Translate(), displayPriorityWithinCategory: 1200, overrideReportTitle: null, hyperlinks: Dialog_InfoCard.DefsToHyperlinks(list2));\n\t\t}\n\t\tif (!equippedStatOffsets.NullOrEmpty())\n\t\t{\n\t\t\tfor (int i = 0; i < equippedStatOffsets.Count; i++)\n\t\t\t{\n\t\t\t\tStatDef stat = equippedStatOffsets[i].stat;\n\t\t\t\tfloat num8 = equippedStatOffsets[i].value;\n\t\t\t\tStringBuilder stringBuilder7 = new StringBuilder(stat.description);\n\t\t\t\tif (req.HasThing && stat.Worker != null)\n\t\t\t\t{\n\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\tstringBuilder7.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + stat.ValueToString(num8, ToStringNumberSense.Offset, stat.finalizeEquippedStatOffset));\n\t\t\t\t\tnum8 = StatWorker.StatOffsetFromGear(req.Thing, stat);\n\t\t\t\t\tif (!stat.parts.NullOrEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\t\tfor (int k = 0; k < stat.parts.Count; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstring text = stat.parts[k].ExplanationPart(req);\n\t\t\t\t\t\t\tif (!text.NullOrEmpty())\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstringBuilder7.AppendLine(text);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\tstringBuilder7.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + stat.ValueToString(num8, ToStringNumberSense.Offset, !stat.formatString.NullOrEmpty()));\n\t\t\t\t}\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.EquippedStatOffsets, equippedStatOffsets[i].stat, num8, StatRequest.ForEmpty(), ToStringNumberSense.Offset, null, forceUnfinalizedMode: true).SetReportText(stringBuilder7.ToString());\n\t\t\t}\n\t\t}\n\t\tif (!IsDrug)\n\t\t{\n\t\t\tyield break;\n\t\t}\n\t\tforeach (StatDrawEntry item9 in DrugStatsUtility.SpecialDisplayStats(this))\n\t\t{\n\t\t\tyield return item9;\n\t\t}\n\t}\n}\n\n",
- "timestamp": "2025-08-22 16:02:42,858"
- },
- "Verb": {
- "keywords": [
- "Verb"
- ],
- "question": "RimWorld Verb class",
- "embedding": [
- 0.012549128383398056,
- 0.016916820779442787,
- 0.039827682077884674,
- -0.02038256824016571,
- -0.001290777581743896,
- -0.029686110094189644,
- 0.012442599050700665,
- 0.04221393167972565,
- -0.019828617572784424,
- 0.13590273261070251,
- 0.002286824630573392,
- -0.06681505590677261,
- -0.029203178361058235,
- 0.007662993390113115,
- 0.07187163084745407,
- 0.024743160232901573,
- 0.03704372048377991,
- -0.07857586443424225,
- 0.0009427825571037829,
- 0.012641453184187412,
- -0.019530335441231728,
- 0.045026302337646484,
- 0.0015970488311722875,
- 0.046048980206251144,
- -0.03443020582199097,
- -0.0618152879178524,
- 0.016604335978627205,
- -0.025538576766848564,
- 0.005994037259370089,
- 2.4773564291535877e-05,
- -0.060849424451589584,
- 0.04832160100340843,
- 0.0074996487237513065,
- -0.023819906637072563,
- -0.021731937304139137,
- 0.036731235682964325,
- -0.03573696315288544,
- 0.006693578790873289,
- -0.035708554089069366,
- -0.023422198370099068,
- -0.014601589180529118,
- 0.010944089852273464,
- -0.004520385060459375,
- -0.047128476202487946,
- -0.03193032369017601,
- 0.03687327355146408,
- 0.01205909438431263,
- -0.06715594232082367,
- -0.02813788689672947,
- 0.02934521622955799,
- -0.010603196918964386,
- -0.008380289189517498,
- -0.06130394712090492,
- -0.017058860510587692,
- -0.023152325302362442,
- 0.025879470631480217,
- -0.004435161594301462,
- 0.05613373592495918,
- -0.04545241594314575,
- -0.0027413489297032356,
- 0.02025473304092884,
- -0.01712987944483757,
- -0.009374560788273811,
- -0.030169041827321053,
- -0.021490471437573433,
- -0.012911327183246613,
- 0.024643732234835625,
- 0.06380382925271988,
- -0.0018944424809888005,
- -0.07289431244134903,
- -0.0180815402418375,
- 0.03664601221680641,
- 0.027072595432400703,
- 0.008302167989313602,
- -0.012904224917292595,
- 0.03650397062301636,
- -0.03156102076172829,
- 0.022910859435796738,
- -0.05780979245901108,
- 0.04354909807443619,
- 0.010837560519576073,
- -0.043463874608278275,
- 0.006473418325185776,
- -0.004420957528054714,
- 0.022356906905770302,
- 0.056957561522722244,
- 0.03397568315267563,
- -0.019445111975073814,
- 0.009466886520385742,
- 0.10488145053386688,
- -0.031191721558570862,
- -0.0038101908285170794,
- 0.03576537221670151,
- -0.041106030344963074,
- 0.0009223644738085568,
- 0.0022530904971063137,
- -0.05863361805677414,
- -0.0010990252485498786,
- 0.0008038508240133524,
- -0.023166527971625328,
- 0.04315138980746269,
- -0.09329108893871307,
- -0.05834953859448433,
- 0.059258587658405304,
- -0.014353021048009396,
- 0.014587384648621082,
- -0.02749871276319027,
- -0.011533550918102264,
- -0.0008256005239672959,
- 0.0008424676489084959,
- 0.03582218661904335,
- -0.03190191462635994,
- -0.035935815423727036,
- 0.047355737537145615,
- 0.0354812927544117,
- 0.02514086849987507,
- -0.013657030649483204,
- 0.019516130909323692,
- -0.00015357945812866092,
- -0.014999297447502613,
- 0.04070832207798958,
- 0.0036131120286881924,
- -0.04150373861193657,
- -0.036702826619148254,
- 0.019516130909323692,
- -0.048122745007276535,
- 0.013323239982128143,
- 0.026206159964203835,
- 0.03133375942707062,
- 0.011668487451970577,
- -0.00816723145544529,
- 0.00759197399020195,
- 0.034685876220464706,
- -0.0006884442991577089,
- -0.019544539973139763,
- 0.03923111781477928,
- -0.035964224487543106,
- 0.003160363296046853,
- -0.05144645273685455,
- -0.017939500510692596,
- -0.018394025042653084,
- 0.013884292915463448,
- 0.024601120501756668,
- 0.019800208508968353,
- 0.022981878370046616,
- -0.010375934652984142,
- -0.06363338232040405,
- 0.033890459686517715,
- 0.019090015441179276,
- 0.01840822957456112,
- -0.0374414287507534,
- -0.02038256824016571,
- -0.012066196650266647,
- 0.0507078543305397,
- -0.002214029897004366,
- -0.028350945562124252,
- 0.015098724514245987,
- 0.008465512655675411,
- 0.03244166076183319,
- -0.008018090389668941,
- -0.022016014903783798,
- 0.037725504487752914,
- -0.01531178317964077,
- -0.01904740370810032,
- 0.005994037259370089,
- -0.047071658074855804,
- -0.010042143054306507,
- 0.03886181488633156,
- -0.025368129834532738,
- -0.05897451192140579,
- 0.0066509670577943325,
- 0.02552437223494053,
- -0.006974105257540941,
- -0.01649070531129837,
- 0.03269733116030693,
- -0.008330576121807098,
- -0.03374841809272766,
- 0.03403249755501747,
- 0.08760953694581985,
- 0.01057478878647089,
- 0.012016482651233673,
- 0.004499079193919897,
- 0.03326548635959625,
- 0.03579377755522728,
- 0.005397474393248558,
- -0.03934474661946297,
- 0.013642827048897743,
- 0.023720480501651764,
- 0.006672272924333811,
- 0.034344982355833054,
- -0.008046498522162437,
- 0.08613233268260956,
- -0.030027002096176147,
- 0.014828851446509361,
- -0.023677868768572807,
- -0.02271200530230999,
- -0.04352068901062012,
- 0.047867078334093094,
- -0.023677868768572807,
- -0.015468025580048561,
- -0.039060670882463455,
- -0.029629293829202652,
- -0.04729892313480377,
- -0.017499180510640144,
- 0.014942482113838196,
- 0.014196778647601604,
- -0.041674185544252396,
- -0.032043952494859695,
- 0.03482791408896446,
- -0.005156008526682854,
- 0.03707212582230568,
- -0.0037640281952917576,
- -0.03894703835248947,
- -0.015070317313075066,
- 0.03479950502514839,
- 0.017499180510640144,
- 0.018734918907284737,
- 0.006146728992462158,
- 0.015354394912719727,
- -0.0023986801970750093,
- -0.05758253112435341,
- 0.012108808383345604,
- -0.00415463512763381,
- 0.04744096100330353,
- 0.02580844983458519,
- 0.01712987944483757,
- 0.003478175261989236,
- -0.00925382785499096,
- -0.01025520171970129,
- 0.02391933463513851,
- -0.006189340725541115,
- 0.014139962382614613,
- -0.05610532686114311,
- -0.026745906099677086,
- 0.047923892736434937,
- -0.03996971994638443,
- -0.04434451460838318,
- -0.012627249583601952,
- -0.025155071169137955,
- 0.04724210500717163,
- -0.02207282930612564,
- 0.03758346661925316,
- -0.007670095190405846,
- 0.02988496422767639,
- 0.003057385329157114,
- -0.007151653524488211,
- -0.014530569314956665,
- 0.0024732507299631834,
- 0.029771333560347557,
- -0.026262974366545677,
- 0.005855549592524767,
- -0.03735620528459549,
- -0.022129645571112633,
- -0.002796388929709792,
- -0.01007765345275402,
- 0.03965723514556885,
- -0.024956217035651207,
- -0.006498275324702263,
- -0.020524606108665466,
- 0.00700251292437315,
- -0.042696863412857056,
- 0.011846035718917847,
- 0.014615792781114578,
- 0.022527353838086128,
- -0.030936051160097122,
- 0.021220596507191658,
- -0.006427255924791098,
- -0.022087033838033676,
- -0.009367459453642368,
- 0.02734247036278248,
- -0.014239390380680561,
- 0.06522421538829803,
- 0.04042424261569977,
- -0.04121965914964676,
- -0.026007303968071938,
- -0.0199990626424551,
- 0.005535962525755167,
- -0.02373468317091465,
- -0.013053365983068943,
- 0.010276507586240768,
- 0.006398848257958889,
- 0.01738554984331131,
- -0.018891161307692528,
- -0.022229071706533432,
- 0.016675354912877083,
- 0.012641453184187412,
- 0.02734247036278248,
- 0.012627249583601952,
- 0.016888413578271866,
- 0.026518644765019417,
- -0.005404576659202576,
- -0.011512245051562786,
- 0.01585153117775917,
- 0.03820843622088432,
- -0.024515897035598755,
- 0.0015659778146073222,
- -0.004523935727775097,
- 0.05891769379377365,
- -0.04437292367219925,
- 0.01311018131673336,
- 0.045821718871593475,
- -0.002782185096293688,
- -0.024544304236769676,
- 0.007662993390113115,
- 0.03326548635959625,
- -0.014161268249154091,
- -0.004570098593831062,
- -0.055622395128011703,
- 0.006675823591649532,
- -0.06198573485016823,
- -0.016220830380916595,
- -0.026589663699269295,
- 0.05445767566561699,
- -0.020169509574770927,
- -0.03553810715675354,
- 0.02714361436665058,
- -0.04246960207819939,
- -0.009324847720563412,
- 0.002819470129907131,
- 0.052298687398433685,
- -0.06119031459093094,
- -0.018550267443060875,
- -0.047355737537145615,
- 0.0032011994626373053,
- 0.016348665580153465,
- -0.00980777945369482,
- 0.021902384236454964,
- -0.03863455355167389,
- 0.007020267657935619,
- 0.022513151168823242,
- -0.029913371428847313,
- 0.0020844193641096354,
- 0.03210077062249184,
- 0.060565344989299774,
- 0.01651911251246929,
- 0.022527353838086128,
- 0.011185555718839169,
- -0.0004367693327367306,
- 0.016448093578219414,
- -0.027981644496321678,
- -0.0365607887506485,
- -0.05519627779722214,
- -0.047128476202487946,
- -0.04178781434893608,
- 0.07130347937345505,
- -0.0137351518496871,
- 0.03008381836116314,
- 0.017683830112218857,
- 0.04067991301417351,
- 0.001658302964642644,
- 0.0023454157635569572,
- 0.018962180241942406,
- -0.009516599588096142,
- -0.003746273461729288,
- -0.00037817831616848707,
- 0.020297344774007797,
- 0.015837326645851135,
- 0.03110649809241295,
- -0.048179563134908676,
- 0.008728284388780594,
- 0.0031745671294629574,
- 0.015254967845976353,
- -0.0016236810479313135,
- 0.04229915514588356,
- 0.007691401056945324,
- -0.004935848526656628,
- -0.04261163994669914,
- 0.04229915514588356,
- -0.02816629409790039,
- 0.018763326108455658,
- 0.010915681719779968,
- -0.06414472311735153,
- 0.021490471437573433,
- 0.02414659596979618,
- -0.03471428155899048,
- 0.035964224487543106,
- 0.0068107605911791325,
- -0.01958715170621872,
- -0.01401922944933176,
- 0.02140524797141552,
- 0.09812040627002716,
- -0.01843663677573204,
- 0.02178875170648098,
- -0.020041674375534058,
- 0.015368598513305187,
- 0.024672139436006546,
- 0.08016669750213623,
- 0.002002747030928731,
- 0.05235550180077553,
- -0.028748653829097748,
- 0.05246913433074951,
- -0.013635724782943726,
- -0.014253593981266022,
- -0.006693578790873289,
- 0.029430439695715904,
- 0.02156149037182331,
- -0.020553015172481537,
- 0.023677868768572807,
- 0.0014088473981246352,
- -0.014203879982233047,
- -0.023720480501651764,
- 0.007840542122721672,
- -0.07522375136613846,
- -0.022285887971520424,
- -0.007691401056945324,
- -0.0071694087237119675,
- 0.0045807515271008015,
- -0.02391933463513851,
- -0.020979130640625954,
- 0.009417172521352768,
- -0.06817862391471863,
- 0.029742924496531487,
- 0.03110649809241295,
- -0.003096445929259062,
- -0.020425179973244667,
- -0.012314763851463795,
- 0.032782554626464844,
- -0.010070551186800003,
- 0.03210077062249184,
- 0.006462765391916037,
- -0.014139962382614613,
- 0.06596282124519348,
- -0.0071694087237119675,
- -0.00925382785499096,
- -0.02721463516354561,
- 0.004009045194834471,
- 0.00993561465293169,
- 0.024799974635243416,
- 0.03664601221680641,
- 0.03874818608164787,
- -0.040339019149541855,
- -0.04170259088277817,
- -0.03039630316197872,
- 0.0572984516620636,
- 0.030424712225794792,
- -0.03496995195746422,
- -0.014644200913608074,
- 0.031191721558570862,
- -0.01613560877740383,
- 0.0011585039319470525,
- -0.02829412929713726,
- -0.0273708775639534,
- 0.004477773327380419,
- 0.01943090744316578,
- -0.049202241003513336,
- -0.008373187854886055,
- 0.024459082633256912,
- -0.025226091966032982,
- 0.013323239982128143,
- -0.008259556256234646,
- -0.008380289189517498,
- 0.004513282794505358,
- 0.03769709914922714,
- 0.017840074375271797,
- -0.017442364245653152,
- 0.027967439964413643,
- 0.0044422633945941925,
- 0.0013431544648483396,
- -0.023138120770454407,
- 0.000963200640399009,
- 0.03329389542341232,
- -0.018649695441126823,
- -0.03403249755501747,
- 0.04181622341275215,
- 0.019757596775889397,
- 0.008060702122747898,
- -0.01030491478741169,
- -0.006846270523965359,
- 0.019090015441179276,
- -0.05786660686135292,
- -0.005106294993311167,
- 0.05545194819569588,
- -0.04096399247646332,
- -0.011249473318457603,
- 0.017328733578324318,
- -0.06619007885456085,
- -0.004783156793564558,
- 0.066246896982193,
- 0.02660386823117733,
- 0.02350742183625698,
- -0.017328733578324318,
- 0.03843570128083229,
- -0.022016014903783798,
- -0.01789688877761364,
- -0.09783633053302765,
- -0.08124619722366333,
- -0.03582218661904335,
- 0.02785380929708481,
- 0.039287932217121124,
- -0.04593534767627716,
- 0.005425882060080767,
- -0.008351881988346577,
- -0.022285887971520424,
- 0.03352115675806999,
- -0.0053193531930446625,
- 0.017598608508706093,
- 0.012321866117417812,
- 0.022030217573046684,
- -0.00882060918956995,
- -0.03604944795370102,
- -0.027981644496321678,
- 0.04261163994669914,
- -0.04923065006732941,
- -0.010780745185911655,
- -0.014502162113785744,
- -0.008351881988346577,
- -0.005596328992396593,
- 0.00016467623936478049,
- -0.06687186658382416,
- -0.0027715321630239487,
- 0.008231149055063725,
- -0.013301934115588665,
- 0.048747718334198,
- -0.021547285839915276,
- -0.02896171249449253,
- 0.0035332152619957924,
- -0.012584637850522995,
- -0.022087033838033676,
- 0.027868013828992844,
- 0.03556651622056961,
- 0.019018996506929398,
- -0.01207329798489809,
- 0.04306616634130478,
- 0.00848681852221489,
- -0.008089110255241394,
- 0.005571471992880106,
- 0.028308333829045296,
- -0.0037817831616848707,
- 0.02389092743396759,
- -0.02245633490383625,
- -0.061417579650878906,
- -0.006647415924817324,
- 0.056417811661958694,
- 0.00835898332297802,
- 0.042412787675857544,
- 0.0014399184146896005,
- 0.008792201988399029,
- 0.017627015709877014,
- -0.002150112297385931,
- 0.09834766387939453,
- 0.028975915163755417,
- 0.03198713809251785,
- 0.01846504397690296,
- 0.02012689784169197,
- 0.05633258819580078,
- 0.06346293538808823,
- 0.03522562235593796,
- -0.026390809565782547,
- 0.018337208777666092,
- -0.0632924884557724,
- 0.017967907711863518,
- 0.04158896207809448,
- -0.016916820779442787,
- -0.03707212582230568,
- -0.001284563448280096,
- 0.008344779722392559,
- -0.03113490529358387,
- 0.051474861800670624,
- -0.008905832655727863,
- 0.009417172521352768,
- 0.009495293721556664,
- 0.01532598678022623,
- 0.024956217035651207,
- -0.020837092772126198,
- -0.01825198531150818,
- -0.0038243946619331837,
- -0.0034692976623773575,
- 0.0071552046574652195,
- -0.0011727078817784786,
- -0.0008420237572863698,
- 0.029970187693834305,
- -0.004864829126745462,
- -0.04289571940898895,
- -0.035964224487543106,
- 0.03889022395014763,
- -0.015411210246384144,
- 0.025084052234888077,
- 0.040395837277173996,
- 0.006246156524866819,
- -5.6815522839315236e-05,
- -0.011377308517694473,
- -2.5328403353341855e-05,
- -0.004101370461285114,
- 0.015496433712542057,
- -0.013479482382535934,
- 0.02232849970459938,
- -0.006895984057337046,
- -0.013117283582687378,
- 0.07590553909540176,
- 0.03218599408864975,
- 0.027427691966295242,
- 0.006171585991978645,
- -0.053577035665512085,
- -0.017016248777508736,
- -0.043691135942935944,
- 0.03661760315299034,
- 0.007961275056004524,
- 0.004236307460814714,
- 0.0669286847114563,
- 0.03340752795338631,
- -0.0023294363636523485,
- -0.07278068363666534,
- -0.03318026289343834,
- -0.002489230129867792,
- 0.052497539669275284,
- -0.011441225185990334,
- 0.0072794887237250805,
- 0.034373391419649124,
- 0.0034000538289546967,
- 0.0013396034482866526,
- -0.017172491177916527,
- 0.07658731937408447,
- 0.039060670882463455,
- -0.0006959901074878871,
- 0.039799273014068604,
- -0.05610532686114311,
- -0.016391277313232422,
- 0.028052663430571556,
- 0.0028301230631768703,
- -0.046844396740198135,
- -0.06198573485016823,
- -0.007201367523521185,
- 0.012911327183246613,
- -0.03766869008541107,
- -0.046560321003198624,
- -0.012897123582661152,
- -0.025467557832598686,
- -0.00048115645768120885,
- -0.07249660789966583,
- -0.043435465544462204,
- 0.014871462248265743,
- 0.017428161576390266,
- -0.02153308317065239,
- 0.03195872902870178,
- 0.057752978056669235,
- -0.012009380385279655,
- -0.002327660797163844,
- 0.019146829843521118,
- -0.06920130550861359,
- 0.01751338504254818,
- -0.0027342468965798616,
- 0.02826572209596634,
- -0.004392549861222506,
- 0.0017310979310423136,
- -0.0030786909628659487,
- -0.04468540847301483,
- -0.005763224326074123,
- -0.050736259669065475,
- 0.002107500797137618,
- -0.005908814258873463,
- -0.016888413578271866,
- 0.0029384277295321226,
- 0.025126663967967033,
- 0.003043181262910366,
- -0.025155071169137955,
- 0.021320024505257607,
- -0.0010928109986707568,
- 0.005500452592968941,
- -0.007187163457274437,
- -0.023649461567401886,
- 0.003432012628763914,
- -0.06817862391471863,
- -0.037782322615385056,
- 0.029458846896886826,
- 0.0071552046574652195,
- 0.05394633859395981,
- 0.013443972915410995,
- 0.003220729762688279,
- -0.0035847043618559837,
- 0.005638940259814262,
- -0.05604851245880127,
- -0.047895483672618866,
- 0.012691167183220387,
- -0.013294831849634647,
- 0.02535392716526985,
- 0.035140398889780045,
- -0.010134468786418438,
- -0.04391839727759361,
- 0.013408462516963482,
- -0.003735620528459549,
- -0.024189207702875137,
- 0.01569528691470623,
- -0.042725272476673126,
- -0.0329245962202549,
- -0.003739171428605914,
- 0.016391277313232422,
- -0.006274564191699028,
- 0.010106060653924942,
- -0.044486552476882935,
- 0.007329202257096767,
- 0.0365607887506485,
- -0.08130300790071487,
- 0.0169026181101799,
- 0.04360591247677803,
- -0.014388530515134335,
- -0.015567452646791935,
- -0.05869043245911598,
- -0.027285654097795486,
- 0.04437292367219925,
- 0.02634819783270359,
- -0.015155539847910404,
- -0.03170306235551834,
- -0.08783679455518723,
- 0.001508274581283331,
- 0.0035900308284908533,
- 0.0005526196910068393,
- 0.006036648992449045,
- -0.03795276954770088,
- 0.006370440125465393,
- -0.04136170074343681,
- -0.022356906905770302,
- 0.04121965914964676,
- 0.009516599588096142,
- -0.010823356918990612,
- -0.008706978522241116,
- 0.011142943985760212,
- 0.008550736121833324,
- 0.002150112297385931,
- -0.05065103620290756,
- 0.007854745723307133,
- -0.04099239781498909,
- 0.006544437725096941,
- -0.03792436048388481,
- -0.015397006645798683,
- -0.053065694868564606,
- 0.014395632781088352,
- -0.010148672387003899,
- 0.01071682758629322,
- -0.030424712225794792,
- 0.03394727408885956,
- -0.043435465544462204,
- -0.04752618446946144,
- 0.011270779184997082,
- -0.03158942982554436,
- 0.018323006108403206,
- -0.00024768017465248704,
- -0.0061822389252483845,
- -0.007854745723307133,
- 0.03525403141975403,
- -0.007183612324297428,
- -0.019516130909323692,
- -0.00853653158992529,
- -0.01997065544128418,
- -0.07141710817813873,
- 0.08942762762308121,
- 0.007847643457353115,
- -0.002357844030484557,
- -0.006615457125008106,
- 0.05295206606388092,
- 0.016419686377048492,
- -0.010084754787385464,
- 0.013720948249101639,
- 0.03960041701793671,
- -0.030481526628136635,
- -0.04420247673988342,
- 0.05502583086490631,
- -0.003835047595202923,
- 0.014218084514141083,
- 0.017627015709877014,
- 0.018351413309574127,
- -0.06312204152345657,
- 0.007148102857172489,
- 0.027285654097795486,
- 0.007471241056919098,
- -0.010645808652043343,
- 0.03377682715654373,
- -0.007670095190405846,
- -0.018422432243824005,
- -0.052043016999959946,
- 0.0011425246484577656,
- -0.022697800770401955,
- 0.004584302194416523,
- -0.03718575835227966,
- 0.0485488623380661,
- 0.04158896207809448,
- -0.014345918782055378,
- -0.0021110516972839832,
- -0.008103313855826855,
- -0.024444878101348877,
- -0.006317175924777985,
- 0.014956685714423656,
- -0.01840822957456112,
- 0.023592645302414894,
- -0.00686757592484355,
- 0.01815255917608738,
- 0.032299622893333435,
- -0.04479903727769852,
- 0.022882450371980667,
- -0.011100332252681255,
- -0.019786005839705467,
- 0.002501658396795392,
- 0.031191721558570862,
- 0.040566280484199524,
- 0.006619008257985115,
- 0.015084520913660526,
- -0.008877425454556942,
- 0.017271919175982475,
- 0.022953471168875694,
- 0.029458846896886826,
- 0.0350835844874382,
- -0.005986935459077358,
- -0.07721229642629623,
- -0.07959854602813721,
- -0.022513151168823242,
- 0.013266423717141151,
- -0.0058839572593569756,
- -0.004942950326949358,
- 0.012556229718029499,
- -0.015752103179693222,
- -0.0342029444873333,
- 0.00535131199285388,
- 0.004065860528498888,
- 0.014871462248265743,
- 0.0012321865651756525,
- 0.032526884227991104,
- -0.033350709825754166,
- -0.0290895476937294,
- -0.008941343054175377,
- 0.011561958119273186,
- 0.03863455355167389,
- -0.01728612184524536,
- 0.04335024207830429,
- 0.010354628786444664,
- -0.0018713612807914615,
- 0.011412817984819412,
- -0.017783258110284805,
- -0.005862651392817497,
- -0.040140166878700256,
- -0.009736759588122368,
- 0.01651911251246929,
- 0.032328031957149506,
- -0.003980637528002262,
- -0.0021447858307510614,
- 0.030225858092308044,
- 0.0021998260635882616,
- -0.009701250120997429,
- 0.016277646645903587,
- 0.008841915056109428,
- -0.012421293184161186,
- 0.02504144050180912,
- -0.0399981252849102,
- 0.015539045445621014,
- 0.02957247942686081,
- -0.007975478656589985,
- 0.035396069288253784,
- 0.0026135139632970095,
- -0.022981878370046616,
- -0.010212589986622334,
- -0.029657702893018723,
- -0.026262974366545677,
- -0.014701016247272491,
- 0.02424602396786213,
- -0.024544304236769676,
- -0.011618774384260178,
- 0.04417406767606735,
- 0.003739171428605914,
- 0.04357750341296196,
- 0.04667394980788231,
- -0.010063448920845985,
- 0.0485488623380661,
- -0.02578004263341427,
- -0.04028220474720001,
- -0.022498946636915207,
- 0.033890459686517715,
- -0.035651739686727524,
- 0.012499414384365082,
- 0.013337443582713604,
- 0.00909048318862915,
- 0.01643388904631138,
- -0.014558977447450161,
- 0.035708554089069366,
- 0.11169931292533875,
- 0.025510169565677643,
- 0.05445767566561699,
- 0.035197217017412186,
- -0.0014905197313055396,
- -0.014828851446509361,
- 0.02345060557126999,
- -0.022626781836152077,
- 0.0436343215405941,
- 0.03496995195746422,
- -0.002812368329614401,
- -0.002892265096306801,
- -0.02194499410688877,
- -0.015240763314068317,
- -0.0029153465293347836,
- -0.005880406592041254,
- -0.000893068965524435,
- -0.04070832207798958,
- -0.0009951593820005655,
- 0.06698550283908844,
- 0.013131487183272839,
- 0.037270981818437576,
- 0.07971217483282089,
- 0.03996971994638443,
- 0.03471428155899048,
- -0.050736259669065475,
- 0.019501928240060806,
- 0.034629061818122864,
- 0.017399752512574196,
- 0.01409735158085823,
- -0.03110649809241295,
- 0.049486320465803146,
- 0.006409501191228628,
- -0.0463898740708828,
- -0.009147298522293568,
- 0.022825635969638824,
- -0.018095742911100388,
- -0.05471334606409073,
- 0.00032646729960106313,
- -0.007854745723307133,
- 0.011696895584464073,
- 0.020055878907442093,
- -0.03693008795380592,
- -0.03917430341243744,
- 0.007662993390113115,
- -0.02176034450531006,
- 0.11084707826375961,
- 0.044770631939172745,
- 0.0018766876310110092,
- -0.004758299794048071,
- -0.04252641648054123,
- 0.01735714077949524,
- -0.02670329436659813,
- -0.005315802060067654,
- -0.00786184798926115,
- -0.02386251837015152,
- 0.037526652216911316,
- -0.029203178361058235,
- 1.5299687220249325e-05,
- 0.031191721558570862,
- 0.03158942982554436,
- 0.031248535960912704,
- 0.006001139525324106,
- -0.02281143143773079,
- -0.0059336707927286625,
- -0.020695053040981293,
- -0.0211779847741127,
- -0.04312298074364662,
- -0.015539045445621014,
- -0.010787847451865673,
- -0.04286731034517288,
- 0.0181809663772583,
- 0.016575928777456284,
- 0.05323614180088043,
- -0.012534924782812595,
- 0.02519768290221691,
- -0.006249707192182541,
- 0.0340040884912014,
- 0.019828617572784424,
- -0.016405481845140457,
- 0.018479248508810997,
- -0.017811665311455727,
- -0.006207095459103584,
- 0.0019406051142141223,
- -0.0425548255443573,
- 0.014118657447397709,
- -0.04124806821346283,
- 0.005024622660130262,
- -0.028109479695558548,
- 0.05840635672211647,
- -0.01387719064950943,
- -0.043463874608278275,
- -0.028095275163650513,
- -0.011952565051615238,
- -0.007101939991116524,
- -0.017016248777508736,
- 0.011391512118279934,
- -0.004847073927521706,
- -0.0012277478817850351,
- -0.010319119319319725,
- 0.017328733578324318,
- -0.008870323188602924,
- -0.03343593329191208,
- -0.0014834176981821656,
- -0.00727238692343235,
- -0.037555061280727386,
- -0.05209983140230179,
- -0.11493779718875885,
- 0.005848447792232037,
- -0.0027999398298561573,
- 0.019146829843521118,
- -0.016959432512521744,
- -0.0026774313300848007,
- -0.010709725320339203,
- 0.010773642919957638,
- 0.034089311957359314,
- 0.004612710326910019,
- 0.00848681852221489,
- -0.00311775179579854,
- -0.008302167989313602,
- -0.028379352763295174,
- 0.001398194464854896,
- 0.03377682715654373,
- 0.019899636507034302,
- -0.016249239444732666,
- -0.009381663054227829,
- 0.0016414358979091048,
- 0.012961041182279587,
- 0.03366319462656975,
- -0.041901446878910065,
- 0.012577535584568977,
- -0.01738554984331131,
- -0.017527587711811066,
- -0.009722555987536907,
- -0.00877089612185955,
- -0.06744002550840378,
- 0.03684486448764801,
- -0.015482229180634022,
- -0.012016482651233673,
- 0.05886087939143181,
- -0.03786754608154297,
- 0.053804297000169754,
- -0.021220596507191658,
- 0.02239951863884926,
- -0.0018323005642741919,
- -0.006082811858505011,
- 0.012179827317595482,
- 0.04752618446946144,
- -0.02176034450531006,
- -0.0007803256739862263,
- -0.0024732507299631834,
- -0.004612710326910019,
- -0.0033183814957737923
- ],
- "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\Verb.txt\n\npublic abstract class Verb : ITargetingSource, IExposable, ILoadReferenceable\n{\n\tpublic VerbProperties verbProps;\n\n\tpublic VerbTracker verbTracker;\n\n\tpublic ManeuverDef maneuver;\n\n\tpublic Tool tool;\n\n\tpublic Thing caster;\n\n\tpublic MechanitorControlGroup controlGroup;\n\n\tpublic string loadID;\n\n\tpublic VerbState state;\n\n\tprotected LocalTargetInfo currentTarget;\n\n\tprotected LocalTargetInfo currentDestination;\n\n\tprotected int burstShotsLeft;\n\n\tprotected int ticksToNextBurstShot;\n\n\tprotected int lastShotTick = -999999;\n\n\tprotected bool surpriseAttack;\n\n\tprotected bool canHitNonTargetPawnsNow = true;\n\n\tpublic bool preventFriendlyFire;\n\n\tprotected bool nonInterruptingSelfCast;\n\n\tpublic Action castCompleteCallback;\n\n\tprivate Texture2D commandIconCached;\n\n\tprivate readonly List> maintainedEffecters = new List>();\n\n\tprivate int? cachedTicksBetweenBurstShots;\n\n\tprivate int? cachedBurstShotCount;\n\n\tprivate static readonly List tempLeanShootSources = new List();\n\n\tprivate static readonly List tempDestList = new List();\n\n\tpublic IVerbOwner DirectOwner => verbTracker.directOwner;\n\n\tpublic ImplementOwnerTypeDef ImplementOwnerType => verbTracker.directOwner.ImplementOwnerTypeDef;\n\n\tpublic CompEquippable EquipmentCompSource => DirectOwner as CompEquippable;\n\n\tpublic CompApparelReloadable ReloadableCompSource => DirectOwner as CompApparelReloadable;\n\n\tpublic CompApparelVerbOwner_Charged VerbOwner_ChargedCompSource => DirectOwner as CompApparelVerbOwner_Charged;\n\n\tpublic ThingWithComps EquipmentSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (EquipmentCompSource != null)\n\t\t\t{\n\t\t\t\treturn EquipmentCompSource.parent;\n\t\t\t}\n\t\t\tif (ReloadableCompSource != null)\n\t\t\t{\n\t\t\t\treturn ReloadableCompSource.parent;\n\t\t\t}\n\t\t\tif (VerbOwner_ChargedCompSource != null)\n\t\t\t{\n\t\t\t\treturn VerbOwner_ChargedCompSource.parent;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic HediffComp_VerbGiver HediffCompSource => DirectOwner as HediffComp_VerbGiver;\n\n\tpublic Hediff HediffSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (HediffCompSource == null)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn HediffCompSource.parent;\n\t\t}\n\t}\n\n\tpublic Pawn_MeleeVerbs_TerrainSource TerrainSource => DirectOwner as Pawn_MeleeVerbs_TerrainSource;\n\n\tpublic TerrainDef TerrainDefSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (TerrainSource == null)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn TerrainSource.def;\n\t\t}\n\t}\n\n\tpublic virtual Thing Caster => caster;\n\n\tpublic virtual Pawn CasterPawn => caster as Pawn;\n\n\tpublic virtual Verb GetVerb => this;\n\n\tpublic virtual bool CasterIsPawn => caster is Pawn;\n\n\tpublic virtual bool Targetable => verbProps.targetable;\n\n\tpublic virtual bool MultiSelect => false;\n\n\tpublic virtual bool HidePawnTooltips => false;\n\n\tpublic LocalTargetInfo CurrentTarget => currentTarget;\n\n\tpublic LocalTargetInfo CurrentDestination => currentDestination;\n\n\tpublic int LastShotTick => lastShotTick;\n\n\tpublic virtual TargetingParameters targetParams => verbProps.targetParams;\n\n\tpublic virtual ITargetingSource DestinationSelector => null;\n\n\tprotected virtual int ShotsPerBurst => 1;\n\n\tpublic virtual Texture2D UIIcon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (verbProps.commandIcon != null)\n\t\t\t{\n\t\t\t\tif (commandIconCached == null)\n\t\t\t\t{\n\t\t\t\t\tcommandIconCached = ContentFinder.Get(verbProps.commandIcon);\n\t\t\t\t}\n\t\t\t\treturn commandIconCached;\n\t\t\t}\n\t\t\tif (EquipmentSource != null)\n\t\t\t{\n\t\t\t\treturn EquipmentSource.def.uiIcon;\n\t\t\t}\n\t\t\treturn BaseContent.BadTex;\n\t\t}\n\t}\n\n\tpublic bool Bursting => burstShotsLeft > 0;\n\n\tpublic virtual bool IsMeleeAttack => verbProps.IsMeleeAttack;\n\n\tpublic bool BuggedAfterLoading => verbProps == null;\n\n\tpublic bool WarmingUp => WarmupStance != null;\n\n\tpublic Stance_Warmup WarmupStance\n\t{\n\t\tget\n\t\t{\n\t\t\tif (CasterPawn == null || !CasterPawn.Spawned)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!(CasterPawn.stances.curStance is Stance_Warmup stance_Warmup) || stance_Warmup.verb != this)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn stance_Warmup;\n\t\t}\n\t}\n\n\tpublic int WarmupTicksLeft\n\t{\n\t\tget\n\t\t{\n\t\t\tif (WarmupStance == null)\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn WarmupStance.ticksLeft;\n\t\t}\n\t}\n\n\tpublic float WarmupProgress => 1f - WarmupTicksLeft.TicksToSeconds() / verbProps.warmupTime;\n\n\tpublic virtual string ReportLabel => verbProps.label;\n\n\tpublic virtual float EffectiveRange => verbProps.AdjustedRange(this, Caster);\n\n\tpublic virtual float? AimAngleOverride => null;\n\n\tpublic bool NonInterruptingSelfCast\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!verbProps.nonInterruptingSelfCast)\n\t\t\t{\n\t\t\t\treturn nonInterruptingSelfCast;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic int TicksBetweenBurstShots\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!cachedTicksBetweenBurstShots.HasValue)\n\t\t\t{\n\t\t\t\tfloat num = verbProps.ticksBetweenBurstShots;\n\t\t\t\tif (EquipmentSource != null && EquipmentSource.TryGetComp(out var comp))\n\t\t\t\t{\n\t\t\t\t\tforeach (WeaponTraitDef item in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tnum /= item.burstShotSpeedMultiplier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcachedTicksBetweenBurstShots = Mathf.RoundToInt(num);\n\t\t\t}\n\t\t\treturn cachedTicksBetweenBurstShots.Value;\n\t\t}\n\t}\n\n\tpublic int BurstShotCount\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!cachedBurstShotCount.HasValue)\n\t\t\t{\n\t\t\t\tfloat num = verbProps.burstShotCount;\n\t\t\t\tif (EquipmentSource != null && EquipmentSource.TryGetComp(out var comp))\n\t\t\t\t{\n\t\t\t\t\tforeach (WeaponTraitDef item in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tnum *= item.burstShotCountMultiplier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcachedBurstShotCount = Mathf.CeilToInt(num);\n\t\t\t}\n\t\t\treturn cachedBurstShotCount.Value;\n\t\t}\n\t}\n\n\tpublic bool IsStillUsableBy(Pawn pawn)\n\t{\n\t\tif (!Available())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!DirectOwner.VerbsStillUsableBy(pawn))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.GetDamageFactorFor(this, pawn) == 0f)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (pawn.IsSubhuman && verbProps.category == VerbCategory.Ignite)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual bool IsUsableOn(Thing target)\n\t{\n\t\treturn true;\n\t}\n\n\tpublic virtual void ExposeData()\n\t{\n\t\tScribe_Values.Look(ref loadID, \"loadID\");\n\t\tScribe_Values.Look(ref state, \"state\", VerbState.Idle);\n\t\tScribe_TargetInfo.Look(ref currentTarget, \"currentTarget\");\n\t\tScribe_TargetInfo.Look(ref currentDestination, \"currentDestination\");\n\t\tScribe_Values.Look(ref burstShotsLeft, \"burstShotsLeft\", 0);\n\t\tScribe_Values.Look(ref ticksToNextBurstShot, \"ticksToNextBurstShot\", 0);\n\t\tScribe_Values.Look(ref lastShotTick, \"lastShotTick\", 0);\n\t\tScribe_Values.Look(ref surpriseAttack, \"surpriseAttack\", defaultValue: false);\n\t\tScribe_Values.Look(ref canHitNonTargetPawnsNow, \"canHitNonTargetPawnsNow\", defaultValue: false);\n\t\tScribe_Values.Look(ref preventFriendlyFire, \"preventFriendlyFire\", defaultValue: false);\n\t\tScribe_Values.Look(ref nonInterruptingSelfCast, \"nonInterruptingSelfCast\", defaultValue: false);\n\t}\n\n\tpublic string GetUniqueLoadID()\n\t{\n\t\treturn \"Verb_\" + loadID;\n\t}\n\n\tpublic static string CalculateUniqueLoadID(IVerbOwner owner, Tool tool, ManeuverDef maneuver)\n\t{\n\t\treturn string.Format(\"{0}_{1}_{2}\", owner.UniqueVerbOwnerID(), (tool != null) ? tool.id : \"NT\", (maneuver != null) ? maneuver.defName : \"NM\");\n\t}\n\n\tpublic static string CalculateUniqueLoadID(IVerbOwner owner, int index)\n\t{\n\t\treturn $\"{owner.UniqueVerbOwnerID()}_{index}\";\n\t}\n\n\tpublic bool TryStartCastOn(LocalTargetInfo castTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false)\n\t{\n\t\treturn TryStartCastOn(castTarg, LocalTargetInfo.Invalid, surpriseAttack, canHitNonTargetPawns, preventFriendlyFire, nonInterruptingSelfCast);\n\t}\n\n\tpublic virtual bool TryStartCastOn(LocalTargetInfo castTarg, LocalTargetInfo destTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false)\n\t{\n\t\tif (caster == null)\n\t\t{\n\t\t\tLog.Error(\"Verb \" + GetUniqueLoadID() + \" needs caster to work (possibly lost during saving/loading).\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!caster.Spawned)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (state == VerbState.Bursting || !CanHitTarget(castTarg))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CausesTimeSlowdown(castTarg))\n\t\t{\n\t\t\tFind.TickManager.slower.SignalForceNormalSpeed();\n\t\t}\n\t\tthis.surpriseAttack = surpriseAttack;\n\t\tcanHitNonTargetPawnsNow = canHitNonTargetPawns;\n\t\tthis.preventFriendlyFire = preventFriendlyFire;\n\t\tthis.nonInterruptingSelfCast = nonInterruptingSelfCast;\n\t\tcurrentTarget = castTarg;\n\t\tcurrentDestination = destTarg;\n\t\tif (CasterIsPawn && verbProps.warmupTime > 0f)\n\t\t{\n\t\t\tif (!TryFindShootLineFromTo(caster.Position, castTarg, out var resultingLine))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tCasterPawn.Drawer.Notify_WarmingCastAlongLine(resultingLine, caster.Position);\n\t\t\tfloat statValue = CasterPawn.GetStatValue(StatDefOf.AimingDelayFactor);\n\t\t\tint ticks = (verbProps.warmupTime * statValue).SecondsToTicks();\n\t\t\tCasterPawn.stances.SetStance(new Stance_Warmup(ticks, castTarg, this));\n\t\t\tif (verbProps.stunTargetOnCastStart && castTarg.Pawn != null)\n\t\t\t{\n\t\t\t\tcastTarg.Pawn.stances.stunner.StunFor(ticks, null, addBattleLog: false);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (verbTracker.directOwner is Ability ability)\n\t\t\t{\n\t\t\t\tability.lastCastTick = Find.TickManager.TicksGame;\n\t\t\t}\n\t\t\tWarmupComplete();\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual void WarmupComplete()\n\t{\n\t\tburstShotsLeft = ShotsPerBurst;\n\t\tstate = VerbState.Bursting;\n\t\tTryCastNextBurstShot();\n\t}\n\n\tpublic void VerbTick()\n\t{\n\t\tif (state == VerbState.Bursting)\n\t\t{\n\t\t\tif (!caster.Spawned || (caster is Pawn pawn && pawn.stances.stunner.Stunned))\n\t\t\t{\n\t\t\t\tReset();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tticksToNextBurstShot--;\n\t\t\t\tif (ticksToNextBurstShot <= 0)\n\t\t\t\t{\n\t\t\t\t\tTryCastNextBurstShot();\n\t\t\t\t}\n\t\t\t\tBurstingTick();\n\t\t\t}\n\t\t}\n\t\tfor (int num = maintainedEffecters.Count - 1; num >= 0; num--)\n\t\t{\n\t\t\tEffecter item = maintainedEffecters[num].Item1;\n\t\t\tif (item.ticksLeft > 0)\n\t\t\t{\n\t\t\t\tTargetInfo item2 = maintainedEffecters[num].Item2;\n\t\t\t\tTargetInfo item3 = maintainedEffecters[num].Item3;\n\t\t\t\titem.EffectTick(item2, item3);\n\t\t\t\titem.ticksLeft--;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titem.Cleanup();\n\t\t\t\tmaintainedEffecters.RemoveAt(num);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic virtual void BurstingTick()\n\t{\n\t}\n\n\tpublic void AddEffecterToMaintain(Effecter eff, IntVec3 pos, int ticks, Map map = null)\n\t{\n\t\teff.ticksLeft = ticks;\n\t\tTargetInfo targetInfo = new TargetInfo(pos, map ?? caster.Map);\n\t\tmaintainedEffecters.Add(new Tuple(eff, targetInfo, targetInfo));\n\t}\n\n\tpublic void AddEffecterToMaintain(Effecter eff, IntVec3 posA, IntVec3 posB, int ticks, Map map = null)\n\t{\n\t\teff.ticksLeft = ticks;\n\t\tTargetInfo item = new TargetInfo(posA, map ?? caster.Map);\n\t\tTargetInfo item2 = new TargetInfo(posB, map ?? caster.Map);\n\t\tmaintainedEffecters.Add(new Tuple(eff, item, item2));\n\t}\n\n\tpublic virtual bool Available()\n\t{\n\t\tif (verbProps.consumeFuelPerShot > 0f)\n\t\t{\n\t\t\tCompRefuelable compRefuelable = caster.TryGetComp();\n\t\t\tif (compRefuelable != null && compRefuelable.Fuel < verbProps.consumeFuelPerShot)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tCompApparelVerbOwner compApparelVerbOwner = EquipmentSource?.GetComp();\n\t\tif (compApparelVerbOwner != null && !compApparelVerbOwner.CanBeUsed(out var reason))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && EquipmentSource != null && EquipmentUtility.RolePreventsFromUsing(CasterPawn, EquipmentSource, out reason))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected void TryCastNextBurstShot()\n\t{\n\t\tLocalTargetInfo localTargetInfo = currentTarget;\n\t\tif (Available() && TryCastShot())\n\t\t{\n\t\t\tif (verbProps.muzzleFlashScale > 0.01f)\n\t\t\t{\n\t\t\t\tFleckMaker.Static(caster.Position, caster.Map, FleckDefOf.ShotFlash, verbProps.muzzleFlashScale);\n\t\t\t}\n\t\t\tif (verbProps.soundCast != null)\n\t\t\t{\n\t\t\t\tverbProps.soundCast.PlayOneShot(new TargetInfo(caster.Position, caster.MapHeld));\n\t\t\t}\n\t\t\tif (verbProps.soundCastTail != null)\n\t\t\t{\n\t\t\t\tverbProps.soundCastTail.PlayOneShotOnCamera(caster.Map);\n\t\t\t}\n\t\t\tif (CasterIsPawn)\n\t\t\t{\n\t\t\t\tCasterPawn.Notify_UsedVerb(CasterPawn, this);\n\t\t\t\tif (CasterPawn.thinker != null && localTargetInfo == CasterPawn.mindState.enemyTarget)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.mindState.Notify_EngagedTarget();\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.mindState != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.mindState.Notify_AttackedTarget(localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.MentalState != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.MentalState.Notify_AttackedTarget(localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (TerrainDefSource != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.meleeVerbs.Notify_UsedTerrainBasedVerb();\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.health != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.health.Notify_UsedVerb(this, localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (EquipmentSource != null)\n\t\t\t\t{\n\t\t\t\t\tEquipmentSource.Notify_UsedWeapon(CasterPawn);\n\t\t\t\t}\n\t\t\t\tif (!CasterPawn.Spawned)\n\t\t\t\t{\n\t\t\t\t\tReset();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (verbProps.consumeFuelPerShot > 0f)\n\t\t\t{\n\t\t\t\tcaster.TryGetComp()?.ConsumeFuel(verbProps.consumeFuelPerShot);\n\t\t\t}\n\t\t\tburstShotsLeft--;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tburstShotsLeft = 0;\n\t\t}\n\t\tif (burstShotsLeft > 0)\n\t\t{\n\t\t\tticksToNextBurstShot = TicksBetweenBurstShots;\n\t\t\tif (CasterIsPawn && !NonInterruptingSelfCast)\n\t\t\t{\n\t\t\t\tCasterPawn.stances.SetStance(new Stance_Cooldown(TicksBetweenBurstShots + 1, currentTarget, this));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tstate = VerbState.Idle;\n\t\tif (CasterIsPawn && !NonInterruptingSelfCast)\n\t\t{\n\t\t\tCasterPawn.stances.SetStance(new Stance_Cooldown(verbProps.AdjustedCooldownTicks(this, CasterPawn), currentTarget, this));\n\t\t}\n\t\tif (castCompleteCallback != null)\n\t\t{\n\t\t\tcastCompleteCallback();\n\t\t}\n\t\tif (verbProps.consumeFuelPerBurst > 0f)\n\t\t{\n\t\t\tcaster.TryGetComp()?.ConsumeFuel(verbProps.consumeFuelPerBurst);\n\t\t}\n\t}\n\n\tpublic virtual void OrderForceTarget(LocalTargetInfo target)\n\t{\n\t\tif (verbProps.IsMeleeAttack)\n\t\t{\n\t\t\tJob job = JobMaker.MakeJob(JobDefOf.AttackMelee, target);\n\t\t\tjob.playerForced = true;\n\t\t\tif (target.Thing is Pawn pawn)\n\t\t\t{\n\t\t\t\tjob.killIncappedTarget = pawn.Downed;\n\t\t\t}\n\t\t\tCasterPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);\n\t\t\treturn;\n\t\t}\n\t\tfloat num = verbProps.EffectiveMinRange(target, CasterPawn);\n\t\tif ((float)CasterPawn.Position.DistanceToSquared(target.Cell) < num * num && CasterPawn.Position.AdjacentTo8WayOrInside(target.Cell))\n\t\t{\n\t\t\tMessages.Message(\"MessageCantShootInMelee\".Translate(), CasterPawn, MessageTypeDefOf.RejectInput, historical: false);\n\t\t\treturn;\n\t\t}\n\t\tJob job2 = JobMaker.MakeJob(verbProps.ai_IsWeapon ? JobDefOf.AttackStatic : JobDefOf.UseVerbOnThing);\n\t\tjob2.verbToUse = this;\n\t\tjob2.targetA = target;\n\t\tjob2.endIfCantShootInMelee = true;\n\t\tCasterPawn.jobs.TryTakeOrderedJob(job2, JobTag.Misc);\n\t}\n\n\tprotected abstract bool TryCastShot();\n\n\tpublic void Notify_PickedUp()\n\t{\n\t\tReset();\n\t}\n\n\tpublic virtual void Reset()\n\t{\n\t\tstate = VerbState.Idle;\n\t\tcurrentTarget = null;\n\t\tcurrentDestination = null;\n\t\tburstShotsLeft = 0;\n\t\tticksToNextBurstShot = 0;\n\t\tcastCompleteCallback = null;\n\t\tsurpriseAttack = false;\n\t\tpreventFriendlyFire = false;\n\t}\n\n\tpublic virtual void Notify_EquipmentLost()\n\t{\n\t\tif (!CasterIsPawn)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tPawn casterPawn = CasterPawn;\n\t\tif (casterPawn.Spawned)\n\t\t{\n\t\t\tif (casterPawn.stances.curStance is Stance_Warmup stance_Warmup && stance_Warmup.verb == this)\n\t\t\t{\n\t\t\t\tcasterPawn.stances.CancelBusyStanceSoft();\n\t\t\t}\n\t\t\tif (casterPawn.CurJob != null && casterPawn.CurJob.def == JobDefOf.AttackStatic)\n\t\t\t{\n\t\t\t\tcasterPawn.jobs.EndCurrentJob(JobCondition.Incompletable);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic virtual float HighlightFieldRadiusAroundTarget(out bool needLOSToCenter)\n\t{\n\t\tneedLOSToCenter = false;\n\t\treturn 0f;\n\t}\n\n\tprivate bool CausesTimeSlowdown(LocalTargetInfo castTarg)\n\t{\n\t\tif (!verbProps.CausesTimeSlowdown)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!castTarg.HasThing)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tThing thing = castTarg.Thing;\n\t\tif (thing.def.category != ThingCategory.Pawn && (thing.def.building == null || !thing.def.building.IsTurret))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tPawn pawn = thing as Pawn;\n\t\tbool flag = pawn?.Downed ?? false;\n\t\tif ((CasterPawn != null && CasterPawn.Faction == Faction.OfPlayer && CasterPawn.IsShambler) || (pawn != null && pawn.Faction == Faction.OfPlayer && pawn.IsShambler))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (thing.Faction != Faction.OfPlayer || !caster.HostileTo(Faction.OfPlayer))\n\t\t{\n\t\t\tif (caster.Faction == Faction.OfPlayer && thing.HostileTo(Faction.OfPlayer))\n\t\t\t{\n\t\t\t\treturn !flag;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual bool CanHitTarget(LocalTargetInfo targ)\n\t{\n\t\tif (caster == null || !caster.Spawned)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (targ == caster)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn CanHitTargetFrom(caster.Position, targ);\n\t}\n\n\tpublic virtual bool ValidateTarget(LocalTargetInfo target, bool showMessages = true)\n\t{\n\t\tif (CasterIsPawn && target.Thing is Pawn p && (p.InSameExtraFaction(caster as Pawn, ExtraFactionType.HomeFaction) || p.InSameExtraFaction(caster as Pawn, ExtraFactionType.MiniFaction)))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && target.Thing is Pawn victim && HistoryEventUtility.IsKillingInnocentAnimal(CasterPawn, victim) && !new HistoryEvent(HistoryEventDefOf.KilledInnocentAnimal, CasterPawn.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && target.Thing is Pawn pawn && CasterPawn.Ideo != null && CasterPawn.Ideo.IsVeneratedAnimal(pawn) && !new HistoryEvent(HistoryEventDefOf.HuntedVeneratedAnimal, CasterPawn.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual void DrawHighlight(LocalTargetInfo target)\n\t{\n\t\tverbProps.DrawRadiusRing(caster.Position, this);\n\t\tif (target.IsValid)\n\t\t{\n\t\t\tGenDraw.DrawTargetHighlight(target);\n\t\t\tDrawHighlightFieldRadiusAroundTarget(target);\n\t\t}\n\t}\n\n\tprotected void DrawHighlightFieldRadiusAroundTarget(LocalTargetInfo target)\n\t{\n\t\tbool needLOSToCenter;\n\t\tfloat num = HighlightFieldRadiusAroundTarget(out needLOSToCenter);\n\t\tif (!(num > 0.2f) || !TryFindShootLineFromTo(caster.Position, target, out var resultingLine))\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (needLOSToCenter)\n\t\t{\n\t\t\tGenExplosion.RenderPredictedAreaOfEffect(resultingLine.Dest, num, verbProps.explosionRadiusRingColor);\n\t\t\treturn;\n\t\t}\n\t\tGenDraw.DrawFieldEdges((from x in GenRadial.RadialCellsAround(resultingLine.Dest, num, useCenter: true)\n\t\t\twhere x.InBounds(Find.CurrentMap)\n\t\t\tselect x).ToList(), verbProps.explosionRadiusRingColor);\n\t}\n\n\tpublic virtual void OnGUI(LocalTargetInfo target)\n\t{\n\t\tTexture2D icon = ((!target.IsValid) ? TexCommand.CannotShoot : ((!(UIIcon != BaseContent.BadTex)) ? TexCommand.Attack : UIIcon));\n\t\tGenUI.DrawMouseAttachment(icon);\n\t}\n\n\tpublic virtual bool CanHitTargetFrom(IntVec3 root, LocalTargetInfo targ)\n\t{\n\t\tif (targ.Thing != null && targ.Thing == caster)\n\t\t{\n\t\t\treturn targetParams.canTargetSelf;\n\t\t}\n\t\tif (targ.Pawn != null && targ.Pawn.IsPsychologicallyInvisible() && caster.HostileTo(targ.Pawn))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (ApparelPreventsShooting())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tShootLine resultingLine;\n\t\treturn TryFindShootLineFromTo(root, targ, out resultingLine);\n\t}\n\n\tpublic bool ApparelPreventsShooting()\n\t{\n\t\treturn FirstApparelPreventingShooting() != null;\n\t}\n\n\tpublic Apparel FirstApparelPreventingShooting()\n\t{\n\t\tif (CasterIsPawn && CasterPawn.apparel != null)\n\t\t{\n\t\t\tList wornApparel = CasterPawn.apparel.WornApparel;\n\t\t\tfor (int i = 0; i < wornApparel.Count; i++)\n\t\t\t{\n\t\t\t\tif (!wornApparel[i].AllowVerbCast(this))\n\t\t\t\t{\n\t\t\t\t\treturn wornApparel[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic bool TryFindShootLineFromTo(IntVec3 root, LocalTargetInfo targ, out ShootLine resultingLine, bool ignoreRange = false)\n\t{\n\t\tif (targ.HasThing && targ.Thing.Map != caster.Map)\n\t\t{\n\t\t\tresultingLine = default(ShootLine);\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.IsMeleeAttack || EffectiveRange <= 1.42f)\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn ReachabilityImmediate.CanReachImmediate(root, targ, caster.Map, PathEndMode.Touch, null);\n\t\t}\n\t\tCellRect occupiedRect = (targ.HasThing ? targ.Thing.OccupiedRect() : CellRect.SingleCell(targ.Cell));\n\t\tif (!ignoreRange && OutOfRange(root, targ, occupiedRect))\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn false;\n\t\t}\n\t\tif (!verbProps.requireLineOfSight)\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn true;\n\t\t}\n\t\tIntVec3 goodDest;\n\t\tif (CasterIsPawn)\n\t\t{\n\t\t\tif (CanHitFromCellIgnoringRange(root, targ, out goodDest))\n\t\t\t{\n\t\t\t\tresultingLine = new ShootLine(root, goodDest);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tShootLeanUtility.LeanShootingSourcesFromTo(root, occupiedRect.ClosestCellTo(root), caster.Map, tempLeanShootSources);\n\t\t\tfor (int i = 0; i < tempLeanShootSources.Count; i++)\n\t\t\t{\n\t\t\t\tIntVec3 intVec = tempLeanShootSources[i];\n\t\t\t\tif (CanHitFromCellIgnoringRange(intVec, targ, out goodDest))\n\t\t\t\t{\n\t\t\t\t\tresultingLine = new ShootLine(intVec, goodDest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tforeach (IntVec3 item in caster.OccupiedRect())\n\t\t\t{\n\t\t\t\tif (CanHitFromCellIgnoringRange(item, targ, out goodDest))\n\t\t\t\t{\n\t\t\t\t\tresultingLine = new ShootLine(item, goodDest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\treturn false;\n\t}\n\n\tpublic bool OutOfRange(IntVec3 root, LocalTargetInfo targ, CellRect occupiedRect)\n\t{\n\t\tfloat num = verbProps.EffectiveMinRange(targ, caster);\n\t\tfloat num2 = occupiedRect.ClosestDistSquaredTo(root);\n\t\tif (num2 > EffectiveRange * EffectiveRange || num2 < num * num)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate bool CanHitFromCellIgnoringRange(IntVec3 sourceCell, LocalTargetInfo targ, out IntVec3 goodDest)\n\t{\n\t\tif (targ.Thing != null)\n\t\t{\n\t\t\tif (targ.Thing.Map != caster.Map)\n\t\t\t{\n\t\t\t\tgoodDest = IntVec3.Invalid;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tShootLeanUtility.CalcShootableCellsOf(tempDestList, targ.Thing, sourceCell);\n\t\t\tfor (int i = 0; i < tempDestList.Count; i++)\n\t\t\t{\n\t\t\t\tif (CanHitCellFromCellIgnoringRange(sourceCell, tempDestList[i], targ.Thing.def.Fillage == FillCategory.Full))\n\t\t\t\t{\n\t\t\t\t\tgoodDest = tempDestList[i];\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (CanHitCellFromCellIgnoringRange(sourceCell, targ.Cell))\n\t\t{\n\t\t\tgoodDest = targ.Cell;\n\t\t\treturn true;\n\t\t}\n\t\tgoodDest = IntVec3.Invalid;\n\t\treturn false;\n\t}\n\n\tprivate bool CanHitCellFromCellIgnoringRange(IntVec3 sourceSq, IntVec3 targetLoc, bool includeCorners = false)\n\t{\n\t\tif (verbProps.mustCastOnOpenGround && (!targetLoc.Standable(caster.Map) || caster.Map.thingGrid.CellContains(targetLoc, ThingCategory.Pawn)))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.requireLineOfSight)\n\t\t{\n\t\t\tif (!includeCorners)\n\t\t\t{\n\t\t\t\tif (!GenSight.LineOfSight(sourceSq, targetLoc, caster.Map, skipFirstCell: true))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!GenSight.LineOfSightToEdges(sourceSq, targetLoc, caster.Map, skipFirstCell: true))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic override string ToString()\n\t{\n\t\tstring text = ((verbProps == null) ? \"null\" : ((!verbProps.label.NullOrEmpty()) ? verbProps.label : ((HediffCompSource != null) ? HediffCompSource.Def.label : ((EquipmentSource != null) ? EquipmentSource.def.label : ((verbProps.AdjustedLinkedBodyPartsGroup(tool) == null) ? \"unknown\" : verbProps.AdjustedLinkedBodyPartsGroup(tool).defName)))));\n\t\tif (tool != null)\n\t\t{\n\t\t\ttext = text + \"/\" + loadID;\n\t\t}\n\t\treturn $\"{GetType()}({text})\";\n\t}\n}\n\n",
- "timestamp": "2025-08-22 19:48:28,843"
- },
- "Game-deactivate-map-remove": {
- "keywords": [
- "Game",
- "remove",
- "deactivate",
- "map"
- ],
- "question": "Game method to remove or deactivate map",
- "embedding": [
- 0.01010276097804308,
- 0.04111691564321518,
- 0.04461685195565224,
- -0.02886713296175003,
- 0.013801224529743195,
- 0.0027187014929950237,
- 0.035852301865816116,
- 0.004981528967618942,
- 0.02548483945429325,
- 0.07429279386997223,
- -0.010308640077710152,
- -0.02255842089653015,
- -0.0016626542201265693,
- -0.044087450951337814,
- -0.014007103629410267,
- 0.07705745100975037,
- -0.02239665947854519,
- -0.09217482805252075,
- -0.04320511221885681,
- 0.030264167115092278,
- -0.0046690343879163265,
- 0.00877190288156271,
- 0.0016488677356392145,
- -0.016955580562353134,
- -0.05417550727725029,
- -0.044440384954214096,
- 0.04485214129090309,
- 0.0741751492023468,
- -0.02404368855059147,
- 0.0012398676481097937,
- 0.03938165307044983,
- -0.015926187857985497,
- 0.03323470056056976,
- -0.03444056212902069,
- 0.05488137528300285,
- 0.039881642907857895,
- -0.047557976096868515,
- 0.0025440724566578865,
- 0.0316464938223362,
- 0.028573021292686462,
- -0.04741092026233673,
- 0.00025367195485159755,
- -0.010043938644230366,
- 0.024146629497408867,
- 0.017014402896165848,
- 0.02604365348815918,
- 0.03352881595492363,
- -0.07782214134931564,
- -0.038793426007032394,
- -0.00936012715101242,
- 0.003926400560885668,
- 0.030675923451781273,
- 0.0277642123401165,
- -0.015867363661527634,
- 0.01356593519449234,
- 0.040352221578359604,
- 0.011220388114452362,
- -0.01238213200122118,
- -0.04288158938288689,
- 0.005411668214946985,
- 0.020058466121554375,
- 0.019396713003516197,
- -0.014970321208238602,
- -0.002266503870487213,
- 0.029822997748851776,
- -0.032764121890068054,
- -0.026278944686055183,
- -0.03664640709757805,
- -0.008720433339476585,
- -0.02264665625989437,
- 0.021705495193600655,
- -0.00044783210614696145,
- 0.015735013410449028,
- -0.014676209539175034,
- -0.020131994038820267,
- -0.0227643009275198,
- -0.027734799310564995,
- -0.011985080316662788,
- 0.011521853506565094,
- -0.015661485493183136,
- -0.01872025430202484,
- 0.015146789140999317,
- -0.014985027723014355,
- 0.03655817359685898,
- -0.009124837815761566,
- 0.035205256193876266,
- 0.03655817359685898,
- 0.0032683240715414286,
- -0.02539660595357418,
- 0.06717527657747269,
- -0.006963111460208893,
- -0.0019595238845795393,
- -0.005496225785464048,
- -0.014029162004590034,
- -0.003867578227072954,
- -0.03544054552912712,
- -0.026440706104040146,
- -0.008014563471078873,
- 0.00831602793186903,
- 0.020396696403622627,
- 0.0045771244913339615,
- -0.039234597235918045,
- 0.000669105735141784,
- 0.05849895998835564,
- -0.005992540158331394,
- 0.03846990317106247,
- -0.030175933614373207,
- 0.012411544099450111,
- -0.008499848656356335,
- -0.006010922137647867,
- -0.013779166154563427,
- -0.04249924421310425,
- -0.017117341980338097,
- 0.020881980657577515,
- -0.005371227860450745,
- 0.028367141261696815,
- 0.04129338264465332,
- -0.0033492050133645535,
- -0.03938165307044983,
- 0.010404226370155811,
- 0.048646192997694016,
- -0.03699934110045433,
- -0.02702893130481243,
- -0.0349111445248127,
- 0.013418878428637981,
- -0.02138197235763073,
- 0.028705371543765068,
- -0.0007242517895065248,
- -0.024426035583019257,
- -0.01616147719323635,
- -0.00188967224676162,
- -0.0023731195833534002,
- -0.028940660879015923,
- 0.010058644227683544,
- -0.07723391801118851,
- -0.006213124841451645,
- -0.005422697402536869,
- -0.03670522943139076,
- -0.04429332911968231,
- 0.046910930424928665,
- -0.0006314225611276925,
- -0.00188967224676162,
- -0.013367408886551857,
- -0.0191908348351717,
- 0.08382203429937363,
- -0.01022775936871767,
- -0.07399868220090866,
- 0.014455624856054783,
- -0.015926187857985497,
- -0.004738886374980211,
- 0.01973494328558445,
- -0.023881927132606506,
- -0.019749648869037628,
- 0.03070533648133278,
- -0.016955580562353134,
- -0.004209483973681927,
- -0.0048932950012385845,
- -0.06805761158466339,
- 0.013286528177559376,
- -0.026102475821971893,
- -0.009249835275113583,
- -0.0033436904195696115,
- -0.043705105781555176,
- -0.00917630735784769,
- 0.03670522943139076,
- 0.010293934494256973,
- -0.019249657168984413,
- 0.03799932450056076,
- -0.035028789192438126,
- -0.03429350629448891,
- -0.008139560930430889,
- 0.03358763828873634,
- -0.041705138981342316,
- 0.04623446986079216,
- 0.04835208132863045,
- -0.027881857007741928,
- 0.011661557480692863,
- 0.05776367709040642,
- -0.02045551873743534,
- -0.05988128483295441,
- 0.0754692479968071,
- 0.021499617025256157,
- 0.09599828720092773,
- -0.01745557226240635,
- -0.011190976947546005,
- -0.03161708265542984,
- 0.013293880969285965,
- 0.10029233247041702,
- -0.0032867062836885452,
- 0.019337890669703484,
- -0.03188178688287735,
- 0.04979323223233223,
- 0.029720058664679527,
- 0.006705762818455696,
- -0.028117146342992783,
- -0.04094044864177704,
- -0.0035367016680538654,
- 0.005356522276997566,
- -0.015293844975531101,
- 0.007349133957177401,
- 0.008793961256742477,
- 0.03185237571597099,
- 0.039616942405700684,
- -0.02511719986796379,
- -0.0016001553740352392,
- -0.023587815463542938,
- -0.009014545008540154,
- -0.03079356998205185,
- 0.028925955295562744,
- -0.015146789140999317,
- 0.07617511600255966,
- 0.009198365733027458,
- 0.005014616530388594,
- -0.015396784991025925,
- -0.011279210448265076,
- -0.013940928503870964,
- -0.019690826535224915,
- -0.018661431968212128,
- -0.01357328798621893,
- 0.006341798696666956,
- 0.005150643642991781,
- 0.022043725475668907,
- 0.026470117270946503,
- 0.006091803312301636,
- 0.03899930417537689,
- -0.03826402500271797,
- 0.044999197125434875,
- 0.008205736055970192,
- 0.021073153242468834,
- 0.07052815705537796,
- 0.011227740906178951,
- -0.0010716720717027783,
- 0.0227643009275198,
- -0.02367604896426201,
- -0.012088020332157612,
- -0.0035017759073525667,
- -0.022779006510972977,
- -0.004834472667425871,
- -0.008896900340914726,
- 0.048646192997694016,
- 0.010110113769769669,
- 0.04955793917179108,
- -0.016382060945034027,
- 0.04732268676161766,
- -0.01972023770213127,
- -0.061704784631729126,
- -0.025631897151470184,
- -0.002301429631188512,
- 0.026543645188212395,
- -0.0016415149439126253,
- 0.025014260783791542,
- 0.0334111712872982,
- 0.0022922386415302753,
- -0.05035204440355301,
- 0.018205558881163597,
- 0.005238877143710852,
- 0.005106526892632246,
- -0.014426213689148426,
- 0.044646263122558594,
- -0.046175647526979446,
- -0.0033933219965547323,
- 0.015132083557546139,
- -0.040616922080516815,
- 0.05305787920951843,
- -0.05994011089205742,
- 0.022617245092988014,
- -0.008301322348415852,
- 0.026249531656503677,
- -0.048734426498413086,
- -0.08358674496412277,
- 0.004459479358047247,
- 0.0045771244913339615,
- 0.017205575481057167,
- -0.011485089547932148,
- -0.017058519646525383,
- 0.012999768368899822,
- 0.01635264977812767,
- 0.0372934527695179,
- 0.0010330697987228632,
- -0.03664640709757805,
- -0.029278891161084175,
- 0.010676280595362186,
- 0.0239554550498724,
- -0.016955580562353134,
- 0.037616975605487823,
- 0.04985205456614494,
- 0.04264630004763603,
- -0.013176236301660538,
- -0.004768297541886568,
- 0.02476426400244236,
- -0.0028124498203396797,
- 0.015514429658651352,
- -0.004110220819711685,
- 0.02111727185547352,
- -0.00584548432379961,
- -0.007801331579685211,
- -0.06323416531085968,
- 0.052763767540454865,
- -0.0237495768815279,
- -0.012499777600169182,
- -0.024970144033432007,
- -0.00959541741758585,
- 0.01636735536158085,
- 0.011948316358029842,
- 0.06917523592710495,
- -0.04446979612112045,
- -0.025970125570893288,
- -0.08552788943052292,
- 0.036499351263046265,
- -0.07235164940357208,
- 0.025293666869401932,
- 0.014815912581980228,
- -0.043352168053388596,
- 0.0015606340020895004,
- -0.018617315217852592,
- 0.019132012501358986,
- -0.04141102731227875,
- 0.006396945100277662,
- 1.3176178072171751e-05,
- 0.0420580729842186,
- -0.011749790981411934,
- -0.04523449018597603,
- -0.0466168187558651,
- 0.0050072637386620045,
- 0.008918958716094494,
- -0.03826402500271797,
- 0.02247018739581108,
- 0.017984973266720772,
- -0.003608391620218754,
- -0.032764121890068054,
- 0.0008487900486215949,
- 0.014815912581980228,
- -0.04011693224310875,
- -0.014962968416512012,
- -0.055528424680233,
- 0.0007311450899578631,
- 0.01023511216044426,
- -0.03352881595492363,
- 0.02074963040649891,
- -0.007062374148517847,
- -0.007316046394407749,
- -0.028278907760977745,
- -0.031293559819459915,
- 0.020352579653263092,
- 0.019411418586969376,
- 0.02613188698887825,
- 0.006069744937121868,
- 0.01901436783373356,
- 0.04785208776593208,
- 0.013874753378331661,
- -0.030999448150396347,
- 0.014521799981594086,
- 0.005275641568005085,
- 0.01644088327884674,
- 0.02294076792895794,
- -0.06905759125947952,
- -0.01598501019179821,
- -0.005349169485270977,
- -0.0602930448949337,
- 0.009382185526192188,
- -0.006981493439525366,
- 0.03191119804978371,
- -0.006301358342170715,
- 0.0557343028485775,
- 0.05852837115526199,
- -0.005555048119276762,
- 0.01599971577525139,
- 0.04082280397415161,
- 0.025558369234204292,
- 0.008433673530817032,
- 0.0033933219965547323,
- -0.04820502549409866,
- 0.06276358664035797,
- 0.027014225721359253,
- -0.04649917036294937,
- 0.08605729043483734,
- 0.032205309718847275,
- -0.016014421358704567,
- -0.0035128050949424505,
- 0.006080774124711752,
- 0.015279139392077923,
- 0.03044063411653042,
- -0.03496996685862541,
- -0.09611593186855316,
- -0.010014527477324009,
- -0.017779095098376274,
- -0.01964670978486538,
- 0.0026856139302253723,
- 0.02704363688826561,
- -0.058793071657419205,
- 0.05555783584713936,
- 0.005374904256314039,
- -0.01745557226240635,
- -0.011602734215557575,
- -0.03829343616962433,
- 0.0063638570718467236,
- -0.01891142874956131,
- 0.06911641359329224,
- -0.01342623122036457,
- -0.01717616431415081,
- -0.02420545183122158,
- -0.006444738246500492,
- 0.005492549389600754,
- -0.02648482285439968,
- 0.03299941122531891,
- 0.013786518946290016,
- 0.053851980715990067,
- -0.04732268676161766,
- -0.025631897151470184,
- -0.02238195389509201,
- -0.02467603050172329,
- -0.013462995178997517,
- -0.0059153358452022076,
- 0.06970464438199997,
- -0.051204971969127655,
- -0.01617618277668953,
- 0.005466814618557692,
- -0.002145182341337204,
- 0.015161494724452496,
- 0.058146022260189056,
- 0.0031543555669486523,
- 0.01608794927597046,
- -0.06364592909812927,
- -0.004698445554822683,
- -0.03355822712182999,
- 0.03185237571597099,
- 0.07558689266443253,
- 0.0034080275800079107,
- -0.0016727643087506294,
- 0.05964599549770355,
- 0.012654186226427555,
- -0.00876455008983612,
- -0.02476426400244236,
- 0.07205753773450851,
- -0.001085458556190133,
- -0.04067574441432953,
- 0.0037058163434267044,
- -0.04202866181731224,
- -0.025440722703933716,
- 0.004345510620623827,
- -0.017382042482495308,
- -0.00714693171903491,
- -0.03464644029736519,
- -0.010477754287421703,
- -0.030175933614373207,
- -0.021676084026694298,
- 0.04441097378730774,
- -0.010065997019410133,
- 0.04146984964609146,
- 0.0368816964328289,
- 0.009352774359285831,
- -0.004007281735539436,
- 0.010985098779201508,
- 0.012396838515996933,
- -0.012977709993720055,
- 0.032675888389348984,
- -0.00735648674890399,
- -0.0732928141951561,
- -0.08088091015815735,
- -0.005128585267812014,
- 0.08029268682003021,
- 0.01772027276456356,
- -0.018926134333014488,
- 0.022411365061998367,
- 0.005768279545009136,
- 0.018661431968212128,
- -0.03982282057404518,
- -0.017749683931469917,
- -0.013029179535806179,
- -0.04211689531803131,
- -0.02127903327345848,
- 0.037146396934986115,
- 0.048381492495536804,
- -0.06264594197273254,
- 0.05726368725299835,
- -0.052057895809412,
- -0.026426000520586967,
- 0.07176342606544495,
- 0.008720433339476585,
- 0.0243966244161129,
- -0.008418967947363853,
- 0.0008648742805235088,
- -0.025249550119042397,
- -0.0498814657330513,
- -0.05938129499554634,
- -0.05855778232216835,
- 0.007926329039037228,
- -0.014418860897421837,
- 0.035969946533441544,
- 0.003178252140060067,
- -0.029175950214266777,
- -0.03626406192779541,
- 0.006180036813020706,
- -0.013315939344465733,
- -0.022440776228904724,
- 0.037852268666028976,
- 0.0019668766763061285,
- -0.07752802968025208,
- -0.012911534868180752,
- -0.02157314494252205,
- -0.0007853720453567803,
- 0.03855813667178154,
- -0.03864637017250061,
- -0.02074963040649891,
- 0.046734463423490524,
- -0.006349151488393545,
- -0.04670505225658417,
- -0.0169114638119936,
- -0.03952870890498161,
- -0.01624971069395542,
- 0.0030128140933811665,
- -0.041528671979904175,
- 0.0004354242410045117,
- 0.037234630435705185,
- -0.0033179556485265493,
- 0.008617493323981762,
- -0.0004774731060024351,
- 0.09376303851604462,
- -0.00909542664885521,
- 0.003885960206389427,
- 0.008080738596618176,
- -0.019352596253156662,
- -0.013587993569672108,
- -2.6539049940765835e-05,
- -0.04685210809111595,
- -0.020808452740311623,
- -0.003340014023706317,
- 0.010161583311855793,
- -0.010911569930613041,
- -0.029073011130094528,
- -0.030381811782717705,
- 0.015007086098194122,
- -0.01292624045163393,
- 0.01238948479294777,
- -0.0005666259676218033,
- 0.01764674484729767,
- 0.007632216904312372,
- -0.007771920412778854,
- 0.03779344633221626,
- -0.024455446749925613,
- -0.019220246002078056,
- -0.004588153678923845,
- -0.01406592596322298,
- -0.012676244601607323,
- 0.02467603050172329,
- 0.045087430626153946,
- 0.01847025938332081,
- 0.026734817773103714,
- -0.01470562070608139,
- -0.0841161459684372,
- 0.027470098808407784,
- 0.001457694685086608,
- 0.02392604388296604,
- -0.0589989498257637,
- 0.002397016156464815,
- -0.004676387179642916,
- 0.018411437049508095,
- 0.02438191883265972,
- 0.029175950214266777,
- 0.0219113752245903,
- 0.005547695327550173,
- -0.014676209539175034,
- -0.0162644162774086,
- -0.03052886761724949,
- -0.020514341071248055,
- -0.02876419387757778,
- -0.029999466612935066,
- -0.0003568410756997764,
- -0.029646530747413635,
- -0.017587922513484955,
- -0.07688098400831223,
- 0.0219113752245903,
- -0.019793765619397163,
- -0.0032389129046350718,
- 0.021779023110866547,
- 0.030175933614373207,
- 0.03079356998205185,
- 0.01502914447337389,
- 0.05405786260962486,
- 0.03214648738503456,
- 0.014080631546676159,
- 0.03944047540426254,
- -0.024617208167910576,
- -0.05841072276234627,
- -0.02492602728307247,
- -0.01708793081343174,
- 0.03188178688287735,
- 0.016043832525610924,
- 0.0006916237180121243,
- 0.0024981172755360603,
- 0.06182242929935455,
- -0.020440813153982162,
- -0.05776367709040642,
- -0.02367604896426201,
- -0.033028822392225266,
- 0.048646192997694016,
- 0.018426142632961273,
- 0.02467603050172329,
- 0.0002961803984362632,
- 0.07682216167449951,
- -0.030117111280560493,
- -0.04405803978443146,
- -0.0107351029291749,
- -0.008838078007102013,
- -0.010499812662601471,
- 0.01863202080130577,
- 0.017705567181110382,
- -0.009220424108207226,
- 0.028175968676805496,
- 0.012896829284727573,
- -0.037764035165309906,
- 0.042616888880729675,
- -0.017220281064510345,
- -0.011918905191123486,
- -0.0169114638119936,
- -0.02301429584622383,
- 0.01219831220805645,
- 0.00894836988300085,
- -0.009926293976604939,
- 0.005110203288495541,
- -8.375310426345095e-05,
- -0.016470294445753098,
- -0.01964670978486538,
- -0.024014277383685112,
- -0.014837970957159996,
- 0.011911552399396896,
- -0.0011810451978817582,
- -0.010654222220182419,
- 0.041705138981342316,
- -0.01063951663672924,
- 0.043175701051950455,
- -0.011088037863373756,
- -0.019852587953209877,
- 0.038322847336530685,
- 0.04870501533150673,
- -0.025911303237080574,
- -0.0016865507932379842,
- 0.00014475845091510564,
- 0.007992505095899105,
- -0.01238213200122118,
- 0.0006553191924467683,
- 0.005404315423220396,
- -0.009963057935237885,
- 0.005341816693544388,
- 0.009448361583054066,
- -0.0044080098159611225,
- -0.001861180062405765,
- 0.0023345171939581633,
- 0.010705691762268543,
- 0.013382114470005035,
- 0.003930076956748962,
- 0.06752821058034897,
- 0.002564292633906007,
- 0.015661485493183136,
- -0.027293631806969643,
- 0.0016470295377075672,
- -0.024014277383685112,
- -0.03629347309470177,
- 0.013374761678278446,
- -0.041263971477746964,
- -0.054969608783721924,
- -0.08052797615528107,
- -0.011257152073085308,
- -0.01097039319574833,
- -0.03135238215327263,
- 0.011757143773138523,
- 0.0041837492026388645,
- 0.014904146082699299,
- 0.006735173985362053,
- 0.025190727785229683,
- -0.03999928757548332,
- -0.011418914422392845,
- -0.023602521046996117,
- 0.0028731105849146843,
- 0.033940572291612625,
- 0.012985062785446644,
- -0.026058359071612358,
- -0.05191083997488022,
- 0.032675888389348984,
- 0.0022793712560087442,
- 0.03638170659542084,
- 0.049381472170352936,
- -0.025264255702495575,
- -0.01929377391934395,
- -0.04896971583366394,
- -0.00609547970816493,
- 0.018867311999201775,
- -0.005782985128462315,
- -0.0013896811287850142,
- 0.03882283717393875,
- 0.008051327429711819,
- -0.029984761029481888,
- 0.045175667852163315,
- -0.0019668766763061285,
- -0.01782321184873581,
- -0.02694069594144821,
- 0.003591847838833928,
- -0.043087467551231384,
- 0.052028484642505646,
- 0.039499297738075256,
- -0.019220246002078056,
- -0.04555801302194595,
- -0.06676352024078369,
- -0.016734996810555458,
- 0.02392604388296604,
- -0.007882212288677692,
- -0.0021764319390058517,
- -0.013668874278664589,
- -0.0015275463229045272,
- 0.008205736055970192,
- 0.010632163845002651,
- -0.016882052645087242,
- -0.013315939344465733,
- -0.005768279545009136,
- -0.004264629911631346,
- 0.008551318198442459,
- 0.040058109909296036,
- -0.01479385420680046,
- -0.024190746247768402,
- -0.012183606624603271,
- 0.001329939579591155,
- 0.009713062085211277,
- -0.009933646768331528,
- 0.02238195389509201,
- -0.021779023110866547,
- 0.025734836235642433,
- 0.001751807052642107,
- -0.012249781750142574,
- -0.02411721833050251,
- 0.04291100054979324,
- -0.03444056212902069,
- -0.012360073626041412,
- -0.04123456031084061,
- -0.0020992273930460215,
- 0.019426124170422554,
- -0.012477719224989414,
- 0.03317587822675705,
- -0.02777891792356968,
- 0.007617511320859194,
- -0.06399886310100555,
- -0.07876330614089966,
- -0.03258765488862991,
- 0.06711645424365997,
- -0.00370213994756341,
- 0.09829236567020416,
- -0.02958770841360092,
- -0.018617315217852592,
- 0.028528904542326927,
- 0.004834472667425871,
- -0.00751089584082365,
- 0.006018275395035744,
- 0.0035642748698592186,
- 0.07452808320522308,
- -0.017249692231416702,
- 0.007154284510761499,
- 0.016220299527049065,
- 0.055528424680233,
- 0.05817543342709541,
- 0.013058590702712536,
- -0.012845359742641449,
- 0.009286599233746529,
- 0.01607324369251728,
- 0.004360216669738293,
- 0.01682323031127453,
- -0.04761679843068123,
- 0.05949893966317177,
- 0.03635229542851448,
- 0.03917577117681503,
- -0.054763730615377426,
- -0.0064226798713207245,
- -0.02492602728307247,
- -0.009566006250679493,
- 0.03867578133940697,
- 0.03455820679664612,
- -0.01663205586373806,
- 0.05108732730150223,
- 0.008720433339476585,
- 0.0016589778242632747,
- 0.04732268676161766,
- -0.004474184941500425,
- 0.05932247266173363,
- 0.02001434937119484,
- 0.0498814657330513,
- 0.02045551873743534,
- 0.013860046863555908,
- 0.01462473999708891,
- 0.0072645763866603374,
- -0.012786537408828735,
- -0.013051237910985947,
- -0.01791144534945488,
- -0.004816090688109398,
- -0.005187407601624727,
- 0.09141013771295547,
- -0.01844084821641445,
- -0.02658776193857193,
- -0.015852658078074455,
- 0.025073083117604256,
- 0.09705709666013718,
- -0.011602734215557575,
- -0.014212981797754765,
- -0.024073101580142975,
- -0.08082208782434464,
- 0.01041893195360899,
- 0.00377934449352324,
- -0.007617511320859194,
- 0.033852338790893555,
- -0.015573251992464066,
- 0.03894048184156418,
- -0.00040417478885501623,
- -0.032205309718847275,
- -0.031940609216690063,
- 0.022411365061998367,
- 0.04058751091361046,
- 0.024161335080862045,
- -0.02813185192644596,
- -0.023984866216778755,
- -0.052469652146101,
- 0.005838131532073021,
- -0.02969064749777317,
- 0.0005179135478101671,
- -0.0027977442368865013,
- -0.0015247890260070562,
- 0.012801242992281914,
- 0.005782985128462315,
- 0.009955705143511295,
- -0.02064669132232666,
- -0.006091803312301636,
- 0.026087770238518715,
- 0.015014438889920712,
- -0.032940588891506195,
- 0.03588171303272247,
- -0.0063087111338973045,
- -0.015051202848553658,
- 0.025455428287386894,
- 0.030028877779841423,
- 0.03488173335790634,
- -0.027323042973876,
- -0.02019081637263298,
- -0.045734480023384094,
- 0.020220227539539337,
- -0.012948298826813698,
- -0.05588135868310928,
- 0.012132137082517147,
- -0.039793409407138824,
- 0.0070219337940216064,
- -0.015426196157932281,
- 0.025705425068736076,
- -0.03323470056056976,
- 0.0015073261456564069,
- 0.018690843135118484,
- -0.04094044864177704,
- -0.019440829753875732,
- 0.019205540418624878,
- -0.01680852472782135,
- -0.009316010400652885,
- 0.0698222890496254,
- 0.03170531615614891,
- 0.017690861597657204,
- 0.0027995824348181486,
- 0.04158749431371689,
- -0.00895572267472744,
- -0.037058163434267044,
- -0.02322017401456833,
- 0.02522013895213604,
- 0.021234916523098946,
- -0.0231025293469429,
- 0.04961676523089409,
- -0.0007063293596729636,
- 0.0030514162499457598,
- 0.019337890669703484,
- 0.009573359042406082,
- 0.00021897588158026338,
- -0.0002449404855724424,
- 0.03391116112470627,
- 0.022087842226028442,
- -0.04394039511680603,
- -0.027117164805531502,
- 0.016146771609783173,
- 0.01064686942845583,
- -0.010624811053276062,
- 0.0008400585502386093,
- -0.022587833926081657,
- -0.0035955242346972227,
- -0.004926383029669523,
- 0.024176040664315224,
- 0.01219095941632986,
- 0.008845430798828602,
- 0.009668945334851742,
- -0.02641129493713379,
- 0.022043725475668907,
- 0.04211689531803131,
- -0.0338229276239872,
- 0.014470330439507961,
- -0.011124801822006702,
- 0.005959452595561743,
- 0.011639498174190521,
- -0.031470026820898056,
- -0.001660816022194922,
- 0.013235058635473251,
- -0.01147038396447897,
- 0.015396784991025925,
- -0.054675497114658356,
- 0.04485214129090309,
- -0.010360109619796276,
- 0.010889511555433273,
- -0.07323399186134338,
- 0.019161423668265343,
- -0.007580747362226248,
- 0.00041014893213286996,
- -0.026381883770227432,
- 0.01197037473320961,
- 0.02248489297926426,
- 0.0036139062140136957,
- 0.0033124410547316074,
- 0.022146664559841156,
- -0.06394004076719284,
- -0.017117341980338097,
- 0.04585212469100952,
- 0.021823139861226082,
- 0.001150714815594256,
- 0.029822997748851776,
- -0.014146806672215462,
- 0.008588082157075405,
- 0.023528993129730225,
- 0.01311741303652525,
- -0.0156173687428236,
- -0.036234647035598755,
- -0.03279353305697441,
- 0.028278907760977745,
- -0.026720112189650536,
- -0.019779060035943985,
- 0.044263917952775955,
- 0.021308444440364838,
- -0.033028822392225266,
- -0.008926311507821083,
- 0.03655817359685898,
- -0.03994046524167061,
- -0.04220513254404068,
- -0.04679328575730324,
- -0.031028859317302704,
- 0.002766494872048497,
- -0.03399939462542534,
- 0.03435232862830162,
- 0.0071138436906039715,
- 0.00781603716313839,
- 0.019073190167546272,
- 0.001996288076043129,
- 0.012779184617102146,
- 0.018396731466054916,
- -0.02347017079591751,
- -0.02411721833050251,
- 0.009713062085211277,
- 0.049293238669633865,
- -0.07141049206256866,
- 0.012970357201993465,
- 0.032028842717409134,
- 0.008668962866067886,
- 0.035969946533441544,
- -0.012146842665970325,
- -0.030117111280560493,
- 0.035587601363658905,
- 0.03602876886725426,
- 0.025278961285948753,
- -0.04761679843068123,
- 0.009124837815761566,
- -0.009646886959671974,
- 0.028367141261696815,
- 0.01416151225566864,
- -0.007771920412778854,
- 0.0392640084028244,
- 0.01563207432627678,
- 0.0015257081249728799,
- 0.00803662184625864,
- -0.05482255294919014,
- -0.011485089547932148,
- -0.022690773010253906,
- -0.031293559819459915,
- -0.04008752107620239,
- -0.07988093048334122,
- -0.07470455020666122,
- -0.004584477283060551,
- 0.004779326729476452,
- -0.0015367373125627637,
- -0.004003605339676142,
- 0.01717616431415081,
- -0.07811625301837921,
- -0.022602539509534836,
- -0.015323256142437458,
- 0.033293526619672775,
- 0.002064301399514079,
- 0.009551300667226315,
- -0.03132297098636627,
- 0.03702875226736069,
- 0.03464644029736519,
- 0.03052886761724949,
- -0.03999928757548332,
- -0.032293543219566345,
- -0.01964670978486538,
- 0.01889672316610813,
- 0.013808577321469784,
- 0.011073332279920578,
- 0.030293578281998634,
- -0.001751807052642107,
- -0.036969929933547974,
- 0.00525358272716403,
- 0.03217589855194092,
- -0.025720130652189255,
- 0.002490764483809471,
- -0.027073048055171967,
- -0.029955347999930382,
- 0.0641753301024437,
- 0.008705727756023407,
- 0.04064633324742317,
- 0.013712991029024124,
- 0.03496996685862541,
- 0.027558332309126854,
- -0.041058093309402466,
- 0.005260935518890619,
- 0.0010431800037622452,
- -0.03517584502696991,
- 0.022176075726747513,
- 0.0041837492026388645,
- 0.03179354965686798,
- -0.0016644924180582166
- ],
- "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\Game.txt\n\npublic class Game : IExposable, IDisposable\n{\n\tprivate GameInitData initData;\n\n\tprivate Gravship gravshipInt;\n\n\tpublic sbyte currentMapIndex = -1;\n\n\tprivate GameInfo info = new GameInfo();\n\n\tpublic List components = new List();\n\n\tprivate GameRules rules = new GameRules();\n\n\tprivate Scenario scenarioInt;\n\n\tprivate World worldInt;\n\n\tprivate List