Files
ROSS/Src/World Server/worldmap.h
T
2025-08-11 11:09:09 -05:00

120 lines
4.7 KiB
C++

/*
Rose Online Server Emulator
Copyright (C) 2006,2007 OSRose Team http://www.osrose.net
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
depeloped with Main erose/hrose source server + some change from the original eich source
*/
#ifndef __ROSE_MAP__
#define __ROSE_MAP__
#include "worldserver.h"
#include "player.h"
#include "character.h"
#include "worldmonster.h"
#include "datatypes.h"
class CMonster;
class CMap
{
public:
CMap( );
~CMap( );
bool AddPlayer( CPlayer* player );
bool RemovePlayer( CPlayer* player, bool clearobject=true );
//CMonster* AddMonster( UINT montype, fPoint position, UINT owner=0, UINT spawnid=0, bool GetDropData=false );
CMonster* AddMonster( UINT montype, fPoint position, UINT owner=0, UINT spawnid=0, UINT aggro = 0, bool IsTD = false, UINT limit = 0, UINT AI = 0);
bool DeleteMonster( CMonster*, bool clearobject=false, UINT i=0 );
bool AddDrop( CDrop* drop );
bool DeleteDrop( CDrop* drop );
bool AddNPC( CNPC* npc );
bool DeleteNPC( CNPC* npc );
CMonster* ConverToMonster( CMonster* monster, UINT newmonttype, bool heal=true );
CMonster* ConverToMonster( CNPC* npc, UINT newmonttype );
bool TeleportPlayer( CPlayer* player, fPoint coord, bool TelePassenger=true );
bool pakTeleport( CPlayer* player, unsigned int Map, fPoint coord, bool TelePassenger );
CRespawnPoint* GetNearRespawn( CPlayer* player );
CRespawnPoint* GetFirstRespawn( );
CRespawnPoint* GetStartRespawn( );
CCharacter* GetCharInMap( unsigned int id );
CPlayer* GetPlayerInMap( UINT id );
CMonster* GetMonsterInMap( UINT id );
CPlayer* GetCharIDInMap( UINT id );
CDrop* GetDropInMap( UINT id );
CNPC* GetNPCInMap( UINT id );
void UpdateTime( );
void CleanDrops( );
void RespawnMonster( );
void UpdateSpawnCounter( UINT montype, UINT spawnid, UINT key );
bool IsNight( );
void LoadZon(strings zon);
void LoadData(strings zonpath, CStrStb* stbEvent);
void AddIfo(strings ifo, CStrStb* stbEvent);
UINT id; // id from map
UINT dayperiod; // duration of 1 day
UINT morningtime; // morning start time
UINT daytime; // day start time
UINT eveningtime; // evening start time
UINT nighttime; // nighttime start time
UINT ZoneTime; // how many 6 minute segments since start of the day
UINT ghost; // ghosttime?
BYTE allowpvp; // pvp allowed?
bool dungeon; // Map is a dungeon?
bool allowpat; // pat allowed?
// Time values
UINT MapTime; // Past time in this map
UINT Date;
UINT hour;
UINT minute;
UINT ObjVar[20]; //for storing map variables used in AIP
clock_t LastUpdate;// Last time update in the map
UINT CurrentTime; // 0 = morning | 1 = day | 2 = evening | 3 = night | 4+ = invalid
//TDMobList
UINT TDMobList[500]; //List of TD monsters waiting to be spawned
UINT TDNextSpawn; //index pointer for next spawn in TDMobList
UINT TDNextMon; //index pointer for next addition to TDMobList
clock_t lastTDSpawnTime; //time of the last spawn
UINT TDMobDelay; // delay between spawns (ms)
UINT crystalhealth; // current health of the base crystal
UINT portalhealth; // current health of the spawn portal
UINT mapXPRate; // exp rate for this map
vector<CRespawnPoint*> RespawnList; // RespawnZones List
vector<CSpawnArea*> MonsterSpawnList; // Monster spawn in this map
#ifdef USEIFO
vector<CMobGroup*> MobGroupList; // Spawn "Zones"
#endif
vector<CMonster*> MonsterList; // Monster List in this map
vector<CDrop*> DropsList; // Droped Items
vector<CPlayer*> PlayerList; // Client list in this map;
vector<CNPC*> NPCList; // NPC in this map
vector<CTeleGate*> TeleGateList; // Telegates from this map
std::vector<SZonPoint*> PointList;
pthread_mutex_t MonsterMutex, DropMutex;
};
#endif