签到天数: 1203 天 [LV.10]以坛为家III

JAVA全栈工程师
- UID
- 54554
- 僵尸币
- 9184
- 贡献度
- 0
- 注册时间
- 2018-1-11
- 在线时间
- 884 小时
- 最后登录
- 2025-4-1

|
不注册个乐园论坛账号能玩??
您需要 登录 才可以下载或查看,没有账号?注册

×
我最近有在自己写一些sm平台的插件,国庆期间我试着制作了一个求生插件,但是在写无限弹药的的持续与CD这块,对于计时器这块的知识并不是很了解,想问一问
我很担心我写出来的玩意儿清不干净计时器导致内存泄露然后爆炸
首先我创建了一个全局句柄数组
Handle InfiniteAmmo_Timer[MAXPLAYERS+1] = {null, ...};
我每次创建前会删一次计时器,然后用来创建了一个1s循环计时器
delete InfiniteAmmo_Timer[client];//有句柄关闭
InfiniteAmmo_Timer[client] = CreateTimer(1.0, Timer_NoInfiniteAmmo, client, TIMER_REPEAT);
每次执行
public Action Timer_NoInfiniteAmmo(Handle timer, int client)
{
static int infiniteAmmoTimecout = 15;
if (infiniteAmmoTimecout <= 0)
{
InfiniteAmmo_Timer[client] = INVALID_HANDLE;
infiniteAmmoTimecout = 15;
return Plugin_Stop;
}
PrintHintText(client, "子弹风暴: %d", infiniteAmmoTimecout);
infiniteAmmoTimecout--;
return Plugin_Continue;
}
最后每次地图结束与回合结束时候删掉计时器
public void OnMapEnd()
{
ResetTimer();
}
public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
{
ResetTimer();
}
void ResetTimer()
{
for (int i = 1; i <= MaxClients; i++)
{
delete InfiniteAmmo_Timer; //删除无限弹药持续timer
}
}
我这样清理存进全局句柄的计时器正确吗
|
|