找回密码
 点一下
楼主: greedwind

【注意】WE - Jass 手册 Online 将收入以下资料(请补充,欢迎精华大搬家!!)

[复制链接]
发表于 2006-4-3 17:02:13 | 显示全部楼层
[教程][原创]新手做图入门指导教程〔第一章〕(非新手勿进)   作者:巴哈姆涛

                                      前言:
    现在有很多玩家都对WE有着浓厚的兴趣,而且都想能创作出自己的魔兽地图,虽然在论坛里也有很多相关的讨论贴,但是大部份都是针对一些对WE有一定了解的玩家所做的,而对于刚刚起步并才开始弄WE的玩家则没有一些基本的教程或讨论贴,所以,在此,本人决定以自己学习WE及做图的经验与心得写一个面向初识WE玩家的地图制作指导教程,希望对各位新手们有所帮助!当然要完成一张RPG地图或是对战地图还要有作者的很大的决心及恒心,对魔兽这个游戏,包括战役地图,对战地图及RPG地图要有一定的了解,至少要会玩魔兽。如果你有以上两点条件的话,呵呵,那么请继续往下看吧,你一定会有所收获的!
                 第一章:  认识WE
             第一节 相关的名词及概念
  相信有些新手们还不知道什么是WE吧!呵呵,WE就是World Editor的简写啦,译做中文应该是叫做世界编辑器,这个东西就是大多数地图制作者们的工具了,你只需要在魔兽的安装目录下就能找到了。如果是第一次运行的话,会出现个用户协议之类的,不用管了,有对话框就只管按确定吧!
  关于什么是T?-我们在一些讨论贴中经常会看到一些诸如“用T吧,T不对吧”的语句,其实这个T也是一个简写,它是触发事件编辑器(Trigger),它的功能是很强大的,知道为什么对战地图时一来每个玩家都有一定的资源和单位吗?就是它弄的了,还有像一些RPG地图里的剧情啊,对话啊,包括开始时选择英雄也是用它来实现的,可以说,只要是一张RPG地图的话,T就是整个地图的精髓与灵魂所在。没有T,那么你的地图就只是一张好看的摆设罢了!!!(由于这是新手教学贴,所以在以下的课程里面会专门提出来进行讲解,现在暂不讨论)
  关于JASS,我想还是有很多人听说过JASS吧,这个的确是个好东东,功能比T还要强大,但是需要一定的程序设计能力的人才会用了吧,这对于新手来说更是不沾边的了,所以在本教程中不涉及讨论!如果各位有兴趣的话可以自己去找点相关的教程!
  另外的几个相关东东:物品管理器,声音管理器及输入管理器将在具体的制图过程教学中提到!
                第二节 熟悉WE
  不知怎么说呢,大多数地图作者都必须经历的一个过程吧:修改地图。呵呵,没错,修改地图是了解并熟悉WE的一个捷径。虽然现在都不提倡修改地图,不过做为学习WE的一个手段,我还是建议大家先从改图学起,而最简单的就是先修改官方的对战地图了!下面将以Lost Temple这张人气较高的对战图来入手,让我们一起揭开WE的神秘面纱!
  运行WE,进入后先将菜单栏里的窗口选项打开,将里面的刷子表那里的勾去掉,这样WE的速度会有所提高。选择菜单栏里的文件-打开地图,在目录里找到要打开的地图,如:Lost Temple.打开之后,就是这个地图的地形了!
     认识工具面板:在地图中有一个工具面板,如果没显示的话可以在菜单栏的层面里面打开。它包括:地形面板,地形装饰物品面板,单位面板,地区面板和镜头面板。以下将会分别说明!
     1.地形面板,最好理解的一个了,你现在所能看到的整个地图的地形。包括平地,坡地,水,草地和悬崖等都是用它弄出来的,自己试着改改看吧!     
     2.地形装饰物面板,呵呵,和上面那个差不多,不过内容就多了,看到地图上的树啊,花啊鸟啊什么的了吗?就是用它弄了,同理,自己试着改去吧!
     3.单位面板:也是事先放东西的工具了,地图上的中立怪,商店,生命泉和金矿就是用这个放的了,还有一个就是玩家开始地点也是由这个来完成。
     4.地区面板:基本上是用在T里面的,现在唯一能做的就是弄传送门。暂时先不管!
     5.镜头面板:用在交待剧情时用,同样要用T来弄,也先不管了!
