Example #1
0
        private bool LoadItemTypeInfo()
        {
            String text = mPacket.LoadFileToText(TextDefine.CONFIG_FILE_ITEMTYPE);
            CsvFile csv = new CsvFile(text);
            int i = 0;
            String v;

            try
            {

                for (; i < csv.GetLine(); i++)
                {
                    GameStruct.ItemTypeInfo info = new GameStruct.ItemTypeInfo();
                    v = csv.GetFieldInfoToValue(i, "id");
                    info.id = Convert.ToUInt32(v);
                    info.name = csv.GetFieldInfoToValue(i, "name");
                    v = csv.GetFieldInfoToValue(i, "req_profession");
                    info.req_profession = Convert.ToByte(v);
                    v = csv.GetFieldInfoToValue(i, "req_level");
                    info.req_level = Convert.ToByte(v);
                    v = csv.GetFieldInfoToValue(i, "req_sex");
                    info.req_sex = Convert.ToByte(v);
                    v = csv.GetFieldInfoToValue(i, "attack_min");
                    info.attack_min = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "attack_max");
                    info.attack_max = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "defense");
                    info.defense = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "magic_defense");
                    info.magic_defense = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "magic_attack_min");
                    info.magic_attack_min = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "magic_attck_max");
                    info.magic_attck_max = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "dodge");
                    info.dodge = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "hitrate");
                    info.hitrate = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "amount");
                    info.amount = Convert.ToUInt16(v);
                    v = csv.GetFieldInfoToValue(i, "amount_limit");
                    info.amount_limit = Convert.ToUInt16(v);
                    v = csv.GetFieldInfoToValue(i, "actionid");
                    info.actionid = Convert.ToUInt32(v);
                    v = csv.GetFieldInfoToValue(i, "price");
                    info.price = Convert.ToInt32(v);
                    v = csv.GetFieldInfoToValue(i, "monster_type");
                    info.monster_type = Convert.ToUInt32(v);
                    info.info = csv.GetFieldInfoToValue(i, "info");
                    mDicItemType[info.id] = info;
                }
            }
            catch (System.Exception ex)
            {

                Log.Instance().WriteLog(ex.Message);
                Log.Instance().WriteLog(ex.StackTrace);
                Log.Instance().WriteLog("载入物品数据库失败,行号:" + i.ToString());
                return false;
            }

            return true;
        }
Example #2
0
        //public RoleData_Eudemon AwardEudemon(uint itemid)
        //{
        //}
        //创建物品参数说明
        //postion:道具位置
        //amount:数量
        //stronglv: 强化等级
        //gem1: 第一洞宝石 255为打孔
        //gem2: 第二洞镶嵌的宝石 255为打孔
        //gem3: 第三洞镶嵌的宝石 255为打孔
        //warghost_exp: 战魂等级 最高9级
        //di_attack : 地攻击 最高255级
        //shui_attack: 水攻击 最高255级
        //huo_attack: 火攻击 最高255级
        //feng_attack: 风攻击 最高255级
        //limit: 是否叠加
        public GameStruct.RoleItemInfo AwardItem(uint itemid, byte postion, byte amount = 1, byte stronglv = 0,byte gem1 = 0,byte gem2 = 0,byte gem3 = 0,byte warghost_exp = 0,
            byte di_attack = 0,byte shui_attack = 0,byte huo_attack = 0,byte feng_attack = 0,bool limit = true/*是否叠加*/)
        {
            //是金币
            if (IsGold(itemid))
            {
                return null;
            }
            GameStruct.ItemTypeInfo baseitem = ConfigManager.Instance().GetItemTypeInfo(itemid);
            if (baseitem == null)
            {
                Log.Instance().WriteLog("创建道具失败,道具不存在 id:" + itemid.ToString());
              //  return null;
                if (!GameServer.IsTestMode()) return null;
                baseitem = new GameStruct.ItemTypeInfo();
                baseitem.id = itemid;
            }

            GameStruct.RoleItemInfo item = null;
            //可叠加
            if (!IsEquip(baseitem.id) && limit && baseitem.amount_limit > 1)
            {
                item = ItemLimit(itemid, (byte)baseitem.amount);
                if(item  != null)
                {
                    return item;
                }
            }
            uint key = (uint)mDicAddItem.Count + 1;

            item = new GameStruct.RoleItemInfo();
            item.itemid = baseitem.id;
            item.postion = postion;
            item.stronglv = stronglv;
            item.gem1 = gem1;
            item.gem2 = gem2;
            item.gem3 = gem3;
            item.war_ghost_exp = warghost_exp * 100;
            item.di_attack = di_attack;
            item.shui_attack = shui_attack;
            item.huo_attack = huo_attack;
            item.feng_attack = feng_attack;
            item.amount = baseitem.amount;
               // item.amount = IsEquip(baseitem.id) == true ? baseitem.amount_limit : amount;

            //宝石属性
            GameStruct.GemInfo gem = ConfigManager.Instance().GetGemInfo(item.itemid);
            if (gem != null)
            {
                item.gem1 = (uint)gem.type;
            }
            mDicAddItem[key] = item;

            //发给dbserver 通知增加这个道具
            GameBase.Network.Internal.AddRoleData_Item dbitem = new GameBase.Network.Internal.AddRoleData_Item();
            dbitem.item.playerid = play.GetBaseAttr().player_id;
            dbitem.gameid = play.GetGameID();
            dbitem.item.postion = postion;
            dbitem.item.itemid = item.itemid;
            dbitem.item.stronglv = stronglv;

            dbitem.item.amount = amount;
            dbitem.sortid = key;
            DBServer.Instance().GetDBClient().SendData(dbitem.GetBuffer());
            return item;
        }
