zoukankan      html  css  js  c++  java
  • T端推荐阵营系统

     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;
    +}
    +
     
    
    好,。估计大家也看到了,这个是像魔兽客户端发送操作数据来实现的,。具体是否有用,我也没有测试过,希望大家喜欢
  • 相关阅读:
    Poj 2017 Speed Limit(水题)
    Poj 1316 Self Numbers(水题)
    Poj 1017 Packets(贪心策略)
    Poj 1017 Packets(贪心策略)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2000 Gold Coins(水题)
    poj 2000 Gold Coins(水题)
  • 原文地址:https://www.cnblogs.com/needly/p/3752584.html
Copyright © 2011-2022 走看看