说到这里,基本上WE里要用到的几个工具大家都知道一点点了,具体怎么用就在下面以修改地图的实例来说明了。(示范图为Lost Temple)
     一.修改金矿的数量,是不是觉得对战时金矿不够采,才12500的金子,改多一点吧。先将工具面板打开至单位面板,此时在地图上选中一个金矿,双击,会出现一个对话框,里面很明显有个“金钱含量”的框框,默认的是12500,这个就是该金矿的含金量了,想改多少自己弄吧。
     二.如何让中立怪死后掉落物品。是不是看到金矿旁边的怪有两个有白色圈圈在动啊?那个就说明杀了此单位后它会掉东东,怎么弄呢?同上面一样,选中它,双击,出现对话框了,此时你可以修改它的一些属性,如生命值比例,所属玩家等。看到掉落物品的选项没?就是那个,点了它后,打开下拉列表,里面有两个选项,两个都可以设置其死后掉落的物品,自己试试看怎么设置吧,这里就不再说明了!
     三.在原有地图上加一些单位:如商店,酒馆或是金矿放几个怪!打开单位面板,在中立无敌意里面可以找到如金矿,泉水,商店酒馆等中立建筑,也有一些单位,如小鸡野狗等。想在哪里放就放吧。要加入怪的话就打开中立敌对里面,慢慢找吧。放了之后就自己设置其掉落物品了,当然也可以改更其所属玩家,如果将怪改为中立无敌意,那么它就不会主动攻击你,根本就不会攻击你了,但是你杀了他也得不到经验和金钱!
     四.如何加个传送门。以地图的左上和右下的两个小岛为例,先在两边各放一个传送门(单位面板-中立无敌意-建筑),之后将工具面板打开为地区面板,点击后在左上的传送门所以位置(门下)弄出一个区域来,之后命名为DOOR A,同理在右下传送门处也弄一个,名为DOOR B,下面则是激活传送门了,切换回单位面板,双击左上传送门,出现对话框后有个激活选项,打勾,出现下拉列表,选择DOOR B,此时这个传送门就好了,接下来同样的方法弄右下的,选择DOOR A。
     至此,简单的修改就已经完成了,当然了,我们并不满足这点点的修改,接下来当然要来点实在的,比如改改英雄啊,技能啊什么的!
                              第三节   物体编辑器初识
     物体编辑器来了,这个相当于一个数据库了,魔兽地图中的所有数据都差不多在这个里面了。打开物体编辑器后会有一排的各种选项,先看单位的吧!
    单位列表:里面有所有你在正常地图里面所能见到的一切单位!而要弄懂这个也并不太难,只不过是里面的内容很多,弄起来费时间吧了,我就找几个常用的来介绍说明。
    先来个变态的,比如,将农民改的比英雄还强大,首先打开人族,对战,单位,选中农民,右边就会出现该单位的相关数据了。要变态当然是攻击超高,护甲超强,技能超变态,血超多,跑得超快,打人也快,好的,慢慢来,一项一项改吧!
    首先是护甲,里面有个基础防御,这个就是初始护甲了,改吧,改为100。之后是战斗-攻击-基础伤害。这个就是攻击力,也改为100吧。然后是战斗-攻击-攻击类型,可以改为混乱,这样就暴强了。战斗-攻击-魔法施放时间间隔时间,就是攻击的间隔,改为1试试,每秒打一下,哈哈,其他的几个较为好理解,故不再说明,自己一试就明白了!有些比较奇怪的就可以不用去管了!接下来是战斗-防御类型,改为神圣吧,这样就只有混乱攻击才打得动了。下面是技能-普通,这个就是该单位的技能了,可以自己加了,想加什么就双击看吧~!后面的什么生命值啊魔法值这些就不用我再多说了吧。这样一来,你的这个农民已经暴强了,哪个英雄见了都吓跑!
    其它的一些单位也同样的改,至于建筑嘛,会多出几个东西来,如升级的科技,训练的单位,都是一看就知道是什么了,所以不再多说,如果是商店的话,看一下它技能及售出的商品及可雇佣的单位等就行了。关于英雄则有些初始属性等,这些也是自己试试就行了!
    物品:很简单,就是物品,或是称宝物等,就是游戏中的那些!
    可破坏物:就是树啊,箱子,门等
    地形装饰物:各种雕像,柱子。。。。。。。
    技能:又是一个重要的东西,和单位及物品关联大呢。在这里就是让玩家自己修改单位或物品技能的地方了,举例说明一下,想让大法师的水元素一次召唤出10个水元素来吗?先找到该技能,然后修改里面的数据-召唤单位计数。改为10吧。其实在技能这个地方最多的就是修改各种数据了,比如等级,伤害值,魔法消耗,施放间隔等,自己试着改一改,因为要每个东西都说明的话估计要一年吧~!汗!
    而后面的效果及科技呢就是在自己做图时再考虑了,不过自己也可以先看看,不难!
                               第四节 具体问题解答
    现在说一下几个常见的问题吧!
   1.物品技能怎么修改?比如想把一个血瓶改成加血10000!
     先在物体编辑器里的物品里找到你要改的物品(血瓶),在右边的数据里找到技能-技能:具有医疗效果的物品(较小的),这个就是加血多少的技能了,然后再切换到技能里,找到特殊的-物品,在里面找到相应的技能(具有医疗效果的物品(较小的)),将生命值取得那里改成10000就行了!
    是不是只觉得只有一个血瓶不过瘾,改多点吧,好的,切换回物品,还是先中血瓶,在右边找到状态-负荷数量 改吧,改成100,哈哈,一买血瓶就有100个了,爽!
   2.想让英雄的技能多一点,可以,单位里面找到英雄,比如大法师,找到技能-英雄。在这里加吧,加个先知的召唤狼也行,不过最多此处技能不能超过5个。想加点一般技能么?如重生。在技能-普通里面加吧!
    其它的一些如英雄升级可超过10级等将会在以后的分类主题里面给大家说的,不过目前此类问题都有置顶贴解答了,大家不妨可以去看看!
