- Mesaj
- 1.313
- Çözümler
- 74
- Beğeni
- 4.929
- Puan
- 1.859
- Ticaret Puanı
- 0
boss ring sisteminin yanına çağırmalı versiyonları var, bu versiyona sahip paylaşılan bir files biliyormusunuz? eğer elinizde mevcutsa bossarena.cpp dosyasını atabilirmisiniz.
class Table {
public:
struct Row {
const char* col1;
DWORD col2;
};
void addRow(const char* c1, DWORD c2) {
if (!c1) {
return;
}
rows.push_back({c1, c2});
}
bool find(const char* value1, DWORD value2) const {
if (!value1) {
return false;
}
for (const auto& row : rows) {
if (strcmp(row.col1, value1) == 0 && row.col2 == value2) {...
yanlış bilmiyorsam bevis files vardı maviay44 paylaşmıştıboss ring sisteminin yanına çağırmalı versiyonları var, bu versiyona sahip paylaşılan bir files biliyormusunuz? eğer elinizde mevcutsa bossarena.cpp dosyasını atabilirmisiniz.
link kırıkyanlış bilmiyorsam bevis files vardı maviay44 paylaşmıştı
Linkleri görebilmek için giriş yap veya kayıt ol.
Buna bakabilir misinlink kırık
yok bundaki yanına çağırmalı değil.Buna bakabilir misinLinkleri görebilmek için giriş yap veya kayıt ol.
class Table {
public:
struct Row {
const char* col1;
DWORD col2;
};
void addRow(const char* c1, DWORD c2) {
if (!c1) {
return;
}
rows.push_back({c1, c2});
}
bool find(const char* value1, DWORD value2) const {
if (!value1) {
return false;
}
for (const auto& row : rows) {
if (strcmp(row.col1, value1) == 0 && row.col2 == value2) {
return true;
}
}
return false;
}
private:
std::vector<Row> rows;
};
extern Table globalTable;
void CHARACTER::EncodeInsertPacket(LPENTITY entity)
{
LPDESC d;
if (!(d = entity->GetDesc()))
return;
LPCHARACTER ch = (LPCHARACTER) entity;
if ((this->IsStone() || ch->IsStone()) && IsDead())
return;
ch->SendGuildName(GetGuild());
TPacketGCCharacterAdd pack;
pack.header = HEADER_GC_CHARACTER_ADD;
pack.dwVID = m_vid;
#ifdef ENABLE_SHOW_MOB_INFO
if (IsMonster() || IsStone())
{
pack.dwLevel = GetLevel();
pack.dwAIFlag = IsMonster() ? GetAIFlag() : 0;
}
else
{
pack.dwLevel = 0;
pack.dwAIFlag = 0;
}
#endif
pack.bType = GetCharType();
pack.angle = GetRotation();
pack.x = GetX();
pack.y = GetY();
pack.z = GetZ();
pack.wRaceNum = GetRaceNum();
if(IsBoss()){
bool result = globalTable.find(ch->GetName(), pack.dwVID);
if (result == false) {
return;
}
}
if (IsPet()
#ifdef NEW_PET_SYSTEM
|| IsNewPet()
#endif
)
{
pack.bMovingSpeed = 200;
}
else
{
pack.bMovingSpeed = GetLimitPoint(POINT_MOV_SPEED);
}
pack.bAttackSpeed = GetLimitPoint(POINT_ATT_SPEED);
pack.dwAffectFlag[0] = m_afAffectFlag.bits[0];
pack.dwAffectFlag[1] = m_afAffectFlag.bits[1];
pack.bStateFlag = m_bAddChrState;
int iDur = 0;
if (m_posDest.x != pack.x || m_posDest.y != pack.y)
{
iDur = (m_dwMoveStartTime + m_dwMoveDuration) - get_dword_time();
if (iDur <= 0)
{
pack.x = m_posDest.x;
pack.y = m_posDest.y;
}
}
d->Packet(&pack, sizeof(pack));
if (IsPC() == true || m_bCharType == CHAR_TYPE_NPC)
{
TPacketGCCharacterAdditionalInfo addPacket;
memset(&addPacket, 0, sizeof(TPacketGCCharacterAdditionalInfo));
addPacket.header = HEADER_GC_CHAR_ADDITIONAL_INFO;
addPacket.dwVID = m_vid;
addPacket.awPart[CHR_EQUIPPART_ARMOR] = GetPart(PART_MAIN);
addPacket.awPart[CHR_EQUIPPART_WEAPON] = GetPart(PART_WEAPON);
addPacket.awPart[CHR_EQUIPPART_HEAD] = GetPart(PART_HEAD);
addPacket.awPart[CHR_EQUIPPART_HAIR] = GetPart(PART_HAIR);
#ifdef ENABLE_SASH_SYSTEM OR ENABLE_COSTUME_HIDE_SYSTEM
addPacket.awPart[CHR_EQUIPPART_SASH] = GetQuestFlag("game_option.hide_sash") ? 0 : GetPart(PART_SASH);
#endif
#ifdef ENABLE_AURA_SYSTEM
addPacket.awPart[CHR_EQUIPPART_AURA] = GetPart(PART_AURA);
#endif
#ifdef ENABLE_EQUIPMENT_WING
addPacket.awPart[CHR_EQUIPPART_CAPE] = GetPart(PART_CAPE);
#endif
#ifdef ENABLE_REBIRT_SYSTEM
addPacket.bRebirt = (IsPC()) ? GetRebirt() : 0;
#endif
#ifdef ENABLE_RANK_SYSTEM
addPacket.bRank = (IsPC()) ? GetRank() : 0;
#endif
addPacket.bPKMode = m_bPKMode;
addPacket.dwMountVnum = GetMountVnum();
addPacket.bEmpire = m_bEmpire;
if (IsPC() == true
#ifdef NEW_PET_SYSTEM
|| IsNewPet() == true
#endif
#ifdef OFFLINE_SHOP
|| IsPrivShop()
#endif
)
{
addPacket.dwLevel = GetLevel();
#ifdef TIMING_BONUS_SYSTEM
if (IsPC() == true)
{
addPacket.RaidCallLevel = GetRaidcallLevel();
}
else
{
addPacket.RaidCallLevel = 0;
}
#endif
}
else
{
addPacket.dwLevel = 0;
#ifdef TIMING_BONUS_SYSTEM
addPacket.RaidCallLevel = 0;
#endif
}
LPITEM weapon = GetWear(WEAR_WEAPON);
if (weapon)
addPacket.dwWeaponEvolution = weapon->GetEvolution();
else
addPacket.dwWeaponEvolution = 0;
if (false)
{
LPCHARACTER ch = (LPCHARACTER) entity;
if (GetEmpire() == ch->GetEmpire() || ch->GetGMLevel() > GM_PLAYER || m_bCharType == CHAR_TYPE_NPC)
{
goto show_all_info;
}
else
{
memset(addPacket.name, 0, CHARACTER_NAME_MAX_LEN);
addPacket.dwGuildID = 0;
addPacket.sAlignment = 0;
#ifdef ENABLE_TITLE_SYSTEM
addPacket.sPrestige = 0;
#endif
#ifdef ENABLE_TITLE_RUTBE_SYSTEM
addPacket.sRutbe = 0;
#endif
}
}
else
{
show_all_info:
strlcpy(addPacket.name, GetName(), sizeof(addPacket.name));
if (GetGuild() != NULL
#ifdef OFFLINE_SHOP
&& !IsPrivShop()
#endif
)
{
addPacket.dwGuildID = GetGuild()->GetID();
CGuild* pGuild = this->GetGuild();
if (pGuild && pGuild->GetMasterPID() == GetPlayerID())
addPacket.dwNewIsGuildName = 3;
else if (pGuild && pGuild->NewIsGuildGeneral(GetPlayerID()) == true)
addPacket.dwNewIsGuildName = 2;
else
addPacket.dwNewIsGuildName = 1;
}
#ifdef OFFLINE_SHOP
else if (IsPrivShop())
{
LPCHARACTER owner = CHARACTER_MANAGER::instance().FindByPID(GetPrivShopOwner());
if (owner)
{
CGuild* pGuild = owner->GetGuild();
if (pGuild)
{
addPacket.dwGuildID = pGuild->GetID();
if (pGuild->GetMasterPID() == owner->GetPlayerID())
addPacket.dwNewIsGuildName = 3;
else if (pGuild->NewIsGuildGeneral(owner->GetPlayerID()) == true)
addPacket.dwNewIsGuildName = 2;
else
addPacket.dwNewIsGuildName = 1;
}
else
{
addPacket.dwGuildID = 0;
addPacket.dwNewIsGuildName = 0;
}
}
else
{
CGuild* pGuild = GetGuild();
if (pGuild)
{
addPacket.dwGuildID = pGuild->GetID();
addPacket.dwNewIsGuildName = GetGuildPosition();
}
else
{
addPacket.dwGuildID = 0;
addPacket.dwNewIsGuildName = 0;
}
}
}
#endif
else
{
addPacket.dwGuildID = 0;
addPacket.dwNewIsGuildName = 0;
}
addPacket.sAlignment = m_iAlignment / 10;
#ifdef ENABLE_TITLE_SYSTEM
addPacket.sPrestige = m_iPrestige;
#endif
#ifdef ENABLE_TITLE_RUTBE_SYSTEM
addPacket.sRutbe = m_iRutbe;
#endif
}
d->Packet(&addPacket, sizeof(TPacketGCCharacterAdditionalInfo));
}
if (iDur)
{
TPacketGCMove pack;
EncodeMovePacket(pack, GetVID(), FUNC_MOVE, 0, m_posDest.x, m_posDest.y, iDur, 0, (BYTE) (GetRotation() / 5));
d->Packet(&pack, sizeof(pack));
TPacketGCWalkMode p;
p.vid = GetVID();
p.header = HEADER_GC_WALK_MODE;
p.mode = m_bNowWalking ? WALKMODE_WALK : WALKMODE_RUN;
d->Packet(&p, sizeof(p));
}
if (entity->IsType(ENTITY_CHARACTER) && GetDesc())
{
LPCHARACTER ch = (LPCHARACTER) entity;
if (ch->IsWalking())
{
TPacketGCWalkMode p;
p.vid = ch->GetVID();
p.header = HEADER_GC_WALK_MODE;
p.mode = ch->m_bNowWalking ? WALKMODE_WALK : WALKMODE_RUN;
GetDesc()->Packet(&p, sizeof(p));
}
}
if (GetMyShop())
{
TPacketGCShopSign p;
p.bHeader = HEADER_GC_SHOP_SIGN;
p.dwVID = GetVID();
strlcpy(p.szSign, m_stShopSign.c_str(), sizeof(p.szSign));
#ifdef __ENABLE_SHOP_DECORATION_SYSTEM__
p.bShopKasmirTitle = m_bKasmirPaketBaslik;
#endif
d->Packet(&p, sizeof(TPacketGCShopSign));
}
if (entity->IsType(ENTITY_CHARACTER))
{
sys_log(3, "EntityInsert %s (RaceNum %d) (%d %d) TO %s",
GetName(), GetRaceNum(), GetX() / SECTREE_SIZE, GetY() / SECTREE_SIZE, ((LPCHARACTER)entity)->GetName());
}
}
LPCHARACTER CHARACTER_MANAGER::SpawnMobb(const char* me, DWORD dwVnum, long lMapIndex, long x, long y, long z, bool bSpawnMotion, int iRot, bool bShow)
{
const CMob * pkMob = CMobManager::instance().Get(dwVnum);
if (!pkMob)
{
//sys_err("SpawnMob: no mob data for vnum %u", dwVnum);
sys_err("SpawnMob: no mob data for vnum %u (map %u)", dwVnum, lMapIndex); // FixmeMara Detailed log.
return NULL;
}
if (!(pkMob->m_table.bType == CHAR_TYPE_NPC || pkMob->m_table.bType == CHAR_TYPE_WARP || pkMob->m_table.bType == CHAR_TYPE_GOTO) || mining::IsVeinOfOre (dwVnum))
{
LPSECTREE tree = SECTREE_MANAGER::instance().Get(lMapIndex, x, y);
if (!tree)
{
sys_log(0, "no sectree for spawn at %d %d mobvnum %d mapindex %d", x, y, dwVnum, lMapIndex);
return NULL;
}
DWORD dwAttr = tree->GetAttribute(x, y);
bool is_set = false;
if ( mining::IsVeinOfOre (dwVnum) ) is_set = IS_SET(dwAttr, ATTR_BLOCK);
else is_set = IS_SET(dwAttr, ATTR_BLOCK | ATTR_OBJECT);
if ( is_set )
{
// SPAWN_BLOCK_LOG
static bool s_isLog=quest::CQuestManager::instance().GetEventFlag("spawn_block_log");
static DWORD s_nextTime=get_global_time()+10000;
DWORD curTime=get_global_time();
if (curTime>s_nextTime)
{
s_nextTime=curTime;
s_isLog=quest::CQuestManager::instance().GetEventFlag("spawn_block_log");
}
if (s_isLog)
sys_log(0, "SpawnMob: BLOCKED position for spawn %s %u at %d %d (attr %u)", pkMob->m_table.szName, dwVnum, x, y, dwAttr);
// END_OF_SPAWN_BLOCK_LOG
return NULL;
}
if (IS_SET(dwAttr, ATTR_BANPK))
{
sys_log(0, "SpawnMob: BAN_PK position for mob spawn %s %u at %d %d", pkMob->m_table.szName, dwVnum, x, y);
return NULL;
}
}
LPSECTREE sectree = SECTREE_MANAGER::instance().Get(lMapIndex, x, y);
if (!sectree)
{
sys_log(0, "SpawnMob: cannot create monster at non-exist sectree %d x %d (map %d)", x, y, lMapIndex);
return NULL;
}
LPCHARACTER ch = CHARACTER_MANAGER::instance().CreateCharacterr(me, pkMob->m_table.szLocaleName);
if (!ch)
{
sys_log(0, "SpawnMob: cannot create new character");
return NULL;
}
if (iRot == -1)
iRot = number(0, 360);
ch->SetProto(pkMob);
// if mob is npc with no empire assigned, assign to empire of map
if (pkMob->m_table.bType == CHAR_TYPE_NPC)
if (ch->GetEmpire() == 0)
ch->SetEmpire(SECTREE_MANAGER::instance().GetEmpireFromMapIndex(lMapIndex));
ch->SetRotation(iRot);
if (bShow && !ch->Show(lMapIndex, x, y, z, bSpawnMotion))
{
M2_DESTROY_CHARACTER(ch);
sys_log(0, "SpawnMob: cannot show monster");
return NULL;
}
return (ch);
}
LPCHARACTER CHARACTER_MANAGER::CreateCharacterr(const char* me, const char * name, DWORD dwPID)
{
DWORD dwVID = AllocVID();
#ifdef M2_USE_POOL
LPCHARACTER ch = pool_.Construct();
#else
LPCHARACTER ch = M2_NEW CHARACTER;
#endif
ch->Create(name, dwVID, dwPID ? true : false);
globalTable.addRow(me, dwVID);
m_map_pkChrByVID.insert(std::make_pair(dwVID, ch));
if (dwPID)
{
char szName[CHARACTER_NAME_MAX_LEN + 1];
str_lower(name, szName, sizeof(szName));
m_map_pkPCChr.insert(NAME_MAP::value_type(szName, ch));
m_map_pkChrByPID.insert(std::make_pair(dwPID, ch));
}
return (ch);
}
senin sevincin benim sevincimdir gerçekten çocuk doğurmuş gibi sevindim anne değilim ama sanki cennetten arsa almış kadar mutlu oldum yalarım yutarım kodları leziz kodlar <3istediğimi buldum, yeni bir SpawnMobb fonksiyonu oluşturmuşlar boss ring te bu fonksiyonu kullanıyorlar ve er seferinde çağrılan boss u ve çağıran kişiyi vectore atıyorlar EncodeInsertPacket te de bu vectorden kontrol yapıp mob un sadece çağıran kişiye gözükmesini sağlıyorlar.
char.h:class Table { public: struct Row { const char* col1; DWORD col2; }; void addRow(const char* c1, DWORD c2) { if (!c1) { return; } rows.push_back({c1, c2}); } bool find(const char* value1, DWORD value2) const { if (!value1) { return false; } for (const auto& row : rows) { if (strcmp(row.col1, value1) == 0 && row.col2 == value2) { return true; } } return false; } private: std::vector<Row> rows; }; extern Table globalTable;
char.cpp:void CHARACTER::EncodeInsertPacket(LPENTITY entity) { LPDESC d; if (!(d = entity->GetDesc())) return; LPCHARACTER ch = (LPCHARACTER) entity; if ((this->IsStone() || ch->IsStone()) && IsDead()) return; ch->SendGuildName(GetGuild()); TPacketGCCharacterAdd pack; pack.header = HEADER_GC_CHARACTER_ADD; pack.dwVID = m_vid; #ifdef ENABLE_SHOW_MOB_INFO if (IsMonster() || IsStone()) { pack.dwLevel = GetLevel(); pack.dwAIFlag = IsMonster() ? GetAIFlag() : 0; } else { pack.dwLevel = 0; pack.dwAIFlag = 0; } #endif pack.bType = GetCharType(); pack.angle = GetRotation(); pack.x = GetX(); pack.y = GetY(); pack.z = GetZ(); pack.wRaceNum = GetRaceNum(); if(IsBoss()){ bool result = globalTable.find(ch->GetName(), pack.dwVID); if (result == false) { return; } } if (IsPet() #ifdef NEW_PET_SYSTEM || IsNewPet() #endif ) { pack.bMovingSpeed = 200; } else { pack.bMovingSpeed = GetLimitPoint(POINT_MOV_SPEED); } pack.bAttackSpeed = GetLimitPoint(POINT_ATT_SPEED); pack.dwAffectFlag[0] = m_afAffectFlag.bits[0]; pack.dwAffectFlag[1] = m_afAffectFlag.bits[1]; pack.bStateFlag = m_bAddChrState; int iDur = 0; if (m_posDest.x != pack.x || m_posDest.y != pack.y) { iDur = (m_dwMoveStartTime + m_dwMoveDuration) - get_dword_time(); if (iDur <= 0) { pack.x = m_posDest.x; pack.y = m_posDest.y; } } d->Packet(&pack, sizeof(pack)); if (IsPC() == true || m_bCharType == CHAR_TYPE_NPC) { TPacketGCCharacterAdditionalInfo addPacket; memset(&addPacket, 0, sizeof(TPacketGCCharacterAdditionalInfo)); addPacket.header = HEADER_GC_CHAR_ADDITIONAL_INFO; addPacket.dwVID = m_vid; addPacket.awPart[CHR_EQUIPPART_ARMOR] = GetPart(PART_MAIN); addPacket.awPart[CHR_EQUIPPART_WEAPON] = GetPart(PART_WEAPON); addPacket.awPart[CHR_EQUIPPART_HEAD] = GetPart(PART_HEAD); addPacket.awPart[CHR_EQUIPPART_HAIR] = GetPart(PART_HAIR); #ifdef ENABLE_SASH_SYSTEM OR ENABLE_COSTUME_HIDE_SYSTEM addPacket.awPart[CHR_EQUIPPART_SASH] = GetQuestFlag("game_option.hide_sash") ? 0 : GetPart(PART_SASH); #endif #ifdef ENABLE_AURA_SYSTEM addPacket.awPart[CHR_EQUIPPART_AURA] = GetPart(PART_AURA); #endif #ifdef ENABLE_EQUIPMENT_WING addPacket.awPart[CHR_EQUIPPART_CAPE] = GetPart(PART_CAPE); #endif #ifdef ENABLE_REBIRT_SYSTEM addPacket.bRebirt = (IsPC()) ? GetRebirt() : 0; #endif #ifdef ENABLE_RANK_SYSTEM addPacket.bRank = (IsPC()) ? GetRank() : 0; #endif addPacket.bPKMode = m_bPKMode; addPacket.dwMountVnum = GetMountVnum(); addPacket.bEmpire = m_bEmpire; if (IsPC() == true #ifdef NEW_PET_SYSTEM || IsNewPet() == true #endif #ifdef OFFLINE_SHOP || IsPrivShop() #endif ) { addPacket.dwLevel = GetLevel(); #ifdef TIMING_BONUS_SYSTEM if (IsPC() == true) { addPacket.RaidCallLevel = GetRaidcallLevel(); } else { addPacket.RaidCallLevel = 0; } #endif } else { addPacket.dwLevel = 0; #ifdef TIMING_BONUS_SYSTEM addPacket.RaidCallLevel = 0; #endif } LPITEM weapon = GetWear(WEAR_WEAPON); if (weapon) addPacket.dwWeaponEvolution = weapon->GetEvolution(); else addPacket.dwWeaponEvolution = 0; if (false) { LPCHARACTER ch = (LPCHARACTER) entity; if (GetEmpire() == ch->GetEmpire() || ch->GetGMLevel() > GM_PLAYER || m_bCharType == CHAR_TYPE_NPC) { goto show_all_info; } else { memset(addPacket.name, 0, CHARACTER_NAME_MAX_LEN); addPacket.dwGuildID = 0; addPacket.sAlignment = 0; #ifdef ENABLE_TITLE_SYSTEM addPacket.sPrestige = 0; #endif #ifdef ENABLE_TITLE_RUTBE_SYSTEM addPacket.sRutbe = 0; #endif } } else { show_all_info: strlcpy(addPacket.name, GetName(), sizeof(addPacket.name)); if (GetGuild() != NULL #ifdef OFFLINE_SHOP && !IsPrivShop() #endif ) { addPacket.dwGuildID = GetGuild()->GetID(); CGuild* pGuild = this->GetGuild(); if (pGuild && pGuild->GetMasterPID() == GetPlayerID()) addPacket.dwNewIsGuildName = 3; else if (pGuild && pGuild->NewIsGuildGeneral(GetPlayerID()) == true) addPacket.dwNewIsGuildName = 2; else addPacket.dwNewIsGuildName = 1; } #ifdef OFFLINE_SHOP else if (IsPrivShop()) { LPCHARACTER owner = CHARACTER_MANAGER::instance().FindByPID(GetPrivShopOwner()); if (owner) { CGuild* pGuild = owner->GetGuild(); if (pGuild) { addPacket.dwGuildID = pGuild->GetID(); if (pGuild->GetMasterPID() == owner->GetPlayerID()) addPacket.dwNewIsGuildName = 3; else if (pGuild->NewIsGuildGeneral(owner->GetPlayerID()) == true) addPacket.dwNewIsGuildName = 2; else addPacket.dwNewIsGuildName = 1; } else { addPacket.dwGuildID = 0; addPacket.dwNewIsGuildName = 0; } } else { CGuild* pGuild = GetGuild(); if (pGuild) { addPacket.dwGuildID = pGuild->GetID(); addPacket.dwNewIsGuildName = GetGuildPosition(); } else { addPacket.dwGuildID = 0; addPacket.dwNewIsGuildName = 0; } } } #endif else { addPacket.dwGuildID = 0; addPacket.dwNewIsGuildName = 0; } addPacket.sAlignment = m_iAlignment / 10; #ifdef ENABLE_TITLE_SYSTEM addPacket.sPrestige = m_iPrestige; #endif #ifdef ENABLE_TITLE_RUTBE_SYSTEM addPacket.sRutbe = m_iRutbe; #endif } d->Packet(&addPacket, sizeof(TPacketGCCharacterAdditionalInfo)); } if (iDur) { TPacketGCMove pack; EncodeMovePacket(pack, GetVID(), FUNC_MOVE, 0, m_posDest.x, m_posDest.y, iDur, 0, (BYTE) (GetRotation() / 5)); d->Packet(&pack, sizeof(pack)); TPacketGCWalkMode p; p.vid = GetVID(); p.header = HEADER_GC_WALK_MODE; p.mode = m_bNowWalking ? WALKMODE_WALK : WALKMODE_RUN; d->Packet(&p, sizeof(p)); } if (entity->IsType(ENTITY_CHARACTER) && GetDesc()) { LPCHARACTER ch = (LPCHARACTER) entity; if (ch->IsWalking()) { TPacketGCWalkMode p; p.vid = ch->GetVID(); p.header = HEADER_GC_WALK_MODE; p.mode = ch->m_bNowWalking ? WALKMODE_WALK : WALKMODE_RUN; GetDesc()->Packet(&p, sizeof(p)); } } if (GetMyShop()) { TPacketGCShopSign p; p.bHeader = HEADER_GC_SHOP_SIGN; p.dwVID = GetVID(); strlcpy(p.szSign, m_stShopSign.c_str(), sizeof(p.szSign)); #ifdef __ENABLE_SHOP_DECORATION_SYSTEM__ p.bShopKasmirTitle = m_bKasmirPaketBaslik; #endif d->Packet(&p, sizeof(TPacketGCShopSign)); } if (entity->IsType(ENTITY_CHARACTER)) { sys_log(3, "EntityInsert %s (RaceNum %d) (%d %d) TO %s", GetName(), GetRaceNum(), GetX() / SECTREE_SIZE, GetY() / SECTREE_SIZE, ((LPCHARACTER)entity)->GetName()); } }
char_manager.cpp:LPCHARACTER CHARACTER_MANAGER::SpawnMobb(const char* me, DWORD dwVnum, long lMapIndex, long x, long y, long z, bool bSpawnMotion, int iRot, bool bShow) { const CMob * pkMob = CMobManager::instance().Get(dwVnum); if (!pkMob) { //sys_err("SpawnMob: no mob data for vnum %u", dwVnum); sys_err("SpawnMob: no mob data for vnum %u (map %u)", dwVnum, lMapIndex); // FixmeMara Detailed log. return NULL; } if (!(pkMob->m_table.bType == CHAR_TYPE_NPC || pkMob->m_table.bType == CHAR_TYPE_WARP || pkMob->m_table.bType == CHAR_TYPE_GOTO) || mining::IsVeinOfOre (dwVnum)) { LPSECTREE tree = SECTREE_MANAGER::instance().Get(lMapIndex, x, y); if (!tree) { sys_log(0, "no sectree for spawn at %d %d mobvnum %d mapindex %d", x, y, dwVnum, lMapIndex); return NULL; } DWORD dwAttr = tree->GetAttribute(x, y); bool is_set = false; if ( mining::IsVeinOfOre (dwVnum) ) is_set = IS_SET(dwAttr, ATTR_BLOCK); else is_set = IS_SET(dwAttr, ATTR_BLOCK | ATTR_OBJECT); if ( is_set ) { // SPAWN_BLOCK_LOG static bool s_isLog=quest::CQuestManager::instance().GetEventFlag("spawn_block_log"); static DWORD s_nextTime=get_global_time()+10000; DWORD curTime=get_global_time(); if (curTime>s_nextTime) { s_nextTime=curTime; s_isLog=quest::CQuestManager::instance().GetEventFlag("spawn_block_log"); } if (s_isLog) sys_log(0, "SpawnMob: BLOCKED position for spawn %s %u at %d %d (attr %u)", pkMob->m_table.szName, dwVnum, x, y, dwAttr); // END_OF_SPAWN_BLOCK_LOG return NULL; } if (IS_SET(dwAttr, ATTR_BANPK)) { sys_log(0, "SpawnMob: BAN_PK position for mob spawn %s %u at %d %d", pkMob->m_table.szName, dwVnum, x, y); return NULL; } } LPSECTREE sectree = SECTREE_MANAGER::instance().Get(lMapIndex, x, y); if (!sectree) { sys_log(0, "SpawnMob: cannot create monster at non-exist sectree %d x %d (map %d)", x, y, lMapIndex); return NULL; } LPCHARACTER ch = CHARACTER_MANAGER::instance().CreateCharacterr(me, pkMob->m_table.szLocaleName); if (!ch) { sys_log(0, "SpawnMob: cannot create new character"); return NULL; } if (iRot == -1) iRot = number(0, 360); ch->SetProto(pkMob); // if mob is npc with no empire assigned, assign to empire of map if (pkMob->m_table.bType == CHAR_TYPE_NPC) if (ch->GetEmpire() == 0) ch->SetEmpire(SECTREE_MANAGER::instance().GetEmpireFromMapIndex(lMapIndex)); ch->SetRotation(iRot); if (bShow && !ch->Show(lMapIndex, x, y, z, bSpawnMotion)) { M2_DESTROY_CHARACTER(ch); sys_log(0, "SpawnMob: cannot show monster"); return NULL; } return (ch); } LPCHARACTER CHARACTER_MANAGER::CreateCharacterr(const char* me, const char * name, DWORD dwPID) { DWORD dwVID = AllocVID(); #ifdef M2_USE_POOL LPCHARACTER ch = pool_.Construct(); #else LPCHARACTER ch = M2_NEW CHARACTER; #endif ch->Create(name, dwVID, dwPID ? true : false); globalTable.addRow(me, dwVID); m_map_pkChrByVID.insert(std::make_pair(dwVID, ch)); if (dwPID) { char szName[CHARACTER_NAME_MAX_LEN + 1]; str_lower(name, szName, sizeof(szName)); m_map_pkPCChr.insert(NAME_MAP::value_type(szName, ch)); m_map_pkChrByPID.insert(std::make_pair(dwPID, ch)); } return (ch); }