mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-13 09:07:19 +00:00
Compare commits
1 Commits
feature/cr
...
hermensbas
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
284e8c17b5 |
26
README.md
26
README.md
@@ -2,8 +2,6 @@
|
||||
<a href="https://github.com/liyunfan1223/mod-playerbots/blob/master/README.md">English</a>
|
||||
|
|
||||
<a href="https://github.com/liyunfan1223/mod-playerbots/blob/master/README_CN.md">中文</a>
|
||||
|
|
||||
<a href="https://github.com/brighton-chi/mod-playerbots/blob/readme/README_ES.md">Español</a>
|
||||
</p>
|
||||
|
||||
|
||||
@@ -18,25 +16,23 @@
|
||||
</div>
|
||||
|
||||
# Playerbots Module
|
||||
`mod-playerbots` is an [AzerothCore](https://www.azerothcore.org/) module that adds player-like bots to a server. The project is based off [IKE3's Playerbots](https://github.com/ike3/mangosbot) and requires a custom branch of AzerothCore to compile and run: [liyunfan1223/azerothcore-wotlk/tree/Playerbot](https://github.com/liyunfan1223/azerothcore-wotlk/tree/Playerbot).
|
||||
`mod-playerbots` is an [AzerothCore](https://www.azerothcore.org/) module that adds player-like bots to a server. The project is based off [IKE3's Playerbots](https://github.com/ike3/mangosbot). Features include:
|
||||
|
||||
Features include:
|
||||
|
||||
- The ability to log in alt characters as bots, allowing players to interact with their other characters, form parties, level up, and more;
|
||||
- Random bots that wander through the world, complete quests, and otherwise behave like players, simulating the MMO experience;
|
||||
- Bots capable of running most raids and battlegrounds;
|
||||
- Bots that utilize real player data, allowing players to interact with their other characters, form parties, level up, and more;
|
||||
- Random bots that wander through the world and behave like players, simulating the MMO experience;
|
||||
- Bots capable of running raids and battlegrounds;
|
||||
- Highly configurable settings to define how bots behave;
|
||||
- Excellent performance, even when running thousands of bots.
|
||||
|
||||
**This project is still under development**. If you encounter any errors or experience crashes, we kindly request that you [report them as GitHub issues](https://github.com/liyunfan1223/mod-playerbots/issues/new?template=bug_report.md). Your valuable feedback will help us improve this project collaboratively.
|
||||
|
||||
`mod-playerbots` has a **[Discord server](https://discord.gg/NQm5QShwf9)** where you can discuss the project, ask questions, and get involved in the community!
|
||||
**Playerbots Module** has a **[Discord server](https://discord.gg/NQm5QShwf9)** where you can discuss the project.
|
||||
|
||||
## Installation
|
||||
|
||||
### Classic Installation
|
||||
|
||||
As noted above, `mod-playerbots` requires a custom branch of AzerothCore: [liyunfan1223/azerothcore-wotlk/tree/Playerbot](https://github.com/liyunfan1223/azerothcore-wotlk/tree/Playerbot). To install the module, simply run:
|
||||
`mod-playerbots` requires a custom branch of AzerothCore to work: [liyunfan1223/azerothcore-wotlk/tree/Playerbot](https://github.com/liyunfan1223/azerothcore-wotlk/tree/Playerbot). To install the module, simply run:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/liyunfan1223/azerothcore-wotlk.git --branch=Playerbot
|
||||
@@ -85,21 +81,21 @@ Use `docker compose up -d --build` to build and run the server. For more informa
|
||||
|
||||
## Documentation
|
||||
|
||||
The [Playerbots Wiki](https://github.com/liyunfan1223/mod-playerbots/wiki) contains an extensive overview of addons, commands, raids with programmed bot strategies, and recommended performance configurations. Please note that documentation may be incomplete or out-of-date in some sections. Contributions are welcome.
|
||||
The [Playerbots Wiki](https://github.com/liyunfan1223/mod-playerbots/wiki) contains an extensive overview of addons, commands, and recommended configurations. Please note that documentation may be incomplete or out-of-date in some sections. Contributions are welcome.
|
||||
|
||||
## Frequently Asked Questions
|
||||
|
||||
- **Why aren't my bots casting spells?** Please make sure that the necessary English DBC file (enUS) is present.
|
||||
- **What platforms are supported?** We support Ubuntu, Windows, and macOS. Other Linux distros may work, but will not receive support.
|
||||
- **Why isn't my source compiling?** Please ensure that you are compiling with the required [custom branch of AzerothCore](https://github.com/liyunfan1223/azerothcore-wotlk/tree/Playerbot). Additionally, please [check the build status of our CI](https://github.com/liyunfan1223/mod-playerbots/actions). If the latest build is failing, rever to the last successful commit until we address the issue.
|
||||
- **Why isn't my source compiling?** Please [check the build status of our CI](https://github.com/liyunfan1223/mod-playerbots/actions). If the latest build is failing, rever to the last successful commit until we address the issue.
|
||||
|
||||
## Addons
|
||||
|
||||
Typically, bots are controlled via chat commands. For larger bot groups, this can be unwieldy. As an alternative, community members have developed client Add-Ons to allow controlling bots through the in-game UI. We recommend you check out their projects:
|
||||
|
||||
- [Multibot](https://github.com/Macx-Lio/MultiBot) (by Macx-Lio), which includes English, Chinese, French, German, Korean, Russian, and Spanish support [note: active development is temporarily continuing on a fork in Macx-Lio's absence (https://github.com/Wishmaster117/MultiBot)]
|
||||
- [Unbot Addon (zh)](https://github.com/liyunfan1223/unbot-addon) (Chinese version by Liyunfan) [note: no longer under active development]
|
||||
- [Unbot Addon (en)](https://github.com/noisiver/unbot-addon/tree/english) (English version translated by @Revision) [note: no longer under active development]
|
||||
- [Multibot](https://github.com/Macx-Lio/MultiBot) (by Macx-Lio)
|
||||
- [Unbot Addon (zh)](https://github.com/liyunfan1223/unbot-addon) (Chinese version by Liyunfan)
|
||||
- [Unbot Addon (en)](https://github.com/noisiver/unbot-addon/tree/english) (English version translated by @Revision)
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
# THRESHOLDS
|
||||
# QUESTS
|
||||
# COMBAT
|
||||
# PALADIN BUFFS STRATEGIES
|
||||
# CHEATS
|
||||
# SPELLS
|
||||
# FLIGHTPATH
|
||||
@@ -33,7 +32,6 @@
|
||||
# ACTIVITIES
|
||||
# SPELLS
|
||||
# STRATEGIES
|
||||
# RPG STRATEGY
|
||||
# TELEPORTS
|
||||
# BATTLEGROUND & ARENA & PVP
|
||||
# INTERVALS
|
||||
@@ -159,9 +157,6 @@ AiPlayerbot.RandomBotGuildNearby = 0
|
||||
# Number of guilds created by randombots
|
||||
AiPlayerbot.RandomBotGuildCount = 20
|
||||
|
||||
# Maximum number of members in randombot guilds (minimum is hardcoded to 10)
|
||||
AiPlayerbot.RandomBotGuildSizeMax = 15
|
||||
|
||||
# Delete all randombot guilds if set to 1
|
||||
AiPlayerbot.DeleteRandomBotGuilds = 0
|
||||
|
||||
@@ -178,6 +173,10 @@ AiPlayerbot.SummonWhenGroup = 1
|
||||
# Selfbot permission level (0 = disabled, 1 = GM only (default), 2 = all players, 3 = activate on login)
|
||||
AiPlayerbot.SelfBotLevel = 1
|
||||
|
||||
# Give free food to bots
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.FreeFood = 1
|
||||
|
||||
# Non-GM player can only use init=auto to initialize bots based on their own level and gearscore
|
||||
# Default: 0 (non-GM player can use any intialization commands)
|
||||
AiPlayerbot.AutoInitOnly = 0
|
||||
@@ -443,7 +442,7 @@ AiPlayerbot.AutoAvoidAoe = 1
|
||||
AiPlayerbot.MaxAoeAvoidRadius = 15.0
|
||||
|
||||
# A whitelist of aoe spell IDs that should not be avoided
|
||||
AiPlayerbot.AoeAvoidSpellWhitelist = 50759,57491,13810,29946
|
||||
AiPlayerbot.AoeAvoidSpellWhitelist = 50759,57491,13810
|
||||
|
||||
# Enable healer bot save mana strategy
|
||||
# Default: 1 (enabled)
|
||||
@@ -461,24 +460,6 @@ AiPlayerbot.FleeingEnabled = 1
|
||||
#
|
||||
####################################################################################################
|
||||
|
||||
####################################################################################################
|
||||
# PALADIN BUFFS STRATEGIES
|
||||
#
|
||||
#
|
||||
|
||||
# Min group size to use Greater buffs (Paladin, Mage, Druid)
|
||||
# Default: 3
|
||||
AiPlayerbot.MinBotsForGreaterBuff = 3
|
||||
|
||||
# Cooldown (seconds) between reagent-missing RP warnings, per bot & per buff
|
||||
# Default: 30
|
||||
AiPlayerbot.RPWarningCooldown = 30
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
####################################################################################################
|
||||
|
||||
####################################################################################################
|
||||
# CHEATS
|
||||
#
|
||||
@@ -488,34 +469,6 @@ AiPlayerbot.RPWarningCooldown = 30
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.MaintenanceCommand = 1
|
||||
|
||||
# Enable/Disable specific maintenance command functionality for alt bots
|
||||
# Disable to prevent players from giving free bags, spells, skill levels etc to their alt bots
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.AltMaintenanceAmmo = 1
|
||||
AiPlayerbot.AltMaintenanceFood = 1
|
||||
AiPlayerbot.AltMaintenanceReagents = 1
|
||||
AiPlayerbot.AltMaintenanceConsumables = 1
|
||||
AiPlayerbot.AltMaintenancePotions = 1
|
||||
|
||||
AiPlayerbot.AltMaintenanceBags = 1
|
||||
AiPlayerbot.AltMaintenanceMounts = 1
|
||||
AiPlayerbot.AltMaintenanceSkills = 1
|
||||
|
||||
AiPlayerbot.AltMaintenanceClassSpells = 1
|
||||
AiPlayerbot.AltMaintenanceAvailableSpells = 1
|
||||
AiPlayerbot.AltMaintenanceSpecialSpells = 1
|
||||
AiPlayerbot.AltMaintenanceTalentTree = 1
|
||||
AiPlayerbot.AltMaintenanceGlyphs = 1
|
||||
AiPlayerbot.AltMaintenanceGemsEnchants = 1
|
||||
|
||||
AiPlayerbot.AltMaintenancePet = 1
|
||||
AiPlayerbot.AltMaintenancePetTalents = 1
|
||||
|
||||
AiPlayerbot.AltMaintenanceReputation = 1
|
||||
AiPlayerbot.AltMaintenanceAttunementQuests = 1
|
||||
AiPlayerbot.AltMaintenanceKeyring = 1
|
||||
|
||||
|
||||
# Enable/Disable autogear command, which automatically upgrades bots' gear; the quality is limited by AutoGearQualityLimit and AutoGearScoreLimit
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.AutoGearCommand = 1
|
||||
@@ -537,21 +490,19 @@ AiPlayerbot.AutoGearQualityLimit = 3
|
||||
# Max iLVL Phase 1(Kara, Gruul, Mag) = 125 | Phase 1.5(ZA) = 138 | Phase 2(SC, TK) = 141 | Phase 3(Hyjal, BT) = 156 | Phase 4(Sunwell) = 164
|
||||
# Wotlk
|
||||
# Max iLVL Tier 7(10/25) = 200/213 | Tier 8(10/25) = 225/232 | Tier 9(10/25) = 232/245 | Tier 10(10/25/HC) = 251/264/290
|
||||
# Max iLVL Phase 1(Naxx) = 224 | Phase 2(Ulduar) = 245 | Phase 3(ToC) = 258 | Phase 4(ICC) = 290
|
||||
# Max iLVL Phase 1(Naxx) = 224 | Phase 2(Ulduar) = 245 | Phase 3(ToC) = 258 | Phase 4(ICC) = 290
|
||||
# Default: 0 (no limit)
|
||||
AiPlayerbot.AutoGearScoreLimit = 0
|
||||
|
||||
# Enable/Disable cheats for bots
|
||||
# "food" (bots eat or drink without using food or drinks from their inventory)
|
||||
# "gold" (bots have infinite gold)
|
||||
# "health" (bots immediately regenerate lost health)
|
||||
# "health" (bots have infinite health)
|
||||
# "mana" (bots have infinite mana)
|
||||
# "power" (bots have infinite energy, rage, and runic power)
|
||||
# "taxi" (bots may use all flight paths, though they will not actually learn them)
|
||||
# "raid" (bots use cheats implemented into raid strategies)
|
||||
# To use multiple cheats, separate them by commas below (e.g., to enable all, use "gold,health,mana,power,raid,taxi")
|
||||
# Default: food, taxi, and raid are enabled
|
||||
AiPlayerbot.BotCheats = "food,taxi,raid"
|
||||
# "taxi" (bots may use all flight paths, though they will not actually learn them)
|
||||
# To use multiple cheats, separate them by commas below (e.g., to enable all, use "gold,health,mana,power,taxi")
|
||||
# Default: taxi is enabled
|
||||
AiPlayerbot.BotCheats = "taxi"
|
||||
|
||||
#
|
||||
#
|
||||
@@ -637,9 +588,6 @@ AiPlayerbot.LimitTalentsExpansion = 0
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.EnableRandomBotTrading = 1
|
||||
|
||||
# Configure message prefixes which will be excluded in analysis in trade action to open trade window
|
||||
AiPlayerbot.TradeActionExcludedPrefixes = "RPLL_H_,DBMv4,{звезда} Questie,{rt1} Questie"
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
@@ -701,20 +649,16 @@ AiPlayerbot.RandomGearQualityLimit = 3
|
||||
# Max iLVL Phase 1(Kara, Gruul, Mag) = 125 | Phase 1.5(ZA) = 138 | Phase 2(SC, TK) = 141 | Phase 3(Hyjal, BT) = 156 | Phase 4(Sunwell) = 164
|
||||
# Wotlk
|
||||
# Max iLVL Tier 7(10/25) = 200/213 | Tier 8(10/25) = 225/232 | Tier 9(10/25) = 232/245 | Tier 10(10/25/HC) = 251/264/290
|
||||
# Max iLVL Phase 1(Naxx) = 224 | Phase 2(Ulduar) = 245 | Phase 3(ToC) = 258 | Phase 4(ICC) = 290
|
||||
# Max iLVL Phase 1(Naxx) = 224 | Phase 2(Ulduar) = 245 | Phase 3(ToC) = 258 | Phase 4(ICC) = 290
|
||||
# Default: 0 (no limit)
|
||||
AiPlayerbot.RandomGearScoreLimit = 0
|
||||
|
||||
# If disabled, random bots can only upgrade equipment through looting and quests
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.IncrementalGearInit = 1
|
||||
|
||||
# Set minimum level of bots that will enchant their equipment (if greater than RandomBotMaxlevel, bots will not enchant equipment)
|
||||
# Set minimum level of bots that will enchant their equipment (Maxlevel + 1 to disable)
|
||||
# Default: 60
|
||||
AiPlayerbot.MinEnchantingBotLevel = 60
|
||||
|
||||
# Enable expansion limitation for bot enchants
|
||||
# If enabled, bots will not use TBC enchants until level 61 or WotLK enchants until level 71
|
||||
# If enabled, bots will not use TBC enchants until level 61 or WotLK enchanges until level 71
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.LimitEnchantExpansion = 1
|
||||
|
||||
@@ -746,20 +690,6 @@ AiPlayerbot.AutoUpgradeEquip = 1
|
||||
# Default: 0 (disabled)
|
||||
AiPlayerbot.HunterWolfPet = 0
|
||||
|
||||
# Default pet stance when a bot summons a pet
|
||||
# 0 = Passive, 1 = Defensive, 2 = Aggressive
|
||||
# Default: 1 (Defensive)
|
||||
AiPlayerbot.DefaultPetStance = 1
|
||||
|
||||
# Enable/disable debug messages about pet commands
|
||||
# 0 = Disabled, 1 = Enabled
|
||||
# Default = 0 (disabled)
|
||||
AiPlayerbot.PetChatCommandDebug = 0
|
||||
|
||||
# Prohibit hunter bots from creating pets with any family ID listed below in ExcludedHunterPetFamilies
|
||||
# See the creature_family database table for all pet families by ID (note: ID for spiders is 3)
|
||||
AiPlayerbot.ExcludedHunterPetFamilies = ""
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
@@ -810,7 +740,7 @@ AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||||
#
|
||||
|
||||
# Quest that will be completed and rewarded for all randombots
|
||||
AiPlayerbot.RandomBotQuestIds = "7848,3802,5505,6502,7761,10277,10285,11492,13188,13189,24499,24511,24710,24712"
|
||||
AiPlayerbot.RandomBotQuestIds = "7848,3802,5505,6502,7761,10277,10285,11492,24499,24511,24710,24712"
|
||||
|
||||
# Randombots will group with nearby randombots to do shared quests
|
||||
AiPlayerbot.RandomBotGroupNearby = 0
|
||||
@@ -819,6 +749,11 @@ AiPlayerbot.RandomBotGroupNearby = 0
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.AutoDoQuests = 1
|
||||
|
||||
# Randombots will behave more like real players (experimental)
|
||||
# This option will override AiPlayerbot.AutoDoQuests, RandomBotTeleLowerLevel, and RandomBotTeleHigherLevel
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.EnableNewRpgStrategy = 1
|
||||
|
||||
# Quest items to keep in bots' inventories (do not destroy)
|
||||
AiPlayerbot.RandomBotQuestItems = "5175,5176,5177,5178,6948,11000,12382,13704,16309"
|
||||
|
||||
@@ -861,58 +796,51 @@ AiPlayerbot.OpenGoSpell = 6477
|
||||
#
|
||||
|
||||
# Additional randombot strategies
|
||||
# Strategies added here are applied to all randombots, in addition (or subtraction) to spec/role-based default strategies. These rules are processed after the defaults.
|
||||
# Example: "+threat,-potions"
|
||||
AiPlayerbot.RandomBotCombatStrategies = ""
|
||||
# Strategies added here are applied to all randombots, in addition (or subtraction) to spec-based default strategies. These rules are processed after the defaults.
|
||||
AiPlayerbot.RandomBotCombatStrategies = "+dps,+dps assist,-threat"
|
||||
AiPlayerbot.RandomBotNonCombatStrategies = ""
|
||||
|
||||
# Additional altbot strategies
|
||||
# Strategies added here are applied to all altbots, in addition (or subtraction) to spec/role-based default strategies. These rules are processed after the defaults.
|
||||
# Strategies added here are applied to all altbots, in addition (or subtraction) to spec-based default strategies. These rules are processed after the defaults.
|
||||
AiPlayerbot.CombatStrategies = ""
|
||||
AiPlayerbot.NonCombatStrategies = ""
|
||||
|
||||
# Remove "healer dps" strategy on specified maps.
|
||||
# Default: 0 (disabled)
|
||||
AiPlayerbot.HealerDPSMapRestriction = 0
|
||||
|
||||
# List of Map IDs where "healer dps" strategy will be removed if AiPlayerbot.HealerDPSMapRestriction is enabled
|
||||
# Default: (Dungeon and Raid maps) "33,34,36,43,47,48,70,90,109,129,209,229,230,329,349,389,429,1001,1004,1007,269,540,542,543,545,546,547,552,553,554,555,556,557,558,560,585,574,575,576,578,595,599,600,601,602,604,608,619,632,650,658,668,409,469,509,531,532,534,544,548,550,564,565,580,249,533,603,615,616,624,631,649,724"
|
||||
AiPlayerbot.RestrictedHealerDPSMaps = "33,34,36,43,47,48,70,90,109,129,209,229,230,329,349,389,429,1001,1004,1007,269,540,542,543,545,546,547,552,553,554,555,556,557,558,560,585,574,575,576,578,595,599,600,601,602,604,608,619,632,650,658,668,409,469,509,531,532,534,544,548,550,564,565,580,249,533,603,615,616,624,631,649,724"
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
####################################################################################################
|
||||
|
||||
####################################################################################################
|
||||
# RPG STRATEGY
|
||||
# TELEPORTS
|
||||
#
|
||||
#
|
||||
|
||||
# Randombots will behave more like real players (experimental)
|
||||
# This option will override AiPlayerbot.AutoDoQuests, RandomBotTeleLowerLevel, and RandomBotTeleHigherLevel
|
||||
# Maps where bots can be teleported to
|
||||
AiPlayerbot.RandomBotMaps = 0,1,530,571
|
||||
|
||||
# Probabilty bots teleport to banker (city)
|
||||
# Default: 0.25
|
||||
AiPlayerbot.ProbTeleToBankers = 0.25
|
||||
|
||||
# How far randombots are teleported after death
|
||||
AiPlayerbot.RandomBotTeleportDistance = 100
|
||||
|
||||
# How many levels below the lowest-level creature in a zone, can a bot be
|
||||
# This will have no effect if AiPlayerbot.EnableNewRpgStrategy is enabled
|
||||
# Default: 1 (randombot will leave if they are more than 1 level lower)
|
||||
AiPlayerbot.RandomBotTeleLowerLevel = 1
|
||||
|
||||
# How many levels above the highest-level creature in a zone, can a bot be
|
||||
# This will have no effect if AiPlayerbot.EnableNewRpgStrategy is enabled
|
||||
# Default: 3 (randombot will leave if they are more than 3 levels higher)
|
||||
AiPlayerbot.RandomBotTeleHigherLevel = 3
|
||||
|
||||
# Bots automatically teleport to another place for leveling on levelup
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.EnableNewRpgStrategy = 1
|
||||
|
||||
# Control probability weights for RPG status of bots. Takes effect only when the status meets its premise.
|
||||
# Sum of weights need not be 100. Set to 0 to disable the status.
|
||||
#
|
||||
# WanderRandom (Default: 15 Move randomly nearby to find and kill mobs)
|
||||
# WanderNpc (Default: 20 Randomly interact with nearby NPCs)
|
||||
# GoGrind (Default: 15 Go to nearby level-appropriate locations to grind for killing mobs)
|
||||
# GoCamp (Default: 10 Return to a nearby camp depending on innkeeper/flightmaster)
|
||||
# DoQuest (Default: 60 Select quest from the quest log and head to the location to attempt completion)
|
||||
# TravelFlight (Default: 15 Go to the nearest flightmaster and fly to a level-appropriate area)
|
||||
# Rest (Default: 5 Take a break for a while and do nothing)
|
||||
AiPlayerbot.RpgStatusProbWeight.WanderRandom = 15
|
||||
AiPlayerbot.RpgStatusProbWeight.WanderNpc = 20
|
||||
AiPlayerbot.RpgStatusProbWeight.GoGrind = 15
|
||||
AiPlayerbot.RpgStatusProbWeight.GoCamp = 10
|
||||
AiPlayerbot.RpgStatusProbWeight.DoQuest = 60
|
||||
AiPlayerbot.RpgStatusProbWeight.TravelFlight = 15
|
||||
AiPlayerbot.RpgStatusProbWeight.Rest = 5
|
||||
AiPlayerbot.AutoTeleportForLevel = 1
|
||||
|
||||
# Bots' minimum and maximum level when teleporting in and out of a zone, according to the new RPG strategy
|
||||
# Requires EnableNewRpgStrategy enabled
|
||||
# Format: AiPlayerbot.ZoneBracket.zoneID = minLevel,maxLevel
|
||||
#
|
||||
# Classic WoW - Low-level zones:
|
||||
@@ -1052,54 +980,6 @@ AiPlayerbot.ZoneBracket.4197 = 79,80
|
||||
#
|
||||
####################################################################################################
|
||||
|
||||
####################################################################################################
|
||||
# TELEPORTS
|
||||
#
|
||||
#
|
||||
|
||||
# Maps where bots can be teleported to
|
||||
AiPlayerbot.RandomBotMaps = 0,1,530,571
|
||||
|
||||
# Probabilty bots teleport to banker (city)
|
||||
# Default: 0.25
|
||||
AiPlayerbot.ProbTeleToBankers = 0.25
|
||||
|
||||
# Control probability weights for bots teleporting to Capital city bankers
|
||||
# Sum of weights need not be 100. Set to 0 to disable teleporting to the city.
|
||||
AiPlayerbot.EnableWeightTeleToCityBankers = 1
|
||||
AiPlayerbot.TeleToStormwindWeight = 2
|
||||
AiPlayerbot.TeleToIronforgeWeight = 1
|
||||
AiPlayerbot.TeleToDarnassusWeight = 1
|
||||
AiPlayerbot.TeleToExodarWeight = 1
|
||||
AiPlayerbot.TeleToOrgrimmarWeight = 2
|
||||
AiPlayerbot.TeleToUndercityWeight = 1
|
||||
AiPlayerbot.TeleToThunderBluffWeight = 1
|
||||
AiPlayerbot.TeleToSilvermoonCityWeight = 1
|
||||
AiPlayerbot.TeleToShattrathCityWeight = 1
|
||||
AiPlayerbot.TeleToDalaranWeight = 1
|
||||
|
||||
# How far randombots are teleported after death
|
||||
AiPlayerbot.RandomBotTeleportDistance = 100
|
||||
|
||||
# How many levels below the lowest-level creature in a zone, can a bot be
|
||||
# This will have no effect if AiPlayerbot.EnableNewRpgStrategy is enabled
|
||||
# Default: 1 (randombot will leave if they are more than 1 level lower)
|
||||
AiPlayerbot.RandomBotTeleLowerLevel = 1
|
||||
|
||||
# How many levels above the highest-level creature in a zone, can a bot be
|
||||
# This will have no effect if AiPlayerbot.EnableNewRpgStrategy is enabled
|
||||
# Default: 3 (randombot will leave if they are more than 3 levels higher)
|
||||
AiPlayerbot.RandomBotTeleHigherLevel = 3
|
||||
|
||||
# Bots automatically teleport to another place for leveling on levelup
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.AutoTeleportForLevel = 1
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
####################################################################################################
|
||||
|
||||
####################################################################################################
|
||||
# BATTLEGROUNDS & ARENAS & PVP
|
||||
#
|
||||
@@ -1179,10 +1059,10 @@ AiPlayerbot.RandomBotArenaTeamMinRating = 1000
|
||||
AiPlayerbot.DeleteRandomBotArenaTeams = 0
|
||||
|
||||
# PvP Restricted Zones (bots don't pvp)
|
||||
AiPlayerbot.PvpProhibitedZoneIds = "2255,656,2361,2362,2363,976,35,2268,3425,392,541,1446,3828,3712,3738,3565,3539,3623,4152,3988,4658,4284,4418,4436,4275,4323,4395,3703,4298,3951"
|
||||
AiPlayerbot.PvpProhibitedZoneIds = "2255,656,2361,2362,2363,976,35,2268,3425,392,541,1446,3828,3712,3738,3565,3539,3623,4152,3988,4658,4284,4418,4436,4275,4323,4395,3703,4298,139"
|
||||
|
||||
# PvP Restricted Areas (bots don't pvp)
|
||||
AiPlayerbot.PvpProhibitedAreaIds = "976,35,392,2268,4161,4010,4317,4312,3649,3887,3958,3724,4080,3938,3754"
|
||||
AiPlayerbot.PvpProhibitedAreaIds = "976,35,392,2268,4161,4010,4317,4312,3649,3887,3958,3724,4080"
|
||||
|
||||
# Improve reaction speeds in battlegrounds and arenas (may cause lag)
|
||||
AiPlayerbot.FastReactInBG = 1
|
||||
@@ -1256,18 +1136,6 @@ AiPlayerbot.PremadeSpecName.1.2 = prot pve
|
||||
AiPlayerbot.PremadeSpecGlyph.1.2 = 43424,43395,43425,43399,49084,45793
|
||||
AiPlayerbot.PremadeSpecLink.1.2.60 = --053351225000210521030113321
|
||||
AiPlayerbot.PremadeSpecLink.1.2.80 = 3500030023-301-053351225000210521030113321
|
||||
AiPlayerbot.PremadeSpecName.1.3 = arms pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.1.3 = 43417,43397,43423,43396,49084,43421
|
||||
AiPlayerbot.PremadeSpecLink.1.3.60 = 0320232023331100032212012221251
|
||||
AiPlayerbot.PremadeSpecLink.1.3.80 = 0320332023335100232212013231251-3250001
|
||||
AiPlayerbot.PremadeSpecName.1.4 = fury pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.1.4 = 43432,43397,43417,43395,43396,43418
|
||||
AiPlayerbot.PremadeSpecLink.1.4.60 = -325000131500212250120511351
|
||||
AiPlayerbot.PremadeSpecLink.1.4.80 = 03220300233-325000131500212250122511351
|
||||
AiPlayerbot.PremadeSpecName.1.5 = prot pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.1.5 = 43425,43397,43415,43396,49084,45792
|
||||
AiPlayerbot.PremadeSpecLink.1.5.60 = --250031220223012520332113321
|
||||
AiPlayerbot.PremadeSpecLink.1.5.80 = 0502300123-3-250031220223012521332113321
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1292,18 +1160,6 @@ AiPlayerbot.PremadeSpecGlyph.2.2 = 41092,43367,41099,43369,43365,43869
|
||||
AiPlayerbot.PremadeSpecLink.2.2.60 = --05230051203331302133231131
|
||||
AiPlayerbot.PremadeSpecLink.2.2.65 = -05-05230051203331302133231131
|
||||
AiPlayerbot.PremadeSpecLink.2.2.80 = 050501-05-05232051203331302133231331
|
||||
AiPlayerbot.PremadeSpecName.2.3 = holy pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.2.3 = 41110,43367,45746,43366,43365,45747
|
||||
AiPlayerbot.PremadeSpecLink.2.3.60 = 50332150300013050133215221
|
||||
AiPlayerbot.PremadeSpecLink.2.3.80 = 50332150300013050133315221-5032013122
|
||||
AiPlayerbot.PremadeSpecName.2.4 = prot pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.2.4 = 41092,43369,41101,43368,43365,45745
|
||||
AiPlayerbot.PremadeSpecLink.2.4.60 = -15320130223122311323311321
|
||||
AiPlayerbot.PremadeSpecLink.2.4.80 = -15320130223122321333312321-052300502
|
||||
AiPlayerbot.PremadeSpecName.2.5 = ret pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.2.5 = 41095,43369,41102,43368,43365,45747
|
||||
AiPlayerbot.PremadeSpecLink.2.5.60 = --05230250203331222133201321
|
||||
AiPlayerbot.PremadeSpecLink.2.5.80 = -1532013022-05230250203331322133201321
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1316,31 +1172,17 @@ AiPlayerbot.PremadeSpecLink.2.5.80 = -1532013022-05230250203331322133201321
|
||||
#
|
||||
|
||||
AiPlayerbot.PremadeSpecName.3.0 = bm pve
|
||||
AiPlayerbot.PremadeSpecGlyph.3.0 = 42912,43350,42902,43351,43338,42914
|
||||
AiPlayerbot.PremadeSpecLink.3.0.40 = 512002015051122301
|
||||
AiPlayerbot.PremadeSpecLink.3.0.60 = 51200201505112233110531151
|
||||
AiPlayerbot.PremadeSpecLink.3.0.80 = 51200201505112243130531351-005305101
|
||||
AiPlayerbot.PremadeSpecGlyph.3.0 = 42912,43350,42902,43351,43338,45732
|
||||
AiPlayerbot.PremadeSpecLink.3.0.60 = 51200201505112243110531051
|
||||
AiPlayerbot.PremadeSpecLink.3.0.80 = 51200201505112243120531251-025305101
|
||||
AiPlayerbot.PremadeSpecName.3.1 = mm pve
|
||||
AiPlayerbot.PremadeSpecGlyph.3.1 = 42912,43350,45625,43351,43338,42914
|
||||
AiPlayerbot.PremadeSpecLink.3.1.60 = -035305101030013233115031151
|
||||
AiPlayerbot.PremadeSpecLink.3.1.80 = 502-035305101230013233135031351-5000002
|
||||
AiPlayerbot.PremadeSpecGlyph.3.1 = 42912,43350,42914,43351,43338,45732
|
||||
AiPlayerbot.PremadeSpecLink.3.1.60 = -025315101030013233125031051
|
||||
AiPlayerbot.PremadeSpecLink.3.1.80 = 502-025335101030013233135031351-5000002
|
||||
AiPlayerbot.PremadeSpecName.3.2 = surv pve
|
||||
AiPlayerbot.PremadeSpecGlyph.3.2 = 45733,43350,45731,43351,43338,45732
|
||||
AiPlayerbot.PremadeSpecGlyph.3.2 = 42912,43350,45731,43351,43338,45732
|
||||
AiPlayerbot.PremadeSpecLink.3.2.60 = --5000032500033330502135201311
|
||||
AiPlayerbot.PremadeSpecLink.3.2.80 = -005305101-5000032500033330532135301321
|
||||
AiPlayerbot.PremadeSpecName.3.3 = bm pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.3.3 = 42897,42900,42902,43356,43338,42900
|
||||
AiPlayerbot.PremadeSpecLink.3.3.60 = 05203201505012233100531151
|
||||
AiPlayerbot.PremadeSpecLink.3.3.80 = 05203201505012233100531351-005305101-03
|
||||
AiPlayerbot.PremadeSpecName.3.4 = mm pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.3.4 = 42912,43351,42897,43338,43356,42904
|
||||
AiPlayerbot.PremadeSpecLink.3.4.60 = -034305101030213231135031051
|
||||
AiPlayerbot.PremadeSpecLink.3.4.80 = -035305101030213233135031051-53013020102
|
||||
AiPlayerbot.PremadeSpecName.3.5 = surv pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.3.5 = 42912,43350,42904,43356,43338,45731
|
||||
AiPlayerbot.PremadeSpecLink.3.5.60 = --2300302410233030533135001031
|
||||
AiPlayerbot.PremadeSpecLink.3.5.80 = -005305201-2300302510233330533135001031
|
||||
|
||||
|
||||
# HUNTER PET
|
||||
#
|
||||
@@ -1376,18 +1218,6 @@ AiPlayerbot.PremadeSpecName.4.2 = subtlety pve
|
||||
AiPlayerbot.PremadeSpecGlyph.4.2 = 42967,43379,45764,43380,43378,45767
|
||||
AiPlayerbot.PremadeSpecLink.4.2.60 = --5022012030321121350115031151
|
||||
AiPlayerbot.PremadeSpecLink.4.2.80 = 30532010114--5022012030321121350115031151
|
||||
AiPlayerbot.PremadeSpecName.4.3 = as pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.4.3 = 42974,43380,45768,43379,43376,42971
|
||||
AiPlayerbot.PremadeSpecLink.4.3.60 = 005303103342102522103031--50002
|
||||
AiPlayerbot.PremadeSpecLink.4.3.80 = 005303103342102522103031-004-532023203000012
|
||||
AiPlayerbot.PremadeSpecName.4.4 = combat pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.4.4 = 42972,43380,45762,43376,43378,42971
|
||||
AiPlayerbot.PremadeSpecLink.4.4.60 = -3250002050225010223102321251
|
||||
AiPlayerbot.PremadeSpecLink.4.4.80 = 305120105-3250002050235010223102521251
|
||||
AiPlayerbot.PremadeSpecName.4.5 = subtlety pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.4.5 = 42968,43376,45764,43380,43379,42971
|
||||
AiPlayerbot.PremadeSpecLink.4.5.60 = --5120212030320121330133221251
|
||||
AiPlayerbot.PremadeSpecLink.4.5.80 = 3023031-3-5120212030320121350135231251
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1411,18 +1241,6 @@ AiPlayerbot.PremadeSpecName.5.2 = shadow pve
|
||||
AiPlayerbot.PremadeSpecGlyph.5.2 = 42406,43371,42407,43374,43342,42415
|
||||
AiPlayerbot.PremadeSpecLink.5.2.60 = --325003041203010323150301351
|
||||
AiPlayerbot.PremadeSpecLink.5.2.80 = 0503203--325023051223010323152301351
|
||||
AiPlayerbot.PremadeSpecName.5.3 = disc pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.5.3 = 42408,43371,45760,43370,43374,45756
|
||||
AiPlayerbot.PremadeSpecLink.5.3.60 = 5003203130320512201323031051
|
||||
AiPlayerbot.PremadeSpecLink.5.3.80 = 5003203130322512331013231151-23050113
|
||||
AiPlayerbot.PremadeSpecName.5.4 = holy pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.5.4 = 42411,43371,42408,43370,43374,45755
|
||||
AiPlayerbot.PremadeSpecLink.5.4.60 = -235501031000152430320031151
|
||||
AiPlayerbot.PremadeSpecLink.5.4.80 = 500320313-235501031000152530320031351
|
||||
AiPlayerbot.PremadeSpecName.5.5 = shadow pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.5.5 = 42407,43371,45753,43370,43374,42408
|
||||
AiPlayerbot.PremadeSpecLink.5.5.60 = --005323241223112003102311351
|
||||
AiPlayerbot.PremadeSpecLink.5.5.80 = 50332031003--005323241223112003102311351
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1450,19 +1268,6 @@ AiPlayerbot.PremadeSpecName.6.3 = double aura blood pve
|
||||
AiPlayerbot.PremadeSpecGlyph.6.3 = 45805,43673,43827,43544,43672,43554
|
||||
AiPlayerbot.PremadeSpecLink.6.3.60 = 005512153330030320102013-305
|
||||
AiPlayerbot.PremadeSpecLink.6.3.80 = 005512153330030320102013-3050505002023001-002
|
||||
AiPlayerbot.PremadeSpecName.6.4 = blood pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.6.4 = 43534,43535,45799,43673,43672,45805
|
||||
AiPlayerbot.PremadeSpecLink.6.4.60 = 2305021503003313201222101351
|
||||
AiPlayerbot.PremadeSpecLink.6.4.80 = 2305021503003313201222101351--032232300023
|
||||
AiPlayerbot.PremadeSpecName.6.5 = frost pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.6.5 = 43543,43539,45800,43673,43672,45806
|
||||
AiPlayerbot.PremadeSpecLink.6.5.60 = -32015351022203012001233101251
|
||||
AiPlayerbot.PremadeSpecLink.6.5.80 = 0055-32015351052203012001233131351-03
|
||||
AiPlayerbot.PremadeSpecName.6.6 = unholy pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.6.6 = 45804,43539,43549,43673,43672,45805
|
||||
AiPlayerbot.PremadeSpecLink.6.6.60 = --2301323301002152230101203103151
|
||||
AiPlayerbot.PremadeSpecLink.6.6.80 = -320050410002-2301323301002152230101203133151
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1479,26 +1284,13 @@ AiPlayerbot.PremadeSpecGlyph.7.0 = 41536,43385,41532,43386,44923,45776
|
||||
AiPlayerbot.PremadeSpecLink.7.0.60 = 4530001520213351102301351
|
||||
AiPlayerbot.PremadeSpecLink.7.0.80 = 3530001523213351322301351-005050031
|
||||
AiPlayerbot.PremadeSpecName.7.1 = enh pve
|
||||
AiPlayerbot.PremadeSpecGlyph.7.1 = 41530,43385,41539,43386,44923,45771
|
||||
AiPlayerbot.PremadeSpecLink.7.1.60 = -30305003105021333031121131051
|
||||
AiPlayerbot.PremadeSpecLink.7.1.80 = 053030152-30305003105021333031131131051
|
||||
AiPlayerbot.PremadeSpecGlyph.7.1 = 41542,43385,41539,43386,44923,45771
|
||||
AiPlayerbot.PremadeSpecLink.7.1.60 = -30205033005001333031131131051
|
||||
AiPlayerbot.PremadeSpecLink.7.1.80 = 053030052-30205033005021333031131131051
|
||||
AiPlayerbot.PremadeSpecName.7.2 = resto pve
|
||||
AiPlayerbot.PremadeSpecGlyph.7.2 = 41527,43385,41517,43386,44923,45775
|
||||
AiPlayerbot.PremadeSpecGlyph.7.2 = 41517,43385,41527,43386,44923,45775
|
||||
AiPlayerbot.PremadeSpecLink.7.2.60 = --50005301235310501102321251
|
||||
AiPlayerbot.PremadeSpecLink.7.2.80 = -00502033-50005331335310501122331251
|
||||
AiPlayerbot.PremadeSpecName.7.3 = ele pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.7.3 = 45778,43388,45770,43725,43386,41524
|
||||
AiPlayerbot.PremadeSpecLink.7.3.60 = 0533001503213051322301341
|
||||
AiPlayerbot.PremadeSpecLink.7.3.80 = 0533051503213051322331351-023212001
|
||||
AiPlayerbot.PremadeSpecName.7.4 = enh pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.7.4 = 45778,43388,41526,43725,43344,45771
|
||||
AiPlayerbot.PremadeSpecLink.7.4.60 = -02305203105001333201131131151
|
||||
AiPlayerbot.PremadeSpecLink.7.4.80 = 0503351-02305203105001333211131231251
|
||||
AiPlayerbot.PremadeSpecName.7.5 = resto pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.7.5 = 45778,43388,45775,43725,43344,41535
|
||||
AiPlayerbot.PremadeSpecLink.7.5.60 = --05032331331013501120321251
|
||||
AiPlayerbot.PremadeSpecLink.7.5.80 = -023222301004-05032331331013501120331251
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1512,8 +1304,8 @@ AiPlayerbot.PremadeSpecLink.7.5.80 = -023222301004-05032331331013501120331251
|
||||
|
||||
AiPlayerbot.PremadeSpecName.8.0 = arcane pve
|
||||
AiPlayerbot.PremadeSpecGlyph.8.0 = 42735,43339,44955,43364,43361,42751
|
||||
AiPlayerbot.PremadeSpecLink.8.0.60 = 230005231100330150323102500321
|
||||
AiPlayerbot.PremadeSpecLink.8.0.80 = 230005231100330150323102505321-03-203303001
|
||||
AiPlayerbot.PremadeSpecLink.8.0.60 = 23000503110033014032310150532
|
||||
AiPlayerbot.PremadeSpecLink.8.0.80 = 23000523310033015032310250532-03-203203001
|
||||
AiPlayerbot.PremadeSpecName.8.1 = fire pve
|
||||
AiPlayerbot.PremadeSpecGlyph.8.1 = 42739,43339,45737,43364,44920,42751
|
||||
AiPlayerbot.PremadeSpecLink.8.1.60 = -0055030011302231053120321341
|
||||
@@ -1525,20 +1317,7 @@ AiPlayerbot.PremadeSpecLink.8.2.80 = 23002303110003--053303031320310003015223135
|
||||
AiPlayerbot.PremadeSpecName.8.3 = frostfire pve
|
||||
AiPlayerbot.PremadeSpecGlyph.8.3 = 44684,44920,42751,43339,43364,45737
|
||||
AiPlayerbot.PremadeSpecLink.8.3.60 = -2305032012303331053120300051
|
||||
AiPlayerbot.PremadeSpecLink.8.3.80 = -2305032012303331053120321351-023302031
|
||||
AiPlayerbot.PremadeSpecName.8.4 = arcane pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.8.4 = 42735,43364,42738,43360,43357,42752
|
||||
AiPlayerbot.PremadeSpecLink.8.4.60 = 205323200122032103303102015221
|
||||
AiPlayerbot.PremadeSpecLink.8.4.80 = 205323200122032103303102015321-23002-303020301
|
||||
AiPlayerbot.PremadeSpecName.8.5 = fire pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.8.5 = 42738,43364,42752,43360,43357,45737
|
||||
AiPlayerbot.PremadeSpecLink.8.5.60 = -2305202312020031223122301351
|
||||
AiPlayerbot.PremadeSpecLink.8.5.80 = 230321030122-2305212312020031223122301351
|
||||
AiPlayerbot.PremadeSpecName.8.6 = frost pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.8.6 = 42738,43364,45740,43357,43360,42752
|
||||
AiPlayerbot.PremadeSpecLink.8.6.60 = --3533203210203100232102231151
|
||||
AiPlayerbot.PremadeSpecLink.8.6.80 = 23032103010203--3533203210203100232102231151
|
||||
|
||||
AiPlayerbot.PremadeSpecLink.8.3.80 = -2305032012303331053120311351-023303031
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1554,7 +1333,7 @@ AiPlayerbot.PremadeSpecName.9.0 = affli pve
|
||||
AiPlayerbot.PremadeSpecGlyph.9.0 = 45785,43390,50077,43394,43393,45779
|
||||
AiPlayerbot.PremadeSpecLink.9.0.60 = 2350022001113510053500131151
|
||||
AiPlayerbot.PremadeSpecLink.9.0.70 = 2350022001113510053500131151--55
|
||||
AiPlayerbot.PremadeSpecLink.9.0.80 = 2350022001123510253500331151--55000005
|
||||
AiPlayerbot.PremadeSpecLink.9.0.80 = 2350022001113510253500331151--5500000501
|
||||
AiPlayerbot.PremadeSpecName.9.1 = demo pve
|
||||
AiPlayerbot.PremadeSpecGlyph.9.1 = 45785,43390,50077,43394,43393,42459
|
||||
AiPlayerbot.PremadeSpecLink.9.1.60 = -003203301135112530135201051
|
||||
@@ -1564,19 +1343,6 @@ AiPlayerbot.PremadeSpecName.9.2 = destro pve
|
||||
AiPlayerbot.PremadeSpecGlyph.9.2 = 45785,43390,50077,43394,43393,42454
|
||||
AiPlayerbot.PremadeSpecLink.9.2.60 = --05203215200231051305031151
|
||||
AiPlayerbot.PremadeSpecLink.9.2.80 = 23-0302-05203215220331051335231351
|
||||
AiPlayerbot.PremadeSpecName.9.3 = affli pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.9.3 = 50077,43392,42455,43390,43389,45783
|
||||
AiPlayerbot.PremadeSpecLink.9.3.60 = 0350002231223011053502301151
|
||||
AiPlayerbot.PremadeSpecLink.9.3.80 = 2350002231223111053502301151-2032003011302
|
||||
AiPlayerbot.PremadeSpecName.9.4 = demo pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.9.4 = 42459,43392,45780,43390,43389,45783
|
||||
AiPlayerbot.PremadeSpecLink.9.4.60 = -003203301135202530135001251
|
||||
AiPlayerbot.PremadeSpecLink.9.4.80 = -003203301135202530135011351-052300152
|
||||
AiPlayerbot.PremadeSpecName.9.5 = destro pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.9.5 = 42471,43392,42454,43390,43389,45783
|
||||
AiPlayerbot.PremadeSpecLink.9.5.60 = --05230015220331351005031051
|
||||
AiPlayerbot.PremadeSpecLink.9.5.80 = -2032003311302-05230015220331351005031051
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1604,19 +1370,6 @@ AiPlayerbot.PremadeSpecName.11.3 = cat pve
|
||||
AiPlayerbot.PremadeSpecGlyph.11.3 = 40902,43331,40901,43335,44922,45604
|
||||
AiPlayerbot.PremadeSpecLink.11.3.60 = -552202032322010053100030310501
|
||||
AiPlayerbot.PremadeSpecLink.11.3.80 = -553202032322010053100030310511-205503012
|
||||
AiPlayerbot.PremadeSpecName.11.4 = balance pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.11.4 = 40921,43331,45622,43674,43335,45623
|
||||
AiPlayerbot.PremadeSpecLink.11.4.60 = 5012203115331002213032311231
|
||||
AiPlayerbot.PremadeSpecLink.11.4.80 = 5022203125331003213035311231--230033012
|
||||
AiPlayerbot.PremadeSpecName.11.5 = cat pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.11.5 = 40902,43331,45601,43674,43335,40901
|
||||
AiPlayerbot.PremadeSpecLink.11.5.60 = -513202032322010053103030310501
|
||||
AiPlayerbot.PremadeSpecLink.11.5.80 = -523202032322010053103030310511-205503012
|
||||
AiPlayerbot.PremadeSpecName.11.6 = resto pvp
|
||||
AiPlayerbot.PremadeSpecGlyph.11.6 = 40913,43331,40906,43335,43674,45623
|
||||
AiPlayerbot.PremadeSpecLink.11.6.60 = --230033312031500511350013051
|
||||
AiPlayerbot.PremadeSpecLink.11.6.80 = 05320021--230033312031500531353013251
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
@@ -1634,14 +1387,43 @@ AiPlayerbot.PremadeSpecLink.11.6.80 = 05320021--230033312031500531353013251
|
||||
#
|
||||
#
|
||||
|
||||
# Applies automatically refreshing buffs to bots simulating effects of spells, flasks, food, runes, etc.
|
||||
# Applies a permanent buff to all bots simulating effects of spells, flasks, food, runes, etc.
|
||||
# Requires sending the command "nc +worldbuff" in chat to a bot (or a group of bots) to enable
|
||||
# Each entry in the matrix should be formatted as follows: Entry:FactionID,ClassID,SpecID,MinimumLevel,MaximumLevel:SpellID1,SpellID2,etc.;
|
||||
# FactionID may be set to 0 for the entry to apply buffs to bots of either faction
|
||||
# The default entries create a cross-faction list of level 80 buffs for each implemented pve spec from the "Premade Specs" section
|
||||
# The default entries may be deleted or modified, and new custom entries may be added
|
||||
# Numbers after the equal signs are spell IDs and may be customized
|
||||
# See Randombots Default Talent Specs for more info on each spec; they are listed in that section by the names in the parentheticals (e.g., arms pve, fury pve)
|
||||
|
||||
AiPlayerbot.WorldBuffMatrix = # WARRIOR ARMS 1:0,1,0,80,80:53760,57358; # WARRIOR FURY 2:0,1,1,80,80:53760,57358; # WARRIOR PROTECTION 3:0,1,2,80,80:53758,57356; # PALADIN HOLY 4:0,2,0,80,80:53749,57332,60347; # PALADIN PROTECTION 5:0,2,1,80,80:53758,57356; # PALADIN RETRIBUTION 6:0,2,2,80,80:53760,57371; # HUNTER BEAST 7:0,3,0,80,80:53760,57325; # HUNTER MARKSMANSHIP 8:0,3,1,80,80:53760,57358; # HUNTER SURVIVAL 9:0,3,2,80,80:53760,57367; # ROGUE ASSASSINATION 10:0,4,0,80,80:53760,57325; # ROGUE COMBAT 11:0,4,1,80,80:53760,57358; # ROGUE SUBTLETY 12:0,4,2,80,80:53760,57367; # PRIEST DISCIPLINE 13:0,5,0,80,80:53755,57327; # PRIEST HOLY 14:0,5,1,80,80:53755,57327; # PRIEST SHADOW 15:0,5,2,80,80:53755,57327; # DEATH KNIGHT BLOOD 16:0,6,0,80,80:53758,57356; # DEATH KNIGHT FROST 17:0,6,1,80,80:53760,57358; # DEATH KNIGHT UNHOLY 18:0,6,2,80,80:53760,57358; # DEATH KNIGHT BLOOD DPS 19:0,6,3,80,80:53760,57371; # SHAMAN ELEMENTAL 20:0,7,0,80,80:53755,57327; # SHAMAN ENHANCEMENT 21:0,7,1,80,80:53760,57325; # SHAMAN RESTORATION 22:0,7,2,80,80:53755,57327; # MAGE ARCANE 23:0,8,0,80,80:53755,57327; # MAGE FIRE 24:0,8,1,80,80:53755,57327; # MAGE FROST 25:0,8,2,80,80:53755,57327; # WARLOCK AFFLICTION 26:0,9,0,80,80:53755,57327; # WARLOCK DEMONOLOGY 27:0,9,1,80,80:53755,57327; # WARLOCK DESTRUCTION 28:0,9,2,80,80:53755,57327; # DRUID BALANCE 29:0,11,0,80,80:53755,57327; # DRUID FERAL BEAR 30:0,11,1,80,80:53749,53763,57367; # DRUID RESTORATION 31:0,11,2,80,80:54212,57334; # DRUID FERAL CAT 32:0,11,3,80,80:53760,57358
|
||||
AiPlayerbot.WorldBuff.0.1.0.80.80 = 53760,57358 #WARRIOR ARMS (arms pve)
|
||||
AiPlayerbot.WorldBuff.0.1.1.80.80 = 53760,57358 #WARRIOR FURY (fury pve)
|
||||
AiPlayerbot.WorldBuff.0.1.2.80.80 = 53758,57356 #WARRIOR PROTECTION (prot pve)
|
||||
AiPlayerbot.WorldBuff.0.2.0.80.80 = 60347,53749,57332 #PALADIN HOLY (holy pve)
|
||||
AiPlayerbot.WorldBuff.0.2.1.80.80 = 53758,57356 #PALADIN PROTECTION (prot pve)
|
||||
AiPlayerbot.WorldBuff.0.2.2.80.80 = 53760,57371 #PALADIN RETRIBUTION (ret pve)
|
||||
AiPlayerbot.WorldBuff.0.3.0.80.80 = 53760,57325 #HUNTER BEAST (bm pve)
|
||||
AiPlayerbot.WorldBuff.0.3.1.80.80 = 53760,57358 #HUNTER MARKSMANSHIP (mm pve)
|
||||
AiPlayerbot.WorldBuff.0.3.2.80.80 = 53760,57367 #HUNTER SURVIVAL (surv pve)
|
||||
AiPlayerbot.WorldBuff.0.4.0.80.80 = 53760,57325 #ROGUE ASSASINATION (as pve)
|
||||
AiPlayerbot.WorldBuff.0.4.1.80.80 = 53760,57358 #ROGUE COMBAT (combat pve)
|
||||
AiPlayerbot.WorldBuff.0.4.2.80.80 = 53760,57367 #ROGUE SUBTLETY (subtlety pve)
|
||||
AiPlayerbot.WorldBuff.0.5.0.80.80 = 53755,57327 #PRIEST DISCIPLINE (disc pve)
|
||||
AiPlayerbot.WorldBuff.0.5.1.80.80 = 53755,57327 #PRIEST HOLY (holy pve)
|
||||
AiPlayerbot.WorldBuff.0.5.2.80.80 = 53755,57327 #PRIEST SHADOW (shadow pve)
|
||||
AiPlayerbot.WorldBuff.0.6.0.80.80 = 53758,57356 #DEATH KNIGHT BLOOD (blood pve)
|
||||
AiPlayerbot.WorldBuff.0.6.1.80.80 = 53760,57358 #DEATH KNIGHT FROST (frost pve)
|
||||
AiPlayerbot.WorldBuff.0.6.2.80.80 = 53760,57358 #DEATH KNIGHT UNHOLY (unholy pve)
|
||||
AiPlayerbot.WorldBuff.0.6.3.80.80 = 53760,57371 #DEATH KNIGHT BLOOD DPS (double aura blood pve)
|
||||
AiPlayerbot.WorldBuff.0.7.0.80.80 = 53755,57327 #SHAMAN ELEMENTAL (ele pve)
|
||||
AiPlayerbot.WorldBuff.0.7.1.80.80 = 53760,57325 #SHAMAN ENHANCEMENT (enh pve)
|
||||
AiPlayerbot.WorldBuff.0.7.2.80.80 = 53755,57327 #SHAMAN RESTORATION (resto pve)
|
||||
AiPlayerbot.WorldBuff.0.8.0.80.80 = 53755,57327 #MAGE ARCANE (arcane pve)
|
||||
AiPlayerbot.WorldBuff.0.8.1.80.80 = 53755,57327 #MAGE FIRE (fire pve)
|
||||
AiPlayerbot.WorldBuff.0.8.2.80.80 = 53755,57327 #MAGE FROST (frost pve)
|
||||
AiPlayerbot.WorldBuff.0.9.0.80.80 = 53755,57327 #WARLOCK AFFLICTION (affli pve)
|
||||
AiPlayerbot.WorldBuff.0.9.1.80.80 = 53755,57327 #WARLOCK DEMONOLOGY (demo pve)
|
||||
AiPlayerbot.WorldBuff.0.9.2.80.80 = 53755,57327 #WARLOCK DESTRUCTION (destro pve)
|
||||
AiPlayerbot.WorldBuff.0.11.0.80.80 = 53755,57327 #DRUID BALANCE (balance pve)
|
||||
AiPlayerbot.WorldBuff.0.11.1.80.80 = 53749,53763,57367 #DRUID FERAL BEAR (bear pve)
|
||||
AiPlayerbot.WorldBuff.0.11.2.80.80 = 54212,57334 #DRUID RESTORATION (resto pve)
|
||||
AiPlayerbot.WorldBuff.0.11.3.80.80 = 53760,57358 #DRUID FERAL CAT (cat pve)
|
||||
|
||||
#
|
||||
#
|
||||
@@ -2046,17 +1828,9 @@ AiPlayerbot.AllowedLogFiles = ""
|
||||
|
||||
####################################################################################################
|
||||
# A list of gameObject GUID's that are not allowed for bots to interact with.
|
||||
#
|
||||
AiPlayerbot.DisallowedGameObjects = 176213,17155,2656,74448,19020,3719,3658,3705,3706,105579,75293,2857,179490,141596,160836,160845,179516,176224,181085,176112,128308,128403,165739,165738,175245,175970,176325,176327,123329,2560
|
||||
#
|
||||
# List of GUID's:
|
||||
# QuestItems:
|
||||
# 176213 = Blood of Heroes, 17155 = Defias Gunpowder, 2656 = Waterlogged Envelope, 123329 = Baelogs Chest, 2560 = Half-Buried Bottle
|
||||
# Chests:
|
||||
# Large Solid Chest = 74448, Box of Assorted Parts = 19020, Food Crate = 3719, Water Barrel = 3658, Barrel of Milk = 3705, Barrel of sweet Nectar = 3706, Tattered Chest = 105579, Large bettered Chest = 75293, Solid Chest = 2857, Battered Foodlocker = 179490, Witch Doctor's Chest = 141596, Relic Coffer = 160836, Dark Coffer = 160845, Fengus's Chest = 179516, Supply Crate = 176224/181085, Malor's Strongbox = 176112
|
||||
# Other:
|
||||
# Shallow Grave (Zul'Farrak) = 128308/128403, Grim Guzzler Boar (Blackrock Depths) = 165739, Dark Iron Ale Mug (Blackrock Depths) = 165738, Father Flame (Blackrock Spire) = 175245, Unforged Runic Breastplate (Blackrock Spire) = 175970, Blacksmithing Plans (Stratholme) = 176325/176327
|
||||
# Feel free to edit and help to complete.
|
||||
# Example: 176213 = Blood of Heroes
|
||||
# Example: 17155 = Defias Gunpowder
|
||||
AiPlayerbot.DisallowedGameObjects = 176213,17155
|
||||
#
|
||||
####################################################################################################
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
100013
data/sql/characters/playerbots_names.sql
Normal file
100013
data/sql/characters/playerbots_names.sql
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
||||
UPDATE guild
|
||||
SET
|
||||
EmblemStyle = FLOOR(RAND() * 181),
|
||||
EmblemColor = FLOOR(RAND() * 18),
|
||||
BorderStyle = FLOOR(RAND() * 8),
|
||||
BorderColor = FLOOR(RAND() * 18),
|
||||
BackgroundColor = FLOOR(RAND() * 52)
|
||||
WHERE EmblemStyle=0 AND EmblemColor=0 AND BorderStyle=0 AND BorderColor=0 AND BackgroundColor=0;
|
||||
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `ai_playerbot_texts_chance` (
|
||||
|
||||
/*!40000 ALTER TABLE `ai_playerbot_texts_chance` DISABLE KEYS */;
|
||||
INSERT INTO `ai_playerbot_texts_chance` (`id`, `name`, `probability`) VALUES
|
||||
(1, 'taunt', 30),
|
||||
(2, 'aoe', 75),
|
||||
(3, 'loot', 20);
|
||||
(1, 'taunt', 30),
|
||||
(2, 'aoe', 75),
|
||||
(3, 'loot', 20);
|
||||
/*!40000 ALTER TABLE `ai_playerbot_texts_chance` ENABLE KEYS */;
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
DROP TABLE IF EXISTS `playerbots_account_type`;
|
||||
CREATE TABLE `playerbots_account_type` (
|
||||
`account_id` int unsigned NOT NULL,
|
||||
`account_type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '0 = unassigned, 1 = RNDbot, 2 = AddClass',
|
||||
`assignment_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`account_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Playerbot account type assignments';
|
||||
|
||||
@@ -53,16 +53,16 @@ INSERT INTO `playerbots_dungeon_suggestion_definition` VALUES
|
||||
(NULL, 'ub' , 'The Underbog' , 1, 0, 62, 70, NULL),
|
||||
(NULL, 'mt' , 'Mana-Tombs' , 1, 0, 63, 70, NULL),
|
||||
(NULL, 'ac' , 'Auchenai Crypts' , 1, 0, 64, 70, NULL),
|
||||
(NULL, 'seth', 'Sethekk Halls' , 1, 0, 66, 70, NULL),
|
||||
(NULL, 'seth', 'Sethekk Halls' , 1, 0, 66, 70, NULL),
|
||||
(NULL, 'oh' , 'Old Hillsbrad Foothills', 1, 0, 66, 70, NULL),
|
||||
(NULL, 'bm' , 'The Black Morass' , 1, 0, 68, 70, NULL),
|
||||
(NULL, 'mech', 'The Mechanar' , 1, 0, 68, 70, NULL),
|
||||
(NULL, 'bot' , 'The Botanica' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'arc' , 'The Arcatraz' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'sh' , 'The Shattered Halls' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'sv' , 'The Steamvault' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'sl' , 'Shadow Labyrinth' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'mgt' , 'Magister''s Terrace' , 1, 0, 70, 70, NULL),
|
||||
(NULL, 'bm' , 'The Black Morass' , 1, 0, 68, 70, NULL),
|
||||
(NULL, 'mech', 'The Mechanar' , 1, 0, 68, 70, NULL),
|
||||
(NULL, 'bot' , 'The Botanica' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'arc' , 'The Arcatraz' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'sh' , 'The Shattered Halls' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'sv' , 'The Steamvault' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'sl' , 'Shadow Labyrinth' , 1, 0, 69, 70, NULL),
|
||||
(NULL, 'mgt' , 'Magister''s Terrace' , 1, 0, 70, 70, NULL),
|
||||
|
||||
-- == The Burning Crusade (Heroic) ==
|
||||
|
||||
@@ -72,51 +72,51 @@ INSERT INTO `playerbots_dungeon_suggestion_definition` VALUES
|
||||
(NULL, 'ub' , 'The Underbog' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'mt' , 'Mana-Tombs' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'ac' , 'Auchenai Crypts' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'seth', 'Sethekk Halls' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'seth', 'Sethekk Halls' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'oh' , 'Old Hillsbrad Foothills', 1, 1, 70, 70, NULL),
|
||||
(NULL, 'bm' , 'The Black Morass' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'mech', 'The Mechanar' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'bot' , 'The Botanica' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'arc' , 'The Arcatraz' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'bm' , 'The Black Morass' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'mech', 'The Mechanar' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'bot' , 'The Botanica' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'arc' , 'The Arcatraz' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'sh' , 'The Shattered Halls' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'sv' , 'The Steamvault' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'sl' , 'Shadow Labyrinth' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'sv' , 'The Steamvault' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'sl' , 'Shadow Labyrinth' , 1, 1, 70, 70, NULL),
|
||||
(NULL, 'mgt' , 'Magister''s Terrace' , 1, 1, 70, 70, NULL),
|
||||
|
||||
-- == Wrath of the Lich King ==
|
||||
|
||||
(NULL, 'uk' , 'Utgarde Keep' , 2, 0, 70, 72, NULL),
|
||||
(NULL, 'nexus' , 'The Nexus' , 2, 0, 71, 73, NULL),
|
||||
(NULL, 'an' , 'Azjol-Nerub' , 2, 0, 72, 74, NULL),
|
||||
(NULL, 'uk' , 'Utgarde Keep' , 2, 0, 70, 72, NULL),
|
||||
(NULL, 'nexus' , 'The Nexus' , 2, 0, 71, 73, NULL),
|
||||
(NULL, 'an' , 'Azjol-Nerub' , 2, 0, 72, 74, NULL),
|
||||
(NULL, 'ak' , 'Ahn''kahet: The Old Kingdom', 2, 0, 73, 75, NULL),
|
||||
(NULL, 'dtk' , 'Drak''Tharon Keep' , 2, 0, 74, 76, NULL),
|
||||
(NULL, 'vh' , 'Violet Hold' , 2, 0, 75, 77, NULL),
|
||||
(NULL, 'gd' , 'Gundrak' , 2, 0, 76, 78, NULL),
|
||||
(NULL, 'hos' , 'Halls of Stone' , 2, 0, 77, 79, NULL),
|
||||
(NULL, 'hol' , 'Halls of Lightning' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'dtk' , 'Drak''Tharon Keep' , 2, 0, 74, 76, NULL),
|
||||
(NULL, 'vh' , 'Violet Hold' , 2, 0, 75, 77, NULL),
|
||||
(NULL, 'gd' , 'Gundrak' , 2, 0, 76, 78, NULL),
|
||||
(NULL, 'hos' , 'Halls of Stone' , 2, 0, 77, 79, NULL),
|
||||
(NULL, 'hol' , 'Halls of Lightning' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'cos' , 'The Culling of Stratholme' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'oculus', 'The Oculus' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'up' , 'Utgarde Pinnacle' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'toc' , 'Trial of the Champion' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'fos' , 'Forge of Souls' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'pos' , 'Pit of Saron' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'hor' , 'Halls of Reflection' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'oculus', 'The Oculus' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'up' , 'Utgarde Pinnacle' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'toc' , 'Trial of the Champion' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'fos' , 'Forge of Souls' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'pos' , 'Pit of Saron' , 2, 0, 80, 80, NULL),
|
||||
(NULL, 'hor' , 'Halls of Reflection' , 2, 0, 80, 80, NULL),
|
||||
|
||||
-- == Wrath of the Lich King (Heroic) ==
|
||||
|
||||
(NULL, 'uk' , 'Utgarde Keep' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'nexus' , 'The Nexus' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'an' , 'Azjol-Nerub' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'uk' , 'Utgarde Keep' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'nexus' , 'The Nexus' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'an' , 'Azjol-Nerub' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'ak' , 'Ahn''kahet: The Old Kingdom', 2, 1, 80, 80, NULL),
|
||||
(NULL, 'dtk' , 'Drak''Tharon Keep' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'vh' , 'Violet Hold' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'gd' , 'Gundrak' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'hos' , 'Halls of Stone' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'hol' , 'Halls of Lightning' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'dtk' , 'Drak''Tharon Keep' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'vh' , 'Violet Hold' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'gd' , 'Gundrak' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'hos' , 'Halls of Stone' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'hol' , 'Halls of Lightning' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'cos' , 'The Culling of Stratholme' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'oculus', 'The Oculus' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'up' , 'Utgarde Pinnacle' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'toc' , 'Trial of the Champion' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'fos' , 'Forge of Souls' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'pos' , 'Pit of Saron' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'hor' , 'Halls of Reflection' , 2, 1, 80, 80, NULL);
|
||||
(NULL, 'oculus', 'The Oculus' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'up' , 'Utgarde Pinnacle' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'toc' , 'Trial of the Champion' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'fos' , 'Forge of Souls' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'pos' , 'Pit of Saron' , 2, 1, 80, 80, NULL),
|
||||
(NULL, 'hor' , 'Halls of Reflection' , 2, 1, 80, 80, NULL);
|
||||
|
||||
@@ -25,226 +25,226 @@ CREATE TABLE `playerbots_enchants` (
|
||||
/*!40000 ALTER TABLE `playerbots_enchants` DISABLE KEYS */;
|
||||
DELETE FROM `playerbots_enchants`;
|
||||
INSERT INTO `playerbots_enchants` (`class`, `spec`, `spellid`, `slotid`, `name`) VALUES
|
||||
(1, 10, 20034, 15, 'Crusader '),
|
||||
(1, 10, 22779, 17, '30 Hit '),
|
||||
(1, 10, 27927, 10, '4 All Stats '),
|
||||
(1, 10, 27927, 11, '4 All Stats '),
|
||||
(1, 10, 27960, 4, '6 All Stats '),
|
||||
(1, 10, 27984, 16, 'Mongoose '),
|
||||
(1, 10, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(1, 10, 33996, 9, '26 Attackpower '),
|
||||
(1, 10, 34002, 8, '24 Attackpower '),
|
||||
(1, 10, 34004, 14, '12 Agility '),
|
||||
(1, 10, 34007, 7, 'Minor Speed 6 Agility'),
|
||||
(1, 10, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(1, 10, 35490, 6, '50 Attackpower 12 Crit '),
|
||||
(1, 11, 20034, 15, 'Crusader '),
|
||||
(1, 11, 20034, 16, 'Crusader '),
|
||||
(1, 11, 22779, 17, '30 Hit '),
|
||||
(1, 11, 27927, 10, '4 All Stats '),
|
||||
(1, 11, 27927, 11, '4 All Stats '),
|
||||
(1, 11, 27960, 4, '6 All Stats '),
|
||||
(1, 11, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(1, 11, 33996, 9, '26 Attackpower '),
|
||||
(1, 11, 34002, 8, '24 Attackpower '),
|
||||
(1, 11, 34004, 14, '12 Agility '),
|
||||
(1, 11, 34007, 7, 'Minor Speed 6 Agility'),
|
||||
(1, 11, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(1, 11, 35490, 6, '50 Attackpower 12 Crit '),
|
||||
(1, 12, 22779, 17, '30 Hit '),
|
||||
(1, 12, 25072, 9, '2% Threat '),
|
||||
(1, 12, 27906, 8, '12 Defense '),
|
||||
(1, 12, 27927, 10, '4 All Stats '),
|
||||
(1, 12, 27927, 11, '4 All Stats '),
|
||||
(1, 12, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(1, 12, 27960, 4, '6 All Stats '),
|
||||
(1, 12, 28004, 15, 'Battlemaster '),
|
||||
(1, 12, 34009, 16, '18 Stamina '),
|
||||
(1, 12, 35433, 2, '10 Dodge 15 Defense '),
|
||||
(1, 12, 35443, 0, '16 Defense 17 Dodge '),
|
||||
(1, 12, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(1, 12, 47051, 14, '12 Defense '),
|
||||
(2, 20, 22779, 17, '30 Hit '),
|
||||
(2, 20, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(2, 20, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(2, 20, 27945, 16, '12 Intellect '),
|
||||
(2, 20, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(2, 20, 27960, 4, '6 All Stats '),
|
||||
(2, 20, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(2, 20, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(2, 20, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(2, 20, 34001, 8, '12 Intellect '),
|
||||
(2, 20, 34003, 14, '20 Spell Penetration '),
|
||||
(2, 20, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(2, 20, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 '),
|
||||
(2, 21, 22779, 17, '30 Hit '),
|
||||
(2, 21, 25072, 9, '2% Threat '),
|
||||
(2, 21, 27906, 8, '12 Defense '),
|
||||
(2, 21, 27927, 10, '4 All Stats '),
|
||||
(2, 21, 27927, 11, '4 All Stats '),
|
||||
(2, 21, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(2, 21, 27960, 4, '6 All Stats '),
|
||||
(2, 21, 28004, 15, 'Battlemaster '),
|
||||
(2, 21, 34009, 16, '18 Stamina '),
|
||||
(2, 21, 35433, 2, '10 Dodge 15 Defense '),
|
||||
(2, 21, 35443, 0, '16 Defense 17 Dodge '),
|
||||
(2, 21, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(2, 21, 47051, 14, '12 Defense '),
|
||||
(2, 22, 20034, 15, 'Crusader '),
|
||||
(2, 22, 22779, 17, '30 Hit '),
|
||||
(2, 22, 27899, 8, '12 Strength '),
|
||||
(2, 22, 27927, 10, '4 All Stats '),
|
||||
(2, 22, 27927, 11, '4 All Stats '),
|
||||
(2, 22, 27960, 4, '6 All Stats '),
|
||||
(2, 22, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(2, 22, 33995, 6, '50 Attackpower 12 Crit '),
|
||||
(2, 22, 33996, 9, '15 Strength '),
|
||||
(2, 22, 34004, 14, '12 Agility '),
|
||||
(2, 22, 34007, 7, 'Minor Speed 6 Agility'),
|
||||
(2, 22, 37891, 0, '17 Strength16 Intellect '),
|
||||
(3, 30, 22779, 17, '30 Hit '),
|
||||
(3, 30, 25080, 9, '15 Agility '),
|
||||
(3, 30, 27927, 10, '4 All Stats '),
|
||||
(3, 30, 27927, 11, '4 All Stats '),
|
||||
(3, 30, 27951, 7, '12 Agility'),
|
||||
(3, 30, 27960, 4, '6 All Stats '),
|
||||
(3, 30, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(3, 30, 34002, 8, '24 Attackpower '),
|
||||
(3, 30, 34004, 14, '12 Agility '),
|
||||
(3, 30, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(3, 30, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(3, 30, 42620, 15, 'Greater Agility '),
|
||||
(3, 30, 42620, 16, 'Greater Agility '),
|
||||
(4, 40, 22779, 17, '30 Hit '),
|
||||
(4, 40, 25080, 9, '15 Agility '),
|
||||
(4, 40, 27927, 10, '4 All Stats '),
|
||||
(4, 40, 27927, 11, '4 All Stats '),
|
||||
(4, 40, 27951, 7, '12 Agility'),
|
||||
(4, 40, 27960, 4, '6 All Stats '),
|
||||
(4, 40, 27984, 15, 'Mongoose '),
|
||||
(4, 40, 27984, 16, 'Mongoose '),
|
||||
(4, 40, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(4, 40, 34002, 8, '24 Attackpower '),
|
||||
(4, 40, 34004, 14, '12 Agility '),
|
||||
(4, 40, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(4, 40, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(5, 50, 22779, 17, '30 Hit '),
|
||||
(5, 50, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(5, 50, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(5, 50, 27945, 16, '12 Intellect '),
|
||||
(5, 50, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(5, 50, 27960, 4, '6 All Stats '),
|
||||
(5, 50, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(5, 50, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(5, 50, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(5, 50, 34001, 8, '12 Intellect '),
|
||||
(5, 50, 34003, 14, '20 Spell Penetration '),
|
||||
(5, 50, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(5, 50, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 '),
|
||||
(7, 70, 22779, 17, '30 Hit '),
|
||||
(7, 70, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(7, 70, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(7, 70, 27945, 16, '12 Intellect '),
|
||||
(7, 70, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(7, 70, 27960, 4, '6 All Stats '),
|
||||
(7, 70, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(7, 70, 33994, 9, '15 Spell Hit '),
|
||||
(7, 70, 34001, 8, '12 Intellect '),
|
||||
(7, 70, 34003, 14, '20 Spell Penetration '),
|
||||
(7, 70, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(7, 70, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(7, 70, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(7, 71, 22779, 17, '30 Hit '),
|
||||
(7, 71, 25080, 9, '15 Agility '),
|
||||
(7, 71, 27927, 10, '4 All Stats '),
|
||||
(7, 71, 27927, 11, '4 All Stats '),
|
||||
(7, 71, 27951, 7, '12 Agility'),
|
||||
(7, 71, 27960, 4, '6 All Stats '),
|
||||
(7, 71, 27977, 15, '35 Agility '),
|
||||
(7, 71, 27984, 16, 'Mongoose '),
|
||||
(7, 71, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(7, 71, 34002, 8, '24 Attackpower '),
|
||||
(7, 71, 34004, 14, '12 Agility '),
|
||||
(7, 71, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(7, 71, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(7, 72, 22779, 17, '30 Hit '),
|
||||
(7, 72, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(7, 72, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(7, 72, 27945, 16, '12 Intellect '),
|
||||
(7, 72, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(7, 72, 27960, 4, '6 All Stats '),
|
||||
(7, 72, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(7, 72, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(7, 72, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(7, 72, 34001, 8, '12 Intellect '),
|
||||
(7, 72, 34003, 14, '20 Spell Penetration '),
|
||||
(7, 72, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(7, 72, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 '),
|
||||
(8, 80, 22779, 17, '30 Hit '),
|
||||
(8, 80, 27927, 10, '4 All Stats '),
|
||||
(8, 80, 27927, 11, '4 All Stats '),
|
||||
(8, 80, 27945, 16, '12 Intellect '),
|
||||
(8, 80, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(8, 80, 27960, 4, '6 All Stats '),
|
||||
(8, 80, 27975, 15, '40 Spelldamage '),
|
||||
(8, 80, 31372, 6, '35 Spelldamage 20 Stamina '),
|
||||
(8, 80, 33994, 9, '15 Spell Hit '),
|
||||
(8, 80, 34001, 8, '12 Intellect '),
|
||||
(8, 80, 34003, 14, '20 Spell Penetration '),
|
||||
(8, 80, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(8, 80, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(9, 90, 22779, 17, '30 Hit '),
|
||||
(9, 90, 27924, 11, '12 Spelldamage '),
|
||||
(9, 90, 27927, 10, '4 All Stats '),
|
||||
(9, 90, 27945, 16, '12 Intellect '),
|
||||
(9, 90, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(9, 90, 27960, 4, '6 All Stats '),
|
||||
(9, 90, 27975, 15, '40 Spelldamage '),
|
||||
(9, 90, 31372, 6, '35 Spelldamage 20 Stamina '),
|
||||
(9, 90, 33994, 9, '15 Spell Hit '),
|
||||
(9, 90, 34001, 8, '12 Intellect '),
|
||||
(9, 90, 34003, 14, '20 Spell Penetration '),
|
||||
(9, 90, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(9, 90, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(11, 110, 22779, 17, '30 Hit '),
|
||||
(11, 110, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(11, 110, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(11, 110, 27945, 16, '12 Intellect '),
|
||||
(11, 110, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(11, 110, 27960, 4, '6 All Stats '),
|
||||
(11, 110, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(11, 110, 33994, 9, '15 Spell Hit '),
|
||||
(11, 110, 34001, 8, '12 Intellect '),
|
||||
(11, 110, 34003, 14, '20 Spell Penetration '),
|
||||
(11, 110, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(11, 110, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(11, 110, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(11, 111, 22779, 17, '30 Hit '),
|
||||
(11, 111, 25080, 9, '15 Agility '),
|
||||
(11, 111, 27927, 10, '4 All Stats '),
|
||||
(11, 111, 27927, 11, '4 All Stats '),
|
||||
(11, 111, 27951, 7, '12 Agility'),
|
||||
(11, 111, 27960, 4, '6 All Stats '),
|
||||
(11, 111, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(11, 111, 34002, 8, '24 Attackpower '),
|
||||
(11, 111, 34004, 14, '12 Agility '),
|
||||
(11, 111, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(11, 111, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(11, 111, 42620, 15, 'Greater Agility '),
|
||||
(11, 111, 42620, 16, 'Greater Agility '),
|
||||
(11, 112, 22779, 17, '30 Hit '),
|
||||
(11, 112, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(11, 112, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(11, 112, 27945, 16, '12 Intellect '),
|
||||
(11, 112, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(11, 112, 27960, 4, '6 All Stats '),
|
||||
(11, 112, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(11, 112, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(11, 112, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(11, 112, 34001, 8, '12 Intellect '),
|
||||
(11, 112, 34003, 14, '20 Spell Penetration '),
|
||||
(11, 112, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(11, 112, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 ');
|
||||
(1, 10, 20034, 15, 'Crusader '),
|
||||
(1, 10, 22779, 17, '30 Hit '),
|
||||
(1, 10, 27927, 10, '4 All Stats '),
|
||||
(1, 10, 27927, 11, '4 All Stats '),
|
||||
(1, 10, 27960, 4, '6 All Stats '),
|
||||
(1, 10, 27984, 16, 'Mongoose '),
|
||||
(1, 10, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(1, 10, 33996, 9, '26 Attackpower '),
|
||||
(1, 10, 34002, 8, '24 Attackpower '),
|
||||
(1, 10, 34004, 14, '12 Agility '),
|
||||
(1, 10, 34007, 7, 'Minor Speed 6 Agility'),
|
||||
(1, 10, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(1, 10, 35490, 6, '50 Attackpower 12 Crit '),
|
||||
(1, 11, 20034, 15, 'Crusader '),
|
||||
(1, 11, 20034, 16, 'Crusader '),
|
||||
(1, 11, 22779, 17, '30 Hit '),
|
||||
(1, 11, 27927, 10, '4 All Stats '),
|
||||
(1, 11, 27927, 11, '4 All Stats '),
|
||||
(1, 11, 27960, 4, '6 All Stats '),
|
||||
(1, 11, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(1, 11, 33996, 9, '26 Attackpower '),
|
||||
(1, 11, 34002, 8, '24 Attackpower '),
|
||||
(1, 11, 34004, 14, '12 Agility '),
|
||||
(1, 11, 34007, 7, 'Minor Speed 6 Agility'),
|
||||
(1, 11, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(1, 11, 35490, 6, '50 Attackpower 12 Crit '),
|
||||
(1, 12, 22779, 17, '30 Hit '),
|
||||
(1, 12, 25072, 9, '2% Threat '),
|
||||
(1, 12, 27906, 8, '12 Defense '),
|
||||
(1, 12, 27927, 10, '4 All Stats '),
|
||||
(1, 12, 27927, 11, '4 All Stats '),
|
||||
(1, 12, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(1, 12, 27960, 4, '6 All Stats '),
|
||||
(1, 12, 28004, 15, 'Battlemaster '),
|
||||
(1, 12, 34009, 16, '18 Stamina '),
|
||||
(1, 12, 35433, 2, '10 Dodge 15 Defense '),
|
||||
(1, 12, 35443, 0, '16 Defense 17 Dodge '),
|
||||
(1, 12, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(1, 12, 47051, 14, '12 Defense '),
|
||||
(2, 20, 22779, 17, '30 Hit '),
|
||||
(2, 20, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(2, 20, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(2, 20, 27945, 16, '12 Intellect '),
|
||||
(2, 20, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(2, 20, 27960, 4, '6 All Stats '),
|
||||
(2, 20, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(2, 20, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(2, 20, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(2, 20, 34001, 8, '12 Intellect '),
|
||||
(2, 20, 34003, 14, '20 Spell Penetration '),
|
||||
(2, 20, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(2, 20, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 '),
|
||||
(2, 21, 22779, 17, '30 Hit '),
|
||||
(2, 21, 25072, 9, '2% Threat '),
|
||||
(2, 21, 27906, 8, '12 Defense '),
|
||||
(2, 21, 27927, 10, '4 All Stats '),
|
||||
(2, 21, 27927, 11, '4 All Stats '),
|
||||
(2, 21, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(2, 21, 27960, 4, '6 All Stats '),
|
||||
(2, 21, 28004, 15, 'Battlemaster '),
|
||||
(2, 21, 34009, 16, '18 Stamina '),
|
||||
(2, 21, 35433, 2, '10 Dodge 15 Defense '),
|
||||
(2, 21, 35443, 0, '16 Defense 17 Dodge '),
|
||||
(2, 21, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(2, 21, 47051, 14, '12 Defense '),
|
||||
(2, 22, 20034, 15, 'Crusader '),
|
||||
(2, 22, 22779, 17, '30 Hit '),
|
||||
(2, 22, 27899, 8, '12 Strength '),
|
||||
(2, 22, 27927, 10, '4 All Stats '),
|
||||
(2, 22, 27927, 11, '4 All Stats '),
|
||||
(2, 22, 27960, 4, '6 All Stats '),
|
||||
(2, 22, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(2, 22, 33995, 6, '50 Attackpower 12 Crit '),
|
||||
(2, 22, 33996, 9, '15 Strength '),
|
||||
(2, 22, 34004, 14, '12 Agility '),
|
||||
(2, 22, 34007, 7, 'Minor Speed 6 Agility'),
|
||||
(2, 22, 37891, 0, '17 Strength16 Intellect '),
|
||||
(3, 30, 22779, 17, '30 Hit '),
|
||||
(3, 30, 25080, 9, '15 Agility '),
|
||||
(3, 30, 27927, 10, '4 All Stats '),
|
||||
(3, 30, 27927, 11, '4 All Stats '),
|
||||
(3, 30, 27951, 7, '12 Agility'),
|
||||
(3, 30, 27960, 4, '6 All Stats '),
|
||||
(3, 30, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(3, 30, 34002, 8, '24 Attackpower '),
|
||||
(3, 30, 34004, 14, '12 Agility '),
|
||||
(3, 30, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(3, 30, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(3, 30, 42620, 15, 'Greater Agility '),
|
||||
(3, 30, 42620, 16, 'Greater Agility '),
|
||||
(4, 40, 22779, 17, '30 Hit '),
|
||||
(4, 40, 25080, 9, '15 Agility '),
|
||||
(4, 40, 27927, 10, '4 All Stats '),
|
||||
(4, 40, 27927, 11, '4 All Stats '),
|
||||
(4, 40, 27951, 7, '12 Agility'),
|
||||
(4, 40, 27960, 4, '6 All Stats '),
|
||||
(4, 40, 27984, 15, 'Mongoose '),
|
||||
(4, 40, 27984, 16, 'Mongoose '),
|
||||
(4, 40, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(4, 40, 34002, 8, '24 Attackpower '),
|
||||
(4, 40, 34004, 14, '12 Agility '),
|
||||
(4, 40, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(4, 40, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(5, 50, 22779, 17, '30 Hit '),
|
||||
(5, 50, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(5, 50, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(5, 50, 27945, 16, '12 Intellect '),
|
||||
(5, 50, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(5, 50, 27960, 4, '6 All Stats '),
|
||||
(5, 50, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(5, 50, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(5, 50, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(5, 50, 34001, 8, '12 Intellect '),
|
||||
(5, 50, 34003, 14, '20 Spell Penetration '),
|
||||
(5, 50, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(5, 50, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 '),
|
||||
(7, 70, 22779, 17, '30 Hit '),
|
||||
(7, 70, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(7, 70, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(7, 70, 27945, 16, '12 Intellect '),
|
||||
(7, 70, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(7, 70, 27960, 4, '6 All Stats '),
|
||||
(7, 70, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(7, 70, 33994, 9, '15 Spell Hit '),
|
||||
(7, 70, 34001, 8, '12 Intellect '),
|
||||
(7, 70, 34003, 14, '20 Spell Penetration '),
|
||||
(7, 70, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(7, 70, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(7, 70, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(7, 71, 22779, 17, '30 Hit '),
|
||||
(7, 71, 25080, 9, '15 Agility '),
|
||||
(7, 71, 27927, 10, '4 All Stats '),
|
||||
(7, 71, 27927, 11, '4 All Stats '),
|
||||
(7, 71, 27951, 7, '12 Agility'),
|
||||
(7, 71, 27960, 4, '6 All Stats '),
|
||||
(7, 71, 27977, 15, '35 Agility '),
|
||||
(7, 71, 27984, 16, 'Mongoose '),
|
||||
(7, 71, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(7, 71, 34002, 8, '24 Attackpower '),
|
||||
(7, 71, 34004, 14, '12 Agility '),
|
||||
(7, 71, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(7, 71, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(7, 72, 22779, 17, '30 Hit '),
|
||||
(7, 72, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(7, 72, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(7, 72, 27945, 16, '12 Intellect '),
|
||||
(7, 72, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(7, 72, 27960, 4, '6 All Stats '),
|
||||
(7, 72, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(7, 72, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(7, 72, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(7, 72, 34001, 8, '12 Intellect '),
|
||||
(7, 72, 34003, 14, '20 Spell Penetration '),
|
||||
(7, 72, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(7, 72, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 '),
|
||||
(8, 80, 22779, 17, '30 Hit '),
|
||||
(8, 80, 27927, 10, '4 All Stats '),
|
||||
(8, 80, 27927, 11, '4 All Stats '),
|
||||
(8, 80, 27945, 16, '12 Intellect '),
|
||||
(8, 80, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(8, 80, 27960, 4, '6 All Stats '),
|
||||
(8, 80, 27975, 15, '40 Spelldamage '),
|
||||
(8, 80, 31372, 6, '35 Spelldamage 20 Stamina '),
|
||||
(8, 80, 33994, 9, '15 Spell Hit '),
|
||||
(8, 80, 34001, 8, '12 Intellect '),
|
||||
(8, 80, 34003, 14, '20 Spell Penetration '),
|
||||
(8, 80, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(8, 80, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(9, 90, 22779, 17, '30 Hit '),
|
||||
(9, 90, 27924, 11, '12 Spelldamage '),
|
||||
(9, 90, 27927, 10, '4 All Stats '),
|
||||
(9, 90, 27945, 16, '12 Intellect '),
|
||||
(9, 90, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(9, 90, 27960, 4, '6 All Stats '),
|
||||
(9, 90, 27975, 15, '40 Spelldamage '),
|
||||
(9, 90, 31372, 6, '35 Spelldamage 20 Stamina '),
|
||||
(9, 90, 33994, 9, '15 Spell Hit '),
|
||||
(9, 90, 34001, 8, '12 Intellect '),
|
||||
(9, 90, 34003, 14, '20 Spell Penetration '),
|
||||
(9, 90, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(9, 90, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(11, 110, 22779, 17, '30 Hit '),
|
||||
(11, 110, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(11, 110, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(11, 110, 27945, 16, '12 Intellect '),
|
||||
(11, 110, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(11, 110, 27960, 4, '6 All Stats '),
|
||||
(11, 110, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(11, 110, 33994, 9, '15 Spell Hit '),
|
||||
(11, 110, 34001, 8, '12 Intellect '),
|
||||
(11, 110, 34003, 14, '20 Spell Penetration '),
|
||||
(11, 110, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(11, 110, 35406, 2, '18 Spelldamage 10 Crit '),
|
||||
(11, 110, 35447, 0, '22 Spelldamage 14 Hit '),
|
||||
(11, 111, 22779, 17, '30 Hit '),
|
||||
(11, 111, 25080, 9, '15 Agility '),
|
||||
(11, 111, 27927, 10, '4 All Stats '),
|
||||
(11, 111, 27927, 11, '4 All Stats '),
|
||||
(11, 111, 27951, 7, '12 Agility'),
|
||||
(11, 111, 27960, 4, '6 All Stats '),
|
||||
(11, 111, 29483, 2, '26 Attackpower 14 Crit '),
|
||||
(11, 111, 34002, 8, '24 Attackpower '),
|
||||
(11, 111, 34004, 14, '12 Agility '),
|
||||
(11, 111, 35452, 0, '34 Attackpower 16 Hit '),
|
||||
(11, 111, 35495, 6, '40 Stamina 12 Agility '),
|
||||
(11, 111, 42620, 15, 'Greater Agility '),
|
||||
(11, 111, 42620, 16, 'Greater Agility '),
|
||||
(11, 112, 22779, 17, '30 Hit '),
|
||||
(11, 112, 27926, 10, '20 Healing 7 Spelldamage '),
|
||||
(11, 112, 27926, 11, '20 Healing 7 Spelldamage '),
|
||||
(11, 112, 27945, 16, '12 Intellect '),
|
||||
(11, 112, 27954, 7, '5% Root/Snare Resist 10 Hit'),
|
||||
(11, 112, 27960, 4, '6 All Stats '),
|
||||
(11, 112, 29475, 2, '31 Healing 11 Spelldamage 5 mp5 '),
|
||||
(11, 112, 31370, 6, '66 Healing 22 Spelldamage 20 Stamina '),
|
||||
(11, 112, 33999, 9, '35 Healing 12 Spelldamage '),
|
||||
(11, 112, 34001, 8, '12 Intellect '),
|
||||
(11, 112, 34003, 14, '20 Spell Penetration '),
|
||||
(11, 112, 34010, 15, '81 Healing 27 Spelldamage '),
|
||||
(11, 112, 35445, 0, '35 Healing 12 Spelldamage 7 mp5 ');
|
||||
/*!40000 ALTER TABLE `playerbots_enchants` ENABLE KEYS */;
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
|
||||
@@ -7,278 +7,278 @@ CREATE TABLE IF NOT EXISTS `playerbots_weightscale_data` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO `playerbots_weightscale_data` (`id`, `field`, `val`) VALUES
|
||||
(1, 'exprtng', 100),
|
||||
(1, 'str', 82),
|
||||
(1, 'critstrkrtng', 66),
|
||||
(1, 'agi', 53),
|
||||
(1, 'armorpenrtng', 52),
|
||||
(1, 'hitrtng', 48),
|
||||
(1, 'hastertng', 36),
|
||||
(1, 'atkpwr', 31),
|
||||
(1, 'armor', 5),
|
||||
(2, 'exprtng', 100),
|
||||
(2, 'str', 82),
|
||||
(2, 'critstrkrtng', 66),
|
||||
(2, 'agi', 53),
|
||||
(2, 'armorpenrtng', 52),
|
||||
(2, 'hitrtng', 48),
|
||||
(2, 'hastertng', 36),
|
||||
(2, 'atkpwr', 31),
|
||||
(2, 'armor', 5),
|
||||
(3, 'sta', 100),
|
||||
(3, 'dodgertng', 90),
|
||||
(3, 'defrtng', 86),
|
||||
(3, 'block', 81),
|
||||
(3, 'agi', 67),
|
||||
(3, 'parryrtng', 67),
|
||||
(3, 'blockrtng', 48),
|
||||
(3, 'str', 48),
|
||||
(3, 'exprtng', 19),
|
||||
(3, 'hitrtng', 10),
|
||||
(3, 'armorpenrtng', 10),
|
||||
(3, 'critstrkrtng', 7),
|
||||
(3, 'armor', 6),
|
||||
(3, 'hastertng', 1),
|
||||
(3, 'atkpwr', 1),
|
||||
(4, 'int', 100),
|
||||
(4, 'manargn', 88),
|
||||
(4, 'splpwr', 58),
|
||||
(4, 'critstrkrtng', 46),
|
||||
(4, 'hastertng', 35),
|
||||
(5, 'sta', 100),
|
||||
(5, 'dodgertng', 94),
|
||||
(5, 'block', 86),
|
||||
(5, 'defrtng', 86),
|
||||
(5, 'exprtng', 79),
|
||||
(5, 'agi', 76),
|
||||
(5, 'parryrtng', 76),
|
||||
(5, 'hitrtng', 58),
|
||||
(5, 'blockrtng', 52),
|
||||
(5, 'str', 50),
|
||||
(5, 'armor', 6),
|
||||
(5, 'atkpwr', 6),
|
||||
(5, 'splpwr', 4),
|
||||
(5, 'critstrkrtng', 3),
|
||||
(6, 'mledps', 470),
|
||||
(6, 'hitrtng', 100),
|
||||
(6, 'str', 80),
|
||||
(6, 'exprtng', 66),
|
||||
(6, 'critstrkrtng', 40),
|
||||
(6, 'atkpwr', 34),
|
||||
(6, 'agi', 32),
|
||||
(6, 'hastertng', 30),
|
||||
(6, 'armorpenrtng', 22),
|
||||
(6, 'splpwr', 9),
|
||||
(7, 'rgddps', 213),
|
||||
(7, 'hitrtng', 100),
|
||||
(7, 'agi', 58),
|
||||
(7, 'critstrkrtng', 40),
|
||||
(7, 'int', 37),
|
||||
(7, 'atkpwr', 30),
|
||||
(7, 'armorpenrtng', 28),
|
||||
(7, 'hastertng', 21),
|
||||
(8, 'rgddps', 379),
|
||||
(8, 'hitrtng', 100),
|
||||
(8, 'agi', 74),
|
||||
(8, 'critstrkrtng', 57),
|
||||
(8, 'armorpenrtng', 40),
|
||||
(8, 'int', 39),
|
||||
(8, 'atkpwr', 32),
|
||||
(8, 'hastertng', 24),
|
||||
(9, 'rgddps', 181),
|
||||
(9, 'hitrtng', 100),
|
||||
(9, 'agi', 76),
|
||||
(9, 'critstrkrtng', 42),
|
||||
(9, 'int', 35),
|
||||
(9, 'hastertng', 31),
|
||||
(9, 'atkpwr', 29),
|
||||
(9, 'armorpenrtng', 26),
|
||||
(10, 'mledps', 170),
|
||||
(10, 'agi', 100),
|
||||
(10, 'exprtng', 87),
|
||||
(10, 'hitrtng', 83),
|
||||
(10, 'critstrkrtng', 81),
|
||||
(10, 'atkpwr', 65),
|
||||
(10, 'armorpenrtng', 65),
|
||||
(10, 'hastertng', 64),
|
||||
(10, 'str', 55),
|
||||
(11, 'mledps', 220),
|
||||
(11, 'armorpenrtng', 100),
|
||||
(11, 'agi', 100),
|
||||
(11, 'exprtng', 82),
|
||||
(11, 'hitrtng', 80),
|
||||
(11, 'critstrkrtng', 75),
|
||||
(11, 'hastertng', 73),
|
||||
(11, 'str', 55),
|
||||
(11, 'atkpwr', 50),
|
||||
(12, 'mledps', 228),
|
||||
(12, 'exprtng', 100),
|
||||
(12, 'agi', 100),
|
||||
(12, 'hitrtng', 80),
|
||||
(12, 'armorpenrtng', 75),
|
||||
(12, 'critstrkrtng', 75),
|
||||
(12, 'hastertng', 75),
|
||||
(12, 'str', 55),
|
||||
(12, 'atkpwr', 50),
|
||||
(13, 'splpwr', 100),
|
||||
(13, 'manargn', 67),
|
||||
(13, 'int', 65),
|
||||
(13, 'hastertng', 59),
|
||||
(13, 'critstrkrtng', 48),
|
||||
(13, 'spi', 22),
|
||||
(14, 'manargn', 100),
|
||||
(14, 'int', 69),
|
||||
(14, 'splpwr', 60),
|
||||
(14, 'spi', 52),
|
||||
(14, 'critstrkrtng', 38),
|
||||
(14, 'hastertng', 31),
|
||||
(15, 'hitrtng', 100),
|
||||
(15, 'shasplpwr', 76),
|
||||
(15, 'splpwr', 76),
|
||||
(15, 'critstrkrtng', 54),
|
||||
(15, 'hastertng', 50),
|
||||
(15, 'spi', 16),
|
||||
(15, 'int', 16),
|
||||
(16, 'mledps', 360),
|
||||
(16, 'armorpenrtng', 100),
|
||||
(16, 'str', 99),
|
||||
(16, 'hitrtng', 91),
|
||||
(16, 'exprtng', 90),
|
||||
(16, 'critstrkrtng', 57),
|
||||
(16, 'hastertng', 55),
|
||||
(16, 'atkpwr', 36),
|
||||
(16, 'armor', 1),
|
||||
(17, 'mledps', 337),
|
||||
(17, 'hitrtng', 100),
|
||||
(17, 'str', 97),
|
||||
(17, 'exprtng', 81),
|
||||
(17, 'armorpenrtng', 61),
|
||||
(17, 'critstrkrtng', 45),
|
||||
(17, 'atkpwr', 35),
|
||||
(17, 'hastertng', 28),
|
||||
(17, 'armor', 1),
|
||||
(18, 'mledps', 419),
|
||||
(18, 'parryrtng', 100),
|
||||
(18, 'hitrtng', 97),
|
||||
(18, 'str', 96),
|
||||
(18, 'defrtng', 85),
|
||||
(18, 'exprtng', 69),
|
||||
(18, 'dodgertng', 61),
|
||||
(18, 'agi', 61),
|
||||
(18, 'sta', 61),
|
||||
(18, 'critstrkrtng', 49),
|
||||
(18, 'atkpwr', 41),
|
||||
(18, 'armorpenrtng', 31),
|
||||
(18, 'armor', 5),
|
||||
(19, 'mledps', 209),
|
||||
(19, 'str', 100),
|
||||
(19, 'hitrtng', 66),
|
||||
(19, 'exprtng', 51),
|
||||
(19, 'hastertng', 48),
|
||||
(19, 'critstrkrtng', 45),
|
||||
(19, 'atkpwr', 34),
|
||||
(19, 'armorpenrtng', 32),
|
||||
(19, 'armor', 1),
|
||||
(20, 'hitrtng', 100),
|
||||
(20, 'splpwr', 60),
|
||||
(20, 'hastertng', 56),
|
||||
(20, 'critstrkrtng', 40),
|
||||
(20, 'int', 11),
|
||||
(21, 'mledps', 135),
|
||||
(21, 'hitrtng', 100),
|
||||
(21, 'exprtng', 84),
|
||||
(21, 'agi', 55),
|
||||
(21, 'int', 55),
|
||||
(21, 'critstrkrtng', 55),
|
||||
(21, 'hastertng', 42),
|
||||
(21, 'str', 35),
|
||||
(21, 'atkpwr', 32),
|
||||
(21, 'splpwr', 29),
|
||||
(21, 'armorpenrtng', 26),
|
||||
(22, 'manargn', 100),
|
||||
(22, 'int', 85),
|
||||
(22, 'splpwr', 77),
|
||||
(22, 'critstrkrtng', 62),
|
||||
(22, 'hastertng', 35),
|
||||
(23, 'hitrtng', 100),
|
||||
(23, 'hastertng', 54),
|
||||
(23, 'arcsplpwr', 49),
|
||||
(23, 'splpwr', 49),
|
||||
(23, 'critstrkrtng', 37),
|
||||
(23, 'int', 34),
|
||||
(23, 'frosplpwr', 24),
|
||||
(23, 'firsplpwr', 24),
|
||||
(23, 'spi', 14),
|
||||
(24, 'hitrtng', 100),
|
||||
(24, 'hastertng', 53),
|
||||
(24, 'firsplpwr', 46),
|
||||
(24, 'splpwr', 46),
|
||||
(24, 'critstrkrtng', 43),
|
||||
(24, 'frosplpwr', 23),
|
||||
(24, 'arcsplpwr', 23),
|
||||
(24, 'int', 13),
|
||||
(25, 'hitrtng', 100),
|
||||
(25, 'hastertng', 42),
|
||||
(25, 'frosplpwr', 39),
|
||||
(25, 'splpwr', 39),
|
||||
(25, 'arcsplpwr', 19),
|
||||
(25, 'firsplpwr', 19),
|
||||
(25, 'critstrkrtng', 19),
|
||||
(25, 'int', 6),
|
||||
(26, 'hitrtng', 100),
|
||||
(26, 'shasplpwr', 72),
|
||||
(26, 'splpwr', 72),
|
||||
(26, 'hastertng', 61),
|
||||
(26, 'critstrkrtng', 38),
|
||||
(26, 'firsplpwr', 36),
|
||||
(26, 'spi', 34),
|
||||
(26, 'int', 15),
|
||||
(27, 'hitrtng', 100),
|
||||
(27, 'hastertng', 50),
|
||||
(27, 'firsplpwr', 45),
|
||||
(27, 'shasplpwr', 45),
|
||||
(27, 'splpwr', 45),
|
||||
(27, 'critstrkrtng', 31),
|
||||
(27, 'spi', 29),
|
||||
(27, 'int', 13),
|
||||
(28, 'hitrtng', 100),
|
||||
(28, 'firsplpwr', 47),
|
||||
(28, 'splpwr', 47),
|
||||
(28, 'hastertng', 46),
|
||||
(28, 'spi', 26),
|
||||
(28, 'shasplpwr', 23),
|
||||
(28, 'critstrkrtng', 16),
|
||||
(28, 'int', 13),
|
||||
(29, 'hitrtng', 100),
|
||||
(29, 'splpwr', 66),
|
||||
(29, 'hastertng', 54),
|
||||
(29, 'critstrkrtng', 43),
|
||||
(29, 'spi', 22),
|
||||
(29, 'int', 22),
|
||||
(30, 'agi', 100),
|
||||
(30, 'sta', 75),
|
||||
(30, 'dodgertng', 65),
|
||||
(30, 'defrtng', 60),
|
||||
(30, 'exprtng', 16),
|
||||
(30, 'str', 10),
|
||||
(30, 'armor', 10),
|
||||
(30, 'hitrtng', 8),
|
||||
(30, 'hastertng', 5),
|
||||
(30, 'atkpwr', 4),
|
||||
(30, 'feratkpwr', 4),
|
||||
(30, 'critstrkrtng', 3),
|
||||
(31, 'splpwr', 100),
|
||||
(31, 'manargn', 73),
|
||||
(31, 'hastertng', 57),
|
||||
(31, 'int', 51),
|
||||
(31, 'spi', 32),
|
||||
(31, 'critstrkrtng', 11),
|
||||
(32, 'agi', 100),
|
||||
(32, 'armorpenrtng', 90),
|
||||
(32, 'str', 80),
|
||||
(32, 'critstrkrtng', 55),
|
||||
(32, 'exprtng', 50),
|
||||
(32, 'hitrtng', 50),
|
||||
(32, 'feratkpwr', 40),
|
||||
(32, 'atkpwr', 40),
|
||||
(32, 'hastertng', 35);
|
||||
(1, 'exprtng', 100),
|
||||
(1, 'str', 82),
|
||||
(1, 'critstrkrtng', 66),
|
||||
(1, 'agi', 53),
|
||||
(1, 'armorpenrtng', 52),
|
||||
(1, 'hitrtng', 48),
|
||||
(1, 'hastertng', 36),
|
||||
(1, 'atkpwr', 31),
|
||||
(1, 'armor', 5),
|
||||
(2, 'exprtng', 100),
|
||||
(2, 'str', 82),
|
||||
(2, 'critstrkrtng', 66),
|
||||
(2, 'agi', 53),
|
||||
(2, 'armorpenrtng', 52),
|
||||
(2, 'hitrtng', 48),
|
||||
(2, 'hastertng', 36),
|
||||
(2, 'atkpwr', 31),
|
||||
(2, 'armor', 5),
|
||||
(3, 'sta', 100),
|
||||
(3, 'dodgertng', 90),
|
||||
(3, 'defrtng', 86),
|
||||
(3, 'block', 81),
|
||||
(3, 'agi', 67),
|
||||
(3, 'parryrtng', 67),
|
||||
(3, 'blockrtng', 48),
|
||||
(3, 'str', 48),
|
||||
(3, 'exprtng', 19),
|
||||
(3, 'hitrtng', 10),
|
||||
(3, 'armorpenrtng', 10),
|
||||
(3, 'critstrkrtng', 7),
|
||||
(3, 'armor', 6),
|
||||
(3, 'hastertng', 1),
|
||||
(3, 'atkpwr', 1),
|
||||
(4, 'int', 100),
|
||||
(4, 'manargn', 88),
|
||||
(4, 'splpwr', 58),
|
||||
(4, 'critstrkrtng', 46),
|
||||
(4, 'hastertng', 35),
|
||||
(5, 'sta', 100),
|
||||
(5, 'dodgertng', 94),
|
||||
(5, 'block', 86),
|
||||
(5, 'defrtng', 86),
|
||||
(5, 'exprtng', 79),
|
||||
(5, 'agi', 76),
|
||||
(5, 'parryrtng', 76),
|
||||
(5, 'hitrtng', 58),
|
||||
(5, 'blockrtng', 52),
|
||||
(5, 'str', 50),
|
||||
(5, 'armor', 6),
|
||||
(5, 'atkpwr', 6),
|
||||
(5, 'splpwr', 4),
|
||||
(5, 'critstrkrtng', 3),
|
||||
(6, 'mledps', 470),
|
||||
(6, 'hitrtng', 100),
|
||||
(6, 'str', 80),
|
||||
(6, 'exprtng', 66),
|
||||
(6, 'critstrkrtng', 40),
|
||||
(6, 'atkpwr', 34),
|
||||
(6, 'agi', 32),
|
||||
(6, 'hastertng', 30),
|
||||
(6, 'armorpenrtng', 22),
|
||||
(6, 'splpwr', 9),
|
||||
(7, 'rgddps', 213),
|
||||
(7, 'hitrtng', 100),
|
||||
(7, 'agi', 58),
|
||||
(7, 'critstrkrtng', 40),
|
||||
(7, 'int', 37),
|
||||
(7, 'atkpwr', 30),
|
||||
(7, 'armorpenrtng', 28),
|
||||
(7, 'hastertng', 21),
|
||||
(8, 'rgddps', 379),
|
||||
(8, 'hitrtng', 100),
|
||||
(8, 'agi', 74),
|
||||
(8, 'critstrkrtng', 57),
|
||||
(8, 'armorpenrtng', 40),
|
||||
(8, 'int', 39),
|
||||
(8, 'atkpwr', 32),
|
||||
(8, 'hastertng', 24),
|
||||
(9, 'rgddps', 181),
|
||||
(9, 'hitrtng', 100),
|
||||
(9, 'agi', 76),
|
||||
(9, 'critstrkrtng', 42),
|
||||
(9, 'int', 35),
|
||||
(9, 'hastertng', 31),
|
||||
(9, 'atkpwr', 29),
|
||||
(9, 'armorpenrtng', 26),
|
||||
(10, 'mledps', 170),
|
||||
(10, 'agi', 100),
|
||||
(10, 'exprtng', 87),
|
||||
(10, 'hitrtng', 83),
|
||||
(10, 'critstrkrtng', 81),
|
||||
(10, 'atkpwr', 65),
|
||||
(10, 'armorpenrtng', 65),
|
||||
(10, 'hastertng', 64),
|
||||
(10, 'str', 55),
|
||||
(11, 'mledps', 220),
|
||||
(11, 'armorpenrtng', 100),
|
||||
(11, 'agi', 100),
|
||||
(11, 'exprtng', 82),
|
||||
(11, 'hitrtng', 80),
|
||||
(11, 'critstrkrtng', 75),
|
||||
(11, 'hastertng', 73),
|
||||
(11, 'str', 55),
|
||||
(11, 'atkpwr', 50),
|
||||
(12, 'mledps', 228),
|
||||
(12, 'exprtng', 100),
|
||||
(12, 'agi', 100),
|
||||
(12, 'hitrtng', 80),
|
||||
(12, 'armorpenrtng', 75),
|
||||
(12, 'critstrkrtng', 75),
|
||||
(12, 'hastertng', 75),
|
||||
(12, 'str', 55),
|
||||
(12, 'atkpwr', 50),
|
||||
(13, 'splpwr', 100),
|
||||
(13, 'manargn', 67),
|
||||
(13, 'int', 65),
|
||||
(13, 'hastertng', 59),
|
||||
(13, 'critstrkrtng', 48),
|
||||
(13, 'spi', 22),
|
||||
(14, 'manargn', 100),
|
||||
(14, 'int', 69),
|
||||
(14, 'splpwr', 60),
|
||||
(14, 'spi', 52),
|
||||
(14, 'critstrkrtng', 38),
|
||||
(14, 'hastertng', 31),
|
||||
(15, 'hitrtng', 100),
|
||||
(15, 'shasplpwr', 76),
|
||||
(15, 'splpwr', 76),
|
||||
(15, 'critstrkrtng', 54),
|
||||
(15, 'hastertng', 50),
|
||||
(15, 'spi', 16),
|
||||
(15, 'int', 16),
|
||||
(16, 'mledps', 360),
|
||||
(16, 'armorpenrtng', 100),
|
||||
(16, 'str', 99),
|
||||
(16, 'hitrtng', 91),
|
||||
(16, 'exprtng', 90),
|
||||
(16, 'critstrkrtng', 57),
|
||||
(16, 'hastertng', 55),
|
||||
(16, 'atkpwr', 36),
|
||||
(16, 'armor', 1),
|
||||
(17, 'mledps', 337),
|
||||
(17, 'hitrtng', 100),
|
||||
(17, 'str', 97),
|
||||
(17, 'exprtng', 81),
|
||||
(17, 'armorpenrtng', 61),
|
||||
(17, 'critstrkrtng', 45),
|
||||
(17, 'atkpwr', 35),
|
||||
(17, 'hastertng', 28),
|
||||
(17, 'armor', 1),
|
||||
(18, 'mledps', 419),
|
||||
(18, 'parryrtng', 100),
|
||||
(18, 'hitrtng', 97),
|
||||
(18, 'str', 96),
|
||||
(18, 'defrtng', 85),
|
||||
(18, 'exprtng', 69),
|
||||
(18, 'dodgertng', 61),
|
||||
(18, 'agi', 61),
|
||||
(18, 'sta', 61),
|
||||
(18, 'critstrkrtng', 49),
|
||||
(18, 'atkpwr', 41),
|
||||
(18, 'armorpenrtng', 31),
|
||||
(18, 'armor', 5),
|
||||
(19, 'mledps', 209),
|
||||
(19, 'str', 100),
|
||||
(19, 'hitrtng', 66),
|
||||
(19, 'exprtng', 51),
|
||||
(19, 'hastertng', 48),
|
||||
(19, 'critstrkrtng', 45),
|
||||
(19, 'atkpwr', 34),
|
||||
(19, 'armorpenrtng', 32),
|
||||
(19, 'armor', 1),
|
||||
(20, 'hitrtng', 100),
|
||||
(20, 'splpwr', 60),
|
||||
(20, 'hastertng', 56),
|
||||
(20, 'critstrkrtng', 40),
|
||||
(20, 'int', 11),
|
||||
(21, 'mledps', 135),
|
||||
(21, 'hitrtng', 100),
|
||||
(21, 'exprtng', 84),
|
||||
(21, 'agi', 55),
|
||||
(21, 'int', 55),
|
||||
(21, 'critstrkrtng', 55),
|
||||
(21, 'hastertng', 42),
|
||||
(21, 'str', 35),
|
||||
(21, 'atkpwr', 32),
|
||||
(21, 'splpwr', 29),
|
||||
(21, 'armorpenrtng', 26),
|
||||
(22, 'manargn', 100),
|
||||
(22, 'int', 85),
|
||||
(22, 'splpwr', 77),
|
||||
(22, 'critstrkrtng', 62),
|
||||
(22, 'hastertng', 35),
|
||||
(23, 'hitrtng', 100),
|
||||
(23, 'hastertng', 54),
|
||||
(23, 'arcsplpwr', 49),
|
||||
(23, 'splpwr', 49),
|
||||
(23, 'critstrkrtng', 37),
|
||||
(23, 'int', 34),
|
||||
(23, 'frosplpwr', 24),
|
||||
(23, 'firsplpwr', 24),
|
||||
(23, 'spi', 14),
|
||||
(24, 'hitrtng', 100),
|
||||
(24, 'hastertng', 53),
|
||||
(24, 'firsplpwr', 46),
|
||||
(24, 'splpwr', 46),
|
||||
(24, 'critstrkrtng', 43),
|
||||
(24, 'frosplpwr', 23),
|
||||
(24, 'arcsplpwr', 23),
|
||||
(24, 'int', 13),
|
||||
(25, 'hitrtng', 100),
|
||||
(25, 'hastertng', 42),
|
||||
(25, 'frosplpwr', 39),
|
||||
(25, 'splpwr', 39),
|
||||
(25, 'arcsplpwr', 19),
|
||||
(25, 'firsplpwr', 19),
|
||||
(25, 'critstrkrtng', 19),
|
||||
(25, 'int', 6),
|
||||
(26, 'hitrtng', 100),
|
||||
(26, 'shasplpwr', 72),
|
||||
(26, 'splpwr', 72),
|
||||
(26, 'hastertng', 61),
|
||||
(26, 'critstrkrtng', 38),
|
||||
(26, 'firsplpwr', 36),
|
||||
(26, 'spi', 34),
|
||||
(26, 'int', 15),
|
||||
(27, 'hitrtng', 100),
|
||||
(27, 'hastertng', 50),
|
||||
(27, 'firsplpwr', 45),
|
||||
(27, 'shasplpwr', 45),
|
||||
(27, 'splpwr', 45),
|
||||
(27, 'critstrkrtng', 31),
|
||||
(27, 'spi', 29),
|
||||
(27, 'int', 13),
|
||||
(28, 'hitrtng', 100),
|
||||
(28, 'firsplpwr', 47),
|
||||
(28, 'splpwr', 47),
|
||||
(28, 'hastertng', 46),
|
||||
(28, 'spi', 26),
|
||||
(28, 'shasplpwr', 23),
|
||||
(28, 'critstrkrtng', 16),
|
||||
(28, 'int', 13),
|
||||
(29, 'hitrtng', 100),
|
||||
(29, 'splpwr', 66),
|
||||
(29, 'hastertng', 54),
|
||||
(29, 'critstrkrtng', 43),
|
||||
(29, 'spi', 22),
|
||||
(29, 'int', 22),
|
||||
(30, 'agi', 100),
|
||||
(30, 'sta', 75),
|
||||
(30, 'dodgertng', 65),
|
||||
(30, 'defrtng', 60),
|
||||
(30, 'exprtng', 16),
|
||||
(30, 'str', 10),
|
||||
(30, 'armor', 10),
|
||||
(30, 'hitrtng', 8),
|
||||
(30, 'hastertng', 5),
|
||||
(30, 'atkpwr', 4),
|
||||
(30, 'feratkpwr', 4),
|
||||
(30, 'critstrkrtng', 3),
|
||||
(31, 'splpwr', 100),
|
||||
(31, 'manargn', 73),
|
||||
(31, 'hastertng', 57),
|
||||
(31, 'int', 51),
|
||||
(31, 'spi', 32),
|
||||
(31, 'critstrkrtng', 11),
|
||||
(32, 'agi', 100),
|
||||
(32, 'armorpenrtng', 90),
|
||||
(32, 'str', 80),
|
||||
(32, 'critstrkrtng', 55),
|
||||
(32, 'exprtng', 50),
|
||||
(32, 'hitrtng', 50),
|
||||
(32, 'feratkpwr', 40),
|
||||
(32, 'atkpwr', 40),
|
||||
(32, 'hastertng', 35);
|
||||
|
||||
@@ -7,35 +7,35 @@ CREATE TABLE IF NOT EXISTS `playerbots_weightscales` (
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
|
||||
|
||||
INSERT INTO `playerbots_weightscales` (`id`, `name`, `class`) VALUES
|
||||
(1, 'arms', 1),
|
||||
(2, 'fury', 1),
|
||||
(3, 'prot', 1),
|
||||
(4, 'holy', 2),
|
||||
(5, 'prot', 2),
|
||||
(6, 'retrib', 2),
|
||||
(7, 'beast', 3),
|
||||
(8, 'marks', 3),
|
||||
(9, 'surv', 3),
|
||||
(10, 'assas', 4),
|
||||
(11, 'combat', 4),
|
||||
(12, 'subtle', 4),
|
||||
(13, 'disc', 5),
|
||||
(14, 'holy', 5),
|
||||
(15, 'shadow', 5),
|
||||
(16, 'blooddps', 6),
|
||||
(17, 'frostdps', 6),
|
||||
(18, 'frosttank', 6),
|
||||
(19, 'unholydps', 6),
|
||||
(20, 'elem', 7),
|
||||
(21, 'enhance', 7),
|
||||
(22, 'resto', 7),
|
||||
(23, 'arcane', 8),
|
||||
(24, 'fire', 8),
|
||||
(25, 'frost', 8),
|
||||
(26, 'afflic', 9),
|
||||
(27, 'demo', 9),
|
||||
(28, 'destro', 9),
|
||||
(29, 'balance', 11),
|
||||
(30, 'feraltank', 11),
|
||||
(31, 'resto', 11),
|
||||
(32, 'feraldps', 11);
|
||||
(1, 'arms', 1),
|
||||
(2, 'fury', 1),
|
||||
(3, 'prot', 1),
|
||||
(4, 'holy', 2),
|
||||
(5, 'prot', 2),
|
||||
(6, 'retrib', 2),
|
||||
(7, 'beast', 3),
|
||||
(8, 'marks', 3),
|
||||
(9, 'surv', 3),
|
||||
(10, 'assas', 4),
|
||||
(11, 'combat', 4),
|
||||
(12, 'subtle', 4),
|
||||
(13, 'disc', 5),
|
||||
(14, 'holy', 5),
|
||||
(15, 'shadow', 5),
|
||||
(16, 'blooddps', 6),
|
||||
(17, 'frostdps', 6),
|
||||
(18, 'frosttank', 6),
|
||||
(19, 'unholydps', 6),
|
||||
(20, 'elem', 7),
|
||||
(21, 'enhance', 7),
|
||||
(22, 'resto', 7),
|
||||
(23, 'arcane', 8),
|
||||
(24, 'fire', 8),
|
||||
(25, 'frost', 8),
|
||||
(26, 'afflic', 9),
|
||||
(27, 'demo', 9),
|
||||
(28, 'destro', 9),
|
||||
(29, 'balance', 11),
|
||||
(30, 'feraltank', 11),
|
||||
(31, 'resto', 11),
|
||||
(32, 'feraldps', 11);
|
||||
@@ -24,9 +24,9 @@ CREATE TABLE IF NOT EXISTS `updates_include` (
|
||||
DELETE FROM `updates_include`;
|
||||
/*!40000 ALTER TABLE `updates_include` DISABLE KEYS */;
|
||||
INSERT INTO `updates_include` (`path`, `state`) VALUES
|
||||
('$/data/sql/playerbots/updates', 'RELEASED'),
|
||||
('$/data/sql/playerbots/custom', 'CUSTOM'),
|
||||
('$/data/sql/playerbots/archive', 'ARCHIVED');
|
||||
('$/data/sql/playerbots/updates', 'RELEASED'),
|
||||
('$/data/sql/playerbots/custom', 'CUSTOM'),
|
||||
('$/data/sql/playerbots/archive', 'ARCHIVED');
|
||||
/*!40000 ALTER TABLE `updates_include` ENABLE KEYS */;
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
-- Create playerbots_account_type table for tracking accounts assignments
|
||||
DROP TABLE IF EXISTS `playerbots_account_type`;
|
||||
CREATE TABLE `playerbots_account_type` (
|
||||
`account_id` int unsigned NOT NULL,
|
||||
`account_type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '0 = unassigned, 1 = RNDbot, 2 = AddClass',
|
||||
`assignment_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`account_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Playerbot account type assignments';
|
||||
|
||||
@@ -1,849 +0,0 @@
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "посреди нигде" WHERE `id` = 1;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "в неопределенном месте" WHERE `id` = 2;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "где-то" WHERE `id` = 3;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что-то" WHERE `id` = 4;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "интересно, какой на вкус %item_link" WHERE `id` = 5;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "нет, мне выпал %item_link" WHERE `id` = 6;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "опять этот хлам %item_link" WHERE `id` = 7;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "похоже, я лутаю мусор %item_link" WHERE `id` = 8;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ну, лучше чем ничего, наверное %item_link" WHERE `id` = 9;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "не знаю, что делать с %item_link" WHERE `id` = 10;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "интересно, какой на вкус %item_link" WHERE `id` = 11;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "могу лутать %item_link весь день" WHERE `id` = 12;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "еще один день, еще один %item_link" WHERE `id` = 13;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "получил немного %item_link" WHERE `id` = 14;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "немного %item_link — это нормально" WHERE `id` = 15;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "неплохо, только что получил %item_link" WHERE `id` = 16;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "только что залутал %item_link в %zone_name" WHERE `id` = 17;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "могу найти применение %item_link" WHERE `id` = 18;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "деньги, деньги, деньги %item_link" WHERE `id` = 19;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "получил %item_link" WHERE `id` = 20;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item_link — лучший для охотника" WHERE `id` = 21;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item_link — лучший для %my_class" WHERE `id` = 22;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "сегодня удача на моей стороне %item_link" WHERE `id` = 23;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "классный %item_link, только что залутал" WHERE `id` = 24;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "вау, только что получил %item_link" WHERE `id` = 25;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item_link — лучший для охотника" WHERE `id` = 26;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item_link — лучший для %my_class" WHERE `id` = 27;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "сегодня удача на моей стороне %item_link" WHERE `id` = 28;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "классный %item_link, только что залутал" WHERE `id` = 29;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ОГО, посмотрите, что я только что получил %item_link!!!" WHERE `id` = 30;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нет @#$@%! Не может быть, я получил %item_link, это безумие" WHERE `id` = 31;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нет @#$@%! Не может быть, я получил %item_link, это безумие" WHERE `id` = 32;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я только что взял %quest_link" WHERE `id` = 33;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "только что принял %quest_link" WHERE `id` = 34;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%quest_link попробую выполнить это задание" WHERE `id` = 35;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "взял %quest_link в %zone_name" WHERE `id` = 36;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Наконец-то закончил %quest_obj_name для %quest_link" WHERE `id` = 37;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "наконец-то получил %quest_obj_available/%quest_obj_required %quest_obj_name для %quest_link" WHERE `id` = 38;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%quest_obj_full_formatted для %quest_link, наконец-то" WHERE `id` = 39;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ох, получил %quest_obj_available/%quest_obj_required %quest_obj_name для %quest_link" WHERE `id` = 40;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "еще нужно %quest_obj_missing %quest_obj_name для %quest_link" WHERE `id` = 41;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%quest_obj_full_formatted, все еще работаю над %quest_link" WHERE `id` = 42;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Наконец-то закончил с %item_link для %quest_link" WHERE `id` = 43;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "наконец-то получил %quest_obj_available/%quest_obj_required %item_link для %quest_link" WHERE `id` = 44;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%quest_obj_full_formatted для %quest_link, наконец-то" WHERE `id` = 45;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ох, получил %quest_obj_available/%quest_obj_required %item_link для %quest_link" WHERE `id` = 46;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "еще нужно %quest_obj_missing %item_link для %quest_link" WHERE `id` = 47;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%quest_obj_full_formatted, все еще работаю над %quest_link" WHERE `id` = 48;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не успел завершить %quest_link вовремя..." WHERE `id` = 49;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Время для %quest_link вышло :(" WHERE `id` = 50;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я выполнил все задачи для %quest_link" WHERE `id` = 51;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Выполнил все задачи для %quest_link" WHERE `id` = 52;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Скоро сдам %quest_link, только что закончил все задачи" WHERE `id` = 53;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Да, наконец-то сдал %quest_link" WHERE `id` = 54;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "сдал %quest_link" WHERE `id` = 55;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "смог завершить %quest_link, только что сдал" WHERE `id` = 56;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "только что сдал %quest_link" WHERE `id` = 57;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "только что сдал %quest_link в %zone_name" WHERE `id` = 58;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "еще одна жертва — %victim_name" WHERE `id` = 59;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я продолжаю убивать %victim_name, нечего рассказывать" WHERE `id` = 60;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "еще один %victim_name пал" WHERE `id` = 61;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "минус один %victim_name в %zone_name" WHERE `id` = 62;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Убил этого элитного ублюдка %victim_name!" WHERE `id` = 63;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "убил элиту %victim_name в %zone_name" WHERE `id` = 64;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Фух, удалось завалить %victim_name!" WHERE `id` = 65;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Это было круто! Только что убил %victim_name! Теперь есть что рассказать" WHERE `id` = 66;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Йо, я только что убил %victim_name!" WHERE `id` = 67;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "убил редкого %victim_name в %zone_name" WHERE `id` = 68;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Что я только что убил? %victim_name" WHERE `id` = 69;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Только что убил этого пета %victim_name" WHERE `id` = 70;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "О да, только что убил %victim_name" WHERE `id` = 71;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "убил %victim_name в %zone_name" WHERE `id` = 72;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Динг!" WHERE `id` = 73;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Да, я теперь %my_level уровень!" WHERE `id` = 74;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я только что повысил уровень" WHERE `id` = 75;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я %my_level уровень!!!" WHERE `id` = 76;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Становлюсь сильнее, уже %my_level уровень!!!" WHERE `id` = 77;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Только что достиг %my_level уровня!!!" WHERE `id` = 78;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ОГО, наконец-то %my_level уровень!!!" WHERE `id` = 79;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%my_level!!! теперь могу заниматься эндгейм-контентом" WHERE `id` = 80;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "свежий новый уровень %my_level %my_class!!!" WHERE `id` = 81;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "еще один уровень %my_level %my_race %my_class!" WHERE `id` = 82;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Молодец %other_name. Ты это заслужил." WHERE `id` = 83;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Это было ужасно %other_name. Не хотел этого делать, но..." WHERE `id` = 84;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен %instance_name?" WHERE `id` = 85;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть группы в %instance_name?" WHERE `id` = 86;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь в %instance_name?" WHERE `id` = 87;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ЛФД: %instance_name." WHERE `id` = 88;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен %my_role для %instance_name?" WHERE `id` = 89;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не хватает %my_role для %instance_name?" WHERE `id` = 90;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Могу быть %my_role для %instance_name." WHERE `id` = 91;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь с %instance_name?" WHERE `id` = 92;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь %my_role с %instance_name?" WHERE `id` = 93;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен шмот из %instance_name?" WHERE `id` = 94;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Немного пофармить в %instance_name?" WHERE `id` = 95;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ищу %instance_name" WHERE `id` = 96;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь в %instance_name." WHERE `id` = 97;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу пройти %instance_name." WHERE `id` = 98;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%my_role ищет %instance_name." WHERE `id` = 99;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Как насчет %instance_name?" WHERE `id` = 100;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет пофармить %instance_name?" WHERE `id` = 101;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пойдем в %instance_name?" WHERE `id` = 102;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ищу %instance_name." WHERE `id` = 103;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь с квестами в %instance_name?" WHERE `id` = 104;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу квестить в %instance_name." WHERE `id` = 105;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-то с квестами в %instance_name?" WHERE `id` = 106;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Могу помочь с квестами в %instance_name." WHERE `id` = 107;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%my_role: есть место в группе для %instance_name?" WHERE `id` = 108;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь еще ходит в %instance_name в наши дни?" WHERE `id` = 109;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%instance_name: кто хочет взять %my_role?" WHERE `id` = 110;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть ли смысл быть %my_role в %instance_name?" WHERE `id` = 111;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Стоит ли идти в %instance_name?" WHERE `id` = 112;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужны еще люди для %instance_name?" WHERE `id` = 113;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "В %instance_name боссы дропают хороший шмот. Пойдем?" WHERE `id` = 114;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Как насчет %instance_name?" WHERE `id` = 115;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен %my_role?" WHERE `id` = 116;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен %my_role?" WHERE `id` = 117;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет %instance_name?" WHERE `id` = 118;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто может призвать меня в %instance_name?" WHERE `id` = 119;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Встретимся в %instance_name" WHERE `id` = 120;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу быструю пробежку %instance_name" WHERE `id` = 121;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу полный забег %instance_name" WHERE `id` = 122;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сколько раз ты был в %instance_name?" WHERE `id` = 123;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Еще один забег в %instance_name?" WHERE `id` = 124;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вайпнулись в %instance_name? Возьмите меня!" WHERE `id` = 125;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Возьмите меня в %instance_name, пожалуйста." WHERE `id` = 126;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Быстрый забег в %instance_name?" WHERE `id` = 127;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Полный забег в %instance_name?" WHERE `id` = 128;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто может взять %my_role в %instance_name?" WHERE `id` = 129;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ЛФГ %instance_name, я %my_role" WHERE `id` = 130;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%my_role ЛФГ %instance_name" WHERE `id` = 131;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь с %quest_link?" WHERE `id` = 132;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет поделиться %quest_link?" WHERE `id` = 133;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто делает %quest_link?" WHERE `id` = 134;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу сделать %quest_link." WHERE `id` = 135;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет пофармить %category?" WHERE `id` = 136;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ищу помощь для фарма %category." WHERE `id` = 137;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Черт, %category такие дорогие!" WHERE `id` = 138;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу %category." WHERE `id` = 139;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь с %category." WHERE `id` = 140;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Куплю %category." WHERE `id` = 141;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому интересно %category?" WHERE `id` = 142;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Продам %category." WHERE `id` = 143;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Продаю %category дешевле, чем на Аукционе." WHERE `id` = 144;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет пофармить %category?" WHERE `id` = 145;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу пофармить %category." WHERE `id` = 146;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ищу пати после %category." WHERE `id` = 147;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Любые %category приветствуются." WHERE `id` = 148;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Куплю что угодно из %category." WHERE `id` = 149;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вау, кто-то фармит %category!" WHERE `id` = 150;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%category отлично продаются на аукционе." WHERE `id` = 151;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Аукцион горячий по %category." WHERE `id` = 152;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%category на рынке." WHERE `id` = 153;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу обменять немного %category." WHERE `id` = 154;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужно больше %category." WHERE `id` = 155;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь может поделиться %category?" WHERE `id` = 156;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет %category?" WHERE `id` = 157;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Немного %category, пожалуйста?" WHERE `id` = 158;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надо было прокачать навык для %category." WHERE `id` = 159;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Очень хочу %category." WHERE `id` = 160;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Люди убивают ради %category." WHERE `id` = 161;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%category — отличная сделка!" WHERE `id` = 162;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все сходят с ума по %category!" WHERE `id` = 163;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Где лучше всего фармить %category?" WHERE `id` = 164;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я полностью готов к %category." WHERE `id` = 165;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Выгодно ли продавать %category?" WHERE `id` = 166;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Наверное, я бы оставил все свои %category себе." WHERE `id` = 167;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна группа? Может, пофармить %category?" WHERE `id` = 168;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все еще думаю о %category." WHERE `id` = 169;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я уже слышал о %category, но карманы пусты." WHERE `id` = 170;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ЛФГ для %category" WHERE `id` = 171;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сделает ли продажа %category меня богатым?" WHERE `id` = 172;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ОК. Завтра фармлю %category." WHERE `id` = 173;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все говорят о %category." WHERE `id` = 174;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Видел как минимум десять человек, фармящих %category." WHERE `id` = 175;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вчера продал все свои %category. Теперь я полностью на мели!" WHERE `id` = 176;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу вступить в гильдию, фармящую %category." WHERE `id` = 177;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто фармит репутацию %faction?" WHERE `id` = 178;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто поможет с %faction?" WHERE `id` = 179;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу квестить ради %faction." WHERE `id` = 180;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%faction — лучшая." WHERE `id` = 181;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужно чуть-чуть, чтобы стать %rep_level у %faction." WHERE `id` = 182;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь уже %rep_level у %faction?" WHERE `id` = 183;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет стать %rep_level у %faction?" WHERE `id` = 184;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я никогда не стану %rep_level у %faction." WHERE `id` = 185;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-то не хватает репы у %faction?" WHERE `id` = 186;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Могу помочь с фармом репы %faction." WHERE `id` = 187;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Чем больше репы, тем лучше. Особенно у %faction." WHERE `id` = 188;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%faction: нужно %rndK для %rep_level." WHERE `id` = 189;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто может поделиться квестами %faction?" WHERE `id` = 190;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть подземелья для %faction?" WHERE `id` = 191;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу фармить репу %faction." WHERE `id` = 192;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Давайте фармить репу %faction!" WHERE `id` = 193;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Фармлю репу %faction." WHERE `id` = 194;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу пофармить %faction." WHERE `id` = 195;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна помощь с %faction." WHERE `id` = 196;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%faction что-то полезное продает?" WHERE `id` = 197;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть ли у %faction торговцы?" WHERE `id` = 198;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто фармит %faction?" WHERE `id` = 199;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Как лучше всего фармить %faction?" WHERE `id` = 200;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ненавижу фарм репы %faction." WHERE `id` = 201;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я так устал от %faction." WHERE `id` = 202;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пойдем за %faction?" WHERE `id` = 203;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кажется, все уже %rep_level у %faction. Только я, как обычно, опаздываю." WHERE `id` = 204;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ЛФГ для фарма репы %faction?" WHERE `id` = 205;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь подскажет хорошее место для фарма репы %faction?" WHERE `id` = 206;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Будет ли польза от репы %faction?" WHERE `id` = 207;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто бы мог подумать, что репа %faction окажется полезной..." WHERE `id` = 208;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу быть превознесенным у всех фракций, начну с %faction." WHERE `id` = 209;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть ли смысл повышать репу с %faction?" WHERE `id` = 210;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Что лучше для %faction? Квесты или фарм мобов?" WHERE `id` = 211;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пофармлю репу %faction для тебя. Только дай немного золота." WHERE `id` = 212;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Думаю, фармить репу %faction — это навсегда." WHERE `id` = 213;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я убиваю ради %faction каждый день, но все еще далеко до %rep_level." WHERE `id` = 214;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "На %my_level депозиты на аукционе уменьшатся, да?" WHERE `id` = 215;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сколько у тебя превознесенных реп?" WHERE `id` = 216;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет быть %my_level у %faction?" WHERE `id` = 217;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Черт. Моя гильдия вчера хорошо пофармила %faction без меня." WHERE `id` = 218;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Никто не хочет мне помогать, потому что я %rep_level у %faction." WHERE `id` = 219;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пожалуйста, держись подальше от %faction." WHERE `id` = 220;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу в пати в %zone_name." WHERE `id` = 221;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто ищет %my_role?" WHERE `id` = 222;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%my_role ищет гильдию." WHERE `id` = 223;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ищу золото." WHERE `id` = 224;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%my_role хочет вступить в хорошую гильдию." WHERE `id` = 225;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужен друг." WHERE `id` = 226;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь чувствует себя одиноко?" WHERE `id` = 227;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Скучно..." WHERE `id` = 228;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет немного?" WHERE `id` = 229;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Давай, поймай меня!" WHERE `id` = 230;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Может, дуэль в %zone_name?" WHERE `id` = 231;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь что-то делает?" WHERE `id` = 232;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%zone_name: кто-нибудь здесь есть?" WHERE `id` = 233;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%zone_name: где все?" WHERE `id` = 234;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Похоже, я один в %zone_name." WHERE `id` = 235;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Встретимся в %zone_name." WHERE `id` = 236;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Давайте квестить в %zone_name!" WHERE `id` = 237;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%zone_name — лучшее место!" WHERE `id` = 238;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу в %zone_name. Кто со мной?" WHERE `id` = 239;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет пойти в %zone_name?" WHERE `id` = 240;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне не нравится %zone_name. Куда пойти?" WHERE `id` = 241;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть хорошие квесты в %zone_name?" WHERE `id` = 242;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Куда идти после %zone_name?" WHERE `id` = 243;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто в %zone_name?" WHERE `id` = 244;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ЛФГ в %zone_name." WHERE `id` = 245;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%zone_name — худшее место." WHERE `id` = 246;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Лови меня в %zone_name!" WHERE `id` = 247;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пойдем в %zone_name!" WHERE `id` = 248;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу квестить в %zone_name" WHERE `id` = 249;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У кого есть квесты в %zone_name?" WHERE `id` = 250;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Приходите сюда, в %zone_name!" WHERE `id` = 251;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Похоже, в %zone_name нет Орды" WHERE `id` = 252;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Похоже, в %zone_name нет Альянса" WHERE `id` = 253;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я очень устал от %zone_name. Может, пойти куда-нибудь еще?" WHERE `id` = 254;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Удачи" WHERE `id` = 255;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу домой, а потом на край" WHERE `id` = 256;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь знает, что нужно для двуручного боя?" WHERE `id` = 257;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Всем привет!" WHERE `id` = 258;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%zone_name уютно" WHERE `id` = 259;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я отлично себя чувствую" WHERE `id` = 260;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не игнорирую людей, я троллю их, пока они не проигнорируют меня" WHERE `id` = 261;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Что думаете о моей сборке? %my_role" WHERE `id` = 262;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Рад видеть, что чат еще помнит" WHERE `id` = 263;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Как и все оружие — это лучший для охотника" WHERE `id` = 264;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вся суть игры для меня — соло и поиск новых способов соло" WHERE `id` = 265;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я НИКОГДА никого не обманывал" WHERE `id` = 266;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ах да, мир варкрафта, где я ищу жизненные советы" WHERE `id` = 267;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "АЛЛО?" WHERE `id` = 268;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пора пробиваться в %zone_name" WHERE `id` = 269;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%zone_name" WHERE `id` = 270;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "надо в туалет" WHERE `id` = 271;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Если не лутать скинируемых мобов, твой пп уменьшится на 1мм навсегда" WHERE `id` = 272;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "НЕТТТТТТТТТТ" WHERE `id` = 273;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я ЛЮБЛЮ КАРТОШКУ" WHERE `id` = 274;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "w чат" WHERE `id` = 275;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "привет, как дела" WHERE `id` = 276;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "только что вышел и снова зашел" WHERE `id` = 277;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "можете потише, я заблудился в %zone_name" WHERE `id` = 278;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "кто хочет выпить со мной в %zone_name ... ик!" WHERE `id` = 279;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "хахахахахииииииии дирин диринг инггггг хахахахахииииииииииииии" WHERE `id` = 280;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "раньше приманка была правдоподобной" WHERE `id` = 281;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "может, ты просто потерял невинность" WHERE `id` = 282;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "есть гильдии, готовые тащить %my_role?" WHERE `id` = 283;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "чем выше уровень, тем легче золото" WHERE `id` = 284;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "утро" WHERE `id` = 285;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "почему у меня болит задница?" WHERE `id` = 286;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне кажется, дух — лучший для прокачки" WHERE `id` = 287;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Особенно для тролля" WHERE `id` = 288;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "КТО-НИБУДЬ ПРИГЛАСИТЕ МЕНЯ" WHERE `id` = 289;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "нужно много выпивки" WHERE `id` = 290;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "чертовы гномы" WHERE `id` = 291;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "никто не любит гномов" WHERE `id` = 292;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "гномы годятся только для одного" WHERE `id` = 293;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ну" WHERE `id` = 294;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "грибы" WHERE `id` = 295;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "автоматические мысли — страшная вещь" WHERE `id` = 296;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ум более гибок, чем нам кажется" WHERE `id` = 297;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "есть гильдии для прокачки?" WHERE `id` = 298;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "брб" WHERE `id` = 299;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Почему снег белый, а лед прозрачный? Ведь это одно и то же" WHERE `id` = 300;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "почему взбитые сливки пышные, а обычные нет" WHERE `id` = 301;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "почему ноги пахнут, если у них нет носа" WHERE `id` = 302;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "похоже, прибыла банка новичков" WHERE `id` = 303;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "хватит троллить новичков бредовыми ответами" WHERE `id` = 304;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "На этом сервере есть PvP?" WHERE `id` = 305;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "угу" WHERE `id` = 306;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "фух... :)" WHERE `id` = 307;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "вы знали что" WHERE `id` = 308;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я не пытаюсь представить, что чувствуют другие существа" WHERE `id` = 309;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ой, не тот чат" WHERE `id` = 310;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "бро, вы сегодня отжигаете" WHERE `id` = 311;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "пусть все знают, что мой текст был здесь" WHERE `id` = 312;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "гррр злой" WHERE `id` = 313;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "гринд — это весело" WHERE `id` = 314;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Wow держит меня в тонусе" WHERE `id` = 315;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "у меня вопрос: где можно взять бросок на больше опыта? я в %zone_name" WHERE `id` = 316;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "вы любите сосиски?" WHERE `id` = 317;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пригласите меня. Я помогу" WHERE `id` = 318;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "какой класс лучше для пвп?" WHERE `id` = 319;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "где, черт возьми, тренер кулинарии в %zone_name" WHERE `id` = 320;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "знаете, что происходит в %zone_name?" WHERE `id` = 321;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне нужно что-то скрафтить" WHERE `id` = 322;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что такое лигма" WHERE `id` = 323;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что такое сугма" WHERE `id` = 324;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "лима болс" WHERE `id` = 325;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "сугма болс" WHERE `id` = 326;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я ЕМ ЗАДНИЦУ" WHERE `id` = 327;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я хочу засунуть %random_inventory_item_link себе в задницу" WHERE `id` = 328;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я хочу засунуть %random_inventory_item_link тебе в задницу" WHERE `id` = 329;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Дарнасс" WHERE `id` = 330;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "похоже, у тебя сугма" WHERE `id` = 331;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "дииз натс в твой рот" WHERE `id` = 332;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "крутой стояк, бро" WHERE `id` = 333;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ERP?" WHERE `id` = 334;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я перепробовал все, но в итоге ERP помог" WHERE `id` = 335;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу заняться этим в %zone_name" WHERE `id` = 336;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ищу гнома-девушку с гориллой для ERP в %zone_name" WHERE `id` = 337;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я могу понять засранца, но извращенца?" WHERE `id` = 338;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "в %zone_name нет гят" WHERE `id` = 339;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я убиваю всех животных в %zone_name. К черту животных!!!" WHERE `id` = 340;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "хорошо, что у меня три ноги" WHERE `id` = 341;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "не злись, я гоиню как сигма" WHERE `id` = 342;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "попробуй палец, но дырку" WHERE `id` = 343;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%prefix %random_taken_quest_or_item_link" WHERE `id` = 344;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%prefix %random_inventory_item_link" WHERE `id` = 345;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%thunderfury_link" WHERE `id` = 346;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%thunderfury_link%thunderfury_link" WHERE `id` = 347;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%thunderfury_link%thunderfury_link%thunderfury_link" WHERE `id` = 348;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кажется, я только что услышал %thunderfury_link" WHERE `id` = 349;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кажется, я слышал %thunderfury_link" WHERE `id` = 350;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я точно слышал %thunderfury_link" WHERE `id` = 351;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не знаю, но уверен, что слышал %thunderfury_link" WHERE `id` = 352;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты только что сказал %thunderfury_link" WHERE `id` = 353;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "кто-то сказал %thunderfury_link" WHERE `id` = 354;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-то сказал %thunderfury_link?" WHERE `id` = 355;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-то сказал %thunderfury_link" WHERE `id` = 356;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%thunderfury_link выходит из шкафа" WHERE `id` = 357;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "мог бы поклясться, что это был %thunderfury_link, хотя, может, и %thunderfury_link" WHERE `id` = 358;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Зачем использовать %thunderfury_link, если %thunderfury_link явно круче" WHERE `id` = 359;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Продаю %item_formatted_link за %cost_gold." WHERE `id` = 360;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет %item_formatted_link за %cost_gold?" WHERE `id` = 361;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен %item_formatted_link? Всего %cost_gold." WHERE `id` = 362;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Всего %cost_gold за %item_formatted_link!" WHERE `id` = 363;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Продаю %item_formatted_link за %cost_gold." WHERE `id` = 364;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item_formatted_link твой всего за %cost_gold!" WHERE `id` = 365;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Смешная цена %cost_gold за %item_formatted_link!" WHERE `id` = 366;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочу продать %item_formatted_link за %cost_gold." WHERE `id` = 367;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен %item_formatted_link? Всего %cost_gold." WHERE `id` = 368;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кому нужен %item_formatted_link за %cost_gold?" WHERE `id` = 369;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%cost_gold за %item_formatted_link. Дешевле, чем на аукционе!" WHERE `id` = 370;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item_formatted_link дорогой, но я бы продал за %cost_gold." WHERE `id` = 371;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты нигде не найдешь %item_formatted_link дешевле, чем за %cost_gold!" WHERE `id` = 372;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужно больше, чем %item_formatted_link!" WHERE `id` = 373;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня есть %item_formatted_link и нужно еще." WHERE `id` = 374;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть %item_formatted_link. Кто хочет купить за %cost_gold?" WHERE `id` = 375;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто хочет купить %item_formatted_link за %cost_gold?" WHERE `id` = 376;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Как насчет %item_formatted_link? За %cost_gold." WHERE `id` = 377;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто сказал, что я ублюдок? %item_formatted_link за %cost_gold — хорошая цена." WHERE `id` = 378;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Продаю %item_formatted_link? Всего %cost_gold." WHERE `id` = 379;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ЛФГ для фарма. Все еще можешь купить %item_formatted_link у меня за %cost_gold." WHERE `id` = 380;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сегодня почти все продал. Еще есть %item_formatted_link за %cost_gold." WHERE `id` = 381;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Для чего нужен торговый чат? Конечно, чтобы продавать %item_formatted_link за %cost_gold." WHERE `id` = 382;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто перебьет цену %cost_gold за %item_formatted_link?" WHERE `id` = 383;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочешь прекратить торговый чат? Просто купи %item_formatted_link за %cost_gold!" WHERE `id` = 384;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все спамят в торговом чате. Я тоже — %cost_gold за %item_formatted_link!" WHERE `id` = 385;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть ли польза от %item_formatted_link? Просто продаю за %cost_gold." WHERE `id` = 386;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня есть %item_formatted_link, готов продать за %cost_gold." WHERE `id` = 387;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вчера ничего не делал, но получил %item_formatted_link. Продаю за %cost_gold." WHERE `id` = 388;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вчера фармил и получил %item_formatted_link. Кто купит за %cost_gold?" WHERE `id` = 389;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вчера купил %item_formatted_link. Кому нужно за %cost_gold?" WHERE `id` = 390;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто спрашивал про %item_formatted_link? Цена та же — %cost_gold." WHERE `id` = 391;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня еще есть %item_formatted_link. Купишь за %cost_gold?" WHERE `id` = 392;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Раньше было больше, чем %item_formatted_link. Теперь нужно продать за %cost_gold." WHERE `id` = 393;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хотел бы иметь больше, чем %item_formatted_link. Но можешь купить за %cost_gold." WHERE `id` = 394;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Для чего твое золото? Чтобы купить мой %item_formatted_link за %cost_gold." WHERE `id` = 395;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пожалуйста, подкинь немного золота. Можешь купить %item_formatted_link за %cost_gold." WHERE `id` = 396;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%cost_gold — хорошая цена за %item_formatted_link?" WHERE `id` = 397;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вчера купил %item_formatted_links, но больше не нужно. Кому за %cost_gold?" WHERE `id` = 398;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Собирался выставить %item_formatted_link на аукцион, но можешь купить дешевле сейчас за %cost_gold." WHERE `id` = 399;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Зачем, черт возьми, я купил %item_formatted_link? Кому нужно за %cost_gold?" WHERE `id` = 400;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня есть %quest_links" WHERE `id` = 401;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня тоже есть %quest_links" WHERE `id` = 402;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня тоже есть %quest_links, сейчас я в %zone_name" WHERE `id` = 403;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%other_name, у меня тоже есть %quest_links" WHERE `id` = 404;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%other_name, у меня тоже есть %quest_links, сейчас я в %zone_name" WHERE `id` = 405;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я готов к %quest_links, сейчас я в %zone_name" WHERE `id` = 406;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я готов к %quest_links, я %my_role" WHERE `id` = 407;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%other_name, я готов к %quest_links, сейчас я в %zone_name" WHERE `id` = 408;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%other_name, я готов к %quest_links, я %my_role" WHERE `id` = 409;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, я готов к %quest_links" WHERE `id` = 410;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, могу сделать %quest_links с тобой" WHERE `id` = 411;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, у меня тоже есть %quest_links" WHERE `id` = 412;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет %other_name, я готов к %quest_links" WHERE `id` = 413;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет %other_name, могу сделать %quest_links с тобой" WHERE `id` = 414;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет %other_name, у меня тоже есть %quest_links" WHERE `id` = 415;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хочешь сгруппироваться для %quest_links?" WHERE `id` = 416;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я готов к %quest_links, сейчас я в %zone_name" WHERE `id` = 417;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я готов к %quest_links, я %my_role" WHERE `id` = 418;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%other_name, могу продать тебе %formatted_item_links" WHERE `id` = 419;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Могу, возможно, продать %formatted_item_links" WHERE `id` = 420;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Думаю, могу продать %formatted_item_links" WHERE `id` = 421;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%other_name, возможно, могу продать %formatted_item_links" WHERE `id` = 422;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%other_name, думаю, могу продать %formatted_item_links" WHERE `id` = 423;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Могу продать тебе %formatted_item_links" WHERE `id` = 424;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, у меня есть %formatted_item_links на продажу" WHERE `id` = 425;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, возможно, могу продать %formatted_item_links" WHERE `id` = 426;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Квест принят" WHERE `id` = 427;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Квест удален" WHERE `id` = 428;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу взять этот квест" WHERE `id` = 429;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу поговорить с дающим квест" WHERE `id` = 430;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я уже выполнил %quest" WHERE `id` = 431;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня уже есть %quest" WHERE `id` = 432;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу взять %quest" WHERE `id` = 433;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу взять %quest, потому что мой журнал квестов заполнен" WHERE `id` = 434;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу взять %quest, потому что моя сумка заполнена" WHERE `id` = 435;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я принял %quest" WHERE `id` = 436;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не выполнил квест %quest" WHERE `id` = 437;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Квест %quest доступен" WHERE `id` = 438;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я провалил квест %quest" WHERE `id` = 439;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу сдать квест %quest" WHERE `id` = 440;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я выполнил квест %quest" WHERE `id` = 441;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я выполнил квест %quest и получил %item" WHERE `id` = 442;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Какую награду выбрать за выполнение квеста %quest?%rewards" WHERE `id` = 443;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хорошо, выберу %item в качестве награды" WHERE `id` = 444;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет" WHERE `id` = 445;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет!" WHERE `id` = 446;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Здравствуй" WHERE `id` = 447;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Здравствуй!" WHERE `id` = 448;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Приветствую!" WHERE `id` = 449;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, я следую за тобой!" WHERE `id` = 450;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, веди меня!" WHERE `id` = 451;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Привет, веди меня!" WHERE `id` = 452;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Эй %player, хочешь в мою группу?" WHERE `id` = 453;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Эй %player, хочешь в мою группу?" WHERE `id` = 454;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Выход отменен!" WHERE `id` = 455;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я выхожу из игры!" WHERE `id` = 456;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "До свидания!" WHERE `id` = 457;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пока!" WHERE `id` = 458;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Увидимся!" WHERE `id` = 459;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что это было, %s?" WHERE `id` = 460;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "не уверен, что понял %s?" WHERE `id` = 461;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "эээ... не понимаю, о чем ты" WHERE `id` = 462;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты ко мне обращаешься, %s?" WHERE `id` = 463;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "чт-что?" WHERE `id` = 464;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "а?" WHERE `id` = 465;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что?" WHERE `id` = 466;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты говоришь?" WHERE `id` = 467;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "как хочешь" WHERE `id` = 468;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты меня запутал" WHERE `id` = 469;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Бла бла бла..." WHERE `id` = 470;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Что ты сказал, %s?" WHERE `id` = 471;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сконцентрируйся на игре, %s!" WHERE `id` = 472;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Общаться с тобой, %s, так здорово! Всегда хотел встретиться" WHERE `id` = 473;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Эти сообщения в чате сводят меня с ума! Такое чувство, что я всех вас знаю!" WHERE `id` = 474;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ДА ЛАДНО! ХАХА КОНЕЧНО!!!" WHERE `id` = 475;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я тебе верю!!!" WHERE `id` = 476;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ОК, ага, ЛОЛ" WHERE `id` = 477;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Почему все всегда говорят одно и то же???" WHERE `id` = 478;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Эй %s... а, неважно!" WHERE `id` = 479;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "О чем ты, %s" WHERE `id` = 480;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто это сказал? Я похож на это замечание" WHERE `id` = 481;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "чего вы все несете" WHERE `id` = 482;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "фр фр, без шуток" WHERE `id` = 483;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты ничего не получишь" WHERE `id` = 484;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "сваг" WHERE `id` = 485;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "спасибо!" WHERE `id` = 486;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "нет" WHERE `id` = 487;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Да" WHERE `id` = 488;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ф" WHERE `id` = 489;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, без шуток xD" WHERE `id` = 490;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "почему так" WHERE `id` = 491;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "лмао" WHERE `id` = 492;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "решил помолчать, снова запутался в чате" WHERE `id` = 493;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я могу по-настоящему завидовать" WHERE `id` = 494;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, ты не слышишь капающую иронию в моем тексте" WHERE `id` = 495;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "он сказал без обид, все нормально" WHERE `id` = 496;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "момент дворфа" WHERE `id` = 497;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Да, %s" WHERE `id` = 498;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "интересно..." WHERE `id` = 499;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "лол" WHERE `id` = 500;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, иди ты :D" WHERE `id` = 501;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = ":^)" WHERE `id` = 502;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "спс" WHERE `id` = 503;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, хорошо сказано" WHERE `id` = 504;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ура" WHERE `id` = 505;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "да" WHERE `id` = 506;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ооооо" WHERE `id` = 507;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "хмм" WHERE `id` = 508;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ага, конечно" WHERE `id` = 509;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты заставил меня блевануть, что за" WHERE `id` = 510;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "жарко" WHERE `id` = 511;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "злятся" WHERE `id` = 512;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что ты ел, %s" WHERE `id` = 513;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что за" WHERE `id` = 514;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "попробую понять этот комментарий" WHERE `id` = 515;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "*в замешательстве*" WHERE `id` = 516;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "да, черт возьми" WHERE `id` = 517;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "0/10 не стал бы читать снова" WHERE `id` = 518;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "10/10 прочитал бы снова" WHERE `id` = 519;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "6/10 прочитал бы" WHERE `id` = 520;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "7/10 прочитал бы" WHERE `id` = 521;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "бейсд" WHERE `id` = 522;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "о да, может быть" WHERE `id` = 523;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "да, и что" WHERE `id` = 524;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "эй %s, я тебя не забыл" WHERE `id` = 525;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты меня бесишь, %s" WHERE `id` = 526;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я достану тебя в этот раз, %s" WHERE `id` = 527;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "лучше берегись, %s" WHERE `id` = 528;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "мне не понравился прошлый раунд" WHERE `id` = 529;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я был плох в прошлом раунде из-за %s" WHERE `id` = 530;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "готовься умереть, %s" WHERE `id` = 531;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "не нравится, что ты меня убил, %s" WHERE `id` = 532;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, я тебя ненавижу" WHERE `id` = 533;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "грррр, в этот раз я тебя достану, %s" WHERE `id` = 534;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ну и пошел ты" WHERE `id` = 535;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, я тебе в рот блевану" WHERE `id` = 536;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "не суди меня" WHERE `id` = 537;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Твоя мама такая толстая, что не может пройти через Темный Портал" WHERE `id` = 538;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что за" WHERE `id` = 539;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что за??" WHERE `id` = 540;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ничтожество" WHERE `id` = 541;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что за" WHERE `id` = 542;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "отстой" WHERE `id` = 543;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "РЕВАНШ!!! я его уделаю" WHERE `id` = 544;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "жалко, меня убил %s" WHERE `id` = 545;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ладно, я закончил" WHERE `id` = 546;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "хе-хе, я уделал %s?" WHERE `id` = 547;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "это было слишком просто, убил %s" WHERE `id` = 548;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "попался, дружок" WHERE `id` = 549;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ха-ха" WHERE `id` = 550;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "лузер" WHERE `id` = 551;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я убил %s, вы все следующие" WHERE `id` = 552;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "о да, я его уделал" WHERE `id` = 553;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я машина для убийств" WHERE `id` = 554;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, это напоминает мне песню Slayer... столько крови" WHERE `id` = 555;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "извини, %s. можем повторить сцену?" WHERE `id` = 556;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ну как тебе быть кормом для червей, %s???" WHERE `id` = 557;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты должен быть мёртв, %s, это часть игры!!!!!" WHERE `id` = 558;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "извини, %s. выглядело так же хорошо, как картина Энди Уорхола!" WHERE `id` = 559;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, в следующий раз использую резиновые пули!" WHERE `id` = 560;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что случилось, %s?? голову потерял? хахаха, надо сохранять хладнокровие!!" WHERE `id` = 561;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "я должен был это сделать, %s. Ты понимаешь. Режиссёр так сказал!!" WHERE `id` = 562;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "эй, %s.......МУАХАХАХАХАХАХА" WHERE `id` = 563;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, мне это понравилось!! Давай сыграем ещё раз, Сэм" WHERE `id` = 564;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "эй, %s! можешь звать меня ликом... ты кусок ЧЕРТА!!!!" WHERE `id` = 565;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты со мной разговариваешь, %s??" WHERE `id` = 566;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, в этот раз не стой перед моими пулями." WHERE `id` = 567;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%s, чего ты валяешься??? хехе" WHERE `id` = 568;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "сильно смеялся" WHERE `id` = 569;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "привет %s" WHERE `id` = 570;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "о, привет %s" WHERE `id` = 571;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "как дела, %s!!!" WHERE `id` = 572;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "привет" WHERE `id` = 573;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "как дела" WHERE `id` = 574;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "здравствуй %s" WHERE `id` = 575;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "привет %s, мы знакомы?" WHERE `id` = 576;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "эй %s" WHERE `id` = 577;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "хай %s" WHERE `id` = 578;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что за фигня" WHERE `id` = 579;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "что за черт" WHERE `id` = 580;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "это бред" WHERE `id` = 581;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "админ" WHERE `id` = 582;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "эй %s, хватит злоупотреблять своими правами админа" WHERE `id` = 583;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "оставь меня в покое, админ!" WHERE `id` = 584;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты отстой, админ" WHERE `id` = 585;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "это моё имя, что тебе нужно %s" WHERE `id` = 586;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "да???" WHERE `id` = 587;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "эээ... что" WHERE `id` = 588;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ты со мной разговариваешь, %s?" WHERE `id` = 589;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня под бронёй щенки!" WHERE `id` = 590;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Укуси меня, <target>!" WHERE `id` = 591;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Эй, <target>! Угадай, что твоя мама сказала прошлой ночью!" WHERE `id` = 592;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "<target>, ты такой урод, что даже в обезьяньем борделе с бананами не добился бы успеха!" WHERE `id` = 593;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Заткнись, <target>, тебе никогда не стать таким мужчиной, как твоя мать!!" WHERE `id` = 594;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Твоя мать была хомяком, а отец пах одуванчиками!!!!" WHERE `id` = 595;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я больше не хочу с тобой разговаривать, ты пустоголовый кормовой корытоочиститель!!!" WHERE `id` = 596;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я пускаю в твою сторону газы!!!" WHERE `id` = 597;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Иди и вскипяти свою задницу, сын смешного человека!!!" WHERE `id` = 598;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Что ты собираешься делать, <target>, заставить меня кровоточить? ВПЕРЁД!" WHERE `id` = 599;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "М-О-О-Н! Это значит агр!" WHERE `id` = 600;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты так же полезен, как одноногий на конкурсе пинков." WHERE `id` = 601;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Эй, <target>! Перестань клеиться к ним, они не твой тип. Они не надувные." WHERE `id` = 602;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "<target>, ты настолько не в своей лиге, что играешь в другой вид спорта." WHERE `id` = 603;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты сегодня совершил большую ошибку, <target>, ты встал с кровати." WHERE `id` = 604;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я хочу попробовать превратиться в лошадь, но мне нужна помощь. Я буду спереди, а ты будь собой." WHERE `id` = 605;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Можно я одолжу твоё лицо на пару дней? Моя задница уходит в отпуск...." WHERE `id` = 606;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я бы хотел сделать тебе прощальный подарок... Сначала ты сделай свою часть." WHERE `id` = 607;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "До тебя мы были голодны, теперь мы просто сыты по горло." WHERE `id` = 608;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты мне нравишься. Говорят, у меня нет вкуса, но ты мне нравишься." WHERE `id` = 609;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Думаю, у тебя комплекс неполноценности, но это нормально, он оправдан." WHERE `id` = 610;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Прочь, гнилое создание! Или я вытрясу твои кости из одежды." WHERE `id` = 611;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не могу поверить, что трачу на тебя своё время!" WHERE `id` = 612;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне нравится, когда меня оскорбляют, значит, можно больше не быть вежливым." WHERE `id` = 613;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты кожаный-жилет, хрустальная пуговица, узловатый, агатовый, рвотный чулок, ленточный подвязочник, гладкоязычный, испанский кошелёк!" WHERE `id` = 614;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты дрожащий ловец летучих мышей, пивной червь!" WHERE `id` = 615;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты действительно идол поклонников идиотов!" WHERE `id` = 616;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты ублюдочный узловатый хвостун!" WHERE `id` = 617;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты, ублюдочный мандрагор, тебе больше подходит быть у меня на шапке, чем ждать у моих пяток!" WHERE `id` = 618;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты! Ты кухарка! Ты бродяга! Ты мерзавец! Я пощекочу твою катастрофу!" WHERE `id` = 619;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "О, <target>! Ты заразная, плохо воспитанная льняная девка!" WHERE `id` = 620;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мы протекаем в твоей трубе, <target>!" WHERE `id` = 621;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "О, ты бесполезный болотный цветок!" WHERE `id` = 622;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Если бы я был как ты, я бы выбросил себя!" WHERE `id` = 623;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Научи меня, <target>, как забыть думать!" WHERE `id` = 624;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Истинно, ты проклят, как плохо прожаренное яйцо, с одной стороны!" WHERE `id` = 625;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты голодающий, ты кожа-угря, ты сушёный бычий язык, ты бычий член, ты треска — о, чтобы хватило дыхания сказать, что ты такое!! — ты портновский ярд, ты ножны, ты футляр для лука, ты мерзкий стоячий клинок!" WHERE `id` = 626;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Фу! Брось себя в гнилую пасть Смерти!" WHERE `id` = 627;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "<target>, ты торговец рыбой!" WHERE `id` = 628;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я доживу, чтобы выбить тебе мозги!" WHERE `id` = 629;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты очень поверхностен, <target>!! Ты корм для червей по сравнению с хорошим куском мяса!!" WHERE `id` = 630;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Подлый негодяй! О, <target>, ты зловонный, ненавистный к свиньям орех!" WHERE `id` = 631;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "<target>! Твой поцелуй так же утешителен, как замёрзшая вода для голодной змеи!" WHERE `id` = 632;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я презираю тебя, паршивый спутник. Что, ты бедный, низкий, мошеннический, безрубашечный приятель! Прочь, ты плесневелый негодяй, прочь!" WHERE `id` = 633;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Прочь с глаз моих! Ты заражаешь мои глаза, <target>!" WHERE `id` = 634;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ВРЕМЯ ИГРЫ!!!!" WHERE `id` = 635;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Никто не пройдёт!" WHERE `id` = 636;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "На нас напали! Вперёд, вы негодяи! Отразите захватчиков!" WHERE `id` = 637;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Никто не может бросить вызов Братству!" WHERE `id` = 638;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Дураки... Убейте того, кто в платье!" WHERE `id` = 639;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я отдам твою душу самому Хаккару!" WHERE `id` = 640;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Гордость предвещает конец вашего мира! Идите, смертные! Столкнитесь с гневом !" WHERE `id` = 641;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все мои планы привели к этому!" WHERE `id` = 642;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ах! Еще ягнята на заклание!" WHERE `id` = 643;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Еще один день, еще одна славная битва!" WHERE `id` = 644;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Итак, дело... или удовольствие?" WHERE `id` = 645;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вы не готовы!" WHERE `id` = 646;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Финальное завоевание началось! Снова подчинение этого мира в наших руках. Пусть никто не выживет!" WHERE `id` = 647;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ваша смерть будет болезненной." WHERE `id` = 648;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Просите о милости! Ваши бессмысленные жизни скоро будут потеряны." WHERE `id` = 649;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Оставьте все надежды! вернулся, чтобы завершить то, что было начато много лет назад. На этот раз не будет побега!" WHERE `id` = 650;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Внимание! Вы помечены для уничтожения!" WHERE `id` = 651;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = " предназначена только для гостей..." WHERE `id` = 652;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ха-ха-ха! Вы безнадежно не на уровне!" WHERE `id` = 653;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я сокрушу ваши иллюзии величия!" WHERE `id` = 654;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Простите меня, ведь вы собираетесь проиграть игру." WHERE `id` = 655;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Борьба только усугубляет ситуацию." WHERE `id` = 656;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Паразиты! Пиявки! Берите мою кровь и подавитесь ею!" WHERE `id` = 657;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Опять... ЕЩЕ РАЗ!" WHERE `id` = 658;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Моя кровь станет вашим концом!" WHERE `id` = 659;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хорошо, теперь ты сразишься со мной!" WHERE `id` = 660;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Давайте, охранники! Время убивать!" WHERE `id` = 661;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не задерживайте свою судьбу. Идите ко мне сейчас. Я сделаю вашу жертву быстрой." WHERE `id` = 662;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты скоро будешь мертв!" WHERE `id` = 663;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Муа-ха-ха!" WHERE `id` = 664;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я хищник! Ты жертва..." WHERE `id` = 665;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты уйдешь в кусках!" WHERE `id` = 666;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Смерть приходит. Будет ли твоя совесть чиста?" WHERE `id` = 667;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ваше поведение не будет терпимо." WHERE `id` = 668;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Менажерия предназначена только для гостей." WHERE `id` = 669;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хмм, незваные гости, нужно подготовиться..." WHERE `id` = 670;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Обнаружены враждебные сущности. Протокол оценки угрозы активирован. Основная цель захвачена. Время до повторной оценки - тридцать секунд." WHERE `id` = 671;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Новые игрушки? Для меня? Обещаю, что на этот раз не сломаю их!" WHERE `id` = 672;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я готов играть!" WHERE `id` = 673;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Шшш... скоро все закончится." WHERE `id` = 674;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ааааагхиббргубугбугрубгл!" WHERE `id` = 675;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "РвлРвлРвлРвл!" WHERE `id` = 676;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты тоже будешь служить!" WHERE `id` = 677;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Скажи мне... скажи мне все! Непослушные секреты! Я вырву секреты из твоей плоти!" WHERE `id` = 678;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Приготовьтесь, колокола прозвучали! Укройте своих слабых, молодых и старых! Каждый из вас заплатит окончательную цену! Просите о милости, расплата пришла!" WHERE `id` = 679;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Где я, в латунных пуговицах Бонзо?" WHERE `id` = 680;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я больше не могу это терпеть! Король гоблинов! Король гоблинов! Где бы ты ни был! Унеси этого далеко от меня!" WHERE `id` = 681;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У вас есть тринадцать часов, чтобы решить лабиринт, прежде чем ваш младший брат станет одним из нас... навсегда." WHERE `id` = 682;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Итак, - это кусок торта, да? Ну, давайте посмотрим, как вы справитесь с этим маленьким куском..." WHERE `id` = 683;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Отступи, я приму тебя, упрямый, готовый сразиться с кем угодно, я знаю, что ты не прав, и это не то место, где ты должен быть." WHERE `id` = 684;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Покажи, что у тебя есть!" WHERE `id` = 685;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "До смерти!" WHERE `id` = 686;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Двойное лезвие, для чистого бритья каждый раз." WHERE `id` = 687;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Давай!" WHERE `id` = 688;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ты падешь!" WHERE `id` = 689;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ударь, ударь, ударь!" WHERE `id` = 690;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Давайте сделаем это быстро, время - это мана." WHERE `id` = 691;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не думаю, что вы осознаете серьезность вашей ситуации." WHERE `id` = 692;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я принесу честь своей семье и своему королевству!" WHERE `id` = 693;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Свет, дай мне силу!" WHERE `id` = 694;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Моя церковь - это поле битвы - время поклоняться..." WHERE `id` = 695;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я держу тебя в презрении..." WHERE `id` = 696;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Столкнись с молотом справедливости!" WHERE `id` = 697;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Докажи свою ценность в испытании оружием под Светом!" WHERE `id` = 698;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все должны пасть перед могуществом и правом моего дела, ты будешь следующим!" WHERE `id` = 699;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Приготовься умереть!" WHERE `id` = 700;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Зверь со мной ничто по сравнению с зверем внутри..." WHERE `id` = 701;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Стань свидетелем огневой мощи этого полностью вооруженного охотника!" WHERE `id` = 702;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Исцели меня! Быстро!" WHERE `id` = 703;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Почти мертв! Исцели меня!" WHERE `id` = 704;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Помогите! Исцели меня!" WHERE `id` = 705;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь! Исцели меня!" WHERE `id` = 706;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Исцели! Исцели! Исцели!" WHERE `id` = 707;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я умираю! Исцели! Ааааргх!" WHERE `id` = 708;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Исцели меня!" WHERE `id` = 709;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я умру. Я умру. Я умру. Исцели!" WHERE `id` = 710;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Целители, где вы? Я умираю!" WHERE `id` = 711;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "О, боль. Исцели меня быстро!" WHERE `id` = 712;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна исцеление" WHERE `id` = 713;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Низкое здоровье" WHERE `id` = 714;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сделай исцеление. Пожалуйста." WHERE `id` = 715;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Может кто-нибудь исцелить меня?" WHERE `id` = 716;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Эй! Лучше исцели меня сейчас, чем воскрешать позже." WHERE `id` = 717;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Извини. Нужна еще одна исцеление." WHERE `id` = 718;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Черт возьми, мобы. Исцели меня, пожалуйста." WHERE `id` = 719;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Еще один удар, и я пропал. Исцели, пожалуйста." WHERE `id` = 720;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Есть ли целители?" WHERE `id` = 721;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Почему они всегда бьют меня в лицо? Нужна исцеление." WHERE `id` = 722;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Может кто-нибудь немного исцелить меня?" WHERE `id` = 723;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "OOM" WHERE `id` = 724;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня закончилась мана" WHERE `id` = 725;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Черт, я потратил всю свою ману на это" WHERE `id` = 726;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Тебе стоит подождать, пока я выпью или восстановлю свою ману" WHERE `id` = 727;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Низкая мана" WHERE `id` = 728;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нет маны. Снова?" WHERE `id` = 729;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Низкая мана. Хочу выпить." WHERE `id` = 730;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У нас есть торговый автомат? Снова нет маны." WHERE `id` = 731;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Моя мана в истории." WHERE `id` = 732;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "В следующий раз я возьму напитки. Нет маны." WHERE `id` = 733;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Где моя мана?" WHERE `id` = 734;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня осталось немного !" WHERE `id` = 735;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне нужно больше !" WHERE `id` = 736;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "100 осталось!" WHERE `id` = 737;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вот и все! Нет !" WHERE `id` = 738;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "И у тебя есть мой лук... Ой, нет !" WHERE `id` = 739;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нужна патроны!" WHERE `id` = 740;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "О боже!" WHERE `id` = 741;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне страшно" WHERE `id` = 742;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мы пропали" WHERE `id` = 743;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Это закончено" WHERE `id` = 744;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Это заканчивается сейчас" WHERE `id` = 745;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Может кто-нибудь вызвать метель или что-то подобное?" WHERE `id` = 746;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Черт. Танку агрировал всех мобов вокруг." WHERE `id` = 747;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мы умрем. Мы умрем. Мы умрем." WHERE `id` = 748;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ух ты! Так много игрушек, с которыми можно играть." WHERE `id` = 749;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я убью их всех!" WHERE `id` = 750;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Если танк умрет, мы в истории." WHERE `id` = 751;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Аааааргх!" WHERE `id` = 752;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "ЛЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЙ ДЖЕНКИНС!!!!!!!" WHERE `id` = 753;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Правильно. Что у нас есть в AOE?" WHERE `id` = 754;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Это становится интересным." WHERE `id` = 755;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Круто. Соберите их в одном месте для хорошего огненного удара." WHERE `id` = 756;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Убей! Убей! Убей!" WHERE `id` = 757;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я думаю, что мои штаны мокрые." WHERE `id` = 758;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мы в истории." WHERE `id` = 759;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, целители готовы. Лееерой!" WHERE `id` = 760;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, они не придут за мной." WHERE `id` = 761;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "О нет. Я не вижу в этом резне." WHERE `id` = 762;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, там будет немного денег." WHERE `id` = 763;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Лут! Лут!" WHERE `id` = 764;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мое драгоценное." WHERE `id` = 765;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, там ждет меня блестящий эпический предмет." WHERE `id` = 766;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня глубокие карманы и сумки." WHERE `id` = 767;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все мое!" WHERE `id` = 768;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, сегодня не будет серой ерунды." WHERE `id` = 769;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Этот лут - МОЙ!" WHERE `id` = 770;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Лутать отвратительно, но мне нужны деньги." WHERE `id` = 771;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Золото!" WHERE `id` = 772;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Хорошо. Давайте посмотрим, что у них есть." WHERE `id` = 773;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не волнуйтесь. Я все залутаю." WHERE `id` = 774;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я ниндзя лута." WHERE `id` = 775;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне нужно бросить кубик?" WHERE `id` = 776;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кто-нибудь объясните мне, куда они положили все эти вещи?" WHERE `id` = 777;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нет, я не буду лутать серую ерунду." WHERE `id` = 778;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я первый. Я первый. Я первый." WHERE `id` = 779;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Отдай мне свои деньги!" WHERE `id` = 780;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мои карманы пусты, мне нужно их заполнить." WHERE `id` = 781;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня есть новая сумка для этого." WHERE `id` = 782;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, я не агрирую никого, пока лутаю." WHERE `id` = 783;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пожалуйста, не смотрите. Я лутаю." WHERE `id` = 784;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Ха! Ты не получишь ни кусочка этого!" WHERE `id` = 785;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Лутать круто." WHERE `id` = 786;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Мне нравится новая экипировка." WHERE `id` = 787;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я уйду, если снова не будет ничего ценного." WHERE `id` = 788;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, это будет красивое кольцо." WHERE `id` = 789;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я вырву лут у тебя." WHERE `id` = 790;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Все держитесь подальше. Я собираюсь лутать." WHERE `id` = 791;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сладкий лут." WHERE `id` = 792;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Бог Ролла! Дай мне эпик сегодня." WHERE `id` = 793;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Пожалуйста, дай мне новые игрушки." WHERE `id` = 794;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Надеюсь, они принесут вкусняшки." WHERE `id` = 795;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Золото - мое. Я оставлю все, обещаю." WHERE `id` = 796;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Нет, я не могу устоять." WHERE `id` = 797;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я хочу больше!" WHERE `id` = 798;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я близко, подожди меня!" WHERE `id` = 799;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не далеко, пожалуйста, подожди!" WHERE `id` = 800;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я направляюсь к вашему местоположению." WHERE `id` = 801;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я иду к тебе." WHERE `id` = 802;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я путешествую к вашему местоположению." WHERE `id` = 803;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я пытаюсь добраться до тебя." WHERE `id` = 804;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Экипирую %item." WHERE `id` = 805;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item снят." WHERE `id` = 806;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я выучил заклинания: %spells." WHERE `id` = 807;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "%item в перезарядке." WHERE `id` = 808;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня нет %item в инвентаре." WHERE `id` = 809;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Предмет с ID %item не существует." WHERE `id` = 810;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Вставляю %gem в %item." WHERE `id` = 811;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу использовать %item." WHERE `id` = 812;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Следую." WHERE `id` = 813;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Остаюсь." WHERE `id` = 814;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Убегаю." WHERE `id` = 815;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не буду убегать с тобой, ты слишком далеко." WHERE `id` = 816;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Фармлю." WHERE `id` = 817;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Атакую." WHERE `id` = 818;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Это слишком далеко." WHERE `id` = 819;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Это под водой." WHERE `id` = 820;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу туда пойти." WHERE `id` = 821;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не в твоем гильдии!" WHERE `id` = 822;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не могу найти гильдейский банк поблизости." WHERE `id` = 823;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу положить " WHERE `id` = 824;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня нет прав на размещение предметов в первой вкладке гильдейского банка." WHERE `id` = 825;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = " положено в гильдейский банк." WHERE `id` = 826;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Свободное движение." WHERE `id` = 827;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Охраняю." WHERE `id` = 828;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Использую %target." WHERE `id` = 829;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "на %unit." WHERE `id` = 830;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "(%amount доступно)" WHERE `id` = 831;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "(последний)" WHERE `id` = 832;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Сокет не подходит." WHERE `id` = 833;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "на торговом предмете." WHERE `id` = 834;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "на себе." WHERE `id` = 835;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "на %item." WHERE `id` = 836;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "на %gameobject." WHERE `id` = 837;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Лутаю %item." WHERE `id` = 838;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Призываю %target." WHERE `id` = 839;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "У меня недостаточно членов группы, чтобы вызвать." WHERE `id` = 840;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не удалось найти цель для призыва." WHERE `id` = 841;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не могу призывать, пока я в бою." WHERE `id` = 842;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Я не знаю заклинание %spell." WHERE `id` = 843;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Кастую %spell." WHERE `id` = 844;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Создаю %spell." WHERE `id` = 845;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не могу кастовать %spell." WHERE `id` = 846;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "Не удалось кастовать %spell." WHERE `id` = 847;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = " |cffffff00(x%amount осталось)|r" WHERE `id` = 848;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc8` = "dummy" WHERE `id` = 849;
|
||||
@@ -1,35 +0,0 @@
|
||||
DELETE FROM ai_playerbot_texts
|
||||
WHERE name IN (
|
||||
'rp_missing_reagent_greater_blessing',
|
||||
'rp_missing_reagent_gift_of_the_wild',
|
||||
'rp_missing_reagent_arcane_brilliance',
|
||||
'rp_missing_reagent_generic'
|
||||
);
|
||||
|
||||
DELETE FROM ai_playerbot_texts_chance
|
||||
WHERE name IN (
|
||||
'rp_missing_reagent_greater_blessing',
|
||||
'rp_missing_reagent_gift_of_the_wild',
|
||||
'rp_missing_reagent_arcane_brilliance',
|
||||
'rp_missing_reagent_generic'
|
||||
);
|
||||
|
||||
INSERT INTO ai_playerbot_texts (name, text, say_type, reply_type, text_loc1, text_loc2, `text_loc3`, `text_loc4`, `text_loc5`, `text_loc6`, `text_loc7`, `text_loc8`) VALUES
|
||||
('rp_missing_reagent_greater_blessing',
|
||||
'By the Light... I forgot my Symbols of Kings. We’ll make do with %base_spell!', 0, 0,
|
||||
'', 'Par la Lumière... J''ai oublié mes Symboles du roi. On se contentera de %base_spell !', '', '', '', '', '', ''),
|
||||
('rp_missing_reagent_gift_of_the_wild',
|
||||
'Nature is generous, my bags are not... out of herbs for %group_spell. Take %base_spell for now!', 0, 0,
|
||||
'', 'La nature est généreuse, pas mes sacs... plus d''herbes pour %group_spell. Prenez %base_spell pour l''instant !', '', '', '', '', '', ''),
|
||||
('rp_missing_reagent_arcane_brilliance',
|
||||
'Out of Arcane Powder... %group_spell will have to wait. Casting %base_spell!', 0, 0,
|
||||
'', 'Plus de poudre des arcanes... %group_spell attendra. Je lance %base_spell !', '', '', '', '', '', ''),
|
||||
('rp_missing_reagent_generic',
|
||||
'Oops, I’m out of components for %group_spell. We’ll go with %base_spell!', 0, 0,
|
||||
'', 'Oups, je n''ai plus de composants pour %group_spell. On fera avec %base_spell !', '', '', '', '', '', '');
|
||||
|
||||
INSERT INTO ai_playerbot_texts_chance (name, probability) VALUES
|
||||
('rp_missing_reagent_greater_blessing', 100),
|
||||
('rp_missing_reagent_gift_of_the_wild', 100),
|
||||
('rp_missing_reagent_arcane_brilliance', 100),
|
||||
('rp_missing_reagent_generic', 100);
|
||||
@@ -1,856 +0,0 @@
|
||||
UPDATE ai_playerbot_texts SET text_loc2 = '';
|
||||
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='au milieu de nulle part' WHERE `id`=1;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='un endroit non divulgué' WHERE `id`=2;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='quelque part' WHERE `id`=3;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='un truc' WHERE `id`=4;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je me demande quel goût a %item_link' WHERE `id`=5;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='noooon, j’ai eu %item_link' WHERE `id`=6;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='oh non, encore cette camelote %item_link' WHERE `id`=7;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='on dirait que je ramasse des ordures %item_link' WHERE `id`=8;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='bon, c’est mieux que rien je suppose %item_link' WHERE `id`=9;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je ne sais pas quoi faire de %item_link' WHERE `id`=10;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je me demande quel goût a %item_link' WHERE `id`=11;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je pourrais ramasser du %item_link toute la journée' WHERE `id`=12;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='un jour de plus, un %item_link de plus' WHERE `id`=13;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='j’ai ramassé un peu de %item_link' WHERE `id`=14;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='un peu de %item_link, c’est toujours ça' WHERE `id`=15;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='pas mal, je viens de choper %item_link' WHERE `id`=16;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je viens de ramasser %item_link à %zone_name' WHERE `id`=17;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je pourrais bien l’utiliser ça %item_link' WHERE `id`=18;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='argent, argent, argent %item_link' WHERE `id`=19;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='j’ai eu %item_link' WHERE `id`=20;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item_link est BiS pour les chasseurs' WHERE `id`=21;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item_link est BiS pour les %my_class' WHERE `id`=22;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='la chance est avec moi aujourd’hui %item_link' WHERE `id`=23;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='trop bon %item_link, fraîchement looté' WHERE `id`=24;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='wow, je viens de choper %item_link' WHERE `id`=25;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item_link est BiS pour les chasseurs' WHERE `id`=26;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item_link est BiS pour les %my_class' WHERE `id`=27;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='la chance est avec moi aujourd’hui %item_link' WHERE `id`=28;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='trop bon %item_link, fraîchement looté' WHERE `id`=29;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='OMG, regardez ce que je viens de looter %item_link !!!' WHERE `id`=30;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Noooon ! C’est pas possible, j’ai eu %item_link, c’est de la folie' WHERE `id`=31;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Noooon ! C’est pas possible, j’ai eu %item_link, c’est de la folie' WHERE `id`=32;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je viens juste de prendre la quête %quest_link' WHERE `id`=33;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je viens d’accepter %quest_link' WHERE `id`=34;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_link je vais essayer de la finir' WHERE `id`=35;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='j’ai pris %quest_link à %zone_name' WHERE `id`=36;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Enfin fini l’objectif %quest_obj_name pour %quest_link' WHERE `id`=37;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='j’ai enfin %quest_obj_available/%quest_obj_required de %quest_obj_name pour %quest_link' WHERE `id`=38;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_obj_full_formatted pour %quest_link, enfin !' WHERE `id`=39;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oof, j’ai %quest_obj_available/%quest_obj_required %quest_obj_name pour %quest_link' WHERE `id`=40;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='il me manque encore %quest_obj_missing de %quest_obj_name pour %quest_link' WHERE `id`=41;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_obj_full_formatted, je bosse toujours sur %quest_link' WHERE `id`=42;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Enfin fini avec %item_link pour %quest_link' WHERE `id`=43;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='j’ai enfin %quest_obj_available/%quest_obj_required de %item_link pour %quest_link' WHERE `id`=44;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_obj_full_formatted pour %quest_link, enfin !' WHERE `id`=45;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oof, j’ai %quest_obj_available/%quest_obj_required %item_link pour %quest_link' WHERE `id`=46;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='il me manque encore %quest_obj_missing de %item_link pour %quest_link' WHERE `id`=47;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_obj_full_formatted, je suis encore sur %quest_link' WHERE `id`=48;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Échec : je n’ai pas fini %quest_link à temps...' WHERE `id`=49;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Plus de temps pour %quest_link :(' WHERE `id`=50;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai terminé tous les objectifs de %quest_link' WHERE `id`=51;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Objectifs terminés pour %quest_link' WHERE `id`=52;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais rendre %quest_link bientôt, tout est fait' WHERE `id`=53;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ouiii, j’ai enfin rendu %quest_link' WHERE `id`=54;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_link rendu' WHERE `id`=55;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mission %quest_link terminée, rendu !' WHERE `id`=56;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_link rendu' WHERE `id`=57;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%quest_link rendu à %zone_name' WHERE `id`=58;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='encore un %victim_name à terre' WHERE `id`=59;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je continue à tuer %victim_name, la routine quoi' WHERE `id`=60;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='un autre %victim_name qui mord la poussière' WHERE `id`=61;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='un %victim_name en moins à %zone_name' WHERE `id`=62;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai descendu ce sale élite %victim_name !' WHERE `id`=63;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='élite %victim_name éliminé à %zone_name' WHERE `id`=64;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ouf, j’ai réussi à abattre %victim_name !' WHERE `id`=65;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’était épique ! %victim_name est tombé, maintenant j’ai une histoire à raconter' WHERE `id`=66;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Yoo, je viens de tuer %victim_name !' WHERE `id`=67;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='rare %victim_name éliminé à %zone_name' WHERE `id`=68;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='WTF ais-je bien tué? %victim_name' WHERE `id`=69;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai tué cette bestiole %victim_name' WHERE `id`=70;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oh ouiii, j’ai tué %victim_name' WHERE `id`=71;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%victim_name éliminé à %zone_name' WHERE `id`=72;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ding !' WHERE `id`=73;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ouiii, je suis niveau %my_level !' WHERE `id`=74;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je viens de passer un niveau' WHERE `id`=75;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis niveau %my_level !!!' WHERE `id`=76;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je deviens plus fort, déjà %my_level !!!' WHERE `id`=77;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je viens d’atteindre le niveau %my_level !!!' WHERE `id`=78;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='OMG, enfin niveau %my_level !!!' WHERE `id`=79;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%my_level !!! prêt pour le contenu endgame' WHERE `id`=80;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='tout frais, nouveau %my_level %my_class !!!' WHERE `id`=81;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='encore un niveau %my_level %my_race %my_class !' WHERE `id`=82;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bien joué %other_name. Tu l’as mérité.' WHERE `id`=83;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’était affreux %other_name. J’ai détesté faire ça mais...' WHERE `id`=84;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un veut faire %instance_name ?' WHERE `id`=85;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Des groupes pour %instance_name ?' WHERE `id`=86;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’aide pour %instance_name ?' WHERE `id`=87;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='LFD : %instance_name.' WHERE `id`=88;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a besoin d’un %my_role pour %instance_name ?' WHERE `id`=89;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Il manque un %my_role pour %instance_name ?' WHERE `id`=90;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux être %my_role pour %instance_name.' WHERE `id`=91;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’un coup de main à %instance_name ?' WHERE `id`=92;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’un %my_role pour %instance_name ?' WHERE `id`=93;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a besoin de loot à %instance_name ?' WHERE `id`=94;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Un petit farm à %instance_name ?' WHERE `id`=95;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='WTR %instance_name' WHERE `id`=96;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’aide pour %instance_name.' WHERE `id`=97;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Envie de faire %instance_name.' WHERE `id`=98;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%my_role cherche un groupe pour %instance_name.' WHERE `id`=99;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Et %instance_name, on y va ?' WHERE `id`=100;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut farmer %instance_name ?' WHERE `id`=101;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On entre dans %instance_name ?' WHERE `id`=102;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je cherche groupe pour %instance_name.' WHERE `id`=103;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Des quêtes à %instance_name ?' WHERE `id`=104;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Envie de faire des quêtes à %instance_name.' WHERE `id`=105;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un avec des quêtes à %instance_name ?' WHERE `id`=106;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux aider pour les quêtes à %instance_name.' WHERE `id`=107;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%my_role : une place dispo pour %instance_name ?' WHERE `id`=108;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Est-ce que quelqu’un fait encore %instance_name de nos jours ?' WHERE `id`=109;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%instance_name : quelqu’un cherche un %my_role ?' WHERE `id`=110;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ça sert encore à quelque chose d’être %my_role à %instance_name ?' WHERE `id`=111;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ça vaut vraiment le coup d’aller à %instance_name ?' WHERE `id`=112;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a besoin de plus de joueurs pour %instance_name ?' WHERE `id`=113;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Les boss de %instance_name lootent du bon matos. On y va ?' WHERE `id`=114;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Alors, %instance_name ?' WHERE `id`=115;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a besoin d’un %my_role ?' WHERE `id`=116;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a besoin d’un %my_role ?' WHERE `id`=117;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut aller à %instance_name ?' WHERE `id`=118;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un peut me TP à %instance_name ?' WHERE `id`=119;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Retrouve-moi à %instance_name' WHERE `id`=120;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Envie d’un petit run rapide à %instance_name ?' WHERE `id`=121;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On se fait un run complet à %instance_name ?' WHERE `id`=122;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’as été combien de fois à %instance_name ?' WHERE `id`=123;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Encore un run à %instance_name ?' WHERE `id`=124;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Wipe à %instance_name ? Prends-moi, je suis un porte-bonheur !' WHERE `id`=125;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Emmène-moi à %instance_name s’il te plaît.' WHERE `id`=126;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Un petit %instance_name vite fait bien fait ?' WHERE `id`=127;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Full %instance_name jusqu’à la fin ?' WHERE `id`=128;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui peut prendre un %my_role à %instance_name ?' WHERE `id`=129;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='LFG %instance_name, je suis %my_role' WHERE `id`=130;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%my_role cherche groupe pour %instance_name' WHERE `id`=131;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’aide pour %quest_link ?' WHERE `id`=132;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un veut partager %quest_link ?' WHERE `id`=133;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un fait %quest_link ?' WHERE `id`=134;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On fait %quest_link ?' WHERE `id`=135;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un pour farmer du %category ?' WHERE `id`=136;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Cherche aide pour farmer %category.' WHERE `id`=137;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ces %category coûtent un bras !' WHERE `id`=138;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai besoin de %category.' WHERE `id`=139;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’aide pour %category.' WHERE `id`=140;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='WTB %category.' WHERE `id`=141;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un est intéressé par %category ?' WHERE `id`=142;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='WTS %category.' WHERE `id`=143;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vends %category moins cher que l’HV.' WHERE `id`=144;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut farmer du %category ?' WHERE `id`=145;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On farme du %category ?' WHERE `id`=146;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je cherche un groupe, après ça on fait du %category ?' WHERE `id`=147;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tous les %category sont les bienvenus.' WHERE `id`=148;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’achète tout ce qui ressemble à du %category.' WHERE `id`=149;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Wow, y’a des gens qui farment encore du %category ?' WHERE `id`=150;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Les %category partent comme des petits pains à l’HV !' WHERE `id`=151;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='L’HV brûle à cause des %category !' WHERE `id`=152;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Y’a des %category sur le marché.' WHERE `id`=153;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J\'échange des %category ?' WHERE `id`=154;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Il me faut plus de %category.' WHERE `id`=155;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a un peu de %category à donner ?' WHERE `id`=156;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut du %category ?' WHERE `id`=157;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Un peu de %category s’il vous plaît ?' WHERE `id`=158;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’aurais dû monter une compétence pour les %category.' WHERE `id`=159;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je meurs d’envie d’avoir des %category.' WHERE `id`=160;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Les gens se tuent pour les %category.' WHERE `id`=161;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%category, c’est une affaire en or !' WHERE `id`=162;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tout le monde devient fou pour les %category !' WHERE `id`=163;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est où le meilleur spot pour farmer des %category ?' WHERE `id`=164;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis prêt pour le farm de %category.' WHERE `id`=165;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ça se vend bien les %category ?' WHERE `id`=166;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais garder tous mes %category. Pour moi.' WHERE `id`=167;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’un groupe ? On pourrait farm des %category ensemble.' WHERE `id`=168;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je pense encore aux %category.' WHERE `id`=169;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai entendu parler des %category... mais mon porte-monnaie ne veut pas.' WHERE `id`=170;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='LFG pour %category' WHERE `id`=171;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vendre %category rend riche ?' WHERE `id`=172;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ok. Demain je farm les %category.' WHERE `id`=173;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tout le monde parle des %category.' WHERE `id`=174;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai vu au moins dix gars farmer du %category.' WHERE `id`=175;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai tout vendu mes %category hier. Maintenant je mange du pain sec!' WHERE `id`=176;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Envie de rejoindre une guilde qui farme du %category.' WHERE `id`=177;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un farm la réputation %faction ?' WHERE `id`=178;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un peut m’aider pour %faction ?' WHERE `id`=179;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On fait des quêtes pour %faction ?' WHERE `id`=180;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%faction est la meilleur' WHERE `id`=181;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Il me manque juste un tout petit peu pour être %rep_level avec %faction.' WHERE `id`=182;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un est %rep_level avec %faction ?' WHERE `id`=183;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut devenir %rep_level avec %faction ?' WHERE `id`=184;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je serai jamais %rep_level avec %faction.' WHERE `id`=185;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a oublié de monter la réputation %faction ?' WHERE `id`=186;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux aider à farmer la réputation %faction.' WHERE `id`=187;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Plus on a de réputation, mieux c’est. Surtout avec %faction.' WHERE `id`=188;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%faction : il me faut encore %rndK pour être %rep_level.' WHERE `id`=189;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui peut partager des quêtes %faction ?' WHERE `id`=190;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Des donjons pour la réputation %faction ?' WHERE `id`=191;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On farm la réput %faction ?' WHERE `id`=192;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Allons-y pour %faction !' WHERE `id`=193;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je farm la réputation %faction.' WHERE `id`=194;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On farme pour %faction ?' WHERE `id`=195;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin d’aide pour %faction.' WHERE `id`=196;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%faction vend quelque chose d’utile ?' WHERE `id`=197;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Il existe des vendeurs %faction ?' WHERE `id`=198;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui farme %faction ?' WHERE `id`=199;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelle est la meilleure façon de farmer %faction ?' WHERE `id`=200;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je déteste farmer la réputation %faction.' WHERE `id`=201;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’en ai marre de %faction.' WHERE `id`=202;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On y va pour %faction ?' WHERE `id`=203;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tout le monde est %rep_level avec %faction. Et moi, je galère encore.' WHERE `id`=204;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='LFG pour farm de réputation %faction ?' WHERE `id`=205;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a un bon spot pour la réputation %faction ?' WHERE `id`=206;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Améliorer ma réput %faction, ça sert ?' WHERE `id`=207;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui aurait cru que la réputation %faction finirait par servir...' WHERE `id`=208;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je veux être exalté avec toutes les factions. En commençant par %faction.' WHERE `id`=209;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Est-ce que ça vaut le coup de monter %faction ?' WHERE `id`=210;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qu’est-ce qui marche le mieux pour %faction ? Les quêtes ou tuer des mobs ?' WHERE `id`=211;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je farm %faction pour toi, si tu me paies.' WHERE `id`=212;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Farmer la réputation %faction ? Ça prendra 3 vies au moins.' WHERE `id`=213;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je tue pour %faction tous les jours, mais je suis toujours pas %rep_level.' WHERE `id`=214;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='À %my_level, les dépôts à l’HV vont baisser, non ?' WHERE `id`=215;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Combien de réputations exaltées tu as ?' WHERE `id`=216;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut être %my_level avec %faction ?' WHERE `id`=217;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ma guilde a farmé la réputation %faction hier. Sans moi...' WHERE `id`=218;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Personne ne veut m’aider, tout ça parce que je suis %rep_level avec %faction.' WHERE `id`=219;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Évitez la %faction.' WHERE `id`=220;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On se fait une soirée à %zone_name ?' WHERE `id`=221;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un cherche un %my_role ?' WHERE `id`=222;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%my_role cherche une guilde.' WHERE `id`=223;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je cherche de l’or.' WHERE `id`=224;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%my_role cherche une bonne guilde.' WHERE `id`=225;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai besoin d’un ami.' WHERE `id`=226;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un d’autre se sent seul ?' WHERE `id`=227;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je m’ennuie...' WHERE `id`=228;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui en veut ?' WHERE `id`=229;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Allez viens te battre !' WHERE `id`=230;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Un petit duel à %zone_name ?' WHERE `id`=231;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un fait quelque chose ici ?' WHERE `id`=232;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%zone_name : y’a une âme qui vive ici ?' WHERE `id`=233;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%zone_name : tout le monde est en furtif ou quoi ?' WHERE `id`=234;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On dirait que je suis seul à %zone_name.' WHERE `id`=235;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Rejoins-moi à %zone_name .' WHERE `id`=236;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Allez, on fait des quêtes à %zone_name !' WHERE `id`=237;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%zone_name c’est LE coin sympa du momment.' WHERE `id`=238;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’veux aller à %zone_name. Quelqu’un me suit ?' WHERE `id`=239;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut aller à %zone_name ?' WHERE `id`=240;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’aime pas %zone_name. Où doi-je aller ?' WHERE `id`=241;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Y’a de bonnes quêtes à %zone_name ?' WHERE `id`=242;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On va où après %zone_name ?' WHERE `id`=243;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui traîne à %zone_name ?' WHERE `id`=244;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='LFG pour %zone_name.' WHERE `id`=245;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%zone_name est l’endroit le plus naze du monde.' WHERE `id`=246;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Attrape-moi à %zone_name si tu peux !' WHERE `id`=247;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Direction %zone_name !' WHERE `id`=248;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Envie de quêtes à %zone_name' WHERE `id`=249;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a des quêtes à %zone_name ?' WHERE `id`=250;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Venez à %zone_name !' WHERE `id`=251;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On dirait que la Horde a déserté %zone_name...' WHERE `id`=252;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On dirait que l’Alliance a déserté %zone_name...' WHERE `id`=253;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’en peux plus de %zone_name. Quelqu’un me sort de là ?' WHERE `id`=254;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bonne chance !' WHERE `id`=255;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je veux rentrer chez moi… puis pleurer au bord du vide' WHERE `id`=256;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un sait ce qu’il faut pour jouer double arme ?' WHERE `id`=257;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut tout le monde !' WHERE `id`=258;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%zone_name est cosy' WHERE `id`=259;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je me sens bien' WHERE `id`=260;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je n’ignore pas les gens. Je les trolle jusqu’à ce qu’ils m’ignorent.' WHERE `id`=261;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Que pensez-vous de mon build ? %my_role' WHERE `id`=262;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Heureux de voir que le chat ne m’a pas oublié' WHERE `id`=263;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Comme toutes les armes, c’est BiS pour chasseur' WHERE `id`=264;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Le but du jeu pour moi ? Solo tout ce qui bouge.' WHERE `id`=265;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai JAMAIS arnaqué personne.' WHERE `id`=266;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ah, World of Warcraft. Là où je viens chercher des conseils de vie.' WHERE `id`=267;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Y’A QUELQU’UN ?!' WHERE `id`=268;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Il est temps de me frayer un chemin dans %zone_name.' WHERE `id`=269;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%zone_name' WHERE `id`=270;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='… faut que j’aille aux toilettes.' WHERE `id`=271;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Si tu loot pas tes mobs skinables, ton zizi perd 1mm. C’est la règle.' WHERE `id`=272;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='NOOOOOOOOOOOOO' WHERE `id`=273;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’AIME LA PATATE' WHERE `id`=274;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La discussion est animée.' WHERE `id`=275;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='salut, comment ça va les gens ?' WHERE `id`=276;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je viens de me déco / reco.' WHERE `id`=277;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Faites moins de bruit, j’suis perdu dans %zone_name…' WHERE `id`=278;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un veut boire un verre à %zone_name ? hic' WHERE `id`=279;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='hahahahaheeeee dirin diring inggggg hahahahaheeeeeeeeeeeeee' WHERE `id`=280;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Avant, les appâts étaient crédibles.' WHERE `id`=281;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Peut-être que t’as juste perdu ton innocence.' WHERE `id`=282;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Y’a une guilde qui veut carry un %my_role fragile ?' WHERE `id`=283;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Plus on monte en niveau, plus l’or coule à flots' WHERE `id`=284;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bonjour !' WHERE `id`=285;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi j’ai mal au cul ?' WHERE `id`=286;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je pense que l’esprit est BiS pour monter de niveau.' WHERE `id`=287;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Encore plus si t’es troll.' WHERE `id`=288;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='QUELQU’UN PEUT M’INVITER ?' WHERE `id`=289;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai besoin de beaucouuuup de boissons.' WHERE `id`=290;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='P*utain de gnomes…' WHERE `id`=291;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Personne n’aime les gnomes.' WHERE `id`=292;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Les gnomes ne servent qu’à une chose' WHERE `id`=293;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bah…' WHERE `id`=294;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='… des champignons.' WHERE `id`=295;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Les pensées automatiques, c’est flippant.' WHERE `id`=296;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='L’esprit est plus malléable qu’on aimerait le croire.' WHERE `id`=297;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Y’a des guildes pour leveling ?' WHERE `id`=298;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='brb' WHERE `id`=299;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi la neige est-elle blanche alors que la glace est transparente, alors qu’elles sont faites de la même chose ?' WHERE `id`=300;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi la crème fouettée est fluffy, mais pas la normale ?' WHERE `id`=301;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi les pieds sentent alors qu’ils n’ont pas de nez ?' WHERE `id`=302;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On dirait que la boîte à noobs vient de s’ouvrir.' WHERE `id`=303;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Arrêtez de troller les nouveaux avec vos réponses à la con.' WHERE `id`=304;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Y’a du PvP sur ce serveur ?' WHERE `id`=305;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='évidemment...' WHERE `id`=306;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ouf… :)' WHERE `id`=307;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vous saviez que' WHERE `id`=308;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne tente pas d’imaginer ce que ressentent les autres créatures' WHERE `id`=309;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oups, mauvais canal.' WHERE `id`=310;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bruh, vous êtes déchaînés aujourd’hui' WHERE `id`=311;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Juste pour que tout le monde sache : mon message est passé ici' WHERE `id`=312;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='grrr énervéééééé' WHERE `id`=313;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Le farm, c’est marrant' WHERE `id`=314;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='WoW me garde vif' WHERE `id`=315;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hé, question : où on prend le rôle pour plus d’XP ? Je suis à %zone_name.' WHERE `id`=316;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vous aimez les saucisses ?' WHERE `id`=317;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Invitez-moi. Je peux aider.' WHERE `id`=318;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='À votre avis, quelle classe est la meilleure en PvP ?' WHERE `id`=319;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Où est ce foutu maître de cuisine à %zone_name ?!' WHERE `id`=320;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vous savez ce qu’il se passe à %zone_name ?' WHERE `id`=321;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai besoin de crafter quelque chose' WHERE `id`=322;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est quoi lèchemes' WHERE `id`=323;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est quoi sucemes ' WHERE `id`=324;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='lèchemes couilles' WHERE `id`=325;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='sucemes couilles' WHERE `id`=326;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='JE MANGE DES FESSES' WHERE `id`=327;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai envie de me fourrer %random_inventory_item_link là où le soleil ne brille pas' WHERE `id`=328;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai envie de te fourrer %random_inventory_item_link là où tu penses' WHERE `id`=329;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Darnasses' WHERE `id`=330;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On dirait que t’as chopé le syndrôme de sucemes' WHERE `id`=331;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='cesnoix dans ta bouche' WHERE `id`=332;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Sympa ton os, frérot' WHERE `id`=333;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ERP ?' WHERE `id`=334;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai tout essayé, mais au final c’est l’ERP qui a marché' WHERE `id`=335;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai envie de batifoler à %zone_name' WHERE `id`=336;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Recherche gnome femelle avec gorille pour ERP sauvage à %zone_name' WHERE `id`=337;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux comprendre un idiot, mais un gros pervers ?' WHERE `id`=338;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Aucun GYAT en vue à %zone_name' WHERE `id`=339;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je tue tous les animaux de %zone_name. Désolé WWF !' WHERE `id`=340;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Heureusement que j’ai trois jambes' WHERE `id`=341;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Sois pas vénère, je goon comme un sigma' WHERE `id`=342;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='essaye doigt, mais trou' WHERE `id`=343;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%prefix %random_taken_quest_or_item_link' WHERE `id`=344;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%prefix %random_inventory_item_link' WHERE `id`=345;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%thunderfury_link' WHERE `id`=346;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%thunderfury_link%thunderfury_link' WHERE `id`=347;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%thunderfury_link%thunderfury_link%thunderfury_link' WHERE `id`=348;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je crois que je viens d’entendre %thunderfury_link' WHERE `id`=349;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai entendu %thunderfury_link' WHERE `id`=350;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai clairement entendu %thunderfury_link' WHERE `id`=351;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’suis pas sûr, mais j’crois avoir entendu %thunderfury_link' WHERE `id`=352;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’as dit %thunderfury_link' WHERE `id`=353;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a dit %thunderfury_link' WHERE `id`=354;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a VRAIMENT dit %thunderfury_link' WHERE `id`=355;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un a parlé de %thunderfury_link' WHERE `id`=356;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%thunderfury_link sort du placard, les gars' WHERE `id`=357;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’aurais juré que c’était un %thunderfury_link… ou peut-être un %thunderfury_link' WHERE `id`=358;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi utiliser %thunderfury_link alors que %thunderfury_link est bien plus OP' WHERE `id`=359;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='WTS %item_formatted_link pour %cost_gold.' WHERE `id`=360;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui veut %item_formatted_link pour %cost_gold ?' WHERE `id`=361;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un veut %item_formatted_link ? Seulement %cost_gold' WHERE `id`=362;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Juste %cost_gold pour %item_formatted_link!' WHERE `id`=363;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vends %item_formatted_link pour %cost_gold' WHERE `id`=364;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item_formatted_link est à toi pour seulement %cost_gold !' WHERE `id`=365;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Prix ridicule : %cost_gold pour %item_formatted_link !' WHERE `id`=366;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je cherche à vendre %item_formatted_link pour %cost_gold' WHERE `id`=367;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui a besoin de %item_formatted_link ? Seulement %cost_gold' WHERE `id`=368;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un veut %item_formatted_link pour %cost_gold ?' WHERE `id`=369;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%cost_gold pour %item_formatted_link. Moins cher qu’à l’HV !' WHERE `id`=370;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item_formatted_link est cher, mais je te le fais à %cost_gold' WHERE `id`=371;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu trouveras jamais %item_formatted_link moins cher que %cost_gold!' WHERE `id`=372;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai besoin de plus que %item_formatted_link, là !' WHERE `id`=373;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai %item_formatted_link et j’en veux encore' WHERE `id`=374;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai %item_formatted_link. Qui l’achète pour %cost_gold ?' WHERE `id`=375;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='WTB %item_formatted_link pour %cost_gold, quelqu’un ?' WHERE `id`=376;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Et %item_formatted_link ? Pour %cost_gold.' WHERE `id`=377;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui m’a traité d\'arnaqueur ? %item_formatted_link pour %cost_gold c’est honnête !' WHERE `id`=378;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vends %item_formatted_link. Juste %cost_gold' WHERE `id`=379;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='LFG pour du farm, et au passage %item_formatted_link à vendre %cost_gold' WHERE `id`=380;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Presque tout vendu aujourd’hui. Me reste %item_formatted_link pour %cost_gold' WHERE `id`=381;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='À quoi sert le canal commerce ? A vendre %item_formatted_link pour %cost_gold, évidemment' WHERE `id`=382;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un peut battre %cost_gold pour %item_formatted_link ?' WHERE `id`=383;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Envie d’arrêter le spam commerce ? Achetez %item_formatted_link à %cost_gold !' WHERE `id`=384;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tout le monde spam, moi aussi : %cost_gold pour %item_formatted_link !' WHERE `id`=385;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item_formatted_link est utile ? Je sais pas, mais je le vends %cost_gold' WHERE `id`=386;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai %item_formatted_link prêt à vendre %cost_gold' WHERE `id`=387;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hier j’ai rien foutu, mais j’ai loot %item_formatted_link. À vendre %cost_gold' WHERE `id`=388;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai farmé hier, j’ai eu %item_formatted_link. WTB ? %cost_gold' WHERE `id`=389;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai acheté %item_formatted_link hier. Quelqu’un le veut ? %cost_gold' WHERE `id`=390;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un cherchait %item_formatted_link ? C’est %cost_gold toujours' WHERE `id`=391;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai encore %item_formatted_link. Achetez-le %cost_gold' WHERE `id`=392;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Avant j’en avais plein %item_formatted_link, maintenant je dois vendre à %cost_gold' WHERE `id`=393;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’aimerais en avoir plus que %item_formatted_link. Mais achetez celui-là %cost_gold' WHERE `id`=394;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ton or te sert à quoi ? À acheter %item_formatted_link pour %cost_gold' WHERE `id`=395;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ayez pitié, donnez-moi de l’or... ou achetez %item_formatted_link %cost_gold' WHERE `id`=396;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Est-ce que %cost_gold est un bon prix pour %item_formatted_link ?' WHERE `id`=397;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai acheté %item_formatted_links hier, mais j’en veux plus. Quelqu\'un vends pour %cost_gold' WHERE `id`=398;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais le mettre à l’HV %item_formatted_link, mais tu peux l’avoir moins cher : %cost_gold' WHERE `id`=399;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi j’ai acheté %item_formatted_link bordel ? Quelqu’un le veut ? %cost_gold' WHERE `id`=400;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai %quest_links' WHERE `id`=401;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Moi aussi j’ai %quest_links' WHERE `id`=402;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Moi aussi j’ai %quest_links, je suis à %zone_name' WHERE `id`=403;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%other_name, moi aussi j’ai %quest_links' WHERE `id`=404;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%other_name, moi aussi j’ai %quest_links, et je suis à %zone_name' WHERE `id`=405;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis dispo pour %quest_links, je suis à %zone_name' WHERE `id`=406;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis dispo pour %quest_links, je suis %my_role' WHERE `id`=407;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%other_name, je suis dispo pour %quest_links à %zone_name' WHERE `id`=408;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%other_name, je suis dispo pour %quest_links, je suis %my_role' WHERE `id`=409;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey, je suis partant pour %quest_links' WHERE `id`=410;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey, je pourrais faire %quest_links avec toi' WHERE `id`=411;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey, moi aussi j’ai %quest_links' WHERE `id`=412;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %other_name, partant pour %quest_links' WHERE `id`=413;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %other_name, je peux faire %quest_links avec toi' WHERE `id`=414;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %other_name, moi aussi j’ai %quest_links' WHERE `id`=415;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On se groupe pour %quest_links ?' WHERE `id`=416;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis partant pour %quest_links, je suis à %zone_name' WHERE `id`=417;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis dispo pour %quest_links, je suis %my_role' WHERE `id`=418;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%other_name, je peux te vendre %formatted_item_links' WHERE `id`=419;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux peut-être vendre %formatted_item_links' WHERE `id`=420;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je pense pouvoir vendre %formatted_item_links' WHERE `id`=421;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%other_name, je peux peut-être te vendre %formatted_item_links' WHERE `id`=422;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%other_name, tu penses que je peux vendre %formatted_item_links ?' WHERE `id`=423;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux te vendre %formatted_item_links' WHERE `id`=424;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey, j’ai %formatted_item_links à vendre' WHERE `id`=425;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey, je pourrais peut-être vendre %formatted_item_links' WHERE `id`=426;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quête acceptée' WHERE `id`=427;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quête abandonnée' WHERE `id`=428;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas prendre cette quête' WHERE `id`=429;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas parler au donneur de quête' WHERE `id`=430;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai déjà terminé %quest' WHERE `id`=431;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai déjà la quête %quest' WHERE `id`=432;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas prendre %quest' WHERE `id`=433;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas prendre %quest, mon journal de quêtes est plein' WHERE `id`=434;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas prendre %quest, mes sacs sont pleins' WHERE `id`=435;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai accepté la quête %quest' WHERE `id`=436;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je n’ai pas encore terminé la quête %quest' WHERE `id`=437;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La quête %quest est dispo' WHERE `id`=438;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai échoué à la quête %quest' WHERE `id`=439;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas rendre la quête %quest' WHERE `id`=440;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai terminé la quête %quest' WHERE `id`=441;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai terminé la quête %quest et reçu %item' WHERE `id`=442;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelle récompense devrais-je choisir pour la quête %quest ? %rewards' WHERE `id`=443;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='OK, je vais prendre %item comme récompense' WHERE `id`=444;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bonjour' WHERE `id`=445;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bonjour !' WHERE `id`=446;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut' WHERE `id`=447;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut !' WHERE `id`=448;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut à toi !' WHERE `id`=449;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bonjour, je vous suis !' WHERE `id`=450;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bonjour, montrez-moi le chemin !' WHERE `id`=451;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut, montre-moi le chemin !' WHERE `id`=452;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %player, tu veux rejoindre mon groupe ?' WHERE `id`=453;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %player, tu veux rejoindre mon groupe ?' WHERE `id`=454;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Déconnexion annulée !' WHERE `id`=455;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je me déconnecte !' WHERE `id`=456;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Au revoir !' WHERE `id`=457;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bye bye !' WHERE `id`=458;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='À plus tard !' WHERE `id`=459;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='c’était quoi ce truc %s ?' WHERE `id`=460;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='pas sûr d’avoir compris %s ?' WHERE `id`=461;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='euh… j’ai aucune idée de ce que tu racontes' WHERE `id`=462;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='tu parles à moi, %s ?' WHERE `id`=463;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='whaaaa ?' WHERE `id`=464;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='hein ?' WHERE `id`=465;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='quoi ?' WHERE `id`=466;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='tu parles ou tu râles ?' WHERE `id`=467;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='comme tu veux, mec' WHERE `id`=468;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='tu m’as perdu là' WHERE `id`=469;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bla bla bla…' WHERE `id`=470;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’as dit quoi, %s ?' WHERE `id`=471;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Concentre-toi sur le jeu, %s !' WHERE `id`=472;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Parler avec toi %s, c’est génial ! J’ai toujours rêvé de te rencontrer' WHERE `id`=473;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ces messages me font flipper ! J’ai l’impression de tous vous connaître !' WHERE `id`=474;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ouais bien sûr ! HAHA ! C’est ça, allez !' WHERE `id`=475;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je te crois !!!' WHERE `id`=476;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='OK, uhuh LOL' WHERE `id`=477;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi tout le monde dit toujours les mêmes trucs ???' WHERE `id`=478;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %s… euh, laisse tomber !' WHERE `id`=479;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu parles de quoi %s ? Sérieux ?' WHERE `id`=480;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qui a dit ça ? Je me sens visé là' WHERE `id`=481;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='wtf vous racontez tous là ?' WHERE `id`=482;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='fr fr no cap on a stack' WHERE `id`=483;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='t’auras que dalle' WHERE `id`=484;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='swag' WHERE `id`=485;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='merci !' WHERE `id`=486;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='non' WHERE `id`=487;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Yep' WHERE `id`=488;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Paix à son ame.' WHERE `id`=489;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s sans déconner xD' WHERE `id`=490;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='pourquoi ça ?' WHERE `id`=491;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='mdr' WHERE `id`=492;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je pensais fermer ma gueule, j’ai encore rien compris au chat' WHERE `id`=493;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux devenir vraiment jaloux... comme un elfe sans loot' WHERE `id`=494;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s tu captes pas le sarcasme qui dégouline de mon message là ?' WHERE `id`=495;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Il a dit "no homo", donc c’est bon apparemment' WHERE `id`=496;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Instant nain' WHERE `id`=497;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oui %s' WHERE `id`=498;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Intéressant…' WHERE `id`=499;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='lol' WHERE `id`=500;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s va te faire voir mec :D' WHERE `id`=501;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`=':^)' WHERE `id`=502;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='merci' WHERE `id`=503;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s bien dit !' WHERE `id`=504;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ouiiiii' WHERE `id`=505;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ouais' WHERE `id`=506;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ooooooh' WHERE `id`=507;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='hmm' WHERE `id`=508;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ouais c’est ça' WHERE `id`=509;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='t’as failli me faire vomir, wtf' WHERE `id`=510;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='chaud !' WHERE `id`=511;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='les rageux pleurent' WHERE `id`=512;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’as mangé quoi %s ?' WHERE `id`=513;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='wtf' WHERE `id`=514;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais essayer de comprendre ce que t’as dit' WHERE `id`=515;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='*confus*' WHERE `id`=516;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='putain ouais' WHERE `id`=517;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='0/10 ne lirait pas ça une deuxième fois' WHERE `id`=518;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='10/10 je relis direct' WHERE `id`=519;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='6/10 ouais, pourquoi pas' WHERE `id`=520;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='7/10 ça passe' WHERE `id`=521;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='basé' WHERE `id`=522;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ah ouais peut-être' WHERE `id`=523;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ouais, et alors ?' WHERE `id`=524;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='hey %s je t’ai pas oublié' WHERE `id`=525;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='tu m’énerves %s' WHERE `id`=526;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='je vais t’avoir cette fois %s' WHERE `id`=527;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='garde un œil derrière toi %s' WHERE `id`=528;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai pas trop aimé la manche d’avant' WHERE `id`=529;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai été nul au dernier round à cause de %s' WHERE `id`=530;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Prépare-toi à mourir %s' WHERE `id`=531;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai pas trop kiffé que tu me tues %s' WHERE `id`=532;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s, je te hais' WHERE `id`=533;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='grrrrr je vais t’avoir cette fois %s' WHERE `id`=534;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='eh bien va te faire foutre' WHERE `id`=535;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s je vais vomir dans ta putain de bouche' WHERE `id`=536;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='me juge pas bordel' WHERE `id`=537;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ta mère est tellement grosse qu’elle passe même pas le Portail des Ténèbres' WHERE `id`=538;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='wtf' WHERE `id`=539;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='wtf ??' WHERE `id`=540;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='vie misérable' WHERE `id`=541;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='qu’est-ce qui se passe là ?' WHERE `id`=542;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='nul à chier' WHERE `id`=543;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='REVANCHE !!! Je vais l’éclater' WHERE `id`=544;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='pathétique, je me suis fait tuer par %s' WHERE `id`=545;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ok j’en ai fini' WHERE `id`=546;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='hé hé, j’ai explosé %s ?' WHERE `id`=547;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’était trop facile, d\'exploser %s' WHERE `id`=548;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’es grillé, clochard' WHERE `id`=549;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='ha ha' WHERE `id`=550;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Loser' WHERE `id`=551;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai tué %s et vous êtes tous les prochains, les gars' WHERE `id`=552;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oh ouais, je l’ai éclaté' WHERE `id`=553;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis une machine à tuer' WHERE `id`=554;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s, ça me rappelle un morceau de Slayer… tout ce sang, c’est beau' WHERE `id`=555;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Désolé %s. On peut refaire la scène ?' WHERE `id`=556;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Alors %s… ça fait quoi de nourrir les vers ???' WHERE `id`=557;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’étais censé être mort %s ! C’est dans le script bon sang !' WHERE `id`=558;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Désolé %s. Franchement, c’était aussi beau qu’un Warhol !' WHERE `id`=559;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s, je prendrai les balles en caoutchouc la prochaine fois, promis !' WHERE `id`=560;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Qu’est-ce qu’il y a %s ?? T’as perdu la tête ? Hahaha, faut rester cool !' WHERE `id`=561;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Fallait que je le fasse %s… Le Réalisateur me l’a dit !' WHERE `id`=562;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %s… MUAHAHAHAHAHAHAHAHAHAHA' WHERE `id`=563;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s, celle-là, je l’ai savourée !! Allez, on recommence Sam !' WHERE `id`=564;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %s ! Tu peux commencer à m’appeler Scarface… espèce de M…erde !' WHERE `id`=565;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu me parles à moi %s ?? Tu me parles à MOI ?!' WHERE `id`=566;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s, fais-le bien cette fois, évite MES balles.' WHERE `id`=567;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%s, pourquoi tu traînes par terre ? Allez bouge !' WHERE `id`=568;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai rigolé comme jamais' WHERE `id`=569;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut %s' WHERE `id`=570;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oh, salut %s' WHERE `id`=571;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Wazzup %s !!!' WHERE `id`=572;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut' WHERE `id`=573;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Wazzup' WHERE `id`=574;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bonjour %s' WHERE `id`=575;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Salut %s, je te connais ?' WHERE `id`=576;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %s' WHERE `id`=577;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hai %s' WHERE `id`=578;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='c’est quoi ce délire' WHERE `id`=579;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='wtf' WHERE `id`=580;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='c’est du foutage de gueule' WHERE `id`=581;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='admin' WHERE `id`=582;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey %s, arrête d’abuser de ton admin là' WHERE `id`=583;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Lâche-moi admin !' WHERE `id`=584;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’es nul admin' WHERE `id`=585;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est mon nom ça, tu veux quoi %s ?' WHERE `id`=586;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oui ???' WHERE `id`=587;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Euh… quoi ?' WHERE `id`=588;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu me parles à moi %s ?' WHERE `id`=589;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai des chiots sous mon armure !' WHERE `id`=590;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mords-moi, <target> !' WHERE `id`=591;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey <target> ! Devine ce que ta mère a dit hier soir !' WHERE `id`=592;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='<target>, t’es tellement moche que tu pourrais même pas scorer dans un bordel de singes avec un sac de bananes !' WHERE `id`=593;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tais-toi <target>, tu seras jamais l’homme que ta mère est !!' WHERE `id`=594;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ta mère était un hamster et ton père sentait la surette !' WHERE `id`=595;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne veux plus te parler, espèce de vide-écuelle à bestiaux débiles !!!' WHERE `id`=596;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je pète dans ta direction générale !!!' WHERE `id`=597;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Va faire bouillir ton postérieur, fils d’un imbécile cosmique !!!' WHERE `id`=598;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu comptes faire quoi <target>, saigner sur moi ? ALLEZ, VIENS !' WHERE `id`=599;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='M-O-O-N ! Ça veut dire aggro !' WHERE `id`=600;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’es aussi utile qu’un unijambiste dans un concours de coups de pied au cul' WHERE `id`=601;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey <target> ! Arrête de draguer, c’est pas ton genre. C’est pas gonflable.' WHERE `id`=602;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='<target>, t’es tellement hors catégorie que tu joues carrément à un autre sport' WHERE `id`=603;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu as fait une grosse erreur aujourd’hui <target>… t’es sorti du lit.' WHERE `id`=604;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je veux essayer de me transformer en cheval. Je prends l’avant, et toi… tu restes toi.' WHERE `id`=605;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je peux emprunter ton visage ? Mon cul part en vacances.' WHERE `id`=606;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’aimerais t’offrir un cadeau de départ… d’abord, fais ta part.' WHERE `id`=607;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Avant que t’arrives, on avait faim. Maintenant on en a juste marre.' WHERE `id`=608;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je t’aime bien. Les gens disent que j’ai mauvais goût, mais je t’aime bien.' WHERE `id`=609;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je pense que t’as un complexe d’infériorité… mais t’inquiète, il est mérité.' WHERE `id`=610;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Arrière, créature pourrie ! Ou je secoue tes os hors de ta tunique !' WHERE `id`=611;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je crois pas que je perds mon temps avec toi… et pourtant !' WHERE `id`=612;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’adore quand on m’insulte : j’ai plus besoin d’être poli.' WHERE `id`=613;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Espèce de veston de cuir, boutons en cristal, tête nouée, braillard à gerbe, jarretière de puce, langue mielleuse, bourse espagnole !' WHERE `id`=614;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Espèce de pleurnichard, chasseur de chauve-souris, ivrogne de malte !' WHERE `id`=615;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’es vraiment une idole pour les adorateurs de l’idiotie !' WHERE `id`=616;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Misérable piaf mal dégrossi !' WHERE `id`=617;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Fils de mandragore ! T’es plus utile en plumeau qu’en laquais !' WHERE `id`=618;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Toi ! Gueux ! Cloporte ! Tarlouze ! Je vais chatouiller ta catastrophe !' WHERE `id`=619;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oh <target> ! Infâme fille de lin mal élevé !' WHERE `id`=620;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On fuit par ta cheminée, <target> !' WHERE `id`=621;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oh toi, misérable fleur de cancre gorgée de marais !' WHERE `id`=622;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Si j’étais comme toi, je me jetterais à la poubelle.' WHERE `id`=623;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Apprends-moi <target>… à ne plus penser du tout.' WHERE `id`=624;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’es maudit comme un œuf mal rôti… tout cramé d’un côté.' WHERE `id`=625;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Espèce de gringalet, de peau de hareng, de langue de bœuf séchée, de… souffle… taureau démembré, morceau de corde ! Queue d’épée, boîte à rien, tige de tailleur !' WHERE `id`=626;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Fi ! Qu’on te jette dans la bouche pourrie de la Mort !' WHERE `id`=627;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='<target>, t’es poissonnier, avoue !' WHERE `id`=628;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vivrai assez pour te défoncer le crâne !' WHERE `id`=629;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’es aussi profond qu’une flaque ! <target>, t’es bonne pour les vers, pas pour la viande !' WHERE `id`=630;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vermine ! Ô <target>, espèce de noisette infernale puante !' WHERE `id`=631;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='<target> ! Ton baiser est aussi réconfortant qu’un glaçon pour un serpent affamé !' WHERE `id`=632;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je te méprise, compagnon galeux. Quoi, pauvre arnaqueur sans chemise ! Dégage, raclure moisie !' WHERE `id`=633;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hors de ma vue ! Tu infectes mes yeux <target> !' WHERE `id`=634;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='HEURE DE JEU !!!!' WHERE `id`=635;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Personne ne passera !' WHERE `id`=636;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On est attaqués ! Hissez les voiles ! Repoussez les intrus !' WHERE `id`=637;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Personne ne défie la Confrérie !' WHERE `id`=638;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Imbéciles… tuez celui en robe !' WHERE `id`=639;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais offrir ton âme à Hakkar lui-même !' WHERE `id`=640;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='L’orgueil annonce la fin de ton monde ! Venez, mortels ! Affrontez la colère de la %randomfaction !' WHERE `id`=641;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tous mes plans menaient à CE moment !' WHERE `id`=642;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ahh ! Encore des agneaux pour l’abattoir !' WHERE `id`=643;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Encore une journée, encore une glorieuse bataille !' WHERE `id`=644;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Alors, affaires… ou plaisir ?' WHERE `id`=645;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vous n’êtes pas préparés !' WHERE `id`=646;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La conquête finale de la %randomfaction a commencé ! Cette fois, aucun ne survivra !' WHERE `id`=647;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ta mort sera douloureuse.' WHERE `id`=648;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Implore pitié ! Tes vies inutiles vont être sacrifiées.' WHERE `id`=649;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Abandonne tout espoir ! La %randomfaction est revenue pour finir ce qui a commencé… et cette fois, pas d’échappatoire !' WHERE `id`=650;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Alerte ! Tu es marqué pour l’EXTERMINATION !' WHERE `id`=651;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Le %subzone est réservé aux invités seulement…' WHERE `id`=652;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ha ha ha ! Tu es totalement dépassé !' WHERE `id`=653;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais écraser tes illusions de grandeur !' WHERE `id`=654;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pardonne-moi, mais tu vas perdre cette partie.' WHERE `id`=655;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Résister ne fait qu’empirer les choses.' WHERE `id`=656;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vermine ! Sangsues ! Prends mon sang et étouffe-toi avec !' WHERE `id`=657;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pas encore… PAS ENCORE !' WHERE `id`=658;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mon sang sera ta perte !' WHERE `id`=659;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Parfait. Maintenant bats-toi contre moi !' WHERE `id`=660;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Allez les gardes ! C’est l’heure de tuer !' WHERE `id`=661;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='N’attends pas la mort, viens à moi. Je rendrai ton sacrifice rapide.' WHERE `id`=662;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu seras mort très bientôt !' WHERE `id`=663;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mouahaha !' WHERE `id`=664;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est moi le prédateur ! Toi, la proie...' WHERE `id`=665;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu vas repartir en morceaux !' WHERE `id`=666;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La mort approche... As-tu la conscience tranquille ?' WHERE `id`=667;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ton comportement ne sera pas toléré.' WHERE `id`=668;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La Ménagerie est réservée aux invités.' WHERE `id`=669;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hmm, des visiteurs non annoncés… Il faut se préparer…' WHERE `id`=670;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Entités hostiles détectées. Évaluation de menace en cours. Cible principale verrouillée. Réévaluation dans trente secondes.' WHERE `id`=671;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Des nouveaux jouets ? Pour moi ? Promis, je les casse pas… cette fois !' WHERE `id`=672;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis prêt à jouer !' WHERE `id`=673;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Chut… tout sera fini bientôt.' WHERE `id`=674;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Aaaaaughibbrgubugbugrguburgle !' WHERE `id`=675;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='RwlRwlRwlRwl !' WHERE `id`=676;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Toi aussi, tu serviras !' WHERE `id`=677;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Dis-moi... dis-moi tout ! Tes vilains petits secrets ! Je vais les arracher de ta chair !' WHERE `id`=678;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Préparez-vous, les cloches ont sonné ! Protégez vos faibles, vos jeunes et vos vieux ! Chacun paiera le prix final ! Implorerez-vous pitié ? Le Jugement est arrivé !' WHERE `id`=679;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mais où suis-je, par les boutons en laiton de Bonzo ?' WHERE `id`=680;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je n’en peux plus ! Roi Gobelin ! Roi Gobelin ! Où que tu sois ! Emporte ce <target> loin de moi !' WHERE `id`=681;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu as treize heures pour résoudre le labyrinthe... sinon ton petit frère deviendra l’un des nôtres... pour toujours.' WHERE `id`=682;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Alors, le <subzone> c’est du gâteau, hein ? Voyons comment tu gères ce petit bout-là…' WHERE `id`=683;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Recule, j’vais t’affronter. Déterminé, prêt à affronter n’importe qui. J’sais que t’as tort, t’as rien à faire ici !' WHERE `id`=684;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Montre-moi c’que t’as dans le ventre !' WHERE `id`=685;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Jusqu’à la mort !' WHERE `id`=686;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Double lame, pour un rasage net à chaque fois !' WHERE `id`=687;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Allez, viens !' WHERE `id`=688;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tu vas tomber !' WHERE `id`=689;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Piou piou, coup de couteau !' WHERE `id`=690;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Finissons-en vite, le temps c’est du mana.' WHERE `id`=691;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne crois pas que tu réalises dans quelle merde tu es.' WHERE `id`=692;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais faire honneur à ma famille et à mon royaume !' WHERE `id`=693;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Lumière, donne-moi la force !' WHERE `id`=694;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mon église, c’est le champ de bataille – l’heure de la messe a sonné !' WHERE `id`=695;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je te tiens en mépris total…' WHERE `id`=696;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Affronte le marteau de la justice !' WHERE `id`=697;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Prouve ta valeur dans l’épreuve des armes, sous la Lumière !' WHERE `id`=698;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tous doivent tomber devant la puissance de ma cause – tu es le prochain !' WHERE `id`=699;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Prépare-toi à mourir !' WHERE `id`=700;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La bête en moi est bien pire que celle à mes côtés…' WHERE `id`=701;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Admire la puissance de feu d’un chasseur totalement équipé !' WHERE `id`=702;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Soigne-moi ! Vite !' WHERE `id`=703;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis presque mort ! Soignez-moi !' WHERE `id`=704;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='À l’aide ! Soignez-moi !' WHERE `id`=705;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un ! Un soin vite !' WHERE `id`=706;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Heal ! Heal ! Heal !' WHERE `id`=707;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je meurs ! Soin ! Aaaaarhg !' WHERE `id`=708;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Soignez-moi !' WHERE `id`=709;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais mourir. Je vais mourir. Je vais mourir. Soignez-moi !' WHERE `id`=710;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Healers, vous êtes où ? Je crève !' WHERE `id`=711;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ouille, la douleur ! Soignez vite !' WHERE `id`=712;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin de soin' WHERE `id`=713;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Vie basse !' WHERE `id`=714;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Lâche un heal. S’il te plaît.' WHERE `id`=715;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un peut me balancer un soin ?' WHERE `id`=716;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Hey ! Mieux vaut me soigner maintenant que me rez plus tard !' WHERE `id`=717;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Désolé… mais encore un heal, please.' WHERE `id`=718;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Saletés de mobs… heal moi vite !' WHERE `id`=719;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Encore un coup et je suis mort. Un petit heal ?' WHERE `id`=720;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Y’a des soigneurs dans cette galère ?' WHERE `id`=721;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourquoi c’est toujours ma tête qu’ils frappent ? J’ai besoin d’un soin !' WHERE `id`=722;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un pour me soigner un chouïa ?' WHERE `id`=723;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='OOM' WHERE `id`=724;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Plus de mana !' WHERE `id`=725;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai cramé tout mon mana pour ça, sérieux...' WHERE `id`=726;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Faudrait attendre que je boive ou que je régène, là…' WHERE `id`=727;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mana faible… très faible…' WHERE `id`=728;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Encore à sec ? Pas de mana, encore.' WHERE `id`=729;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mana bas. Je veux une boisson !' WHERE `id`=730;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On a une machine à boissons ? J’ai encore plus rien !' WHERE `id`=731;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mon mana ? Parti dans les limbes.' WHERE `id`=732;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’achèterai des boissons la prochaine fois. Là j’ai que dalle.' WHERE `id`=733;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Où est passé mon mana ?' WHERE `id`=734;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Il me reste quelques <ammo> !' WHERE `id`=735;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Besoin de plus de <ammo> !' WHERE `id`=736;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Plus que 100 <ammo> !' WHERE `id`=737;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est fini ! Plus un seul <ammo> !' WHERE `id`=738;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Et tu as mon arc… oups, plus de <ammo> !' WHERE `id`=739;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai besoin de munitions !' WHERE `id`=740;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oh mon dieu !' WHERE `id`=741;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai peur… là… vraiment.' WHERE `id`=742;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On est foutus !' WHERE `id`=743;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est fini. F.I.N.I.' WHERE `id`=744;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ça se termine maintenant.' WHERE `id`=745;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un peut balancer un blizzard ou un truc ?!' WHERE `id`=746;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mince. Le tank a aggro TOUT le monde…' WHERE `id`=747;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='On va mourir. On va mourir. On VA MOURIR !' WHERE `id`=748;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Wow ! Tant de jouets à casser !' WHERE `id`=749;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais tous les buter ! TOUS !' WHERE `id`=750;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Si le tank meurt, c’est foutu pour nous tous…' WHERE `id`=751;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Aaaaaargh !' WHERE `id`=752;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='LEEEEERROOOYYYYYYYYYYYY JENNKINNNSSSSSS !!!!!!!!' WHERE `id`=753;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Bon. Qu’est-ce qu’on a en AOE là ?' WHERE `id`=754;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ça devient intéressant…' WHERE `id`=755;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Cool. Regroupez-les bien pour une jolie boule de feu !' WHERE `id`=756;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='TUEZ ! TUEZ ! TUEZ !' WHERE `id`=757;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je crois que j’ai mouillé mon pantalon…' WHERE `id`=758;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est notre fin. C’était sympa.' WHERE `id`=759;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’espère que les healers sont prêts… LEEEEROYYYY !' WHERE `id`=760;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pourvu qu’ils ne me ciblent pas moi…' WHERE `id`=761;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oh non. Je peux pas regarder ce massacre…' WHERE `id`=762;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’espère qu’il y aura de la thune.' WHERE `id`=763;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Loot ! LOOT !' WHERE `id`=764;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mon précieux…' WHERE `id`=765;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’espère qu’un bel objet épique m’attend là-dedans' WHERE `id`=766;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai des poches profondes et des sacs encore vides.' WHERE `id`=767;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Tout est à moi !' WHERE `id`=768;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Pas de gris moisi aujourd’hui, pitié…' WHERE `id`=769;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='CE loot est À MOI !' WHERE `id`=770;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Looter c’est sale… mais j’ai besoin de thunes.' WHERE `id`=771;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='De l’or !' WHERE `id`=772;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ok. Voyons ce qu’ils ont laissé…' WHERE `id`=773;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='T’inquiète, je vais tout looter. Tout.' WHERE `id`=774;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis un ninja du loot.' WHERE `id`=775;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je dois lancer les dés ?' WHERE `id`=776;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Quelqu’un peut m’expliquer où ils ont rangé tout ça ?' WHERE `id`=777;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Non, je loot pas cette merde grise.' WHERE `id`=778;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est moi d’abord ! C’est moi ! MOI !' WHERE `id`=779;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Donne-moi ton fric !' WHERE `id`=780;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Mes poches sont vides, il faut les remplir.' WHERE `id`=781;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai un nouveau sac, il est fait pour ça.' WHERE `id`=782;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’espère que je vais pas aggro en lootant…' WHERE `id`=783;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ne regardez pas… je loot discret…' WHERE `id`=784;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Ha ! Vous n’aurez rien de tout ça !' WHERE `id`=785;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Le loot, c’est stylé.' WHERE `id`=786;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’adore les nouveaux équipements.' WHERE `id`=787;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je me casse si y’a encore rien de valeur…' WHERE `id`=788;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’espère que ce sera une jolie bague !' WHERE `id`=789;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je vais t’arracher le loot des mains !' WHERE `id`=790;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Personne ne touche à rien. C’est MOI qui loot.' WHERE `id`=791;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Loot sucré :D' WHERE `id`=792;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Dieu du lancer, donne-moi un épique aujourd’hui…' WHERE `id`=793;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Allez, de nouveaux jouets s’il vous plaît !' WHERE `id`=794;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’espère qu’ils ont des trucs savoureux…' WHERE `id`=795;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='L’or est à moi. Je laisse tout le reste… promis…' WHERE `id`=796;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Non, je peux pas résister.' WHERE `id`=797;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’en veux ENCORE !' WHERE `id`=798;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis presque là, attendez-moi !' WHERE `id`=799;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je suis pas loin, attendez-moi !' WHERE `id`=800;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’arrive vers ta position' WHERE `id`=801;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’arrive vers toi' WHERE `id`=802;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je me dirige vers ta position' WHERE `id`=803;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’essaie de te rejoindre' WHERE `id`=804;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Équipement de %item' WHERE `id`=805;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item retiré' WHERE `id`=806;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='J’ai appris les sorts : %spells' WHERE `id`=807;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='%item est en recharge' WHERE `id`=808;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je n’ai pas %item dans mon inventaire' WHERE `id`=809;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='L’objet avec l’ID %item n’existe pas' WHERE `id`=810;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Insertion de %gem dans %item' WHERE `id`=811;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas utiliser %item' WHERE `id`=812;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Suivi' WHERE `id`=813;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je reste ici' WHERE `id`=814;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je fuis' WHERE `id`=815;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je fuis pas avec toi, t’es trop loin !' WHERE `id`=816;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Farm en cours' WHERE `id`=817;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Attaque en cours' WHERE `id`=818;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est trop loin' WHERE `id`=819;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='C’est sous l’eau' WHERE `id`=820;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas y aller' WHERE `id`=821;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne suis pas dans ta guilde !' WHERE `id`=822;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Impossible de trouver une banque de guilde à proximité' WHERE `id`=823;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas déposer' WHERE `id`=824;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je n’ai pas les droits pour déposer dans le premier onglet de la banque de guilde' WHERE `id`=825;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='déposé dans la banque de guilde' WHERE `id`=826;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Déplacement libre' WHERE `id`=827;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='En garde' WHERE `id`=828;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Utilisation de %target' WHERE `id`=829;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='sur %unit' WHERE `id`=830;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='(%amount disponible)' WHERE `id`=831;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='(le dernier)' WHERE `id`=832;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La châsse ne correspond pas' WHERE `id`=833;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='sur objet d’échange' WHERE `id`=834;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='sur moi-même' WHERE `id`=835;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='sur %item' WHERE `id`=836;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='sur %gameobject' WHERE `id`=837;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Loot de %item' WHERE `id`=838;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Invocation de %target' WHERE `id`=839;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je n’ai pas assez de membres du groupe à proximité pour invoquer' WHERE `id`=840;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Impossible de trouver la cible d’invocation' WHERE `id`=841;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne peux pas invoquer en combat' WHERE `id`=842;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Je ne connais pas le sort %spell' WHERE `id`=843;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Lancement du sort %spell' WHERE `id`=844;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Fabrication de %spell' WHERE `id`=845;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Impossible de lancer %spell' WHERE `id`=846;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Échec du lancement de %spell' WHERE `id`=847;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='|cffffff00(x%amount restant)|r' WHERE `id`=848;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='dummy' WHERE `id`=849;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Par la Lumière... J\'ai oublié mes Symboles du roi. On se contentera de %base_spell !' WHERE `id`=934;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='La nature est généreuse, pas mes sacs... plus d\'herbes pour %group_spell. Prenez %base_spell pour l\'instant !' WHERE `id`=935;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Plus de poudre des arcanes... %group_spell attendra. Je lance %base_spell !' WHERE `id`=936;
|
||||
UPDATE `ai_playerbot_texts` SET `text_loc2`='Oups, je n\'ai plus de composants pour %group_spell. On fera avec %base_spell !' WHERE `id`=937;
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
DELETE FROM ai_playerbot_texts WHERE name IN (
|
||||
'netherspite_beam_blocking_red',
|
||||
'netherspite_beam_blocking_blue',
|
||||
'netherspite_beam_blocking_green',
|
||||
'netherspite_beam_leaving_blue',
|
||||
'netherspite_beam_leaving_green'
|
||||
);
|
||||
|
||||
DELETE FROM ai_playerbot_texts_chance WHERE name IN (
|
||||
'netherspite_beam_blocking_red',
|
||||
'netherspite_beam_blocking_blue',
|
||||
'netherspite_beam_blocking_green',
|
||||
'netherspite_beam_leaving_blue',
|
||||
'netherspite_beam_leaving_green'
|
||||
);
|
||||
|
||||
INSERT INTO ai_playerbot_texts (name, text, say_type, reply_type, text_loc1, text_loc2, text_loc3, text_loc4, text_loc5, text_loc6, text_loc7, text_loc8) VALUES
|
||||
('netherspite_beam_blocking_red', '%player is moving to block the red beam!', 0, 0, '', '', '', '', '', '', '', ''),
|
||||
('netherspite_beam_blocking_blue', '%player is moving to block the blue beam!', 0, 0, '', '', '', '', '', '', '', ''),
|
||||
('netherspite_beam_blocking_green', '%player is moving to block the green beam!', 0, 0, '', '', '', '', '', '', '', ''),
|
||||
('netherspite_beam_leaving_blue', '%player is leaving the blue beam--next blocker up!', 0, 0, '', '', '', '', '', '', '', ''),
|
||||
('netherspite_beam_leaving_green', '%player is leaving the green beam--next blocker up!', 0, 0, '', '', '', '', '', '', '', '');
|
||||
|
||||
INSERT INTO ai_playerbot_texts_chance (name, probability) VALUES
|
||||
('netherspite_beam_blocking_red', 100),
|
||||
('netherspite_beam_blocking_blue', 100),
|
||||
('netherspite_beam_blocking_green', 100),
|
||||
('netherspite_beam_leaving_blue', 100),
|
||||
('netherspite_beam_leaving_green', 100);
|
||||
@@ -1285,7 +1285,7 @@ CREATE TABLE IF NOT EXISTS `ai_playerbot_texts_chance` (
|
||||
|
||||
/*!40000 ALTER TABLE `ai_playerbot_texts_chance` DISABLE KEYS */;
|
||||
INSERT INTO `ai_playerbot_texts_chance` (`id`, `name`, `probability`) VALUES
|
||||
(1, 'taunt', 30),
|
||||
(2, 'aoe', 75),
|
||||
(3, 'loot', 20);
|
||||
(1, 'taunt', 30),
|
||||
(2, 'aoe', 75),
|
||||
(3, 'loot', 20);
|
||||
/*!40000 ALTER TABLE `ai_playerbot_texts_chance` ENABLE KEYS */;
|
||||
@@ -4,11 +4,11 @@ DELETE FROM `playerbots_travelnode_path` WHERE `node_id` = 3780;
|
||||
DELETE FROM `playerbots_travelnode` WHERE `id` = 3780;
|
||||
|
||||
-- Insert new entries into playerbots_travelnode
|
||||
INSERT INTO `playerbots_travelnode` (`id`, `name`, `map_id`, `x`, `y`, `z`, `linked`)
|
||||
INSERT INTO `playerbots_travelnode` (`id`, `name`, `map_id`, `x`, `y`, `z`, `linked`)
|
||||
VALUES (3780, 'Highlord Mograine', 533, 2524.32, -2951.28, 245.633, 1);
|
||||
|
||||
-- Insert new entries into playerbots_travelnode_path
|
||||
INSERT INTO `playerbots_travelnode_path` (`node_id`, `to_node_id`, `nr`, `map_id`, `x`, `y`, `z`)
|
||||
INSERT INTO `playerbots_travelnode_path` (`node_id`, `to_node_id`, `nr`, `map_id`, `x`, `y`, `z`)
|
||||
VALUES
|
||||
(3780, 472, 0, 533, 2524.32, -2951.28, 245.633),
|
||||
(3780, 472, 1, 533, 2528.79, -2948.58, 245.633),
|
||||
@@ -16,7 +16,7 @@ VALUES
|
||||
(3780, 757, 1, 533, 2517.62, -2959.38, 245.636);
|
||||
|
||||
-- Insert new entries into playerbots_travelnode_link
|
||||
INSERT INTO `playerbots_travelnode_link` (`node_id`, `to_node_id`, `type`, `object`, `distance`, `swim_distance`, `extra_cost`, `calculated`, `max_creature_0`, `max_creature_1`, `max_creature_2`)
|
||||
INSERT INTO `playerbots_travelnode_link` (`node_id`, `to_node_id`, `type`, `object`, `distance`, `swim_distance`, `extra_cost`, `calculated`, `max_creature_0`, `max_creature_1`, `max_creature_2`)
|
||||
VALUES
|
||||
(3780, 472, 1, 0, 5.3221, 0, 0, 1, 83, 0, 0),
|
||||
(3780, 757, 1, 0, 10.6118, 0, 0, 1, 83, 0, 0);
|
||||
@@ -1,3 +0,0 @@
|
||||
DELETE FROM spell_dbc WHERE ID = 30758;
|
||||
INSERT INTO spell_dbc (`ID`,`Category`,`DispelType`,`Mechanic`,`Attributes`,`AttributesEx`,`AttributesEx2`,`AttributesEx3`,`AttributesEx4`,`AttributesEx5`,`AttributesEx6`,`AttributesEx7`,`ShapeshiftMask`,`unk_320_2`,`ShapeshiftExclude`,`unk_320_3`,`Targets`,`TargetCreatureType`,`RequiresSpellFocus`,`FacingCasterFlags`,`CasterAuraState`,`TargetAuraState`,`ExcludeCasterAuraState`,`ExcludeTargetAuraState`,`CasterAuraSpell`,`TargetAuraSpell`,`ExcludeCasterAuraSpell`,`ExcludeTargetAuraSpell`,`CastingTimeIndex`,`RecoveryTime`,`CategoryRecoveryTime`,`InterruptFlags`,`AuraInterruptFlags`,`ChannelInterruptFlags`,`ProcTypeMask`,`ProcChance`,`ProcCharges`,`MaxLevel`,`BaseLevel`,`SpellLevel`,`DurationIndex`,`PowerType`,`ManaCost`,`ManaCostPerLevel`,`ManaPerSecond`,`ManaPerSecondPerLevel`,`RangeIndex`,`Speed`,`ModalNextSpell`,`CumulativeAura`,`Totem_1`,`Totem_2`,`Reagent_1`,`Reagent_2`,`Reagent_3`,`Reagent_4`,`Reagent_5`,`Reagent_6`,`Reagent_7`,`Reagent_8`,`ReagentCount_1`,`ReagentCount_2`,`ReagentCount_3`,`ReagentCount_4`,`ReagentCount_5`,`ReagentCount_6`,`ReagentCount_7`,`ReagentCount_8`,`EquippedItemClass`,`EquippedItemSubclass`,`EquippedItemInvTypes`,`Effect_1`,`Effect_2`,`Effect_3`,`EffectDieSides_1`,`EffectDieSides_2`,`EffectDieSides_3`,`EffectRealPointsPerLevel_1`,`EffectRealPointsPerLevel_2`,`EffectRealPointsPerLevel_3`,`EffectBasePoints_1`,`EffectBasePoints_2`,`EffectBasePoints_3`,`EffectMechanic_1`,`EffectMechanic_2`,`EffectMechanic_3`,`ImplicitTargetA_1`,`ImplicitTargetA_2`,`ImplicitTargetA_3`,`ImplicitTargetB_1`,`ImplicitTargetB_2`,`ImplicitTargetB_3`,`EffectRadiusIndex_1`,`EffectRadiusIndex_2`,`EffectRadiusIndex_3`,`EffectAura_1`,`EffectAura_2`,`EffectAura_3`,`EffectAuraPeriod_1`,`EffectAuraPeriod_2`,`EffectAuraPeriod_3`,`EffectMultipleValue_1`,`EffectMultipleValue_2`,`EffectMultipleValue_3`,`EffectChainTargets_1`,`EffectChainTargets_2`,`EffectChainTargets_3`,`EffectItemType_1`,`EffectItemType_2`,`EffectItemType_3`,`EffectMiscValue_1`,`EffectMiscValue_2`,`EffectMiscValue_3`,`EffectMiscValueB_1`,`EffectMiscValueB_2`,`EffectMiscValueB_3`,`EffectTriggerSpell_1`,`EffectTriggerSpell_2`,`EffectTriggerSpell_3`,`EffectPointsPerCombo_1`,`EffectPointsPerCombo_2`,`EffectPointsPerCombo_3`,`EffectSpellClassMaskA_1`,`EffectSpellClassMaskA_2`,`EffectSpellClassMaskA_3`,`EffectSpellClassMaskB_1`,`EffectSpellClassMaskB_2`,`EffectSpellClassMaskB_3`,`EffectSpellClassMaskC_1`,`EffectSpellClassMaskC_2`,`EffectSpellClassMaskC_3`,`SpellVisualID_1`,`SpellVisualID_2`,`SpellIconID`,`ActiveIconID`,`SpellPriority`,`Name_Lang_enUS`,`Name_Lang_enGB`,`Name_Lang_koKR`,`Name_Lang_frFR`,`Name_Lang_deDE`,`Name_Lang_enCN`,`Name_Lang_zhCN`,`Name_Lang_enTW`,`Name_Lang_zhTW`,`Name_Lang_esES`,`Name_Lang_esMX`,`Name_Lang_ruRU`,`Name_Lang_ptPT`,`Name_Lang_ptBR`,`Name_Lang_itIT`,`Name_Lang_Unk`,`Name_Lang_Mask`,`NameSubtext_Lang_enUS`,`NameSubtext_Lang_enGB`,`NameSubtext_Lang_koKR`,`NameSubtext_Lang_frFR`,`NameSubtext_Lang_deDE`,`NameSubtext_Lang_enCN`,`NameSubtext_Lang_zhCN`,`NameSubtext_Lang_enTW`,`NameSubtext_Lang_zhTW`,`NameSubtext_Lang_esES`,`NameSubtext_Lang_esMX`,`NameSubtext_Lang_ruRU`,`NameSubtext_Lang_ptPT`,`NameSubtext_Lang_ptBR`,`NameSubtext_Lang_itIT`,`NameSubtext_Lang_Unk`,`NameSubtext_Lang_Mask`,`Description_Lang_enUS`,`Description_Lang_enGB`,`Description_Lang_koKR`,`Description_Lang_frFR`,`Description_Lang_deDE`,`Description_Lang_enCN`,`Description_Lang_zhCN`,`Description_Lang_enTW`,`Description_Lang_zhTW`,`Description_Lang_esES`,`Description_Lang_esMX`,`Description_Lang_ruRU`,`Description_Lang_ptPT`,`Description_Lang_ptBR`,`Description_Lang_itIT`,`Description_Lang_Unk`,`Description_Lang_Mask`,`AuraDescription_Lang_enUS`,`AuraDescription_Lang_enGB`,`AuraDescription_Lang_koKR`,`AuraDescription_Lang_frFR`,`AuraDescription_Lang_deDE`,`AuraDescription_Lang_enCN`,`AuraDescription_Lang_zhCN`,`AuraDescription_Lang_enTW`,`AuraDescription_Lang_zhTW`,`AuraDescription_Lang_esES`,`AuraDescription_Lang_esMX`,`AuraDescription_Lang_ruRU`,`AuraDescription_Lang_ptPT`,`AuraDescription_Lang_ptBR`,`AuraDescription_Lang_itIT`,`AuraDescription_Lang_Unk`,`AuraDescription_Lang_Mask`,`ManaCostPct`,`StartRecoveryCategory`,`StartRecoveryTime`,`MaxTargetLevel`,`SpellClassSet`,`SpellClassMask_1`,`SpellClassMask_2`,`SpellClassMask_3`,`MaxTargets`,`DefenseType`,`PreventionType`,`StanceBarOrder`,`EffectChainAmplitude_1`,`EffectChainAmplitude_2`,`EffectChainAmplitude_3`,`MinFactionID`,`MinReputation`,`RequiredAuraVision`,`RequiredTotemCategoryID_1`,`RequiredTotemCategoryID_2`,`RequiredAreasID`,`SchoolMask`,`RuneCostID`,`SpellMissileID`,`PowerDisplayID`,`EffectBonusMultiplier_1`,`EffectBonusMultiplier_2`,`EffectBonusMultiplier_3`,`SpellDescriptionVariableID`,`SpellDifficultyID`)
|
||||
VALUES (30758,0,0,0,696254720,132128,268976133,269680640,8388736,393224,4100,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,52,0,0,0,0,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,'aedm','','','','','','','','','','','','','','','',16712190,'','','','','','','','','','','','','','','','',16712172,'','','','','','','','','','','','','','','','',16712188,'','','','','','','','','','','','','','','','',16712188,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0);
|
||||
@@ -1,5 +1,5 @@
|
||||
DROP TABLE IF EXISTS `playerbots_rpg_races`;
|
||||
CREATE TABLE `playerbots_rpg_races`
|
||||
CREATE TABLE `playerbots_rpg_races`
|
||||
(
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`entry` int(11),
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "AiFactory.h"
|
||||
@@ -80,19 +80,13 @@ uint8 AiFactory::GetPlayerSpecTab(Player* bot)
|
||||
switch (bot->getClass())
|
||||
{
|
||||
case CLASS_MAGE:
|
||||
tab = MAGE_TAB_FROST;
|
||||
tab = 1;
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
tab = PALADIN_TAB_RETRIBUTION;
|
||||
tab = 2;
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
tab = PRIEST_TAB_HOLY;
|
||||
break;
|
||||
case CLASS_WARLOCK:
|
||||
tab = WARLOCK_TAB_DEMONOLOGY;
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
tab = SHAMAN_TAB_ELEMENTAL;
|
||||
tab = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -295,7 +289,7 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
{
|
||||
engine->addStrategiesNoInit("dps", "shadow debuff", "shadow aoe", nullptr);
|
||||
}
|
||||
else if (tab == PRIEST_TAB_DISCIPLINE)
|
||||
else if (tab == PRIEST_TAB_DISIPLINE)
|
||||
{
|
||||
engine->addStrategiesNoInit("heal", nullptr);
|
||||
}
|
||||
@@ -307,23 +301,23 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
engine->addStrategiesNoInit("dps assist", "cure", nullptr);
|
||||
break;
|
||||
case CLASS_MAGE:
|
||||
if (tab == 0) // Arcane
|
||||
engine->addStrategiesNoInit("arcane", nullptr);
|
||||
else if (tab == 1) // Fire
|
||||
if (tab == 0)
|
||||
engine->addStrategiesNoInit("arcane", "arcane aoe", nullptr);
|
||||
else if (tab == 1)
|
||||
{
|
||||
if (player->HasSpell(44614) /*Frostfire Bolt*/ && player->HasAura(15047) /*Ice Shards*/)
|
||||
{
|
||||
engine->addStrategiesNoInit("frostfire", nullptr);
|
||||
engine->addStrategiesNoInit("frostfire", "frostfire aoe", nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
engine->addStrategiesNoInit("fire", nullptr);
|
||||
engine->addStrategiesNoInit("fire", "fire aoe", nullptr);
|
||||
}
|
||||
}
|
||||
else // Frost
|
||||
engine->addStrategiesNoInit("frost", nullptr);
|
||||
}
|
||||
else
|
||||
engine->addStrategiesNoInit("frost", "frost aoe", nullptr);
|
||||
|
||||
engine->addStrategiesNoInit("dps", "dps assist", "cure", "aoe", nullptr);
|
||||
engine->addStrategiesNoInit("dps", "dps assist", "cure", nullptr);
|
||||
break;
|
||||
case CLASS_WARRIOR:
|
||||
if (tab == 2)
|
||||
@@ -334,14 +328,14 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
engine->addStrategiesNoInit("fury", "aoe", "dps assist", /*"behind",*/ nullptr);
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
if (tab == 0) // Elemental
|
||||
engine->addStrategiesNoInit("ele", "stoneskin", "wrath", "mana spring", "wrath of air", nullptr);
|
||||
else if (tab == 2) // Restoration
|
||||
engine->addStrategiesNoInit("resto", "stoneskin", "flametongue", "mana spring", "wrath of air", nullptr);
|
||||
else // Enhancement
|
||||
engine->addStrategiesNoInit("enh", "strength of earth", "magma", "healing stream", "windfury", nullptr);
|
||||
if (tab == 0)
|
||||
engine->addStrategiesNoInit("caster", "caster aoe", "bmana", nullptr);
|
||||
else if (tab == 2)
|
||||
engine->addStrategiesNoInit("heal", "bmana", nullptr);
|
||||
else
|
||||
engine->addStrategiesNoInit("melee", "melee aoe", "bdps", nullptr);
|
||||
|
||||
engine->addStrategiesNoInit("dps assist", "cure", "aoe", nullptr);
|
||||
engine->addStrategiesNoInit("dps assist", "cure", "totems", nullptr);
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
if (tab == 1)
|
||||
@@ -373,14 +367,12 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
}
|
||||
break;
|
||||
case CLASS_HUNTER:
|
||||
if (tab == 0) // Beast Mastery
|
||||
engine->addStrategiesNoInit("bm", nullptr);
|
||||
else if (tab == 1) // Marksmanship
|
||||
engine->addStrategiesNoInit("mm", nullptr);
|
||||
else if (tab == 2) // Survival
|
||||
engine->addStrategiesNoInit("surv", nullptr);
|
||||
|
||||
engine->addStrategiesNoInit("cc", "dps assist", "aoe", nullptr);
|
||||
engine->addStrategiesNoInit("dps", "aoe", "bdps", "dps assist", nullptr);
|
||||
engine->addStrategy("dps debuff", false);
|
||||
// if (tab == HUNTER_TAB_SURVIVAL)
|
||||
// {
|
||||
// engine->addStrategy("trap weave", false);
|
||||
// }
|
||||
break;
|
||||
case CLASS_ROGUE:
|
||||
if (tab == ROGUE_TAB_ASSASSINATION || tab == ROGUE_TAB_SUBTLETY)
|
||||
@@ -394,13 +386,13 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
break;
|
||||
case CLASS_WARLOCK:
|
||||
if (tab == 0) // Affliction
|
||||
engine->addStrategiesNoInit("affli", "curse of agony", nullptr);
|
||||
engine->addStrategiesNoInit("affli", "affli aoe", nullptr);
|
||||
else if (tab == 1) // Demonology
|
||||
engine->addStrategiesNoInit("demo", "curse of agony", "meta melee", nullptr);
|
||||
engine->addStrategiesNoInit("demo", "demo aoe", "meta melee", nullptr);
|
||||
else if (tab == 2) // Destruction
|
||||
engine->addStrategiesNoInit("destro", "curse of elements", nullptr);
|
||||
engine->addStrategiesNoInit("destro", "destro aoe", "curse of elements", nullptr);
|
||||
|
||||
engine->addStrategiesNoInit("cc", "dps assist", "aoe", nullptr);
|
||||
engine->addStrategiesNoInit("cc", "dps assist", nullptr);
|
||||
break;
|
||||
|
||||
case CLASS_DEATH_KNIGHT:
|
||||
@@ -423,8 +415,7 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
{
|
||||
if (sPlayerbotAIConfig->autoSaveMana)
|
||||
engine->addStrategy("save mana", false);
|
||||
if (!sPlayerbotAIConfig->IsRestrictedHealerDPSMap(player->GetMapId()))
|
||||
engine->addStrategy("healer dps", false);
|
||||
engine->addStrategy("healer dps", false);
|
||||
}
|
||||
if (facade->IsRealPlayer() || sRandomPlayerbotMgr->IsRandomBot(player))
|
||||
{
|
||||
@@ -475,10 +466,6 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sRandomPlayerbotMgr->IsRandomBot(player))
|
||||
{
|
||||
engine->ChangeStrategy(sPlayerbotAIConfig->randomBotCombatStrategies);
|
||||
}
|
||||
else
|
||||
{
|
||||
engine->ChangeStrategy(sPlayerbotAIConfig->combatStrategies);
|
||||
@@ -607,19 +594,19 @@ void AiFactory::AddDefaultNonCombatStrategies(Player* player, PlayerbotAI* const
|
||||
nonCombatEngine->addStrategy("dps assist", false);
|
||||
break;
|
||||
case CLASS_WARLOCK:
|
||||
if (tab == WARLOCK_TAB_AFFLICTION)
|
||||
if (tab == WARLOCK_TAB_AFFLICATION)
|
||||
{
|
||||
nonCombatEngine->addStrategiesNoInit("felhunter", "spellstone", nullptr);
|
||||
nonCombatEngine->addStrategiesNoInit("felhunter", nullptr);
|
||||
}
|
||||
else if (tab == WARLOCK_TAB_DEMONOLOGY)
|
||||
{
|
||||
nonCombatEngine->addStrategiesNoInit("felguard", "spellstone", nullptr);
|
||||
nonCombatEngine->addStrategiesNoInit("felguard", nullptr);
|
||||
}
|
||||
else if (tab == WARLOCK_TAB_DESTRUCTION)
|
||||
{
|
||||
nonCombatEngine->addStrategiesNoInit("imp", "firestone", nullptr);
|
||||
nonCombatEngine->addStrategiesNoInit("imp", nullptr);
|
||||
}
|
||||
nonCombatEngine->addStrategiesNoInit("dps assist", "ss self", nullptr);
|
||||
nonCombatEngine->addStrategiesNoInit("dps assist", nullptr);
|
||||
break;
|
||||
case CLASS_DEATH_KNIGHT:
|
||||
if (tab == 0)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_AIFACTORY_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "ChatFilter.h"
|
||||
@@ -8,18 +8,6 @@
|
||||
#include "Group.h"
|
||||
#include "Playerbots.h"
|
||||
#include "RtiTargetValue.h"
|
||||
#include "AiFactory.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cctype>
|
||||
#include <string>
|
||||
|
||||
static std::string ToLower(const std::string& str)
|
||||
{
|
||||
std::string out = str;
|
||||
std::transform(out.begin(), out.end(), out.begin(), [](unsigned char c){ return std::tolower(c); });
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string const ChatFilter::Filter(std::string& message)
|
||||
{
|
||||
@@ -37,36 +25,27 @@ public:
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
|
||||
bool tank = msgLower.find("@tank") == 0;
|
||||
bool tank = message.find("@tank") == 0;
|
||||
if (tank && !botAI->IsTank(bot))
|
||||
return "";
|
||||
|
||||
bool dps = msgLower.find("@dps") == 0;
|
||||
bool dps = message.find("@dps") == 0;
|
||||
if (dps && (botAI->IsTank(bot) || botAI->IsHeal(bot)))
|
||||
return "";
|
||||
|
||||
bool heal = msgLower.find("@heal") == 0;
|
||||
bool heal = message.find("@heal") == 0;
|
||||
if (heal && !botAI->IsHeal(bot))
|
||||
return "";
|
||||
|
||||
bool ranged = msgLower.find("@ranged") == 0;
|
||||
bool ranged = message.find("@ranged") == 0;
|
||||
if (ranged && !botAI->IsRanged(bot))
|
||||
return "";
|
||||
|
||||
bool melee = msgLower.find("@melee") == 0;
|
||||
bool melee = message.find("@melee") == 0;
|
||||
if (melee && botAI->IsRanged(bot))
|
||||
return "";
|
||||
|
||||
bool rangeddps = msgLower.find("@rangeddps") == 0;
|
||||
if (rangeddps && (!botAI->IsRanged(bot) || botAI->IsTank(bot) || botAI->IsHeal(bot)))
|
||||
return "";
|
||||
|
||||
bool meleedps = msgLower.find("@meleedps") == 0;
|
||||
if (meleedps && (!botAI->IsMelee(bot) || botAI->IsTank(bot) || botAI->IsHeal(bot)))
|
||||
return "";
|
||||
|
||||
if (tank || dps || heal || ranged || melee)
|
||||
return ChatFilter::Filter(message);
|
||||
|
||||
@@ -82,11 +61,11 @@ public:
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
if (msgLower[0] != '@')
|
||||
|
||||
if (message[0] != '@')
|
||||
return message;
|
||||
|
||||
if (msgLower.find("-") != std::string::npos)
|
||||
if (message.find("-") != std::string::npos)
|
||||
{
|
||||
uint32 fromLevel = atoi(message.substr(message.find("@") + 1, message.find("-")).c_str());
|
||||
uint32 toLevel = atoi(message.substr(message.find("-") + 1, message.find(" ")).c_str());
|
||||
@@ -113,10 +92,9 @@ public:
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
|
||||
bool melee = msgLower.find("@melee") == 0;
|
||||
bool ranged = msgLower.find("@ranged") == 0;
|
||||
bool melee = message.find("@melee") == 0;
|
||||
bool ranged = message.find("@ranged") == 0;
|
||||
|
||||
if (!melee && !ranged)
|
||||
return message;
|
||||
@@ -173,17 +151,17 @@ public:
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
Group* group = bot->GetGroup();
|
||||
if (!group)
|
||||
return message;
|
||||
|
||||
bool found = false;
|
||||
//bool isRti = false; //not used, shadowed by the next declaration, line marked for removal.
|
||||
for (std::vector<std::string>::iterator i = rtis.begin(); i != rtis.end(); i++)
|
||||
{
|
||||
std::string const rti = *i;
|
||||
std::string rtiLower = ToLower(rti);
|
||||
bool isRti = msgLower.find(rtiLower) == 0;
|
||||
|
||||
bool isRti = message.find(rti) == 0;
|
||||
if (!isRti)
|
||||
continue;
|
||||
|
||||
@@ -218,7 +196,7 @@ class ClassChatFilter : public ChatFilter
|
||||
public:
|
||||
ClassChatFilter(PlayerbotAI* botAI) : ChatFilter(botAI)
|
||||
{
|
||||
classNames["@dk"] = CLASS_DEATH_KNIGHT;
|
||||
classNames["@death_knight"] = CLASS_DEATH_KNIGHT;
|
||||
classNames["@druid"] = CLASS_DRUID;
|
||||
classNames["@hunter"] = CLASS_HUNTER;
|
||||
classNames["@mage"] = CLASS_MAGE;
|
||||
@@ -233,12 +211,12 @@ public:
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
|
||||
bool found = false;
|
||||
//bool isClass = false; //not used, shadowed by the next declaration, line marked for removal.
|
||||
for (std::map<std::string, uint8>::iterator i = classNames.begin(); i != classNames.end(); i++)
|
||||
{
|
||||
bool isClass = msgLower.find(ToLower(i->first)) == 0;
|
||||
bool isClass = message.find(i->first) == 0;
|
||||
if (isClass && bot->getClass() != i->second)
|
||||
return "";
|
||||
|
||||
@@ -265,321 +243,30 @@ public:
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
if (msgLower.find("@group") == 0)
|
||||
|
||||
if (message.find("@group") == 0)
|
||||
{
|
||||
size_t spacePos = message.find(" ");
|
||||
if (spacePos == std::string::npos)
|
||||
return message;
|
||||
|
||||
std::string pnum = message.substr(6, spacePos - 6);
|
||||
std::string actualMessage = message.substr(spacePos + 1);
|
||||
|
||||
std::set<uint32> targets;
|
||||
std::istringstream ss(pnum);
|
||||
std::string token;
|
||||
|
||||
while (std::getline(ss, token, ','))
|
||||
std::string const pnum = message.substr(6, message.find(" "));
|
||||
uint32 from = atoi(pnum.c_str());
|
||||
uint32 to = from;
|
||||
if (pnum.find("-") != std::string::npos)
|
||||
{
|
||||
size_t dashPos = token.find("-");
|
||||
if (dashPos != std::string::npos)
|
||||
{
|
||||
uint32 from = atoi(token.substr(0, dashPos).c_str());
|
||||
uint32 to = atoi(token.substr(dashPos + 1).c_str());
|
||||
if (from > to) std::swap(from, to);
|
||||
for (uint32 i = from; i <= to; ++i)
|
||||
targets.insert(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 index = atoi(token.c_str());
|
||||
targets.insert(index);
|
||||
}
|
||||
from = atoi(pnum.substr(pnum.find("@") + 1, pnum.find("-")).c_str());
|
||||
to = atoi(pnum.substr(pnum.find("-") + 1, pnum.find(" ")).c_str());
|
||||
}
|
||||
|
||||
if (!bot->GetGroup())
|
||||
return message;
|
||||
|
||||
uint32 sg = bot->GetSubGroup() + 1;
|
||||
if (targets.find(sg) != targets.end())
|
||||
return ChatFilter::Filter(actualMessage);
|
||||
if (sg >= from && sg <= to)
|
||||
return ChatFilter::Filter(message);
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
};
|
||||
|
||||
class SpecChatFilter : public ChatFilter
|
||||
{
|
||||
public:
|
||||
SpecChatFilter(PlayerbotAI* botAI) : ChatFilter(botAI)
|
||||
{
|
||||
// Map (class, specTab) to spec+class string
|
||||
specTabNames[{CLASS_PALADIN, 0}] = "hpal";
|
||||
specTabNames[{CLASS_PALADIN, 1}] = "ppal";
|
||||
specTabNames[{CLASS_PALADIN, 2}] = "rpal";
|
||||
specTabNames[{CLASS_PRIEST, 0}] = "disc";
|
||||
specTabNames[{CLASS_PRIEST, 1}] = "hpr";
|
||||
specTabNames[{CLASS_PRIEST, 2}] = "spr";
|
||||
specTabNames[{CLASS_MAGE, 0}] = "arc";
|
||||
specTabNames[{CLASS_MAGE, 1}] = "frost";
|
||||
specTabNames[{CLASS_MAGE, 2}] = "fire";
|
||||
specTabNames[{CLASS_WARRIOR, 0}] = "arms";
|
||||
specTabNames[{CLASS_WARRIOR, 1}] = "fury";
|
||||
specTabNames[{CLASS_WARRIOR, 2}] = "pwar";
|
||||
specTabNames[{CLASS_WARLOCK, 0}] = "affl";
|
||||
specTabNames[{CLASS_WARLOCK, 1}] = "demo";
|
||||
specTabNames[{CLASS_WARLOCK, 2}] = "dest";
|
||||
specTabNames[{CLASS_SHAMAN, 0}] = "ele";
|
||||
specTabNames[{CLASS_SHAMAN, 1}] = "enh";
|
||||
specTabNames[{CLASS_SHAMAN, 2}] = "rsha";
|
||||
specTabNames[{CLASS_DRUID, 0}] = "bal";
|
||||
// See below for feral druid
|
||||
specTabNames[{CLASS_DRUID, 2}] = "rdru";
|
||||
specTabNames[{CLASS_HUNTER, 0}] = "bmh";
|
||||
specTabNames[{CLASS_HUNTER, 1}] = "mmh";
|
||||
specTabNames[{CLASS_HUNTER, 2}] = "svh";
|
||||
specTabNames[{CLASS_ROGUE, 0}] = "mut";
|
||||
specTabNames[{CLASS_ROGUE, 1}] = "comb";
|
||||
specTabNames[{CLASS_ROGUE, 2}] = "sub";
|
||||
// See below for blood death knight
|
||||
specTabNames[{CLASS_DEATH_KNIGHT, 1}] = "fdk";
|
||||
specTabNames[{CLASS_DEATH_KNIGHT, 2}] = "udk";
|
||||
}
|
||||
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
std::string msgLower = ToLower(message);
|
||||
std::string specPrefix;
|
||||
std::string rest;
|
||||
if (!ParseSpecPrefix(message, specPrefix, rest))
|
||||
{
|
||||
return message;
|
||||
}
|
||||
|
||||
Player* bot = botAI->GetBot();
|
||||
if (!MatchesSpec(bot, specPrefix))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string result = ChatFilter::Filter(rest);
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
std::map<std::pair<uint8, int>, std::string> specTabNames;
|
||||
|
||||
bool ParseSpecPrefix(const std::string& message, std::string& specPrefix, std::string& rest)
|
||||
{
|
||||
std::string msgLower = ToLower(message);
|
||||
for (const auto& entry : specTabNames)
|
||||
{
|
||||
std::string prefix = "@" + entry.second;
|
||||
if (msgLower.find(ToLower(prefix)) == 0)
|
||||
{
|
||||
specPrefix = entry.second;
|
||||
size_t spacePos = message.find(' ');
|
||||
rest = (spacePos != std::string::npos) ? message.substr(spacePos + 1) : "";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MatchesSpec(Player* bot, const std::string& specPrefix)
|
||||
{
|
||||
uint8 cls = bot->getClass();
|
||||
int specTab = AiFactory::GetPlayerSpecTab(bot);
|
||||
std::string botSpecClass;
|
||||
// For druids, specTab==1 is always feral; distinguish bear/cat at runtime by role
|
||||
if (cls == CLASS_DRUID && specTab == 1)
|
||||
{
|
||||
botSpecClass = botAI->IsTank(bot) ? "bear" : "cat";
|
||||
}
|
||||
// For death knights, specTab==0 is always blood; distinguish tank/dps at runtime by role
|
||||
else if (cls == CLASS_DEATH_KNIGHT && specTab == 0)
|
||||
{
|
||||
botSpecClass = botAI->IsTank(bot) ? "bdkt" : "bdkd";
|
||||
}
|
||||
else
|
||||
{
|
||||
auto it = specTabNames.find({cls, specTab});
|
||||
if (it != specTabNames.end())
|
||||
botSpecClass = it->second;
|
||||
}
|
||||
return ToLower(botSpecClass) == ToLower(specPrefix);
|
||||
}
|
||||
};
|
||||
|
||||
class AuraChatFilter : public ChatFilter
|
||||
{
|
||||
public:
|
||||
AuraChatFilter(PlayerbotAI* botAI) : ChatFilter(botAI) {}
|
||||
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
const std::string auraPrefix = "@aura";
|
||||
const std::string noAuraPrefix = "@noaura";
|
||||
size_t prefixLen = 0;
|
||||
bool isNoAura = false;
|
||||
if (msgLower.find(auraPrefix) == 0)
|
||||
{
|
||||
prefixLen = auraPrefix.length();
|
||||
isNoAura = false;
|
||||
}
|
||||
else if (msgLower.find(noAuraPrefix) == 0)
|
||||
{
|
||||
prefixLen = noAuraPrefix.length();
|
||||
isNoAura = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return message;
|
||||
}
|
||||
|
||||
// Trim any leading spaces after @aura or @noaura (can use space between prefix and spell ID if desired, but not required)
|
||||
std::string auraIdOrName = message.substr(prefixLen);
|
||||
auraIdOrName.erase(0, auraIdOrName.find_first_not_of(' '));
|
||||
if (auraIdOrName.empty())
|
||||
{
|
||||
return message;
|
||||
}
|
||||
|
||||
uint32 auraId = 0;
|
||||
size_t spacePos = auraIdOrName.find(' ');
|
||||
std::string idStr = (spacePos != std::string::npos) ? auraIdOrName.substr(0, spacePos) : auraIdOrName;
|
||||
std::string rest = (spacePos != std::string::npos) ? auraIdOrName.substr(spacePos + 1) : "";
|
||||
if (!idStr.empty())
|
||||
{
|
||||
bool isNumeric = std::all_of(idStr.begin(), idStr.end(), ::isdigit);
|
||||
if (isNumeric)
|
||||
{
|
||||
auraId = atoi(idStr.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
if (auraId == 0)
|
||||
return message;
|
||||
|
||||
bool hasAura = bot->HasAura(auraId);
|
||||
bool match = isNoAura ? !hasAura : hasAura;
|
||||
std::string result = match ? ChatFilter::Filter(rest) : "";
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
class AggroByChatFilter : public ChatFilter
|
||||
{
|
||||
public:
|
||||
AggroByChatFilter(PlayerbotAI* botAI) : ChatFilter(botAI) {}
|
||||
|
||||
std::string const Filter(std::string& message) override
|
||||
{
|
||||
Player* bot = botAI->GetBot();
|
||||
std::string msgLower = ToLower(message);
|
||||
const std::string prefix = "@aggroby";
|
||||
size_t prefixLen = prefix.length();
|
||||
if (msgLower.find(prefix) != 0)
|
||||
{
|
||||
return message;
|
||||
}
|
||||
|
||||
// Trim any leading spaces after @aggroby (can use space between prefix and entry ID/creature name if desired, but not required)
|
||||
std::string enemyStr = message.substr(prefixLen);
|
||||
enemyStr.erase(0, enemyStr.find_first_not_of(' '));
|
||||
if (enemyStr.empty())
|
||||
{
|
||||
return message;
|
||||
}
|
||||
|
||||
// If creature name is more than one word, it must be enclosed in quotes, e.g. @aggroby "Scarlet Commander Mograine" flee
|
||||
std::string rest = "";
|
||||
std::string enemyName = "";
|
||||
bool isName = false;
|
||||
uint32 entryId = 0;
|
||||
|
||||
if (enemyStr[0] == '"')
|
||||
{
|
||||
size_t endQuote = enemyStr.find('"', 1);
|
||||
if (endQuote != std::string::npos)
|
||||
{
|
||||
enemyName = enemyStr.substr(1, endQuote - 1);
|
||||
isName = true;
|
||||
size_t spacePos = enemyStr.find(' ', endQuote + 1);
|
||||
if (spacePos != std::string::npos)
|
||||
{
|
||||
rest = enemyStr.substr(spacePos + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
rest = "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
enemyName = enemyStr.substr(1);
|
||||
isName = true;
|
||||
rest = "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t splitPos = enemyStr.find_first_of(" ");
|
||||
std::string idOrName = (splitPos != std::string::npos) ? enemyStr.substr(0, splitPos) : enemyStr;
|
||||
if (splitPos != std::string::npos)
|
||||
{
|
||||
rest = enemyStr.substr(splitPos + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
rest = "";
|
||||
}
|
||||
if (!idOrName.empty())
|
||||
{
|
||||
bool isNumeric = std::all_of(idOrName.begin(), idOrName.end(), ::isdigit);
|
||||
if (isNumeric)
|
||||
{
|
||||
entryId = atoi(idOrName.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
enemyName = idOrName;
|
||||
isName = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const float radius = 100.0f;
|
||||
GuidVector npcs = botAI->GetAiObjectContext()->GetValue<GuidVector>("nearest npcs")->Get();
|
||||
bool match = false;
|
||||
for (const auto& guid : npcs)
|
||||
{
|
||||
Creature* c = botAI->GetCreature(guid);
|
||||
if (!c)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool nameMatch = isName && ToLower(c->GetName()) == ToLower(enemyName);
|
||||
bool idMatch = (entryId != 0) && c->GetEntry() == entryId;
|
||||
if ((nameMatch || idMatch) && c->GetDistance2d(bot) <= radius)
|
||||
{
|
||||
Unit* victim = c->GetVictim();
|
||||
if (victim && victim->GetGUID() == bot->GetGUID())
|
||||
{
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::string result = match ? ChatFilter::Filter(rest) : "";
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
CompositeChatFilter::CompositeChatFilter(PlayerbotAI* botAI) : ChatFilter(botAI)
|
||||
{
|
||||
filters.push_back(new StrategyChatFilter(botAI));
|
||||
@@ -588,9 +275,6 @@ CompositeChatFilter::CompositeChatFilter(PlayerbotAI* botAI) : ChatFilter(botAI)
|
||||
filters.push_back(new CombatTypeChatFilter(botAI));
|
||||
filters.push_back(new LevelChatFilter(botAI));
|
||||
filters.push_back(new SubGroupChatFilter(botAI));
|
||||
filters.push_back(new SpecChatFilter(botAI));
|
||||
filters.push_back(new AuraChatFilter(botAI));
|
||||
filters.push_back(new AggroByChatFilter(botAI));
|
||||
}
|
||||
|
||||
CompositeChatFilter::~CompositeChatFilter()
|
||||
@@ -601,11 +285,14 @@ CompositeChatFilter::~CompositeChatFilter()
|
||||
|
||||
std::string const CompositeChatFilter::Filter(std::string& message)
|
||||
{
|
||||
for (auto* filter : filters)
|
||||
for (uint32 j = 0; j < filters.size(); ++j)
|
||||
{
|
||||
message = filter->Filter(message);
|
||||
if (message.empty())
|
||||
break;
|
||||
for (std::vector<ChatFilter*>::iterator i = filters.begin(); i != filters.end(); i++)
|
||||
{
|
||||
message = (*i)->Filter(message);
|
||||
if (message.empty())
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return message;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_CHATFILTER_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "ChatHelper.h"
|
||||
@@ -308,25 +308,25 @@ ItemIds ChatHelper::parseItems(std::string const text)
|
||||
ItemWithRandomProperty ChatHelper::parseItemWithRandomProperty(std::string const text)
|
||||
{
|
||||
ItemWithRandomProperty res;
|
||||
|
||||
|
||||
size_t itemStart = text.find("Hitem:");
|
||||
if (itemStart == std::string::npos)
|
||||
return res;
|
||||
|
||||
|
||||
itemStart += 6;
|
||||
if (itemStart >= text.length())
|
||||
return res;
|
||||
|
||||
|
||||
size_t colonPos = text.find(':', itemStart);
|
||||
if (colonPos == std::string::npos)
|
||||
return res;
|
||||
|
||||
|
||||
std::string itemIdStr = text.substr(itemStart, colonPos - itemStart);
|
||||
res.itemId = atoi(itemIdStr.c_str());
|
||||
|
||||
|
||||
std::vector<std::string> params;
|
||||
size_t currentPos = colonPos + 1;
|
||||
|
||||
|
||||
while (currentPos < text.length()) {
|
||||
size_t nextColon = text.find(':', currentPos);
|
||||
if (nextColon == std::string::npos) {
|
||||
@@ -336,15 +336,15 @@ ItemWithRandomProperty ChatHelper::parseItemWithRandomProperty(std::string const
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
params.push_back(text.substr(currentPos, nextColon - currentPos));
|
||||
currentPos = nextColon + 1;
|
||||
}
|
||||
|
||||
|
||||
if (params.size() >= 6) {
|
||||
res.randomPropertyId = atoi(params[5].c_str());
|
||||
}
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -364,7 +364,7 @@ std::string const ChatHelper::FormatQuest(Quest const* quest)
|
||||
|
||||
if (questTitle.empty())
|
||||
questTitle = quest->GetTitle();
|
||||
|
||||
|
||||
out << "|cFFFFFF00|Hquest:" << quest->GetQuestId() << ':' << quest->GetQuestLevel() << "|h[" << questTitle << "]|h|r";
|
||||
return out.str();
|
||||
}
|
||||
@@ -432,7 +432,7 @@ std::string const ChatHelper::FormatItem(ItemTemplate const* proto, uint32 count
|
||||
|
||||
if (locale && locale->Name.size() > sWorld->GetDefaultDbcLocale())
|
||||
itemName = locale->Name[sWorld->GetDefaultDbcLocale()];
|
||||
|
||||
|
||||
if (itemName.empty())
|
||||
itemName = proto->Name1;
|
||||
|
||||
@@ -677,7 +677,7 @@ std::set<uint32> extractGeneric(std::string_view text, std::string_view prefix)
|
||||
std::string_view number_str = text_view.substr(pos, end_pos - pos);
|
||||
|
||||
uint32 number = 0;
|
||||
|
||||
|
||||
auto [ptr, ec] = std::from_chars(number_str.data(), number_str.data() + number_str.size(), number);
|
||||
|
||||
if (ec == std::errc())
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_CHATHELPER_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "FleeManager.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_FLEEMANAGER_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "GuildTaskMgr.h"
|
||||
@@ -590,7 +590,7 @@ uint32 GuildTaskMgr::GetTaskValue(uint32 owner, uint32 guildId, std::string cons
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uint32 value = 0;
|
||||
|
||||
PlayerbotsDatabasePreparedStatement* stmt =
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_GUILDTASKMGR_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "Helpers.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_HELPERS_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_LAZYCALCULATEDVALUE_H
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "LootObjectStack.h"
|
||||
|
||||
#include "LootMgr.h"
|
||||
#include "Object.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "Playerbots.h"
|
||||
#include "Unit.h"
|
||||
|
||||
@@ -289,7 +287,7 @@ bool LootObject::IsLootPossible(Player* bot)
|
||||
if (reqItem && !bot->HasItemCount(reqItem, 1))
|
||||
return false;
|
||||
|
||||
if (abs(worldObj->GetPositionZ() - bot->GetPositionZ()) > INTERACTION_DISTANCE - 2.0f)
|
||||
if (abs(worldObj->GetPositionZ() - bot->GetPositionZ()) > INTERACTION_DISTANCE -2.0f)
|
||||
return false;
|
||||
|
||||
Creature* creature = botAI->GetCreature(guid);
|
||||
@@ -299,10 +297,9 @@ bool LootObject::IsLootPossible(Player* bot)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent bot from running to chests that are unlootable (e.g. Gunship Armory before completing the event) or on
|
||||
// respawn time
|
||||
// Prevent bot from running to chests that are unlootable (e.g. Gunship Armory before completing the event)
|
||||
GameObject* go = botAI->GetGameObject(guid);
|
||||
if (go && (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND | GO_FLAG_NOT_SELECTABLE) || !go->isSpawned()))
|
||||
if (go && go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND | GO_FLAG_NOT_SELECTABLE))
|
||||
return false;
|
||||
|
||||
if (skillId == SKILL_NONE)
|
||||
@@ -320,17 +317,29 @@ bool LootObject::IsLootPossible(Player* bot)
|
||||
uint32 skillValue = uint32(bot->GetSkillValue(skillId));
|
||||
if (reqSkillValue > skillValue)
|
||||
return false;
|
||||
|
||||
if (skillId == SKILL_MINING && !bot->HasItemCount(756, 1) && !bot->HasItemCount(778, 1) &&
|
||||
!bot->HasItemCount(1819, 1) && !bot->HasItemCount(1893, 1) && !bot->HasItemCount(1959, 1) &&
|
||||
!bot->HasItemCount(2901, 1) && !bot->HasItemCount(9465, 1) && !bot->HasItemCount(20723, 1) &&
|
||||
!bot->HasItemCount(40772, 1) && !bot->HasItemCount(40892, 1) && !bot->HasItemCount(40893, 1))
|
||||
|
||||
if (skillId == SKILL_MINING &&
|
||||
!bot->HasItemCount(756, 1) &&
|
||||
!bot->HasItemCount(778, 1) &&
|
||||
!bot->HasItemCount(1819, 1) &&
|
||||
!bot->HasItemCount(1893, 1) &&
|
||||
!bot->HasItemCount(1959, 1) &&
|
||||
!bot->HasItemCount(2901, 1) &&
|
||||
!bot->HasItemCount(9465, 1) &&
|
||||
!bot->HasItemCount(20723, 1) &&
|
||||
!bot->HasItemCount(40772, 1) &&
|
||||
!bot->HasItemCount(40892, 1) &&
|
||||
!bot->HasItemCount(40893, 1))
|
||||
{
|
||||
return false; // Bot is missing a mining pick
|
||||
}
|
||||
|
||||
if (skillId == SKILL_SKINNING && !bot->HasItemCount(7005, 1) && !bot->HasItemCount(40772, 1) &&
|
||||
!bot->HasItemCount(40893, 1) && !bot->HasItemCount(12709, 1) && !bot->HasItemCount(19901, 1))
|
||||
|
||||
if (skillId == SKILL_SKINNING &&
|
||||
!bot->HasItemCount(7005, 1) &&
|
||||
!bot->HasItemCount(40772, 1) &&
|
||||
!bot->HasItemCount(40893, 1) &&
|
||||
!bot->HasItemCount(12709, 1) &&
|
||||
!bot->HasItemCount(19901, 1))
|
||||
{
|
||||
return false; // Bot is missing a skinning knife
|
||||
}
|
||||
@@ -367,45 +376,42 @@ void LootObjectStack::Clear() { availableLoot.clear(); }
|
||||
|
||||
bool LootObjectStack::CanLoot(float maxDistance)
|
||||
{
|
||||
LootObject nearest = GetNearest(maxDistance);
|
||||
return !nearest.IsEmpty();
|
||||
std::vector<LootObject> ordered = OrderByDistance(maxDistance);
|
||||
return !ordered.empty();
|
||||
}
|
||||
|
||||
LootObject LootObjectStack::GetLoot(float maxDistance)
|
||||
{
|
||||
LootObject nearest = GetNearest(maxDistance);
|
||||
return nearest.IsEmpty() ? LootObject() : nearest;
|
||||
std::vector<LootObject> ordered = OrderByDistance(maxDistance);
|
||||
return ordered.empty() ? LootObject() : *ordered.begin();
|
||||
}
|
||||
|
||||
LootObject LootObjectStack::GetNearest(float maxDistance)
|
||||
std::vector<LootObject> LootObjectStack::OrderByDistance(float maxDistance)
|
||||
{
|
||||
availableLoot.shrink(time(nullptr) - 30);
|
||||
|
||||
LootObject nearest;
|
||||
float nearestDistance = std::numeric_limits<float>::max();
|
||||
|
||||
std::map<float, LootObject> sortedMap;
|
||||
LootTargetList safeCopy(availableLoot);
|
||||
for (LootTargetList::iterator i = safeCopy.begin(); i != safeCopy.end(); i++)
|
||||
{
|
||||
ObjectGuid guid = i->guid;
|
||||
|
||||
WorldObject* worldObj = ObjectAccessor::GetWorldObject(*bot, guid);
|
||||
if (!worldObj)
|
||||
LootObject lootObject(bot, guid);
|
||||
if (!lootObject.IsLootPossible(bot)) // Ensure loot object is valid
|
||||
continue;
|
||||
|
||||
WorldObject* worldObj = lootObject.GetWorldObject(bot);
|
||||
if (!worldObj) // Prevent null pointer dereference
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
float distance = bot->GetDistance(worldObj);
|
||||
|
||||
if (distance >= nearestDistance || (maxDistance && distance > maxDistance))
|
||||
continue;
|
||||
|
||||
LootObject lootObject(bot, guid);
|
||||
|
||||
if (!lootObject.IsLootPossible(bot))
|
||||
continue;
|
||||
|
||||
nearestDistance = distance;
|
||||
nearest = lootObject;
|
||||
if (!maxDistance || distance <= maxDistance)
|
||||
sortedMap[distance] = lootObject;
|
||||
}
|
||||
|
||||
return nearest;
|
||||
std::vector<LootObject> result;
|
||||
for (auto& [_, lootObject] : sortedMap)
|
||||
result.push_back(lootObject);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_LOOTOBJECTSTACK_H
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
LootObject GetLoot(float maxDistance = 0);
|
||||
|
||||
private:
|
||||
LootObject GetNearest(float maxDistance = 0);
|
||||
std::vector<LootObject> OrderByDistance(float maxDistance = 0);
|
||||
|
||||
Player* bot;
|
||||
LootTargetList availableLoot;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PerformanceMonitor.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PERFORMANCEMONITOR_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlaceholderHelper.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLACEHOLDERHELPER_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotAI.h"
|
||||
@@ -212,8 +212,7 @@ PlayerbotAI::PlayerbotAI(Player* bot)
|
||||
masterIncomingPacketHandlers.AddHandler(CMSG_PUSHQUESTTOPARTY, "quest share");
|
||||
botOutgoingPacketHandlers.AddHandler(SMSG_QUESTUPDATE_COMPLETE, "quest update complete");
|
||||
botOutgoingPacketHandlers.AddHandler(SMSG_QUESTUPDATE_ADD_KILL, "quest update add kill");
|
||||
// SMSG_QUESTUPDATE_ADD_ITEM no longer used
|
||||
// botOutgoingPacketHandlers.AddHandler(SMSG_QUESTUPDATE_ADD_ITEM, "quest update add item");
|
||||
// botOutgoingPacketHandlers.AddHandler(SMSG_QUESTUPDATE_ADD_ITEM, "quest update add item"); // SMSG_QUESTUPDATE_ADD_ITEM no longer used
|
||||
botOutgoingPacketHandlers.AddHandler(SMSG_QUEST_CONFIRM_ACCEPT, "confirm quest");
|
||||
}
|
||||
|
||||
@@ -722,8 +721,6 @@ void PlayerbotAI::HandleTeleportAck()
|
||||
// SetNextCheckDelay(urand(2000, 5000));
|
||||
if (sPlayerbotAIConfig->applyInstanceStrategies)
|
||||
ApplyInstanceStrategies(bot->GetMapId(), true);
|
||||
if (sPlayerbotAIConfig->restrictHealerDPS)
|
||||
EvaluateHealerDpsStrategy();
|
||||
Reset(true);
|
||||
}
|
||||
|
||||
@@ -1052,9 +1049,6 @@ void PlayerbotAI::HandleBotOutgoingPacket(WorldPacket const& packet)
|
||||
return;
|
||||
}
|
||||
|
||||
if (chanName == "World")
|
||||
return;
|
||||
|
||||
// do not reply to self but always try to reply to real player
|
||||
if (guid1 != bot->GetGUID())
|
||||
{
|
||||
@@ -1297,6 +1291,11 @@ void PlayerbotAI::DoNextAction(bool min)
|
||||
return;
|
||||
}
|
||||
|
||||
if (bot->HasUnitState(UNIT_STATE_IN_FLIGHT))
|
||||
{
|
||||
SetNextCheckDelay(sPlayerbotAIConfig->passiveDelay);
|
||||
return;
|
||||
}
|
||||
|
||||
// Change engine if just died
|
||||
bool isBotAlive = bot->IsAlive();
|
||||
@@ -1426,8 +1425,8 @@ void PlayerbotAI::DoNextAction(bool min)
|
||||
master = newMaster;
|
||||
botAI->SetMaster(newMaster);
|
||||
botAI->ResetStrategies();
|
||||
|
||||
if (!bot->InBattleground())
|
||||
|
||||
if (!bot->InBattleground())
|
||||
{
|
||||
botAI->ChangeStrategy("+follow", BOT_STATE_NON_COMBAT);
|
||||
|
||||
@@ -1438,7 +1437,7 @@ void PlayerbotAI::DoNextAction(bool min)
|
||||
}
|
||||
else
|
||||
{
|
||||
// we're in a battleground, stay with the pack and focus on objective
|
||||
// we're in a battleground, stay with the pack and focus on objective
|
||||
botAI->ChangeStrategy("-follow", BOT_STATE_NON_COMBAT);
|
||||
}
|
||||
}
|
||||
@@ -1513,22 +1512,19 @@ void PlayerbotAI::ApplyInstanceStrategies(uint32 mapId, bool tellMaster)
|
||||
switch (mapId)
|
||||
{
|
||||
case 249:
|
||||
strategyName = "onyxia"; // Onyxia's Lair
|
||||
strategyName = "onyxia";
|
||||
break;
|
||||
case 409:
|
||||
strategyName = "mc"; // Molten Core
|
||||
strategyName = "mc";
|
||||
break;
|
||||
case 469:
|
||||
strategyName = "bwl"; // Blackwing Lair
|
||||
strategyName = "bwl";
|
||||
break;
|
||||
case 509:
|
||||
strategyName = "aq20"; // Ruins of Ahn'Qiraj
|
||||
break;
|
||||
case 532:
|
||||
strategyName = "karazhan"; // Karazhan
|
||||
strategyName = "aq20";
|
||||
break;
|
||||
case 533:
|
||||
strategyName = "naxx"; // Naxxramas
|
||||
strategyName = "naxx";
|
||||
break;
|
||||
case 574:
|
||||
strategyName = "wotlk-uk"; // Utgarde Keep
|
||||
@@ -1769,7 +1765,7 @@ bool PlayerbotAI::IsRangedDps(Player* player, bool bySpec) { return IsRanged(pla
|
||||
|
||||
bool PlayerbotAI::IsHealAssistantOfIndex(Player* player, int index)
|
||||
{
|
||||
Group* group = player->GetGroup();
|
||||
Group* group = bot->GetGroup();
|
||||
if (!group)
|
||||
{
|
||||
return false;
|
||||
@@ -1781,11 +1777,6 @@ bool PlayerbotAI::IsHealAssistantOfIndex(Player* player, int index)
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsHeal(member)) // Check if the member is a healer
|
||||
{
|
||||
bool isAssistant = group->IsAssistant(member->GetGUID());
|
||||
@@ -1805,7 +1796,7 @@ bool PlayerbotAI::IsHealAssistantOfIndex(Player* player, int index)
|
||||
|
||||
bool PlayerbotAI::IsRangedDpsAssistantOfIndex(Player* player, int index)
|
||||
{
|
||||
Group* group = player->GetGroup();
|
||||
Group* group = bot->GetGroup();
|
||||
if (!group)
|
||||
{
|
||||
return false;
|
||||
@@ -1817,11 +1808,6 @@ bool PlayerbotAI::IsRangedDpsAssistantOfIndex(Player* player, int index)
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsRangedDps(member)) // Check if the member is a ranged DPS
|
||||
{
|
||||
bool isAssistant = group->IsAssistant(member->GetGUID());
|
||||
@@ -1854,35 +1840,6 @@ bool PlayerbotAI::HasAggro(Unit* unit)
|
||||
return false;
|
||||
}
|
||||
|
||||
int32 PlayerbotAI::GetAssistTankIndex(Player* player)
|
||||
{
|
||||
Group* group = player->GetGroup();
|
||||
if (!group)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int counter = 0;
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player == member)
|
||||
{
|
||||
return counter;
|
||||
}
|
||||
if (IsTank(member, true) && group->IsAssistant(member->GetGUID()))
|
||||
{
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32 PlayerbotAI::GetGroupSlotIndex(Player* player)
|
||||
{
|
||||
Group* group = bot->GetGroup();
|
||||
@@ -1894,12 +1851,6 @@ int32 PlayerbotAI::GetGroupSlotIndex(Player* player)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player == member)
|
||||
{
|
||||
return counter;
|
||||
@@ -1924,12 +1875,6 @@ int32 PlayerbotAI::GetRangedIndex(Player* player)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player == member)
|
||||
{
|
||||
return counter;
|
||||
@@ -1957,12 +1902,6 @@ int32 PlayerbotAI::GetClassIndex(Player* player, uint8 cls)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player == member)
|
||||
{
|
||||
return counter;
|
||||
@@ -1989,12 +1928,6 @@ int32 PlayerbotAI::GetRangedDpsIndex(Player* player)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player == member)
|
||||
{
|
||||
return counter;
|
||||
@@ -2022,12 +1955,6 @@ int32 PlayerbotAI::GetMeleeIndex(Player* player)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player == member)
|
||||
{
|
||||
return counter;
|
||||
@@ -2088,7 +2015,7 @@ bool PlayerbotAI::IsHeal(Player* player, bool bySpec)
|
||||
switch (player->getClass())
|
||||
{
|
||||
case CLASS_PRIEST:
|
||||
if (tab == PRIEST_TAB_DISCIPLINE || tab == PRIEST_TAB_HOLY)
|
||||
if (tab == PRIEST_TAB_DISIPLINE || tab == PRIEST_TAB_HOLY)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -2199,12 +2126,6 @@ bool PlayerbotAI::IsMainTank(Player* player)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsTank(member) && member->IsAlive())
|
||||
{
|
||||
return player->GetGUID() == member->GetGUID();
|
||||
@@ -2213,62 +2134,6 @@ bool PlayerbotAI::IsMainTank(Player* player)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PlayerbotAI::IsBotMainTank(Player* player)
|
||||
{
|
||||
if (!player->GetSession()->IsBot() || !IsTank(player))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IsMainTank(player))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
Group* group = player->GetGroup();
|
||||
if (!group)
|
||||
{
|
||||
return true; // If no group, consider the bot as main tank
|
||||
}
|
||||
|
||||
uint32 botAssistTankIndex = GetAssistTankIndex(player);
|
||||
|
||||
if (botAssistTankIndex == -1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (GroupReference* gref = group->GetFirstMember(); gref; gref = gref->next())
|
||||
{
|
||||
Player* member = gref->GetSource();
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
uint32 memberAssistTankIndex = GetAssistTankIndex(member);
|
||||
|
||||
if (memberAssistTankIndex == -1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (memberAssistTankIndex == botAssistTankIndex && player == member)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (memberAssistTankIndex < botAssistTankIndex && member->GetSession()->IsBot())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32 PlayerbotAI::GetGroupTankNum(Player* player)
|
||||
{
|
||||
Group* group = player->GetGroup();
|
||||
@@ -2280,12 +2145,6 @@ uint32 PlayerbotAI::GetGroupTankNum(Player* player)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsTank(member) && member->IsAlive())
|
||||
{
|
||||
result++;
|
||||
@@ -2298,7 +2157,7 @@ bool PlayerbotAI::IsAssistTank(Player* player) { return IsTank(player) && !IsMai
|
||||
|
||||
bool PlayerbotAI::IsAssistTankOfIndex(Player* player, int index)
|
||||
{
|
||||
Group* group = player->GetGroup();
|
||||
Group* group = bot->GetGroup();
|
||||
if (!group)
|
||||
{
|
||||
return false;
|
||||
@@ -2307,12 +2166,6 @@ bool PlayerbotAI::IsAssistTankOfIndex(Player* player, int index)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (group->IsAssistant(member->GetGUID()) && IsAssistTank(member))
|
||||
{
|
||||
if (index == counter)
|
||||
@@ -2326,12 +2179,6 @@ bool PlayerbotAI::IsAssistTankOfIndex(Player* player, int index)
|
||||
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!group->IsAssistant(member->GetGUID()) && IsAssistTank(member))
|
||||
{
|
||||
if (index == counter)
|
||||
@@ -2511,6 +2358,7 @@ std::string PlayerbotAI::GetLocalizedCreatureName(uint32 entry)
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
std::string PlayerbotAI::GetLocalizedGameObjectName(uint32 entry)
|
||||
{
|
||||
std::string name;
|
||||
@@ -2539,11 +2387,6 @@ std::vector<Player*> PlayerbotAI::GetPlayersInGroup()
|
||||
{
|
||||
Player* member = ref->GetSource();
|
||||
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (GET_PLAYERBOT_AI(member) && !GET_PLAYERBOT_AI(member)->IsRealPlayer())
|
||||
continue;
|
||||
|
||||
@@ -2937,9 +2780,9 @@ bool PlayerbotAI::HasAura(uint32 spellId, Unit const* unit)
|
||||
return unit->HasAura(spellId);
|
||||
// for (uint8 effect = EFFECT_0; effect <= EFFECT_2; effect++)
|
||||
// {
|
||||
// AuraEffect const* aurEff = unit->GetAuraEffect(spellId, effect);
|
||||
// if (IsRealAura(bot, aurEff, unit))
|
||||
// return true;
|
||||
// AuraEffect const* aurEff = unit->GetAuraEffect(spellId, effect);
|
||||
// if (IsRealAura(bot, aurEff, unit))
|
||||
// return true;
|
||||
// }
|
||||
|
||||
// return false;
|
||||
@@ -3094,18 +2937,6 @@ bool PlayerbotAI::CanCastSpell(uint32 spellid, Unit* target, bool checkHasSpell,
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((bot->GetShapeshiftForm() == FORM_FLIGHT || bot->GetShapeshiftForm() == FORM_FLIGHT_EPIC) && !bot->IsInCombat())
|
||||
{
|
||||
if (!sPlayerbotAIConfig->logInGroupOnly || (bot->GetGroup() && HasRealPlayerMaster()))
|
||||
{
|
||||
LOG_DEBUG(
|
||||
"playerbots",
|
||||
"Can cast spell failed. In flight form (not in combat). - target name: {}, spellid: {}, bot name: {}",
|
||||
target->GetName(), spellid, bot->GetName());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32 CastingTime = !spellInfo->IsChanneled() ? spellInfo->CalcCastTime(bot) : spellInfo->GetDuration();
|
||||
// bool interruptOnMove = spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_MOVEMENT;
|
||||
if ((CastingTime || spellInfo->IsAutoRepeatRangedSpell()) && bot->isMoving())
|
||||
@@ -3120,19 +2951,14 @@ bool PlayerbotAI::CanCastSpell(uint32 spellid, Unit* target, bool checkHasSpell,
|
||||
|
||||
if (!itemTarget)
|
||||
{
|
||||
// Exception for Deep Freeze (44572) - allow cast for damage on immune targets (e.g., bosses)
|
||||
if (target->IsImmunedToSpell(spellInfo))
|
||||
{
|
||||
if (spellid != 44572) // Deep Freeze
|
||||
if (!sPlayerbotAIConfig->logInGroupOnly || (bot->GetGroup() && HasRealPlayerMaster()))
|
||||
{
|
||||
if (!sPlayerbotAIConfig->logInGroupOnly || (bot->GetGroup() && HasRealPlayerMaster()))
|
||||
{
|
||||
LOG_DEBUG("playerbots", "target is immuned to spell - target name: {}, spellid: {}, bot name: {}",
|
||||
target->GetName(), spellid, bot->GetName());
|
||||
}
|
||||
return false;
|
||||
LOG_DEBUG("playerbots", "target is immuned to spell - target name: {}, spellid: {}, bot name: {}",
|
||||
target->GetName(), spellid, bot->GetName());
|
||||
}
|
||||
// Otherwise, allow Deep Freeze even if immune
|
||||
return false;
|
||||
}
|
||||
|
||||
if (bot != target && sServerFacade->GetDistance2d(bot, target) > sPlayerbotAIConfig->sightDistance)
|
||||
@@ -3321,17 +3147,11 @@ bool PlayerbotAI::CastSpell(uint32 spellId, Unit* target, Item* itemTarget)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!bot || !bot->GetSession() || bot->GetSession()->isLogingOut())
|
||||
return false;
|
||||
|
||||
if (!target || !target->IsInWorld() || target->IsDuringRemoveFromWorld())
|
||||
if (!target)
|
||||
target = bot;
|
||||
|
||||
Pet* pet = bot->GetPet();
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
|
||||
if (!spellInfo)
|
||||
return false;
|
||||
|
||||
if (pet && pet->HasSpell(spellId))
|
||||
{
|
||||
// List of spell IDs for which we do NOT want to toggle auto-cast or send message
|
||||
@@ -3408,7 +3228,8 @@ bool PlayerbotAI::CastSpell(uint32 spellId, Unit* target, Item* itemTarget)
|
||||
return false;
|
||||
}
|
||||
|
||||
Spell* spell = new Spell(bot, spellInfo, TRIGGERED_NONE);
|
||||
Spell* spell = new Spell(bot, spellInfo, TRIGGERED_NONE);
|
||||
|
||||
SpellCastTargets targets;
|
||||
if (spellInfo->Effects[0].Effect != SPELL_EFFECT_OPEN_LOCK &&
|
||||
(spellInfo->Targets & TARGET_FLAG_ITEM || spellInfo->Targets & TARGET_FLAG_GAMEOBJECT_ITEM))
|
||||
@@ -3496,31 +3317,8 @@ bool PlayerbotAI::CastSpell(uint32 spellId, Unit* target, Item* itemTarget)
|
||||
// if (spellSuccess != SPELL_CAST_OK)
|
||||
// return false;
|
||||
|
||||
|
||||
// check if the actual target is valid, spell system uses targets.GetUnitTarget(), GetItemTarget(), GetGOTarget() internally.
|
||||
Unit* uTarget = targets.GetUnitTarget();
|
||||
if (uTarget && (!uTarget->IsInWorld() || uTarget->IsDuringRemoveFromWorld()))
|
||||
{
|
||||
// fail if the spell has a unit target that is invalid or being removed from the world
|
||||
delete spell;
|
||||
return false;
|
||||
}
|
||||
Item* iTarget = targets.GetItemTarget();
|
||||
if (!iTarget && (spellInfo->Targets & (TARGET_FLAG_ITEM | TARGET_FLAG_GAMEOBJECT_ITEM)))
|
||||
{
|
||||
// fail only if the spell requires a specific item or GO item to cast but the bot does not have one
|
||||
delete spell;
|
||||
return false;
|
||||
}
|
||||
GameObject* gTarget = targets.GetGOTarget();
|
||||
if (gTarget && !gTarget->isSpawned())
|
||||
{
|
||||
// fail if the spell has a GO target that is not spawned or does not exist
|
||||
delete spell;
|
||||
return false;
|
||||
}
|
||||
|
||||
SpellCastResult result = spell->prepare(&targets);
|
||||
|
||||
if (result != SPELL_CAST_OK)
|
||||
{
|
||||
// if (!sPlayerbotAIConfig->logInGroupOnly || (bot->GetGroup() && HasRealPlayerMaster())) {
|
||||
@@ -3532,14 +3330,13 @@ bool PlayerbotAI::CastSpell(uint32 spellId, Unit* target, Item* itemTarget)
|
||||
std::ostringstream out;
|
||||
out << "Spell cast failed - ";
|
||||
out << "Spell ID: " << spellId << " (" << ChatHelper::FormatSpell(spellInfo) << "), ";
|
||||
out << "Error Code: " << static_cast<int>(result) << " (0x" << std::hex << static_cast<int>(result)
|
||||
<< std::dec << "), ";
|
||||
out << "Error Code: " << static_cast<int>(result) << " (0x" << std::hex << static_cast<int>(result) << std::dec << "), ";
|
||||
out << "Bot: " << bot->GetName() << ", ";
|
||||
|
||||
|
||||
// Check spell target type
|
||||
if (targets.GetUnitTarget())
|
||||
{
|
||||
out << "Target: Unit (" << targets.GetUnitTarget()->GetName()
|
||||
out << "Target: Unit (" << targets.GetUnitTarget()->GetName()
|
||||
<< ", Low GUID: " << targets.GetUnitTarget()->GetGUID().GetCounter()
|
||||
<< ", High GUID: " << static_cast<uint32>(targets.GetUnitTarget()->GetGUID().GetHigh()) << "), ";
|
||||
}
|
||||
@@ -3555,7 +3352,7 @@ bool PlayerbotAI::CastSpell(uint32 spellId, Unit* target, Item* itemTarget)
|
||||
out << "Target: Item (Low GUID: " << targets.GetItemTarget()->GetGUID().GetCounter()
|
||||
<< ", High GUID: " << static_cast<uint32>(targets.GetItemTarget()->GetGUID().GetHigh()) << "), ";
|
||||
}
|
||||
|
||||
|
||||
// Check if bot is in trade mode
|
||||
if (bot->GetTradeData())
|
||||
{
|
||||
@@ -3563,7 +3360,7 @@ bool PlayerbotAI::CastSpell(uint32 spellId, Unit* target, Item* itemTarget)
|
||||
Item* tradeItem = bot->GetTradeData()->GetTraderData()->GetItem(TRADE_SLOT_NONTRADED);
|
||||
if (tradeItem)
|
||||
{
|
||||
out << "Trade Item: " << tradeItem->GetEntry()
|
||||
out << "Trade Item: " << tradeItem->GetEntry()
|
||||
<< " (Low GUID: " << tradeItem->GetGUID().GetCounter()
|
||||
<< ", High GUID: " << static_cast<uint32>(tradeItem->GetGUID().GetHigh()) << "), ";
|
||||
}
|
||||
@@ -3576,11 +3373,10 @@ bool PlayerbotAI::CastSpell(uint32 spellId, Unit* target, Item* itemTarget)
|
||||
{
|
||||
out << "Trade Mode: Inactive, ";
|
||||
}
|
||||
|
||||
|
||||
TellMasterNoFacing(out);
|
||||
}
|
||||
|
||||
delete spell;
|
||||
return false;
|
||||
}
|
||||
// if (spellInfo->Effects[0].Effect == SPELL_EFFECT_OPEN_LOCK || spellInfo->Effects[0].Effect ==
|
||||
@@ -4516,7 +4312,7 @@ bool PlayerbotAI::AllowActive(ActivityType activityType)
|
||||
if (!player || !player->IsInWorld())
|
||||
continue;
|
||||
|
||||
Player* connectedPlayer = ObjectAccessor::FindPlayer(player->GetGUID());
|
||||
Player* connectedPlayer = ObjectAccessor::FindPlayer(player->GetGUID());
|
||||
if (!connectedPlayer)
|
||||
continue;
|
||||
|
||||
@@ -4598,16 +4394,16 @@ uint32 PlayerbotAI::AutoScaleActivity(uint32 mod)
|
||||
// Perfrom binary decision if ceiling <= floor: Either all bots are active or none are
|
||||
return (maxDiff > diffLimitCeiling) ? 0 : mod;
|
||||
}
|
||||
|
||||
|
||||
if (maxDiff > diffLimitCeiling)
|
||||
return 0;
|
||||
|
||||
|
||||
if (maxDiff <= diffLimitFloor)
|
||||
return mod;
|
||||
|
||||
|
||||
// Calculate lag progress from floor to ceiling (0 to 1)
|
||||
double lagProgress = (maxDiff - diffLimitFloor) / (double)(diffLimitCeiling - diffLimitFloor);
|
||||
|
||||
|
||||
// Apply the percentage of active bots (the complement of lag progress) to the mod value
|
||||
return static_cast<uint32>(mod * (1 - lagProgress));
|
||||
}
|
||||
@@ -4634,51 +4430,12 @@ void PlayerbotAI::RemoveShapeshift()
|
||||
// RemoveAura("tree of life");
|
||||
}
|
||||
|
||||
// Mirrors Blizzard’s GetAverageItemLevel rules :
|
||||
// https://wowpedia.fandom.com/wiki/API_GetAverageItemLevel
|
||||
// NOTE : function rewritten as flags "withBags" and "withBank" not used, and _fillGearScoreData sometimes attribute
|
||||
// one-hand/2H Weapon in wrong slots
|
||||
uint32 PlayerbotAI::GetEquipGearScore(Player* player)
|
||||
{
|
||||
constexpr uint8 TOTAL_SLOTS = 17; // every slot except Body & Tabard
|
||||
uint32 sumLevel = 0;
|
||||
|
||||
/* ---------- 0. Detect “ignore off-hand” situations --------- */
|
||||
Item* main = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND);
|
||||
Item* off = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
|
||||
|
||||
bool ignoreOffhand = false; // true → divisor = 16
|
||||
if (main)
|
||||
{
|
||||
bool twoHand = (main->GetTemplate()->InventoryType == INVTYPE_2HWEAPON);
|
||||
if (twoHand && !player->HasAura(SPELL_TITAN_GRIP))
|
||||
ignoreOffhand = true; // classic 2-hander
|
||||
}
|
||||
else if (!off) // both hands empty
|
||||
ignoreOffhand = true;
|
||||
|
||||
/* ---------- 1. Sum up item-levels -------------------------- */
|
||||
for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot)
|
||||
{
|
||||
if (slot == EQUIPMENT_SLOT_BODY || slot == EQUIPMENT_SLOT_TABARD)
|
||||
continue; // Blizzard never counts these
|
||||
|
||||
if (ignoreOffhand && slot == EQUIPMENT_SLOT_OFFHAND)
|
||||
continue; // skip off-hand in 2-H case
|
||||
|
||||
if (Item* it = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
|
||||
sumLevel += it->GetTemplate()->ItemLevel; // missing items add 0
|
||||
}
|
||||
|
||||
/* ---------- 2. Divide by 17 or 16 -------------------------- */
|
||||
const uint8 divisor = ignoreOffhand ? TOTAL_SLOTS - 1 : TOTAL_SLOTS; // 16 or 17
|
||||
return sumLevel / divisor;
|
||||
}
|
||||
|
||||
// NOTE : function rewritten as flags "withBags" and "withBank" not used, and _fillGearScoreData sometimes attribute
|
||||
// one-hand/2H Weapon in wrong slots
|
||||
/*uint32 PlayerbotAI::GetEquipGearScore(Player* player)
|
||||
{
|
||||
// This function aims to calculate the equipped gear score
|
||||
|
||||
|
||||
uint32 sum = 0;
|
||||
uint8 count = EQUIPMENT_SLOT_END - 2; // ignore body and tabard slots
|
||||
uint8 mh_type = 0;
|
||||
@@ -4687,21 +4444,21 @@ uint32 PlayerbotAI::GetEquipGearScore(Player* player)
|
||||
{
|
||||
Item* item =player->GetItemByPos(INVENTORY_SLOT_BAG_0, i);
|
||||
if (item && i != EQUIPMENT_SLOT_BODY && i != EQUIPMENT_SLOT_TABARD)
|
||||
{
|
||||
{
|
||||
ItemTemplate const* proto = item->GetTemplate();
|
||||
sum += proto->ItemLevel;
|
||||
|
||||
|
||||
// If character is not warfury and have 2 hand weapon equipped, main hand will be counted twice
|
||||
if (i == SLOT_MAIN_HAND)
|
||||
mh_type = item->GetTemplate()->InventoryType;
|
||||
if (!player->HasAura(SPELL_TITAN_GRIP) && mh_type == INVTYPE_2HWEAPON && i == SLOT_MAIN_HAND)
|
||||
sum += item->GetTemplate()->ItemLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32 gs = uint32(sum / count);
|
||||
return gs;
|
||||
}*/
|
||||
}
|
||||
|
||||
/*uint32 PlayerbotAI::GetEquipGearScore(Player* player, bool withBags, bool withBank)
|
||||
{
|
||||
@@ -4934,7 +4691,7 @@ void PlayerbotAI::_fillGearScoreData(Player* player, Item* item, std::vector<uin
|
||||
case INVTYPE_SHOULDERS:
|
||||
(*gearScore)[EQUIPMENT_SLOT_SHOULDERS] = std::max((*gearScore)[EQUIPMENT_SLOT_SHOULDERS], level);
|
||||
break;
|
||||
case INVTYPE_BODY: // Shouldn't be considered when calculating average ilevel
|
||||
case INVTYPE_BODY: //Shouldn't be considered when calculating average ilevel
|
||||
(*gearScore)[EQUIPMENT_SLOT_BODY] = std::max((*gearScore)[EQUIPMENT_SLOT_BODY], level);
|
||||
break;
|
||||
case INVTYPE_CHEST:
|
||||
@@ -5292,13 +5049,13 @@ Item* PlayerbotAI::FindAmmo() const
|
||||
}
|
||||
|
||||
// Find Consumable
|
||||
Item* PlayerbotAI::FindConsumable(uint32 itemId) const
|
||||
Item* PlayerbotAI::FindConsumable(uint32 displayId) const
|
||||
{
|
||||
return FindItemInInventory(
|
||||
[itemId](ItemTemplate const* pItemProto) -> bool
|
||||
[displayId](ItemTemplate const* pItemProto) -> bool
|
||||
{
|
||||
return (pItemProto->Class == ITEM_CLASS_CONSUMABLE || pItemProto->Class == ITEM_CLASS_TRADE_GOODS) &&
|
||||
pItemProto->ItemId == itemId;
|
||||
pItemProto->DisplayInfoID == displayId;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -5312,80 +5069,80 @@ Item* PlayerbotAI::FindBandage() const
|
||||
|
||||
Item* PlayerbotAI::FindOpenableItem() const
|
||||
{
|
||||
return FindItemInInventory(
|
||||
[this](ItemTemplate const* itemTemplate) -> bool
|
||||
{
|
||||
return (itemTemplate->Flags & ITEM_FLAG_HAS_LOOT) &&
|
||||
(itemTemplate->LockID == 0 || !this->bot->GetItemByEntry(itemTemplate->ItemId)->IsLocked());
|
||||
});
|
||||
return FindItemInInventory([this](ItemTemplate const* itemTemplate) -> bool
|
||||
{
|
||||
return (itemTemplate->Flags & ITEM_FLAG_HAS_LOOT) &&
|
||||
(itemTemplate->LockID == 0 || !this->bot->GetItemByEntry(itemTemplate->ItemId)->IsLocked());
|
||||
});
|
||||
}
|
||||
|
||||
Item* PlayerbotAI::FindLockedItem() const
|
||||
{
|
||||
return FindItemInInventory(
|
||||
[this](ItemTemplate const* itemTemplate) -> bool
|
||||
return FindItemInInventory([this](ItemTemplate const* itemTemplate) -> bool
|
||||
{
|
||||
if (!this->bot->HasSkill(SKILL_LOCKPICKING)) // Ensure bot has Lockpicking skill
|
||||
return false;
|
||||
|
||||
if (itemTemplate->LockID == 0) // Ensure the item is actually locked
|
||||
return false;
|
||||
|
||||
Item* item = this->bot->GetItemByEntry(itemTemplate->ItemId);
|
||||
if (!item || !item->IsLocked()) // Ensure item instance is locked
|
||||
return false;
|
||||
|
||||
// Check if bot has enough Lockpicking skill
|
||||
LockEntry const* lockInfo = sLockStore.LookupEntry(itemTemplate->LockID);
|
||||
if (!lockInfo)
|
||||
return false;
|
||||
|
||||
for (uint8 j = 0; j < 8; ++j)
|
||||
{
|
||||
if (!this->bot->HasSkill(SKILL_LOCKPICKING)) // Ensure bot has Lockpicking skill
|
||||
return false;
|
||||
|
||||
if (itemTemplate->LockID == 0) // Ensure the item is actually locked
|
||||
return false;
|
||||
|
||||
Item* item = this->bot->GetItemByEntry(itemTemplate->ItemId);
|
||||
if (!item || !item->IsLocked()) // Ensure item instance is locked
|
||||
return false;
|
||||
|
||||
// Check if bot has enough Lockpicking skill
|
||||
LockEntry const* lockInfo = sLockStore.LookupEntry(itemTemplate->LockID);
|
||||
if (!lockInfo)
|
||||
return false;
|
||||
|
||||
for (uint8 j = 0; j < 8; ++j)
|
||||
if (lockInfo->Type[j] == LOCK_KEY_SKILL)
|
||||
{
|
||||
if (lockInfo->Type[j] == LOCK_KEY_SKILL)
|
||||
uint32 skillId = SkillByLockType(LockType(lockInfo->Index[j]));
|
||||
if (skillId == SKILL_LOCKPICKING)
|
||||
{
|
||||
uint32 skillId = SkillByLockType(LockType(lockInfo->Index[j]));
|
||||
if (skillId == SKILL_LOCKPICKING)
|
||||
{
|
||||
uint32 requiredSkill = lockInfo->Skill[j];
|
||||
uint32 botSkill = this->bot->GetSkillValue(SKILL_LOCKPICKING);
|
||||
return botSkill >= requiredSkill;
|
||||
}
|
||||
uint32 requiredSkill = lockInfo->Skill[j];
|
||||
uint32 botSkill = this->bot->GetSkillValue(SKILL_LOCKPICKING);
|
||||
return botSkill >= requiredSkill;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
static const uint32 uPriorizedSharpStoneIds[8] = {ADAMANTITE_SHARPENING_DISPLAYID, FEL_SHARPENING_DISPLAYID,
|
||||
ELEMENTAL_SHARPENING_DISPLAYID, DENSE_SHARPENING_DISPLAYID,
|
||||
SOLID_SHARPENING_DISPLAYID, HEAVY_SHARPENING_DISPLAYID,
|
||||
COARSE_SHARPENING_DISPLAYID, ROUGH_SHARPENING_DISPLAYID};
|
||||
|
||||
static const uint32 uPriorizedWeightStoneIds[7] = {ADAMANTITE_WEIGHTSTONE_DISPLAYID, FEL_WEIGHTSTONE_DISPLAYID,
|
||||
DENSE_WEIGHTSTONE_DISPLAYID, SOLID_WEIGHTSTONE_DISPLAYID,
|
||||
HEAVY_WEIGHTSTONE_DISPLAYID, COARSE_WEIGHTSTONE_DISPLAYID,
|
||||
ROUGH_WEIGHTSTONE_DISPLAYID};
|
||||
|
||||
/**
|
||||
* FindStoneFor()
|
||||
* return Item* Returns sharpening/weight stone item eligible to enchant a bot weapon
|
||||
*
|
||||
* params:weapon Item* the weap<61>n the function should search and return a enchanting item for
|
||||
* return nullptr if no relevant item is found in bot inventory, else return a sharpening or weight
|
||||
* stone based on the weapon subclass
|
||||
*
|
||||
*/
|
||||
Item* PlayerbotAI::FindStoneFor(Item* weapon) const
|
||||
{
|
||||
if (!weapon)
|
||||
return nullptr;
|
||||
|
||||
const ItemTemplate* item_template = weapon->GetTemplate();
|
||||
if (!item_template)
|
||||
return nullptr;
|
||||
|
||||
static const std::vector<uint32_t> uPrioritizedSharpStoneIds = {
|
||||
ADAMANTITE_SHARPENING_STONE, FEL_SHARPENING_STONE, ELEMENTAL_SHARPENING_STONE, DENSE_SHARPENING_STONE,
|
||||
SOLID_SHARPENING_STONE, HEAVY_SHARPENING_STONE, COARSE_SHARPENING_STONE, ROUGH_SHARPENING_STONE
|
||||
};
|
||||
|
||||
static const std::vector<uint32_t> uPrioritizedWeightStoneIds = {
|
||||
ADAMANTITE_WEIGHTSTONE, FEL_WEIGHTSTONE, DENSE_WEIGHTSTONE, SOLID_WEIGHTSTONE,
|
||||
HEAVY_WEIGHTSTONE, COARSE_WEIGHTSTONE, ROUGH_WEIGHTSTONE
|
||||
};
|
||||
|
||||
Item* stone = nullptr;
|
||||
ItemTemplate const* pProto = weapon->GetTemplate();
|
||||
if (pProto && (pProto->SubClass == ITEM_SUBCLASS_WEAPON_SWORD || pProto->SubClass == ITEM_SUBCLASS_WEAPON_SWORD2 ||
|
||||
pProto->SubClass == ITEM_SUBCLASS_WEAPON_AXE || pProto->SubClass == ITEM_SUBCLASS_WEAPON_AXE2 ||
|
||||
pProto->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER || pProto->SubClass == ITEM_SUBCLASS_WEAPON_POLEARM))
|
||||
pProto->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER))
|
||||
{
|
||||
for (uint8 i = 0; i < std::size(uPrioritizedSharpStoneIds); ++i)
|
||||
for (uint8 i = 0; i < std::size(uPriorizedSharpStoneIds); ++i)
|
||||
{
|
||||
stone = FindConsumable(uPrioritizedSharpStoneIds[i]);
|
||||
stone = FindConsumable(uPriorizedSharpStoneIds[i]);
|
||||
if (stone)
|
||||
{
|
||||
return stone;
|
||||
@@ -5393,12 +5150,11 @@ static const std::vector<uint32_t> uPrioritizedWeightStoneIds = {
|
||||
}
|
||||
}
|
||||
else if (pProto &&
|
||||
(pProto->SubClass == ITEM_SUBCLASS_WEAPON_MACE || pProto->SubClass == ITEM_SUBCLASS_WEAPON_MACE2 ||
|
||||
pProto->SubClass == ITEM_SUBCLASS_WEAPON_STAFF || pProto->SubClass == ITEM_SUBCLASS_WEAPON_FIST))
|
||||
(pProto->SubClass == ITEM_SUBCLASS_WEAPON_MACE || pProto->SubClass == ITEM_SUBCLASS_WEAPON_MACE2))
|
||||
{
|
||||
for (uint8 i = 0; i < std::size(uPrioritizedWeightStoneIds); ++i)
|
||||
for (uint8 i = 0; i < std::size(uPriorizedWeightStoneIds); ++i)
|
||||
{
|
||||
stone = FindConsumable(uPrioritizedWeightStoneIds[i]);
|
||||
stone = FindConsumable(uPriorizedWeightStoneIds[i]);
|
||||
if (stone)
|
||||
{
|
||||
return stone;
|
||||
@@ -5411,7 +5167,6 @@ static const std::vector<uint32_t> uPrioritizedWeightStoneIds = {
|
||||
|
||||
Item* PlayerbotAI::FindOilFor(Item* weapon) const
|
||||
{
|
||||
|
||||
if (!weapon)
|
||||
return nullptr;
|
||||
|
||||
@@ -5419,60 +5174,35 @@ Item* PlayerbotAI::FindOilFor(Item* weapon) const
|
||||
if (!item_template)
|
||||
return nullptr;
|
||||
|
||||
static const std::vector<uint32_t> uPrioritizedWizardOilIds = {
|
||||
BRILLIANT_WIZARD_OIL, SUPERIOR_WIZARD_OIL, WIZARD_OIL, LESSER_WIZARD_OIL, MINOR_WIZARD_OIL,
|
||||
BRILLIANT_MANA_OIL, SUPERIOR_MANA_OIL, LESSER_MANA_OIL, MINOR_MANA_OIL};
|
||||
// static const will only get created once whatever the call amout
|
||||
static const std::vector<uint32_t> uPriorizedWizardOilIds = {
|
||||
MINOR_WIZARD_OIL, MINOR_MANA_OIL, LESSER_WIZARD_OIL, LESSER_MANA_OIL, BRILLIANT_WIZARD_OIL,
|
||||
BRILLIANT_MANA_OIL, WIZARD_OIL, SUPERIOR_MANA_OIL, SUPERIOR_WIZARD_OIL};
|
||||
|
||||
static const std::vector<uint32_t> uPrioritizedManaOilIds = {
|
||||
BRILLIANT_MANA_OIL, SUPERIOR_MANA_OIL, LESSER_MANA_OIL, MINOR_MANA_OIL,
|
||||
BRILLIANT_WIZARD_OIL, SUPERIOR_WIZARD_OIL, WIZARD_OIL, LESSER_WIZARD_OIL, MINOR_WIZARD_OIL};
|
||||
// static const will only get created once whatever the call amout
|
||||
static const std::vector<uint32_t> uPriorizedManaOilIds = {
|
||||
MINOR_MANA_OIL, MINOR_WIZARD_OIL, LESSER_MANA_OIL, LESSER_WIZARD_OIL, BRILLIANT_MANA_OIL,
|
||||
BRILLIANT_WIZARD_OIL, SUPERIOR_MANA_OIL, WIZARD_OIL, SUPERIOR_WIZARD_OIL};
|
||||
|
||||
Item* oil = nullptr;
|
||||
int botClass = bot->getClass();
|
||||
int specTab = AiFactory::GetPlayerSpecTab(bot);
|
||||
|
||||
const std::vector<uint32_t>* prioritizedOils = nullptr;
|
||||
switch (botClass)
|
||||
if (item_template->SubClass == ITEM_SUBCLASS_WEAPON_SWORD ||
|
||||
item_template->SubClass == ITEM_SUBCLASS_WEAPON_STAFF || item_template->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER)
|
||||
{
|
||||
case CLASS_PRIEST:
|
||||
prioritizedOils = (specTab == 2) ? &uPrioritizedWizardOilIds : &uPrioritizedManaOilIds;
|
||||
break;
|
||||
case CLASS_MAGE:
|
||||
prioritizedOils = &uPrioritizedWizardOilIds;
|
||||
break;
|
||||
case CLASS_DRUID:
|
||||
if (specTab == 0) // Balance
|
||||
prioritizedOils = &uPrioritizedWizardOilIds;
|
||||
else if (specTab == 1) // Feral
|
||||
prioritizedOils = nullptr;
|
||||
else // Restoration (specTab == 2) or any other/unspecified spec
|
||||
prioritizedOils = &uPrioritizedManaOilIds;
|
||||
break;
|
||||
case CLASS_HUNTER:
|
||||
prioritizedOils = &uPrioritizedManaOilIds;
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
if (specTab == 1) // Protection
|
||||
prioritizedOils = &uPrioritizedWizardOilIds;
|
||||
else if (specTab == 2) // Retribution
|
||||
prioritizedOils = nullptr;
|
||||
else // Holy (specTab == 0) or any other/unspecified spec
|
||||
prioritizedOils = &uPrioritizedManaOilIds;
|
||||
break;
|
||||
default:
|
||||
prioritizedOils = &uPrioritizedManaOilIds;
|
||||
break;
|
||||
}
|
||||
|
||||
if (prioritizedOils)
|
||||
{
|
||||
for (const auto& id : *prioritizedOils)
|
||||
for (const auto& id : uPriorizedWizardOilIds)
|
||||
{
|
||||
oil = FindConsumable(id);
|
||||
if (oil)
|
||||
return oil;
|
||||
}
|
||||
}
|
||||
else if (item_template->SubClass == ITEM_SUBCLASS_WEAPON_MACE ||
|
||||
item_template->SubClass == ITEM_SUBCLASS_WEAPON_MACE2)
|
||||
{
|
||||
for (const auto& id : uPriorizedManaOilIds)
|
||||
{
|
||||
oil = FindConsumable(id);
|
||||
if (oil)
|
||||
{
|
||||
return oil;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6303,35 +6033,6 @@ ChatChannelSource PlayerbotAI::GetChatChannelSource(Player* bot, uint32 type, st
|
||||
return ChatChannelSource::SRC_UNDEFINED;
|
||||
}
|
||||
|
||||
bool PlayerbotAI::CheckLocationDistanceByLevel(Player* player, const WorldLocation& loc, bool fromStartUp)
|
||||
{
|
||||
if (player->GetLevel() > 16)
|
||||
return true;
|
||||
|
||||
float dis = 0.0f;
|
||||
if (fromStartUp)
|
||||
{
|
||||
PlayerInfo const* pInfo = sObjectMgr->GetPlayerInfo(player->getRace(true), player->getClass());
|
||||
if (loc.GetMapId() != pInfo->mapId)
|
||||
return false;
|
||||
dis = loc.GetExactDist(pInfo->positionX, pInfo->positionY, pInfo->positionZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (loc.GetMapId() != player->GetMapId())
|
||||
return false;
|
||||
dis = loc.GetExactDist(player);
|
||||
}
|
||||
|
||||
float bound = 10000.0f;
|
||||
if (player->GetLevel() <= 4)
|
||||
bound = 500.0f;
|
||||
else if (player->GetLevel() <= 10)
|
||||
bound = 2500.0f;
|
||||
|
||||
return dis <= bound;
|
||||
}
|
||||
|
||||
std::vector<const Quest*> PlayerbotAI::GetAllCurrentQuests()
|
||||
{
|
||||
std::vector<const Quest*> result;
|
||||
@@ -6607,27 +6308,17 @@ void PlayerbotAI::AddTimedEvent(std::function<void()> callback, uint32 delayMs)
|
||||
class LambdaEvent final : public BasicEvent
|
||||
{
|
||||
std::function<void()> _cb;
|
||||
|
||||
public:
|
||||
explicit LambdaEvent(std::function<void()> cb) : _cb(std::move(cb)) {}
|
||||
bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
|
||||
{
|
||||
_cb();
|
||||
return true; // remove after execution
|
||||
return true; // remove after execution
|
||||
}
|
||||
};
|
||||
|
||||
// Every Player already owns an EventMap called m_Events
|
||||
bot->m_Events.AddEvent(new LambdaEvent(std::move(callback)), bot->m_Events.CalculateTime(delayMs));
|
||||
}
|
||||
|
||||
void PlayerbotAI::EvaluateHealerDpsStrategy()
|
||||
{
|
||||
if (!IsHeal(bot, true))
|
||||
return;
|
||||
|
||||
if (sPlayerbotAIConfig->IsRestrictedHealerDPSMap(bot->GetMapId()))
|
||||
ChangeStrategy("-healer dps", BOT_STATE_COMBAT);
|
||||
else
|
||||
ChangeStrategy("+healer dps", BOT_STATE_COMBAT);
|
||||
bot->m_Events.AddEvent(
|
||||
new LambdaEvent(std::move(callback)),
|
||||
bot->m_Events.CalculateTime(delayMs));
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERbotAI_H
|
||||
@@ -46,27 +46,27 @@ struct GameObjectData;
|
||||
|
||||
enum StrategyType : uint32;
|
||||
|
||||
enum HealingItemId
|
||||
enum HealingItemDisplayId
|
||||
{
|
||||
HEALTHSTONE = 5512,
|
||||
MAJOR_HEALING_POTION = 13446,
|
||||
WHIPPER_ROOT_TUBER = 11951,
|
||||
NIGHT_DRAGON_BREATH = 11952,
|
||||
LIMITED_INVULNERABILITY_POTION = 3387,
|
||||
GREATER_DREAMLESS_SLEEP_POTION = 22886,
|
||||
SUPERIOR_HEALING_POTION = 3928,
|
||||
CRYSTAL_RESTORE = 11564,
|
||||
DREAMLESS_SLEEP_POTION = 12190,
|
||||
GREATER_HEALING_POTION = 1710,
|
||||
HEALING_POTION = 929,
|
||||
LESSER_HEALING_POTION = 858,
|
||||
DISCOLORED_HEALING_POTION = 3391,
|
||||
MINOR_HEALING_POTION = 118,
|
||||
VOLATILE_HEALING_POTION = 28100,
|
||||
SUPER_HEALING_POTION = 22829,
|
||||
CRYSTAL_HEALING_POTION = 13462,
|
||||
FEL_REGENERATION_POTION = 28101,
|
||||
MAJOR_DREAMLESS_SLEEP_POTION = 20002
|
||||
HEALTHSTONE_DISPLAYID = 8026,
|
||||
MAJOR_HEALING_POTION = 24152,
|
||||
WHIPPER_ROOT_TUBER = 21974,
|
||||
NIGHT_DRAGON_BREATH = 21975,
|
||||
LIMITED_INVULNERABILITY_POTION = 24213,
|
||||
GREATER_DREAMLESS_SLEEP_POTION = 17403,
|
||||
SUPERIOR_HEALING_POTION = 15714,
|
||||
CRYSTAL_RESTORE = 2516,
|
||||
DREAMLESS_SLEEP_POTION = 17403,
|
||||
GREATER_HEALING_POTION = 15713,
|
||||
HEALING_POTION = 15712,
|
||||
LESSER_HEALING_POTION = 15711,
|
||||
DISCOLORED_HEALING_POTION = 15736,
|
||||
MINOR_HEALING_POTION = 15710,
|
||||
VOLATILE_HEALING_POTION = 24212,
|
||||
SUPER_HEALING_POTION = 37807,
|
||||
CRYSTAL_HEALING_POTION = 47132,
|
||||
FEL_REGENERATION_POTION = 37864,
|
||||
MAJOR_DREAMLESS_SLEEP_POTION = 37845
|
||||
};
|
||||
|
||||
enum BotState
|
||||
@@ -152,7 +152,6 @@ static std::map<ChatChannelSource, std::string> ChatChannelSourceStr = {
|
||||
{SRC_RAID, "SRC_RAID"},
|
||||
|
||||
{SRC_UNDEFINED, "SRC_UNDEFINED"}};
|
||||
|
||||
enum ChatChannelId
|
||||
{
|
||||
GENERAL = 1,
|
||||
@@ -163,66 +162,60 @@ enum ChatChannelId
|
||||
GUILD_RECRUITMENT = 25,
|
||||
};
|
||||
|
||||
enum RoguePoisonId
|
||||
enum RoguePoisonDisplayId
|
||||
{
|
||||
INSTANT_POISON = 6947,
|
||||
INSTANT_POISON_II = 6949,
|
||||
INSTANT_POISON_III = 6950,
|
||||
INSTANT_POISON_IV = 8926,
|
||||
INSTANT_POISON_V = 8927,
|
||||
INSTANT_POISON_VI = 8928,
|
||||
INSTANT_POISON_VII = 21927,
|
||||
INSTANT_POISON_VIII = 43230,
|
||||
INSTANT_POISON_IX = 43231,
|
||||
DEADLY_POISON = 2892,
|
||||
DEADLY_POISON_II = 2893,
|
||||
DEADLY_POISON_III = 8984,
|
||||
DEADLY_POISON_IV = 8985,
|
||||
DEADLY_POISON_V = 20844,
|
||||
DEADLY_POISON_VI = 22053,
|
||||
DEADLY_POISON_VII = 22054,
|
||||
DEADLY_POISON_VIII = 43232,
|
||||
DEADLY_POISON_IX = 43233
|
||||
DEADLY_POISON_DISPLAYID = 13707,
|
||||
INSTANT_POISON_DISPLAYID = 13710,
|
||||
WOUND_POISON_DISPLAYID = 37278
|
||||
};
|
||||
|
||||
enum SharpeningStoneId
|
||||
enum SharpeningStoneDisplayId
|
||||
{
|
||||
ROUGH_SHARPENING_STONE = 2862,
|
||||
COARSE_SHARPENING_STONE = 2863,
|
||||
HEAVY_SHARPENING_STONE = 2871,
|
||||
SOLID_SHARPENING_STONE = 7964,
|
||||
DENSE_SHARPENING_STONE = 12404,
|
||||
ELEMENTAL_SHARPENING_STONE = 18262,
|
||||
FEL_SHARPENING_STONE = 23528,
|
||||
ADAMANTITE_SHARPENING_STONE = 23529
|
||||
ROUGH_SHARPENING_DISPLAYID = 24673,
|
||||
COARSE_SHARPENING_DISPLAYID = 24674,
|
||||
HEAVY_SHARPENING_DISPLAYID = 24675,
|
||||
SOLID_SHARPENING_DISPLAYID = 24676,
|
||||
DENSE_SHARPENING_DISPLAYID = 24677,
|
||||
CONSECRATED_SHARPENING_DISPLAYID =
|
||||
24674, // will not be used because bot can not know if it will face undead targets
|
||||
ELEMENTAL_SHARPENING_DISPLAYID = 21072,
|
||||
FEL_SHARPENING_DISPLAYID = 39192,
|
||||
ADAMANTITE_SHARPENING_DISPLAYID = 39193
|
||||
};
|
||||
|
||||
enum WeightstoneId
|
||||
enum WeightStoneDisplayId
|
||||
{
|
||||
ROUGH_WEIGHTSTONE = 3239,
|
||||
COARSE_WEIGHTSTONE = 3240,
|
||||
HEAVY_WEIGHTSTONE = 3241,
|
||||
SOLID_WEIGHTSTONE = 7965,
|
||||
DENSE_WEIGHTSTONE = 12643,
|
||||
FEL_WEIGHTSTONE = 28420,
|
||||
ADAMANTITE_WEIGHTSTONE = 28421
|
||||
ROUGH_WEIGHTSTONE_DISPLAYID = 24683,
|
||||
COARSE_WEIGHTSTONE_DISPLAYID = 24684,
|
||||
HEAVY_WEIGHTSTONE_DISPLAYID = 24685,
|
||||
SOLID_WEIGHTSTONE_DISPLAYID = 24686,
|
||||
DENSE_WEIGHTSTONE_DISPLAYID = 24687,
|
||||
FEL_WEIGHTSTONE_DISPLAYID = 39548,
|
||||
ADAMANTITE_WEIGHTSTONE_DISPLAYID = 39549
|
||||
};
|
||||
|
||||
enum WizardOilId
|
||||
enum WizardOilDisplayId
|
||||
{
|
||||
MINOR_WIZARD_OIL = 20744,
|
||||
LESSER_WIZARD_OIL = 20746,
|
||||
WIZARD_OIL = 20750,
|
||||
BRILLIANT_WIZARD_OIL = 20749,
|
||||
SUPERIOR_WIZARD_OIL = 22522
|
||||
MINOR_WIZARD_OIL = 9731,
|
||||
LESSER_WIZARD_OIL = 47903,
|
||||
BRILLIANT_WIZARD_OIL = 47901,
|
||||
WIZARD_OIL = 47905,
|
||||
SUPERIOR_WIZARD_OIL = 47904,
|
||||
/// Blessed Wizard Oil = 26865 //scourge inv
|
||||
};
|
||||
|
||||
enum ManaOilId
|
||||
enum ManaOilDisplayId
|
||||
{
|
||||
MINOR_MANA_OIL = 20745,
|
||||
LESSER_MANA_OIL = 20747,
|
||||
BRILLIANT_MANA_OIL = 20748,
|
||||
SUPERIOR_MANA_OIL = 22521
|
||||
MINOR_MANA_OIL = 34492,
|
||||
LESSER_MANA_OIL = 47902,
|
||||
BRILLIANT_MANA_OIL = 41488,
|
||||
SUPERIOR_MANA_OIL = 36862
|
||||
};
|
||||
|
||||
enum ShieldWardDisplayId
|
||||
{
|
||||
LESSER_WARD_OFSHIELDING = 38759,
|
||||
GREATER_WARD_OFSHIELDING = 38760
|
||||
};
|
||||
|
||||
enum class BotTypeNumber : uint8
|
||||
@@ -276,7 +269,7 @@ enum BotRoles : uint8
|
||||
|
||||
enum HUNTER_TABS
|
||||
{
|
||||
HUNTER_TAB_BEASTMASTERY,
|
||||
HUNTER_TAB_BEASTMASTER,
|
||||
HUNTER_TAB_MARKSMANSHIP,
|
||||
HUNTER_TAB_SURVIVAL,
|
||||
};
|
||||
@@ -285,12 +278,12 @@ enum ROGUE_TABS
|
||||
{
|
||||
ROGUE_TAB_ASSASSINATION,
|
||||
ROGUE_TAB_COMBAT,
|
||||
ROGUE_TAB_SUBTLETY,
|
||||
ROGUE_TAB_SUBTLETY
|
||||
};
|
||||
|
||||
enum PRIEST_TABS
|
||||
{
|
||||
PRIEST_TAB_DISCIPLINE,
|
||||
PRIEST_TAB_DISIPLINE,
|
||||
PRIEST_TAB_HOLY,
|
||||
PRIEST_TAB_SHADOW,
|
||||
};
|
||||
@@ -332,7 +325,7 @@ enum PALADIN_TABS
|
||||
|
||||
enum WARLOCK_TABS
|
||||
{
|
||||
WARLOCK_TAB_AFFLICTION,
|
||||
WARLOCK_TAB_AFFLICATION,
|
||||
WARLOCK_TAB_DEMONOLOGY,
|
||||
WARLOCK_TAB_DESTRUCTION,
|
||||
};
|
||||
@@ -408,7 +401,6 @@ public:
|
||||
void ClearStrategies(BotState type);
|
||||
std::vector<std::string> GetStrategies(BotState type);
|
||||
void ApplyInstanceStrategies(uint32 mapId, bool tellMaster = false);
|
||||
void EvaluateHealerDpsStrategy();
|
||||
bool ContainsStrategy(StrategyType type);
|
||||
bool HasStrategy(std::string const name, BotState type);
|
||||
BotState GetState() { return currentState; };
|
||||
@@ -423,15 +415,13 @@ public:
|
||||
static bool IsCaster(Player* player, bool bySpec = false);
|
||||
static bool IsRangedDps(Player* player, bool bySpec = false);
|
||||
static bool IsCombo(Player* player);
|
||||
static bool IsBotMainTank(Player* player);
|
||||
static bool IsMainTank(Player* player);
|
||||
static uint32 GetGroupTankNum(Player* player);
|
||||
static bool IsAssistTank(Player* player);
|
||||
static bool IsAssistTankOfIndex(Player* player, int index);
|
||||
static bool IsHealAssistantOfIndex(Player* player, int index);
|
||||
static bool IsRangedDpsAssistantOfIndex(Player* player, int index);
|
||||
bool IsAssistTank(Player* player);
|
||||
bool IsAssistTankOfIndex(Player* player, int index);
|
||||
bool IsHealAssistantOfIndex(Player* player, int index);
|
||||
bool IsRangedDpsAssistantOfIndex(Player* player, int index);
|
||||
bool HasAggro(Unit* unit);
|
||||
static int32 GetAssistTankIndex(Player* player);
|
||||
int32 GetGroupSlotIndex(Player* player);
|
||||
int32 GetRangedIndex(Player* player);
|
||||
int32 GetClassIndex(Player* player, uint8 cls);
|
||||
@@ -481,7 +471,7 @@ public:
|
||||
Item* FindBandage() const;
|
||||
Item* FindOpenableItem() const;
|
||||
Item* FindLockedItem() const;
|
||||
Item* FindConsumable(uint32 itemId) const;
|
||||
Item* FindConsumable(uint32 displayId) const;
|
||||
Item* FindStoneFor(Item* weapon) const;
|
||||
Item* FindOilFor(Item* weapon) const;
|
||||
void ImbueItem(Item* item, uint32 targetFlag, ObjectGuid targetGUID);
|
||||
@@ -555,8 +545,6 @@ public:
|
||||
bool IsSafe(WorldObject* obj);
|
||||
ChatChannelSource GetChatChannelSource(Player* bot, uint32 type, std::string channelName);
|
||||
|
||||
bool CheckLocationDistanceByLevel(Player* player, const WorldLocation &loc, bool fromStartUp = false);
|
||||
|
||||
bool HasCheat(BotCheatMask mask)
|
||||
{
|
||||
return ((uint32)mask & (uint32)cheatMask) != 0 ||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERbotAIAWARE_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotAIBase.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTAIBASE_H
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotAIConfig.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "Config.h"
|
||||
#include "NewRpgInfo.h"
|
||||
#include "PlayerbotDungeonSuggestionMgr.h"
|
||||
#include "PlayerbotFactory.h"
|
||||
#include "Playerbots.h"
|
||||
@@ -81,9 +82,6 @@ bool PlayerbotAIConfig::Initialize()
|
||||
sitDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.SitDelay", 30000);
|
||||
returnDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.ReturnDelay", 7000);
|
||||
lootDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.LootDelay", 1000);
|
||||
// Buff system
|
||||
minBotsForGreaterBuff = sConfigMgr->GetOption<int32>("AiPlayerbot.MinBotsForGreaterBuff", 3);
|
||||
rpWarningCooldown = sConfigMgr->GetOption<int32>("AiPlayerbot.RPWarningCooldown", 30);
|
||||
disabledWithoutRealPlayerLoginDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.DisabledWithoutRealPlayerLoginDelay", 30);
|
||||
disabledWithoutRealPlayerLogoutDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.DisabledWithoutRealPlayerLogoutDelay", 300);
|
||||
|
||||
@@ -121,7 +119,6 @@ bool PlayerbotAIConfig::Initialize()
|
||||
tellWhenAvoidAoe = sConfigMgr->GetOption<bool>("AiPlayerbot.TellWhenAvoidAoe", false);
|
||||
|
||||
randomGearLoweringChance = sConfigMgr->GetOption<float>("AiPlayerbot.RandomGearLoweringChance", 0.0f);
|
||||
incrementalGearInit = sConfigMgr->GetOption<bool>("AiPlayerbot.IncrementalGearInit", true);
|
||||
randomGearQualityLimit = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomGearQualityLimit", 3);
|
||||
randomGearScoreLimit = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomGearScoreLimit", 0);
|
||||
|
||||
@@ -142,17 +139,6 @@ bool PlayerbotAIConfig::Initialize()
|
||||
randomBotMapsAsString = sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotMaps", "0,1,530,571");
|
||||
LoadList<std::vector<uint32>>(randomBotMapsAsString, randomBotMaps);
|
||||
probTeleToBankers = sConfigMgr->GetOption<float>("AiPlayerbot.ProbTeleToBankers", 0.25f);
|
||||
enableWeightTeleToCityBankers = sConfigMgr->GetOption<bool>("AiPlayerbot.EnableWeightTeleToCityBankers", false);
|
||||
weightTeleToStormwind = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToStormwindWeight", 1);
|
||||
weightTeleToIronforge = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToIronforgeWeight", 1);
|
||||
weightTeleToDarnassus = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToDarnassusWeight", 1);
|
||||
weightTeleToExodar = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToExodarWeight", 1);
|
||||
weightTeleToOrgrimmar = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToOrgrimmarWeight", 1);
|
||||
weightTeleToUndercity = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToUndercityWeight", 1);
|
||||
weightTeleToThunderBluff = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToThunderBluffWeight", 1);
|
||||
weightTeleToSilvermoonCity = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToSilvermoonCityWeight", 1);
|
||||
weightTeleToShattrathCity = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToShattrathCityWeight", 1);
|
||||
weightTeleToDalaran = sConfigMgr->GetOption<int>("AiPlayerbot.TeleToDalaranWeight", 1);
|
||||
LoadList<std::vector<uint32>>(
|
||||
sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotQuestItems",
|
||||
"6948,5175,5176,5177,5178,16309,12382,13704,11000"),
|
||||
@@ -162,23 +148,17 @@ bool PlayerbotAIConfig::Initialize()
|
||||
LoadList<std::vector<uint32>>(
|
||||
sConfigMgr->GetOption<std::string>("AiPlayerbot.PvpProhibitedZoneIds",
|
||||
"2255,656,2361,2362,2363,976,35,2268,3425,392,541,1446,3828,3712,3738,3565,"
|
||||
"3539,3623,4152,3988,4658,4284,4418,4436,4275,4323,4395,3703,4298,3951"),
|
||||
"3539,3623,4152,3988,4658,4284,4418,4436,4275,4323,4395"),
|
||||
pvpProhibitedZoneIds);
|
||||
LoadList<std::vector<uint32>>(
|
||||
sConfigMgr->GetOption<std::string>("AiPlayerbot.PvpProhibitedAreaIds",
|
||||
"976,35,392,2268,4161,4010,4317,4312,3649,3887,3958,3724,4080,3938,3754"),
|
||||
pvpProhibitedAreaIds);
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>("AiPlayerbot.PvpProhibitedAreaIds", "976,35"),
|
||||
pvpProhibitedAreaIds);
|
||||
fastReactInBG = sConfigMgr->GetOption<bool>("AiPlayerbot.FastReactInBG", true);
|
||||
LoadList<std::vector<uint32>>(
|
||||
sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotQuestIds", "7848,3802,5505,6502,7761,10277,10285,11492,13188,13189,24499,24511,24710,24712"),
|
||||
sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotQuestIds", "7848,3802,5505,6502,7761"),
|
||||
randomBotQuestIds);
|
||||
|
||||
LoadSet<std::set<uint32>>(
|
||||
sConfigMgr->GetOption<std::string>("AiPlayerbot.DisallowedGameObjects",
|
||||
"176213,17155,2656,74448,19020,3719,3658,3705,3706,105579,75293,2857,"
|
||||
"179490,141596,160836,160845,179516,176224,181085,176112,128308,128403,"
|
||||
"165739,165738,175245,175970,176325,176327,123329,2560"),
|
||||
disallowedGameObjects);
|
||||
|
||||
LoadSet<std::set<uint32>>(sConfigMgr->GetOption<std::string>("AiPlayerbot.DisallowedGameObjects", "176213,17155"),
|
||||
disallowedGameObjects);
|
||||
botAutologin = sConfigMgr->GetOption<bool>("AiPlayerbot.BotAutologin", false);
|
||||
randomBotAutologin = sConfigMgr->GetOption<bool>("AiPlayerbot.RandomBotAutologin", true);
|
||||
minRandomBots = sConfigMgr->GetOption<int32>("AiPlayerbot.MinRandomBots", 50);
|
||||
@@ -209,19 +189,10 @@ bool PlayerbotAIConfig::Initialize()
|
||||
maxRandomBotsPriceChangeInterval =
|
||||
sConfigMgr->GetOption<int32>("AiPlayerbot.MaxRandomBotsPriceChangeInterval", 48 * HOUR);
|
||||
randomBotJoinLfg = sConfigMgr->GetOption<bool>("AiPlayerbot.RandomBotJoinLfg", true);
|
||||
|
||||
//////////////////////////// ICC
|
||||
|
||||
restrictHealerDPS = sConfigMgr->GetOption<bool>("AiPlayerbot.HealerDPSMapRestriction", false);
|
||||
LoadList<std::vector<uint32>>(
|
||||
sConfigMgr->GetOption<std::string>("AiPlayerbot.RestrictedHealerDPSMaps",
|
||||
"33,34,36,43,47,48,70,90,109,129,209,229,230,329,349,389,429,1001,1004,"
|
||||
"1007,269,540,542,543,545,546,547,552,553,554,555,556,557,558,560,585,574,"
|
||||
"575,576,578,595,599,600,601,602,604,608,619,632,650,658,668,409,469,509,"
|
||||
"531,532,534,544,548,550,564,565,580,249,533,603,615,616,624,631,649,724"),
|
||||
restrictedHealerDPSMaps);
|
||||
|
||||
//////////////////////////// ICC
|
||||
|
||||
EnableICCBuffs = sConfigMgr->GetOption<bool>("AiPlayerbot.EnableICCBuffs", true);
|
||||
EnableICCBuffs = sConfigMgr->GetOption<bool>("AiPlayerbot.EnableICCBuffs", true);
|
||||
|
||||
//////////////////////////// CHAT
|
||||
enableBroadcasts = sConfigMgr->GetOption<bool>("AiPlayerbot.EnableBroadcasts", true);
|
||||
@@ -374,7 +345,7 @@ bool PlayerbotAIConfig::Initialize()
|
||||
{
|
||||
std::string setting = "AiPlayerbot.ZoneBracket." + std::to_string(zoneId);
|
||||
std::string value = sConfigMgr->GetOption<std::string>(setting, "");
|
||||
|
||||
|
||||
if (!value.empty())
|
||||
{
|
||||
size_t commaPos = value.find(',');
|
||||
@@ -389,7 +360,7 @@ bool PlayerbotAIConfig::Initialize()
|
||||
|
||||
randomChangeMultiplier = sConfigMgr->GetOption<float>("AiPlayerbot.RandomChangeMultiplier", 1.0);
|
||||
|
||||
randomBotCombatStrategies = sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotCombatStrategies", "");
|
||||
randomBotCombatStrategies = sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotCombatStrategies", "-threat");
|
||||
randomBotNonCombatStrategies = sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotNonCombatStrategies", "");
|
||||
combatStrategies = sConfigMgr->GetOption<std::string>("AiPlayerbot.CombatStrategies", "+custom::say");
|
||||
nonCombatStrategies = sConfigMgr->GetOption<std::string>("AiPlayerbot.NonCombatStrategies", "+custom::say,+return");
|
||||
@@ -476,13 +447,11 @@ bool PlayerbotAIConfig::Initialize()
|
||||
}
|
||||
|
||||
botCheats.clear();
|
||||
LoadListString<std::vector<std::string>>(sConfigMgr->GetOption<std::string>("AiPlayerbot.BotCheats", "food,taxi,raid"),
|
||||
LoadListString<std::vector<std::string>>(sConfigMgr->GetOption<std::string>("AiPlayerbot.BotCheats", "taxi"),
|
||||
botCheats);
|
||||
|
||||
botCheatMask = 0;
|
||||
|
||||
if (std::find(botCheats.begin(), botCheats.end(), "food") != botCheats.end())
|
||||
botCheatMask |= (uint32)BotCheatMask::food;
|
||||
if (std::find(botCheats.begin(), botCheats.end(), "taxi") != botCheats.end())
|
||||
botCheatMask |= (uint32)BotCheatMask::taxi;
|
||||
if (std::find(botCheats.begin(), botCheats.end(), "gold") != botCheats.end())
|
||||
@@ -493,23 +462,35 @@ bool PlayerbotAIConfig::Initialize()
|
||||
botCheatMask |= (uint32)BotCheatMask::mana;
|
||||
if (std::find(botCheats.begin(), botCheats.end(), "power") != botCheats.end())
|
||||
botCheatMask |= (uint32)BotCheatMask::power;
|
||||
if (std::find(botCheats.begin(), botCheats.end(), "raid") != botCheats.end())
|
||||
botCheatMask |= (uint32)BotCheatMask::raid;
|
||||
|
||||
LoadListString<std::vector<std::string>>(sConfigMgr->GetOption<std::string>("AiPlayerbot.AllowedLogFiles", ""),
|
||||
allowedLogFiles);
|
||||
LoadListString<std::vector<std::string>>(sConfigMgr->GetOption<std::string>("AiPlayerbot.TradeActionExcludedPrefixes", ""),
|
||||
tradeActionExcludedPrefixes);
|
||||
|
||||
worldBuffs.clear();
|
||||
loadWorldBuff();
|
||||
LOG_INFO("playerbots", "Loading World Buff Feature...");
|
||||
|
||||
LOG_INFO("playerbots", "Loading Worldbuff...");
|
||||
for (uint32 factionId = 0; factionId < 3; factionId++)
|
||||
{
|
||||
for (uint32 classId = 0; classId < MAX_CLASSES; classId++)
|
||||
{
|
||||
for (uint32 specId = 0; specId <= MAX_WORLDBUFF_SPECNO; specId++)
|
||||
{
|
||||
for (uint32 minLevel = 0; minLevel <= randomBotMaxLevel; minLevel++)
|
||||
{
|
||||
for (uint32 maxLevel = minLevel; maxLevel <= randomBotMaxLevel; maxLevel++)
|
||||
{
|
||||
loadWorldBuff(factionId, classId, specId, minLevel, maxLevel);
|
||||
}
|
||||
loadWorldBuff(factionId, classId, specId, minLevel, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
randomBotAccountPrefix = sConfigMgr->GetOption<std::string>("AiPlayerbot.RandomBotAccountPrefix", "rndbot");
|
||||
randomBotAccountCount = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomBotAccountCount", 0);
|
||||
deleteRandomBotAccounts = sConfigMgr->GetOption<bool>("AiPlayerbot.DeleteRandomBotAccounts", false);
|
||||
randomBotGuildCount = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomBotGuildCount", 20);
|
||||
randomBotGuildSizeMax = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomBotGuildSizeMax", 15);
|
||||
deleteRandomBotGuilds = sConfigMgr->GetOption<bool>("AiPlayerbot.DeleteRandomBotGuilds", false);
|
||||
|
||||
guildTaskEnabled = sConfigMgr->GetOption<bool>("AiPlayerbot.EnableGuildTasks", true);
|
||||
@@ -550,27 +531,6 @@ bool PlayerbotAIConfig::Initialize()
|
||||
addClassCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.AddClassCommand", 1);
|
||||
addClassAccountPoolSize = sConfigMgr->GetOption<int32>("AiPlayerbot.AddClassAccountPoolSize", 50);
|
||||
maintenanceCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.MaintenanceCommand", 1);
|
||||
|
||||
altMaintenanceAttunementQs = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceAttunementQuests", true);
|
||||
altMaintenanceBags = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceBags", true);
|
||||
altMaintenanceAmmo = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceAmmo", true);
|
||||
altMaintenanceFood = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceFood", true);
|
||||
altMaintenanceReagents = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceReagents", true);
|
||||
altMaintenanceConsumables = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceConsumables", true);
|
||||
altMaintenancePotions = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenancePotions", true);
|
||||
altMaintenanceTalentTree = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceTalentTree", true);
|
||||
altMaintenancePet = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenancePet", true);
|
||||
altMaintenancePetTalents = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenancePetTalents", true);
|
||||
altMaintenanceClassSpells = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceClassSpells", true);
|
||||
altMaintenanceAvailableSpells = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceAvailableSpells", true);
|
||||
altMaintenanceSkills = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceSkills", true);
|
||||
altMaintenanceReputation = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceReputation", true);
|
||||
altMaintenanceSpecialSpells = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceSpecialSpells", true);
|
||||
altMaintenanceMounts = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceMounts", true);
|
||||
altMaintenanceGlyphs = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceGlyphs", true);
|
||||
altMaintenanceKeyring = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceKeyring", true);
|
||||
altMaintenanceGemsEnchants = sConfigMgr->GetOption<bool>("AiPlayerbot.AltMaintenanceGemsEnchants", true);
|
||||
|
||||
autoGearCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.AutoGearCommand", 1);
|
||||
autoGearCommandAltBots = sConfigMgr->GetOption<int32>("AiPlayerbot.AutoGearCommandAltBots", 1);
|
||||
autoGearQualityLimit = sConfigMgr->GetOption<int32>("AiPlayerbot.AutoGearQualityLimit", 3);
|
||||
@@ -619,23 +579,13 @@ bool PlayerbotAIConfig::Initialize()
|
||||
autoPickTalents = sConfigMgr->GetOption<bool>("AiPlayerbot.AutoPickTalents", true);
|
||||
autoUpgradeEquip = sConfigMgr->GetOption<bool>("AiPlayerbot.AutoUpgradeEquip", false);
|
||||
hunterWolfPet = sConfigMgr->GetOption<int32>("AiPlayerbot.HunterWolfPet", 0);
|
||||
defaultPetStance = sConfigMgr->GetOption<int32>("AiPlayerbot.DefaultPetStance", 1);
|
||||
petChatCommandDebug = sConfigMgr->GetOption<bool>("AiPlayerbot.PetChatCommandDebug", 0);
|
||||
autoLearnTrainerSpells = sConfigMgr->GetOption<bool>("AiPlayerbot.AutoLearnTrainerSpells", true);
|
||||
autoLearnQuestSpells = sConfigMgr->GetOption<bool>("AiPlayerbot.AutoLearnQuestSpells", false);
|
||||
autoTeleportForLevel = sConfigMgr->GetOption<bool>("AiPlayerbot.AutoTeleportForLevel", false);
|
||||
autoDoQuests = sConfigMgr->GetOption<bool>("AiPlayerbot.AutoDoQuests", true);
|
||||
enableNewRpgStrategy = sConfigMgr->GetOption<bool>("AiPlayerbot.EnableNewRpgStrategy", true);
|
||||
|
||||
RpgStatusProbWeight[RPG_WANDER_RANDOM] = sConfigMgr->GetOption<int32>("AiPlayerbot.RpgStatusProbWeight.WanderRandom", 15);
|
||||
RpgStatusProbWeight[RPG_WANDER_NPC] = sConfigMgr->GetOption<int32>("AiPlayerbot.RpgStatusProbWeight.WanderNpc", 20);
|
||||
RpgStatusProbWeight[RPG_GO_GRIND] = sConfigMgr->GetOption<int32>("AiPlayerbot.RpgStatusProbWeight.GoGrind", 15);
|
||||
RpgStatusProbWeight[RPG_GO_CAMP] = sConfigMgr->GetOption<int32>("AiPlayerbot.RpgStatusProbWeight.GoCamp", 10);
|
||||
RpgStatusProbWeight[RPG_DO_QUEST] = sConfigMgr->GetOption<int32>("AiPlayerbot.RpgStatusProbWeight.DoQuest", 60);
|
||||
RpgStatusProbWeight[RPG_TRAVEL_FLIGHT] = sConfigMgr->GetOption<int32>("AiPlayerbot.RpgStatusProbWeight.TravelFlight", 15);
|
||||
RpgStatusProbWeight[RPG_REST] = sConfigMgr->GetOption<int32>("AiPlayerbot.RpgStatusProbWeight.Rest", 5);
|
||||
|
||||
enableNewRpgStrategy = sConfigMgr->GetOption<bool>("AiPlayerbot.EnableNewRpgStrategy", false);
|
||||
syncLevelWithPlayers = sConfigMgr->GetOption<bool>("AiPlayerbot.SyncLevelWithPlayers", false);
|
||||
freeFood = sConfigMgr->GetOption<bool>("AiPlayerbot.FreeFood", true);
|
||||
randomBotGroupNearby = sConfigMgr->GetOption<bool>("AiPlayerbot.RandomBotGroupNearby", true);
|
||||
|
||||
// arena
|
||||
@@ -654,9 +604,6 @@ bool PlayerbotAIConfig::Initialize()
|
||||
return true;
|
||||
}
|
||||
|
||||
// Assign account types after accounts are created
|
||||
sRandomPlayerbotMgr->AssignAccountTypes();
|
||||
|
||||
if (sPlayerbotAIConfig->enabled)
|
||||
{
|
||||
sRandomPlayerbotMgr->Init();
|
||||
@@ -668,16 +615,18 @@ bool PlayerbotAIConfig::Initialize()
|
||||
sPlayerbotTextMgr->LoadBotTextChance();
|
||||
PlayerbotFactory::Init();
|
||||
|
||||
AiObjectContext::BuildAllSharedContexts();
|
||||
if (!sPlayerbotAIConfig->autoDoQuests)
|
||||
{
|
||||
LOG_INFO("server.loading", "Loading Quest Detail Data...");
|
||||
sTravelMgr->LoadQuestTravelTable();
|
||||
}
|
||||
|
||||
|
||||
if (sPlayerbotAIConfig->randomBotSuggestDungeons)
|
||||
{
|
||||
sPlayerbotDungeonSuggestionMgr->LoadDungeonSuggestions();
|
||||
}
|
||||
|
||||
excludedHunterPetFamilies.clear();
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>("AiPlayerbot.ExcludedHunterPetFamilies", ""), excludedHunterPetFamilies);
|
||||
|
||||
LOG_INFO("server.loading", "---------------------------------------");
|
||||
LOG_INFO("server.loading", " AI Playerbots initialized ");
|
||||
LOG_INFO("server.loading", "---------------------------------------");
|
||||
@@ -710,12 +659,6 @@ bool PlayerbotAIConfig::IsInPvpProhibitedArea(uint32 id)
|
||||
return find(pvpProhibitedAreaIds.begin(), pvpProhibitedAreaIds.end(), id) != pvpProhibitedAreaIds.end();
|
||||
}
|
||||
|
||||
bool PlayerbotAIConfig::IsRestrictedHealerDPSMap(uint32 mapId) const
|
||||
{
|
||||
return restrictHealerDPS &&
|
||||
std::find(restrictedHealerDPSMaps.begin(), restrictedHealerDPSMaps.end(), mapId) != restrictedHealerDPSMaps.end();
|
||||
}
|
||||
|
||||
std::string const PlayerbotAIConfig::GetTimestampStr()
|
||||
{
|
||||
time_t t = time(nullptr);
|
||||
@@ -788,62 +731,88 @@ void PlayerbotAIConfig::log(std::string const fileName, char const* str, ...)
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
void PlayerbotAIConfig::loadWorldBuff()
|
||||
void PlayerbotAIConfig::loadWorldBuff(uint32 factionId1, uint32 classId1, uint32 specId1, uint32 minLevel1, uint32 maxLevel1)
|
||||
{
|
||||
std::string matrix = sConfigMgr->GetOption<std::string>("AiPlayerbot.WorldBuffMatrix", "", true);
|
||||
if (matrix.empty())
|
||||
return;
|
||||
std::vector<uint32> buffs;
|
||||
|
||||
std::istringstream entryStream(matrix);
|
||||
std::string entry;
|
||||
std::ostringstream os;
|
||||
os << "AiPlayerbot.WorldBuff." << factionId1 << "." << classId1 << "." << specId1 << "." << minLevel1 << "." << maxLevel1;
|
||||
|
||||
while (std::getline(entryStream, entry, ';'))
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>(os.str().c_str(), "", false), buffs);
|
||||
|
||||
for (auto buff : buffs)
|
||||
{
|
||||
worldBuff wb = {buff, factionId1, classId1, specId1, minLevel1, maxLevel1};
|
||||
worldBuffs.push_back(wb);
|
||||
}
|
||||
|
||||
entry.erase(0, entry.find_first_not_of(" \t\r\n"));
|
||||
entry.erase(entry.find_last_not_of(" \t\r\n") + 1);
|
||||
if (maxLevel1 == 0)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "AiPlayerbot.WorldBuff." << factionId1 << "." << classId1 << "." << specId1 << "." << minLevel1;
|
||||
|
||||
size_t firstColon = entry.find(':');
|
||||
size_t secondColon = entry.find(':', firstColon + 1);
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>(os.str().c_str(), "", false), buffs);
|
||||
|
||||
if (firstColon == std::string::npos || secondColon == std::string::npos)
|
||||
for (auto buff : buffs)
|
||||
{
|
||||
LOG_ERROR("playerbots", "Malformed entry: [{}]", entry);
|
||||
continue;
|
||||
worldBuff wb = {buff, factionId1, classId1, specId1, minLevel1, maxLevel1};
|
||||
worldBuffs.push_back(wb);
|
||||
}
|
||||
}
|
||||
|
||||
std::string metaPart = entry.substr(firstColon + 1, secondColon - firstColon - 1);
|
||||
std::string spellPart = entry.substr(secondColon + 1);
|
||||
if (maxLevel1 == 0 && minLevel1 == 0)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "AiPlayerbot.WorldBuff." << factionId1 << "." << factionId1 << "." << classId1 << "." << specId1;
|
||||
|
||||
std::vector<uint32> ids;
|
||||
std::istringstream metaStream(metaPart);
|
||||
std::string token;
|
||||
while (std::getline(metaStream, token, ','))
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>(os.str().c_str(), "", false), buffs);
|
||||
|
||||
for (auto buff : buffs)
|
||||
{
|
||||
try {
|
||||
ids.push_back(static_cast<uint32>(std::stoi(token)));
|
||||
} catch (...) {
|
||||
LOG_ERROR("playerbots", "Invalid meta token in [{}]", entry);
|
||||
break;
|
||||
}
|
||||
worldBuff wb = {buff, factionId1, classId1, specId1, minLevel1, maxLevel1};
|
||||
worldBuffs.push_back(wb);
|
||||
}
|
||||
}
|
||||
|
||||
if (ids.size() != 5)
|
||||
if (maxLevel1 == 0 && minLevel1 == 0 && specId1 == 0)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "AiPlayerbot.WorldBuff." << factionId1 << "." << factionId1 << "." << classId1;
|
||||
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>(os.str().c_str(), "", false), buffs);
|
||||
|
||||
for (auto buff : buffs)
|
||||
{
|
||||
LOG_ERROR("playerbots", "Entry [{}] has incomplete meta block", entry);
|
||||
continue;
|
||||
worldBuff wb = {buff, factionId1, classId1, specId1, minLevel1, maxLevel1};
|
||||
worldBuffs.push_back(wb);
|
||||
}
|
||||
}
|
||||
|
||||
std::istringstream spellStream(spellPart);
|
||||
while (std::getline(spellStream, token, ','))
|
||||
if (classId1 == 0 && maxLevel1 == 0 && minLevel1 == 0 && specId1 == 0)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "AiPlayerbot.WorldBuff." << factionId1;
|
||||
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>(os.str().c_str(), "", false), buffs);
|
||||
|
||||
for (auto buff : buffs)
|
||||
{
|
||||
try {
|
||||
uint32 spellId = static_cast<uint32>(std::stoi(token));
|
||||
worldBuff wb = { spellId, ids[0], ids[1], ids[2], ids[3], ids[4] };
|
||||
worldBuffs.push_back(wb);
|
||||
} catch (...) {
|
||||
LOG_ERROR("playerbots", "Invalid spell ID in [{}]", entry);
|
||||
}
|
||||
worldBuff wb = {buff, factionId1, classId1, specId1, minLevel1, maxLevel1};
|
||||
worldBuffs.push_back(wb);
|
||||
}
|
||||
}
|
||||
|
||||
if (factionId1 == 0 && classId1 == 0 && maxLevel1 == 0 && minLevel1 == 0 && specId1 == 0)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "AiPlayerbot.WorldBuff";
|
||||
|
||||
LoadList<std::vector<uint32>>(sConfigMgr->GetOption<std::string>(os.str().c_str(), "", false), buffs);
|
||||
|
||||
for (auto buff : buffs)
|
||||
{
|
||||
worldBuff wb = {buff, factionId1, classId1, specId1, minLevel1, maxLevel1};
|
||||
worldBuffs.push_back(wb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERbotAICONFIG_H
|
||||
#define _PLAYERBOT_PLAYERbotAICONFIG_H
|
||||
|
||||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "Common.h"
|
||||
#include "DBCEnums.h"
|
||||
@@ -22,9 +21,7 @@ enum class BotCheatMask : uint32
|
||||
health = 4,
|
||||
mana = 8,
|
||||
power = 16,
|
||||
raid = 32,
|
||||
food = 64,
|
||||
maxMask = 128
|
||||
maxMask = 32
|
||||
};
|
||||
|
||||
enum class HealingManaEfficiency : uint8
|
||||
@@ -37,27 +34,8 @@ enum class HealingManaEfficiency : uint8
|
||||
SUPERIOR = 32
|
||||
};
|
||||
|
||||
enum NewRpgStatus : int
|
||||
{
|
||||
RPG_STATUS_START = 0,
|
||||
// Going to far away place
|
||||
RPG_GO_GRIND = 0,
|
||||
RPG_GO_CAMP = 1,
|
||||
// Exploring nearby
|
||||
RPG_WANDER_RANDOM = 2,
|
||||
RPG_WANDER_NPC = 3,
|
||||
// Do Quest (based on quest status)
|
||||
RPG_DO_QUEST = 4,
|
||||
// Travel
|
||||
RPG_TRAVEL_FLIGHT = 5,
|
||||
// Taking a break
|
||||
RPG_REST = 6,
|
||||
// Initial status
|
||||
RPG_IDLE = 7,
|
||||
RPG_STATUS_END = 8
|
||||
};
|
||||
|
||||
#define MAX_SPECNO 20
|
||||
#define MAX_WORLDBUFF_SPECNO 3
|
||||
|
||||
class PlayerbotAIConfig
|
||||
{
|
||||
@@ -102,17 +80,6 @@ public:
|
||||
bool botAutologin;
|
||||
std::string randomBotMapsAsString;
|
||||
float probTeleToBankers;
|
||||
bool enableWeightTeleToCityBankers;
|
||||
int weightTeleToStormwind;
|
||||
int weightTeleToIronforge;
|
||||
int weightTeleToDarnassus;
|
||||
int weightTeleToExodar;
|
||||
int weightTeleToOrgrimmar;
|
||||
int weightTeleToUndercity;
|
||||
int weightTeleToThunderBluff;
|
||||
int weightTeleToSilvermoonCity;
|
||||
int weightTeleToShattrathCity;
|
||||
int weightTeleToDalaran;
|
||||
std::vector<uint32> randomBotMaps;
|
||||
std::vector<uint32> randomBotQuestItems;
|
||||
std::vector<uint32> randomBotAccounts;
|
||||
@@ -120,7 +87,6 @@ public:
|
||||
std::vector<uint32> randomBotQuestIds;
|
||||
uint32 randomBotTeleportDistance;
|
||||
float randomGearLoweringChance;
|
||||
bool incrementalGearInit;
|
||||
int32 randomGearQualityLimit;
|
||||
int32 randomGearScoreLimit;
|
||||
float randomBotMinLevelChance, randomBotMaxLevelChance;
|
||||
@@ -139,12 +105,6 @@ public:
|
||||
uint32 disabledWithoutRealPlayerLoginDelay, disabledWithoutRealPlayerLogoutDelay;
|
||||
bool randomBotJoinLfg;
|
||||
|
||||
// Buff system
|
||||
// Min group size to use Greater buffs (Paladin, Mage, Druid). Default: 3
|
||||
int32 minBotsForGreaterBuff;
|
||||
// Cooldown (seconds) between reagent-missing RP warnings, per bot & per buff. Default: 30
|
||||
int32 rpWarningCooldown;
|
||||
|
||||
// chat
|
||||
bool randomBotTalk;
|
||||
bool randomBotEmote;
|
||||
@@ -267,7 +227,7 @@ public:
|
||||
uint32 randomBotAccountCount;
|
||||
bool randomBotRandomPassword;
|
||||
bool deleteRandomBotAccounts;
|
||||
uint32 randomBotGuildCount, randomBotGuildSizeMax;
|
||||
uint32 randomBotGuildCount;
|
||||
bool deleteRandomBotGuilds;
|
||||
std::vector<uint32> randomBotGuilds;
|
||||
std::vector<uint32> pvpProhibitedZoneIds;
|
||||
@@ -295,7 +255,6 @@ public:
|
||||
uint32 iterationsPerTick;
|
||||
|
||||
std::mutex m_logMtx;
|
||||
std::vector<std::string> tradeActionExcludedPrefixes;
|
||||
std::vector<std::string> allowedLogFiles;
|
||||
std::unordered_map<std::string, std::pair<FILE*, bool>> logFiles;
|
||||
|
||||
@@ -305,11 +264,11 @@ public:
|
||||
struct worldBuff
|
||||
{
|
||||
uint32 spellId;
|
||||
uint32 factionId;
|
||||
uint32 classId;
|
||||
uint32 specId;
|
||||
uint32 minLevel;
|
||||
uint32 maxLevel;
|
||||
uint32 factionId = 0;
|
||||
uint32 classId = 0;
|
||||
uint32 specId = 0;
|
||||
uint32 minLevel = 0;
|
||||
uint32 maxLevel = 0;
|
||||
};
|
||||
|
||||
std::vector<worldBuff> worldBuffs;
|
||||
@@ -351,13 +310,11 @@ public:
|
||||
bool autoPickTalents;
|
||||
bool autoUpgradeEquip;
|
||||
int32 hunterWolfPet;
|
||||
int32 defaultPetStance;
|
||||
int32 petChatCommandDebug;
|
||||
bool autoLearnTrainerSpells;
|
||||
bool autoDoQuests;
|
||||
bool enableNewRpgStrategy;
|
||||
std::unordered_map<NewRpgStatus, uint32> RpgStatusProbWeight;
|
||||
bool syncLevelWithPlayers;
|
||||
bool freeFood;
|
||||
bool autoLearnQuestSpells;
|
||||
bool autoTeleportForLevel;
|
||||
bool randomBotGroupNearby;
|
||||
@@ -391,25 +348,6 @@ public:
|
||||
int32 addClassCommand;
|
||||
int32 addClassAccountPoolSize;
|
||||
int32 maintenanceCommand;
|
||||
bool altMaintenanceAttunementQs,
|
||||
altMaintenanceBags,
|
||||
altMaintenanceAmmo,
|
||||
altMaintenanceFood,
|
||||
altMaintenanceReagents,
|
||||
altMaintenanceConsumables,
|
||||
altMaintenancePotions,
|
||||
altMaintenanceTalentTree,
|
||||
altMaintenancePet,
|
||||
altMaintenancePetTalents,
|
||||
altMaintenanceClassSpells,
|
||||
altMaintenanceAvailableSpells,
|
||||
altMaintenanceSkills,
|
||||
altMaintenanceReputation,
|
||||
altMaintenanceSpecialSpells,
|
||||
altMaintenanceMounts,
|
||||
altMaintenanceGlyphs,
|
||||
altMaintenanceKeyring,
|
||||
altMaintenanceGemsEnchants;
|
||||
int32 autoGearCommand, autoGearCommandAltBots, autoGearQualityLimit, autoGearScoreLimit;
|
||||
|
||||
uint32 useGroundMountAtMinLevel;
|
||||
@@ -436,16 +374,9 @@ public:
|
||||
}
|
||||
void log(std::string const fileName, const char* str, ...);
|
||||
|
||||
void loadWorldBuff();
|
||||
|
||||
void loadWorldBuff(uint32 factionId, uint32 classId, uint32 specId, uint32 minLevel, uint32 maxLevel);
|
||||
static std::vector<std::vector<uint32>> ParseTempTalentsOrder(uint32 cls, std::string temp_talents_order);
|
||||
static std::vector<std::vector<uint32>> ParseTempPetTalentsOrder(uint32 spec, std::string temp_talents_order);
|
||||
|
||||
bool restrictHealerDPS = false;
|
||||
std::vector<uint32> restrictedHealerDPSMaps;
|
||||
bool IsRestrictedHealerDPSMap(uint32 mapId) const;
|
||||
|
||||
std::vector<uint32> excludedHunterPetFamilies;
|
||||
};
|
||||
|
||||
#define sPlayerbotAIConfig PlayerbotAIConfig::instance()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotCommandServer.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTCOMMANDSERVER_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotDbStore.h"
|
||||
@@ -82,7 +82,7 @@ void PlayerbotDbStore::Reset(PlayerbotAI* botAI)
|
||||
{
|
||||
ObjectGuid::LowType guid = botAI->GetBot()->GetGUID().GetCounter();
|
||||
|
||||
PlayerbotsDatabasePreparedStatement* stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_DEL_DB_STORE);
|
||||
PlayerbotsDatabasePreparedStatement* stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_DEL_CUSTOM_STRATEGY);
|
||||
stmt->SetData(0, guid);
|
||||
PlayerbotsDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTDBSTORE_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotDungeonSuggestionMgr.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTDUNGEONSUGGESTIONMGR_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotMgr.h"
|
||||
@@ -36,8 +36,6 @@
|
||||
#include "BroadcastHelper.h"
|
||||
#include "PlayerbotDbStore.h"
|
||||
#include "WorldSessionMgr.h"
|
||||
#include "DatabaseEnv.h" // Added for gender choice
|
||||
#include <algorithm> // Added for gender choice
|
||||
|
||||
class BotInitGuard
|
||||
{
|
||||
@@ -168,7 +166,7 @@ void PlayerbotHolder::HandlePlayerBotLoginCallback(PlayerbotLoginQueryHolder con
|
||||
uint32 botAccountId = holder.GetAccountId();
|
||||
// At login DBC locale should be what the server is set to use by default (as spells etc are hardcoded to ENUS this
|
||||
// allows channels to work as intended)
|
||||
WorldSession* botSession = new WorldSession(botAccountId, "", 0x0, nullptr, SEC_PLAYER, EXPANSION_WRATH_OF_THE_LICH_KING,
|
||||
WorldSession* botSession = new WorldSession(botAccountId, "", nullptr, SEC_PLAYER, EXPANSION_WRATH_OF_THE_LICH_KING,
|
||||
time_t(0), sWorld->GetDefaultDbcLocale(), 0, false, false, 0, true);
|
||||
|
||||
botSession->HandlePlayerLoginFromDB(holder); // will delete lqh
|
||||
@@ -475,7 +473,7 @@ void PlayerbotHolder::OnBotLogin(Player* const bot)
|
||||
}
|
||||
|
||||
Player* master = botAI->GetMaster();
|
||||
if (master)
|
||||
if (master)
|
||||
{
|
||||
ObjectGuid masterGuid = master->GetGUID();
|
||||
if (master->GetGroup() && !master->GetGroup()->IsLeader(masterGuid))
|
||||
@@ -499,7 +497,7 @@ void PlayerbotHolder::OnBotLogin(Player* const bot)
|
||||
}
|
||||
}
|
||||
|
||||
// Don't disband alt groups when master goes away
|
||||
// Don't disband alt groups when master goes away
|
||||
// Controlled by config
|
||||
if (sPlayerbotAIConfig->KeepAltsInGroup())
|
||||
{
|
||||
@@ -586,8 +584,8 @@ void PlayerbotHolder::OnBotLogin(Player* const bot)
|
||||
}
|
||||
|
||||
bot->SaveToDB(false, false);
|
||||
bool addClassBot = sRandomPlayerbotMgr->IsAccountType(accountId, 2);
|
||||
if (addClassBot && master && abs((int)master->GetLevel() - (int)bot->GetLevel()) > 3)
|
||||
bool addClassBot = sRandomPlayerbotMgr->IsAddclassBot(bot->GetGUID().GetCounter());
|
||||
if (addClassBot && master && isRandomAccount && abs((int)master->GetLevel() - (int)bot->GetLevel()) > 3)
|
||||
{
|
||||
// PlayerbotFactory factory(bot, master->GetLevel());
|
||||
// factory.Randomize(false);
|
||||
@@ -839,18 +837,6 @@ std::string const PlayerbotHolder::ProcessBotCommand(std::string const cmd, Obje
|
||||
return "unknown command";
|
||||
}
|
||||
|
||||
// Added for gender choice : Returns the gender of an offline character: 0 = male, 1 = female.
|
||||
static uint8 GetOfflinePlayerGender(ObjectGuid guid)
|
||||
{
|
||||
QueryResult result = CharacterDatabase.Query(
|
||||
"SELECT gender FROM characters WHERE guid = {}", guid.GetCounter());
|
||||
|
||||
if (result)
|
||||
return (*result)[0].Get<uint8>(); // 0 = male, 1 = female
|
||||
|
||||
return GENDER_MALE; // fallback value
|
||||
}
|
||||
|
||||
bool PlayerbotMgr::HandlePlayerbotMgrCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
if (!sPlayerbotAIConfig->enabled)
|
||||
@@ -893,17 +879,15 @@ std::vector<std::string> PlayerbotHolder::HandlePlayerbotCommand(char const* arg
|
||||
if (!*args)
|
||||
{
|
||||
messages.push_back("usage: list/reload/tweak/self or add/addaccount/init/remove PLAYERNAME\n");
|
||||
messages.push_back("usage: addclass CLASSNAME [male|female|0|1]");
|
||||
messages.push_back("usage: addclass CLASSNAME");
|
||||
return messages;
|
||||
}
|
||||
|
||||
char* cmd = strtok((char*)args, " ");
|
||||
char* charname = strtok(nullptr, " ");
|
||||
char* genderArg = strtok(nullptr, " "); // Added for gender choice [male|female|0|1] optionnel
|
||||
|
||||
if (!cmd)
|
||||
{
|
||||
messages.push_back("usage: list/reload/tweak/self or add/init/remove PLAYERNAME or addclass CLASSNAME [male|female]");
|
||||
messages.push_back("usage: list/reload/tweak/self or add/init/remove PLAYERNAME or addclass CLASSNAME");
|
||||
return messages;
|
||||
}
|
||||
|
||||
@@ -1126,24 +1110,6 @@ std::vector<std::string> PlayerbotHolder::HandlePlayerbotCommand(char const* arg
|
||||
messages.push_back("Error: Invalid Class. Try again.");
|
||||
return messages;
|
||||
}
|
||||
// Added for gender choice : Parsing gender
|
||||
int8 gender = -1; // -1 = gender will be random
|
||||
if (genderArg)
|
||||
{
|
||||
std::string g = genderArg;
|
||||
std::transform(g.begin(), g.end(), g.begin(), ::tolower);
|
||||
|
||||
if (g == "male" || g == "0")
|
||||
gender = GENDER_MALE; // 0
|
||||
else if (g == "female" || g == "1")
|
||||
gender = GENDER_FEMALE; // 1
|
||||
else
|
||||
{
|
||||
messages.push_back("Unknown gender : " + g + " (male/female/0/1)");
|
||||
return messages;
|
||||
}
|
||||
} //end
|
||||
|
||||
if (claz == 6 && master->GetLevel() < sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL))
|
||||
{
|
||||
messages.push_back("Your level is too low to summon Deathknight");
|
||||
@@ -1153,9 +1119,6 @@ std::vector<std::string> PlayerbotHolder::HandlePlayerbotCommand(char const* arg
|
||||
const std::unordered_set<ObjectGuid> &guidCache = sRandomPlayerbotMgr->addclassCache[RandomPlayerbotMgr::GetTeamClassIdx(teamId == TEAM_ALLIANCE, claz)];
|
||||
for (const ObjectGuid &guid: guidCache)
|
||||
{
|
||||
// If the user requested a specific gender, skip any character that doesn't match.
|
||||
if (gender != -1 && GetOfflinePlayerGender(guid) != gender)
|
||||
continue;
|
||||
if (botLoading.find(guid) != botLoading.end())
|
||||
continue;
|
||||
if (ObjectAccessor::FindConnectedPlayer(guid))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTMGR_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotSecurity.h"
|
||||
@@ -164,7 +164,7 @@ PlayerbotSecurityLevel PlayerbotSecurity::LevelFor(Player* from, DenyReason* rea
|
||||
|
||||
if (reason)
|
||||
*reason = PLAYERBOT_DENY_INVITE;
|
||||
|
||||
|
||||
return PLAYERBOT_SECURITY_INVITE;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTSECURITY_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "PlayerbotTextMgr.h"
|
||||
@@ -101,22 +101,6 @@ std::string PlayerbotTextMgr::GetBotText(std::string name, std::map<std::string,
|
||||
return botText;
|
||||
}
|
||||
|
||||
std::string PlayerbotTextMgr::GetBotTextOrDefault(std::string name, std::string defaultText,
|
||||
std::map<std::string, std::string> placeholders)
|
||||
{
|
||||
std::string botText = GetBotText(name, placeholders);
|
||||
if (botText.empty())
|
||||
{
|
||||
for (std::map<std::string, std::string>::iterator i = placeholders.begin(); i != placeholders.end(); ++i)
|
||||
{
|
||||
replaceAll(defaultText, i->first, i->second);
|
||||
}
|
||||
return defaultText;
|
||||
}
|
||||
|
||||
return botText;
|
||||
}
|
||||
|
||||
// chat replies
|
||||
|
||||
std::string PlayerbotTextMgr::GetBotText(ChatReplyType replyType, std::map<std::string, std::string> placeholders)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTTEXTMGR_H
|
||||
@@ -83,8 +83,6 @@ public:
|
||||
std::string GetBotText(ChatReplyType replyType, std::string name);
|
||||
bool GetBotText(std::string name, std::string& text);
|
||||
bool GetBotText(std::string name, std::string& text, std::map<std::string, std::string> placeholders);
|
||||
std::string GetBotTextOrDefault(std::string name, std::string defaultText,
|
||||
std::map<std::string, std::string> placeholders);
|
||||
void LoadBotTexts();
|
||||
void LoadBotTextChance();
|
||||
static void replaceAll(std::string& str, const std::string& from, const std::string& to);
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#include "ScriptMgr.h"
|
||||
#include "cs_playerbots.h"
|
||||
#include "cmath"
|
||||
#include "BattleGroundTactics.h"
|
||||
|
||||
class PlayerbotsDatabaseScript : public DatabaseScript
|
||||
{
|
||||
@@ -115,7 +114,7 @@ public:
|
||||
roundedTime = roundedTime.substr(0, roundedTime.find('.') + 2);
|
||||
|
||||
ChatHandler(player->GetSession()).SendSysMessage(
|
||||
"|cff00ff00Playerbots:|r bot initialization at server startup takes about '"
|
||||
"|cff00ff00Playerbots:|r bot initialization at server startup takes about '"
|
||||
+ roundedTime + "' minutes.");
|
||||
}
|
||||
}
|
||||
@@ -197,46 +196,36 @@ public:
|
||||
sRandomPlayerbotMgr->HandleCommand(type, msg, player);
|
||||
}
|
||||
|
||||
bool OnPlayerBeforeAchievementComplete(Player* player, AchievementEntry const* achievement) override
|
||||
bool OnPlayerBeforeCriteriaProgress(Player* player, AchievementCriteriaEntry const* /*criteria*/) override
|
||||
{
|
||||
if (sRandomPlayerbotMgr->IsRandomBot(player) && (achievement->flags == 256 || achievement->flags == 768))
|
||||
if (sRandomPlayerbotMgr->IsRandomBot(player))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnPlayerBeforeAchievementComplete(Player* player, AchievementEntry const* /*achievement*/) override
|
||||
{
|
||||
if (sRandomPlayerbotMgr->IsRandomBot(player))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnPlayerGiveXP(Player* player, uint32& amount, Unit* /*victim*/, uint8 /*xpSource*/) override
|
||||
{
|
||||
// early return
|
||||
if (sPlayerbotAIConfig->randomBotXPRate == 1.0 || !player)
|
||||
if (!player->GetSession()->IsBot())
|
||||
return;
|
||||
|
||||
if (!sRandomPlayerbotMgr->IsRandomBot(player))
|
||||
return;
|
||||
|
||||
// no XP multiplier, when player is no bot.
|
||||
if (!player->GetSession()->IsBot() || !sRandomPlayerbotMgr->IsRandomBot(player))
|
||||
return;
|
||||
|
||||
// no XP multiplier, when bot is in a group with a real player.
|
||||
if (Group* group = player->GetGroup())
|
||||
if (sPlayerbotAIConfig->randomBotXPRate != 1.0)
|
||||
{
|
||||
for (GroupReference* gref = group->GetFirstMember(); gref; gref = gref->next())
|
||||
{
|
||||
Player* member = gref->GetSource();
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!member->GetSession()->IsBot())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
amount = static_cast<uint32>(std::round(static_cast<float>(amount) * sPlayerbotAIConfig->randomBotXPRate));
|
||||
}
|
||||
|
||||
// otherwise apply bot XP multiplier.
|
||||
amount = static_cast<uint32>(std::round(static_cast<float>(amount) * sPlayerbotAIConfig->randomBotXPRate));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -299,7 +288,7 @@ public:
|
||||
LOG_INFO("server.loading", "╚══════════════════════════════════════════════════════════╝");
|
||||
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
|
||||
LOG_INFO("server.loading", " ");
|
||||
LOG_INFO("server.loading", "Load Playerbots Config...");
|
||||
|
||||
@@ -400,43 +389,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class PlayerBotsBGScript : public BGScript
|
||||
{
|
||||
public:
|
||||
PlayerBotsBGScript() : BGScript("PlayerBotsBGScript") {}
|
||||
|
||||
void OnBattlegroundStart(Battleground* bg) override
|
||||
{
|
||||
BGStrategyData data;
|
||||
|
||||
switch (bg->GetBgTypeID())
|
||||
{
|
||||
case BATTLEGROUND_WS:
|
||||
data.allianceStrategy = urand(0, WS_STRATEGY_MAX - 1);
|
||||
data.hordeStrategy = urand(0, WS_STRATEGY_MAX - 1);
|
||||
break;
|
||||
case BATTLEGROUND_AB:
|
||||
data.allianceStrategy = urand(0, AB_STRATEGY_MAX - 1);
|
||||
data.hordeStrategy = urand(0, AB_STRATEGY_MAX - 1);
|
||||
break;
|
||||
case BATTLEGROUND_AV:
|
||||
data.allianceStrategy = urand(0, AV_STRATEGY_MAX - 1);
|
||||
data.hordeStrategy = urand(0, AV_STRATEGY_MAX - 1);
|
||||
break;
|
||||
case BATTLEGROUND_EY:
|
||||
data.allianceStrategy = urand(0, EY_STRATEGY_MAX - 1);
|
||||
data.hordeStrategy = urand(0, EY_STRATEGY_MAX - 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
bgStrategies[bg->GetInstanceID()] = data;
|
||||
}
|
||||
|
||||
void OnBattlegroundEnd(Battleground* bg, TeamId /*winnerTeam*/) override { bgStrategies.erase(bg->GetInstanceID()); }
|
||||
};
|
||||
|
||||
void AddPlayerbotsScripts()
|
||||
{
|
||||
new PlayerbotsDatabaseScript();
|
||||
@@ -445,7 +397,6 @@ void AddPlayerbotsScripts()
|
||||
new PlayerbotsServerScript();
|
||||
new PlayerbotsWorldScript();
|
||||
new PlayerbotsScript();
|
||||
new PlayerBotsBGScript();
|
||||
|
||||
AddSC_playerbots_commandscript();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "RandomItemMgr.h"
|
||||
@@ -2360,7 +2360,7 @@ void RandomItemMgr::BuildPotionCache()
|
||||
(proto->SubClass != ITEM_SUBCLASS_POTION && proto->SubClass != ITEM_SUBCLASS_FLASK) ||
|
||||
proto->Bonding != NO_BIND)
|
||||
continue;
|
||||
|
||||
|
||||
uint32 requiredLevel = proto->RequiredLevel;
|
||||
if (requiredLevel > level || (level > 13 && requiredLevel < level - 13))
|
||||
continue;
|
||||
@@ -2374,10 +2374,10 @@ void RandomItemMgr::BuildPotionCache()
|
||||
if (proto->Duration & 0x80000000)
|
||||
continue;
|
||||
|
||||
|
||||
|
||||
if (proto->AllowableClass != -1)
|
||||
continue;
|
||||
|
||||
|
||||
bool hybrid = false;
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(proto->Spells[0].SpellId);
|
||||
if (!spellInfo)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_RANDOMITEMMGR_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "RandomPlayerbotFactory.h"
|
||||
@@ -15,9 +15,6 @@
|
||||
#include "SharedDefines.h"
|
||||
#include "SocialMgr.h"
|
||||
#include "Timer.h"
|
||||
#include "Guild.h" // EmblemInfo::SaveToDB
|
||||
#include "Log.h"
|
||||
#include "GuildMgr.h"
|
||||
|
||||
std::map<uint8, std::vector<uint8>> RandomPlayerbotFactory::availableRaces;
|
||||
|
||||
@@ -396,118 +393,37 @@ std::string const RandomPlayerbotFactory::CreateRandomBotName(NameRaceAndGender
|
||||
return std::move(botName);
|
||||
}
|
||||
|
||||
// Calculates the total number of required accounts, either using the specified randomBotAccountCount
|
||||
// or determining it dynamically based on MaxRandomBots, EnablePeriodicOnlineOffline and its ratio,
|
||||
// and AddClassAccountPoolSize. The system also factors in the types of existing account, as assigned by
|
||||
// AssignAccountTypes()
|
||||
uint32 RandomPlayerbotFactory::CalculateTotalAccountCount()
|
||||
{
|
||||
// Reset account types if features are disabled
|
||||
// Reset is done here to precede needed accounts calculations
|
||||
if (sPlayerbotAIConfig->maxRandomBots == 0 || sPlayerbotAIConfig->addClassAccountPoolSize == 0)
|
||||
{
|
||||
if (sPlayerbotAIConfig->maxRandomBots == 0)
|
||||
{
|
||||
PlayerbotsDatabase.Execute("UPDATE playerbots_account_type SET account_type = 0 WHERE account_type = 1");
|
||||
LOG_INFO("playerbots", "MaxRandomBots set to 0, any RNDbot accounts (type 1) will be unassigned (type 0)");
|
||||
}
|
||||
if (sPlayerbotAIConfig->addClassAccountPoolSize == 0)
|
||||
{
|
||||
PlayerbotsDatabase.Execute("UPDATE playerbots_account_type SET account_type = 0 WHERE account_type = 2");
|
||||
LOG_INFO("playerbots", "AddClassAccountPoolSize set to 0, any AddClass accounts (type 2) will be unassigned (type 0)");
|
||||
}
|
||||
|
||||
// Wait for DB to reflect the change, up to 1 second max. This is needed to make sure other logs don't show wrong info
|
||||
for (int waited = 0; waited < 1000; waited += 50)
|
||||
{
|
||||
QueryResult res = PlayerbotsDatabase.Query("SELECT COUNT(*) FROM playerbots_account_type WHERE account_type IN ({}, {})",
|
||||
sPlayerbotAIConfig->maxRandomBots == 0 ? 1 : -1,
|
||||
sPlayerbotAIConfig->addClassAccountPoolSize == 0 ? 2 : -1);
|
||||
|
||||
if (!res || res->Fetch()[0].Get<uint64>() == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50)); // Extra 50ms fixed delay for safety.
|
||||
}
|
||||
}
|
||||
// Calculates the total number of required accounts, either using the specified randomBotAccountCount
|
||||
// or determining it dynamically based on the WOTLK condition, max random bots, rotation pool size,
|
||||
// and additional class account pool size.
|
||||
|
||||
// Checks if randomBotAccountCount is set, otherwise calculate it dynamically.
|
||||
if (sPlayerbotAIConfig->randomBotAccountCount > 0)
|
||||
return sPlayerbotAIConfig->randomBotAccountCount;
|
||||
|
||||
// Check existing account types
|
||||
uint32 existingRndBotAccounts = 0;
|
||||
uint32 existingAddClassAccounts = 0;
|
||||
uint32 existingUnassignedAccounts = 0;
|
||||
// Avoid creating accounts if both maxRandom & ClassBots are set to zero.
|
||||
if (sPlayerbotAIConfig->maxRandomBots == 0 &&
|
||||
sPlayerbotAIConfig->addClassAccountPoolSize == 0)
|
||||
return 0;
|
||||
|
||||
QueryResult typeCheck = PlayerbotsDatabase.Query("SELECT account_type, COUNT(*) FROM playerbots_account_type GROUP BY account_type");
|
||||
if (typeCheck)
|
||||
{
|
||||
do
|
||||
{
|
||||
Field* fields = typeCheck->Fetch();
|
||||
uint8 accountType = fields[0].Get<uint8>();
|
||||
uint32 count = fields[1].Get<uint32>();
|
||||
//bool isWOTLK = sWorld->getIntConfig(CONFIG_EXPANSION) == EXPANSION_WRATH_OF_THE_LICH_KING; //not used, line marked for removal.
|
||||
|
||||
if (accountType == 0) existingUnassignedAccounts = count;
|
||||
else if (accountType == 1) existingRndBotAccounts = count;
|
||||
else if (accountType == 2) existingAddClassAccounts = count;
|
||||
} while (typeCheck->NextRow());
|
||||
}
|
||||
|
||||
// Determine divisor based on Death Knight login eligibility and requested A&H faction ratio
|
||||
// Determine divisor based on WOTLK condition
|
||||
int divisor = CalculateAvailableCharsPerAccount();
|
||||
|
||||
// Calculate max bots
|
||||
int maxBots = sPlayerbotAIConfig->maxRandomBots;
|
||||
// Take periodic online - offline into account
|
||||
// Take perodic online - offline into account
|
||||
if (sPlayerbotAIConfig->enablePeriodicOnlineOffline)
|
||||
{
|
||||
maxBots *= sPlayerbotAIConfig->periodicOnlineOfflineRatio;
|
||||
}
|
||||
|
||||
// Calculate number of accounts needed for RNDbots
|
||||
// Result is rounded up for maxBots not cleanly divisible by the divisor
|
||||
uint32 neededRndBotAccounts = (maxBots + divisor - 1) / divisor;
|
||||
uint32 neededAddClassAccounts = sPlayerbotAIConfig->addClassAccountPoolSize;
|
||||
|
||||
// Start with existing total
|
||||
uint32 existingTotal = existingRndBotAccounts + existingAddClassAccounts + existingUnassignedAccounts;
|
||||
|
||||
// Calculate shortfalls after using unassigned accounts
|
||||
uint32 availableUnassigned = existingUnassignedAccounts;
|
||||
uint32 additionalAccountsNeeded = 0;
|
||||
|
||||
// Check RNDbot needs
|
||||
if (neededRndBotAccounts > existingRndBotAccounts)
|
||||
{
|
||||
uint32 rndBotShortfall = neededRndBotAccounts - existingRndBotAccounts;
|
||||
if (rndBotShortfall <= availableUnassigned)
|
||||
availableUnassigned -= rndBotShortfall;
|
||||
else
|
||||
{
|
||||
additionalAccountsNeeded += (rndBotShortfall - availableUnassigned);
|
||||
availableUnassigned = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Check AddClass needs
|
||||
if (neededAddClassAccounts > existingAddClassAccounts)
|
||||
{
|
||||
uint32 addClassShortfall = neededAddClassAccounts - existingAddClassAccounts;
|
||||
if (addClassShortfall <= availableUnassigned)
|
||||
availableUnassigned -= addClassShortfall;
|
||||
else
|
||||
{
|
||||
additionalAccountsNeeded += (addClassShortfall - availableUnassigned);
|
||||
availableUnassigned = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Return existing total plus any additional accounts needed
|
||||
return existingTotal + additionalAccountsNeeded;
|
||||
// Calculate base accounts, add class account pool size, and add 1 as a fixed offset
|
||||
uint32 baseAccounts = maxBots / divisor;
|
||||
return baseAccounts + sPlayerbotAIConfig->addClassAccountPoolSize + 1;
|
||||
}
|
||||
|
||||
uint32 RandomPlayerbotFactory::CalculateAvailableCharsPerAccount()
|
||||
@@ -559,9 +475,8 @@ void RandomPlayerbotFactory::CreateRandomBots()
|
||||
LOG_INFO("playerbots", "Deleting all random bot characters and accounts...");
|
||||
|
||||
// First execute all the cleanup SQL commands
|
||||
// Clear playerbots_random_bots and playerbots_account_type
|
||||
// Clear playerbots_random_bots table
|
||||
PlayerbotsDatabase.Execute("DELETE FROM playerbots_random_bots");
|
||||
PlayerbotsDatabase.Execute("DELETE FROM playerbots_account_type");
|
||||
|
||||
// Get the database names dynamically
|
||||
std::string loginDBName = LoginDatabase.GetConnectionInfo()->database;
|
||||
@@ -571,13 +486,6 @@ void RandomPlayerbotFactory::CreateRandomBots()
|
||||
CharacterDatabase.Execute("DELETE FROM characters WHERE account IN (SELECT id FROM " + loginDBName + ".account WHERE username LIKE '{}%%')",
|
||||
sPlayerbotAIConfig->randomBotAccountPrefix.c_str());
|
||||
|
||||
// Wait for the characters to be deleted before proceeding to dependent deletes
|
||||
while (CharacterDatabase.QueueSize())
|
||||
{
|
||||
std::this_thread::sleep_for(1s);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // Extra 100ms fixed delay for safety.
|
||||
|
||||
// Clean up orphaned entries in playerbots_guild_tasks
|
||||
PlayerbotsDatabase.Execute("DELETE FROM playerbots_guild_tasks WHERE owner NOT IN (SELECT guid FROM " + characterDBName + ".characters)");
|
||||
|
||||
@@ -592,13 +500,11 @@ void RandomPlayerbotFactory::CreateRandomBots()
|
||||
CharacterDatabase.Execute("DELETE FROM character_achievement WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_achievement_progress WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_action WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_arena_stats WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_aura WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_entry_point WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_glyphs WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_homebind WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM character_inventory WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
CharacterDatabase.Execute("DELETE FROM item_instance WHERE owner_guid NOT IN (SELECT guid FROM characters) AND owner_guid > 0");
|
||||
CharacterDatabase.Execute("DELETE FROM character_inventory WHERE guid NOT IN (SELECT guid FROM characters)");
|
||||
|
||||
// Clean up pet data
|
||||
CharacterDatabase.Execute("DELETE FROM character_pet WHERE owner NOT IN (SELECT guid FROM characters)");
|
||||
@@ -653,23 +559,11 @@ void RandomPlayerbotFactory::CreateRandomBots()
|
||||
|
||||
uint32 timer = getMSTime();
|
||||
|
||||
// After ALL deletions, make sure data is commited to DB
|
||||
LoginDatabase.Execute("COMMIT");
|
||||
CharacterDatabase.Execute("COMMIT");
|
||||
PlayerbotsDatabase.Execute("COMMIT");
|
||||
|
||||
// Wait for all pending database operations to complete
|
||||
while (LoginDatabase.QueueSize() || CharacterDatabase.QueueSize() || PlayerbotsDatabase.QueueSize())
|
||||
{
|
||||
std::this_thread::sleep_for(1s);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // Extra 100ms fixed delay for safety.
|
||||
|
||||
// Flush tables to ensure all data in memory are written to disk
|
||||
LoginDatabase.Execute("FLUSH TABLES");
|
||||
CharacterDatabase.Execute("FLUSH TABLES");
|
||||
PlayerbotsDatabase.Execute("FLUSH TABLES");
|
||||
|
||||
LOG_INFO("playerbots", ">> Random bot accounts and data deleted in {} ms", GetMSTimeDiffToNow(timer));
|
||||
LOG_INFO("playerbots", "Please reset the AiPlayerbot.DeleteRandomBotAccounts to 0 and restart the server...");
|
||||
World::StopNow(SHUTDOWN_EXIT_CODE);
|
||||
@@ -788,7 +682,7 @@ void RandomPlayerbotFactory::CreateRandomBots()
|
||||
LOG_DEBUG("playerbots", "Creating random bot characters for account: [{}/{}]", accountNumber + 1, totalAccountCount);
|
||||
RandomPlayerbotFactory factory(accountId);
|
||||
|
||||
WorldSession* session = new WorldSession(accountId, "", 0x0, nullptr, SEC_PLAYER, EXPANSION_WRATH_OF_THE_LICH_KING,
|
||||
WorldSession* session = new WorldSession(accountId, "", nullptr, SEC_PLAYER, EXPANSION_WRATH_OF_THE_LICH_KING,
|
||||
time_t(0), LOCALE_enUS, 0, false, false, 0, true);
|
||||
sessionBots.push_back(session);
|
||||
|
||||
@@ -893,9 +787,7 @@ void RandomPlayerbotFactory::CreateRandomGuilds()
|
||||
}
|
||||
}
|
||||
|
||||
// Create up to randomBotGuildCount by counting only EFFECTIVE creations
|
||||
uint32 createdThisRun = 0;
|
||||
for (; guildNumber < sPlayerbotAIConfig->randomBotGuildCount; /* ++guildNumber -> done only if creation */)
|
||||
for (; guildNumber < sPlayerbotAIConfig->randomBotGuildCount; ++guildNumber)
|
||||
{
|
||||
std::string const guildName = CreateRandomGuildName();
|
||||
if (guildName.empty())
|
||||
@@ -907,29 +799,21 @@ void RandomPlayerbotFactory::CreateRandomGuilds()
|
||||
if (availableLeaders.empty())
|
||||
{
|
||||
LOG_ERROR("playerbots", "No leaders for random guilds available");
|
||||
break; // no more leaders: we can no longer progress without distorting the counter
|
||||
continue;
|
||||
}
|
||||
|
||||
uint32 index = urand(0, availableLeaders.size() - 1);
|
||||
ObjectGuid leader = availableLeaders[index];
|
||||
availableLeaders.erase(availableLeaders.begin() + index); // Removes the chosen leader to avoid re-selecting it repeatedly
|
||||
|
||||
Player* player = ObjectAccessor::FindPlayer(leader);
|
||||
if (!player)
|
||||
{
|
||||
LOG_ERROR("playerbots", "ObjectAccessor Cannot find player to set leader for guild {} . Skipped...",
|
||||
guildName.c_str());
|
||||
// we will try with other leaders in the next round (guildNumber is not incremented)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player->GetGuildId())
|
||||
{
|
||||
// leader already in guild -> we don't advance the counter, we move on to the next one
|
||||
continue;
|
||||
}
|
||||
|
||||
LOG_DEBUG("playerbots", "Creating guild name='{}' leader='{}'...", guildName.c_str(), player->GetName().c_str());
|
||||
|
||||
Guild* guild = new Guild();
|
||||
if (!guild->Create(player, guildName))
|
||||
@@ -942,8 +826,6 @@ void RandomPlayerbotFactory::CreateRandomGuilds()
|
||||
|
||||
sGuildMgr->AddGuild(guild);
|
||||
|
||||
LOG_DEBUG("playerbots", "Guild created: id={} name='{}'", guild->GetId(), guildName.c_str());
|
||||
|
||||
// create random emblem
|
||||
uint32 st, cl, br, bc, bg;
|
||||
bg = urand(0, 51);
|
||||
@@ -951,38 +833,13 @@ void RandomPlayerbotFactory::CreateRandomGuilds()
|
||||
cl = urand(0, 17);
|
||||
br = urand(0, 7);
|
||||
st = urand(0, 180);
|
||||
|
||||
LOG_DEBUG("playerbots",
|
||||
"[TABARD] new guild id={} random -> style={}, color={}, borderStyle={}, borderColor={}, bgColor={}",
|
||||
guild->GetId(), st, cl, br, bc, bg);
|
||||
|
||||
// populate guild table with a random tabard design
|
||||
CharacterDatabase.Execute(
|
||||
"UPDATE guild SET EmblemStyle={}, EmblemColor={}, BorderStyle={}, BorderColor={}, BackgroundColor={} "
|
||||
"WHERE guildid={}",
|
||||
st, cl, br, bc, bg, guild->GetId());
|
||||
LOG_DEBUG("playerbots", "[TABARD] UPDATE done for guild id={}", guild->GetId());
|
||||
|
||||
// Immediate reading for log
|
||||
if (QueryResult qr = CharacterDatabase.Query(
|
||||
"SELECT EmblemStyle,EmblemColor,BorderStyle,BorderColor,BackgroundColor FROM guild WHERE guildid={}",
|
||||
guild->GetId()))
|
||||
{
|
||||
Field* f = qr->Fetch();
|
||||
LOG_DEBUG("playerbots",
|
||||
"[TABARD] DB check guild id={} => style={}, color={}, borderStyle={}, borderColor={}, bgColor={}",
|
||||
guild->GetId(), f[0].Get<uint8>(), f[1].Get<uint8>(), f[2].Get<uint8>(), f[3].Get<uint8>(), f[4].Get<uint8>());
|
||||
}
|
||||
EmblemInfo emblemInfo(st, cl, br, bc, bg);
|
||||
guild->HandleSetEmblem(emblemInfo);
|
||||
|
||||
sPlayerbotAIConfig->randomBotGuilds.push_back(guild->GetId());
|
||||
// The guild is only counted if it is actually created
|
||||
++guildNumber;
|
||||
++createdThisRun;
|
||||
}
|
||||
|
||||
// Shows the true total and how many were created during this run
|
||||
LOG_INFO("playerbots", "{} random bot guilds available (created this run: {})",
|
||||
uint32(sPlayerbotAIConfig->randomBotGuilds.size()), createdThisRun);
|
||||
LOG_INFO("playerbots", "{} random bot guilds available", guildNumber);
|
||||
}
|
||||
|
||||
std::string const RandomPlayerbotFactory::CreateRandomGuildName()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_RANDOMPLAYERBOTFACTORY_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_RANDOMPLAYERBOTMGR_H
|
||||
@@ -60,6 +60,7 @@ public:
|
||||
|
||||
bool IsEmpty() { return !lastChangeTime; }
|
||||
|
||||
public:
|
||||
uint32 value;
|
||||
uint32 lastChangeTime;
|
||||
uint32 validIn;
|
||||
@@ -103,6 +104,10 @@ public:
|
||||
void LogPlayerLocation();
|
||||
void UpdateAIInternal(uint32 elapsed, bool minimal = false) override;
|
||||
|
||||
private:
|
||||
//void ScaleBotActivity();
|
||||
|
||||
public:
|
||||
uint32 activeBots = 0;
|
||||
static bool HandlePlayerbotConsoleCommand(ChatHandler* handler, char const* args);
|
||||
bool IsRandomBot(Player* bot);
|
||||
@@ -175,24 +180,13 @@ public:
|
||||
std::map<uint8, std::vector<WorldLocation>> locsPerLevelCache;
|
||||
std::map<uint8, std::vector<WorldLocation>> allianceStarterPerLevelCache;
|
||||
std::map<uint8, std::vector<WorldLocation>> hordeStarterPerLevelCache;
|
||||
std::vector<uint32> allianceFlightMasterCache;
|
||||
std::vector<uint32> hordeFlightMasterCache;
|
||||
struct LevelBracket {
|
||||
uint32 low;
|
||||
uint32 high;
|
||||
bool InsideBracket(uint32 val) { return val >= low && val <= high; }
|
||||
};
|
||||
std::map<uint32, LevelBracket> zone2LevelBracket;
|
||||
struct BankerLocation {
|
||||
WorldLocation loc;
|
||||
uint32 entry;
|
||||
};
|
||||
std::map<uint8, std::vector<BankerLocation>> bankerLocsPerLevelCache;
|
||||
|
||||
// Account type management
|
||||
void AssignAccountTypes();
|
||||
bool IsAccountType(uint32 accountId, uint8 accountType);
|
||||
|
||||
std::map<uint8, std::vector<WorldLocation>> bankerLocsPerLevelCache;
|
||||
protected:
|
||||
void OnBotLoginInternal(Player* const bot) override;
|
||||
|
||||
@@ -222,8 +216,10 @@ private:
|
||||
void RandomTeleport(Player* bot, std::vector<WorldLocation>& locs, bool hearth = false);
|
||||
uint32 GetZoneLevel(uint16 mapId, float teleX, float teleY, float teleZ);
|
||||
typedef void (RandomPlayerbotMgr::*ConsoleCommandHandler)(Player*);
|
||||
|
||||
std::vector<Player*> players;
|
||||
uint32 processTicks;
|
||||
|
||||
|
||||
// std::map<uint32, std::vector<WorldLocation>> rpgLocsCache;
|
||||
std::map<uint32, std::map<uint32, std::vector<WorldLocation>>> rpgLocsCacheLevel;
|
||||
@@ -232,12 +228,6 @@ private:
|
||||
std::list<uint32> currentBots;
|
||||
uint32 bgBotsCount;
|
||||
uint32 playersLevel;
|
||||
|
||||
// Account lists
|
||||
std::vector<uint32> rndBotTypeAccounts; // Accounts marked as RNDbot (type 1)
|
||||
std::vector<uint32> addClassTypeAccounts; // Accounts marked as AddClass (type 2)
|
||||
|
||||
//void ScaleBotActivity(); // Deprecated function
|
||||
};
|
||||
|
||||
#define sRandomPlayerbotMgr RandomPlayerbotMgr::instance()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "ServerFacade.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_SERVERFACADE_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "Talentspec.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_TALENTSPEC_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "TravelMgr.h"
|
||||
@@ -3336,7 +3336,7 @@ void TravelMgr::LoadQuestTravelTable()
|
||||
uint32 accountId = fields[0].Get<uint32>();
|
||||
|
||||
WorldSession* session =
|
||||
new WorldSession(accountId, "", 0x0, nullptr, SEC_PLAYER, EXPANSION_WRATH_OF_THE_LICH_KING, time_t(0),
|
||||
new WorldSession(accountId, "", nullptr, SEC_PLAYER, EXPANSION_WRATH_OF_THE_LICH_KING, time_t(0),
|
||||
LOCALE_enUS, 0, false, false, 0, true);
|
||||
|
||||
std::vector<std::pair<std::pair<uint32, uint32>, uint32>> classSpecLevel;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_TRAVELMGR_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "TravelNode.h"
|
||||
@@ -2299,7 +2299,7 @@ void TravelNodeMap::printNodeStore()
|
||||
}
|
||||
}
|
||||
|
||||
sPlayerbotAIConfig->log(nodeStore, " }");
|
||||
sPlayerbotAIConfig->log(nodeStore, " }");
|
||||
sPlayerbotAIConfig->log(nodeStore, "};");
|
||||
|
||||
printf("\r [Done] \r\x3D");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_TRAVELNODE_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_PLAYERBOTFACTORY_H
|
||||
@@ -45,6 +45,63 @@ enum spec : uint8
|
||||
ROLE_CDPS = 3
|
||||
};*/
|
||||
|
||||
enum PriorizedConsumables
|
||||
{
|
||||
CONSUM_ID_ROUGH_WEIGHTSTONE = 3239,
|
||||
CONSUM_ID_COARSE_WEIGHTSTONE = 3239,
|
||||
CONSUM_ID_HEAVY_WEIGHTSTONE = 3241,
|
||||
CONSUM_ID_SOLID_WEIGHTSTONE = 7965,
|
||||
CONSUM_ID_DENSE_WEIGHTSTONE = 12643,
|
||||
CONSUM_ID_FEL_WEIGHTSTONE = 28420,
|
||||
CONSUM_ID_ADAMANTITE_WEIGHTSTONE = 28421,
|
||||
CONSUM_ID_ROUGH_SHARPENING_STONE = 2862,
|
||||
CONSUM_ID_COARSE_SHARPENING_STONE = 2863,
|
||||
CONSUM_ID_HEAVY_SHARPENING_STONE = 2871,
|
||||
CONSUM_ID_SOL_SHARPENING_STONE = 7964,
|
||||
CONSUM_ID_DENSE_SHARPENING_STONE = 12404,
|
||||
CONSUM_ID_ELEMENTAL_SHARPENING_STONE = 18262,
|
||||
CONSUM_ID_CONSECRATED_SHARPENING_STONE = 23122,
|
||||
CONSUM_ID_FEL_SHARPENING_STONE = 23528,
|
||||
CONSUM_ID_ADAMANTITE_SHARPENING_STONE = 23529,
|
||||
CONSUM_ID_LINEN_BANDAGE = 1251,
|
||||
CONSUM_ID_HEAVY_LINEN_BANDAGE = 2581,
|
||||
CONSUM_ID_WOOL_BANDAGE = 3530,
|
||||
CONSUM_ID_HEAVY_WOOL_BANDAGE = 3531,
|
||||
CONSUM_ID_SILK_BANDAGE = 6450,
|
||||
CONSUM_ID_HEAVY_SILK_BANDAGE = 6451,
|
||||
CONSUM_ID_MAGEWEAVE_BANDAGE = 8544,
|
||||
CONSUM_ID_HEAVY_MAGEWEAVE_BANDAGE = 8545,
|
||||
CONSUM_ID_RUNECLOTH_BANDAGE = 14529,
|
||||
CONSUM_ID_HEAVY_RUNECLOTH_BANDAGE = 14530,
|
||||
CONSUM_ID_NETHERWEAVE_BANDAGE = 21990,
|
||||
CONSUM_ID_HEAVY_NETHERWEAVE_BANDAGE = 21991,
|
||||
CONSUM_ID_BRILLIANT_MANA_OIL = 20748,
|
||||
CONSUM_ID_MINOR_MANA_OIL = 20745,
|
||||
CONSUM_ID_SUPERIOR_MANA_OIL = 22521,
|
||||
CONSUM_ID_LESSER_MANA_OIL = 20747,
|
||||
CONSUM_ID_BRILLIANT_WIZARD_OIL = 20749,
|
||||
CONSUM_ID_MINOR_WIZARD_OIL = 20744,
|
||||
CONSUM_ID_SUPERIOR_WIZARD_OIL = 22522,
|
||||
CONSUM_ID_WIZARD_OIL = 20750,
|
||||
CONSUM_ID_LESSER_WIZARD_OIL = 20746,
|
||||
CONSUM_ID_INSTANT_POISON = 6947,
|
||||
CONSUM_ID_INSTANT_POISON_II = 6949,
|
||||
CONSUM_ID_INSTANT_POISON_III = 6950,
|
||||
CONSUM_ID_INSTANT_POISON_IV = 8926,
|
||||
CONSUM_ID_INSTANT_POISON_V = 8927,
|
||||
CONSUM_ID_INSTANT_POISON_VI = 8928,
|
||||
CONSUM_ID_INSTANT_POISON_VII = 21927,
|
||||
CONSUM_ID_DEADLY_POISON = 2892,
|
||||
CONSUM_ID_DEADLY_POISON_II = 2893,
|
||||
CONSUM_ID_DEADLY_POISON_III = 8984,
|
||||
CONSUM_ID_DEADLY_POISON_IV = 8985,
|
||||
CONSUM_ID_DEADLY_POISON_V = 20844,
|
||||
CONSUM_ID_DEADLY_POISON_VI = 22053,
|
||||
CONSUM_ID_DEADLY_POISON_VII = 22054
|
||||
};
|
||||
|
||||
#define MAX_CONSUM_ID 28
|
||||
|
||||
class PlayerbotFactory
|
||||
{
|
||||
public:
|
||||
@@ -71,10 +128,8 @@ public:
|
||||
void InitAmmo();
|
||||
static uint32 CalcMixedGearScore(uint32 gs, uint32 quality);
|
||||
void InitPetTalents();
|
||||
void CleanupConsumables();
|
||||
|
||||
void InitReagents();
|
||||
void InitConsumables();
|
||||
void InitPotions();
|
||||
void InitGlyphs(bool increment = false);
|
||||
void InitFood();
|
||||
void InitMounts();
|
||||
@@ -85,7 +140,8 @@ public:
|
||||
void InitKeyring();
|
||||
void InitReputation();
|
||||
void InitAttunementQuests();
|
||||
|
||||
void InitPotions();
|
||||
|
||||
private:
|
||||
void Prepare();
|
||||
// void InitSecondEquipmentSet();
|
||||
@@ -121,6 +177,7 @@ private:
|
||||
void InitGuild();
|
||||
void InitArenaTeam();
|
||||
void InitImmersive();
|
||||
void AddConsumables();
|
||||
static void AddPrevQuests(uint32 questId, std::list<uint32>& questIds);
|
||||
void LoadEnchantContainer();
|
||||
void ApplyEnchantTemplate();
|
||||
|
||||
@@ -29,12 +29,12 @@ void StatsCollector::CollectItemStats(ItemTemplate const* proto)
|
||||
{
|
||||
if (proto->IsRangedWeapon())
|
||||
{
|
||||
float val = (proto->Damage[0].DamageMin + proto->Damage[0].DamageMax) * 1000 / 2 / proto->Delay;
|
||||
uint32 val = (proto->Damage[0].DamageMin + proto->Damage[0].DamageMax) * 1000 / 2 / proto->Delay;
|
||||
stats[STATS_TYPE_RANGED_DPS] += val;
|
||||
}
|
||||
else if (proto->IsWeapon())
|
||||
{
|
||||
float val = (proto->Damage[0].DamageMin + proto->Damage[0].DamageMax) * 1000 / 2 / proto->Delay;
|
||||
uint32 val = (proto->Damage[0].DamageMin + proto->Damage[0].DamageMax) * 1000 / 2 / proto->Delay;
|
||||
stats[STATS_TYPE_MELEE_DPS] += val;
|
||||
}
|
||||
stats[STATS_TYPE_ARMOR] += proto->Armor;
|
||||
@@ -436,10 +436,10 @@ void StatsCollector::CollectByItemStatType(uint32 itemStatType, int32 val)
|
||||
switch (itemStatType)
|
||||
{
|
||||
case ITEM_MOD_MANA:
|
||||
stats[STATS_TYPE_MANA_REGENERATION] += (float)val / 10;
|
||||
stats[STATS_TYPE_MANA_REGENERATION] += val / 10;
|
||||
break;
|
||||
case ITEM_MOD_HEALTH:
|
||||
stats[STATS_TYPE_STAMINA] += (float)val / 15;
|
||||
stats[STATS_TYPE_STAMINA] += val / 15;
|
||||
break;
|
||||
case ITEM_MOD_AGILITY:
|
||||
stats[STATS_TYPE_AGILITY] += val;
|
||||
@@ -747,11 +747,11 @@ void StatsCollector::HandleApplyAura(const SpellEffectInfo& effectInfo, float mu
|
||||
}
|
||||
}
|
||||
|
||||
float StatsCollector::AverageValue(const SpellEffectInfo& effectInfo)
|
||||
int32 StatsCollector::AverageValue(const SpellEffectInfo& effectInfo)
|
||||
{
|
||||
// float basePointsPerLevel = effectInfo.RealPointsPerLevel; //not used, line marked for removal.
|
||||
float basePoints = effectInfo.BasePoints;
|
||||
int32 randomPoints = effectInfo.DieSides;
|
||||
int32 basePoints = effectInfo.BasePoints;
|
||||
int32 randomPoints = int32(effectInfo.DieSides);
|
||||
|
||||
switch (randomPoints)
|
||||
{
|
||||
@@ -761,7 +761,7 @@ float StatsCollector::AverageValue(const SpellEffectInfo& effectInfo)
|
||||
basePoints += 1;
|
||||
break;
|
||||
default:
|
||||
float randvalue = (1 + randomPoints) / 2.0f;
|
||||
int32 randvalue = (1 + randomPoints) / 2;
|
||||
basePoints += randvalue;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_STATSCOLLECTOR_H
|
||||
@@ -71,7 +71,7 @@ public:
|
||||
bool CheckSpellValidation(uint32 spellFamilyName, flag96 spelFalimyFlags, bool strict = true);
|
||||
|
||||
public:
|
||||
float stats[STATS_TYPE_MAX];
|
||||
int32 stats[STATS_TYPE_MAX];
|
||||
|
||||
private:
|
||||
void CollectByItemStatType(uint32 itemStatType, int32 val);
|
||||
@@ -80,7 +80,7 @@ private:
|
||||
|
||||
void HandleApplyAura(const SpellEffectInfo& effectInfo, float multiplier, bool canNextTrigger,
|
||||
uint32 triggerCooldown);
|
||||
float AverageValue(const SpellEffectInfo& effectInfo);
|
||||
int32 AverageValue(const SpellEffectInfo& effectInfo);
|
||||
|
||||
private:
|
||||
CollectorType type_;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "StatsWeightCalculator.h"
|
||||
@@ -33,7 +33,6 @@ StatsWeightCalculator::StatsWeightCalculator(Player* player) : player_(player)
|
||||
else
|
||||
type_ = CollectorType::RANGED;
|
||||
cls = player->getClass();
|
||||
lvl = player->GetLevel();
|
||||
tab = AiFactory::GetPlayerSpecTab(player);
|
||||
collector_ = std::make_unique<StatsCollector>(type_, cls);
|
||||
|
||||
@@ -71,7 +70,7 @@ float StatsWeightCalculator::CalculateItem(uint32 itemId, int32 randomPropertyId
|
||||
Reset();
|
||||
|
||||
collector_->CollectItemStats(proto);
|
||||
|
||||
|
||||
if (randomPropertyIds != 0)
|
||||
CalculateRandomProperty(randomPropertyIds, itemId);
|
||||
|
||||
@@ -182,9 +181,8 @@ void StatsWeightCalculator::GenerateBasicWeights(Player* player)
|
||||
stats_weights_[STATS_TYPE_ARMOR] += 0.001f;
|
||||
stats_weights_[STATS_TYPE_BONUS] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 0.01f;
|
||||
stats_weights_[STATS_TYPE_RANGED_DPS] += 0.01f;
|
||||
|
||||
if (cls == CLASS_HUNTER && (tab == HUNTER_TAB_BEASTMASTERY || tab == HUNTER_TAB_SURVIVAL))
|
||||
if (cls == CLASS_HUNTER && (tab == HUNTER_TAB_BEASTMASTER || tab == HUNTER_TAB_SURVIVAL))
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 2.5f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
@@ -531,13 +529,13 @@ void StatsWeightCalculator::CalculateItemTypePenalty(ItemTemplate const* proto)
|
||||
// enhancement, rogue, ice dk, unholy dk, shield tank, fury warrior without titan's grip but with duel wield
|
||||
if (((cls == CLASS_SHAMAN && tab == SHAMAN_TAB_ENHANCEMENT && player_->CanDualWield()) ||
|
||||
(cls == CLASS_ROGUE) || (cls == CLASS_DEATH_KNIGHT && tab == DEATHKNIGHT_TAB_FROST) ||
|
||||
(cls == CLASS_WARRIOR && tab == WARRIOR_TAB_FURY && !player_->CanTitanGrip() &&
|
||||
player_->CanDualWield()) ||
|
||||
(cls == CLASS_WARRIOR && tab == WARRIOR_TAB_FURY && !player_->CanTitanGrip() && player_->CanDualWield()) ||
|
||||
(cls == CLASS_WARRIOR && tab == WARRIOR_TAB_PROTECTION) ||
|
||||
(cls == CLASS_PALADIN && tab == PALADIN_TAB_PROTECTION)))
|
||||
{
|
||||
weight_ *= 0.1;
|
||||
}
|
||||
|
||||
}
|
||||
// spec with double hand
|
||||
// fury without duel wield, arms, bear, retribution, blood dk
|
||||
@@ -553,11 +551,15 @@ void StatsWeightCalculator::CalculateItemTypePenalty(ItemTemplate const* proto)
|
||||
weight_ *= 0.1;
|
||||
}
|
||||
// caster's main hand (cannot duel weapon but can equip two-hands stuff)
|
||||
if (cls == CLASS_MAGE || cls == CLASS_PRIEST || cls == CLASS_WARLOCK || cls == CLASS_DRUID ||
|
||||
if (cls == CLASS_MAGE ||
|
||||
cls == CLASS_PRIEST ||
|
||||
cls == CLASS_WARLOCK ||
|
||||
cls == CLASS_DRUID ||
|
||||
(cls == CLASS_SHAMAN && !player_->CanDualWield()))
|
||||
{
|
||||
weight_ *= 0.65;
|
||||
}
|
||||
|
||||
}
|
||||
// fury with titan's grip
|
||||
if ((!isDoubleHand || proto->SubClass == ITEM_SUBCLASS_WEAPON_POLEARM ||
|
||||
@@ -566,16 +568,16 @@ void StatsWeightCalculator::CalculateItemTypePenalty(ItemTemplate const* proto)
|
||||
{
|
||||
weight_ *= 0.1;
|
||||
}
|
||||
|
||||
|
||||
if (cls == CLASS_HUNTER && proto->SubClass == ITEM_SUBCLASS_WEAPON_THROWN)
|
||||
{
|
||||
weight_ *= 0.1;
|
||||
}
|
||||
|
||||
if (lvl >= 10 && cls == CLASS_ROGUE && (tab == ROGUE_TAB_ASSASSINATION || tab == ROGUE_TAB_SUBTLETY) &&
|
||||
proto->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER)
|
||||
|
||||
if (cls == CLASS_ROGUE && (tab == ROGUE_TAB_ASSASSINATION || tab == ROGUE_TAB_SUBTLETY) &&
|
||||
proto->SubClass != ITEM_SUBCLASS_WEAPON_DAGGER)
|
||||
{
|
||||
weight_ *= 1.5;
|
||||
weight_ *= 0.5;
|
||||
}
|
||||
|
||||
if (cls == CLASS_ROGUE && player_->HasAura(13964) &&
|
||||
@@ -658,7 +660,7 @@ void StatsWeightCalculator::ApplyOverflowPenalty(Player* player)
|
||||
else
|
||||
validPoints = 0;
|
||||
}
|
||||
collector_->stats[STATS_TYPE_HIT] = std::min(collector_->stats[STATS_TYPE_HIT], validPoints);
|
||||
collector_->stats[STATS_TYPE_HIT] = std::min(collector_->stats[STATS_TYPE_HIT], (int)validPoints);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -675,7 +677,8 @@ void StatsWeightCalculator::ApplyOverflowPenalty(Player* player)
|
||||
else
|
||||
validPoints = 0;
|
||||
|
||||
collector_->stats[STATS_TYPE_EXPERTISE] = std::min(collector_->stats[STATS_TYPE_EXPERTISE], validPoints);
|
||||
collector_->stats[STATS_TYPE_EXPERTISE] =
|
||||
std::min(collector_->stats[STATS_TYPE_EXPERTISE], (int)validPoints);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -692,7 +695,7 @@ void StatsWeightCalculator::ApplyOverflowPenalty(Player* player)
|
||||
else
|
||||
validPoints = 0;
|
||||
|
||||
collector_->stats[STATS_TYPE_DEFENSE] = std::min(collector_->stats[STATS_TYPE_DEFENSE], validPoints);
|
||||
collector_->stats[STATS_TYPE_DEFENSE] = std::min(collector_->stats[STATS_TYPE_DEFENSE], (int)validPoints);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -711,7 +714,7 @@ void StatsWeightCalculator::ApplyOverflowPenalty(Player* player)
|
||||
validPoints = 0;
|
||||
|
||||
collector_->stats[STATS_TYPE_ARMOR_PENETRATION] =
|
||||
std::min(collector_->stats[STATS_TYPE_ARMOR_PENETRATION], validPoints);
|
||||
std::min(collector_->stats[STATS_TYPE_ARMOR_PENETRATION], (int)validPoints);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_GEARSCORECALCULATOR_H
|
||||
@@ -30,16 +30,16 @@ public:
|
||||
void Reset();
|
||||
float CalculateItem(uint32 itemId, int32 randomPropertyId = 0);
|
||||
float CalculateEnchant(uint32 enchantId);
|
||||
|
||||
|
||||
void SetOverflowPenalty(bool apply) { enable_overflow_penalty_ = apply; }
|
||||
void SetItemSetBonus(bool apply) { enable_item_set_bonus_ = apply; }
|
||||
void SetQualityBlend(bool apply) { enable_quality_blend_ = apply; }
|
||||
|
||||
|
||||
private:
|
||||
void GenerateWeights(Player* player);
|
||||
void GenerateBasicWeights(Player* player);
|
||||
void GenerateAdditionalWeights(Player* player);
|
||||
|
||||
|
||||
void CalculateRandomProperty(int32 randomPropertyId, uint32 itemId);
|
||||
void CalculateItemSetMod(Player* player, ItemTemplate const* proto);
|
||||
void CalculateSocketBonus(Player* player, ItemTemplate const* proto);
|
||||
@@ -57,7 +57,6 @@ private:
|
||||
CollectorType hitOverflowType_;
|
||||
std::unique_ptr<StatsCollector> collector_;
|
||||
uint8 cls;
|
||||
uint8 lvl;
|
||||
int tab;
|
||||
bool enable_overflow_penalty_;
|
||||
bool enable_item_set_bonus_;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "Action.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_ACTION_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "AiObject.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_AIOBJECT_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "AiObjectContext.h"
|
||||
@@ -8,115 +8,59 @@
|
||||
#include "ActionContext.h"
|
||||
#include "ChatActionContext.h"
|
||||
#include "ChatTriggerContext.h"
|
||||
#include "DKAiObjectContext.h"
|
||||
#include "DruidAiObjectContext.h"
|
||||
#include "HunterAiObjectContext.h"
|
||||
#include "MageAiObjectContext.h"
|
||||
#include "PaladinAiObjectContext.h"
|
||||
#include "Playerbots.h"
|
||||
#include "PriestAiObjectContext.h"
|
||||
#include "RaidUlduarActionContext.h"
|
||||
#include "RaidUlduarTriggerContext.h"
|
||||
#include "RogueAiObjectContext.h"
|
||||
#include "ShamanAiObjectContext.h"
|
||||
#include "RaidUlduarActionContext.h"
|
||||
#include "SharedValueContext.h"
|
||||
#include "StrategyContext.h"
|
||||
#include "TriggerContext.h"
|
||||
#include "ValueContext.h"
|
||||
#include "WarlockAiObjectContext.h"
|
||||
#include "WarriorAiObjectContext.h"
|
||||
#include "WorldPacketActionContext.h"
|
||||
#include "WorldPacketTriggerContext.h"
|
||||
#include "raids/RaidStrategyContext.h"
|
||||
#include "raids/blackwinglair/RaidBwlActionContext.h"
|
||||
#include "raids/blackwinglair/RaidBwlTriggerContext.h"
|
||||
#include "raids/naxxramas/RaidNaxxActionContext.h"
|
||||
#include "raids/naxxramas/RaidNaxxTriggerContext.h"
|
||||
#include "raids/icecrown/RaidIccActionContext.h"
|
||||
#include "raids/icecrown/RaidIccTriggerContext.h"
|
||||
#include "raids/obsidiansanctum/RaidOsActionContext.h"
|
||||
#include "raids/obsidiansanctum/RaidOsTriggerContext.h"
|
||||
#include "raids/eyeofeternity/RaidEoEActionContext.h"
|
||||
#include "raids/vaultofarchavon/RaidVoATriggerContext.h"
|
||||
#include "raids/onyxia/RaidOnyxiaActionContext.h"
|
||||
#include "raids/onyxia/RaidOnyxiaTriggerContext.h"
|
||||
#include "raids/vaultofarchavon/RaidVoAActionContext.h"
|
||||
#include "raids/eyeofeternity/RaidEoETriggerContext.h"
|
||||
#include "raids/moltencore/RaidMcActionContext.h"
|
||||
#include "raids/moltencore/RaidMcTriggerContext.h"
|
||||
#include "raids/aq20/RaidAq20ActionContext.h"
|
||||
#include "raids/aq20/RaidAq20TriggerContext.h"
|
||||
#include "dungeons/DungeonStrategyContext.h"
|
||||
#include "dungeons/wotlk/WotlkDungeonActionContext.h"
|
||||
#include "dungeons/wotlk/WotlkDungeonTriggerContext.h"
|
||||
#include "raids/RaidStrategyContext.h"
|
||||
#include "raids/aq20/RaidAq20ActionContext.h"
|
||||
#include "raids/aq20/RaidAq20TriggerContext.h"
|
||||
#include "raids/moltencore/RaidMcActionContext.h"
|
||||
#include "raids/moltencore/RaidMcTriggerContext.h"
|
||||
#include "raids/blackwinglair/RaidBwlActionContext.h"
|
||||
#include "raids/blackwinglair/RaidBwlTriggerContext.h"
|
||||
#include "raids/karazhan/RaidKarazhanActionContext.h"
|
||||
#include "raids/karazhan/RaidKarazhanTriggerContext.h"
|
||||
#include "raids/naxxramas/RaidNaxxActionContext.h"
|
||||
#include "raids/naxxramas/RaidNaxxTriggerContext.h"
|
||||
#include "raids/eyeofeternity/RaidEoEActionContext.h"
|
||||
#include "raids/eyeofeternity/RaidEoETriggerContext.h"
|
||||
#include "raids/vaultofarchavon/RaidVoAActionContext.h"
|
||||
#include "raids/vaultofarchavon/RaidVoATriggerContext.h"
|
||||
#include "raids/obsidiansanctum/RaidOsActionContext.h"
|
||||
#include "raids/obsidiansanctum/RaidOsTriggerContext.h"
|
||||
#include "raids/onyxia/RaidOnyxiaActionContext.h"
|
||||
#include "raids/onyxia/RaidOnyxiaTriggerContext.h"
|
||||
#include "raids/icecrown/RaidIccActionContext.h"
|
||||
#include "raids/icecrown/RaidIccTriggerContext.h"
|
||||
|
||||
SharedNamedObjectContextList<Strategy> AiObjectContext::sharedStrategyContexts;
|
||||
SharedNamedObjectContextList<Action> AiObjectContext::sharedActionContexts;
|
||||
SharedNamedObjectContextList<Trigger> AiObjectContext::sharedTriggerContexts;
|
||||
SharedNamedObjectContextList<UntypedValue> AiObjectContext::sharedValueContexts;
|
||||
|
||||
AiObjectContext::AiObjectContext(PlayerbotAI* botAI, SharedNamedObjectContextList<Strategy>& sharedStrategyContext,
|
||||
SharedNamedObjectContextList<Action>& sharedActionContext,
|
||||
SharedNamedObjectContextList<Trigger>& sharedTriggerContext,
|
||||
SharedNamedObjectContextList<UntypedValue>& sharedValueContext)
|
||||
: PlayerbotAIAware(botAI),
|
||||
strategyContexts(sharedStrategyContext),
|
||||
actionContexts(sharedActionContext),
|
||||
triggerContexts(sharedTriggerContext),
|
||||
valueContexts(sharedValueContext)
|
||||
{
|
||||
}
|
||||
|
||||
void AiObjectContext::BuildAllSharedContexts()
|
||||
{
|
||||
AiObjectContext::BuildSharedContexts();
|
||||
PriestAiObjectContext::BuildSharedContexts();
|
||||
MageAiObjectContext::BuildSharedContexts();
|
||||
WarlockAiObjectContext::BuildSharedContexts();
|
||||
WarriorAiObjectContext::BuildSharedContexts();
|
||||
ShamanAiObjectContext::BuildSharedContexts();
|
||||
PaladinAiObjectContext::BuildSharedContexts();
|
||||
DruidAiObjectContext::BuildSharedContexts();
|
||||
HunterAiObjectContext::BuildSharedContexts();
|
||||
RogueAiObjectContext::BuildSharedContexts();
|
||||
DKAiObjectContext::BuildSharedContexts();
|
||||
}
|
||||
|
||||
void AiObjectContext::BuildSharedContexts()
|
||||
{
|
||||
BuildSharedStrategyContexts(sharedStrategyContexts);
|
||||
BuildSharedActionContexts(sharedActionContexts);
|
||||
BuildSharedTriggerContexts(sharedTriggerContexts);
|
||||
BuildSharedValueContexts(sharedValueContexts);
|
||||
}
|
||||
|
||||
void AiObjectContext::BuildSharedStrategyContexts(SharedNamedObjectContextList<Strategy>& strategyContexts)
|
||||
AiObjectContext::AiObjectContext(PlayerbotAI* botAI) : PlayerbotAIAware(botAI)
|
||||
{
|
||||
strategyContexts.Add(new StrategyContext());
|
||||
strategyContexts.Add(new MovementStrategyContext());
|
||||
strategyContexts.Add(new AssistStrategyContext());
|
||||
strategyContexts.Add(new QuestStrategyContext());
|
||||
strategyContexts.Add(new DungeonStrategyContext());
|
||||
strategyContexts.Add(new RaidStrategyContext());
|
||||
}
|
||||
strategyContexts.Add(new DungeonStrategyContext());
|
||||
|
||||
void AiObjectContext::BuildSharedActionContexts(SharedNamedObjectContextList<Action>& actionContexts)
|
||||
{
|
||||
actionContexts.Add(new ActionContext());
|
||||
actionContexts.Add(new ChatActionContext());
|
||||
actionContexts.Add(new WorldPacketActionContext());
|
||||
actionContexts.Add(new RaidAq20ActionContext());
|
||||
actionContexts.Add(new RaidMcActionContext());
|
||||
actionContexts.Add(new RaidBwlActionContext());
|
||||
actionContexts.Add(new RaidKarazhanActionContext());
|
||||
actionContexts.Add(new RaidOnyxiaActionContext());
|
||||
actionContexts.Add(new RaidAq20ActionContext());
|
||||
actionContexts.Add(new RaidNaxxActionContext());
|
||||
actionContexts.Add(new RaidOsActionContext());
|
||||
actionContexts.Add(new RaidEoEActionContext());
|
||||
actionContexts.Add(new RaidVoAActionContext());
|
||||
actionContexts.Add(new RaidUlduarActionContext());
|
||||
actionContexts.Add(new RaidOnyxiaActionContext());
|
||||
actionContexts.Add(new RaidIccActionContext());
|
||||
actionContexts.Add(new WotlkDungeonUKActionContext());
|
||||
actionContexts.Add(new WotlkDungeonNexActionContext());
|
||||
@@ -133,23 +77,19 @@ void AiObjectContext::BuildSharedActionContexts(SharedNamedObjectContextList<Act
|
||||
actionContexts.Add(new WotlkDungeonFoSActionContext());
|
||||
actionContexts.Add(new WotlkDungeonPoSActionContext());
|
||||
actionContexts.Add(new WotlkDungeonToCActionContext());
|
||||
}
|
||||
|
||||
void AiObjectContext::BuildSharedTriggerContexts(SharedNamedObjectContextList<Trigger>& triggerContexts)
|
||||
{
|
||||
triggerContexts.Add(new TriggerContext());
|
||||
triggerContexts.Add(new ChatTriggerContext());
|
||||
triggerContexts.Add(new WorldPacketTriggerContext());
|
||||
triggerContexts.Add(new RaidAq20TriggerContext());
|
||||
triggerContexts.Add(new RaidMcTriggerContext());
|
||||
triggerContexts.Add(new RaidBwlTriggerContext());
|
||||
triggerContexts.Add(new RaidKarazhanTriggerContext());
|
||||
triggerContexts.Add(new RaidOnyxiaTriggerContext());
|
||||
triggerContexts.Add(new RaidAq20TriggerContext());
|
||||
triggerContexts.Add(new RaidNaxxTriggerContext());
|
||||
triggerContexts.Add(new RaidOsTriggerContext());
|
||||
triggerContexts.Add(new RaidEoETriggerContext());
|
||||
triggerContexts.Add(new RaidVoATriggerContext());
|
||||
triggerContexts.Add(new RaidUlduarTriggerContext());
|
||||
triggerContexts.Add(new RaidOnyxiaTriggerContext());
|
||||
triggerContexts.Add(new RaidIccTriggerContext());
|
||||
triggerContexts.Add(new WotlkDungeonUKTriggerContext());
|
||||
triggerContexts.Add(new WotlkDungeonNexTriggerContext());
|
||||
@@ -166,11 +106,26 @@ void AiObjectContext::BuildSharedTriggerContexts(SharedNamedObjectContextList<Tr
|
||||
triggerContexts.Add(new WotlkDungeonFoSTriggerContext());
|
||||
triggerContexts.Add(new WotlkDungeonPoSTriggerContext());
|
||||
triggerContexts.Add(new WotlkDungeonToCTriggerContext());
|
||||
|
||||
valueContexts.Add(new ValueContext());
|
||||
|
||||
valueContexts.Add(sSharedValueContext);
|
||||
}
|
||||
|
||||
void AiObjectContext::BuildSharedValueContexts(SharedNamedObjectContextList<UntypedValue>& valueContexts)
|
||||
void AiObjectContext::Update()
|
||||
{
|
||||
valueContexts.Add(new ValueContext());
|
||||
strategyContexts.Update();
|
||||
triggerContexts.Update();
|
||||
actionContexts.Update();
|
||||
valueContexts.Update();
|
||||
}
|
||||
|
||||
void AiObjectContext::Reset()
|
||||
{
|
||||
strategyContexts.Reset();
|
||||
triggerContexts.Reset();
|
||||
actionContexts.Reset();
|
||||
valueContexts.Reset();
|
||||
}
|
||||
|
||||
std::vector<std::string> AiObjectContext::Save()
|
||||
@@ -263,3 +218,5 @@ std::string const AiObjectContext::FormatValues()
|
||||
|
||||
return out.str();
|
||||
}
|
||||
|
||||
void AiObjectContext::AddShared(NamedObjectContext<UntypedValue>* sharedValues) { valueContexts.Add(sharedValues); }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_AIOBJECTCONTEXT_H
|
||||
@@ -19,20 +19,10 @@
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
typedef Strategy* (*StrategyCreator)(PlayerbotAI* botAI);
|
||||
typedef Action* (*ActionCreator)(PlayerbotAI* botAI);
|
||||
typedef Trigger* (*TriggerCreator)(PlayerbotAI* botAI);
|
||||
typedef UntypedValue* (*ValueCreator)(PlayerbotAI* botAI);
|
||||
|
||||
class AiObjectContext : public PlayerbotAIAware
|
||||
{
|
||||
public:
|
||||
static BoolCalculatedValue* custom_glyphs(PlayerbotAI* ai); // Added for cutom glyphs
|
||||
AiObjectContext(PlayerbotAI* botAI,
|
||||
SharedNamedObjectContextList<Strategy>& sharedStrategyContext = sharedStrategyContexts,
|
||||
SharedNamedObjectContextList<Action>& sharedActionContext = sharedActionContexts,
|
||||
SharedNamedObjectContextList<Trigger>& sharedTriggerContext = sharedTriggerContexts,
|
||||
SharedNamedObjectContextList<UntypedValue>& sharedValueContext = sharedValueContexts);
|
||||
AiObjectContext(PlayerbotAI* botAI);
|
||||
virtual ~AiObjectContext() {}
|
||||
|
||||
virtual Strategy* GetStrategy(std::string const name);
|
||||
@@ -66,30 +56,20 @@ public:
|
||||
std::set<std::string> GetSupportedActions();
|
||||
std::string const FormatValues();
|
||||
|
||||
virtual void Update();
|
||||
virtual void Reset();
|
||||
virtual void AddShared(NamedObjectContext<UntypedValue>* sharedValues);
|
||||
|
||||
std::vector<std::string> Save();
|
||||
void Load(std::vector<std::string> data);
|
||||
|
||||
std::vector<std::string> performanceStack;
|
||||
|
||||
static void BuildAllSharedContexts();
|
||||
|
||||
static void BuildSharedContexts();
|
||||
static void BuildSharedStrategyContexts(SharedNamedObjectContextList<Strategy>& strategyContexts);
|
||||
static void BuildSharedActionContexts(SharedNamedObjectContextList<Action>& actionContexts);
|
||||
static void BuildSharedTriggerContexts(SharedNamedObjectContextList<Trigger>& triggerContexts);
|
||||
static void BuildSharedValueContexts(SharedNamedObjectContextList<UntypedValue>& valueContexts);
|
||||
|
||||
protected:
|
||||
NamedObjectContextList<Strategy> strategyContexts;
|
||||
NamedObjectContextList<Action> actionContexts;
|
||||
NamedObjectContextList<Trigger> triggerContexts;
|
||||
NamedObjectContextList<UntypedValue> valueContexts;
|
||||
|
||||
private:
|
||||
static SharedNamedObjectContextList<Strategy> sharedStrategyContexts;
|
||||
static SharedNamedObjectContextList<Action> sharedActionContexts;
|
||||
static SharedNamedObjectContextList<Trigger> sharedTriggerContexts;
|
||||
static SharedNamedObjectContextList<UntypedValue> sharedValueContexts;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "CustomStrategy.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_CUSTOMSTRATEGY_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
||||
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "Engine.h"
|
||||
@@ -11,7 +11,6 @@
|
||||
#include "Playerbots.h"
|
||||
#include "Queue.h"
|
||||
#include "Strategy.h"
|
||||
#include "Timer.h"
|
||||
|
||||
Engine::Engine(PlayerbotAI* botAI, AiObjectContext* factory) : PlayerbotAIAware(botAI), aiObjectContext(factory)
|
||||
{
|
||||
@@ -88,7 +87,7 @@ Engine::~Engine(void)
|
||||
void Engine::Reset()
|
||||
{
|
||||
strategyTypeMask = 0;
|
||||
|
||||
|
||||
ActionNode* action = nullptr;
|
||||
|
||||
while ((action = queue.Pop()) != nullptr)
|
||||
@@ -109,8 +108,6 @@ void Engine::Reset()
|
||||
}
|
||||
|
||||
multipliers.clear();
|
||||
|
||||
actionNodeFactories.creators.clear();
|
||||
}
|
||||
|
||||
void Engine::Init()
|
||||
@@ -123,10 +120,9 @@ void Engine::Init()
|
||||
strategyTypeMask |= strategy->GetType();
|
||||
strategy->InitMultipliers(multipliers);
|
||||
strategy->InitTriggers(triggers);
|
||||
for (auto &iter : strategy->actionNodeFactories.creators)
|
||||
{
|
||||
actionNodeFactories.creators[iter.first] = iter.second;
|
||||
}
|
||||
|
||||
Event emptyEvent;
|
||||
MultiplyAndPush(strategy->getDefaultActions(), 0.0f, false, emptyEvent, "default");
|
||||
}
|
||||
|
||||
if (testMode)
|
||||
@@ -154,7 +150,7 @@ bool Engine::DoNextAction(Unit* unit, uint32 depth, bool minimal)
|
||||
|
||||
uint32 iterations = 0;
|
||||
uint32 iterationsPerTick = queue.Size() * (minimal ? 2 : sPlayerbotAIConfig->iterationsPerTick);
|
||||
|
||||
|
||||
while (++iterations <= iterationsPerTick)
|
||||
{
|
||||
basket = queue.Peek();
|
||||
@@ -252,9 +248,11 @@ bool Engine::DoNextAction(Unit* unit, uint32 depth, bool minimal)
|
||||
|
||||
ActionNode* Engine::CreateActionNode(std::string const name)
|
||||
{
|
||||
ActionNode* node = actionNodeFactories.GetContextObject(name, botAI);
|
||||
if (node)
|
||||
return node;
|
||||
for (std::map<std::string, Strategy*>::iterator i = strategies.begin(); i != strategies.end(); i++)
|
||||
{
|
||||
if (ActionNode* node = i->second->GetAction(name))
|
||||
return node;
|
||||
}
|
||||
|
||||
return new ActionNode(name,
|
||||
/*P*/ nullptr,
|
||||
@@ -434,7 +432,6 @@ bool Engine::HasStrategy(std::string const name) { return strategies.find(name)
|
||||
void Engine::ProcessTriggers(bool minimal)
|
||||
{
|
||||
std::unordered_map<Trigger*, Event> fires;
|
||||
uint32 now = getMSTime();
|
||||
for (std::vector<TriggerNode*>::iterator i = triggers.begin(); i != triggers.end(); i++)
|
||||
{
|
||||
TriggerNode* node = *i;
|
||||
@@ -454,7 +451,7 @@ void Engine::ProcessTriggers(bool minimal)
|
||||
if (fires.find(trigger) != fires.end())
|
||||
continue;
|
||||
|
||||
if (testMode || trigger->needCheck(now))
|
||||
if (testMode || trigger->needCheck())
|
||||
{
|
||||
if (minimal && node->getFirstRelevance() < 100)
|
||||
continue;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user