public static void GainSPOnLeveLUP(Character character) { if (CharacterJobs.IsBeginner(character)) { character.SkillPoints += 1; } else { character.SkillPoints += 3; } }
public static void GainAPOnLeveLUP(Character character) { if (character == null) { return; } if (CharacterJobs.IsCygnus(character) && character.Stats.Level < 70) { character.Stats.abilityPoints += 6; } else if (CharacterJobs.IsCygnus(character) && character.Stats.Level > 70) { character.Stats.abilityPoints += 5; } else if (CharacterJobs.IsBeginner(character) && character.Stats.Level < 8) { character.Stats.abilityPoints += 0; if (character.Stats.Level < 6) { character.Stats.Strength += 5; } else if (character.Stats.Level >= 6 && character.Stats.Level < 8) { character.Stats.Strength += 4; character.Stats.Dexterity += 1; } } else if (CharacterJobs.IsBeginner(character) && character.Stats.Level == 8) { character.Stats.Strength = 4; character.Stats.Dexterity = 4; character.Stats.abilityPoints += 35; } else { character.Stats.abilityPoints += 5; } Update(character, CharacterConstants.StatisticType.AbilityPoints); }
public static void GainSPOnLeveLUP(Character character) { if (character == null) { return; } if (CharacterJobs.IsBeginner(character)) { character.Stats.skillPoints += 1; } else { character.Stats.skillPoints += 3; } Update(character, CharacterConstants.StatisticType.SkillPoints); }
public static void GainAPOnLeveLUP(Character character) { if (CharacterJobs.IsCygnus(character) && character.Level < 70) { character.AbilityPoints += 6; } else if (CharacterJobs.IsCygnus(character) && character.Level > 70) { character.AbilityPoints += 5; } else if (CharacterJobs.IsBeginner(character) && character.Level < 8) { character.AbilityPoints += 0; if (character.Level < 6) { character.Strength += 5; } else if (character.Level >= 6 && character.Level < 8) { character.Strength += 4; character.Dexterity += 1; } } else if (CharacterJobs.IsBeginner(character) && character.Level == 8) { character.Strength = 4; character.Dexterity = 4; character.AbilityPoints += 35; } else { character.AbilityPoints += 5; } }
public void UseCashItem(Packet iPacket) { short slot = iPacket.ReadShort(); int itemID = iPacket.ReadInt(); bool itemUsed = false; Item item = this[ItemConstants.ItemType.Cash, slot]; if (item == null || itemID != item.MapleID) { return; } switch (item.MapleID) { #region TeleportRocks case (int)ItemConstants.UsableCashItems.TeleportRock: { } break; case (int)ItemConstants.UsableCashItems.CokeTeleportRock: { } break; case (int)ItemConstants.UsableCashItems.VIPTeleportRock: { itemUsed = this.Parent.Trocks.Use(itemID, iPacket); } break; #endregion #region AP/SP Reset case (int)ItemConstants.UsableCashItems.APReset: { CharacterConstants.StatisticType statDestination = (CharacterConstants.StatisticType)iPacket.ReadInt(); CharacterConstants.StatisticType statSource = (CharacterConstants.StatisticType)iPacket.ReadInt(); CharacterStats.AddAbility(this.Parent, statDestination, 1, true); CharacterStats.AddAbility(this.Parent, statSource, -1, true); itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.SPReset1stJob: { if (!CharacterJobs.IsFirstJob(this.Parent)) { return; } //TODO: skill change itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.SPReset2stJob: { if (!CharacterJobs.IsSecondJob(this.Parent)) { return; } //TODO: skill change itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.SPReset3stJob: { if (!CharacterJobs.IsThirdJob(this.Parent)) { return; } //TODO: skill change itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.SPReset4stJob: { if (!CharacterJobs.IsFourthJob(this.Parent)) { return; } //TODO: skill change itemUsed = true; } break; #endregion #region ItemTags/ItemGuards case (int)ItemConstants.UsableCashItems.ItemTag: { short targetSlot = iPacket.ReadShort(); if (targetSlot == 0) { return; } Item targetItem = this[ItemConstants.ItemType.Equipment, targetSlot]; if (targetItem == null) { return; } targetItem.Creator = this.Parent.Name; targetItem.Update(); // TODO: This does not seem to update the item's creator. itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.ItemGuard: { } break; case (int)ItemConstants.UsableCashItems.Incubator: //doest belong here by name only by ordering of usableCashItemsID { } break; case (int)ItemConstants.UsableCashItems.ItemGuard7Days: { } break; case (int)ItemConstants.UsableCashItems.ItemGuard30Days: { } break; case (int)ItemConstants.UsableCashItems.ItemGuard90Days: { } break; #endregion #region Megaphones/Messengers case (int)ItemConstants.UsableCashItems.CheapMegaphone: { // NOTE: You can't use a megaphone unless you're over level 10. if (this.Parent.Level < 11) { return; } string text = iPacket.ReadString(); string message = string.Format($"{this.Parent.Name} : {text}"); // TODO: Include medal name. // NOTE: In GMS, this sends to everyone on the current channel, not the map (despite the item's description). using (Packet oPacket = new Packet(ServerOperationCode.BroadcastMsg)) { oPacket .WriteByte((byte)NoticeType.Megaphone) .WriteString(message); //this.Parent.Client.Channel.Broadcast(oPacket); } itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.Megaphone: { if (this.Parent.Level < 11) { return; } string text = iPacket.ReadString(); string message = string.Format($"{this.Parent.Name} : {text}"); // TODO: Include medal name. // NOTE: In GMS, this sends to everyone on the current channel, not the map (despite the item's description). using (Packet oPacket = new Packet(ServerOperationCode.BroadcastMsg)) { oPacket .WriteByte((byte)NoticeType.Megaphone) .WriteString(message); //this.Parent.Client.Channel.Broadcast(oPacket); } itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.SuperMegaphone: { if (this.Parent.Level < 11) { return; } string text = iPacket.ReadString(); bool whisper = iPacket.ReadBool(); string message = string.Format($"{this.Parent.Name} : {text}"); // TODO: Include medal name. using (Packet oPacket = new Packet(ServerOperationCode.BroadcastMsg)) { oPacket .WriteByte((byte)NoticeType.SuperMegaphone) .WriteString(message) .WriteByte(WvsGame.ChannelID) .WriteBool(whisper); //this.Parent.Client.World.Broadcast(oPacket); } itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.HeartMegaphone: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.SkullMegaphone: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.MapleTVMessenger: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.MapleTVStarMessenger: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.MapleTVHeartMessenger: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.Megassenger: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.StarMegassenger: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.HeartMegassenger: { if (this.Parent.Level < 11) { return; } } break; case (int)ItemConstants.UsableCashItems.ItemMegaphone: // NOTE: Item Megaphone. { if (this.Parent.Level < 11) { return; } string text = iPacket.ReadString(); bool whisper = iPacket.ReadBool(); bool includeItem = iPacket.ReadBool(); Item targetItem = null; if (includeItem) { ItemConstants.ItemType type = (ItemConstants.ItemType)iPacket.ReadInt(); short targetSlot = iPacket.ReadShort(); targetItem = this[type, targetSlot]; if (targetItem == null) { return; } } string message = string.Format($"{this.Parent.Name} : {text}"); // TODO: Include medal name. using (Packet oPacket = new Packet(ServerOperationCode.BroadcastMsg)) { oPacket .WriteByte((byte)NoticeType.ItemMegaphone) .WriteString(message) .WriteByte(WvsGame.ChannelID) .WriteBool(whisper) .WriteByte((byte)(targetItem != null ? targetItem.Slot : 0)); if (targetItem != null) { oPacket.WriteBytes(targetItem.ToByteArray(true)); } //this.Parent.Client.World.Broadcast(oPacket); } itemUsed = true; } break; #endregion #region FloatingMessage case (int)ItemConstants.UsableCashItems.KoreanKite: { } break; case (int)ItemConstants.UsableCashItems.HeartBalloon: { } break; case (int)ItemConstants.UsableCashItems.GraduationBanner: { } break; case (int)ItemConstants.UsableCashItems.AdmissionBanner: { } break; #endregion #region otherStuff case (int)ItemConstants.UsableCashItems.Note: // NOTE: Memo. { //string targetName = iPacket.ReadString(); //string message = iPacket.ReadString(); //if (this.Parent.Client.World.IsCharacterOnline(targetName)) //{ // using (Packet oPacket = new Packet(ServerOperationCode.MemoResult)) // { // oPacket // .WriteByte((byte)MemoResult.Error) // .WriteByte((byte)MemoError.ReceiverOnline); // this.Parent.Client.Send(oPacket); // } //} //else if (!Database.Exists("characters", "Name = {0}", targetName)) //{ // using (Packet oPacket = new Packet(ServerOperationCode.MemoResult)) // { // oPacket // .WriteByte((byte)MemoResult.Error) // .WriteByte((byte)MemoError.ReceiverInvalidName); // this.Parent.Client.Send(oPacket); // } //} //else if (false) // TODO: Receiver's inbox is full. I believe the maximum amount is 5, but need to verify. //{ // using (Packet oPacket = new Packet(ServerOperationCode.MemoResult)) // { // oPacket // .WriteByte((byte)MemoResult.Error) // .WriteByte((byte)MemoError.ReceiverInboxFull); // this.Parent.Client.Send(oPacket); // } //} //else //{ // Datum datum = new Datum("memos"); // datum["CharacterID"] = Database.Fetch("characters", "ID", "Name = {0}", targetName); // datum["Sender"] = this.Parent.Name; // datum["Message"] = message; // datum["Received"] = DateTime.Now; // datum.Insert(); // using (Packet oPacket = new Packet(ServerOperationCode.MemoResult)) // { // oPacket.WriteByte((byte)MemoResult.Sent); // this.Parent.Client.Send(oPacket); // } // used = true; //} } break; case (int)ItemConstants.UsableCashItems.CongratulatorySong: { } break; case (int)ItemConstants.UsableCashItems.PetNameTag: { //// TODO: Get the summoned pet. //string name = iPacket.ReadString(); //using (Packet oPacket = new Packet(ServerOperationCode.PetNameChanged)) //{ // oPacket // .WriteInt(this.Parent.ID) // .WriteByte() // NOTE: Index. // .WriteString(name) // .WriteByte(); // this.Parent.Map.Broadcast(oPacket); //} } break; case (int)ItemConstants.UsableCashItems.BronzeSackofMesos: { } break; case (int)ItemConstants.UsableCashItems.SilverSackofMesos: { } break; case (int)ItemConstants.UsableCashItems.GoldSackofMesos: { this.Parent.Meso += item.Meso; // TODO: We definitely need a GainMeso method with inChat parameter. using (Packet oPacket = new Packet(ServerOperationCode.Message)) { oPacket .WriteByte((byte)MessageType.IncreaseMeso) .WriteInt(item.Meso) .WriteShort(); this.Parent.Client.Send(oPacket); } itemUsed = true; } break; case (int)ItemConstants.UsableCashItems.FungusScroll: { } break; case (int)ItemConstants.UsableCashItems.OinkerDelight: { } break; case (int)ItemConstants.UsableCashItems.ZetaNightmare: { } break; case (int)ItemConstants.UsableCashItems.ChalkBoard: { } break; case (int)ItemConstants.UsableCashItems.ChalkBoard2: { string text = iPacket.ReadString(); this.Parent.Chalkboard = text; } break; case (int)ItemConstants.UsableCashItems.ScissorsofKarma: { } break; case (int)ItemConstants.UsableCashItems.ViciousHammer: { } break; #endregion } if (itemUsed) { this.Remove(itemID, 1); } else { Character.Release(this.Parent); // TODO: Blank inventory update. } }