Crossfire Server, Trunk
TreasureListWrapper.cpp
Go to the documentation of this file.
1 /*
2  * Crossfire -- cooperative multi-player graphical RPG and adventure game
3  *
4  * Copyright (c) 2022 the Crossfire Development Team
5  *
6  * Crossfire is free software and comes with ABSOLUTELY NO WARRANTY. You are
7  * welcome to redistribute it under certain conditions. For details, please
8  * see COPYING and LICENSE.
9  *
10  * The authors can be reached via e-mail at <crossfire@metalforge.org>.
11  */
12 
13 #include "TreasureListWrapper.h"
14 #include "../ResourcesManager.h"
15 #include "../CREPixmap.h"
16 #include "MimeUtils.h"
17 #include "TreasureLoader.h"
18 #include "assets.h"
19 #include "AssetsManager.h"
21 
23  : AssetTWrapper(parent, "TreasureList", list), myResources(resources)
24 {
25 }
26 
28  int count = 0;
29  auto item = myWrappedItem->items;
30  while (item) {
31  count++;
32  item = item->next;
33  }
34  return count;
35 }
36 
38  return itemCount();
39 }
40 
42  auto item = myWrappedItem->items;
43  while (item && child > 0) {
44  item = item->next;
45  child--;
46  }
47  return myResources->wrap(item, this);
48 }
49 
51  auto item = myWrappedItem->items;
52  int index = 0;
53  while (item) {
54  if (myResources->wrap(item, this) == child) {
55  return index;
56  }
57  item = item->next;
58  index++;
59  }
60  return -1;
61 }
62 
64  if (isSingle == isSingleItem() || myWrappedItem->items == nullptr) {
65  return;
66  }
67  if (isSingle) {
69  } else {
71  }
73 }
74 
77  auto item = myWrappedItem->items;
78  while (item) {
79  myWrappedItem->total_chance += item->chance;
80  item = item->next;
81  }
82 }
83 
86  if (childIndex(asset) != -1 && type == AssetUpdated) {
90  return;
91  }
92  }
93  AssetWrapper::wasModified(asset, type, extra);
94 }
95 
96 void TreasureListWrapper::drag(QMimeData *data) const {
97  QByteArray ba(data->data(MimeUtils::TreasureList));
98  QDataStream df(&ba, QIODevice::WriteOnly);
99  df << QString(myWrappedItem->name);
100  data->setData(MimeUtils::TreasureList, ba);
101 }
102 
103 bool TreasureListWrapper::canDrop(const QMimeData *data, int) const {
104  return
105  data->hasFormat(MimeUtils::Archetype)
106  || data->hasFormat(MimeUtils::TreasureList)
107  ;
108 }
109 
110 void TreasureListWrapper::drop(const QMimeData *data, int row) {
111  bool modified = false;
112  if (row == -1) {
113  row = childrenCount();
114  }
115 
117  modified |= !archs.empty();
118  for (auto arch : archs) {
120  auto item = treasure_insert(myWrappedItem, row);
121  item->item = arch;
123  row++;
124  }
125 
127  modified |= !lists.empty();
128  for (auto list : lists) {
130  auto item = treasure_insert(myWrappedItem, row);
131  item->name = add_string(list->name);
133  row++;
134  }
136  fixTotalChance();
138  }
139 }
140 
142  int index = childIndex(child);
143  if (index != -1) {
144  auto t = dynamic_cast<TreasureWrapper *>(child);
146  myResources->remove(t->wrappedItem());
150  fixTotalChance();
152  return;
153  }
154  }
155 }
156 
158  return
159  dynamic_cast<const ArchetypeWrapper *>(asset)
160  || dynamic_cast<const TreasureListWrapper *>(asset)
162 }
ArchetypeWrapper.h
AssetWrapper::BeforeChildAdd
@ BeforeChildAdd
Definition: AssetWrapper.h:33
TreasureListWrapper::wasModified
virtual void wasModified(AssetWrapper *asset, ChangeType type, int extra) override
Definition: TreasureListWrapper.cpp:84
AssetWrapper::BeforeChildRemove
@ BeforeChildRemove
Definition: AssetWrapper.h:33
AssetWrapper::modified
void modified()
TreasureListWrapper::childrenCount
virtual int childrenCount() const override
Definition: TreasureListWrapper.cpp:37
archininventory.arch
arch
DIALOGCHECK MINARGS 1 MAXARGS 1
Definition: archininventory.py:16
treasurelist::items
treasure * items
Definition: treasure.h:92
TreasureListWrapper::fixTotalChance
void fixTotalChance()
Definition: TreasureListWrapper.cpp:75
AssetWrapper::markModified
void markModified(ChangeType change, int extra=0)
Definition: AssetWrapper.h:55
treasurelist::total_chance
int16_t total_chance
Definition: treasure.h:87
TreasureListWrapper::drag
virtual void drag(QMimeData *data) const override
Definition: TreasureListWrapper.cpp:96
guildoracle.list
list
Definition: guildoracle.py:87
TreasureListWrapper::drop
virtual void drop(const QMimeData *data, int row) override
Definition: TreasureListWrapper.cpp:110
archetypes
other than new code I created new archetypes
Definition: arch-handbook.txt:18
TreasureListWrapper::TreasureListWrapper
TreasureListWrapper(AssetWrapper *parent, treasurelist *list, ResourcesManager *resources)
Definition: TreasureListWrapper.cpp:22
TreasureListWrapper::child
virtual AssetWrapper * child(int child) override
Definition: TreasureListWrapper.cpp:41
AssetTWrapper< treasurelist >::myWrappedItem
treasurelist * myWrappedItem
Definition: AssetWrapper.h:104
ArchetypeWrapper
Definition: ArchetypeWrapper.h:25
MimeUtils::TreasureList
static const char * TreasureList
Definition: MimeUtils.h:25
AssetsManager.h
getManager
AssetsManager * getManager()
Definition: assets.cpp:305
TreasureListWrapper::childIndex
virtual int childIndex(AssetWrapper *child) override
Definition: TreasureListWrapper.cpp:50
AssetWrapper
Definition: AssetWrapper.h:25
TreasureListWrapper::removeChild
virtual void removeChild(AssetWrapper *child) override
Definition: TreasureListWrapper.cpp:141
TreasureListWrapper::myResources
ResourcesManager * myResources
Definition: TreasureListWrapper.h:60
TreasureListWrapper::canDrop
virtual bool canDrop(const QMimeData *data, int row) const override
Definition: TreasureListWrapper.cpp:103
treasurelist
Definition: treasure.h:85
AssetWrapper::AssetUpdated
@ AssetUpdated
Definition: AssetWrapper.h:33
ResourcesManager::wrap
ArchetypeWrapper * wrap(archetype *arch, AssetWrapper *parent)
Definition: ResourcesManager.h:131
add_string
sstring add_string(const char *str)
Definition: shstr.cpp:124
treasurelist::name
sstring name
Definition: treasure.h:86
AssetWrapper::wasModified
virtual void wasModified(AssetWrapper *asset, ChangeType type, int extra)
Definition: AssetWrapper.h:78
TreasureListWrapper::setSingleItem
void setSingleItem(bool isSingle)
Definition: TreasureListWrapper.cpp:63
AssetTWrapper
Definition: AssetWrapper.h:94
ResourcesManager
Definition: ResourcesManager.h:80
TreasureListWrapper
Definition: TreasureListWrapper.h:27
navar-midane_time.data
data
Definition: navar-midane_time.py:11
disinfect.count
int count
Definition: disinfect.py:7
TreasureListWrapper::isSingleItem
bool isSingleItem
Definition: TreasureListWrapper.h:33
AssetWrapper::ChildrenMayUse
@ ChildrenMayUse
Definition: AssetWrapper.h:32
AssetWrapper::PossibleUse
PossibleUse
Definition: AssetWrapper.h:32
TreasureListWrapper::itemCount
int itemCount
Definition: TreasureListWrapper.h:32
treasure_remove_item
void treasure_remove_item(treasurelist *list, int position)
Definition: treasure.cpp:1451
ResourcesManager::remove
void remove(treasure *tr)
Definition: ResourcesManager.h:150
item
Definition: item.py:1
Floor.t
t
Definition: Floor.py:62
MimeUtils::extract
static QList< T * > extract(const QMimeData *data, const QString &mime, AssetsCollection< T > *assets)
Definition: MimeUtils.h:31
ResourcesManager::treasureModified
void treasureModified(treasurelist *treasure)
Definition: ResourcesManager.cpp:230
assets.h
npc_dialog.index
int index
Definition: npc_dialog.py:102
MimeUtils.h
treasure_insert
treasure * treasure_insert(treasurelist *list, int position)
Definition: treasure.cpp:1428
lists
Crossfire Protocol most of the time after the actual code was already omit certain important and possibly make life miserable any new developer or curious player should be able to find most of the relevant information here If inconsistencies are found or this documentation proves to be consider the latest server side protocol code in the public source code repository as the authoritative reference Introduction If you were ever curious enough to telnet or netcat to a Crossfire chances are you were sorely disappointed While the protocol may seem to use plain text at it actually uses a mix of ASCII and binary data This handbook attempts to document various aspects of the Crossfire protocol As consult the README file to find out how to get in touch with helpful people via mailing lists
Definition: protocol.txt:24
TreasureLoader.h
AssetWrapper::ChangeType
ChangeType
Definition: AssetWrapper.h:33
TreasureListWrapper::uses
virtual PossibleUse uses(const AssetWrapper *, std::string &) const override
Definition: TreasureListWrapper.cpp:157
MimeUtils::Archetype
static const char * Archetype
Definition: MimeUtils.h:24
AssetWrapper::AfterChildRemove
@ AfterChildRemove
Definition: AssetWrapper.h:33
TreasureListWrapper.h
AssetWrapper::AfterChildAdd
@ AfterChildAdd
Definition: AssetWrapper.h:33
AssetWrapper::DoesntUse
@ DoesntUse
Definition: AssetWrapper.h:32
TreasureWrapper
Definition: TreasureWrapper.h:33
is_valid_types_gen.type
list type
Definition: is_valid_types_gen.py:25