Новый парашют

Jak ozdoba na torcie

Как украшение на торт
Сообщения
25
Реакции
11
Webman, он вызывается 66 раз в секунду. Мне не нравится 66 раз в секунду проверять не зажата ли кнопка у каждого игрока
Имхо через OnPlayerRunCmd предсказываю ошибки при плохом соединении.
 

R1KO

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

Jak ozdoba na torcie

Как украшение на торт
Сообщения
25
Реакции
11
предсказываю ошибки в мозгах, т.к. OnPlayerRunCmd не вызывается, если игрок timing out
Ну извольте отчасти не согласиться частота вызова зависит от клинских настроек и активности игры.
Для зомби мода лучше масштабировать vec[2] чтобы полёт был реалистичней. Так как отталкивание от пуль противоречит любым нормативам и делает игру очень сложной. А платформы тот же timing out может вызвать ошибки на них. Ну как удобней так и делайте.

P.s Очень вас попрошу больше не писать подобной нотой, выпендрёжа в этом лицемерном мире и так хватает.
 

NagarD

Участник
Сообщения
411
Реакции
184
R1KO, зачем? Нам не нужно ничего блокировать, мы ничего не меняли и говорить что программа может исполнятся дальше - не обязательно. Если не написать return Plugin_Continue, то ничего не измениться, все будет работать и скомпилированный плагин будет занимать меньше места. Это нужно в отдельных случаях, но в этом, сомнительно. Зачем оно там нужно?
 

Jak ozdoba na torcie

Как украшение на торт
Сообщения
25
Реакции
11
R1KO, зачем? Нам не нужно ничего блокировать, мы ничего не меняли и говорить что программа может исполнятся дальше - не обязательно. Если не написать return Plugin_Continue, то ничего не измениться, все будет работать и скомпилированный плагин будет занимать меньше места. Это нужно в отдельных случаях, но в этом, сомнительно. Зачем оно там нужно?

plugin1.sp
PHP:
CallPlugin2()
{
         new Action:Test = ListenPlugin1();
         if (Test != Plugin_Handled)
         {
                 PrintToServer("плагин услышал вас");
                 return;
         }
         PrintToServer("кто-то нас не ненавидит");
}
plugin2.sp
PHP:
public Action:ListenPlugin1()
{
       return Plugin_Handled;
}

Примерно так но plugin1.sp может быть не плагином а программой на C++ и например HookEvent перехватывает определёны момент в коде игры примерно так
PHP:
    void injectFunction (DWORD address, DWORD function) {
    DWORD _old;
        VirtualProtect((LPVOID)address,4,  PAGE_READWRITE, &_old);
        BYTE * patch = (BYTE *)address;
        *patch = 0xE9;    // JMP
        *(DWORD *)(patch+1) = (function-(address+5));    
         VirtualProtect((LPVOID)address,4, _old, &_old);
    }
Продолжение бредо текста: если Plugin_Continue прыгаем обратно а Если Plugin_Change меняем параметры в куче или стеке. Например в своей функции отлова ambient_generic можно сделать Plugin_Stop для остановки её звука а Plugin_Handled запретом на рождение её.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #28
NagarD, не помню как с OnPlayerRunCmd но на некоторых action компилятор ругается и говорит, что они должны возвращать какое либо значение
 

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
Ну извольте отчасти не согласиться частота вызова зависит от клинских настроек и активности игры.
Для зомби мода лучше масштабировать vec[2] чтобы полёт был реалистичней. Так как отталкивание от пуль противоречит любым нормативам и делает игру очень сложной. А платформы тот же timing out может вызвать ошибки на них. Ну как удобней так и делайте.

P.s Очень вас попрошу больше не писать подобной нотой, выпендрёжа в этом лицемерном мире и так хватает.

Какие ещё ошибки? Что игрок потеряет связь? Не будет вызываться OnPlayerRunCmd и будет игрок висеть в воздухе как и должно быть.

NagarD, не помню как с OnPlayerRunCmd но на некоторых action компилятор ругается и говорит, что они должны возвращать какое либо значение

потому что до конца функции уже используется return. Не используй return по всей длине функции, не будет ругаться
 

Razor

wcs-world.ru team-vs.ru
Сообщения
93
Реакции
32
может настало время к парашюту модельку прикрутить?

З.Ы. Спрашиваю просто так из интереса...
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #31
ну прилепи..
PHP:
		Parachute_Ent[client] = CreateEntityByName("prop_dynamic_override");
		DispatchKeyValue(Parachute_Ent[client],"model",path);
		SetEntityMoveType(Parachute_Ent[client], MOVETYPE_NOCLIP);
		DispatchSpawn(Parachute_Ent[client]);
		
		hasModel[client]=true;
		TeleportParachute(client);

		// удаление
		RemoveEdict(Parachute_Ent[client]);


Оффтоп
 

Razor

wcs-world.ru team-vs.ru
Сообщения
93
Реакции
32
я не сильно в этом понимаю, но путь сюда прописывать?

C-подобный:
DispatchKeyValue(Parachute_Ent[client],"model",path models/и т.д);
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #33
Razor, вместо path пишешь "models/..."
PrecacheModel не забудь.
 

