Example #1
0
function giveItem(playerID, item) {
	// We can't find their hero, queue the item
	var hero = grabHero(playerID);
	if (hero === null) {
		addToQueue(playerID, item);
		return false;
	}
	// Is the hero alive and well?
	if (unitManager.getLifeState(hero) === settings.UNIT_LIFE_STATE_ALIVE) {
		// Do we have space in the player's inventory or stash?
		var hasSpace = false;
		for(var i=0; i<12; i++) {
			if(hero.netprops.m_hItems[i] == null) {
				hasSpace = true;
				break;
			}
		}
		
		if(!hasSpace) {
			addToQueue(playerID, item);
			return false;
		}
		
		// Give the item to our hero
		var clsname = item[0];
		
		var entity = dota.giveItemToHero(clsname, hero);
		
		if (entity === null) return false;
		// Possible enchant our loot
		if (enchanter.enabled && enchanter.random) {
			itemManager.enchantLoot(entity, item, playerID);
		}
		// Alter item properties
		itemManager.changeItemProperties(entity, item, playerID);
		return true;
	}
	else {
		addToQueue(playerID, item);
		return false;
	}
}
Example #2
0
function queueFunctions(client, args) {
	var playerID = client.netprops.m_iPlayerID;
	var props = playerManager.getProps();
	if (props[playerID].queue.length === 0) {
		playerManager.print(playerID, "There are no items in the queue", []);
		return;
	}
	else
		var queueLength = props[playerID].queue.length;

	if (args.length === 0) {
		var items = [];
		for (var i = 0; i < props[playerID].queue.length; ++i) {
			var entry = props[playerID].queue[i];
			var clsname = entry[0];
			var string = itemManager.getStringName(clsname);
			items.push(string);
		}
		if (items.length >= settings.queue.maxNextLength) {
			items = items.splice(0, settings.queue.maxNextLength);
		}
		var itemsJoined = items.join(', ');
		playerManager.print(playerID, 'There are %s items in the queue', [queueLength]);
		playerManager.print(playerID, 'Next items in queue: %s', [itemsJoined]);
	}
	if (args.length > 1)
		return;
	else {
		switch(args[0])
		{
			default: break;
			case "unpause":
				if (props[playerID].queuePaused)
					props[playerID].queuePaused = false;
			case "pause":
				props[playerID].queuePaused = true;
				playerManager.print(playerID, "Paused. All items in the queue are in limbo. Use -queue unpause");
				break;
			case "clear":
				props[playerID].queue.length = 0;
				playerManager.print(playerID, "Cleared! There were %s items in the queue", [queueLength]);
				break;
		}
	}
}
Example #3
0
function enchantFunctions(client, args) {
	var playerID = client.netprops.m_iPlayerID;
	if (!enchanter.enabled) {
		playerManager.print(playerID, 'Enchanter module not enabled for this lobby.', []);
		return;
	}

	var hero = client.netprops.m_hAssignedHero;
	if (!hero) return;

	if (args.length === 0 || args.length === 1 && args[0] == "list") {

		function compare(a,b) {
		  if (a.minimumHeroLevel < b.minimumHeroLevel)
		     return -1;
		  if (a.minimumHeroLevel > b.minimumHeroLevel)
		    return 1;
		  return 0;
		}

		for(var cat in enchants.enchantMap) {
			if (cat == 'clone') continue;
			var arr = enchants.enchantMap[cat];
			playerManager.print(playerID, '%s enchantments:', [util.capitaliseFirstLetter(cat)]);
			arr.sort(compare);
			for (var i = 0; i < arr.length; ++i) {
				var name = arr[i].name;
				var desc = arr[i].description;
				var reqlevel = arr[i].minimumHeroLevel;
				var props = arr[i].props;
				var maxLVL = arr[i].max;
				var cost = arr[i].cost.join(' / ');
				if (enchanter.shop) {
					playerManager.print(playerID, '%s: %s (LVL %s+, COST: [%s])', [util.capitaliseFirstLetter(name), desc, reqlevel, cost]);
				}
				else {
					playerManager.print(playerID, '%s: %s', [util.capitaliseFirstLetter(name), desc]);
				}
			}
		}
		return;
	}

	if (args.length !== 1) {
		playerManager.print(playerID, 'Use -ei # or types.');
		return;
	}

	var invSlot = Number(args[0]);
	if (isNaN(invSlot)) {
		playerManager.print(playerID, '# should be a number.');
		return;
	}

	invSlot--;
	if (invSlot < -1 || invSlot > 5) {
		playerManager.print(playerID, 'Use a value between 0 | 1 and 6.');
		return;
	}

	if (invSlot !== -1) {
		var item = hero.netprops.m_hItems[invSlot];
		if (item === null || !item.isValid()) {
			playerManager.print(playerID, 'There is no item in this slot.');
			return;
		}

		var clsname = item.getClassname();
		var named = itemManager.getStringName(clsname);

		if (item.enchants)
		{
	        // Look at what type of enchants exist
	        for (var cat in enchants.enchantMap)
	        {
	        	if (cat == 'clone') continue;

	        	var arr = enchants.enchantMap[cat];

	        	if (settings.DEBUG) server.print("Found item cat: " + cat);

		        for (var type in arr)
		        {
		        	if (type == 'clone') continue;

		        	var ench = arr[type];

		        	if (item.enchants[ench.name])
		        	{
		        		if (settings.DEBUG) server.print("Found item enchant: " + ench.name);
		        		var props = item.enchants[ench.name].props;

		        		playerManager.print(playerID, '%s %s: {%s}', [named, util.capitaliseFirstLetter(ench.name), util.objToString(props) ]);
		        		playerManager.print(playerID, '%s: %s', [util.capitaliseFirstLetter(ench.name), ench.description]);
		        	}
				}
	        }
		}
		else {
			playerManager.print(playerID, "%s is not enchanted", [named]);
			return;
		}
	}
	else {
		var equipment = unitManager.pullHeroInventory(hero);
		if (equipment.length === 0)
			playerManager.print(playerID, "No items to look at", []);

		var found = false;

		for (var i = 0; i < equipment.length; ++i)
		{
			if (equipment[i].enchants)
			{
				found = true;
				var entity = equipment[i];
				entity.chants = [];
		        // Look at what type of enchants exist
		        for (var cat in enchants.enchantMap)
		        {
		        	if (cat == 'clone') continue;

		        	var arr = enchants.enchantMap[cat];

		        	if (settings.DEBUG) server.print("Found item cat: " + cat);

			        for (var type in arr)
			        {
			        	if (type == 'clone') continue;

			        	var ench = arr[type];

			        	if (entity.enchants[ench.name])
			        	{
			        		if (settings.DEBUG) server.print("Found item enchant: " + ench.name);
			        		var props = entity.enchants[ench.name].props;

			        		entity.chants.push(util.capitaliseFirstLetter(ench.name));
			        	}
					}
		        }
			}
		}
		if (found) {
			for (var i = 0; i < equipment.length; ++i)
			{
				var equip = equipment[i];

				var clsname = equip.getClassname();
				var named = itemManager.getStringName(clsname);

				if (equip.chants && equip.chants.length > 0) {
					playerManager.print(playerID, "(Slot %s)%s is enchanted with: %s", [(i + 1), named, equip.chants.join(', ')]);
				}
			}
			playerManager.print(playerID, 'Use -ei [1-6] for detailed information.', []);
		}
		else {
			playerManager.print(playerID, "No items in the inventory appear to be enchanted.");
		}
	}
}
Example #4
0
// Use: -enchant 1 timestop
function enchantItem(client, args) {
	var playerID = client.netprops.m_iPlayerID;
	if (!enchanter.enabled) {
		playerManager.print(playerID, 'Enchanter module not enabled for this lobby.', []);
		return;
	}
	if (enchanter.enabled && !enchanter.shop) {
		playerManager.print(playerID, 'Shop module not enabled for this lobby.', []);
		return;
	}
	var hero = client.netprops.m_hAssignedHero;
	if (!hero) return;

	if (args.length === 0) {
		playerManager.print(playerID, 'Proper command is -enchant # name. type -ei or -ei list for names.');
		return;
	}

	var invSlot = Number(args[0]);
	if (isNaN(invSlot)) {
		playerManager.print(playerID, '# should be a number.');
		return;
	}

	invSlot--;
	if (invSlot < 0 || invSlot > 5) {
		playerManager.print(playerID, 'Use value between 1 and 6.');
		return;
	}

	var item = hero.netprops.m_hItems[invSlot];
	if (item === null) {
		playerManager.print(playerID, 'There is no item in this slot.');
		return;
	}

	if (args.length === 1) {
		playerManager.print(playerID, 'Proper command is -enchant %s name.', [args[0]]);
		playerManager.print(playerID, 'Forgot the enchant name? type -ei or -ei list');
		return;
	}

	var map = enchants.getMap();
	var allenchants = map.onHit.concat(map.onEquip);

	var enchtype = args[1];
	var foundEnchant = false;
	for (var i = 0; i < allenchants.length; ++i) {
		var currEnchant = allenchants[i];
		if (currEnchant.name === enchtype) {
			// Found the enchantment type
			foundEnchant = true;

			if (!item.enchants)
				item.enchants = {};

			// Check if the hero's level can actually use it.
			var hero = playerManager.grabHero(playerID);
			if (hero === null) return;
			var heroLevel = hero.netprops.m_iCurrentLevel;
			if (heroLevel < currEnchant.minimumHeroLevel) {
				playerManager.print(playerID, "You need to be level %s or higher to purchase this enchantment.", [currEnchant.minimumHeroLevel]);
				return;
			}

			function createProps(ent, name) {
				if(!ent.enchants[name])
					ent.enchants[name] = {};

				if(!ent.enchants[name].props)
					ent.enchants[name].props = {level: 0};

				return ent;
			}

			if (!item.enchants[currEnchant.name])
				item = createProps(item, currEnchant.name);

			// Enchantment level checking
			if (currEnchant.max && item.enchants[currEnchant.name].props.level >= currEnchant.max) {
				playerManager.print(playerID, "The enchantment on this item is at the maximum level.");
				return;
			}

			// Player purchase the enchantment
			var costidx = item.enchants[currEnchant.name].props.level;
			if (!playerManager.purchase(playerID, currEnchant.cost[costidx])) {
				playerManager.print(playerID, "You don't have enough gold to purchase this enchantment. (%sg)", [currEnchant.cost[costidx]]);
				return;
			}

			var newLevel = item.enchants[currEnchant.name].props.level += 1;
			currEnchant.setup(item, enchtype, newLevel);

			// Play a random enchant sound after 10 frames
			dota.sendAudio(client, false, 'ui/buy.wav');
			timers.setTimeout(function() {
				var sounds = settings.sounds.itemEnchanted;
				var sound = util.randomElement(sounds);
				dota.sendAudio(client, false, sound);
			}, 10);

			var itemName = itemManager.getStringName(item.getClassname());
			var enchantmentFormatName = util.capitaliseFirstLetter(currEnchant.name);
			playerManager.print(playerID, "[%sg] Enchanted%s with %s (%s/%s)", [currEnchant.cost[costidx], itemName, enchantmentFormatName, newLevel, currEnchant.max]);
			var props = item.enchants[currEnchant.name].props;
			playerManager.print(playerID, "Extra properties: {%s}", [util.objToString(props)]);
			break;
		}
	}
	if (!foundEnchant) {
		playerManager.print(playerID, 'There is no enchant type with that name.');
		return;
	}

	// // This item is already enchanted, list possible other enchantments
	// if (item.enchanted)

	// var enchantName = util.capitaliseFirstLetter(enchant.name);
	// enchant.setup(entity, enchant.name, level);


	// playerManager.print(playerID, "%s enchanted %s [level %s] %s", [named, name, level, type]);

}