Aller au contenu

Photo

XP OnDeath Only awarded for Participants in Combat


  • Veuillez vous connecter pour répondre
44 réponses à ce sujet

#26
BelowTheBelt

BelowTheBelt
  • Members
  • 394 messages

I've been kind of thinking of an idea I'm tentatively calling the 'Combat Role System'.  This establishes different roles within combat that might be served and applying xp multipliers based on those.  I don't know if this is specifically what you're interested in, but I'll explain it anyway - maybe it will spark some other ideas.  Essentially, the thinking is that xp has 2 components:  Distance and Role.

 

Begin with your current distance-based xp system and cut those rates to a very low minimum.  IMO, everyone on a battlefield that is somewhat close to a battle gets some measure of experience (based on the premise that being exposed to combat makes you more aware of combat tactics, which makes you more experienced).  This base number is what possibly gets leeched.

 

Then, you add xp multipliers for different 'roles' or combat tiers that the PCs may play during the battle.  In this way, you incent behaviors you want to see.  These tiers are hierarchial and once a PC earns a tier in combat, they can't get bumped down to a lower tier for that creature. And, they only are assigned 1 Role during the combat for that creature (whichever is the highest role they achieved).

 

Each combat role has a different multiplier.  What's more, this multiplier is based off a different xp base from the distance-based xp system.

 

Combat Roles could include:

  1. Killer (3x multiplier)
  2. Damager (2x multiplier)
  3. Combat Medic (2x multiplier)
  4. Buffer (1.2 multiplier)
  5. Participant (default - no multiplier)
  6. Non Participant (outside of distance area or exceeds level-gap - no xp)

 

For example:

Fighter, thief, mage, cleric of equal level meet a band of 7 orcs:

 

Fighter rushes in to attack, thief goes to flank, mage begins to cast fireball, and cleric casts bless.

 

Before the cleric finishes his spell, Fighter kills the first orc in 1 slash, earning him the 'Killer' role for that creature.  The base distance xp system earns him 3xp, which is the same that everyone in the distance radius recieves.  However, since he was the Killer, he gets to dip into the Combat Role System, which evaluates the CR of the orc and says that the base xp for that creature is 5 * his role multiplier.  As Killer, his muliplier is 3, so he earns 15 for the kill, plus 3 for the distance-based xp = 18 total for the kill.  All other party members recieve 3 for the kill.  

 

Before the next orc drops, the cleric finishes his blessing, thus earning himself Combat Role System xp as well for the remainder of the combat, at least within the 'Buffer' tier (for creatures of this low CR, it only means an additional +1 xp point, though).

 

Mage's fireball immolates 4 of the remaining orcs (and severely damaging the thief).  So he earns 72xp for the kills (4orcs x 18xp), while the other PCs earn 12 (4x3) each (the cleric earns an additional +4xp per his 'Buffer' role).  Further, the mage has damaged the remaining 2 orcs, earning him a 'Damager' role on those two.  If he manages to get some magic missles off and kill them before any others, he'll be  promoted to Killer for any he actually kills, but he can't ever go lower than 'Damager' for those 2.

 

The thief, smoking greatlly and brows afire, eviserates one of the orcs from behind.  He's now the Killer, earning 18xp while the others earn 3.  Additionally, the mage, as the 'Damager' earns a multiplier of 2, earning him +10xp (13 total).  And, the cleric earns +1xp as the 'Buffer' (4 total).

 

Nex, the cleric rushes in and casts CMW onto the thief, healing him.  He has now been promoted from 'Buffer' to "Healer' in the combat, increasing his multiplier for the remaing orc.

 

When the fighter finally dispatches it, the fighter earns 18 (Killer), the mage earns 13 (Damager), the cleric earns 13 (Healer), and the thief earns 3 (Participant).

 

Total xp earned in the encounter is:

Fighter:  51

Thief: 46

Mage: 101

Cleric:  36

 

Technically, it might look like this:

  • When damaged, a local int is written to the creature using a unique ID for the damaging PC.  This is the 'Damager' tier.
  • When a PC is healed while in combat (and the PC actually needs healing), a local is written to nearby creatures.  This is the 'Combat Medic' tier.
  • When a buff spell is cast while in combat, a local is written to nearby creatures.  this is the 'Buffer' tier.
  • OnDeath, the killer is the 'Killer' tier.

 

