public bool CheckMagicAttackSpeed(ushort magicid, byte magiclv) { GameStruct.MagicTypeInfo type = ConfigManager.Instance().GetMagicTypeInfo(magicid, magiclv); if (type == null) { return(false); } if (type.delay_ms == 0) { return(true); } bool bFind = false; bool bError = false; GameBase.Core.TimeOut time = null; for (int i = 0; i < mMagicAttackSpeed.Count; i++) { time = mMagicAttackSpeed[i]; if ((ushort)time.GetObject() == magicid) { if (time.ToNextTime()) { bFind = true; break; } else { bError = true; } } } //把其他的技能施法速度更新一遍 for (int i = 0; i < mMagicAttackSpeed.Count; i++) { mMagicAttackSpeed[i].Update(); } if (!bFind && bError == false) { time = new GameBase.Core.TimeOut(); time.SetInterval(type.delay_ms); time.SetObject(magicid); time.Update(); mMagicAttackSpeed.Add(time); return(true); } return(bFind); }
////增加技能经验 public void AddMagicExp(uint typeid, uint exp) { if (mDicMagic.ContainsKey(typeid)) { GameStruct.MagicTypeInfo typeinfo = ConfigManager.Instance().GetMagicTypeInfo((uint)(typeid)); if (typeinfo == null) { return; } if (typeinfo.need_exp == 0) { return; } mDicMagic[typeid].exp += exp; if (mDicMagic[typeid].exp >= typeinfo.need_exp) { mDicMagic[typeid].level++; mDicMagic[typeid].exp = 0; } SendMagicInfo(mDicMagic[typeid]); } }
//添加状态 //nStatus 状态id //nTime 持续时间- 秒 0为无限时间 //bCover 是否覆盖该状态 public void AddStatus(int nStatus, int nTime = 0, bool bCover = true) { if (this.QueryStatus(GameStruct.RoleStatus.STATUS_DIE) != null) { return; } bool bAdd = false; bool bSendState = true; GameStruct.RoleStatus status = null; for (int i = 0; i < mListStatus.Count; i++) { status = mListStatus[i]; if (status.nStatus == nStatus) { if (bCover) { status.nTime = nTime * 1000; status.nLastTick = System.Environment.TickCount; } else { status.nTime += nTime * 1000; } bAdd = true; break; } } if (!bAdd) { status = new GameStruct.RoleStatus(); status.nStatus = nStatus; status.nTime = nTime * 1000; mListStatus.Add(status); } int nOldEff = GetEffect(); switch (nStatus) { case GameStruct.RoleStatus.STATUS_XPFULL: //XP爆气-- 下降 { //mi64Effect &= ~ Define.KEEPEFFECT_XPFULL; //play.ChangeAttribute(GameStruct.UserAttribute.STATUS1, 64,true); break; } case GameStruct.RoleStatus.STATUS_XPFULL_ATTACK: //xp爆气- 技能被单击 { this.DeleteStatus(GameStruct.RoleStatus.STATUS_XPFULL); //删除xp爆气buff mXpTime.SetInterval(Define.XP_MAX_FULL_SECS); mXpTime.Update(); mi64Effect |= Define.KEEPEFFECT_XPFULL; break; } case GameStruct.RoleStatus.STATUS_MOLONGSHOUHU: //魔龙守护 { play.ChangeAttribute(GameStruct.UserAttribute.MOLONGSHOUHU_STATUS, 1, true); ushort nMagicLv = play.GetMagicSystem().GetMagicLevel(GameStruct.MagicTypeInfo.MOLONGSHOUHU); GameStruct.MagicTypeInfo magicInfo = ConfigManager.Instance().GetMagicTypeInfo(GameStruct.MagicTypeInfo.MOLONGSHOUHU, (byte)nMagicLv); if (magicInfo != null) { //没有实际效果-- 待修正 //添加buff- int nDefense = (int)magicInfo.power; byte[] data1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; GameBase.Network.PacketOut outpack = new GameBase.Network.PacketOut(play.GetGamePackKeyEx()); outpack.WriteUInt16(48); outpack.WriteUInt16(1127); outpack.WriteUInt32(play.GetTypeId()); outpack.WriteInt32(nTime); outpack.WriteInt32(nDefense); outpack.WriteBuff(data1); play.SendData(outpack.Flush()); } break; } case GameStruct.RoleStatus.STATUS_STEALTH: //潜行 { mi64Effect |= Define.KEEPEFFECT_LURKER; break; } case GameStruct.RoleStatus.STATUS_CRIME: //闪蓝 { mi64Effect |= Define.KEEPEFFECT_CRIME; break; } case GameStruct.RoleStatus.STATUS_RED: //红名 { mi64Effect |= Define.KEEPEFFECT_RED; break; } case GameStruct.RoleStatus.STATUS_BLOCK: //黑名 { mi64Effect |= Define.KEEPEFFECT_DEEPRED; break; } case GameStruct.RoleStatus.STATUS_FLY: //雷霆万钧单独处理.要把xp满的包发下去 { mi64Effect |= Define.KEEPEFFECT_FLY; NetMsg.MsgUserAttribute msg = new NetMsg.MsgUserAttribute(); msg.role_id = play.GetTypeId(); msg.Create(null, null); msg.AddAttribute(GameStruct.UserAttribute.STATUS, (uint)GetEffect(false)); msg.AddAttribute(GameStruct.UserAttribute.STATUS1, (uint)GetEffect()); //这是xp满的标识 play.BroadcastBuffer(msg.GetBuffer(), true); bSendState = false; break; } case GameStruct.RoleStatus.STATUS_HIDDEN: { mi64Effect |= Define.KEEPEFFECT_HIDDEN; break; } case GameStruct.RoleStatus.STATUS_HEILONGWU: { mi64Effect |= Define.KEEPEFFECT_HEILONGWU; break; } case GameStruct.RoleStatus.STATUS_YUANSUZHANGKONG: { //修改元素掌控状态 play.ChangeAttribute(GameStruct.UserAttribute.YUANSUZHANGKONG, 512, true); //添加buff byte[] data1 = { 48, 0, 103, 4 }; byte[] data2 = { 128, 81, 1, 0, 100, 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, 2, 0, 0 }; GameBase.Network.PacketOut outpack = new GameBase.Network.PacketOut(play.GetGamePackKeyEx()); outpack.WriteBuff(data1); outpack.WriteUInt32(play.GetTypeId()); outpack.WriteBuff(data2); play.SendData(outpack.Flush()); bSendState = false; break; } case GameStruct.RoleStatus.STATUS_JUYANSHENGDUN: //法师 巨岩圣盾 { byte[] data1 = { 48, 0, 103, 4 }; byte[] data2 = { 132, 3, 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, 4, 0, 0 }; GameBase.Network.PacketOut outpack = new GameBase.Network.PacketOut(play.GetGamePackKeyEx()); outpack.WriteBuff(data1); outpack.WriteUInt32(play.GetTypeId()); outpack.WriteBuff(data2); play.SendData(outpack.Flush()); bSendState = false; break; } case GameStruct.RoleStatus.STATUS_ANSHAXIELONG: //亡灵巫师- 暗杀邪龙 { if (mObject_CALL != null) { mObject_CALL.ClearThis(); } GameStruct.MonsterInfo monster = ConfigManager.Instance().GetMonsterInfo(Define.ANSHAXIELONG_MONSTER_ID); if (monster == null) { Log.Instance().WriteLog("创建暗沙邪龙失败!!,无此怪物id!"); break; } int nx = play.GetCurrentX() + GameStruct.DIR._DELTA_X[play.GetDir()]; int ny = play.GetCurrentY() + GameStruct.DIR._DELTA_Y[play.GetDir()]; mObject_CALL = new AnShaXieLongObject(play, (short)nx, (short)ny, play.GetDir(), monster.id, monster.ai); play.GetGameMap().AddObject(mObject_CALL, null); mObject_CALL.RefreshVisibleObject(); mObject_CALL.Alive(false); break; } case GameStruct.RoleStatus.STATUS_MINGGUOSHENGNV: //冥国圣女 { if (mObject_CALL != null) { mObject_CALL.ClearThis(); } GameStruct.MonsterInfo monster = ConfigManager.Instance().GetMonsterInfo(Define.MINGGUOSHENGNV_MONSTER_ID); if (monster == null) { Log.Instance().WriteLog("创建冥国圣女失败!!,无此怪物id!"); break; } int nx = play.GetCurrentX() + GameStruct.DIR._DELTA_X[play.GetDir()]; int ny = play.GetCurrentY() + GameStruct.DIR._DELTA_Y[play.GetDir()]; mObject_CALL = new MingGuoShengNv(play, (short)nx, (short)ny, play.GetDir(), monster.id, monster.ai); play.GetGameMap().AddObject(mObject_CALL, null); mObject_CALL.RefreshVisibleObject(); mObject_CALL.Alive(false); break; } case GameStruct.RoleStatus.STATUS_WANGNIANWULING: //亡念巫灵 { if (mObject_CALL != null) { mObject_CALL.ClearThis(); } GameStruct.MonsterInfo monster = ConfigManager.Instance().GetMonsterInfo(Define.WANGNIANWULONG_MONSTER_ID); if (monster == null) { Log.Instance().WriteLog("创建亡念巫灵失败!!,无此怪物id!"); break; } int nx = play.GetCurrentX() + GameStruct.DIR._DELTA_X[play.GetDir()]; int ny = play.GetCurrentY() + GameStruct.DIR._DELTA_Y[play.GetDir()]; mObject_CALL = new WangNianWuLing(play, (short)nx, (short)ny, play.GetDir(), monster.id, monster.ai); play.GetGameMap().AddObject(mObject_CALL, null); mObject_CALL.RefreshVisibleObject(); mObject_CALL.Alive(false); break; } case GameStruct.RoleStatus.STATUS_HUASHENWANGLING: { mi64EffectEx |= Define.KEEPEFFECT_HUASHENWULING; break; } case GameStruct.RoleStatus.STATUS_HUASHENWUSHI: { DeleteStatus(GameStruct.RoleStatus.STATUS_HUASHENWANGLING); break; } case GameStruct.RoleStatus.STATUS_ZHAOHUANWUHUAN: { mi64Effect |= Define.KEEPEFFECT_ZHAOHUANWUHUAN; break; } case GameStruct.RoleStatus.STATUS_MIXINSHU: //血族 迷心术 { mi64EffectEx |= Define.KEEPEFFECT_MIXINSHU; GameBase.Network.PacketOut outpack = new GameBase.Network.PacketOut(play.GetGamePackKeyEx()); //buff byte[] data = { 120, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; outpack.WriteUInt16(48); outpack.WriteUInt16(1127); outpack.WriteUInt32(play.GetTypeId()); outpack.WriteBuff(data); play.SendData(outpack.Flush()); break; } case GameStruct.RoleStatus.STATUS_XUEXI: //血族 血袭 { mi64EffectEx |= Define.KEEPEFFECT_XUEXI; GameBase.Network.PacketOut outpack = new GameBase.Network.PacketOut(play.GetGamePackKeyEx()); byte[] data = { 60, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; outpack.WriteUInt16(48); outpack.WriteUInt16(1127); outpack.WriteUInt32(play.GetTypeId()); outpack.WriteBuff(data); play.SendData(outpack.Flush()); break; } case GameStruct.RoleStatus.STATUS_DIE: //死亡状态 { mi64Effect |= Define.KEEPEFFECT_DIE; break; } } if (bSendState) { this.SendState(); // play.ChangeAttribute(state, GetEffect(state == GameStruct.UserAttribute.STATUS1),true); } //if (GetEffect() != nOldEff) //{ // play.ChangeAttribute(state, GetEffect()); //} }
private bool LoadMagicTypeInfo() { String text = mPacket.LoadFileToText(TextDefine.CONFIG_FILE_MAGICTYPE); CsvFile csv = new CsvFile(text); String v; for (int i = 0; i < csv.GetLine(); i++) { GameStruct.MagicTypeInfo info = new GameStruct.MagicTypeInfo(); v = csv.GetFieldInfoToValue(i, "id"); info.id = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "typeid"); info.typeid = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "sort"); info.sort = Convert.ToByte(v); v = csv.GetFieldInfoToValue(i, "name"); info.name = v; v = csv.GetFieldInfoToValue(i, "crime"); info.crime = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "ground"); info.ground = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "multi"); info.multi = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "target"); info.target = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "level"); info.level = Convert.ToByte(v); v = csv.GetFieldInfoToValue(i, "use_mp"); info.use_mp = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "use_potential"); info.use_potential = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "power"); info.power = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "intone_speed"); info.intone_speed = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "percent"); info.percent = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "step_secs"); info.step_secs = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "range"); info.range = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "distance"); info.distance = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "status_chance"); info.status_chance = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "status"); info.status = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "need_prof"); info.need_prof = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "need_exp"); info.need_exp = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "need_level"); info.need_level = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "need_gemtype"); info.need_gemtype = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "use_xp"); info.use_xp = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "weapon_subtype"); info.weapon_subtype = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "active_times"); info.active_times = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "auto_active"); info.auto_active = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "floor_attr"); info.floor_attr = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "auto_learn"); info.auto_learn = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "learn_level"); info.learn_level = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "drop_weapon"); info.drop_weapon = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "use_ep"); info.use_ep = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "weapon_hit"); info.weapon_hit = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "use_item"); info.use_item = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "next_magic"); info.next_magic = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "delay_ms"); info.delay_ms = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "use_item_num"); info.use_item_num = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "width"); info.width = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "durability"); info.durability = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "apply_ms"); info.apply_ms = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "track_id"); info.track_id = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "track_id2"); info.track_id2 = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "auto_learn_prob"); info.auto_learn_prob = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "group_type"); info.group_type = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "group_member1_pos"); info.group_member1_pos = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "group_member2_pos"); info.group_member2_pos = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "group_member3_pos"); info.group_member3_pos = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "magic1"); info.magic1 = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "magic2"); info.magic2 = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "magic3"); info.magic3 = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "magic4"); info.magic4 = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "attack_combine"); info.attack_combine = Convert.ToUInt32(v); v = csv.GetFieldInfoToValue(i, "flag"); info.flag = 0; mDicMagicType[info.id] = info; } return true; }