回复

使用道具 举报

发表于 2006-4-3 17:03:14 | 显示全部楼层
[原创]学JASS,从最简单的T开始   作者:fangdaping

一直以来都是J盲,由于对某些东西感兴趣,不得不学JASS,看了些教程,自己也琢磨了一下,多少有点体会。
先讲两个简单的问题:
什么是JASS?
不必说了,想学JASS的人一般心里都有底,而且几乎所有的教程都有介绍,我就免了=。=
学JASS有什么先决条件?
以我个人的体会:1,有一定的计算机语言基础(主要是逻辑和思路);2,有一定的英文基础,方便阅读和记忆;3,用惯英文WE最好,因为英文WE的T看起来比较像JASS的库函数。
如果不具备上面条件,显然学起来要困难,但只要努力,没有什么做不到。
关于JASS教程,有很多前辈写了,如C-A的“JASS速成教程”,eGust的JASS教程和GREEDWIND的“JASS完全手册”,另外小白等人好像也有写。相信不少朋友都看过,不过因为几乎是纯理论所以相信不少朋友看得很懵,虽然GREEDWIND喜欢举一些比较飘的例子(面包、爱情、女人)但是因为我们在触发器里看不到这些东西,所以很难理解我自己也是稀里糊涂,我一直认为结合实例研究是比较好的学习方法。

但是上哪找合适的JASS演示来研究呢?一般用JASS写的都不是几个函数就了之的,大段的代码令人眼花,看到就怕,我和一些朋友聊天,他们有些人告诉我一个简单的T转化成J都有那么多东西,真是不想学,确实J比T看上ヒ?榉车亩啵?卸嗦榉衬兀空乙桓黾虻サ?转成J看看先!

什么T最简单?当然是什么都没有的T最简单了(废话)~,但是-----他果真“什么都没有”吗?我们命名一个名叫“meiyou\"的T(事件,条件,动作全无)转成J,我们看到下面一段代码(以下你最好需先掌握一个函数的声明和调用格式即“function。。。takes。。。returns 。。。。”和“call。。。。”,这些上面提到的教程都有,我不在重复):

function Trig_meiyou_Actions takes nothing returns nothing
endfunction
//===========================================================================
function InitTrig_meiyou takes nothing returns nothing
    set gg_trg_meiyou = CreateTrigger(  )
    call TriggerAddAction( gg_trg_meiyou, function Trig_meiyou_Actions )
endfunction

这说明该T并非“什么都没有”,下面我就来简单介绍一下J和T中的事件、条件和动作是如何对应的。
就以上面一段J为例(因为它最简单),我们一般从那条分割线下方看起:

