From 2afd9a9c62af99b3d0c2415f67c521bc69a4202b Mon Sep 17 00:00:00 2001 From: big bad waffle Date: Fri, 27 Jul 2018 14:56:56 +0200 Subject: [PATCH] more --- .eslintignore | 2 + .eslintrc | 194 +++++++++++++++++++++++++++ src/.eslintignore | 2 + tests/require.js | 16 +++ tests/server/components/equipment.js | 65 +++++++++ 5 files changed, 279 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 src/.eslintignore create mode 100644 tests/require.js create mode 100644 tests/server/components/equipment.js diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..c541d22e --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules/* +src/server/misc/random.js diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..77c874bd --- /dev/null +++ b/.eslintrc @@ -0,0 +1,194 @@ +{ + "root": true, + + "parser": "babel-eslint", + + "env": { + "es6": true, + "node": true, + "jest": true + }, + + "plugins": [ + "flowtype", + "prettier", + "react" + ], + + // Map from global var to bool specifying if it can be redefined + "globals": { + "__DEV__": true, + "__dirname": false, + "__fbBatchedBridgeConfig": false, + "alert": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "clearImmediate": true, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "document": false, + "escape": false, + "Event": false, + "EventTarget": false, + "exports": false, + "fetch": false, + "FormData": false, + "global": false, + "jest": false, + "Map": true, + "module": false, + "navigator": false, + "process": false, + "Promise": true, + "requestAnimationFrame": true, + "requestIdleCallback": true, + "require": false, + "Set": true, + "setImmediate": true, + "setInterval": false, + "setTimeout": false, + "window": false, + "XMLHttpRequest": false, + "pit": false, + "extend": true, + "_": true, + "io": true, + "cons": true, + "atlas": true, + "instancer": true + }, + + "rules": { + "comma-dangle": [2,"never"], + "no-cond-assign": [2,"always"], + "no-console": 1, + "no-constant-condition": 2, + "no-control-regex": 2, + "no-debugger": 1, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-empty-character-class": 2, + "no-empty": [2, { "allowEmptyCatch": true }], + "no-ex-assign": 2, + "no-extra-semi": 2, + "no-func-assign": 2, + "no-inner-declarations": [2,"functions"], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-negated-in-lhs": 2, + "no-obj-calls": 2, + "no-regex-spaces": 2, + "no-sparse-arrays": 2, + "no-unreachable": 1, + "use-isnan": 2, + "valid-typeof": 2, + "block-scoped-var": 2, + "curly": [2,"multi-or-nest"], + "dot-notation": 2, + "dot-location": [2,"property"], + "eqeqeq": [2,"smart"], + "no-alert": 2, + "no-caller": 2, + "no-else-return": 2, + "no-eq-null": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-implied-eval": 2, + "no-iterator": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-multi-spaces": 2, + "no-native-reassign": 2, + "no-new-func": 2, + "no-new-wrappers": 2, + "no-new": 2, + "no-octal-escape": 2, + "no-octal": 2, + "no-process-env": 1, + "no-proto": 2, + "no-redeclare": 2, + "no-return-assign": [2,"always"], + "no-script-url": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-throw-literal": 2, + "no-unused-expressions": 2, + "no-useless-call": 2, + "no-void": 2, + "no-with": 2, + "wrap-iife": [2,"inside"], + "yoda": [2,"never",{}], + "strict": [2,"global"], + "no-catch-shadow": 2, + "no-delete-var": 2, + "no-label-var": 2, + "no-shadow-restricted-names": 2, + "no-shadow": [2,{"builtinGlobals":true,"hoist":"all"}], + "no-undef-init": 2, + "no-undef": 2, + "no-undefined": 2, + "no-unused-vars": 1, + "no-use-before-define": 2, + "no-mixed-requires": [2,false], + "no-new-require": 2, + "no-path-concat": 2, + "no-process-exit": 1, + "brace-style": [2,"1tbs",{}], + "camelcase": [1,{"properties":"always"}], + "comma-spacing": [2,{"after":true}], + "comma-style": 2, + "eol-last": 2, + "func-style": [1,"expression"], + "indent": [2, "tab"], + "key-spacing": [2,{"afterColon":true}], + "new-parens": 2, + "no-inline-comments": 2, + "no-lonely-if": 2, + "no-mixed-spaces-and-tabs": 2, + "no-multiple-empty-lines": [2,{"max":1}], + "no-nested-ternary": 1, + "no-new-object": 2, + "no-spaced-func": 2, + "no-underscore-dangle": 1, + "no-unneeded-ternary": 2, + "object-curly-spacing": [2,"always",{"arraysInObjects":true,"objectsInObjects":true}], + "padded-blocks": [2,"never"], + "quote-props": [2,"as-needed"], + "quotes": [2,"single","avoid-escape"], + "semi-spacing": [2,{"after":true}], + "semi": [2,"always"], + "space-before-blocks": [2,"always"], + "space-before-function-paren": [2,"always"], + "space-infix-ops": 2, + "keyword-spacing": [2,{"before":true,"after":true}], + "arrow-parens": [2,"as-needed"], + "arrow-spacing": [2,{"before":true,"after":true}], + "no-const-assign": 2, + "no-var": 2, + + // React Plugin + // The following rules are made available via `eslint-plugin-react`. + + "react/display-name": 0, + "react/jsx-boolean-value": 0, + "react/jsx-no-comment-textnodes": 1, + "react/jsx-no-duplicate-props": 2, + "react/jsx-no-undef": 1, + "react/jsx-sort-props": 0, + "react/jsx-uses-react": 1, + "react/jsx-uses-vars": 1, + "react/no-did-mount-set-state": 1, + "react/no-did-update-set-state": 1, + "react/no-multi-comp": 0, + "react/no-string-refs": 1, + "react/no-unknown-property": 0, + "react/prop-types": 0, + "react/react-in-jsx-scope": 1, + "react/self-closing-comp": 1, + "react/wrap-multilines": 0 + } +} diff --git a/src/.eslintignore b/src/.eslintignore new file mode 100644 index 00000000..78ed6fac --- /dev/null +++ b/src/.eslintignore @@ -0,0 +1,2 @@ +node_modules/* +*.json diff --git a/tests/require.js b/tests/require.js new file mode 100644 index 00000000..d74059df --- /dev/null +++ b/tests/require.js @@ -0,0 +1,16 @@ +var module = require('module'); +var originalRequire = module.prototype.require; + +module.prototype.require = function (name) { + var res = null; + try { + res = originalRequire.call(this, name); + } catch (e) { + try { + res = originalRequire.call(this, __dirname + '/' + name); + } catch (err) { } + + } + + return res; +} diff --git a/tests/server/components/equipment.js b/tests/server/components/equipment.js new file mode 100644 index 00000000..db45170d --- /dev/null +++ b/tests/server/components/equipment.js @@ -0,0 +1,65 @@ +*/ + Ways in which stats can be modified: + * EQ or unEQ item + -* Passives + * Spells + * Casting a Spell + * Activating an Aura + -* Gaining a level + * Downscaling + * Backscaling + * Effects like HP Regen Aura being activated and deactivated + -* Titangrip events +*/ + +*/ +Ok, here goes. + +So, the server has to keep track of your stats for multiple reasons. For example, when dealing damage you might want to query the character's strength. Or, when trying to equip an item, we have to check the character's level. The former has to check the downscaled value and the latter, the unscaled. It's important to note that character's aren't always scaled. + +There are tons of ways that a character's stats can be modified, for example: EQ an item, applying a passive tree node, casting a spell, activating an aura, gaining a level, etc... + +My question is. How do I bet manage this? Do i recalculate scaled stats every time your stats chang +*/ + +*/ + * On enter zone: + * Hook prophecy events + * Set level based stats + * Apply Passives + * EQ All Gear (Make sure to ignore stat issues until after all EQd then check all) + * Downscale stats and store in scaledStats + * On EQ, unEQ, spellcast, aura activation, aura deactivation, aura effect application, aura effect removal, damage taken, death and respawn + * Modify both stats and scaledStats +*/ + +define([ + 'server/mocks/generator' +], function( + mocks +) { + return { + //Do we have the item equipped after equipping it + equipItem_Stats: function() { + var player = mocks.player({ + inventory: { + items: [{ + id: 0, + slot: 'head', + stats: { + int: 10 + } + }] + }, + equipment: {}, + stats: {}, + spellbook: {} + }); + + player.equipment.equip(0); + + if (player.stats.values.int != 10) + return true; + } + }; +});