def gem_remove(self, _id, amount): """ @param _id: gem id @type _id: int @param amount: this gem amount @type amount: int """ try: this_gem_amount = self.item.gems[str(_id)] except KeyError: raise SanguoException( errormsg.GEM_NOT_EXIST, self.char_id, "Gem Remove", "Gem {0} not exist".format(_id) ) new_amount = this_gem_amount - amount if new_amount <= 0: self.item.gems.pop(str(_id)) self.item.save() msg = protomsg.RemoveGemNotify() msg.ids.append(_id) publish_to_char(self.char_id, pack_msg(msg)) else: self.item.gems[str(_id)] = new_amount self.item.save() msg = protomsg.UpdateGemNotify() g = msg.gems.add() g.id, g.amount = _id, new_amount publish_to_char(self.char_id, pack_msg(msg))
def gem_add(self, add_gems, send_notify=True): """ @param add_gems: [(id, amount), (id, amount)] @type add_gems: list | tuple """ for gid, _ in add_gems: if gid not in GEMS: raise SanguoException(errormsg.GEM_NOT_EXIST, self.char_id, "Gem Add", "Gem {0} not exist".format(gid)) gems = self.item.gems add_gems_dict = {} for gid, amount in add_gems: add_gems_dict[gid] = add_gems_dict.get(gid, 0) + amount new_gems = [] update_gems = [] for gid, amount in add_gems_dict.iteritems(): gid = str(gid) if gid in gems: gems[gid] += amount update_gems.append((int(gid), gems[gid])) else: gems[gid] = amount new_gems.append((int(gid), amount)) self.item.gems = gems self.item.save() for gid, amount in add_gems_dict.iteritems(): gem_add_signal.send(sender=None, char_id=self.char_id, gem_id=gid, add_amount=amount, new_amount=gems[str(gid)]) if not send_notify: return if new_gems: msg = protomsg.AddGemNotify() for k, v in new_gems: g = msg.gems.add() g.id, g.amount = k, v publish_to_char(self.char_id, pack_msg(msg)) if update_gems: msg = protomsg.UpdateGemNotify() for k, v in update_gems: g = msg.gems.add() g.id, g.amount = k, v publish_to_char(self.char_id, pack_msg(msg))