static void checkForNewAgro() { List<uint> diff = null; try { // Check for new entries in the enmity list diff = playerEntity.EnmityEntries.Select(x => x.ID).Except(_enmityCached.Select(y => y.ID)).ToList(); if (diff.Any()) { // loop through the new enmity entries foreach (uint ID in diff) { ActorEntity currentEntity = null; if (_mobCached.ContainsKey(ID)) { currentEntity = _mobCached[ID]; } else if (_mobList.ContainsKey(ID)) { currentEntity = _mobList[ID]; } if (currentEntity != null) { if (currentEntity.IsValid && currentEntity.HPCurrent > 0) // && currentEntity.ClaimedByID != 0 && currentEntity.ClaimedByID < 0xE0000000) { if (!_agroList.Any() && implementationClass == null && learningHelperClass == null) { // This is the first enmity entry we found. Start the encounter timer. started = DateTime.Now; } // make sure it's our own copy so it won't mysteriously disappear or change without our knowledge currentEntity = cloneActorEntity(currentEntity); if (_agroList.Any()) { firstAgro = DateTime.Now; } _agroList.Add(currentEntity); endEncounterAt = DateTime.MaxValue; if (implementationClass != null) { // send the new mobs to the encounter script try { debug("Agroed Mob: " + currentEntity.Name, DBMErrorLevel.Trace); inController = false; implementationClass.onMobAgro(currentEntity); inController = true; } catch (Exception e2) { debug("onMobAgro", getEngineVsEncounter(implementationClass), e2); inController = true; } try { implementationClass.bossCheck(currentEntity); } catch (Exception e2) { debug("bossCheck", getEngineVsEncounter(implementationClass), e2); } } else { if (useTestEncounter) { IEncounter inst = (IEncounter)(new TestEncounter()); implementationClass = inst; setupNewClass(inst); debug("TestEncounter started", DBMErrorLevel.Trace); debug("Agroed Mob: " + currentEntity.Name, DBMErrorLevel.Trace); } else { // No encounter script loaded. Lets see if we have one that matches this mob Regex rgx = new Regex("[^a-zA-Z0-9 -]"); string mobName = rgx.Replace(currentEntity.Name, ""); string dir = getScriptsDirectory(); checkRecompile(currentEntity.Name); if (encounters.ContainsKey(mobName)) { IEncounter inst = findEntryPoint(encounters[mobName]); implementationClass = inst; if (implementationClass != null) { setupNewClass(inst); debug("Encounter started (" + dir + @"\" + mobName + ".cs)", DBMErrorLevel.Trace); debug("Agroed Mob: " + currentEntity.Name, DBMErrorLevel.Trace); resetLearningHelper(); } else { debug("Couldn't find entry point in class: " + dir + @"\" + mobName + ".cs", DBMErrorLevel.EngineErrors); } } } } if (learningHelperClass != null) { // send the new mobs to the learning helper try { learningHelperClass.onMobAgro(currentEntity); } catch (Exception e2) { debug("learningHelper onMobAgro", getEngineVsEncounter(learningHelperClass), e2); } try { learningHelperClass.bossCheck(currentEntity); } catch (Exception e2) { debug("learningHelper bossCheck", getEngineVsEncounter(learningHelperClass), e2); } } else { refreshIgnoreMobsList(); // Start learning helper for a new encounter LearningHelper abc = new LearningHelper(); setupNewClass((IEncounter)abc); learningHelperClass = abc; debug("LearningHelper started (" + currentEntity.Name + ")", DBMErrorLevel.Trace); } } else { debug("New agro invalid: IsValid: " + currentEntity.IsValid + ", HPCurrent: " + currentEntity.HPCurrent + ", ClaimedByID: " + currentEntity.ClaimedByID, DBMErrorLevel.Notice); } } else { debug("New agro not found (ID: " + ID + ")", DBMErrorLevel.Notice); } } } } catch (Exception e2) { debug("updateData check for new agro", DBMErrorLevel.EngineErrors, e2); } }
private static void resetLearningHelper() { if (learningHelperClass != null) { try { learningHelperClass.endEncounter(); inController = false; learningHelperClass.onEndEncounter(); inController = true; } catch (Exception e2) { inController = true; debug("learningHelper processChatLine", getEngineVsEncounter(learningHelperClass), e2); } learningHelperClass = null; } try { refreshIgnoreMobsList(); // Start learning helper for a new encounter LearningHelper abc = new LearningHelper(); setupNewClass((IEncounter)abc); learningHelperClass = abc; debug("LearningHelper started", DBMErrorLevel.Trace); } catch (Exception e2) { debug("learningHelper setupNewClass", getEngineVsEncounter(learningHelperClass), e2); } }