def pve(request): req = request._proto stage = Stage(request._char_id) battle_msg = stage.battle(req.stage_id) if battle_msg.self_win: drop = stage.save_drop(req.stage_id, first=stage.first, star=stage.first_star) else: drop = {} response = protomsg.PVEResponse() response.ret = 0 response.stage_id = req.stage_id response.battle.MergeFrom(battle_msg) if drop: response.drop.MergeFrom(standard_drop_to_attachment_protomsg(drop)) return pack_msg(response)
def _get_opended_cities(char_id): from core.stage import Stage from preset.data import STAGES stages = Stage(char_id).stage.stages.keys() stages = [int(i) for i in stages] opened = set() for sid in stages: this_stage = STAGES[sid] if this_stage.battle_end: opened.add(this_stage.battle) opened = list(opened) opened.sort() return opened
def login_notify(char_id): hero_objs = char_heros_obj(char_id) Char(char_id).send_notify() hero_notify(char_id, hero_objs) Item(char_id).send_notify() f = Formation(char_id) f.send_socket_notify() f.send_formation_notify() hang = Hang(char_id) hang.send_notify() Plunder(char_id).send_notify() p = Prison(char_id) p.send_prisoners_notify() Arena(char_id).send_notify() f = Friend(char_id) f.send_friends_notify() f.send_friends_amount_notify() m = Mail(char_id) m.send_mail_notify() CheckIn(char_id).send_notify() stage = Stage(char_id) stage.send_already_stage_notify() stage.send_new_stage_notify() stage_elite = EliteStage(char_id) stage_elite.send_notify() stage_elite.send_remained_times_notify() stage_activity = ActivityStage(char_id) stage_activity.send_notify() stage_activity.send_remained_times_notify() HeroPanel(char_id).send_notify() Task(char_id).send_notify() Achievement(char_id).send_notify() HeroSoul(char_id).send_notify() FunctionOpen(char_id).send_notify() Levy(char_id).send_notify() Attachment(char_id).send_notify()
def get_reward(self, tp): if not self.mongo_plunder.target_char: raise SanguoException(errormsg.PLUNDER_GET_REWARD_NO_TARGET, self.char_id, "Plunder Get Reward", "no Target char") if tp in self.mongo_plunder.got_reward: raise SanguoException(errormsg.PLUNDER_GET_REWARD_ALREADY_GOT, self.char_id, "Plunder Get Reward", "tp {0} already got".format(tp)) need_points = PLUNDER_REWARD_NEEDS_POINT[tp] if self.mongo_plunder.points < need_points: raise SanguoException( errormsg.PLUNDER_GET_REWARD_POINTS_NOT_ENOUGH, self.char_id, "Plunder Get Reward", "points not enough. {0} < {1}".format( self.mongo_plunder.points, need_points)) self.mongo_plunder.points -= need_points self.mongo_plunder.got_reward.append(tp) self.mongo_plunder.save() standard_drop = make_standard_drop_from_template() plunder_gold = self.mongo_plunder.chars[str( self.mongo_plunder.target_char)].gold char = Char(self.char_id).mc vip_plus = VIP_FUNCTION[char.vip].plunder_addition got_hero_id = 0 if tp == PLUNDER_HERO: f = Formation(self.mongo_plunder.target_char) heros = f.in_formation_hero_original_ids() got_hero_id = random.choice([hid for hid in heros if hid]) p = Prison(self.char_id) p.prisoner_add(got_hero_id, plunder_gold / 2) elif tp == PLUNDER_STUFF: stage = Stage(self.mongo_plunder.target_char) max_star_stage = stage.stage.max_star_stage if not max_star_stage: max_star_stage = 1 drop_ids = [ int(i) for i in STAGES[max_star_stage].normal_drop.split(',') ] drop = get_drop(drop_ids, multi=int(PLUNDER_GOT_ITEMS_HOUR * 3600 * (1 + vip_plus / 100.0) / 15)) standard_drop.update(drop) elif tp == PLUNDER_GOLD: standard_drop['gold'] = int(plunder_gold * (1 + vip_plus / 100.0)) resource = Resource(self.char_id, "Plunder Reward") resource.add(**standard_drop) self.send_notify() if got_hero_id: standard_drop['heros'] = [got_hero_id] return standard_drop_to_attachment_protomsg(standard_drop)
def get_current_value(self, char_id): from core.stage import Stage return Stage(char_id).get_passed_max_battle_id()
def login_notify(char_id): message_clean(char_id) function_open = FunctionOpen(char_id) function_open.send_notify() hero_objs = char_heros_obj(char_id) Char(char_id).send_notify() hero_notify(char_id, hero_objs) Item(char_id).send_notify() f = Formation(char_id) f.send_socket_notify() f.send_formation_notify() Plunder(char_id).send_notify() p = Prison(char_id) p.send_prisoners_notify() if Arena.FUNC_ID not in function_open.mf.freeze: arena = Arena(char_id) arena.send_notify() arena.login_process() f = Friend(char_id) f.send_friends_notify() f.send_friends_amount_notify() CheckIn(char_id).send_notify() stage = Stage(char_id) stage.send_already_stage_notify() stage.send_new_stage_notify() stage_elite = EliteStage(char_id) stage_elite.send_notify() stage_elite.send_remained_times_notify() stage_activity = ActivityStage(char_id) stage_activity.send_notify() stage_activity.send_remained_times_notify() HeroPanel(char_id).send_notify() Task(char_id).send_notify() Achievement(char_id).send_notify() HeroSoul(char_id).send_notify() Levy(char_id).send_notify() Attachment(char_id).send_notify() PurchaseAction(char_id).send_notify() SystemBroadcast(char_id).send_global_broadcast() affairs = Affairs(char_id) affairs.send_city_notify() affairs.send_hang_notify() # mail notify 要放在最后,因为 其他功能初始化时可能会产生登录邮件 Mail(char_id).send_notify()
def map2(): map_data = Stage.generate_map_data(test2.splitlines()) game.game_map.generate_map_from_map_data(map_data, game)
def login_notify(char_id): message_clean(char_id) function_open = FunctionOpen(char_id) function_open.send_notify() hero_objs = char_heros_obj(char_id) Char(char_id).send_notify() VIP(char_id).send_notify() hero_notify(char_id, hero_objs) Item(char_id).send_notify() f = Formation(char_id) f.send_socket_notify() f.send_formation_notify() Plunder(char_id).send_notify() p = Prison(char_id) p.send_prisoners_notify() a = Arena(char_id) a.send_notify() a.login_process() f = Friend(char_id) f.send_friends_notify() f.send_friends_amount_notify() CheckIn(char_id).send_notify() stage = Stage(char_id) stage.send_already_stage_notify() stage.send_new_stage_notify() stage_elite = EliteStage(char_id) stage_elite.send_notify() stage_elite.send_times_notify() stage_activity = ActivityStage(char_id) stage_activity.check(send_notify=False) stage_activity.send_notify() stage_activity.send_remained_times_notify() HeroPanel(char_id).send_notify() Task(char_id).send_notify() Achievement(char_id).send_notify() HeroSoul(char_id).send_notify() Levy(char_id).send_notify() Attachment(char_id).send_notify() BasePurchaseAction(char_id).send_notify() SystemBroadcast(char_id).send_global_broadcast() ChatMessagePublish(char_id).send_notify() affairs = Affairs(char_id) affairs.send_city_notify() affairs.send_hang_notify() HorseFreeTimesManager(char_id).send_notify() Horse(char_id).send_notify() union.send_notify(char_id) ae = ActivityEntry(char_id, 50006) if ae and ae.is_valid(): ae.enable(ae.get_current_value(char_id)) ActivityStatic(char_id).send_notify() # mail notify 要放在最后,因为 其他功能初始化时可能会产生登录邮件 Mail(char_id).send_notify()
from core.game import Game from core.entities import map from core.stage import Stage from core.tests import t_utils test1 = """ # $ # $+ # $ # F #""" working_dir = os.path.dirname( os.path.realpath(__file__)) + os.sep + os.pardir + os.sep + os.pardir game = Game(working_dir, True) map_data = Stage.generate_map_data(test1.splitlines()) game.game_map.generate_map_from_map_data(map_data, game) def test_aabb(): assert collision.aabb(Rectangle(0, 0, 10, 10), Rectangle(10, 0, 10, 20)) is False assert collision.aabb(Rectangle(-20, -10, 10, 10), Rectangle( 40, -5, 10, 20)) is False assert collision.aabb(Rectangle(40, -5, 10, 20), Rectangle( -20, -10, 10, 10)) is False assert collision.aabb(Rectangle(10, 20, 25, 25), Rectangle(-30, 0, 40, 20)) is False assert collision.aabb(Rectangle(9, 20, 25, 25), Rectangle(-30, 0, 40, 20)) is False
def init(self, working_dir: str): self.stages = Stage.load_stages(working_dir + os.sep + "stages") self.stage = self.stages[0]