红月论坛

 找回密码
 立即注册
查看: 10305|回复: 1

[技术解析] tblGameID1表的触发器

  [复制链接]
发表于 2020-3-1 14:56:52 | 显示全部楼层 |阅读模式
新人角色上线样子的自定义,大都通过角色表的触发器实现,原理就是在tblGameID1表有新的Insert行为时,获取Game ID,然后针对性地进行逻辑实现。触发器语法很简单,但一些错误的语句逻辑,将直接导致角色创建失败,或者客户端看到创建成功了,但是数据事实上没有成功存库,出现一些莫名其妙的效果。
触发器方面一人一个写法,关键看要实现那些功能,包括但不限于上线定级、地图、坐标、初始金钱、初始属性、任务状态。
本贴先介绍一些常见的操作,后续如果有新东西,直接更新到1楼,建议加收藏。

tblGameID1表需要获取最重要的“标识列”就是GameID,推荐以下这种比较明确的写法:
  1. DECLARE @GAMEID CHAR(14)  -- 建议nvarchar nchar类型
  2. SELECT @GAMEID = GameID FROM inserted
复制代码
当然了,也可以直接用IN短句来操作,例如:
  1. .....WHERE GameID IN (SELECT GameID FROM inserted)
复制代码
贴个一句话实现修改tblGameID1表信息,大家自行扩展:
  1. UPDATE TBLGAMEID1 SET
  2.         Map=47,X=15,Y=15
  3.         ,HP=1000
  4.         ,StoryQuestState=131071
  5.         ,SETimer='0:9999999.1:9999999.3:9999999.8:9999999:50.9:9999999.17:9999999:9999999.20:9999999.23:9999999.24:9999999.25:9999999.30:9999999.31:9999999.33:9999999.42:9999999.44:9999999.48:9999999.50:9999999.56:9999999.'
  6.         ,TLETimer='0:99999999.1:99999999.2:99999999.3:99999999.4:99999999.5:99999999.6:99999999.7:99999999.8:99999999.9:99999999.10:99999999.11:99999999.'
  7.         ,Money=66666666
  8.         ,Item=@Item
  9.         ,QuickItem='0:4-34/100.1:4-36/100.2:4-38/10.3:4-41/10.4:5-99/1.'
  10.         WHERE GAMEID IN (SELECT GAMEID FROM INSERTED)
复制代码
这里有必要贴一下tblGameID1表的列解析了。
此外,服务器一些附加功能,例如自定义账户信息(VIP)、转生等功能,需要附加创建一个表,写入GameID信息用于扩展。
通常这样操作:
  1. --附加GameIDX关联
  2. INSERT INTO tblGameIDX(GameID,BillID) SELECT GameID,BillID FROM inserted
复制代码
这样就可以在tblGameIDX表中搞更多有趣的东西了。
学习红月技术,我只来红月论坛!
回复

使用道具 举报

发表于 2021-4-20 11:58:04 | 显示全部楼层
好好学习,天天向上!
学习红月技术,我只来红月论坛!
回复

使用道具 举报

手机版|小黑屋|红月论坛

GMT+8, 2024-12-22 00:36

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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