Author Topic: XP Giver - Hard Leveling  (Read 1442 times)

Legacy_WhiZard

  • Hero Member
  • *****
  • Posts: 2149
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #30 on: July 16, 2014, 05:27:24 pm »


               


It can be difficult to interpret, but I do not think it would be a good to replace the system. Maybe some adjustments could solve our problem, don't you think?




 


 


Your system does not care about who in the party makes the kill.  In that sense my suggestion of considering all characters to have the highest HD value for the party is closest to your design, and does fix the problem you have been seeing.  Shadooow is focused on seeing the killing blow as the determining factor for involvement.  This does prevent the PC from gaining significant XP from a high level creature, but if there already is an abuse where players are cooperating to get huge XP dumps, it won't be that long before they figure out that the higher level just fights until the creature is near death, allowing the lower level character to accomplish the killing blow (possibly via a summons).  As far as which system gains the least XP over all, it can vary from situation to situation.  And there is no true fix,  for example, two characters from different parties could cooperate so that the lower level is awarded the killing blow on a high level creature.  This neither of our systems can really fix.


               
               

               
            

Legacy_WhiteTiger

  • Hero Member
  • *****
  • Posts: 889
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #31 on: July 16, 2014, 05:50:28 pm »


               

Whizard,


 


There, the entire module, secret areas, and areas that only a few players can access. These areas were developed to a greater use of "multi-player". Thus, it is recommended that players organize themselves into groups for the matches. 


The repetition of XP in this case comes in the style of the game, but I did not agree on a level 40 player to party with a level 1 player and the second by the first level up by killing monsters middleman between the two levels.



               
               

               
            

Legacy_WhiteTiger

  • Hero Member
  • *****
  • Posts: 889
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #32 on: July 16, 2014, 05:59:28 pm »


               


This neither of our systems can really fix.




 


To me they are all excellent solutions. why do you think so?


 


especially that which distributes XP by level difference between the killer and the party - this is the most likely to me


what do you think?


               
               

               
            

Legacy_WhiteTiger

  • Hero Member
  • *****
  • Posts: 889
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #33 on: July 16, 2014, 10:17:52 pm »


               

Finished script thanks



//EDITED
//too old... =(


               
               

               


                     Modifié par WhiteTiger, 13 août 2014 - 09:22 .
                     
                  


            

Legacy_WhiZard

  • Hero Member
  • *****
  • Posts: 2149
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #34 on: July 17, 2014, 03:29:49 am »


               
if((GetHitDice(oKiller) < GetHitDice(oObject)))

 



 


Huh?  If Shadooow's method encourages high level players to set up kills for low level characters this does even more.  First of all, if there is a team of all equal leveled character's only one is going to get the XP, and if there is a highest level character, he would get just as much XP for going into improved expertise mode and being a meatshield or casting an immobilizing spell, as actually killing the target.  And if he doesn't score any kills, then other characters will get XP as well.  So why should the higher level character even try killing a monster?  The only thing he would get out of killing monsters is depriving others of XP.



               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #35 on: July 17, 2014, 03:49:13 am »


               

I am no longer watching this thread. All these issues you have and those that Whizard warn about has been solved so many times already.


 


