游戏人物装备技能数据表怎么设计(整理)
游戲人物裝備技能數(shù)據(jù)表怎么設(shè)計(整理)
一、總結(jié)
一句話總結(jié):把人物的屬性抽離出去,其它的裝備啊,技能表和屬性表之間建立一個關(guān)系表。
?
1、裝備表如何設(shè)計(裝備表和角色表的對應(yīng)關(guān)系是什么)?
裝備屬于人物,所以裝備表可以加上所屬人物的id
裝備,包括的數(shù)據(jù)項有:裝備名稱,裝備描述,(通用屬性),裝備ID,主人ID
其實可以弄一個裝備屬性表,來表示裝備提升的屬性,和技能一樣
?
2、技能表如何設(shè)計?
技能,包括的數(shù)據(jù)項有:技能名稱,基礎(chǔ)傷害,加成類型,加成比例,冷卻時間,學(xué)習(xí)等級
其實可以弄一個技能屬性對應(yīng)表,來表示技能提升的屬性
有技能id,有屬性id,有提升類型(數(shù)值還是百分比),有提升值,每升一級提升值
?
3、人物的屬性(包括基礎(chǔ)屬性比如力量魔法和面板屬性比如傷害)是否需要抽離?
需要:因為下面這條里面有屬性id
有技能id,有屬性id,有提升類型(數(shù)值還是百分比),有提升值 (每級),有技能圖標(biāo)
?
4、怪物表如何設(shè)計?
和角色表一樣,角色有的怪物應(yīng)該都有,比如各種屬性
?
?
二、RPG游戲數(shù)據(jù)庫設(shè)計
一.數(shù)據(jù)庫需求分析
通過游戲過程中所需元素,設(shè)計如下數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)
1.角色,包括的數(shù)據(jù)項有:用戶ID,角色I(xiàn)D,角色昵稱,(通用屬性,角色屬性)
2.角色屬性,包括的數(shù)據(jù)項有:力量,智力,敏捷,經(jīng)驗值,職業(yè),角色I(xiàn)D
3.通用屬性,包括的數(shù)據(jù)項有:生命值,魔法值,攻擊力,護(hù)甲值,魔抗值,主人ID
4.怪物信息,包括的數(shù)據(jù)項有:怪物ID,(通用屬性,NPC屬性)
5.NPC屬性,包括的數(shù)據(jù)項有:出生地點,活動范圍,功能,主人ID
6.用戶信息,包括的數(shù)據(jù)項有:用戶ID,用戶密碼,用戶郵箱,登陸地址,登陸時間
7.裝備,包括的數(shù)據(jù)項有:裝備名稱,裝備描述,(通用屬性),裝備ID,主人ID
8.技能,包括的數(shù)據(jù)項有:技能名稱,基礎(chǔ)傷害,加成類型,加成比例,冷卻時間,學(xué)習(xí)等級
二.數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計
?
角色E-R圖.PNG
?
角色屬性E-R圖.PNG
?
通用屬性E-R圖.PNG
?
怪物信息E-R圖.PNG
?
NPC屬性E-R圖.PNG
?
用戶信息E-R圖.PNG
?
裝備E-R圖.PNG
?
技能E-R圖.PNG
?
實體間聯(lián)系E-R圖.PNG
三.數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| YHID | INT | 8 | 不為NULL,外鍵 | 創(chuàng)建該角色的用戶ID |
| JSID | INT | 8 | 不為NULL,主鍵 | 該角色的ID |
| JSNC | CHAR | 8 | 不為NULL | 角色昵稱 |
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| ID | INT | 8 | 不為NULL,外鍵 | 擁有該屬性的角色I(xiàn)D |
| LL | INT | 3 | 不為NULL | 力量 |
| ZL | INT | 3 | 不為NULL | 智力 |
| MJ | INT | 3 | 不為NULL | 敏捷 |
| JYZ | INT | 3 | 不為NULL | 經(jīng)驗值 |
| ZY | CHAR | 4 | 不為NULL | 職業(yè) |
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| SMZ | INT | 3 | 不為NULL | 生命值 |
| MFZ | INT | 3 | 不為NULL | 魔法值 |
| GJL | INT | 3 | 不為NULL | 攻擊力 |
| HJZ | INT | 3 | 不為NULL | 護(hù)甲值 |
| MKZ | INT | 3 | 不為NULL | 魔抗值 |
| ID | INT | 8 | 不為NULL,外鍵 | 擁有該屬性的ID |
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| ID | INT | 8 | 不為NULL,主鍵 | 怪物ID |
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| ID | INT | 8 | 不為NULL,外鍵 | 擁有該屬性的ID |
| CSDD | CHAR | 8 | 不為NULL | 出生地點 |
| HDFF | INT | 3 | 不為NULL | 活動范圍 |
| GN | CHAR | 3 | 可空,商人,任務(wù)發(fā)布者,怪物等 | 功能 |
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| YHID | INT | 8 | 不為NULL,主鍵 | 用戶ID |
| YHMM | CHAR | 8 | 不為NULL | 用戶密碼 |
| YHYX | CHAR | 8 | 不為NULL | 用戶郵箱 |
| DLDZ | CHAR | 8 | 可NULL | 登陸地址 |
| DLSJ | CHAR | 8 | 可NULL | 登陸時間 |
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| ZBID | INT | 8 | 不為NULL,主鍵 | 裝備ID |
| ZRID | INT | 8 | 不為NULL,外鍵 | 擁有該裝備的角色I(xiàn)D |
| ZBMC | CHAR | 8 | 不為NULL | 裝備名稱 |
| ZBMS | CHAR | 8 | 可NULL | 裝備描述 |
| 字段名 | 數(shù)據(jù)類型 | 長度 | 是否為NULL | 描述 |
| ID | INT | 8 | 不為NULL,外鍵 | 擁有該技能的角色I(xiàn)D |
| JNMC | CHAR | 8 | 不為NULL | 技能名稱 |
| JCSS | INT | 8 | 不為NULL | 基礎(chǔ)傷害 |
| JCLX | CHAR | 2 | 不為NULL,物理,魔法 | 加成類型 |
| JCBL | INT | 2 | 可為NULL | 加成比例 |
| LQSJ | INT | 3 | 不為NULL | 冷卻時間 |
| XXDJ | INT | 3 | 可為NULL | 學(xué)習(xí)等級 |
四.數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計
根據(jù)以上邏輯分析所得到的表的關(guān)系,我們使用SQL語言設(shè)計得到數(shù)據(jù)庫和數(shù)據(jù)表,如下:
1.創(chuàng)建數(shù)據(jù)庫RPGdatabase
CREATE DATABASE RPGdatabase;
2.創(chuàng)建角色數(shù)據(jù)表
CREATE TABLE Players(
YHID INTEGER NOT NULL,
JSID INTEGER NOT NULL,
JSNC CHAR(8) NOT NULL,
PRIMARY KEY(JSID)
FOREIGN KEY(YHID) REFERENCES(Users)
)
3.創(chuàng)建角色屬性數(shù)據(jù)表
CREATE TABLE PAttributes(
ID INTEGER NOT NULL,
LL INTEGER NOT NULL,
ZL INTEGER NOT NULL,
MJ INTEGER NOT NULL,
JYZ INTEGER NOT NULL,
ZY CHAR(4) NOT NULL,
FOREIGN KEY(ID) REFERENCES(Players)
)
4.創(chuàng)建通用屬性數(shù)據(jù)表
CREATE TABLE PAttributes(
ID INTEGER NOT NULL,
SMZ INTEGER NOT NULL,
MFZ INTEGER NOT NULL,
GJL INTEGER NOT NULL,
HJZ INTEGER NOT NULL,
MKZ INTEGER NOT NULL,
FOREIGN KEY(ID) REFERENCES(Players)
)
5.創(chuàng)建怪物數(shù)據(jù)表
CREATE TABLE Monsters(
ID INTEGER NOT NULL,
PRIMARY KEY(ID)
)
6.創(chuàng)建NPC屬性數(shù)據(jù)表
CREATE TABLE NpcAttributes(
ID INTEGER NOT NULL,
CSDD CHAR(8) NOT NULL,
HDFF INTEGER NOT NULL,
GN CHAR(3),
FOREIGN KEY(ID) REFERENCES(Players)
)
7.創(chuàng)建用戶信息數(shù)據(jù)表
CREATE TABLE Users(
YHID INTEGER NOT NULL,
YHMM CHAR(8) NOT NULL,
YHYX CHAR(8) NOT NULL,
DLDZ CHAR(8),
DLSJ CHAR(8),
PRIMARY KEY(YHID)
)
8.創(chuàng)建裝備信息數(shù)據(jù)表
CREATE TABLE Equips(
ZBID INTEGER NOT NULL,
ZRID INTEGER NOT NULL,
ZBMC CHAR(8) NOT NULL,
ZBMS CHAR(8),
PRIMARY KEY(ZBID)
FOREIGN KEY(ZRID) REFERENCES(Players)
)
9.創(chuàng)建技能信息數(shù)據(jù)表
CREATE TABLE Skills(
ID INTEGER NOT NULL,
JCSS INTEGER NOT NULL,
JNMC CHAR(8) NOT NULL,
JCLX CHAR(2) NOT NULL,
JCBL INTEGER,
LQSJ INTEGER NOT NULL,
XXDJ INTEGER,
FOREIGN KEY(ID) REFERENCES(Players)
)
參考:RPG游戲數(shù)據(jù)庫設(shè)計 - 簡書
https://www.jianshu.com/p/59fde9eef388
?
?
?
二、MMORPG游戲服務(wù)器技能系統(tǒng)設(shè)計:表格字段與技能程序框架
本文主要從一個程序員的角度闡述一下mmorpg服務(wù)器技能系統(tǒng)的程序框架設(shè)計,最近在做這個,就當(dāng)做一個總結(jié)吧,其中某些概念可能沒有解釋清楚,歡迎大家拍磚討論~
技能其實是戰(zhàn)斗系統(tǒng)的一個組成部分,戰(zhàn)斗基本上都可以由技能觸發(fā),技能系統(tǒng)實際上就是一套完整的邏輯,我們用表格來設(shè)計,將技能的邏輯用屬性字段抽象出來,然后依據(jù)屬性字段來控制邏輯,策劃人員可以通過更改屬性字段來配置出不同的邏輯屬性。
?1. 表格屬性字段的設(shè)計
為了減少冗余,我們將技能屬性字段設(shè)計在4個不同的表中:
Skill表:技能表的入口表,包括cast表,buffer表,op表,技能的釋放需求,傷害
Cast表: 技能的釋放過程表,包括技能吟唱時間,技能命中距離等等
Buffer表:各種人物狀態(tài),靜態(tài)和動態(tài)的光環(huán),效果等等
Status表:角色狀態(tài)表,角色在狀態(tài)下能使用或被使用的技能或者buffer
op表: 技能的傷害計算公式
?skill表字段設(shè)計:
?
?
名稱:技能名稱,如火球術(shù)
技能id:技能id值
技能名稱id:技能系,id一樣表示一個系技能
技能類型:加血、物理攻擊、魔法攻擊、buffer、地圖技能
公共CD時間:多個技能可以共cd,比如所有吃藥技能
CD時間:cd時間
CD保存類型:cd時間在人物下線后是否保存數(shù)據(jù)庫
需要角色等級:角色等級需求
?
角色狀態(tài)限制:使用技能的角色狀態(tài)限制,這個字段需要斟酌以后重新設(shè)計成一個表格
需要武器:技能釋放需要的武器類型,如弓,刀,劍等等
消耗類型:需要消耗,如hp,mp,xp等等
消耗數(shù)量:hp,mp,xp的消耗數(shù)量
是否有益:是否是有益技能
技能屬于:生活技能、裝備技能、職業(yè)技能等等
升級技能:改技能的升級技能
調(diào)用cast表:調(diào)用cast表的id號
?
?
調(diào)用describe表:調(diào)用技能描述表id號
影響形狀:范圍技能的影響范圍,直線、圓、扇形
影響個數(shù):范圍技能影響的npc個數(shù)
Buffer1:技能觸發(fā)的buffer1
概率1:技能觸發(fā)buffer1的概率
Buffer2:技能觸發(fā)的buffer2
概率2:技能觸發(fā)buffer2的概率
?
?
傷害效果:技能產(chǎn)生的傷害
調(diào)用op表計算效果:op表中數(shù)值計算的公式
是否產(chǎn)生傷害仇恨:是否產(chǎn)生仇恨值
攜帶仇恨:技能產(chǎn)生的仇恨值
?cast表字段設(shè)計:
?
?
名稱:cast表對應(yīng)技能名稱
是否對地釋放:是否對地釋放
是否對他人釋放:是否可以對他人釋放該技能
是否對自己釋放:是否可以對自己釋放該技能
是否前搖打斷:前腰是否可以打斷
前搖時間:動畫前搖的時間
飛行時間:魔法的飛行時間
持續(xù)施法時間:技能的施法時間
?
?
吟唱時間:吟唱時間
釋放距離:釋放技能距離目標(biāo)的距離
技能命中:技能命中率
命中最大距離:指向型技能當(dāng)目標(biāo)出了fire區(qū)域就不受攻擊了
? buffer表字段設(shè)計:
?
?
名稱:對應(yīng)skill表中的技能名稱
Id:buffer id
效果nameID:表示一個系列的buffer
類型:靜態(tài)、動態(tài)、狀態(tài)buffer
是否有益:是否有益處
角色狀態(tài):加了buffer后角色處于的狀態(tài),如沉默,天神下凡,嗜血等等
傷害效果:buffer的傷害
調(diào)用op表:指向op表中的公式id
動態(tài)次數(shù):對應(yīng)動態(tài)buffer生效次數(shù),對靜態(tài)buffer無效
?
?
生效間隔:對應(yīng)動態(tài)buffer每次生效的間隔時間,靜態(tài)buffer無效
持續(xù)時間:對應(yīng)靜態(tài)buffer的持續(xù)時間,-1表示永久buffer
產(chǎn)生buffer:某些 buffer可以給隊友或敵人加
影響范圍:buffer影響的范圍
是否可以移除:對應(yīng)驅(qū)散技能
移除類型:對應(yīng)驅(qū)散技能等級
是否可以覆蓋:同類型buffer是否可以覆蓋,還是效果疊加
?
覆蓋類型:大的覆蓋小的
是否需要from:計算效果時是否需要buffer來源。
status表字段設(shè)計:
?
?
狀態(tài)名稱:角色的狀態(tài)名稱,如沉默,死亡,天神下凡等等。
狀態(tài)id:角色狀態(tài)的id號
角色動作最大值:在該狀態(tài)下可以使用或者被使用的技能的最大值,如無敵不能受傷害;
角色動作最小值:在該狀態(tài)下可以使用或者被使用的技能的最小值,如無敵不能受傷害;
狀態(tài)最大值:在該狀態(tài)下,可以被使用buffer的最大值;
狀態(tài)最小值:在該狀態(tài)下,可以被使用buffer的最小值。
? 2.技能程序框架
技能的表格屬性字段我們已經(jīng)設(shè)計好了,可以滿足策劃短期需求了,接下來我們來設(shè)計一下技能程序的框架。
技能系統(tǒng)服務(wù)器和客戶端是有交互的,具體流程看下圖:
?
服務(wù)器要通知客戶端是否能釋放技能,吟唱時間,技能命中結(jié)果,傷害數(shù)字,服務(wù)器還要廣播技能釋放結(jié)果,讓同區(qū)域的玩家可以看到別人在釋放技能。
需要立即同步的。
1. hp,眾所周知;
2,角色狀態(tài),角色的各種狀態(tài),比如天神下凡,沉默,死亡。
不需要同步的。
角色屬性改變,如力量,敏捷等角色屬性。
ps:服務(wù)器和客戶端同一套代碼,客戶端進(jìn)行預(yù)判,除了血量和角色狀態(tài)服務(wù)器向客戶端發(fā)同步消息,其他屬性改變可以不發(fā)消息,這樣可減少服務(wù)器和客戶都的消息數(shù)量。
?代碼的結(jié)構(gòu)設(shè)計
?
?
這里只畫一個簡單結(jié)構(gòu),將每個table抽象為一個table_data,然后在game_char中組合起來。
?
?
參考:MMORPG游戲服務(wù)器技能系統(tǒng)設(shè)計:表格字段與技能程序框架 - CSDN博客
https://blog.csdn.net/caoshulin1989/article/details/53081035
?
?
?
二、RPG手機游戲道具、物品、裝備表設(shè)計
###一、游戲物品/道具系統(tǒng)數(shù)據(jù)模型設(shè)計特點
為了讓游戲更加的豐富,我們1201團(tuán)隊的新手機游戲設(shè)計了道具系統(tǒng)。于是豐富了游戲、取悅了玩家,哭了開發(fā)——道具/物品數(shù)據(jù)子系統(tǒng)是簡單的、復(fù)雜的、不確定的:
1. 簡單,說起來不就是選擇一個或多個數(shù)據(jù)庫產(chǎn)品,然后定義一種數(shù)據(jù)模型,然后增、刪、改、查。
2. 復(fù)雜,物品/道具可以在細(xì)分為裝備、時裝、坐騎、寶石、buff等等,每類物品有不同的屬性需求,于是:
+ 首先物品數(shù)據(jù)是游戲核心數(shù)據(jù)里數(shù)據(jù)量最大、操作最頻繁、數(shù)據(jù)結(jié)構(gòu)最多元化的數(shù)據(jù)
+ 如果用一種數(shù)據(jù)表結(jié)構(gòu),那么會浪費很多的字段或數(shù)據(jù)空間(而物品表超大);
+ 如果用不同的數(shù)據(jù)表結(jié)構(gòu),那么游戲邏輯就要麻煩一些了,比如物品在玩家中轉(zhuǎn)移的時候、修改、丟棄的時候。
+ 是否進(jìn)行應(yīng)用邏輯層水平切分?切分了就可以將數(shù)據(jù)庫分布到多個數(shù)據(jù)庫服務(wù)器上,那么理論上數(shù)據(jù)規(guī)模就不會成為瓶頸了;但如果切分了,道具數(shù)據(jù)分析、后期的合區(qū)邏輯就會很復(fù)雜。
+ 裝備、時裝是會有多個屬性的,且每件裝備的屬性值、屬性類型都不一樣,如何設(shè)計數(shù)據(jù)字段(當(dāng)然如果用nosql數(shù)據(jù)庫就不存在這個問題了)?
3. 不確定:
+ 隨著游戲開發(fā)及運營的進(jìn)行,各種新的道具的需求會不斷涌現(xiàn)出來,有可能就會需要增加新的屬性和功能需求
+ 到底每一個玩家最終會有多少的物品?
+ 最終單個區(qū)服的數(shù)據(jù)規(guī)模有多大這個其實很難預(yù)計。我們做的很完善(當(dāng)然開發(fā)代價也大)的設(shè)計與開發(fā)會不會有些多余,甚至被老板認(rèn)為想多了?
###二、游戲物品/道具系統(tǒng)數(shù)據(jù)模型設(shè)計目標(biāo)及解決思路
上面分析做了,槽也吐了,還是要做事嘛,呵呵。根據(jù)我們的新游戲的具體需求,對物品數(shù)據(jù)庫表的設(shè)計定義了如下要求和解決思路:
序號 | 要求 | 解決思路
------| ----- | -----------------------------------
1 | 確保數(shù)據(jù)操作的性能 | 充分利用緩存服務(wù)器
2 | 降低程序開發(fā)和后期客服工作的復(fù)雜度 | 各類道具不分表
3 | 必須可以方便、靈活的支持道具新功能需求的開發(fā) | 將多變的裝備屬性以json格式存于一個字段
4 | 保留充分的可擴展性 | 根據(jù)玩家id進(jìn)行數(shù)據(jù)庫表水平切分
5 | 盡量降低合區(qū)操作時數(shù)據(jù)處理邏輯的難度和效率 | 用自增長ID、玩家id、區(qū)服id做聯(lián)合主鍵
###三、具體開發(fā)設(shè)計方案
根據(jù)以上的分析結(jié)果,我們在總結(jié)了以前的游戲開發(fā)經(jīng)驗并參考了網(wǎng)上的一些文章后形成了我們新手機游戲的物品數(shù)據(jù)子系統(tǒng)的設(shè)計、開發(fā)方案。
*所有數(shù)據(jù)訪問都封裝在model層。*
1. 在程序的model層里定義公共函數(shù)GetDb(playerid,areaid),用于物品數(shù)據(jù)及其它需要進(jìn)行按用戶水平分割的數(shù)據(jù)獲取數(shù)據(jù)庫(連接)
2. 每一個物品的主鍵由itemid,playerid,areaid三個字段組成
3. 將裝備buff及某道具特有屬性統(tǒng)一以json字符串形式保存在一個varchar字段里
4. 道具表定義 *失效時間* 字段,這個字段同時表示道具有效期的三種情況:
+ =0 ,表示是不限時的永久性道具
+ 小于等于600000,表示有效時間段,如雙倍經(jīng)驗卡有效時長3小時,那么著個字段值為 **180** (分鐘),使用此道具時,用當(dāng)前時間加上這個字段值得到失效時間戳修改此字段或做其他處理
+ 大于600000,表示該道具的失效時間戳(unix時間戳格式)
5. 玩家道具數(shù)據(jù)查詢流程:
+ 首先檢查redis里有沒有
+ 如果有,返回
+ 如果沒有從數(shù)據(jù)庫里查詢并存到redis,返回
6. 修改/或增加道具數(shù)據(jù)流程:
+ 首先檢查redis里有沒有
+ 如果沒有,從數(shù)據(jù)庫里查詢并存到redis
+ 如果有,繼續(xù)
+ 修改/增加redis數(shù)據(jù),同時在key為“item_update_list”的redis list 數(shù)據(jù)里記錄下該道具的主鍵
+ 定時根據(jù)“item_update_List”數(shù)據(jù)寫回mysql,并清除“item_update_list”
7. 刪除一個道具數(shù)據(jù)流程:
+ 在redis 里key為“item_delete_list” 的redis list 數(shù)據(jù)里記錄下該道具的主鍵
+ 刪除redis里記錄
+ 定時根據(jù)item_delete_list”數(shù)據(jù)刪除mysql里記錄,并清除“item_delete_list”
8.注意:
+ 配置redis 為 **在每次更新操作后進(jìn)行日志記錄**
+ 緩存定時同步mysql處理程序可以作為一個獨立的進(jìn)程運行
+ 這個解決方案可以針對其它用戶私有數(shù)據(jù),如技能、buff。
###四、總結(jié)
數(shù)據(jù)庫表水平分割和緩存應(yīng)用基本上已經(jīng)是服務(wù)器端程序員的常識,在google上查相關(guān)技術(shù)資料時,大多數(shù)博文也是寫的這些。
本文先是對游戲道具/物品數(shù)據(jù)模型的進(jìn)行了簡單的需求分析,然后講了思路和方案,其實我最想表達(dá)的是我的三個設(shè)計細(xì)節(jié)或idea:
+ 道具數(shù)據(jù)記錄主鍵設(shè)計(方便合區(qū))
+ 裝備buff及道具特有的屬性字段設(shè)計(為道具豐富的功能需求提供靈活、便捷的數(shù)據(jù)基礎(chǔ))
+ 所有道具類別不區(qū)分存儲(方便后期的客服查詢和數(shù)據(jù)統(tǒng)計)
###最后聲明:
其實我是一個程序員,呵呵!
?
RPG手機游戲道具、物品、裝備表設(shè)計 - CSDN博客
https://blog.csdn.net/fancyblue/article/details/12025031
總結(jié)
以上是生活随笔為你收集整理的游戏人物装备技能数据表怎么设计(整理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KITTI数据集GPS数据格式dataf
- 下一篇: 卡巴斯基的离线更新以及病毒库备份