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;
    +}
    +
     
    
    好,。估计大家也看到了,这个是像魔兽客户端发送操作数据来实现的,。具体是否有用,我也没有测试过,希望大家喜欢
  • 相关阅读:
    Mininet介绍及安装
    第9周学习进度
    团队效绩计划
    第一阶段冲刺个人博客10
    第一阶段冲刺个人博客09
    第一阶段冲刺个人博客08
    win10自带中文输入法的用户体验
    团队项目冲刺第十天
    构建之法阅读笔记02
    团队项目冲刺第九天
  • 原文地址:https://www.cnblogs.com/needly/p/3752584.html
Copyright © 2011-2022 走看看