//幻兽幻化-
        //_id 副幻兽id
        public void Eudemon_Soul(uint _id)
        {
            EudemonObject fu_eudemon = GetEudmeonObject(_id);
            EudemonObject zhu_eudemon = GetEudmeonObject(mCurEudemonSoulId);
            if (zhu_eudemon == null)
            {
                play.LeftNotice("幻化失败,未找到主幻兽!");
                return;
            }
            if (fu_eudemon == null)
            {
                play.LeftNotice("幻化失败,未找到副幻兽!");
                return;
            }
            if (zhu_eudemon.GetState() != EUDEMONSTATE.BATTLE)
            {
                play.LeftNotice("幻化失败,主幻兽必须出征!");
                return;
            }
            if (fu_eudemon.GetState() != EUDEMONSTATE.BATTLE)
            {
                play.LeftNotice("幻化失败,副幻兽必须出征!");
                return;
            }

            GameStruct.RoleItemInfo role_item = play.GetItemSystem().FindItem(zhu_eudemon.GetEudemonInfo().itemid);
            if (role_item == null) return;
            GameStruct.EudemonSoulInfo soulinfo = ConfigManager.Instance().GetEudemonSoulInfo((int)(zhu_eudemon.GetEudemonInfo().quality / 100));
            if (soulinfo == null)
            {
                play.LeftNotice("幻化失败,错误!001");
                return;
            }
            //等级需求
            if (zhu_eudemon.GetEudemonInfo().level < soulinfo.level)
            {
                play.MsgBox("主幻兽等级需求:" + soulinfo.level.ToString() + "级");
                return;
            }
            //副幻兽等级需求
            if (fu_eudemon.GetEudemonInfo().level < soulinfo.level)
            {
                play.MsgBox("副幻兽等级需求:" + soulinfo.fu_level.ToString() + "级");
                return;
            }
            //副幻兽星级需求
            if (fu_eudemon.GetEudemonInfo().quality < soulinfo.fu_star)
            {
                play.MsgBox("副幻兽星级需求:极品" + soulinfo.fu_star.ToString());
                return;
            }
            RoleData_Eudemon attr = play.GetEudemonSystem().FindEudemon(zhu_eudemon.GetEudemonInfo().GetTypeID());
            if (attr == null)
            {
                play.MsgBox("幻化失败!aaa");
                return;
            }
            //幻兽id更改
            String sItemID = role_item.itemid.ToString();
            sItemID = sItemID.Substring(0,sItemID.Length-1) + "0";
            role_item.itemid = Convert.ToUInt32(sItemID);
            if (EudemonObject.GetMonsterInfo(play, role_item.id) == null)
            {
                play.MsgBox("幻化失败");
                return;
            }
            //更新道具与幻兽信息
            play.GetItemSystem().UpdateItemInfo(role_item.id);
            zhu_eudemon.SetMosterInfo(EudemonObject.GetMonsterInfo(play, role_item.id));
            zhu_eudemon.SendEudemonInfo();

            //----------------
            this.Eudemon_ReCall(fu_eudemon.GetTypeId()); //召回副幻兽
            play.GetItemSystem().DeleteItemByID(fu_eudemon.GetTypeId()); //删除副幻兽

            attr.level = 1; //幻化变为1级
            attr.recall_count++;//转世次数+1
            //zhu_eudemon.GetEudemonInfo().level = 1;
            //zhu_eudemon.GetEudemonInfo().recall_count++;
            GameStruct.MonsterInfo monster_info = zhu_eudemon.GetMonsterInfo();
            //幻兽品质
            attr.quality += IRandom.Random(soulinfo.add_min, soulinfo.add_max);
              //  zhu_eudemon.GetEudemonInfo().quality += IRandom.Random(soulinfo.add_min,soulinfo.add_max);
              //主属性-目前 战士幻兽加物攻 物防 法师幻兽加魔攻魔防
            if (soulinfo.add_main > 0)
            {
                switch (monster_info.eudemon_type)
                {
                        //战士
                    case GameBase.Config.Define.EUDEMON_TYPE_WARRIOR:
                    case GameBase.Config.Define.EUDEMON_TYPE_WARRIOR_RIG:
                        {
                            attr.phyatk_grow_rate += soulinfo.add_main;
                            attr.phyatk_grow_rate_max += soulinfo.add_main;
                            attr.defense_grow_rate += soulinfo.add_main;
                            //zhu_eudemon.GetEudemonInfo().phyatk_grow_rate += soulinfo.add_main;
                            //zhu_eudemon.GetEudemonInfo().phyatk_grow_rate_max += soulinfo.add_main;
                            //zhu_eudemon.GetEudemonInfo().defense_grow_rate += soulinfo.add_main;
                            break;
                        }
                        //法师
                    case GameBase.Config.Define.EUDEMON_TYPE_MAGE:
                    case GameBase.Config.Define.EUDEMON_TYPE_MAGE_RID:
                        {

                            attr.magicatk_grow_rate += soulinfo.add_main;
                            attr.magicatk_grow_rate_max += soulinfo.add_main;
                            attr.magicdef_grow_rate += soulinfo.add_main;
                            //zhu_eudemon.GetEudemonInfo().magicatk_grow_rate += soulinfo.add_main;
                            //zhu_eudemon.GetEudemonInfo().magicatk_grow_rate_max += soulinfo.add_main;
                            //zhu_eudemon.GetEudemonInfo().magicdef_grow_rate += soulinfo.add_main;
                            break;
                        }
                }
            }
            //副属性-
            if (soulinfo.add_fu > 0)
            {
                switch (monster_info.eudemon_type)
                {
                    //战士
                    case GameBase.Config.Define.EUDEMON_TYPE_WARRIOR:
                    case GameBase.Config.Define.EUDEMON_TYPE_WARRIOR_RIG:
                        {
                            attr.magicatk_grow_rate += soulinfo.add_fu;
                            attr.magicatk_grow_rate_max += soulinfo.add_fu;
                            attr.magicdef_grow_rate += soulinfo.add_fu;
                            //zhu_eudemon.GetEudemonInfo().magicatk_grow_rate += soulinfo.add_fu;
                            //zhu_eudemon.GetEudemonInfo().magicatk_grow_rate_max += soulinfo.add_fu;
                            //zhu_eudemon.GetEudemonInfo().magicdef_grow_rate += soulinfo.add_fu;
                            break;
                        }
                    //法师
                    case GameBase.Config.Define.EUDEMON_TYPE_MAGE:
                    case GameBase.Config.Define.EUDEMON_TYPE_MAGE_RID:
                        {
                            attr.phyatk_grow_rate += soulinfo.add_fu;
                            attr.phyatk_grow_rate_max += soulinfo.add_fu;
                            attr.defense_grow_rate += soulinfo.add_fu;
                            attr.phyatk_grow_rate += soulinfo.add_fu;
                            //zhu_eudemon.GetEudemonInfo().phyatk_grow_rate_max += soulinfo.add_fu;
                            //zhu_eudemon.GetEudemonInfo().defense_grow_rate += soulinfo.add_fu;
                            break;
                        }
                }
                attr.life_grow_rate += soulinfo.add_fu;
                //生命成长
               // zhu_eudemon.GetEudemonInfo().life_grow_rate += soulinfo.add_fu;
            }

            //初始属性
            if (soulinfo.add_init > 0)
            {

                attr.init_life += soulinfo.add_init;
                attr.init_atk_min += soulinfo.add_init;
                attr.init_atk_max += soulinfo.add_init;
                attr.init_magicatk_min += soulinfo.add_init;
                attr.init_magicatk_max += soulinfo.add_init;
                attr.init_defense += soulinfo.add_init;
                attr.init_magicdef += soulinfo.add_init;

                //zhu_eudemon.GetEudemonInfo().init_life += soulinfo.add_init;
                //zhu_eudemon.GetEudemonInfo().init_atk_min += soulinfo.add_init;
                //zhu_eudemon.GetEudemonInfo().init_atk_max += soulinfo.add_init;
                //zhu_eudemon.GetEudemonInfo().init_magicatk_min += soulinfo.add_init;
                //zhu_eudemon.GetEudemonInfo().init_magicatk_max += soulinfo.add_init;
                //zhu_eudemon.GetEudemonInfo().init_defense += soulinfo.add_init;
                //zhu_eudemon.GetEudemonInfo().init_magicdef += soulinfo.add_init;

            }
            //zhu_eudemon.GetEudemonInfo().luck++;
            //zhu_eudemon.GetEudemonInfo().magicatk_grow_rate += 0.5f;
            //zhu_eudemon.GetEudemonInfo().magicatk_grow_rate_max += 1.5f;
               // zhu_eudemon.GetEudemonInfo().magicdef_grow_rate += 0.5f;
            //    收到网络协议:长度:28协议号:1010
            zhu_eudemon.SetEudemonInfo(attr);
            NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();

            PacketOut outpack = new PacketOut();
            outpack.WriteInt16(28);
            outpack.WriteInt16(1010);
            outpack.WriteUInt32(zhu_eudemon.GetTypeId());
            outpack.WriteUInt32(play.GetTypeId());
            outpack.WriteInt16(21);
            outpack.WriteInt16(69);
            outpack.WriteInt32(0);
            outpack.WriteInt32(0);
            outpack.WriteInt32(9765);
            play.SendData(outpack.Flush(), true);

            //收到网络协议:长度:24协议号:2037
            this.SendEudemonInfo(zhu_eudemon.GetEudemonInfo());

            //弹出幻化成功对话框
             //   收到网络协议:长度:28协议号:1010
            outpack = new PacketOut();
            outpack.WriteInt16(28);
            outpack.WriteInt16(1010);
            outpack.WriteInt32(System.Environment.TickCount);
            outpack.WriteUInt32(zhu_eudemon.GetTypeId());
            outpack.WriteInt32(50);
            outpack.WriteInt32(0);
            outpack.WriteInt32(1);
            outpack.WriteInt32(9742);
            play.SendData(outpack.Flush(), true);
        }
        //发送幻兽信息到交易栏
        public void SendLookTradEudemonInfo(PlayerObject _play, RoleData_Eudemon info)
        {
            NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();

            msg.id = info.GetTypeID();
            msg.tag = 4;
            msg.AddAttribute(GameStruct.EudemonAttribute.Atk_Max, info.atk_max);
            msg.AddAttribute(GameStruct.EudemonAttribute.Atk_Min, info.atk_min);
            msg.AddAttribute(GameStruct.EudemonAttribute.MagicAtk_Max, info.magicatk_max);
            msg.AddAttribute(GameStruct.EudemonAttribute.MagicAtk_Min, info.magicatk_min);
            msg.AddAttribute(GameStruct.EudemonAttribute.Defense, info.defense);
            msg.AddAttribute(GameStruct.EudemonAttribute.Magic_Defense, info.magicdef);
            msg.AddAttribute(GameStruct.EudemonAttribute.Life, info.life);
            msg.AddAttribute(GameStruct.EudemonAttribute.Life_Max, info.life_max);
            msg.AddAttribute(GameStruct.EudemonAttribute.Intimacy, info.intimacy);
            msg.AddAttribute(GameStruct.EudemonAttribute.Level, info.level);
            msg.AddAttribute(GameStruct.EudemonAttribute.WuXing, info.wuxing);
            msg.AddAttribute(GameStruct.EudemonAttribute.Luck, info.luck);
            msg.AddAttribute(GameStruct.EudemonAttribute.Recall_Count, info.recall_count);
            msg.AddAttribute(EudemonAttribute.Card, info.card);
            msg.AddAttribute(EudemonAttribute.Exp, info.exp);
            msg.AddAttribute(EudemonAttribute.Quality, info.quality);
            msg.AddAttribute(EudemonAttribute.Init_Atk, info.GetInitAtk());
            msg.AddAttribute(EudemonAttribute.Init_Magic_Atk, info.GetInitMagicAtk());
            msg.AddAttribute(EudemonAttribute.Init_Defense, info.GetInitDefense());
            msg.AddAttribute(EudemonAttribute.Init_Life, info.init_life);
            msg.AddAttribute(EudemonAttribute.Life_Grow_Rate, ConvertGrowRate(info.life_grow_rate));
            msg.AddAttribute(EudemonAttribute.Atk_Min_Grow_Rate, ConvertGrowRate(info.phyatk_grow_rate));
            msg.AddAttribute(EudemonAttribute.Atk_Max_Grow_Rate, ConvertGrowRate(info.phyatk_grow_rate_max));
            msg.AddAttribute(EudemonAttribute.MagicAtk_Min_Grow_Rate, ConvertGrowRate(info.magicatk_grow_rate));
            msg.AddAttribute(EudemonAttribute.MagicAtk_Max_Grow_Rate, ConvertGrowRate(info.magicatk_grow_rate_max));
            msg.AddAttribute(EudemonAttribute.Defense_Grow_Rate, ConvertGrowRate(info.defense_grow_rate));
            msg.AddAttribute(EudemonAttribute.MagicDefense_Grow_Rate, ConvertGrowRate(info.magicdef_grow_rate));

            GameStruct.MonsterInfo _info = EudemonObject.GetMonsterInfo(play, info.itemid);
            if (_info != null)
            {
                msg.AddAttribute(EudemonAttribute.Riding, _info.eudemon_type);
            }

            _play.SendData(msg.GetBuffer(), true);
        }
        //复活幻兽
        //target 死亡的怪物- 只有打怪才会加幻兽灵气
        public void Eudemon_Alive(MonsterObject taget)
        {
            for (int i = 0; i < mBattleObj.Count; i++)
            {
                EudemonObject obj = mBattleObj[i];
                if (obj.GetState() == EUDEMONSTATE.BATTLE && obj.GetAttr().bDie)
                {
                    obj.GetAttr().life += (int)(obj.GetAttr().life_max * 0.1) ; //杀死一个怪物加5点
                    NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();
                    msg.id = obj.GetTypeId();
                    msg.AddAttribute(EudemonAttribute.Life, obj.GetAttr().life);

                     PacketOut outpack = new PacketOut();
                    if (obj.GetAttr().life >= obj.GetAttr().life_max )
                    {
                        //      收到网络协议:长度:24协议号:2037
                        //{24,0,245,7,1,0,0,0,252,159,138,131,1,0,0,0,6,0,0,0,65,0,0,0}
                        obj.GetAttr().life = obj.GetAttr().life_max;
                        outpack.WriteInt16(24);
                        outpack.WriteInt16(2037);
                        outpack.WriteInt32(1);
                        outpack.WriteUInt32(obj.GetTypeId());
                        outpack.WriteInt32(1);
                        outpack.WriteInt32(6);
                        outpack.WriteInt32(obj.GetAttr().life);
                        obj.BrocatBuffer(outpack.Flush());
            //收到网络协议:长度:20协议号:1017
            //{20,0,249,3,252,159,138,131,1,0,0,0,0,0,0,0,65,0,0,0}
                        outpack = new PacketOut();
                        outpack.WriteInt16(20);
                        outpack.WriteInt16(1017);
                        outpack.WriteUInt32(obj.GetTypeId());
                        outpack.WriteInt32(1);
                        outpack.WriteInt32(0);
                        outpack.WriteInt32(obj.GetAttr().life);
                        obj.BrocatBuffer(outpack.Flush());
            //收到网络协议:长度:20协议号:1017
            //{20,0,249,3,252,159,138,131,1,0,0,0,26,0,0,0,4,0,0,0}
                        outpack = new PacketOut();
                        outpack.WriteInt16(20);
                        outpack.WriteInt16(1017);
                        outpack.WriteUInt32(obj.GetTypeId());
                        outpack.WriteInt32(1);
                        outpack.WriteInt32(26);
                        outpack.WriteInt32(4);
                        obj.BrocatBuffer(outpack.Flush());
            //收到网络协议:长度:20协议号:1017
            //{20,0,249,3,252,159,138,131,1,0,0,0,26,0,0,0,0,0,0,0}
                        outpack = new PacketOut();
                        outpack.WriteInt16(20);
                        outpack.WriteInt16(1017);
                        outpack.WriteUInt32(obj.GetTypeId());
                        outpack.WriteInt32(1);
                        outpack.WriteInt32(26);
                        outpack.WriteInt32(0);
                        obj.BrocatBuffer(outpack.Flush());

                        obj.GetAttr().bDie = false;
                        obj.SendEudemonInfo();
                    }
                    else
                    {
                    //    收到网络协议:长度:40协议号:1022

                       outpack.WriteInt16(40);
                        outpack.WriteInt16(1022);
                        outpack.WriteInt32(System.Environment.TickCount);
                        outpack.WriteUInt32(obj.GetTypeId());
                        outpack.WriteUInt32(taget.GetTypeId());
                        outpack.WriteInt16(obj.GetCurrentX());
                        outpack.WriteInt16(obj.GetCurrentY());

                        outpack.WriteInt32(32);
                        outpack.WriteInt16(4);
                        outpack.WriteInt32(obj.GetAttr().life);
                        outpack.WriteInt32(0);
                        outpack.WriteInt32(0);
                        outpack.WriteInt16(0);
                        obj.BrocatBuffer(outpack.Flush());

                    }
                    break;
                }
            }
        }
        //发送幻兽信息
        //info 幻兽信息
        //tag 是否发送休息标记
        //brank 是否发送排行榜信息
        public void SendEudemonInfo(RoleData_Eudemon info, bool tag = true,bool bRank = true)
        {
            if (tag)
            {
                //要设置一个标记才可以出征,,目前不知道这个消息是干什么用的为何 应该是状态之类的吧。。。(*^__^*) 嘻2015.9.28
                NetMsg.MsgEudemonTag eudemontag = new NetMsg.MsgEudemonTag();

                eudemontag.playerid = play.GetTypeId();
                eudemontag.eudemonid = info.GetTypeID();
                eudemontag.SetBreakTag();
                play.SendData(eudemontag.GetBuffer(), true);
            }

            //所有幻兽都为至尊圣兽
            if (bRank && info.quality > 0)
            {
                byte[] data1 = { 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0 };
                PacketOut outpack = new PacketOut();
                outpack.WriteInt16(28);
                outpack.WriteInt16(1010);
                outpack.WriteUInt32(info.typeid);
                outpack.WriteUInt32(play.GetTypeId());
                outpack.WriteBuff(data1);
                play.SendData(outpack.Flush(),true);
            }
            NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();

            msg.id = info.GetTypeID();
            msg.AddAttribute(GameStruct.EudemonAttribute.Atk_Max, info.atk_max);
            msg.AddAttribute(GameStruct.EudemonAttribute.Atk_Min, info.atk_min);
            msg.AddAttribute(GameStruct.EudemonAttribute.MagicAtk_Max, info.magicatk_max);
            msg.AddAttribute(GameStruct.EudemonAttribute.MagicAtk_Min, info.magicatk_min);
            msg.AddAttribute(GameStruct.EudemonAttribute.Defense, info.defense);
            msg.AddAttribute(GameStruct.EudemonAttribute.Magic_Defense, info.magicdef);
            msg.AddAttribute(GameStruct.EudemonAttribute.Life, info.life);
            msg.AddAttribute(GameStruct.EudemonAttribute.Life_Max, info.life_max);
            msg.AddAttribute(GameStruct.EudemonAttribute.Intimacy, info.intimacy);
            msg.AddAttribute(GameStruct.EudemonAttribute.Level, info.level);
            msg.AddAttribute(GameStruct.EudemonAttribute.WuXing, info.wuxing);
            msg.AddAttribute(GameStruct.EudemonAttribute.Luck, info.luck);
            msg.AddAttribute(GameStruct.EudemonAttribute.Recall_Count, info.recall_count);
            msg.AddAttribute(EudemonAttribute.Card, info.card);
            msg.AddAttribute(EudemonAttribute.Exp, info.exp);
            msg.AddAttribute(EudemonAttribute.Quality, info.quality);
            msg.AddAttribute(EudemonAttribute.Init_Atk, info.GetInitAtk());
            msg.AddAttribute(EudemonAttribute.Init_Magic_Atk, info.GetInitMagicAtk());
            msg.AddAttribute(EudemonAttribute.Init_Defense, info.GetInitDefense());
            msg.AddAttribute(EudemonAttribute.Init_Life, info.init_life);
            msg.AddAttribute(EudemonAttribute.Life_Grow_Rate, ConvertGrowRate(info.life_grow_rate));
            msg.AddAttribute(EudemonAttribute.Atk_Min_Grow_Rate, ConvertGrowRate(info.phyatk_grow_rate));
            msg.AddAttribute(EudemonAttribute.Atk_Max_Grow_Rate, ConvertGrowRate(info.phyatk_grow_rate_max ));
            msg.AddAttribute(EudemonAttribute.MagicAtk_Min_Grow_Rate, ConvertGrowRate(info.magicatk_grow_rate));
            msg.AddAttribute(EudemonAttribute.MagicAtk_Max_Grow_Rate, ConvertGrowRate(info.magicatk_grow_rate_max));
            msg.AddAttribute(EudemonAttribute.Defense_Grow_Rate, ConvertGrowRate(info.defense_grow_rate ));
            msg.AddAttribute(EudemonAttribute.MagicDefense_Grow_Rate, ConvertGrowRate(info.magicdef_grow_rate));

            GameStruct.MonsterInfo _info = EudemonObject.GetMonsterInfo(play, info.itemid);
            if (_info != null)
            {
                msg.AddAttribute(EudemonAttribute.Riding, _info.eudemon_type);
            }

            play.SendData(msg.GetBuffer(),true);
        }
        //查看幻兽- 把自身装备信息发给对方
        public void SendLookEudemonInfo(PlayerObject target)
        {
            uint play_id = play.GetTypeId();

            PacketOut outpack = new PacketOut();

            EudemonObject obj = null;
            for (int i = 0; i < mListObj.Count; i++)
            {
                obj = mListObj[i];
                uint itemid = obj.GetEudemonInfo().itemid;
                RoleItemInfo item_info = play.GetItemSystem().FindItem(itemid);
                RoleData_Eudemon info = obj.GetEudemonInfo();
                if (item_info == null) continue;
                //发送道具信息
                outpack = new PacketOut();
                int nLen = 84 + Coding.GetDefauleCoding().GetBytes(item_info.forgename).Length;
                outpack.WriteInt16((short)nLen);
                outpack.WriteInt16(1008); //道具信息
                outpack.WriteUInt32(play_id);
                outpack.WriteUInt32(info.GetTypeID());
                outpack.WriteUInt32(item_info.itemid);
                outpack.WriteInt32(0);
                outpack.WriteByte(NetMsg.MsgItemInfo.TAG_LOOKROLEEUDEMONINFO); //幻兽背包
                outpack.WriteByte(0);
                outpack.WriteByte(NetMsg.MsgItemInfo.ITEMPOSITION_EUDEMON_PACK);//幻兽背包
                byte[] _data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
                outpack.WriteBuff(_data);
                outpack.WriteString(item_info.forgename);
                outpack.WriteByte(0);
                outpack.WriteByte(0);
                outpack.WriteByte(0);
                target.SendData(outpack.Flush(), true);
                //target.GetItemSystem().SendItemInfo(item_info, NetMsg.MsgItemInfo.TAG_LOOKROLEEUDEMONINFO);

                //发送幻兽详细信息
                NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();

                msg.id = info.GetTypeID();
                msg.tag = 2;
                msg.AddAttribute(GameStruct.EudemonAttribute.Atk_Max, info.atk_max);
                msg.AddAttribute(GameStruct.EudemonAttribute.Atk_Min, info.atk_min);
                msg.AddAttribute(GameStruct.EudemonAttribute.MagicAtk_Max, info.magicatk_max);
                msg.AddAttribute(GameStruct.EudemonAttribute.MagicAtk_Min, info.magicatk_min);
                msg.AddAttribute(GameStruct.EudemonAttribute.Defense, info.defense);
                msg.AddAttribute(GameStruct.EudemonAttribute.Magic_Defense, info.magicdef);
                msg.AddAttribute(GameStruct.EudemonAttribute.Life, info.life);
                msg.AddAttribute(GameStruct.EudemonAttribute.Life_Max, info.life_max);
                msg.AddAttribute(GameStruct.EudemonAttribute.Intimacy, info.intimacy);
                msg.AddAttribute(GameStruct.EudemonAttribute.Level, info.level);
                msg.AddAttribute(GameStruct.EudemonAttribute.WuXing, info.wuxing);
                msg.AddAttribute(GameStruct.EudemonAttribute.Luck, info.luck);
                msg.AddAttribute(GameStruct.EudemonAttribute.Recall_Count, info.recall_count);
                msg.AddAttribute(EudemonAttribute.Card, info.card);
                msg.AddAttribute(EudemonAttribute.Exp, info.exp);
                msg.AddAttribute(EudemonAttribute.Quality, info.quality);
                msg.AddAttribute(EudemonAttribute.Init_Atk, info.GetInitAtk());
                msg.AddAttribute(EudemonAttribute.Init_Magic_Atk, info.GetInitMagicAtk());
                msg.AddAttribute(EudemonAttribute.Init_Defense, info.GetInitDefense());
                msg.AddAttribute(EudemonAttribute.Init_Life, info.init_life);
                msg.AddAttribute(EudemonAttribute.Life_Grow_Rate, ConvertGrowRate(info.life_grow_rate));
                msg.AddAttribute(EudemonAttribute.Atk_Min_Grow_Rate, ConvertGrowRate(info.phyatk_grow_rate));
                msg.AddAttribute(EudemonAttribute.Atk_Max_Grow_Rate, ConvertGrowRate(info.phyatk_grow_rate_max));
                msg.AddAttribute(EudemonAttribute.MagicAtk_Min_Grow_Rate, ConvertGrowRate(info.magicatk_grow_rate));
                msg.AddAttribute(EudemonAttribute.MagicAtk_Max_Grow_Rate, ConvertGrowRate(info.magicatk_grow_rate_max));
                msg.AddAttribute(EudemonAttribute.Defense_Grow_Rate, ConvertGrowRate(info.defense_grow_rate));
                msg.AddAttribute(EudemonAttribute.MagicDefense_Grow_Rate, ConvertGrowRate(info.magicdef_grow_rate));
                GameStruct.MonsterInfo _info = EudemonObject.GetMonsterInfo(play, info.itemid);
                if (_info != null)
                {
                    msg.AddAttribute(EudemonAttribute.Riding, _info.eudemon_type);
                }
                target.SendData(msg.GetBuffer(), true);

            }
             //   收到网络协议:长度:99协议号:1008
            //byte[] data1 = {99,0,240,3,73,48,96,5,253,159,138,131,93,92,16,0,0,0,0,0,7,0,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,14,218,164,186,211,189,228,193,233,161,164,206,172,193,208,0,0,0};
            //            target.SendData(data1,true);
            //            //收到网络协议:长度:143协议号:1116
            //byte[] data2 = {143,0,92,4,253,159,138,131,183,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,48,96,5,220,3,0,0,220,3,0,0,199,1,52,2,6,0,3,0,0,0,0,0,29,26,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,92,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,14,218,164,186,211,189,228,193,233,161,164,206,172,193,208,0,0};
            //              target.SendData(data2,true);
            //            //收到网络协议:长度:24协议号:2037
            //              byte[] data3 = { 24, 0, 245, 7, 2, 0, 0, 0, 253, 159, 138, 131, 1, 0, 0, 0, 24, 0, 0, 0, 7, 0, 0, 0 };
            //              target.SendData(data3, true);
            ////收到网络协议:长度:496协议号:2037
            //byte[] data4 = {240,1,245,7,2,0,0,0,253,159,138,131,60,0,0,0,6,0,0,0,220,3,0,0,7,0,0,0,220,3,0,0,10,0,0,0,37,0,0,0,8,0,0,0,149,0,0,0,9,0,0,0,51,235,16,0,55,0,0,0,0,0,0,0,12,0,0,0,3,0,0,0,14,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,19,0,0,0,3,0,0,0,21,0,0,0,5,0,0,0,23,0,0,0,1,0,0,0,25,0,0,0,202,0,0,0,26,0,0,0,188,4,0,0,27,0,0,0,142,3,0,0,28,0,0,0,9,0,0,0,50,0,0,0,1,0,32,0,73,0,0,0,0,0,0,0,51,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,62,0,0,0,0,0,0,0,63,0,0,0,11,0,0,0,64,0,0,0,0,0,0,0,65,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,74,0,0,0,0,0,0,0,75,0,0,0,0,0,0,0,76,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,24,0,0,0,7,0,0,0,13,0,0,0,48,0,0,0,1,0,0,0,38,0,0,0,0,0,0,0,83,0,0,0,3,0,0,0,250,0,0,0,2,0,0,0,221,1,0,0,4,0,0,0,182,1,0,0,5,0,0,0,196,0,0,0,64,0,0,0,0,0,0,0,65,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,82,0,0,0,0,0,0,0,36,0,0,0,162,10,0,0,37,0,0,0,233,3,0,0,38,0,0,0,208,8,0,0,39,0,0,0,234,25,0,0,40,0,0,0,144,50,0,0,41,0,0,0,164,46,0,0,42,0,0,0,72,20,0,0,83,0,0,0,50,0,0,0};
            //target.SendData(data4, true);
            //收到网络协议:长度:20协议号:1103
            //{20,0,79,4,253,159,138,131,0,0,0,0,213,7,0,0,0,0,0,0}
            //收到网络协议:长度:20协议号:1103
            //{20,0,79,4,253,159,138,131,0,0,0,0,233,3,0,0,0,0,0,0}
            //收到网络协议:长度:20协议号:1103
            //{20,0,79,4,253,159,138,131,0,0,0,0,185,11,0,0,0,0,0,0}
            //收到网络协议:长度:20协议号:1103
            //{20,0,79,4,253,159,138,131,0,0,0,0,230,7,0,0,0,0,0,0}
            //收到网络协议:长度:172协议号:1117
            //byte[] data5 = { 172, 0, 93, 4 };
            //    byte[] data6 = {0,0,0,0,0,70,0,0,0,0,1,0,12,228,48,138,92,92,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,15,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,4,0,0,0,0,0,15,0,26,18,104,0,107,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,218,164,186,211,189,228,193,233,161,164,206,172,193,208,0,0,0,0,0,0,0,0,0,0,0,0};
            //    PacketOut outpack = new PacketOut();
            //    outpack.WriteBuff(data5);
            //    outpack.WriteUInt32(play.GetTypeId());
            //    outpack.WriteBuff(data6);
            //    target.SendData(outpack.Flush(), true);
            //for (int i = 0; i < mListObj.Count; i++);
            //{
            //    EudemonObject obj = mListObj[i];
            //    GameStruct.RoleItemInfo item = play.GetItemSystem().FindItem(obj.GetEudemonInfo().itemid);
            //    if (item == null) continue;
            //    target.GetItemSystem().SendItemInfo(item, NetMsg.MsgItemInfo.TAG_LOOKROLEEUDEMONINFO);
            //    target.GetEudemonSystem().SendEudemonInfo(obj.GetEudemonInfo(),false,true);
            //}
        }
        public void AddExp(int nExp)
        {
            this.GetAttr().exp += nExp;
            bool bChangeLv = false;
            while (true)
            {
                GameStruct.LevelExp exp = ConfigManager.Instance().GetLevelExp(GameStruct.LevelExp.LEVELEXP_EUDEMON, (byte)this.GetAttr().level);
                if (exp == null) break;
                if (this.GetAttr().exp >= (int)exp.exp)
                {
                    this.GetAttr().exp -= (int)exp.exp;
                    this.GetAttr().level++;
                    bChangeLv = true;
                }
                else break;
            }

            if (bChangeLv)
            {  //升级特效
                PacketOut outpack = new PacketOut();
                outpack.WriteInt16(28);
                outpack.WriteInt16(1010);
                outpack.WriteInt32(System.Environment.TickCount);
                outpack.WriteUInt32(this.GetTypeId());
                outpack.WriteInt32(0);
                outpack.WriteInt32(0);
                outpack.WriteInt32(1);
                outpack.WriteInt32(9550);
                this.BrocatBuffer(outpack.Flush());
            }
            //下发经验数据
            NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();
            msg.id = this.GetTypeId();
            msg.AddAttribute(EudemonAttribute.Exp, this.GetAttr().exp);
            if (bChangeLv)
            {
                msg.AddAttribute(EudemonAttribute.Level, this.GetAttr().level);
                this.CalcAttribute();
                play.GetEudemonSystem().SendEudemonInfo(GetEudemonInfo());
            }
            play.SendData(msg.GetBuffer(), true);
        }
        public override void Injured(BaseObject obj, uint value, NetMsg.MsgAttackInfo info)
        {
            mbIsCombo = play.GetFightSystem().IsComboMagic(info.usType);
            this.GetAttr().life -= (int)value;
            if (this.GetAttr().life < 0)
            {
                this.GetAttr().life = 0;

            }
            if (!mbIsCombo && this.GetAttr().life <= 0)
            {
                GameStruct.Action action = new GameStruct.Action(GameStruct.Action.DIE, null);
                this.PushAction(action);

            }

            NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();
            msg.id = this.GetTypeId();
            msg.AddAttribute(EudemonAttribute.Life, this.GetAttr().life);
            this.BrocatBuffer(msg.GetBuffer());
        }
        //更改幻兽属性
        //type 属性
        //value 值
        //isBrocat 是否广播
        public void ChangeAttribute(GameStruct.EudemonAttribute type, int value, bool isBrocat = true)
        {
            RoleData_Eudemon eudemon_info = play.GetEudemonSystem().FindEudemon(this.GetTypeId());
            if (eudemon_info == null) return;
            int v = value;
            switch (type)
            {
                case GameStruct.EudemonAttribute.Level:
                    {
                        eudemon_info.level += (short)value;
                        this.SetEudemonInfo(eudemon_info);
                       // this.GetAttr().level += (short)value;
                        this.CalcAttribute();

                        //升级特效
                        PacketOut outpack = new PacketOut();
                        outpack.WriteInt16(28);
                        outpack.WriteInt16(1010);
                        outpack.WriteInt32(System.Environment.TickCount);
                        outpack.WriteUInt32(this.GetTypeId());
                        outpack.WriteInt32(0);
                        outpack.WriteInt32(0);
                        outpack.WriteInt32(1);
                        outpack.WriteInt32(9550);
                        this.BrocatBuffer(outpack.Flush());
                        v = this.GetAttr().level;
                        break;
                    }
            }
            NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();

            msg.id = this.GetTypeId();
            msg.AddAttribute(type, v);
            if (isBrocat)
            {
                this.BrocatBuffer(msg.GetBuffer());
            }
            else
            {
                play.SendData(msg.GetBuffer(), true);
            }
        }
        //死亡
        protected override void ProcessAction_Die(GameStruct.Action act)
        {
            this.GetAttr().life = 0;
            mInfo.bDie = true;
             //if (this.GetState() == EUDEMONSTATE.BATTLE)
            {
                NetMsg.MsgEudemonInfo msg = new NetMsg.MsgEudemonInfo();
                msg.id = this.GetTypeId();
                msg.AddAttribute(EudemonAttribute.Life, 0);
                play.SendData(msg.GetBuffer(), true);
                // 收到网络协议:长度:24协议号:2037
                //   byte[] data = {24,0,245,7,1,0,0,0,252,159,138,131,1,0,0,0,83,0,0,0,45,0,0,0};
                PacketOut outpack = new PacketOut();
                outpack.WriteUInt16(24);
                outpack.WriteUInt16(2037);
                outpack.WriteUInt32(1);
                outpack.WriteUInt32(this.GetTypeId());
                outpack.WriteInt32(1);
                outpack.WriteInt32(83);
                outpack.WriteInt32(45);
                play.SendData(outpack.Flush(), true);
                //收到网络协议:长度:20协议号:1017
                //{20,0,249,3,252,159,138,131,1,0,0,0,35,0,0,0,45,0,0,0}
                outpack = new PacketOut();
                outpack.WriteInt16(20);
                outpack.WriteInt16(1017);
                outpack.WriteUInt32(this.GetTypeId());
                outpack.WriteInt32(1);
                outpack.WriteInt32(35);
                outpack.WriteInt32(45);
                play.SendData(outpack.Flush(), true);
                //收到网络协议:长度:24协议号:2037
                //{24,0,245,7,1,0,0,0,252,159,138,131,1,0,0,0,8,0,0,0,149,0,0,0}
                outpack = new PacketOut();
                outpack.WriteUInt16(24);
                outpack.WriteUInt16(2037);
                outpack.WriteUInt32(1);
                outpack.WriteUInt32(this.GetTypeId());
                outpack.WriteInt32(1);
                outpack.WriteInt32(8);
                outpack.WriteInt32(149);
                play.SendData(outpack.Flush(), true);
            }
            //else
            if (this.GetState() == EUDEMONSTATE.FIT)
            {
                //解体
                play.GetEudemonSystem().Eudemon_BreakUp(this.GetTypeId());
                //再召回
                play.GetEudemonSystem().Eudemon_Battle(this.GetTypeId());
            }

            if (this.GetState() == EUDEMONSTATE.BATTLE)
            {
                //广播
                this.SendEudemonInfo();
             }
        }
        //发送给玩家刷新信息
        public void SendPlayRefreshInfo(PlayerObject play)
        {
            if (play.GetGameSession() == null) return;
            if (mMonsterInfo == null) return;
            //刷新幻兽数据
            NetMsg.MsgEudemonBattleInfo battleinfo = new NetMsg.MsgEudemonBattleInfo();
            battleinfo.Create(null, play.GetGamePackKeyEx());
            battleinfo.id = mInfo.GetTypeID();
            battleinfo.lookface = mMonsterInfo.lookface;
            battleinfo.name = mInfo.name;
            battleinfo.monsterid = mMonsterInfo.id;
            battleinfo.x = play.GetCurrentX();
            battleinfo.y = play.GetCurrentY();
            battleinfo.dir = play.GetDir();
            play.SendData(battleinfo.GetBuffer());

            //要有血量,不然就挂了
            NetMsg.MsgEudemonInfo eudemoninfo = new NetMsg.MsgEudemonInfo();
            eudemoninfo.Create(null, play.GetGamePackKeyEx());
            eudemoninfo.id = mInfo.GetTypeID();
            eudemoninfo.AddAttribute(GameStruct.EudemonAttribute.Life, mInfo.life);
            eudemoninfo.AddAttribute(GameStruct.EudemonAttribute.Life_Max, mInfo.life);
            play.SendData(eudemoninfo.GetBuffer());
        }