设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间23 现在时间23 缓存数据 好好的睡一觉吧,闭上眼睛做个好梦,明天睁眼又会是美好的一天,晚安好梦。

好好的睡一觉吧,闭上眼睛做个好梦,明天睁眼又会是美好的一天,晚安好梦。

查看: 840|回复: 2

SQL基础语句教程 学会它就可以制作任意属性任意数量的装备

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:215
  • 打卡月天数:0
  • 打卡总奖励:7633
  • 最近打卡:2023-08-27 00:48:03
等级头衔

等級:晓枫资讯-上等兵

在线时间
9 小时

积分成就
威望
0
贡献
477
主题
518
精华
0
金钱
9200
积分
1021
注册时间
2022-12-25
最后登录
2025-3-12

发表于 2023-1-16 11:59:46 | 显示全部楼层 |阅读模式
批量的意义:
首先,这些批量语句可以省下大量的手动工作,是新手制作游戏内容的好帮手,有心自己制作属于自己游戏的新人们,一定要仔细的阅读完,会对你们有很大得帮助(用修改器改装备通常会出很多问题,所以直接用N8修改是最靠谱的)。
第二,批量语句一定要学会举一反三,那么我们就不用懂编程,不用懂代码,不用懂语言就可以完成很多很多工作。
第三,怎么应用批量语句?
在你的世界表(就是N8左边那竖排)右键,然后点命令列界面,就出现一页空白,在这里就可以输入语句了.好的那么正式开始,


一:从简单做起,导入或者修改物品

我们先来看两个个例子

INSERT INTO `world`.`creature_area` (`guid`, `zone`, `area`) VALUES ('6', '1', '1');
这个语句就是一个将物品导入的语句,注意这句前面的INSERT INTO就是‘导入’的意思

UPDATE `world`.`creature_area` SET `guid`='6', `zone`='1', `area`='1' WHERE (`guid`='6');
这个语句就是一个将物品导入的语句,注意这句前面的UPDATE就是‘修改’的意思

这两种语句是我们最最常用的语句,那么我们来一个一个的解释
导入语句
INSERT INTO `world`.`creature_area` (`guid`, `zone`, `area`) VALUES ('6', '1', '1');
INSERT INTO `world`.`creature_area`代表,你要导入到哪里,这里就是指的WORLD库里的creature_area表
(`guid`, `zone`, `area`)代表这个表里面的每一列,通常会有很多咧,会依次用逗号隔开
VALUES就是指数值的意思,前面要导入的每一列都会填入一个数值
('6', '1', '1');就是前面每一列填入的数值,对应着(`guid`, `zone`, `area`)的排列顺序。

