GTAMODX
圣安地列斯
圣安地列斯
229
圣安地列斯安卓版
圣安地列斯安卓版
24
罪恶都市
罪恶都市
687
罪恶都市安卓版
罪恶都市安卓版
177
GTA3
GTA3
122
GTA3安卓版
GTA3安卓版
52
查看所有游戏
专栏QQ群
动态
登录
GTAMODX

为游戏爱好者打造的模组分享社区。发现、创造、分享,让游戏世界无限可能。

支持

  • 关于我们
  • 帮助中心
  • 用户协议
  • 隐私政策

创作者

  • 创作中心
  • 上传规范
  • 开放平台

资源

  • 全部MOD
  • 游戏下载
  • 最新资讯

平台

  • 搜索模组
  • 社区动态
  • 网站地图
  • QQ群
  • 支持MODX

友情链接

bilibiliMikiGTAOL攻略资源网罪恶都市gta吧

© 2026 GTAMODX. All rights reserved.

隐私政策服务条款
如何在VCMP服务器中通过加入Mod理解资源管理?
教程

如何在VCMP服务器中通过加入Mod理解资源管理?

VEGETAZVEGETAZ 2026年6月27日 0 评论

VCMP极简开服教学:精彩的Mod

  • 作者:VEGETAZ

0.前置依赖

  • 引擎准备完毕
  • 基本的插件、脚本环境配置完毕
  • 初步理解VCMP的事件驱动环境
  • 初步理解VCMP的指令实现模式
  • 求知的好奇心和冷静的思考脑

