1、你是否觉得邀请朋友来玩单机的时候,大家都不清楚创建什么阵营比较好?
2、是否在游戏平衡无法控制的时候,能希望推荐玩家去创建响应的阵营
下面就是一个这个系统,。带有conf 配置的,你可以随意切换
这样,。大家在玩魔兽世界私服单机的时候,就可以更有乐趣了!
先看看conf的内容
+
+###################################################################################################
+# CUSTOM CHARACTER LOGIN SCREEN OPTIONS
+#
+# Recommended.Faction.Enable
+# Description: On first account login, adds a fake character representing a faction side
+# Default: 0 - (disable)
+# 1 - (Enable)
+
+Recommended.Faction.Enable = 1
+
+#
+# Recommended.Faction.Side
+# Description: Recommended faction to represent
+# Default: 1 - (alliance)
+# 2 - (horde)
+
+Recommended.Faction.Side = 1
+
+#
额~~自己翻译一下!!
看看部分代码。。下面是部分代码。全部代码在下载中哈
src/server/game/Entities/Player/Player.cpp | 119 +++++++++++++++++++++++++
src/server/game/Entities/Player/Player.h | 1 +
src/server/game/Handlers/CharacterHandler.cpp | 11 +++
src/server/game/World/World.cpp | 4 +
src/server/game/World/World.h | 2 +
src/server/worldserver/worldserver.conf.dist | 21 +++++
6 files changed, 158 insertions(+)
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 1d04af6..5db0aa3 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2044,6 +2044,125 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
return true;
}
+bool Player::CreateFakeCharacter(WorldPacket* data)
+{
+ uint32 guid = 0; // GUID
+ std::string charName;
+ uint32 charRace;
+ uint32 charClass;
+ uint32 charGender;
+ uint32 charLevel;
+ uint32 playerBytes1;
+ uint32 playerBytes2;
+
+ *data << uint64(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)); // don't touch it
+ switch(sWorld->getIntConfig(CONFIG_RECOMMENDED_FACTION_SIDE))
+ {
+ case 1: // alliance
+ {
+ charName = "Alliance Recommended";
+ charRace = 4; // race : night elf
+ charClass = 1; // class : warrior
+ charGender = 1; // gender : female
+ charLevel = 1; // level : 1
+ playerBytes1 = 33556231; // used to create display column 1
+ playerBytes2 = 33554437; // used to create display column 2
+ }
+ break;
+ case 2:
+ {
+ charName = "Horde Recommended";
+ charRace = 10; // race : blood elf
+ charClass = 4; // class : rogue
+ charGender = 1; // gender : female
+ charLevel = 1; // level : 1
+ playerBytes1 = 17106692; // used to create display column 1
+ playerBytes2 = 33554436; // used to create display column 2
+ }
+ break;
+ default:
+ {
+ charName = "Horde Recommended";
+ charRace = 10; // race : blood elf
+ charClass = 4; // class : rogue
+ charGender = 1; // gender : female
+ charLevel = 1; // level : 1
+ playerBytes1 = 17106692; // used to create display column 1
+ playerBytes2 = 33554436; // used to create display column 2
+ }
+ break;
+ }
+
+ *data << charName.c_str(); // name
+ *data << uint8(charRace); // race
+ *data << uint8(charClass); // class
+ *data << uint8(charGender); // gender
+
+ *data << uint8(playerBytes1); // skin
+ *data << uint8(playerBytes1 >> 8); // face
+ *data << uint8(playerBytes1 >> 16); // hair style
+ *data << uint8(playerBytes1 >> 24); // hair color
+
+ *data << uint8(playerBytes2 & 0xFF); // facial hair
+
+ *data << uint8(charLevel); // level
+ *data << uint32(876); // zone
+ *data << uint32(1); // map
+
+ *data << 0; // x
+ *data << 0; // y
+ *data << 0; // z
+
+ *data << uint32(0); // guild id
+
+ *data << uint32(CHARACTER_FLAG_LOCKED_BY_BILLING); // character flags
+
+ *data << uint32(CHAR_CUSTOMIZE_FLAG_NONE); // customize flags
+
+ *data << uint8(0 & AT_LOGIN_FIRST ? 1 : 0); // First login
+
+ *data << uint32(0); // pet display id
+ *data << uint32(0); // pet level
+ *data << uint32(0); // pet family
+
+ std::string equipmentTemplate = "0 0 0 0 0 0 0 0 60000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ";
+
+ Tokenizer equipment(equipmentTemplate.c_str(), ' ');
+ for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot)
+ {
+ uint32 visualBase = slot * 2;
+ uint32 itemId = GetUInt32ValueFromArray(equipment, visualBase);
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId);
+ if (!proto)
+ {
+ *data << uint32(0);
+ *data << uint8(0);
+ *data << uint32(0);
+ continue;
+ }
+
+ SpellItemEnchantmentEntry const* enchant = NULL;
+
+ uint32 enchants = GetUInt32ValueFromArray(equipment, visualBase + 1);
+ for (uint8 enchantSlot = PERM_ENCHANTMENT_SLOT; enchantSlot <= TEMP_ENCHANTMENT_SLOT; ++enchantSlot)
+ {
+ uint32 enchantId = 0x0000FFFF & (enchants >> enchantSlot*16);
+ if (!enchantId)
+ continue;
+
+ enchant = sSpellItemEnchantmentStore.LookupEntry(enchantId);
+ if (enchant)
+ break;
+ }
+
+ *data << uint32(proto->DisplayInfoID);
+ *data << uint8(proto->InventoryType);
+ *data << uint32(enchant ? enchant->aura_id : 0);
+ }
+
+ return true;
+}
+
好,。估计大家也看到了,这个是像魔兽客户端发送操作数据来实现的,。具体是否有用,我也没有测试过,希望大家喜欢
faction_recommend Trinity Core阵营推荐补丁下载
|