Помогите разобрать ошибки в плагинах

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
В килбонусе есть ошибка
L 08/28/2013 - 14:46:20: [SM] Plugin encountered error 15: Array index is out of bounds
L 08/28/2013 - 14:46:20: [SM] Displaying call stack trace for plugin "killbonus.smx":
L 08/28/2013 - 14:46:20: [SM] [0] Line 260, E:\server\Server_tdm-dd2\cstrike\addons\sourcemod\scripting\killbonus.s p::ResetClient()
L 08/28/2013 - 14:46:20: [SM] [1] Line 253, E:\server\Server_tdm-dd2\cstrike\addons\sourcemod\scripting\killbonus.s p::ResetAll()
L 08/28/2013 - 14:46:20: [SM] [2] Line 271, E:\server\Server_tdm-dd2\cstrike\addons\sourcemod\scripting\killbonus.s p::Event_RoundStart()
Не знаю почему индекс выходит за границы массива.

Можете посмотреть офлайн бан на ошибки.

Правильно написана функция поменять местами команды?

PHP:
public Handle_ModeTeam(Handle:topmenu, TopMenuAction:action, TopMenuObject:object_id, param, String:buffer[], maxlength)
{
	if (action == TopMenuAction_DisplayOption)
	{
		Format(buffer, maxlength, "%t", "changed the team");
	}
	else if(action == TopMenuAction_SelectOption)
	{
		SelectionMenu(param);
	}
}

SelectionMenu(client) 
{
	for(new i = 1; i <= GetMaxClients(); i++)
	{
		if(IsClientInGame(i) && (GetClientTeam(i) == TEAM_2 || GetClientTeam(i) == TEAM_1))
		{
			PerformSwitch_d(i);
		}
	}
	
	ShowActivity(client, "%t", "changed the team places");
	LogAction(client, -1, "\"%L\" changed the team places", client, client);
}
void:PerformSwitch_d(client, bool:toSpec = false)
{
	new cTeam = GetClientTeam(client),
	toTeam = (toSpec ? TEAM_SPEC : TEAM_1 + TEAM_2 - cTeam);
	
	if (cstrikeExtAvail && !toSpec)
	{
		CreateTimer(0.1, Timer_TeamSwitch2, client);
		CS_SwitchTeam(client, toTeam);
		
		if (cTeam == TEAM_2)
		{
			SetEntityModel(client, "models/player/t_leet.mdl");
		}
		else
		{
			SetEntityModel(client, "models/player/ct_sas.mdl");
		}
		
		if (GetPlayerWeaponSlot(client, CS_SLOT_C4) != -1)
		{
			new ent;
			if ((ent = GetPlayerWeaponSlot(client, CS_SLOT_C4)) != -1)
			SDKHooks_DropWeapon(client, ent);
		}
	}
	
	else
	{
		ForcePlayerSuicide(client);
		ChangeClientTeam(client, toTeam);
	}
}

public Action:Timer_TeamSwitch2(Handle:timer, any:client)
{
	if (IsClientInGame(client))
		CS_RespawnPlayer(client);
	return Plugin_Stop;
}
 

Вложения

  • killbonus v.1.0.5.3.zip
    19.5 КБ · Просмотры: 3
  • offlineban (2).sp
    11.9 КБ · Просмотры: 4
  • swapteam.sp
    23.4 КБ · Просмотры: 3

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
GetMaxClients() не используй, вместо этого есть переменная MaxClients, и она всегда равна результату этой функции... Её было решено ввести, потому что часто используется, и быстрее сделать это на уровне сурсмода, чем вызывать функцию.
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Серый™, вчера уже отключался, не было сил читать исходник. Вообщем предполагаю, что ошибка в объявлении new g_list[65][3][2]; Дело в том, что 65 - это MAXPLAYERS, которая не включает в себя World Entity (сущность мира). Поэтому рекомендуется объявлять как (MAXPLAYERS+1), т.е. надо объявить как new g_list[MAXPLAYERS+1][3][2]; или new g_list[66][3][2]; (но первый вариант лучше).
Подробнее можно почитать обсуждение тут: http://forums.alliedmods.net/showthread.php?t=190082.
Если это не исправит ошибку (изменение с 65 на 66), то отпишись.
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Reiko1231, я это проверить не могу, так как не держу сервер с таким количеством, скажу тем кто использует его, чтоб проверили.
Посмотришь офлайн бан?
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
А что с ним не так?

f65afe77afe3.jpg
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Reiko1231, Всё остальное получилось, осталось чтоб и писалась причина бана, ниже прикрепляю новый исходник.
Всё получилось, сделал всё что нужно, спасибо Reiko1231, за помощь.
 

Вложения

  • offlineban.sp
    15.1 КБ · Просмотры: 2
Последнее редактирование:
Сверху Снизу