| 312 | |
| 313 | |
| 314 | class Skill(HandledItem): |
| 315 | def __init__(self, character, item, level=0, ro=False, learned=True): |
| 316 | self.character = character |
| 317 | self.__item = item if not isinstance(item, int) else None |
| 318 | self.itemID = item.ID if not isinstance(item, int) else item |
| 319 | self.__level = level if learned else None |
| 320 | self.commandBonus = 0 |
| 321 | self.build(ro) |
| 322 | |
| 323 | @reconstructor |
| 324 | def init(self): |
| 325 | self.build(False) |
| 326 | self.__item = None |
| 327 | |
| 328 | def build(self, ro): |
| 329 | self.__ro = ro |
| 330 | self.__suppressed = False |
| 331 | self.activeLevel = self.__level |
| 332 | |
| 333 | def saveLevel(self): |
| 334 | self.__level = self.activeLevel |
| 335 | |
| 336 | if self in self.character.dirtySkills: |
| 337 | self.character.dirtySkills.remove(self) |
| 338 | |
| 339 | def revert(self): |
| 340 | self.activeLevel = self.__level |
| 341 | |
| 342 | @property |
| 343 | def isDirty(self): |
| 344 | return self.__level != self.activeLevel |
| 345 | |
| 346 | @property |
| 347 | def learned(self): |
| 348 | return self.activeLevel is not None |
| 349 | |
| 350 | @property |
| 351 | def level(self): |
| 352 | # @todo: there is a phantom bug that keep popping up about skills not having a character... See #1234 |
| 353 | # Remove this at some point when the cause can be determined. |
| 354 | if self.character: |
| 355 | # Ensure that All 5/0 character have proper skill levels (in case database gets corrupted) |
| 356 | if self.character.name == "All 5": |
| 357 | self.activeLevel = self.__level = 5 |
| 358 | elif self.character.name == "All 0": |
| 359 | self.activeLevel = self.__level = 0 |
| 360 | elif self.character.alphaClone: |
| 361 | return min(self.activeLevel or 0, self.character.alphaClone.getSkillLevel(self) or 0) |
| 362 | |
| 363 | return self.activeLevel or 0 |
| 364 | |
| 365 | def setLevel(self, level, persist=False, ignoreRestrict=False): |
| 366 | |
| 367 | if level is not None and (level < 0 or level > 5): |
| 368 | raise ValueError(str(level) + " is not a valid value for level") |
| 369 | |
| 370 | if hasattr(self, "_Skill__ro") and self.__ro is True: |
| 371 | raise ReadOnlyException() |
no outgoing calls
no test coverage detected