熊立丁
<
>
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 ...