item_effect.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package model
  2. import "roserver/serverproto"
  3. type ItemEffect interface {
  4. CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32
  5. OnUse(itemId uint32, r *Role, st AddItemST, add bool)
  6. }
  7. var itemEffectMap map[serverproto.ResType]ItemEffect
  8. func init() {
  9. itemEffectMap = make(map[serverproto.ResType]ItemEffect)
  10. addItemEffectHandler(serverproto.ResType_Res_Coin, new(ItemEffectAddCoin))
  11. addItemEffectHandler(serverproto.ResType_Res_Rmb, new(ItemEffectRmb))
  12. addItemEffectHandler(serverproto.ResType_Res_RoleBaseExp, new(ItemEffectBaseExp))
  13. addItemEffectHandler(serverproto.ResType_Res_RoleJobExp, new(ItemEffectRoleJobExp))
  14. addItemEffectHandler(serverproto.ResType_Res_HeroBaseExp, new(ItemEffectHeroExp))
  15. addItemEffectHandler(serverproto.ResType_Res_Cruise, new(ItemEffectCruise))
  16. addItemEffectHandler(serverproto.ResType_Res_Sprite, new(ItemEffectCommonRes))
  17. addItemEffectHandler(serverproto.ResType_Res_Reslove, new(ItemEffectCommonRes))
  18. addItemEffectHandler(serverproto.ResType_Res_EvilExp, new(ItemEffectCommonRes))
  19. addItemEffectHandler(serverproto.ResType_Res_PetExp, new(ItemEffectCommonRes))
  20. addItemEffectHandler(serverproto.ResType_Res_PetCoin, new(ItemEffectCommonRes))
  21. addItemEffectHandler(serverproto.ResType_Res_Guild, new(ItemEffectCommonRes))
  22. addItemEffectHandler(serverproto.ResType_Res_VipExp, new(ItemEffectCommonRes))
  23. addItemEffectHandler(serverproto.ResType_Res_DaoChang100, new(ItemEffectCommonRes))
  24. addItemEffectHandler(serverproto.ResType_Res_Guild_Battle, new(ItemEffectCommonRes))
  25. addItemEffectHandler(serverproto.ResType_Res_CashTicket, new(ItemEffectCommonRes))
  26. addItemEffectHandler(serverproto.ResType_Res_PetLevelUP_Exp, new(ItemEffectCommonRes))
  27. addItemEffectHandler(serverproto.ResType_Res_HightSkillExp, new(ItemEffectCommonRes))
  28. addItemEffectHandler(serverproto.ResType_Res_CreditRecharge, new(ItemEffectCommonRes))
  29. addItemEffectHandler(serverproto.ResType_Res_ROCoin, new(ItemEffectCommonRes))
  30. addItemEffectHandler(serverproto.ResType_Res_BoliShopExp, new(ItemEffectCommonRes))
  31. }
  32. func addItemEffectHandler(effectType serverproto.ResType, effect ItemEffect) {
  33. itemEffectMap[effectType] = effect
  34. }
  35. func DoCheck(r *Role, cfgData *serverproto.ItemCfg, count int32) int32 {
  36. effect, ok := itemEffectMap[serverproto.ResType(cfgData.ResType)]
  37. if ok {
  38. return effect.CheckUse(r, cfgData, count)
  39. }
  40. return int32(serverproto.ErrorCode_ERROR_FAIL)
  41. }
  42. func DoUse(r *Role, itemCfg *serverproto.ItemCfg, st AddItemST, add bool) {
  43. effect, ok := itemEffectMap[serverproto.ResType(itemCfg.ResType)]
  44. if ok {
  45. effect.OnUse(uint32(itemCfg.Id), r, st, add)
  46. }
  47. }
  48. /**
  49. 添加金币
  50. */
  51. type ItemEffectAddCoin struct {
  52. ItemEffect
  53. }
  54. func (this *ItemEffectAddCoin) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
  55. return int32(serverproto.ErrorCode_ERROR_OK)
  56. }
  57. func (this *ItemEffectAddCoin) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
  58. r.AddRes(int32(serverproto.ResType_Res_Coin), st, add)
  59. }
  60. /**
  61. 添加Rmb
  62. */
  63. type ItemEffectRmb struct {
  64. ItemEffect
  65. }
  66. func (this *ItemEffectRmb) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
  67. return int32(serverproto.ErrorCode_ERROR_OK)
  68. }
  69. func (this *ItemEffectRmb) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
  70. r.AddRes(int32(serverproto.ResType_Res_Rmb), st, add)
  71. if add == true { //增加货币
  72. //增加货币//下面两个走付费的记录接口
  73. if st.AddFrom != AddFrom_Rune &&
  74. st.AddFrom != AddFrom_Pay {
  75. r.WriteAddGoldLogJF(st.ItemCount, int32(st.AddFrom))
  76. }
  77. r.WriteAddGoldLog(st.ItemCount, int32(st.AddFrom), st.ReasonParam)
  78. } else { //增加货币
  79. //计费:使用元宝
  80. r.WriteUseGoldLogJF(st)
  81. //其他类消耗元宝日志
  82. if st.AddFrom != AddFrom_Shop_Buy &&
  83. st.AddFrom != AddFrom_Shop_Arane &&
  84. st.AddFrom != AddFrom_Shop_Dark &&
  85. st.AddFrom != AddFrom_Shop_Guild &&
  86. st.AddFrom != AddFrom_Shop_Pet {
  87. r.WriteUseGoldOtherLog(st)
  88. }
  89. if rune := r.GetRoleRune(); rune != nil {
  90. rune.AddGoldExp(st.ItemCount)
  91. }
  92. }
  93. }
  94. /**
  95. 添加baseexp
  96. */
  97. type ItemEffectBaseExp struct {
  98. ItemEffect
  99. }
  100. func (this *ItemEffectBaseExp) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
  101. return int32(serverproto.ErrorCode_ERROR_OK)
  102. }
  103. func (this *ItemEffectBaseExp) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
  104. r.AddRes(int32(serverproto.ResType_Res_RoleBaseExp), st, add)
  105. }
  106. /**
  107. 添加JobExp
  108. */
  109. type ItemEffectRoleJobExp struct {
  110. ItemEffect
  111. }
  112. func (this *ItemEffectRoleJobExp) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
  113. return int32(serverproto.ErrorCode_ERROR_OK)
  114. }
  115. func (this *ItemEffectRoleJobExp) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
  116. r.AddRes(int32(serverproto.ResType_Res_RoleJobExp), st, add)
  117. }
  118. /**
  119. 添加HeroExp
  120. */
  121. type ItemEffectHeroExp struct {
  122. ItemEffect
  123. }
  124. func (this *ItemEffectHeroExp) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
  125. return int32(serverproto.ErrorCode_ERROR_OK)
  126. }
  127. func (this *ItemEffectHeroExp) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
  128. r.AddRes(int32(serverproto.ResType_Res_HeroBaseExp), st, add)
  129. }
  130. /**
  131. 添加巡游值
  132. */
  133. type ItemEffectCruise struct {
  134. ItemEffect
  135. }
  136. func (this *ItemEffectCruise) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
  137. return int32(serverproto.ErrorCode_ERROR_OK)
  138. }
  139. func (this *ItemEffectCruise) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
  140. r.AddRes(int32(serverproto.ResType_Res_Cruise), st, add)
  141. }
  142. /**
  143. 通用资源添加
  144. */
  145. type ItemEffectCommonRes struct {
  146. ItemEffect
  147. }
  148. func (this *ItemEffectCommonRes) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
  149. return int32(serverproto.ErrorCode_ERROR_OK)
  150. }
  151. func (this *ItemEffectCommonRes) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
  152. r.AddRes(int32(itemId), st, add)
  153. }