Ejemplo n.º 1
0
/**
 * Generates an array or items
 * for a given type
 *
 * @param {string} entryType
 * @param {Object} model
 * @return {Array}
 */
function getItemsOfType(entryType, model) {
    let allItems = getItems(model);
    let items = _(allItems)
        .filter({entryType: entryType})
        .uniq()
        .value() || [];

    return generateTextualItems(items, model);
}
Ejemplo n.º 2
0
 static validSpells(player) {
   return _(Spells)
     .values()
     .filter(spellData => {
       return _.filter(spellData.tiers, tier => {
         return (tier.profession === player.professionName
                   || (player.$secondaryProfessions && _.includes(player.$secondaryProfessions, tier.profession)))
                && tier.level <= player.level;
       }).length > 0;
     })
     .value();
 }
Ejemplo n.º 3
0
      .every(requirement => {
        if (requirement.startsWith('a')) {
          const name = _(requirement).trimStart().replace('aReq', '').replace(/_/g, ' ');
          const tier = item[requirement];
          return this.$achievements.hasAchievement(name) && this.$achievements.hasAchievementAtTier(name, tier);

        } else if (requirement.startsWith('c')) {
          const name = _(requirement).trimStart().replace('cReq', '').replace(/_/g, ' ');
          const number = item[requirement];
          return this.$collectibles.hasTotalCollectibleAtNumber(name, number);

        } else if (requirement.startsWith('s')) {
          let statisticName = _(requirement).trimStart().replace('sReq', '').replace(/\*/g, ' ').split(' ');
          const requiredNumber = item[requirement];
          if (statisticName[0] === 'Boss_Kills') statisticName[0] = 'BossKills';
          if (statisticName[0] === 'Regions' || statisticName[0] === 'Maps' || statisticName[0] === 'BossKills') statisticName.unshift('Character');
          statisticName = statisticName.join('.').replace(/_/g, ' ');
          return this.$statistics.getStat(statisticName) >= requiredNumber;

        }
        return false;
      }) : false;
Ejemplo n.º 4
0
  static operateOn(player) {
    const member = _(player.party.players)
      .sortBy(['level'])
      .head();

    const percent = Event.chance.floating({ fixed: 5, min: 0.01, max: 0.03 });
    const xpMod = Math.floor(member._xp.maximum * percent);
    const eventText = this.eventText('blessXpParty', player, { xp: xpMod, partyName: player.party.name });

    _.each(player.party.players, member => {
      const totalXp = member.gainXp(xpMod, false);

      // recalculate for the modified value
      const myPercent = xpMod/member._xp.maximum;

      this.emitMessage({ affected: [member], eventText: `${eventText} [+${totalXp.toLocaleString()} xp, ~${(myPercent*100).toFixed(2)}%]`, category: MessageCategories.XP });
      if(!member.$statistics) return;
      member.$statistics.batchIncrement(['Character.Events', 'Character.Event.XPBlessParty']);
    });
  }
Ejemplo n.º 5
0
  canEquip(item, rangeBoostMultiplier = 1, useCheckRangeMultiplier = true) {
    const myItem = this.equipment[item.type];
    const checkScore = item.score;
    const myScore = myItem ? myItem.score : -1000;
    const itemFindRange = rangeBoostMultiplier * this.liveStats.itemFindRange;

    let checkRangeMultiplier = this.$personalities && this.$personalities.isActive('SharpEye') ? 0.65 : 0.05;
    if(!useCheckRangeMultiplier) {
      checkRangeMultiplier = 0;
    }

    const metRequirements = (this.isPlayer) ? _(item)
      .keys()
      .filter(stat => _.includes(stat, 'Req'))
      .every(requirement => {
        if (requirement.startsWith('a')) {
          const name = _(requirement).trimStart().replace('aReq', '').replace(/_/g, ' ');
          const tier = item[requirement];
          return this.$achievements.hasAchievement(name) && this.$achievements.hasAchievementAtTier(name, tier);

        } else if (requirement.startsWith('c')) {
          const name = _(requirement).trimStart().replace('cReq', '').replace(/_/g, ' ');
          const number = item[requirement];
          return this.$collectibles.hasTotalCollectibleAtNumber(name, number);

        } else if (requirement.startsWith('s')) {
          let statisticName = _(requirement).trimStart().replace('sReq', '').replace(/\*/g, ' ').split(' ');
          const requiredNumber = item[requirement];
          if (statisticName[0] === 'Boss_Kills') statisticName[0] = 'BossKills';
          if (statisticName[0] === 'Regions' || statisticName[0] === 'Maps' || statisticName[0] === 'BossKills') statisticName.unshift('Character');
          statisticName = statisticName.join('.').replace(/_/g, ' ');
          return this.$statistics.getStat(statisticName) >= requiredNumber;

        }
        return false;
      }) : false;

    return checkScore > 0 && checkScore > (myScore * checkRangeMultiplier) && checkScore <= itemFindRange && metRequirements;
  }
Ejemplo n.º 6
0
import GameJoin from './game-join'
import GameChatlist from './game-chatlist'

let turnPhaseOrderIndex = 0

let GameView = React.createClass({
	mixins: [State],

	onNewOrder(move) {
		move.id = turnPhaseOrderIndex++
		let order = move
		let prevOrder = _.find(this.state.pendingOrders, {armyId: order.armyId});
		if (prevOrder === undefined) {
			prevOrder = {at: order.at, to: order.at}
		}
		this.setState({pendingOrders: _(this.state.pendingOrders)
			.reject({armyId: order.armyId})
			.reject({to: prevOrder.at})
			.reject({to: prevOrder.to})
			.concat(order)
			.value()
		})
	},

	removeDependentMoves(pendingOrders, order) {
		return _(pendingOrders)
			.reject({to: order.at})
			.reject({from: order.at})
	},

	getInitialState() {
Ejemplo n.º 7
0
				let messagesThatFailed = _.reject(this.pending, (msg) => _(this.messages).pluck('id').contains(msg.id))