function InitTrig_meiyou takes nothing returns nothing     //这是一个触发器初始化的函数,它是每个触发器必备的,而且我寻找触发器的时候一般也以此为起点,它的名字是“InitTrig_”+“触发器名(此处为meiyou)”,后面肯定是“takes nothing returns nothing”。

set gg_trg_meiyou = CreateTrigger(  )      //表示创建触发器,这是一个变量的声明和赋值,其格式也是固定的,唯一不同的是变量名(注意触发器类型的变量在调用时前面要加上gg_trg_,至于后面,则是触发器的名称(这里是meiyou),后面= CreateTrigger(  )是固定的。

注意,不管你的触发器有多复杂,以上两个句子肯定是要写。
call TriggerAddAction( gg_trg_meiyou, function Trig_meiyou_Actions )        //这个call TriggerAddAction表示的是给触发器添加动作,他的参数有2个:一个是你要添加动作的触发器变量(此处即为gg_trg_meiyou),另一个是“动作函数”,其名称一般是“Trig_”+“触发器名(meiyou)”+“_Actions”,这么说有点抽象,说通俗点就是---你想添加什么动作---所有的这些动作将被写成一个函数(此处为function Trig_meiyou_Actions),细心的朋友能发现这个“动作函数”就出现在分割线的上方,我用蓝色钩出。

function Trig_meiyou_Actions takes nothing returns nothing      //触发器动作函数,它也必须是takes nothing returns nothing,但是,由于我们这里什么动作都没有,所以他直接就endfunction(结束函数)了。

知道了动作是怎么被执行的,那么事件和条件呢?没关系,我们来看一个完整的T:




下面有人叫到“哎,这个T很眼熟啊,这不是沧海大人的刷兵演示吗?”没错,就是要找大家熟悉的例子来讲解,因为这个T的流程你再清楚不过了,为了讲解方便,我特地加了一个条件(原T是没有条件的),那么我们把它转成J来看看:

function Trig_GO_Conditions takes nothing returns boolean
    if ( not ( GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD) <= 5000 ) ) then
        return false
    endif
    return true
endfunction
function Trig_GO_Func004A takes nothing returns nothing
    call IssuePointOrderLocBJ( GetEnumUnit(), \"attack\", GetRectCenter(gg_rct_B) )
endfunction
function Trig_GO_Actions takes nothing returns nothing
    set udg_Lv = ( udg_Lv + 1 )
    call CreateNUnitsAtLoc( 5, udg_arm[udg_Lv], Player(11), GetRectCenter(gg_rct_A), bj_UNIT_FACING )
    call ForGroupBJ( GetUnitsInRectOfPlayer(gg_rct_A, Player(11)), function Trig_GO_Func004A )
endfunction
//===========================================================================
function InitTrig_GO takes nothing returns nothing
    set gg_trg_GO = CreateTrigger(  )
    call DisableTrigger( gg_trg_GO )
    call TriggerRegisterPlayerStateEvent( gg_trg_GO, Player(11), PLAYER_STATE_RESOURCE_FOOD_USED, LESS_THAN, 1.00 )
    call TriggerAddCondition( gg_trg_GO, Condition( function Trig_GO_Conditions ) )
    call TriggerAddAction( gg_trg_GO, function Trig_GO_Actions )
endfunction
比刚才那段长多了,不要急,慢慢来分析,首先依然从分割线下方开始,一边分析一边对照第一个例子。

function InitTrig_GO takes nothing returns nothing      //初始化“GO”这个触发器
set gg_trg_GO = CreateTrigger(  )      //创建触发器
上面两步必不可少。
call DisableTrigger( gg_trg_GO )     //因为这个触发器被设置成初始不打开,这里我们记住了一个库函数DisableTrigger( )
call TriggerRegisterPlayerStateEvent( gg_trg_GO, Player(11),PLAYER_STATE_RESOURCE_FOOD_USED, LESS_THAN, 1.00 )     //这里便是注册触发器事件的语句了,函数名一般是“TriggerRegister”+。。。。+“Event”+。。。,它的参数由前面事件的种类而定,但是有一个参数总是在的,那就是---你为哪个触发器注册事件,你必须把这个触发器名字告诉电脑。具体就这里来说,这里TriggerRegisterPlayerStateEvent表示的是“玩家属性(PlayerState)”事件,他的参数:gg_trg_GO是你告诉电脑的触发器名,Player(11)表示是玩家12的事件(因为是从0算起的),PLAYER_STATE_RESOURCE_FOOD_USED表示“玩家使用的食物”,LESS_THAN是“小于”,1.00 是说它小于1,前面两个大写的代码都是游戏中早就定义的常量,表示一个固定的含义,无法更改(这些代码如果你英文稍微好点,猜也猜的出意思)----于是这里整个的事件就是:玩家12所使用的食物量少于1.00。
call TriggerAddCondition( gg_trg_GO, Condition( function Trig_GO_Conditions ) )     //这里便是为触发器添加条件,函数名是TriggerAddCondition,参数有两个,一个你仍然要告诉电脑你为哪个触发器(这里是gg_trg_GO)添加条件,另外一个则是一个“条件函数(这里的function Trig_GO_Conditions)”,与第一个例子所讲的“动作函数”一样,你可以发现它也出现在分割线的上方(紫色标出),我们稍后讨论。

call TriggerAddAction( gg_trg_GO, function Trig_GO_Actions )     //这个便是给触发器添加动作了,上一个例子我们已经见到了。

一般来说,上面这一段我们可以看做是一个“准备阶段”

下面看分割线以上。

function Trig_GO_Conditions takes nothing returns boolean
    if ( not ( GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD) <= 5000 ) ) then
        return false
    endif
    return true
