def __init__(self, alist, name): super(RWGroup, self).__init__(name) self.regions = [] for index, adict in enumerate(alist): name = '%s.%d' % (self.name, index) if self.name is not None else str(index) obj = self.new(adict[IKEY_ID], name=name) item = ((index, obj), int(adict[IKEY_GROUP])) self.regions.append(item) self.ran_region = RandomRegion(self.regions)
def _init_res_gem_shop(self, objs): """珠宝商店""" rates = [] for obj in objs: self.gem_shop_items[obj.id] = obj rates.append((obj.id, obj.r)) self._gem_shop_rates = RandomRegion(rates)
def update(self, adict): super(ResDeepGuard, self).update(adict) if self.is_boss: #boss self.boss_func = make_lv_regions(self.guard) elif self.guard: self.guard_func = RandomRegion(self.guard) else: log.error(u'深渊怪物配置表(%d)怪物配置缺少', self.id)
def _init_res_bf_rate(self, objs): """ 兵符任务获取概率 """ type_part_rates = {} for o in objs: k = (o.type, o.part) rates = type_part_rates.setdefault(k, []) rates.append((o.id, o.rate)) self._bf_rates = dict([(k, RandomRegion(rates)) for k, rates in type_part_rates.iteritems()])
def _init_res_equip(self, objs): """ 初始化装备 """ set_id_rates = {} for o in objs: sid = o.sid rates = set_id_rates.setdefault(sid, []) rates.append((o.id, o.rate)) self._equip_rates = dict([(k, RandomRegion(rates)) for k, rates in set_id_rates.iteritems()])
def _lucky_darw(self, draw_rates): """ 计算抽奖结果 """ draw_num = self.day_lucky.data.d[PLAYER_ATTR_MDRAW] ran = RandomRegion(draw_rates) #预防同时抽到两配将 while 1: draw_role_num = 0 ps = MAX_BOXES * [0] rs = ran.randoms(draw_num) for i, index in enumerate(rs): ps[index] = -1 * (i + 1) item = self.day_lucky.data.items[index] if item[IKEY_TYPE] == IT_ROLE_STR: draw_role_num += 1 if draw_role_num < 2: self.day_lucky.data.ps = ps break sleep(1)
def _init_res_fate(self, objs): """ 初始化命格概率 """ qrates = {} assert len(self.fate_level_by_fid), 'much init fate_level first' for o in objs: o.init_fate(self.fate_level_by_fid.get(o.id)) q = o.quality rates = qrates.setdefault(q, []) rates.append((o.id, o.rate)) self._fate_rates = dict([(k, RandomRegion(rates)) for k, rates in qrates.iteritems()])
def _produce_items(self): """ 随机生成抽奖的所有物品并返回抽奖概率 """ rates, role_rates = self._get_rates() res_mgr = self.player._game.res_mgr res_daylucky_ids = [] for (res_id, rate) in role_rates: res_daylucky_ids.append(res_id) ran = RandomRegion(rates) ran_daylucky_ids = ran.randoms(MAX_BOXES-len(role_rates)) res_daylucky_ids.extend(ran_daylucky_ids) items = [] draw_rates = [] for index, res_daylucky_id in enumerate(res_daylucky_ids): res_daylucky = res_mgr.day_luckys.get(res_daylucky_id) rw = self.player._game.reward_mgr.get(res_daylucky.rid) res_item = rw.reward(params=self.player.reward_params()) items.append(res_item[0]) draw_rate = (index, res_daylucky.lrate) draw_rates.append(draw_rate) if res_item[0][IKEY_TYPE] == IT_ROLE_STR: self.index_rid[index] = res_daylucky.rid self.day_lucky.data.items = items return draw_rates
def _produce_items(self): """ 随机生成抽奖的所有物品并返回抽奖概率 """ rates, role_rates = self._get_rates() res_mgr = self.player._game.res_mgr res_daylucky_ids = [] for (res_id, rate) in role_rates: res_daylucky_ids.append(res_id) ran = RandomRegion(rates) ran_daylucky_ids = ran.randoms(MAX_BOXES - len(role_rates)) res_daylucky_ids.extend(ran_daylucky_ids) items = [] draw_rates = [] for index, res_daylucky_id in enumerate(res_daylucky_ids): res_daylucky = res_mgr.day_luckys.get(res_daylucky_id) rw = self.player._game.reward_mgr.get(res_daylucky.rid) res_item = rw.reward(params=self.player.reward_params()) items.append(res_item[0]) draw_rate = (index, res_daylucky.lrate) draw_rates.append(draw_rate) if res_item[0][IKEY_TYPE] == IT_ROLE_STR: self.index_rid[index] = res_daylucky.rid self.day_lucky.data.items = items return draw_rates
class RWGroup(RWNode): """ 分组 """ def __init__(self, alist, name): super(RWGroup, self).__init__(name) self.regions = [] for index, adict in enumerate(alist): name = '%s.%d' % (self.name, index) if self.name is not None else str(index) obj = self.new(adict[IKEY_ID], name=name) item = ((index, obj), int(adict[IKEY_GROUP])) self.regions.append(item) self.ran_region = RandomRegion(self.regions) def reward(self, params): """ 获取奖励 """ item = self.ran_region.random()[1] return item.reward(params)
def _init_res_shop(self, objs): """ 神秘商店物品有效时间 """ from game.base.constant import SHOP_TYPE_ITEM, SHOP_TYPE_FATE from game.base.constant import SHOP_TYPE_RARE, SHOP_TYPE_LUCK fmt = '%y%m%d' luck_rates = [] rare_rates = [] for obj in objs: if obj.qt == SHOP_TYPE_RARE: self.shop_rares[obj.id] = obj elif obj.qt == SHOP_TYPE_LUCK: luck_rates.append((obj.id, obj.r)) if obj.r == -1: self.shop_items_must[obj.id] = obj if obj.start: obj.start = mk_time(obj.start, fmt) if obj.end: obj.end = mk_time(obj.end, fmt) self.shop_items[obj.id] = obj self._shop_luck = RandomRegion(luck_rates) return self.shop_items
def update(self, adict): super(ResDeepPos, self).update(adict) self.get_pid = RandomRegion(self.pos)
def rom(*args): """ rom((<count>,<rate>), (1,10), (2,25)) """ return RandomRegion(args)