Try get some custom XP system (I uploaded mine 2DA based xp system yesterday on vault - but that probably won't be exactly what you need). And modify its settings - will be ten times easier than to incorporate changes you need into this one you got.


 


If my xp system doesn't suit you, then I would suggest PWFXP - unfortunately i don't have in on my disk (only highly customized version which is for no use to you), but if you request it on scripting forum or on vault I am sure someone will upload it.



               
               

               
            

Legacy_WhiteTiger

  • Hero Member
  • *****
  • Posts: 889
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #36 on: July 17, 2014, 06:04:07 am »


               

Thank you all for both ideas (about sequencer robe / xp giver). All stuff solved to me.  '<img'>  



               
               

               
            

Legacy_WhiteTiger

  • Hero Member
  • *****
  • Posts: 889
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #37 on: July 17, 2014, 08:01:31 pm »


               


Huh?  If Shadooow's method encourages high level players to set up kills for low level characters this does even more.  First of all, if there is a team of all equal leveled character's only one is going to get the XP, and if there is a highest level character, he would get just as much XP for going into improved expertise mode and being a meatshield or casting an immobilizing spell, as actually killing the target.  And if he doesn't score any kills, then other characters will get XP as well.  So why should the higher level character even try killing a monster?  The only thing he would get out of killing monsters is depriving others of XP.




 


just to clarify that my script works fine. 

 

This condition if ((GetHitDice (oKiller) <GetHitDice (oObject))) 

 

does not define who receives XP, but the amount of XP of the rest of players in party. this way all will receive XP (low then killer or same value of killer) so you can not level up a weak char by a strong char killing weak creatures


               
               

               
            

Legacy_WhiZard

  • Hero Member
  • *****
  • Posts: 2149
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #38 on: July 17, 2014, 10:48:29 pm »


               

Okay, then it is inconsistent.  If the killer were level 5 and there were level 3 and level 7 characters in the party, then if the level 3 were found before the level 7 he would be treated as level 5, but if he were found after the level 7 then he would be treated as level 7.



               
               

               
            

Legacy_WhiteTiger

  • Hero Member
  • *****
  • Posts: 889
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #39 on: July 18, 2014, 01:19:42 am »


               


Okay, then it is inconsistent.  If the killer were level 5 and there were level 3 and level 7 characters in the party, then if the level 3 were found before the level 7 he would be treated as level 5, but if he were found after the level 7 then he would be treated as level 7.




 


not really, my friend


 


If the killer were level 5 and there were level 3 and 7 characters in the party, then level 3 would be treated as level 5 and the level 7 would be treated as level 7.


 


independent which was found first(level 7 or level 3)


               
               

               
            

Legacy_WhiZard

  • Hero Member
  • *****
  • Posts: 2149
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #40 on: July 18, 2014, 01:30:37 am »


               


not really, my friend


 


If the killer were level 5 and there were level 3 and 7 characters in the party, then level 3 would be treated as level 5 and the level 7 would be treated as level 7.


 


independent which was found first(level 7 or level 3)




 


Nope,  when 7 is considered iXP is set for that.  When 3 crops up later it uses iXP for 7.  The iXP for level 5 is overwritten by level 7.


 


EDIT: In case you were testing order that characters join a party, that is irrelevant.  GetFirst/NextPC() refers to the order that the players log in.



               
               

               
            

Legacy_MrZork

  • Hero Member
  • *****
  • Posts: 1643
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #41 on: July 18, 2014, 04:01:35 am »


               

Just out of curiousity, why not a system that tracks the levels of two things: who damaged a creature and the party when a creature is killed? First, whenever a creature is damaged or killed, if the damager was a PC, maintain a pair of variables on it, HIGHEST_LEVEL_PC_ATTACKER and LOWEST_LEVEL_PC_ATTACKER and compare them to the current PC, updating as needed. (If the damager had a master, then use the top master's HP for the update.) Second, when the creature is killed, check that level spread of the PC attackers and also the level spread of the PCs in the party. If either level spread is too high, award whatever minimal XP is the agreed upon penalty, ideally with a message that "The PCs that damaged this creature are too far apart in level. Minimum XP has been awarded for this kill" or "The player characters in your party are too far apart in level. Minimum XP has been awarded for this kill", depending on which spread is too high.


 


Perhaps, no scheme will be perfect. But, wouldn't a system like that pretty much do the right thing? It deals with players letting low-level toons tag along with higher toons to get big XP awards and high level PCs tanking for lower level ones. It deals with a high-level PC from a different party getting a creature to near death and then letting a low-level PC kill it. It doesn't penalize a party of low-level PCs taking on tough creatures if they can. If provides some feedback so that players know why they aren't getting the XP they expect when they are penalized.



               
               

               
            

Legacy_WhiZard

  • Hero Member
  • *****
  • Posts: 2149
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #42 on: July 18, 2014, 04:17:22 am »


               

Or think of the parties of all damagers/killer as one big party.  Store all damagers and loop through them on death (adding in the killer) to get all the parties involved. 


               
               

               
            

Legacy_WhiZard

  • Hero Member
  • *****
  • Posts: 2149
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #43 on: July 18, 2014, 06:37:13 am »


               

I've quickly thrown together an XP giving script based on BioWare's model that extends XP gain to all involved parties.  The only major change I made was to consider all characters as possessing the highest HD in the party.



// Gets the Hit Dice based on XP for player characters
int GetTrueHD(object oCreature)
{
int nHD;
if (GetIsPossessedFamiliar(oCreature) || GetIsDMPossessed(oCreature) ||
   (!GetIsPC(oCreature) && !GetIsPossessedFamiliar(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCreature))))
  return GetHitDice(oCreature);
else
  return FloatToInt(sqrt(GetXP(oCreature)/500.0 + 0.25) + 0.5);
}

//Checks to see if there was hostility from the creature's faction
int GetIsInHostileParty(object oHostile, object oTarget = OBJECT_SELF)
{
object oHostilePartyMember;
int nNumInvolved = GetLocalInt(oTarget, "nNumEnemies");
int nNum;
for(nNum = 1; nNum <= nNumInvolved; nNum ++)
  {
  if(GetFactionEqual(oHostile, GetLocalObject(oTarget, "nEnemy" + IntToString(nNum))))
   return TRUE;
  }
return FALSE;
}

//Gets the slider setting as a module variable
//The actual slider value cannot be returned by a standard command
float GetXPSliderSetting()
{
return GetLocalFloat(GetModule(), "XP_SLIDER_SETTING");
}

//Gets the Party Size Penalty
float GetPartySizePenalty(int nPartySize)
{
return 4.0/(3 + nPartySize);
}


void main()
{
object oArea = GetArea(OBJECT_SELF);
object oInvolved = GetLastKiller();
object oPC, oFactionMember;
int nNum, nHD;
int nPartySize = 0;
float fXP;
int nHDMax = 0;
int nCR = FloatToInt(GetChallengeRating(OBJECT_SELF));
if(nCR > 40)
 nCR = 40;
int nNumInvolved = GetLocalInt(OBJECT_SELF, "nNumEnemies");
if(!GetIsInHostileParty(oInvolved))
  {
  nNumInvolved++;
  SetLocalObject(OBJECT_SELF, "nEnemy" + IntToString(nNumInvolved), oInvolved);
  SetLocalInt(OBJECT_SELF, "nNumEnemies", nNumInvolved);
  }
for(nNum = 1; nNum <= nNumInvolved; nNum++)
  {
  oInvolved = GetLocalObject(OBJECT_SELF, "nEnemy" + IntToString(nNumInvolved));
  oFactionMember = GetFirstFactionMember(oInvolved);
  while (GetIsObjectValid(oFactionMember))
    {
    if(GetArea(oFactionMember) == oArea && !GetIsDead(oFactionMember))
      {
      nPartySize++;
      nHD = GetTrueHD(oFactionMember);
      if(nHDMax < nHD)
        nHDMax = nHD;
      }
    oFactionMember = GetNextFactionMember(oInvolved);
    }
  }
oInvolved = GetFirstPC();
while(GetIsObjectValid(oInvolved))
  {
  if(GetIsPossessedFamiliar(oInvolved) || GetIsDMPossessed(oInvolved))
    oInvolved = GetMaster(oInvolved);
  if(GetIsInHostileParty(oInvolved) && GetArea(oInvolved) == oArea && !GetIsDead(oInvolved))
   {
   fXP = StringToFloat(Get2DAString("xptable", "C" + IntToString(nCR), nHDMax));
   fXP *= 10.0 * GetXPSliderSetting() * GetPartySizePenalty(nPartySize);
   GiveXPToCreature(oInvolved, FloatToInt(fXP));
   }
  oInvolved = GetNextPC();
  }
}


               
               

               
            

Legacy_WhiteTiger

  • Hero Member
  • *****
  • Posts: 889
  • Karma: +0/-0
XP Giver - Hard Leveling
« Reply #44 on: July 18, 2014, 09:25:56 am »


               


Nope,  when 7 is considered iXP is set for that.  When 3 crops up later it uses iXP for 7.  The iXP for level 5 is overwritten by level 7.


 


EDIT: In case you were testing order that characters join a party, that is irrelevant.  GetFirst/NextPC() refers to the order that the players log in.




 


this makes sense  '<img'>


I'll check soon