Sharing the loot. (algorithm needed)
I''m currently designing a mmorpg (stop laughing). Not coding yet -- this is pure design work.
I''m trying to design an algorithm for sharing the loot post-battle. I am looking for some possible solutions and would welcome some feedback on my current proposed system.
Here are some points to consider:
-- In my game, battles will be turn-based and once a battle has started you can''t have new players joining the fight.
-- Any number of players could be involved in the battle, and they could all be vastly different levels.
-- After the battle, all participants will be shown a GUI window listing all the "loot" that was found.
The Problem:
-- How do I let the players divy up the loot fairly?
My proposed solution:
-- All participants in the battle will be given "battle points" with higher level players given a few more points than the lower level guys.
-- Players use their "battle points" to bid on loot items in an auction-like system.
Any other ideas? Sound feasible?
Sounds like it would get very tedious and annoying very quickly.
I''ll admit that I haven''t actually actively played any MMORPGs, but I''ve seen ''em, read about them, pondered them, etc. And I can imagine that loot sharing can be an issue. From what I''ve read of World of Warcraft, a group of people can have different forms of sharing set. I don''t remember the details in WoW, but here are some thoughts of different algorithms that you could use, letting each group decide which one to use.
There would obviously be the free looting style, where anyone in the group can grab anything. This would of course be for groups of trusted friends.
Or the group could choose a group leader to distribute loot, although that could get tiring on the leader.
Or their could be random, which would on average give everyone an equal portion of the loot.
Or you could weight the randomness, based on various things, such as level, or amount of involvement in battle (such as how much damage they did, how much healing, buffing, etc.)
Or you could have each item of loot given to the next person in the group, going back to the first guy in the group when the last guy gets an item of loot. This''d basically be the same as the random method, but a bit more systematic. Some people might prefer random, since it''s up in the air until the last moment who is gonna get an item, although others might dislike random ''cause they''ll blame bad luck, fate, etc., for why they''re not getting what they want. And then they''ll get really loud and noisy, and no one wants that.
int main() { return *((int*)0); }
I''ll admit that I haven''t actually actively played any MMORPGs, but I''ve seen ''em, read about them, pondered them, etc. And I can imagine that loot sharing can be an issue. From what I''ve read of World of Warcraft, a group of people can have different forms of sharing set. I don''t remember the details in WoW, but here are some thoughts of different algorithms that you could use, letting each group decide which one to use.
There would obviously be the free looting style, where anyone in the group can grab anything. This would of course be for groups of trusted friends.
Or the group could choose a group leader to distribute loot, although that could get tiring on the leader.
Or their could be random, which would on average give everyone an equal portion of the loot.
Or you could weight the randomness, based on various things, such as level, or amount of involvement in battle (such as how much damage they did, how much healing, buffing, etc.)
Or you could have each item of loot given to the next person in the group, going back to the first guy in the group when the last guy gets an item of loot. This''d basically be the same as the random method, but a bit more systematic. Some people might prefer random, since it''s up in the air until the last moment who is gonna get an item, although others might dislike random ''cause they''ll blame bad luck, fate, etc., for why they''re not getting what they want. And then they''ll get really loud and noisy, and no one wants that.
int main() { return *((int*)0); }
"We should have a great fewer disputes in the world if words were taken for what they are, the signs of our ideas only, and not for things themselves." - John Locke
I like the idea about having a leader whose job it is to distribute the items. Perhaps rather than just the "leader" being assigned the task, you have a character class a bit like Final Fantasy Tactic''s Chemist class, (his job was to dispense items in battle). The class you have could have as part, the innate designation as item carrier. Then you just have to worry about giving all of the items out to the Item-Carriers that are in team.
william bubel
I think you should divide loot base upon player level. Say there is a group of a level 1 guy, and a level 20 guy. Loot ends up to be a Sword usable at level 3, and a sword usable at level 20. Give the level 1 guy the level 3 sword, as it would be most valuable to him, then obviously give the level 20 sword to the level 20 player.
Or say the same two players end up with a loot of a level 3 sword and a level 8 sword. Give the level 3 sword to the level 1 guy, and give the level 8 sword to the level 20 guy, even though his current weapon may be more powerful then what he has, he can still sell it at a shop to get some cash.
Just my 2 cents, but word of advice: Lock loots to those players only (Gotta hate loot stealers) and dont make it so any person in the group can take ALL the loot, and not give any to the other players.
-Limb
[edited by - ibelimb on March 8, 2004 3:44:44 PM]
Or say the same two players end up with a loot of a level 3 sword and a level 8 sword. Give the level 3 sword to the level 1 guy, and give the level 8 sword to the level 20 guy, even though his current weapon may be more powerful then what he has, he can still sell it at a shop to get some cash.
Just my 2 cents, but word of advice: Lock loots to those players only (Gotta hate loot stealers) and dont make it so any person in the group can take ALL the loot, and not give any to the other players.
-Limb
[edited by - ibelimb on March 8, 2004 3:44:44 PM]
-Limb
Share theloot based on who hit the monster the most if its within 10 hp points of who hit it the most ie one user inflicted 40% damage one did 60% one did 50% other did 50% ect then determain it by level
[edited by - DevLiquidKnight on March 8, 2004 3:55:21 PM]
[edited by - DevLiquidKnight on March 8, 2004 3:55:21 PM]
yeh, if i was you i would weight the loot, and make some sort of scheme for finding out whoever did best in the fight (damage done, damage taken, died? .etc like point scoring). Whoever gets best score gets best loot, whoever gets second best score gets second best loot .etc
If you have the leader there must be some sort of way to get back at unfair leaders.
Another idea is to get the team to agree who should have what by chatting and stuff but that would slow down the game.
If you have the leader there must be some sort of way to get back at unfair leaders.
Another idea is to get the team to agree who should have what by chatting and stuff but that would slow down the game.
This becomes more difficult when considering the ''support'' players. If you have a mage that is constantly healing/buffing players then shouldn''t they get a bigger cut of the loot if they helped that person win? You can get very complex here and try to calculate things like the effect of the buff on the person that killed the mob and try to allocate loot and experience based on that.
Don''t force dividing onto the players. Lots of times, highlevel characters help newbies gain xp (Or should atleast , and all they get for it is the loot. So put as much as possible from the kill on the one who dealt the killing blow, and leave the rest on the corpse, then let the people divide it up by themselves.
Thanks all for the ideas so far. It's a bit hard to communicate the full idea of what I have imagined for battles in my mmorpg without letting you all read the 100 or so pages I've got on battle mechanics already.
Basically I've already thought of all the suggestions that have been mentioned in this thread and rejected them. I'll go over each so that you can have an idea of what I'm thinking here...
It would become tedious if the game was comprised of battle after battle, but my goal is, instead, to have very complex battles involving groups of baddies against groups of players. A battle will take a long time and require real strategies between players. Each battle will be balanced so that there's never a case where a party of 50th-level guys has to battle a stupid goblin. In this way I hope to make battles non-tedious.
Free-for-all idea
This is my least favourite, as the last thing I would like to have my players experience is to play an hour long battle only to watch some greedy idiot click on all the good stuff before everyone else.
Leader distributes loot
This might work, but could very well take much longer than the bidding system I've described earlier. It also has the potential to cause a lot of player grief if the leader isn't 100% fair (something I certainly can't depend on).
Random
Without going into too much detail on my game...the random idea breaks a fundamental aspect to the game. I really really hate how rpg monsters typically drop loot unrelated to their characteristics. For example, a blob of acid monster will drop a sword or an orc will drop a set of human plate mail.
Monsters in my game will be equipped as you would expect. That blob of acid monster won't have any equipment or gold, and orcs will drop orc armour. You'll also be able to use pretty much every part of the monsters, so that acid monster might not drop any loot but its body might be worth a fortune to a potion maker.
By going with random loot distribution I'd either have to generate random loot or distribute the loot unfairly or inaccurately (mage gets the sword while fighter gets the acid monster body).
Users take turns picking
Consider this example: two players (a fighter and a mage) are about to select their loot from the following -- 1 super duper ring that both of them could use and 10 pieces of rare mushroom that only the mage could use. The ring is worth 10,000 gold while the mushrooms are worth 1,000 each. Under my proposed auction system, the fighter would probably get the ring and the mage would get all 10 mushrooms. Under the turn method, one player would get the ring and 4 mushrooms while the other would get 6. This has the potential to be really unfair.
Based on level
Also a possible way to go, but there's complications as soon as the disparity between levels gets really small (i.e. between a level 30 and 31 character).
Based on battle contribution
acraig has already addressed this. Who contributed more to a battle: a fighter who slays the dragon or the mage who cast "immunity to fire" on the fighter?
Hope that this keeps the discussion going. Thanks again to those who have already given suggestions!
[edited by - HarryC on March 8, 2004 4:46:41 PM]
Basically I've already thought of all the suggestions that have been mentioned in this thread and rejected them. I'll go over each so that you can have an idea of what I'm thinking here...
quote:
Original post by Agony
Sounds like it would get very tedious and annoying very quickly.
It would become tedious if the game was comprised of battle after battle, but my goal is, instead, to have very complex battles involving groups of baddies against groups of players. A battle will take a long time and require real strategies between players. Each battle will be balanced so that there's never a case where a party of 50th-level guys has to battle a stupid goblin. In this way I hope to make battles non-tedious.
Free-for-all idea
This is my least favourite, as the last thing I would like to have my players experience is to play an hour long battle only to watch some greedy idiot click on all the good stuff before everyone else.
Leader distributes loot
This might work, but could very well take much longer than the bidding system I've described earlier. It also has the potential to cause a lot of player grief if the leader isn't 100% fair (something I certainly can't depend on).
Random
Without going into too much detail on my game...the random idea breaks a fundamental aspect to the game. I really really hate how rpg monsters typically drop loot unrelated to their characteristics. For example, a blob of acid monster will drop a sword or an orc will drop a set of human plate mail.
Monsters in my game will be equipped as you would expect. That blob of acid monster won't have any equipment or gold, and orcs will drop orc armour. You'll also be able to use pretty much every part of the monsters, so that acid monster might not drop any loot but its body might be worth a fortune to a potion maker.
By going with random loot distribution I'd either have to generate random loot or distribute the loot unfairly or inaccurately (mage gets the sword while fighter gets the acid monster body).
Users take turns picking
Consider this example: two players (a fighter and a mage) are about to select their loot from the following -- 1 super duper ring that both of them could use and 10 pieces of rare mushroom that only the mage could use. The ring is worth 10,000 gold while the mushrooms are worth 1,000 each. Under my proposed auction system, the fighter would probably get the ring and the mage would get all 10 mushrooms. Under the turn method, one player would get the ring and 4 mushrooms while the other would get 6. This has the potential to be really unfair.
Based on level
Also a possible way to go, but there's complications as soon as the disparity between levels gets really small (i.e. between a level 30 and 31 character).
Based on battle contribution
acraig has already addressed this. Who contributed more to a battle: a fighter who slays the dragon or the mage who cast "immunity to fire" on the fighter?
Hope that this keeps the discussion going. Thanks again to those who have already given suggestions!
[edited by - HarryC on March 8, 2004 4:46:41 PM]
Well, any single system you pick is probably going to have its advantages and downfalls, which is why I suggested letting the group decide which system to use. Based on the type of group, they can decide which benefits they prefer, and which downfalls they can live with. Although, from the sound of it, you''re going to be working with pretty large groups, so getting a group to decide on a system might not be feasible.
If you need to pick a single method, then I would suggest weighting both the combatants, and the items, and the weighting on the combatants should include a rough guess at involvement, to help out healers and buffers, etc.
For example, first of all, weight the players. They get "involvement points" (IPs) for certain actions. Do damage to the enemy is the most obvious, direct way to get IPs. For healing and buff spells, you get IPs based on the strength of the spell that was cast, and the IPs of the person the spell was cast on. This way, a healer can''t just sit their and heal himself over and over and get IPs. He has to heal someone who is doing something, such as the tank of the group. It might get a bit more complicated if a healer is healing a person who is buffing the tank. But I might have a solution to that, that I''ll mention later...
After doing this for everyone, find out the total number of IPs that were earned by the entire group. Also figure out the total value of all the loot. Each loot item is then worth it''s value divided by the overall value of all the loot, multiplied by the total number of IPs earned by the group. This number will be used in just a second...
After all the players have been given IPs, and items have had their values calculated in terms of IPs, start with the person who has the most IPs. For that character, figure out the weighting for all the loot, based on the character''s class, level, currently held items, etc. Then give that character the highest weighted item. Subtract the IP value of that item from his IPs. Then do the whole thing over again, with whoever has the most IPs. By the time this is over, all items should be gone, and all players should have zero IPs left (ignoring rounding errors).
Some items, however, might have been marked as having no specific worth, and thus they would be left over, because they would never be automatically given to anyone. A bidding system could then maybe be implemented for these few items. These would be things that can''t be obviously given to any one character class, or character level, etc.
As for the indirect method of acquiring IPs that I mentioned above, you might be able to do it in two or more phases. First of all, calculate direct IPs, which would be things done directly to the enemy. After all direct IPs are calculated, calculate all first-level-indirection IPs, such as healers and buffers casting spells on the tank. These IPs are, as I said above, based on both how strong the spells were, and how many IPs the target of the spell has earned. After that, you can calculate second-level-indirection IPs. But there may be a 50% penalty for these, since it isn''t nearly as direct as the main IPs, or the first-level IPs. You could even add a third level, with a 75% penalty, etc., etc.
Or maybe this is way too complicated. I don''t know. I''m just sure that I would appreciate a good level of automation for most items, and a manual method to deal only with quite special items (like the unknown-value items using a bidding system, after all other known-value items have been auto-distributed).
int main() { return *((int*)0); }
If you need to pick a single method, then I would suggest weighting both the combatants, and the items, and the weighting on the combatants should include a rough guess at involvement, to help out healers and buffers, etc.
For example, first of all, weight the players. They get "involvement points" (IPs) for certain actions. Do damage to the enemy is the most obvious, direct way to get IPs. For healing and buff spells, you get IPs based on the strength of the spell that was cast, and the IPs of the person the spell was cast on. This way, a healer can''t just sit their and heal himself over and over and get IPs. He has to heal someone who is doing something, such as the tank of the group. It might get a bit more complicated if a healer is healing a person who is buffing the tank. But I might have a solution to that, that I''ll mention later...
After doing this for everyone, find out the total number of IPs that were earned by the entire group. Also figure out the total value of all the loot. Each loot item is then worth it''s value divided by the overall value of all the loot, multiplied by the total number of IPs earned by the group. This number will be used in just a second...
After all the players have been given IPs, and items have had their values calculated in terms of IPs, start with the person who has the most IPs. For that character, figure out the weighting for all the loot, based on the character''s class, level, currently held items, etc. Then give that character the highest weighted item. Subtract the IP value of that item from his IPs. Then do the whole thing over again, with whoever has the most IPs. By the time this is over, all items should be gone, and all players should have zero IPs left (ignoring rounding errors).
Some items, however, might have been marked as having no specific worth, and thus they would be left over, because they would never be automatically given to anyone. A bidding system could then maybe be implemented for these few items. These would be things that can''t be obviously given to any one character class, or character level, etc.
As for the indirect method of acquiring IPs that I mentioned above, you might be able to do it in two or more phases. First of all, calculate direct IPs, which would be things done directly to the enemy. After all direct IPs are calculated, calculate all first-level-indirection IPs, such as healers and buffers casting spells on the tank. These IPs are, as I said above, based on both how strong the spells were, and how many IPs the target of the spell has earned. After that, you can calculate second-level-indirection IPs. But there may be a 50% penalty for these, since it isn''t nearly as direct as the main IPs, or the first-level IPs. You could even add a third level, with a 75% penalty, etc., etc.
Or maybe this is way too complicated. I don''t know. I''m just sure that I would appreciate a good level of automation for most items, and a manual method to deal only with quite special items (like the unknown-value items using a bidding system, after all other known-value items have been auto-distributed).
int main() { return *((int*)0); }
"We should have a great fewer disputes in the world if words were taken for what they are, the signs of our ideas only, and not for things themselves." - John Locke
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement