pre pub16 bard skills

Requiamer

New Member
Feb 12, 2020
4
0
Hi everyone i'm new here, but i was into Uo emulation a long time ago (runuo).

To make it short i just try to revive the time i played UO. It's mostly for my house, i have no intention for public server. So i recreated a server as fidel as i can for what i recall. Things need quiet some work especially if you tweak all the detail in your shard.

My biggest grip right now is about bard skills that just didn't work mechanically as i recall they did.

In any case i changed to barding difficulty formula to be almost as it used to be pre pub16 from what i recall at least, i did the same with taming but taming is easy for me.

The thing is first provocation had a great master "no fail" trigger or whatever it used to be called, just like you could hide at great master hiding even with LOS but couldn't at other hiding level. For example we used to fight in destard lv2 for loot with other bards and it was obvious at 99.9 barding you would fail, but great master was never failing a provocation. I just don't know how i can add such line in the codes, i know what i should do but i have no coding background to make it happen, (probably in provocation.cs or baseinstrument.cs) if anyone can help about this that would be amazing.

My next grip i have is about peacemaking. Pre pub16. peacemaking on selftarget (i don't even recall using it on a target back then) would just drop war mode just like it does right now. The problem is when provocated creatures are pacified, they keep their target in the system right now, they just drop war mode for an amount of time, but will continue fighting past this timer. They shouldn't. They only did so back in the day mostly on magic creature because they would use spells and re initiate the fight (mostly poison) or if a hit was going off right while peacemaking, but mechanically the barding skill would not reinitiate on it's own. Some mobs would have harder time dropping target but it was due to the Ai, not the skill itself.
But once again i'm not that good into coding to add a line so the BardTarget is dropped or become null once pacified, if anyone can tell me how i can add that; that would be great.

Anyway it's great to be able to still find good doc, emulators and server about a game you played 20+y ago, so thumbs up for this.
 

sahisahi

Well-Known Member
Jan 13, 2016
790
73


====================
Background
====================

UOGamers: Rebirth was a free UO shard run by the official UOGamers/RunUO team from 2004 - 2006. The original idea behind Rebirth was to be as accurate as possible to Ultima Online as it existed in late 1997 and early 1998 (as it was less than a year after it came out). That was the era that most of us (at the time in 2003/2004, anyway) first fell in love with Ultima Online.



Thats all i found i think rebrith repack suits your needs
 

Requiamer

New Member
Feb 12, 2020
4
0
Ye i tried it, even played on Rebirth back in the days. And sadly it have the same problems i'm pointing here. It might sound funny, but i actually have an easier time tweaking an actual servuo release with t2a setting on it, than using a Rebirth base.
 

Requiamer

New Member
Feb 12, 2020
4
0
I actually could define the "problems" more clearly

first i used an old base of runuo (Rebirth) and did also my test on servuo but probably changed too much those files and got confused there. So most of the strange behavior are actually gone in a fresh serv uo install, so i apologize for that. It basically was because the agressor list didn't reset properly back then, but was probably fixed later. Also to be honest the pre pub setting (and honestly even UOR) shoudl always be pre pub16, as pub 16 was one of the big AOS change and the entire UOR bard and taming worked differently the entire period of UOR. ie barding was not difficulty based, it was a raw % chance and could be macroed to master (100skill) on sheeps or other animal locked in pens. But i can understand even today server admin don't want poeple to use macros too much, also peacemaking was only area and range check was different.

The only really thing that bother me even in the last serv uo is that once 2 mobs are provoced, area peace don't reset their agressor bard list, i'm pretty sure it reset in OSI servers or at least used to last i played a decade ago. It reset if you go out of range though so it's not a big deal honestly because let be honest after pub 16 area peace was basically turned useless, as the timer was just too short (had to crank it up to make it usefull on my server). They also, if i recall well, made the mobs in general agro a lost faster around that time, they used to have a slight delay before agro in t2a.

Also i never learned C# or any coding, i played with those files long enough to be able to find similar codes and just copy them, alter them slightly and have them work. But ye i(m pretty lost as soon as i need to get into it more deeply or doing something from scratch.
 

djredman99

Member
Feb 11, 2020
12
0
I'll take a look this evening to see if I can track down where barding is being handled. I'm new to ServUO so don't expect an immediate answer but I'm a developer by trade so I should be able to figure it out.
 

djredman99

Member
Feb 11, 2020
12
0
When you say "area peace don't reset their agressor bard list", does that mean peacemaking is not stopping two creatures from fighting if they are already provoked?
 

Requiamer

New Member
Feb 12, 2020
4
0
well they will stop for the time the pacified effect last in servuo right now, but that's the thing in area peacemaking there should not be any timer, if it succeed it should stop all fighting in the bard range. It should only have a timer for target peacemaking, and even then i don't think passive creature should reinitiate their fight.

In fact in the era i was playing we used to farm a lot the shadow wyrms in destard 2, and sometime other bards would come and try to "steal" the spot. One of the common tactic was to area peace so the mobs would switch target to who ever is closer to the mob. Also in old days of t2a a lot of bard used to pk using mobs instead of directly killing someone with weapons or spells, which was handy because you never had to deal with bad karma, mobs would do the killing for you, it was really one of the fun part of early day barding in UO. I'm pretty sure you still can find stories of this in old uo web site or what not. There used to be a very well known bard pk, one of the guy that would always role play and had a web site with all his storis with screenshot and all, but i just can't recall his name, the guy was a legend back then.
 

djredman99

Member
Feb 11, 2020
12
0
Ok, so in the code when you provoke 2 mobs together, they set each other as their aggressor.

Look at \Scripts\Skills\Peacemaking.cs on line 131
C#:
if (m is BaseCreature && !((BaseCreature)m).BardPacified)
{
    ((BaseCreature)m).Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(1.0));
}
This is where the call to successfully calm a mob within range occurs.

Then in \Scripts\Mobiles\Normal\BaseCreature.cs, you see the Pacify and Provoke methods.
C#:
public void Pacify(Mobile master, DateTime endtime)
{
    BardPacified = true;
    BardEndTime = endtime;
}
.
.
.
public void Provoke(Mobile master, Mobile target, bool bSuccess)
{
    BardProvoked = true;

    if (!Core.ML)
    {
        PublicOverheadMessage(MessageType.Emote, EmoteHue, false, "*looks furious*");
    }

    if (bSuccess)
    {
        PlaySound(GetIdleSound());

        BardMaster = master;
        BardTarget = target;
        Combatant = target;
        BardEndTime = DateTime.UtcNow + TimeSpan.FromSeconds(30.0);

        if (target is BaseCreature)
        {
            BaseCreature t = (BaseCreature)target;

            if (t.Unprovokable || (t.IsParagon && BaseInstrument.GetBaseDifficulty(t) >= 160.0))
            {
                return;
            }

            t.BardProvoked = true;

            t.BardMaster = master;
            t.BardTarget = this;
            t.Combatant = this;
            t.BardEndTime = DateTime.UtcNow + TimeSpan.FromSeconds(30.0);
        }
        else if (target is PlayerMobile)
        {
            ((PlayerMobile)target).Combatant = this;
            Combatant = target;
        }
    }
    else
    {
        PlaySound(GetAngerSound());

        BardMaster = master;
        BardTarget = target;
    }
}
You will want to do two additional things in the Pacify method to get your behavior, set the BardTarget = null and BardProvoked = false like this:

C#:
public void Pacify(Mobile master, DateTime endtime)
{
    BardPacified = true;
    BardEndTime = endtime;
    BardProvoked = false;
    BardTarget = null;
}
That should take care of it for you, but I have not tested this myself, could be something I'm missing as I'm new to ServUO.

The BaseAI.cs class is where a mob is checking (EventHandler) if they are provoked and who their target is. As it is without any modification, once the area peacemaking ends, it is finding itself with BardProvoke still being true and if the target is in range, it resets its aggression on that target.

I hope this gets you what you needed!