endfunction

这是我们所说的“条件函数”,注意它肯定是takes nothing returns boolean(因为有“是”与“非”两种选择,所以返回布尔变量),下面我一句一句分析:

if ( not ( GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD) <= 5000 ) )     
GetPlayerState()表示“取得玩家属性”,GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD)则表示“玩家1所有的黄金”, <= 5000表示“小于等于5000”,整个if语句的意思是“如果玩家1的金钱不小于等于5000”。
then  return false     //表示返回值为“非”,既然是“非”那么系统就不会执行下面的动作了,注意我前面强调了这个“不”字,因为前面有一个not存在,这是WE在把T转成J时的习惯写法写法,我们正常的逻辑是“XX条件成立,返回‘是’”,而WE喜欢写作“XX条件不成立,返回‘非’,否则返回‘是’”,习惯了就好。

介绍完条件函数,我们看动作函数。
function Trig_GO_Func004A takes nothing returns nothing     //恩?这个动作函数的名字好像和分割线下面的不一样啊,没关系,先跳过看下面一个函数。
function Trig_GO_Actions takes nothing returns nothing
    set udg_Lv = ( udg_Lv + 1 )
    call CreateNUnitsAtLoc( 5, udg_arm[udg_Lv], Player(11), GetRectCenter(gg_rct_A), bj_UNIT_FACING )
    call ForGroupBJ( GetUnitsInRectOfPlayer(gg_rct_A, Player(11)), function Trig_GO_Func004A )
endfunction

恩,就是它了,那来分析一下。

set udg_Lv = ( udg_Lv + 1 )     //令LV=LV+1
call CreateNUnitsAtLoc( 5, udg_arm[udg_Lv], Player(11), GetRectCenter(gg_rct_A), bj_UNIT_FACING )     //这里CreateNUnitsAtLoc表示“创建多少个XX单位在X点”,5表示“创建5个”,udg_arm[udg_Lv]是你事先定义好的单位类型(这个定义在另外一个T里),Player(11)表示“为了玩家12”,GetRectCenter(gg_rct_A)表示“在地区A的中心”,bj_UNIT_FACING是游戏中的一个常量,也就是我们习惯说的“面向默认角度”,事实上这个角度是270度。整个意思就是在地区A的中心为玩家12创建5个单位(单位类型为udg_arm[udg_Lv])。
call ForGroupBJ( GetUnitsInRectOfPlayer(gg_rct_A, Player(11)), function Trig_GO_Func004A )     //ForGroupBJ是一个单位组函数,它一般也有2个参数,一个是“选取哪些单位(这里是GetUnitsInRectOfPlayer(gg_rct_A, Player(11)),意思是选取地区A中属于玩家12的所有单位),另一个是“你要这些单位干什么(这里是又一个动作函数function Trig_GO_Func004A---即是刚才被我们跳过的神秘函数)”。

现在我们可以看那个被跳过的神秘函数了,原来它是那些被“选中的单位”将要执行的动作函数。