Example #3
0
        //这个函数用于玩家丢弃的道具,然后又捡起来应用..所以不叠加
        public GameStruct.RoleItemInfo AwardItem(GameStruct.RoleItemInfo info)
        {
            if (IsGold(info.itemid))
            {
                play.ChangeAttribute(GameStruct.UserAttribute.GOLD, info.property);
                play.LeftNotice(string.Format("获得{0}金币!", info.property));
                return null;
            }
            GameStruct.ItemTypeInfo baseitem = ConfigManager.Instance().GetItemTypeInfo(info.itemid);
            if (baseitem == null)
            {
                Log.Instance().WriteLog("创建道具失败,道具不存在 id:" + info.itemid.ToString());
                //  return null;
                if (!GameServer.IsTestMode()) return null;
                baseitem = new GameStruct.ItemTypeInfo();
                baseitem.id = info.itemid;
            }
            uint key = (uint)mDicAddItem.Count + 1;

            GameStruct.RoleItemInfo item = new GameStruct.RoleItemInfo();
            item.itemid = baseitem.id;
            item.postion = info.postion;
            item.stronglv = info.stronglv;
            item.gemcount = info.gemcount;
            item.amount = info.amount;
            item.gem1= info.gem1;
            item.gem2 = info.gem2;
            item.forgename = info.forgename;
            item.war_ghost_exp = info.war_ghost_exp;
            item.di_attack = info.di_attack;
            item.huo_attack = info.huo_attack;
            item.shui_attack = info.shui_attack;
            item.feng_attack = info.feng_attack;
            item.property = info.property;
            item.gem3 = info.gem3;
            item.god_strong = info.god_strong;
            item.god_exp = info.god_exp;

            item.typeid = info.typeid;
            mDicAddItem[key] = item;

            //发给dbserver 通知增加这个道具
            GameBase.Network.Internal.AddRoleData_Item dbitem = new GameBase.Network.Internal.AddRoleData_Item();
            dbitem.item.playerid = play.GetBaseAttr().player_id;
            dbitem.gameid = play.GetGameID();
            dbitem.item.postion = item.postion;
            dbitem.item.itemid = item.itemid;
            dbitem.item.stronglv = item.stronglv;

            dbitem.item.amount = item.amount;
            dbitem.item.gem1 = item.gem1;
            dbitem.item.gem2 = item.gem2;
            dbitem.item.forgename = item.forgename;
            dbitem.item.war_ghost_exp = item.war_ghost_exp;
            dbitem.item.di_attack = item.di_attack;
            dbitem.item.huo_attack = item.huo_attack;
            dbitem.item.shui_attack = item.shui_attack;
            dbitem.item.feng_attack = item.feng_attack;
            dbitem.item.property = item.property;
            dbitem.item.gem3 = item.gem3;
            dbitem.item.god_strong = item.god_strong;
            dbitem.item.god_exp = item.god_exp;
            dbitem.sortid = key;
            DBServer.Instance().GetDBClient().SendData(dbitem.GetBuffer());
            return item;
        }
Example #4
0
        public void UseItem(uint id, uint dwdata,short param,short param1)
        {
            if (!mDicItem.ContainsKey(id)) return;
            GameStruct.RoleItemInfo info = mDicItem[id];
            GameStruct.ItemTypeInfo baseitem = ConfigManager.Instance().GetItemTypeInfo(info.itemid);
            if (baseitem == null)
            {
                Log.Instance().WriteLog("玩家使用道具:,道具不存在: id:" + id.ToString() + " 基本id:" + info.itemid.ToString());
                if (!GameServer.IsTestMode()) return;
                baseitem = new GameStruct.ItemTypeInfo();
                baseitem.id = info.itemid;
            }
            //等级不够
            if (play.GetBaseAttr().level < baseitem.req_level)
            {
                play.ChatNotice("等级不够,无法使用.");
                return;
            }
            //职业不符
            if (baseitem.req_profession != 0 && baseitem.req_profession != play.GetBaseAttr().profession)
            {
                play.ChatNotice("职业不符,无法使用.");
                return;
            }
            //是装备就穿戴装备
            if (IsEquip(baseitem.id))
            {
                //再次校验一下装备穿戴未知 防止非法封包
                if (GetEquipPostion(baseitem) != dwdata)
                {

                    return;
                }
                Equip(id, dwdata);
                return;
            }

            //特殊道具的处理
            play.SetUseItemEudemonId(0);
            if (baseitem.id == GameBase.Config.Define.ITEM_DIANJIANGYAOSHUI_ID)
            {
                uint nUseItemEudemonId = (uint)BaseFunc.MakeLong(param, param1);
                play.SetUseItemEudemonId(nUseItemEudemonId);
            }
            //执行脚本
            if (baseitem.actionid > 0)
            {
                mScriptItemId = id;
                ScripteManager.Instance().ExecuteAction(baseitem.actionid, play);
            }
        }