blob: cb4819de55331ca50864ddc4680c36fb3fd1f8b5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#include "operate.hh"
#include "info.hh"
#include "stubs.hh"
// TODO(fusion): This could have been a simple return value.
void CheckContainerDestination(Object Obj, Object Con){
Object Help = Con;
while(Help != NONE && !Help.getObjectType().isMapContainer()){
if(Help == Obj){
throw CROSSREFERENCE;
}
Help = Help.getContainer();
}
ObjectType ConType = Con.getObjectType();
if(!ConType.getFlag(CHEST)){
int ConObjects = CountObjectsInContainer(Con);
int ConCapacity = (int)ConType.getAttribute(CAPACITY);
if(ConObjects >= ConCapacity){
throw CONTAINERFULL;
}
}
}
void CheckInventoryDestination(Object Obj, Object Con, bool Split){
ObjectType ObjType = Obj.getObjectType();
int ConPosition = GetObjectBodyPosition(Con);
bool HandContainer = ConPosition == INVENTORY_RIGHTHAND
|| ConPosition == INVENTORY_LEFTHAND;
if(!HandContainer && ConPosition != INVENTORY_AMMO){
if(!ObjType.getFlag(CLOTHES)){
throw WRONGPOSITION;
}
int ObjPosition = (int)ObjType.getAttribute(BODYPOSITION);
if(ObjPosition == 0){
throw WRONGPOSITION2;
}else if(ObjPosition != ConPosition){
throw WRONGCLOTHES;
}
}
uint32 CreatureID = GetObjectCreatureID(Con);
if(ObjType.isTwoHanded() && HandContainer){
Object RightHand = GetBodyObject(CreatureID, INVENTORY_RIGHTHAND);
if(RightHand != NONE && RightHand != Obj){
throw HANDSNOTFREE;
}
Object LeftHand = GetBodyObject(CreatureID, INVENTORY_LEFTHAND);
if(LeftHand != NONE && LeftHand != Obj){
throw HANDSNOTFREE;
}
return;
}
if(GetBodyObject(CreatureID, ConPosition) != NONE){
throw NOROOM;
}
if(HandContainer){
for(int Position = INVENTORY_HAND_FIRST;
Position <= INVENTORY_HAND_LAST;
Position += 1){
Object Other = GetBodyObject(CreatureID, Position);
if(Other != NONE){
ObjectType OtherType = Other.getObjectType();
if(OtherType.isTwoHanded()){
throw HANDBLOCKED;
}
if(Split || Other != Obj){
if(OtherType.isWeapon() && ObjType.isWeapon()){
throw ONEWEAPONONLY;
}
}
}
}
}
}
|