pokypka20

Участник
Сообщения
244
Реакции
31
Не хочет компилится, проверил без модели работает, а с ней не компилится.
PHP:
new g_iVelocity = -1;
#define MODEL_PARACHUTE "models/p/parachute.mdl"

public OnPluginStart()
{
	g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");
}

public OnMapStart()
{
	PrecacheModel(MODEL_PARACHUTE);
}


public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
	if (IsPlayerAlive(client))
    {
        static bool:g_InUse[MAXPLAYERS+1], Float:fVelocity[MAXPLAYERS+1][3];
        GetEntDataVector(client, g_iVelocity, fVelocity[client]);
		Parachute_Ent[client] = CreateEntityByName("prop_dynamic_override");
        if(!g_InUse[client] && (buttons & IN_USE) && !(GetEntityFlags(client) & FL_ONGROUND))
        {
            if(fVelocity[client][2] < 0.0)
            {
                fVelocity[client][2] = (fVelocity[client][2] >= -100.0) ? -100.0:(fVelocity[client][2] +50.0);
                TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fVelocity[client]);
                SetEntDataVector(client, g_iVelocity, fVelocity[client]);
                SetEntityGravity(client, 0.1);
                g_InUse[client] = true;
				DispatchKeyValue(Parachute_Ent[client], "model", MODEL_PARACHUTE);
				SetEntityMoveType(Parachute_Ent[client], MOVETYPE_NOCLIP);
				DispatchSpawn(Parachute_Ent[client]);
        
				hasModel[client]=true;
				TeleportParachute(client);
            }
        }
        else if (!(buttons & IN_USE) && g_InUse[client])
        {
            SetEntityGravity(client, 1.0);
            g_InUse[client] = false;
			  RemoveEdict(Parachute_Ent[client]); 
        }
        else if(fVelocity[client][2] >= 0.0)
		{
		SetEntityGravity(client, 1.0);
	    RemoveEdict(Parachute_Ent[client]); 
		}
    }
    return Plugin_Continue;
}
 

AMD

Участник
Сообщения
180
Реакции
18
pokypka20,
PHP:
new MODEL_PARACHUTE "models/p/parachute.mdl"
попробуй, по идее, так.
 

pokypka20

Участник
Сообщения
244
Реакции
31
AMD, нет, ничего не дало. Там ошибки пишет в строке
PHP:
 DispatchKeyValue(Parachute_Ent[client], "model", MODEL_PARACHUTE);

попробуйте кто то скомпилить, я уже час не могу разобраться все варианты перепробовал. По идеи ошибки там неправильно стоят символы, но я проверил всю строку там ничего такого нет.
 

AMD

Участник
Сообщения
180
Реакции
18
AMD, нет, ничего не дало. Там ошибки пишет в строке
PHP:
 DispatchKeyValue(Parachute_Ent[client], "model", MODEL_PARACHUTE);

попробуйте кто то скомпилить, я уже час не могу разобраться все варианты перепробовал. По идеи ошибки там неправильно стоят символы, но я проверил всю строку там ничего такого нет.

а так?
PHP:
new MODEL_PARACHUTE = "models/p/parachute.mdl"
 

pokypka20

Участник
Сообщения
244
Реакции
31
image.png


PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>

new g_iVelocity = -1;
new Parachute_Ent;
#define MODEL_PARACHUTE "models/p/parachute.mdl"

public OnPluginStart()
{
    g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");
}

public OnMapStart()
{
    PrecacheModel(MODEL_PARACHUTE);
}


public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
    if (IsPlayerAlive(client))
    {
        static bool:g_InUse[MAXPLAYERS+1], Float:fVelocity[MAXPLAYERS+1][3];
        GetEntDataVector(client, g_iVelocity, fVelocity[client]);
        if(!g_InUse[client] && (buttons & IN_USE) && !(GetEntityFlags(client) & FL_ONGROUND))
        {
            if(fVelocity[client][2] < 0.0)
            {
                fVelocity[client][2] = (fVelocity[client][2] >= -100.0) ? -100.0:(fVelocity[client][2] +50.0);
                TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fVelocity[client]);
                SetEntDataVector(client, g_iVelocity, fVelocity[client]);
                SetEntityGravity(client, 0.1);
                g_InUse[client] = true;
				
				Parachute_Ent[client] = CreateEntityByName("prop_dynamic_override");
                DispatchKeyValue(Parachute_Ent[client], "model", MODEL_PARACHUTE);
                SetEntityMoveType(Parachute_Ent[client], MOVETYPE_NOCLIP);
                DispatchSpawn(Parachute_Ent[client]);
        
                hasModel[client]=true;
                TeleportParachute(client);
            }
        }
        else if (!(buttons & IN_USE) && g_InUse[client])
        {
            SetEntityGravity(client, 1.0);
            g_InUse[client] = false;
              RemoveEdict(Parachute_Ent[client]); 
        }
        else if(fVelocity[client][2] >= 0.0)
        {
        SetEntityGravity(client, 1.0);
        RemoveEdict(Parachute_Ent[client]); 
        }
    }
    return Plugin_Continue;
}
 
Сверху Снизу