修改语句
UPDATE `world`.`creature_area` SET `guid`='6', `zone`='1', `area`='1' WHERE (`guid`='6');
前面已经讲了,UPDATE `world`.`creature_area` 就是修改哪个库的哪个表
SET 字面翻译,就是设置为,和导入语句不同的这是,一定要记住
`guid`='6', `zone`='1', `area`='1' 非常好理解了吧,就是某列设置为某值
WHERE (`guid`='6');这个非常重要,这个是判定你要修改那一行,这句的意思就是当guid`='6'的时候,进行前面的修改。

那么我们来举一反三
我们要修改item_template表的socketColor_1列为1,应该这么写

UPDATE item_template set socketColor_1 = 1;

细心的朋友发现了,这样会把整个表的socketColor_1列都修改为1,但是我只想修改武器的socketColor_1列怎么办?这就要加入判定了,就是前面教的WHERE x='y'
这样,我们就得出一下这句

UPDATE item_template set socketColor_1 = 1 where class='2';

有些同学疑问了,为什么我这里UPDATE item_template之间没有选择什么库,那是应为我直接在WORLD库右键点命令列界面,在这里我就不用判定导入什么库了,就默认为你选择的库。

好的,这是最基本的语句,下面我们再深入一些。



二:多重判定.与值的计算
多重判定
有的同学问了,我们要修改的物品,只有一个判定是不够的,比如我们要修改装备等级大于100小于200的装备怎么办?这里存在了2个判定,那么这第二部分的重点就来了。

例句:UPDATE item_template SET socketColor_1 = 1 where itemlevel>'100' and itemlevel<'200';
同学们看懂了吗?我们只需要在第一个判定后面加入一个and,这样我们就可以有无限多的判定了,再练习一个,我们不但要等级大于100小于200的装备,还要只能是武器。


UPDATE item_template SET socketColor_1 = 1 where itemlevel>'100' and itemlevel<'200'and class='2';

值的计算
可爱的同学们又提出问题了,我们这手动输入一个一个输入值好慢,我们要让他自动生成值怎么办?
OK,这里来个例子,我们要修改装备等级大于300小于500的装备的stat_value1列为原始的2倍


UPDATE item_template SET stat_value1 = stat_value1*2 where itemlevel>'300' and itemlevel<'500';
很简单吧?


有的同学又提出问题了,我们要更自动化!全部放大倍数太简单了!我们要更有变化!
好的~再看个例子,我们要修改装备等级大于300小于500的装备的stat_value1列来按照装备提高等于装备等级的数值

UPDATE item_template SET stat_value1 = stat_value1+itemlevel where itemlevel>'300' and itemlevel<'500';

给装备加前缀名字
很多同学喜欢给自己的装备加个个性的前缀名字,那么这个公式大家可以借鉴
UPDATE item_template set name=concat('超级牛逼的 ',name) where itemlevel>'200';
concat('超级牛逼的 ',name)就是在原始的名字前面加上引号里的数值,同样适用于数字,至于后面的判定,前面讲过了。

随机写入数值
那么,同学们觉得肯定还不够,要更复杂的,好的,我们来更复杂一点
我们只想让装备等级等于300的装备的stat_value1完全随机在400-2500之间怎么办?

update item_template set stat_value1 = round(rand() * 2100) + 400 where itemlevel='300';
这里新出现新的公式: round(rand() * 2100) + 400 ,至于原理,乱七八糟很复杂,恩。。。(就算我死记硬背的,我也不会说出来!)但是有个简单的方式来计算
round(rand() * X) +Y   X=你需要的数值上限减去下限 Y=数值下限

好的,这些大家一定要学会举一反三,你到这里学会了的话已经可以做做看,你会发现比你用修改器快很多多多啊。。。。



游客,如果您要查看本帖隐藏内容请回复



四:自动批量写入
我们好懒,对吧?我们要自动写入一堆就可以开开心心的玩游戏了对吧?那么,这又带来一个死记硬背的公式!

DELIMITER $$
DROP PROCEDURE IF EXISTS WhileLoopProc$$

CREATE PROCEDURE WhileLoopProc()
       BEGIN
               DECLARE x  INT;
               SET x = 1;
               WHILE x <= 1034 DO
                  INSERT INTO `item_enchantment_template` (`entry`, `ench`, `chance`, `type`) VALUES ('10002', (22001+x), 0.016, 1);
                              SET x = x + 1;
               END WHILE;
       END$$
DELIMITER ;

call WhileLoopProc();

乱不乱?别问我,我也不懂,但是该改什么我告诉你!

SET x = 1代表一个基数,通常我喜欢用0
WHILE x <= 1034 DO 代表你要导入多少条,公式是每行增加的数值乘以你要导入的条数然后减去每行增加的数值.
(22001+x) 代表值的最小值,比如你要导入值最小为80000,那么就写入(80000+x)
SET x = x + 1 代表你每个值增加多少,这里是每一行增加1,如果你要增加100,那么就写入SET x = x + 100

那么我们来个例子,比如我们要导入刚才那个表的ench列从3333开始每值加321!一共911条怎么写?

DELIMITER $$
DROP PROCEDURE IF EXISTS WhileLoopProc$$

CREATE PROCEDURE WhileLoopProc()
       BEGIN
               DECLARE x  INT;
               SET x = 0;
               WHILE x <= 292110 DO
                  INSERT INTO `item_enchantment_template` (`entry`, `ench`, `chance`, `type`) VALUES ('10005', (3333+x), 0.016, 1);
                              SET x = x + 321;
               END WHILE;
       END$$
DELIMITER ;

call WhileLoopProc();

晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
18
积分
16
注册时间
2022-12-28
最后登录
2022-12-28

发表于 2023-2-10 04:54:59 | 显示全部楼层
感谢分享~~~~感谢分享~~~~
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
18
积分
16
注册时间
2022-12-29
最后登录
2022-12-29

发表于 2024-6-10 17:16:22 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

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