Ошибка в SM плагине

"mikedmor"

Участник
Сообщения
27
Реакции
1
Пробуй, может успеет обработать заранее:
PHP:
#include <sdkhooks>
#include <sdktools>

#define TELEPORT_DETECT_THRESHOLD 100.0

new Float:vLastPos[MAXPLAYERS + 1][3],
    bool:StickWeapon[MAXPLAYERS + 1];

public OnPluginStart() {
    HookEvent("player_activate", Event_PlayerActivate);
    HookEvent("player_death", Event_PlayerDeath);
    AddCommandListener(DropWeapon, "drop");
}

public Event_PlayerActivate(Handle:event, const String:name[], bool:dontBroadcast) {
    SDKHook(GetClientOfUserId(GetEventInt(event, "userid")), SDKHook_SpawnPost, PlayerSpawn);
}

public PlayerSpawn(client) {
    GetClientAbsOrigin(client, vLastPos[client]);
    SDKHook(client, SDKHook_PreThink, PostThinkPost);
    StickWeapon[client] = false;
}

public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) {
    SDKUnhook(GetClientOfUserId(GetEventInt(event, "userid")), SDKHook_PreThink, PostThinkPost);
}

public PostThinkPost(client) {
    static Float:vCurPos[MAXPLAYERS + 1][3];
    GetClientAbsOrigin(client, vCurPos[client]);
    if (GetVectorDistance(vCurPos[client], vLastPos[client]) < TELEPORT_DETECT_THRESHOLD) {
        vLastPos[client] = vCurPos[client];
    }
    else {
        StickWeapon[client] = true;
        TeleportEntity(client, vLastPos[client], NULL_VECTOR, NULL_VECTOR);
    }
}

public Action:DropWeapon(client, const String:name[], args) return StickWeapon[client] ? Plugin_Handled:Plugin_Continue;
после тп оружие не дропается и серв можно крашнуть
 

"mikedmor"

Участник
Сообщения
27
Реакции
1
Т.е.? Не выкидывается, но всё равно крашится при попытке выброса?
нет. Если 1 раз телепортнуться без выбрасывания оружия то больше ты его выбросить не сможешь и соответсвенно крашнуть сервер,но когда на тебе ещё нет запрета на выбрасывание оружия то если одновременно нажать на конпку телепорта и кнопку дропа оружия оружие выбросится в момент телепорта и серв упадёт.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
больше ты его выбросить не сможешь и соответствено крашнуть сервер
Так и хорошо. Не можешь играть честно, либо вредитель сервера - сиди с ограничениями. Оффтоп
Выбор невелик: либо запретить выбрасывать оружие всем, либо по какой-то системе (например, новичкам), либо разрешить выбрасывание с "фризом" (только само выбрасывание).
 

"mikedmor"

Участник
Сообщения
27
Реакции
1
Так и хорошо. Не можешь играть честно, либо вредитель сервера - сиди с ограничениями. Оффтоп
Выбор невелик: либо запретить выбрасывать оружие всем, либо по какой-то системе (например, новичкам), либо разрешить выбрасывание с "фризом" (только само выбрасывание).
Банить нельзя ибо серв для читеров )00) А как можно разрешить выбрасывание с фризом?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
можно разрешить выбрасывание с фризом?
[HIDE="5"]
PHP:
#include <cstrike>
#include <sdkhooks>
#include <sdktools>

#define TELEPORT_DETECT_THRESHOLD 100.0

public Plugin:myinfo = 
{
	name = "Antiteleport Crash Server",
	author = "AlmazON",
	description = "Антителепорт и падение сервера от него",
	version = "0.1.0",
	url = "http://www.hlmod.ru"
}

new Float:vLastPos[MAXPLAYERS + 1][3], DropWeapon[MAXPLAYERS + 1] = {0, 1, ...};

public OnPluginStart() {
	HookEvent("player_activate", Event_PlayerActivate);
	HookEvent("player_death", Event_PlayerDeath);
}

public Event_PlayerActivate(Handle:event, const String:name[], bool:dontBroadcast) {
	SDKHook(GetClientOfUserId(GetEventInt(event, "userid")), SDKHook_SpawnPost, PlayerSpawn);
}

public PlayerSpawn(client) {
	GetClientAbsOrigin(client, vLastPos[client]);
	SDKHook(client, SDKHook_PostThinkPost, PostThinkPost);
	DropWeapon[client] = 1;
}

public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) {
	SDKUnhook(GetClientOfUserId(GetEventInt(event, "userid")), SDKHook_PostThinkPost, PostThinkPost);
}

public PostThinkPost(client) {
	static Float:vCurPos[MAXPLAYERS + 1][3];
	GetClientAbsOrigin(client, vCurPos[client]);
	if (GetVectorDistance(vCurPos[client], vLastPos[client]) < TELEPORT_DETECT_THRESHOLD) {
		vLastPos[client] = vCurPos[client];
	}
	else {
		DropWeapon[client] = 0;
		TeleportEntity(client, vLastPos[client], NULL_VECTOR, NULL_VECTOR);
	}
}

public OnClientDisconnect_Post(client) DropWeapon[client] = 0;

public Action:CS_OnCSWeaponDrop(client, weaponIndex)
{
	if (IsClientInGame(client) && IsValidEntity(weaponIndex) && 0 < GetClientHealth(client))
	{
		if (DropWeapon[client])
		{
			CreateTimer(0.0, DelayDrop, client, TIMER_FLAG_NO_MAPCHANGE);
			DropWeapon[client] = weaponIndex;
		}
		return Plugin_Handled;
	}
	return Plugin_Continue;
}

public Action:DelayDrop(Handle:timer, any:client)
{
	if (DropWeapon[client] && IsValidEntity(DropWeapon[client]))
	{
		for (new slot = CS_SLOT_PRIMARY; slot < CS_SLOT_C4+1; ++slot)
		{
			if (GetPlayerWeaponSlot(client, slot) == DropWeapon[client])
			{
				CS_DropWeapon(client, DropWeapon[client], true, true);
				break;
			}
		}
	}
	return Plugin_Stop;
}
[/HIDE]
Думаю, всё вполне получилось. "Фриз" выброса оружия на малом пинге практически не наблюдается.
При попытке "положить" сервер с телепорт-читом, возможность выкинуть оружие будет заблокирована до нового раунда (респауна).Оффтоп
 

"mikedmor"

Участник
Сообщения
27
Реакции
1
***Скрытый текст***
Думаю, всё вполне получилось. "Фриз" выброса оружия на малом пинге практически не наблюдается.
При попытке "положить" сервер с телепорт-читом, возможность выкинуть оружие будет заблокирована до нового раунда (респауна).Оффтоп
спасибо за помощь ) всё работает. Вредители есть везде (:
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Так я не понял, серв любой могут положить? или с sv_cheats 1?
И раз так то и ММ офф сервер можно положить?
 
Сверху Снизу