public void SetStep(SagaDB.Quest.Step s) { this.PutUInt(s.ID, 8); this.PutByte(2, 12); this.PutUInt(s.nextStep, 13); this.PutByte(s.Status, 17); }
public static Weapon GetActiveWeapon(SagaDB.Actors.ActorPC pc) { foreach (Weapon w in pc.Weapons) { if (w.active == 1) return w; } Weapon nw = new Weapon(); nw.type = 0; return nw; }
public void SetActorInfo(SagaDB.Actors.ActorPC pc) { this.PutByte((byte)(pc.mapID + 0x65), 9);//Unknown this.PutByte((byte)(pc.Race), 10); this.PutByte(pc.mapID, 11); this.PutUShort(pc.maxHP, 12); this.PutUShort(pc.HP, 14); this.PutUShort(pc.maxSP, 16); this.PutUShort(pc.SP, 18); this.PutByte(pc.LP, 20);//Unknown this.PutByte((byte)pc.cLevel, 21); this.PutByte((byte)pc.job, 22); this.PutByte((byte)pc.jLevel, 23); }
private static void UpdateQuestItemSub(ActorPC pc, SagaDB.Quest.Quest quest,bool maploaded) { ActorEventHandlers.PC_EventHandler eh = (SagaMap.ActorEventHandlers.PC_EventHandler)pc.e; if (quest == null) return; if (!QuestItem.ContainsKey(quest.ID)) return; foreach (uint i in quest.Steps.Keys) { if (GetQuestStepStatus(pc, quest.ID, i) == 1) { if (!QuestItem[quest.ID].ContainsKey(i)) return; bool completed = true; SagaDB.Quest.Step step = quest.Steps[i]; foreach (questI q in QuestItem[quest.ID][i]) { List<SagaDB.Items.Item> l = pc.inv.GetInventoryList(); if (step.SubSteps == null) { step.SubSteps = new Dictionary<byte, byte>(); } if (!step.SubSteps.ContainsKey(q.SubSID)) step.SubSteps.Add(q.SubSID, 0); foreach (SagaDB.Items.Item j in l) { if (j.id == q.id) { if (step.SubSteps[q.SubSID] >= q.ammount) { if (maploaded) { Packets.Server.UpdateQuestSubStep p2 = new SagaMap.Packets.Server.UpdateQuestSubStep(); p2.SetQuestID(quest.ID); p2.SetStep(i); if (q.SubSID != 0) p2.SetSubStep((byte)(q.SubSID - 1)); p2.SetAmmount(j.stack); eh.C.netIO.SendPacket(p2, eh.C.SessionID); } continue; } Packets.Server.UpdateQuestSubStep p1 = new SagaMap.Packets.Server.UpdateQuestSubStep(); p1.SetQuestID(quest.ID); p1.SetStep(i); if (q.SubSID != 0) p1.SetSubStep((byte)(q.SubSID - 1)); p1.SetAmmount(j.stack); eh.C.netIO.SendPacket(p1, eh.C.SessionID); step.SubSteps[q.SubSID] = j.stack; } } } foreach (questI j in QuestItem[quest.ID][i]) { if (step.SubSteps[j.SubSID] < j.ammount) completed = false; } if (completed) SetQuestStepStatus(pc, quest.ID, i, 2); } } }
private static void UpdateEnemyInfoSub(ActorPC pc, uint MobID, SagaDB.Quest.Quest quest, bool maploded) { ActorEventHandlers.PC_EventHandler eh = (SagaMap.ActorEventHandlers.PC_EventHandler)pc.e; if (quest == null) return; if (!Enemys.ContainsKey(quest.ID)) return; foreach (uint i in quest.Steps.Keys) { if (GetQuestStepStatus(pc, quest.ID, i) == 1) { if (!Enemys[quest.ID].ContainsKey(i)) return; bool completed = true; SagaDB.Quest.Step step = quest.Steps[i]; foreach (EnemyInfo q in Enemys[quest.ID][i]) { if (step.SubSteps == null) { step.SubSteps = new Dictionary<byte, byte>(); } if (!step.SubSteps.ContainsKey(q.SubSID)) step.SubSteps.Add(q.SubSID, 0); if (q.id.Contains(MobID)) { if (step.SubSteps[q.SubSID] >= q.ammount) { if (maploded) { Packets.Server.UpdateQuestSubStep p2 = new SagaMap.Packets.Server.UpdateQuestSubStep(); p2.SetQuestID(quest.ID); p2.SetStep(i); if (q.SubSID != 0) p2.SetSubStep((byte)(q.SubSID - 1)); p2.SetAmmount(step.SubSteps[q.SubSID]); eh.C.netIO.SendPacket(p2, eh.C.SessionID); } continue; } step.SubSteps[q.SubSID]++; Packets.Server.UpdateQuestSubStep p1 = new SagaMap.Packets.Server.UpdateQuestSubStep(); p1.SetQuestID(quest.ID); p1.SetStep(i); if (q.SubSID != 0) p1.SetSubStep((byte)(q.SubSID - 1)); p1.SetAmmount(step.SubSteps[q.SubSID]); eh.C.netIO.SendPacket(p1, eh.C.SessionID); } } foreach (EnemyInfo j in Enemys[quest.ID][i]) { if (step.SubSteps[j.SubSID] < j.ammount) completed = false; } if (completed) SetQuestStepStatus(pc, quest.ID, i, 2); } } }
public void OnAddItem(Item nitem, SagaDB.Items.ITEM_UPDATE_REASON reason) { }
private void AddBonus(Actor actor, SagaDB.Items.Bonus i, BonusType type, bool unequip, uint id) { bool isRate = false; ActorPC pc = null; ActorEventHandlers.PC_EventHandler eh = null; if (actor.type == ActorType.PC) { pc = (ActorPC)actor; eh = (SagaMap.ActorEventHandlers.PC_EventHandler)pc.e; } if (i.Value > 20000 || i.Value < -20000) { isRate = true; } switch (i.Effect) { case ADDITION_BONUS.STR: if (actor.type != ActorType.PC || type != BonusType.Equipment) return; pc.BattleStatus.strbonus += AddInt(i.Value, isRate, pc.str, unequip); break; case ADDITION_BONUS.DEX: if (actor.type != ActorType.PC || type != BonusType.Equipment) return; pc.BattleStatus.dexbonus += AddInt(i.Value, isRate, pc.dex, unequip); break; case ADDITION_BONUS.CON: if (actor.type != ActorType.PC || type != BonusType.Equipment) return; pc.BattleStatus.conbonus += AddInt(i.Value, isRate, pc.con, unequip); break; case ADDITION_BONUS.INT: if (actor.type != ActorType.PC || type != BonusType.Equipment) return; pc.BattleStatus.intbonus += AddInt(i.Value, isRate, pc.intel, unequip); break; case ADDITION_BONUS.LUK: if (actor.type != ActorType.PC || type != BonusType.Equipment) return; pc.BattleStatus.lukbonus += AddInt(i.Value, isRate, pc.luk, unequip); break; case ADDITION_BONUS.PhysicalDef: if (type == BonusType.Equipment) actor.BattleStatus.defbonus += AddInt(i.Value, isRate, actor.BattleStatus.def, unequip); if (type == BonusType.Skill) actor.BattleStatus.defskill += AddInt(i.Value, isRate, actor.BattleStatus.def, unequip); break; case ADDITION_BONUS.HPMax: if (actor.type != ActorType.PC) return; if (type == BonusType.Equipment) pc.BattleStatus.hpbonus += AddInt(i.Value, isRate, pc.BattleStatus.hpBasic, unequip); if (type == BonusType.Skill) pc.BattleStatus.hpskill += (short)AddInt(i.Value, isRate, pc.BattleStatus.hpBasic, unequip); Skills.SkillHandler.CalcHPSP(ref pc); break; case ADDITION_BONUS.SPMax: if (actor.type != ActorType.PC) return; if (type == BonusType.Equipment) pc.BattleStatus.spbonus += AddInt(i.Value, isRate, pc.BattleStatus.spBasic, unequip); if (type == BonusType.Skill) pc.BattleStatus.spskill += (short)AddInt(i.Value, isRate, pc.BattleStatus.spBasic, unequip); Skills.SkillHandler.CalcHPSP(ref pc); break; case ADDITION_BONUS.HPRecover: if (pc.Tasks.ContainsKey("RegenerationHP")) { Tasks.Regeneration hp = (Tasks.Regeneration)pc.Tasks["RegenerationHP"]; if (type == BonusType.Equipment) pc.BattleStatus.hpregbonus += AddInt(i.Value, isRate, hp.hp, unequip); if (type == BonusType.Skill) pc.BattleStatus.hpregskill += AddInt(i.Value, isRate, hp.hp, unequip); } break; case ADDITION_BONUS.SPRecover: if (pc.Tasks.ContainsKey("RegenerationSP")) { Tasks.Regeneration sp = (Tasks.Regeneration)pc.Tasks["RegenerationSP"]; if (type == BonusType.Equipment) pc.BattleStatus.spregbonus += AddInt(i.Value, isRate, sp.hp, unequip); if (type == BonusType.Skill) pc.BattleStatus.spregskill += AddInt(i.Value, isRate, sp.hp, unequip); } break; case ADDITION_BONUS.PhysicalFlee: if (type == BonusType.Equipment) actor.BattleStatus.fleebonus += AddInt(i.Value, isRate, actor.BattleStatus.flee, unequip); if (type == BonusType.Skill) actor.BattleStatus.fleeskill += AddInt(i.Value, isRate, actor.BattleStatus.flee, unequip); break; case ADDITION_BONUS.RangedFlee: if (type == BonusType.Equipment) actor.BattleStatus.rfleebonus += AddInt(i.Value, isRate, actor.BattleStatus.rflee, unequip); if (type == BonusType.Skill) actor.BattleStatus.rfleeskill += AddInt(i.Value, isRate, actor.BattleStatus.rflee, unequip); break; case ADDITION_BONUS.MagicalFlee: if (type == BonusType.Equipment) actor.BattleStatus.mfleebonus += AddInt(i.Value, isRate, actor.BattleStatus.mflee, unequip); if (type == BonusType.Skill) actor.BattleStatus.mfleeskill += AddInt(i.Value, isRate, actor.BattleStatus.mflee, unequip); break; case ADDITION_BONUS.PhysicalATK: int min, max; if (actor.type != ActorType.PC) return; Skills.SkillHandler.GetPCATK(pc, out min, out max); if (type == BonusType.Equipment) actor.BattleStatus.atkbonus += AddInt(i.Value, isRate, max, unequip); if (type == BonusType.Skill) actor.BattleStatus.atkskill += AddInt(i.Value, isRate, max, unequip); Skills.SkillHandler.CalcAtk(ref actor); break; case ADDITION_BONUS.MaxWDamage: case ADDITION_BONUS.AtkMax: if (type == BonusType.Skill) actor.BattleStatus.atkmaxbonus += AddInt(i.Value, isRate, 0, unequip); break; case ADDITION_BONUS.MinWDamage: case ADDITION_BONUS.AtkMin: if (type == BonusType.Skill) actor.BattleStatus.atkminbonus += AddInt(i.Value, isRate, 0, unequip); break; case ADDITION_BONUS.MaxMWDamage: case ADDITION_BONUS.MagicalAtkMax: if (type == BonusType.Skill) actor.BattleStatus.matkmaxbonus += AddInt(i.Value, isRate, 0, unequip); break; case ADDITION_BONUS.MinMWDamage: case ADDITION_BONUS.MagicalAtkMin: if (type == BonusType.Skill) actor.BattleStatus.matkminbonus += AddInt(i.Value, isRate, 0, unequip); break; case ADDITION_BONUS.MaxRWDamage: case ADDITION_BONUS.RangedAtkMax: if (type == BonusType.Skill) actor.BattleStatus.ratkmaxbonus += AddInt(i.Value, isRate, 0, unequip); break; case ADDITION_BONUS.WalkSpeed: if (actor.type == ActorType.PC) { if (type == BonusType.Skill) actor.BattleStatus.speedskill += AddInt(i.Value, isRate, 500, unequip); else actor.BattleStatus.speedbonus += AddInt(i.Value, isRate, 500, unequip); } else { Scripting.Mob mob = (Scripting.Mob)actor.e; mob.WalkBonus += AddInt(i.Value, isRate, mob.mWalkSpeed, unequip); mob.RunBonus += AddInt(i.Value, isRate, mob.mRunSpeed, unequip); } break; case ADDITION_BONUS.ItemHPRecover: if (actor.type == ActorType.PC) { int value = SagaLib.Global.Random.Next(i.Value, (int)(i.Value * (1.5))); pc.HP = (ushort)(pc.HP + value); if (pc.HP > pc.maxHP) pc.HP = pc.maxHP; eh.C.SendCharStatus(0); eh.C.SendSkillEffect(id, SagaMap.Skills.SkillEffects.HP, (uint)value); } break; case ADDITION_BONUS.ItemSPRecover: if (actor.type == ActorType.PC) { int value = SagaLib.Global.Random.Next(i.Value, (int)(i.Value * (1.5))); pc.HP = (ushort)(pc.SP + value); if (pc.SP > pc.maxHP) pc.SP = pc.maxSP; eh.C.SendCharStatus(0); eh.C.SendSkillEffect(id, SagaMap.Skills.SkillEffects.SP, (uint)value); } break; } }
public void OnAddItem( Item nItem, SagaDB.Items.ITEM_UPDATE_REASON reason ) { byte index, amount; AddItemResult res = I.inv.AddItem(nItem, out index, out amount); if (res == AddItemResult.ERROR) { Logger.ShowWarning("pc event handler: cannot add item with ID " + nItem.id,null); return; } nItem.index = index; nItem.stack = amount; if (res == AddItemResult.NEW_INDEX) { Packets.Server.AddItem p1 = new SagaMap.Packets.Server.AddItem(); p1.SetContainer(CONTAINER_TYPE.INVENTORY); p1.SetItem(nItem); C.netIO.SendPacket(p1, C.SessionID); MapServer.charDB.NewItem(this.C.Char, nItem); } Packets.Server.UpdateItem p2 = new SagaMap.Packets.Server.UpdateItem(); p2.SetContainer(CONTAINER_TYPE.INVENTORY); p2.SetItemIndex(nItem.index); p2.SetAmount(nItem.stack); p2.SetUpdateType(SagaMap.Packets.Server.ITEM_UPDATE_TYPE.AMOUNT); p2.SetUpdateReason(reason); C.netIO.SendPacket(p2, C.SessionID); MapServer.charDB.UpdateItem(this.C.Char, nItem); }
public ChangeEquipArgs(SagaDB.Items.EQUIP_SLOT eSlot, int itemID) { this.eSlot = eSlot; this.itemID = itemID; }
public void SetUpdateReason(SagaDB.Items.ITEM_UPDATE_REASON reason) { this.PutByte((byte)reason, 6); }
private static void LoseDura(ActorPC pc, SagaDB.Items.EQUIP_SLOT slot) { Packets.Server.ItemAdjust p = new SagaMap.Packets.Server.ItemAdjust(); ActorEventHandlers.PC_EventHandler eh = (SagaMap.ActorEventHandlers.PC_EventHandler)pc.e; if (pc.inv.EquipList.ContainsKey(slot)) if (pc.inv.EquipList[slot].durability > 0) { pc.inv.EquipList[slot].durability--; p.SetContainer(1); p.SetFunction(SagaMap.Packets.Server.ItemAdjust.Function.Durability); p.SetSlot((byte)slot); p.SetValue(pc.inv.EquipList[slot].durability); eh.C.netIO.SendPacket(p, eh.C.SessionID); if (pc.inv.EquipList[slot].durability == 0) { pc.inv.EquipList[slot].active = 0; p = new SagaMap.Packets.Server.ItemAdjust(); p.SetContainer(1); p.SetSlot((byte)slot); p.SetFunction(SagaMap.Packets.Server.ItemAdjust.Function.Active); p.SetValue(0); eh.C.netIO.SendPacket(p, eh.C.SessionID); Bonus.BonusHandler.Instance.EquiqItem(pc, pc.inv.EquipList[slot], true); SkillHandler.CalcHPSP(ref pc); eh.C.SendCharStatus(0); eh.C.SendExtStats(); eh.C.SendBattleStatus(); MapServer.charDB.UpdateItem(pc, pc.inv.EquipList[slot]); } } }