소스 검색

fixes #1330

tags/v0.4.2^2
Big Bad Waffle 4 년 전
부모
커밋
9605a4ef15
3개의 변경된 파일83개의 추가작업 그리고 80개의 파일을 삭제
  1. +7
    -8
      src/server/components/auth/checkLoginRewards.js
  2. +0
    -72
      src/server/config/loginRewards.js
  3. +76
    -0
      src/server/misc/rewardGenerator.js

+ 7
- 8
src/server/components/auth/checkLoginRewards.js 파일 보기

@@ -1,5 +1,5 @@
const scheduler = require('../../misc/scheduler');
const loginRewards = require('../../config/loginRewards');
const rewardGenerator = require('../../misc/rewardGenerator');
const mail = require('../../mail/mail');

const calculateDaysSkipped = (oldTime, newTime) => {
@@ -52,14 +52,13 @@ module.exports = async (cpnAuth, data, character, cbDone) => {
return;
}

const daysSkipped = calculateDaysSkipped(lastLogin, time);
if (daysSkipped === 1)
accountInfo.loginStreak++;
else
accountInfo.loginStreak -= (daysSkipped - 1);
const streak = Math.max(1, Math.min(21, accountInfo.loginStreak));
accountInfo.loginStreak = streak;

accountInfo.loginStreak = Math.min(1, Math.max(21, accountInfo.loginStreak));
const itemCount = 1 + ~~(accountInfo.loginStreak / 2);
const rewards = rewardGenerator(itemCount);
if (rewards.length > 0)
rewards[0].msg = `Daily login reward for ${streak} day${(streak > 1) ? 's' : ''}:`;

const rewards = loginRewards.generate(accountInfo.loginStreak);
mail.sendMail(character.name, rewards, cbDone);
};

+ 0
- 72
src/server/config/loginRewards.js 파일 보기

@@ -1,72 +0,0 @@
const config = [{
name: 'Iron Bar',
sprite: [0, 0],
quality: 0,
chance: 15
}, {
name: 'Cloth Scrap',
sprite: [0, 1],
quality: 0,
chance: 15
}, {
name: 'Leather Scrap',
sprite: [0, 7],
quality: 0,
chance: 15
}, {
name: 'Skyblossom',
sprite: [1, 2],
quality: 0,
chance: 8
}, {
name: 'Common Essence',
sprite: [0, 2],
quality: 0,
chance: 5
}, {
name: 'Magic Essence',
sprite: [0, 3],
quality: 1,
chance: 2
}, {
name: 'Rare Essence',
sprite: [0, 4],
quality: 2,
chance: 1
}];

let pool = [];
config.forEach(function (c) {
for (let i = 0; i < c.chance; i++)
pool.push(c.name);
});

module.exports = {
generate: function (streak) {
let items = [];
const itemCount = 1 + ~~(streak / 2);

for (let i = 0; i < itemCount; i++) {
let pickName = pool[~~(Math.random() * pool.length)];
const pick = config.find(f => f.name === pickName);

let item = items.find(f => f.name === pickName);
if (!item) {
items.push({
name: pick.name,
material: true,
quality: pick.quality,
sprite: pick.sprite,
quantity: 1
});
} else
item.quantity++;
}

if (items.length > 0)
items[0].msg = `Daily login reward for ${streak} day${(streak > 1) ? 's' : ''}:`;

return items;
}
};

+ 76
- 0
src/server/misc/rewardGenerator.js 파일 보기

@@ -0,0 +1,76 @@
const defaultConfig = [{
name: 'Iron Bar',
sprite: [0, 0],
quality: 0,
chance: 15
}, {
name: 'Cloth Scrap',
sprite: [0, 1],
quality: 0,
chance: 15
}, {
name: 'Leather Scrap',
sprite: [0, 7],
quality: 0,
chance: 15
}, {
name: 'Skyblossom',
sprite: [1, 2],
quality: 0,
chance: 8
}, {
name: 'Common Essence',
sprite: [0, 2],
quality: 0,
chance: 5
}, {
name: 'Magic Essence',
sprite: [0, 3],
quality: 1,
chance: 2
}, {
name: 'Rare Essence',
sprite: [0, 4],
quality: 2,
chance: 1
}];

const buildPool = config => {
const pool = [];

config.forEach(c => {
for (let i = 0; i < c.chance; i++)
pool.push(c.name);
});

return pool;
};

const defaultPool = buildPool(defaultConfig);

module.exports = (itemCount, useConfig) => {
const config = useConfig || defaultConfig;
const pool = useConfig ? buildPool(useConfig) : defaultPool;

const items = [];
for (let i = 0; i < itemCount; i++) {
let pickName = pool[~~(Math.random() * pool.length)];
const pick = config.find(f => f.name === pickName);

let item = items.find(f => f.name === pickName);
if (!item) {
items.push({
name: pick.name,
material: true,
quality: pick.quality,
sprite: pick.sprite,
quantity: 1
});
} else
item.quantity++;
}

return items;
};


불러오는 중...
취소
저장