📄 dungeon.h
字号:
#ifndef __DUNGEON_H__
#define __DUNGEON_H__
//////////////////////////////////////////////////////////
// template <class T1> class TKeinList
//class CDungeonHistory // 皋矫瘤 贸府甫 困秦
// 阿 带傈 甘 辑滚俊辑 贸府
//class CDungeonObject // 带傈俊 乐绰 坷宏璃飘 努贰胶
//class CDungeonMap // 甘窜困( 2俺狼 摸捞 粮犁茄促. )
//class CDungeonMapMgr // 2俺狼 摸阑 包府
// 包府辑滚
//class CDungeonBasic // 带傈 ( 4俺狼 摸捞 粮犁茄促. )
//class CDungeonMgr // 4俺狼 带傈阑 包府
////////////////////////////////////////////////////////////////////////
#define SEND_ALL -100
// SCENARIO_ITEM_NUMBER
#define SIN_TRAP_KEY_3 10210
#define SIN_TRAP_KEY_5 10211
#define SIN_TRAP_KEY_7 10212
#define SMT_CREATE_DRAGON 7
#define SMT_CREATE_BOSS 8
#define SMT_DRAGONROAD_MESSAGE1 10 // 盖贸澜 靛贰帮 肺靛甫 父车阑锭
#define SMT_DRAGONROAD_MESSAGE2 11 // 葛滴 蛮己沁阑锭
#define SMT_DRAGONROAD_MESSAGE3 12 // 葛滴 馆措 沁阑锭
#define SMT_DRAGONROAD_MESSAGE4 13 // 搬捧 矫累
#define SMT_DRAGONROAD_MESSAGE5 14 // 搬捧啊 20盒捞 救瘤唱档 救场朝锭
#define SMT_DRAGONROAD_MESSAGE6 15 // 靛贰帮 肺靛狼 菩硅
#define SMT_LAYER_POTAL_MESSAGE 16 //
#define SMT_START_LAYER 17 // 割锅 摸捞 劝己拳 灯促.
#define SMT_KILL_BOSS 18 // 焊胶 阁胶磐甫 磷看促.
// kein sub
//021030 YGI
template <class T1> class TKeinList
{
T1 *m_pData;
TKeinList<T1> *m_pPrev;
TKeinList<T1> *m_pNext;
TKeinList<T1> *m_pFind;
public :
TKeinList() { Set(); }
~TKeinList() { SAFE_DELETE(m_pData); SAFE_DELETE(GetNext()); }
TKeinList<T1> *&GetNext(){ return m_pNext; }
TKeinList<T1> *&GetPrev(){ return m_pPrev; }
TKeinList<T1> *GetEndNode()
{
for( TKeinList<T1> *temp = this; temp->GetNext(); temp = temp->GetNext() );
return temp;
}
void Set() { m_pData = 0; GetNext() = 0; GetPrev() = 0; }
void clear()
{
SAFE_DELETE(m_pData);
Set();
}
void SetFind()
{
m_pFind = this;
}
TKeinList<T1> *FindNext()
{
m_pFind = m_pFind->GetNext();
return m_pFind;
}
T1 GetFind()
{
return *m_pFind->GetData();
}
bool AddNode( T1 data )
{
TKeinList<T1> *pEnd = GetEndNode();
TKeinList<T1> *pAddData = new TKeinList<T1>;
pAddData->m_pData = new T1;
*pAddData->m_pData = data;
pEnd->GetNext() = pAddData;
pAddData->GetPrev() = pEnd;
return true;
}
bool AddNode( T1 *pData )
{
TKeinList<T1> *pEnd = GetEndNode();
TKeinList<T1> *pAddData = new TKeinList<T1>;
pAddData->m_pData = pData;
pEnd->GetNext() = pAddData;
pAddData->GetPrev() = pEnd;
return true;
}
bool DeleteNode( T1 data )
{
TKeinList<T1> *temp = this;
while( temp=temp->FindNode(data) )
{
temp->GetPrev()->GetNext() = temp->GetNext();
if( temp->GetNext() )
temp->GetNext()->GetPrev() = temp->GetPrev();
TKeinList<T1> *temp2;
temp2 = temp->GetPrev();
temp->GetNext() = 0;
SAFE_DELETE(temp);
temp = temp2;
}
return true;
}
TKeinList<T1> * FindNode( T1 data )
{
for( TKeinList<T1> *temp = GetNext(); temp; temp = temp->GetNext() )
{
if( *temp->m_pData == data )
{
return temp;
}
}
return NULL;
}
bool DeleteFirst()
{
TKeinList<T1> *temp = GetNext();
if( !temp ) return 0;
TKeinList<T1> *next = temp->GetNext();
GetNext() = next;
if( next )
next->GetPrev() = this;
temp->GetNext() = 0;
SAFE_DELETE(temp);
return true;
}
bool DeleteEnd()
{
TKeinList<T1> *pEnd = GetEndNode();
if( pEnd == this ) return 0;
pEnd->GetPrev()->GetNext() = 0;
SAFE_DELETE(pEnd);
return 1;
}
int GetCount()
{
int count = 0;
for( TKeinList<T1> *temp = this; temp->GetNext(); temp = temp->GetNext() ) count++;
return count;
}
int AddNodeLimit( T1 *pData, int max, int delete_first = 1 )
{
AddNode( pData );
if( GetCount() > max )
{
if( delete_first ) DeleteFirst();
}
return 1;
}
T1* GetData(int nIndex)
{
TKeinList<T1> *temp = GetNext();
for( int i=0; i<nIndex; i++ )
{
if( !temp ) return NULL;
temp = temp->GetNext();
}
return temp?temp->m_pData:NULL;
}
T1 *GetData()
{
return m_pData;
}
};
///////////////////////////////////////////////////////////////////////////////
class CDungeonHistory
{
public :
enum eDungeonHistoryType
{
NORMAL_TRAP_OPEN = 1, // 焊烹狼 飘乏
NORMAL_TRAP_CLOSE = 2,
MIDDLE_BOSS_OPEN = 3, // 吝埃 焊胶肺 啊绰 器呕
MIDDLE_BOSS_CLOSE = 4,
LAYER_POTAL_OPEN = 5, // 促澜 摸栏肺 啊绰 器呕
LAYER_POTAL_CLOSE = 6,
DUNGEON_POTAL_OPEN = 7, // 观栏肺 唱啊绰 器呕
DUNGEON_POTAL_CLOSE = 8,
DUNGEON_OPEN = 9, // 矫唱府坷俊 狼秦辑 带傈捞 坷锹登绊 救登绊
DUNGEON_CLOSE = 10,
DUNGEON_WHEN_OPEN_CLOSE_NOTICE = 11,//矫唱府坷啊 攫力 凯府绰瘤
};
public :
int m_nType; // 傍瘤 鸥涝
int m_nMonth; // 矫埃
int m_nDay;
int m_nHour;
int m_nMin;
int m_nLayer;
char m_szDungeon[20];
char m_szName[20];
public :
CDungeonHistory()
{
m_nType = 0;
m_nMonth = 0;
m_nDay = 0;
m_nHour = 0;
m_szDungeon[0] = 0;
m_szName[0] = 0;
m_nLayer = 0;
}
int SetData( int type, int layer, char *name, const char *mapname = NULL );
CDungeonHistory & operator = ( const CDungeonHistory &data )
{
m_nType = data.m_nType ;
m_nType = data.m_nType ;
m_nMonth = data.m_nMonth ;
m_nDay = data.m_nDay ;
m_nHour = data.m_nHour ;
m_nMin = data.m_nMin ;
strcpy( m_szDungeon, data.m_szDungeon );
strcpy( m_szName, data.m_szName );
return *this;
}
};
//////////////////////////////////////////////////////////////
class CScenarioBoss
{
public :
enum
{
NT_NONE = 0,
NT_NORMAL_DRAGON = 1,
NT_DRAGON_LOAD = 2,
NT_DRAGON_HEART = 3,
NT_NORMAL_BOSS = 4,
NT_FOLLOWER = 5, // 凉捍
};
enum
{
BT_NORMAL = 0,
BT_LAYER_BOSS = 1,
BT_DARAGON_HEART = 2,
BT_DARAGON = 3,
};
public :
int m_nNpcType;
int m_nSprNum; // 胶橇扼捞飘 逞滚
int m_nNpcIndex; // NPCLIST 俊辑 荤侩窍绰 牢郸胶
int m_nBossType; // 弊 摸狼 焊胶衬?
public :
CScenarioBoss()
{
Clear();
}
void Clear()
{
m_nNpcType = 0;
m_nSprNum = 0;
m_nNpcIndex = 0;
m_nBossType = 0;
}
~CScenarioBoss() { DeleteBoss(); }
int GetBossType() { return m_nBossType; }
int DeleteBoss();
bool IsDragonLoad() { return (m_nNpcType==NT_DRAGON_LOAD)?true:false; }
int CreateBoss( int npc_type, int npc_num = 0, int x=0, int y=0 );
};
//////////////////////////////////////////////////////////////
class CDungeonObject
{
public :
void *m_pMother;
public:
enum
{
TILE_NOT = 0,
TILE_DONT = 1,
TILE_EVENT = 2,
};
enum // m_nNeedType // 咀萍宏 登绰 炼扒
{
ONT_NEED_ITEM = 1, // 咀萍宏 瞪锭 酒捞袍捞 鞘夸
ONT_NEED_TRAP = 2, // 咀萍宏矫 促弗 飘乏捞 鞘夸 ( OET_NORMAL_TRAP 捞 傈何 咀萍宏 登具 茄促. )
ONT_NEED_TRAP2 = 3, // 咀萍宏矫 促弗 飘乏捞 鞘夸 ( 官肺傈 牢郸胶狼 蔼捞 咀萍宏 登具 茄促. )
ONT_NEED_QUBE = 4, // 酒酒袍栏肺 锅龋甫 嘎苗具 茄促.
ONT_NEED_QUBE2 = 5, // 钮宏啊 促 咀萍宏 瞪锭 咀萍宏 等促.
ONT_NEED_DRAGON = 6, // 靛贰帮捞 唱鸥朝锭 咀萍宏 ( 靛贰帮 肺靛啊 唱鸥唱搁 close )
ONT_NEED_MONSTER = 7, // 阁胶磐啊 磷阑锭 咀萍宏 等促.
};
enum // m_nExecuteType // 咀萍宏矫 秦具 且 青悼
{
OET_NORMAL_TRAP = 1,
OET_POTAL_BOSS = 2,
OET_POTAL_OUT_LAYER = 3,
OET_POTAL_OUT_DUNGEON = 4,
OET_POTAL_DRAGON = 5, // 靛贰帮栏肺 啊绰 器呕
//OET_OTHER_ACTIVE_TRAP = 5, // 磊扁啊 咀萍宏 瞪锭 促弗 仇档 咀萍宏 矫难霖促.
};
public:
int m_Index; // 飘乏 锅龋 0锅篮 荤侩窍瘤 臼绰促.
int m_nLayer; // 秦寸 摸
int m_nCloseObjectImage; // 农肺令 灯阑锭 嘛阑 捞固瘤 锅龋
int m_nActiveObjectImage; // 咀萍宏 灯阑锭 嘛阑 捞固瘤 锅龋
int m_nActiveObjectType; // 努扼捞攫飘俊辑 嘛绰 规过
int m_nInputX;
int m_nInputY;
int m_nOutputX;
int m_nOutputY;
int m_nTime; // 檬
int m_nNeedType; // active 登绰 炼扒( 1:酒捞袍, 2:m_nType2狼 蔼捞 1牢 傈何 咀萍宏 灯阑锭 咀萍宏 等促. )
int m_nExecuteType; // active 灯阑锭 窍绰 青悼( 1: m_nType1 狼 蔼捞 2牢 坷宏璃飘甫 坷锹 矫难扼, 2:器呕扁瓷
bool m_bActive; // 凯啡绰啊 救 凯啡绰啊 // active 客 鞍篮 俺充
DWORD m_dwOpenTime;
int m_ObjectId; // 积己矫挪 坷宏璃飘 锅龋 // -1篮 绝澜
int m_nActiveItemNo; // 累悼矫虐绰 酒捞袍
char m_szOutputMap[20];
// 鸥老俊 包访等
// close 侩
int m_eTileType1; // 0捞搁 绝促. enum 荤侩
int m_nRange1; // 加己阑 磨 裹困
int m_nEventNo1; // 光酒具 窍绰 捞亥飘 锅龋
// active侩
int m_eTileType2; // 0捞搁 绝促. enum 荤侩
int m_nRange2; // 加己阑 磨 裹困
int m_nEventNo2; // 光酒具 窍绰 捞亥飘 锅龋
// 焊胶 积己
CScenarioBoss *m_pBoss; // 焊胶
int m_nBossCount; // 侩老 版快 2俺捞促.
CScenarioBoss *m_pFollower; // 绿捍
int m_nBoss; // 积己矫懦 吝埃焊胶
int m_nBossX;
int m_nBossY;
int m_nBossItem;
int m_nResenTime;
int m_nFollower; // 林函俊 鞍捞 唱坷绰 绿捍
int m_nFollowerCount; // 绿捍 荐
public:
CDungeonObject()
{
m_Index = 0;
m_bActive = 0;
m_ObjectId = -1;
m_nCloseObjectImage = 0;
m_nActiveObjectImage = 0;
m_eTileType1 = TILE_NOT;
m_eTileType2 = TILE_NOT;
m_pMother = 0;
m_pBoss = 0;
m_pFollower = 0;
m_nBoss = 0;
m_nBossX = 0;
m_nBossY = 0;
m_nBossItem = 0;
m_nFollower = 0;
m_nFollowerCount = 0;
m_nResenTime = -1;
m_nBossCount = 0;
}
~CDungeonObject();
bool IsThisLayerActive();
bool IsNormalTrap() { return ( m_nExecuteType == OET_NORMAL_TRAP )?true:false; }
void SetMotherPointer( void *pointer ) { m_pMother = pointer; }
int CheckCloseTime();
int IsActive() { return m_bActive; }
void CloseObject( int npc_create_type = 1 );
int CreateNormalBoss(); // 吝埃 焊胶 积己
void ActiveObject();
int Execute( short int cn );
bool TryActive( CHARLIST *ch );
bool SetActive( CHARLIST *ch );
int DeleteObjectImage();
int Start();
int CreateScenarioBoss( int boss_type = CScenarioBoss::NT_NORMAL_BOSS);
int KillBoss( CHARLIST *user, CHARLIST *boss ); // npc啊 磷菌阑锭 弊 npc啊 矫唱府坷 焊胶老版快 贸府
int DeletBoss(); // 碍力肺 焊胶甫 绝举 版快
bool IsDragonLoad();
void SendObjectTileAttr( short int cn );
};
//#define _KEIN_TEST_
const int MESSAGE_COUNT = 2;
class CDungeonMap // 甘窜困
{
public :
enum // m_nDungeonType
{
DT_NONE = 1,
DT_PASSWORD = 2,
};
public:
TKeinList<CDungeonHistory> m_History;
CDungeonObject *m_pObject;
int m_nObjectCount;
int m_nLayer;
int m_nTrapCount; // 措固泵俊辑 鞠龋肺 荤侩茄促.
int m_nDungeonType; //
bool m_bActive;
int m_nMessageCount;
int m_pKey[7];
int m_nMessageOption;
bool m_bDragonRoad;
char m_szOutMap[20];
int m_nOutX;
int m_nOutY;
public :
CDungeonMap( int flag = 1 )
{
m_pObject = 0;
m_bDragonRoad = 0;
Clear();
}
~CDungeonMap()
{
Clear();
}
void SetDragonRoad() { m_bDragonRoad = !m_bDragonRoad; }
bool IsDragonRoad()
{ //< CSD-030304
/*
#ifdef _KEIN_TEST_
return 1;
#endif
return m_bDragonRoad;
*/
return false; // 公炼扒 饭靛 靛贰帮捞 唱坷档废 汲沥
} //> CSD-030304
int SetTrapKey( int item_no, CHARLIST *ch );
int Clear()
{
SAFE_DELETE_ARRAY(m_pObject);
m_nObjectCount = 0;
m_nLayer = 0;
m_nTrapCount = 0;
m_nDungeonType = 0;
m_bActive = 0;
m_nMessageCount = 0;
m_szOutMap[0] = 0;
m_nOutX = 0;
m_nOutY = 0;
ResetKey();
return 1;
}
int Load( int layer );
int SetDungeonObject( int count )
{
m_nObjectCount = count;
m_pObject = new CDungeonObject[count];
for( int i=0; i<count; i++ )
{
m_pObject[i].SetMotherPointer( this );
}
return 1;
}
void ResetKey()
{
memset( m_pKey, 0, sizeof( int )*7 );
m_nMessageOption = 1;
}
int IsActive() { return m_bActive; }
int SetActive();
int SetClose();
int NewJoin( short int cn );
bool CheckObject( int cn, int event_no );
CDungeonObject *GetObjectByEventNo( int event_no );
int SendEventWhenAddItem( int item_index, short int cn );
int SetInt( int *pTemp, int nMax );
int SetHistory( CHARLIST *ch, CDungeonObject *pDO, int type );
void Proc();
int GetTrapCount( int &count, int &intctive_count , int &aactive_time);
int KillBoss( CHARLIST *user, CHARLIST *boss ); // 焊胶啊 磷菌促.
void OpenDragonRoadObject();
void CloseDragonRoadObject();
int DeleteDragon();
int SendTileAttrToNewUser( short int cn ); // 货肺 甸绢柯 仇俊霸 捞固 父甸绢 廉 乐绰 加己阑 葛滴 焊辰促.
};
class CDungeonMapMgr
{
public :
enum // GET_OUT_TYPE
{
GOT_END_BOSS_POTAL = 1, // 焊胶 器呕捞 摧老锭, 焊胶 器呕 救 藕仇
GOT_END_LAYER = 2, // 摸 器呕捞 摧老锭, 泼扁扁
GOT_END_SCENARIO = 3, // 矫唱府坷 辆丰
GOT_END_VOTE = 4, // 蛮馆 场车阑锭
// 疵绢唱搁 GetOutDugeon() 俊 硅凯阑 疵妨具 茄促.
};
public :
int m_nCount;
CDungeonMap* m_pData;
TKeinList< int > *pVoteTrue; // 蛮己
TKeinList< int > *pVoteFalse; // 馆措
TKeinList< int > *pPotalList; // 焊胶 器呕阑 芭模 荤恩 殿废
public :
CDungeonMapMgr( int N )
{
m_pData = new CDungeonMap[N];
m_nCount = N;
pVoteTrue = 0;
pVoteFalse = 0;
pPotalList = 0;
}
~CDungeonMapMgr()
{
m_nCount = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -