NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

reward_definition.py (4881B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\careergoals\client\reward_definition.py
      2 import uuid
      3 import logging
      4 from careergoals.client.const import RewardType, RewardLabel
      5 from careergoals.client.errors import RewardTypeNotFound
      6 from eveProto import get_single_value_from_split_precision_message, split_precision
      7 from utillib import KeyVal
      8 from eveProto.generated.eve_public.career.goal_pb2 import Reward as RewardProto
      9 from eveProto.generated.eve_public.career.goal_pb2 import RewardType as RewardTypeProto
     10 from eveProto.generated.eve_public.career.goal_pb2 import ItemRewardType
     11 from eveProto.generated.eve_public.inventory.generic_item_type_pb2 import Identifier as ItemTypeIdentifier
     12 from eveProto.generated.eve_public.isk.isk_pb2 import Currency as IskCurrency
     13 logger = logging.getLogger(__name__)
     14 
     15 class RewardDefinition(object):
     16 
     17     def __init__(self, reward_type, reward_label, quantity):
     18         self._reward_type = reward_type
     19         self._quantity = quantity
     20         self._reward_label = reward_label
     21 
     22     @property
     23     def reward_type(self):
     24         return self._reward_type
     25 
     26     @property
     27     def reward_label(self):
     28         return self._reward_label
     29 
     30     @property
     31     def is_omega(self):
     32         return self._reward_label == RewardLabel.OMEGA
     33 
     34     @property
     35     def quantity(self):
     36         return self._quantity
     37 
     38     @classmethod
     39     def from_proto(cls, payload):
     40         reward_type = RewardType.from_proto(payload.reward_type)
     41         if reward_type == RewardType.TYPE_ID:
     42             return RewardDefinitionTypeID.from_proto(payload)
     43         if reward_type == RewardType.ISK:
     44             return RewardDefinitionISK.from_proto(payload)
     45         if reward_type == RewardType.SP:
     46             return RewardDefinitionSP.from_proto(payload)
     47         raise RewardTypeNotFound
     48 
     49     @classmethod
     50     def to_proto(cls, obj):
     51         if obj.reward_type == RewardType.TYPE_ID:
     52             return RewardDefinitionTypeID.to_proto(obj)
     53         if obj.reward_type == RewardType.ISK:
     54             return RewardDefinitionISK.to_proto(obj)
     55         if obj.reward_type == RewardType.SP:
     56             return RewardDefinitionSP.to_proto(obj)
     57         raise RewardTypeNotFound
     58 
     59     def __eq__(self, other):
     60         return isinstance(other, self.__class__) and self.reward_label == other.reward_label and self.reward_type == other.reward_type and self.quantity == other.quantity
     61 
     62     def __ne__(self, other):
     63         return not self.__eq__(other)
     64 
     65     def __str__(self):
     66         return 'Type %s, Quantity %s, Label %s' % (self._reward_type, self._quantity, self._reward_label)
     67 
     68 
     69 class RewardDefinitionISK(RewardDefinition):
     70 
     71     def __init__(self, reward_label, quantity):
     72         super(RewardDefinitionISK, self).__init__(RewardType.ISK, reward_label, quantity)
     73 
     74     @classmethod
     75     def from_proto(cls, payload):
     76         return RewardDefinitionISK(reward_label=RewardLabel.from_proto(payload.reward_label), quantity=get_single_value_from_split_precision_message(payload.reward_type.isk))
     77 
     78     @classmethod
     79     def to_proto(cls, obj):
     80         units, nanos = split_precision(obj.quantity)
     81         return RewardProto(reward_type=RewardTypeProto(isk=IskCurrency(units=units, nanos=nanos)), reward_label=RewardLabel.to_proto(obj.reward_label))
     82 
     83 
     84 class RewardDefinitionSP(RewardDefinition):
     85 
     86     def __init__(self, reward_label, quantity):
     87         super(RewardDefinitionSP, self).__init__(RewardType.SP, reward_label, quantity)
     88 
     89     @classmethod
     90     def from_proto(cls, payload):
     91         return RewardDefinitionSP(reward_label=RewardLabel.from_proto(payload.reward_label), quantity=payload.reward_type.skill_points)
     92 
     93     @classmethod
     94     def to_proto(cls, obj):
     95         return RewardProto(reward_type=RewardTypeProto(skill_points=obj.quantity), reward_label=RewardLabel.to_proto(obj.reward_label))
     96 
     97 
     98 class RewardDefinitionTypeID(RewardDefinition):
     99 
    100     def __init__(self, reward_label, quantity, type_id):
    101         super(RewardDefinitionTypeID, self).__init__(RewardType.TYPE_ID, reward_label, quantity)
    102         self._type_id = type_id
    103 
    104     @property
    105     def type_id(self):
    106         return self._type_id
    107 
    108     def __eq__(self, other):
    109         return super(RewardDefinitionTypeID, self).__eq__(other) and self.type_id == other.type_id
    110 
    111     def __str__(self):
    112         return '%s, Type ID %s' % (super(RewardDefinitionTypeID, self).__str__(), self.type_id)
    113 
    114     @classmethod
    115     def from_proto(cls, payload):
    116         return RewardDefinitionTypeID(reward_label=RewardLabel.from_proto(payload.reward_label), quantity=payload.reward_type.item.quantity, type_id=payload.reward_type.item.identifier.sequential)
    117 
    118     @classmethod
    119     def to_proto(cls, obj):
    120         return RewardProto(reward_type=RewardTypeProto(item=ItemRewardType(identifier=ItemTypeIdentifier(sequential=obj.type_id), quantity=obj.quantity)), reward_label=RewardLabel.to_proto(obj.reward_label))