diff --git a/Config/StructureConfigCategory.bytes b/Config/StructureConfigCategory.bytes
index b468c85..5755c19 100644
--- a/Config/StructureConfigCategory.bytes
+++ b/Config/StructureConfigCategory.bytes
@@ -1,129 +1,129 @@
 
 ��	大草棚 �(0d8dP`
 h
-�
-Build_1001��
-Build_1001�u使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。�
-��	竹草屋 �(0d8dP`h�
-Build_1002��
-Build_1002�~竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。�
-H�	茅草屋 �(0d8dP`(h(�
-Build_1003�
-Build_1003�	茅草屋�
-H�	草木屋 �(0d8dP`2h2�
-Build_1004�
-Build_1004�	草木屋�
-H�	木瓦房 �(0d8dP`<h<�
-Build_1005�
-Build_1005�	木瓦房�
-��初级水井 �(0d8d@H�hp��
-Build_2001��
-Build_2001��简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
-��中级水井 �(0d8d@H�hp��
-Build_2002��
-Build_2002��普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
-��高级水井 �(0d8d@H�hp��
-Build_2003��
-Build_2003�u从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
-�	采矿房 ���������0d8d@H�hp���
-Build_2004�
-Build_2004�6在矿洞上建造后，就可以获取矿洞的资源
-��中级采矿房 ���������0d8d@H�hp���
-Build_2005�
-Build_2005�?升级后的采矿房，可以进入矿洞更深处获取资源
-M�石磨 �(0d8dh�
-Build_2006��
-Build_2006�用于磨米磨面�
-i�农田 ���������(0d8d@h�
-Build_2007��
-Build_2007�$开垦好的农田，可种植作物�
-Q�初级渔屋 ���������@H�hp��
-Build_2008�
-Build_2008�初级鱼塘
-Q�中级渔屋 ���������@H�hp��
-Build_2009�
-Build_2009�中级渔屋
-Q�高级渔屋 ���������@H�hp��
-Build_2010�
-Build_2010�高级渔屋
-w�朴素工台 �(0d8dhp��
-Build_3001��
-Build_3001�3简易工作台，用来制造初期所需的工具�
-��工房 �(0d8dhp��
-Build_3002��
-Build_3002�f制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。�
-}�	铁匠铺 �(0d8dhp��
-Build_3003��
-Build_3003�<用于锻造铁质工具，可解锁地图高级的资源。�
-b�	粗衣坊 �(0d8dhp��
-Build_3004��
-Build_3004�!生产制造初级服饰的建筑�
-b�织坊 �(0d8dhp��
-Build_3005��
-Build_3005�$生产高级布料、衣物的场所�
-v�朴素石灶 �(0d8d@hp��
-Build_3006��
-Build_3006�0临时搭建的灶台，可制作简单的饭菜�
-U�炊房 �(0d8d@hp��
-Build_3007��
-Build_3007�制作饭菜的场所�
-y�药炉 �(0d8d@hp��
-Build_3008��
-Build_3008�9临时堆砌的药炉，可满足低级药品制作条件�
-U�药室 �(0d8d@hp��
-Build_3009��
-Build_3009�制作药品的场所�
-h�蚕室 �(0d8dh�
-Build_3010��
-Build_3010�-柔丝吐尽三千丈，留下相思几百层�
-A�瓷窑 �(0d8dh�
-Build_3011��
-Build_3011�瓷窑�
-P�地窖 �(0d8dh�
-Build_3012��
-Build_3012�地窖，腌制食物�
-U�简易粮仓 �(0d8d@H�hp��
-Build_4001��
-Build_4001�初级粮仓�
-O�粮仓 �(0d8d@H�hp��
-Build_4002��
-Build_4002�中级粮仓�
-U�高级粮仓 �(0d8d@H�hp��
-Build_4003��
-Build_4003�高级粮仓�
-J�邮楼 �(0d8dh�
-Build_4004��
-Build_4004�邮楼，运输�
-A�木桥 �(0d8dhp��
-Build_4005��
-Build_4005�木桥
-A�石桥 �(0d8dhp��
-Build_4006��
-Build_4006�石桥
-A�犬舍 �(0d8dh�
-Build_4007��
-Build_4007�犬舍�
-A�鸡圈 �(0d8dh�
-Build_4008��
-Build_4008�鸡圈�
-A�禽舍 �(0d8dh�
-Build_4009��
-Build_4009�禽舍�
-A�学舍 �(0d8dh�
-Build_4010��
-Build_4010�学舍�
-A�酒楼 �(0d8dh�
-Build_4011��
-Build_4011�酒楼�
-A�水车 �(0d8dh�
-Build_4012��
-Build_4012�水车�
-A�武庄 �(0d8dh�
-Build_4013��
-Build_4013�武庄�
-A�宗厅 �(0d8dh�
-Build_4014��
-Build_4014�宗厅�
-Q�田间小屋 �(0d8d@Hh�
-Build_4015��
-Build_4015�田间小屋�
\ No newline at end of file
+�
+Build_1001��
+Build_1001�u使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。�
+��	竹草屋 �(0d8dP`h�
+Build_1002��
+Build_1002�~竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。�
+H�	茅草屋 �(0d8dP`(h(�
+Build_1003�
+Build_1003�	茅草屋�
+H�	草木屋 �(0d8dP`2h2�
+Build_1004�
+Build_1004�	草木屋�
+H�	木瓦房 �(0d8dP`<h<�
+Build_1005�
+Build_1005�	木瓦房�
+��初级水井 �(0d8d@H�hp��
+Build_2001��
+Build_2001��简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
+��中级水井 �(0d8d@H�hp��
+Build_2002��
+Build_2002��普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
+��高级水井 �(0d8d@H�hp��
+Build_2003��
+Build_2003�u从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
+�	采矿房 ���������0d8d@H�hp���
+Build_2004�
+Build_2004�6在矿洞上建造后，就可以获取矿洞的资源
+��中级采矿房 ���������0d8d@H�hp���
+Build_2005�
+Build_2005�?升级后的采矿房，可以进入矿洞更深处获取资源
+M�石磨 �(0d8dh�
+Build_2006��
+Build_2006�用于磨米磨面�
+i�农田 ���������(0d8d@h�
+Build_2007��
+Build_2007�$开垦好的农田，可种植作物�
+Q�初级渔屋 ���������@H�hp��
+Build_2008�
+Build_2008�初级鱼塘
+Q�中级渔屋 ���������@H�hp��
+Build_2009�
+Build_2009�中级渔屋
+Q�高级渔屋 ���������@H�hp��
+Build_2010�
+Build_2010�高级渔屋
+w�朴素工台 �(0d8dhp��
+Build_3001��
+Build_3001�3简易工作台，用来制造初期所需的工具�
+��工房 �(0d8dhp��
+Build_3002��
+Build_3002�f制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。�
+}�	铁匠铺 �(0d8dhp��
+Build_3003��
+Build_3003�<用于锻造铁质工具，可解锁地图高级的资源。�
+b�	粗衣坊 �(0d8dhp��
+Build_3004��
+Build_3004�!生产制造初级服饰的建筑�
+b�织坊 �(0d8dhp��
+Build_3005��
+Build_3005�$生产高级布料、衣物的场所�
+v�朴素石灶 �(0d8d@hp��
+Build_3006��
+Build_3006�0临时搭建的灶台，可制作简单的饭菜�
+U�炊房 �(0d8d@hp��
+Build_3007��
+Build_3007�制作饭菜的场所�
+y�药炉 �(0d8d@hp��
+Build_3008��
+Build_3008�9临时堆砌的药炉，可满足低级药品制作条件�
+U�药室 �(0d8d@hp��
+Build_3009��
+Build_3009�制作药品的场所�
+h�蚕室 �(0d8dh�
+Build_3010��
+Build_3010�-柔丝吐尽三千丈，留下相思几百层�
+A�瓷窑 �(0d8dh�
+Build_3011��
+Build_3011�瓷窑�
+P�地窖 �(0d8dh�
+Build_3012��
+Build_3012�地窖，腌制食物�
+U�简易粮仓 �(0d8d@H�hp��
+Build_4001��
+Build_4001�初级粮仓�
+O�粮仓 �(0d8d@H�hp��
+Build_4002��
+Build_4002�中级粮仓�
+U�高级粮仓 �(0d8d@H�hp��
+Build_4003��
+Build_4003�高级粮仓�
+J�邮楼 �(0d8dh�
+Build_4004��
+Build_4004�邮楼，运输�
+A�木桥 �(0d8dhp��
+Build_4005��
+Build_4005�木桥
+A�石桥 �(0d8dhp��
+Build_4006��
+Build_4006�石桥
+A�犬舍 �(0d8dh�
+Build_4007��
+Build_4007�犬舍�
+A�鸡圈 �(0d8dh�
+Build_4008��
+Build_4008�鸡圈�
+A�禽舍 �(0d8dh�
+Build_4009��
+Build_4009�禽舍�
+A�学舍 �(0d8dh�
+Build_4010��
+Build_4010�学舍�
+A�酒楼 �(0d8dh�
+Build_4011��
+Build_4011�酒楼�
+A�水车 �(0d8dh�
+Build_4012��
+Build_4012�水车�
+A�武庄 �(0d8dh�
+Build_4013��
+Build_4013�武庄�
+A�宗厅 �(0d8dh�
+Build_4014��
+Build_4014�宗厅�
+Q�田间小屋 �(0d8d@Hh�
+Build_4015��
+Build_4015�田间小屋�
\ No newline at end of file
diff --git a/Config/SynthesisConfigCategory.bytes b/Config/SynthesisConfigCategory.bytes
index 9bf3207..a9ade98 100644
Binary files a/Config/SynthesisConfigCategory.bytes and b/Config/SynthesisConfigCategory.bytes differ
diff --git a/Config/TextConfigCategory.bytes b/Config/TextConfigCategory.bytes
index f5d95ac..2db8ccd 100644
--- a/Config/TextConfigCategory.bytes
+++ b/Config/TextConfigCategory.bytes
@@ -5,7 +5,7 @@
 �已完成制作
 )�$该建筑已达到建造数量上限
 )�$材料不足或规模条件未达成
-&�!您的修复零件或金币不足
+�材料或铜币不足
 �道具不足
 �{主角}不在桃谷中
 �种子不足
@@ -68,6 +68,7 @@ A
 &�!当前季节无法种植该作物
 &�!粮仓已满，无法收获作物
 �请先设置农夫
+ �耐久已满，无需修缮
 �抵达中...
 \�W每日起床后一个时辰、下雨时以及雨后一个时辰植物上会蓄满露水
 %� 已枯竭，{再生条件}再生
diff --git a/Excel/Json/c/StructureConfig.txt b/Excel/Json/c/StructureConfig.txt
index 87ec2b9..c3fef09 100644
--- a/Excel/Json/c/StructureConfig.txt
+++ b/Excel/Json/c/StructureConfig.txt
@@ -1,44 +1,44 @@
 {"list":[
-{"_t":"StructureConfig","_id":1001,"Name":"大草棚","Type":1,"Durable":300,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":2,"PoultryNum":0,"Comfortable":10,"Boom":10,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1001","CanMove":1,"Picture":"Build_1001","Describe":"使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。","Remove":1},
-{"_t":"StructureConfig","_id":1002,"Name":"竹草屋","Type":1,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":3,"PoultryNum":0,"Comfortable":30,"Boom":30,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1002","CanMove":1,"Picture":"Build_1002","Describe":"竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。","Remove":1},
-{"_t":"StructureConfig","_id":1003,"Name":"茅草屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":40,"Boom":40,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1003","CanMove":0,"Picture":"Build_1003","Describe":"茅草屋","Remove":1},
-{"_t":"StructureConfig","_id":1004,"Name":"草木屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":50,"Boom":50,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1004","CanMove":0,"Picture":"Build_1004","Describe":"草木屋","Remove":1},
-{"_t":"StructureConfig","_id":1005,"Name":"木瓦房","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":60,"Boom":60,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1005","CanMove":0,"Picture":"Build_1005","Describe":"木瓦房","Remove":1},
-{"_t":"StructureConfig","_id":2001,"Name":"初级水井","Type":2,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2001","CanMove":1,"Picture":"Build_2001","Describe":"简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
-{"_t":"StructureConfig","_id":2002,"Name":"中级水井","Type":2,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2002","CanMove":1,"Picture":"Build_2002","Describe":"普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
-{"_t":"StructureConfig","_id":2003,"Name":"高级水井","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2003","CanMove":1,"Picture":"Build_2003","Describe":"从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
-{"_t":"StructureConfig","_id":2004,"Name":"采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2004","CanMove":0,"Picture":"Build_2004","Describe":"在矿洞上建造后，就可以获取矿洞的资源","Remove":0},
-{"_t":"StructureConfig","_id":2005,"Name":"中级采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2005","CanMove":0,"Picture":"Build_2005","Describe":"升级后的采矿房，可以进入矿洞更深处获取资源","Remove":0},
-{"_t":"StructureConfig","_id":2006,"Name":"石磨","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2006","CanMove":1,"Picture":"Build_2006","Describe":"用于磨米磨面","Remove":1},
-{"_t":"StructureConfig","_id":2007,"Name":"农田","Type":2,"Durable":-1,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":3,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2007","CanMove":1,"Picture":"Build_2007","Describe":"开垦好的农田，可种植作物","Remove":1},
-{"_t":"StructureConfig","_id":2008,"Name":"初级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3003,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2008","CanMove":0,"Picture":"Build_2008","Describe":"初级鱼塘","Remove":0},
-{"_t":"StructureConfig","_id":2009,"Name":"中级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3004,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2009","CanMove":0,"Picture":"Build_2009","Describe":"中级渔屋","Remove":0},
-{"_t":"StructureConfig","_id":2010,"Name":"高级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3005,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2010","CanMove":0,"Picture":"Build_2010","Describe":"高级渔屋","Remove":0},
-{"_t":"StructureConfig","_id":3001,"Name":"朴素工台","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3001","CanMove":1,"Picture":"Build_3001","Describe":"简易工作台，用来制造初期所需的工具","Remove":1},
-{"_t":"StructureConfig","_id":3002,"Name":"工房","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3002","CanMove":1,"Picture":"Build_3002","Describe":"制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。","Remove":1},
-{"_t":"StructureConfig","_id":3003,"Name":"铁匠铺","Type":3,"Durable":3500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3003","CanMove":1,"Picture":"Build_3003","Describe":"用于锻造铁质工具，可解锁地图高级的资源。","Remove":1},
-{"_t":"StructureConfig","_id":3004,"Name":"粗衣坊","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3004","CanMove":1,"Picture":"Build_3004","Describe":"生产制造初级服饰的建筑","Remove":1},
-{"_t":"StructureConfig","_id":3005,"Name":"织坊","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3005","CanMove":1,"Picture":"Build_3005","Describe":"生产高级布料、衣物的场所","Remove":1},
-{"_t":"StructureConfig","_id":3006,"Name":"朴素石灶","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3006","CanMove":1,"Picture":"Build_3006","Describe":"临时搭建的灶台，可制作简单的饭菜","Remove":1},
-{"_t":"StructureConfig","_id":3007,"Name":"炊房","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3007","CanMove":1,"Picture":"Build_3007","Describe":"制作饭菜的场所","Remove":1},
-{"_t":"StructureConfig","_id":3008,"Name":"药炉","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3008","CanMove":1,"Picture":"Build_3008","Describe":"临时堆砌的药炉，可满足低级药品制作条件","Remove":1},
-{"_t":"StructureConfig","_id":3009,"Name":"药室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3009","CanMove":1,"Picture":"Build_3009","Describe":"制作药品的场所","Remove":1},
-{"_t":"StructureConfig","_id":3010,"Name":"蚕室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3010","CanMove":1,"Picture":"Build_3010","Describe":"柔丝吐尽三千丈，留下相思几百层","Remove":1},
-{"_t":"StructureConfig","_id":3011,"Name":"瓷窑","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3011","CanMove":1,"Picture":"Build_3011","Describe":"瓷窑","Remove":1},
-{"_t":"StructureConfig","_id":3012,"Name":"地窖","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3012","CanMove":1,"Picture":"Build_3012","Describe":"地窖，腌制食物","Remove":1},
-{"_t":"StructureConfig","_id":4001,"Name":"简易粮仓","Type":4,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":1000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4001","CanMove":1,"Picture":"Build_4001","Describe":"初级粮仓","Remove":1},
-{"_t":"StructureConfig","_id":4002,"Name":"粮仓","Type":4,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":2000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4002","CanMove":1,"Picture":"Build_4002","Describe":"中级粮仓","Remove":1},
-{"_t":"StructureConfig","_id":4003,"Name":"高级粮仓","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":3000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4003","CanMove":1,"Picture":"Build_4003","Describe":"高级粮仓","Remove":1},
-{"_t":"StructureConfig","_id":4004,"Name":"邮楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4004","CanMove":1,"Picture":"Build_4004","Describe":"邮楼，运输","Remove":1},
-{"_t":"StructureConfig","_id":4005,"Name":"木桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4005","CanMove":1,"Picture":"Build_4005","Describe":"木桥","Remove":0},
-{"_t":"StructureConfig","_id":4006,"Name":"石桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4006","CanMove":1,"Picture":"Build_4006","Describe":"石桥","Remove":0},
-{"_t":"StructureConfig","_id":4007,"Name":"犬舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4007","CanMove":1,"Picture":"Build_4007","Describe":"犬舍","Remove":1},
-{"_t":"StructureConfig","_id":4008,"Name":"鸡圈","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4008","CanMove":1,"Picture":"Build_4008","Describe":"鸡圈","Remove":1},
-{"_t":"StructureConfig","_id":4009,"Name":"禽舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4009","CanMove":1,"Picture":"Build_4009","Describe":"禽舍","Remove":1},
-{"_t":"StructureConfig","_id":4010,"Name":"学舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4010","CanMove":1,"Picture":"Build_4010","Describe":"学舍","Remove":1},
-{"_t":"StructureConfig","_id":4011,"Name":"酒楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4011","CanMove":1,"Picture":"Build_4011","Describe":"酒楼","Remove":1},
-{"_t":"StructureConfig","_id":4012,"Name":"水车","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4012","CanMove":1,"Picture":"Build_4012","Describe":"水车","Remove":1},
-{"_t":"StructureConfig","_id":4013,"Name":"武庄","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4013","CanMove":1,"Picture":"Build_4013","Describe":"武庄","Remove":1},
-{"_t":"StructureConfig","_id":4014,"Name":"宗厅","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4014","CanMove":1,"Picture":"Build_4014","Describe":"宗厅","Remove":1},
-{"_t":"StructureConfig","_id":4015,"Name":"田间小屋","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":7,"Function":5,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4015","CanMove":1,"Picture":"Build_4015","Describe":"田间小屋","Remove":1},
+{"_t":"StructureConfig","_id":1001,"Name":"大草棚","Type":1,"Durable":300,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":2,"PoultryNum":0,"Comfortable":10,"Boom":10,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1001","CanMove":1,"Picture":"Build_1001","Describe":"使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。","Remove":1},
+{"_t":"StructureConfig","_id":1002,"Name":"竹草屋","Type":1,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":3,"PoultryNum":0,"Comfortable":30,"Boom":30,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1002","CanMove":1,"Picture":"Build_1002","Describe":"竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。","Remove":1},
+{"_t":"StructureConfig","_id":1003,"Name":"茅草屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":40,"Boom":40,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1003","CanMove":0,"Picture":"Build_1003","Describe":"茅草屋","Remove":1},
+{"_t":"StructureConfig","_id":1004,"Name":"草木屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":50,"Boom":50,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1004","CanMove":0,"Picture":"Build_1004","Describe":"草木屋","Remove":1},
+{"_t":"StructureConfig","_id":1005,"Name":"木瓦房","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":60,"Boom":60,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1005","CanMove":0,"Picture":"Build_1005","Describe":"木瓦房","Remove":1},
+{"_t":"StructureConfig","_id":2001,"Name":"初级水井","Type":2,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2001","CanMove":1,"Picture":"Build_2001","Describe":"简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
+{"_t":"StructureConfig","_id":2002,"Name":"中级水井","Type":2,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2002","CanMove":1,"Picture":"Build_2002","Describe":"普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
+{"_t":"StructureConfig","_id":2003,"Name":"高级水井","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2003","CanMove":1,"Picture":"Build_2003","Describe":"从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
+{"_t":"StructureConfig","_id":2004,"Name":"采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2004","CanMove":0,"Picture":"Build_2004","Describe":"在矿洞上建造后，就可以获取矿洞的资源","Remove":0},
+{"_t":"StructureConfig","_id":2005,"Name":"中级采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2005","CanMove":0,"Picture":"Build_2005","Describe":"升级后的采矿房，可以进入矿洞更深处获取资源","Remove":0},
+{"_t":"StructureConfig","_id":2006,"Name":"石磨","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2006","CanMove":1,"Picture":"Build_2006","Describe":"用于磨米磨面","Remove":1},
+{"_t":"StructureConfig","_id":2007,"Name":"农田","Type":2,"Durable":-1,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":3,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2007","CanMove":1,"Picture":"Build_2007","Describe":"开垦好的农田，可种植作物","Remove":1},
+{"_t":"StructureConfig","_id":2008,"Name":"初级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3003,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2008","CanMove":0,"Picture":"Build_2008","Describe":"初级鱼塘","Remove":0},
+{"_t":"StructureConfig","_id":2009,"Name":"中级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3004,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2009","CanMove":0,"Picture":"Build_2009","Describe":"中级渔屋","Remove":0},
+{"_t":"StructureConfig","_id":2010,"Name":"高级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3005,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2010","CanMove":0,"Picture":"Build_2010","Describe":"高级渔屋","Remove":0},
+{"_t":"StructureConfig","_id":3001,"Name":"朴素工台","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3001","CanMove":1,"Picture":"Build_3001","Describe":"简易工作台，用来制造初期所需的工具","Remove":1},
+{"_t":"StructureConfig","_id":3002,"Name":"工房","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3002","CanMove":1,"Picture":"Build_3002","Describe":"制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。","Remove":1},
+{"_t":"StructureConfig","_id":3003,"Name":"铁匠铺","Type":3,"Durable":3500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3003","CanMove":1,"Picture":"Build_3003","Describe":"用于锻造铁质工具，可解锁地图高级的资源。","Remove":1},
+{"_t":"StructureConfig","_id":3004,"Name":"粗衣坊","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3004","CanMove":1,"Picture":"Build_3004","Describe":"生产制造初级服饰的建筑","Remove":1},
+{"_t":"StructureConfig","_id":3005,"Name":"织坊","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3005","CanMove":1,"Picture":"Build_3005","Describe":"生产高级布料、衣物的场所","Remove":1},
+{"_t":"StructureConfig","_id":3006,"Name":"朴素石灶","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3006","CanMove":1,"Picture":"Build_3006","Describe":"临时搭建的灶台，可制作简单的饭菜","Remove":1},
+{"_t":"StructureConfig","_id":3007,"Name":"炊房","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3007","CanMove":1,"Picture":"Build_3007","Describe":"制作饭菜的场所","Remove":1},
+{"_t":"StructureConfig","_id":3008,"Name":"药炉","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3008","CanMove":1,"Picture":"Build_3008","Describe":"临时堆砌的药炉，可满足低级药品制作条件","Remove":1},
+{"_t":"StructureConfig","_id":3009,"Name":"药室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3009","CanMove":1,"Picture":"Build_3009","Describe":"制作药品的场所","Remove":1},
+{"_t":"StructureConfig","_id":3010,"Name":"蚕室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3010","CanMove":1,"Picture":"Build_3010","Describe":"柔丝吐尽三千丈，留下相思几百层","Remove":1},
+{"_t":"StructureConfig","_id":3011,"Name":"瓷窑","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3011","CanMove":1,"Picture":"Build_3011","Describe":"瓷窑","Remove":1},
+{"_t":"StructureConfig","_id":3012,"Name":"地窖","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3012","CanMove":1,"Picture":"Build_3012","Describe":"地窖，腌制食物","Remove":1},
+{"_t":"StructureConfig","_id":4001,"Name":"简易粮仓","Type":4,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":1000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4001","CanMove":1,"Picture":"Build_4001","Describe":"初级粮仓","Remove":1},
+{"_t":"StructureConfig","_id":4002,"Name":"粮仓","Type":4,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":2000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4002","CanMove":1,"Picture":"Build_4002","Describe":"中级粮仓","Remove":1},
+{"_t":"StructureConfig","_id":4003,"Name":"高级粮仓","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":3000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4003","CanMove":1,"Picture":"Build_4003","Describe":"高级粮仓","Remove":1},
+{"_t":"StructureConfig","_id":4004,"Name":"邮楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4004","CanMove":1,"Picture":"Build_4004","Describe":"邮楼，运输","Remove":1},
+{"_t":"StructureConfig","_id":4005,"Name":"木桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4005","CanMove":1,"Picture":"Build_4005","Describe":"木桥","Remove":0},
+{"_t":"StructureConfig","_id":4006,"Name":"石桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4006","CanMove":1,"Picture":"Build_4006","Describe":"石桥","Remove":0},
+{"_t":"StructureConfig","_id":4007,"Name":"犬舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4007","CanMove":1,"Picture":"Build_4007","Describe":"犬舍","Remove":1},
+{"_t":"StructureConfig","_id":4008,"Name":"鸡圈","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4008","CanMove":1,"Picture":"Build_4008","Describe":"鸡圈","Remove":1},
+{"_t":"StructureConfig","_id":4009,"Name":"禽舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4009","CanMove":1,"Picture":"Build_4009","Describe":"禽舍","Remove":1},
+{"_t":"StructureConfig","_id":4010,"Name":"学舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4010","CanMove":1,"Picture":"Build_4010","Describe":"学舍","Remove":1},
+{"_t":"StructureConfig","_id":4011,"Name":"酒楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4011","CanMove":1,"Picture":"Build_4011","Describe":"酒楼","Remove":1},
+{"_t":"StructureConfig","_id":4012,"Name":"水车","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4012","CanMove":1,"Picture":"Build_4012","Describe":"水车","Remove":1},
+{"_t":"StructureConfig","_id":4013,"Name":"武庄","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4013","CanMove":1,"Picture":"Build_4013","Describe":"武庄","Remove":1},
+{"_t":"StructureConfig","_id":4014,"Name":"宗厅","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4014","CanMove":1,"Picture":"Build_4014","Describe":"宗厅","Remove":1},
+{"_t":"StructureConfig","_id":4015,"Name":"田间小屋","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":7,"Function":5,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4015","CanMove":1,"Picture":"Build_4015","Describe":"田间小屋","Remove":1},
 ]}
diff --git a/Excel/Json/c/SynthesisConfig.txt b/Excel/Json/c/SynthesisConfig.txt
index 7f4f3c9..d16e21f 100644
--- a/Excel/Json/c/SynthesisConfig.txt
+++ b/Excel/Json/c/SynthesisConfig.txt
@@ -40,6 +40,7 @@
 {"_t":"SynthesisConfig","_id":1039,"Name":"水车","MixtureTpye":1,"MixtureID":3024,"QualityMixtureID":0,"BodyVolume":600,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[100,100,100],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":1040,"Name":"武庄","MixtureTpye":1,"MixtureID":3025,"QualityMixtureID":0,"BodyVolume":600,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[100,100,100],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":1041,"Name":"宗厅","MixtureTpye":1,"MixtureID":3026,"QualityMixtureID":0,"BodyVolume":600,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[100,100,100],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
+{"_t":"SynthesisConfig","_id":1042,"Name":"田间小屋","MixtureTpye":1,"MixtureID":4015,"QualityMixtureID":0,"BodyVolume":100,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[10,10,10],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":2001,"Name":"木板","MixtureTpye":2,"MixtureID":1012,"QualityMixtureID":0,"BodyVolume":0,"TimeConsume":2,"Copies":1,"QualityCopies":0,"StructureID":[3001,3002,3003],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1011],"ItemNum":[5],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":2002,"Name":"石块","MixtureTpye":2,"MixtureID":1014,"QualityMixtureID":0,"BodyVolume":0,"TimeConsume":2,"Copies":1,"QualityCopies":0,"StructureID":[3001,3002,3003],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1013],"ItemNum":[5],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":2003,"Name":"亚麻布","MixtureTpye":2,"MixtureID":1016,"QualityMixtureID":0,"BodyVolume":0,"TimeConsume":2,"Copies":1,"QualityCopies":0,"StructureID":[3003,3004],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1015],"ItemNum":[10],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
diff --git a/Excel/Json/c/TextConfig.txt b/Excel/Json/c/TextConfig.txt
index c8d960f..e596dbd 100644
--- a/Excel/Json/c/TextConfig.txt
+++ b/Excel/Json/c/TextConfig.txt
@@ -5,7 +5,7 @@
 {"_t":"TextConfig","_id":1004,"Text":"已完成制作"},
 {"_t":"TextConfig","_id":1005,"Text":"该建筑已达到建造数量上限"},
 {"_t":"TextConfig","_id":1006,"Text":"材料不足或规模条件未达成"},
-{"_t":"TextConfig","_id":1007,"Text":"您的修复零件或金币不足"},
+{"_t":"TextConfig","_id":1007,"Text":"材料或铜币不足"},
 {"_t":"TextConfig","_id":1008,"Text":"道具不足"},
 {"_t":"TextConfig","_id":1009,"Text":"{主角}不在桃谷中"},
 {"_t":"TextConfig","_id":1010,"Text":"种子不足"},
@@ -68,6 +68,7 @@
 {"_t":"TextConfig","_id":1067,"Text":"当前季节无法种植该作物"},
 {"_t":"TextConfig","_id":1068,"Text":"粮仓已满，无法收获作物"},
 {"_t":"TextConfig","_id":1069,"Text":"请先设置农夫"},
+{"_t":"TextConfig","_id":1070,"Text":"耐久已满，无需修缮"},
 {"_t":"TextConfig","_id":2001,"Text":"抵达中..."},
 {"_t":"TextConfig","_id":2002,"Text":"每日起床后一个时辰、下雨时以及雨后一个时辰植物上会蓄满露水"},
 {"_t":"TextConfig","_id":2003,"Text":"已枯竭，{再生条件}再生"},
diff --git a/Excel/Json/s/StructureConfig.txt b/Excel/Json/s/StructureConfig.txt
index 87ec2b9..c3fef09 100644
--- a/Excel/Json/s/StructureConfig.txt
+++ b/Excel/Json/s/StructureConfig.txt
@@ -1,44 +1,44 @@
 {"list":[
-{"_t":"StructureConfig","_id":1001,"Name":"大草棚","Type":1,"Durable":300,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":2,"PoultryNum":0,"Comfortable":10,"Boom":10,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1001","CanMove":1,"Picture":"Build_1001","Describe":"使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。","Remove":1},
-{"_t":"StructureConfig","_id":1002,"Name":"竹草屋","Type":1,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":3,"PoultryNum":0,"Comfortable":30,"Boom":30,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1002","CanMove":1,"Picture":"Build_1002","Describe":"竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。","Remove":1},
-{"_t":"StructureConfig","_id":1003,"Name":"茅草屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":40,"Boom":40,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1003","CanMove":0,"Picture":"Build_1003","Describe":"茅草屋","Remove":1},
-{"_t":"StructureConfig","_id":1004,"Name":"草木屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":50,"Boom":50,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1004","CanMove":0,"Picture":"Build_1004","Describe":"草木屋","Remove":1},
-{"_t":"StructureConfig","_id":1005,"Name":"木瓦房","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":60,"Boom":60,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1005","CanMove":0,"Picture":"Build_1005","Describe":"木瓦房","Remove":1},
-{"_t":"StructureConfig","_id":2001,"Name":"初级水井","Type":2,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2001","CanMove":1,"Picture":"Build_2001","Describe":"简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
-{"_t":"StructureConfig","_id":2002,"Name":"中级水井","Type":2,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2002","CanMove":1,"Picture":"Build_2002","Describe":"普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
-{"_t":"StructureConfig","_id":2003,"Name":"高级水井","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2003","CanMove":1,"Picture":"Build_2003","Describe":"从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
-{"_t":"StructureConfig","_id":2004,"Name":"采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2004","CanMove":0,"Picture":"Build_2004","Describe":"在矿洞上建造后，就可以获取矿洞的资源","Remove":0},
-{"_t":"StructureConfig","_id":2005,"Name":"中级采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2005","CanMove":0,"Picture":"Build_2005","Describe":"升级后的采矿房，可以进入矿洞更深处获取资源","Remove":0},
-{"_t":"StructureConfig","_id":2006,"Name":"石磨","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2006","CanMove":1,"Picture":"Build_2006","Describe":"用于磨米磨面","Remove":1},
-{"_t":"StructureConfig","_id":2007,"Name":"农田","Type":2,"Durable":-1,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":3,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2007","CanMove":1,"Picture":"Build_2007","Describe":"开垦好的农田，可种植作物","Remove":1},
-{"_t":"StructureConfig","_id":2008,"Name":"初级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3003,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2008","CanMove":0,"Picture":"Build_2008","Describe":"初级鱼塘","Remove":0},
-{"_t":"StructureConfig","_id":2009,"Name":"中级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3004,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2009","CanMove":0,"Picture":"Build_2009","Describe":"中级渔屋","Remove":0},
-{"_t":"StructureConfig","_id":2010,"Name":"高级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3005,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2010","CanMove":0,"Picture":"Build_2010","Describe":"高级渔屋","Remove":0},
-{"_t":"StructureConfig","_id":3001,"Name":"朴素工台","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3001","CanMove":1,"Picture":"Build_3001","Describe":"简易工作台，用来制造初期所需的工具","Remove":1},
-{"_t":"StructureConfig","_id":3002,"Name":"工房","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3002","CanMove":1,"Picture":"Build_3002","Describe":"制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。","Remove":1},
-{"_t":"StructureConfig","_id":3003,"Name":"铁匠铺","Type":3,"Durable":3500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3003","CanMove":1,"Picture":"Build_3003","Describe":"用于锻造铁质工具，可解锁地图高级的资源。","Remove":1},
-{"_t":"StructureConfig","_id":3004,"Name":"粗衣坊","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3004","CanMove":1,"Picture":"Build_3004","Describe":"生产制造初级服饰的建筑","Remove":1},
-{"_t":"StructureConfig","_id":3005,"Name":"织坊","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3005","CanMove":1,"Picture":"Build_3005","Describe":"生产高级布料、衣物的场所","Remove":1},
-{"_t":"StructureConfig","_id":3006,"Name":"朴素石灶","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3006","CanMove":1,"Picture":"Build_3006","Describe":"临时搭建的灶台，可制作简单的饭菜","Remove":1},
-{"_t":"StructureConfig","_id":3007,"Name":"炊房","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3007","CanMove":1,"Picture":"Build_3007","Describe":"制作饭菜的场所","Remove":1},
-{"_t":"StructureConfig","_id":3008,"Name":"药炉","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3008","CanMove":1,"Picture":"Build_3008","Describe":"临时堆砌的药炉，可满足低级药品制作条件","Remove":1},
-{"_t":"StructureConfig","_id":3009,"Name":"药室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3009","CanMove":1,"Picture":"Build_3009","Describe":"制作药品的场所","Remove":1},
-{"_t":"StructureConfig","_id":3010,"Name":"蚕室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3010","CanMove":1,"Picture":"Build_3010","Describe":"柔丝吐尽三千丈，留下相思几百层","Remove":1},
-{"_t":"StructureConfig","_id":3011,"Name":"瓷窑","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3011","CanMove":1,"Picture":"Build_3011","Describe":"瓷窑","Remove":1},
-{"_t":"StructureConfig","_id":3012,"Name":"地窖","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3012","CanMove":1,"Picture":"Build_3012","Describe":"地窖，腌制食物","Remove":1},
-{"_t":"StructureConfig","_id":4001,"Name":"简易粮仓","Type":4,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":1000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4001","CanMove":1,"Picture":"Build_4001","Describe":"初级粮仓","Remove":1},
-{"_t":"StructureConfig","_id":4002,"Name":"粮仓","Type":4,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":2000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4002","CanMove":1,"Picture":"Build_4002","Describe":"中级粮仓","Remove":1},
-{"_t":"StructureConfig","_id":4003,"Name":"高级粮仓","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":3000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4003","CanMove":1,"Picture":"Build_4003","Describe":"高级粮仓","Remove":1},
-{"_t":"StructureConfig","_id":4004,"Name":"邮楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4004","CanMove":1,"Picture":"Build_4004","Describe":"邮楼，运输","Remove":1},
-{"_t":"StructureConfig","_id":4005,"Name":"木桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4005","CanMove":1,"Picture":"Build_4005","Describe":"木桥","Remove":0},
-{"_t":"StructureConfig","_id":4006,"Name":"石桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4006","CanMove":1,"Picture":"Build_4006","Describe":"石桥","Remove":0},
-{"_t":"StructureConfig","_id":4007,"Name":"犬舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4007","CanMove":1,"Picture":"Build_4007","Describe":"犬舍","Remove":1},
-{"_t":"StructureConfig","_id":4008,"Name":"鸡圈","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4008","CanMove":1,"Picture":"Build_4008","Describe":"鸡圈","Remove":1},
-{"_t":"StructureConfig","_id":4009,"Name":"禽舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4009","CanMove":1,"Picture":"Build_4009","Describe":"禽舍","Remove":1},
-{"_t":"StructureConfig","_id":4010,"Name":"学舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4010","CanMove":1,"Picture":"Build_4010","Describe":"学舍","Remove":1},
-{"_t":"StructureConfig","_id":4011,"Name":"酒楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4011","CanMove":1,"Picture":"Build_4011","Describe":"酒楼","Remove":1},
-{"_t":"StructureConfig","_id":4012,"Name":"水车","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4012","CanMove":1,"Picture":"Build_4012","Describe":"水车","Remove":1},
-{"_t":"StructureConfig","_id":4013,"Name":"武庄","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4013","CanMove":1,"Picture":"Build_4013","Describe":"武庄","Remove":1},
-{"_t":"StructureConfig","_id":4014,"Name":"宗厅","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4014","CanMove":1,"Picture":"Build_4014","Describe":"宗厅","Remove":1},
-{"_t":"StructureConfig","_id":4015,"Name":"田间小屋","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":7,"Function":5,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4015","CanMove":1,"Picture":"Build_4015","Describe":"田间小屋","Remove":1},
+{"_t":"StructureConfig","_id":1001,"Name":"大草棚","Type":1,"Durable":300,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":2,"PoultryNum":0,"Comfortable":10,"Boom":10,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1001","CanMove":1,"Picture":"Build_1001","Describe":"使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。","Remove":1},
+{"_t":"StructureConfig","_id":1002,"Name":"竹草屋","Type":1,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":3,"PoultryNum":0,"Comfortable":30,"Boom":30,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1002","CanMove":1,"Picture":"Build_1002","Describe":"竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。","Remove":1},
+{"_t":"StructureConfig","_id":1003,"Name":"茅草屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":40,"Boom":40,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1003","CanMove":0,"Picture":"Build_1003","Describe":"茅草屋","Remove":1},
+{"_t":"StructureConfig","_id":1004,"Name":"草木屋","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":50,"Boom":50,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1004","CanMove":0,"Picture":"Build_1004","Describe":"草木屋","Remove":1},
+{"_t":"StructureConfig","_id":1005,"Name":"木瓦房","Type":1,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":4,"PoultryNum":0,"Comfortable":60,"Boom":60,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_1005","CanMove":0,"Picture":"Build_1005","Describe":"木瓦房","Remove":1},
+{"_t":"StructureConfig","_id":2001,"Name":"初级水井","Type":2,"Durable":800,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2001","CanMove":1,"Picture":"Build_2001","Describe":"简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
+{"_t":"StructureConfig","_id":2002,"Name":"中级水井","Type":2,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2002","CanMove":1,"Picture":"Build_2002","Describe":"普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
+{"_t":"StructureConfig","_id":2003,"Name":"高级水井","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":1,"Function":1002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1001,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2003","CanMove":1,"Picture":"Build_2003","Describe":"从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）","Remove":1},
+{"_t":"StructureConfig","_id":2004,"Name":"采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3001,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2004","CanMove":0,"Picture":"Build_2004","Describe":"在矿洞上建造后，就可以获取矿洞的资源","Remove":0},
+{"_t":"StructureConfig","_id":2005,"Name":"中级采矿房","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":2,"Function":3002,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1004,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":1,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2005","CanMove":0,"Picture":"Build_2005","Describe":"升级后的采矿房，可以进入矿洞更深处获取资源","Remove":0},
+{"_t":"StructureConfig","_id":2006,"Name":"石磨","Type":2,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2006","CanMove":1,"Picture":"Build_2006","Describe":"用于磨米磨面","Remove":1},
+{"_t":"StructureConfig","_id":2007,"Name":"农田","Type":2,"Durable":-1,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":3,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2007","CanMove":1,"Picture":"Build_2007","Describe":"开垦好的农田，可种植作物","Remove":1},
+{"_t":"StructureConfig","_id":2008,"Name":"初级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3003,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2008","CanMove":0,"Picture":"Build_2008","Describe":"初级鱼塘","Remove":0},
+{"_t":"StructureConfig","_id":2009,"Name":"中级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3004,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2009","CanMove":0,"Picture":"Build_2009","Describe":"中级渔屋","Remove":0},
+{"_t":"StructureConfig","_id":2010,"Name":"高级渔屋","Type":2,"Durable":-1,"DurableCoefficient":0,"FirmCoinNum":0,"CompleteMoneyNum":0,"Special":2,"Function":3005,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1007,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_2010","CanMove":0,"Picture":"Build_2010","Describe":"高级渔屋","Remove":0},
+{"_t":"StructureConfig","_id":3001,"Name":"朴素工台","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3001","CanMove":1,"Picture":"Build_3001","Describe":"简易工作台，用来制造初期所需的工具","Remove":1},
+{"_t":"StructureConfig","_id":3002,"Name":"工房","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3002","CanMove":1,"Picture":"Build_3002","Describe":"制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。","Remove":1},
+{"_t":"StructureConfig","_id":3003,"Name":"铁匠铺","Type":3,"Durable":3500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1002,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3003","CanMove":1,"Picture":"Build_3003","Describe":"用于锻造铁质工具，可解锁地图高级的资源。","Remove":1},
+{"_t":"StructureConfig","_id":3004,"Name":"粗衣坊","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3004","CanMove":1,"Picture":"Build_3004","Describe":"生产制造初级服饰的建筑","Remove":1},
+{"_t":"StructureConfig","_id":3005,"Name":"织坊","Type":3,"Durable":2000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1003,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3005","CanMove":1,"Picture":"Build_3005","Describe":"生产高级布料、衣物的场所","Remove":1},
+{"_t":"StructureConfig","_id":3006,"Name":"朴素石灶","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3006","CanMove":1,"Picture":"Build_3006","Describe":"临时搭建的灶台，可制作简单的饭菜","Remove":1},
+{"_t":"StructureConfig","_id":3007,"Name":"炊房","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":4,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1005,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3007","CanMove":1,"Picture":"Build_3007","Describe":"制作饭菜的场所","Remove":1},
+{"_t":"StructureConfig","_id":3008,"Name":"药炉","Type":3,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3008","CanMove":1,"Picture":"Build_3008","Describe":"临时堆砌的药炉，可满足低级药品制作条件","Remove":1},
+{"_t":"StructureConfig","_id":3009,"Name":"药室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":5,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1006,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3009","CanMove":1,"Picture":"Build_3009","Describe":"制作药品的场所","Remove":1},
+{"_t":"StructureConfig","_id":3010,"Name":"蚕室","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3010","CanMove":1,"Picture":"Build_3010","Describe":"柔丝吐尽三千丈，留下相思几百层","Remove":1},
+{"_t":"StructureConfig","_id":3011,"Name":"瓷窑","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3011","CanMove":1,"Picture":"Build_3011","Describe":"瓷窑","Remove":1},
+{"_t":"StructureConfig","_id":3012,"Name":"地窖","Type":3,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_3012","CanMove":1,"Picture":"Build_3012","Describe":"地窖，腌制食物","Remove":1},
+{"_t":"StructureConfig","_id":4001,"Name":"简易粮仓","Type":4,"Durable":1000,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":1000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4001","CanMove":1,"Picture":"Build_4001","Describe":"初级粮仓","Remove":1},
+{"_t":"StructureConfig","_id":4002,"Name":"粮仓","Type":4,"Durable":1500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":2000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4002","CanMove":1,"Picture":"Build_4002","Describe":"中级粮仓","Remove":1},
+{"_t":"StructureConfig","_id":4003,"Name":"高级粮仓","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":6,"Function":3000,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1008,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4003","CanMove":1,"Picture":"Build_4003","Describe":"高级粮仓","Remove":1},
+{"_t":"StructureConfig","_id":4004,"Name":"邮楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4004","CanMove":1,"Picture":"Build_4004","Describe":"邮楼，运输","Remove":1},
+{"_t":"StructureConfig","_id":4005,"Name":"木桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4005","CanMove":1,"Picture":"Build_4005","Describe":"木桥","Remove":0},
+{"_t":"StructureConfig","_id":4006,"Name":"石桥","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":1009,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4006","CanMove":1,"Picture":"Build_4006","Describe":"石桥","Remove":0},
+{"_t":"StructureConfig","_id":4007,"Name":"犬舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4007","CanMove":1,"Picture":"Build_4007","Describe":"犬舍","Remove":1},
+{"_t":"StructureConfig","_id":4008,"Name":"鸡圈","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4008","CanMove":1,"Picture":"Build_4008","Describe":"鸡圈","Remove":1},
+{"_t":"StructureConfig","_id":4009,"Name":"禽舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4009","CanMove":1,"Picture":"Build_4009","Describe":"禽舍","Remove":1},
+{"_t":"StructureConfig","_id":4010,"Name":"学舍","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4010","CanMove":1,"Picture":"Build_4010","Describe":"学舍","Remove":1},
+{"_t":"StructureConfig","_id":4011,"Name":"酒楼","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4011","CanMove":1,"Picture":"Build_4011","Describe":"酒楼","Remove":1},
+{"_t":"StructureConfig","_id":4012,"Name":"水车","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4012","CanMove":1,"Picture":"Build_4012","Describe":"水车","Remove":1},
+{"_t":"StructureConfig","_id":4013,"Name":"武庄","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4013","CanMove":1,"Picture":"Build_4013","Describe":"武庄","Remove":1},
+{"_t":"StructureConfig","_id":4014,"Name":"宗厅","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":0,"Function":0,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4014","CanMove":1,"Picture":"Build_4014","Describe":"宗厅","Remove":1},
+{"_t":"StructureConfig","_id":4015,"Name":"田间小屋","Type":4,"Durable":2500,"DurableCoefficient":1,"FirmCoinNum":100,"CompleteMoneyNum":100,"Special":7,"Function":5,"DwellNumber":0,"PoultryNum":0,"Comfortable":0,"Boom":20,"UpgradeSequence":0,"RelatedTechnology":[],"State":0,"StateAffection":0,"SpecificPoint":0,"ON_OFF":0,"AtcFrequency":0,"Atc":0,"TargetNum":0,"Prefab":"Build_4015","CanMove":1,"Picture":"Build_4015","Describe":"田间小屋","Remove":1},
 ]}
diff --git a/Excel/Json/s/SynthesisConfig.txt b/Excel/Json/s/SynthesisConfig.txt
index 7f4f3c9..d16e21f 100644
--- a/Excel/Json/s/SynthesisConfig.txt
+++ b/Excel/Json/s/SynthesisConfig.txt
@@ -40,6 +40,7 @@
 {"_t":"SynthesisConfig","_id":1039,"Name":"水车","MixtureTpye":1,"MixtureID":3024,"QualityMixtureID":0,"BodyVolume":600,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[100,100,100],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":1040,"Name":"武庄","MixtureTpye":1,"MixtureID":3025,"QualityMixtureID":0,"BodyVolume":600,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[100,100,100],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":1041,"Name":"宗厅","MixtureTpye":1,"MixtureID":3026,"QualityMixtureID":0,"BodyVolume":600,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[100,100,100],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
+{"_t":"SynthesisConfig","_id":1042,"Name":"田间小屋","MixtureTpye":1,"MixtureID":4015,"QualityMixtureID":0,"BodyVolume":100,"TimeConsume":-1,"Copies":1,"QualityCopies":0,"StructureID":[0],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1037,1039,1035],"ItemNum":[10,10,10],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":2001,"Name":"木板","MixtureTpye":2,"MixtureID":1012,"QualityMixtureID":0,"BodyVolume":0,"TimeConsume":2,"Copies":1,"QualityCopies":0,"StructureID":[3001,3002,3003],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1011],"ItemNum":[5],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":2002,"Name":"石块","MixtureTpye":2,"MixtureID":1014,"QualityMixtureID":0,"BodyVolume":0,"TimeConsume":2,"Copies":1,"QualityCopies":0,"StructureID":[3001,3002,3003],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1013],"ItemNum":[5],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
 {"_t":"SynthesisConfig","_id":2003,"Name":"亚麻布","MixtureTpye":2,"MixtureID":1016,"QualityMixtureID":0,"BodyVolume":0,"TimeConsume":2,"Copies":1,"QualityCopies":0,"StructureID":[3003,3004],"SkillCondition":0,"DisplayCondition":0,"Parameter":0,"UnlockCondition":1,"Parameter2":1,"BoomCondition":0,"ScienceId":0,"ItemId":[1015],"ItemNum":[10],"NeedProficiency":0,"ProficiencyPerItem":0,"QualityProficiencyPerItem":0,"ControllableFactor":0,"FactorDemand":[0]},
diff --git a/Excel/Json/s/TextConfig.txt b/Excel/Json/s/TextConfig.txt
index c8d960f..e596dbd 100644
--- a/Excel/Json/s/TextConfig.txt
+++ b/Excel/Json/s/TextConfig.txt
@@ -5,7 +5,7 @@
 {"_t":"TextConfig","_id":1004,"Text":"已完成制作"},
 {"_t":"TextConfig","_id":1005,"Text":"该建筑已达到建造数量上限"},
 {"_t":"TextConfig","_id":1006,"Text":"材料不足或规模条件未达成"},
-{"_t":"TextConfig","_id":1007,"Text":"您的修复零件或金币不足"},
+{"_t":"TextConfig","_id":1007,"Text":"材料或铜币不足"},
 {"_t":"TextConfig","_id":1008,"Text":"道具不足"},
 {"_t":"TextConfig","_id":1009,"Text":"{主角}不在桃谷中"},
 {"_t":"TextConfig","_id":1010,"Text":"种子不足"},
@@ -68,6 +68,7 @@
 {"_t":"TextConfig","_id":1067,"Text":"当前季节无法种植该作物"},
 {"_t":"TextConfig","_id":1068,"Text":"粮仓已满，无法收获作物"},
 {"_t":"TextConfig","_id":1069,"Text":"请先设置农夫"},
+{"_t":"TextConfig","_id":1070,"Text":"耐久已满，无需修缮"},
 {"_t":"TextConfig","_id":2001,"Text":"抵达中..."},
 {"_t":"TextConfig","_id":2002,"Text":"每日起床后一个时辰、下雨时以及雨后一个时辰植物上会蓄满露水"},
 {"_t":"TextConfig","_id":2003,"Text":"已枯竭，{再生条件}再生"},
diff --git a/Excel/StructureConfig.xlsx b/Excel/StructureConfig.xlsx
index 78b259f..d8199e8 100644
Binary files a/Excel/StructureConfig.xlsx and b/Excel/StructureConfig.xlsx differ
diff --git a/Excel/SynthesisConfig.xlsx b/Excel/SynthesisConfig.xlsx
index 8848e15..b2be9c5 100644
Binary files a/Excel/SynthesisConfig.xlsx and b/Excel/SynthesisConfig.xlsx differ
diff --git a/Excel/TextConfig.xlsx b/Excel/TextConfig.xlsx
index fb61f15..5adb2ff 100644
Binary files a/Excel/TextConfig.xlsx and b/Excel/TextConfig.xlsx differ
diff --git a/FGUIProject/FUI_ET/assets/Building/BuildingItem.xml b/FGUIProject/FUI_ET/assets/Building/BuildingItem.xml
index 85e4d2b..9d0bb86 100644
--- a/FGUIProject/FUI_ET/assets/Building/BuildingItem.xml
+++ b/FGUIProject/FUI_ET/assets/Building/BuildingItem.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <component size="320,100" extention="Button">
   <controller name="button" pages="0,up,1,down,2,over,3,selectedOver" selected="0"/>
-  <controller name="canBuild" pages="0,,1," selected="1"/>
+  <controller name="canBuild" pages="0,,1," selected="0"/>
   <displayList>
     <graph id="n0_nd6r" name="n0" xy="0,0" size="320,100" touchable="false" type="rect" lineSize="0" fillColor="#fff0f0f0">
       <gearDisplay controller="button" pages="0"/>
@@ -16,7 +16,7 @@
       <relation target="" sidePair="width-width,height-height"/>
     </graph>
     <loader id="n4_nd6r" name="Icon" xy="1,-1" size="100,100" align="center" vAlign="middle" fill="scale"/>
-    <text id="n5_nd6r" name="Name" xy="158,1" size="98,26" fontSize="18" align="center" vAlign="middle" autoSize="none" text="Name"/>
+    <text id="n5_nd6r" name="Name" xy="158,2" size="98,29" fontSize="20" align="center" vAlign="middle" autoSize="none" bold="true" text="Name"/>
     <text id="n6_yl2h" name="n6" xy="160,70" size="67,26" fontSize="18" autoSize="none" text="已拥有:"/>
     <text id="n7_yl2h" name="OwnNum" xy="229,70" size="35,26" fontSize="18" align="center" autoSize="none" text="10"/>
     <graph id="n8_yl2h" name="n8" xy="0,0" size="30,30" type="eclipse" fillColor="#ff00ff00">
diff --git a/FGUIProject/FUI_ET/assets/Building/Farmland/FarmlandBatchWindow.xml b/FGUIProject/FUI_ET/assets/Building/Farmland/FarmlandBatchWindow.xml
new file mode 100644
index 0000000..b1818d5
--- /dev/null
+++ b/FGUIProject/FUI_ET/assets/Building/Farmland/FarmlandBatchWindow.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="1280,720" pivot="0.5,0.5">
+  <controller name="farmlandState" pages="0,空闲,1,已经播种,3,生长,4,成熟" selected="0"/>
+  <controller name="hasPeople" pages="0,,1," selected="0"/>
+  <controller name="isBatchOperating" alias=" 是否正在进行批量操作" pages="0,,1," selected="0"/>
+  <displayList>
+    <graph id="n1_nrka" name="n1" xy="208,570" size="1000,150" group="n4_nrka" type="rect"/>
+    <list id="n0_nrka" name="PlantSeedList" xy="231,591" size="800,110" group="n4_nrka" layout="row" overflow="scroll" scroll="horizontal" margin="5,5,0,0" lineGap="5" colGap="5" defaultItem="ui://2126z1eanrkav" autoClearItems="true">
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+    </list>
+    <graph id="n3_nrka" name="n3" xy="1046,596" size="2,100" group="n4_nrka" type="rect" fillColor="#ff000000"/>
+    <component id="n7_nrka" name="SeedInfoPopup" src="nrkaw" fileName="Farmland/SeedInfoPopup.xml" xy="210,403" group="n4_nrka"/>
+    <image id="n52_i9fy" name="n52" src="i9fyz" fileName="Images/plant-seed.png" xy="1073,594" size="100,100" group="n4_nrka"/>
+    <image id="n54_i9fy" name="PlantSeedCursor" src="i9fyz" fileName="Images/plant-seed.png" xy="637,385" size="30,30" group="n4_nrka" visible="false"/>
+    <group id="n4_nrka" name="SeedPanel" xy="208,385" size="1000,335" advanced="true">
+      <gearDisplay controller="farmlandState" pages="0"/>
+      <gearDisplay2 controller="isBatchOperating" pages="0" condition="0"/>
+    </group>
+    <graph id="n8_sp3r" name="n8" xy="208,570" size="1000,150" group="n9_sp3r" type="rect"/>
+    <graph id="n10_sp3r" name="n10" xy="872,599" size="2,100" group="n9_sp3r" type="rect" fillColor="#ff000000"/>
+    <loader id="n11_sp3r" name="WaitForPlant_CropIcon" xy="538,606" size="90,90" group="n9_sp3r" align="center" vAlign="middle" fill="scale"/>
+    <text id="n12_sp3r" name="n12" xy="645,609" size="52,24" group="n9_sp3r" fontSize="16" text="状态："/>
+    <text id="n13_sp3r" name="WaitForPlantText" xy="697,609" size="52,24" group="n9_sp3r" fontSize="16" ubb="true" text="待播种"/>
+    <text id="n14_sp3r" name="n14" xy="645,671" size="52,24" group="n9_sp3r" fontSize="16" text="产量："/>
+    <text id="n15_sp3r" name="n15" xy="698,671" size="21,24" group="n9_sp3r" fontSize="16" text="---"/>
+    <group id="n9_sp3r" name="WaitForPlantPanel" xy="208,570" size="1000,150" advanced="true">
+      <gearDisplay controller="farmlandState" pages="1"/>
+      <gearDisplay2 controller="isBatchOperating" pages="0" condition="0"/>
+    </group>
+    <graph id="n18_hm6k" name="n18" xy="208,570" size="1000,150" group="n26_hm6k" type="rect"/>
+    <graph id="n19_hm6k" name="n19" xy="872,599" size="2,100" group="n26_hm6k" type="rect" fillColor="#ff000000"/>
+    <loader id="n20_hm6k" name="Grow_CropIcon" xy="538,606" size="90,90" group="n26_hm6k" align="center" vAlign="middle" fill="scale"/>
+    <text id="n21_hm6k" name="n21" xy="645,609" size="52,24" group="n26_hm6k" fontSize="16" text="状态："/>
+    <text id="n22_hm6k" name="GrowText" xy="697,609" size="52,24" group="n26_hm6k" fontSize="16" ubb="true" text="待播种"/>
+    <text id="n23_hm6k" name="n23" xy="645,671" size="52,24" group="n26_hm6k" fontSize="16" text="产量："/>
+    <text id="n24_hm6k" name="Grow_ProductionNum" xy="698,671" size="21,24" group="n26_hm6k" fontSize="16" ubb="true" text="---"/>
+    <component id="n25_hm6k" name="GrowSpeedUpButton" src="nd6r3" fileName="GreenButton.xml" xy="906,622" size="100,50" group="n26_hm6k">
+      <Button title="加速"/>
+    </component>
+    <group id="n26_hm6k" name="GrowPanel" xy="208,570" size="1000,150" advanced="true">
+      <gearDisplay controller="farmlandState" pages="3"/>
+      <gearDisplay2 controller="isBatchOperating" pages="0" condition="0"/>
+    </group>
+    <graph id="n27_ifd4" name="n27" xy="208,570" size="1000,150" group="n35_ifd4" type="rect"/>
+    <graph id="n28_ifd4" name="n28" xy="872,599" size="2,100" group="n35_ifd4" type="rect" fillColor="#ff000000"/>
+    <loader id="n29_ifd4" name="Harvest_CropIcon" xy="538,606" size="90,90" group="n35_ifd4" align="center" vAlign="middle" fill="scale"/>
+    <text id="n30_ifd4" name="n30" xy="645,609" size="52,24" group="n35_ifd4" fontSize="16" text="状态："/>
+    <text id="n31_ifd4" name="HarvestText" xy="697,609" size="52,24" group="n35_ifd4" fontSize="16" ubb="true" text="已成熟"/>
+    <text id="n32_ifd4" name="n32" xy="645,671" size="52,24" group="n35_ifd4" fontSize="16" text="产量："/>
+    <text id="n33_ifd4" name="Harvest_ProductionNum" xy="698,671" size="21,24" group="n35_ifd4" fontSize="16" ubb="true" text="---"/>
+    <image id="n53_i9fy" name="n53" src="i9fy10" fileName="Images/sickle.png" xy="990,593" size="100,100" group="n35_ifd4"/>
+    <image id="n55_i9fy" name="HarvestCursor" src="i9fy10" fileName="Images/sickle.png" xy="637,385" size="30,30" group="n35_ifd4" visible="false"/>
+    <group id="n35_ifd4" name="HarvestPanel" xy="208,385" size="1000,335" advanced="true">
+      <gearDisplay controller="farmlandState" pages="4"/>
+      <gearDisplay2 controller="isBatchOperating" pages="0" condition="0"/>
+    </group>
+    <component id="n17_sp3r" name="RemoveButton" src="nd6r3" fileName="GreenButton.xml" xy="614,521" size="114,49">
+      <gearDisplay controller="isBatchOperating" pages="0"/>
+      <Button title="拆除"/>
+    </component>
+    <component id="n5_nrka" name="CloseButton" src="nd6r3" fileName="GreenButton.xml" xy="1172,544" size="53,49">
+      <gearDisplay controller="isBatchOperating" pages="0"/>
+      <gearXY controller="farmlandState" pages="0,1,3,4" values="1172,544|1172,547|1172,545|1172,545"/>
+      <Button title="X"/>
+    </component>
+    <graph id="n44_m5kw" name="n44" xy="54,498" size="50,2" group="n39_m5kw" type="rect" fillColor="#ff000000"/>
+    <graph id="n38_m5kw" name="n38" xy="89,492" size="120,228" group="n39_m5kw" type="rect"/>
+    <graph id="n51_wnqa" name="n51" xy="99,505" size="101,101" group="n39_m5kw" type="rect"/>
+    <loader id="n40_m5kw" name="Farmer_Icon" xy="99,505" size="100,100" group="n39_m5kw" fill="scale">
+      <gearDisplay controller="hasPeople" pages="1"/>
+    </loader>
+    <text id="n41_m5kw" name="Farmer_Name" xy="106,622" size="84,29" group="n39_m5kw" fontSize="20" align="center" vAlign="middle" text="农夫名字">
+      <gearDisplay controller="hasPeople" pages="1"/>
+    </text>
+    <text id="n42_m5kw" name="n39" xy="99,672" size="64,29" group="n39_m5kw" fontSize="20" vAlign="middle" autoSize="none" text="劳力：">
+      <gearDisplay controller="hasPeople" pages="1"/>
+    </text>
+    <text id="n43_m5kw" name="Farmer_Labor" xy="158,671" size="40,29" group="n39_m5kw" fontSize="20" align="center" vAlign="middle" autoSize="none" text="99">
+      <gearDisplay controller="hasPeople" pages="1"/>
+    </text>
+    <graph id="n45_m5kw" name="n45" xy="70,498" size="2,20" group="n39_m5kw" type="rect" fillColor="#ff000000"/>
+    <graph id="n46_m5kw" name="n46" xy="57,517" size="28,54" group="n39_m5kw" type="rect"/>
+    <text id="n47_m5kw" name="n47" xy="57,518" size="27,52" group="n39_m5kw" fontSize="18" align="center" vAlign="middle" autoSize="none" text="农夫"/>
+    <component id="n48_m5kw" name="CancelFarmerButton" src="kmdlp" fileName="WorkerCancelButton.xml" xy="175,489" size="40,40" group="n39_m5kw">
+      <gearDisplay controller="hasPeople" pages="1"/>
+    </component>
+    <component id="n49_m5kw" name="AddFarmerButton" src="nd6r3" fileName="GreenButton.xml" xy="99,505" size="100,100" group="n39_m5kw">
+      <gearDisplay controller="hasPeople" pages="0"/>
+      <Button title="+"/>
+    </component>
+    <text id="n50_wnqa" name="PeopleState" xy="124,581" size="52,24" group="n39_m5kw" fontSize="16" text="在路上">
+      <gearDisplay controller="hasPeople" pages="1"/>
+    </text>
+    <group id="n39_m5kw" name="FarmerInfoGroup" xy="54,489" size="161,231" advanced="true">
+      <gearDisplay controller="isBatchOperating" pages="0"/>
+    </group>
+  </displayList>
+</component>
\ No newline at end of file
diff --git a/FGUIProject/FUI_ET/assets/Building/Images/plant-seed.png b/FGUIProject/FUI_ET/assets/Building/Images/plant-seed.png
new file mode 100644
index 0000000..245215f
--- /dev/null
+++ b/FGUIProject/FUI_ET/assets/Building/Images/plant-seed.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58727bfce094fac4b29c5f691623ff540da03edb638f4de0ffed2afffd992977
+size 2575
diff --git a/FGUIProject/FUI_ET/assets/Building/Images/sickle.png b/FGUIProject/FUI_ET/assets/Building/Images/sickle.png
new file mode 100644
index 0000000..738bbe9
--- /dev/null
+++ b/FGUIProject/FUI_ET/assets/Building/Images/sickle.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f378b2f9ebeb1b52d1efc70c35e4b35a0b1c0a72c771371b05651ae6d62d5cfe
+size 2231
diff --git a/FGUIProject/FUI_ET/assets/Building/package.xml b/FGUIProject/FUI_ET/assets/Building/package.xml
index 4137e3b..1669694 100644
--- a/FGUIProject/FUI_ET/assets/Building/package.xml
+++ b/FGUIProject/FUI_ET/assets/Building/package.xml
@@ -34,6 +34,9 @@
     <component id="nrkav" name="PlantSeedItem.xml" path="/Farmland/" exported="true"/>
     <component id="nrkaw" name="SeedInfoPopup.xml" path="/Farmland/"/>
     <component id="ifd4x" name="IconButton.xml" path="/Farmland/"/>
+    <component id="igeqy" name="FarmlandBatchWindow.xml" path="/Farmland/" exported="true"/>
+    <image id="i9fyz" name="plant-seed.png" path="/Images/"/>
+    <image id="i9fy10" name="sickle.png" path="/Images/"/>
   </resources>
   <publish name="" genCode="true"/>
 </packageDescription>
\ No newline at end of file
diff --git a/Server/Hotfix/Demo/Unit/UnitFactory.cs b/Server/Hotfix/Demo/Unit/UnitFactory.cs
index a4dfb48..22e92a2 100644
--- a/Server/Hotfix/Demo/Unit/UnitFactory.cs
+++ b/Server/Hotfix/Demo/Unit/UnitFactory.cs
@@ -70,7 +70,6 @@ namespace ET
                 InitWeather(unit);
             }
             unit.InitPeopleNumberic();
-
             return unit;
         }
 
diff --git a/Server/Model/Base/StructBsonSerialize.cs b/Server/Model/Base/StructBsonSerialize.cs
index 14ace7e..78e4daa 100644
--- a/Server/Model/Base/StructBsonSerialize.cs
+++ b/Server/Model/Base/StructBsonSerialize.cs
@@ -1,9 +1,12 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Reflection;
 using MongoDB.Bson;
 using MongoDB.Bson.IO;
 using MongoDB.Bson.Serialization;
+using MongoDB.Bson.Serialization.Attributes;
+using MongoDB.Bson.Serialization.Options;
 using MongoDB.Bson.Serialization.Serializers;
 
 namespace ET
@@ -44,7 +47,12 @@ namespace ET
                 FieldInfo field = actualType.GetField(name,BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                 if (field != null)
                 {
-                    object value = BsonSerializer.Deserialize(bsonReader, field.FieldType);
+                    
+                    var deserializer = BsonSerializer.LookupSerializer(field.FieldType);
+
+                    deserializer = ApplyRepresentationConfig(deserializer, field);
+                    
+                    object value = deserializer.Deserialize(BsonDeserializationContext.CreateRoot(bsonReader));
                     field.SetValue(obj, value);
                 }
             }
@@ -53,5 +61,27 @@ namespace ET
 
             return (TValue) obj;
         }
+
+        protected IBsonSerializer ApplyRepresentationConfig(IBsonSerializer deserializer, FieldInfo field)
+        {
+            System.Object[] myAttributes = field.GetCustomAttributes(typeof(BsonRepresentationAttribute), false);
+            if (myAttributes.Length > 0)
+            {
+                // 参考BsonRepresentationAttribute中的Apply的写法，那个方法是个protect的，调用不到
+                var representationAttr = myAttributes[0] as BsonRepresentationAttribute;
+                if (deserializer is IRepresentationConfigurable configurable)
+                {
+                    deserializer = configurable.WithRepresentation(representationAttr.Representation);
+                }
+                        
+                if (deserializer is IRepresentationConverterConfigurable converterConfigurable)
+                {
+                    RepresentationConverter converter = new RepresentationConverter(representationAttr.AllowOverflow, representationAttr.AllowTruncation);
+                    deserializer = converterConfigurable.WithConverter(converter);
+                }
+            }
+
+            return deserializer;
+        }
     }
 }
diff --git a/Server/Model/Generate/Config/StructureConfig.cs b/Server/Model/Generate/Config/StructureConfig.cs
index e0a615a..18c4966 100644
--- a/Server/Model/Generate/Config/StructureConfig.cs
+++ b/Server/Model/Generate/Config/StructureConfig.cs
@@ -122,41 +122,44 @@ namespace ET
 		/// <summary>升级序列</summary>
 		[ProtoMember(14)]
 		public int UpgradeSequence { get; set; }
-		/// <summary>关联BUFF</summary>
+		/// <summary>关联科技</summary>
 		[ProtoMember(15)]
+		public int[] RelatedTechnology { get; set; }
+		/// <summary>关联BUFF</summary>
+		[ProtoMember(16)]
 		public int State { get; set; }
 		/// <summary>BUFF效果</summary>
-		[ProtoMember(16)]
+		[ProtoMember(17)]
 		public int StateAffection { get; set; }
 		/// <summary>特定点</summary>
-		[ProtoMember(17)]
+		[ProtoMember(18)]
 		public int SpecificPoint { get; set; }
 		/// <summary>开关功能</summary>
-		[ProtoMember(18)]
+		[ProtoMember(19)]
 		public int ON_OFF { get; set; }
 		/// <summary>攻击频率</summary>
-		[ProtoMember(19)]
+		[ProtoMember(20)]
 		public int AtcFrequency { get; set; }
 		/// <summary>攻击力</summary>
-		[ProtoMember(20)]
+		[ProtoMember(21)]
 		public int Atc { get; set; }
 		/// <summary>目标数量</summary>
-		[ProtoMember(21)]
+		[ProtoMember(22)]
 		public int TargetNum { get; set; }
 		/// <summary>预置文件</summary>
-		[ProtoMember(22)]
+		[ProtoMember(23)]
 		public string Prefab { get; set; }
 		/// <summary>可否移动</summary>
-		[ProtoMember(23)]
+		[ProtoMember(24)]
 		public int CanMove { get; set; }
 		/// <summary>图标</summary>
-		[ProtoMember(24)]
+		[ProtoMember(25)]
 		public string Picture { get; set; }
 		/// <summary>描述</summary>
-		[ProtoMember(25)]
+		[ProtoMember(26)]
 		public string Describe { get; set; }
 		/// <summary>可拆除</summary>
-		[ProtoMember(26)]
+		[ProtoMember(27)]
 		public int Remove { get; set; }
 
 	}
diff --git a/ThirdParty/UnityEngine/UnityEngine.csproj b/ThirdParty/UnityEngine/UnityEngine.csproj
index d656e1a..605d788 100644
--- a/ThirdParty/UnityEngine/UnityEngine.csproj
+++ b/ThirdParty/UnityEngine/UnityEngine.csproj
@@ -15,4 +15,8 @@
       <OutputPath>..\..\Bin\</OutputPath>
     </PropertyGroup>
 
+    <ItemGroup>
+      <PackageReference Include="MongoDB.Bson" Version="2.13.3" />
+    </ItemGroup>
+
 </Project>
diff --git a/ThirdParty/UnityEngine/Vector2.cs b/ThirdParty/UnityEngine/Vector2.cs
index 3a0ec47..c870f28 100644
--- a/ThirdParty/UnityEngine/Vector2.cs
+++ b/ThirdParty/UnityEngine/Vector2.cs
@@ -1,5 +1,7 @@
 ﻿using System;
 using System.Globalization;
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization.Attributes;
 
 namespace UnityEngine
 {
@@ -9,7 +11,9 @@ namespace UnityEngine
         public static readonly Vector2 zero = new Vector2();
         public static readonly Vector2 one = new Vector2(1f, 1f);
         
+        [BsonRepresentation(BsonType.Double, AllowTruncation = true)]
         public float x;
+        [BsonRepresentation(BsonType.Double, AllowTruncation = true)]
         public float y;
         
         public static implicit operator Vector2(Vector3 v)
diff --git a/Unity/Animancer.FSM.csproj b/Unity/Animancer.FSM.csproj
index 10f0251..8c724c1 100644
--- a/Unity/Animancer.FSM.csproj
+++ b/Unity/Animancer.FSM.csproj
@@ -53,7 +53,7 @@
     <UnityVersion>2021.3.7f1c1</UnityVersion>
   </PropertyGroup>
   <ItemGroup>
-    <Analyzer Include="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers\Microsoft.Unity.Analyzers.dll" />
+    <Analyzer Include="D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers\Microsoft.Unity.Analyzers.dll" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Assets\ThirdParty\Animancer\Utilities\FSM\StateMachine1.StateSelector.cs" />
@@ -310,6 +310,9 @@
     <Reference Include="UnityEditor.Graphs">
       <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll</HintPath>
     </Reference>
+    <Reference Include="UnityEditor.Android.Extensions">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll</HintPath>
+    </Reference>
     <Reference Include="UnityEditor.WindowsStandalone.Extensions">
       <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll</HintPath>
     </Reference>
@@ -346,6 +349,12 @@
     <Reference Include="NCalc">
       <HintPath>Assets\ThirdParty\NCalc\NCalc.dll</HintPath>
     </Reference>
+    <Reference Include="Unity.Android.Types">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll</HintPath>
+    </Reference>
+    <Reference Include="Unity.Android.Gradle">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll</HintPath>
+    </Reference>
     <Reference Include="mscorlib">
       <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\mscorlib.dll</HintPath>
     </Reference>
diff --git a/Unity/Animancer.csproj b/Unity/Animancer.csproj
index d329335..779372b 100644
--- a/Unity/Animancer.csproj
+++ b/Unity/Animancer.csproj
@@ -53,7 +53,7 @@
     <UnityVersion>2021.3.7f1c1</UnityVersion>
   </PropertyGroup>
   <ItemGroup>
-    <Analyzer Include="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers\Microsoft.Unity.Analyzers.dll" />
+    <Analyzer Include="D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers\Microsoft.Unity.Analyzers.dll" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Assets\ThirdParty\Animancer\Internal\Editor\Transition Preview Window\TransitionPreviewWindow.Animations.cs" />
@@ -447,6 +447,9 @@
     <Reference Include="UnityEditor.Graphs">
       <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll</HintPath>
     </Reference>
+    <Reference Include="UnityEditor.Android.Extensions">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll</HintPath>
+    </Reference>
     <Reference Include="UnityEditor.WindowsStandalone.Extensions">
       <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll</HintPath>
     </Reference>
@@ -483,6 +486,12 @@
     <Reference Include="NCalc">
       <HintPath>Assets\ThirdParty\NCalc\NCalc.dll</HintPath>
     </Reference>
+    <Reference Include="Unity.Android.Types">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll</HintPath>
+    </Reference>
+    <Reference Include="Unity.Android.Gradle">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll</HintPath>
+    </Reference>
     <Reference Include="mscorlib">
       <HintPath>C:\Program Files\Unity\Hub\Editor\2021.3.7f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\mscorlib.dll</HintPath>
     </Reference>
diff --git a/Unity/Assets/AssetBundleCollectorSetting.asset b/Unity/Assets/AssetBundleCollectorSetting.asset
index 9c199b8..753b214 100644
--- a/Unity/Assets/AssetBundleCollectorSetting.asset
+++ b/Unity/Assets/AssetBundleCollectorSetting.asset
@@ -67,6 +67,12 @@ MonoBehaviour:
       PackRuleName: PackDirectory
       FilterRuleName: CollectPrefab
       AssetTags: 
+    - CollectPath: Assets/Bundles/Crop
+      CollectorType: 0
+      AddressRuleName: ExtAsPrefix
+      PackRuleName: PackDirectory
+      FilterRuleName: CollectPrefab
+      AssetTags: 
   - GroupName: People
     GroupDesc: 
     AssetTags: 
diff --git a/Unity/Assets/Bundles/Building/Build_2007.prefab b/Unity/Assets/Bundles/Building/Build_2007.prefab
index a7a89c9..eb93ecf 100644
--- a/Unity/Assets/Bundles/Building/Build_2007.prefab
+++ b/Unity/Assets/Bundles/Building/Build_2007.prefab
@@ -10,7 +10,7 @@ GameObject:
   m_Component:
   - component: {fileID: 5770049575758657344}
   m_Layer: 0
-  m_Name: Build2007
+  m_Name: Build_2007
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -80,25 +80,45 @@ PrefabInstance:
       propertyPath: m_WasSpriteAssigned
       value: 1
       objectReference: {fileID: 0}
+    - target: {fileID: 731700310857263707, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Enabled
+      value: 1
+      objectReference: {fileID: 0}
     - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
         type: 3}
       propertyPath: m_Size.x
-      value: 4.956482
+      value: 3.98
       objectReference: {fileID: 0}
     - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
         type: 3}
       propertyPath: m_Size.y
-      value: 1.2059467
+      value: 2.26
       objectReference: {fileID: 0}
     - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
         type: 3}
       propertyPath: m_Offset.x
-      value: 1.0328364
+      value: 1.01
       objectReference: {fileID: 0}
     - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
         type: 3}
       propertyPath: m_Offset.y
-      value: 1.2449136
+      value: 0.06
+      objectReference: {fileID: 0}
+    - target: {fileID: 1762022180295558516, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1762022180295558516, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2028956815253182832, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_IsActive
+      value: 1
       objectReference: {fileID: 0}
     - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
         type: 3}
@@ -171,6 +191,11 @@ PrefabInstance:
       value: 
       objectReference: {fileID: 21300000, guid: 9f892ed4faf117f48affb363bc364751,
         type: 3}
+    - target: {fileID: 4180406061585001569, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Enabled
+      value: 1
+      objectReference: {fileID: 0}
     - target: {fileID: 4180406061585001569, guid: 6c211c43825049b49a628486db1742df,
         type: 3}
       propertyPath: m_WasSpriteAssigned
@@ -181,6 +206,56 @@ PrefabInstance:
       propertyPath: m_Name
       value: Build_Base
       objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.newSize.x
+      value: 5.12
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.newSize.y
+      value: 5.12
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.oldSize.x
+      value: 4.41
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.oldSize.y
+      value: 2.26
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[1].x
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[1].y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[2].x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[2].y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[3].x
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[3].y
+      value: 1
+      objectReference: {fileID: 0}
     - target: {fileID: 7285514224346109702, guid: 6c211c43825049b49a628486db1742df,
         type: 3}
       propertyPath: m_Size.x
@@ -221,7 +296,8 @@ PrefabInstance:
       propertyPath: m_SpriteTilingProperty.oldSize.y
       value: 5.12
       objectReference: {fileID: 0}
-    m_RemovedComponents: []
+    m_RemovedComponents:
+    - {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df, type: 3}
   m_SourcePrefab: {fileID: 100100000, guid: 6c211c43825049b49a628486db1742df, type: 3}
 --- !u!4 &1803081211884258168 stripped
 Transform:
@@ -229,3 +305,38 @@ Transform:
     type: 3}
   m_PrefabInstance: {fileID: 2523737510876753688}
   m_PrefabAsset: {fileID: 0}
+--- !u!1 &4552664905066821224 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 2028956815253182832, guid: 6c211c43825049b49a628486db1742df,
+    type: 3}
+  m_PrefabInstance: {fileID: 2523737510876753688}
+  m_PrefabAsset: {fileID: 0}
+--- !u!60 &359396039108227649
+PolygonCollider2D:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4552664905066821224}
+  m_Enabled: 1
+  m_Density: 1
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_UsedByEffector: 0
+  m_UsedByComposite: 0
+  m_Offset: {x: 0, y: 0}
+  m_SpriteTilingProperty:
+    border: {x: 0, y: 0, z: 0, w: 0}
+    pivot: {x: 0.5, y: 0}
+    oldSize: {x: 4.41, y: 2.26}
+    newSize: {x: 5.12, y: 5.12}
+    adaptiveTilingThreshold: 0.5
+    drawMode: 0
+    adaptiveTiling: 0
+  m_AutoTiling: 0
+  m_Points:
+    m_Paths:
+    - - {x: 0, y: 0}
+      - {x: -2, y: 1}
+      - {x: 0, y: 2}
+      - {x: 2, y: 1}
diff --git a/Unity/Assets/Bundles/Building/Build_4015.prefab b/Unity/Assets/Bundles/Building/Build_4015.prefab
new file mode 100644
index 0000000..6310106
--- /dev/null
+++ b/Unity/Assets/Bundles/Building/Build_4015.prefab
@@ -0,0 +1,251 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5770049575758657351
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5770049575758657344}
+  m_Layer: 0
+  m_Name: Build_4015
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &5770049575758657344
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5770049575758657351}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 7451362288791825510}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &6731552888226856966
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 5770049575758657344}
+    m_Modifications:
+    - target: {fileID: 71363063701118114, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Size.x
+      value: 3.3567417
+      objectReference: {fileID: 0}
+    - target: {fileID: 71363063701118114, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Size.y
+      value: 5.123616
+      objectReference: {fileID: 0}
+    - target: {fileID: 71363063701118114, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Center.x
+      value: 1.0730132
+      objectReference: {fileID: 0}
+    - target: {fileID: 71363063701118114, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Center.y
+      value: 1.5804253
+      objectReference: {fileID: 0}
+    - target: {fileID: 220319652435891486, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Sprite
+      value: 
+      objectReference: {fileID: 21300000, guid: 3aef39dd78e395747897e0f593f078d8,
+        type: 3}
+    - target: {fileID: 220319652435891486, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_WasSpriteAssigned
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Size.x
+      value: 3.31
+      objectReference: {fileID: 0}
+    - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Size.y
+      value: 4.96
+      objectReference: {fileID: 0}
+    - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Offset.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1170174872867028032, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Offset.y
+      value: 2.49
+      objectReference: {fileID: 0}
+    - target: {fileID: 1762022180295558516, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1762022180295558516, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001569, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Sprite
+      value: 
+      objectReference: {fileID: 21300000, guid: 1dfd28bf2d622fd4598958d9968cbb90,
+        type: 3}
+    - target: {fileID: 4180406061585001569, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_WasSpriteAssigned
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4180406061585001575, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Name
+      value: Build_Base
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.oldSize.x
+      value: 5.12
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.oldSize.y
+      value: 5.12
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[1].x
+      value: -5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[1].y
+      value: 2.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[2].x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[2].y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[3].x
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6016910173537287446, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Points.m_Paths.Array.data[0].Array.data[3].y
+      value: 2.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7285514224346109702, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Size.x
+      value: 9.38246
+      objectReference: {fileID: 0}
+    - target: {fileID: 7285514224346109702, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Size.y
+      value: 2.3156226
+      objectReference: {fileID: 0}
+    - target: {fileID: 7285514224346109702, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Offset.x
+      value: -0.0838356
+      objectReference: {fileID: 0}
+    - target: {fileID: 7285514224346109702, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_Offset.y
+      value: 2.210794
+      objectReference: {fileID: 0}
+    - target: {fileID: 7285514224346109702, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.oldSize.x
+      value: 10.24
+      objectReference: {fileID: 0}
+    - target: {fileID: 7285514224346109702, guid: 6c211c43825049b49a628486db1742df,
+        type: 3}
+      propertyPath: m_SpriteTilingProperty.oldSize.y
+      value: 10.24
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 6c211c43825049b49a628486db1742df, type: 3}
+--- !u!4 &7451362288791825510 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 4180406061585001568, guid: 6c211c43825049b49a628486db1742df,
+    type: 3}
+  m_PrefabInstance: {fileID: 6731552888226856966}
+  m_PrefabAsset: {fileID: 0}
diff --git a/Unity/Assets/Bundles/Building/Build_4015.prefab.meta b/Unity/Assets/Bundles/Building/Build_4015.prefab.meta
new file mode 100644
index 0000000..3f9c565
--- /dev/null
+++ b/Unity/Assets/Bundles/Building/Build_4015.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2dad1c00862037140bcc28ebb3fc25cd
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: building.unity3d
+  assetBundleVariant: 
diff --git a/Unity/Assets/Bundles/Config/StructureConfigCategory.bytes b/Unity/Assets/Bundles/Config/StructureConfigCategory.bytes
index b468c85..5755c19 100644
--- a/Unity/Assets/Bundles/Config/StructureConfigCategory.bytes
+++ b/Unity/Assets/Bundles/Config/StructureConfigCategory.bytes
@@ -1,129 +1,129 @@
 
 ��	大草棚 �(0d8dP`
 h
-�
-Build_1001��
-Build_1001�u使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。�
-��	竹草屋 �(0d8dP`h�
-Build_1002��
-Build_1002�~竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。�
-H�	茅草屋 �(0d8dP`(h(�
-Build_1003�
-Build_1003�	茅草屋�
-H�	草木屋 �(0d8dP`2h2�
-Build_1004�
-Build_1004�	草木屋�
-H�	木瓦房 �(0d8dP`<h<�
-Build_1005�
-Build_1005�	木瓦房�
-��初级水井 �(0d8d@H�hp��
-Build_2001��
-Build_2001��简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
-��中级水井 �(0d8d@H�hp��
-Build_2002��
-Build_2002��普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
-��高级水井 �(0d8d@H�hp��
-Build_2003��
-Build_2003�u从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
-�	采矿房 ���������0d8d@H�hp���
-Build_2004�
-Build_2004�6在矿洞上建造后，就可以获取矿洞的资源
-��中级采矿房 ���������0d8d@H�hp���
-Build_2005�
-Build_2005�?升级后的采矿房，可以进入矿洞更深处获取资源
-M�石磨 �(0d8dh�
-Build_2006��
-Build_2006�用于磨米磨面�
-i�农田 ���������(0d8d@h�
-Build_2007��
-Build_2007�$开垦好的农田，可种植作物�
-Q�初级渔屋 ���������@H�hp��
-Build_2008�
-Build_2008�初级鱼塘
-Q�中级渔屋 ���������@H�hp��
-Build_2009�
-Build_2009�中级渔屋
-Q�高级渔屋 ���������@H�hp��
-Build_2010�
-Build_2010�高级渔屋
-w�朴素工台 �(0d8dhp��
-Build_3001��
-Build_3001�3简易工作台，用来制造初期所需的工具�
-��工房 �(0d8dhp��
-Build_3002��
-Build_3002�f制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。�
-}�	铁匠铺 �(0d8dhp��
-Build_3003��
-Build_3003�<用于锻造铁质工具，可解锁地图高级的资源。�
-b�	粗衣坊 �(0d8dhp��
-Build_3004��
-Build_3004�!生产制造初级服饰的建筑�
-b�织坊 �(0d8dhp��
-Build_3005��
-Build_3005�$生产高级布料、衣物的场所�
-v�朴素石灶 �(0d8d@hp��
-Build_3006��
-Build_3006�0临时搭建的灶台，可制作简单的饭菜�
-U�炊房 �(0d8d@hp��
-Build_3007��
-Build_3007�制作饭菜的场所�
-y�药炉 �(0d8d@hp��
-Build_3008��
-Build_3008�9临时堆砌的药炉，可满足低级药品制作条件�
-U�药室 �(0d8d@hp��
-Build_3009��
-Build_3009�制作药品的场所�
-h�蚕室 �(0d8dh�
-Build_3010��
-Build_3010�-柔丝吐尽三千丈，留下相思几百层�
-A�瓷窑 �(0d8dh�
-Build_3011��
-Build_3011�瓷窑�
-P�地窖 �(0d8dh�
-Build_3012��
-Build_3012�地窖，腌制食物�
-U�简易粮仓 �(0d8d@H�hp��
-Build_4001��
-Build_4001�初级粮仓�
-O�粮仓 �(0d8d@H�hp��
-Build_4002��
-Build_4002�中级粮仓�
-U�高级粮仓 �(0d8d@H�hp��
-Build_4003��
-Build_4003�高级粮仓�
-J�邮楼 �(0d8dh�
-Build_4004��
-Build_4004�邮楼，运输�
-A�木桥 �(0d8dhp��
-Build_4005��
-Build_4005�木桥
-A�石桥 �(0d8dhp��
-Build_4006��
-Build_4006�石桥
-A�犬舍 �(0d8dh�
-Build_4007��
-Build_4007�犬舍�
-A�鸡圈 �(0d8dh�
-Build_4008��
-Build_4008�鸡圈�
-A�禽舍 �(0d8dh�
-Build_4009��
-Build_4009�禽舍�
-A�学舍 �(0d8dh�
-Build_4010��
-Build_4010�学舍�
-A�酒楼 �(0d8dh�
-Build_4011��
-Build_4011�酒楼�
-A�水车 �(0d8dh�
-Build_4012��
-Build_4012�水车�
-A�武庄 �(0d8dh�
-Build_4013��
-Build_4013�武庄�
-A�宗厅 �(0d8dh�
-Build_4014��
-Build_4014�宗厅�
-Q�田间小屋 �(0d8d@Hh�
-Build_4015��
-Build_4015�田间小屋�
\ No newline at end of file
+�
+Build_1001��
+Build_1001�u使用木头和草料快速搭建而成的草棚，虽然看起来十分简陋但也是初期不错的临时居所。�
+��	竹草屋 �(0d8dP`h�
+Build_1002��
+Build_1002�~竹条搭建建筑的框架使其更加坚固，柔软的草料和清新的竹叶让整个居所都散发着淡淡的香气。�
+H�	茅草屋 �(0d8dP`(h(�
+Build_1003�
+Build_1003�	茅草屋�
+H�	草木屋 �(0d8dP`2h2�
+Build_1004�
+Build_1004�	草木屋�
+H�	木瓦房 �(0d8dP`<h<�
+Build_1005�
+Build_1005�	木瓦房�
+��初级水井 �(0d8d@H�hp��
+Build_2001��
+Build_2001��简陋的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
+��中级水井 �(0d8d@H�hp��
+Build_2002��
+Build_2002��普通的水井，从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
+��高级水井 �(0d8d@H�hp��
+Build_2003��
+Build_2003�u从井里可以获得干净的地下水源。（注意事项：看好小孩！不要在井边追逐嬉戏打闹！）�
+�	采矿房 ���������0d8d@H�hp���
+Build_2004�
+Build_2004�6在矿洞上建造后，就可以获取矿洞的资源
+��中级采矿房 ���������0d8d@H�hp���
+Build_2005�
+Build_2005�?升级后的采矿房，可以进入矿洞更深处获取资源
+M�石磨 �(0d8dh�
+Build_2006��
+Build_2006�用于磨米磨面�
+i�农田 ���������(0d8d@h�
+Build_2007��
+Build_2007�$开垦好的农田，可种植作物�
+Q�初级渔屋 ���������@H�hp��
+Build_2008�
+Build_2008�初级鱼塘
+Q�中级渔屋 ���������@H�hp��
+Build_2009�
+Build_2009�中级渔屋
+Q�高级渔屋 ���������@H�hp��
+Build_2010�
+Build_2010�高级渔屋
+w�朴素工台 �(0d8dhp��
+Build_3001��
+Build_3001�3简易工作台，用来制造初期所需的工具�
+��工房 �(0d8dhp��
+Build_3002��
+Build_3002�f制作工具的场所，可解锁地图中级的资源。并能制造木质、竹质和石质工具。�
+}�	铁匠铺 �(0d8dhp��
+Build_3003��
+Build_3003�<用于锻造铁质工具，可解锁地图高级的资源。�
+b�	粗衣坊 �(0d8dhp��
+Build_3004��
+Build_3004�!生产制造初级服饰的建筑�
+b�织坊 �(0d8dhp��
+Build_3005��
+Build_3005�$生产高级布料、衣物的场所�
+v�朴素石灶 �(0d8d@hp��
+Build_3006��
+Build_3006�0临时搭建的灶台，可制作简单的饭菜�
+U�炊房 �(0d8d@hp��
+Build_3007��
+Build_3007�制作饭菜的场所�
+y�药炉 �(0d8d@hp��
+Build_3008��
+Build_3008�9临时堆砌的药炉，可满足低级药品制作条件�
+U�药室 �(0d8d@hp��
+Build_3009��
+Build_3009�制作药品的场所�
+h�蚕室 �(0d8dh�
+Build_3010��
+Build_3010�-柔丝吐尽三千丈，留下相思几百层�
+A�瓷窑 �(0d8dh�
+Build_3011��
+Build_3011�瓷窑�
+P�地窖 �(0d8dh�
+Build_3012��
+Build_3012�地窖，腌制食物�
+U�简易粮仓 �(0d8d@H�hp��
+Build_4001��
+Build_4001�初级粮仓�
+O�粮仓 �(0d8d@H�hp��
+Build_4002��
+Build_4002�中级粮仓�
+U�高级粮仓 �(0d8d@H�hp��
+Build_4003��
+Build_4003�高级粮仓�
+J�邮楼 �(0d8dh�
+Build_4004��
+Build_4004�邮楼，运输�
+A�木桥 �(0d8dhp��
+Build_4005��
+Build_4005�木桥
+A�石桥 �(0d8dhp��
+Build_4006��
+Build_4006�石桥
+A�犬舍 �(0d8dh�
+Build_4007��
+Build_4007�犬舍�
+A�鸡圈 �(0d8dh�
+Build_4008��
+Build_4008�鸡圈�
+A�禽舍 �(0d8dh�
+Build_4009��
+Build_4009�禽舍�
+A�学舍 �(0d8dh�
+Build_4010��
+Build_4010�学舍�
+A�酒楼 �(0d8dh�
+Build_4011��
+Build_4011�酒楼�
+A�水车 �(0d8dh�
+Build_4012��
+Build_4012�水车�
+A�武庄 �(0d8dh�
+Build_4013��
+Build_4013�武庄�
+A�宗厅 �(0d8dh�
+Build_4014��
+Build_4014�宗厅�
+Q�田间小屋 �(0d8d@Hh�
+Build_4015��
+Build_4015�田间小屋�
\ No newline at end of file
diff --git a/Unity/Assets/Bundles/Config/SynthesisConfigCategory.bytes b/Unity/Assets/Bundles/Config/SynthesisConfigCategory.bytes
index 9bf3207..a9ade98 100644
Binary files a/Unity/Assets/Bundles/Config/SynthesisConfigCategory.bytes and b/Unity/Assets/Bundles/Config/SynthesisConfigCategory.bytes differ
diff --git a/Unity/Assets/Bundles/Config/TextConfigCategory.bytes b/Unity/Assets/Bundles/Config/TextConfigCategory.bytes
index f5d95ac..2db8ccd 100644
--- a/Unity/Assets/Bundles/Config/TextConfigCategory.bytes
+++ b/Unity/Assets/Bundles/Config/TextConfigCategory.bytes
@@ -5,7 +5,7 @@
 �已完成制作
 )�$该建筑已达到建造数量上限
 )�$材料不足或规模条件未达成
-&�!您的修复零件或金币不足
+�材料或铜币不足
 �道具不足
 �{主角}不在桃谷中
 �种子不足
@@ -68,6 +68,7 @@ A
 &�!当前季节无法种植该作物
 &�!粮仓已满，无法收获作物
 �请先设置农夫
+ �耐久已满，无需修缮
 �抵达中...
 \�W每日起床后一个时辰、下雨时以及雨后一个时辰植物上会蓄满露水
 %� 已枯竭，{再生条件}再生
diff --git a/Unity/Assets/Bundles/Crop.meta b/Unity/Assets/Bundles/Crop.meta
new file mode 100644
index 0000000..1e78af6
--- /dev/null
+++ b/Unity/Assets/Bundles/Crop.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e340af251de94e84d83216a458717ce9
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Assets/Bundles/Crop/Sprout.prefab b/Unity/Assets/Bundles/Crop/Sprout.prefab
new file mode 100644
index 0000000..a7e3aea
--- /dev/null
+++ b/Unity/Assets/Bundles/Crop/Sprout.prefab
@@ -0,0 +1,118 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &351792579701758222
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4909441629764300754}
+  - component: {fileID: 3025821831105161588}
+  m_Layer: 0
+  m_Name: Body
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4909441629764300754
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 351792579701758222}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2376808466490676162}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &3025821831105161588
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 351792579701758222}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: 760052f9f92321d44839e8d3342dac3c, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 1
+  m_Sprite: {fileID: 21300000, guid: f9222105e2dc1034eacaaee3020d531f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1, y: 1}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 1
+--- !u!1 &656500844284976617
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2376808466490676162}
+  m_Layer: 0
+  m_Name: Sprout
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2376808466490676162
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 656500844284976617}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 4909441629764300754}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Unity/Assets/Bundles/Crop/Sprout.prefab.meta b/Unity/Assets/Bundles/Crop/Sprout.prefab.meta
new file mode 100644
index 0000000..43de08b
--- /dev/null
+++ b/Unity/Assets/Bundles/Crop/Sprout.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e678718ee0e609c4a85d2c4a03cdfea3
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Assets/Bundles/Crop/Wheat.prefab b/Unity/Assets/Bundles/Crop/Wheat.prefab
new file mode 100644
index 0000000..070f330
--- /dev/null
+++ b/Unity/Assets/Bundles/Crop/Wheat.prefab
@@ -0,0 +1,118 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &351792579701758222
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4909441629764300754}
+  - component: {fileID: 3025821831105161588}
+  m_Layer: 0
+  m_Name: Body
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4909441629764300754
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 351792579701758222}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2376808466490676162}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &3025821831105161588
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 351792579701758222}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: 760052f9f92321d44839e8d3342dac3c, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 1
+  m_Sprite: {fileID: 21300000, guid: 28d62a40a61199147ae8c43bd4d58019, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1, y: 1}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 1
+--- !u!1 &656500844284976617
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2376808466490676162}
+  m_Layer: 0
+  m_Name: Wheat
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2376808466490676162
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 656500844284976617}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 4909441629764300754}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Unity/Assets/Bundles/Crop/Wheat.prefab.meta b/Unity/Assets/Bundles/Crop/Wheat.prefab.meta
new file mode 100644
index 0000000..a7f149c
--- /dev/null
+++ b/Unity/Assets/Bundles/Crop/Wheat.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3bc8cb29d14105d4bb3df425d907c93c
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Assets/Bundles/FUI/Building_atlas0.png b/Unity/Assets/Bundles/FUI/Building_atlas0.png
index 5045589..50392e4 100644
--- a/Unity/Assets/Bundles/FUI/Building_atlas0.png
+++ b/Unity/Assets/Bundles/FUI/Building_atlas0.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:05336d126a4adb2d44d18db5a200f0bc7b4e24eff406a53f7a2a22a573b1c8fe
-size 22228
+oid sha256:40b5e512aba33533bec01c4071c6e569d792105b89d9371864be2ad11b512ae8
+size 29049
diff --git a/Unity/Assets/Bundles/FUI/Building_fui.bytes b/Unity/Assets/Bundles/FUI/Building_fui.bytes
index 463c70c..0472d4b 100644
Binary files a/Unity/Assets/Bundles/FUI/Building_fui.bytes and b/Unity/Assets/Bundles/FUI/Building_fui.bytes differ
diff --git a/Unity/Assets/Mono/Module/Mongo/BsonRepresentation.cs b/Unity/Assets/Mono/Module/Mongo/BsonRepresentation.cs
new file mode 100644
index 0000000..1fc4ea4
--- /dev/null
+++ b/Unity/Assets/Mono/Module/Mongo/BsonRepresentation.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace MongoDB.Bson.Serialization.Attributes
+{
+
+    public class BsonRepresentationAttribute: Attribute
+    {
+        public bool AllowTruncation;
+        public BsonRepresentationAttribute(BsonType representation)
+        {
+            
+        }
+    }
+}
diff --git a/Unity/Assets/Mono/Module/Mongo/BsonRepresentation.cs.meta b/Unity/Assets/Mono/Module/Mongo/BsonRepresentation.cs.meta
new file mode 100644
index 0000000..3efe455
--- /dev/null
+++ b/Unity/Assets/Mono/Module/Mongo/BsonRepresentation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 854419d5cf1bc1a42b2b782e10a5a68a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Assets/Mono/Module/Mongo/BsonType.cs b/Unity/Assets/Mono/Module/Mongo/BsonType.cs
new file mode 100644
index 0000000..e33ac7a
--- /dev/null
+++ b/Unity/Assets/Mono/Module/Mongo/BsonType.cs
@@ -0,0 +1,57 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace MongoDB.Bson
+{
+    public enum BsonType
+    {
+        /// <summary>
+        /// Not a real BSON type. Used to signal the end of a document.
+        /// </summary>
+        EndOfDocument = 0,
+        /// <summary>A BSON double.</summary>
+        Double = 1,
+        /// <summary>A BSON string.</summary>
+        String = 2,
+        /// <summary>A BSON document.</summary>
+        Document = 3,
+        /// <summary>A BSON array.</summary>
+        Array = 4,
+        /// <summary>BSON binary data.</summary>
+        Binary = 5,
+        /// <summary>A BSON undefined value.</summary>
+        Undefined = 6,
+        /// <summary>A BSON ObjectId.</summary>
+        ObjectId = 7,
+        /// <summary>A BSON bool.</summary>
+        Boolean = 8,
+        /// <summary>A BSON DateTime.</summary>
+        DateTime = 9,
+        /// <summary>A BSON null value.</summary>
+        Null = 10, // 0x0000000A
+        /// <summary>A BSON regular expression.</summary>
+        RegularExpression = 11, // 0x0000000B
+        /// <summary>BSON JavaScript code.</summary>
+        JavaScript = 13, // 0x0000000D
+        /// <summary>A BSON symbol.</summary>
+        Symbol = 14, // 0x0000000E
+        /// <summary>
+        /// BSON JavaScript code with a scope (a set of variables with values).
+        /// </summary>
+        JavaScriptWithScope = 15, // 0x0000000F
+        /// <summary>A BSON 32-bit integer.</summary>
+        Int32 = 16, // 0x00000010
+        /// <summary>A BSON timestamp.</summary>
+        Timestamp = 17, // 0x00000011
+        /// <summary>A BSON 64-bit integer.</summary>
+        Int64 = 18, // 0x00000012
+        /// <summary>A BSON 128-bit decimal.</summary>
+        Decimal128 = 19, // 0x00000013
+        /// <summary>A BSON MaxKey value.</summary>
+        MaxKey = 127, // 0x0000007F
+        /// <summary>A BSON MinKey value.</summary>
+        MinKey = 255, // 0x000000FF
+    }
+}
+
diff --git a/Unity/Assets/Mono/Module/Mongo/BsonType.cs.meta b/Unity/Assets/Mono/Module/Mongo/BsonType.cs.meta
new file mode 100644
index 0000000..00ecc1d
--- /dev/null
+++ b/Unity/Assets/Mono/Module/Mongo/BsonType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f13958d689462ac4693eca0aba76d5be
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Assets/Res/Images/Buildings/Build_1001.png.meta b/Unity/Assets/Res/Images/Buildings/Build_1001.png.meta
index 309f9b9..b4e072f 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_1001.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_1001.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_1002.png.meta b/Unity/Assets/Res/Images/Buildings/Build_1002.png.meta
index a0cf64a..c32c371 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_1002.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_1002.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
@@ -100,6 +100,18 @@ TextureImporter:
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
diff --git a/Unity/Assets/Res/Images/Buildings/Build_1004.png.meta b/Unity/Assets/Res/Images/Buildings/Build_1004.png.meta
index 302874c..0a8c872 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_1004.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_1004.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
@@ -100,6 +100,18 @@ TextureImporter:
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
diff --git a/Unity/Assets/Res/Images/Buildings/Build_1005.png.meta b/Unity/Assets/Res/Images/Buildings/Build_1005.png.meta
index 52501e0..ab14837 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_1005.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_1005.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
@@ -100,6 +100,18 @@ TextureImporter:
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
diff --git a/Unity/Assets/Res/Images/Buildings/Build_1006.png.meta b/Unity/Assets/Res/Images/Buildings/Build_1006.png.meta
index d0fd123..5f5f31f 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_1006.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_1006.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
@@ -100,6 +100,18 @@ TextureImporter:
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
diff --git a/Unity/Assets/Res/Images/Buildings/Build_2001.png.meta b/Unity/Assets/Res/Images/Buildings/Build_2001.png.meta
index 5c1d032..bdea724 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_2001.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_2001.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_2002.png.meta b/Unity/Assets/Res/Images/Buildings/Build_2002.png.meta
index 2acf8d3..c91a130 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_2002.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_2002.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_2003.png.meta b/Unity/Assets/Res/Images/Buildings/Build_2003.png.meta
index 039d2b8..333e2d0 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_2003.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_2003.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_2006.png.meta b/Unity/Assets/Res/Images/Buildings/Build_2006.png.meta
index b11ba54..6025085 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_2006.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_2006.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_2007.png b/Unity/Assets/Res/Images/Buildings/Build_2007.png
index 3de544d..bed420e 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_2007.png
+++ b/Unity/Assets/Res/Images/Buildings/Build_2007.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:2e66b6f49a078d1e897ff9c8def23aa4ecc7e6b06a5509e9866459c1554087e4
-size 15801
+oid sha256:7be4f930219a489b42e337d407e1b79301d48a77af137f3cd40c14817e670d93
+size 131100
diff --git a/Unity/Assets/Res/Images/Buildings/Build_2007.png.meta b/Unity/Assets/Res/Images/Buildings/Build_2007.png.meta
index 19e070f..0199129 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_2007.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_2007.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3001.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3001.png.meta
index 5eca494..6cd9f1e 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3001.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3001.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3002.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3002.png.meta
index 1411f90..d35eb9a 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3002.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3002.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3003.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3003.png.meta
index a5bc7dd..d6113df 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3003.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3003.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3004.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3004.png.meta
index 1ba9b7f..5100395 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3004.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3004.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3005.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3005.png.meta
index 8540dbd..67ab234 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3005.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3005.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3006.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3006.png.meta
index d6bd653..58bfe50 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3006.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3006.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3007.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3007.png.meta
index 1370fe1..8ad0213 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3007.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3007.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3008.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3008.png.meta
index 52ba458..e7e8613 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3008.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3008.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_3009.png.meta b/Unity/Assets/Res/Images/Buildings/Build_3009.png.meta
index 6fea5e0..9cefca7 100644
--- a/Unity/Assets/Res/Images/Buildings/Build_3009.png.meta
+++ b/Unity/Assets/Res/Images/Buildings/Build_3009.png.meta
@@ -33,7 +33,7 @@ TextureImporter:
   maxTextureSize: 2048
   textureSettings:
     serializedVersion: 2
-    filterMode: 0
+    filterMode: 1
     aniso: 1
     mipBias: 0
     wrapU: 1
@@ -49,7 +49,7 @@ TextureImporter:
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
+  spriteGenerateFallbackPhysicsShape: 0
   alphaUsage: 1
   alphaIsTransparency: 1
   spriteTessellationDetail: -1
diff --git a/Unity/Assets/Res/Images/Buildings/Build_4015.png b/Unity/Assets/Res/Images/Buildings/Build_4015.png
new file mode 100644
index 0000000..590aec7
--- /dev/null
+++ b/Unity/Assets/Res/Images/Buildings/Build_4015.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db4d88372a80940b7f16b9f460d03e562c9adef475d54b937353de1fb340f1df
+size 61899
diff --git a/Unity/Assets/Res/Images/Buildings/Build_4015.png.meta b/Unity/Assets/Res/Images/Buildings/Build_4015.png.meta
new file mode 100644
index 0000000..8c30821
--- /dev/null
+++ b/Unity/Assets/Res/Images/Buildings/Build_4015.png.meta
@@ -0,0 +1,134 @@
+fileFormatVersion: 2
+guid: 1dfd28bf2d622fd4598958d9968cbb90
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 0
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 7
+  spritePivot: {x: 0.5, y: 0}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 0
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 1537655665
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Assets/Res/Images/Buildings/BuildingAtlas.spriteatlas b/Unity/Assets/Res/Images/Buildings/BuildingAtlas.spriteatlas
index e0dee11..8f71b41 100644
--- a/Unity/Assets/Res/Images/Buildings/BuildingAtlas.spriteatlas
+++ b/Unity/Assets/Res/Images/Buildings/BuildingAtlas.spriteatlas
@@ -57,6 +57,7 @@ SpriteAtlas:
   - {fileID: 21300000, guid: c933030e51e77cf43b42918f7a9514e0, type: 3}
   - {fileID: 21300000, guid: ff1beb4e83245a045bfabc3d96183aca, type: 3}
   - {fileID: 21300000, guid: 09f0829e697ef3d4b980428a2a85064d, type: 3}
+  - {fileID: 21300000, guid: 1dfd28bf2d622fd4598958d9968cbb90, type: 3}
   - {fileID: 21300000, guid: 242aa7ffd9e1b404aa7d4b5620f9f81e, type: 3}
   m_PackedSpriteNamesToIndex:
   - Build_2001
@@ -77,6 +78,7 @@ SpriteAtlas:
   - Build_1004
   - Build_1006
   - Build_3005
+  - Build_4015
   - Build_3008
   m_RenderDataMap: {}
   m_Tag: Assets/Res/Images/Buildings/BuildingAtlas.spriteatlas
diff --git a/Unity/Assets/Res/Images/Crops/CropAtlas.spriteatlas b/Unity/Assets/Res/Images/Crops/CropAtlas.spriteatlas
index 83c57da..a0338e6 100644
--- a/Unity/Assets/Res/Images/Crops/CropAtlas.spriteatlas
+++ b/Unity/Assets/Res/Images/Crops/CropAtlas.spriteatlas
@@ -39,9 +39,13 @@ SpriteAtlas:
     cachedData: {fileID: 0}
   m_MasterAtlas: {fileID: 0}
   m_PackedSprites:
+  - {fileID: 21300000, guid: 28d62a40a61199147ae8c43bd4d58019, type: 3}
+  - {fileID: 21300000, guid: f9222105e2dc1034eacaaee3020d531f, type: 3}
   - {fileID: 21300000, guid: 6fa28c2cda7b2934cbbc60ba3c29e52f, type: 3}
   - {fileID: 21300000, guid: cc09b59e5824fd5488c4f73b29ada014, type: 3}
   m_PackedSpriteNamesToIndex:
+  - Wheat
+  - Sprout
   - Crop_shuidao
   - Crop_luobo
   m_RenderDataMap: {}
diff --git a/Unity/Assets/Res/Images/Crops/Sprout.png b/Unity/Assets/Res/Images/Crops/Sprout.png
new file mode 100644
index 0000000..b4df702
--- /dev/null
+++ b/Unity/Assets/Res/Images/Crops/Sprout.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2f05778b2a0bb070b607a21a163369248658e6d61d161c5e8c92d0b1c6a82fb
+size 2334
diff --git a/Unity/Assets/Res/Images/Crops/Sprout.png.meta b/Unity/Assets/Res/Images/Crops/Sprout.png.meta
new file mode 100644
index 0000000..fd68413
--- /dev/null
+++ b/Unity/Assets/Res/Images/Crops/Sprout.png.meta
@@ -0,0 +1,134 @@
+fileFormatVersion: 2
+guid: f9222105e2dc1034eacaaee3020d531f
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 0
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 7
+  spritePivot: {x: 0.5, y: 0}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 0
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 1537655665
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Assets/Res/Images/Crops/Wheat.png b/Unity/Assets/Res/Images/Crops/Wheat.png
new file mode 100644
index 0000000..1dee383
--- /dev/null
+++ b/Unity/Assets/Res/Images/Crops/Wheat.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f4dae8bc2c6afcecd8d3556a6f2bf15ca162e6269bb6476c80839d69f5fc5b1
+size 4288
diff --git a/Unity/Assets/Res/Images/Crops/Wheat.png.meta b/Unity/Assets/Res/Images/Crops/Wheat.png.meta
new file mode 100644
index 0000000..157bd19
--- /dev/null
+++ b/Unity/Assets/Res/Images/Crops/Wheat.png.meta
@@ -0,0 +1,134 @@
+fileFormatVersion: 2
+guid: 28d62a40a61199147ae8c43bd4d58019
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 0
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 7
+  spritePivot: {x: 0.5, y: 0}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 0
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 1537655665
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Unity/Codes/Hotfix/Demo/Cabin/CabinSystem.cs b/Unity/Codes/Hotfix/Demo/Cabin/CabinSystem.cs
index d6b1b4b..bfddc6f 100644
--- a/Unity/Codes/Hotfix/Demo/Cabin/CabinSystem.cs
+++ b/Unity/Codes/Hotfix/Demo/Cabin/CabinSystem.cs
@@ -1,5 +1,33 @@
 ﻿namespace ET
 {
+    public class CabinDestroySystem : DestroySystem<Cabin>
+    {
+        public override void Destroy(Cabin self)
+        {
+            Unit unit = self.Parent.Parent.GetParent<Unit>();
+            unit.RemoveGrandChild(self.Id);
+            
+            // 需要清理所管理的农田的指向
+            foreach (long farmlandId in self.FarmlandIds)
+            {
+                var farmland = unit.GetGrandChild<Farmland>(farmlandId);
+                if (farmland != null)
+                {
+                    farmland.SetCabinId(0);
+                }
+            }
+            
+            // 农民变空闲
+            if (self.PeopleId > 0)
+            {
+                var peopleComp = unit.GetComponent<PeopleComponent>();
+                var people = peopleComp.GetChild<People>(self.PeopleId);
+                people.SetBehaveType(ConstBehaveType.BEHAVE_IDLE);
+                self.PeopleId = 0;
+            }
+        }
+    }
+
     [FriendClass(typeof(Cabin))]
     public static class CabinSystem
     {
@@ -48,7 +76,18 @@
             self.FarmlandIds.Add(farmlandId);
             return true;
         }
-        
-        
+
+        public static void RemoveFarmland(this Cabin self, long farmlandId)
+        {
+            if (self.FarmlandIds.Contains(farmlandId))
+            {
+                self.FarmlandIds.Remove(farmlandId);
+            }
+        }
+
+        public static int GetRange(this Cabin self)
+        {
+            return 20;
+        }
     }
 }
\ No newline at end of file
diff --git a/Unity/Codes/Hotfix/Demo/Construct/Handler/M2C_NofityConstructFinishHandler.cs b/Unity/Codes/Hotfix/Demo/Construct/Handler/M2C_NofityConstructFinishHandler.cs
index 4585bd3..d438117 100644
--- a/Unity/Codes/Hotfix/Demo/Construct/Handler/M2C_NofityConstructFinishHandler.cs
+++ b/Unity/Codes/Hotfix/Demo/Construct/Handler/M2C_NofityConstructFinishHandler.cs
@@ -1,7 +1,7 @@
 ﻿namespace ET
 {
     [MessageHandler]
-    public class M2C_NofityConstructFinishHandler:AMHandler<M2C_NotifyConstructFinish>
+    public class M2C_NotifyConstructFinishHandler:AMHandler<M2C_NotifyConstructFinish>
     {
         protected override void Run(Session session, M2C_NotifyConstructFinish message)
         {
@@ -9,7 +9,7 @@
             UnitOperate.InitProsperity(UnitComponent.unit);   
             if (building != null)
             {
-                Game.EventSystem.Publish(new EventType.AfterCreateBuilding(){Building = building});
+                Game.EventSystem.Publish(new EventType.AfterCreateBuilding(){Unit = UnitComponent.unit, Building = building, IsNew = true});
             }
         }
     }
diff --git a/Unity/Codes/Hotfix/Demo/Farmland/FarmlandSystem.cs b/Unity/Codes/Hotfix/Demo/Farmland/FarmlandSystem.cs
index 1be73b1..a6d1602 100644
--- a/Unity/Codes/Hotfix/Demo/Farmland/FarmlandSystem.cs
+++ b/Unity/Codes/Hotfix/Demo/Farmland/FarmlandSystem.cs
@@ -2,11 +2,23 @@
 
 namespace ET
 {
+    
     public class FarmlandDestroySystem : DestroySystem<Farmland>
     {
         public override void Destroy(Farmland self)
         {
-            self.Parent.Parent.GetParent<Unit>().RemoveGrandChild(self.Id);
+            Unit unit = self.Parent.Parent.GetParent<Unit>();
+            unit.RemoveGrandChild(self.Id);
+
+            // 如果农田受小屋管理，需要从中移除
+            if (self.CabinId > 0)
+            {
+                var cabin = unit.GetGrandChild<Cabin>(self.CabinId);
+                if (cabin != null)
+                {
+                    cabin.RemoveFarmland(self.Id);
+                }
+            }
         }
     }
     
diff --git a/Unity/Codes/Hotfix/Demo/Unit/UnitFactory.cs b/Unity/Codes/Hotfix/Demo/Unit/UnitFactory.cs
index 4239696..a5178c3 100644
--- a/Unity/Codes/Hotfix/Demo/Unit/UnitFactory.cs
+++ b/Unity/Codes/Hotfix/Demo/Unit/UnitFactory.cs
@@ -110,7 +110,6 @@ namespace ET
 	        unitComponent.Add(unit);
 	        unit.AddComponent<ObjectWait>();
 	        unit.InitGrandChildren();
-	        unit.OnCheckCabin();
 	        Game.EventSystem.Publish(new EventType.AfterUnitCreate() {Unit = unit});
 
 	        return unit;
diff --git a/Unity/Codes/Hotfix/Demo/Unit/UnitSystem.cs b/Unity/Codes/Hotfix/Demo/Unit/UnitSystem.cs
index d81145d..d4ecffc 100644
--- a/Unity/Codes/Hotfix/Demo/Unit/UnitSystem.cs
+++ b/Unity/Codes/Hotfix/Demo/Unit/UnitSystem.cs
@@ -90,7 +90,7 @@ namespace ET
             dt = dt / 1000;
             if (dt > 0)
             {
-                self.GetChild<Weather>(self.WeatherId).Update(self,(int)dt);
+                self.GetChild<Weather>(self.WeatherId)?.Update(self,(int)dt);
                 self.UpdateTimeSec += dt * 1000;
 
             }
@@ -123,11 +123,11 @@ namespace ET
                     //每天长大一岁
                     self.AddAge();
                     //触发天气
-                    self.GetChild<Weather>(self.WeatherId).Produce(self);
+                    self.GetChild<Weather>(self.WeatherId)?.Produce(self);
 
                 }
                 self.GameTime = time;
-                self.GetChild<Weather>(self.WeatherId).CheckStart(self,self.GameTime);
+                self.GetChild<Weather>(self.WeatherId)?.CheckStart(self,self.GameTime);
                 
                
             }
@@ -168,6 +168,7 @@ namespace ET
             self.SeasonConfig = SeasonConfigCategory.Instance.Get(self.Season);
             self.InitPeopleNumberic();
             self.InitGrandChildren();
+            self.OnCheckCabin();
             self.UpdateTimeSec = self.UpdateTime;
         }
 
@@ -365,5 +366,19 @@ namespace ET
                 
             }
         }
+
+        public static List<T> GetGrandChildren<T>(this Unit self) where T : Entity
+        {
+            List<T> children = new List<T>();
+            foreach (Entity grandChildrenValue in self.GrandChildren.Values)
+            {
+                if (grandChildrenValue is T)
+                {
+                    children.Add(grandChildrenValue as T);
+                }
+            }
+
+            return children;
+        }
     }
 }
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/Battle/BattleActionSegmentHelper.cs b/Unity/Codes/HotfixView/Demo/Battle/BattleActionSegmentHelper.cs
index d229fd2..ae534fb 100644
--- a/Unity/Codes/HotfixView/Demo/Battle/BattleActionSegmentHelper.cs
+++ b/Unity/Codes/HotfixView/Demo/Battle/BattleActionSegmentHelper.cs
@@ -90,10 +90,10 @@ namespace ET
                     {
                         
                         var prefab = YooAssetComponent.Instance.LoadAssetSync<GameObject>("staff");
-
+                        
                         GameObject bullet = Util.GameObjectPoolHelper.SpawnGameObject(prefab);
                         YooAssetComponent.Instance.Release(prefab);
-
+                        
                         bullet.transform.position = source.ThrowPoint.position;
                         bullet.transform.DOMove(target.DisplayGameObject.transform.position, 0.5f).OnComplete(() =>
                         {
diff --git a/Unity/Codes/HotfixView/Demo/Building/AfterCreateBuilding_AddComponent.cs b/Unity/Codes/HotfixView/Demo/Building/AfterCreateBuilding_AddComponent.cs
index 6763631..614f9ab 100644
--- a/Unity/Codes/HotfixView/Demo/Building/AfterCreateBuilding_AddComponent.cs
+++ b/Unity/Codes/HotfixView/Demo/Building/AfterCreateBuilding_AddComponent.cs
@@ -1,4 +1,7 @@
-﻿using ET.EventType;
+﻿using System.Collections.Generic;
+using ET.EventType;
+using NUnit.Framework;
+using UnityEngine;
 
 namespace ET
 {
@@ -14,9 +17,99 @@ namespace ET
             {
                 var buildingViewComp = building.AddComponent<BuildingViewComponent>();
                 buildingViewComp.CreateName().Coroutine();
+                
+                // 处理农田
+                var farmland = building.GetChildByType<Farmland>();
+                if (farmland != null)
+                {
+                    farmland.AddComponent<FarmlandViewComponent>();
+                }
+                
+                // 在不是升级且是新建的建筑时处理田的管理
+                if (args.IsNew)
+                {
+                    ProcessCabin(unit, building);
+                    ProcessFarmland(unit, building);
+                }
             }
 
             // update map info
         }
+
+        // 处理田间小屋的逻辑
+        private void ProcessCabin(Unit unit, Building building)
+        {
+            var cabin = building.GetChildByType<Cabin>();
+            if (cabin == null)
+            {
+                return;
+            }
+            
+            var mapComp = unit.ZoneScene().CurrentScene().GetComponent<MapComponent>();
+
+            if (mapComp == null)
+            {
+                return;
+            }
+
+            Vector2Int cabinSize = new Vector2Int(cabin.GetRange(), cabin.GetRange());
+            var cabinRect = mapComp.GetUnitRectIndicesOfCenter(building.Position, cabinSize);
+            var farmlands = unit.GetGrandChildren<Farmland>();
+            List<long> inAreaFarmlandIds = new();
+            foreach (Farmland farmland in farmlands)
+            {
+                var farmlandBuilding = farmland.GetParent<Building>();
+
+                var mapPos = mapComp.WorldToMapPos(farmlandBuilding.Position);
+                if (mapComp.IsPosInRect(mapPos, cabinRect))
+                {
+                    inAreaFarmlandIds.Add(farmland.Id);
+                }
+            }
+
+            if (inAreaFarmlandIds.Count > 0)
+            {
+                CabinHelper.AddFarmland(unit, cabin, inAreaFarmlandIds).Coroutine();
+            }
+        }
+
+        // 处理田的逻辑，如果在田间小屋的周围需要被管理
+        private void ProcessFarmland(Unit unit, Building building)
+        {
+            var farmland = building.GetChildByType<Farmland>();
+            if (farmland == null)
+            {
+                return;
+            }
+            
+            var mapComp = unit.ZoneScene().CurrentScene().GetComponent<MapComponent>();
+
+            if (mapComp == null)
+            {
+                return;
+            }
+
+            var cabins = unit.GetGrandChildren<Cabin>();
+            
+            List<long> inAreaFarmlandIds = new();
+            Vector2Int cabinSize = new Vector2Int();
+            foreach (Cabin cabin in cabins)
+            {
+                cabinSize.Set(cabin.GetRange(), cabin.GetRange());
+                inAreaFarmlandIds.Clear();
+                var cabinBuilding = cabin.GetParent<Building>();
+                var cabinRect = mapComp.GetUnitRectIndicesOfCenter(cabinBuilding.Position, cabinSize);
+                
+                var mapPos = mapComp.WorldToMapPos(building.Position);
+                if (mapComp.IsPosInRect(mapPos, cabinRect))
+                {
+                    inAreaFarmlandIds.Add(farmland.Id);
+                    CabinHelper.AddFarmland(unit, cabin, inAreaFarmlandIds).Coroutine();
+
+                    break;
+                }
+            }
+
+        }
     }
 }
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/Building/BuildingViewComponentSystem.cs b/Unity/Codes/HotfixView/Demo/Building/BuildingViewComponentSystem.cs
index 77ec39a..f230fd7 100644
--- a/Unity/Codes/HotfixView/Demo/Building/BuildingViewComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/Building/BuildingViewComponentSystem.cs
@@ -32,6 +32,7 @@ namespace ET
     [FriendClass(typeof(FUIUnitNamePanelComponent))]
     [FriendClass(typeof(FUI_UnitNamePanel))]
     [FriendClass(typeof(FUI_BuildingName))]
+    [FriendClass(typeof(Farmland))]
     public static class BuildingViewComponentSystem
     {
         public static void Awake(this BuildingViewComponent self)
@@ -71,12 +72,14 @@ namespace ET
             
             // add click event
             // https://docs.unity3d.com/2018.3/Documentation/ScriptReference/EventSystems.EventTrigger.html
-            EventTrigger trigger = self.BuildingRoot.transform.Find("Build_Base/SpriteClick").GetComponent<EventTrigger>();
+            var clickTrans = self.BuildingRoot.transform.Find("Build_Base/SpriteClick");
+            self.ClickCollider2D = clickTrans.GetComponent<Collider2D>();
+            EventTrigger trigger = clickTrans.GetComponent<EventTrigger>();
             EventTrigger.Entry entry = new EventTrigger.Entry();
             entry.eventID = EventTriggerType.PointerClick;
             entry.callback.AddListener((data) =>
             {
-                self.OnSpriteClicked(self);
+                self.OnSpriteClicked();
             });
             trigger.triggers.Add(entry);
         }
@@ -88,7 +91,7 @@ namespace ET
             self.CreateBuilding(self.BuildingInfo);
         }
 
-        public static void OnSpriteClicked(this BuildingViewComponent self, BuildingViewComponent buildingViewComponent)
+        public static void OnSpriteClicked(this BuildingViewComponent self)
         {
             if (Stage.isTouchOnUI)
             {
@@ -102,7 +105,7 @@ namespace ET
                 return;
             }
             
-            var buildingInfo = buildingViewComponent.BuildingInfo;
+            var buildingInfo = self.BuildingInfo;
 
             //根据不同的建筑类型打开不同的界面
             StructureConfig structureConfig = StructureConfigCategory.Instance.Get(buildingInfo.ConfigId);
@@ -132,9 +135,21 @@ namespace ET
                 {
                     if (structureConfig.Special == (int) StructureSpecialEnum.FARMLAND)
                     {
-                        var farmlandWin = self.ZoneScene().GetComponent<FUIComponent>()
-                                .ShowWindow<FUI_FarmlandWindow, FUIFarmlandWindowComponent>();
-                        farmlandWin.ShowInfo(buildingInfo);
+                        var farmland = buildingInfo.GetChildByType<Farmland>();
+                        if (farmland != null && farmland.CabinId > 0)
+                        {
+                            // 显示农田批处理界面
+                            var farmlandBatchWin = self.ZoneScene().GetComponent<FUIComponent>()
+                                    .ShowWindow<FUI_FarmlandBatchWindow, FUIFarmlandBatchWindowComponent>();
+                            farmlandBatchWin.ShowInfo(buildingInfo);
+                        }
+                        else
+                        {
+                            // 显示单个农田的操作界面
+                            var farmlandWin = self.ZoneScene().GetComponent<FUIComponent>()
+                                    .ShowWindow<FUI_FarmlandWindow, FUIFarmlandWindowComponent>();
+                            farmlandWin.ShowInfo(buildingInfo);
+                        }
                     }
                 }
                     break;
@@ -152,7 +167,7 @@ namespace ET
             return self.BuildingRoot.transform.position;
         }
 
-        public static void HighlightBuilding(this BuildingViewComponent self, bool withEdge)
+        public static void HighlightBuilding(this BuildingViewComponent self, bool withEdge = false)
         {
             if (withEdge)
             {
@@ -169,6 +184,16 @@ namespace ET
         {
             self.BuildingSprRenderer.sharedMaterial = self.SharedMat;
         }
+
+        public static bool IsPointInClickArea(this BuildingViewComponent self, Vector2 worldPos)
+        {
+            if (self.ClickCollider2D == null)
+            {
+                return false;
+            }
+
+            return self.ClickCollider2D.OverlapPoint(worldPos);
+        }
         
         public static void Destroy(this BuildingViewComponent self)
         {
@@ -202,13 +227,18 @@ namespace ET
         
         public static Vector2 GetNamePos(this BuildingViewComponent self)
         {
-            var sprRender = self.BuildingRoot.GetComponentInChildren<SpriteRenderer>();
-            Vector3 max = sprRender.bounds.max;
-            Vector3 min = sprRender.bounds.min;
+            var bounds = self.BuildingSprRenderer.bounds;
+            Vector3 max = bounds.max;
+            Vector3 min = bounds.min;
 
             return new Vector2((min.x + max.x) / 2, max.y);
         }
 
+        public static Vector2 GetCenterPos(this BuildingViewComponent self)
+        {
+            return self.BuildingSprRenderer.bounds.center;
+        }
+
         public static async ETTask CreateName(this BuildingViewComponent self)
         {
             FUI_BuildingName nameEntity =
diff --git a/Unity/Codes/HotfixView/Demo/Building/BuildingViewHelper.cs b/Unity/Codes/HotfixView/Demo/Building/BuildingViewHelper.cs
index 2768850..cbcdb8c 100644
--- a/Unity/Codes/HotfixView/Demo/Building/BuildingViewHelper.cs
+++ b/Unity/Codes/HotfixView/Demo/Building/BuildingViewHelper.cs
@@ -69,8 +69,7 @@ namespace ET
 
         public static void UpdateIndicator(GameObject indicatorObj, MapComponent mapComp, Vector3 worldPos, Vector2Int size)
         {
-            RectIndices rectIndices = new RectIndices();
-            mapComp.GetUnitRectIndices(worldPos, size, out rectIndices);
+            RectIndices rectIndices = mapComp.GetUnitRectIndices(worldPos, size);
             UpdateIndicator(indicatorObj, mapComp, rectIndices);
         }
 
diff --git a/Unity/Codes/HotfixView/Demo/Building/CreateBuildingViewComponentSystem.cs b/Unity/Codes/HotfixView/Demo/Building/CreateBuildingViewComponentSystem.cs
index 3beb9c5..c1d1eaf 100644
--- a/Unity/Codes/HotfixView/Demo/Building/CreateBuildingViewComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/Building/CreateBuildingViewComponentSystem.cs
@@ -83,14 +83,23 @@ namespace ET
 
         public static async ETTask CreateBuilding(this CreateBuildingViewComponent self)
         {
+            var mapUnitOper = self.Parent.GetComponent<MapUnitOperationComponent>();
             Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
-            var pos = self.CurEditBuildingRoot.position;
-            int errorCode = await ConstructHelper.CreateConstruct(unit, self.CurEditBuildingSynthesisId, pos.x, pos.y);
-            if (errorCode != ErrorCode.ERR_Success)
+            if (mapUnitOper.IsPlaceValid())
+            {
+                var pos = self.CurEditBuildingRoot.position;
+                int errorCode = await ConstructHelper.CreateConstruct(unit, self.CurEditBuildingSynthesisId, pos.x, pos.y);
+                if (errorCode != ErrorCode.ERR_Success)
+                {
+                    Debug.LogWarning("Create Building Failed");
+                }  
+            }
+            else
             {
-                Debug.LogWarning("Create Building Failed");
+                CommonHelper.ShowHint(self.ZoneScene(), TextHelper.Building_Place_Invalid);
             }
 
+
             // 删除临时的建筑
             GameObject.Destroy(self.CurEditBuildingRoot.gameObject);
             
diff --git a/Unity/Codes/HotfixView/Demo/Building/FarmlandStateChanged_UpdateView.cs b/Unity/Codes/HotfixView/Demo/Building/FarmlandStateChanged_UpdateView.cs
new file mode 100644
index 0000000..e8519ba
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/Building/FarmlandStateChanged_UpdateView.cs
@@ -0,0 +1,14 @@
+﻿using ET.EventType;
+
+namespace ET
+{
+    public class FarmlandStateChanged_UpdateView : AEvent<FarmlandStateChanged>
+    {
+        protected override void Run(FarmlandStateChanged args)
+        {
+            var farmland = args.Farmland;
+            var farmlandView = farmland.GetComponent<FarmlandViewComponent>();
+            farmlandView?.UpdateByState();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/Building/FarmlandViewComponent.cs b/Unity/Codes/HotfixView/Demo/Building/FarmlandViewComponent.cs
new file mode 100644
index 0000000..8520493
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/Building/FarmlandViewComponent.cs
@@ -0,0 +1,58 @@
+﻿using UnityEngine;
+
+namespace ET
+{
+    public class FarmlandViewComponentAwakeSystem: AwakeSystem<FarmlandViewComponent>
+    {
+        public override void Awake(FarmlandViewComponent self)
+        {
+            self.Awake();
+        }
+    }
+    
+
+    [FriendClass(typeof(FarmlandViewComponent))]
+    [FriendClass(typeof(Farmland))]
+    [FriendClass(typeof(Building))]
+    [FriendClass(typeof(BuildingViewComponent))]
+    public static class FarmlandViewComponentSystem
+    {
+        public static void Awake(this FarmlandViewComponent self)
+        {
+            self.Farmland = self.GetParent<Farmland>();
+
+            self.SeedCropPrfb = self.LoadAssetSync<GameObject>("Sprout".ToPrefabAddress());
+            self.RipeCropPrfb = self.LoadAssetSync<GameObject>("Wheat".ToPrefabAddress());
+            
+            self.UpdateByState();
+        }
+
+        public static void UpdateByState(this FarmlandViewComponent self)
+        {
+            var building = self.Farmland.GetParent<Building>();
+            var buildingView = building.GetComponent<BuildingViewComponent>();
+
+            if (self.FarmlandRoot != null)
+            {
+                Util.GameObjectPoolHelper.ReturnObjectToPool(self.FarmlandRoot);
+            }
+            switch (self.Farmland.FarmlandState)
+            {
+                case FarmlandState.FARMLAND_STATE_FREE:
+                case FarmlandState.FARMLAND_STATE_SEED:
+                    break;
+                case FarmlandState.FARMLAND_STATE_GROW:
+                    self.FarmlandRoot = Util.GameObjectPoolHelper.SpawnGameObject(self.SeedCropPrfb);
+                    self.FarmlandRoot.transform.position = buildingView.GetCenterPos();
+                    self.FarmlandRoot.transform.parent = buildingView.BuildingRoot.transform;
+                    break;
+                case FarmlandState.FARMLAND_STATE_RIPE:
+                    self.FarmlandRoot = Util.GameObjectPoolHelper.SpawnGameObject(self.RipeCropPrfb);
+                    self.FarmlandRoot.transform.position = buildingView.GetCenterPos();
+                    self.FarmlandRoot.transform.parent = buildingView.BuildingRoot.transform;
+                    break;
+            }
+        }
+        
+    }
+}
diff --git a/Unity/Codes/HotfixView/Demo/Building/PeopleMoveEnd_InCabin.cs b/Unity/Codes/HotfixView/Demo/Building/PeopleMoveEnd_InCabin.cs
new file mode 100644
index 0000000..ae76768
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/Building/PeopleMoveEnd_InCabin.cs
@@ -0,0 +1,24 @@
+﻿using ET.EventType;
+
+namespace ET
+{
+    public class PeopleMoveEnd_InCabin : AEvent<PeopleMoveEnd>
+    {
+        protected override void Run(PeopleMoveEnd args)
+        {
+            var people = args.People;
+            var unit = UnitHelper.GetMyUnitFromZoneScene(people.ZoneScene());
+
+            int behave = people.GetBehaveType();
+            var targetId = people.GetTargetId();
+            if (behave == ConstBehaveType.BEHAVE_PREPARE_CABIN)
+            {
+                var cabin = unit.GetGrandChild<Cabin>(targetId);
+                if (cabin != null)
+                {
+                    CabinHelper.ArriveCabin(unit, people, cabin).Coroutine();
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/FUI/AutoGeneratedCode/Building/FUI_FarmlandBatchWindow.cs b/Unity/Codes/HotfixView/Demo/FUI/AutoGeneratedCode/Building/FUI_FarmlandBatchWindow.cs
new file mode 100644
index 0000000..11e302e
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/FUI/AutoGeneratedCode/Building/FUI_FarmlandBatchWindow.cs
@@ -0,0 +1,175 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+using System.Threading.Tasks;
+
+namespace ET
+{
+    namespace FUIBuilding
+    {
+        public class FUI_FarmlandBatchWindowAwakeSystem : AwakeSystem<FUI_FarmlandBatchWindow>
+        {
+            public override void Awake(FUI_FarmlandBatchWindow self)
+            {
+                self.Awake();
+            }
+        }
+            
+        public class FUI_FarmlandBatchWindowDestroySystem : DestroySystem<FUI_FarmlandBatchWindow>
+            {
+                public override void Destroy(FUI_FarmlandBatchWindow self)
+                {
+                    self.Destroy();
+                }
+            }
+                
+        [FriendClass(typeof(FUI))]
+        [FriendClass(typeof(FUI_FarmlandBatchWindow))]
+        public static class FUI_FarmlandBatchWindowSystem
+        {
+        
+            public static void Awake(this FUI_FarmlandBatchWindow self)
+            {
+	            var fui = self.GetParent<FUI>();
+                if(fui.GObject == null)
+                {
+                    return;
+                }
+                
+                self.FGComp = (GComponent)fui.GObject;
+                
+                self.FGComp.Add(fui);
+                
+                var com = fui.GObject.asCom;
+                    
+                if(com != null)
+                {	
+                        
+        			self.m_farmlandState = com.GetControllerAt(0);
+        			self.m_hasPeople = com.GetControllerAt(1);
+        			self.m_isBatchOperating = com.GetControllerAt(2);
+        			self.m_n1 = (GGraph)com.GetChildAt(0);
+        			self.m_PlantSeedList = (GList)com.GetChildAt(1);
+        			self.m_n3 = (GGraph)com.GetChildAt(2);
+        			self.m_SeedInfoPopup = FUIHelper.Create<FUI_SeedInfoPopup>(self, com.GetChildAt(3));
+        			self.m_n52 = (GImage)com.GetChildAt(4);
+        			self.m_PlantSeedCursor = (GImage)com.GetChildAt(5);
+        			self.m_SeedPanel = (GGroup)com.GetChildAt(6);
+        			self.m_n8 = (GGraph)com.GetChildAt(7);
+        			self.m_n10 = (GGraph)com.GetChildAt(8);
+        			self.m_WaitForPlant_CropIcon = (GLoader)com.GetChildAt(9);
+        			self.m_n12 = (GTextField)com.GetChildAt(10);
+        			self.m_WaitForPlantText = (GTextField)com.GetChildAt(11);
+        			self.m_n14 = (GTextField)com.GetChildAt(12);
+        			self.m_n15 = (GTextField)com.GetChildAt(13);
+        			self.m_WaitForPlantPanel = (GGroup)com.GetChildAt(14);
+        			self.m_n18 = (GGraph)com.GetChildAt(15);
+        			self.m_n19 = (GGraph)com.GetChildAt(16);
+        			self.m_Grow_CropIcon = (GLoader)com.GetChildAt(17);
+        			self.m_n21 = (GTextField)com.GetChildAt(18);
+        			self.m_GrowText = (GTextField)com.GetChildAt(19);
+        			self.m_n23 = (GTextField)com.GetChildAt(20);
+        			self.m_Grow_ProductionNum = (GTextField)com.GetChildAt(21);
+        			self.m_GrowSpeedUpButton = FUIHelper.Create<FUI_GreenButton>(self, com.GetChildAt(22));
+        			self.m_GrowPanel = (GGroup)com.GetChildAt(23);
+        			self.m_n27 = (GGraph)com.GetChildAt(24);
+        			self.m_n28 = (GGraph)com.GetChildAt(25);
+        			self.m_Harvest_CropIcon = (GLoader)com.GetChildAt(26);
+        			self.m_n30 = (GTextField)com.GetChildAt(27);
+        			self.m_HarvestText = (GTextField)com.GetChildAt(28);
+        			self.m_n32 = (GTextField)com.GetChildAt(29);
+        			self.m_Harvest_ProductionNum = (GTextField)com.GetChildAt(30);
+        			self.m_n53 = (GImage)com.GetChildAt(31);
+        			self.m_HarvestCursor = (GImage)com.GetChildAt(32);
+        			self.m_HarvestPanel = (GGroup)com.GetChildAt(33);
+        			self.m_RemoveButton = FUIHelper.Create<FUI_GreenButton>(self, com.GetChildAt(34));
+        			self.m_CloseButton = FUIHelper.Create<FUI_GreenButton>(self, com.GetChildAt(35));
+        			self.m_n44 = (GGraph)com.GetChildAt(36);
+        			self.m_n38 = (GGraph)com.GetChildAt(37);
+        			self.m_n51 = (GGraph)com.GetChildAt(38);
+        			self.m_Farmer_Icon = (GLoader)com.GetChildAt(39);
+        			self.m_Farmer_Name = (GTextField)com.GetChildAt(40);
+        			self.m_n39 = (GTextField)com.GetChildAt(41);
+        			self.m_Farmer_Labor = (GTextField)com.GetChildAt(42);
+        			self.m_n45 = (GGraph)com.GetChildAt(43);
+        			self.m_n46 = (GGraph)com.GetChildAt(44);
+        			self.m_n47 = (GTextField)com.GetChildAt(45);
+        			self.m_CancelFarmerButton = FUIHelper.Create<FUI_WorkerCancelButton>(self, com.GetChildAt(46));
+        			self.m_AddFarmerButton = FUIHelper.Create<FUI_GreenButton>(self, com.GetChildAt(47));
+        			self.m_PeopleState = (GTextField)com.GetChildAt(48);
+        			self.m_FarmerInfoGroup = (GGroup)com.GetChildAt(49);
+        		}
+        	}
+        
+            public static void Destroy(this FUI_FarmlandBatchWindow self)
+            {
+                if(self.IsDisposed)
+                {
+                    return;
+                }
+                self.FGComp.Remove();
+                self.FGComp = null;              
+                
+        		self.m_farmlandState = null;
+        		self.m_hasPeople = null;
+        		self.m_isBatchOperating = null;
+        		self.m_n1 = null;
+        		self.m_PlantSeedList = null;
+        		self.m_n3 = null;
+        		self.m_SeedInfoPopup.Dispose();
+        		self.m_SeedInfoPopup = null;
+        		self.m_n52 = null;
+        		self.m_PlantSeedCursor = null;
+        		self.m_SeedPanel = null;
+        		self.m_n8 = null;
+        		self.m_n10 = null;
+        		self.m_WaitForPlant_CropIcon = null;
+        		self.m_n12 = null;
+        		self.m_WaitForPlantText = null;
+        		self.m_n14 = null;
+        		self.m_n15 = null;
+        		self.m_WaitForPlantPanel = null;
+        		self.m_n18 = null;
+        		self.m_n19 = null;
+        		self.m_Grow_CropIcon = null;
+        		self.m_n21 = null;
+        		self.m_GrowText = null;
+        		self.m_n23 = null;
+        		self.m_Grow_ProductionNum = null;
+        		self.m_GrowSpeedUpButton.Dispose();
+        		self.m_GrowSpeedUpButton = null;
+        		self.m_GrowPanel = null;
+        		self.m_n27 = null;
+        		self.m_n28 = null;
+        		self.m_Harvest_CropIcon = null;
+        		self.m_n30 = null;
+        		self.m_HarvestText = null;
+        		self.m_n32 = null;
+        		self.m_Harvest_ProductionNum = null;
+        		self.m_n53 = null;
+        		self.m_HarvestCursor = null;
+        		self.m_HarvestPanel = null;
+        		self.m_RemoveButton.Dispose();
+        		self.m_RemoveButton = null;
+        		self.m_CloseButton.Dispose();
+        		self.m_CloseButton = null;
+        		self.m_n44 = null;
+        		self.m_n38 = null;
+        		self.m_n51 = null;
+        		self.m_Farmer_Icon = null;
+        		self.m_Farmer_Name = null;
+        		self.m_n39 = null;
+        		self.m_Farmer_Labor = null;
+        		self.m_n45 = null;
+        		self.m_n46 = null;
+        		self.m_n47 = null;
+        		self.m_CancelFarmerButton.Dispose();
+        		self.m_CancelFarmerButton = null;
+        		self.m_AddFarmerButton.Dispose();
+        		self.m_AddFarmerButton = null;
+        		self.m_PeopleState = null;
+        		self.m_FarmerInfoGroup = null;
+        	}
+        }
+    }
+}
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/FUI/AutoGeneratedCode/Building/Friend/FUIFarmlandBatchWindowComponentSystemFriend.cs b/Unity/Codes/HotfixView/Demo/FUI/AutoGeneratedCode/Building/Friend/FUIFarmlandBatchWindowComponentSystemFriend.cs
new file mode 100644
index 0000000..267933b
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/FUI/AutoGeneratedCode/Building/Friend/FUIFarmlandBatchWindowComponentSystemFriend.cs
@@ -0,0 +1,22 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+namespace ET
+{
+    using FUIBuilding;
+    [FriendClass(typeof(FUI_SeedInfoPopup))]
+    [FriendClass(typeof(FUI_GreenButton))]
+    [FriendClass(typeof(FUI_GreenButton))]
+    [FriendClass(typeof(FUI_GreenButton))]
+    [FriendClass(typeof(FUI_WorkerCancelButton))]
+    [FriendClass(typeof(FUI_GreenButton))]
+    
+    [FriendClass(typeof(FUIFarmlandBatchWindowComponent))]
+    
+    [FriendClass(typeof(FUI_FarmlandBatchWindow))]
+    
+    public static partial class FUIFarmlandBatchWindowComponentSystem
+    {
+
+    }
+            
+}
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindowComponentSystem.cs b/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindowComponentSystem.cs
new file mode 100644
index 0000000..3ca82f7
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindowComponentSystem.cs
@@ -0,0 +1,542 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using ET.FUIResource;
+using FairyGUI;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+namespace ET
+{
+    using FUIBuilding;
+    
+    public class FUIFarmlandBatchWindowComponentAwakeSystem : AwakeSystem<FUIFarmlandBatchWindowComponent>
+    {
+        public override void Awake(FUIFarmlandBatchWindowComponent self)
+        {
+            self.Awake();
+        }
+    }
+
+    [FriendClass(typeof(Building))]
+    [FriendClass(typeof(Farmland))]
+    [FriendClass(typeof(People))]
+    [FriendClass(typeof(Cabin))]
+    public static partial class FUIFarmlandBatchWindowComponentSystem
+    {
+        public static void Awake(this FUIFarmlandBatchWindowComponent self)
+        {
+            self.FUIFarmlandBatchWindow = self.Parent.GetComponent<FUI_FarmlandBatchWindow>();
+            var win = new FUIFarmlandBatchWindow();
+            win.OnWindowHide = self.OnHide;
+            self.Window = win;
+            self.Window.contentPane = self.FUIFarmlandBatchWindow.FGComp;
+            
+            UIObjectFactory.SetPackageItemExtension(FUIPackage.Building_PlantSeedItem, typeof(PlantSeedItem));
+            
+            self.CameraComp = self.ZoneScene().CurrentScene().GetComponent<CameraComponent>();
+            
+            // events
+            self.FUIFarmlandBatchWindow.m_PlantSeedList.onClickItem.Add(self.OnSeedItemClick);
+            self.FUIFarmlandBatchWindow.m_AddFarmerButton.FGComp.onClick.Add(self.OnAddFarmerButtonClick);
+            self.FUIFarmlandBatchWindow.m_CancelFarmerButton.FGComp.AddClickListenerAsync(self.OnCancelFarmerButtonClick);
+            self.FUIFarmlandBatchWindow.m_GrowSpeedUpButton.FGComp.AddClickListenerAsync(self.OnGrowSpeedUpButtonClick);
+            self.FUIFarmlandBatchWindow.m_CloseButton.FGComp.onClick.Add(self.OnCloseButtonClick);
+            
+            self.FUIFarmlandBatchWindow.FGComp.onTouchBegin.Add(self.OnTouchBegin);
+            self.FUIFarmlandBatchWindow.FGComp.onTouchMove.Add(self.OnTouchMove);
+            self.FUIFarmlandBatchWindow.FGComp.onTouchEnd.Add(self.OnTouchEnd);
+
+            if (Application.platform is RuntimePlatform.WindowsEditor or RuntimePlatform.WindowsPlayer)
+            {
+                Stage.inst.onTouchMove.Add(self.OnGlobalTouchMove);
+            }
+
+        }
+        
+        public static void ShowInfo(this FUIFarmlandBatchWindowComponent self, Building building)
+        {
+            if (self.IsInBatchOperating)
+            {
+                return;
+            }
+            self.Building = building;
+            self.Farmland = self.Building.GetChildByType<Farmland>();
+            if (self.Farmland == null)
+            {
+                Log.Error($"Building [{self.Building.Id}] doesn't have a Farmland");
+                return;
+            }
+
+            self.CurBatchOperate = BatchOperate.None;
+
+            if (self.Farmland.CabinId <= 0)
+            {
+                Log.Error($"Farmland [{self.Farmland.Id}] doesn't belong to a cabin");
+                return;
+            }
+
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+
+            var cabin = unit.GetGrandChild<Cabin>(self.Farmland.CabinId);
+            if (cabin == null)
+            {
+                Log.Error($"Cabin [{self.Farmland.CabinId}] doesn't find");
+                return;
+            }
+
+            self.Cabin = cabin;
+            
+            // 显示小屋农民信息
+            self.ShowFarmer();
+            
+            self.FarmlandGroup.Clear();
+            foreach (long cabinFarmlandId in cabin.FarmlandIds)
+            {
+                var farmland = unit.GetGrandChild<Farmland>(cabinFarmlandId);
+                self.FarmlandGroup.Add(farmland);
+                var farmlandBuilding = farmland.GetParent<Building>();
+
+                var buildingView = farmlandBuilding.GetComponent<BuildingViewComponent>();
+                if (farmland == self.Farmland)
+                {
+                    // 高亮并描边当前选中的田
+                    buildingView?.HighlightBuilding(true);   
+                }
+                else
+                {
+                    // 高亮被一起管理的田
+                    buildingView?.HighlightBuilding();   
+                }
+            }
+
+            self.FUIFarmlandBatchWindow.m_farmlandState.selectedIndex = self.Farmland.FarmlandState;
+
+            // 根据农田状态来显示不同信息界面
+            switch (self.Farmland.FarmlandState)
+            {
+                case FarmlandState.FARMLAND_STATE_FREE:
+                    self.CurBatchOperate = BatchOperate.Seed;
+                    self.ShowSeedPanel();
+                    break;
+                case FarmlandState.FARMLAND_STATE_SEED:
+                    self.ShowWaitForPlantPanel();
+                    break;
+                case FarmlandState.FARMLAND_STATE_GROW:
+                    self.ShowGrowPanel();
+                    break;
+                case FarmlandState.FARMLAND_STATE_RIPE:
+                    self.CurBatchOperate = BatchOperate.Harvest;
+                    self.ShowHarvestPanel();
+                    break;
+            }
+        }
+
+        public static void Refresh(this FUIFarmlandBatchWindowComponent self)
+        {
+            self.ShowInfo(self.Building);
+        }
+        
+        // 当农田状态发生改变时，检查当前是否打开改变农田的界面，进行更新
+        public static void CheckToRefresh(this FUIFarmlandBatchWindowComponent self, Farmland farmland)
+        {
+            if (self.Farmland == farmland)
+            {
+                self.Refresh();
+            }
+        }
+
+        public static void ShowFarmer(this FUIFarmlandBatchWindowComponent self)
+        {
+            if (self.Farmland == null)
+            {
+                Log.Error($"Building [{self.Building.Id}] doesn't have a Farmland");
+                return;
+            }
+            
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+            if (self.Cabin == null)
+            {
+                Log.Error($"Cabin [{self.Farmland.CabinId}] doesn't find");
+                return;
+            }
+
+            if (self.Cabin.PeopleId <= 0)
+            {
+                self.FUIFarmlandBatchWindow.m_hasPeople.selectedIndex = 0;
+                return;
+            }
+            
+            self.FUIFarmlandBatchWindow.m_hasPeople.selectedIndex = 1;
+
+            var peopleComp = unit.GetComponent<PeopleComponent>();
+            var people = peopleComp.GetChild<People>(self.Cabin.PeopleId);
+            if (people == null)
+            {
+                Log.Error($"Can't find people of Id [{self.Cabin.PeopleId}] in cabin");
+                return;
+            }
+
+            self.FUIFarmlandBatchWindow.m_Farmer_Icon.url = PeopleViewHelper.GetHeadIconUrlByGender(people.GetGender());
+            self.FUIFarmlandBatchWindow.m_Farmer_Name.text = people.Name;
+            self.FUIFarmlandBatchWindow.m_Farmer_Labor.text = people.Labor.ToString();
+
+            if (people.GetBehaveType() == ConstBehaveType.BEHAVE_PREPARE_CABIN)
+            {
+                self.FUIFarmlandBatchWindow.m_PeopleState.visible = true;
+            }
+            else
+            {
+                self.FUIFarmlandBatchWindow.m_PeopleState.visible = false;
+            }
+        }
+
+        #region Panels
+        public static void ShowSeedPanel(this FUIFarmlandBatchWindowComponent self)
+        {
+            if (Application.platform is RuntimePlatform.WindowsEditor or RuntimePlatform.WindowsPlayer)
+            {
+                self.FUIFarmlandBatchWindow.m_PlantSeedCursor.visible = true;
+            }
+            
+            self.FUIFarmlandBatchWindow.m_SeedInfoPopup.Visible = false;
+            var list = self.FUIFarmlandBatchWindow.m_PlantSeedList;
+
+            var cropConfigList = CropConfigCategory.Instance.GetList();
+            
+            // 获取当前种子的数量
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+            var storeComp = unit.GetComponent<StoreComponent>();
+            
+            list.RemoveChildrenToPool();
+            for (int i = 0; i < cropConfigList.Count; i++)
+            {
+                CropConfig cropConfig = cropConfigList[i];
+                var item = (PlantSeedItem)list.AddItemFromPool();
+                item.data = cropConfig;
+                item.Name.text = cropConfig.Name;
+                item.Icon.url = cropConfig.CropPic;
+                
+                var itemConfig = AllItemConfigCategory.Instance.Get(cropConfig.SeedNeed);
+                var curNum = storeComp.GetItemNum(itemConfig.Id);
+                
+                // TODO: 暂时去掉季节判断
+                // if (!cropConfig.Season.Contains(unit.Season))
+                // {
+                //     item.SetSeedState(SeedState.NOT_AVAILABLE);
+                // }
+                // else
+                if (curNum < cropConfig.SeedNum)
+                {
+                    item.SetSeedState(SeedState.NOT_NOT_ENOUGH);
+                }
+                else
+                {
+                    item.SetSeedState(SeedState.OK);
+                }
+                
+                if (i == 0)
+                {
+                    list.selectedIndex = 0;
+                    self.SelectSeedItem(item);
+                }
+            }
+        }
+        
+        public static void ShowWaitForPlantPanel(this FUIFarmlandBatchWindowComponent self)
+        {
+            var cropConfig = self.Farmland.Config;
+            if (cropConfig == null)
+            {
+                return;
+            }
+
+            self.FUIFarmlandBatchWindow.m_WaitForPlant_CropIcon.url = cropConfig.CropPic;
+        }
+
+        public static void ShowGrowPanel(this FUIFarmlandBatchWindowComponent self)
+        {
+            var cropConfig = self.Farmland.Config;
+            if (cropConfig == null)
+            {
+                return;
+            }
+
+            self.FUIFarmlandBatchWindow.m_Grow_CropIcon.url = cropConfig.CropPic;
+
+            int day = GameUtil.GetDaysOfTime(cropConfig.GrowthCycle);
+            self.FUIFarmlandBatchWindow.m_GrowText.text = TextHelper.GetGrowUpTimeText(day);
+            self.FUIFarmlandBatchWindow.m_Grow_ProductionNum.text = cropConfig.BasicProduction.ToString();
+        }
+        
+        public static void ShowHarvestPanel(this FUIFarmlandBatchWindowComponent self)
+        {
+            if (Application.platform is RuntimePlatform.WindowsEditor or RuntimePlatform.WindowsPlayer)
+            {
+                self.FUIFarmlandBatchWindow.m_HarvestCursor.visible = true;
+            }
+
+            var cropConfig = self.Farmland.Config;
+            if (cropConfig == null)
+            {
+                return;
+            }
+
+            self.FUIFarmlandBatchWindow.m_Harvest_CropIcon.url = cropConfig.CropPic;
+         
+            self.FUIFarmlandBatchWindow.m_Harvest_ProductionNum.text = cropConfig.BasicProduction.ToString();
+        }
+
+        #endregion
+        public static void OnAddFarmerButtonClick(this FUIFarmlandBatchWindowComponent self)
+        {
+            self.SelectFarmer().Coroutine();
+        }
+
+        public static async ETTask OnCancelFarmerButtonClick(this FUIFarmlandBatchWindowComponent self)
+        {
+            if (self.Farmland == null)
+            {
+                Log.Error($"Building [{self.Building.Id}] doesn't have a Farmland");
+                return;
+            }
+            
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+            if (self.Cabin == null)
+            {
+                Log.Error($"Cabin [{self.Farmland.CabinId}] doesn't find");
+                return;
+            }
+
+            if (self.Cabin.PeopleId <= 0)
+            {
+                self.FUIFarmlandBatchWindow.m_hasPeople.selectedIndex = 0;
+                return;
+            }
+            
+            var peopleComp = unit.GetComponent<PeopleComponent>();
+            var people = peopleComp.GetChild<People>(self.Cabin.PeopleId);
+            if (people == null)
+            {
+                Log.Error($"Can't find people of Id [{self.Cabin.PeopleId}] in cabin");
+                return;
+            }
+            
+            await PeopleHelper.ChangeBehave(unit, people, 0, ConstBehaveType.BEHAVE_IDLE);
+            
+            self.Refresh();
+        }
+
+        public static async ETTask SelectFarmer(this FUIFarmlandBatchWindowComponent self)
+        {
+            var selectWorkerWin = FUIComponent.Instance.ShowWindow<FUI_SelectWorkerWindow, FUISelectWorkerWindowComponent>();
+            var workers = await selectWorkerWin.ShowAsync(1);
+            if (workers.Count <= 0)
+            {
+                return;
+            }
+
+            var workerId = workers[0];
+            if (workerId <= 0)
+            {
+                return;
+            }
+            
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+            var peopleComp = unit.GetComponent<PeopleComponent>();
+            var worker = peopleComp.GetChild<People>(workerId);
+            await CabinHelper.GoCabin(unit, worker, self.Cabin);
+            self.Refresh();
+        }
+        
+        public static void SelectSeedItem(this FUIFarmlandBatchWindowComponent self, PlantSeedItem plantSeedItem)
+        {
+            var cropConfig = (CropConfig) plantSeedItem.data;
+            self.CurSelectCrop = cropConfig;
+
+            var itemConfig = AllItemConfigCategory.Instance.Get(cropConfig.SeedNeed);
+            
+            // 获取当前种子的数量
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+            var storeComp = unit.GetComponent<StoreComponent>();
+            var curNum = storeComp.GetItemNum(itemConfig.Id);
+
+            var popup = self.FUIFarmlandBatchWindow.m_SeedInfoPopup;
+            popup.m_Name.text = cropConfig.Name;
+            
+            popup.m_NeedNum.text = $"{curNum}/{cropConfig.SeedNum}";
+            string seasonStr = "";
+            int[] seasonArray = cropConfig.Season;
+            for (int i = 0; i < seasonArray.Length; i++)
+            {
+                seasonStr += TextHelper.GetSeasonText(seasonArray[i]);
+                if (seasonArray.Length > 1 && i < seasonArray.Length - 1)
+                {
+                    seasonStr += ",";
+                }
+            }
+            popup.m_Season.text = seasonStr;
+            popup.m_GrowTime.text = cropConfig.GrowthCycle.ToString();
+            popup.Visible = true;
+            GRoot.inst.ShowPopup(popup.FGComp, plantSeedItem);
+        }
+
+        public static void OnSeedItemClick(this FUIFarmlandBatchWindowComponent self, EventContext context)
+        {
+            var plantSeedItem = (PlantSeedItem) context.data;
+            self.SelectSeedItem(plantSeedItem);
+        }
+        
+        public static async ETTask OnGrowSpeedUpButtonClick(this FUIFarmlandBatchWindowComponent self)
+        {
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+            int result = await FarmlandHelper.FarmlandRipe(unit, self.Farmland.Id);
+        }
+
+        public static void SetIsBatchOperating(this FUIFarmlandBatchWindowComponent self, bool isBatching)
+        {
+            self.IsInBatchOperating = isBatching;
+            self.FUIFarmlandBatchWindow.m_isBatchOperating.selectedIndex = isBatching? 1 : 0;
+        }
+
+        public static void CheckToDoBatchOperate(this FUIFarmlandBatchWindowComponent self, Vector2 screenPos)
+        {
+            if (self.CurBatchOperate == BatchOperate.None)
+            {
+                return;
+            }
+
+            
+            
+            Vector3 worldPos = self.CameraComp.ScreenToWorldPoint(screenPos);
+
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(self.ZoneScene());
+            
+            foreach (Farmland farmland in self.FarmlandGroup)
+            {
+                var building = farmland.GetParent<Building>();
+                var buildingView = building.GetComponent<BuildingViewComponent>();
+                if (buildingView.IsPointInClickArea(worldPos))
+                {
+                    if (!self.CurBatchOperateFarmlands.Contains(farmland))
+                    {
+                        switch (self.CurBatchOperate)
+                        {
+                            case BatchOperate.Seed:
+                                if (farmland.FarmlandState == FarmlandState.FARMLAND_STATE_FREE)
+                                {
+                                    self.CurBatchOperateFarmlands.Add(farmland);
+                                    CabinHelper.CabinSeed(unit, farmland, self.CurSelectCrop.Id).Coroutine();
+                                    self.SetIsBatchOperating(true);
+                                }
+                                break;
+                            case BatchOperate.Harvest:
+                                if (farmland.FarmlandState == FarmlandState.FARMLAND_STATE_RIPE)
+                                {
+                                    self.CurBatchOperateFarmlands.Add(farmland);
+                                    CabinHelper.CabinHarvest(unit, farmland).Coroutine();
+                                    self.SetIsBatchOperating(true);
+                                }
+                                break;
+                        }
+                    }
+                }
+            }
+        }
+
+        public static bool IsOnUI(this FUIFarmlandBatchWindowComponent self)
+        {
+            // 除子UI元素的其它窗口区域都认为是非UI
+            if (Stage.inst.touchTarget == self.FUIFarmlandBatchWindow.FGComp.displayObject)
+            {
+                return false;
+            }
+
+            return true;
+        }
+        
+        public static void OnTouchBegin(this FUIFarmlandBatchWindowComponent self, EventContext eventContext)
+        {
+            if (self.CurBatchOperate == BatchOperate.None)
+            {
+                return;
+            }
+
+            if (self.IsOnUI())
+            {
+                return;
+            }
+            
+            eventContext.CaptureTouch();
+            
+            self.CurTouchPos.Set(eventContext.inputEvent.x, Screen.height - eventContext.inputEvent.y);
+            self.CheckToDoBatchOperate(self.CurTouchPos);
+        }
+        
+        public static void OnTouchMove(this FUIFarmlandBatchWindowComponent self, EventContext eventContext)
+        {
+            self.CurTouchPos.Set(eventContext.inputEvent.x, Screen.height - eventContext.inputEvent.y);
+            self.CheckToDoBatchOperate(self.CurTouchPos);
+        }
+
+        public static void OnTouchEnd(this FUIFarmlandBatchWindowComponent self, EventContext eventContext)
+        {
+            self.CurBatchOperateFarmlands.Clear();
+            
+
+            // 批量操作后关闭窗口，因为可能选中的田会发生状态改变，造成操作改变
+            if (self.IsInBatchOperating)
+            {
+                self.SetIsBatchOperating(false);
+                self.Hide();
+            }
+        }
+
+
+        public static void OnGlobalTouchMove(this FUIFarmlandBatchWindowComponent self, EventContext eventContext)
+        {
+            switch (self.CurBatchOperate)
+            {
+                case BatchOperate.Seed:
+                     //self.FUIFarmlandBatchWindow.m_PlantSeedCursor.visible = true;
+                     self.FUIFarmlandBatchWindow.m_PlantSeedCursor.position = eventContext.inputEvent.position;
+
+                    break;
+                case BatchOperate.Harvest:
+                    //self.FUIFarmlandBatchWindow.m_HarvestCursor.visible = true;
+                    self.FUIFarmlandBatchWindow.m_HarvestCursor.position = eventContext.inputEvent.position;
+
+                    break;
+            }
+        }
+
+        public static void OnHide(this FUIFarmlandBatchWindowComponent self)
+        {
+            var buildingView = self.Building.GetComponent<BuildingViewComponent>();
+            buildingView?.NormalBuilding();
+            
+            foreach (Farmland farmland in self.FarmlandGroup)
+            {
+                if (farmland == self.Farmland)
+                {
+                    continue;
+                }
+                var farmlandBuilding = farmland.GetParent<Building>();
+                buildingView = farmlandBuilding.GetComponent<BuildingViewComponent>();
+                buildingView?.NormalBuilding();
+            }
+
+            self.SetIsBatchOperating(false);
+        }
+
+        public static void Hide(this FUIFarmlandBatchWindowComponent self)
+        {
+            self.Window.Hide();
+        }
+
+        public static void OnCloseButtonClick(this FUIFarmlandBatchWindowComponent self)
+        {
+            self.Hide();
+        }
+    } 
+                
+}
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FUIFarmlandWindowComponentSystem.cs b/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FUIFarmlandWindowComponentSystem.cs
index da501c3..ed546c0 100644
--- a/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FUIFarmlandWindowComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FUIFarmlandWindowComponentSystem.cs
@@ -189,6 +189,7 @@ namespace ET
             }
 
             self.FUIFarmlandWindow.m_Harvest_CropIcon.url = cropConfig.CropPic;
+            self.FUIFarmlandWindow.m_Harvest_ProductionNum.text = cropConfig.BasicProduction.ToString();
             
             if (self.Farmland.PeopleId > 0)
             {
diff --git a/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FarmlandStateChanged_RefreshWindow.cs b/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FarmlandStateChanged_RefreshWindow.cs
index bd39ae4..41b18ea 100644
--- a/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FarmlandStateChanged_RefreshWindow.cs
+++ b/Unity/Codes/HotfixView/Demo/FUI/Logic/Building/FarmlandStateChanged_RefreshWindow.cs
@@ -7,13 +7,25 @@ namespace ET
     {
         protected override void Run(FarmlandStateChanged args)
         {
-            var winEntity = FUIComponent.Instance.GetWindow(FUI_FarmlandWindow.UIResName) ;
+            var winEntity = FUIComponent.Instance.GetWindow(FUI_FarmlandWindow.UIResName);
             if (winEntity != null)
             {
                 var farmlandWin = winEntity as FUIFarmlandWindowComponent;
                 if (farmlandWin.IsShowing)
                 {
                     farmlandWin.CheckToRefresh(args.Farmland);
+                    return;
+                }
+            }
+            
+            winEntity = FUIComponent.Instance.GetWindow(FUI_FarmlandBatchWindow.UIResName);
+            if (winEntity != null)
+            {
+                var farmlandWin = winEntity as FUIFarmlandBatchWindowComponent;
+                if (farmlandWin.IsShowing)
+                {
+                    farmlandWin.CheckToRefresh(args.Farmland);
+                    return;
                 }
             }
         }
diff --git a/Unity/Codes/HotfixView/Demo/FUI/Logic/UnitName/FUIUnitNamePanelComponentSystem.cs b/Unity/Codes/HotfixView/Demo/FUI/Logic/UnitName/FUIUnitNamePanelComponentSystem.cs
index 517878d..4535ff7 100644
--- a/Unity/Codes/HotfixView/Demo/FUI/Logic/UnitName/FUIUnitNamePanelComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/FUI/Logic/UnitName/FUIUnitNamePanelComponentSystem.cs
@@ -1,5 +1,7 @@
 /** This is an automatically generated class by FairyGUI. Please do not modify it. **/
 
+using FairyGUI;
+using UnityEngine;
 using UnityEngine.Search;
 
 namespace ET
diff --git a/Unity/Codes/HotfixView/Demo/Operation/MapUnitOperationComponentSystem.cs b/Unity/Codes/HotfixView/Demo/Operation/MapUnitOperationComponentSystem.cs
index e0ef821..0b3b4b6 100644
--- a/Unity/Codes/HotfixView/Demo/Operation/MapUnitOperationComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/Operation/MapUnitOperationComponentSystem.cs
@@ -131,6 +131,11 @@ namespace ET
             self.UnitPosUpdate?.Invoke();
         }
 
+        public static bool IsPlaceValid(this MapUnitOperationComponent self)
+        {
+            return self.MapComp.IsPlaceValid(self.CurEditUnitRoot.position, self.CurEditUnitSize);
+        }
+
         public static Vector2 GetMidLeftPos(this MapUnitOperationComponent self)
         {
             var midPos = self.UnitMidPos;
diff --git a/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Cabin.cs b/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Cabin.cs
new file mode 100644
index 0000000..5a2cf82
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Cabin.cs
@@ -0,0 +1,23 @@
+﻿namespace ET.PeopleBehave
+{
+    [Behave(ConstBehaveType.BEHAVE_CABIN)]
+    public class Behave_Cabin : BehaveBase
+    {
+        public override void Handle(People people)
+        {
+            PeopleViewComponent pView = people.GetComponent<PeopleViewComponent>();
+            if (pView != null)
+            {
+                pView.SetNavEnable(false);
+            }
+            
+            var pAnimator = people.GetComponent<PeopleAnimatorComponent>();
+            if (pAnimator == null)
+            {
+                return;
+            }
+            pAnimator.StopAll();
+            pAnimator.PlayAnimation(PeopleAnimEnum.Idle);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Idle.cs b/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Idle.cs
index a353cde..bfacce9 100644
--- a/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Idle.cs
+++ b/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Idle.cs
@@ -5,6 +5,13 @@
     {
         public override void Handle(People people)
         {
+            PeopleViewComponent pView = people.GetComponent<PeopleViewComponent>();
+            if (pView != null)
+            {
+                pView.SetNavEnable(true);
+                pView.Stop();
+            }
+            
             var pAnimator = people.GetComponent<PeopleAnimatorComponent>();
             if (pAnimator == null)
             {
diff --git a/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Prepare_Cabin.cs b/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Prepare_Cabin.cs
new file mode 100644
index 0000000..3138641
--- /dev/null
+++ b/Unity/Codes/HotfixView/Demo/People/Behave/Behave_Prepare_Cabin.cs
@@ -0,0 +1,40 @@
+﻿namespace ET.PeopleBehave
+{
+    [Behave(ConstBehaveType.BEHAVE_PREPARE_CABIN)]
+    public class Behave_Prepare_Cabin : BehaveBase
+    {
+        public override void Handle(People people)
+        {
+            PeopleViewComponent pView = people.GetComponent<PeopleViewComponent>();
+            if (pView == null)
+            {
+                return;
+            }
+            
+            Unit unit = UnitHelper.GetMyUnitFromZoneScene(people.ZoneScene());
+            
+            // 为cabin
+            long targetId = people.GetTargetId();
+            var cabin = unit.GetGrandChild<Cabin>(targetId);
+
+            if (cabin != null)
+            {
+                Building building = cabin.GetParent<Building>();
+
+                if (building != null)
+                {
+                    var bView = building.GetComponent<BuildingViewComponent>();
+                    pView.MoveToPos(bView.GetWorkPos());
+                }
+            }
+
+            var pAnimator = people.GetComponent<PeopleAnimatorComponent>();
+            if (pAnimator == null)
+            {
+                return;
+            }
+            pAnimator.StopAll();
+            pAnimator.PlayAnimation(PeopleAnimEnum.Run);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Unity/Codes/HotfixView/Demo/People/PeopleViewComponentSystem.cs b/Unity/Codes/HotfixView/Demo/People/PeopleViewComponentSystem.cs
index 2fd6e46..5490e98 100644
--- a/Unity/Codes/HotfixView/Demo/People/PeopleViewComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/People/PeopleViewComponentSystem.cs
@@ -109,6 +109,11 @@ namespace ET
             }
         }
 
+        public static void SetNavEnable(this PeopleViewComponent self, bool enable)
+        {
+            self.Agent.enabled = enable;
+        }
+
         public static void Stop(this PeopleViewComponent self)
         {
             if (!self.IsMoving)
diff --git a/Unity/Codes/HotfixView/Demo/Resource/AutoResLoaderComponent.cs b/Unity/Codes/HotfixView/Demo/Resource/AutoResLoaderComponent.cs
index ac1e6b6..c97caa3 100644
--- a/Unity/Codes/HotfixView/Demo/Resource/AutoResLoaderComponent.cs
+++ b/Unity/Codes/HotfixView/Demo/Resource/AutoResLoaderComponent.cs
@@ -44,6 +44,12 @@ namespace ET
             var obj = await YooAssetComponent.Instance.LoadAssetAsyncAuto<T>(self.GetHashCode(), location);
             return obj;
         }
+        
+        public static T LoadAssetSync<T>(this AutoResLoaderComponent self, string location) where T : UnityEngine.Object
+        {
+            var obj = YooAssetComponent.Instance.LoadAssetSyncAuto<T>(self.GetHashCode(), location);
+            return obj;
+        }
 
         public static void Destroy(this AutoResLoaderComponent self)
         {
diff --git a/Unity/Codes/HotfixView/Demo/Resource/YooAssetComponent.cs b/Unity/Codes/HotfixView/Demo/Resource/YooAssetComponent.cs
index 85819d9..ec6dab7 100644
--- a/Unity/Codes/HotfixView/Demo/Resource/YooAssetComponent.cs
+++ b/Unity/Codes/HotfixView/Demo/Resource/YooAssetComponent.cs
@@ -96,6 +96,26 @@ namespace ET
 
             return obj;
         }
+        
+        public static T LoadAssetSyncAuto<T>(this YooAssetComponent self, int autoResLoaderCompHashCode, string location) where T : UnityEngine.Object
+        {
+            var obj = YooAssetWrapper.LoadAssetSync<T>(location);
+
+            self.AutoLoaderUnityObjects.TryGetValue(autoResLoaderCompHashCode, out List<UnityEngine.Object> objList);
+
+            if (objList == null)
+            {
+                objList = new List<UnityEngine.Object>();
+                self.AutoLoaderUnityObjects.Add(autoResLoaderCompHashCode, objList);
+            }
+
+            if (!objList.Contains(obj))
+            {
+                objList.Add(obj);
+            }
+
+            return obj;
+        }
 
         public static void ReleaseAuto(this YooAssetComponent self, int autoResLoaderCompHashCode)
         {
diff --git a/Unity/Codes/HotfixView/Demo/Resource/YooAssetHelper.cs b/Unity/Codes/HotfixView/Demo/Resource/YooAssetHelper.cs
index f1f9e02..1e0dd90 100644
--- a/Unity/Codes/HotfixView/Demo/Resource/YooAssetHelper.cs
+++ b/Unity/Codes/HotfixView/Demo/Resource/YooAssetHelper.cs
@@ -39,6 +39,18 @@ namespace ET
             var obj = await autoResLoaderComp.LoadAssetAsync<T>(location);
             return obj;
         }
+        
+        public static T LoadAssetSync<T>(this Entity self, string location) where T : UnityEngine.Object
+        {
+            var autoResLoaderComp = self.GetComponent<AutoResLoaderComponent>();
+            if ( autoResLoaderComp == null)
+            {
+                autoResLoaderComp = self.AddComponent<AutoResLoaderComponent>();
+            }
+
+            var obj = autoResLoaderComp.LoadAssetSync<T>(location);
+            return obj;
+        }
 
         public static string ToPrefabAddress(this string self)
         {
diff --git a/Unity/Codes/HotfixView/Demo/ResourceView/ResourceViewComponentSystem.cs b/Unity/Codes/HotfixView/Demo/ResourceView/ResourceViewComponentSystem.cs
index ab102b8..b031de6 100644
--- a/Unity/Codes/HotfixView/Demo/ResourceView/ResourceViewComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/ResourceView/ResourceViewComponentSystem.cs
@@ -14,7 +14,7 @@ namespace ET
         }
     }
     
-    public class ResourceViewComponentDestorySystem : DestroySystem<ResourceViewComponent>
+    public class ResourceViewComponentDestroySystem : DestroySystem<ResourceViewComponent>
     {
         public override void Destroy(ResourceViewComponent self)
         {
@@ -128,6 +128,22 @@ namespace ET
             self.UnitName.FGComp.xy = FUIHelper.ConvertToUIPos(topPos);
             self.UnitName.FGComp.scale = Vector2.one * 10 /mainCamera.orthographicSize;
         }
+
+        public static bool IsOnUI(this ResourceViewComponent self)
+        {
+            if (Stage.isTouchOnUI)
+            {
+                var unitNamePanel = FUIComponent.Instance.GetUI(FUI_UnitNamePanel.UIResName) as FUIUnitNamePanelComponent;
+                if (unitNamePanel != null && unitNamePanel.FUIUnitNamePanel.Visible)
+                {
+                    if (unitNamePanel.FUIUnitNamePanel.FGComp.IsAncestorOf(GRoot.inst.touchTarget))
+                    {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
         
         public static void OnSpriteClicked(this ResourceViewComponent self, ResourceViewComponent resourceViewComponent)
         {
diff --git a/Unity/Codes/HotfixView/Demo/Scene/MapComponentSystem.cs b/Unity/Codes/HotfixView/Demo/Scene/MapComponentSystem.cs
index 8d31f01..5112b95 100644
--- a/Unity/Codes/HotfixView/Demo/Scene/MapComponentSystem.cs
+++ b/Unity/Codes/HotfixView/Demo/Scene/MapComponentSystem.cs
@@ -35,7 +35,7 @@ namespace ET
     }
 
 
-
+    // 以最底部为Map的数组的0,0点
     [FriendClass(typeof(MapComponent))]
     public static class MapComponentSystem
     {
@@ -168,12 +168,12 @@ namespace ET
             return worldPos;
         }
 
-        public static Vector2Int WorldToMapPos(this MapComponent self, Vector2 worlPos)
+        public static Vector2Int WorldToMapPos(this MapComponent self, Vector2 worldPos)
         {
             Vector2Int mapPos = new Vector2Int();
-            var offsetY = worlPos.y + self.HalfTileMapHeight;
-            mapPos.x = Mathf.RoundToInt(offsetY / self.TileHeight - worlPos.x / self.TileWidth);
-            mapPos.y = Mathf.RoundToInt(worlPos.x / self.TileWidth + offsetY / self.TileHeight);
+            var offsetY = worldPos.y + self.HalfTileMapHeight;
+            mapPos.x = Mathf.RoundToInt(offsetY / self.TileHeight - worldPos.x / self.TileWidth);
+            mapPos.y = Mathf.RoundToInt(worldPos.x / self.TileWidth + offsetY / self.TileHeight);
 
             mapPos.x = Mathf.Clamp(mapPos.x, 0, self.MaxTileX);
             mapPos.y = Mathf.Clamp(mapPos.y, 0, self.MaxTileY);
@@ -186,14 +186,47 @@ namespace ET
             self.OccupyPlaceIndicatorMR = self.OccupyPlaceInidcator.GetComponent<MeshRenderer>();;
         }
 
-        public static void GetUnitRectIndices(this MapComponent self, Vector3 worldPos, Vector2Int size, out RectIndices rectIndices)
+        public static RectIndices GetUnitRectIndices(this MapComponent self, Vector3 worldPos, Vector2Int size)
         {
+            RectIndices rectIndices = new();
             // 坐标原点在底部中心
             Vector2Int bottomPos = self.WorldToMapPos(worldPos);
             rectIndices.startRow = bottomPos.x;
-            rectIndices.endRow = bottomPos.x + size.x;
+            rectIndices.endRow = Mathf.Min(bottomPos.x + size.x, self.MaxTileX);
             rectIndices.startCol = bottomPos.y;
-            rectIndices.endCol = bottomPos.y + size.y;
+            rectIndices.endCol = Mathf.Min(bottomPos.y + size.y, self.MaxTileY);
+
+            return rectIndices;
+        }
+
+        // 以传入的点为中心的一个矩形范围
+        public static RectIndices GetUnitRectIndicesOfCenter(this MapComponent self, Vector3 worldPos, Vector2Int size)
+        {
+            RectIndices rectIndices = new();
+            // 坐标原点在底部中心
+            Vector2Int bottomPos = self.WorldToMapPos(worldPos);
+
+            int halfSizeX = size.x / 2;
+            int halfSizeY = size.y / 2;
+            rectIndices.startRow = Mathf.Max(bottomPos.x - halfSizeX, 0);
+            rectIndices.endRow = Mathf.Min(bottomPos.x + halfSizeX, self.MaxTileX);
+            rectIndices.startCol = Mathf.Max(bottomPos.y - halfSizeY, 0);
+            rectIndices.endCol = Mathf.Min(bottomPos.y + halfSizeY, self.MaxTileY);
+
+            return rectIndices;
+        }
+
+        public static bool IsPosInRect(this MapComponent self, Vector2Int pos, RectIndices rectIndices)
+        {
+            if (pos.x >= rectIndices.startRow &&
+                pos.x < rectIndices.endRow &&
+                pos.y >= rectIndices.startCol &&
+                pos.y < rectIndices.endCol)
+            {
+                return true;
+            }
+
+            return false;
         }
 
         public static bool CheckPlaceValid(this MapComponent self, ref RectIndices rectIndices)
@@ -212,12 +245,17 @@ namespace ET
             return true;
         }
 
-        public static void UpdateIndicator(this MapComponent self,Vector3 worldPos, Vector2Int size)
+        public static bool IsPlaceValid(this MapComponent self, Vector3 worldPos, Vector2Int size)
         {
-            RectIndices rectIndices = new RectIndices();
-            self.GetUnitRectIndices(worldPos, size, out rectIndices);
+            RectIndices rectIndices = self.GetUnitRectIndices(worldPos, size);
             
-            if (self.CheckPlaceValid(ref rectIndices))
+            return self.CheckPlaceValid(ref rectIndices);
+        }
+
+        public static void UpdateIndicator(this MapComponent self,Vector3 worldPos, Vector2Int size)
+        {
+            var isValid = self.IsPlaceValid(worldPos, size);
+            if (isValid)
             {
                 self.OccupyPlaceIndicatorMR.material.color = self.ValidColor;
             }
@@ -252,8 +290,7 @@ namespace ET
 
         public static void MarkPlaceOnGrid(this MapComponent self, Vector3 pos, Vector2Int size, bool marked = true)
         {
-            RectIndices rectIndices = new RectIndices();
-            self.GetUnitRectIndices(pos, size, out rectIndices);
+            RectIndices rectIndices =  self.GetUnitRectIndices(pos, size);
 
             for (int i = rectIndices.startRow; i < rectIndices.endRow; i++)
             {
@@ -271,7 +308,7 @@ namespace ET
             self.NavMesh2d.BuildNavMesh();
         }
         
-        // sprte的局部坐标系的原点为底部中点
+        // sprite的局部坐标系的原点为底部中点
         public static Vector2Int LocalToMapPos(this MapComponent self, Vector2 topPos)
         {
             Vector2Int mapPos = new Vector2Int();
diff --git a/Unity/Codes/Model/Demo/Cabin/Cabin.cs b/Unity/Codes/Model/Demo/Cabin/Cabin.cs
index 894108d..c5e6a89 100644
--- a/Unity/Codes/Model/Demo/Cabin/Cabin.cs
+++ b/Unity/Codes/Model/Demo/Cabin/Cabin.cs
@@ -3,7 +3,7 @@ using MongoDB.Bson.Serialization.Attributes;
 
 namespace ET
 {
-    public class Cabin: Entity,IAwake,IUpdate, IDestroy,ISerializeToEntity
+    public class Cabin: Entity, IAwake,ISerializeToEntity, IDestroy
     {
         public long PeopleId;
         public List<long> FarmlandIds = new List<long>();
diff --git a/Unity/Codes/Model/Demo/EventType.cs b/Unity/Codes/Model/Demo/EventType.cs
index 5a373ae..044e57c 100644
--- a/Unity/Codes/Model/Demo/EventType.cs
+++ b/Unity/Codes/Model/Demo/EventType.cs
@@ -117,6 +117,7 @@ namespace ET
         {
             public Unit Unit;
             public Building Building;
+            public bool IsNew;  // 是否是新建的，区别于初始化时的创建
         }
         
         public struct AfterRemoveBuilding
diff --git a/Unity/Codes/Model/Demo/Farmland/Farmland.cs b/Unity/Codes/Model/Demo/Farmland/Farmland.cs
index 98542db..0c26f34 100644
--- a/Unity/Codes/Model/Demo/Farmland/Farmland.cs
+++ b/Unity/Codes/Model/Demo/Farmland/Farmland.cs
@@ -13,12 +13,10 @@ namespace ET
         public long PeopleId;   //农民id    
 
         public long CabinId; //小屋id
-       
-        
+
         
         [BsonIgnore]
         public CropConfig Config =>CropConfigCategory.Instance.Get(this.CropCfgId);
-
-
+        
     }
 }
\ No newline at end of file
diff --git a/Unity/Codes/Model/Demo/Helper/TextHelper.cs b/Unity/Codes/Model/Demo/Helper/TextHelper.cs
index 08bda63..5ee3d8d 100644
--- a/Unity/Codes/Model/Demo/Helper/TextHelper.cs
+++ b/Unity/Codes/Model/Demo/Helper/TextHelper.cs
@@ -2,6 +2,7 @@
 {
     public static class TextHelper
     {
+        public static string Building_Place_Invalid = "建造位置被占用";
         public static string GetSeasonText(int season)
         {
             switch (season)
@@ -56,6 +57,12 @@
                 case ConstBehaveType.BEHAVE_HARVEST:
                     msg = "收获中";
                     break;
+                case ConstBehaveType.BEHAVE_PREPARE_CABIN:
+                    msg = "去田间小屋的路上";
+                    break;
+                case ConstBehaveType.BEHAVE_CABIN:
+                    msg = "田间小屋";
+                    break;
                 default:
                     Log.Error($"Unknown behaviour type:{behaveType}");
                     break;
diff --git a/Unity/Codes/Model/Demo/People/People.cs b/Unity/Codes/Model/Demo/People/People.cs
index 493bf20..cd350e6 100644
--- a/Unity/Codes/Model/Demo/People/People.cs
+++ b/Unity/Codes/Model/Demo/People/People.cs
@@ -1,11 +1,8 @@
 ﻿using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using MongoDB.Bson;
 using MongoDB.Bson.Serialization.Attributes;
 using MongoDB.Bson.Serialization.Options;
+using MongoDB.Bson;
 
 namespace ET
 {
@@ -23,7 +20,9 @@ namespace ET
         public int BehaveType;
         public long TargetId;
         public int CurrSkillId;
+        [BsonRepresentation(BsonType.Double, AllowTruncation = true)]
         public float PosX;
+        [BsonRepresentation(BsonType.Double, AllowTruncation = true)]
         public float PosY;
         public int Disease; //疾病值
         public int PeopleType; //主角，伙伴，村民
@@ -34,8 +33,6 @@ namespace ET
         public int MoveSpeed; //移动速度
         public int Injury; //外伤
 
-       
-
         [BsonIgnore]
         public RoleConfig Config => RoleConfigCategory.Instance.Get(this.ConfigId);
 
diff --git a/Unity/Codes/Model/Generate/Config/StructureConfig.cs b/Unity/Codes/Model/Generate/Config/StructureConfig.cs
index e0a615a..18c4966 100644
--- a/Unity/Codes/Model/Generate/Config/StructureConfig.cs
+++ b/Unity/Codes/Model/Generate/Config/StructureConfig.cs
@@ -122,41 +122,44 @@ namespace ET
 		/// <summary>升级序列</summary>
 		[ProtoMember(14)]
 		public int UpgradeSequence { get; set; }
-		/// <summary>关联BUFF</summary>
+		/// <summary>关联科技</summary>
 		[ProtoMember(15)]
+		public int[] RelatedTechnology { get; set; }
+		/// <summary>关联BUFF</summary>
+		[ProtoMember(16)]
 		public int State { get; set; }
 		/// <summary>BUFF效果</summary>
-		[ProtoMember(16)]
+		[ProtoMember(17)]
 		public int StateAffection { get; set; }
 		/// <summary>特定点</summary>
-		[ProtoMember(17)]
+		[ProtoMember(18)]
 		public int SpecificPoint { get; set; }
 		/// <summary>开关功能</summary>
-		[ProtoMember(18)]
+		[ProtoMember(19)]
 		public int ON_OFF { get; set; }
 		/// <summary>攻击频率</summary>
-		[ProtoMember(19)]
+		[ProtoMember(20)]
 		public int AtcFrequency { get; set; }
 		/// <summary>攻击力</summary>
-		[ProtoMember(20)]
+		[ProtoMember(21)]
 		public int Atc { get; set; }
 		/// <summary>目标数量</summary>
-		[ProtoMember(21)]
+		[ProtoMember(22)]
 		public int TargetNum { get; set; }
 		/// <summary>预置文件</summary>
-		[ProtoMember(22)]
+		[ProtoMember(23)]
 		public string Prefab { get; set; }
 		/// <summary>可否移动</summary>
-		[ProtoMember(23)]
+		[ProtoMember(24)]
 		public int CanMove { get; set; }
 		/// <summary>图标</summary>
-		[ProtoMember(24)]
+		[ProtoMember(25)]
 		public string Picture { get; set; }
 		/// <summary>描述</summary>
-		[ProtoMember(25)]
+		[ProtoMember(26)]
 		public string Describe { get; set; }
 		/// <summary>可拆除</summary>
-		[ProtoMember(26)]
+		[ProtoMember(27)]
 		public int Remove { get; set; }
 
 	}
diff --git a/Unity/Codes/ModelView/Demo/Building/BuildingViewComponent.cs b/Unity/Codes/ModelView/Demo/Building/BuildingViewComponent.cs
index dcda47e..ced9fc2 100644
--- a/Unity/Codes/ModelView/Demo/Building/BuildingViewComponent.cs
+++ b/Unity/Codes/ModelView/Demo/Building/BuildingViewComponent.cs
@@ -13,5 +13,6 @@ namespace ET
         public FUI_BuildingName UnitName;
         public Material SharedMat;
         public SpriteRenderer BuildingSprRenderer;
+        public Collider2D ClickCollider2D;
     }
 }
\ No newline at end of file
diff --git a/Unity/Codes/ModelView/Demo/Building/FarmlandViewComponent.cs b/Unity/Codes/ModelView/Demo/Building/FarmlandViewComponent.cs
new file mode 100644
index 0000000..5c95d1f
--- /dev/null
+++ b/Unity/Codes/ModelView/Demo/Building/FarmlandViewComponent.cs
@@ -0,0 +1,14 @@
+﻿using UnityEngine;
+
+namespace ET
+{
+    [ComponentOf(typeof(Farmland))]
+    public class FarmlandViewComponent: Entity, IAwake
+    {
+        public GameObject FarmlandRoot;
+        public Farmland Farmland;
+
+        public GameObject SeedCropPrfb;
+        public GameObject RipeCropPrfb;
+    }
+}
diff --git a/Unity/Codes/ModelView/Demo/Common/TextConfigEnum.cs b/Unity/Codes/ModelView/Demo/Common/TextConfigEnum.cs
index cf46462..acae185 100644
--- a/Unity/Codes/ModelView/Demo/Common/TextConfigEnum.cs
+++ b/Unity/Codes/ModelView/Demo/Common/TextConfigEnum.cs
@@ -14,7 +14,7 @@ namespace ET
 		ID_1005 = 1005,
 		/// <summary>材料不足或规模条件未达成</summary>
 		ID_1006 = 1006,
-		/// <summary>您的修复零件或金币不足</summary>
+		/// <summary>材料或铜币不足</summary>
 		ID_1007 = 1007,
 		/// <summary>道具不足</summary>
 		ID_1008 = 1008,
@@ -140,6 +140,8 @@ namespace ET
 		ID_1068 = 1068,
 		/// <summary>请先设置农夫</summary>
 		ID_1069 = 1069,
+		/// <summary>耐久已满，无需修缮</summary>
+		ID_1070 = 1070,
 		/// <summary>抵达中...</summary>
 		ID_2001 = 2001,
 		/// <summary>每日起床后一个时辰、下雨时以及雨后一个时辰植物上会蓄满露水</summary>
diff --git a/Unity/Codes/ModelView/Demo/FUI/AutoGeneratedCode/Building/FUI_FarmlandBatchWindow.cs b/Unity/Codes/ModelView/Demo/FUI/AutoGeneratedCode/Building/FUI_FarmlandBatchWindow.cs
new file mode 100644
index 0000000..64559d5
--- /dev/null
+++ b/Unity/Codes/ModelView/Demo/FUI/AutoGeneratedCode/Building/FUI_FarmlandBatchWindow.cs
@@ -0,0 +1,99 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace ET
+{
+    namespace FUIBuilding
+    {
+        [ComponentOf(typeof(FUI))]
+        public sealed class FUI_FarmlandBatchWindow : Entity, IAwake, IDestroy
+        {	
+            public static string UIPackageName = "Building";
+            public static string UIResName = "FarmlandBatchWindow";
+            
+            /// <summary>
+            /// {uiResName}的组件类型(GComponent、GButton、GProcessBar等)，它们都是GObject的子类。
+            /// </summary>
+            public GComponent FGComp;
+                            
+        	public Controller m_farmlandState;
+        	public Controller m_hasPeople;
+        	public Controller m_isBatchOperating;
+        	public GGraph m_n1;
+        	public GList m_PlantSeedList;
+        	public GGraph m_n3;
+        	public FUI_SeedInfoPopup m_SeedInfoPopup;
+        	public GImage m_n52;
+        	public GImage m_PlantSeedCursor;
+        	public GGroup m_SeedPanel;
+        	public GGraph m_n8;
+        	public GGraph m_n10;
+        	public GLoader m_WaitForPlant_CropIcon;
+        	public GTextField m_n12;
+        	public GTextField m_WaitForPlantText;
+        	public GTextField m_n14;
+        	public GTextField m_n15;
+        	public GGroup m_WaitForPlantPanel;
+        	public GGraph m_n18;
+        	public GGraph m_n19;
+        	public GLoader m_Grow_CropIcon;
+        	public GTextField m_n21;
+        	public GTextField m_GrowText;
+        	public GTextField m_n23;
+        	public GTextField m_Grow_ProductionNum;
+        	public FUI_GreenButton m_GrowSpeedUpButton;
+        	public GGroup m_GrowPanel;
+        	public GGraph m_n27;
+        	public GGraph m_n28;
+        	public GLoader m_Harvest_CropIcon;
+        	public GTextField m_n30;
+        	public GTextField m_HarvestText;
+        	public GTextField m_n32;
+        	public GTextField m_Harvest_ProductionNum;
+        	public GImage m_n53;
+        	public GImage m_HarvestCursor;
+        	public GGroup m_HarvestPanel;
+        	public FUI_GreenButton m_RemoveButton;
+        	public FUI_GreenButton m_CloseButton;
+        	public GGraph m_n44;
+        	public GGraph m_n38;
+        	public GGraph m_n51;
+        	public GLoader m_Farmer_Icon;
+        	public GTextField m_Farmer_Name;
+        	public GTextField m_n39;
+        	public GTextField m_Farmer_Labor;
+        	public GGraph m_n45;
+        	public GGraph m_n46;
+        	public GTextField m_n47;
+        	public FUI_WorkerCancelButton m_CancelFarmerButton;
+        	public FUI_GreenButton m_AddFarmerButton;
+        	public GTextField m_PeopleState;
+        	public GGroup m_FarmerInfoGroup;
+        	public const string URL = "ui://2126z1eaigeqy";
+
+        
+            public bool Visible
+            {
+                get
+                {
+                    if (FGComp == null)
+                    {
+                        return false;
+                    }
+
+                    return FGComp.visible;
+                }
+                set
+                {
+                    if (FGComp == null)
+                    {
+                        return;
+                    }
+
+                    FGComp.visible = value;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Unity/Codes/ModelView/Demo/FUI/AutoGeneratedCode/Building/PackageBuilding.cs b/Unity/Codes/ModelView/Demo/FUI/AutoGeneratedCode/Building/PackageBuilding.cs
index bfa9ec6..ff6670f 100644
--- a/Unity/Codes/ModelView/Demo/FUI/AutoGeneratedCode/Building/PackageBuilding.cs
+++ b/Unity/Codes/ModelView/Demo/FUI/AutoGeneratedCode/Building/PackageBuilding.cs
@@ -14,6 +14,7 @@ namespace ET
         public const string Building_MaterialButton = "ui://Building/MaterialButton";
         public const string Building_BuildingMaterialInfoPopup = "ui://Building/BuildingMaterialInfoPopup";
         public const string Building_IconButton = "ui://Building/IconButton";
+        public const string Building_FarmlandBatchWindow = "ui://Building/FarmlandBatchWindow";
         public const string Building_BuildingInfoWindow = "ui://Building/BuildingInfoWindow";
         public const string Building_PrepareWorkerItem = "ui://Building/PrepareWorkerItem";
         public const string Building_WorkerCancelButton = "ui://Building/WorkerCancelButton";
diff --git a/Unity/Codes/ModelView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindow.cs b/Unity/Codes/ModelView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindow.cs
new file mode 100644
index 0000000..7989b64
--- /dev/null
+++ b/Unity/Codes/ModelView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindow.cs
@@ -0,0 +1,21 @@
+﻿using System;
+using FairyGUI;
+
+namespace ET
+{
+    public class FUIFarmlandBatchWindow: Window
+    {
+        public Action OnWindowShow;
+        public Action OnWindowHide;
+
+        protected override void OnShown()
+        {
+            this.OnWindowShow?.Invoke();
+        }
+
+        protected override void OnHide()
+        {
+            this.OnWindowHide?.Invoke();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Unity/Codes/ModelView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindowComponent.cs b/Unity/Codes/ModelView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindowComponent.cs
new file mode 100644
index 0000000..e78271e
--- /dev/null
+++ b/Unity/Codes/ModelView/Demo/FUI/Logic/Building/FUIFarmlandBatchWindowComponent.cs
@@ -0,0 +1,46 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace ET
+{
+    using FUIBuilding;
+    using FairyGUI;
+
+    public enum BatchOperate
+    {
+        None,
+        Seed,
+        Harvest
+    }
+    
+    /// <summary>
+    /// 批量处理农田的窗口
+    /// </summary>
+    public class FUIFarmlandBatchWindowComponent : Entity, IAwake, IDestroy, IFUIWindow
+    {
+        public Window Window { get; set; }
+        public FUI_FarmlandBatchWindow FUIFarmlandBatchWindow;
+
+        public Building Building;
+        public Farmland Farmland;
+        public Cabin Cabin;
+        public List<Farmland> FarmlandGroup = new List<Farmland>();
+        public CropConfig CurSelectCrop;
+        public BatchOperate CurBatchOperate = BatchOperate.None;
+        public List<Farmland> CurBatchOperateFarmlands = new List<Farmland>();
+        public Vector2 CurTouchPos = new Vector2();
+        public CameraComponent CameraComp;
+        public bool IsInBatchOperating = false;
+
+        public bool IsShowing
+        {
+            get
+            {
+                return this.Window.isShowing;
+            }
+        }
+    }
+                
+}
\ No newline at end of file
