魔兽地图编辑器rpg教程器

&您的位置:
YDWEv1.23.10正式版(加强版魔兽地图编辑器)
1.支持1.26魔兽生成的注册表路径。
2.修正若干物编读取错误的问题。
3.修正CD中物品不能丢弃演示的一个bug。
游戏攻略(0)其他版本(2)
《YDWEv1.23.10正式版(加强版魔兽地图编辑器)》游戏综述
注意:使用过1.23之后,会导致1.22.10之前的YDWE无法使用,解决的办法可以选以下三种之一
1.删除魔兽目录下的worldeditydwe.exe
2.使用ydwe1.22.11或之后的版本
3.复制ydwe1.22.11里的YDDllFixer.dll到自己的YDWE目录下。
物体编辑器数据读取的使用教程
YDWEv1.23.10正式版更新说明:
1.支持1.26魔兽生成的注册表路径。
2.修正若干物编读取错误的问题。
3.修正CD中物品不能丢弃演示的一个bug。
《YDWEv1.23.10正式版(加强版魔兽地图编辑器)》游戏攻略
《YDWEv1.23.10正式版(加强版魔兽地图编辑器)》其它版本下载
12.17 MB7684人气更新12.29 MB11249人气更新
《YDWEv1.23.10正式版(加强版魔兽地图编辑器)》下载地址
你可能还会喜欢
本类最新更新
最新推荐下载
&&&&类型:评分:8.6
别人正在下载...
55YOU官方出品的魔兽版本转换器,整合常用的1.20E、1.24E、1.26三...55YOU魔兽争霸3地图一键智能安装器下载后安装魔兽争霸3根目录,即...55YOU官方出品的魔兽版本转换器,整合了4M联机限制补丁!
整合常...主要功能:魔兽显血、自定义改键、内存改键、自动启动浩方平台、...魔兽改键精灵(魔兽改建精灵)是一款魔兽游戏的辅助工具,魔兽改键...纯绿色魔兽争霸带娜迦族与新英雄补丁Nirvana版本号v0.09b完全不影...魔兽争霸3资料片Nirvana(涅重生),一款国人所做的完全绿色免...版本转换器,方便大家自由的转换游戏版本,进行游戏体验。【多玩魔兽盒子基本介绍】
多玩魔兽盒子(魔兽世界插件)是新一代W...目前主要功能如下:1.无限保存自定义改键方案,2.绝对亮点,让你...134被浏览15,037分享邀请回答171 条评论分享收藏感谢收起515 条评论分享收藏感谢收起专业的QQ下载站 本站非腾讯QQ官方网站
官方网址:
YDWE最新版下载【魔兽地图编辑器】
软件大小:13.3M
软件语言:中文
更新时间:
软件类别:免费/游戏地图
软件性质:PC软件
软件厂商:
运行环境:WinAll
软件等级:
本类热门软件
软件简介软件截图相关软件相关文章
“王老菊带你地牢燃烧”,又一款单机游戏复活啦。地牢燃烧王英文名《caveblazers》,中文翻译“洞窟开拓者”,玩家将操作一个角色,在黑暗的地牢洞穴中,开拓世界燃烧小兵/boss。
更新:16-11-06&&大小:2KB&&类别:单机游戏
评分:10.0
《0013网咖破解版》是一款专为超多电竞网咖打造的官方应用,该应用为玩家创新式地打造推出了大量上网功能,让玩家拥有最别具一格的上网体验。应用内海量优惠十分给力!小编为大家提供了破解版下载,利用漏洞免费上网
更新:16-09-09&&大小:11.9M&&类别:生活实用
评分:10.0
微软发布了.NetCore1.0正式版,该补丁是新一代的.Net基础,跨越了Windows、Macos、Linux三大操作平台,让开源、跨平台实现不再是梦。
更新:16-06-27&&大小:96.7M&&类别:系统补丁
评分:10.0
我的世界皮肤生成器使用这个应用程序作为你的中心枢纽,用于编辑和创建的Minecraft皮肤!拥有一个全功能的定制设计的皮肤编辑器,这个程序将帮助您创建在旅途中顶尖的皮肤!
更新:16-04-22&&大小:379KB&&类别:游戏工具
评分:10.0
房销宝客户端是搜狐焦点为房主经销商推出的一款卖方神器。这款软件能够帮助经纪人快速预约,随时查看用户的状态情况,功能全面,涵盖了楼盘展示、管理客户、动态查看、佣金管理等功能,我们实时更新楼盘数据,为用户
更新:16-03-21&&大小:3.8M&&类别:生活实用
评分:10.0
2011最新qq自动回复搞笑人工呼吸现在开始,你呼过来,我吐回去……想跟我聊天?我会的不多,就这一句了!嗨,我是angel的QQ,她忙,我也不理你。嘿嘿,想看我的自动回复?!没门!如果我不在,那么我会自动回复你。
QQTN.COM&QQ表情的使用方法:直接对着图片点右键复制,然后粘贴到QQ输入框里即可。问候: & 路过&飘过:   告别:    道歉: 开心:
表白: 浪漫心形: 求爱: 恋人: 好色: 其他:
腾讯公司推出QQ直播最新3.1beta版。QQ直播是一个支持同场观看、同场交流的多媒体互动直播平台。新版QQ直播不仅在画面质量和直播技术上有了进一步的加强,还增加了包括支持代理在内的一些新功能,互动性也得到很大的提
 最近QQ空间代码的制作委实火了一把,这也使得很多Q友经常花大量的时间到网上寻觅各式各样的QQ空间代码,但这样即费时又费力!那能不能通过更简单的途径来获取最新的QQ空间代码呢?有,那就是QQ自定义面板。   