function Trig_GO_Func004A takes nothing returns nothing
    call IssuePointOrderLocBJ( GetEnumUnit(), \"attack\", GetRectCenter(gg_rct_B) )
endfunction

该函数只有一条语句call IssuePointOrderLocBJ( GetEnumUnit(), \"attack\", GetRectCenter(gg_rct_B) ),IssuePointOrderLocBJ表示“给单位下达命令到某点”,GetEnumUnit()表示“选取的单位”,\"attack\"是一个字符串,表示“攻击--移动到”,GetRectCenter(gg_rct_B)表示“区域B的中心”,于是整个动作是“命令选取的单位攻击--移动到区域B的中心”。

那么这个T就这么结束了,我们顺便接触了不少库函数和游戏常量(虽然这只是九牛一毛)。

可以说,只要你顺藤摸瓜,一步一步找下去,就能摸清楚一个J的执行过程。
PS:我这里已经说得相当详细。。。目的是为了帮助那些因为看到一大串代码而退缩放弃的朋友重新拾回信心,其实这帖内容非常简单,稍微有点水平的就不用看了,以后有空我会拿一些难一点的出来分析----当然就不会讲这么细了。
知道了J的大致流程我们只是说能看懂别人的J,并不代表自己能写,接下来应该是多找演示看了,一方面吸取别人的思路方法,一方面积累库函数和游戏常量------等有一定的积累量了,就可以自己开始写了。
末了,推荐些东西,一是GREEDWIND的“JASS完全手册”,里面的教程不必说,我最喜欢的是里面的资料很全;二是eGust的“JASSSHOP”,在这里面看JASS比在WE里看舒服,而且方便。
最后祝大家成功!

[ 本帖最后由 freeman_666666 于 2006-4-3 17:12 编辑 ]
回复

使用道具 举报

发表于 2006-4-3 17:05:40 | 显示全部楼层
[原创教程]完美的伤害=攻击-防御        作者:杀残枫


终于将这个系统彻底完成了。
现在,我将这个演示大体说明下下。
为了FC类似的操作系统,为了让英雄HP只有20也可以一滴血不减的游戏,终于成功了。
首先:将硬化皮肤技能改为最大等级,每等级忽略伤害+1,最小伤害为0。这么做最高防御为100。
接下来:在游戏平衡常数中修改护甲减少伤害因素,改为0。这样的话,护甲再高,英雄受到的伤害也是100※
然后,同样是高级平衡常数中,把每点敏捷所增加的护甲改为1。如图。
好了,接下来,直接把技能添加给单位。
当然在初始化中应该加上一条:设置变量HERO(单位)=XXX(玩家的英雄)
然后写下触发:事件:每隔2秒(也可以是1秒,或者其他,最好是1~3秒内)
  动作:设置变量X(数值型)=英雄(HERO)的属性 敏捷 (包括附加值)(这样物品对英雄防御的增加才可以发挥作用)
        设置单位技能(硬化皮肤)等级为变量X
好了,大功告成了。
是不是很简单啊?依据这个原理,其他方面的叠加也没有什么问题了。希望对想要做FC的地图的人有所帮助。
回复

使用道具 举报

 楼主| 发表于 2006-4-3 17:34:55 | 显示全部楼层
谢谢各位支持
回复

使用道具 举报

发表于 2006-4-6 15:36:49 | 显示全部楼层
继续继续啊,,,,,.........
回复

使用道具 举报

发表于 2006-4-16 11:21:48 | 显示全部楼层
这么精品的东西一定要顶~!!!
回复

使用道具 举报

 楼主| 发表于 2006-4-16 11:23:38 | 显示全部楼层
楼上练级狂来的,也不用水得那么明显啊。
拜托,来些艺术水
回复

使用道具 举报

发表于 2006-4-16 11:44:57 | 显示全部楼层
还不是因为你的手册不开放下载。。嗯。多了这么多纯水的。
回复

使用道具 举报

发表于 2006-4-23 11:00:37 | 显示全部楼层
嘿嘿,,,我真的不是真心的想灌水。。。。。但是这么好的东西不留下什么 总觉得有点过意不去啊
回复

使用道具 举报

发表于 2007-2-26 07:44:38 | 显示全部楼层
附件没有了!!!
能不能 找到再发来!!!
回复

使用道具 举报

发表于 2007-2-26 10:33:04 | 显示全部楼层
太古老鸟...................................................
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 14:40 , Processed in 0.059221 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表