中级玩家
 
- 贡献度
- 22
- 金元
- 565
- 积分
- 145
- 精华
- 0
- 注册时间
- 2013-3-9
|
本帖最后由 〓喧嘩的世界_ 于 2022-2-22 15:31 编辑
首先要去两个网站下载插件整合包,不然无法编译插件跟运行插件。
1.http://www.sourcemm.net/downloads.php?branch=stable 下载mmsource进入网站后点击红色框进行下载
2.https://www.sourcemod.net/ 下载 sourcemod
进入网站向下滑动至Other后点击红色框,将跳转到下载页面,点击windows下载
因为插件编译一般都是在windows系统下进行编译。
它们既是插件的运行环境,又是插件编译的环境。如果是liunx搭建插件运行环境的话,也可以下载一个liunx版本的。后期搭建liunx服务器用的到。
3.将两个下载的压缩包进行解压到同一个目录。
4.如果你已经有插件,则只需要将得到的addons文件夹与cfg文件夹放置游戏目录G:\Steam\steamapps\common\Left 4 Dead 2\left4dead2中(这是我的游戏目录),addons存放玩家的vpk(mod)等资源,cfg存放玩家的配置信息(包括按键绑定)等
一般情况不会存在需要覆盖等情况
/***************************************************************/
下面开始简单的插件教程。
我们需要\sourcemod-1.10.0-git6528-windows\addons\sourcemod 中的scripting这个文件夹,里面有插件代码的引用接口,包括编译插件的spcomp.exe文件插件使用.sp后面文件进行编辑,推荐使用Visual Studio Code文件进行编辑。里面可以下载到SourcePawn语言的扩展
插件的编辑步骤:
可以先在桌面创建一个txt文件,然后后缀修改成.sp
然后使用Visual Studio Code打开这个文件
在文件开头我们先加上
#pragma semicolon 1
#pragma newdecls required
因为这个语言进行过一个大更新。语言的格式进行了更换(当然老的语言格式依然支持)
做好的插件怎么进行编译: compile.exe // 类似插件检查
spcomp.exe // 编译插件
将保存好的.sp文件用鼠标拖到compile.exe文件上面,就会自动进行编译。(显示的cmd窗口会显示是否编译成功,包括错误的行数等信息)
然后再加上下面的这个
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <sdktools_functions>
#include <geoip>
#include的作用,就是引用某个接口,然后可以使用它自带的方法
有过语言基础的应该是懂得
然后最重要的就是这个插件的基础信息
public Plugin myinfo =
{
name = "", // 插件的名称
author = "", // 插件的作者
description = "", // 插件简介
version = "", // 插件的版本
url = "N/A" // 插件的网站 N/A用来表示没有,空白的也行
}
这个时候完成了插件的开头。。。。。。。。。。。。
/***************************************************************/
在进行插件编写之前可以加一个游戏判断
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
if (!L4D_IsEngineLeft4Dead2()) {
strcopy(error, err_max, "Plugin only supports Left 4 Dead 2.");
return APLRes_Failure;
}
return APLRes_Success;
}
我就简单介绍下这段的意思,就是判断游戏是不是求生之路2,不是的话,直接阻止这个插件运行
下面介绍一些用的到的代码解释:方法来源#include <sourcemod>
1. forward void OnPluginStart(); // 这个方法的介绍是:当插件完全初始化并且所有已知的外部引用都被解析时调用。 这仅在插件的生命周期中调用一次,并与 OnPluginEnd() 配对
这个方法里面可以配置仅在地图完成创建后,只运行一次的配置,例如: 房间名称,cfg配置,游戏指令, 游戏事件等。(就是游戏运行后,不会再次更改的信息)
例子:
public void OnPluginStart()
{
ServerCommand("hostname \"这是我的房间\"");
}
这就完成了在你的地图创建后,房间名就是:这是我的房间
在游戏中如何看见房间名:打开控制台~,输入status就可以看到房间名,房间IP,房间人数(这个人数包括电脑人/真实玩家/特感)
2. 介绍事件的方法使用
https://wiki.alliedmods.net/Left_4_Dead_2_Events // 游戏里面发生的事件
1.native void HookEvent(const char[] name, EventHook callback, EventHookMode mode=EventHookMode_Post); // 当一个游戏事件被触发时创建一个钩子
const char[] name // 事件的名称 (这个是固定的哦, 上面的网站有事件的代码)
EventHook callback // 就是一个函数指针 (当这个事件发生后,你想怎么去修改它)
EventHookMode mode=EventHookMode_Post
//EventHookMode mode 有三个变量可以调用EventHookMode_Pre, EventHookMode_Post, EventHookMode_PostNoCopy,一般情况比较少用到,默认EventHookMode_Post就行了
函数指针分为两种
function Action (Event event, const char[] name, bool dontBroadcast); //带return返回值,允许Plugin_Continue, Plugin_Changed, Plugin_Handled, Plugin_Stop这个返回值
Plugin_Continue // 代码继续运行不做更改
Plugin_Changed // 将发生的事件的某些效果进行修改,例如玩家伤害等
Plugin_Handled // 将代码不匹配部分进行跳过,结束继续的判断
Plugin_Stop // 这个一般都是用到计时器里面的
function void (Event event, const char[] name, bool dontBroadcast); // 不带返回值 return后就直接结束了
例子:
HookEvent("round_start", Event_Round_Start);
这是一个回合开始的事件
然后指针指向Event_Round_Start这个方法
public Action Event_Round_Start(Event event, const char[] name, bool dontBroadcast)
{
return Plugin_Continue;
}
这个就相当于建立了这个事件发生后要进行处理的方法部分
完整的代码展现(一个回合开始告知)
#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <sdktools_functions>
#include <geoip>
public Plugin myinfo =
{
name = "", // 插件的名称
author = "", // 插件的作者
description = "", // 插件简介
version = "", // 插件的版本
url = "N/A" // 插件的网站 N/A用来表示没有,空白的也行
}
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
if (!L4D_IsEngineLeft4Dead2()) {
strcopy(error, err_max, "Plugin only supports Left 4 Dead 2.");
return APLRes_Failure;
}
return APLRes_Success;
}
public void OnPluginStart()
{
ServerCommand("hostname \"这是我的房间\"");
HookEvent("round_start", Event_Round_Start);
}
public Action Event_Round_Start(Event event, const char[] name, bool dontBroadcast)
{
CPrintToChatAll("这个地图开始了");
return Plugin_Continue;
}
然后保存.sp文件
对编写的插件放心的直接拖到spcomp.exe运行,会在当前.sp文件下创建一个.smx文件
不然可一个拖到compile.exe上运行,如果运行无保存,会在scripting文件夹的compiled文件内创建一个.smx
|
|