') + ')', 'gi');
if (regex.test(text)) {
found = true;
var frag = document.createDocumentFragment();
var parts = text.split(regex);
parts.forEach(function(part, i) {
if (i % 2 === 0) {
frag.appendChild(document.createTextNode(part));
} else {
var span = document.createElement('span');
span.className = 'userscript-highlight';
span.textContent = part;
frag.appendChild(span);
}
});
node.parentNode.replaceChild(frag, node);
}
});
} else if (node.nodeType === 1 && node.childNodes) { // element
var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];
if (!skipTags.includes(node.tagName)) {
Array.from(node.childNodes).forEach(highlight);
}
}
}
highlight(document.body);
// Re-highlight on dynamic content
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 || node.nodeType === 3) highlight(node);
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Strip utm_, fbclid, gclid, etc. from all links on page
(function() {
var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',
'ref', 'ref_src', 'source', 'medium', 'campaign'];
function cleanUrl(url) {
try {
var u = new URL(url, window.location.origin);
var changed = false;
trackingParams.forEach(function(p) {
if (u.searchParams.has(p)) {
u.searchParams.delete(p);
changed = true;
}
});
return changed ? u.toString() : url;
} catch (e) {
return url;
}
}
function cleanLinks() {
document.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
cleanLinks();
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1) {
if (node.tagName === 'A') cleanLinks();
node.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); }
})();
(function(){
try {
var __m = "youtube.com";
var __re = new RegExp('^' + "youtube\\.com" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Auto-enable theater mode on YouTube
(function() {
function tryTheater() {
var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]');
if (btn && !btn.classList.contains('activated')) {
btn.click();
}
}
// Try immediately
tryTheater();
// Try after navigation (SPA)
var lastUrl = location.href;
setInterval(function() {
if (location.href !== lastUrl) {
lastUrl = location.href;
setTimeout(tryTheater, 500);
}
}, 1000);
// Also try on player load
var observer = new MutationObserver(tryTheater);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Remove or un-stick sticky/fixed headers that block content
(function() {
function unstick() {
document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) {
if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {
el.style.position = 'static';
el.style.top = 'auto';
el.style.zIndex = 'auto';
}
});
}
unstick();
var observer = new MutationObserver(unstick);
observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });
})();
}
} catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); }
})();
})();
GitHub - justcy/wpcore: php , swoole, wow, wowcore, World of Warcraft, wow_3.3.5a · GitHub
Repository files navigation World of Warcraft server
魔兽世界服务器
Linux:
运行登录服务器(Run Authserver): php script Server/start auth OR ./start_auth.sh
运行世界服务器(Run Worldserver): php script Server/start world OR ./start_world.sh
关闭服务器( Stop Server): ctrl+C OR ./stop.sh Win:
运行登录服务器(Run Authserver): php script Server/start auth OR win_start_auth.bat
运行世界服务器(Run Worldserver): php script Server/start world OR win_start_world.bat
注: 测试账户(test user) TEST003 密码 TEST003 (数据库密码哈希值加密为: sha1("TEST003:TEST003") )
创建账户(create user): account create username password
GM权限(set gmlevel): account set gmlevel username 3 1
当前核心在linux下运行正常,windows下swoole出现异常(正在排查中...)
数据库配置文件是.env,请将.env.example复制到.env并更改配置。
The database configuration file is in .env
please copy .env.example to .env and change the configuration.
=====
This is a World of Warcraft server written in PHP.
Now it has debugged the process of logging in to the server.
The current World of Warcraft client is 3.3.5.
The server list and account password data need to query the AUTH library.
The world server authentication process is complete and packet encryption is complete
The follow-up process is in development...
The database file is in the root directory: sql/auth.sql
Limited energy, welcome to submit version, QQ group: 186510932 welcome to learn together ~
Wow client link: https://pan.baidu.com/s/1A4EeOdngdtIrcgSzfkj6-A extraction code: 2vkt
这是用PHP编写的魔兽世界服务器。
现在它已经调试了登录服务器的过程。
目前的魔兽世界客户端是3.3.5。
服务器列表和帐户密码数据需要查询AUTH库。
世界服务器身份验证过程已完成,数据包加密已完成
后续进程正在开发中......
数据库文件在根目录: sql/auth.sql
精力有限,欢迎提交版本,QQ群:186510932 欢迎一起研究~
wow客户端 链接: https://pan.baidu.com/s/1A4EeOdngdtIrcgSzfkj6-A 提取码: 2vkt
PPPP PPPP PPP PPPPPPP PPP PPPPP PPP PPPPPPPPP PPPP PPPPP PPPP PPPP PPPP PPPP PPPPP PPPP PPPP PPPP PPP PPPPPPP PPP PPPPPPPP PPP PPP PPPPPP PPPPPP PPPPPP PPP PPP PPP PPP PPPPPPPPP PPPP PPPPPPPPP PPPPPP PPPPPPPPP PPPP PPP PPP PPPP PPPP PPPP PPPP PPPP PPPP PPPP PPP PPPP PPPP PPP PPP PPP PPP PPPP PPPP PPPP PPPP PPP PPPP PPP PPPPPP PPPPPPP PPP PPP PPPP PPP PPP PPP PPPPPPPPPPP PPPPPP PPPPPP PPP PPP PPPP PPP PPP PPP PPPPPPPPPPP PPPPPP PPPPPP PPP PPP PPP PPPPPP PPP PPP PPP PPPPP PPPPP PPP PPPP PPPP PPPPPPPP PPPP PPP PPPP PPPP PPPPP PPPP PPPP PPPP PPPP PPPP PPPP PPP PPPP PPPP PPPP PPPP PPPPPPPPP PPPPPPPPPP PPPPPPPPP PPP PPPPPPPPP PPPP PPPP PPPPPPPP PPPPPPP PPPPPP PPP PPPPPP PPP PPP PPP PPP PPP Authserver version 1.0.1
author by.fan <fan3750060@163.com>
Gameversion: 3.3.5
安装及依赖 Installation dependency git clone https://github.com/fan3750060/wpcore.git
Php version >= 7.0
Swoole version >= 2.0
Python version >= 3.5
运行登录服务器(Run Authserver): php script Server/start auth
运行世界服务器(Run Worldserver): php script Server/start world
You can’t perform that action at this time.