<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[samp | open.mp 联机社区论坛 - 综合讨论]]></title>
		<link>https://open-mp.cn/</link>
		<description><![CDATA[samp | open.mp 联机社区论坛 - https://open-mp.cn]]></description>
		<pubDate>Mon, 04 May 2026 12:37:57 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[圣安地列斯联机二十年：SA:MP 与 open.mp 历史]]></title>
			<link>https://open-mp.cn/showthread.php?tid=30</link>
			<pubDate>Tue, 24 Mar 2026 20:45:15 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://open-mp.cn/member.php?action=profile&uid=3">小鸟unsigned</a>]]></dc:creator>
			<guid isPermaLink="false">https://open-mp.cn/showthread.php?tid=30</guid>
			<description><![CDATA[<h2 style="font-size:1.8em;font-weight:bold;border-bottom:2px solid #aaa;padding-bottom:5px;margin:20px 0 10px;">圣安地列斯联机二十年：SA:MP 与 open.mp 历史</h2><br />
<br />
2026 年。GTA6 即将在今年 11 月发售，新的时代正在敲门。<br />
<br />
也是在这一年，《侠盗猎车手：圣安地列斯》PC 版上市整整二十年，SA:MP 的第一个可玩版本也已走过二十个年头。<br />
<br />
一座从未被设计为联机游戏的城市，有人在这里认识了一辈子的朋友。有人在这里第一次学会了写代码。有人在角色扮演服务器里扮演一个JC或一个黑帮头目。有人在一个无聊的下午打开了游戏，然后就再也没有那个下午了。<br />
<br />
SA:MP 从来不是一个精致的产品。它是一群人强行塞进一款单人游戏里的多人世界。它有数不清的 bug，有争议不断的管理者，有过漫长的停滞与分裂——它也有 open.mp，有一批不肯让它消失的开发者，有如今可以在手机上随时上线的客户端，不管你还记不记得服务器的 IP，不管你当年是服主、脚本开发者，还是只是一个普通的玩家——你在这里的时间是真实的。<br />
<br />
GTA6 会带来它的世界。但圣安地列斯的街道，还在。服务器还在跑，玩家还在上线，有人还在第一次输入 /register。<br />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">前言</h3><br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>本文以客观事实为准绳。所有关键事件、人物声明、原始帖文，均完整收录于正文之中，不以外部链接替代实质内容。链接仅作考证索引，供读者溯源查验，不构成叙述本身的一部分。<br />
<br />
凡引用原文处，均以引用块标注，并注明来源与时间。凡转述处，均忠实于原意，不加渲染，不作价值评判。<br />
<br />
这是一部关于热爱、控制、背叛与重建的故事，也是一个游戏社区在二十年间走过的记录。</blockquote>
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">卷首语：一个不该有多人模式的游戏</h3><br />
<br />
2004 年 10 月 26 日，《侠盗猎车手：圣安地列斯》（Grand Theft Auto: San Andreas）在 PlayStation 2 平台正式发售。2005 年 6 月 10 日，PC 版本上市。<br />
<br />
这款游戏从未被设计为多人联机。Rockstar Games 为它设计了一个宏大的单人故事——主角 CJ 在帮派、JC与腐败之间挣扎求生，横跨三座城市、一片乡野。游戏没有联机大厅，没有服务器浏览器，没有任何供多人游玩的接口。<br />
<br />
然而在 GTA 模组社区里，有一批人从不接受"这不可能"这个答案。<br />
<br />
他们是一群来自世界各地的年轻人，大多数有着普通的日间生活——学生、程序员、上班族——他们一点一点地撬开这款游戏的外壳，试图将它改造成一个可以容纳数百人同时在线的多人世界。<br />
<br />
这便是 SA:MP 的起点。<br />
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">第一卷：诞生（2004–2006）</h3><br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第一章　从 Vice City 到 San Andreas</h4><br />
<br />
在《圣安地列斯》PC 版尚未发售之前，GTA 模组社区已经有人在为《GTA 罪恶都市》（Vice City）制作多人联机改造，这个项目被命名为 <span style="font-weight: bold;" class="mycode_b">VC:MP（Vice City Multiplayer）</span>。<br />
<br />
领导这支早期团队的，是一个网名叫 <span style="font-weight: bold;" class="mycode_b">kyeman</span> 的开发者，真名 <span style="font-weight: bold;" class="mycode_b">Kye Bitossi</span>。他在 GTA 模组社区中颇有声望，是公认的技术核心人物。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2005 年 4 月初</span>，kyeman 在全球最大的 GTA 社区论坛 <span style="font-weight: bold;" class="mycode_b">GTAForums</span> 上发布了一篇帖子，正式宣布 SA:MP 项目的存在。帖子标题是：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"[WIP] SA-MP: Multiplayer for San Andreas PC"</span><br />
——kyeman，GTAForums，2005年4月3日</blockquote>
<br />
消息一出，社区立刻沸腾。预告视频和截图开始在各大 GTA 论坛流传，项目的小型社区论坛在尚未开放任何测试的情况下，已吸引了约 <span style="font-weight: bold;" class="mycode_b">120 名注册用户</span>。<br />
<br />
公开 beta 测试期间，服务器承载能力远不及涌入的测试者数量，进入测试服务器需要排队等候，等待时间往往很长。这种盛况，是对整个项目最好的背书。<br />
<br />
进入开发团队的成员，来自 GTA 模组社区的各个方向，过去的SA-MP 0.2开发者和测试者包括：kyeman、spookie、Y_Less、mike、jax、Mike、Cam、adamcs、bakasan、Born Acorn、Dalpura、Damian、Delfi、dexx、DrAke&#36;、Drift、ECLiPSE、f3llah1n、him selfe、illspirit、littlewhitey、MrJax、njr1489、Posty、PsYcHoGoD、Shizz、Simon、sockx、squiddy、Static、steve-m、The Azer、Trix、Wacko、XcR、[ULK]Crack，其中许多人既是开发者也是测试员。<br />
<br />
他们大多是业余爱好者，利用业余时间共同推进这个无人出资的项目。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第二章　合作模式的争议与团队第一次动荡</h4><br />
<br />
然而，SA:MP 从一开始便并非一片和谐。<br />
<br />
开发团队内部，关于游戏核心玩法的方向，爆发了一场至今仍被一些老玩家提起的根本性争论：<br />
<br />
一部分人主张将 SA:MP 建设为一款<span style="font-weight: bold;" class="mycode_b">合作模式（Co-op）</span>游戏，设想最多 6 名玩家共同游玩，保留完整的 NPC 行为、警察追捕系统与任务流程，让多人体验尽可能接近单人游戏的质感；<br />
<br />
另一方，以 kyeman 为首，坚持将其建设为一个能够容纳大量玩家同时在线的<span style="font-weight: bold;" class="mycode_b">大规模死亡竞技（Deathmatch）</span>式多人服务器。<br />
<br />
这场分歧并未在内部平息，而是溢出到了 GTANet 社区论坛，引发了玩家的大量公开讨论与批评，负面声音之多，令整个项目团队承受了巨大压力。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2005 年 9 月 18 日</span>，kyeman 在持续的内外压力下，宣布因个人事务无暇继续领导项目，将主导权移交给团队二号核心开发者 <span style="font-weight: bold;" class="mycode_b">spooky</span>。<br />
<br />
spooky 接手后，将项目更名为 <span style="font-weight: bold;" class="mycode_b">GTA:Multiplayer（GTA:M）</span>，以示风格与管理方式的转变。<br />
<br />
然而，约一个月后，kyeman 重新归队。合作模式方案在此期间被彻底搁置，项目名称最终改回 <span style="font-weight: bold;" class="mycode_b">San Andreas Multiplayer（SA:MP）</span>，方向确定为大规模多人在线游戏。<br />
<br />
关于"Grand Theft Auto"字样是否应出现在项目名称中，团队在命名时也有过考量——使用 Rockstar 的商标可能引发法律风险，最终以缩写"SA:MP"作为正式名称，在一定程度上规避了这一问题。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第三章　2006 年：第一个可玩版本</h4><br />
<br />
在经历了那段动荡之后，SA:MP 于 <span style="font-weight: bold;" class="mycode_b">2006 年</span> 发布了第一个向公众开放的可玩版本。<br />
<br />
从技术层面看，这是一项相当可观的成就：开发者们在完全没有官方支持的前提下，用逆向工程的方式强行将联机功能"嵌入"进一款从未被设计为多人联机的作品，使其能够支持最多 <span style="font-weight: bold;" class="mycode_b">1000 名玩家</span>同时在线，在同一片虚拟的圣安地列斯地图中驾车、射击、竞速。<br />
<br />
服务器使用 <span style="font-weight: bold;" class="mycode_b">Pawn</span> 作为脚本语言，服务器主可以自行编写游戏模式（GameMode）与过滤脚本（FilterScript）。这一设计赋予了整个生态极高的开放性——任何人只要学会 Pawn，就可以在圣安地列斯的地图上建造出属于自己的世界。<br />
<br />
0.2.2 版本是这一阶段的代表版本，也是现存有据可查的最早可玩 SA:MP 版本记录之一。<br />
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">第二卷：黄金时代与暗流（2006–2009）</h3><br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第四章　版本迭代与社区的兴盛</h4><br />
<br />
2006 年至 2014 年，是 SA:MP 最活跃的开发阶段。Kalcor（此时 kyeman 已开始使用这个网名）陆续发布了一系列重要版本：<br />
<br />
<span style="font-weight: bold;" class="mycode_b">0.2 系列</span>（2006–2008）期间，SA:MP 奠定了基本架构，确立了 Pawn 脚本语言作为游戏模式开发的标准。这段时间并非全然顺利——一次大规模安全漏洞爆发，险些让整个团队就此放弃。而最终让他们坚持下来的，是一份在线请愿：短短时间内，数以千计的玩家签名支持 SA:MP 继续存在。这份来自社区的温度，让开发者重新燃起了动力。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">0.3a</span>（约 2010 年）是 SA:MP 历史上最具里程碑意义的版本之一。单服务器玩家上限从原来的数百人扩展至 <span style="font-weight: bold;" class="mycode_b">500 人</span>（后续版本更高），引入了鼠标驱动的记分板与聊天界面，增加了可编程的 NPC 机器人系统（允许服务器创建可驾驶火车、飞机的脚本机器人），网络同步质量大幅改善。<br />
<br />
此后数年，<span style="font-weight: bold;" class="mycode_b">0.3c、0.3d、0.3e、0.3x、0.3z</span> 相继发布，带来了音频流媒体支持、延迟补偿模式、自定义对象渲染距离、新的安全更新等功能。每一个版本的发布，都在 SA:MP 官方论坛的"新闻与更新"板块留下了一条由 Kalcor 亲自发布的公告。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2015 年 5 月 1 日</span>，Kalcor 发布了 SA:MP <span style="font-weight: bold;" class="mycode_b">0.3.7</span>，这是 SA:MP 有史以来最后一个带有实质性新功能的正式版本。0.3.7 新增了超过 500 个物体 ID（含特技物件与地形物件）、界面字体大小调整选项、若干新版警察皮肤、服务端对车门与车窗的控制权、为未标记警车添加警报灯的能力，以及一个简单的静态 NPC actor 系统。<br />
<br />
这个版本在此后数年间成为整个 SA:MP 生态的事实标准，直至今日仍是服务器主最常使用的版本。<br />
<br />
与此同时，这个社区在技术之外也在野蛮生长。<span style="font-weight: bold;" class="mycode_b">角色扮演（RP）服务器</span>在这段时期走向成熟，玩家们在 SA:MP 的世界中建构起了拥有经济系统、帮派政治、法律体系的虚拟社会。来自世界各地大型服务器先后崛起。SA:MP 不再只是一个小众模组，它已经成为一个真实的、活跃的、跨越语言与国境的国际社区。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第五章　Y_Less 的双重身份与 YSI 的诞生</h4><br />
<br />
在 SA:MP 的所有社区开发者中，有一个人的名字几乎是无可回避的：<span style="font-weight: bold;" class="mycode_b">Y_Less</span>，真名 Alex Cole。<br />
<br />
Y_Less 最初以 beta 测试员的身份加入 SA:MP 团队，随后正式成为开发团队成员，主要负责 Pawn 脚本语言相关的功能开发。然而，他与 Kalcor 之间的分歧，从他正式入队的第一天起便已埋下。<br />
<br />
用 Y_Less 自己后来的话说：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"加入开发团队之后，我开始开发 Pawn，但我发现自己能做的事被 Kye 严重限制。我们之间存在重大的意见分歧：他认为 90% 的开发精力应该投入同步（sync）工作，Pawn 几乎只是顺手提供一点额外功能的附属品。而我认为，虽然同步很重要，但他已经把同步覆盖得很好了，我更想专注于 Pawn 的功能与函数。然而他是老板，说了算，严重限制了我被允许做的事。此外，他有个坏习惯——每次版本迭代之后，只要在某个细枝末节的测试中有任何不稳定，就要来指责我，尽管测试本来就是我们有 beta 测试团队的原因。不用说，这不是一个好的工作环境，但我仍然喜欢 SA:MP 这个产品本身。"</span></blockquote>
<br />
在这种压抑的工作环境中，Y<span style="font-style: italic;" class="mycode_i">Less 于 <span style="font-weight: bold;" class="mycode_b">2007 年</span> 开始独立开发 <span style="font-weight: bold;" class="mycode_b">YSI（Y</span>Less' Server/Script Includes）</span>。<br />
<br />
YSI 最初是他此前若干工具的整合与升级，同时也是他在 Kalcor 的管控边界之外，以纯 Pawn 脚本的方式，实现他认为 SA:MP 脚本系统应当具备的扩展能力。他在这个过程中也加入了一些辅助性的函数，例如 player objects 功能，最初是专门为了支撑他的对象流式传输器 <code style="background:#f0f0f0;border:1px solid #ddd;padding:1px 5px;border-radius:3px;font-family:Consolas,monospace;font-size:0.9em;">e_objects</code> 而写的。<br />
<br />
用 Y_Less 自己的话说：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"2007 年，我开始开发 YSI。这部分是对若干早期工具的更新与整合，部分也是在 Kye 的控制之外，以 Pawn 能力范围内的方式带来我认为 Pawn 所需的扩展功能——尽管以纯 Pawn 来做，能实现的事情自然有其上限。YSI 成为我的主要项目这一事实惹恼了 Kye，因为他认为这说明我没有把时间花在 SA:MP 上，尽管我实际上一直都在。"</span></blockquote>
<br />
YSI 涵盖了命令处理（y<span style="font-style: italic;" class="mycode_i">commands）、玩家迭代器（y</span>iterate）、钩子机制（y<span style="font-style: italic;" class="mycode_i">hooks）、INI 文件读写（y</span>ini）、多语言支持（y_languages）等数十个子模块，是当时 SA:MP 社区功能最全面、使用最广泛的第三方脚本库。<br />
<br />
至于"YSI"到底代表什么，连 Y_Less 本人也说不清：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"最初的想法是'Y[i]Less' Server Includes'，但 Server 和 Script 经常被混用，而且现在参与的开发者不止 Y</span>Less 一人，所以'Y'就变成了一个递归缩写，代表'YSI'本身。"[/i]</blockquote>
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第六章　2008 年底：GTANet 风波与团队大出走</h4><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2008 年底</span>，SA:MP 开发团队内部爆发了一场与 GTANet 社区相关的严重矛盾。关于这场风波的具体细节，现有的公开资料已难以完整还原，但其结果是清晰且影响深远的：<span style="font-weight: bold;" class="mycode_b">Mike、aru 和 Peter</span> 等多名核心开发者相继以此为由宣布离队。<br />
<br />
Y_Less 在日后的声明中这样描述这段经历：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"2008 年底，GTANet 风波爆发，Mike、aru 和 Peter 因此离开，我也因为团队氛围实在太差，加之大家都在走，便也一同离开了。"</span></blockquote>
<br />
这一波出走之后，SA:MP 的开发工作几乎完全落回 Kalcor 一人肩上，这进一步强化了整个项目对他个人的高度依赖，也使得社区的任何集体意见都更加难以产生实质影响。<br />
<br />
然而事情并未就此平息。Y_Less 出走后，出于他自己也说不清的原因，重新回归了团队。他在后来的声明中写道：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"不知为何，真的记不清了，我之后又重新加入了团队。那时候 Kye 想要关闭 SA:MP，我提出愿意接手，他拒绝了。然后我再次退出——不是因为我没接手到，这一点需要说明——于是 Kye 决定封禁我的论坛账号，而且不只是封号，而是彻底抹除——删掉了我所有的帖子。这意味着原版《实用函数》帖没了，旧版 FAQ 帖没了，大量迷你教程没了，《Pawn 关键词》帖也没了——我只有在非常必要的时候才发帖，那些帖子都有其存在的价值，它们的消失被大量用户注意到并提出了强烈抗议。"</span></blockquote>
<br />
这便是 2008 年底那次"第一次封号"事件的始末——相对低调，但已经是一个信号。真正震动整个社区的风波，还在后面。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第七章　2009 年 1 月：YSF 封号事件</h4><br />
<br />
从团队再度离开之后，Y<span style="font-style: italic;" class="mycode_i">Less 没有停止为社区创作工具。他开发了 <span style="font-weight: bold;" class="mycode_b">YSF（Y</span>Less' Server Fixes）</span>——一个以服务端插件形式存在的 bug 修复集合。<br />
<br />
YSF 的设计理念很简单：SA:MP 有很多 Kalcor 长期忽略或拒绝修复的 bug，既然拿不到源代码，那就通过内存操作（memory patching）的方式，在运行时强行修正这些行为。这个方法技术上相当复杂，但效果立竿见影。<br />
<br />
Y_Less 事后这样形容 YSF：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"YSF 是我最成功的项目，因为它做到了所有人都想要的事。它本质上是一个更新版的服务端——人们总是渴望新版本带来修复和新功能，功能方面已经有其他插件（包括 YSI 插件）覆盖了，所以我选择了修复这条路（以及一些小功能——显然正是这些小功能引发了麻烦）。"</span></blockquote>
<br />
YSF 在社区中广泛流传，大量服务器安装并使用它。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">2009 年 1 月 19 日</span>，事件的直接导火索被点燃。<br />
<br />
当天，Kalcor 私信给 Y_Less，表达了对 YSF 的不满。他的顾虑有两项：<br />
<br />
第一，他认为 YSF 可能与 SA:MP 未来版本产生脚本兼容性问题；第二，他认为 YSF 代码中存在与 SA:MP 服务端源代码相似的内容，以 <code style="background:#f0f0f0;border:1px solid #ddd;padding:1px 5px;border-radius:3px;font-family:Consolas,monospace;font-size:0.9em;">functions.cpp</code> 中的 <code style="background:#f0f0f0;border:1px solid #ddd;padding:1px 5px;border-radius:3px;font-family:Consolas,monospace;font-size:0.9em;">IsNickInvalid</code> 函数为例。<br />
<br />
Y_Less 对此逐一作出回应。关于兼容性问题，他指出 YSF 恰恰是在让脚本对未来版本<span style="font-weight: bold;" class="mycode_b">更加</span>兼容，而非相反；关于源代码问题，他坦言：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"这实际上并非盗用，但我承认看起来非常相似，因为它做的事情完全一样，而且也不是什么复杂的函数，我懒得争，就直接把它彻底重写了。"</span></blockquote>
<br />
他还顺带提到，Kalcor 自己曾主导过一些令他反对的修改决策——比如改变服务端的默认运行风格，以及在 0.3 版本中移除对象（最后改为以 IPL 文件形式替代，而非完全移除）——当初他的反对意见被 Kalcor 直接否决。<br />
<br />
双方讨论的最终结果，表面上是达成了共识：Kalcor 表示接受了 Y_Less 的解释，YSF 可以继续存在。<br />
<br />
然而，Y_Less 第二天登录论坛，发现自己已经被封号。<br />
<br />
他在后来的声明中还原了这段过程：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"就在我们讨论同意 YSF 可以继续存在，之后，他发现了 SetServerRule，并意识到它可以用来修改只读控制台变量——比如服务器版本号——从而让人们能够违反 SA:MP 服务条款第（g）条：'你不得人为地增加玩家数量，或向 SA:MP 查询机制提供虚假信息。'"</span></blockquote>
<br />
Kalcor 认为，Y_Less 在 YSF 中提供了这样一个功能，就等同于为违规行为提供了手段，因此必须承担责任。<br />
<br />
封号通知的原文如下（Y_Less 在声明中直接引用）：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>*"抱歉 ssǝן‾ʎ，你已被禁止使用本论坛！  <br />
滥用前开发者身份。入侵服务器，并为他人违反服务条款提供手段。"*</blockquote>
<br />
封号的同时，Kalcor 再次<span style="font-weight: bold;" class="mycode_b">删除了 Y_Less 在 SA:MP 官方论坛上的全部历史帖子</span>。大量教程、工具发布帖、FAQ 就此永久消失，众多用户注意到这些帖子的蒸发，并提出了强烈抗议。<br />
<br />
Y_Less 随即在社区发布了一篇完整声明，以下是他原文的核心段落：<br />
<br />
<hr class="mycode_hr" />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"基本上，我因为 YSF 被 SA:MP 官方论坛封号了！</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">历史：</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">200x 年（实在记不清了），在与 Spookie 讨论之后，我以 beta 测试员的身份加入了 SA:MP 团队——那还是第一次公开 beta 之前的事——并开始编写 Pawn 相关的代码。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">没过多久，我正式加入了开发团队，专注于 Pawn 的开发，但我很快发现自己受到 Kye 的诸多限制，做不了想做的事。我们之间存在重大分歧：他认为 90% 的开发精力应该用于同步（sync），Pawn 只是顺手提供一点额外功能的附属品；而我认为，虽然同步很重要，但他已经把同步做得很好了，我更想把时间花在 Pawn 的功能扩展上。然而他是老板，说了算，严重限制了我能做的事。更让人受不了的是，他有个习惯——每次版本迭代后，只要在某个犄角旮旯的测试里出了任何小问题，就要来责怪我，哪怕我们有 beta 测试团队本来就是为了发现这些问题的。说实话那不是一个好的工作环境，但我还是喜欢 SA:MP 这个产品本身。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2007 年，我开始开发 YSI。这一方面是对此前一批旧项目的整合升级，另一方面也是想在 Kye 的管控之外，以纯 Pawn 脚本的方式实现我认为 Pawn 所需要的扩展功能——尽管能做到的事情有限，毕竟纯 Pawn 本身有其局限（我确实额外添加了一些辅助函数，比如 player objects 功能完全是为了写我最初的对象流式传输器 e\_objects 而专门实现的）。YSI 成为我的主要项目这件事惹恼了 Kye，因为他觉得我没有把时间花在 SA:MP 上——尽管我实际上一直都在。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2008 年底，GTANet 社区风波爆发，Mike、aru 和 Peter 因此离队。我也因为团队氛围实在太差，加上大家都在走，便也跟着离开了。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">不知为何（真的记不清了），我之后又重新回归了团队。那时候 Kye 想要关闭 SA:MP，我主动提出愿意接手，他拒绝了。然后我再次退出——不是因为没接手到，这一点需要说清楚——于是 Kye 决定封禁我的论坛账号，而且不只是封号，而是彻底抹除，删掉了我所有的帖子。这意味着原版《实用函数》帖没了，旧版 FAQ 帖没了，大量迷你教程没了，《Pawn 关键词》帖也没了——我只有在非常必要的时候才会发帖，那些帖子都有其价值，它们的消失被大量用户注意到并提出了抗议。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">不管怎样，我还是喜欢 SA:MP 和这个社区本身（至少喜欢其中的一部分），所以我还是留了下来（现在回想起来真不知道当时为什么，深感后悔），并继续努力让 SA:MP 变得更好——尽管 Kye 的存在让这件事很难。我继续开发 YSI、写教程和帮助帖，后来又创作了 YSF。YSF 大概是我最成功的项目了，因为它做到了所有人都想要的事。它本质上就是一个改进版的服务端——人们总是渴望新版本带来修复和新功能，功能方面已经有其他插件（包括 YSI 插件）覆盖了，所以我选择了专注于修复这条路（以及一些小功能——显然正是这些小功能引发了这次麻烦）。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">总之，Kye 和我一般都各自行事、互不干扰（至少我是这么以为的），有一段时间相安无事。直到 2009 年 1 月 19 日，我收到了 Kye 的消息，说他不太喜欢我在 YSF 里做的事。经过一番交涉，才明白他的顾虑在于：YSF 可能与未来版本的脚本产生兼容性问题（这话从他嘴里说出来真是讽刺——我当初就反对过他把默认运行方式改掉，以及 0.3 版本里删除对象的决定，但他否决了我；对象最后是改成了 IPL 文件的形式，而非完全删除，但也没有了 per-player objects，至少我最后听到的消息是这样）。此外，他还质疑 YSF 里有 SA:MP 服务端的源代码——他举的例子是 functions.cpp 里的 IsNickInvalid 函数。这个函数其实不是照抄的，但我承认看起来确实很像，毕竟它做的事完全一样，而且也不是什么复杂的函数，我懒得争，就直接把它彻底重写了。在我指出 YSF 并不会造成兼容性问题（恰恰相反，它让脚本对未来版本的兼容性更好），并同意日后不再使用 SA:MP 源代码（尽管我此前一直在刻意避免这样做）之后，他让步了。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">第二天我上论坛，发现自己已经被封了……</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">原来在我们达成共识之后，他又发现了 SetServerRule 这个功能，意识到它可以用来修改只读控制台变量（比如服务器版本号），从而让人能够违反 SA:MP 服务条款第（g）条：'你不得人为地增加玩家数量，或向 SA:MP 查询机制提供虚假信息。'</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">我解释说，我本人根本没有这样做，这个功能的设计初衷是好的，只是不幸被人滥用了。我甚至想过反问他：他提供论坛和 IRC 频道，同样也给人们提供了违反条款（c）（d）条的方式，按他的逻辑，他也应该被封号——但我懒得说了。封号通知的原文是：</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">'抱歉 ssǝן‾ʎ，你已被禁止使用本论坛！滥用前开发者身份。入侵服务器，并为他人违反服务条款提供手段。'</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">所谓'滥用'，是指我用它改善了所有人的游戏体验；所谓'入侵服务器'，是指我修复了它；所谓'提供手段'，意思是人们可以拿我提供的工具做坏事——但这不代表我支持或认可这种行为，这只是一个有用工具所带来的无奈副作用。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">Kye 说 YSF 的事已经覆水难收，他只能发布新版本来屏蔽它，伤害已经造成，它已经广泛传播，人们正在用它黑自己的服务器，没有人能阻止，所以我必须被封。我回应说，如果我没被封，我本来可以发布最新版本，在修复拾取物 bug 的同时，加入对规则的只读标志检查——虽然这无法彻底解决问题，但能大幅减少滥用，因为几乎没有人会主动把它改回旧方式，大多数人会为了这个重要修复而升级。说到这里，他就不再回复我了（我觉得他是意识到自己断掉了快速、高效解决这件事的唯一合理途径，然后不想认账了——如果不是这样，我欢迎他来回应）。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">总之，我决定把当时正在写的那段代码（YSI 的示例脚本）收个尾，毕竟我还是喜欢使用 YSI 的那些人，上传最终版本，然后就此结束。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">所以，截至目前：YSI 1.0、YSF 1.0、YSI2 1.0、YPI 1.0，到此为止，我不干了。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">附言：Kye 正在研究一种过滤"修改版本服务端"并将其列入黑名单的机制——我可能会发布一个不自动修改版本号的 YSF 版本，这样用它的人就不会因为我的失误被连坐；请留意这里的动态（我可能也会顺带加入拾取物修复，但不会保留只读变量相关的功能）。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">附言二：IRC 才是王道，我还活跃在 GTANet 的大量频道里，包括 #YSI 和 #Y_Less，欢迎来找我。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">附言三：不知道 MTA 的源代码长什么样……</span>"</blockquote>
<br />
——Y_Less，2009年1月，TMS Forums<br />
<br />
<hr class="mycode_hr" />
<br />
这篇声明在社区引发了强烈反响。数日后，经社区压力，Y_Less 得以解封，YSF 在不修改只读变量的前提下被允许继续使用。从表面上看，风波平息了。<br />
<br />
但那句"附言三"——"不知道 MTA 的源代码长什么样"——如今读来，已不再只是一句无心之语。<br />
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">第三卷：停滞、管控与分歧（2014–2019）</h3><br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第八章　0.3.7 之后的沉寂（含源码泄漏事件）</h4><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2015 年 5 月 1 日</span>，SA:MP <span style="font-weight: bold;" class="mycode_b">0.3.7</span> 发布。此后，Kalcor 在新功能层面的开发近乎陷入停滞。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2018 年前后</span>，Kalcor 发布了 <span style="font-weight: bold;" class="mycode_b">SA-MP 0.3.DL</span>——一个支持服务端向玩家客户端推送自定义模型（Download Content）的版本。这是社区长期以来最渴望的功能之一，玩家们可以在 SA:MP 服务器上看到服务器自定义的车辆、皮肤、物件模型，而不再局限于原版游戏资产。<br />
<br />
然而 0.3.DL 的推出并不顺利：安全问题（恶意服务器可能推送损坏的模型文件危害客户端）和与旧版 0.3.7 的兼容性问题，使得相当一部分服务器拒绝迁移。SA:MP 社区自此一分为二，0.3.7 阵营与 0.3.DL 阵营长期并存。<br />
<br />
这种分裂令社区感到困惑与沮丧。有人多次在论坛呼吁将两个版本合并，但得不到任何回应。<br />
<br />
<hr class="mycode_hr" />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">源码泄漏事件（2010 年起源，2018 年爆发）</h4><br />
<br />
在 0.3.DL 引发社区分裂的同一时期，另一条隐患也终于浮出水面。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2018 年 11 月 15 日</span>，SA:MP 官方论坛上出现了一篇由用户 Kshishtof 发起的帖子，标题是《SA-MP 源代码泄漏》。帖子指向一个名为 <span style="font-weight: bold;" class="mycode_b">rw-mp.net</span> 的项目，该项目被认为是基于泄漏的 SA:MP 源代码构建的独立多人联机分支。<br />
<br />
帖子引发了社区的激烈讨论。一部分人对 rw-mp 持同情甚至欣赏的态度，认为它至少在做 SA:MP 不再愿意做的事；另一部分人则斥之为对原作的窃取与侮辱。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2018 年 11 月 16 日</span>，Kalcor 亲自在帖子中出现，发表了两段回应。第一段揭示了这批泄漏源码的来历：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"SA:MP 的源代码于 2010 年被一名法国人从我们的服务器上黑掉，目的是为 IV:MP 这个 mod 服务。我记录并上报了这次入侵。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">GitHub 上大约有十个副本。我一直没有把它们下架，是因为提交 DMCA 申诉需要将我的真实姓名录入 GitHub 的公开 DMCA 数据库，否则就得花钱请律师。"</span></blockquote>
<br />
第二段话语气更为强硬，是一封事实上的法律警告：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"0.2.5 的源代码是通过计算机入侵从我们的服务器上盗取的。任何基于该代码发布软件的人，都涉嫌与我们作对的刑事共谋。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">SA:MP 所使用的 RakNet 版本并非开源，而是通过付费许可证使用的。BASS 音频库同样是付费许可证使用的。整个游戏 mod 社区正在被那些删除原始版权信息、将他人成果冒充自己作品重新发布的蠢货所伤害。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">我给他们几天时间关闭并停止任何与 SA:MP 相关的活动。"</span></blockquote>
<br />
——Kalcor，SA:MP 官方论坛，2018 年 11 月 16 日 原帖：https://sampforum.blast.hk/showthread.php?tid=660866<br />
<br />
这段声明揭示了几个此前从未公开过的重要事实：<br />
<br />
其一，SA:MP 源码泄漏的根源远早于 2018 年——<span style="font-weight: bold;" class="mycode_b">2010 年</span>就已经发生了一次有据可查的服务器入侵事件，是一名法国黑客为了支持 IV:MP（GTA IV 的多人 mod）而实施的。这与 Kalcor 在 2019 年 pawn.wiki 文章中所说的"R* 给 MTA 的代码被用于攻击 SA:MP"形成了完整的脉络——他所遭受的代码安全威胁，来自不止一个方向。<br />
<br />
其二，Kalcor 之所以始终不对 GitHub 上的泄漏副本提交 DMCA，并非不知情或不在意，而是出于一个极具讽刺意味的现实顾虑：提交 DMCA 需要将他的真实姓名公开录入数据库，而他不愿意这样做。源码在网上流传的同时，他本人却因为隐私顾虑而放任不管。<br />
<br />
这次事件在社区中引发了新一轮关于"Kalcor 应不应该直接将 SA:MP 开源"的讨论。部分社区成员认为，既然源码已经通过非法途径广泛流传，不如主动开源，至少可以让社区以合法的方式参与改进。这个声音 Kalcor 听到了，但他的答案，在两年后的 pawn.wiki 那篇文章里已经说得很清楚。<br />
<br />
<hr class="mycode_hr" />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第九章  Kalcor 眼中的历史：MTA 的旧账、R\* 的源码，与闭源的真实理由</h4><br />
<br />
编年史至此已经写了许多关于 Kalcor 的事——他的决策、他的封号、他的沉默——却始终没有给他一个真正完整的出场。他是从哪里来的？他为什么那样做？他拒绝开源的理由究竟是什么？<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2019 年 10 月 25 日</span>，就在 Kalcor 于 SA:MP 官方论坛发布某条帖子后不久，俄语 Pawn 开发者社区 pawn.wiki 上出现了一篇由用户 <span style="font-weight: bold;" class="mycode_b">m1n1vv</span> 整理、转述并翻译的长文，标题是《SA-MP 0.3.9 与 Kalcor 的新故事》。这篇文章完整记录了 Kalcor 这篇帖子的核心内容——那是迄今为止他对自己技术履历与闭源立场最完整、最直接的一次亲口陈述。<br />
<br />
以下是 Kalcor 在那篇帖子中所说的全部内容，经 m1n1vv 翻译并整理，原文以俄文发布于 pawn.wiki：<br />
<br />
<hr class="mycode_hr" />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">那么，请允许我给你们讲一段历史。结论由你们自己得出。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2003 年，在 MTA 的 IRC 频道上待了一周之后，我被邀请加入 MTA:VC（Vice City Multiplayer）的开发。几个月后，我晋升为 MTA 的首席开发者。以下是一张截图，记录了我和 Si|ent 一起尝试让 MTA:VC 中的船只同步正常工作的画面，日期是 2003年12月31日。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">我是 MTA:Blue 的少数开发者之一——这是 MTA 针对罪恶都市的新版本。那时候除我之外，大多数人都被现实生活拖住了。我开发了玩家上下文切换同步系统，并引入了 RakNet 库。同样的系统至今仍被 SA-MP 和 MTA:SA 所使用。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">这种处境让我感到沮丧——一周又一周过去，只有我一个人在提交代码，而论坛上却有一堆"开发者"在大谈特谈一切将会如何运作。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">于是我离开了 MTA 的开发。在我离开期间，另一个叫 eAi 的人加入了项目，开始研究我的代码，试图弄清楚它是怎么工作的。至少有人在做事了——他的方式是去主动联系各方，于是他通过 ICQ 找到了我，还找到了 R</span>（Rockstar Games）开发者的电子邮件地址，并与他们取得了联系。*<br />
<br />
<span style="font-style: italic;" class="mycode_i">那时候我对 GTA 多人联机并不感兴趣。我有一个乐队，还参与了 ipodlinux 等项目，但 eAi 似乎非常热衷于推动 MTA:Blue 取得进展。于是我重新加入了项目，持续了几个月。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">以下是 2004年底 MTA:Blue 的公开宣传页面存档。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">正是这件事导致了我和 MTA 其他开发者之间的决裂：我想要构建一个服务端系统——就像 VC-MP 的 ini 脚本系统，以及 SA-MP 中基于 Pawn 脚本的服务端系统；而 MTA 的开发者们则想要客户端扩展，就像那个宣传页面上描述的那样。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2005年初，我再次离开了 MTA。就在那段时间，R</span> North 在 PS2 上发布了 GTA:SA，并正在开发 PC 版本。eAi 与 R<span style="font-style: italic;" class="mycode_i"> 的技术总监有联系，还通过 ICQ 向我炫耀说，他拿到了大量 GTA:SA 源代码的头文件。我注意到，MTA 的开发者们似乎打算放弃罪恶都市版的 MTA:Blue，转战 GTA:SA。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">不相信 MTA 及其开发能力，2005年中，我开始独立开发自己的多人联机。我发布了 VC-MP，基于玩家上下文切换和 RakNet。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">随后，我与 jax、spooky 以及其他一些人一起开发了 SA-MP。它远比之前的 mod 庞大得多。我们与 GTANet/GTAForums——最大的 GTA 非官方粉丝站——有着较为密切的联系，这使我们获得了更大的知名度。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">到 2008 年，SA-MP 的玩家数量是 MTA 的 10 到 20 倍。MTA 的开发者们感到在这种竞争环境下已无法与之抗衡，于是他们公开了自己的源代码。MTA 的开发者们从未询问过我或任何前任开发者，是否可以公开这些源代码。他们声称所有东西都已经被重写了，但事实并非完全如此。时至今日，MTA:SA 中仍然有我的代码。我没有费心去追究他们，因为他们看起来太蠢了——但我猜，这里那些呼吁公开 SA-MP 源代码的人，很可能是受到了 MTA 的启发，尽管他们或许不应该这样。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">而这就是现在正在发生的事：我为 MTA 开发的"游戏"代码，以及 R\</span> 给 MTA 的源代码，正在被移植进 mod\<span style="font-style: italic;" class="mycode_i">so\</span>beit——一款流行的 SA-MP 外挂工具。*<br />
<br />
<span style="font-style: italic;" class="mycode_i">你们知道这意味着什么吗？R\</span> 给 MTA 的那部分源代码，有相当大一部分被用来——攻击 SA-MP！*<br />
<br />
<span style="font-style: italic;" class="mycode_i">从一小批相当专业的 MTA 开发者起步，这件事已经演变成了极度肮脏的东西。那些想要摧毁 SA-MP 的人，对于是否违法毫不在意。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">看起来，任何被公开的源代码都可能被用来攻击 SA-MP——尽管它本可以被用于提供有价值的更新。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">公开 SA-MP 源代码这个决定，归根结底取决于：我们是否仍然处于这种充满敌意的环境中——人们在攻击我、想要攻击 SA-MP——还是这一切已经成为过去。我想说，这取决于 mod 的规模以及对外挂工具的需求程度。封闭源代码让我可以在每次发布时重新洗牌所有内部结构，使大量外挂工具失效。SA-MP 的许多"安全"更新，实质上就是我在重新排列数据，以清除现有的外挂工具。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">最终，SA-MP 将会走到这样一个时刻：所有人都彼此友善和尊重，外挂与欺诈变得罕见——但届时玩家数量将极为稀少，我们中的大多数人也已不在了。</span></blockquote>
<br />
——Kalcor，2019年10月，SA:MP 官方论坛<br />
（由 m1n1vv 转述并整理，经 Типичный Скриптер 译为俄文，发布于 pawn.wiki，2019年10月25日）<br />
<br />
<hr class="mycode_hr" />
<br />
这篇陈述，是理解 Kalcor 其人与其决策的关键文献。<br />
<br />
它第一次完整地揭示了他的来历：他不是凭空出现的 SA:MP 创始人，而是一个从 MTA 内部出走的人。<span style="font-weight: bold;" class="mycode_b">2003 年至 2005 年间，他在 MTA 团队中担任首席开发者</span>，亲手构建了玩家同步系统与 RakNet 架构——而他愤而离开，正是因为他坚持的"服务端脚本系统"方向遭到其他成员的反对。SA:MP 的诞生，某种程度上是一次对 MTA 的报复性创业。<br />
<br />
它也第一次给出了 Kalcor 拒绝开源的真实逻辑：他不是在藏私，也不是单纯的控制欲作祟——在他看来，<span style="font-weight: bold;" class="mycode_b">闭源是他对抗外挂工具的核心武器</span>。他承认 SA:MP 的许多所谓"安全更新"，实质只是重新排列内部数据结构，使依赖固定内存地址的外挂工具在新版本中失效。一旦开源，这条防线便彻底坍塌。<br />
<br />
而他与 MTA 之间的积怨，在这篇文章里也首次有了完整呈现：他认为 MTA 在开源自己的代码库时，从未征得他这位最初作者的同意；更令他愤怒的是，他随后发现，R\* 曾向 MTA 提供的部分 GTA:SA 源代码头文件，辗转流入了 SA:MP 外挂工具的制作者手中——成为攻击 SA:MP 的武器。这份偏执与防御，贯穿了他此后对待社区和开源请求的所有态度。<br />
<br />
这篇发布于 2019 年 10 月的文章，距 Kalcor 宣告放弃 SA:MP 仅剩不到一个月。这是他在离开之前，最后一次试图解释自己。<br />
<br />
<hr class="mycode_hr" />]]></description>
			<content:encoded><![CDATA[<h2 style="font-size:1.8em;font-weight:bold;border-bottom:2px solid #aaa;padding-bottom:5px;margin:20px 0 10px;">圣安地列斯联机二十年：SA:MP 与 open.mp 历史</h2><br />
<br />
2026 年。GTA6 即将在今年 11 月发售，新的时代正在敲门。<br />
<br />
也是在这一年，《侠盗猎车手：圣安地列斯》PC 版上市整整二十年，SA:MP 的第一个可玩版本也已走过二十个年头。<br />
<br />
一座从未被设计为联机游戏的城市，有人在这里认识了一辈子的朋友。有人在这里第一次学会了写代码。有人在角色扮演服务器里扮演一个JC或一个黑帮头目。有人在一个无聊的下午打开了游戏，然后就再也没有那个下午了。<br />
<br />
SA:MP 从来不是一个精致的产品。它是一群人强行塞进一款单人游戏里的多人世界。它有数不清的 bug，有争议不断的管理者，有过漫长的停滞与分裂——它也有 open.mp，有一批不肯让它消失的开发者，有如今可以在手机上随时上线的客户端，不管你还记不记得服务器的 IP，不管你当年是服主、脚本开发者，还是只是一个普通的玩家——你在这里的时间是真实的。<br />
<br />
GTA6 会带来它的世界。但圣安地列斯的街道，还在。服务器还在跑，玩家还在上线，有人还在第一次输入 /register。<br />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">前言</h3><br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>本文以客观事实为准绳。所有关键事件、人物声明、原始帖文，均完整收录于正文之中，不以外部链接替代实质内容。链接仅作考证索引，供读者溯源查验，不构成叙述本身的一部分。<br />
<br />
凡引用原文处，均以引用块标注，并注明来源与时间。凡转述处，均忠实于原意，不加渲染，不作价值评判。<br />
<br />
这是一部关于热爱、控制、背叛与重建的故事，也是一个游戏社区在二十年间走过的记录。</blockquote>
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">卷首语：一个不该有多人模式的游戏</h3><br />
<br />
2004 年 10 月 26 日，《侠盗猎车手：圣安地列斯》（Grand Theft Auto: San Andreas）在 PlayStation 2 平台正式发售。2005 年 6 月 10 日，PC 版本上市。<br />
<br />
这款游戏从未被设计为多人联机。Rockstar Games 为它设计了一个宏大的单人故事——主角 CJ 在帮派、JC与腐败之间挣扎求生，横跨三座城市、一片乡野。游戏没有联机大厅，没有服务器浏览器，没有任何供多人游玩的接口。<br />
<br />
然而在 GTA 模组社区里，有一批人从不接受"这不可能"这个答案。<br />
<br />
他们是一群来自世界各地的年轻人，大多数有着普通的日间生活——学生、程序员、上班族——他们一点一点地撬开这款游戏的外壳，试图将它改造成一个可以容纳数百人同时在线的多人世界。<br />
<br />
这便是 SA:MP 的起点。<br />
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">第一卷：诞生（2004–2006）</h3><br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第一章　从 Vice City 到 San Andreas</h4><br />
<br />
在《圣安地列斯》PC 版尚未发售之前，GTA 模组社区已经有人在为《GTA 罪恶都市》（Vice City）制作多人联机改造，这个项目被命名为 <span style="font-weight: bold;" class="mycode_b">VC:MP（Vice City Multiplayer）</span>。<br />
<br />
领导这支早期团队的，是一个网名叫 <span style="font-weight: bold;" class="mycode_b">kyeman</span> 的开发者，真名 <span style="font-weight: bold;" class="mycode_b">Kye Bitossi</span>。他在 GTA 模组社区中颇有声望，是公认的技术核心人物。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2005 年 4 月初</span>，kyeman 在全球最大的 GTA 社区论坛 <span style="font-weight: bold;" class="mycode_b">GTAForums</span> 上发布了一篇帖子，正式宣布 SA:MP 项目的存在。帖子标题是：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"[WIP] SA-MP: Multiplayer for San Andreas PC"</span><br />
——kyeman，GTAForums，2005年4月3日</blockquote>
<br />
消息一出，社区立刻沸腾。预告视频和截图开始在各大 GTA 论坛流传，项目的小型社区论坛在尚未开放任何测试的情况下，已吸引了约 <span style="font-weight: bold;" class="mycode_b">120 名注册用户</span>。<br />
<br />
公开 beta 测试期间，服务器承载能力远不及涌入的测试者数量，进入测试服务器需要排队等候，等待时间往往很长。这种盛况，是对整个项目最好的背书。<br />
<br />
进入开发团队的成员，来自 GTA 模组社区的各个方向，过去的SA-MP 0.2开发者和测试者包括：kyeman、spookie、Y_Less、mike、jax、Mike、Cam、adamcs、bakasan、Born Acorn、Dalpura、Damian、Delfi、dexx、DrAke&#36;、Drift、ECLiPSE、f3llah1n、him selfe、illspirit、littlewhitey、MrJax、njr1489、Posty、PsYcHoGoD、Shizz、Simon、sockx、squiddy、Static、steve-m、The Azer、Trix、Wacko、XcR、[ULK]Crack，其中许多人既是开发者也是测试员。<br />
<br />
他们大多是业余爱好者，利用业余时间共同推进这个无人出资的项目。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第二章　合作模式的争议与团队第一次动荡</h4><br />
<br />
然而，SA:MP 从一开始便并非一片和谐。<br />
<br />
开发团队内部，关于游戏核心玩法的方向，爆发了一场至今仍被一些老玩家提起的根本性争论：<br />
<br />
一部分人主张将 SA:MP 建设为一款<span style="font-weight: bold;" class="mycode_b">合作模式（Co-op）</span>游戏，设想最多 6 名玩家共同游玩，保留完整的 NPC 行为、警察追捕系统与任务流程，让多人体验尽可能接近单人游戏的质感；<br />
<br />
另一方，以 kyeman 为首，坚持将其建设为一个能够容纳大量玩家同时在线的<span style="font-weight: bold;" class="mycode_b">大规模死亡竞技（Deathmatch）</span>式多人服务器。<br />
<br />
这场分歧并未在内部平息，而是溢出到了 GTANet 社区论坛，引发了玩家的大量公开讨论与批评，负面声音之多，令整个项目团队承受了巨大压力。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2005 年 9 月 18 日</span>，kyeman 在持续的内外压力下，宣布因个人事务无暇继续领导项目，将主导权移交给团队二号核心开发者 <span style="font-weight: bold;" class="mycode_b">spooky</span>。<br />
<br />
spooky 接手后，将项目更名为 <span style="font-weight: bold;" class="mycode_b">GTA:Multiplayer（GTA:M）</span>，以示风格与管理方式的转变。<br />
<br />
然而，约一个月后，kyeman 重新归队。合作模式方案在此期间被彻底搁置，项目名称最终改回 <span style="font-weight: bold;" class="mycode_b">San Andreas Multiplayer（SA:MP）</span>，方向确定为大规模多人在线游戏。<br />
<br />
关于"Grand Theft Auto"字样是否应出现在项目名称中，团队在命名时也有过考量——使用 Rockstar 的商标可能引发法律风险，最终以缩写"SA:MP"作为正式名称，在一定程度上规避了这一问题。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第三章　2006 年：第一个可玩版本</h4><br />
<br />
在经历了那段动荡之后，SA:MP 于 <span style="font-weight: bold;" class="mycode_b">2006 年</span> 发布了第一个向公众开放的可玩版本。<br />
<br />
从技术层面看，这是一项相当可观的成就：开发者们在完全没有官方支持的前提下，用逆向工程的方式强行将联机功能"嵌入"进一款从未被设计为多人联机的作品，使其能够支持最多 <span style="font-weight: bold;" class="mycode_b">1000 名玩家</span>同时在线，在同一片虚拟的圣安地列斯地图中驾车、射击、竞速。<br />
<br />
服务器使用 <span style="font-weight: bold;" class="mycode_b">Pawn</span> 作为脚本语言，服务器主可以自行编写游戏模式（GameMode）与过滤脚本（FilterScript）。这一设计赋予了整个生态极高的开放性——任何人只要学会 Pawn，就可以在圣安地列斯的地图上建造出属于自己的世界。<br />
<br />
0.2.2 版本是这一阶段的代表版本，也是现存有据可查的最早可玩 SA:MP 版本记录之一。<br />
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">第二卷：黄金时代与暗流（2006–2009）</h3><br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第四章　版本迭代与社区的兴盛</h4><br />
<br />
2006 年至 2014 年，是 SA:MP 最活跃的开发阶段。Kalcor（此时 kyeman 已开始使用这个网名）陆续发布了一系列重要版本：<br />
<br />
<span style="font-weight: bold;" class="mycode_b">0.2 系列</span>（2006–2008）期间，SA:MP 奠定了基本架构，确立了 Pawn 脚本语言作为游戏模式开发的标准。这段时间并非全然顺利——一次大规模安全漏洞爆发，险些让整个团队就此放弃。而最终让他们坚持下来的，是一份在线请愿：短短时间内，数以千计的玩家签名支持 SA:MP 继续存在。这份来自社区的温度，让开发者重新燃起了动力。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">0.3a</span>（约 2010 年）是 SA:MP 历史上最具里程碑意义的版本之一。单服务器玩家上限从原来的数百人扩展至 <span style="font-weight: bold;" class="mycode_b">500 人</span>（后续版本更高），引入了鼠标驱动的记分板与聊天界面，增加了可编程的 NPC 机器人系统（允许服务器创建可驾驶火车、飞机的脚本机器人），网络同步质量大幅改善。<br />
<br />
此后数年，<span style="font-weight: bold;" class="mycode_b">0.3c、0.3d、0.3e、0.3x、0.3z</span> 相继发布，带来了音频流媒体支持、延迟补偿模式、自定义对象渲染距离、新的安全更新等功能。每一个版本的发布，都在 SA:MP 官方论坛的"新闻与更新"板块留下了一条由 Kalcor 亲自发布的公告。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2015 年 5 月 1 日</span>，Kalcor 发布了 SA:MP <span style="font-weight: bold;" class="mycode_b">0.3.7</span>，这是 SA:MP 有史以来最后一个带有实质性新功能的正式版本。0.3.7 新增了超过 500 个物体 ID（含特技物件与地形物件）、界面字体大小调整选项、若干新版警察皮肤、服务端对车门与车窗的控制权、为未标记警车添加警报灯的能力，以及一个简单的静态 NPC actor 系统。<br />
<br />
这个版本在此后数年间成为整个 SA:MP 生态的事实标准，直至今日仍是服务器主最常使用的版本。<br />
<br />
与此同时，这个社区在技术之外也在野蛮生长。<span style="font-weight: bold;" class="mycode_b">角色扮演（RP）服务器</span>在这段时期走向成熟，玩家们在 SA:MP 的世界中建构起了拥有经济系统、帮派政治、法律体系的虚拟社会。来自世界各地大型服务器先后崛起。SA:MP 不再只是一个小众模组，它已经成为一个真实的、活跃的、跨越语言与国境的国际社区。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第五章　Y_Less 的双重身份与 YSI 的诞生</h4><br />
<br />
在 SA:MP 的所有社区开发者中，有一个人的名字几乎是无可回避的：<span style="font-weight: bold;" class="mycode_b">Y_Less</span>，真名 Alex Cole。<br />
<br />
Y_Less 最初以 beta 测试员的身份加入 SA:MP 团队，随后正式成为开发团队成员，主要负责 Pawn 脚本语言相关的功能开发。然而，他与 Kalcor 之间的分歧，从他正式入队的第一天起便已埋下。<br />
<br />
用 Y_Less 自己后来的话说：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"加入开发团队之后，我开始开发 Pawn，但我发现自己能做的事被 Kye 严重限制。我们之间存在重大的意见分歧：他认为 90% 的开发精力应该投入同步（sync）工作，Pawn 几乎只是顺手提供一点额外功能的附属品。而我认为，虽然同步很重要，但他已经把同步覆盖得很好了，我更想专注于 Pawn 的功能与函数。然而他是老板，说了算，严重限制了我被允许做的事。此外，他有个坏习惯——每次版本迭代之后，只要在某个细枝末节的测试中有任何不稳定，就要来指责我，尽管测试本来就是我们有 beta 测试团队的原因。不用说，这不是一个好的工作环境，但我仍然喜欢 SA:MP 这个产品本身。"</span></blockquote>
<br />
在这种压抑的工作环境中，Y<span style="font-style: italic;" class="mycode_i">Less 于 <span style="font-weight: bold;" class="mycode_b">2007 年</span> 开始独立开发 <span style="font-weight: bold;" class="mycode_b">YSI（Y</span>Less' Server/Script Includes）</span>。<br />
<br />
YSI 最初是他此前若干工具的整合与升级，同时也是他在 Kalcor 的管控边界之外，以纯 Pawn 脚本的方式，实现他认为 SA:MP 脚本系统应当具备的扩展能力。他在这个过程中也加入了一些辅助性的函数，例如 player objects 功能，最初是专门为了支撑他的对象流式传输器 <code style="background:#f0f0f0;border:1px solid #ddd;padding:1px 5px;border-radius:3px;font-family:Consolas,monospace;font-size:0.9em;">e_objects</code> 而写的。<br />
<br />
用 Y_Less 自己的话说：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"2007 年，我开始开发 YSI。这部分是对若干早期工具的更新与整合，部分也是在 Kye 的控制之外，以 Pawn 能力范围内的方式带来我认为 Pawn 所需的扩展功能——尽管以纯 Pawn 来做，能实现的事情自然有其上限。YSI 成为我的主要项目这一事实惹恼了 Kye，因为他认为这说明我没有把时间花在 SA:MP 上，尽管我实际上一直都在。"</span></blockquote>
<br />
YSI 涵盖了命令处理（y<span style="font-style: italic;" class="mycode_i">commands）、玩家迭代器（y</span>iterate）、钩子机制（y<span style="font-style: italic;" class="mycode_i">hooks）、INI 文件读写（y</span>ini）、多语言支持（y_languages）等数十个子模块，是当时 SA:MP 社区功能最全面、使用最广泛的第三方脚本库。<br />
<br />
至于"YSI"到底代表什么，连 Y_Less 本人也说不清：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"最初的想法是'Y[i]Less' Server Includes'，但 Server 和 Script 经常被混用，而且现在参与的开发者不止 Y</span>Less 一人，所以'Y'就变成了一个递归缩写，代表'YSI'本身。"[/i]</blockquote>
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第六章　2008 年底：GTANet 风波与团队大出走</h4><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2008 年底</span>，SA:MP 开发团队内部爆发了一场与 GTANet 社区相关的严重矛盾。关于这场风波的具体细节，现有的公开资料已难以完整还原，但其结果是清晰且影响深远的：<span style="font-weight: bold;" class="mycode_b">Mike、aru 和 Peter</span> 等多名核心开发者相继以此为由宣布离队。<br />
<br />
Y_Less 在日后的声明中这样描述这段经历：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"2008 年底，GTANet 风波爆发，Mike、aru 和 Peter 因此离开，我也因为团队氛围实在太差，加之大家都在走，便也一同离开了。"</span></blockquote>
<br />
这一波出走之后，SA:MP 的开发工作几乎完全落回 Kalcor 一人肩上，这进一步强化了整个项目对他个人的高度依赖，也使得社区的任何集体意见都更加难以产生实质影响。<br />
<br />
然而事情并未就此平息。Y_Less 出走后，出于他自己也说不清的原因，重新回归了团队。他在后来的声明中写道：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"不知为何，真的记不清了，我之后又重新加入了团队。那时候 Kye 想要关闭 SA:MP，我提出愿意接手，他拒绝了。然后我再次退出——不是因为我没接手到，这一点需要说明——于是 Kye 决定封禁我的论坛账号，而且不只是封号，而是彻底抹除——删掉了我所有的帖子。这意味着原版《实用函数》帖没了，旧版 FAQ 帖没了，大量迷你教程没了，《Pawn 关键词》帖也没了——我只有在非常必要的时候才发帖，那些帖子都有其存在的价值，它们的消失被大量用户注意到并提出了强烈抗议。"</span></blockquote>
<br />
这便是 2008 年底那次"第一次封号"事件的始末——相对低调，但已经是一个信号。真正震动整个社区的风波，还在后面。<br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第七章　2009 年 1 月：YSF 封号事件</h4><br />
<br />
从团队再度离开之后，Y<span style="font-style: italic;" class="mycode_i">Less 没有停止为社区创作工具。他开发了 <span style="font-weight: bold;" class="mycode_b">YSF（Y</span>Less' Server Fixes）</span>——一个以服务端插件形式存在的 bug 修复集合。<br />
<br />
YSF 的设计理念很简单：SA:MP 有很多 Kalcor 长期忽略或拒绝修复的 bug，既然拿不到源代码，那就通过内存操作（memory patching）的方式，在运行时强行修正这些行为。这个方法技术上相当复杂，但效果立竿见影。<br />
<br />
Y_Less 事后这样形容 YSF：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"YSF 是我最成功的项目，因为它做到了所有人都想要的事。它本质上是一个更新版的服务端——人们总是渴望新版本带来修复和新功能，功能方面已经有其他插件（包括 YSI 插件）覆盖了，所以我选择了修复这条路（以及一些小功能——显然正是这些小功能引发了麻烦）。"</span></blockquote>
<br />
YSF 在社区中广泛流传，大量服务器安装并使用它。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">2009 年 1 月 19 日</span>，事件的直接导火索被点燃。<br />
<br />
当天，Kalcor 私信给 Y_Less，表达了对 YSF 的不满。他的顾虑有两项：<br />
<br />
第一，他认为 YSF 可能与 SA:MP 未来版本产生脚本兼容性问题；第二，他认为 YSF 代码中存在与 SA:MP 服务端源代码相似的内容，以 <code style="background:#f0f0f0;border:1px solid #ddd;padding:1px 5px;border-radius:3px;font-family:Consolas,monospace;font-size:0.9em;">functions.cpp</code> 中的 <code style="background:#f0f0f0;border:1px solid #ddd;padding:1px 5px;border-radius:3px;font-family:Consolas,monospace;font-size:0.9em;">IsNickInvalid</code> 函数为例。<br />
<br />
Y_Less 对此逐一作出回应。关于兼容性问题，他指出 YSF 恰恰是在让脚本对未来版本<span style="font-weight: bold;" class="mycode_b">更加</span>兼容，而非相反；关于源代码问题，他坦言：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"这实际上并非盗用，但我承认看起来非常相似，因为它做的事情完全一样，而且也不是什么复杂的函数，我懒得争，就直接把它彻底重写了。"</span></blockquote>
<br />
他还顺带提到，Kalcor 自己曾主导过一些令他反对的修改决策——比如改变服务端的默认运行风格，以及在 0.3 版本中移除对象（最后改为以 IPL 文件形式替代，而非完全移除）——当初他的反对意见被 Kalcor 直接否决。<br />
<br />
双方讨论的最终结果，表面上是达成了共识：Kalcor 表示接受了 Y_Less 的解释，YSF 可以继续存在。<br />
<br />
然而，Y_Less 第二天登录论坛，发现自己已经被封号。<br />
<br />
他在后来的声明中还原了这段过程：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"就在我们讨论同意 YSF 可以继续存在，之后，他发现了 SetServerRule，并意识到它可以用来修改只读控制台变量——比如服务器版本号——从而让人们能够违反 SA:MP 服务条款第（g）条：'你不得人为地增加玩家数量，或向 SA:MP 查询机制提供虚假信息。'"</span></blockquote>
<br />
Kalcor 认为，Y_Less 在 YSF 中提供了这样一个功能，就等同于为违规行为提供了手段，因此必须承担责任。<br />
<br />
封号通知的原文如下（Y_Less 在声明中直接引用）：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>*"抱歉 ssǝן‾ʎ，你已被禁止使用本论坛！  <br />
滥用前开发者身份。入侵服务器，并为他人违反服务条款提供手段。"*</blockquote>
<br />
封号的同时，Kalcor 再次<span style="font-weight: bold;" class="mycode_b">删除了 Y_Less 在 SA:MP 官方论坛上的全部历史帖子</span>。大量教程、工具发布帖、FAQ 就此永久消失，众多用户注意到这些帖子的蒸发，并提出了强烈抗议。<br />
<br />
Y_Less 随即在社区发布了一篇完整声明，以下是他原文的核心段落：<br />
<br />
<hr class="mycode_hr" />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"基本上，我因为 YSF 被 SA:MP 官方论坛封号了！</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">历史：</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">200x 年（实在记不清了），在与 Spookie 讨论之后，我以 beta 测试员的身份加入了 SA:MP 团队——那还是第一次公开 beta 之前的事——并开始编写 Pawn 相关的代码。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">没过多久，我正式加入了开发团队，专注于 Pawn 的开发，但我很快发现自己受到 Kye 的诸多限制，做不了想做的事。我们之间存在重大分歧：他认为 90% 的开发精力应该用于同步（sync），Pawn 只是顺手提供一点额外功能的附属品；而我认为，虽然同步很重要，但他已经把同步做得很好了，我更想把时间花在 Pawn 的功能扩展上。然而他是老板，说了算，严重限制了我能做的事。更让人受不了的是，他有个习惯——每次版本迭代后，只要在某个犄角旮旯的测试里出了任何小问题，就要来责怪我，哪怕我们有 beta 测试团队本来就是为了发现这些问题的。说实话那不是一个好的工作环境，但我还是喜欢 SA:MP 这个产品本身。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2007 年，我开始开发 YSI。这一方面是对此前一批旧项目的整合升级，另一方面也是想在 Kye 的管控之外，以纯 Pawn 脚本的方式实现我认为 Pawn 所需要的扩展功能——尽管能做到的事情有限，毕竟纯 Pawn 本身有其局限（我确实额外添加了一些辅助函数，比如 player objects 功能完全是为了写我最初的对象流式传输器 e\_objects 而专门实现的）。YSI 成为我的主要项目这件事惹恼了 Kye，因为他觉得我没有把时间花在 SA:MP 上——尽管我实际上一直都在。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2008 年底，GTANet 社区风波爆发，Mike、aru 和 Peter 因此离队。我也因为团队氛围实在太差，加上大家都在走，便也跟着离开了。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">不知为何（真的记不清了），我之后又重新回归了团队。那时候 Kye 想要关闭 SA:MP，我主动提出愿意接手，他拒绝了。然后我再次退出——不是因为没接手到，这一点需要说清楚——于是 Kye 决定封禁我的论坛账号，而且不只是封号，而是彻底抹除，删掉了我所有的帖子。这意味着原版《实用函数》帖没了，旧版 FAQ 帖没了，大量迷你教程没了，《Pawn 关键词》帖也没了——我只有在非常必要的时候才会发帖，那些帖子都有其价值，它们的消失被大量用户注意到并提出了抗议。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">不管怎样，我还是喜欢 SA:MP 和这个社区本身（至少喜欢其中的一部分），所以我还是留了下来（现在回想起来真不知道当时为什么，深感后悔），并继续努力让 SA:MP 变得更好——尽管 Kye 的存在让这件事很难。我继续开发 YSI、写教程和帮助帖，后来又创作了 YSF。YSF 大概是我最成功的项目了，因为它做到了所有人都想要的事。它本质上就是一个改进版的服务端——人们总是渴望新版本带来修复和新功能，功能方面已经有其他插件（包括 YSI 插件）覆盖了，所以我选择了专注于修复这条路（以及一些小功能——显然正是这些小功能引发了这次麻烦）。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">总之，Kye 和我一般都各自行事、互不干扰（至少我是这么以为的），有一段时间相安无事。直到 2009 年 1 月 19 日，我收到了 Kye 的消息，说他不太喜欢我在 YSF 里做的事。经过一番交涉，才明白他的顾虑在于：YSF 可能与未来版本的脚本产生兼容性问题（这话从他嘴里说出来真是讽刺——我当初就反对过他把默认运行方式改掉，以及 0.3 版本里删除对象的决定，但他否决了我；对象最后是改成了 IPL 文件的形式，而非完全删除，但也没有了 per-player objects，至少我最后听到的消息是这样）。此外，他还质疑 YSF 里有 SA:MP 服务端的源代码——他举的例子是 functions.cpp 里的 IsNickInvalid 函数。这个函数其实不是照抄的，但我承认看起来确实很像，毕竟它做的事完全一样，而且也不是什么复杂的函数，我懒得争，就直接把它彻底重写了。在我指出 YSF 并不会造成兼容性问题（恰恰相反，它让脚本对未来版本的兼容性更好），并同意日后不再使用 SA:MP 源代码（尽管我此前一直在刻意避免这样做）之后，他让步了。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">第二天我上论坛，发现自己已经被封了……</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">原来在我们达成共识之后，他又发现了 SetServerRule 这个功能，意识到它可以用来修改只读控制台变量（比如服务器版本号），从而让人能够违反 SA:MP 服务条款第（g）条：'你不得人为地增加玩家数量，或向 SA:MP 查询机制提供虚假信息。'</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">我解释说，我本人根本没有这样做，这个功能的设计初衷是好的，只是不幸被人滥用了。我甚至想过反问他：他提供论坛和 IRC 频道，同样也给人们提供了违反条款（c）（d）条的方式，按他的逻辑，他也应该被封号——但我懒得说了。封号通知的原文是：</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">'抱歉 ssǝן‾ʎ，你已被禁止使用本论坛！滥用前开发者身份。入侵服务器，并为他人违反服务条款提供手段。'</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">所谓'滥用'，是指我用它改善了所有人的游戏体验；所谓'入侵服务器'，是指我修复了它；所谓'提供手段'，意思是人们可以拿我提供的工具做坏事——但这不代表我支持或认可这种行为，这只是一个有用工具所带来的无奈副作用。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">Kye 说 YSF 的事已经覆水难收，他只能发布新版本来屏蔽它，伤害已经造成，它已经广泛传播，人们正在用它黑自己的服务器，没有人能阻止，所以我必须被封。我回应说，如果我没被封，我本来可以发布最新版本，在修复拾取物 bug 的同时，加入对规则的只读标志检查——虽然这无法彻底解决问题，但能大幅减少滥用，因为几乎没有人会主动把它改回旧方式，大多数人会为了这个重要修复而升级。说到这里，他就不再回复我了（我觉得他是意识到自己断掉了快速、高效解决这件事的唯一合理途径，然后不想认账了——如果不是这样，我欢迎他来回应）。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">总之，我决定把当时正在写的那段代码（YSI 的示例脚本）收个尾，毕竟我还是喜欢使用 YSI 的那些人，上传最终版本，然后就此结束。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">所以，截至目前：YSI 1.0、YSF 1.0、YSI2 1.0、YPI 1.0，到此为止，我不干了。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">附言：Kye 正在研究一种过滤"修改版本服务端"并将其列入黑名单的机制——我可能会发布一个不自动修改版本号的 YSF 版本，这样用它的人就不会因为我的失误被连坐；请留意这里的动态（我可能也会顺带加入拾取物修复，但不会保留只读变量相关的功能）。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">附言二：IRC 才是王道，我还活跃在 GTANet 的大量频道里，包括 #YSI 和 #Y_Less，欢迎来找我。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">附言三：不知道 MTA 的源代码长什么样……</span>"</blockquote>
<br />
——Y_Less，2009年1月，TMS Forums<br />
<br />
<hr class="mycode_hr" />
<br />
这篇声明在社区引发了强烈反响。数日后，经社区压力，Y_Less 得以解封，YSF 在不修改只读变量的前提下被允许继续使用。从表面上看，风波平息了。<br />
<br />
但那句"附言三"——"不知道 MTA 的源代码长什么样"——如今读来，已不再只是一句无心之语。<br />
<br />
<hr class="mycode_hr" />
<br />
<h3 style="font-size:1.4em;font-weight:bold;border-bottom:1px solid #ddd;padding-bottom:4px;margin:16px 0 8px;">第三卷：停滞、管控与分歧（2014–2019）</h3><br />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第八章　0.3.7 之后的沉寂（含源码泄漏事件）</h4><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2015 年 5 月 1 日</span>，SA:MP <span style="font-weight: bold;" class="mycode_b">0.3.7</span> 发布。此后，Kalcor 在新功能层面的开发近乎陷入停滞。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2018 年前后</span>，Kalcor 发布了 <span style="font-weight: bold;" class="mycode_b">SA-MP 0.3.DL</span>——一个支持服务端向玩家客户端推送自定义模型（Download Content）的版本。这是社区长期以来最渴望的功能之一，玩家们可以在 SA:MP 服务器上看到服务器自定义的车辆、皮肤、物件模型，而不再局限于原版游戏资产。<br />
<br />
然而 0.3.DL 的推出并不顺利：安全问题（恶意服务器可能推送损坏的模型文件危害客户端）和与旧版 0.3.7 的兼容性问题，使得相当一部分服务器拒绝迁移。SA:MP 社区自此一分为二，0.3.7 阵营与 0.3.DL 阵营长期并存。<br />
<br />
这种分裂令社区感到困惑与沮丧。有人多次在论坛呼吁将两个版本合并，但得不到任何回应。<br />
<br />
<hr class="mycode_hr" />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">源码泄漏事件（2010 年起源，2018 年爆发）</h4><br />
<br />
在 0.3.DL 引发社区分裂的同一时期，另一条隐患也终于浮出水面。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2018 年 11 月 15 日</span>，SA:MP 官方论坛上出现了一篇由用户 Kshishtof 发起的帖子，标题是《SA-MP 源代码泄漏》。帖子指向一个名为 <span style="font-weight: bold;" class="mycode_b">rw-mp.net</span> 的项目，该项目被认为是基于泄漏的 SA:MP 源代码构建的独立多人联机分支。<br />
<br />
帖子引发了社区的激烈讨论。一部分人对 rw-mp 持同情甚至欣赏的态度，认为它至少在做 SA:MP 不再愿意做的事；另一部分人则斥之为对原作的窃取与侮辱。<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2018 年 11 月 16 日</span>，Kalcor 亲自在帖子中出现，发表了两段回应。第一段揭示了这批泄漏源码的来历：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"SA:MP 的源代码于 2010 年被一名法国人从我们的服务器上黑掉，目的是为 IV:MP 这个 mod 服务。我记录并上报了这次入侵。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">GitHub 上大约有十个副本。我一直没有把它们下架，是因为提交 DMCA 申诉需要将我的真实姓名录入 GitHub 的公开 DMCA 数据库，否则就得花钱请律师。"</span></blockquote>
<br />
第二段话语气更为强硬，是一封事实上的法律警告：<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">"0.2.5 的源代码是通过计算机入侵从我们的服务器上盗取的。任何基于该代码发布软件的人，都涉嫌与我们作对的刑事共谋。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">SA:MP 所使用的 RakNet 版本并非开源，而是通过付费许可证使用的。BASS 音频库同样是付费许可证使用的。整个游戏 mod 社区正在被那些删除原始版权信息、将他人成果冒充自己作品重新发布的蠢货所伤害。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">我给他们几天时间关闭并停止任何与 SA:MP 相关的活动。"</span></blockquote>
<br />
——Kalcor，SA:MP 官方论坛，2018 年 11 月 16 日 原帖：https://sampforum.blast.hk/showthread.php?tid=660866<br />
<br />
这段声明揭示了几个此前从未公开过的重要事实：<br />
<br />
其一，SA:MP 源码泄漏的根源远早于 2018 年——<span style="font-weight: bold;" class="mycode_b">2010 年</span>就已经发生了一次有据可查的服务器入侵事件，是一名法国黑客为了支持 IV:MP（GTA IV 的多人 mod）而实施的。这与 Kalcor 在 2019 年 pawn.wiki 文章中所说的"R* 给 MTA 的代码被用于攻击 SA:MP"形成了完整的脉络——他所遭受的代码安全威胁，来自不止一个方向。<br />
<br />
其二，Kalcor 之所以始终不对 GitHub 上的泄漏副本提交 DMCA，并非不知情或不在意，而是出于一个极具讽刺意味的现实顾虑：提交 DMCA 需要将他的真实姓名公开录入数据库，而他不愿意这样做。源码在网上流传的同时，他本人却因为隐私顾虑而放任不管。<br />
<br />
这次事件在社区中引发了新一轮关于"Kalcor 应不应该直接将 SA:MP 开源"的讨论。部分社区成员认为，既然源码已经通过非法途径广泛流传，不如主动开源，至少可以让社区以合法的方式参与改进。这个声音 Kalcor 听到了，但他的答案，在两年后的 pawn.wiki 那篇文章里已经说得很清楚。<br />
<br />
<hr class="mycode_hr" />
<br />
<h4 style="font-size:1.15em;font-weight:bold;margin:12px 0 6px;">第九章  Kalcor 眼中的历史：MTA 的旧账、R\* 的源码，与闭源的真实理由</h4><br />
<br />
编年史至此已经写了许多关于 Kalcor 的事——他的决策、他的封号、他的沉默——却始终没有给他一个真正完整的出场。他是从哪里来的？他为什么那样做？他拒绝开源的理由究竟是什么？<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2019 年 10 月 25 日</span>，就在 Kalcor 于 SA:MP 官方论坛发布某条帖子后不久，俄语 Pawn 开发者社区 pawn.wiki 上出现了一篇由用户 <span style="font-weight: bold;" class="mycode_b">m1n1vv</span> 整理、转述并翻译的长文，标题是《SA-MP 0.3.9 与 Kalcor 的新故事》。这篇文章完整记录了 Kalcor 这篇帖子的核心内容——那是迄今为止他对自己技术履历与闭源立场最完整、最直接的一次亲口陈述。<br />
<br />
以下是 Kalcor 在那篇帖子中所说的全部内容，经 m1n1vv 翻译并整理，原文以俄文发布于 pawn.wiki：<br />
<br />
<hr class="mycode_hr" />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite><span style="font-style: italic;" class="mycode_i">那么，请允许我给你们讲一段历史。结论由你们自己得出。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2003 年，在 MTA 的 IRC 频道上待了一周之后，我被邀请加入 MTA:VC（Vice City Multiplayer）的开发。几个月后，我晋升为 MTA 的首席开发者。以下是一张截图，记录了我和 Si|ent 一起尝试让 MTA:VC 中的船只同步正常工作的画面，日期是 2003年12月31日。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">我是 MTA:Blue 的少数开发者之一——这是 MTA 针对罪恶都市的新版本。那时候除我之外，大多数人都被现实生活拖住了。我开发了玩家上下文切换同步系统，并引入了 RakNet 库。同样的系统至今仍被 SA-MP 和 MTA:SA 所使用。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">这种处境让我感到沮丧——一周又一周过去，只有我一个人在提交代码，而论坛上却有一堆"开发者"在大谈特谈一切将会如何运作。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">于是我离开了 MTA 的开发。在我离开期间，另一个叫 eAi 的人加入了项目，开始研究我的代码，试图弄清楚它是怎么工作的。至少有人在做事了——他的方式是去主动联系各方，于是他通过 ICQ 找到了我，还找到了 R</span>（Rockstar Games）开发者的电子邮件地址，并与他们取得了联系。*<br />
<br />
<span style="font-style: italic;" class="mycode_i">那时候我对 GTA 多人联机并不感兴趣。我有一个乐队，还参与了 ipodlinux 等项目，但 eAi 似乎非常热衷于推动 MTA:Blue 取得进展。于是我重新加入了项目，持续了几个月。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">以下是 2004年底 MTA:Blue 的公开宣传页面存档。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">正是这件事导致了我和 MTA 其他开发者之间的决裂：我想要构建一个服务端系统——就像 VC-MP 的 ini 脚本系统，以及 SA-MP 中基于 Pawn 脚本的服务端系统；而 MTA 的开发者们则想要客户端扩展，就像那个宣传页面上描述的那样。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">2005年初，我再次离开了 MTA。就在那段时间，R</span> North 在 PS2 上发布了 GTA:SA，并正在开发 PC 版本。eAi 与 R<span style="font-style: italic;" class="mycode_i"> 的技术总监有联系，还通过 ICQ 向我炫耀说，他拿到了大量 GTA:SA 源代码的头文件。我注意到，MTA 的开发者们似乎打算放弃罪恶都市版的 MTA:Blue，转战 GTA:SA。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">不相信 MTA 及其开发能力，2005年中，我开始独立开发自己的多人联机。我发布了 VC-MP，基于玩家上下文切换和 RakNet。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">随后，我与 jax、spooky 以及其他一些人一起开发了 SA-MP。它远比之前的 mod 庞大得多。我们与 GTANet/GTAForums——最大的 GTA 非官方粉丝站——有着较为密切的联系，这使我们获得了更大的知名度。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">到 2008 年，SA-MP 的玩家数量是 MTA 的 10 到 20 倍。MTA 的开发者们感到在这种竞争环境下已无法与之抗衡，于是他们公开了自己的源代码。MTA 的开发者们从未询问过我或任何前任开发者，是否可以公开这些源代码。他们声称所有东西都已经被重写了，但事实并非完全如此。时至今日，MTA:SA 中仍然有我的代码。我没有费心去追究他们，因为他们看起来太蠢了——但我猜，这里那些呼吁公开 SA-MP 源代码的人，很可能是受到了 MTA 的启发，尽管他们或许不应该这样。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">而这就是现在正在发生的事：我为 MTA 开发的"游戏"代码，以及 R\</span> 给 MTA 的源代码，正在被移植进 mod\<span style="font-style: italic;" class="mycode_i">so\</span>beit——一款流行的 SA-MP 外挂工具。*<br />
<br />
<span style="font-style: italic;" class="mycode_i">你们知道这意味着什么吗？R\</span> 给 MTA 的那部分源代码，有相当大一部分被用来——攻击 SA-MP！*<br />
<br />
<span style="font-style: italic;" class="mycode_i">从一小批相当专业的 MTA 开发者起步，这件事已经演变成了极度肮脏的东西。那些想要摧毁 SA-MP 的人，对于是否违法毫不在意。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">看起来，任何被公开的源代码都可能被用来攻击 SA-MP——尽管它本可以被用于提供有价值的更新。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">公开 SA-MP 源代码这个决定，归根结底取决于：我们是否仍然处于这种充满敌意的环境中——人们在攻击我、想要攻击 SA-MP——还是这一切已经成为过去。我想说，这取决于 mod 的规模以及对外挂工具的需求程度。封闭源代码让我可以在每次发布时重新洗牌所有内部结构，使大量外挂工具失效。SA-MP 的许多"安全"更新，实质上就是我在重新排列数据，以清除现有的外挂工具。</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">最终，SA-MP 将会走到这样一个时刻：所有人都彼此友善和尊重，外挂与欺诈变得罕见——但届时玩家数量将极为稀少，我们中的大多数人也已不在了。</span></blockquote>
<br />
——Kalcor，2019年10月，SA:MP 官方论坛<br />
（由 m1n1vv 转述并整理，经 Типичный Скриптер 译为俄文，发布于 pawn.wiki，2019年10月25日）<br />
<br />
<hr class="mycode_hr" />
<br />
这篇陈述，是理解 Kalcor 其人与其决策的关键文献。<br />
<br />
它第一次完整地揭示了他的来历：他不是凭空出现的 SA:MP 创始人，而是一个从 MTA 内部出走的人。<span style="font-weight: bold;" class="mycode_b">2003 年至 2005 年间，他在 MTA 团队中担任首席开发者</span>，亲手构建了玩家同步系统与 RakNet 架构——而他愤而离开，正是因为他坚持的"服务端脚本系统"方向遭到其他成员的反对。SA:MP 的诞生，某种程度上是一次对 MTA 的报复性创业。<br />
<br />
它也第一次给出了 Kalcor 拒绝开源的真实逻辑：他不是在藏私，也不是单纯的控制欲作祟——在他看来，<span style="font-weight: bold;" class="mycode_b">闭源是他对抗外挂工具的核心武器</span>。他承认 SA:MP 的许多所谓"安全更新"，实质只是重新排列内部数据结构，使依赖固定内存地址的外挂工具在新版本中失效。一旦开源，这条防线便彻底坍塌。<br />
<br />
而他与 MTA 之间的积怨，在这篇文章里也首次有了完整呈现：他认为 MTA 在开源自己的代码库时，从未征得他这位最初作者的同意；更令他愤怒的是，他随后发现，R\* 曾向 MTA 提供的部分 GTA:SA 源代码头文件，辗转流入了 SA:MP 外挂工具的制作者手中——成为攻击 SA:MP 的武器。这份偏执与防御，贯穿了他此后对待社区和开源请求的所有态度。<br />
<br />
这篇发布于 2019 年 10 月的文章，距 Kalcor 宣告放弃 SA:MP 仅剩不到一个月。这是他在离开之前，最后一次试图解释自己。<br />
<br />
<hr class="mycode_hr" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[考古] openmp 常见问题解答 | 2020年4月]]></title>
			<link>https://open-mp.cn/showthread.php?tid=29</link>
			<pubDate>Tue, 24 Mar 2026 16:55:00 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://open-mp.cn/member.php?action=profile&uid=3">小鸟unsigned</a>]]></dc:creator>
			<guid isPermaLink="false">https://open-mp.cn/showthread.php?tid=29</guid>
			<description><![CDATA[<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">GTA SA 和 SA:MP 中的漏洞会被修复吗？</span><br />
<br />
会的！<br />
你也可以向我们反馈我们尚未知晓的 bug：github.com/openmultiplayer/samp-bugs/<br />
或在论坛提交：burgershot.gg/showthread.php?tid=99<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 会支持哪些 SA:MP 版本？包括 0.3DL 吗？</span><br />
<br />
我们不会支持 0.3.7 以下的版本，但你可以自行实现（这正是开源的魅力所在）。<br />
如果大多数服务器都尝试使用 0.3DL，我们会跟进支持。我们也做过调查，多数人支持 0.3DL，所以这件事大概率会做，但不会出现在客户端的前几个版本中。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 客户端会有固定的更新周期吗？</span><br />
<br />
不会。固定周期需要一支流程成熟的大型团队，而我们目前是一支志愿者队伍。<br />
也许情况将来会有所改变，我们不敢打包票。代码开源之后，你们可以随时关注项目进展。我们会尽一切努力在版本更新之间保持与社区的沟通。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">我们可以提交新功能建议吗？</span><br />
<br />
我们非常欢迎社区参与，你可以在这里留下你的建议：burgershot.gg/forumdisplay.php?fid=42&amp;page=6<br />
<br />
当然，我们无法保证每个想法都会被采纳和实现。但由于代码是开源的，你随时可以自己动手实现。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">会有反作弊系统吗？</span><br />
<br />
会有。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 会继续使用 Pawn 吗？可以使用其他语言吗？</span><br />
<br />
所有的开发工作、测试和文档均以 Pawn 为基础完成。不过，我们提供了 C API，允许任何人在此之上实现其他语言的支持。<br />
<br />
我们也讨论过引入一些半官方的语言模块，但 Pawn 依然是主要且受官方支持的脚本语言。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">SA:MP 的插件能在 open.mp 中使用吗？</span><br />
<br />
"插件"这个词目前用来指代旧式插件——即那些为 SA-MP 编写的插件（例如 sscanf、MySQL 等）。open.mp 提供了加载这些现有插件的 API。<br />
<br />
我们对新式插件的称呼是"模块"——无论是外部插件还是内部代码，只要使用 open.mp 更新、更强大的 API，统称为模块。<br />
<br />
旧式插件仍然可以正常运行，并会持续得到支持，除非它们依赖内存黑客手段（例如 YSF），因为那类插件依赖特定的内存地址和数据结构，而这些在 open.mp 服务端上是完全不同的。不过，大多数老式内存黑客当初存在的意义，恰恰是为了补全一些功能——而这些功能将直接内置于 open.mp，所以那些插件本来也就用不着了。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">数据库功能只能用 SQLite，还是也可以用 MySQL？</span><br />
<br />
默认的数据库功能与以前一样，仍然是 SQLite。但如前所述，open.mp 提供了加载现有插件的 API，因此数据库方面无需在内部做任何改动——通过现有插件依然可以实现。<br />
<br />
第三方模块在 open.mp 中是完全受支持的"一等公民"——无论是回调还是原生函数，其可用性与内部代码完全一致，因此将功能放入外部模块不存在任何劣势。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">HUD、体力值、小游戏（台球、健身房等）、车辆选项、路线指示、SA:MP+ 功能等会有更多自定义选项吗？会支持更灵活的图形界面，而不是像 SA:MP 那样只能用有限的文字绘制吗？CEF 呢？这些内容会如何保障安全？</span><br />
<br />
关于这个话题我们收到了太多提问，请先去泡杯茶——这个回答会有点长。<br />
<br />
我们的开发团队里有 Hual（SA:MP+ 的作者），未来会带来什么，谁知道呢？?<br />
<br />
SA:MP 与 MTA 最本质的区别，其实在名字里就说得很清楚了——SA:MP 就是字面意思上的"圣安地列斯多人游戏"，是 GTA 圣安地列斯这款游戏的多人版本；而 MTA 则是一个架设在这个世界观之上、更偏向通用平台的存在。<br />
<br />
SA:MP 在加入新功能时，始终紧扣原版游戏的体验感，尽管走出框架并非不可能，但整体风格一直非常保守。<br />
<br />
我们之所以长期坚守 SA:MP，正是因为认同这种态度。但我们希望拥有更多一点的自由度（这也是我们另起炉灶的原因），同时又不想走得太远。我们会引入一些新功能，其中有些在原版游戏中并不存在，但我们仍然会审慎地权衡每个功能带来的影响。<br />
<br />
让对话框稍微宽一点，算是突破 GTA 正统边界的疯狂改动吗？大概不算。<br />
<br />
加入 CEF 是否走得太远了？是的，这不会发生。?‍♂️<br />
<br />
平衡点就在两者之间。<br />
<br />
话虽如此，玩家们向来能在有限的支持下迸发出令人惊叹的创造力，我们相信这一点不会改变。我们会始终鼓励玩家和开发者尽情发挥创意——这也是我们选择开源的原因之一，我们甚至会在这方面提供帮助，但这不会是我们的核心任务。<br />
<br />
我们最主要的顾虑集中在客户端层面。我们不希望服务器主可以向玩家分发任何具有潜在危害的内容。圣安地列斯本身并非为多人游戏或 mod 而设计，许多文件加载器对损坏或恶意文件缺乏防护——当初根本没有这方面的需求。这正是 SA:MP 在引入自定义模型时遇到的难题，对我们来说同样如此。<br />
<br />
每当我们要对游戏的某个部分进行自定义，都必须先确保对应的文件格式和加载器不存在可利用的漏洞。我们可以确认，模型和脚本已经出现过被攻击的案例，其他部分可能也已经被攻击，而一旦我们开始允许服务器上传任意文件，被攻击几乎是必然的。<br />
<br />
至于资源保护——坦率地说，这在根本上是无法实现的。要让客户端显示一个自定义模型，就必须把这个模型文件传给它。文件一旦传到客户端，它就在对方的电脑上了，对方拿它怎么做，我们管不了。有些方法可以让盗取变得麻烦一些，但没有哪种方法是绝对可靠的。网络上虽然存在 DRM、安全隔离区等手段，但要使用这些技术，就必须牺牲开源原则。可以参考一下 EME 标准以及 Firefox 中内嵌闭源二进制文件所引发的争议。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">NPC 会有更好的支持吗？</span><br />
<br />
这不是我们当前的优先事项，但从客户端角度来看，NPC 本质上与普通玩家没有区别。我们至少希望 open.mp 的 NPC 功能能够对标 FCNPC 插件的水平，这是未来版本中我们可以认真考虑的方向。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">你们说 open.mp 移除了所有限制——这具体是怎么实现的？它像 streamer 插件一样吗？</span><br />
<br />
原理类似，但与 streamer 相比集成度更高，因此我们同样可以对载具和玩家进行流式处理，并能以远超插件能力的方式操作本地 ID。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">玩家可以被附加到物体上吗？</span><br />
<br />
可以，我们已经实现了这个功能。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 完成 SA:MP 功能的复现之后，接下来会新增什么？</span><br />
<br />
我们很喜欢聊未来的计划——持续关注我们就好，你们会看到的。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">可以用 SA:MP 客户端连接 open.mp 服务器吗？</span><br />
<br />
SA:MP 是通过逆向工程对第三方程序进行交互的 mod，open.mp 也是如此，我们的法律立场与 SA:MP 完全相同。我们没有使用任何 SA:MP 的泄露源代码——这一点已经反复强调，代码开源之后，社区自然会看得清清楚楚。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">新版 open.mp 客户端最大的挑战是什么？</span><br />
<br />
把它写出来！<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">五年后，你们认为 open.mp 会是什么样子？</span><br />
<br />
不必担心这个，我们有很多长远的想法。?<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">五年后，你们认为 SA-MP 会是什么样子？</span><br />
<br />
那是 SA-MP 团队的事，不是我们该操心的——在这个问题上我们没有立场去猜测。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">你们有没有想过放弃 open.mp？</span><br />
<br />
有过，因为我们也是普通人。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">最后，也是被问得最多的问题：</span><br />
<span style="font-weight: bold;" class="mycode_b">我们什么时候才能看到 open.mp？</span><br />
<br />
等它准备好了。???<br />
<br />
<hr class="mycode_hr" />
<br />
祝大家接下来的一周愉快！<br />
<br />
带着满满的爱，<br />
open.mp 团队 ?]]></description>
			<content:encoded><![CDATA[<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">GTA SA 和 SA:MP 中的漏洞会被修复吗？</span><br />
<br />
会的！<br />
你也可以向我们反馈我们尚未知晓的 bug：github.com/openmultiplayer/samp-bugs/<br />
或在论坛提交：burgershot.gg/showthread.php?tid=99<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 会支持哪些 SA:MP 版本？包括 0.3DL 吗？</span><br />
<br />
我们不会支持 0.3.7 以下的版本，但你可以自行实现（这正是开源的魅力所在）。<br />
如果大多数服务器都尝试使用 0.3DL，我们会跟进支持。我们也做过调查，多数人支持 0.3DL，所以这件事大概率会做，但不会出现在客户端的前几个版本中。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 客户端会有固定的更新周期吗？</span><br />
<br />
不会。固定周期需要一支流程成熟的大型团队，而我们目前是一支志愿者队伍。<br />
也许情况将来会有所改变，我们不敢打包票。代码开源之后，你们可以随时关注项目进展。我们会尽一切努力在版本更新之间保持与社区的沟通。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">我们可以提交新功能建议吗？</span><br />
<br />
我们非常欢迎社区参与，你可以在这里留下你的建议：burgershot.gg/forumdisplay.php?fid=42&amp;page=6<br />
<br />
当然，我们无法保证每个想法都会被采纳和实现。但由于代码是开源的，你随时可以自己动手实现。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">会有反作弊系统吗？</span><br />
<br />
会有。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 会继续使用 Pawn 吗？可以使用其他语言吗？</span><br />
<br />
所有的开发工作、测试和文档均以 Pawn 为基础完成。不过，我们提供了 C API，允许任何人在此之上实现其他语言的支持。<br />
<br />
我们也讨论过引入一些半官方的语言模块，但 Pawn 依然是主要且受官方支持的脚本语言。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">SA:MP 的插件能在 open.mp 中使用吗？</span><br />
<br />
"插件"这个词目前用来指代旧式插件——即那些为 SA-MP 编写的插件（例如 sscanf、MySQL 等）。open.mp 提供了加载这些现有插件的 API。<br />
<br />
我们对新式插件的称呼是"模块"——无论是外部插件还是内部代码，只要使用 open.mp 更新、更强大的 API，统称为模块。<br />
<br />
旧式插件仍然可以正常运行，并会持续得到支持，除非它们依赖内存黑客手段（例如 YSF），因为那类插件依赖特定的内存地址和数据结构，而这些在 open.mp 服务端上是完全不同的。不过，大多数老式内存黑客当初存在的意义，恰恰是为了补全一些功能——而这些功能将直接内置于 open.mp，所以那些插件本来也就用不着了。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">数据库功能只能用 SQLite，还是也可以用 MySQL？</span><br />
<br />
默认的数据库功能与以前一样，仍然是 SQLite。但如前所述，open.mp 提供了加载现有插件的 API，因此数据库方面无需在内部做任何改动——通过现有插件依然可以实现。<br />
<br />
第三方模块在 open.mp 中是完全受支持的"一等公民"——无论是回调还是原生函数，其可用性与内部代码完全一致，因此将功能放入外部模块不存在任何劣势。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">HUD、体力值、小游戏（台球、健身房等）、车辆选项、路线指示、SA:MP+ 功能等会有更多自定义选项吗？会支持更灵活的图形界面，而不是像 SA:MP 那样只能用有限的文字绘制吗？CEF 呢？这些内容会如何保障安全？</span><br />
<br />
关于这个话题我们收到了太多提问，请先去泡杯茶——这个回答会有点长。<br />
<br />
我们的开发团队里有 Hual（SA:MP+ 的作者），未来会带来什么，谁知道呢？?<br />
<br />
SA:MP 与 MTA 最本质的区别，其实在名字里就说得很清楚了——SA:MP 就是字面意思上的"圣安地列斯多人游戏"，是 GTA 圣安地列斯这款游戏的多人版本；而 MTA 则是一个架设在这个世界观之上、更偏向通用平台的存在。<br />
<br />
SA:MP 在加入新功能时，始终紧扣原版游戏的体验感，尽管走出框架并非不可能，但整体风格一直非常保守。<br />
<br />
我们之所以长期坚守 SA:MP，正是因为认同这种态度。但我们希望拥有更多一点的自由度（这也是我们另起炉灶的原因），同时又不想走得太远。我们会引入一些新功能，其中有些在原版游戏中并不存在，但我们仍然会审慎地权衡每个功能带来的影响。<br />
<br />
让对话框稍微宽一点，算是突破 GTA 正统边界的疯狂改动吗？大概不算。<br />
<br />
加入 CEF 是否走得太远了？是的，这不会发生。?‍♂️<br />
<br />
平衡点就在两者之间。<br />
<br />
话虽如此，玩家们向来能在有限的支持下迸发出令人惊叹的创造力，我们相信这一点不会改变。我们会始终鼓励玩家和开发者尽情发挥创意——这也是我们选择开源的原因之一，我们甚至会在这方面提供帮助，但这不会是我们的核心任务。<br />
<br />
我们最主要的顾虑集中在客户端层面。我们不希望服务器主可以向玩家分发任何具有潜在危害的内容。圣安地列斯本身并非为多人游戏或 mod 而设计，许多文件加载器对损坏或恶意文件缺乏防护——当初根本没有这方面的需求。这正是 SA:MP 在引入自定义模型时遇到的难题，对我们来说同样如此。<br />
<br />
每当我们要对游戏的某个部分进行自定义，都必须先确保对应的文件格式和加载器不存在可利用的漏洞。我们可以确认，模型和脚本已经出现过被攻击的案例，其他部分可能也已经被攻击，而一旦我们开始允许服务器上传任意文件，被攻击几乎是必然的。<br />
<br />
至于资源保护——坦率地说，这在根本上是无法实现的。要让客户端显示一个自定义模型，就必须把这个模型文件传给它。文件一旦传到客户端，它就在对方的电脑上了，对方拿它怎么做，我们管不了。有些方法可以让盗取变得麻烦一些，但没有哪种方法是绝对可靠的。网络上虽然存在 DRM、安全隔离区等手段，但要使用这些技术，就必须牺牲开源原则。可以参考一下 EME 标准以及 Firefox 中内嵌闭源二进制文件所引发的争议。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">NPC 会有更好的支持吗？</span><br />
<br />
这不是我们当前的优先事项，但从客户端角度来看，NPC 本质上与普通玩家没有区别。我们至少希望 open.mp 的 NPC 功能能够对标 FCNPC 插件的水平，这是未来版本中我们可以认真考虑的方向。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">你们说 open.mp 移除了所有限制——这具体是怎么实现的？它像 streamer 插件一样吗？</span><br />
<br />
原理类似，但与 streamer 相比集成度更高，因此我们同样可以对载具和玩家进行流式处理，并能以远超插件能力的方式操作本地 ID。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">玩家可以被附加到物体上吗？</span><br />
<br />
可以，我们已经实现了这个功能。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">open.mp 完成 SA:MP 功能的复现之后，接下来会新增什么？</span><br />
<br />
我们很喜欢聊未来的计划——持续关注我们就好，你们会看到的。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">可以用 SA:MP 客户端连接 open.mp 服务器吗？</span><br />
<br />
SA:MP 是通过逆向工程对第三方程序进行交互的 mod，open.mp 也是如此，我们的法律立场与 SA:MP 完全相同。我们没有使用任何 SA:MP 的泄露源代码——这一点已经反复强调，代码开源之后，社区自然会看得清清楚楚。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">新版 open.mp 客户端最大的挑战是什么？</span><br />
<br />
把它写出来！<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">五年后，你们认为 open.mp 会是什么样子？</span><br />
<br />
不必担心这个，我们有很多长远的想法。?<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">五年后，你们认为 SA-MP 会是什么样子？</span><br />
<br />
那是 SA-MP 团队的事，不是我们该操心的——在这个问题上我们没有立场去猜测。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">你们有没有想过放弃 open.mp？</span><br />
<br />
有过，因为我们也是普通人。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">最后，也是被问得最多的问题：</span><br />
<span style="font-weight: bold;" class="mycode_b">我们什么时候才能看到 open.mp？</span><br />
<br />
等它准备好了。???<br />
<br />
<hr class="mycode_hr" />
<br />
祝大家接下来的一周愉快！<br />
<br />
带着满满的爱，<br />
open.mp 团队 ?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[考古]MTA 团队与 open.mp 团队早期就潜在合作可能性展开的公开对话 | 2019年5月]]></title>
			<link>https://open-mp.cn/showthread.php?tid=28</link>
			<pubDate>Tue, 24 Mar 2026 16:53:51 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://open-mp.cn/member.php?action=profile&uid=3">小鸟unsigned</a>]]></dc:creator>
			<guid isPermaLink="false">https://open-mp.cn/showthread.php?tid=28</guid>
			<description><![CDATA[<hr class="mycode_hr" />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Jusonex，MTA 团队代表：</span><br />
<br />
你好，<br />
<br />
在正式开始之前，先允许我做个自我介绍。我是 MTA 团队的成员，长期深度参与多人游戏模组的开发工作。本帖内容也已获得团队其他成员的认可。<br />
<br />
过去这几天，我们一直在默默关注 SA-MP 的近况，以及你们测试团队的动向。我们刻意等待了一段时间，让局势稍微平息，这也是我们迟迟没有表态的原因。<br />
<br />
在我们看来，眼下的局面对 MTA:SA 和 SA-MP 来说，恰恰是一次难得的相互靠拢的机会。我们理解你们对现状的不满，但我们认为，为《GTA 圣安地列斯》这款已有相当历史的游戏再从零搭建一个多人游戏项目，似乎并不是最明智的选择。我们对圣安地列斯的热爱，与你们一样深厚。尽管近来在线玩家数量基本保持稳定，但不可否认的是，吸引新玩家的难度正在与日俱增——尤其考虑到玩家群体结构的变化。<br />
<br />
因此，我们诚邀你们加入 MTA 社区。从技术层面来看，我们认为最务实的方案是实现从 SA-MP 到 MTA 的兼容层，这样也能帮助你们更快推进前期更新的发布。<br />
<br />
说几个数据：过去三年，我们发布了四个新版本，并持续推出大量迭代更新和反作弊升级；而 SA-MP 的最后一次官方发布，距今已超过四年（依据 sa-mp.com 官方数据）。<br />
<br />
除少数例外情况，MTA 在技术上已基本能够"模拟"SA-MP 的全部功能。我们相信，凭借你们作为资深开发者的经验，双方完全可以共同实现客户端兼容。<br />
<br />
此外，我们已有一个名为 <span style="font-weight: bold;" class="mycode_b">amx</span> 的资源（https://github.com/multitheftauto/mtasa-resources/tree/master/%5Bgamemodes%5D/%5Bamx%5D），可在 MTA 内部运行 Pawn 虚拟机。该资源目前版本较旧，可能需要重构，但核心功能依然可用。<br />
<br />
我们相信这将是一个对双方都有利的合作，也是两个社区难得的机遇——不仅能汇聚各自优秀的开发者和新鲜想法，还能为玩家带来真正丰富的游戏体验，甚至可能吸引新玩家（例如 MTA 的粉丝群体）加入，并催生一批概念全新的脚本功能。<br />
<br />
如果你们对潜在问题有任何顾虑，欢迎随时与我们深入探讨。<br />
<br />
谨致问候，代表 MTA 团队。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">JustMichael，论坛跟进者：</span><br />
<br />
我们需要在团队内部充分讨论之后，才能就该提案给出正式回应。这绝非一个小提案，我们需要时间消化并核实帖子中提及的所有信息。因此，请不要将这条回复理解为拒绝——我们绝对没有在拖延，会尽快给出正式答复。另外，请始终将 J0sh 的名字写作"J0sh……"。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Jusonex，MTA 团队代表：</span><br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>BloodMaster 写道：「SA-MP 保留了圣安地列斯原汁原味的氛围和外观，而 MTA 则是一个可以高度自定义的引擎——这正是 SA-MP 吸引更多玩家的根本原因。」</blockquote>
这个观点我之前也看到过几次，确实触及了一个重要方面。MTA 确实拥有某种"可自由改造的自定义引擎"，但我个人并不认为这是一个负面特质。毕竟，没有人强迫任何人把游戏做成与原版圣安地列斯截然不同的样子——这完全是开发者自己的选择。况且，随着功能的不断叠加，你们迟早也会面临类似的情况。<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>iReal Worlds 写道：「Lua……认真的吗？」</blockquote>
依我个人之见，Lua 是一门非常出色的多范式语言，同时支持命令式、面向对象乃至部分函数式编程风格。更重要的是，它在设计之初就以"嵌入其他应用程序"为核心目标，这在客户端脚本的安全执行方面具有显著优势，是其他语言难以比拟的。<br />
<br />
此外，我还想提一个近期由 MTA 社区打造的有趣项目：https://mta-slipe.com/。它本质上是将 C# 引入到 Lua 环境中。<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>michael@belgium 写道：「想象一下所有人都切换到 Lua……」</blockquote>
这并不是我的提议。我们谈论的是兼容性方案——让 SA-MP 的模组和插件（用 Pawn 编写）无需任何修改，即可直接在 MTA 中运行。如果 open.mp 的开发者计划支持更多脚本语言，我们也可以将 Pawn 作为 MTA 的附加语言引入（包括对 SA-MP API 脚本的支持）。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">MyU，open.mp 开发者：</span><br />
<br />
首先声明：以下内容纯属个人观点，与 open.mp 项目及团队立场无关。<br />
<br />
事实上，已经有一些人指出，MTA 和 SA-MP 本质上是两种完全不同的东西——确实如此，差异相当显著。MTA 走的是不断创新的路线，而 SA-MP 则始终"守着老传统"；正因为长期没有更新、也不理会社区的功能需求，才会是今天这个局面。<br />
<br />
我个人两款都玩过（MTA 是大约两三年前，当时 OOP Lua 刚加入不久，玩了一两个月）。玩了一段时间后，MTA 对我来说变得有些"吃不消"——那时候我的电脑配置比较低，加上遇到了一些 CEF 相关的问题，虽然我相信这些问题现在应该都已经解决了。<br />
<br />
SA-MP 相当"轻量"：一个压缩包、一个 samp.dll、一个启动器，再加一两个文件，就全了。而 MTA:SA 则捆绑了 CEF 文件、CGUI 文件、本地化文件等一大堆内容。我个人认为，把这两个多人游戏合并在一起是行不通的——它们太不一样了，目标也各不相同。SA-MP 里安装 mod 极其简单，丢进游戏文件夹就能用；MTA:SA 则更像是一个经过精心打磨、功能完整的多人游戏模组，但玩家有自己的偏好，这无可厚非。<br />
<br />
简单总结一下：<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">SA-MP</span> → 轻量、易上手，但在某些方面存在局限；<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">MTA:SA</span> → 体量较重，但功能全面，有时略显复杂，稳定性却强于 SA-MP（玩家们甚至会利用 MTA:SA 的崩溃报告来排查问题——这本身就说明很多问题）。<br />
</li>
</ul>
<br />
不过我认为，玩家并不希望社区就此一分为二、各走各的路。竞争本身，以及由此带来的优胜劣汰，对整体发展是有益的。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Jusonex，MTA 团队代表（回复 MyU）：</span><br />
<br />
性能问题在绝大多数情况下都源于脚本编写质量低下（尤其是客户端脚本写得糟糕）。"能力越大，责任越大"这句话在这里再合适不过了，虽然这听起来有点无奈。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Sasino97，open.mp 软件开发者：</span><br />
<br />
我认为加入 MTA 最大的好处，是可以直接接触到庞大的现有玩家群体，以及 MTA 客户端本身极为强大的功能上限。至于缺点嘛……他们的论坛实在是太丑了，抱歉直说。<br />
<br />
不过，我个人很认可 open.mp 这个项目的理念，所以我觉得两边（MTA 和 open.mp）还是应该作为独立项目，各自继续发展下去。<br />
<br />
<hr class="mycode_hr" />]]></description>
			<content:encoded><![CDATA[<hr class="mycode_hr" />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Jusonex，MTA 团队代表：</span><br />
<br />
你好，<br />
<br />
在正式开始之前，先允许我做个自我介绍。我是 MTA 团队的成员，长期深度参与多人游戏模组的开发工作。本帖内容也已获得团队其他成员的认可。<br />
<br />
过去这几天，我们一直在默默关注 SA-MP 的近况，以及你们测试团队的动向。我们刻意等待了一段时间，让局势稍微平息，这也是我们迟迟没有表态的原因。<br />
<br />
在我们看来，眼下的局面对 MTA:SA 和 SA-MP 来说，恰恰是一次难得的相互靠拢的机会。我们理解你们对现状的不满，但我们认为，为《GTA 圣安地列斯》这款已有相当历史的游戏再从零搭建一个多人游戏项目，似乎并不是最明智的选择。我们对圣安地列斯的热爱，与你们一样深厚。尽管近来在线玩家数量基本保持稳定，但不可否认的是，吸引新玩家的难度正在与日俱增——尤其考虑到玩家群体结构的变化。<br />
<br />
因此，我们诚邀你们加入 MTA 社区。从技术层面来看，我们认为最务实的方案是实现从 SA-MP 到 MTA 的兼容层，这样也能帮助你们更快推进前期更新的发布。<br />
<br />
说几个数据：过去三年，我们发布了四个新版本，并持续推出大量迭代更新和反作弊升级；而 SA-MP 的最后一次官方发布，距今已超过四年（依据 sa-mp.com 官方数据）。<br />
<br />
除少数例外情况，MTA 在技术上已基本能够"模拟"SA-MP 的全部功能。我们相信，凭借你们作为资深开发者的经验，双方完全可以共同实现客户端兼容。<br />
<br />
此外，我们已有一个名为 <span style="font-weight: bold;" class="mycode_b">amx</span> 的资源（https://github.com/multitheftauto/mtasa-resources/tree/master/%5Bgamemodes%5D/%5Bamx%5D），可在 MTA 内部运行 Pawn 虚拟机。该资源目前版本较旧，可能需要重构，但核心功能依然可用。<br />
<br />
我们相信这将是一个对双方都有利的合作，也是两个社区难得的机遇——不仅能汇聚各自优秀的开发者和新鲜想法，还能为玩家带来真正丰富的游戏体验，甚至可能吸引新玩家（例如 MTA 的粉丝群体）加入，并催生一批概念全新的脚本功能。<br />
<br />
如果你们对潜在问题有任何顾虑，欢迎随时与我们深入探讨。<br />
<br />
谨致问候，代表 MTA 团队。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">JustMichael，论坛跟进者：</span><br />
<br />
我们需要在团队内部充分讨论之后，才能就该提案给出正式回应。这绝非一个小提案，我们需要时间消化并核实帖子中提及的所有信息。因此，请不要将这条回复理解为拒绝——我们绝对没有在拖延，会尽快给出正式答复。另外，请始终将 J0sh 的名字写作"J0sh……"。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Jusonex，MTA 团队代表：</span><br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>BloodMaster 写道：「SA-MP 保留了圣安地列斯原汁原味的氛围和外观，而 MTA 则是一个可以高度自定义的引擎——这正是 SA-MP 吸引更多玩家的根本原因。」</blockquote>
这个观点我之前也看到过几次，确实触及了一个重要方面。MTA 确实拥有某种"可自由改造的自定义引擎"，但我个人并不认为这是一个负面特质。毕竟，没有人强迫任何人把游戏做成与原版圣安地列斯截然不同的样子——这完全是开发者自己的选择。况且，随着功能的不断叠加，你们迟早也会面临类似的情况。<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>iReal Worlds 写道：「Lua……认真的吗？」</blockquote>
依我个人之见，Lua 是一门非常出色的多范式语言，同时支持命令式、面向对象乃至部分函数式编程风格。更重要的是，它在设计之初就以"嵌入其他应用程序"为核心目标，这在客户端脚本的安全执行方面具有显著优势，是其他语言难以比拟的。<br />
<br />
此外，我还想提一个近期由 MTA 社区打造的有趣项目：https://mta-slipe.com/。它本质上是将 C# 引入到 Lua 环境中。<br />
<br />
<blockquote class="mycode_quote"><cite>引用:</cite>michael@belgium 写道：「想象一下所有人都切换到 Lua……」</blockquote>
这并不是我的提议。我们谈论的是兼容性方案——让 SA-MP 的模组和插件（用 Pawn 编写）无需任何修改，即可直接在 MTA 中运行。如果 open.mp 的开发者计划支持更多脚本语言，我们也可以将 Pawn 作为 MTA 的附加语言引入（包括对 SA-MP API 脚本的支持）。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">MyU，open.mp 开发者：</span><br />
<br />
首先声明：以下内容纯属个人观点，与 open.mp 项目及团队立场无关。<br />
<br />
事实上，已经有一些人指出，MTA 和 SA-MP 本质上是两种完全不同的东西——确实如此，差异相当显著。MTA 走的是不断创新的路线，而 SA-MP 则始终"守着老传统"；正因为长期没有更新、也不理会社区的功能需求，才会是今天这个局面。<br />
<br />
我个人两款都玩过（MTA 是大约两三年前，当时 OOP Lua 刚加入不久，玩了一两个月）。玩了一段时间后，MTA 对我来说变得有些"吃不消"——那时候我的电脑配置比较低，加上遇到了一些 CEF 相关的问题，虽然我相信这些问题现在应该都已经解决了。<br />
<br />
SA-MP 相当"轻量"：一个压缩包、一个 samp.dll、一个启动器，再加一两个文件，就全了。而 MTA:SA 则捆绑了 CEF 文件、CGUI 文件、本地化文件等一大堆内容。我个人认为，把这两个多人游戏合并在一起是行不通的——它们太不一样了，目标也各不相同。SA-MP 里安装 mod 极其简单，丢进游戏文件夹就能用；MTA:SA 则更像是一个经过精心打磨、功能完整的多人游戏模组，但玩家有自己的偏好，这无可厚非。<br />
<br />
简单总结一下：<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">SA-MP</span> → 轻量、易上手，但在某些方面存在局限；<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">MTA:SA</span> → 体量较重，但功能全面，有时略显复杂，稳定性却强于 SA-MP（玩家们甚至会利用 MTA:SA 的崩溃报告来排查问题——这本身就说明很多问题）。<br />
</li>
</ul>
<br />
不过我认为，玩家并不希望社区就此一分为二、各走各的路。竞争本身，以及由此带来的优胜劣汰，对整体发展是有益的。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Jusonex，MTA 团队代表（回复 MyU）：</span><br />
<br />
性能问题在绝大多数情况下都源于脚本编写质量低下（尤其是客户端脚本写得糟糕）。"能力越大，责任越大"这句话在这里再合适不过了，虽然这听起来有点无奈。<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Sasino97，open.mp 软件开发者：</span><br />
<br />
我认为加入 MTA 最大的好处，是可以直接接触到庞大的现有玩家群体，以及 MTA 客户端本身极为强大的功能上限。至于缺点嘛……他们的论坛实在是太丑了，抱歉直说。<br />
<br />
不过，我个人很认可 open.mp 这个项目的理念，所以我觉得两边（MTA 和 open.mp）还是应该作为独立项目，各自继续发展下去。<br />
<br />
<hr class="mycode_hr" />]]></content:encoded>
		</item>
	</channel>
</rss>