From e1e9dd9e8dbd46a6ba4ae855ba9d95eb43f3772b Mon Sep 17 00:00:00 2001 From: Rylee George Date: Thu, 23 Feb 2017 23:02:47 +1100 Subject: [PATCH 01/43] Fixed --- src/server/config/factions/gaekatla.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/config/factions/gaekatla.js b/src/server/config/factions/gaekatla.js index 274ae422..03ab3f93 100644 --- a/src/server/config/factions/gaekatla.js +++ b/src/server/config/factions/gaekatla.js @@ -52,9 +52,9 @@ define([ afterKillMob: function(item, mob) { var effect = item.effects.find(e => (e.factionId == 'gaekatla')); - //var roll = Math.random() * 100; - //if (roll >= this.chance) - // return; + var roll = Math.random() * 100; + if (roll >= this.chance) + return; //Spawn a mob var mob = spawners.spawn({ From 541e2f99441be6b60e763c53ff20cf865645ed61 Mon Sep 17 00:00:00 2001 From: Rylee George Date: Thu, 23 Feb 2017 23:05:17 +1100 Subject: [PATCH 02/43] Fixed --- src/server/config/maps/city/zone.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/config/maps/city/zone.js b/src/server/config/maps/city/zone.js index a0c4aad2..77f5867b 100644 --- a/src/server/config/maps/city/zone.js +++ b/src/server/config/maps/city/zone.js @@ -111,7 +111,7 @@ module.exports = { }, faction: { id: 'gaekatla', - tier: 1 + tier: 6 }, markup: { buy: 0.25, @@ -143,7 +143,7 @@ module.exports = { } } }, - shopestrid: { + estrid: { properties: { cpnNotice: { actions: { @@ -162,7 +162,7 @@ module.exports = { } } }, - shoptola: { + tola: { properties: { cpnNotice: { actions: { @@ -181,7 +181,7 @@ module.exports = { } } }, - shoppriest: { + priest: { properties: { cpnNotice: { actions: { From 247b08b2d4ca1555502457dbcee2fe4bbd674298 Mon Sep 17 00:00:00 2001 From: Rylee George Date: Thu, 23 Feb 2017 23:11:29 +1100 Subject: [PATCH 03/43] Fixed replace --- src/server/config/maps/city/zone.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/config/maps/city/zone.js b/src/server/config/maps/city/zone.js index 77f5867b..fdc5d64f 100644 --- a/src/server/config/maps/city/zone.js +++ b/src/server/config/maps/city/zone.js @@ -143,7 +143,7 @@ module.exports = { } } }, - estrid: { + shopestrid: { properties: { cpnNotice: { actions: { @@ -162,7 +162,7 @@ module.exports = { } } }, - tola: { + shoptola: { properties: { cpnNotice: { actions: { @@ -181,7 +181,7 @@ module.exports = { } } }, - priest: { + shoppriest: { properties: { cpnNotice: { actions: { From 807ec4f95af23225bcdee62bac68671059b09528 Mon Sep 17 00:00:00 2001 From: Rylee George Date: Fri, 24 Feb 2017 01:54:46 +1100 Subject: [PATCH 04/43] Fixed --- src/server/items/salvager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/items/salvager.js b/src/server/items/salvager.js index 73209d55..fbd28ed4 100644 --- a/src/server/items/salvager.js +++ b/src/server/items/salvager.js @@ -120,7 +120,7 @@ define([ if (m.qualityMult) max *= (m.qualityMult * (item.quality + 1)); - var quantity = Math.ceil(random.norm(0, 1) * max); + var quantity = Math.ceil(random.norm(0, 1) * max) || 1; if (maxRoll) quantity = Math.ceil(max); From b0beea31f7cc2345d9423d37dfb55bad26720ecf Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 23 Feb 2017 18:43:18 +0200 Subject: [PATCH 05/43] Fixes #66 --- src/server/components/dialogue.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/components/dialogue.js b/src/server/components/dialogue.js index 090b7648..403760eb 100644 --- a/src/server/components/dialogue.js +++ b/src/server/components/dialogue.js @@ -26,7 +26,7 @@ define([ return false; } else if (targetName != null) { - target = this.obj.instance.objects.objects.find(o => o.name.toLowerCase() == targetName); + target = this.obj.instance.objects.objects.find(o => ((o.name) && (o.name.toLowerCase() == targetName))); if (!target) return false; } From 6d86ca25b7e9d1cdab8476396c668df8ce91ba09 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 23 Feb 2017 19:14:53 +0200 Subject: [PATCH 06/43] Fixes #57 --- src/server/components/inventory.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/server/components/inventory.js b/src/server/components/inventory.js index 42ccdc64..ee61c5b5 100644 --- a/src/server/components/inventory.js +++ b/src/server/components/inventory.js @@ -376,6 +376,9 @@ define([ if (this.obj.player) delete item.fromMob; + //Store the quantity to send to the player + var quantity = item.quantity; + //Material? var exists = false; if ((item.material) || (item.quest)) { @@ -437,8 +440,8 @@ define([ var messages = []; var msg = item.name; - if (item.quantity) - msg += ' x' + item.quantity; + if (quantity) + msg += ' x' + quantity; messages.push({ class: 'q' + item.quality, message: 'loot (' + msg + ')', From 269ec4ffe78aba80be4bc1777cd9b5631d558b64 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 23 Feb 2017 19:53:07 +0200 Subject: [PATCH 07/43] Fixes #46 --- src/server/components/auth.js | 11 +- src/server/misc/messages.js | 1 + src/server/misc/profanities.js | 744 +++++++++++++++++++++++++++++++++ 3 files changed, 754 insertions(+), 2 deletions(-) create mode 100644 src/server/misc/profanities.js diff --git a/src/server/components/auth.js b/src/server/components/auth.js index 6b7e8ef8..21b92db4 100644 --- a/src/server/components/auth.js +++ b/src/server/components/auth.js @@ -3,13 +3,15 @@ define([ 'misc/messages', 'security/connections', 'leaderboard/leaderboard', - 'config/skins' + 'config/skins', + 'misc/profanities' ], function( io, messages, connections, leaderboard, - skins + skins, + profanities ) { return { type: 'auth', @@ -252,6 +254,11 @@ define([ } } + if (!profanities.isClean(credentials.username)) { + msg.callback(messages.login.invalid); + return; + } + io.get({ ent: credentials.username, field: 'login', diff --git a/src/server/misc/messages.js b/src/server/misc/messages.js index 93c6e182..a35503a8 100644 --- a/src/server/misc/messages.js +++ b/src/server/misc/messages.js @@ -5,6 +5,7 @@ define([ ) { return { login: { + invalid: 'invalid username chosen', exists: 'username exists, please try another', allFields: 'please complete all fields', illegal: 'illegal characters in username/password', diff --git a/src/server/misc/profanities.js b/src/server/misc/profanities.js new file mode 100644 index 00000000..2c66087c --- /dev/null +++ b/src/server/misc/profanities.js @@ -0,0 +1,744 @@ +define([ + +], function( + +) { + var config = [ + 'a55', + 'a55hole', + 'aeolus', + 'ahole', + 'anal', + 'analprobe', + 'anilingus', + 'anus', + 'areola', + 'areole', + 'arian', + 'aryan', + 'ass', + 'assbang', + 'assbanged', + 'assbangs', + 'asses', + 'assfuck', + 'assfucker', + 'assh0le', + 'asshat', + 'assho1e', + 'ass hole', + 'assholes', + 'assmaster', + 'assmunch', + 'asswipe', + 'asswipes', + 'azazel', + 'azz', + 'b1tch', + 'babe', + 'babes', + 'ballsack', + 'bang', + 'banger', + 'barf', + 'bastard', + 'bastards', + 'bawdy', + 'beaner', + 'beardedclam', + 'beastiality', + 'beatch', + 'beater', + 'beaver', + 'beer', + 'beeyotch', + 'beotch', + 'biatch', + 'bigtits', + 'big tits', + 'bimbo', + 'bitch', + 'bitched', + 'bitches', + 'bitchy', + 'blow job', + 'blow', + 'blowjob', + 'blowjobs', + 'bod', + 'bodily', + 'boink', + 'bollock', + 'bollocks', + 'bollok', + 'bone', + 'boned', + 'boner', + 'boners', + 'bong', + 'boob', + 'boobies', + 'boobs', + 'booby', + 'booger', + 'bookie', + 'bootee', + 'bootie', + 'booty', + 'booze', + 'boozer', + 'boozy', + 'bosom', + 'bosomy', + 'bowel', + 'bowels', + 'bra', + 'brassiere', + 'breast', + 'breasts', + 'bugger', + 'bukkake', + 'bullshit', + 'bull shit', + 'bullshits', + 'bullshitted', + 'bullturds', + 'bung', + 'busty', + 'butt', + 'butt fuck', + 'buttfuck', + 'buttfucker', + 'buttfucker', + 'buttplug', + 'c.0.c.k', + 'c.o.c.k.', + 'c.u.n.t', + 'c0ck', + 'c-0-c-k', + 'caca', + 'cahone', + 'cameltoe', + 'carpetmuncher', + 'cawk', + 'cervix', + 'chinc', + 'chincs', + 'chink', + 'chink', + 'chode', + 'chodes', + 'cl1t', + 'climax', + 'clit', + 'clitoris', + 'clitorus', + 'clits', + 'clitty', + 'cocain', + 'cocaine', + 'cock', + 'c-o-c-k', + 'cockblock', + 'cockholster', + 'cockknocker', + 'cocks', + 'cocksmoker', + 'cocksucker', + 'cock sucker', + 'coital', + 'commie', + 'condom', + 'coon', + 'coons', + 'corksucker', + 'crabs', + 'crack', + 'cracker', + 'crackwhore', + 'crap', + 'crappy', + 'cum', + 'cummin', + 'cumming', + 'cumshot', + 'cumshots', + 'cumslut', + 'cumstain', + 'cunilingus', + 'cunnilingus', + 'cunny', + 'cunt', + 'cunt', + 'c-u-n-t', + 'cuntface', + 'cunthunter', + 'cuntlick', + 'cuntlicker', + 'cunts', + 'd0ng', + 'd0uch3', + 'd0uche', + 'd1ck', + 'd1ld0', + 'd1ldo', + 'dago', + 'dagos', + 'dammit', + 'damn', + 'damned', + 'damnit', + 'dawgie-style', + 'dick', + 'dickbag', + 'dickdipper', + 'dickface', + 'dickflipper', + 'dickhead', + 'dickheads', + 'dickish', + 'dick-ish', + 'dickripper', + 'dicksipper', + 'dickweed', + 'dickwhipper', + 'dickzipper', + 'diddle', + 'dike', + 'dildo', + 'dildos', + 'diligaf', + 'dillweed', + 'dimwit', + 'dingle', + 'dipship', + 'doggie-style', + 'doggy-style', + 'dong', + 'doofus', + 'doosh', + 'dopey', + 'douch3', + 'douche', + 'douchebag', + 'douchebags', + 'douchey', + 'drunk', + 'dumass', + 'dumbass', + 'dumbasses', + 'dummy', + 'dyke', + 'dykes', + 'ejaculate', + 'enlargement', + 'erect', + 'erection', + 'erotic', + 'essohbee', + 'extacy', + 'extasy', + 'f.u.c.k', + 'fack', + 'fag', + 'fagg', + 'fagged', + 'faggit', + 'faggot', + 'fagot', + 'fags', + 'faig', + 'faigt', + 'fannybandit', + 'fart', + 'fartknocker', + 'fat', + 'felch', + 'felcher', + 'felching', + 'fellate', + 'fellatio', + 'feltch', + 'feltcher', + 'fisted', + 'fisting', + 'fisty', + 'floozy', + 'foad', + 'fondle', + 'foobar', + 'foreskin', + 'freex', + 'frigg', + 'frigga', + 'fubar', + 'fuck', + 'f-u-c-k', + 'fuckass', + 'fucked', + 'fucked', + 'fucker', + 'fuckface', + 'fuckin', + 'fucking', + 'fucknugget', + 'fucknut', + 'fuckoff', + 'fucks', + 'fucktard', + 'fuck-tard', + 'fuckup', + 'fuckwad', + 'fuckwit', + 'fudgepacker', + 'fuk', + 'fvck', + 'fxck', + 'gae', + 'gai', + 'ganja', + 'gay', + 'gays', + 'gey', + 'gfy', + 'ghay', + 'ghey', + 'gigolo', + 'glans', + 'goatse', + 'godamn', + 'godamnit', + 'goddam', + 'goddammit', + 'goddamn', + 'goldenshower', + 'gonad', + 'gonads', + 'gook', + 'gooks', + 'gringo', + 'gspot', + 'g-spot', + 'gtfo', + 'guido', + 'h0m0', + 'h0mo', + 'handjob', + 'hard on', + 'he11', + 'hebe', + 'heeb', + 'hell', + 'hemp', + 'heroin', + 'herp', + 'herpes', + 'herpy', + 'hitler', + 'hiv', + 'hobag', + 'hom0', + 'homey', + 'homo', + 'homoey', + 'honky', + 'hooch', + 'hookah', + 'hooker', + 'hoor', + 'hootch', + 'hooter', + 'hooters', + 'horny', + 'hump', + 'humped', + 'humping', + 'hussy', + 'hymen', + 'inbred', + 'incest', + 'injun', + 'j3rk0ff', + 'jackass', + 'jackhole', + 'jackoff', + 'jap', + 'japs', + 'jerk', + 'jerk0ff', + 'jerked', + 'jerkoff', + 'jism', + 'jiz', + 'jizm', + 'jizz', + 'jizzed', + 'junkie', + 'junky', + 'kike', + 'kikes', + 'kill', + 'kinky', + 'kkk', + 'klan', + 'knobend', + 'kooch', + 'kooches', + 'kootch', + 'kraut', + 'kyke', + 'labia', + 'lech', + 'leper', + 'lesbians', + 'lesbo', + 'lesbos', + 'lez', + 'lezbian', + 'lezbians', + 'lezbo', + 'lezbos', + 'lezzie', + 'lezzies', + 'lezzy', + 'lmao', + 'lmfao', + 'loin', + 'loins', + 'lube', + 'lusty', + 'mams', + 'massa', + 'masterbate', + 'masterbating', + 'masterbation', + 'masturbate', + 'masturbating', + 'masturbation', + 'maxi', + 'menses', + 'menstruate', + 'menstruation', + 'meth', + 'm-fucking', + 'mofo', + 'molest', + 'moolie', + 'moron', + 'motherfucka', + 'motherfucker', + 'motherfucking', + 'mtherfucker', + 'mthrfucker', + 'mthrfucking', + 'muff', + 'muffdiver', + 'murder', + 'muthafuckaz', + 'muthafucker', + 'mutherfucker', + 'mutherfucking', + 'muthrfucking', + 'nad', + 'nads', + 'naked', + 'napalm', + 'nappy', + 'nazi', + 'nazism', + 'negro', + 'nigga', + 'niggah', + 'niggas', + 'niggaz', + 'nigger', + 'nigger', + 'niggers', + 'niggle', + 'niglet', + 'nimrod', + 'ninny', + 'nipple', + 'nooky', + 'nympho', + 'opiate', + 'opium', + 'oral', + 'orally', + 'organ', + 'orgasm', + 'orgasmic', + 'orgies', + 'orgy', + 'ovary', + 'ovum', + 'ovums', + 'p.u.s.s.y.', + 'paddy', + 'paki', + 'pantie', + 'panties', + 'panty', + 'pastie', + 'pasty', + 'pcp', + 'pecker', + 'pedo', + 'pedophile', + 'pedophilia', + 'pedophiliac', + 'pee', + 'peepee', + 'penetrate', + 'penetration', + 'penial', + 'penile', + 'penis', + 'perversion', + 'peyote', + 'phalli', + 'phallic', + 'phuck', + 'pillowbiter', + 'pimp', + 'pinko', + 'piss', + 'pissed', + 'pissoff', + 'piss-off', + 'pms', + 'polack', + 'pollock', + 'poon', + 'poontang', + 'porn', + 'porno', + 'pornography', + 'pot', + 'potty', + 'prick', + 'prig', + 'prostitute', + 'prude', + 'pube', + 'pubic', + 'pubis', + 'punkass', + 'punky', + 'puss', + 'pussies', + 'pussy', + 'pussypounder', + 'puto', + 'queaf', + 'queef', + 'queef', + 'queer', + 'queero', + 'queers', + 'quicky', + 'quim', + 'racy', + 'rape', + 'raped', + 'raper', + 'rapist', + 'raunch', + 'rectal', + 'rectum', + 'rectus', + 'reefer', + 'reetard', + 'reich', + 'retard', + 'retarded', + 'revue', + 'rimjob', + 'ritard', + 'rtard', + 'r-tard', + 'rum', + 'rump', + 'rumprammer', + 'ruski', + 's.h.i.t.', + 's.o.b.', + 's0b', + 'sadism', + 'sadist', + 'scag', + 'scantily', + 'schizo', + 'schlong', + 'screw', + 'screwed', + 'scrog', + 'scrot', + 'scrote', + 'scrotum', + 'scrud', + 'scum', + 'seaman', + 'seamen', + 'seduce', + 'semen', + 'sex', + 'sexual', + 'sh1t', + 's-h-1-t', + 'shamedame', + 'shit', + 's-h-i-t', + 'shite', + 'shiteater', + 'shitface', + 'shithead', + 'shithole', + 'shithouse', + 'shits', + 'shitt', + 'shitted', + 'shitter', + 'shitty', + 'shiz', + 'sissy', + 'skag', + 'skank', + 'slave', + 'sleaze', + 'sleazy', + 'slut', + 'slutdumper', + 'slutkiss', + 'sluts', + 'smegma', + 'smut', + 'smutty', + 'snatch', + 'sniper', + 'snuff', + 's-o-b', + 'sodom', + 'souse', + 'soused', + 'sperm', + 'spic', + 'spick', + 'spik', + 'spiks', + 'spooge', + 'spunk', + 'steamy', + 'stfu', + 'stiffy', + 'stoned', + 'strip', + 'stroke', + 'stupid', + 'suck', + 'sucked', + 'sucking', + 'sumofabiatch', + 't1t', + 'tampon', + 'tard', + 'tawdry', + 'teabagging', + 'teat', + 'terd', + 'teste', + 'testee', + 'testes', + 'testicle', + 'testis', + 'thrust', + 'thug', + 'tinkle', + 'tit', + 'titfuck', + 'titi', + 'tits', + 'tittiefucker', + 'titties', + 'titty', + 'tittyfuck', + 'tittyfucker', + 'toke', + 'toots', + 'tramp', + 'transsexual', + 'trashy', + 'tubgirl', + 'turd', + 'tush', + 'twat', + 'twats', + 'ugly', + 'undies', + 'unwed', + 'urinal', + 'urine', + 'uterus', + 'uzi', + 'vag', + 'vagina', + 'valium', + 'viagra', + 'virgin', + 'vixen', + 'vodka', + 'vomit', + 'voyeur', + 'vulgar', + 'vulva', + 'wad', + 'wang', + 'wank', + 'wanker', + 'wazoo', + 'wedgie', + 'weed', + 'weenie', + 'weewee', + 'weiner', + 'weirdo', + 'wench', + 'wetback', + 'wh0re', + 'wh0reface', + 'whitey', + 'whiz', + 'whoralicious', + 'whore', + 'whorealicious', + 'whored', + 'whoreface', + 'whorehopper', + 'whorehouse', + 'whores', + 'whoring', + 'wigger', + 'womb', + 'woody', + 'wop', + 'wtf', + 'xxx', + 'yobbo', + 'zoophile' + ]; + + var cLen = config.length; + + return { + isClean: function(text) { + var cb = text.indexOf.bind(text); + + for (var i = 0; i < cLen; i++) { + if (cb(config[i]) > -1) + return false; + } + + return true; + } + }; +}); \ No newline at end of file From 95ba04d506133c12b5d30b609c7f6a41aea68cdd Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 23 Feb 2017 20:17:34 +0200 Subject: [PATCH 08/43] The list was kind of ridiculous. Made it shorter --- src/server/misc/profanities.js | 531 +-------------------------------- 1 file changed, 10 insertions(+), 521 deletions(-) diff --git a/src/server/misc/profanities.js b/src/server/misc/profanities.js index 2c66087c..3989b134 100644 --- a/src/server/misc/profanities.js +++ b/src/server/misc/profanities.js @@ -4,727 +4,216 @@ define([ ) { var config = [ - 'a55', - 'a55hole', - 'aeolus', 'ahole', 'anal', - 'analprobe', 'anilingus', 'anus', 'areola', - 'areole', - 'arian', - 'aryan', 'ass', - 'assbang', - 'assbanged', - 'assbangs', - 'asses', - 'assfuck', - 'assfucker', - 'assh0le', - 'asshat', - 'assho1e', - 'ass hole', - 'assholes', - 'assmaster', - 'assmunch', - 'asswipe', - 'asswipes', - 'azazel', - 'azz', 'b1tch', - 'babe', - 'babes', 'ballsack', - 'bang', - 'banger', - 'barf', - 'bastard', - 'bastards', - 'bawdy', - 'beaner', - 'beardedclam', - 'beastiality', - 'beatch', - 'beater', - 'beaver', - 'beer', - 'beeyotch', - 'beotch', - 'biatch', - 'bigtits', - 'big tits', 'bimbo', 'bitch', - 'bitched', - 'bitches', - 'bitchy', - 'blow job', - 'blow', 'blowjob', - 'blowjobs', - 'bod', - 'bodily', - 'boink', 'bollock', - 'bollocks', - 'bollok', - 'bone', - 'boned', 'boner', - 'boners', - 'bong', 'boob', - 'boobies', - 'boobs', - 'booby', - 'booger', - 'bookie', - 'bootee', - 'bootie', - 'booty', - 'booze', - 'boozer', - 'boozy', - 'bosom', - 'bosomy', - 'bowel', - 'bowels', - 'bra', - 'brassiere', 'breast', 'breasts', - 'bugger', 'bukkake', 'bullshit', - 'bull shit', - 'bullshits', - 'bullshitted', - 'bullturds', - 'bung', 'busty', 'butt', - 'butt fuck', - 'buttfuck', - 'buttfucker', - 'buttfucker', - 'buttplug', - 'c.0.c.k', - 'c.o.c.k.', - 'c.u.n.t', - 'c0ck', - 'c-0-c-k', - 'caca', - 'cahone', 'cameltoe', 'carpetmuncher', - 'cawk', - 'cervix', 'chinc', - 'chincs', - 'chink', 'chink', 'chode', - 'chodes', - 'cl1t', 'climax', 'clit', - 'clitoris', - 'clitorus', - 'clits', - 'clitty', - 'cocain', - 'cocaine', 'cock', - 'c-o-c-k', - 'cockblock', - 'cockholster', - 'cockknocker', - 'cocks', - 'cocksmoker', - 'cocksucker', - 'cock sucker', 'coital', - 'commie', 'condom', 'coon', - 'coons', - 'corksucker', - 'crabs', - 'crack', - 'cracker', - 'crackwhore', 'crap', - 'crappy', 'cum', - 'cummin', - 'cumming', - 'cumshot', - 'cumshots', - 'cumslut', - 'cumstain', 'cunilingus', 'cunnilingus', - 'cunny', - 'cunt', 'cunt', - 'c-u-n-t', - 'cuntface', - 'cunthunter', - 'cuntlick', - 'cuntlicker', - 'cunts', - 'd0ng', - 'd0uch3', - 'd0uche', - 'd1ck', - 'd1ld0', - 'd1ldo', - 'dago', - 'dagos', 'dammit', 'damn', - 'damned', - 'damnit', - 'dawgie-style', 'dick', - 'dickbag', - 'dickdipper', - 'dickface', - 'dickflipper', - 'dickhead', - 'dickheads', - 'dickish', - 'dick-ish', - 'dickripper', - 'dicksipper', - 'dickweed', - 'dickwhipper', - 'dickzipper', - 'diddle', 'dike', 'dildo', - 'dildos', - 'diligaf', - 'dillweed', - 'dimwit', - 'dingle', - 'dipship', - 'doggie-style', - 'doggy-style', 'dong', - 'doofus', - 'doosh', - 'dopey', - 'douch3', 'douche', - 'douchebag', - 'douchebags', - 'douchey', - 'drunk', - 'dumass', 'dumbass', 'dumbasses', - 'dummy', 'dyke', - 'dykes', 'ejaculate', - 'enlargement', - 'erect', 'erection', 'erotic', - 'essohbee', - 'extacy', - 'extasy', - 'f.u.c.k', 'fack', 'fag', - 'fagg', - 'fagged', - 'faggit', - 'faggot', - 'fagot', - 'fags', - 'faig', - 'faigt', - 'fannybandit', 'fart', - 'fartknocker', - 'fat', 'felch', - 'felcher', - 'felching', 'fellate', 'fellatio', 'feltch', - 'feltcher', - 'fisted', 'fisting', - 'fisty', - 'floozy', - 'foad', 'fondle', - 'foobar', 'foreskin', - 'freex', - 'frigg', - 'frigga', 'fubar', 'fuck', - 'f-u-c-k', - 'fuckass', - 'fucked', - 'fucked', - 'fucker', - 'fuckface', - 'fuckin', - 'fucking', - 'fucknugget', - 'fucknut', - 'fuckoff', - 'fucks', - 'fucktard', - 'fuck-tard', - 'fuckup', - 'fuckwad', - 'fuckwit', - 'fudgepacker', 'fuk', - 'fvck', - 'fxck', - 'gae', - 'gai', - 'ganja', 'gay', - 'gays', - 'gey', - 'gfy', - 'ghay', - 'ghey', - 'gigolo', - 'glans', 'goatse', 'godamn', - 'godamnit', - 'goddam', 'goddammit', 'goddamn', 'goldenshower', 'gonad', - 'gonads', - 'gook', - 'gooks', - 'gringo', 'gspot', - 'g-spot', 'gtfo', - 'guido', - 'h0m0', - 'h0mo', 'handjob', - 'hard on', - 'he11', - 'hebe', - 'heeb', + 'hardon', 'hell', - 'hemp', - 'heroin', - 'herp', 'herpes', - 'herpy', 'hitler', 'hiv', - 'hobag', - 'hom0', - 'homey', 'homo', - 'homoey', - 'honky', - 'hooch', - 'hookah', 'hooker', - 'hoor', - 'hootch', 'hooter', - 'hooters', 'horny', 'hump', - 'humped', - 'humping', - 'hussy', 'hymen', - 'inbred', 'incest', - 'injun', - 'j3rk0ff', - 'jackass', - 'jackhole', - 'jackoff', 'jap', - 'japs', - 'jerk', - 'jerk0ff', - 'jerked', 'jerkoff', 'jism', 'jiz', - 'jizm', - 'jizz', - 'jizzed', - 'junkie', - 'junky', - 'kike', - 'kikes', - 'kill', 'kinky', 'kkk', - 'klan', - 'knobend', - 'kooch', - 'kooches', - 'kootch', - 'kraut', - 'kyke', 'labia', 'lech', - 'leper', - 'lesbians', + 'lesbian', 'lesbo', - 'lesbos', - 'lez', 'lezbian', - 'lezbians', 'lezbo', - 'lezbos', - 'lezzie', - 'lezzies', - 'lezzy', - 'lmao', - 'lmfao', - 'loin', - 'loins', 'lube', - 'lusty', - 'mams', - 'massa', - 'masterbate', - 'masterbating', - 'masterbation', - 'masturbate', - 'masturbating', - 'masturbation', - 'maxi', - 'menses', - 'menstruate', - 'menstruation', - 'meth', - 'm-fucking', - 'mofo', - 'molest', - 'moolie', - 'moron', - 'motherfucka', - 'motherfucker', - 'motherfucking', - 'mtherfucker', - 'mthrfucker', - 'mthrfucking', + 'masterbat', + 'masturbat', + 'menstruat', 'muff', - 'muffdiver', - 'murder', - 'muthafuckaz', - 'muthafucker', - 'mutherfucker', - 'mutherfucking', - 'muthrfucking', 'nad', - 'nads', 'naked', - 'napalm', - 'nappy', 'nazi', - 'nazism', 'negro', 'nigga', - 'niggah', - 'niggas', - 'niggaz', 'nigger', - 'nigger', - 'niggers', - 'niggle', - 'niglet', - 'nimrod', - 'ninny', 'nipple', - 'nooky', 'nympho', - 'opiate', - 'opium', 'oral', - 'orally', - 'organ', 'orgasm', - 'orgasmic', 'orgies', 'orgy', - 'ovary', - 'ovum', - 'ovums', - 'p.u.s.s.y.', - 'paddy', - 'paki', 'pantie', - 'panties', 'panty', - 'pastie', - 'pasty', - 'pcp', - 'pecker', 'pedo', - 'pedophile', - 'pedophilia', - 'pedophiliac', 'pee', - 'peepee', - 'penetrate', - 'penetration', + 'penetrat', 'penial', 'penile', 'penis', - 'perversion', - 'peyote', 'phalli', - 'phallic', 'phuck', - 'pillowbiter', 'pimp', - 'pinko', 'piss', - 'pissed', - 'pissoff', - 'piss-off', 'pms', - 'polack', - 'pollock', 'poon', - 'poontang', 'porn', - 'porno', - 'pornography', - 'pot', - 'potty', 'prick', - 'prig', - 'prostitute', - 'prude', + 'prostitut', 'pube', 'pubic', 'pubis', - 'punkass', - 'punky', 'puss', 'pussies', 'pussy', - 'pussypounder', 'puto', 'queaf', 'queef', - 'queef', 'queer', - 'queero', - 'queers', - 'quicky', - 'quim', - 'racy', 'rape', - 'raped', - 'raper', 'rapist', - 'raunch', 'rectal', 'rectum', 'rectus', - 'reefer', - 'reetard', 'reich', 'retard', - 'retarded', - 'revue', 'rimjob', 'ritard', - 'rtard', - 'r-tard', - 'rum', 'rump', - 'rumprammer', - 'ruski', - 's.h.i.t.', - 's.o.b.', - 's0b', - 'sadism', - 'sadist', - 'scag', - 'scantily', - 'schizo', 'schlong', 'screw', - 'screwed', - 'scrog', - 'scrot', 'scrote', 'scrotum', - 'scrud', - 'scum', - 'seaman', - 'seamen', - 'seduce', 'semen', 'sex', - 'sexual', - 'sh1t', - 's-h-1-t', - 'shamedame', 'shit', - 's-h-i-t', - 'shite', - 'shiteater', - 'shitface', - 'shithead', - 'shithole', - 'shithouse', - 'shits', - 'shitt', - 'shitted', - 'shitter', - 'shitty', - 'shiz', - 'sissy', - 'skag', 'skank', - 'slave', - 'sleaze', - 'sleazy', 'slut', - 'slutdumper', - 'slutkiss', - 'sluts', - 'smegma', 'smut', - 'smutty', 'snatch', - 'sniper', - 'snuff', - 's-o-b', 'sodom', - 'souse', - 'soused', 'sperm', - 'spic', - 'spick', - 'spik', - 'spiks', - 'spooge', 'spunk', - 'steamy', 'stfu', 'stiffy', - 'stoned', 'strip', 'stroke', 'stupid', 'suck', - 'sucked', - 'sucking', - 'sumofabiatch', - 't1t', 'tampon', 'tard', - 'tawdry', - 'teabagging', + 'teabag', 'teat', - 'terd', 'teste', - 'testee', - 'testes', 'testicle', 'testis', 'thrust', - 'thug', - 'tinkle', 'tit', - 'titfuck', - 'titi', - 'tits', - 'tittiefucker', - 'titties', - 'titty', - 'tittyfuck', - 'tittyfucker', - 'toke', - 'toots', 'tramp', - 'transsexual', - 'trashy', - 'tubgirl', + 'transsex', 'turd', 'tush', 'twat', - 'twats', - 'ugly', 'undies', - 'unwed', 'urinal', 'urine', 'uterus', - 'uzi', 'vag', 'vagina', - 'valium', 'viagra', 'virgin', - 'vixen', - 'vodka', 'vomit', 'voyeur', - 'vulgar', 'vulva', - 'wad', 'wang', 'wank', - 'wanker', - 'wazoo', - 'wedgie', - 'weed', 'weenie', 'weewee', 'weiner', - 'weirdo', 'wench', 'wetback', - 'wh0re', - 'wh0reface', - 'whitey', - 'whiz', 'whoralicious', 'whore', - 'whorealicious', - 'whored', - 'whoreface', - 'whorehopper', - 'whorehouse', - 'whores', 'whoring', 'wigger', 'womb', 'woody', - 'wop', 'wtf', - 'xxx', - 'yobbo', - 'zoophile' + 'xxx' ]; var cLen = config.length; From 0bf3632da462ece9fdd17af15a20e124ba29ed2e Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 23 Feb 2017 20:21:08 +0200 Subject: [PATCH 09/43] Added profanity check to character creation --- src/server/components/auth.js | 5 +++++ src/server/misc/messages.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/components/auth.js b/src/server/components/auth.js index 21b92db4..d41848b5 100644 --- a/src/server/components/auth.js +++ b/src/server/components/auth.js @@ -302,6 +302,11 @@ define([ return; } + if (!profanities.isClean(data.name)) { + msg.callback(messages.login.invalid); + return; + } + io.get({ ent: data.name, field: 'character', diff --git a/src/server/misc/messages.js b/src/server/misc/messages.js index a35503a8..448da9c8 100644 --- a/src/server/misc/messages.js +++ b/src/server/misc/messages.js @@ -5,7 +5,7 @@ define([ ) { return { login: { - invalid: 'invalid username chosen', + invalid: 'invalid name chosen', exists: 'username exists, please try another', allFields: 'please complete all fields', illegal: 'illegal characters in username/password', From 757a462a47bcdbc8bb9744d20edc4a959050ad36 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 23 Feb 2017 21:39:26 +0200 Subject: [PATCH 10/43] Fixes #11 --- src/client/ui/templates/inventory/inventory.js | 14 ++++++++------ src/client/ui/templates/messages/styles.less | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/client/ui/templates/inventory/inventory.js b/src/client/ui/templates/inventory/inventory.js index 66ed9e8a..99f8b80f 100644 --- a/src/client/ui/templates/inventory/inventory.js +++ b/src/client/ui/templates/inventory/inventory.js @@ -282,14 +282,16 @@ define([ } } - if ((!item.quest) && (!item.eq)) { - if ((window.player.stash.active) && (!item.noSalvage)) - config.push(menuItems.stash); + if (!item.eq) { + if (!item.quest) { + if ((window.player.stash.active) && (!item.noSalvage)) + config.push(menuItems.stash); - config.push(menuItems.drop); + config.push(menuItems.drop); - if ((!item.material) && (!item.noSalvage)) - config.push(menuItems.salvage); + if ((!item.material) && (!item.noSalvage)) + config.push(menuItems.salvage); + } config.push(menuItems.destroy); } diff --git a/src/client/ui/templates/messages/styles.less b/src/client/ui/templates/messages/styles.less index e7af65a9..5a185235 100644 --- a/src/client/ui/templates/messages/styles.less +++ b/src/client/ui/templates/messages/styles.less @@ -14,6 +14,8 @@ pointer-events: none; &.typing { + pointer-events: all; + .el.message { display: block; } From 30614c36fcd88c797285b4618f39288fc683f0be Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 23 Feb 2017 21:49:14 +0200 Subject: [PATCH 11/43] Removed inventory changes that belongs to another issue --- src/client/ui/templates/inventory/inventory.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/client/ui/templates/inventory/inventory.js b/src/client/ui/templates/inventory/inventory.js index 99f8b80f..66ed9e8a 100644 --- a/src/client/ui/templates/inventory/inventory.js +++ b/src/client/ui/templates/inventory/inventory.js @@ -282,16 +282,14 @@ define([ } } - if (!item.eq) { - if (!item.quest) { - if ((window.player.stash.active) && (!item.noSalvage)) - config.push(menuItems.stash); + if ((!item.quest) && (!item.eq)) { + if ((window.player.stash.active) && (!item.noSalvage)) + config.push(menuItems.stash); - config.push(menuItems.drop); + config.push(menuItems.drop); - if ((!item.material) && (!item.noSalvage)) - config.push(menuItems.salvage); - } + if ((!item.material) && (!item.noSalvage)) + config.push(menuItems.salvage); config.push(menuItems.destroy); } From 53f27022731352cf63762e9ee314efcf06a71f69 Mon Sep 17 00:00:00 2001 From: bigbadwaffle Date: Fri, 24 Feb 2017 12:23:34 +0200 Subject: [PATCH 12/43] Fixes #10 --- src/server/config/spells/spellFireblast.js | 2 +- src/server/config/spellsConfig.js | 2 +- src/server/world/physics.js | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/config/spells/spellFireblast.js b/src/server/config/spells/spellFireblast.js index 3bc10018..c6a183b9 100644 --- a/src/server/config/spells/spellFireblast.js +++ b/src/server/config/spells/spellFireblast.js @@ -83,7 +83,7 @@ define([ dx = ~~(dx / Math.abs(dx)); dy = ~~(dy / Math.abs(dy)); for (var l = 0; l < this.pushback; l++) { - if (physics.isTileBlocking(targetPos.x + dx, targetPos.y + dy)) { + if (physics.isTileBlocking(targetPos.x + dx, targetPos.y + dy, true)) { if (physics.isTileBlocking(targetPos.x + dx, targetPos.y)) { if (physics.isTileBlocking(targetPos.x, targetPos.y + dy)) { break; diff --git a/src/server/config/spellsConfig.js b/src/server/config/spellsConfig.js index 69092cc5..ad095155 100644 --- a/src/server/config/spellsConfig.js +++ b/src/server/config/spellsConfig.js @@ -39,7 +39,7 @@ define([ random: { damage: [6.7, 13.3], i_radius: [1, 2.2], - i_pushback: [1, 4] + i_pushback: [5, 10] } }, 'smite': { diff --git a/src/server/world/physics.js b/src/server/world/physics.js index 3fdf5c79..0bbd9f91 100644 --- a/src/server/world/physics.js +++ b/src/server/world/physics.js @@ -266,11 +266,12 @@ define([ x = ~~x; y = ~~y; + //Colliders d var node = this.graph.grid[x][y]; if (node) return node.isWall(); else - return false; + return true; }, isCellOpen: function(x, y) { if ((x < 0) || (y < 0) || (x >= this.width) | (y >= this.height)) From 9469c7a090f60b1d0ce512632ca3a1984dd57a70 Mon Sep 17 00:00:00 2001 From: bigbadwaffle Date: Fri, 24 Feb 2017 13:16:24 +0200 Subject: [PATCH 13/43] Fixes #56 --- src/client/images/uiIcons.png | Bin 3187 -> 4595 bytes src/client/images/uiIcons.pyxel | Bin 14034 -> 14665 bytes .../ui/templates/equipment/equipment.js | 7 ++++--- src/client/ui/templates/equipment/styles.less | 19 ++++++++++++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/client/images/uiIcons.png b/src/client/images/uiIcons.png index bef1cb0555a448e2ec2b7a51b09eb2eeab76dee3..f36e8cee323fc071b2e8a4182894722a0acf12b2 100644 GIT binary patch literal 4595 zcmeHK{a=&i8oxIlWD^xQ6nKPSiJ$N!GP0C_V2mSRp9Hi>5oLoiFhszDiHyBSd=3;c zv`%3P%)rk{83=9)1Z+b^hiOhu4V#l~xKJ7|V@LMlp1quhmkoO{`vbav*>&H~{d}+M z`d%-)o{zUA#xGsGVle<<>Fb*|z6k&t5zzp%2>F>V`oRQ%N7w5ciOEHGCWg+PU3KMI z<}mzX|MS;Um$jW=<0Vra`3O;--GIGdQ zst}1QWiJ=oR1dP=y&&HEtgzK+F;DAUwg*HI%=hm9O^BCW{&Jttda&E~fRK-l1{i?C z0e4`Ra@_0^#01fx_8lq@OCa6ixt0{}))2xmTx_VUUJdaL4=#L*4u)vvbUCgs$O|L2&1o`Qt8k8X{4pfkx+7OO+a^a$D(M;MR9x9`9Td; zFRmo6r-G_w(Zu{5_a*EpXNM-c8pKz}84A(an+8P}4(y;1IV7-?AT($zJPS75bK{0L zu{#XTS<~9Hi50xGBPyfDM(+vRCQ}3{GpRzkqIJRp>bN?t!8^?Ug#!yZdTEG(sxQ=K zyPlI6G?C9|R{rlE!!}i(*BZAM^cgt0;%skor$xH*x-=NGA67x^$R%q8bdBc2Y3-<` z*s~dT?3$Qif+=B5o|F<=iSRO`7d;;{2sosfNX^C(VuCh4TKR9(5oe;W7G0B2q}55` zYSJ?`&YRjt@rg>C$-u~E1>v~h7_IaME0032lGl%yR4J0o@VL2^m1E;Q92xZqe7iM} zSI5>G#gxXn&Pb|_w8ypd=NC#)c0YkbiU#(x85<^7000P0POym+ym;3{QQyPRMQ`}V6Yj32Th+um=QW~57YjTEjvQIw z66ZKW6oLaDK!Ob=^{TMP)}~grwkGyAdZRMghDnizT-Di+?^cR#iwv>|X6hA-49r0x)F0Y^+pxK(w=AB85maY`3D>R{SnY60{FR<$L z_p^QZmK{e#vE41OzXA`t#G7F$TAjmQJ-6!a8^H-+?umhJ{sFEF&L)Uv_Lc8`{xV6>z;A& z^jJ|l&Y&6YrZJ^*PxH8&@S4~Dw?%4{JAM-tuRgvO@E+Q7P|L4q80}bLN49%2U4{3w z3jSjwL&$rN!98Kqwh=sSxw#2xh5<@geSLi{%V^3e(N7nxFBU2WMEFT@j;y1jMp5!j z8q1Ag)MqzSO5_%!W#WTA3x_2a@eEeFO)aH_(GT|cX?3j~p|X(*nRon55gHHfr|vpO zoG&>?{yS_2clF=j_RpyaAf4o4!>lx4DMYfsMn!cLeLsWis+0zrvq2v-Tvp~E*pq|4 z!6IuOo(Uh;B)BiQ3efgAIVv06Ib7e?RN0Wpj^?=*__lc7&n6z35DySCd%%%-&wttLi5y zsJ13yxq9VQc_lhtqsgxPKy1xlyO1ICaGOt~=S`kD*z@3@& z-?niFeH6{@LTMFiTZErBE=dww+k(oU)|y7NNIGT`Y};g{-zu`R0jQPUo#VsnCFPHj z{q=9rj@=v(addIfJQt#-+~++}fWS8JfH4LQ6*rz5H+D?g46XJ1YTj+fZpcl#OWL0A z!1+}cL<4Y}>$;^7oyS)`X9=n6TpiR65MHaJ2wc_HrChc4N7&q&*e|hMvqrf#7-`c{ zeiB?o=(;AkvA=9#sQ6v3!C&hy2A;^k%ckjv`1YNuE7z0G#_1KRB8`-syG#V@wFUn| zBb5ebatfKlqXFpE)G@i(p748+!elV`r8IWnU0H(8Ot` zd1e?Pgo9M?x|XQnELhP+kofrQfH3o&0ib6}7(g@dpvO`sF@>Ol-%BDks^LNmWE2Z7ASkcWbcP@lgG>7w)RdXy7pEr%?DZLS(CMcth6rU6@;V_qkp*$HuH0 z04#?E+NAX%EP=vwBqzR9e5o~;q3KPH#H8jyyDz!Scbi#2 zCYX;-8`=Fl(nt)Is%lNof%S1o`MJqX3z}z{08d!U&*+AqM}mgX1`zi^x)+;ny+YaB zEMVYCbneiKMw>N9@jxoB;c4<-WAH2|EG1u0_`lk6*@JS(6QF0@gg|gUA{c4E5+A1Z zaO(!2gu5${F9xXDc-VXD z6E@8u!>xW0mCcN2kP0tlr$JvJW0!ZC8fr7GyeJX2s&$;g7!F;Ya~qb!d0VG;!%z5% zvbXFxeavnQa}dkW$C7z#zx_Kuvc>!KKqc6IVoNa@WRX{O-qCcg*b|R0mQg+4(;0@k z7zT>!^oSSH_0L$Xd8f5e_mVtc}PmLzGDq&mgpfsMS;1)Wcb$ceKb0K(!!A& z17t$!M@o4f^onUXQ!;jK6fEcOIe6jG@c8Wr1ka3vX3J)_c7Hedlu_uDUH$JDfM!1^ zi#;W#1e{buLvU%Qsi9Zhpx`58e&A_o-jcx;s~Q>Pc$arHxD+edjD9lW!jlw)2F2(p z1GG-&+^EYyY;N)2Jk}r_xA=MSOqvdzL2iNxrlMp+mIkCmF0YCB%K0hg&VuKE0#4Vv z^ZmWHT6!eaip%#>8EuXD)x3m?EE(ZuOEF(ViwuKxZ_Rc51$zL>P62?J;MXg0#8xqZ V*RT8p|G$|>ug4~CJR6f<`hULF&ieoW literal 3187 zcmeHI`&ZIw8h;@y)Nz$VBQs_}Ivaat9jRSc%tEN6L#?-(t>Z1lJ-O=S1#DN>6%nFN zI=P6>c4}uGMKdRL#$~+XY6#;c+_54magY^LJEMU`t_mo(MFX_iANmJ+&*6NZ?|XQk z&-3}bpXd30b|QxC;pXE80Pr||Ec_DyptcYS;M;AF<-*5n0K5}=Jp9P1!indT!it?_ z6l+?DD*fP>2irQ~l^!32-=y#O*)c>tl{Mu3dDl4UXm8ceOJV!I?L?9050U)49@Qf6 z%Ieo{o%``GH?JHfP7;L4IG$S5-@6X8bzNT3{h0m_Zl6*@o>fXvSjjXkBj?m66TUH$auch5e=1e+B!{;`~jEtQ$ zn;Nl0*(Xy>S}Bnk;?oN8BJz6)4aqNObs6OW^ghhcb1t%2xBnZ%S}Rl9#g#ndL6mTFqQyY()U39n3S>cPpp`C9Oh&V%3MqGguZ({EBRA$I>6PyRfJESYZus(V#DA zsOcdjS%nY0VUy8@H}ee#X{dQMhjy)m5xh5$0U4l!2z0o<-=MSaG&2v6zt$ zO`#)FbqsC_;h;}m6{X-iE}zR2Iz-?~q%%!B#Hu5eW8TXlmttb}I80f@t!n-K{(_BJk-hJbjHHGXw!PNA;9?U>0DQlEh`8P;Uz?Z2KF zEKbCUTOkRAFnVmI>|y!+qQ1qL6@Bv_u38gqI2&zH82j9zZv?sjE0BmwRdCL?;Cr7j z5NEst62MK`Fhumd<3P~Y+j}X=~R}0k=YxQax<5A-F(r%UnF3K z;uSagRYZ!Tw>SE0qYt*Sfr<4|V!DW_LHhO8W#FOTtB4cmk;df8nM=FL1(tLzno!ry z1Vf@yp@5ilRiN{Gs-B}8q}@o1ynHzk^}d@^r_Bb2I`^RK+FgUQ8?gozy5w&k&9qd= zwqa5#yHg&IC4uxg>%Ux5cQUQ2eWu3K7gLvaF~4{z7&BY_wwCA=YinEC62n=0e>xDs zPghUxnr?A82wgfj{j`iPy`veNl*O+t>B36#m_^F|RszFn8=!MMqAy2QA#I3@{c5$$ z7`HnTEp626A3a|QLQ}Lh|Jp>}e~6 zIWs^2)Iruc7s13ggx{Y=MXZEfNJq_wBx3K%*cc^Gc(E>@&GlD`LR#hqCy?3Nx$#V; z`~M&J+G1js_`T5yJo}(vs?P_O#lwwh`KtMSMw^EtZGM5g&c|K=0PiX|m#>w)_lagC z_v+)Kvo{wC(`H}j7G-6~_}gtU`BhJq)zu9Mo0U=%4#B%E^pV`C$JMfKlwKot6-P5Vag5VigHAlX*SIILl##|3qEUZLoDJ$Cg-m<)B5f`$w z+RXCvQuB1;rbX=8{(i#63E>4Ed{}+L);!HIUSnDc{pg7Ia1Nnf;+m&jYRDgu-jO3q z@&}s3-f7ZfUQ@<)kI)V2?GGCYp#4@e7&XH=`?331D(rGg_R(DoHYF6ENZr}F;zz{=x9Fw&*P7ZmrE?1ZlTjCPM0{;0Nvg=nqn}k#dE1SY~j}0{u&`S zPQzi@KGKco+^f5}hE+Px+KT*>hVyy*>{PFnm&?DkI-kSl*uKr<@A|^*sqIx^Htj8L zTY#Rb5hvja>BJ~(pxbDmI4ib{&O<8}o3Vth13Mtj`Wygor_wfzx9hC}Zxyg9!16G8l5<3c%R_U_bwQ3t#DxFzXe#@EhAN;9 diff --git a/src/client/images/uiIcons.pyxel b/src/client/images/uiIcons.pyxel index 1466d6ee95e77e0a95a5941b67694f50ff7c1199..5809c3eefac894076a2c4870ba32452ced80e0cb 100644 GIT binary patch literal 14665 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 literal 14034 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 Date: Sat, 25 Feb 2017 10:04:43 +0200 Subject: [PATCH 14/43] Fixes #80 --- src/client/js/components/spellbook.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/client/js/components/spellbook.js b/src/client/js/components/spellbook.js index 080e9548..3c863d15 100644 --- a/src/client/js/components/spellbook.js +++ b/src/client/js/components/spellbook.js @@ -72,10 +72,14 @@ define([ if (blueprint.getSpells) { blueprint.getSpells.forEach(function(s) { - if (this.spells.find(function(spell) { + var existIndex = this.spells.firstIndex(function(spell) { return (spell.id == s.id); - })) + }); + + if (existIndex > -1) { + this.spells.splice(existIndex, 1, s); return; + } if (this.spells.length - 1 >= s.id) this.spells.splice(s.id, 0, s); From 321440413f3678950734dab8fc01603bdd520d9e Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Sat, 25 Feb 2017 10:11:12 +0200 Subject: [PATCH 15/43] Fixes #86 --- src/client/js/renderer.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/client/js/renderer.js b/src/client/js/renderer.js index 198b7ac3..3d71f0b3 100644 --- a/src/client/js/renderer.js +++ b/src/client/js/renderer.js @@ -181,8 +181,10 @@ define([ }, onResize: function() { - this.width = $('body').width(); - this.height = $('body').height(); + var zoom = window.devicePixelRatio; + + this.width = $('body').width() * zoom; + this.height = $('body').height() * zoom; this.renderer.resize(this.width, this.height); if (window.player) { From 4bc4abbadc4efed7fe94fcd27bb8843dc2fc222f Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Sat, 25 Feb 2017 10:24:47 +0200 Subject: [PATCH 16/43] Fixes #83 --- src/server/config/quests/templates/questKillX.js | 11 +++++++---- src/server/config/quests/templates/questLootGen.js | 10 ++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/server/config/quests/templates/questKillX.js b/src/server/config/quests/templates/questKillX.js index 9503822c..fffd8d7e 100644 --- a/src/server/config/quests/templates/questKillX.js +++ b/src/server/config/quests/templates/questKillX.js @@ -26,14 +26,17 @@ define([ if (!this.mobName) { var mobCounts = this.obj.instance.spawners.mobTypes; var keys = Object.keys(mobTypes).filter(function(m) { + var mobBlueprint = mobTypes[m]; + return ( (m != 'default') && ( - (mobTypes[m].attackable) || - (mobTypes[m].attackable == null) - ) + (mobBlueprint.attackable) || + (mobBlueprint.attackable == null) + ) && + (mobBlueprint.level <= ~~(this.obj.stats.values.level * 1.35)) ); - }); + }, this); this.mobType = keys[~~(Math.random() * keys.length)]; var needMax = 8; this.mobName = this.mobType.replace(/\w\S*/g, function(txt) { diff --git a/src/server/config/quests/templates/questLootGen.js b/src/server/config/quests/templates/questLootGen.js index 3badb2a8..f268d3ca 100644 --- a/src/server/config/quests/templates/questLootGen.js +++ b/src/server/config/quests/templates/questLootGen.js @@ -18,8 +18,14 @@ define([ var mobTypes = this.obj.instance.spawners.zone.mobs; var mobCounts = this.obj.instance.spawners.mobTypes; var keys = Object.keys(mobTypes).filter(function(m) { - return ((m != 'default') && (mobTypes[m].questItem)); - }); + var mobBlueprint = mobTypes[m]; + + return ( + (m != 'default') && + (mobBlueprint.questItem) && + (mobBlueprint.level <= (this.obj.stats.values.level * 1.35)) + ); + }, this); this.mobType = keys[~~(Math.random() * keys.length)]; var needMax = 8; this.mobName = this.mobType.replace(/\w\S*/g, function(txt) { From a8ebd1e60f9af4de9499bce4597e9bfac1d44342 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Sat, 25 Feb 2017 17:49:25 +0200 Subject: [PATCH 17/43] Fixes #81 --- src/client/ui/templates/help/template.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client/ui/templates/help/template.html b/src/client/ui/templates/help/template.html index 2a6f6d38..1eee3fa2 100644 --- a/src/client/ui/templates/help/template.html +++ b/src/client/ui/templates/help/template.html @@ -1,5 +1,6 @@
Movement:
WASD / Arrow Keys
+
Cancel Movement:
Esc
Combat:
Hover on an enemy and press 1 to enable auto-attack
Chat:
Press Enter to open the chat window
Inventory:
Press i to open your inventory
From cb2f61002acb7eb584fe56d01a95a50c731ab57a Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Sat, 25 Feb 2017 18:22:56 +0200 Subject: [PATCH 18/43] Fixes 76 --- src/server/items/enchanter.js | 5 ++++- src/server/items/generators/stats.js | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/server/items/enchanter.js b/src/server/items/enchanter.js index 1a84f957..60ca3b7d 100644 --- a/src/server/items/enchanter.js +++ b/src/server/items/enchanter.js @@ -45,7 +45,10 @@ define([ var value = item.enchantedStats[p]; if (item.stats[p]) { - result.addStatMsgs.push('-' + value + ' ' + p); + result.addStatMsgs.push({ + stat: p, + value: -value + }); item.stats[p] -= value; if (item.stats[p] <= 0) delete item.stats[p]; diff --git a/src/server/items/generators/stats.js b/src/server/items/generators/stats.js index be7f8d6c..23356613 100644 --- a/src/server/items/generators/stats.js +++ b/src/server/items/generators/stats.js @@ -245,8 +245,12 @@ define([ value = Math.ceil(random.norm(statBlueprint.min, statBlueprint.max)); if (blueprint.statCount) { - if (result) - result.addStatMsgs.push('+' + value + ' ' + stat); + if (result) { + result.addStatMsgs.push({ + stat: stat, + value: value + }); + } if (!item.enchantedStats) item.enchantedStats = {}; From 62183c3874761ce63c6002b94afa5628625a8057 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Sat, 25 Feb 2017 18:54:36 +0200 Subject: [PATCH 19/43] Fixes #8 --- src/server/world/physics.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/server/world/physics.js b/src/server/world/physics.js index 3fdf5c79..32d31376 100644 --- a/src/server/world/physics.js +++ b/src/server/world/physics.js @@ -203,7 +203,6 @@ define([ var cells = this.cells; var grid = this.graph.grid; - var result = []; for (var i = x1; i <= x2; i++) { var row = cells[i]; var gridRow = grid[i]; @@ -217,11 +216,20 @@ define([ x: i, y: j }; + } else { + //If the only contents are notices, we can still use it + var allNotices = !cell.some(c => !c.notice); + if (allNotices) { + return { + x: i, + y: j + }; + } } } } - return result; + return null; }, getPath: function(from, to) { From 595bd04d97c79ead074096d39f1fba17be91a7dd Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Sun, 26 Feb 2017 08:13:30 +0200 Subject: [PATCH 20/43] Git didn't include the client part of Fix #76. Added it now --- src/client/js/misc/statTranslations.js | 47 +++++++++++++++++++ src/client/ui/templates/smithing/smithing.js | 8 ++-- .../ui/templates/tooltipItem/tooltipItem.js | 46 ++---------------- 3 files changed, 57 insertions(+), 44 deletions(-) create mode 100644 src/client/js/misc/statTranslations.js diff --git a/src/client/js/misc/statTranslations.js b/src/client/js/misc/statTranslations.js new file mode 100644 index 00000000..00f6d92a --- /dev/null +++ b/src/client/js/misc/statTranslations.js @@ -0,0 +1,47 @@ +define([ + +], function( + +) { + var stats = { + 'vit': 'vitality', + 'hpMax': 'vitality', + 'regenHp': 'health regeneration', + 'manaMax': 'maximum mana', + 'regenMana': 'mana regeneration', + 'str': 'strength', + 'int': 'intellect', + 'dex': 'dexterity', + 'armor': 'armor', + 'addCritChance': 'increased crit chance', + 'magicFind': 'magic find', + 'sprintChance': 'sprint chance', + 'dmgPercent': 'to all damage', + 'allAttributes': 'to all attributes', + 'xpIncrease': 'additional xp per kill', + + 'elementArcanePercent': 'increased arcane damage', + 'elementFrostPercent': 'increased frost damage', + 'elementFirePercent': 'increased fire damage', + 'elementHolyPercent': 'increased holy damage', + 'elementPhysicalPercent': 'increased physical damage', + 'elementPoisonPercent': 'increased poison damage', + + 'elementArcaneResist': 'arcane resistance', + 'elementFrostResist': 'frost resistance', + 'elementFireResist': 'fire resistance', + 'elementHolyResist': 'holy resistance', + 'elementPhysicalResist': 'physical resistance', + 'elementPoisonResist': 'poison resistance', + 'elementAllResist': 'all resistance', + + //This stat is used for gambling when you can't see the stats + 'stats': 'stats' + }; + + return { + translate: function(stat) { + return stats[stat]; + } + }; +}); \ No newline at end of file diff --git a/src/client/ui/templates/smithing/smithing.js b/src/client/ui/templates/smithing/smithing.js index e2994310..91d17dec 100644 --- a/src/client/ui/templates/smithing/smithing.js +++ b/src/client/ui/templates/smithing/smithing.js @@ -3,13 +3,15 @@ define([ 'js/system/client', 'html!ui/templates/smithing/template', 'css!ui/templates/smithing/styles', - 'html!/ui/templates/smithing/templateItem' + 'html!/ui/templates/smithing/templateItem', + 'js/misc/statTranslations' ], function( events, client, template, styles, - templateItem + templateItem, + statTranslations ) { return { tpl: template, @@ -89,7 +91,7 @@ define([ } result.addStatMsgs.forEach(function(a) { - msg.msg += '
' + a; + msg.msg += '
' + ((a.value > 0) ? '+' : '-') + a.value + ' ' + statTranslations.translate(a.stat); }); events.emit('onGetAnnouncement', msg); diff --git a/src/client/ui/templates/tooltipItem/tooltipItem.js b/src/client/ui/templates/tooltipItem/tooltipItem.js index f7157c13..1f3f279d 100644 --- a/src/client/ui/templates/tooltipItem/tooltipItem.js +++ b/src/client/ui/templates/tooltipItem/tooltipItem.js @@ -2,12 +2,14 @@ define([ 'js/system/events', 'css!ui/templates/tooltipItem/styles', 'html!ui/templates/tooltipItem/template', - 'html!ui/templates/tooltipItem/templateTooltip' + 'html!ui/templates/tooltipItem/templateTooltip', + 'js/misc/statTranslations' ], function( events, styles, template, - tplTooltip + tplTooltip, + statTranslations ) { return { tpl: template, @@ -59,7 +61,7 @@ define([ stats = Object.keys(tempStats) .map(function(s) { - var statName = this.mapStat(s); + var statName = statTranslations.translate(s); var value = tempStats[s]; if (['addCritChance', 'sprintChance', 'dmgPercent', 'xpIncrease'].indexOf(s) > -1) @@ -216,44 +218,6 @@ define([ if (!canAfford) this.tooltip.find('.worth').addClass('no-afford'); - }, - - mapStat: function(stat) { - return { - 'vit': 'vitality', - 'hpMax': 'vitality', - 'regenHp': 'health regeneration', - 'manaMax': 'maximum mana', - 'regenMana': 'mana regeneration', - 'str': 'strength', - 'int': 'intellect', - 'dex': 'dexterity', - 'armor': 'armor', - 'addCritChance': 'increased crit chance', - 'magicFind': 'magic find', - 'sprintChance': 'sprint chance', - 'dmgPercent': 'to all damage', - 'allAttributes': 'to all attributes', - 'xpIncrease': 'additional xp per kill', - - 'elementArcanePercent': 'increased arcane damage', - 'elementFrostPercent': 'increased frost damage', - 'elementFirePercent': 'increased fire damage', - 'elementHolyPercent': 'increased holy damage', - 'elementPhysicalPercent': 'increased physical damage', - 'elementPoisonPercent': 'increased poison damage', - - 'elementArcaneResist': 'arcane resistance', - 'elementFrostResist': 'frost resistance', - 'elementFireResist': 'fire resistance', - 'elementHolyResist': 'holy resistance', - 'elementPhysicalResist': 'physical resistance', - 'elementPoisonResist': 'poison resistance', - 'elementAllResist': 'all resistance', - - //This stat is used for gambling when you can't see the stats - 'stats': 'stats' - }[stat]; } }; }); \ No newline at end of file From 4b0f5fd5f783d9bb30b5a2e7ecb5546bc952f74f Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Sun, 26 Feb 2017 22:40:41 -0800 Subject: [PATCH 21/43] Fix negative values in augment failure message --- src/client/ui/templates/smithing/smithing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/ui/templates/smithing/smithing.js b/src/client/ui/templates/smithing/smithing.js index 91d17dec..cd220f57 100644 --- a/src/client/ui/templates/smithing/smithing.js +++ b/src/client/ui/templates/smithing/smithing.js @@ -91,7 +91,7 @@ define([ } result.addStatMsgs.forEach(function(a) { - msg.msg += '
' + ((a.value > 0) ? '+' : '-') + a.value + ' ' + statTranslations.translate(a.stat); + msg.msg += '
' + ((a.value > 0) ? '+' : '') + a.value + ' ' + statTranslations.translate(a.stat); }); events.emit('onGetAnnouncement', msg); From 53232a103ff10bd25a10e000fd45afadb240b292 Mon Sep 17 00:00:00 2001 From: bigbadwaffle Date: Mon, 27 Feb 2017 14:04:05 +0200 Subject: [PATCH 22/43] Fixes #64 --- src/client/js/components/chatter.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/client/js/components/chatter.js b/src/client/js/components/chatter.js index aae9b989..108d4eed 100644 --- a/src/client/js/components/chatter.js +++ b/src/client/js/components/chatter.js @@ -56,6 +56,16 @@ define([ obj.chatSprite.visible = true; this.cd = this.cdMax; + }, + + destroy: function() { + var chatSprite = this.obj.chatSprite; + if (!chatSprite) + return; + + renderer.destroyObject({ + sprite: chatSprite + }); } }; }); \ No newline at end of file From c3606e4ad4886056001e43df64f26b2ed9e05a3b Mon Sep 17 00:00:00 2001 From: bigbadwaffle Date: Mon, 27 Feb 2017 14:46:48 +0200 Subject: [PATCH 23/43] Fixes #100 --- src/server/components/quests.js | 7 ++++++- src/server/config/quests/questBuilder.js | 3 ++- src/server/config/quests/templates/questGatherResource.js | 2 ++ src/server/config/quests/templates/questKillX.js | 7 +++++++ src/server/config/quests/templates/questLoot.js | 2 ++ src/server/config/quests/templates/questLootGen.js | 7 +++++++ src/server/config/quests/templates/questTemplate.js | 6 +++++- 7 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/server/components/quests.js b/src/server/components/quests.js index e6f397da..6641815d 100644 --- a/src/server/components/quests.js +++ b/src/server/components/quests.js @@ -30,7 +30,12 @@ define([ quest.active = (this.obj.zoneName == quest.zoneName); this.quests.push(quest); - quest.init(hideMessage); + if (!quest.init(hideMessage)) { + this.quests.spliceWhere(q => (q == quest)); + return false; + } + else + return true; }, complete: function(id) { diff --git a/src/server/config/quests/questBuilder.js b/src/server/config/quests/questBuilder.js index 8e3d80c0..7e0a7007 100644 --- a/src/server/config/quests/questBuilder.js +++ b/src/server/config/quests/questBuilder.js @@ -61,7 +61,8 @@ define([ quest.obj = obj; quest.zoneName = zoneName; - oQuests.obtain(quest, !!template); + if (!oQuests.obtain(quest, !!template)) + this.obtain(obj, template); } }; }); \ No newline at end of file diff --git a/src/server/config/quests/templates/questGatherResource.js b/src/server/config/quests/templates/questGatherResource.js index 44f963c6..d0ccd21b 100644 --- a/src/server/config/quests/templates/questGatherResource.js +++ b/src/server/config/quests/templates/questGatherResource.js @@ -15,6 +15,8 @@ define([ } this.description = 'Gather ' + this.have + '/' + this.need + ' herbs'; + + return true; }, events: { diff --git a/src/server/config/quests/templates/questKillX.js b/src/server/config/quests/templates/questKillX.js index fffd8d7e..619a39f2 100644 --- a/src/server/config/quests/templates/questKillX.js +++ b/src/server/config/quests/templates/questKillX.js @@ -37,6 +37,11 @@ define([ (mobBlueprint.level <= ~~(this.obj.stats.values.level * 1.35)) ); }, this); + + //No level appropriate mobs found + if (keys.length == 0) + return false; + this.mobType = keys[~~(Math.random() * keys.length)]; var needMax = 8; this.mobName = this.mobType.replace(/\w\S*/g, function(txt) { @@ -48,6 +53,8 @@ define([ } this.description = 'Kill ' + this.have + '/' + this.need + ' ' + this.mobName; + + return true; }, events: { diff --git a/src/server/config/quests/templates/questLoot.js b/src/server/config/quests/templates/questLoot.js index d8a01b92..6b405bf1 100644 --- a/src/server/config/quests/templates/questLoot.js +++ b/src/server/config/quests/templates/questLoot.js @@ -17,6 +17,8 @@ define([ } this.description = 'Loot 1x ' + this.slotName + ' slot item'; + + return true; }, events: { diff --git a/src/server/config/quests/templates/questLootGen.js b/src/server/config/quests/templates/questLootGen.js index f268d3ca..bd3893ff 100644 --- a/src/server/config/quests/templates/questLootGen.js +++ b/src/server/config/quests/templates/questLootGen.js @@ -26,6 +26,11 @@ define([ (mobBlueprint.level <= (this.obj.stats.values.level * 1.35)) ); }, this); + + //No level appropriate mobs found + if (keys.length == 0) + return false; + this.mobType = keys[~~(Math.random() * keys.length)]; var needMax = 8; this.mobName = this.mobType.replace(/\w\S*/g, function(txt) { @@ -39,6 +44,8 @@ define([ this.name = this.item.name + ' Gatherer'; this.description = 'Loot ' + this.have + '/' + this.need + ' ' + this.item.name + ' from ' + this.mobName; + + return true; }, oComplete: function() { diff --git a/src/server/config/quests/templates/questTemplate.js b/src/server/config/quests/templates/questTemplate.js index be294ed2..8018832f 100644 --- a/src/server/config/quests/templates/questTemplate.js +++ b/src/server/config/quests/templates/questTemplate.js @@ -5,7 +5,9 @@ define([ ) { return { init: function(hideMessage) { - this.build(); + if (!this.build()) + return false; + this.obj.syncer.setArray(true, 'quests', 'obtainQuests', this.simplify(true)); if (!hideMessage) { @@ -17,6 +19,8 @@ define([ }] }, [this.obj.serverId]); } + + return true; }, ready: function() { From ba6fdcaf19f3188c49754b0372fe520de4c2af10 Mon Sep 17 00:00:00 2001 From: bigbadwaffle Date: Mon, 27 Feb 2017 15:38:05 +0200 Subject: [PATCH 24/43] Fixes #96 --- src/server/components/stats.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/server/components/stats.js b/src/server/components/stats.js index 159c1438..bba9dd19 100644 --- a/src/server/components/stats.js +++ b/src/server/components/stats.js @@ -230,8 +230,17 @@ define([ get = ~~get; } - if (a.obj.stats) - a.obj.stats.getXp(inc); + if (a.obj.stats) { + //Scale xp by source level so you can't just farm low level mobs (or get boosted on high level mobs). + //Mobs that are farther then 10 levels from you, give no xp + //We don't currently do this for quests/herb gathering + var levelDelta = level - a.obj.stats.values.level; + var amount = 0; + if (Math.abs(levelDelta) <= 10) + amount = ~~((get + (levelDelta * 10)) * Math.pow(1 - (Math.abs(levelDelta) / 10), 2)); + + a.obj.stats.getXp(amount, this.obj); + } a.obj.fireEvent('afterKillMob', target); From 0330cf7ddf96dda155f783a0e5a1ca0de2c0a397 Mon Sep 17 00:00:00 2001 From: bigbadwaffle Date: Mon, 27 Feb 2017 16:12:05 +0200 Subject: [PATCH 25/43] Fixes #99 --- src/server/config/spells/spellHealingCircle.js | 1 + src/server/config/spells/spellWarnBlast.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/server/config/spells/spellHealingCircle.js b/src/server/config/spells/spellHealingCircle.js index ff2223ce..cb435fff 100644 --- a/src/server/config/spells/spellHealingCircle.js +++ b/src/server/config/spells/spellHealingCircle.js @@ -67,6 +67,7 @@ define([ duration: 70, targetGround: true, + needLos: true, cast: function(action) { var obj = this.obj; diff --git a/src/server/config/spells/spellWarnBlast.js b/src/server/config/spells/spellWarnBlast.js index fcadfc5c..e3827204 100644 --- a/src/server/config/spells/spellWarnBlast.js +++ b/src/server/config/spells/spellWarnBlast.js @@ -16,6 +16,8 @@ define([ statMult: 1, targetGround: true, + needLos: true, + damage: 10, delay: 10, From 0823ee5a752654d271672f6e519016991dfb6303 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Mon, 27 Feb 2017 18:52:58 +0200 Subject: [PATCH 26/43] Fixes #101 --- src/client/ui/templates/talk/talk.js | 5 ++ src/server/components/dialogue.js | 34 +++++++++++++- src/server/config/maps/tutorial/dialogues.js | 48 +++++++++++++++++++- 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/src/client/ui/templates/talk/talk.js b/src/client/ui/templates/talk/talk.js index 596c9994..21e606ee 100644 --- a/src/client/ui/templates/talk/talk.js +++ b/src/client/ui/templates/talk/talk.js @@ -18,6 +18,11 @@ define([ postRender: function() { this.onEvent('onGetTalk', this.onGetTalk.bind(this)); + this.onEvent('onRezone', this.onRezone.bind(this)); + }, + + onRezone: function() { + this.hide(); }, onGetTalk: function(dialogue) { diff --git a/src/server/components/dialogue.js b/src/server/components/dialogue.js index 403760eb..991e3a94 100644 --- a/src/server/components/dialogue.js +++ b/src/server/components/dialogue.js @@ -95,8 +95,18 @@ define([ if (stateConfig.cpn) { var cpn = sourceObj[stateConfig.cpn]; - cpn[stateConfig.method].apply(cpn, stateConfig.args); - return; + var newArgs = extend(true, [], stateConfig.args); + newArgs.push(this.obj); + var result = cpn[stateConfig.method].apply(cpn, newArgs); + + if (stateConfig.goto) { + if (result) + return this.getState(sourceObj, stateConfig.goto.success); + else + return this.getState(sourceObj, stateConfig.goto.failure); + } + else + return null; } var result = { @@ -158,6 +168,26 @@ define([ return { type: 'dialogue' }; + }, + + //These don't belong here, but I can't figure out where to put them right now + //They are actions that can be performed while chatting with someone + teleport: function(msg) { + this.obj.syncer.set(true, 'dialogue', 'state', null); + + var portal = extend(true, {}, require('./components/portal'), msg); + portal.collisionEnter(this.obj); + }, + + getItem: function(msg, source) { + var inventory = this.obj.inventory; + var exists = inventory.items.find(i => (i.name == msg.item.name)); + if (!exists) { + inventory.getItem(msg.item); + return true; + } + else + return false; } }; }); \ No newline at end of file diff --git a/src/server/config/maps/tutorial/dialogues.js b/src/server/config/maps/tutorial/dialogues.js index 540fc427..1dccd7dd 100644 --- a/src/server/config/maps/tutorial/dialogues.js +++ b/src/server/config/maps/tutorial/dialogues.js @@ -3,7 +3,7 @@ module.exports = { '1': { msg: [{ msg: `What? Oh...what are you doing here?`, - options: [1.1, 1.2, 1.3, 1.4, 1.5] + options: [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7] }], options: { '1.1': { @@ -25,6 +25,14 @@ module.exports = { '1.5': { msg: `I changed my mind, I want to buy something back.`, goto: 'tradeBuyback' + }, + '1.6': { + msg: `Send me to the big city.`, + goto: 'portalCity' + }, + '1.7': { + msg: `Gimme`, + goto: 'getItem' } } }, @@ -85,6 +93,18 @@ module.exports = { } } }, + '4': { + msg: `There you go!`, + options: { + + } + }, + '5': { + msg: `You already have that!`, + options: { + + } + }, tradeBuy: { cpn: 'trade', method: 'startBuy', @@ -105,6 +125,32 @@ module.exports = { args: [{ targetName: 'hermit' }] + }, + portalCity: { + cpn: 'dialogue', + method: 'teleport', + args: [{ + toZone: 'city', + toPos: { + x: 136, + y: 216 + } + }] + }, + getItem: { + cpn: 'dialogue', + method: 'getItem', + args: [{ + item: { + name: 'fancy feather', + quest: true, + sprite: [0, 0] + } + }], + goto: { + success: 4, + failure: 5 + } } } }; \ No newline at end of file From ba3ce0a4279abaf215ec7b2aac2153c981502401 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Mon, 27 Feb 2017 18:58:11 +0200 Subject: [PATCH 27/43] Removed test code --- src/server/config/maps/tutorial/dialogues.js | 48 +------------------- 1 file changed, 1 insertion(+), 47 deletions(-) diff --git a/src/server/config/maps/tutorial/dialogues.js b/src/server/config/maps/tutorial/dialogues.js index 1dccd7dd..540fc427 100644 --- a/src/server/config/maps/tutorial/dialogues.js +++ b/src/server/config/maps/tutorial/dialogues.js @@ -3,7 +3,7 @@ module.exports = { '1': { msg: [{ msg: `What? Oh...what are you doing here?`, - options: [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7] + options: [1.1, 1.2, 1.3, 1.4, 1.5] }], options: { '1.1': { @@ -25,14 +25,6 @@ module.exports = { '1.5': { msg: `I changed my mind, I want to buy something back.`, goto: 'tradeBuyback' - }, - '1.6': { - msg: `Send me to the big city.`, - goto: 'portalCity' - }, - '1.7': { - msg: `Gimme`, - goto: 'getItem' } } }, @@ -93,18 +85,6 @@ module.exports = { } } }, - '4': { - msg: `There you go!`, - options: { - - } - }, - '5': { - msg: `You already have that!`, - options: { - - } - }, tradeBuy: { cpn: 'trade', method: 'startBuy', @@ -125,32 +105,6 @@ module.exports = { args: [{ targetName: 'hermit' }] - }, - portalCity: { - cpn: 'dialogue', - method: 'teleport', - args: [{ - toZone: 'city', - toPos: { - x: 136, - y: 216 - } - }] - }, - getItem: { - cpn: 'dialogue', - method: 'getItem', - args: [{ - item: { - name: 'fancy feather', - quest: true, - sprite: [0, 0] - } - }], - goto: { - success: 4, - failure: 5 - } } } }; \ No newline at end of file From ef421be80a796141b53ef5c2f081f1e91b3022f3 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Mon, 27 Feb 2017 20:12:33 +0200 Subject: [PATCH 28/43] Fixes #88 --- src/client/ui/templates/trade/template.html | 7 +++++++ src/client/ui/templates/trade/trade.js | 12 ++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/client/ui/templates/trade/template.html b/src/client/ui/templates/trade/template.html index 97d46e58..07bfd98b 100644 --- a/src/client/ui/templates/trade/template.html +++ b/src/client/ui/templates/trade/template.html @@ -1,3 +1,10 @@
+
+
trade
+
+
+
+
+
\ No newline at end of file diff --git a/src/client/ui/templates/trade/trade.js b/src/client/ui/templates/trade/trade.js index 3aebcea8..33e0b0ff 100644 --- a/src/client/ui/templates/trade/trade.js +++ b/src/client/ui/templates/trade/trade.js @@ -23,6 +23,8 @@ define([ }, onGetTradeList: function(itemList, action) { + this.find('.heading-text').html(action); + var uiInventory = $('.uiInventory').data('ui'); var container = this.el.find('.grid') @@ -54,8 +56,14 @@ define([ return 0; }); - var iLen = buyItems.length; + var iLen = Math.max(buyItems.length, 50); for (var i = 0; i < iLen; i++) { + if (!buyItems[i]) { + $(tplItem).appendTo(container); + + continue; + } + var item = $.extend(true, {}, buyItems[i]); item.worth = ~~(itemList.markup * item.worth); @@ -74,7 +82,7 @@ define([ } var imgX = (-item.sprite[0] * size) + offset; - var imgY = (-item.sprite[1] * size) + offset + 4; + var imgY = (-item.sprite[1] * size) + offset; var itemEl = $(tplItem) .appendTo(container); From b8193b39dc31e24c40fa4b4e911b465f3f199769 Mon Sep 17 00:00:00 2001 From: Shatterbrain Date: Fri, 24 Feb 2017 10:56:53 -0500 Subject: [PATCH 29/43] Removed unused variable --- src/client/js/components/keyboardMover.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/client/js/components/keyboardMover.js b/src/client/js/components/keyboardMover.js index 8ccdeca8..c9a2e96d 100644 --- a/src/client/js/components/keyboardMover.js +++ b/src/client/js/components/keyboardMover.js @@ -10,7 +10,6 @@ define([ return { type: 'keyboardMover', - path: [], moveCd: 0, moveCdMax: 8, direction: { From c25e348c4a04173d5e805f6d4f84fc3d71dd2661 Mon Sep 17 00:00:00 2001 From: Shatterbrain Date: Fri, 24 Feb 2017 10:57:23 -0500 Subject: [PATCH 30/43] Externalize pather color to variable --- src/client/js/components/pather.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/client/js/components/pather.js b/src/client/js/components/pather.js index fcbe060e..522e6752 100644 --- a/src/client/js/components/pather.js +++ b/src/client/js/components/pather.js @@ -13,7 +13,8 @@ define([ path: [], - pathColor: 'rgba(255, 255, 255, 0.5)', + pathColor: '0x48edff', + pathAlpha: 0.2, pathPos: { x: 0, @@ -50,7 +51,8 @@ define([ y: y, sprite: renderer.buildRectangle({ layerName: 'effects', - alpha: 0.2, + color: this.pathColor, + alpha: this.pathAlpha, x: (x * scale) + scaleMult, y: (y * scale) + scaleMult, w: scale - (scaleMult * 2), From ad464dd3527f3918af5828fba4de64089df1471b Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 27 Feb 2017 22:18:35 -0800 Subject: [PATCH 31/43] Allow explicit destroyInvite() call with no event --- src/client/ui/templates/party/party.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/client/ui/templates/party/party.js b/src/client/ui/templates/party/party.js index 49c24768..69afe7f3 100644 --- a/src/client/ui/templates/party/party.js +++ b/src/client/ui/templates/party/party.js @@ -179,10 +179,12 @@ define([ }, destroyInvite: function(e) { - if ($(e.target).hasClass('btnAccept')) - this.acceptInvite(); - else - this.declineInvite(); + if (e) { + if ($(e.target).hasClass('btnAccept')) + this.acceptInvite(); + else + this.declineInvite(); + } this.invite.el.remove(); this.invite = null; From 553e28fb5be603f58be3957f8e56b6c3c465c75a Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 27 Feb 2017 18:54:29 -0800 Subject: [PATCH 32/43] Prevent duplicate party members - Addresses the issue in the client and server. - Keep track of which players (by name) are added to the party UI in `onGetParty()' to prevent duplicate frames for a player. - On the server side, don't add a player ID to the party if already present. --- src/client/ui/templates/party/party.js | 14 ++++++++++++++ src/server/components/social.js | 9 ++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/client/ui/templates/party/party.js b/src/client/ui/templates/party/party.js index 69afe7f3..ca42076f 100644 --- a/src/client/ui/templates/party/party.js +++ b/src/client/ui/templates/party/party.js @@ -100,6 +100,12 @@ define([ }, onGetParty: function(party) { + // Destroy invite frame if you join a party + if (this.invite) { + this.invite.el.remove(); + this.invite = null; + } + var container = this.find('.party .list') .empty(); @@ -107,6 +113,8 @@ define([ if (!party) return; + var members = {}; + party.forEach(function(p) { if (p == window.player.serverId) return; @@ -117,6 +125,10 @@ define([ var name = player ? player.name : 'unknown'; var level = 'level: ' + (player ? player.level : '?'); + // Disallow duplicate frames for players in the party + if (members[name]) + return; + var html = templatePartyMember .replace('$NAME$', name) .replace('$LEVEL$', level); @@ -135,6 +147,8 @@ define([ }); if ((memberObj) && (memberObj.stats)) this.onGetPartyStats(p, memberObj.stats.values); + + members[name] = 1; }, this); }, diff --git a/src/server/components/social.js b/src/server/components/social.js index d7b5c2fc..3077b6d0 100644 --- a/src/server/components/social.js +++ b/src/server/components/social.js @@ -181,7 +181,14 @@ define([ this.updatePartyOnThread(); } - this.party.push(sourceId); + // Only add if not yet in party + if (!this.party.find(function (id) { + return id === sourceId; + }) + ) { + this.party.push(sourceId); + } + this.updatePartyOnThread(); this.party.forEach(function(p) { From 1bdab1a4495d365bf4a7215eed98734eecf340e4 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 27 Feb 2017 22:59:12 -0800 Subject: [PATCH 33/43] Use destroyInvite() --- src/client/ui/templates/party/party.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/client/ui/templates/party/party.js b/src/client/ui/templates/party/party.js index ca42076f..ed54515f 100644 --- a/src/client/ui/templates/party/party.js +++ b/src/client/ui/templates/party/party.js @@ -101,10 +101,8 @@ define([ onGetParty: function(party) { // Destroy invite frame if you join a party - if (this.invite) { - this.invite.el.remove(); - this.invite = null; - } + if (this.invite) + this.destroyInvite(); var container = this.find('.party .list') .empty(); From e07ac73608715676cdd38f6a59dce1bb1be2402d Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 28 Feb 2017 09:03:14 -0800 Subject: [PATCH 34/43] Clean up arrow notation --- src/server/components/social.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/server/components/social.js b/src/server/components/social.js index 3077b6d0..33213f07 100644 --- a/src/server/components/social.js +++ b/src/server/components/social.js @@ -182,12 +182,8 @@ define([ } // Only add if not yet in party - if (!this.party.find(function (id) { - return id === sourceId; - }) - ) { + if (!this.party.find(f => (id === sourceId))) this.party.push(sourceId); - } this.updatePartyOnThread(); From 64c637c9a2dc7055663947aa8d6ea8e55385bddd Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 28 Feb 2017 09:55:52 -0800 Subject: [PATCH 35/43] Fix incorrect arrow notation --- src/server/components/social.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/components/social.js b/src/server/components/social.js index 33213f07..70cfa89e 100644 --- a/src/server/components/social.js +++ b/src/server/components/social.js @@ -182,7 +182,7 @@ define([ } // Only add if not yet in party - if (!this.party.find(f => (id === sourceId))) + if (!this.party.find(id => (id === sourceId))) this.party.push(sourceId); this.updatePartyOnThread(); From cb222e5db106ed1c12f7afac8237bbc16930e89d Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 28 Feb 2017 09:56:45 -0800 Subject: [PATCH 36/43] Remove duplicate check in party UI template - The server should not send a party that contains duplicate member IDs. --- src/client/ui/templates/party/party.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/client/ui/templates/party/party.js b/src/client/ui/templates/party/party.js index ed54515f..475c7429 100644 --- a/src/client/ui/templates/party/party.js +++ b/src/client/ui/templates/party/party.js @@ -111,8 +111,6 @@ define([ if (!party) return; - var members = {}; - party.forEach(function(p) { if (p == window.player.serverId) return; @@ -123,10 +121,6 @@ define([ var name = player ? player.name : 'unknown'; var level = 'level: ' + (player ? player.level : '?'); - // Disallow duplicate frames for players in the party - if (members[name]) - return; - var html = templatePartyMember .replace('$NAME$', name) .replace('$LEVEL$', level); @@ -145,8 +139,6 @@ define([ }); if ((memberObj) && (memberObj.stats)) this.onGetPartyStats(p, memberObj.stats.values); - - members[name] = 1; }, this); }, From 63b2f23ec1a8ee2a2ccd71f18fd518d4628bf7d9 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Tue, 28 Feb 2017 21:20:36 +0200 Subject: [PATCH 37/43] Removed testing code that was left in --- src/server/config/spells/spellFireblast.js | 2 +- src/server/config/spellsConfig.js | 2 +- src/server/world/physics.js | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/config/spells/spellFireblast.js b/src/server/config/spells/spellFireblast.js index c6a183b9..3bc10018 100644 --- a/src/server/config/spells/spellFireblast.js +++ b/src/server/config/spells/spellFireblast.js @@ -83,7 +83,7 @@ define([ dx = ~~(dx / Math.abs(dx)); dy = ~~(dy / Math.abs(dy)); for (var l = 0; l < this.pushback; l++) { - if (physics.isTileBlocking(targetPos.x + dx, targetPos.y + dy, true)) { + if (physics.isTileBlocking(targetPos.x + dx, targetPos.y + dy)) { if (physics.isTileBlocking(targetPos.x + dx, targetPos.y)) { if (physics.isTileBlocking(targetPos.x, targetPos.y + dy)) { break; diff --git a/src/server/config/spellsConfig.js b/src/server/config/spellsConfig.js index ad095155..69092cc5 100644 --- a/src/server/config/spellsConfig.js +++ b/src/server/config/spellsConfig.js @@ -39,7 +39,7 @@ define([ random: { damage: [6.7, 13.3], i_radius: [1, 2.2], - i_pushback: [5, 10] + i_pushback: [1, 4] } }, 'smite': { diff --git a/src/server/world/physics.js b/src/server/world/physics.js index 0bbd9f91..11dab380 100644 --- a/src/server/world/physics.js +++ b/src/server/world/physics.js @@ -266,7 +266,6 @@ define([ x = ~~x; y = ~~y; - //Colliders d var node = this.graph.grid[x][y]; if (node) return node.isWall(); From fc184d77e4da5369c6ec1355c8ce8fd1e737265a Mon Sep 17 00:00:00 2001 From: Vladde Nordholm Date: Tue, 28 Feb 2017 20:56:44 +0100 Subject: [PATCH 38/43] fix stashing quantity = 1 --- src/server/components/inventory.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/components/inventory.js b/src/server/components/inventory.js index ee61c5b5..04cd1ff2 100644 --- a/src/server/components/inventory.js +++ b/src/server/components/inventory.js @@ -153,9 +153,10 @@ define([ var stash = this.obj.stash; if (!stash.active) return; - + + var clonedItem = extend(true, {}, item); this.destroyItem(id); - stash.deposit(item); + stash.deposit(clonedItem); }, salvageItem: function(id) { From 5ee2b3564746c41aa8ddf97b69b7a82db1195b15 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Wed, 1 Mar 2017 19:01:40 +0200 Subject: [PATCH 39/43] Fixes #73 --- src/client/ui/templates/spells/styles.less | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client/ui/templates/spells/styles.less b/src/client/ui/templates/spells/styles.less index a576258e..9e30986d 100644 --- a/src/client/ui/templates/spells/styles.less +++ b/src/client/ui/templates/spells/styles.less @@ -48,6 +48,7 @@ bottom: -6px; color: @white; font-size: 18px; + z-index: 2; text-shadow: 2px 2px 0 #2d2136, -2px -2px 0 #2d2136, 2px -2px 0 #2d2136, From e140d44d027b65bb41894b3e90d8f1f540541207 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Wed, 1 Mar 2017 19:30:17 +0200 Subject: [PATCH 40/43] Fixes #90 --- src/client/ui/templates/target/target.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/client/ui/templates/target/target.js b/src/client/ui/templates/target/target.js index 76dee48a..ad501ccd 100644 --- a/src/client/ui/templates/target/target.js +++ b/src/client/ui/templates/target/target.js @@ -13,6 +13,7 @@ define([ target: null, lastHp: null, lastMana: null, + lastLevel: null, postRender: function() { this.onEvent('onSetTarget', this.onSetTarget.bind(this)); @@ -50,6 +51,7 @@ define([ if (!this.target) { this.lastHp = null; this.lastMana = null; + this.lastLevel = null; this.el.hide(); } else { var el = this.el; @@ -91,6 +93,16 @@ define([ var stats = target.stats.values; + if (stats.level != this.lastLevel) { + this.el.find('.infoLevel') + .html('(' + stats.level + ')') + .removeClass('high-level'); + + var crushing = (stats.level - 5 >= window.player.stats.level); + if (crushing) + this.el.find('.infoLevel').addClass('high-level'); + } + if (stats.hp != this.lastHp) { this.buildBar(0, stats.hp, stats.hpMax); this.lastHp = stats.hp; From 6e0ff5f4a5ebd8425ea64bac8254c78bd3997035 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Wed, 1 Mar 2017 19:40:28 +0200 Subject: [PATCH 41/43] Fixes #69 --- src/server/components/reputation.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/components/reputation.js b/src/server/components/reputation.js index 3b24c072..13355690 100644 --- a/src/server/components/reputation.js +++ b/src/server/components/reputation.js @@ -81,6 +81,8 @@ define([ if (t.rep > rep) break; + else if (i == tLen - 1) + tier = i; } if (tier < 0) From cdb72ce1589cf7e131ebe71f7e23923e70c4459b Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Wed, 1 Mar 2017 20:45:01 +0200 Subject: [PATCH 42/43] Fixes #25 --- src/client/js/input.js | 1 + .../ui/templates/inventory/inventory.js | 21 +++++++- src/client/ui/templates/messages/messages.js | 52 ++++++++++++++++--- src/server/components/social.js | 1 + 4 files changed, 68 insertions(+), 7 deletions(-) diff --git a/src/client/js/input.js b/src/client/js/input.js index b7d7e34f..e5b00f95 100644 --- a/src/client/js/input.js +++ b/src/client/js/input.js @@ -22,6 +22,7 @@ define([ '9': 'tab', '13': 'enter', '16': 'shift', + '17': 'ctrl', '27': 'esc', '37': 'left', '38': 'up', diff --git a/src/client/ui/templates/inventory/inventory.js b/src/client/ui/templates/inventory/inventory.js index 99f8b80f..f83bec0f 100644 --- a/src/client/ui/templates/inventory/inventory.js +++ b/src/client/ui/templates/inventory/inventory.js @@ -47,6 +47,7 @@ define([ items: [], shiftDown: false, + ctrlDown: false, dragItem: null, dragEl: null, @@ -127,7 +128,7 @@ define([ itemEl .data('item', item) - //.on('click', this.onClick.bind(this, itemEl, item)) + .on('click', this.onClick.bind(this, item)) .on('mousedown', this.onMouseDown.bind(this, itemEl, item, true)) .on('mouseup', this.onMouseDown.bind(this, null, null, false)) .on('mousemove', this.onHover.bind(this, itemEl, item)) @@ -150,6 +151,20 @@ define([ } }, + onClick: function(item) { + if (!this.ctrlDown) + return; + + client.request({ + cpn: 'social', + method: 'chat', + data: { + message: '{' + item.name + '}', + item: item + } + }); + }, + onMouseDown: function(el, item, down, e) { if (e.button != 0) return; @@ -467,6 +482,8 @@ define([ if (this.hoverItem) this.onHover(); } + else if (key == 'ctrl') + this.ctrlDown = true; }, onKeyUp: function(key) { if (key == 'shift') { @@ -474,6 +491,8 @@ define([ if (this.hoverItem) this.onHover(); } + else if (key == 'ctrl') + this.ctrlDown = false; } }; }); \ No newline at end of file diff --git a/src/client/ui/templates/messages/messages.js b/src/client/ui/templates/messages/messages.js index d6360594..caea15de 100644 --- a/src/client/ui/templates/messages/messages.js +++ b/src/client/ui/templates/messages/messages.js @@ -17,12 +17,12 @@ define([ messages: [], maxTtl: 500, + shiftDown: false, + hoverItem: null, + hoverFilter: false, postRender: function() { - //HACK: Write a global manager - //setInterval(this.fade.bind(this), 100); - this.onEvent('onGetMessages', this.onGetMessages.bind(this)); this.onEvent('onDoWhisper', this.onDoWhisper.bind(this)); @@ -53,9 +53,8 @@ define([ }, onKeyDown: function(key, state) { - if (key == 'enter') { + if (key == 'enter') this.toggle(true); - } }, onDoWhisper: function(charName) { @@ -75,7 +74,13 @@ define([ var container = this.find('.list'); messages.forEach(function(m) { - var el = $('
' + m.message + '
') + var message = m.message; + if (m.item) { + var source = message.split(':')[0] + ': '; + message = source + '' + message.replace(source, '') + ''; + } + + var el = $('
' + message + '
') .appendTo(container); if (m.type != null) @@ -83,6 +88,12 @@ define([ else el.addClass('info'); + if (m.item) { + el.find('span') + .on('mousemove', this.showItemTooltip.bind(this, el, m.item)) + .on('mouseleave', this.hideItemTooltip.bind(this)); + } + this.messages.push({ ttl: this.maxTtl, el: el @@ -92,6 +103,35 @@ define([ container.scrollTop(9999999); }, + hideItemTooltip: function() { + if (this.dragEl) { + this.hoverCell = null; + return; + } + + events.emit('onHideItemTooltip', this.hoverItem); + this.hoverItem = null; + }, + showItemTooltip: function(el, item, e) { + if (item) + this.hoverItem = item; + else + item = this.hoverItem; + + if (!item) + return; + + var ttPos = null; + if (el) { + ttPos = { + x: ~~(e.clientX + 32), + y: ~~(e.clientY) + }; + } + + events.emit('onShowItemTooltip', item, ttPos, null, true); + }, + update: function() { return; var maxTtl = this.maxTtl; diff --git a/src/server/components/social.js b/src/server/components/social.js index 70cfa89e..0b84ed3a 100644 --- a/src/server/components/social.js +++ b/src/server/components/social.js @@ -130,6 +130,7 @@ define([ messages: [{ class: msgStyle, message: prefix + charname + ': ' + msg.data.message, + item: msg.data.item, type: 'chat' }] } From ab1b8d4fded6968c9791a58c54bae5c725b0fa42 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Sat, 11 Mar 2017 12:50:36 +0200 Subject: [PATCH 43/43] Fixed an issue with mob xp scaling --- src/server/components/stats.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/server/components/stats.js b/src/server/components/stats.js index bba9dd19..1d18a3e4 100644 --- a/src/server/components/stats.js +++ b/src/server/components/stats.js @@ -205,7 +205,6 @@ define([ kill: function(target) { var level = target.stats.values.level; - var inc = level * 10; //Who should get xp? var aggroList = target.aggro.list; @@ -217,27 +216,27 @@ define([ if (dmg <= 0) continue; - var get = inc; + var mult = 1; //How many party members contributed // Remember, maybe one of the aggro-ees might be a mob too var party = a.obj.social ? a.obj.social.party : null; if (party) { - var mult = aggroList.filter(function(f) { + var partySize = aggroList.filter(function(f) { return ((a.damage > 0) && (party.indexOf(f.obj.serverId) > -1)); }).length; - mult--; - get *= (1 + (mult * 0.1)); - get = ~~get; + partySize--; + mult = (1 + (partySize * 0.1)); } if (a.obj.stats) { //Scale xp by source level so you can't just farm low level mobs (or get boosted on high level mobs). //Mobs that are farther then 10 levels from you, give no xp //We don't currently do this for quests/herb gathering - var levelDelta = level - a.obj.stats.values.level; - var amount = 0; + var sourceLevel = a.obj.stats.values.level; + var levelDelta = level - sourceLevel; + var amount = level * 10 * mult; if (Math.abs(levelDelta) <= 10) - amount = ~~((get + (levelDelta * 10)) * Math.pow(1 - (Math.abs(levelDelta) / 10), 2)); + amount = ~~(((sourceLevel + levelDelta) * 10) * Math.pow(1 - (Math.abs(levelDelta) / 10), 2) * mult); a.obj.stats.getXp(amount, this.obj); }