Purely drag and Drop. read the readme for context menu functionality, or you can simply use commands. If your players like this, and have any suggestions for achievements, please let me know. If you have my PVP Tournament system, you can uncomment the #if UsingTournamentSystem in AchievementSystem.cs for support.

Edited: 4/5/2020 version 1.2.2.0 Removed most Linq functionality for performance as well as some rare but unexpected crashes.
 
Last edited:
I am looking for rewards when players done each section of achievements.
Found this ine the AchievementsSystem.cs

bool hasReward = pm.HasStatReward;
bool hasValiant = pm.HasValiantStatReward;

Are the rewards bouns stats? If I was rights, the numbers which written at the end of below lines are the bounus stats.
Am I understanding correnctly?

C#:
                switch (e.NewCap)
                {
                    case 230:
                        if (!hasReward && !hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 8);
                        else if (hasReward)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 15);
                        break;
                    case 235:
                        if ((!hasReward && hasValiant) || (hasReward && !hasValiant))
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 8);
                        else if (!hasReward && !hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 9);
                        break;
                    case 240:
                        if(hasReward && hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 8);
                        if ((!hasReward && hasValiant) || (hasReward && !hasValiant))
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 9);
                        else if (!hasReward && !hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 10);
                        break;
                    case 245:
                        if(hasReward && hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 9);
                        if ((!hasReward && hasValiant) || (hasReward && !hasValiant))
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 10);
                        else if (!hasReward && !hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 11);
                        break;
                    case 250:
                        if(hasReward && hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 10);
                        if ((!hasReward && hasValiant) || (hasReward && !hasValiant))
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 11);
                        else if (!hasReward && !hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 12);
                        break;
                    case 255:
                        if(hasReward && hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 11);
                        if ((!hasReward && hasValiant) || (hasReward && !hasValiant))
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 12);
                        break;
                    case 260:
                        if (hasReward && hasValiant)
                            AchievementSystem.CheckAchievement(pm, AchievementType.Character, 12);
                        break;
                }
 
Yes. And i remember having a tough time writing this. There are 2 different stat rewards, plus stat scrolls whichmade this more complicated than it needed to be.
 
Some players of mine told me that click a button of gump “all” can make crash. I am trying to figure it out. Could you give me some advice? Thank you. :)

C#:
Server Crash Report
===================

ServUO Version 0.5, Build 7395.27472
Operating System: Microsoft Windows NT 6.2.9200.0
.NET Framework: 4.0.30319.42000
Time: 2020-04-04 오후 12:45:49
Mobiles: 46862
Items: 312399
Exception:
System.ArgumentOutOfRangeException:Index was out of range. Must be non-negative and less than the size of the collection. : index
   위치: System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   위치: Server.Achievements.AchievementGump.BuildAchievements()
   위치: Server.Achievements.AchievementGump.AddGumpLayout()
   위치: Server.Gumps.BaseGump.Refresh(Boolean recompile, Boolean close)
   위치: Server.Gumps.BaseGump.OnResponse(NetState state, RelayInfo info)
   위치: Server.Network.PacketHandlers.DisplayGumpResponse(NetState state, PacketReader pvSrc)
   위치: Server.Network.MessagePump.HandleReceive(NetState ns)
   위치: Server.Network.MessagePump.Slice()
   위치: Server.Core.Main(String[] args
 
opps i posted wrong crash file but yes when you click on a few buttons in the achievement system it crashes
 
Dexter_Lexia told me that players can have rewards when they finished each missions such as +stat bonus.
In the AchievementSystem.cs, it seems that each mission is given a score. By the way, is there any reward item that I can get with this score?
And I also don't find about +stat rewards. I think it is not rewards, it is just a misson what players can do. isn't it?
 
Last edited:
I may have misunderstood you. You get no rewards, simply a score. The ones regarding stat bonuses, is an achievement for the in-game stat rewards such as eating stat scrolls, or the ones you get for time accumulation.
 
Attached! Version 1.2.0.0:

AchievementSystem version 1.2.0.0 fixes a potential crash, and adds support for new timed achievements. You will find a couple new timed achivements in the Dungeon Section. Also, fixed an issue where achievements for Tokuno Islands had the incorrect map.
 
New Version, 1.2.1.1:

Fixed console spamming caused by new quest system. Added support for sovereign rewards, set to false by default.

Code:
        public static bool AwardSovereigns = false;
        public static double SovereignMultiplier = 5.0; // Sovereigns = Points * multiplier

multiplier is achievement points * multiplier.
 
I uploaded a new version, basically just some house keeping. I removed many of the Linq functions as well which was causing some rare but unexpected crashed.
 
Crafting achivement:
            Register(index++, new CraftBySkillAchievement(SkillName.Imbuing, "The Artificer", "Successfully imbue an item", 5, 1, index));
            Register(index++, new CraftBySkillAchievement(SkillName.Imbuing, "The Artificer, Revisited", "Successfully imbue 500 an item", 15, 500, index));
            Register(index++, new CraftBySkillAchievement(SkillName.Imbuing, "The Artificer, Extraordinaire", "Successfully imbue 1,500 items", 25, 1500, index));
            Register(index++, new CraftBySkillAchievement(SkillName.Imbuing, "The Artificer Legend", "Successfully imbue 5,000 items", 50, 5000));

Above 4 imbuing achievements do not work during the crafting achievement system. Even if players imbue, the counting number does not change.
 
1721290308016.png
How would I make it so it drops more than one Quest Ticket? Thanks! just a base reward of 5 for a completed achievement.
 
Code:
            int amount = 5; // Or use your award

            for (int i = 0; i < amount; i++)
            {
                  var item = GoldenQuestTicket();

                  pm.AddToBackpack(item);
            }

            pm.SendMessage($"You have been awarded {amount} Golden Quest Tickets for completing this achievement");
 
Last edited:
Back