Core/BattlePets: Store declined names
Port From (https://github.com/TrinityCore/TrinityCore/commit/82b3a409db4dfe689c84234f3ae427369325bf0b)
This commit is contained in:
@@ -151,13 +151,15 @@ namespace Framework.Database
|
||||
PrepareStatement(LoginStatements.REP_ACCOUNT_TOYS, "REPLACE INTO battlenet_account_toys (accountId, itemId, isFavourite, hasFanfare) VALUES (?, ?, ?, ?)");
|
||||
|
||||
// Battle Pets
|
||||
PrepareStatement(LoginStatements.SEL_BATTLE_PETS, "SELECT guid, species, breed, level, exp, health, quality, flags, name FROM battle_pets WHERE battlenetAccountId = ?");
|
||||
PrepareStatement(LoginStatements.SEL_BATTLE_PETS, "SELECT bp.guid, bp.species, bp.breed, bp.level, bp.exp, bp.health, bp.quality, bp.flags, bp.name, dn.genitive, dn.dative, dn.accusative, dn.instrumental, dn.prepositional FROM battle_pets bp LEFT JOIN battle_pet_declinedname dn ON bp.guid = dn.guid WHERE bp.battlenetAccountId = ?");
|
||||
PrepareStatement(LoginStatements.INS_BATTLE_PETS, "INSERT INTO battle_pets (guid, battlenetAccountId, species, breed, level, exp, health, quality, flags, name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||
PrepareStatement(LoginStatements.DEL_BATTLE_PETS, "DELETE FROM battle_pets WHERE battlenetAccountId = ? AND guid = ?");
|
||||
PrepareStatement(LoginStatements.UPD_BATTLE_PETS, "UPDATE battle_pets SET level = ?, exp = ?, health = ?, quality = ?, flags = ?, name = ? WHERE battlenetAccountId = ? AND guid = ?");
|
||||
PrepareStatement(LoginStatements.SEL_BATTLE_PET_SLOTS, "SELECT id, battlePetGuid, locked FROM battle_pet_slots WHERE battlenetAccountId = ?");
|
||||
PrepareStatement(LoginStatements.INS_BATTLE_PET_SLOTS, "INSERT INTO battle_pet_slots (id, battlenetAccountId, battlePetGuid, locked) VALUES (?, ?, ?, ?)");
|
||||
PrepareStatement(LoginStatements.DEL_BATTLE_PET_SLOTS, "DELETE FROM battle_pet_slots WHERE battlenetAccountId = ?");
|
||||
PrepareStatement(LoginStatements.INS_BATTLE_PET_DECLINED_NAME, "INSERT INTO battle_pet_declinedname (guid, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?)");
|
||||
PrepareStatement(LoginStatements.DEL_BATTLE_PET_DECLINED_NAME, "DELETE FROM battle_pet_declinedname WHERE guid = ?");
|
||||
|
||||
PrepareStatement(LoginStatements.SEL_ACCOUNT_HEIRLOOMS, "SELECT itemId, flags FROM battlenet_account_heirlooms WHERE accountId = ?");
|
||||
PrepareStatement(LoginStatements.REP_ACCOUNT_HEIRLOOMS, "REPLACE INTO battlenet_account_heirlooms (accountId, itemId, flags) VALUES (?, ?, ?)");
|
||||
@@ -302,6 +304,8 @@ namespace Framework.Database
|
||||
SEL_BATTLE_PET_SLOTS,
|
||||
INS_BATTLE_PET_SLOTS,
|
||||
DEL_BATTLE_PET_SLOTS,
|
||||
INS_BATTLE_PET_DECLINED_NAME,
|
||||
DEL_BATTLE_PET_DECLINED_NAME,
|
||||
|
||||
SEL_ACCOUNT_HEIRLOOMS,
|
||||
REP_ACCOUNT_HEIRLOOMS,
|
||||
|
||||
@@ -179,6 +179,14 @@ namespace Game.BattlePets
|
||||
pet.PacketInfo.Flags = petsResult.Read<ushort>(7);
|
||||
pet.PacketInfo.Name = petsResult.Read<string>(8);
|
||||
pet.PacketInfo.CreatureID = speciesEntry.CreatureID;
|
||||
|
||||
if (!petsResult.IsNull(9))
|
||||
{
|
||||
pet.DeclinedName = new();
|
||||
for (byte i = 0; i < SharedConst.MaxDeclinedNameCases; ++i)
|
||||
pet.DeclinedName.name[i] = petsResult.Read<string>(9 + i);
|
||||
}
|
||||
|
||||
pet.SaveInfo = BattlePetSaveInfo.Unchanged;
|
||||
pet.CalculateStats();
|
||||
_pets[pet.PacketInfo.Guid.GetCounter()] = pet;
|
||||
@@ -223,6 +231,19 @@ namespace Game.BattlePets
|
||||
stmt.AddValue(8, pair.Value.PacketInfo.Flags);
|
||||
stmt.AddValue(9, pair.Value.PacketInfo.Name);
|
||||
trans.Append(stmt);
|
||||
|
||||
if (pair.Value.DeclinedName != null)
|
||||
{
|
||||
stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_BATTLE_PET_DECLINED_NAME);
|
||||
stmt.AddValue(0, pair.Key);
|
||||
|
||||
for (byte i = 0; i < SharedConst.MaxDeclinedNameCases; i++)
|
||||
stmt.AddValue(i + 1, pair.Value.DeclinedName.name[i]);
|
||||
|
||||
trans.Append(stmt);
|
||||
}
|
||||
|
||||
|
||||
pair.Value.SaveInfo = BattlePetSaveInfo.Unchanged;
|
||||
break;
|
||||
case BattlePetSaveInfo.Changed:
|
||||
@@ -236,9 +257,29 @@ namespace Game.BattlePets
|
||||
stmt.AddValue(6, _owner.GetBattlenetAccountId());
|
||||
stmt.AddValue(7, pair.Key);
|
||||
trans.Append(stmt);
|
||||
|
||||
stmt = DB.Login.GetPreparedStatement(LoginStatements.DEL_BATTLE_PET_DECLINED_NAME);
|
||||
stmt.AddValue(0, pair.Key);
|
||||
trans.Append(stmt);
|
||||
|
||||
if (pair.Value.DeclinedName != null)
|
||||
{
|
||||
stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_BATTLE_PET_DECLINED_NAME);
|
||||
stmt.AddValue(0, pair.Key);
|
||||
|
||||
for (byte i = 0; i < SharedConst.MaxDeclinedNameCases; i++)
|
||||
stmt.AddValue(i + 1, pair.Value.DeclinedName.name[i]);
|
||||
|
||||
trans.Append(stmt);
|
||||
}
|
||||
|
||||
pair.Value.SaveInfo = BattlePetSaveInfo.Unchanged;
|
||||
break;
|
||||
case BattlePetSaveInfo.Removed:
|
||||
stmt = DB.Login.GetPreparedStatement(LoginStatements.DEL_BATTLE_PET_DECLINED_NAME);
|
||||
stmt.AddValue(0, pair.Key);
|
||||
trans.Append(stmt);
|
||||
|
||||
stmt = DB.Login.GetPreparedStatement(LoginStatements.DEL_BATTLE_PETS);
|
||||
stmt.AddValue(0, _owner.GetBattlenetAccountId());
|
||||
stmt.AddValue(1, pair.Key);
|
||||
@@ -340,6 +381,22 @@ namespace Game.BattlePets
|
||||
pet.SaveInfo = BattlePetSaveInfo.Changed;
|
||||
}
|
||||
|
||||
public void ModifyName(ObjectGuid guid, string name, DeclinedName declinedName)
|
||||
{
|
||||
BattlePet pet = GetPet(guid);
|
||||
if (pet == null)
|
||||
return;
|
||||
|
||||
pet.PacketInfo.Name = name;
|
||||
|
||||
pet.DeclinedName = new DeclinedName();
|
||||
if (declinedName != null)
|
||||
pet.DeclinedName = declinedName;
|
||||
|
||||
if (pet.SaveInfo != BattlePetSaveInfo.New)
|
||||
pet.SaveInfo = BattlePetSaveInfo.Changed;
|
||||
}
|
||||
|
||||
bool IsPetInSlot(ObjectGuid guid)
|
||||
{
|
||||
foreach (BattlePetSlot slot in _slots)
|
||||
@@ -582,6 +639,7 @@ namespace Game.BattlePets
|
||||
}
|
||||
|
||||
public BattlePetStruct PacketInfo;
|
||||
public DeclinedName DeclinedName;
|
||||
public BattlePetSaveInfo SaveInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,14 +45,7 @@ namespace Game
|
||||
[WorldPacketHandler(ClientOpcodes.BattlePetModifyName)]
|
||||
void HandleBattlePetModifyName(BattlePetModifyName battlePetModifyName)
|
||||
{
|
||||
BattlePetMgr.BattlePet pet = GetBattlePetMgr().GetPet(battlePetModifyName.PetGuid);
|
||||
if (pet != null)
|
||||
{
|
||||
pet.PacketInfo.Name = battlePetModifyName.Name;
|
||||
|
||||
if (pet.SaveInfo != BattlePetSaveInfo.New)
|
||||
pet.SaveInfo = BattlePetSaveInfo.Changed;
|
||||
}
|
||||
GetBattlePetMgr().ModifyName(battlePetModifyName.PetGuid, battlePetModifyName.Name, battlePetModifyName.DeclinedName.Value);
|
||||
}
|
||||
|
||||
[WorldPacketHandler(ClientOpcodes.BattlePetDeletePet)]
|
||||
|
||||
@@ -125,7 +125,7 @@ namespace Game.Networking.Packets
|
||||
|
||||
if (_worldPacket.HasBit())
|
||||
{
|
||||
Declined = new DeclinedName();
|
||||
DeclinedName.Set(new DeclinedName());
|
||||
|
||||
byte[] declinedNameLengths = new byte[SharedConst.MaxDeclinedNameCases];
|
||||
|
||||
@@ -133,7 +133,7 @@ namespace Game.Networking.Packets
|
||||
declinedNameLengths[i] = _worldPacket.ReadBits<byte>(7);
|
||||
|
||||
for (byte i = 0; i < SharedConst.MaxDeclinedNameCases; ++i)
|
||||
Declined.name[i] = _worldPacket.ReadString(declinedNameLengths[i]);
|
||||
DeclinedName.Value.name[i] = _worldPacket.ReadString(declinedNameLengths[i]);
|
||||
}
|
||||
|
||||
Name = _worldPacket.ReadString(nameLength);
|
||||
@@ -141,7 +141,7 @@ namespace Game.Networking.Packets
|
||||
|
||||
public ObjectGuid PetGuid;
|
||||
public string Name;
|
||||
public DeclinedName Declined;
|
||||
public Optional<DeclinedName> DeclinedName;
|
||||
}
|
||||
|
||||
class BattlePetDeletePet : ClientPacket
|
||||
|
||||
@@ -199,6 +199,35 @@ LOCK TABLES `autobroadcast` WRITE;
|
||||
/*!40000 ALTER TABLE `autobroadcast` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `battle_pet_declinedname`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `battle_pet_declinedname`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!50503 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `battle_pet_declinedname` (
|
||||
`guid` bigint NOT NULL,
|
||||
`genitive` varchar(12) NOT NULL DEFAULT '',
|
||||
`dative` varchar(12) NOT NULL DEFAULT '',
|
||||
`accusative` varchar(12) NOT NULL DEFAULT '',
|
||||
`instrumental` varchar(12) NOT NULL DEFAULT '',
|
||||
`prepositional` varchar(12) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`guid`),
|
||||
CONSTRAINT `fk_battle_pet__battle_pet_declinedname` FOREIGN KEY (`guid`) REFERENCES `battle_pets` (`guid`) ON DELETE RESTRICT ON UPDATE RESTRICT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `battle_pet_declinedname`
|
||||
--
|
||||
|
||||
LOCK TABLES `battle_pet_declinedname` WRITE;
|
||||
/*!40000 ALTER TABLE `battle_pet_declinedname` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `battle_pet_declinedname` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
--
|
||||
-- Table structure for table `battle_pet_slots`
|
||||
--
|
||||
@@ -236,6 +265,7 @@ CREATE TABLE `battle_pets` (
|
||||
`battlenetAccountId` int(10) NOT NULL,
|
||||
`species` int(10) NOT NULL,
|
||||
`breed` smallint(5) NOT NULL,
|
||||
`displayId` int(11) NOT NULL DEFAULT '0',
|
||||
`level` smallint(5) NOT NULL DEFAULT '1',
|
||||
`exp` smallint(5) NOT NULL DEFAULT '0',
|
||||
`health` int(10) NOT NULL DEFAULT '1',
|
||||
@@ -2428,7 +2458,9 @@ INSERT INTO `updates` VALUES
|
||||
('2021_09_10_00_auth.sql','DE94812ABC7B395C6C3405FB6718A8AF2C9F8FEC','ARCHIVED','2021-09-10 12:18:54',0),
|
||||
('2021_10_07_00_auth.sql','45F2D92E28382F0CBE1F9B3A97693C0CC69E50BC','ARCHIVED','2021-10-07 10:32:05',0),
|
||||
('2021_10_13_00_auth.sql','220E63385CACCBCEC36C57717DE369F2FCABCAAF','ARCHIVED','2021-10-13 21:15:05',0),
|
||||
('2021_10_15_00_auth.sql','C8AA212AB2BB2DB5B3C2C9622A3874475AEFBD7B','ARCHIVED','2021-10-15 10:11:47',0);
|
||||
('2021_10_15_00_auth.sql','C8AA212AB2BB2DB5B3C2C9622A3874475AEFBD7B','ARCHIVED','2021-10-15 10:11:47',0),
|
||||
('2021_10_15_01_auth.sql','72A0437F0ADEC59FF9D6839DF845C473F693CA5B','RELEASED','2021-10-16 00:15:25',0),
|
||||
('2021_10_16_00_auth.sql','FDC45C7BEFBAFC9BCE6C77377B026A59AE52EE21','RELEASED','2021-10-16 11:24:39',0);
|
||||
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
DROP TABLE IF EXISTS `battle_pet_declinedname`;
|
||||
CREATE TABLE `battle_pet_declinedname` (
|
||||
`guid` bigint(20) NOT NULL,
|
||||
`genitive` varchar(12) NOT NULL DEFAULT '',
|
||||
`dative` varchar(12) NOT NULL DEFAULT '',
|
||||
`accusative` varchar(12) NOT NULL DEFAULT '',
|
||||
`instrumental` varchar(12) NOT NULL DEFAULT '',
|
||||
`prepositional` varchar(12) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`guid`),
|
||||
CONSTRAINT fk_battle_pet__battle_pet_declinedname FOREIGN KEY (`guid`) REFERENCES `battle_pets` (`guid`) ON DELETE RESTRICT ON UPDATE RESTRICT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
Reference in New Issue
Block a user