View Single Post
Old 01-14-2018   #1
Dashboard
Registered Member
 
Join Date: Jan 2018
Posts: 9
Default Systemic NPC Drop Table Adjustments to Improve the Economy

Item inflation is a problem that plagues RS3, OSRS, and Dodian.
The Dodian and RuneScape economies were built from a series of reactions and badly thought-out expansions that were designed to look temporarily shiny without significant consideration for how they would impact the long-term game economy.

My idea to kill item inflation is to have a system of 3 NPC types:

Unique drop NPCs:
- Drops either one unique item - like an Abyssal Whip, or a unique armour set.
- Targeted only when their unique item drops are in high demand.
- Players stop killing them when the unique item price is low, preventing further inflation.
- The items cannot be obtained from Smithing
- Not assignable by a slayer master, but could be locked behind a slayer requirements.
- Killing the NPC should could have either a GP or resource deflationary mechanism to decentivize camping of unprofitable NPCs.

Consumable Resource NPCs:
- Drops unique consumable resources tied to its NPC type (cow hide, green dhide, dragon bones, etc)
- The resources cannot be obtained from Dodian skills (food, logs, ores, runes, gems)
- Assignable by a slayer master to encourage market liquidity

Pure GP NPCs
- Drop only consistent GP that is tied linearly to the NPC's combat level
- Allow GP multipliers for special circumstances (slayer task 1.2x, key dungeon 1.6x)
- Does not contribute to item inflation
- Assignable by a slayer master


Generally desired effects:
- Unique items will only enter the game when they're in demand
- New content can be created to spread out the unique item drop table (abyssal demons, gargoyles, and such)
- Dead content is repurposed
- Mining / smithing will become useful again for pre-dragon gear
- New players will have better access to GP, stimulating early-game trading


Anticipated downsides:
- GP inflation that will need to be systematically deflated by another mechanism
- The game play won't be as linear for new players, forcing them to trade to progress combat efficiently, which might be frustrating


Development Pseudocode:
Code:
void onNpcDrop(Npc npc) {

	final int UNIQUE_DROP = 1;
	final int CONSUMABLE_RESOURCE_DROP = 2;
	
	switch (npc.dropTableType) {
		case UNIQUE_DROP:
			ResultSet resultSet = SELECT chance, item_id, quantity FROM npc_unique_drop_table WHERE npcId=npc.id
			
			foreach (Row row : resultSet.rows()) { // support for multiple unique drops in case of item sets
				double chance = row.chance
				int itemId = row.item_id
				int quantity = row.quantity
				
				if (chance <= Math.random()) {
					drop(itemId, quantity);
				}
			}
			break;
			
		case CONSUMABLE_RESOURCE_DROP:
			ResultSet resultSet = SELECT chance, item_id FROM npc_consumable_resource_drop_table WHERE npcId=npc.id
			
			foreach (Row row : resultSet.rows()) { // support for multiple consumeable resource drops for cases like green dragons
				double chance = row.chance
				int itemId = row.item_id
				
				if (chance <= Math.random()) {
					drop(itemId, quantity);
				}
			}
			break;		
			
		default: // Pure GP
			final int ITEM_ID_COINS = 995;
			final int GP_PER_COMBAT_LEVEL = ?;
			int multiplier = 1;
			if (npc.isSlayerTask) {
				multiplier *= 1.2;
			}
			if (npc.isKeyDungeonMob) {
				multiplier *= 1.6;
			}
			
			int quantity = npc.combatLevel * GP_PER_COMBAT_LEVEL * multiplier;
			drop(ITEM_ID_COINS, quantity);
			break;
	}
}

Last edited by Dashboard; 01-15-2018 at 02:44 AM.
Dashboard is offline