root/trunk/src/game/ObjectDefines.h @ 143

Revision 102, 5.1 kB (checked in by yumileroy, 17 years ago)

[svn] Fixed copyright notices to comply with GPL.

Original author: w12x
Date: 2008-10-23 03:29:52-05:00

Line 
1/*
2 * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
3 *
4 * Copyright (C) 2008 Trinity <http://www.trinitycore.org/>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#ifndef TRINITY_OBJECTDEFINES_H
22#define TRINITY_OBJECTDEFINES_H
23
24#include "Platform/Define.h"
25
26// used for creating values for respawn for example
27#define MAKE_PAIR64(l, h)  uint64( uint32(l) | ( uint64(h) << 32 ) )
28#define PAIR64_HIPART(x)   (uint32)((uint64(x) >> 32) & 0x00000000FFFFFFFFLL)
29#define PAIR64_LOPART(x)   (uint32)(uint64(x)         & 0x00000000FFFFFFFFLL)
30
31#define MAKE_PAIR32(l, h)  uint32( uint16(l) | ( uint32(h) << 16 ) )
32#define PAIR32_HIPART(x)   (uint16)((uint32(x) >> 16) & 0x0000FFFF)
33#define PAIR32_LOPART(x)   (uint16)(uint32(x)         & 0x0000FFFF)
34
35enum HighGuid
36{
37    HIGHGUID_ITEM           = 0x4000,                       // blizz 4000
38    HIGHGUID_CONTAINER      = 0x4000,                       // blizz 4000
39    HIGHGUID_PLAYER         = 0x0000,                       // blizz 0000
40    HIGHGUID_GAMEOBJECT     = 0xF110,                       // blizz F110
41    HIGHGUID_TRANSPORT      = 0xF120,                       // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
42    HIGHGUID_UNIT           = 0xF130,                       // blizz F130
43    HIGHGUID_PET            = 0xF140,                       // blizz F140
44    HIGHGUID_DYNAMICOBJECT  = 0xF100,                       // blizz F100
45    HIGHGUID_CORPSE         = 0xF101,                       // blizz F100
46    HIGHGUID_MO_TRANSPORT   = 0x1FC0,                       // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
47};
48
49#define IS_EMPTY_GUID(Guid)          ( Guid == 0 )
50
51#define IS_CREATURE_GUID(Guid)       ( GUID_HIPART(Guid) == HIGHGUID_UNIT )
52#define IS_PET_GUID(Guid)            ( GUID_HIPART(Guid) == HIGHGUID_PET )
53#define IS_CREATURE_OR_PET_GUID(Guid)( IS_CREATURE_GUID(Guid) || IS_PET_GUID(Guid) )
54#define IS_PLAYER_GUID(Guid)         ( GUID_HIPART(Guid) == HIGHGUID_PLAYER && Guid!=0 )
55#define IS_UNIT_GUID(Guid)           ( IS_CREATURE_OR_PET_GUID(Guid) || IS_PLAYER_GUID(Guid) )
56                                                            // special case for empty guid need check
57#define IS_ITEM_GUID(Guid)           ( GUID_HIPART(Guid) == HIGHGUID_ITEM )
58#define IS_GAMEOBJECT_GUID(Guid)     ( GUID_HIPART(Guid) == HIGHGUID_GAMEOBJECT )
59#define IS_DYNAMICOBJECT_GUID(Guid)  ( GUID_HIPART(Guid) == HIGHGUID_DYNAMICOBJECT )
60#define IS_CORPSE_GUID(Guid)         ( GUID_HIPART(Guid) == HIGHGUID_CORPSE )
61#define IS_TRANSPORT(Guid)           ( GUID_HIPART(Guid) == HIGHGUID_TRANSPORT )
62#define IS_MO_TRANSPORT(Guid)        ( GUID_HIPART(Guid) == HIGHGUID_MO_TRANSPORT )
63
64// l - OBJECT_FIELD_GUID
65// e - OBJECT_FIELD_ENTRY for GO (except GAMEOBJECT_TYPE_MO_TRANSPORT) and creatures or UNIT_FIELD_PETNUMBER for pets
66// h - OBJECT_FIELD_GUID + 1
67#define MAKE_NEW_GUID(l, e, h)   uint64( uint64(l) | ( uint64(e) << 24 ) | ( uint64(h) << 48 ) )
68
69#define GUID_HIPART(x)   (uint32)((uint64(x) >> 48) & 0x0000FFFF)
70
71// We have different low and middle part size for different guid types
72#define _GUID_ENPART_2(x) 0
73#define _GUID_ENPART_3(x) (uint32)((uint64(x) >> 24) & 0x0000000000FFFFFFLL)
74#define _GUID_LOPART_2(x) (uint32)(uint64(x)         & 0x00000000FFFFFFFFLL)
75#define _GUID_LOPART_3(x) (uint32)(uint64(x)         & 0x0000000000FFFFFFLL)
76
77inline bool IsGuidHaveEnPart(uint64 const& guid)
78{
79    switch(GUID_HIPART(guid))
80    {
81        case HIGHGUID_ITEM:
82        case HIGHGUID_PLAYER:
83        case HIGHGUID_DYNAMICOBJECT:
84        case HIGHGUID_CORPSE:
85            return false;
86        case HIGHGUID_GAMEOBJECT:
87        case HIGHGUID_TRANSPORT:
88        case HIGHGUID_UNIT:
89        case HIGHGUID_PET:
90        case HIGHGUID_MO_TRANSPORT:
91        default:
92            return true;
93    }
94}
95
96#define GUID_ENPART(x) (IsGuidHaveEnPart(x) ? _GUID_ENPART_3(x) : _GUID_ENPART_2(x))
97#define GUID_LOPART(x) (IsGuidHaveEnPart(x) ? _GUID_LOPART_3(x) : _GUID_LOPART_2(x))
98
99inline char const* GetLogNameForGuid(uint64 guid)
100{
101    switch(GUID_HIPART(guid))
102    {
103        case HIGHGUID_ITEM:         return "item";
104        case HIGHGUID_PLAYER:       return guid ? "player" : "none";
105        case HIGHGUID_GAMEOBJECT:   return "gameobject";
106        case HIGHGUID_TRANSPORT:    return "transport";
107        case HIGHGUID_UNIT:         return "creature";
108        case HIGHGUID_PET:          return "pet";
109        case HIGHGUID_DYNAMICOBJECT:return "dynobject";
110        case HIGHGUID_CORPSE:       return "corpse";
111        case HIGHGUID_MO_TRANSPORT: return "mo_transport";
112        default:
113            return "<unknown>";
114    }
115}
116#endif
Note: See TracBrowser for help on using the browser.