public void AddEncounter(EncounterOutProto encounter) { if (!ConfigurationManager.Shared.Config.Encounter.Enabled) { return; } blockingEncounterQueue.Add(encounter); }
private string getReplacedCustomLink(String customlink, EncounterOutProto encounter) { String link = customlink.Replace("{latitude}", Math.Round(encounter.Pokemon.Latitude, 5).ToString()); link = link.Replace("{longitude}", Math.Round(encounter.Pokemon.Longitude, 5).ToString()); link = link.Replace("{encounterId}", encounter.Pokemon.EncounterId.ToString()); return(link); }
private void EncounterConsumer() { while (true) { List <EncounterOutProto> encounterList = new List <EncounterOutProto>(); if (ConfigurationManager.Shared.Config.MySql.Enabled && ConfigurationManager.Shared.Config.Encounter.SaveToDatabase) { using (var context = new MySQLContext()) { while (blockingEncounterQueue.Count > 0) { EncounterOutProto encounter = blockingEncounterQueue.Take(); if (alreadySendEncounters.ContainsKey(encounter.Pokemon.EncounterId)) { continue; } lock (lockObj) { alreadySendEncounters.Add(encounter.Pokemon.EncounterId, DateTime.Now); } encounterList.Add(encounter); connectionManager.AddEncounterToDatabase(encounter, context); } context.SaveChanges(); } } else { while (blockingEncounterQueue.Count > 0) { EncounterOutProto encounter = blockingEncounterQueue.Take(); if (alreadySendEncounters.ContainsKey(encounter.Pokemon.EncounterId)) { continue; } lock (lockObj) { alreadySendEncounters.Add(encounter.Pokemon.EncounterId, DateTime.Now); } encounterList.Add(encounter); } } if (encounterList.Count > 0) { ConfigurationManager.Shared.Config.Encounter.DiscordWebhooks.ForEach(hook => SendDiscordWebhooks(hook, encounterList)); Thread.Sleep(3000); } Thread.Sleep(1000); } }
public void AddEncounterToDatabase(EncounterOutProto encounterProto, MySQLContext context) { if (context.Encounters.Where(e => e.EncounterId == encounterProto.Pokemon.EncounterId).FirstOrDefault() != null) { return; } Encounter encounter = new Encounter(); encounter.EncounterId = encounterProto.Pokemon.EncounterId; encounter.PokemonName = encounterProto.Pokemon.Pokemon.PokemonId; encounter.Form = encounterProto.Pokemon.Pokemon.PokemonDisplay.Form; encounter.Stamina = encounterProto.Pokemon.Pokemon.IndividualStamina; encounter.Attack = encounterProto.Pokemon.Pokemon.IndividualAttack; encounter.Defense = encounterProto.Pokemon.Pokemon.IndividualDefense; encounter.Latitude = encounterProto.Pokemon.Latitude; encounter.Longitude = encounterProto.Pokemon.Longitude; encounter.timestamp = DateTime.UtcNow; context.Encounters.Add(encounter); }
public void AddEncounter(EncounterOutProto encounter, Payload payload) { using (var context = new RocketMapContext()) { long spawnpointId = Convert.ToInt64(encounter.Pokemon.SpawnPointId, 16); Spawnpoint spawnpoint = context.Spawnpoints.FromSqlInterpolated($"SELECT spawnpoint, spawndef, calc_endminsec FROM trs_spawn WHERE spawnpoint={spawnpointId}").FirstOrDefault(); DateTime disappearTime = getDespawnTime(spawnpoint, encounter.Pokemon.LastModifiedMs, encounter.Pokemon.TimeTillHiddenMs, payload.timestamp); String query = "INSERT INTO pokemon (encounter_id, spawnpoint_id, pokemon_id, latitude, longitude, disappear_time, " + "individual_attack, individual_defense, individual_stamina, move_1, move_2, cp, cp_multiplier, " + "weight, height, gender, catch_prob_1, catch_prob_2, catch_prob_3, rating_attack, rating_defense, " + "weather_boosted_condition, last_modified, costume, form, seen_type) " + "VALUES ({0}, {1}, {2}, {3}, {4}, \"{5}\", {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, " + "{20}, {21}, \"{22}\", {23}, {24}, \"{25}\") " + "ON DUPLICATE KEY UPDATE last_modified=VALUES(last_modified), disappear_time=VALUES(disappear_time), " + "spawnpoint_id=VALUES(spawnpoint_id), pokemon_id=VALUES(pokemon_id), latitude=VALUES(latitude), " + "longitude=VALUES(longitude), gender=VALUES(gender), costume=VALUES(costume), form=VALUES(form), " + "weather_boosted_condition=VALUES(weather_boosted_condition), fort_id=NULL, cell_id=NULL, " + "seen_type=IF(seen_type='encounter','encounter',VALUES(seen_type))"; query = String.Format(query, encounter.Pokemon.EncounterId, spawnpointId, (int)encounter.Pokemon.Pokemon.PokemonId, encounter.Pokemon.Latitude, encounter.Pokemon.Longitude, ToMySQLDateTime(disappearTime), encounter.Pokemon.Pokemon.IndividualAttack, encounter.Pokemon.Pokemon.IndividualDefense, encounter.Pokemon.Pokemon.IndividualStamina, (int)encounter.Pokemon.Pokemon.Move1, (int)encounter.Pokemon.Pokemon.Move2, encounter.Pokemon.Pokemon.Cp, encounter.Pokemon.Pokemon.CpMultiplier, encounter.Pokemon.Pokemon.WeightKg, encounter.Pokemon.Pokemon.HeightM, (int)encounter.Pokemon.Pokemon.PokemonDisplay.Gender, encounter.CaptureProbability.CaptureProbability[0], encounter.CaptureProbability.CaptureProbability[1], encounter.CaptureProbability.CaptureProbability[2], "\"\"", "\"\"", (int)encounter.Pokemon.Pokemon.PokemonDisplay.WeatherBoostedCondition, UnixTimeStampToDateTime(encounter.Pokemon.LastModifiedMs).ToString("yyyy-MM-dd HH:mm:ss"), (int)encounter.Pokemon.Pokemon.PokemonDisplay.Costume, (int)encounter.Pokemon.Pokemon.PokemonDisplay.Form, SeenType.wild.ToString("g")); try { context.Database.ExecuteSqlRaw(query); } catch (Exception e) { Log.Information(e.Message); Log.Information(e.StackTrace); Log.Information($"Object: {JsonSerializer.Serialize(encounter)} \n Query: {query}"); } } }
public async Task AddEncounter(EncounterOutProto encounter, string username) { var pokemonId = (uint)encounter.Pokemon.Pokemon.PokemonId; var cp = (ushort?)encounter.Pokemon.Pokemon.Cp; var move1 = (uint?)encounter.Pokemon.Pokemon.Move1; var move2 = (uint?)encounter.Pokemon.Pokemon.Move2; var size = (double?)encounter.Pokemon.Pokemon.HeightM; var weight = (double?)encounter.Pokemon.Pokemon.WeightKg; var atkIV = (ushort?)encounter.Pokemon.Pokemon.IndividualAttack; var defIV = (ushort?)encounter.Pokemon.Pokemon.IndividualDefense; var staIV = (ushort?)encounter.Pokemon.Pokemon.IndividualStamina; var costume = (ushort)encounter.Pokemon.Pokemon.PokemonDisplay.Costume; var form = (ushort?)encounter.Pokemon.Pokemon.PokemonDisplay.Form; var gender = (ushort)encounter.Pokemon.Pokemon.PokemonDisplay.Gender; if (PokemonId != pokemonId || CP != cp || Move1 != move1 || Move2 != move2 || Size != size || Weight != weight || AttackIV != atkIV || DefenseIV != defIV || StaminaIV != staIV || Costume != costume || Form != form || Gender != gender) { HasChanges = true; _hasIvChanges = true; } PokemonId = pokemonId; CP = cp; Move1 = move1; Move2 = move2; Size = size; Weight = weight; AttackIV = atkIV; DefenseIV = defIV; StaminaIV = staIV; Costume = costume; Form = form; Gender = gender; IsShiny = encounter.Pokemon.Pokemon.PokemonDisplay.Shiny; Username = username; if (_hasIvChanges) { var cpMultiplier = encounter.Pokemon.Pokemon.CpMultiplier; ushort level; if (cpMultiplier < 0.734) { level = (ushort)Math.Round( (58.35178527 * cpMultiplier * cpMultiplier) - (2.838007664 * cpMultiplier) + 0.8539209906 ); } else { level = (ushort)Math.Round((171.0112688 * cpMultiplier) - 95.20425243); } Level = level; IsDitto = IsDittoDisguised(pokemonId, level, Weather, AttackIV ?? 0, DefenseIV ?? 0, StaminaIV ?? 0); if (IsDitto) { ConsoleExt.WriteInfo($"[Pokemon] Pokemon {Id} Ditto found, disguised as {PokemonId}"); SetDittoAttributes(PokemonId); } if (AttackIV != null) { await SetPvpRankings().ConfigureAwait(false); } SpawnId = Convert.ToUInt64(encounter.Pokemon.SpawnPointId, 16); var timestampMs = DateTime.UtcNow.ToTotalSeconds(); await HandleSpawnpoint(encounter.Pokemon.TimeTillHiddenMs, timestampMs).ConfigureAwait(false); Updated = DateTime.UtcNow.ToTotalSeconds(); Changed = Updated; if (FirstSeenTimestamp == 0) { FirstSeenTimestamp = Updated; } } await Task.CompletedTask.ConfigureAwait(false); }