private static void StartTeach_OnCommand(CommandEventArgs e) { TeiravonMobile m_Player = (TeiravonMobile)e.Mobile; Party p = Server.Engines.PartySystem.Party.Get(m_Player); TeiravonMobile tm_member; if (p == null) { m_Player.SendMessage("You must pick some students first using ]teach"); } else if (m_Player.TeachSkill == 999) { m_Player.SendMessage("You must pick the skill to teach first by using ]teach"); } else if (m_Player.NextTeach > DateTime.Now) { m_Player.SendMessage("It is too soon to teach again!"); } else if (m_Player != p.Leader) { m_Player.SendMessage("Only the teacher can begin the teaching session!"); } else { m_Player.NextTeach = DateTime.Now + TimeSpan.FromHours(24.0); m_Player.SendMessage("The teaching session has begun"); for (int i = 0; i < p.Members.Count; ++i) { Mobile f = ((PartyMemberInfo)p.Members[i]).Mobile; if (f is TeiravonMobile) { tm_member = (TeiravonMobile)f; if (tm_member != m_Player) { tm_member.NextLearn = DateTime.Now + TimeSpan.FromHours(24.0); } tm_member.SendMessage("The teaching session has begun"); } } Timer m_LearnTimer = new LearnTimer(m_Player, 1, m_Player.TeachingSkill * 2, DateTime.Now + TimeSpan.FromMinutes(7.0)); m_LearnTimer.Start(); } }
protected override void OnTick() { int partycount; int skillgain; TeiravonMobile m_student; double studentskill; double studentcap; double teachermax; Party p = Party.Get(m_teacher); if (p != null) { partycount = p.Members.Count - 1; // m_teacher.SendMessage("{0} party count", partycount); if (partycount == 1) { skillgain = 3; } else if (partycount > 1 && partycount < 5) { skillgain = 2; } else { skillgain = 1; } // m_teacher.SendMessage("{0} party count {1} skill gain", partycount, skillgain); for (int i = 0; i < p.Members.Count; ++i) { Mobile f = ((PartyMemberInfo)p.Members[i]).Mobile; if (f is TeiravonMobile) { m_student = (TeiravonMobile)f; if (m_student != m_teacher && m_student.Alive && Utility.InUpdateRange(m_teacher, m_student)) { studentskill = m_student.Skills[skill].Base; studentcap = m_student.Skills[skill].Cap; teachermax = m_teacher.Skills[skill].Base * scalar; if (studentskill + skillgain >= teachermax) { if (studentskill + skillgain >= studentcap) { if (teachermax > studentcap) { m_student.Skills[skill].Base = studentcap; m_student.SendMessage("You learn as much as you are able to!"); } else { m_student.Skills[skill].Base = teachermax; m_student.SendMessage("You learn as much as your teacher is capable of teaching!"); } } } else { if (studentskill + skillgain > studentcap) { m_student.Skills[skill].Base = studentcap; m_student.SendMessage("You learn as much as you are capable of!"); } else { m_student.Skills[skill].BaseFixedPoint += skillgain; m_student.SendMessage("You learn something!"); // m_teacher.SendMessage("{0} party count {1} skill gain {2}skill", partycount, skillgain, m_student.Skills[skill].Base); } } } if (RunCount == MaxCount) { f.SendMessage("The teaching session is over."); } } } if (RunCount == MaxCount) { m_teacher.SendMessage("The teaching session is over."); m_teacher.TeachSkill = 999; } if (RunCount < MaxCount) { RunCount++; Timer m_LearnTimer = new LearnTimer(m_teacher, RunCount, MaxCount, DateTime.Now + TimeSpan.FromMinutes(7.0)); m_LearnTimer.Start(); } } }