[crossfire] Ideas needed to fix exploit

Mark Wedel mwedel at sonic.net
Tue Feb 28 00:44:29 CST 2006


Andreas Kirschbaum wrote:

>  a) Do not reward (pk) with exp.
> 
>     This is probably the safest "solution" and is very easy to
>     implement. Not sure if that is an appropriate solution for servers
>     that allow pvp.

  could be something that is set in the settings file.  Maybe even have this act 
as some modifier to amount of exp gained (as a percentage).  so if 0, you get 0% 
  (0) of the exp you would normally.  If 50, you would get 50% of exp, etc.

> 
>  b) Reward a (pk) with MIN(5 million, (exp loss of victim)/10).
> 
>     I'm not sure if that really is a good idea since it probably creates
>     another exploit: kill a player with some hard to train skill and
>     gain lots of exp in that skill.

  I'm not sure I follow that logic - it doesn't seem to be any worse than now.

  If I can (hypothetically) kill someone with bad singing, that change above 
doesn't make things any easier or harder.  I won't get any more exp than I did 
before that change, and will likely get less.  If the player being killed is 
down to having only permanent exp left (thus doesn't lose anything), I gain no exp.


>     Another (probably quite hard to exploit) problem is that a victim
>     player can be killed but not actually die. Thus if a player is very
>     careful to kill the victim at -1 hp and the victim regains hp very
>     fast, the victim will not actually die but the attacker will gain
>     exp. Thus the attacker would gain more exp in total than expected.
>     (I'm not sure if this problem still exists but it did exist last
>     time I did check.)

  It may still exist, since I think the examination of death happens when the 
player does his action.  That would be easy to fix - just move the check for 
op->stats.hp<0 to the start of do_some_living instead of the end.

  That said, in the right situation, a combo of 3 players could still observe 
this.  This requires some knowledge of the processing order of the players -

player A kills player C, gets exp.
player B heals player C
player C goes - do_some_living() never called for him with less than 0 exp, thus 
never loses exp

  This may not actually be as hard to set up as one might thing - the order 
players join in defines the order they are processed in.  And what is important 
here is overall order, not per tick order.  The, and order like CAB would still 
work - player C would be dead for a tick, but doesn't make a difference.

  I'd think this abuse would be easier to pull off, as now you don't have to 
align to -1 hp - if the healer can heal a good amount, that works.  That said, 
I'd think that trying to do this would be time consuming - basically player A 
has to attack, and there probably isn't enough time for player B to see the 
results, so he has to always case healing.  So if A's attack didn't kill, could 
take a while to get C down to a dangerous level of HP.

> 
>     Another possible exploit could be to abuse the force inserted into a
>     killed player to prevent multiple deaths at his savebed.

  One question I have is why even need a force.  Is there any potential abuse 
just saying a player can't die when on his savebed?

  However, this change would be affected above - you have to make sure that the 
player doing the killing can't get the exp, since that is the real abuse.  If 
the killer gets exp, but in do_some_living(), the player doesn't really die, 
this doesn't fix the problem.




More information about the crossfire mailing list