void CZoneEntities::WeatherChange(WEATHER weather) { auto element = zoneutils::GetWeatherElement(weather); for (EntityList_t::const_iterator it = m_mobList.begin(); it != m_mobList.end(); ++it) { CMobEntity* PCurrentMob = (CMobEntity*)it->second; PCurrentMob->PAI->EventHandler.triggerListener("WEATHER_CHANGE", PCurrentMob, static_cast<int>(weather), element); // can't detect by scent in this weather if (PCurrentMob->m_Aggro & AGGRO_SCENT) { PCurrentMob->m_disableScent = (weather == WEATHER_RAIN || weather == WEATHER_SQUALL || weather == WEATHER_BLIZZARDS); } if (PCurrentMob->m_EcoSystem == SYSTEM_ELEMENTAL && PCurrentMob->PMaster == nullptr && PCurrentMob->m_SpawnType == SPAWNTYPE_WEATHER) { if (PCurrentMob->m_Element == element) { PCurrentMob->SetDespawnTime(0s); PCurrentMob->m_AllowRespawn = true; PCurrentMob->Spawn(); } else { PCurrentMob->SetDespawnTime(1s); PCurrentMob->m_AllowRespawn = false; } } else if (PCurrentMob->m_SpawnType == SPAWNTYPE_FOG) { if (weather == WEATHER_FOG) { PCurrentMob->SetDespawnTime(0s); PCurrentMob->m_AllowRespawn = true; PCurrentMob->Spawn(); } else { PCurrentMob->SetDespawnTime(1s); PCurrentMob->m_AllowRespawn = false; } } } for (EntityList_t::const_iterator it = m_charList.begin(); it != m_charList.end(); ++it) { CCharEntity* PChar = (CCharEntity*)it->second; PChar->PLatentEffectContainer->CheckLatentsZone(); PChar->PAI->EventHandler.triggerListener("WEATHER_CHANGE", PChar, static_cast<int>(weather), element); } }
void CZoneEntities::TOTDChange(TIMETYPE TOTD) { SCRIPTTYPE ScriptType = SCRIPT_NONE; switch (TOTD) { case TIME_MIDNIGHT: { } break; case TIME_NEWDAY: { for (EntityList_t::const_iterator it = m_mobList.begin(); it != m_mobList.end(); ++it) { CMobEntity* PMob = (CMobEntity*)it->second; if (PMob->m_SpawnType == SPAWNTYPE_ATNIGHT) { PMob->SetDespawnTime(1ms); PMob->m_AllowRespawn = false; } } } break; case TIME_DAWN: { ScriptType = SCRIPT_TIME_DAWN; for (EntityList_t::const_iterator it = m_mobList.begin(); it != m_mobList.end(); ++it) { CMobEntity* PMob = (CMobEntity*)it->second; if (PMob->m_SpawnType == SPAWNTYPE_ATEVENING) { PMob->SetDespawnTime(1ms); PMob->m_AllowRespawn = false; } } } break; case TIME_DAY: { ScriptType = SCRIPT_TIME_DAY; } break; case TIME_DUSK: { ScriptType = SCRIPT_TIME_DUSK; } break; case TIME_EVENING: { ScriptType = SCRIPT_TIME_EVENING; for (EntityList_t::const_iterator it = m_mobList.begin(); it != m_mobList.end(); ++it) { CMobEntity* PMob = (CMobEntity*)it->second; if (PMob->m_SpawnType == SPAWNTYPE_ATEVENING) { PMob->SetDespawnTime(0s); PMob->m_AllowRespawn = true; PMob->Spawn(); } } } break; case TIME_NIGHT: { for (EntityList_t::const_iterator it = m_mobList.begin(); it != m_mobList.end(); ++it) { CMobEntity* PMob = (CMobEntity*)it->second; if (PMob->m_SpawnType == SPAWNTYPE_ATNIGHT) { PMob->SetDespawnTime(0s); PMob->m_AllowRespawn = true; PMob->Spawn(); } } } break; } if (ScriptType != SCRIPT_NONE) { for (EntityList_t::const_iterator it = m_charList.begin(); it != m_charList.end(); ++it) { charutils::CheckEquipLogic((CCharEntity*)it->second, ScriptType, TOTD); } } }