1.基础认知

  • VCMP的首席开发者(VC:MP lead developer)maxorator,将其开发的一款mod管理工具MVL(Maxo's Vehicle Loader)内置到VCMP 0.4中,使得服主们得以很方便地管理Mod资源。
  • 在wiki中可查,自定义内容分为以下几种:
    1. Sprite(精灵图片)
    2. Maps(地图物体)
    3. Objects(单个物体)
    4. Weapons(武器)
    5. Vehicles(载具)
    6. Skins(皮肤)
    7. Sounds(音效)
    8. Map icons(地图图标)

2.内容介绍,组成,位置,命名,用法

2.1.Sprite 精灵图片

  • 作用:客户端脚本可使用GUI功能将该图片展示出来(GUISprite)。
  • 位置:放置在<服务器目录,即引擎所在位置>/store/sprites/下,如/store/sprites/Filename.png。
  • 用法:使用vcmp提供的api,GUISprite来创建图片并显示。

2.2. Maps 地图物体

  • 作用:使用已定义的物体(物体项目放置说明),生成到世界某位置上。
  • 位置:主要是xml文件,可和物体模型文件压缩包一起放置在其内的maps文件夹内,更推荐放置在/store/maps中,名称以_mem结尾可实现玩家客户端环境只加载进内存而不会存放到硬盘空间中,否则和其余Mod资源一起存在于%appdata%\VCMP\04beta\store目录下(该目录下以服务器ip+端口区分不同的服务器资源如本地服务器资源则在是%appdata%\VCMP\04beta\store\127.0.0.1-8192文件夹下)。
  • 组成:由事先在Objects中定义的外部物体Mod或者游戏原生的物体、位置、旋转信息组成xml文本,具体内容参考:
<?xml version="1.0" encoding="ASCII" ?>
<itemlist>
	<item model="6000" name="drugstoreint">
		<position x="-856.7597046" y="-79.71799469" z="12.73265266" />
		<rotation format="axisangle" x="0.0" y="0.0" z="0.0" angle="1.0" />
	</item>

	<item model="6001" name="drugstoreext">
		<position x="-856.3429565" y="-79.98773956" z="12.64423846" />
		<rotation format="axisangle" x="0.0" y="0.0" z="0.0" angle="1.0" />
	</item>
</itemlist>
  • 上述xml内容解析:
    • <?xml version="1.0" encoding="ASCII" ?>描述了该文件为xml;
    • 由<itemlist>标签开始至</itemlist>标签结束,表示其中的内容是物体项目列表;
    • <item>至</item>标签表示单个物体;
    • model="6000"表示使用模型id为0的外部物体,因为在MVL物体使用中,事先定义的0id需要加上偏移6000,这样才可区分是游戏原生的模型id还是游戏外的mod模型;
    • name对应的是该模型定义的名称;
    • position和rotation分别对应世界三维坐标和旋转;
  • 该xml内容对应单机中的ipl文本内容中的INST部分。

2.3. Objects

  • 作用:定义单个外部物体Mod,可被maps中xml使用,或在脚本中用CreateObject方法使用。
  • 组成:分为物体模型文件和xml信息文件。模型文件由dff模型、txd贴图、col碰撞组成,可以不需要碰撞。xml文本内容由id、类型标志、碰撞信息、贴图信息、模型信息和渲染距离组成(下方是内容示例)。必须打包为单个7z压缩包,名称以_unp结尾。其中xml文件可一起放置在压缩包内objects文件夹中,或可放置到外层的store目录下的objects中(推荐后者,统一管理)。
  • 用法:使用vcmp提供的api,CreateObject来创建物体到游戏世界内;该api可创建游戏原生的物体,也可创建额外添加的物体。
<?xml version="1.0" encoding="ASCII"?>
<objectlist>
	<object id="0">
		<flags value="0" />
		<collision path="drugstoreint.col" />
		<texture path="chem2.txd" />
		<model path="drugstoreint.dff" distance="350" />
	</object>
	<object id="1">
		<flags value="0" />
		<collision path="drugstoreext.col" />
		<texture path="chem.txd" />
		<model path="drugstoreext.dff" distance="350" />
	</object>
</objectlist>
  • 上述xml内容解析:
    • <?xml version="1.0" encoding="ASCII" ?>描述了该文件为xml;
    • 由<objectlist>标签开始至</objectlist>标签结束,表示其中的内容是物体列表;
    • <object>至</object>标签表示单个物体;
    • <object>标志中的属性id="0"表示定义该物体模型id为0,其他地方要使用该物体模型则需要将id加上偏移6000(最终用模型id 6000表示该物体);
    • <flag>标签表示类型标识,value属性才是flag的真实取值,vc中该类型取值可查gtamods的wiki
    • collision对应的是该模型对应的碰撞文件,path属性值是碰撞文件全名,若不存在碰撞,可写为<collision type="none"/>;
    • <texture>标签里对应贴图文件,path属性值是贴图文件全名;
    • <model>标签里对应模型文件,path属性值是模型文件全名,distance属性值是该模型的渲染距离(近距离物体应填小于300,因为在 GTA 3 和 Vice City 中,LOD 物体(绘制距离大于 300)的碰撞数据会被引擎忽略);
  • 该xml内容对应单机中的ide文本内容中的OBJS部分。

2.4. Weapons 武器

  • 作用:作为额外的武器供游戏内使用。

  • 组成:武器信息xml文件,图标文件(?选),动作文件(可选),模型文件(可选),贴图文件(可选),开镜图片(可选),枪声(可选)。打包为单个7z压缩包,放置/store/weapons下。

  • 压缩包命名规则:w<id>_s<slot>_l<weapon>_name.7z

    • <id>从100开始使用,用于游戏内确定到该武器mod。
    • <slot>武器槽位,从0到8用途分别是:
      • 0:帽子、空手、指环等;
      • 1:近身武器类,武士刀、电锯、锤子等;
      • 2:投掷武器类,手雷、燃烧瓶、催泪弹等;
      • 3:手枪类;
      • 4:散弹枪类;
      • 5:冲锋枪类;
      • 6:步枪类;
      • 7:机枪类,M60、RPG、加特林等;
      • 8:狙击枪类。
    • <weapon>对应原版的武器id,如6对应棒球棍。
  • 用法:使用vcmp提供的api,player.SetWeapon或者.GiveWeapon来设置玩家武器,亦或者在AddClass(创建可选角色用)中使用;游戏原生的武器在脚本代码中的使用方法,同样也适用于额外添加的武器。

  • 武器信息xml文件示例如下,具体各项内容可对应单机里的weapon.dat。

<?xml version="1.0" encoding="ASCII"?>
<weapon>
	<basic>
		<name>Pike</name>
		<logicalid>6</logicalid>
	</basic>

	<properties>
		<type>melee</type>
		<range>2.000000</range>
		<firerate>450</firerate>
		<reload>100</reload>
		<clipsize>1000</clipsize>
		<damage>21</damage>
		<speed>-1.000000</speed>
		<radius>0.800000</radius>
		<lifespan>-1.000000</lifespan>
		<spread>-1.000000</spread>
		<offset>
			<x>0.100000</x>
			<y>1.800000</y>
			<z>0.300000</z>
		</offset>
		<animgroup>baseball</animgroup>
		<animstart>5</animstart>
		<animend>20</animend>
		<animfire>16</animfire>
		<anim2start>3</anim2start>
		<anim2end>17</anim2end>
		<anim2fire>11</anim2fire>
		<animbreak>99</animbreak>
		<modelindex>-1</modelindex>
		<model2index>-1</model2index>
		<flags>00102000</flags>
		<weaponslot>1</weaponslot>
	</properties>
</weapon>

2.5. Vehicles 载具

  • 作用:作为额外的载具供游戏内使用。

  • 组成:载具信息xml文件,模型文件(必须),贴图文件(必须),碰撞文件(模型中不带碰撞时必须),动作文件(可选)。打包为单个7z压缩包,放置到store/vehicles下。

  • 压缩包命名规则:v<modelid>_t<vehicletype>p<maxpassengers><vehiclename>.7z

    • <modelid>是载具id,范围为6400-6499.。
    • <vehicletype>是载具类型,0代表汽车和飞机, 1代表摩托,2代表船。
    • <maxpassengers>是最大乘客数。vc里最大4个所以写多了也无用;同时也和模型本身有关。
    • <vehiclename>载具名称。
  • 用法:使用vcmp提供的api,CreateVehicle来创建载具;该api可创建游戏原生的载具,也可创建额外添加的载具。

  • 载具信息xml文件示例如下,具体各项内容可对应单机里的handling.cfg。

<?xml version="1.0" encoding="ASCII"?>
<vehicle>
    <basic>
        <type>bike</type>
        <name>PCJ 600</name>
        <anims>bikes</anims>
        <comprules>0</comprules>
        <extraflags>0000</extraflags>
        <wheelrotangle>16</wheelrotangle>
        <wheelscale>0.670000</wheelscale>
        <immunity>0</immunity>
    </basic>

    <aidata>
        <class>motorbike</class>
        <freq>10</freq>
        <level>7</level>
    </aidata>

    <colors>
        <carcol>13,13</carcol>
        <carcol>22,22</carcol>
        <carcol>35,35</carcol>
        <carcol>38,38</carcol>
        <carcol>2,2</carcol>
        <carcol>3,3</carcol>
        <carcol>48,48</carcol>
        <carcol>51,51</carcol>
    </colors>

    <audio>
        <enginefarsample>287</enginefarsample>
        <enginenearsample>23</enginenearsample>
        <hornsample>0</hornsample>
        <hornfreq>27000</hornfreq>
        <sirensample>0</sirensample>
        <sirenfreq>9600</sirenfreq>
        <doorsounds>1</doorsounds>
    </audio>

    <handling>
        <mass>500.000000</mass>
        <percentsubmerged>103</percentsubmerged>
        <steeringlock>35.000000</steeringlock>
        <seatoffset>0.300000</seatoffset>
        <damagemultiplier>0.150000</damagemultiplier>
        <value>10000</value>
        <flags>00010102</flags>

        <dimensions>
            <x>0.800000</x>
            <y>1.800000</y>
            <z>1.200000</z>
        </dimensions>

        <centreofmass>
            <x>0.000000</x>
            <y>0.050000</y>
            <z>-0.090000</z>
        </centreofmass>

        <traction>
            <multiplier>1.600000</multiplier>
            <loss>0.900000</loss>
            <bias>0.480000</bias>
        </traction>

        <transmission>
            <numofgears>5</numofgears>
            <maxspeed>190.000000</maxspeed>
            <acceleration>50.000000</acceleration>
            <drivetype>R</drivetype>
            <enginetype>P</enginetype>
        </transmission>

        <brakes>
            <deceleration>15.000000</deceleration>
            <bias>0.500000</bias>
            <abs>0</abs>
        </brakes>

        <suspension>
            <forcelevel>0.850000</forcelevel>
            <dampening>0.150000</dampening>
            <upperlimit>0.150000</upperlimit>
            <lowerlimit>-0.160000</lowerlimit>
            <bias>0.500000</bias>
            <antidive>0.000000</antidive>
        </suspension>

        <lights>
            <front>1</front>
            <rear>1</rear>
        </lights>
    </handling>

    <bikehandling>
        <leanfwdcom>0.330000</leanfwdcom>
        <leanfwdforce>0.150000</leanfwdforce>
        <leanbackcom>0.280000</leanbackcom>
        <leanbackforce>0.150000</leanbackforce>
        <maxlean>44.999996</maxlean>
        <fullanimlean>38.000004</fullanimlean>
        <deslean>0.930000</deslean>
        <speedsteer>0.700000</speedsteer>
        <slipsteer>0.500000</slipsteer>
        <noplayercomz>0.100000</noplayercomz>
        <wheelieang>35.000008</wheelieang>
        <stoppieang>-40.000000</stoppieang>
        <wheeliesteer>-0.009000</wheeliesteer>
        <wheeliestabmult>0.700000</wheeliestabmult>
        <stoppiestabmult>0.600000</stoppiestabmult>
    </bikehandling>

</vehicle>

2.6. Skins 皮肤

  • 作用:作为额外的人物皮肤供游戏内使用。

  • 组成:皮肤信息xml文件,模型dff文件,贴图txd文件。 打包为单个7z压缩包,放置到store/skins下。

  • 压缩包命名规则: z<skinid>_<skinname>.7z

    • <skinid>是皮肤id,可从200到249。
    • <skinname>是皮肤名称。
  • 用法:使用vcmp提供的api,player.Skin来设置皮肤,亦或者在AddClass中使用;游戏原生的皮肤在脚本代码中的使用方法,同样也适用于额外添加的皮肤(有点特别注意是mod皮肤无法设置Alpha-透明度)。

  • 皮肤信息xml文件示例如下:

<?xml version="1.0" encoding="ASCII"?>
<skin>
 <basic>
  <name>Awesome Skin</name>
  <animgroup>man</animgroup>
  <animfile>null</animfile>
 </basic>
</skin>

2.7. Sounds 音效

  • 作用:作为音效供服务器中使用。
  • 组成:单个音频文件,.wav类型或者.ogg类型。放置到store/sounds下。
  • 压缩包命名规则:s<id>_NAME.wav
    • <id>代表音效id,需从50000开始使用。
  • 用法:使用vcmp提供的api,PlaySound来播放音效;该api可播放游戏原生的音效,也可播放额外添加的音效。

2.8. Map icons 地图图标

  • 作用:作为地图图标供服务器中使用。
  • 组成:单个图标图片,需要png类型。放置到store/mapicons下。
  • 压缩包命名规则:m<icon id>_<name>
    • <icon id>代表图标id,从100开始使用。
  • 用法:使用vcmp提供的api,CreateMarker来创建地图图标;该api可创建游戏原生的地图图标,也可创建额外添加的地图图标。

3.示范:物体资源的使用

3.1.获取物体资源

  • 可通过建模的方式获取物体mod,例子:
如何用3dsMax创建一个罪恶都市可用的极简物体模型?
教程
教程

如何用3dsMax创建一个罪恶都市可用的极简物体模型?

面向零基础人群的极简教程

VEGETAZVEGETAZ
180
0
  • 亦可直接使用他人制作完成的物体mod(在vc单机中可用的,或者他人服务器中的资源)

3.2.他人服务器资源用法

  • 直接放置到store即可。
  • 需要注意的是物体的id冲突问题,每个物体需要给它们安排唯一的id避免冲突。
  • 服务器中可使用代码创建,或者用相当于单机中ipl文件定义的方式让环境读取时创建 —— vcmp中则用的是maps下的xml文件;下面分别有具体示范。

3.3.原始物体mod资源用法

3.3.1.编写xml文件

gtamox
  • 在服务器目录下,创建store文件夹,再在里面创建objects文件夹。
gtamox
  • 在objects文件夹中新建文本文档。
gtamox
  • 改名为.xml格式,名称可随意;文件名中若以_mem结尾代表玩家读取时只会读入内存而不会保存到硬盘中。
gtamox
  • 根据物体mod文件,填写如图xml内容;这里用的是一个金字塔物体(制作方法可查上面关联专栏),赋予0号id给服务器使用。
<?xml version="1.0" encoding="ASCII" ?>
<objectlist>

<object id = "0">
	<flags value="0"/>
	<texture path="pyramid.txd"/>
	<collision path="pyramid.col" name="pyramid"/>
	<model path="pyramid.dff" distance="299"/>
</object>

</objectlist>
  • 记得保存xml文件。

3.3.2.打包压缩

gtamox
  • 将模型、贴图、碰撞打包成如图结构,注意压缩包中直接就是这三个文件。
  • 同时文件名必须要以_unp结尾。
  • 压缩包类型必须是7z。
  • 压缩包放置到store文件夹下即可

3.4.物体mod在游戏中的创建方法

3.4.1.调用vcmp的api创建

  • 可以像之前文章中创建拾取物那样在脚本加载时创建,也可以用指令来实现创建;这里设计一个cobj指令,在玩家附近位置创建指定的物体:
gtamox
	else if (cmd == "cobj") {
		if (text) {
			text = text.tointeger();
			local pos = Vector(player.Pos.x + 15, player.Pos.y, player.Pos.z);
			CreateObject(text, player.World, pos, 255);
		}
	}
  • 上述代码解析:
    • 在现有的指令事件中对if结构续写,拼接一个else if结构表示和上面的if同属于同一次条件判断;
    • 若传入的指令为cobj,就判断是否后面带着文本text;
    • 是的话把文本转为整数类型;
    • 再创建一个三维向量表示坐标,X值那里取玩家当前坐标X+10的值表示往东15个单位;
    • 最后调用vcmp提供的功能api来创建物体,四个参数分别是物体id、世界id、坐标、透明度。
gtamox
  • 开启服务器后使用指令/cobj 6000,因为上面给金字塔定义的id是0,在使用中要+6000来对应(为了和游戏原生的物体id区分)。
gtamox
  • 可看到金字塔已生成,碰撞亦正常。

3.4.2.maps中使用xml创建

gtamox
  • 使用之前实现的取坐标获取目的地坐标。
gtamox
  • 可按Tab打开大聊天框,在输出坐标这行使用快捷键Ctrl+C复制内容。
gtamox
  • 在store文件夹下创建maps文件夹,再在其内创建xml文件(新建文本文档后改类型),同样名字以_mem结尾也是会令玩家端直接读取进内存而不会保存到硬盘上;编写上图内容,其中z值调整了一下,因为人物坐标的高度值z值差不多是在地面往上一个单位的,这里把取到的z值减了一个单位。
<?xml version="1.0" encoding="ASCII" ?>
<itemlist>

<item model = "6000">
	<position x="-453.165" y="773.582" z="10.0712" />
	<rotation format="axisangle" x="0" y="0" z="0" angle="1"/>
</item>

</itemlist>
gtamox
  • 重新运行引擎即可看到物体创建到指定位置。

4.总结

  • VCMP嵌入了MVL来管理外部的Mod资源;
  • 文件以一定的规则打包压缩、命名;
  • 通过xml作为资源配置信息告知MVL这些引入的Mod是如何定义的;
  • MVL从而可以把外部Mod资源的使用简化为游戏原生的资源用法一般。

VCMP极简开服教学系列, 上一篇专栏:

如何在VCMP服务器中通过简单指令初步理解流程管理和输入输出?
教程
教程

如何在VCMP服务器中通过简单指令初步理解流程管理和输入输出?

面向零基础开服者的极简教程

VEGETAZVEGETAZ
249
1

下一篇专栏: TODO...

#VCMP开服#罪恶都市联机#开服教程#VCMP开服教程#罪恶都市联机开服

相关推荐

教程如何在VCMP服务器中通过拾取物理解事件驱动和数据修改?
如何在VCMP服务器中通过拾取物理解事件驱动和数据修改?
VEGETAZ
18220
教程如何在VCMP服务器中通过简单指令初步理解流程管理和输入输出?
如何在VCMP服务器中通过简单指令初步理解流程管理和输入输出?
VEGETAZ
24910
教程如何5分钟内开启一个VCMP服务器?
如何5分钟内开启一个VCMP服务器?
VEGETAZ
21710
教程如何在VCMP空白服务器中使用插件、配置基本脚本环境?
如何在VCMP空白服务器中使用插件、配置基本脚本环境?
VEGETAZ
17710
教程如何用VCMP实现罪恶都市多人在线联机?
如何用VCMP实现罪恶都市多人在线联机?
VEGETAZ
26522
教程如何用3dsMax创建一个罪恶都市可用的极简物体模型?
如何用3dsMax创建一个罪恶都市可用的极简物体模型?
VEGETAZ
18000
教程罪恶都市安装说明+常见两大问题
罪恶都市安装说明+常见两大问题
VEGETAZ
37112
教程快速写出自己的第一个Cleo(Redux)
快速写出自己的第一个Cleo(Redux)
VEGETAZ
4000