OnDeath, the distance-based xp system fires, granting small xp to each PC.  It also checks that creature for a local equal to the unique idenfier for the PC.  if found, the value of the local is the tier and the Combat Role xp system fires, granting additional xp to the PC based on a secondary CR table and the Role multiplier.



#27
FunkySwerve

FunkySwerve
  • Members
  • 1 308 messages

My concern wtih that type of approach is that it would probably cause different types of classes to level at very different speeds, until it was very fine tuned. I think I favor a 'gateway' approach giving a player either a full share or no xp based on certain criteria. My reason for liking that approach is the incentives it creates. If you begin with it too restrictive, you're certain to hear squawks from players not getting xp, and you can quickly adjust as needed. In a nutshell, the more all-or-nothing the handout is, the easier it will be to spot problem cases, early on. Of course, the corollary to that is that anyone who does find an ex*plo(ta#tive way of play will benefit more than under your gradated system, until it's sussed out, but many of our players are pretty good about reporting that sort of issue.

 

Funky



#28
henesua

henesua
  • Members
  • 3 858 messages

Allow me to ramble in response to Below the Belt's suggestion.

 

Vives' (an old, retired PW) had a XP reward system similar in some respects to what Below the Belt mentions. It took a long period of experimentation (the full 8 years it was live :) ) to get in a reasonable shape, and I still think it is not perfect, but I liked the approach and so decided to continue with a version of it in the module I am working on now (a remake of Vives with all new lore, gods, areas etc..). I posted this thread as part of my work on one category in the mix ("Combat" aka Kills). Why I like this system is that it rewards different types of behavior at different rates for each class. Its a hell of a lot of work for a builder to insert enough content for each category, but as a player I loved it.

 

And to clarify my point of view, I was never a developer of the original Vives - Vaei and Ara were the creative spark with a large team all contributing a great deal - so I am speaking primarily as a player rather than as a server admin. I did get to play with this when I put Vives back on line in 2010 and also played with it in Arnheim (during 2012) but these experiences were with a small player base already accustomed to the system.

 

What Vives' XP system includes:

  • Several categories of XP (roleplaying, discovery, kills/combat, skill use, spell use, crafting, and a few miscellaneous others).
  • Each class has a different percentage in each of these categories with multiclassing resulting in weighted averages depending upon how many levels you have in each class.
  • Each reward carries with it an ID so that some rewards are 1 time only (discovery works this way), others degrade with repeat performances (kills work this way). So each time you kill one of Syn's Creepers the amount of XP gained is reduced toward a minimum value. When you enter a new area or special location within an area for the first time you get an award and then never again.
  • The differential in XP rates between classes is much tighter than Below the Belt suggested. Each class has a percentage in a category from 30% to 100%. Example: a wizard gains 30% from "kills" but 90% from spell casting. a fighter gains 100% from "kills" but 30% from spell casting. A pure fighter can't cast spells so can not gain XP that way, but a fighter-wizard can in which case the percentage is averaged.

 

Now to relate this with what Funky said: I think Funky is correct - especially if you only hand out combat XP. And thats what you appear to be describing, BtB. The source of the XP is combat, but different roles in combat provide XP dependent on the challenge of the monster. With multiple paths toward earning XP however each with different rates based on role/class I think you have the tools to even it out. Vives never got it perfect, and the system has lots of potential loop holes for smart players to take advantage of, but in my view its a fun experiment to participate in, and seems to encourage wider ranges of play types.



#29
MagicalMaster

MagicalMaster
  • Members
  • 2 000 messages

You got the opposite.  Stealthers that go near the target will be included.  Buffers of long ranged attackers too far away would be excluded.  The inclusion problem is a separate issue.

I was using the phrase in the manner you were, namely "That fixes all the problems excluding buffers of long range attackers" into "That fixes all the problems excluding buffers of long range attackers, stealthed/invis/etc people, people just chilling in melee, etc."

 

No, because the PC mage did not engage the NPC mage.

All right.  And in what manner did the rogue engage the 30% of enemies in the previous example?  Why does the rogue get XP for creatures he never engaged but the mage doesn't get XP for creatures he never engaged?  Again, I'm not trying to convince you otherwise but we need to know what you view as the difference as this distinction is critical for getting the system to work how you want.

 

Total xp earned in the encounter is:

Fighter:  51

Thief: 46

Mage: 101

Cleric:  36

That result sounds absolutely horrible and also creates perverse incentives -- cleric is better off dropping a hammer of the gods at the start of the fight to get Damager status and then AFK and contributing nothing.

 

My concern wtih that type of approach is that it would probably cause different types of classes to level at very different speeds, until it was very fine tuned. I think I favor a 'gateway' approach giving a player either a full share or no xp based on certain criteria. My reason for liking that approach is the incentives it creates.

Indeed.



#30
henesua

henesua
  • Members
  • 3 858 messages

I am not sure you will be able to help me, MM, until you understand this

The criteria for a reward is active participation.



#31
MagicalMaster

MagicalMaster
  • Members
  • 2 000 messages

I am not sure you will be able to help me, MM, until you understand this

The criteria for a reward is active participation.

I absolutely don't understand that, hence my questions.  I'm trying to find out what you mean by active participation.

 

The rogue attacked and killed four enemies during a single combat but also gets credit for a fifth enemy the fighter killed on his own during the same combat.

 

The mage attacks and helps kill a group of enemies with AoE during a single combat but does NOT get credit for another enemy the fighter killed on his own during the same combat.

 

Both would seem to have active participation in the fight, but you say they do not.  I'm not claiming you're wrong, but I don't understand what distinction is and that's something that has to be figured out for this system.  We need to figure out how to indicate the rogue WAS an active participant for the enemy he didn't touch but the mage WASN'T an active participant for the enemy he didn't touch.  What is our general criteria here?



#32
henesua

henesua
  • Members
  • 3 858 messages

Ah.

 

Well participation includes damaging an NPC, being targeted by them, casting spells at them, attacking them, and any other engagement with an NPC foe that we can think of and we can capture via one event or another.

 

Also it is important to point out that I am tracking participation in combat per foe rather than per "encounter". So each NPC records each PC they engage with (a PC is also recorded as a participant if any of their minions are engaged in combat with the NPC), and so when they die all PCs that are recorded as participants are rewarded Combat XP.



#33
MagicalMaster

MagicalMaster
  • Members
  • 2 000 messages

Well participation includes damaging an NPC, being targeted by them, casting spells at them, attacking them, and any other engagement with an NPC foe that we can think of and we can capture via one event or another.

 

Also it is important to point out that I am tracking participation in combat per foe rather than per "encounter". So each NPC records each PC they engage with (a PC is also recorded as a participant if any of their minions are engaged in combat with the NPC), and so when they die all PCs that are recorded as participants are rewarded Combat XP.

Okay, so why is our rogue considered participating for the NPC he didn't damage, didn't get targeted by, didn't cast a spell at, didn't attack, and didn't engage in any sense (because he was busy killing other mobs that were also attacking the fighter)?

 

Don't get me wrong, I agree that the rogue should get credit conceptually (otherwise you get stupid things like the rogue trying to attack each target rather than focus one down at a time)...but I'm trying to understand why you think he should in your system.  What is going to flag the rogue as being engaged with an enemy he didn't engage?

 

And given that, how is that NOT going to flag the mage as being engaged?

 

For example, one might say "Whenever a PC attacks/damages/etc an NPC it flags that NPC and any other NPC within 40 yards as the PC getting credit."  This would give the rogue credit but also give the mage credit, which you say you don't want.  But if we reduced the radius to like 10 yards then people fighting enemies at a distance (like an archer picking off another enemy archer) would have issues.



#34
henesua

henesua
  • Members
  • 3 858 messages

Participation is the criteria. You described the rogue as participating. Perhaps I misunderstood you. In either case. It doesn't really matter.

 

The criteria is active participation.

 

I think the problem here is that you are leading with thought problems which aren't going to result in what I need. I've already thought about this and arrived at general criteria. What remains now is to wrap my head around all of the events I can make use of so that i can code the system close as I can to the goal.

 

So far I have captured:

  • NPC AI onSpellCast - caster of a hostile spell is recorded on the NPC
  • NPC AI onDamaged - damager is recorded on NPC
  • NPC DetermineCombatRound() - a valid target is recorded on the NPC

this is working well so far. I could add the OnAttacked event as well because a PC is participating if they attack. But I feel that it provides a loophole for a PC that knows they can simply ineffectually attack once then run away while the epic angel PC kills the dragon. Whereas if that ineffectual character is targeted as a result of their attack... they have influenced the combat enough to risk their death, and thus deserve a reward.


  • Rolo Kipp aime ceci

#35
MagicalMaster

MagicalMaster
  • Members
  • 2 000 messages

So far I have captured:
  • NPC AI onSpellCast - caster of a hostile spell is recorded on the NPC
  • NPC AI onDamaged - damager is recorded on NPC
  • NPC DetermineCombatRound() - a valid target is recorded on the NPC

this is working well so far. I could add the OnAttacked event as well because a PC is participating if they attack. But I feel that it provides a loophole for a PC that knows they can simply ineffectually attack once then run away while the epic angel PC kills the dragon. Whereas if that ineffectual character is targeted as a result of their attack... they have influenced the combat enough to risk their death, and thus deserve a reward.

Scenario: sword and board fighter with an archery rogue against 3 mobs.

 

Fighter charges in and starts attacking mob 1.  Rogue picks off mob 2 with sneak attacks.  Fighter keeps attacking mob 1.  Rogue picks off mob 3 with sneak attack.  Fighter finishes off mob 1.

 

Result...

 

Fighter has damaged mob 1 and has DetermineCombatRound triggering for mobs 2 and 3.  He gets XP for all three mobs.

 

Rogue has damaged mobs 2 and 3.  He gets XP for two mobs.

 

Is this a situation you're happy with?



#36
henesua

henesua
  • Members
  • 3 858 messages

yup.



#37
MagicalMaster

MagicalMaster
  • Members
  • 2 000 messages

Okay, so you changed your mind since the previous page?

 

The rogue wasn't spotted or targeted at any point.  He scouted them, the fighter charged in to distract them (so the rogue never gets attacked), and the rogue flanked them one time at a time.  He kills more than the fighter but only directly interacts with some of the mobs (say 70%ish since the other 30% are killed solely by the fighter).  Excellent tactics and an easy fight as a result.

 

Should the rogue get experience from 70% of the mobs (that he attacked) or 100% of the mobs (the mobs his team killed)?  I'm not worried about the technical implementation yet, I'm asking what you WANT to happen.

 

I would want both the fighter and rogue to be awarded equally since they both fully participated.

 

Can you see why I'm confused about what you're trying to have happen?  You've done a 180 on us.  Which is fine, of course, just very confusing.



#38
SHOVA

SHOVA
  • Members
  • 522 messages

Just a couple of things:

 

Why have it loop through the entire mod to check PCs rather than just the current area?

 

Why not tie XP to the ondamaged event rather than the ondeath?

 

I ask the last one because it seems to me, that actually damaging something should be worth some amount of XP, seeing as the action was successful.

 

If a monster has a set amount of XP it can reward, then the on damaged event could reward a % based upon the amount of damage inflicted, and give that amount to those present where it could be 80% of the reward goes to the damager, and the other 20% goes to the rest of the PCs in the area. A system such as this wouldn't worry about who is doing what, but primarily would reward the highest to the one that does the most damage to a monster.



#39
henesua

henesua
  • Members
  • 3 858 messages
MM, I think you missed this

Participation is the criteria. You described the rogue as participating. Perhaps I misunderstood you. In either case. It doesn't really matter.

might have just been a misunderstanding.
 

Why have it loop through the entire mod to check PCs rather than just the current area?

GetFirstPC()
GetNextPC()

Why not tie XP to the ondamaged event rather than the ondeath?

Because this is about overcoming challenges. Tying XP to the damage event provides an unlimited supply of XP for PCs who torture a single foe.

#40
MagicalMaster

MagicalMaster
  • Members
  • 2 000 messages

MM, I think you missed this
might have just been a misunderstanding.

Okay.  You realize a consequence of your current goal is that players will attempt to damage each enemy so they get credit for all of them rather than focus enemies down one at a time?  The rogue in our case will sneak attack mob 1, then immediately switch to mob 2 (without finishing off mob 1), then immediately switch to mob 3 (without finishing off mob 2).

 

It gets even messier if we add a third party -- imagine we have a fighter and 2 rogues.  You could wind up with a situation where there are five enemies, the fighter gets credit for all five (damages one and is attacked by all five) but each rogue only gets credit for two (each kills two) using reasonable tactics.  So 100% XP for the fighter and 40% XP for each rogue.

 

If that's acceptable for you, fine, you have a working system.  If it's not, we need to adjust the criteria somehow to make it so the rogues get credit for actively participating in the fight.



#41
FunkySwerve

FunkySwerve
  • Members
  • 1 308 messages


Because this is about overcoming challenges. Tying XP to the damage event provides an unlimited supply of XP for PCs who torture a single foe.

Actually, I think ondamaged is superior to onattacked in this regard, as it sets a higher bar. FWIW, you're running into the same difficulties I've been juggling. I'll post our current code when I get home, as I think it forms a useful baseline.

 

Past that, you would want some GetWasPCActiveAgainst check for mobs looped through in the ondeath where xp is given. My problem is a step harier in that regard, as I need to aggregrate data over a run. On net, though, I think active participation over a run might be easier to guage than in a single combat, depending on your metrics. Hmm. At least, it's easier to rule out one-time 'thought experiments' of certain types, and focus only on broadly cost-effective strategies for toying with the system.

 

Funky



#42
Shadooow

Shadooow
  • Members
  • 4 465 messages

Oh btw henesua, the DetermineCombatRound is not a good place to track whether NPC attacks a PC. Afaik, merely all physical attacks on npc will cause the DetermineCombatRound to trigger with the attacker in it. Or its only ranged+melee behavior, not 100% sure at this moment. But you should take a closer look at this (yes hard to test).



#43
henesua

henesua
  • Members
  • 3 858 messages

Actually, I think ondamaged is superior to onattacked in this regard, as it sets a higher bar. FWIW, you're running into the same difficulties I've been juggling. I'll post our current code when I get home, as I think it forms a useful baseline.


Funky, I am using the ondamaged event to determine when a PC has participated in the combat, but I am not handing out XP with every damage event as the poster I responded to was suggesting.

I look forward to seeing your code.
 

Oh btw henesua, the DetermineCombatRound is not a good place to track whether NPC attacks a PC. Afaik, merely all physical attacks on npc will cause the DetermineCombatRound to trigger with the attacker in it. Or its only ranged+melee behavior, not 100% sure at this moment. But you should take a closer look at this (yes hard to test).


Hmm... I will have to look at this more carefully then. I did have my doubts. This is the part of the function I stuck my flags in:

    // ----------------------------------------------------------------------------------------
    // DetermineCombatRound: ACTIONS
    // ----------------------------------------------------------------------------------------
    if(     GetIsObjectValid(oIntruder)
        &&(     GetObjectSeen(oIntruder) //1.71: AI passed an unseen intruder
            ||( GetHasFeat(2016) // Henesua - added ability for creatures with scent to sniff out an enemy
                //&&  GetObjectHeard(oIntruder)
              )
          )
      )
    {
        // anyone who participates in combat is flagged as a particpant (for the reward of XP later)
        if(GetIsPC(oIntruder))
            SetLocalInt(OBJECT_SELF, "COMBATANT_"+ObjectToString(oIntruder), GetTimeCumulative());
        else
            SetLocalInt(OBJECT_SELF, "COMBATANT_"+ObjectToString(GetMaster(oIntruder)), GetTimeCumulative());



#44
WhiZard

WhiZard
  • Members
  • 1 204 messages

I see a few problems with this.

 

1) Characters in darkness can engage creatures in combat without being seen.

2) If a wizard/sorcerer possesses a familiar then the familiar would be the PC and the master would not be a PC.

3) A henchman's summon (or even a summon's summon) does not affect the PC's XP.



#45
FunkySwerve

FunkySwerve
  • Members
  • 1 308 messages

Here's our current ondeath:

 

http://pastebin.com/cgxYqwT5

 

It handles all sorts of situations where characters should not get xp, including some fairly clever ex^plo_its. It does not, however, do much in the way of bot detection. Sorry for the delay in posting, it's been a busy week.

 

Funky


  • henesua aime ceci