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) }