BUFF系統的實現

2021-06-20 13:47:14 字數 1618 閱讀 1772



熊立丁

<

[email protected]

>

version 0.1,

2011-09

buff是很多遊戲都在採用的一種臨時增益機制。本文講述如何在基於關係型資料庫的網頁遊戲中實現這一系統;如何擴充套件該系統;以及如何提高該系統的效能。

buff是很多遊戲都在採用的一種臨時增益機制;與之對應,還有用於減益的debuff;部分遊戲還引入了不限制持續時間的永久性buff。

對於遊戲的開發人員來說,buff和debuff的差別只是正數和負數的差別,永久性buff也只是持續時間很長(超出遊戲壽命)的普通buff。所以,用統一的系統來實現所有這些機制是完全可行的。

buff的效果是buff的本質,也是玩家和開發人員真正關心的內容。所以這裡我們先來討論buff的效果,並約定用buff_key來稱呼它。

在demo中,我們只提供一種buff效果

buff_key

描述atk

增加指定點數的攻擊力

有了buff的效果,還需要乙個數值來描述buff的強度,我們稱其為buff_value。 通過兩者的組合,我們已經可以提供多個buff了

buff

buff_key

buff_value

描述atk1

atk1

增加1點攻擊力

atk2

atk2

增加2點攻擊力

atk3

atk-1

降低1點攻擊力

這裡我們提供了atk1、atk2、atk3三個buff,atk1、atk2分別可以增加1、2點攻擊力,atk3則是乙個debuff,可以降低1點攻擊力。

buff只有加在特定的單位上才有意義,我們用unit來表示某個單位,用time表示buff的過期時間(unix時間戳)

unit

buff_key

buff_value

time

描述u001

atk1

1356105599

單位u001擁有增加1點攻擊力的buff,持續到1356105599

u001

atk2

1318774750

單位u001擁有增加2點攻擊力的buff,持續到1318774750

u001

atk-1

1318774760

單位u001擁有降低1點攻擊力的debuff,持續到1318774760

如此一來,我們想要知道當前時刻單位u001上atk型別buff的總值,只要找出time大於當前時間戳,且buff_key為atk的所有記錄,並對buff_value求和便能得到想要的數值:

select sum(buff_key) where unit = 'u001' and time > now() and buff_key = 'atk'

在時刻1318774745,單位u001有3個有效的atk型別buff,數值為1+2-1=2

在時刻1318774655,單位u001有2個有效的atk型別buff,數值為1-1=0

在時刻1318774765,單位u001有1個有效的atk型別buff,數值為1,事實上,這個buff會持續到世界末日。:)

原文出處:

Buff系統框架設計

buff的配置檔案 buftype 1 精神類buf 2 物理類buf 3.元素類buf 4.其他類buf 5.被動類buf bufsubtype 1000 1999 精神子類 2000 2999.物理子類 3000 3999.元素子類 4000 4999.其他子類 5000 5999.被動子類。所...

buff系統 遊戲中 從心理學看遊戲中的社交系統

人是社會性動物,活在關係中,關係裡最重要的東西就是理解,而理解的前提就是 看見 社交的本質就是提供 看見 的基礎,你存在,所以我存在,因為被看見,才有價值。開場故事 現實與遊戲中的社互動動 春天已經來了,疫情在全國多個城市0增長和武漢艙醫院全部休艙,基本宣告了結束。年前本來就要動手術的阿西一直拖到了...

訊號量實現環形buff下多生產者多消費者模型

posix下定義了乙個semaphore,他和systemv版本下的sem很像,而這個多用於執行緒,它的單位是訊號量,而sem的單位是訊號量集。include int sem init sem t sem,int pshared,unsigned int value int sem destroy ...