ItemType.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "ItemType.h"
  2. #include "ItemSkill.h"
  3. #include "ItemStack.h"
  4. ItemType::ItemType( int id, ItemSkillLevelUpRule *levelUpRule, ItemType *zBrokenType )
  5. : ReferenceCounter(),
  6. id( id ),
  7. levelUpRule( levelUpRule ),
  8. zBrokenType( zBrokenType )
  9. {
  10. StaticRegistry<ItemType>::INSTANCE.registerT( this, id );
  11. }
  12. ItemType::~ItemType()
  13. {
  14. if( levelUpRule )
  15. levelUpRule->release();
  16. }
  17. void ItemType::loadSuperItem( Item *zItem, Framework::Reader *zReader ) const
  18. {
  19. zReader->lese( (char *)&zItem->damage, 4 );
  20. zReader->lese( (char *)&zItem->maxDamage, 4 );
  21. zReader->lese( (char *)&zItem->durability, 4 );
  22. zReader->lese( (char *)&zItem->maxDurability, 4 );
  23. zReader->lese( (char *)&zItem->eatable, 1 );
  24. zReader->lese( (char *)&zItem->placeable, 1 );
  25. zReader->lese( (char *)&zItem->equippable, 1 );
  26. zReader->lese( (char *)&zItem->usable, 1 );
  27. zReader->lese( (char *)&zItem->maxStackSize, 1 );
  28. unsigned char len = 0;
  29. zReader->lese( (char *)&len, 1 );
  30. zItem->name.fillText( ' ', len );
  31. zReader->lese( zItem->name, len );
  32. }
  33. void ItemType::saveSuperItem( Item *zItem, Framework::Writer *zWriter ) const
  34. {
  35. zWriter->schreibe( (char *)&zItem->damage, 4 );
  36. zWriter->schreibe( (char *)&zItem->maxDamage, 4 );
  37. zWriter->schreibe( (char *)&zItem->durability, 4 );
  38. zWriter->schreibe( (char *)&zItem->maxDurability, 4 );
  39. zWriter->schreibe( (char *)&zItem->eatable, 1 );
  40. zWriter->schreibe( (char *)&zItem->placeable, 1 );
  41. zWriter->schreibe( (char *)&zItem->equippable, 1 );
  42. zWriter->schreibe( (char *)&zItem->usable, 1 );
  43. zWriter->schreibe( (char *)&zItem->maxStackSize, 1 );
  44. unsigned char len = (unsigned char)zItem->name.getLength();
  45. zWriter->schreibe( (char *)&len, 1 );
  46. zWriter->schreibe( zItem->name, len );
  47. }
  48. int ItemType::getId() const
  49. {
  50. return id;
  51. }
  52. ItemType *ItemType::zBrokenItemType() const
  53. {
  54. return zBrokenType;
  55. }
  56. ItemStack *ItemType::createItemStack( int size ) const
  57. {
  58. Item *item = createItem();
  59. if( !item )
  60. return 0;
  61. return new ItemStack( item, MIN( size, item->getMaxStackSize() ) );
  62. }
  63. ItemSkill *ItemType::createDefaultItemSkill() const
  64. {
  65. return 0;
  66. }
  67. void ItemType::levelUpItemSkill( ItemSkill *zSkill ) const
  68. {
  69. if( levelUpRule )
  70. levelUpRule->applyOn( zSkill );
  71. }
  72. Item *ItemType::loadItem( Framework::Reader *zReader ) const
  73. {
  74. Item *item = createItem();
  75. loadSuperItem( item, zReader );
  76. return item;
  77. }
  78. void ItemType::saveItem( Item *zItem, Framework::Writer *zWriter ) const
  79. {
  80. saveSuperItem( zItem, zWriter );
  81. }