LiamKarlMitchell / InfiniteSky

InfiniteSky is an open-source mmorpg project, It is written in Node.JS
GNU General Public License v3.0
33 stars 42 forks source link

Drop system #94

Open przemyslawwalczak opened 10 years ago

przemyslawwalczak commented 10 years ago

Like couple other games such as World of Warcraft or Diablo 3 has drop systems which I personally like and I suggest implementing one of (less advanced ofcourse) them in the future that can be be enabled from config file.

So an example would be an HEOLGO event where you kill bosses in a hall. I was watching other day a video where people was only ks'ing a mob while 'stealing' the loot from others who worked so hard to bring them down. I suggest to keep those events and rolls for unique and rare items for each player separately. So if everyone gets lucky, they get rares.

This idea fixes the issues of ksing good stuff, so the game will be more based on team work and everyone would have a chance to upgrade the gear after events such like that one!

LiamKarlMitchell commented 10 years ago

Yea we already have a way to keep track of what character does how much damage too a monster. AttackerCollection.

For something like two people get the highest amount of damage at 1000 It could either roll for both, or roll for 1 or the other picking one person too get the loot.

There is also some monsters who drop an amount of silver for their killer, we could split this up on a ratio of how much damage was done overall by each person.

przemyslawwalczak commented 9 years ago

The idea to make the drop system is:

  1. When killing a monster in party, roll the items on kill for each of the players in party and keep the state individual to the client related.
  2. When player drops an item, it's being shown to everyone and letting them to pick it up.
LiamKarlMitchell commented 7 years ago

Some monsters reward extra silver.

var silverGain = 0;
switch (monsterID) {
  case 391: // Mutant Arm Titan
  silverGain = 100000;
  break;
  case 392: // Titan Corpse Zombie
  silverGain = 300000;
  break;
  case 393: // Titan Yeti
  silverGain = 500000;
  break;
  case 394: // Blue Flame Fu
  case 395: // Blue Flame Fu
  case 396: // Blue Flame Fu
  silverGain = 700000;
  break;
  case 397: // Lord of Azrael
  case 398: // Lord of Azrael
  case 399: // Lord of Azrael
  silverGain = 1000000;
  break;
}

Loop all clients near monster on death within 200 units. Only gained if.

if (client.character.level - monster.info.level <= 20 && client.character.state.Location.distanceFrom(monster.Location) <= 200.0 ) {

}
LiamKarlMitchell commented 7 years ago

Some drops appear to be based on level.