查看: 26570|回复: 107

【爆甲英雄传】道具系统设计 2.道具的设计

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2014-11-5 19:13:20 | 显示全部楼层 |阅读模式
道具系统设计
2. 道具的设计

不好意思,自从《前言》之后,隔了这个么多天,第二篇文章才跟上。上次有朋友反映,微云的连接数太少了,小弟翻看了记录,貌似35次就上限了,不解,更新了,但是作为后备,所以上传至Dropbox上,不知道能不能下载。
下面是Dropbox的连接:

如果微云再次爆满,请联系小弟,小弟会尽快修复的,或者大家有没有豪气点的平台推荐下哈。

好了,言归正传,我们正式开始道具系统的设计,第一部分将会是核心系统(code)的设计部分,这个部分将会分成2个部分,道具和道具管理器。顾名思义,所以不多解释了。我们马上开始道具的设计。

首先,打开你的unity,然后使用现有的或新建工程,然后在Project中,新建一个C#脚本,重命名为:Item_Profile

【爆甲英雄传】道具系统设计 2.道具的设计

在正式编码之前,我们需要了解我们的需求,我们需要设计出什么样子的道具,道具的种类,道具之间的共享属性等等,一般的做法是,设计一个父类,然后根据不同的道具种类需求,然后派生出不同的道具出来,例如Item下派生出Weapon,Armor,Bomb等等,然后你会发现,你会派生出N多个类出来。而作为独立制作人,我们(请允许我加入你们的队伍里)的通常的做法是,边设计,边编码,然后再设计,再编码,所以,在实际开发中,你会发现,需求在不断的变化,如果真的派生出这么多类出来,肯定要疯掉了,所以,小弟的设计是,将所有属性写在同一个类中,然后根据实际需求,来选择性读写某些属性。这两种做法各有优略,而单一类最大的优势就是,

好了,说了半天,其实就是懒,OK。现在打开刚才的新建的 Item_Profile 文件,然后开始编码。
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;

  4. [System.Serializable]
  5. public class Item_Profile : MonoBehaviour
  6. {
  7. }
复制代码
作为道具的一员,之间肯定有某些共同的元素,例如名字,买卖价格,稀有程度等等。所以,我们首先要设计的是这些共同的元素。
item_id        ID,这个ID有系统自动分配,所以不需要对齐作出设计,保留为public,只是为了方便查看而已。
icon             2D图标。
comment      道具的描述。
type             道具类型,武器或护甲之类的。
rare             稀有度。
color            颜色,关联稀有度,白色到紫色之类的可视化等级。[size=13.63636302948px]
buy,sell        买卖价格。
limit_stack    堆栈上线,例如20个一组的面包,或且无法叠加的武器或护甲。
model           3D模型。
  1. #region common
  2.         // ********* common values ************//
  3.         // public string name = "";
  4.         public int item_id = -1; // this id assigned by item database manager

  5.         //public string item_name; // use the gameobject's name as well
  6.         public Texture2D icon;
  7.         public string comment;

  8.         public enum TYPE
  9.         {
  10.                 None,
  11.                 Weapon,
  12.                 Shield,
  13.                 Armor,
  14.                 Recipe,
  15.                 Parts,
  16.                 Consumables,
  17.                 Bomb
  18.         } ;
  19.         public TYPE type;

  20.         public int rare = 1000; // the rare level
  21.         public Color color = Color.white;

  22.         public int buy,sell;
  23.         public int limit_stack = 1; // maximun # of stack

  24.         public GameObject model;

  25.         #endregion
复制代码
然后就是武器属性的设计
weapon_type   武器的类型,单手剑或双手剑。
damage           攻击力,物理攻击或各种元素攻击。
damage_r        攻击力的波动范围。
  1. #region weapon
  2.    // ********* weapon values ************//
  3.    public enum WEAPON_TYPE
  4.    {
  5.            None,
  6.            Single_Sword
  7.    } ;
  8.    public WEAPON_TYPE weapon_type;

  9.    public int damage;
  10.    public int damage_r; // randomly range

  11.    public int damage_metal;
  12.    public int damage_metal_r;

  13.    public int damage_wood;
  14.    public int damage_wood_r;

  15.    public int damage_water;
  16.    public int damage_water_r;

  17.    public int damage_fire;
  18.    public int damage_fire_r;

  19.    public int damage_earth;
  20.    public int damage_earth_r;

  21.    //////////////////////////////////////////
  22.    #endregion