YDWE最新版下载 【魔兽地图编辑器】
其他版本下载
洛克王国东哥辅助最新版是一款绿色纯净的洛神魔之战2.0.1天灵神绝,修复了许多bug,经在双十一之际,冬冬&暗君发布了火影忍者羁绊双十一光棍节,为了给单身狗一些安慰,逆魂修仙之路7.0地狱版于11.10最新发布了,喜欢喜欢天蚕土豆小说的朋友可千万不要错过逆魂《穿越的病毒穿越的人》,是由名为“痞子”邪魔殿制作的弑魔修仙传最新发布了弑魔修仙次元之梦是邪魔殿Ares丶北月制作的一款经典喜欢海贼王的魔兽玩家朋友可千万不要错过最
本类月下载排行
12345678910198522803219942325069185643617570274517115782090
当月最受欢迎地图
小天天发布过的帖子
隐藏英雄密码
魔兽地图编辑器-10分钟了解JASS
时间: 22:34
地图编辑器-10分钟了解JASS
声明:有一定T基础的人完全可以在10分钟之内基本掌握该jass教程,夯实基础后要继续深入
& && &&&学习和研究请去高级讨论区查阅有关资料。摒弃传统教学的特点,直击重点、深入浅出,
& && &&&即使是毫无程序基础的人也能在很短的时间内迅速掌握。本教程不打算与其他语言挂钩,
& && &&&不论原因为何,基于让人们迅速掌握和理解该语言的初衷,因此采用最有效最通俗的手
& && &&&法去阐述该语言。关于jass是什么以及为什么要学习等内容,就不再赘述。
──────────────────────────────────
一、初识jass
1、概览(5秒)
关于jass,只要知道2个内容即可:变量和函数。
╔═══╦═════════════════╗
║&&变量&&║存储数据,重点熟悉和掌握全局和局域变量& &&&║
╠═══╬═════════════════╣
║&&函数&&║执行功能,了解函数的结构、生成和运行等& &&&║
╚═══╩═════════════════╝
2、详解(2分20秒)
(1)、变量和函数声明格式如下:
───────────────────────────
a、全局变量的声明:
& & 变量类型 变量名 ( = 初始值 ) //括号表示不赋值亦可,下同
& & 变量类型 array 数组名 //数组不可直接赋值,需在函数内逐个赋值
endglobals
b、函数和局域变量的声明:
function 函数名 takes 参数列表 returns 返回值类型
& & local 变量类型 变量名 ( = 初始值 )
& & ......
& & 执行语句
& & ......
& & return 返回值
endfunction
───────────────────────────
(2)、全局与局域变量的区别:
全局任何函数皆可用,局域只作用于所声明的函数。不同函数的局域变量命名可相同,最好不要与全局和
参数名相同。全局占用内存大,执行速率快,全局则反之。触发中,属性变量诸如触发单位、循环整数A、
最后创建的单位、新建的单位组等均是全局变量。同样,变量编辑器(ctrl+B)中的变量亦是全局变量。
(3)、函数起步,掌握以下重点即可:
①、函数名唯一;
②、函数可以无参数和返回值,是为空函数;
③、参数列表为参数类型1 参数名1,参数类型2 参数名2,...,参数类型N 参数名N。逗号分隔即可;
④、返回值必唯一;
⑤、局域变量声明必在所有执行语句之前;
⑥、return必须写在函数末端,即endfunction上一行;
⑦、无返回值函数则无需写return;
⑧、注意returns和return及其后携带数据的区别,前者后接变量类型,后者接具体的数据;
⑨、数组不能做参数和返回值。
───────────────────────────
& & integer int = 3 //声明一个整数型全局变量int并赋值为3
& & real col //声明一个实数型全局变量col未赋值
& & string array str //声明一个字符串数组str
& & boolean array b = false //错误!数组不能直接赋值!
endglobals
local integer index = 19 //错误!局域变量声明怎能脱离函数?
function A takes nothing returns nothing
& & local integer a = 1 //声明一个整数型局域变量a并赋值为1,下同
& & local integer b = 2
& & local integer c = a + b
& & call BJDebugMsg(I2S(c)) //显示c的值,该句(带call)即为执行语句
endfunction
function B takes real r, integer e returns nothing
& &&&//接受一个实数型参数r和一个整数型参数e
& & call BJDebugMsg(R2S(r)+I2S(e)) //显示r的值
endfunction
function C takes nothing returns real
//返回一个实数型变量
& & return 2 * 3 * 15 //正确,必须拥有返回值
endfunction
function D takes nothing returns real, integer
//该函数错误!一个函数只能返回一个数据类型!
& & return ...
endfunction
function E takes real r returns real
//该函数错误!有返回值类型,但函数结尾却无具体返回值!
endfunction
function F takes real r returns real
//正确,有返回值类型也有具体返回值
& & return r * 33
endfunction
function G takes nothing returns nothing
& & call BJDebugMsg(I2S(h))
& & //错误!局部变量声明必须在所有执行语句之前!
& & local integer h = 5
endfunction
function H takes integer array num returns nothing
& & //错误!数组不能作为函数的参数!
endfunction
───────────────────────────
二、jass进阶(1分30秒)
(1)、函数定义
很多初学jass的朋友一直没有搞清楚该问题,很简单,函数就是能独立完成一件工作的机构。
如下例函数showtext,他能完成什么工作呢?或者说他有什么样的职能?注意,凡是在函数
之间的部分(function~endfunction)就是这个函数的职能或作用。那么,该函数的职能就是
打印一行信息“我在学jass”。
───────────────────────────
function showtext takes nothing returns nothing
call BJDebugMsg(&我正在学jass&) //显示“我正在学jass”
endfunction
───────────────────────────
(2)、生成和运行
函数是如何运行(调用)的?很简单,call 函数名(参数列表)即可,这里的参数列表的要求前面已经
说过。需要注意的是,call后面接的是一定函数,此类函数叫被调用函数。被调用函数一定要在调用
函数的前面,且传递状态下的参数列表要和被调用函数的参数列表的类型、次序和数量相一致。
───────────────────────────
function A takes integer i returns nothing
& & call BJDebugMsg(I2S(i)) //显示31
endfunction
function B takes nothing returns nothing
call A(31) //正确,被调用函数A在函数B的前面。函数B将整数31传递给函数A
& & call C(0.02) //错误!被调用函数C在函数B的后面!
endfunction
function C takes real rreturns nothing
call BJDebugMsg(R2S(r))
endfunction
───────────────────────────
可不可以让一个函数调用其后面的函数呢,可以的。使用ExecuteFunc(&函数名&)的检索功能,但要注意2点:
①、函数检索距离不宜过大,即2个函数之间的字节码有一定限制;
②、检索状态下,被调用的函数不能拥有参数,但可以有返回值;
③、在遵循②前提下,被检索的函数在检索函数的前后均可。
───────────────────────────
function A takes nothing returns nothing
endfunction
function B takes nothing returns nothing
call ExecuteFunc(&A&) //正确,被检索函数无参数,下同
& & call ExecuteFunc(&C&)
& & call ExecuteFunc(&D&) //错误!被检索函数D携带参数!
endfunction
function C takes nothingreturns integer
return 256
endfunction
function D takes integer&&i returns nothing
& & call BJDebugMsg(I2S(i))
endfunction
───────────────────────────
三、语法(1分30秒)
──────────────────
& & exitwhen 条件 //满足条件退出循环
& &执行语句
──────────────────
(2)、条件控制
──────────────────────
a、单层控制:
if 条件 then //如果满足条件1则做...
b、双层控制:
if 条件1 then //如果满足条件1则做...
else 否则做...
& &执行语句
c、多层控制:
if 条件1 then //如果满足条件1则做...
elseif 条件2 then //如果满足条件2则做...
& &执行语句
elseif 条件3 then //如果满足条件3则做...
& &执行语句
elseif 条件4 then //如果满足条件4则做...
& & 执行语句
...... //如果满足条件N则做...
──────────────────────
(3)、逻辑关系符:
仅3个,and(且)、or(或)、not(非)。
(4)、比较和操作符:
仅9个,[](数组)、[]=(数组赋值)、=(赋值)、
==(等于)、!=(不等于)、&(大于)、&(小于)、
&=(大于或等于)、&=(小于或等于)
(5)、实例。若混合使用,注意嵌套先结束里层再结束外层:
───────────────────────────
function A takes integer&&i, integer&&jreturns nothing
if (i==3 and j==5 ) then //如果满足i=3且j=5则做显示他们的和
& && & call BJDebugMsg(I2S(i+j))
& && & call BJDebugMsg(&条件不符!&)//否则,不做显示“条件不符”的警告!
endfunction
function B takes nothing returns nothing
local integer i = 1
& &local integer array index& &
& && && &exitwhen i & 7 //当i&7时退出循环
& && & set index = 25 * i
& && & set i = i + 1
& & endloop
endfunction
function C takes nothingreturns integer
& & local integer i = 1
& & local integer array index& &
& && &&&exitwhen i & 7
& && &&&set index = 25 * i
& && & if (i==2 or i==6 ) then
& && && && & call BJDebugMsg(I2S(i))
& && &&&endif //endif嵌套于循环内,因此应该先结束里层
& && &&&set i = i + 1
& & endloop //再结束外层
endfunction
───────────────────────────
四、函数间的数据传递(4分)
(1)、利用全局数组传递
这涉及内容较多,暂不说明。
(2)、1.20的Gamechche(游戏缓存)+Return Bug(类型强制转换)
我们知道,要实现一个技能多人运行,可以用全局数组。当然可以利用局域变量,因为局域变量
是互不干扰的、稳定的,且并行运行的。当然,我们可以通过传递参数传递局域变量的值,然而,
对一些不允许携带参数的函数,局域变量的数据无法在函数间传递,怎么办?这个时候需要利用
到缓存。像这样不允许参数的函数有哪些呢?归纳一下:如下几种
1、jass计时器调用的函数;
2、队列事件(单位组、玩家组、可破坏物组等)的过滤(条件)函数;
3、触发的条件函数。
缓存很好理解,就是一个仓库,这个仓库可以想象成很大的房子,里面有很多柜子,而每一个柜子
里面又有很多抽屉,然而,每一个抽屉只能装指定的5种类型的东西,且每一种东西只能装载一个。
这就是柜体原理,用不着多么抽象专业的术语,我想上面这个阐述已经让你理解了什么是缓存。
那么,在实际的缓存中,房子可以看做一个缓存,当然,既然是很大的房子,一个地图一个缓存足矣。
柜子可以看做缓存的目录,抽屉可以看做缓存的标签,由于缓存的目录和标签是采用字符串的形式,因
此,我们不妨存储一个打火机1到房子X的A号柜子K号抽屉里:房子X → A号柜子 → K号抽屉 → 打
火机1同样的,我们必须在存储后指定的路径下才能找到这个打火机1,基于抽屉存放东西的唯一性,“房
子X → A号柜子 → K号抽屉”即指代所存放的打火机1。由于抽屉一次一种东西只能放一样,如果再放
一个打火机2进去的话,就会覆盖掉之前的打火机1,此时,“房子X → A号柜子 → K号抽屉”指向打
火机2。当然,如果在其他抽屉比如L号抽屉方上打火机2,丝毫不影响打火机1的存放,因为是2个毫不相干
的路径嘛。
所以,对于缓存,一个道理,一个标签只能存5种类型的数据:整数、实数、布尔值、字符串和单位。每种数据
只能存一个,否则后进来的数据会覆盖之前的属于这个种类的数据。下面,看看缓存是如何实现的。注意,缓存
必须在使用前初始化,方法为set 缓存变量名 = InitGameCache(&缓存名&),缓存名随便取吧。
取:call Store数据种类(缓存, 目录名, 标签名, 该类数据的某个值)
存:GetStored数据种类(缓存, 目录名, 标签名)
清空标签:call FlushStored数据种类(缓存, 目录名, 标签名)
清空目录:call FlushStoredMission(缓存, 目录名)
清空整个缓存:call FlushGameCache(缓存)
检测缓存数据是否存在:HaveStored数据种类(缓存, 目录名, 标签名)
假定缓存名为udg_GC(udg_是什么?有T基础都多少知道):
call StoreInteger(udg_GC, &A&, &b&, 15) //将整数15存到了缓存GC的A目录下的b标签下
call StoreReal(udg_GC, &A&, &b&, 0.2) //将实数0.2存到了缓存GC的A目录下的b标签下
call StoreIBoolran(udg_GC, &A&, &b&, false) //将布尔值false存到了缓存GC的A目录下的b标签下
call StoreString(udg_GC, &A&, &b&, &TigerCN&) //将字符串TigerCN存到了缓存GC的A目录下的b标签下
由于同一个路径下每种数据可以存一个,所以不会冲突,但若是此时在这个数据下再存一个整数37,即
call StoreInteger(udg_GC, &A&, &b&, 37)
那么GetStoredInteger(udg_GC, &A&, &b&)所指向的就是后存进来的37了,但这不影响该路径下其他类型的数据。
除非它们也想这样改变。当然,为了保证整数15不被覆盖,我们可以将37存到标签c下,即:
call StoreInteger(udg_GC, &A&, &c&, 37)
利用循环+缓存,我们可以存取局域数组变量。
这时,有的同学会问:只能存取5种?太少了吧!我要存取一个特效怎么办?不用担心,return bug出场了!我们可
以用他将其他种种句柄类的数据转换成整数,然后利用StoreInteger来存储。return bug原理很简单,利用编译器
自下而上的检测,当碰到第一个return时,被虚假的结果所蒙蔽就自动跳过检测。其形式如下:
───────────────────────────
function H2I takes handle hreturns integer
& & return h //真实返回的值是h,即句柄所指向的内存地址
& &return 0 //编译器先检测这里,返回值是0,正确,跳过检测
endfunction
function I2E takes integer ireturns effect
& & return i //从句柄所指向的内存地址中读取出句柄
& & return null //编译器先检测这里,返回值是null,正确,跳过检测
endfunction
───────────────────────────
所以我们要存句柄类的变量诸如单位、特效、点、单位组、物品等均可以利用此形式,自己按照这个格式套就是了。
这样我们就来存储一个触发单位:
───────────────────────────
function H2I takes handle hreturns integer
& & return h
& &return 0
endfunction
function I2U takes integer ireturns unit
& & return i
& & return null
endfunction
function run takes nothing returns nothing
& & local unit u = I2U(GetStoredInteger(udg_GC, &Unit&, &Caster&))
& &//从缓存对应的路径下读取出存储的单位的地址,通过I2U转换成单位,再赋值给变量u
& & call RemoveUnit(udg_GC, &Unit&, &Caster&, H2I(u))
& &//删除单位u
& &call FlushStoredMisiion(udg_GC, &Unit&)
& &//清空Unit目录。注意,删除整个缓存会删除其他使用缓存的数据
& &set u = null
endfunction
function test takes nothing returns integer
& & local unit u = GetTriggerUnit() //声明一个单位型局域变量u并赋值为触发单位
& &local timer t = CreateTimer() //声明一个局域计时器t并赋值为新建的计时器
& &call StoreInteger(udg_GC, &Unit&, &Caster&, H2I(u))
& &//将u转换成整数并存储到Unit目录的Caster标签下
& &call TimerStart(t, 5, false, function run)
& &//开启计时器t,一次性,持续5秒,作用与函数run
& &set t = null
& &//清空句柄变量
endfunction
───────────────────────────
(3)、1.24的Hashtablee(哈希表)
很简单,只不过是把缓存的目录和标签字符串记录的形式改成了整数,也修正了RB,同时可直接存储一些
句柄类的数据。
取:call Save数据种类(哈希表, 目录名, 标签名, 该类数据的某个值)
存:Load数据种类(哈希表, 目录名, 标签名)
清空目录:call FlushChildHashtable(哈希表, 目录名)
清空整个缓存:call FlushParentHashtable(哈希表)
检测缓存数据是否存在:HaveSaved数据种类(哈希表, 目录名, 标签名)
五、触发器和函数(35秒)
一般触发器无非是由三个函数组成:事件函数(初始化函数)、条件函数、动作函数,所以无需多疑,jass要完
成一个技能或系统也需要经历这3个步骤,当然,往往可以扩展出很多自定义的函数。总体思路不变。打雷了,
就写到这吧!10分钟让你基本掌握jass。更多内容请到高级讨论区去挖掘!如果有人问我最后创建的单位、杀死
单位、创建特效用jass怎么写,我只能说,最直接最偷懒的方法就是用T写再转换成J。
猜你喜欢&&&&&&&&&&&&&&&&&&&&&&&&
+啥也不说了,感谢我闪网分享这么好的地图!
啥也不说了,感谢我闪网分享这么好的地图!魔兽地图编辑入门教程
世界上很多地图制作高手已利用WE创作出了类似《反恐精英》、《暗黑破坏神》、《雷电》、《大富翁》等经典游戏的魔兽版,可以说用WE只有想不到,没有做不到。WE功能如此强大,其实不难掌握,因为暴雪已将它做得再“傻瓜”不过了。当你决定使用它创造地图时,摆在你面前的不过是一大堆“积木”,你只要发挥自己的创造力,就能将其摆放出一个自己想象中的世界......
YDWE魔兽地图编辑器YDWE是everguo、wataloo、aeris、Warft_TigerCN、Fetrix_sai和actboy168基于WOW8编辑器UI所改进的一个功能强大的魔兽地图编辑器插件(WE Mod)。其独有佣兵系统、跳跃系统、多重物品栏、物品合成系统、刷兵系统、环绕系统、JASS肉钩、英雄自动学习系统,是一款功能丰富的地图编辑插件YDWE相比较WE魔兽地图编辑器,它的好处就是将很多功能模块化了,比如说英雄升级模块,使用起来很方便!而且还把一部分jass的东西变成了触发条例,让广大不懂jass的地图制作爱好者也可以使用一些jass特有的功能!目前来说是比较容易上手的魔兽地图编辑器......
实用视频范例
模型导入是WE魔兽地图编辑器的基本功能,本视频将带大家简单的介绍如何导入模型及实际效果预览......
视频通过给Lich和大法师自定义添加NOVA技能,释放“米字型”NOVA打在小鱼身上相当爽......
标题顾名思义,视频里通过给FM添加冲击波来示范教学......
重写触发弄了3小时,最后搭配特效用超过4个小时。其实本来是纯火属性的,但是后来发现那种星屑特效就去掉了火焰了,虽然外圈还是有末日的特效~毕竟那个最好看~
纯T,一步一个注释,教程用意了,可以用来补充堆栈教程的地图示例。......
魔兽3的战役是这款游戏的一大亮点,也代表着游戏的灵魂,战役交代了整个游戏剧和情故事背景,因为战役的存在让整个游戏都充满了生命力,相信玩过魔兽战役的玩家都有体会。玩完暴雪的战役还意犹未尽?让我们制作属于我们自己的战役......
相信玩过WOW的朋友对"奥格瑞玛"一词不会感到陌生,这是伟大的兽人部落家乡,要塞、地洞、图腾,兽营、t望塔等都是奥格瑞玛的标签,通过WE魔兽地图编辑器强大的功能,实现对WOW中奥格瑞玛部落的复制......本期RPG地图创作比赛作品可谓琳琅满目,地图风景美不胜收,玩家们通过运用魔兽地图编辑器各种功能表现出他们独具创意的一面,山川小镇、悬崖溪流等各种风格应有尽有,一起欣赏本期入选TOP10作品吧......

我要回帖

更多关于 3d游戏地图制作软件 的文章

 

随机推荐