вопрос по валидности и оптимизации кода

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Какие еще варианты выгрузки плагина?
Оптимален ли
PHP:
ServerCommand("sm plugins unload %s", fn);
?
Выгрузит ли он всё то, чем может намусорить плагин?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Нет. Я тебе уже написал, как. А так твой плагин будет каждый раз подгружаться заново, что тоже не очень хорошо. Оффтоп
Выгрузит ли он всё то, чем может намусорить плагин?
Ещё бы. Всё, даже, что не надо. Оффтоп
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
А как можно проверить, подобрано ли оружие?
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
[SM] Native "UnhookEvent" reported: Invalid hook callback specified for game event "round_start"

PHP:
public OnMapStart() 
{ 
    decl String:map[15];GetCurrentMap(map,15);
    if (strcmp(map, "35hp_2_remake"))
    {
        if (g_SteamSprite)
        {
            UnhookEvent("round_start", round_start, EventHookMode_PostNoCopy);
            g_SteamSprite = 0;
        }
    }
    else
    {
        if (g_SteamSprite == 0) HookEvent("round_start", round_start, EventHookMode_PostNoCopy);
        g_SteamSprite = PrecacheModel("sprites/steam1.vmt");
    }
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #25
Danyas, говорит что ты не хукнул и пытаешся анхукнуть.. я хотел написать по это поводу но поленился и решил не тратить времени, а то начали бы спорить. Результат не заставил себя ждать.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
я хотел написать по это поводу но поленился
Оффтоп
подобрано ли оружие?
PHP:
new g_iOffsetOwnerEntity;

public OnPluginStart() if((g_iOffsetOwnerEntity=FindSendPropOffs("CBaseCombatWeapon", "m_hOwnerEntity")) == -1) SetFailState("Offset 'CBaseCombatWeapon::m_hOwnerEntity' not found!");

if(GetEntDataEnt2(entity, g_iOffsetOwnerEntity) == -1) {//Лежит на земле.}
else {//Подобрано.}
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Danyas, говорит что ты не хукнул и пытаешся анхукнуть.. я хотел написать по это поводу но поленился и решил не тратить времени, а то начали бы спорить. Результат не заставил себя ждать.

Я сразу это увидел, но я думал что это можно упустить.

Всё равно не понимаю как можно более-менее адекватно сделать запуск плагина только на определенной карте.
 

DarklSide

Участник
Сообщения
931
Реакции
468
Danyas, дабавь cvar Вкл/Выкл плагина.
Проверяй мапу и изменяй его, при его изменении -> хукай или анхукай.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Native "UnhookEvent" reported: Invalid hook callback specified for game event "round_start"
PHP:
public OnMapStart() 
{ 
    decl String:map[15];GetCurrentMap(map,15);
    if (strcmp(map, "35hp_2_remake"))
    {
		if (g_SteamSprite)
		{
            UnhookEvent("round_start", round_start, EventHookMode_PostNoCopy);
            g_SteamSprite = 0;
		}
    }
    else
    {
        if (g_SteamSprite == 0)
		{
			if((g_SteamSprite = PrecacheModel("sprites/steam1.vmt"))) HookEvent("round_start", round_start, EventHookMode_PostNoCopy);
		}
		else g_SteamSprite = PrecacheModel("sprites/steam1.vmt");
    }
}
Вроде всё верно. Баг возможен, если только твоя модель не кешировалась.
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #30
AlmazON, нет.
Смотри.
Включилась карта и если она не 35hp_2_remake то сразу идет анхук (не учитываю прекеш).
Решить можно хукнув в OnPluginStart эвент HookEvent("round_start", round_start, EventHookMode_PostNoCopy);
Или же - менять логику
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Включилась карта и если она не 35hp_2_remake то сразу идет анхук (не учитываю прекеш).
Если только у него g_SteamSprite до включения не равен 0, то да. Иначе анхука не будет. Оффтоп
Danyas, скидывай своего кодоinvalidа)
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Если только у него g_SteamSprite до включения не равен 0, то да. Иначе анхука не будет. Оффтоп
Danyas, скидывай своего кодоinvalidа)
Я конечно Василий, даа.
Я убрал прекеш был, хотя и не совсем понял что значило приравнять спрайт к нулю.
Может просто смешать код с плагином который тоже хукает старт раунда?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Может просто смешать код с плагином который тоже хукает старт раунда
И, если спрайт всё же равен нулю, а карта верна, то ты тут же получишь ещё один хук старта раунда. Т.е. событие будет выполняться дважды, что обычно ещё хуже простой ошибки анхука.
У тебя там секретный код или что?
g_SteamSprite приравняй строго к 0 в конце OnPluginStart(), если он там используется, а если нет - при объявлении глобальной переменной.
 
Сверху Снизу