复制代码
  1. 接着就是护盾和护驾的设计了,将他们放一起,是因为他们都属于防具,属性都一样。
  2. clan                 种族,精灵或且兽人,如果装备有指定种族的话,这个属性能帮上忙。
  3. armor_type      护甲类型,头部,手部还是护盾。
  4. def                  防御力,各种元素防御力。


  5. [C#] 纯文本查看 复制代码

  6. 01
  7. 02
  8. 03
  9. 04
  10. 05
  11. 06
  12. 07
  13. 08
  14. 09
  15. 10
  16. 11
  17. 12
  18. 13
  19. 14
  20. 15
  21. 16
  22. 17
  23. 18
  24. 19
  25. 20
  26. 21
  27. 22
  28. 23
  29. 24
  30. 25
  31. 26
  32. 27
  33. 28
  34. 29
  35. 30
  36. 31
  37. 32
  38. 33
  39. #region shield & armor
  40.    // ********* shield & armor values ************//
  41.    // public Material armor_material;

  42.    // only for armor
  43.    public enum CLAN_TYPE
  44.    {
  45.            None,
  46.            Elven,
  47.            Orc
  48.    } ;
  49.    public CLAN_TYPE clan = CLAN_TYPE.Orc;

  50.    // only for armor
  51.    public enum ARMOR_TYPE
  52.    {
  53.            None,
  54.            Chest,
  55.            Head,
  56.            Shoulder,
  57.            Belt
  58.    } ;
  59.    public ARMOR_TYPE armor_type;

  60.    public int def;
  61.    public int def_metal;
  62.    public int def_wood;
  63.    public int def_water;
  64.    public int def_fire;
  65.    public int def_earth;

  66.    //////////////////////////////////////////
  67.    #endregion


  68. 主要的道具我们都已经设计好了,下面让我们来搞点新意。小弟就拿大家都比较感兴趣的合成配方这个部分来举例吧。
  69. parts                合成所需的道具及数量。这里可能大家会有个疑问,为什么不用item_id 而要使用 Item_Profile 来关联道具,这个问题在设计道具管理器的时候会有解释。
  70. final_product     终于的合成品。


  71. [C#] 纯文本查看 复制代码

  72. 01
  73. 02
  74. 03
  75. 04
  76. 05
  77. 06
  78. 07
  79. 08
  80. 09
  81. 10
  82. 11
  83. 12
  84. 13
  85. #region recipe
  86.    // ********* recipe values ************//
  87.    [System.Serializable]
  88.    public class Recipe_Parts
  89.    {
  90.            public Item_Profile part;
  91.            public int number;

  92.    } ;
  93.    public Recipe_Parts[]         parts;
  94.    public Item_Profile                final_product;
  95.    //////////////////////////////////////////
  96.    #endregion


  97. 好了,差不多了,大致设计的方向就是这样了,再说下去估计大家都要无聊死了,所以,大家可以根据自身的需求来修改或扩写此类。现在,大家伙应该是迫不及待的要看看目前的设计成果了,OK,去吧,比卡丘。

  98. 马上新建一个Empty GameObject,然后挂载Item_Profile,然后你会发现,OMG,Inspector各种凌乱,完全无法继续设计下去了,这就是单一类带给我们的快乐,当然,今天绝对不会是这样结束的,我们接着下来要做的就是,改变这这一切。现在,小弟假设大家都有对Editor编程有一定的了解,如果你不知道什么是Editor变成,请参考官网:http://unity3d.com/learn/tutorials/modules/beginner/editor。

  99. OK,新建一个C#脚本,并重命名为:Item_Profile_Editor。

  100.   

  101. [C#] 纯文本查看 复制代码

  102. 01
  103. 02
  104. 03
  105. 04
  106. 05
  107. 06
  108. 07
  109. 08
  110. 09
  111. 10
  112. 11
  113. 12
  114. 13
  115. 14
  116. 15
  117. 16
  118. 17
  119. 18
  120. 19
  121. 20
  122. 21
  123. 22
  124. 23
  125. 24
  126. 25
  127. 26
  128. 27
  129. // 这里是需要改变指定的类在Inspector中的布局,这里我们需要改变的类就是Item_Profile。
  130. [CustomEditor(typeof(Item_Profile))]
  131. public class Item_Profile_Editor : Editor
  132. {

  133.         void OnEnable ()
  134.         {
  135.         }

  136.      // 这个函数,看名字就觉得很NB,这个就是在编辑状态下,Inspector的GUI的布局。
  137.         public override void OnInspectorGUI ()
  138.         {
  139.           // target是Editor里的一个属性,指的就是我们需要改变的那个类,这里做强转换,不解释。
  140.                 Item_Profile item = target as Item_Profile;
  141.           // 序列化更新,不解释。
  142.                 serializedObject.Update();

  143.           // Add your code here.
  144.           // ……

  145.           // 更新编辑后的数据。
  146.           serializedObject.ApplyModifiedProperties();

  147.      }


  148. }


  149. 这段代码可以说是Editor编程的固定格式,不做过多的解释了,反正直接复制过去就对了,哈哈哈哈。

  150. 如果编译成功,你可能会发现,Inspector什么都没有了,嗯,这就是成功的第一步了。

  151.   

  152. 现在开始显示道具们的共同元素。

  153. [C#] 纯文本查看 复制代码

  154. 01
  155. 02
  156. 03
  157. 04
  158. 05
  159. 06
  160. 07
  161. 08
  162. 09
  163. 10
  164. 11
  165. 12
  166. 13
  167. 14
  168. 15
  169. 16
  170. 17
  171. 18
  172. 19
  173. 20
  174. 21
  175. 22
  176. // ********* common values **********//
  177.                 item.item_id =         EditorGUILayout.IntField("auto_id", item.item_id);

  178.                 item.icon =         EditorGUILayout.ObjectField ("icon", item.icon, typeof(Texture2D)) as Texture2D;
  179.                 item.name =         EditorGUILayout.TextField ("name", item.name);

  180.                 item.comment =         EditorGUILayout.TextField("comment",item.comment);

  181.                 GUILayout.Space(5f);
  182.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("type") );
  183.                 GUILayout.Space(5f);
  184.                 item.rare = EditorGUILayout.IntField("rare",item.rare);
  185.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("color") );
  186.                 GUILayout.Space(5f);

  187.                 item.buy =                EditorGUILayout.IntField("buy", item.buy);
  188.                 item.sell =         EditorGUILayout.IntField("sell",item.sell);

  189.                 GUILayout.Space(5f);
  190.                 item.limit_stack =        EditorGUILayout.IntField("limit stack", item.limit_stack);

  191.                 item.model =         EditorGUILayout.ObjectField ("model", item.model, typeof(GameObject)) as GameObject;


  192. 这段代码没有什么可以解释的,我们就抽选几个作为举例吧。

  193. 简单数据类型的处理方法:
  194. item.item_id = EditorGUILayout.IntField("auto_id", item.item_id); // 显示并更新item.item_id, “auto_id”为在Inspector中显示的名称。

  195. 内置的对象的处理方法:
  196. item.icon = EditorGUILayout.ObjectField ("icon", item.icon, typeof(Texture2D)) as Texture2D;

  197. 对枚举类型的处理方法:
  198. EditorGUILayout.PropertyField(serializedObject.FindProperty(“type"));

  199. GUILayout函数是GUI的布局函数而已,不必太在意。

  200. 编译成功后,看看目前的成果吧。

  201.         
  202.   

  203. 成功的第二步,现在Type值的改变还会没有为我们带来什么实际上的效果,现在,要搞的就是这部分。

  204. [C++] 纯文本查看 复制代码

  205. 01
  206. 02
  207. 03
  208. 04
  209. 05
  210. 06
  211. 07
  212. 08
  213. 09
  214. 10
  215. 11
  216. 12
  217. 13
  218. 14
  219. 15
  220. 16
  221. 17
  222. 18
  223. 19
  224. 20
  225. 21
  226. 22
  227. 23
  228. 24
  229. 25
  230. 26
  231. 27
  232. 28
  233. 29
  234. 30
  235. 31
  236. 32
  237. 33
  238. 34
  239. 35
  240. 36
  241. 37
  242. // ********* core values **********//
  243.       GUILayout.Space(10f);
  244.       if (NGUIEditorTools.DrawHeader("Info:"))
  245.       {
  246.               NGUIEditorTools.BeginContents();
  247.               //GUILayout.BeginVertical();


  248.               switch (item.type)
  249.               {
  250.               case Item_Profile.TYPE.Weapon:
  251.                       Show_Weapon(item);
  252.                       break;

  253.               case Item_Profile.TYPE.Armor:
  254.               case Item_Profile.TYPE.Shield:
  255.                       Show_Armor_Shield(item);
  256.                       break;

  257.               case Item_Profile.TYPE.Recipe:
  258.                       Show_Recipe(item);
  259.                       break;

  260.               case Item_Profile.TYPE.Parts:
  261.                       Show_Parts(item);
  262.                       break;

  263.               case Item_Profile.TYPE.Consumables:
  264.                       break;

  265.               case Item_Profile.TYPE.Bomb:
  266.                       break;
  267.               }

  268.               //GUILayout.EndVertical();
  269.               NGUIEditorTools.EndContents();
  270.       }


  271. 你会发现这里有几个是NGUI的函数,如果你还没有NGUI插件的话,可以忽略这些,这只是个布局函数而已,好了,如果真的没有NGUI的话,直接从switch语句开始就好了。

  272. 你会发现,switch的参数就是item.type, 猜对了,Inspector会根据type的值,来显示其余的属性。这里就不做过多的贴代码行为了,都是大同小异的,这里特别想贴出来的是,Show_Recipe(item)。

  273. [C#] 纯文本查看 复制代码

  274. 1
  275. 2
  276. 3
  277. 4
  278. 5
  279. void Show_Recipe(Item_Profile item)
  280.         {
  281.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("parts"), true );
  282.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("final_product"), true );
  283.         }


  284. 特别想指出的是,因为这里包含了一个自定义数据的处理方法:
  285. EditorGUILayout.PropertyField( serializedObject.FindProperty("parts"), true );

  286. 好了,编译通过后,你会发现,当你修改Type值的时候,后续的内容也会跟着改变,现在是不是编辑起来方便和许多。(单一类和众派生类的做法基本相同,不同的就是需要根据type的值,来改变target的转换类型而已。)


  287.   

  288. 单有道具类还不够,我们需要有效的管理起成千上万的道具,下篇,我们将设计一个道具管理器,并将它设计成一个单一类,在整个游戏过程中,确保它是我们唯一能获取道具信息的唯一类,保证游戏进程中道具的信息统一。
复制代码
  1. 作为后备,为了放置连接数爆满,所以这里贴出全部代码,必要时可自行复制。嘻嘻。

  2. [size=13.63636302948px]Item_Profile:
  3. [size=13.63636302948px]
  4. [C#] 纯文本查看 复制代码
  5. using UnityEngine;

  6. using System.Collections;

  7. using System.Collections.Generic;



  8. [System.Serializable]

  9. public class Item_Profile : MonoBehaviour

  10. {

  11.         #region common

  12.         // ********* common values ************//

  13.         // public string name = "";

  14.         public int item_id = -1; // this id assigned by item database manager



  15.         //public string item_name; // use the gameobject's name as well

  16.         public Texture2D icon;

  17.         public string comment;



  18.         public enum TYPE

  19.         {

  20.                 None,

  21.                 Weapon,

  22.                 Shield,

  23.                 Armor,

  24.                 Recipe,

  25.                 Parts,

  26.                 Consumables,

  27.                 Bomb

  28.         };

  29.         public TYPE type;



  30.         public int rare = 1000; // the rare level

  31.         public Color color = Color.white;



  32.         public int buy,sell;

  33.         public int limit_stack = 1; // maximun # of stack



  34.         public GameObject model;



  35.         #endregion



  36.         //////////////////////////////////////////



  37.         #region weapon

  38.         // ********* weapon values ************//

  39.         





  40.         public enum WEAPON_TYPE

  41.         {

  42.                 None,

  43.                 Single_Sword

  44.         };

  45.         public WEAPON_TYPE weapon_type;



  46.         public int damage;

  47.         public int damage_r; // randomly range



  48.         public int damage_metal;

  49.         public int damage_metal_r;



  50.         public int damage_wood;

  51.         public int damage_wood_r;



  52.         public int damage_water;

  53.         public int damage_water_r;



  54.         public int damage_fire;

  55.         public int damage_fire_r;



  56.         public int damage_earth;

  57.         public int damage_earth_r;



  58.         //////////////////////////////////////////

  59.         #endregion



  60.         #region shield & armor

  61.         // ********* shield & armor values ************//

  62.         // public Material armor_material;



  63.         // only for armor

  64.         public enum CLAN_TYPE

  65.         {

  66.                 None,

  67.                 Elven,

  68.                 Orc

  69.         };

  70.         public CLAN_TYPE clan = CLAN_TYPE.Orc;



  71.         // only for armor

  72.         public enum ARMOR_TYPE

  73.         {

  74.                 None,

  75.                 Chest,

  76.                 Head,

  77.                 Shoulder,

  78.                 Belt

  79.         };

  80.         public ARMOR_TYPE armor_type;



  81.         public int def;

  82.         public int def_metal;

  83.         public int def_wood;

  84.         public int def_water;

  85.         public int def_fire;

  86.         public int def_earth;



  87.         //////////////////////////////////////////

  88.         #endregion



  89.         #region recipe

  90.         // ********* recipe values ************//

  91.         [System.Serializable]

  92.         public class Recipe_Parts

  93.         {

  94.                 public Item_Profile part;

  95.                 public int number;



  96.         };

  97.         public Recipe_Parts[]         parts;

  98.         public Item_Profile                final_product;

  99.         //////////////////////////////////////////

  100.         #endregion



  101.         #region parts

  102.         // ********* Parte values ************//



  103.         //////////////////////////////////////////



  104.         // ********* Consumables ************//





  105.         //////////////////////////////////////////



  106.         // ************* Bomb ************//

  107.         

  108.         

  109.         //////////////////////////////////////////

  110.         #endregion

  111. }

  112. [size=13.63636302948px]
  113. [size=13.63636302948px]Item_Profile_Editor:
  114. [size=13.63636302948px]
  115. [C#] 纯文本查看 复制代码
  116. using UnityEngine;

  117. using System.Collections;

  118. using UnityEditor;



  119. [CustomEditor(typeof(Item_Profile))]

  120. public class Item_Profile_Editor : Editor

  121. {



  122.         void OnEnable ()

  123.         {

  124.         }



  125.         public override void OnInspectorGUI ()

  126.         {

  127.                 Item_Profile item = target as Item_Profile;

  128.                 serializedObject.Update();





  129.                 // ********* common values **********//

  130.                 item.item_id =         EditorGUILayout.IntField("auto_id", item.item_id);



  131.                 item.icon =         EditorGUILayout.ObjectField ("icon", item.icon, typeof(Texture2D)) as Texture2D;

  132.                 item.name =         EditorGUILayout.TextField ("name", item.name);



  133.                 item.comment =         EditorGUILayout.TextField("comment",item.comment);



  134.                 GUILayout.Space(5f);

  135.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("type") );

  136.                 GUILayout.Space(5f);

  137.                 item.rare = EditorGUILayout.IntField("rare",item.rare);

  138.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("color") );

  139.                 GUILayout.Space(5f);



  140.                 item.buy =                EditorGUILayout.IntField("buy", item.buy);

  141.                 item.sell =         EditorGUILayout.IntField("sell",item.sell);



  142.                 GUILayout.Space(5f);

  143.                 item.limit_stack =        EditorGUILayout.IntField("limit stack", item.limit_stack);



  144.                 item.model =         EditorGUILayout.ObjectField ("model", item.model, typeof(GameObject)) as GameObject;







  145.                 // ********* core values **********//

  146.                 GUILayout.Space(10f);

  147.                 if (NGUIEditorTools.DrawHeader("Info:"))

  148.                 {

  149.                         NGUIEditorTools.BeginContents();

  150.                         //GUILayout.BeginVertical();





  151.                         switch (item.type)

  152.                         {

  153.                         case Item_Profile.TYPE.Weapon:

  154.                                 Show_Weapon(item);

  155.                                 break;



  156.                         case Item_Profile.TYPE.Armor:

  157.                         case Item_Profile.TYPE.Shield:

  158.                                 Show_Armor_Shield(item);

  159.                                 break;



  160.                         case Item_Profile.TYPE.Recipe:

  161.                                 Show_Recipe(item);

  162.                                 break;



  163.                         case Item_Profile.TYPE.Parts:

  164.                                 Show_Parts(item);

  165.                                 break;



  166.                         case Item_Profile.TYPE.Consumables:

  167.                                 break;



  168.                         case Item_Profile.TYPE.Bomb:

  169.                                 break;

  170.                         }



  171.                         //GUILayout.EndVertical();

  172.                         NGUIEditorTools.EndContents();

  173.                 }



  174.                 serializedObject.ApplyModifiedProperties();

  175.         }



  176.         void Show_Weapon(Item_Profile item)

  177.         {

  178.                 SerializedProperty weapon_type = serializedObject.FindProperty("weapon_type");

  179.                 EditorGUILayout.PropertyField( weapon_type );



  180.                 item.damage = EditorGUILayout.IntField("damage", item.damage);

  181.                 item.damage_r = EditorGUILayout.IntField("damage_r", item.damage_r);



  182.                 item.damage_metal = EditorGUILayout.IntField("metal", item.damage_metal);

  183.                 item.damage_metal_r = EditorGUILayout.IntField("metal_r", item.damage_metal_r);



  184.                 item.damage_wood = EditorGUILayout.IntField("wood", item.damage_wood);

  185.                 item.damage_wood_r = EditorGUILayout.IntField("wood_r", item.damage_wood_r);



  186.                 item.damage_water = EditorGUILayout.IntField("water", item.damage_water);

  187.                 item.damage_water_r = EditorGUILayout.IntField("water_r", item.damage_water_r);



  188.                 item.damage_fire = EditorGUILayout.IntField("fire", item.damage_fire);

  189.                 item.damage_fire_r = EditorGUILayout.IntField("fire_r", item.damage_fire_r);



  190.                 item.damage_earth = EditorGUILayout.IntField("earth", item.damage_earth);

  191.                 item.damage_earth_r = EditorGUILayout.IntField("earth_r", item.damage_earth);



  192.         }



  193.         void Show_Armor_Shield(Item_Profile item)

  194.         {

  195.                 //item.armor_material =         EditorGUILayout.ObjectField ("armor_material", item.armor_material, typeof(Material)) as Material;



  196.                 if (item.type == Item_Profile.TYPE.Armor)

  197.                 {

  198.                         SerializedProperty armor_type = serializedObject.FindProperty("armor_type");

  199.                         EditorGUILayout.PropertyField( armor_type );

  200.                         SerializedProperty clan = serializedObject.FindProperty("clan");

  201.                         EditorGUILayout.PropertyField( clan );

  202.                 }



  203.                 item.def = EditorGUILayout.IntField("def",item.def);

  204.                 item.def_metal = EditorGUILayout.IntField("metal",item.def_metal);

  205.                 item.def_wood = EditorGUILayout.IntField("wood",item.def_wood);

  206.                 item.def_water = EditorGUILayout.IntField("water",item.def_water);

  207.                 item.def_fire = EditorGUILayout.IntField("fire",item.def_fire);

  208.                 item.def_earth = EditorGUILayout.IntField("earth",item.def_earth);



  209.         }



  210.         void Show_Recipe(Item_Profile item)

  211.         {

  212.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("parts"), true );

  213.                 EditorGUILayout.PropertyField( serializedObject.FindProperty("final_product"), true );

  214.         }



  215.         void Show_Parts(Item_Profile item)

  216.         {

  217.         }



  218.         void Show_Consumables(Item_Profile item)

  219.         {

  220.         }



  221.         void Show_Bomb(Item_Profile item)

  222.         {

  223.         }



  224. }
复制代码

回复

使用道具 举报

ngk02lds78 该用户已被删除
发表于 2014-12-28 02:51:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

xbit 该用户已被删除
发表于 2014-12-28 02:51:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

woaiwojia6188 该用户已被删除
发表于 2014-12-28 02:52:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

游乐儿 该用户已被删除
发表于 2015-4-8 08:55:52 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1263

帖子

3968

积分

vip会员

Rank: 1

积分
3968
发表于 2015-4-13 21:05:03 来自手机 | 显示全部楼层
好帖必须得顶起
回复 支持 反对

使用道具 举报

0

主题

1352

帖子

4108

积分

vip会员

Rank: 1

积分
4108
发表于 2015-4-15 04:10:21 来自手机 | 显示全部楼层
嘘,低调。
回复 支持 反对

使用道具 举报

0

主题

1241

帖子

3932

积分

vip会员

Rank: 1

积分
3932
发表于 2015-4-15 16:50:23 来自手机 | 显示全部楼层
强大,冲会员去
回复 支持 反对

使用道具 举报

0

主题

1268

帖子

3975

积分

vip会员

Rank: 1

积分
3975
发表于 2015-4-16 16:55:23 来自手机 | 显示全部楼层
超霸气的资源,赶紧下了
回复 支持 反对

使用道具 举报

漂泊 该用户已被删除
发表于 2015-4-17 08:44:51 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部