def load_shops(self): """ Load character's shop. """ # shops records shop_records = NPC_SHOPS.filter(self.get_data_key()) shop_keys = set([record.shop for record in shop_records]) # remove old shops for shop_key in self.db.shops: if shop_key not in shop_keys: # remove this shop self.db.shops[shop_key].delete() del self.db.shops[shop_key] # add new shop for shop_record in shop_records: shop_key = shop_record.shop if shop_key not in self.db.shops: # Create shop object. shop_obj = build_object(shop_key) if not shop_obj: logger.log_errmsg("Can't create shop: %s" % shop_key) continue self.db.shops[shop_key] = shop_obj shop_obj.set_owner(self)
def load_goods(self): """ Load shop goods. """ # shops records goods_records = SHOP_GOODS.filter(self.get_data_key()) goods_keys = set([record.key for record in goods_records]) # search current goods current_goods = set() for item in self.contents: key = item.get_data_key() if key in goods_keys: current_goods.add(key) else: # remove goods that is not in goods_keys item.delete() # add new goods for goods_record in goods_records: goods_key = goods_record.key if goods_key not in current_goods: # Create shop_goods object. goods_obj = build_object(goods_key) if not goods_obj: logger.log_errmsg("Can't create goods: %s" % goods_key) continue goods_obj.move_to(self, quiet=True)
def attack_clone_target(self, target_key, target_level=0, desc=""): """ Attack the image of a target. This creates a new character object for attack. The origin target will not be affected. Args: target_key: (string) the info key of the target. target_level: (int) target's level desc: (string) string to describe this attack Returns: None """ if target_level == 0: # find the target and get level obj = utils.search_obj_info_key(target_key) if not obj: logger.log_errmsg("Can not find the target %s." % target_key) return obj = obj[0] target_level = obj.db.level # Create a target. target = build_object(target_key) if not target: logger.log_errmsg("Can not create the target %s." % target_key) return target.set_level(target_level) self.attack_target(target, desc)
def load_shops(self): """ Load character's shop. """ # shops records shop_records = [] nps_shops_model = apps.get_model(settings.WORLD_DATA_APP, settings.NPC_SHOPS) if nps_shops_model: # Get records. shop_records = nps_shops_model.objects.filter(npc=self.get_data_key()) shop_keys = set([record.shop for record in shop_records]) # remove old shops for shop_key in self.db.shops: if shop_key not in shop_keys: # remove this shop self.db.shops[shop_key].delete() del self.db.shops[shop_key] # add new shop for shop_record in shop_records: shop_key = shop_record.shop if shop_key not in self.db.shops: # Create shop object. shop_obj = build_object(shop_key) if not shop_obj: logger.log_errmsg("Can't create shop: %s" % shop_key) continue self.db.shops[shop_key] = shop_obj
def load_shops(self): """ Load character's shop. """ # shops records shop_records = NPC_SHOPS.filter(self.get_data_key()) shop_keys = set([record.shop for record in shop_records]) # remove old shops for shop_key in self.db.shops: if shop_key not in shop_keys: # remove this shop self.db.shops[shop_key].delete() del self.db.shops[shop_key] # add new shop for shop_record in shop_records: shop_key = shop_record.shop if shop_key not in self.db.shops: # Create shop object. shop_obj = build_object(shop_key) if not shop_obj: logger.log_errmsg("Can't create shop: %s" % shop_key) continue self.db.shops[shop_key] = shop_obj
def accept(self, quest_key): """ Accept a quest. Args: quest_key: (string) quest's key Returns: None """ if quest_key in self.current_quests: return # Create quest object. new_quest = build_object(quest_key) if not new_quest: return new_quest.set_owner(self.owner) self.current_quests[quest_key] = new_quest self.owner.msg( {"msg": _("Accepted quest {c%s{n.") % new_quest.get_name()}) self.show_quests() self.owner.show_location()
def load_goods(self): """ Load shop goods. """ # shops records goods_records = DATA_SETS.shop_goods.objects.filter(shop=self.get_data_key()) goods_keys = set([record.key for record in goods_records]) # search current goods current_goods = set() for item in self.contents: key = item.get_data_key() if key in goods_keys: current_goods.add(key) else: # remove goods that is not in goods_keys item.delete() # add new goods for goods_record in goods_records: goods_key = goods_record.key if goods_key not in current_goods: # Create shop_goods object. goods_obj = build_object(goods_key) if not goods_obj: logger.log_errmsg("Can't create goods: %s" % goods_key) continue goods_obj.move_to(self, quiet=True)
def attack_clone_target(self, target_key, target_level=0, desc=""): """ Attack the image of a target. This creates a new character object for attack. The origin target will not be affected. Args: target_key: (string) the info key of the target. target_level: (int) target's level desc: (string) string to describe this attack Returns: None """ if target_level == 0: # find the target and get level obj = utils.search_obj_data_key(target_key) if not obj: logger.log_errmsg("Can not find the target %s." % target_key) return obj = obj[0] target_level = obj.db.level # Create a target. target = build_object(target_key) if not target: logger.log_errmsg("Can not create the target %s." % target_key) return target.set_level(target_level) self.attack_target(target, desc)
def attack_clone_target(self, target_key, target_level=0, desc=""): """ Attack the image of a target. This creates a new character object for attack. The origin target will not be affected. Args: target_key: (string) the info key of the target. target_level: (int) target's level desc: (string) string to describe this attack Returns: (boolean) fight begins """ if target_level == 0: # Find the target and get its level. obj = utils.search_obj_data_key(target_key) if not obj: logger.log_errmsg("Can not find the target %s." % target_key) return False obj = obj[0] target_level = obj.db.level # Create a target. target = build_object(target_key, set_location=False) if not target: logger.log_errmsg("Can not create the target %s." % target_key) return False target.set_level(target_level) target.is_clone = True return self.attack_target(target, desc)
def attack_temp_target(self, target_key, target_level=0, desc=""): """ Attack a temporary clone of a target. This creates a new character object for attack. The origin target will not be affected. Args: target_key: (string) the info key of the target object. target_level: (int) target object's level desc: (string) string to describe this attack Returns: (boolean) fight begins """ if target_level == 0: # Find the target and get its level. obj = search_obj_data_key(target_key) if obj: obj = obj[0] target_level = obj.db.level # Create a target. target = build_object(target_key, target_level, reset_location=False) if not target: logger.log_errmsg("Can not create the target %s." % target_key) return False target.is_temp = True return self.attack_target(target, desc)
def after_data_loaded(self): """ Load goods data. Returns: None """ self.available = False self.shop_key = getattr(self.system, "shop", "") self.goods_key = getattr(self.system, "goods", "") self.goods_level = getattr(self.system, "level", 0) if not self.shop_key or not self.goods_key: if self.db.goods: self.db.goods.delete() self.db.goods = None return # set goods information self.price = getattr(self.system, "price", 0) self.unit_key = getattr(self.system, "unit", "") self.number = getattr(self.system, "number", 0) self.condition = getattr(self.system, "condition", "") # get price unit information unit_record = get_object_record(self.unit_key) if not unit_record: logger.log_errmsg("Can not find %s price unit %s." % (self.goods_key, self.unit_key)) return self.unit_name = unit_record.name # load goods object goods = self.db.goods if goods: if goods.get_data_key() == self.goods_key: # Load data. try: # Load db data. goods.load_data() except Exception as e: logger.log_errmsg("%s(%s) can not load data:%s" % (self.goods_key, self.dbref, e)) else: goods.set_data_key(self.goods_key, self.goods_level) else: goods = build_object(self.goods_key) if goods: self.db.goods = goods else: logger.log_err("Can not create goods %s." % self.goods_key) return self.name = goods.get_name() self.desc = goods.db.desc self.icon = getattr(goods, "icon", None) self.available = True
def after_data_loaded(self): """ Load goods data. Returns: None """ self.available = False self.shop_key = getattr(self.dfield, "shop", "") self.goods_key = getattr(self.dfield, "goods", "") if not self.shop_key or not self.goods_key: if self.db.goods: self.db.goods.delete() self.db.goods = None return # set goods information self.price = getattr(self.dfield, "price", 0) self.unit_key = getattr(self.dfield, "unit", "") self.number = getattr(self.dfield, "number", 0) self.condition = getattr(self.dfield, "condition", "") # get price unit information unit_record = get_object_record(self.unit_key) if not unit_record: logger.log_errmsg("Can not find %s price unit %s." % (self.goods_key, self.unit_key)) return self.unit_name = unit_record.name # load goods object goods = self.db.goods if goods: if goods.get_data_key() == self.goods_key: goods.load_data() else: goods.set_data_key(self.goods_key) else: goods = build_object(self.goods_key) if goods: self.db.goods = goods else: logger.log_err("Can not create goods %s." % self.goods_key) return self.name = goods.get_name() self.desc = goods.db.desc self.icon = getattr(goods, "icon", None) self.available = True
def learn_skill(self, skill, is_default=False): """ Learn a new skill. Args: skill: (string) skill's key is_default: (boolean) if it is a default skill Returns: (boolean) learned skill """ if not self.owner: return False if skill in self.skills: self.owner.msg( {"alert": LS("You have already learned this skill.")}) return False # Create skill object. skill_obj = build_object(skill) if not skill_obj: self.owner.msg({"alert": LS("Can not learn this skill.")}) return False # set default if is_default: skill_obj.set_default(is_default) # Store new skill. skill_obj.set_owner(self.owner) self.skills[skill] = skill_obj # If it is a passive skill, player's status may change. if skill_obj.passive: self.owner.refresh_data() # Notify the player if self.owner.has_player: self.owner.show_status() # Notify the player if self.owner.has_player: self.owner.show_skills() self.owner.msg({ "msg": LS("You learned skill {c%s{n.") % skill_obj.get_name() }) return True
def accept(self, quest): """ Accept a quest. """ if quest in self.current_quests: return new_quest = build_object(quest) if not new_quest: return self.current_quests[quest] = new_quest self.show_quests() self.character.show_location()
def do_attack(self, data, character): """ """ rand = random.random() for item in data: if rand >= item["odds"]: rand -= item["odds"] continue mob = build_object(item["mob"]) if not mob: return mob.set_level(item["level"]) # create a new combat handler chandler = create_script("combat_handler.CombatHandler") chandler.add_characters([mob, character])
def learn_skill(self, skill_key, is_default, silent): """ Learn a new skill. Args: skill_key: (string) skill's key is_default: (boolean) if it is a default skill silent: (boolean) do not show messages to the player Returns: (boolean) learned skill """ if skill_key in self.db.skills: self.msg({"msg": _("You have already learned this skill.")}) return False # Create skill object. skill_obj = build_object(skill_key) if not skill_obj: self.msg({"msg": _("Can not learn this skill.")}) return False # set default if is_default: skill_obj.set_default(is_default) # Store new skill. skill_obj.set_owner(self) self.db.skills[skill_key] = skill_obj # If it is a passive skill, player's status may change. if skill_obj.passive: self.refresh_properties() # Notify the player if not silent and self.has_account: self.show_status() self.show_skills() self.msg( {"msg": _("You learned skill {c%s{n.") % skill_obj.get_name()}) return True
def learn_skill(self, skill_key, is_default, silent): """ Learn a new skill. Args: skill_key: (string) skill's key is_default: (boolean) if it is a default skill silent: (boolean) do not show messages to the player Returns: (boolean) learned skill """ if skill_key in self.db.skills: self.msg({"msg": _("You have already learned this skill.")}) return False # Create skill object. skill_obj = build_object(skill_key) if not skill_obj: self.msg({"msg": _("Can not learn this skill.")}) return False # set default if is_default: skill_obj.set_default(is_default) # Store new skill. skill_obj.set_owner(self) self.db.skills[skill_key] = skill_obj # If it is a passive skill, player's status may change. if skill_obj.passive: self.refresh_data() # Notify the player if not silent and self.has_account: self.show_status() self.show_skills() self.msg({"msg": _("You learned skill {c%s{n.") % skill_obj.get_name()}) return True
def learn_skill(self, skill): """ Learn a new skill. Args: skill: (string) skill's key Returns: None """ if not self.owner: return if skill in self.skills: self.owner.msg({"alert": LS("You have already learned this skill.")}) return # Create skill object. skill_obj = build_object(skill) if not skill_obj: self.owner.msg({"alert": LS("Can not learn this skill.")}) return # Store new skill. skill_obj.set_owner(self.owner) self.skills[skill] = skill_obj # If it is a passive skill, player's status may change. if skill_obj.passive: self.owner.refresh_data() # Notify the player if self.owner.has_player: self.owner.show_status() # Notify the player if self.owner.has_player: self.owner.show_skills() self.owner.msg({"msg": LS("You learned skill {c%s{n.") % skill_obj.get_name()})
def learn_skill(self, skill): """ Learn a new skill. """ if not self.owner: return if skill in self.skills: self.msg({"alert": LS("You have already learned this skill.")}) return # Create skill object. skill_obj = build_object(skill) if not skill_obj: self.owner.msg({"alert": LS("Can not learn this skill.")}) return # Store new skill. skill_obj.set_owner(self.owner) self.skills[skill] = skill_obj if self.owner.has_player: self.owner.show_skills()
def learn_skill(self, skill): """ Learn a new skill. """ if not self.owner: return if skill in self.skills: self.msg({"alert":LS("You have already learned this skill.")}) return # Create skill object. skill_obj = build_object(skill) if not skill_obj: self.owner.msg({"alert":LS("Can not learn this skill.")}) return # Store new skill. skill_obj.set_owner(self.owner) self.skills[skill] = skill_obj if self.owner.has_player: self.owner.show_skills()
def accept(self, quest_key): """ Accept a quest. Args: quest_key: (string) quest's key Returns: None """ if quest_key in self.current_quests: return # Create quest object. new_quest = build_object(quest_key) if not new_quest: return new_quest.set_owner(self.owner) self.current_quests[quest_key] = new_quest self.owner.msg({"msg": _("Accepted quest {c%s{n.") % new_quest.get_name()}) self.show_quests() self.owner.show_location()
def receive_objects(self, obj_list): """ Receive objects. obj_list: (list) a list of object keys and there numbers. .object object's key .number object's number """ accepted_keys = {} accepted_names = {} rejected_keys = {} reject_reason = {} # check what the character has now inventory = {} for item in self.contents: key = item.get_info_key() if key in inventory: # if the character has more than one item of the same kind, # get the smallest stack. if inventory[key].db.number > item.db.number: inventory[key] = item else: inventory[key] = item for obj in obj_list: key = obj["object"] available = obj["number"] number = available accepted = 0 name = "" unique = False # if already has this kind of object if key in inventory: # add to current object name = inventory[key].name unique = inventory[key].unique add = number if add > inventory[key].max_stack - inventory[key].db.number: add = inventory[key].max_stack - inventory[key].db.number if add > 0: # increase stack number inventory[key].increase_num(add) number -= add accepted += add # if does not have this kind of object, or stack is full reason = "" while number > 0: if unique: # can not have more than one unique objects reason = LS("Can not get more %s.") % name break # create a new content new_obj = build_object(key) if not new_obj: reason = LS("Can not get %s.") % name break name = new_obj.name unique = new_obj.unique # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reason = LS("Can not get %s.") % name break add = number if add > new_obj.max_stack: add = new_obj.max_stack if add <= 0: break new_obj.increase_num(add) number -= add accepted += add if accepted > 0: accepted_keys[key] = accepted accepted_names[name] = accepted if accepted < available: rejected_keys[key] = available - accepted reject_reason[name] = reason message = { "get_object": { "accepted": accepted_names, "rejected": reject_reason } } self.msg(message) self.show_inventory() return rejected_keys
def receive_objects(self, obj_list, mute=False, combat=False): """ Add objects to the inventory. Args: obj_list: (list) a list of object keys and there numbers. list item: {"object": object's key "number": object's number} mute: (boolean) do not send messages to the owner combat: (boolean) get objects in combat. Returns: (dict) a list of objects that not have been received and their reasons. """ accepted_keys = {} # the keys of objects that have been accepted accepted_names = {} # the names of objects that have been accepted rejected_keys = {} # the keys of objects that have been rejected reject_reason = {} # the reasons of why objects have been rejected # check what the character has now inventory = {} for item in self.contents: key = item.get_data_key() if key in inventory: # if the character has more than one item of the same kind, # get the smallest stack. if inventory[key].db.number > item.db.number: inventory[key] = item else: inventory[key] = item for obj in obj_list: key = obj["object"] available = obj["number"] number = available accepted = 0 name = "" unique = False if number == 0: # it is an empty object if key in inventory: # already has this object accepted_keys[key] = 0 accepted_names[name] = 0 continue object_record = None try: common_model_name = TYPECLASS("COMMON_OBJECT").model_name common_model_obj = apps.get_model(settings.WORLD_DATA_APP, common_model_name) object_record = common_model_obj.objects.get(key=key) except Exception, e: pass if not object_record: # can not find object's data record reason = _("Can not get %s.") % name rejected_keys[key] = 0 reject_reason[name] = reason continue if object_record.can_remove: # remove this empty object accepted_keys[key] = 0 accepted_names[name] = 0 continue # create a new content new_obj = build_object(key) if not new_obj: reason = _("Can not get %s.") % name rejected_keys[key] = 0 reject_reason[name] = reason continue name = new_obj.get_name() # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reason = _("Can not get %s.") % name rejected_keys[key] = 0 reject_reason[name] = reason break # accept this object accepted_keys[key] = 0 accepted_names[name] = 0 else: # common number # if already has this kind of object if key in inventory: # add to current object name = inventory[key].name unique = inventory[key].unique add = number if add > inventory[key].max_stack - inventory[key].db.number: add = inventory[key].max_stack - inventory[key].db.number if add > 0: # increase stack number inventory[key].increase_num(add) number -= add accepted += add # if does not have this kind of object, or stack is full reason = "" while number > 0: if unique: # can not have more than one unique objects reason = _("Can not get more %s.") % name break # create a new content new_obj = build_object(key) if not new_obj: reason = _("Can not get %s.") % name break name = new_obj.get_name() unique = new_obj.unique # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reason = _("Can not get %s.") % name break # Get the number that actually added. add = number if add > new_obj.max_stack: add = new_obj.max_stack if add <= 0: break new_obj.increase_num(add) number -= add accepted += add if accepted > 0: accepted_keys[key] = accepted accepted_names[name] = accepted if accepted < available: rejected_keys[key] = available - accepted reject_reason[name] = reason
unit_name = None unit_record = get_object_record(goods_record.unit) if not unit_record: logger.log_errmsg("Can not find %s price unit %s." % (goods_key, goods_record.unit)) return unit_name = unit_record.name # load goods object goods = self.db.goods if goods: if goods.get_data_key == goods_key: goods.load_data() else: goods.set_data_key(goods_key) else: goods = build_object(goods_key) if goods: self.db.goods = goods else: logger.log_err("Can not create goods %s." % goods_key) return # set goods information self.price = goods_record.price self.unit_key = goods_record.unit self.unit_name = unit_name self.number = goods_record.number self.condition = goods_record.condition self.name = goods.get_name() self.desc = goods.db.desc
def receive_objects(self, obj_list, mute=False): """ Add objects to the inventory. Args: obj_list: (list) a list of object keys and there numbers. list item: {"object": object's key "number": object's number} mute: (boolean) do not send messages to the owner Returns: (list) a list of objects that not have been received and their reasons. [{ "key": key, "name": name, "level": level, "number": number, "icon": icon, "reject": reason, }] """ objects = [] # objects that have been accepted # check what the character has now inventory = {} for item in self.contents: key = item.get_data_key() if key in inventory: # if the character has more than one item of the same kind, # get the smallest stack. if inventory[key].db.number > item.db.number: inventory[key] = item else: inventory[key] = item for obj in obj_list: key = obj["object"] level = obj.get("level") available = obj["number"] name = "" icon = "" number = available accepted = 0 reject = False unique = False if number == 0: # it is an empty object if key in inventory: # already has this object continue object_record = None try: common_model_name = TYPECLASS("COMMON_OBJECT").model_name common_model_obj = apps.get_model(settings.WORLD_DATA_APP, common_model_name) object_record = common_model_obj.objects.get(key=key) except Exception as e: pass if not object_record: # can not find object's data record continue if object_record.can_remove: # remove this empty object continue # create a new content new_obj = build_object(key, level=level) if not new_obj: reject = _("Can not get %s.") % key else: name = new_obj.get_name() icon = new_obj.icon # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reject = _("Can not get %s.") % name else: # common number # if already has this kind of object if key in inventory: # add to current object name = inventory[key].name icon = inventory[key].icon unique = inventory[key].unique add = number if add > inventory[key].max_stack - inventory[ key].db.number: add = inventory[key].max_stack - inventory[ key].db.number if add > 0: # increase stack number inventory[key].increase_num(add) number -= add accepted += add # if does not have this kind of object, or stack is full while number > 0: if unique: # can not have more than one unique objects reject = _("Can not get more %s.") % name break # create a new content new_obj = build_object(key, level=level) if not new_obj: reject = _("Can not get %s.") % name break name = new_obj.get_name() icon = new_obj.icon unique = new_obj.unique # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reject = _("Can not get %s.") % name break # Get the number that actually added. add = number if add > new_obj.max_stack: add = new_obj.max_stack if add <= 0: break new_obj.increase_num(add) number -= add accepted += add objects.append({ "key": key, "name": name, "icon": icon, "number": accepted, "reject": reject, }) if not mute: # Send results to the player. message = {"get_objects": objects} self.msg(message) self.show_inventory() # call quest handler for item in objects: if not item["reject"]: self.quest_handler.at_objective(defines.OBJECTIVE_OBJECT, item["key"], item["number"]) return objects
def receive_objects(self, obj_list, mute=False, combat=False): """ Add objects to the inventory. Args: obj_list: (list) a list of object keys and there numbers. list item: {"object": object's key "number": object's number} mute: (boolean) do not send messages to the owner combat: (boolean) get objects in combat. Returns: (dict) a list of objects that not have been received and their reasons. """ accepted_keys = {} # the keys of objects that have been accepted accepted_names = {} # the names of objects that have been accepted rejected_keys = {} # the keys of objects that have been rejected reject_reason = {} # the reasons of why objects have been rejected # check what the character has now inventory = {} for item in self.contents: key = item.get_data_key() if key in inventory: # if the character has more than one item of the same kind, # get the smallest stack. if inventory[key].db.number > item.db.number: inventory[key] = item else: inventory[key] = item for obj in obj_list: key = obj["object"] available = obj["number"] number = available accepted = 0 name = "" unique = False if number == 0: # it is an empty object if key in inventory: # already has this object accepted_keys[key] = 0 accepted_names[name] = 0 continue object_record = get_object_record(key) if not object_record: # can not find object's data record reason = _("Can not get %s.") % name rejected_keys[key] = 0 reject_reason[name] = reason continue if object_record.can_remove: # remove this empty object accepted_keys[key] = 0 accepted_names[name] = 0 continue # create a new content new_obj = build_object(key) if not new_obj: reason = _("Can not get %s.") % name rejected_keys[key] = 0 reject_reason[name] = reason continue name = new_obj.get_name() # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reason = _("Can not get %s.") % name rejected_keys[key] = 0 reject_reason[name] = reason break # accept this object accepted_keys[key] = 0 accepted_names[name] = 0 else: # common number # if already has this kind of object if key in inventory: # add to current object name = inventory[key].name unique = inventory[key].unique add = number if add > inventory[key].max_stack - inventory[key].db.number: add = inventory[key].max_stack - inventory[key].db.number if add > 0: # increase stack number inventory[key].increase_num(add) number -= add accepted += add # if does not have this kind of object, or stack is full reason = "" while number > 0: if unique: # can not have more than one unique objects reason = _("Can not get more %s.") % name break # create a new content new_obj = build_object(key) if not new_obj: reason = _("Can not get %s.") % name break name = new_obj.get_name() unique = new_obj.unique # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reason = _("Can not get %s.") % name break # Get the number that actually added. add = number if add > new_obj.max_stack: add = new_obj.max_stack if add <= 0: break new_obj.increase_num(add) number -= add accepted += add if accepted > 0: accepted_keys[key] = accepted accepted_names[name] = accepted if accepted < available: rejected_keys[key] = available - accepted reject_reason[name] = reason if not mute: # Send results to the player. message = {"get_objects": {"accepted": accepted_names, "rejected": reject_reason, "combat": combat}} self.msg(message) self.show_inventory() # call quest handler for key in accepted_keys: self.quest_handler.at_objective(defines.OBJECTIVE_OBJECT, key, accepted_keys[key]) return rejected_keys
def receive_objects(self, obj_list): """ Add objects to the inventory. obj_list: (list) a list of object keys and there numbers. list item: {"object": object's key "number": object's number} """ accepted_keys = {} # the keys of objects that have been accepted accepted_names = {} # the names of objects that have been accepted rejected_keys = {} # the keys of objects that have been rejected reject_reason = {} # the reasons of why objects have been rejected # check what the character has now inventory = {} for item in self.contents: key = item.get_data_key() if key in inventory: # if the character has more than one item of the same kind, # get the smallest stack. if inventory[key].db.number > item.db.number: inventory[key] = item else: inventory[key] = item for obj in obj_list: key = obj["object"] available = obj["number"] number = available accepted = 0 name = "" unique = False # if already has this kind of object if key in inventory: # add to current object name = inventory[key].name unique = inventory[key].unique add = number if add > inventory[key].max_stack - inventory[key].db.number: add = inventory[key].max_stack - inventory[key].db.number if add > 0: # increase stack number inventory[key].increase_num(add) number -= add accepted += add # if does not have this kind of object, or stack is full reason = "" while number > 0: if unique: # can not have more than one unique objects reason = LS("Can not get more %s.") % name break # create a new content new_obj = build_object(key) if not new_obj: reason = LS("Can not get %s.") % name break name = new_obj.get_name() unique = new_obj.unique # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() reason = LS("Can not get %s.") % name break # Get the number that actually added. add = number if add > new_obj.max_stack: add = new_obj.max_stack if add <= 0: break new_obj.increase_num(add) number -= add accepted += add if accepted > 0: accepted_keys[key] = accepted accepted_names[name] = accepted if accepted < available: rejected_keys[key] = available - accepted reject_reason[name] = reason # Send results to the player. message = {"get_object": {"accepted": accepted_names, "rejected": reject_reason}} self.msg(message) self.show_inventory() # call quest handler for key in accepted_keys: self.quest_handler.at_objective(defines.OBJECTIVE_OBJECT, key, accepted_keys[key]) return rejected_keys
def receive_objects(self, obj_list): """ Receive objects. obj_list: (dict) a list of object keys and there numbers. """ accepted_keys = {} accepted_names = {} rejected_keys = {} rejected_names = {} # check what the character has now inventory = {} for item in self.contents: key = item.get_info_key() if key in inventory: # if the character has more than one item of the same kind, # get the smallest stack. if inventory[key].db.number > item.db.number: inventory[key] = item else: inventory[key] = item for key in obj_list: number = obj_list[key] accepted = 0 name = "" unique = False # if already has this kind of object if key in inventory: # add to current object name = inventory[key].name unique = inventory[key].unique add = number if add > inventory[key].max_stack - inventory[key].db.number: add = inventory[key].max_stack - inventory[key].db.number if add > 0: # increase stack number inventory[key].increase_num(add) number -= add accepted += add # if does not have this kind of object, or stack is full while number > 0: if unique: # can not have more than one unique objects break # create a new content new_obj = build_object(key) if not new_obj: break name = new_obj.name unique = new_obj.unique # move the new object to the character if not new_obj.move_to(self, quiet=True, emit_to_obj=self): new_obj.delete() break add = number if add > new_obj.max_stack: add = new_obj.max_stack if add <= 0: break new_obj.increase_num(add) number -= add accepted += add if accepted > 0: accepted_keys[key] = accepted accepted_names[name] = accepted if accepted < obj_list[key]: rejected_keys[key] = obj_list[key] - accepted rejected_names[name] = obj_list[key] - accepted message = {"get_object": {"accepted": accepted_names, "rejected": rejected_names}} self.msg(message) self.show_inventory() return rejected_keys
# load goods object goods = self.db.goods if goods: if goods.get_data_key() == self.goods_key: # Load data. try: # Load db data. goods.load_data() except Exception, e: logger.log_errmsg("%s(%s) can not load data:%s" % (self.goods_key, self.dbref, e)) else: goods.set_data_key(self.goods_key, self.goods_level) else: goods = build_object(self.goods_key) if goods: self.db.goods = goods else: logger.log_err("Can not create goods %s." % self.goods_key) return self.name = goods.get_name() self.desc = goods.db.desc self.icon = getattr(goods, "icon", None) self.available = True def sell_to(self, caller): """ Buy this goods.
self.unit_name = unit_record.name # load goods object goods = self.db.goods if goods: if goods.get_data_key() == self.goods_key: # Load data. try: # Load db data. goods.load_data() except Exception, e: logger.log_errmsg("%s(%s) can not load data:%s" % (self.goods_key, self.dbref, e)) else: goods.set_data_key(self.goods_key) else: goods = build_object(self.goods_key) if goods: self.db.goods = goods else: logger.log_err("Can not create goods %s." % self.goods_key) return self.name = goods.get_name() self.desc = goods.db.desc self.icon = getattr(goods, "icon", None) self.available = True def sell_to(self, caller): """ Buy this goods.