| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package model
- import "roserver/serverproto"
- type ItemEffect interface {
- CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32
- OnUse(itemId uint32, r *Role, st AddItemST, add bool)
- }
- var itemEffectMap map[serverproto.ResType]ItemEffect
- func init() {
- itemEffectMap = make(map[serverproto.ResType]ItemEffect)
- addItemEffectHandler(serverproto.ResType_Res_Coin, new(ItemEffectAddCoin))
- addItemEffectHandler(serverproto.ResType_Res_Rmb, new(ItemEffectRmb))
- addItemEffectHandler(serverproto.ResType_Res_RoleBaseExp, new(ItemEffectBaseExp))
- addItemEffectHandler(serverproto.ResType_Res_RoleJobExp, new(ItemEffectRoleJobExp))
- addItemEffectHandler(serverproto.ResType_Res_HeroBaseExp, new(ItemEffectHeroExp))
- addItemEffectHandler(serverproto.ResType_Res_Cruise, new(ItemEffectCruise))
- addItemEffectHandler(serverproto.ResType_Res_Sprite, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_Reslove, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_EvilExp, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_PetExp, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_PetCoin, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_Guild, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_VipExp, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_DaoChang100, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_Guild_Battle, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_CashTicket, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_PetLevelUP_Exp, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_HightSkillExp, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_CreditRecharge, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_ROCoin, new(ItemEffectCommonRes))
- addItemEffectHandler(serverproto.ResType_Res_BoliShopExp, new(ItemEffectCommonRes))
- }
- func addItemEffectHandler(effectType serverproto.ResType, effect ItemEffect) {
- itemEffectMap[effectType] = effect
- }
- func DoCheck(r *Role, cfgData *serverproto.ItemCfg, count int32) int32 {
- effect, ok := itemEffectMap[serverproto.ResType(cfgData.ResType)]
- if ok {
- return effect.CheckUse(r, cfgData, count)
- }
- return int32(serverproto.ErrorCode_ERROR_FAIL)
- }
- func DoUse(r *Role, itemCfg *serverproto.ItemCfg, st AddItemST, add bool) {
- effect, ok := itemEffectMap[serverproto.ResType(itemCfg.ResType)]
- if ok {
- effect.OnUse(uint32(itemCfg.Id), r, st, add)
- }
- }
- /**
- 添加金币
- */
- type ItemEffectAddCoin struct {
- ItemEffect
- }
- func (this *ItemEffectAddCoin) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
- return int32(serverproto.ErrorCode_ERROR_OK)
- }
- func (this *ItemEffectAddCoin) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
- r.AddRes(int32(serverproto.ResType_Res_Coin), st, add)
- }
- /**
- 添加Rmb
- */
- type ItemEffectRmb struct {
- ItemEffect
- }
- func (this *ItemEffectRmb) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
- return int32(serverproto.ErrorCode_ERROR_OK)
- }
- func (this *ItemEffectRmb) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
- r.AddRes(int32(serverproto.ResType_Res_Rmb), st, add)
- if add == true { //增加货币
- //增加货币//下面两个走付费的记录接口
- if st.AddFrom != AddFrom_Rune &&
- st.AddFrom != AddFrom_Pay {
- r.WriteAddGoldLogJF(st.ItemCount, int32(st.AddFrom))
- }
- r.WriteAddGoldLog(st.ItemCount, int32(st.AddFrom), st.ReasonParam)
- } else { //增加货币
- //计费:使用元宝
- r.WriteUseGoldLogJF(st)
- //其他类消耗元宝日志
- if st.AddFrom != AddFrom_Shop_Buy &&
- st.AddFrom != AddFrom_Shop_Arane &&
- st.AddFrom != AddFrom_Shop_Dark &&
- st.AddFrom != AddFrom_Shop_Guild &&
- st.AddFrom != AddFrom_Shop_Pet {
- r.WriteUseGoldOtherLog(st)
- }
- if rune := r.GetRoleRune(); rune != nil {
- rune.AddGoldExp(st.ItemCount)
- }
- }
- }
- /**
- 添加baseexp
- */
- type ItemEffectBaseExp struct {
- ItemEffect
- }
- func (this *ItemEffectBaseExp) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
- return int32(serverproto.ErrorCode_ERROR_OK)
- }
- func (this *ItemEffectBaseExp) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
- r.AddRes(int32(serverproto.ResType_Res_RoleBaseExp), st, add)
- }
- /**
- 添加JobExp
- */
- type ItemEffectRoleJobExp struct {
- ItemEffect
- }
- func (this *ItemEffectRoleJobExp) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
- return int32(serverproto.ErrorCode_ERROR_OK)
- }
- func (this *ItemEffectRoleJobExp) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
- r.AddRes(int32(serverproto.ResType_Res_RoleJobExp), st, add)
- }
- /**
- 添加HeroExp
- */
- type ItemEffectHeroExp struct {
- ItemEffect
- }
- func (this *ItemEffectHeroExp) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
- return int32(serverproto.ErrorCode_ERROR_OK)
- }
- func (this *ItemEffectHeroExp) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
- r.AddRes(int32(serverproto.ResType_Res_HeroBaseExp), st, add)
- }
- /**
- 添加巡游值
- */
- type ItemEffectCruise struct {
- ItemEffect
- }
- func (this *ItemEffectCruise) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
- return int32(serverproto.ErrorCode_ERROR_OK)
- }
- func (this *ItemEffectCruise) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
- r.AddRes(int32(serverproto.ResType_Res_Cruise), st, add)
- }
- /**
- 通用资源添加
- */
- type ItemEffectCommonRes struct {
- ItemEffect
- }
- func (this *ItemEffectCommonRes) CheckUse(r *Role, itemCfg *serverproto.ItemCfg, count int32) int32 {
- return int32(serverproto.ErrorCode_ERROR_OK)
- }
- func (this *ItemEffectCommonRes) OnUse(itemId uint32, r *Role, st AddItemST, add bool) {
- r.AddRes(int32(itemId), st, add)
- }
|