Отбросить игрока при попадании
| |
Shouldercannon
|
Дата: Воскресенье, 17.03.2024, 18:01:35 | Сообщение # 1 |
|
Сообщений: 21
Репутация: 0 [ +/- ]
|
|
Так я отбрасываю игроков при попадании в тело или рядом, например под ноги.
Код #include <sdktools>
new Handle:cvarRadius; new Handle:cvarMagnitude;
int g_sprite = 0;
...
public OnPluginStart() { cvarRadius = CreateConVar("sm_rocketguns_radius", "150", "Radius of the explosions.", 0, true, 150.0, false, _); cvarMagnitude = CreateConVar("sm_rocketguns_magnitude", "300", "Magnitude of the explosions.", 0, true, 300.0, false, _); AutoExecConfig(true, "rocket_guns");
HookEvent("bullet_impact", Event_BulletImpact, EventHookMode_Pre); }
public OnMapStart() { g_sprite = PrecacheGeneric("sprites/zerogxplode.spr", true); }
public Action Event_BulletImpact(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if (!IsClientInGame(client)) return;
new Float:origin[3]; origin[0] = GetEventFloat(event, "x"); origin[1] = GetEventFloat(event, "y"); origin[2] = GetEventFloat(event, "z");
new Float:ClientOrigin[3]; GetClientAbsOrigin(client, ClientOrigin);
char weapon[32]; GetClientWeapon(client, weapon, sizeof(weapon));
if (StrContains("weapon_deagle", weapon) != -1) { new radius = GetConVarInt(cvarRadius); new magnitude = GetConVarInt(cvarMagnitude);
char s_radius[32]; char s_magnitude[32]; IntToString(radius, s_radius, sizeof(s_radius)); IntToString(magnitude, s_magnitude, sizeof(s_magnitude));
new entity = CreateEntityByName("env_explosion"); DispatchKeyValueVector(entity, "origin", origin); DispatchKeyValue(entity, "imagnitude", s_magnitude); DispatchKeyValue(entity, "iradiusoverride", s_radius); DispatchKeyValue(entity, "spawnflags", "0"); SetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity", client);
DispatchSpawn(entity); AcceptEntityInput(entity, "Explode");
TE_SetupExplosion(origin, g_sprite, 1.0, 10, TE_EXPLFLAG_NONE, radius, magnitude); TE_SendToAll(); } } Вот с такими параметрами
- sm_rocketguns_magnitude "300"
- sm_rocketguns_radius "150"
или
- sm_rocketguns_magnitude "1300"
- sm_rocketguns_radius "1150"
Игроки очень слабо отталкиваются, зато их тела после смерти улетают с бешеной скорость.
Есть ли ещё метода как отталкивать игроков при попадании?
Сообщение отредактировал Shouldercannon - Понедельник, 18.03.2024, 05:22:16 |
|
| |
_wS_
|
Дата: Четверг, 21.03.2024, 20:12:25 | Сообщение # 2 |
|
Толкнуть можно и так: TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity);
Только нужно вычислить velocity. Для примера, в черновике нашел "толкнуть туда, куда смотришь":
Код float angles[3]; GetClientEyeAngles(client, angles);
float end_pos[3]; // end_pos = например, позиция врага.
float velocity[3]; MakeVectorFromPoints(start_pos, end_pos, velocity); ScaleVector(velocity, 10.0);
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity);
|
|
| |
Shouldercannon
|
Дата: Суббота, 23.03.2024, 19:43:42 | Сообщение # 3 |
|
Сообщений: 21
Репутация: 0 [ +/- ]
|
|
На себе работает, но это не то. Допустим я выстрелил в толпу и эту толпу должно раскидать в разные стороны.
Сообщение отредактировал Shouldercannon - Суббота, 23.03.2024, 21:09:14 |
|
| |
_wS_
|
Дата: Суббота, 23.03.2024, 21:55:27 | Сообщение # 4 |
|
Цитата Shouldercannon ( ) На себе работает, но это не то. Допустим я выстрелил в толпу и эту толпу должно раскидать в разные стороны. Почему не то, дело же лишь в вычислении velocity для каждого игрока. Координаты взрыва есть (A), ой тут не взрыв, но значит нужно получить координаты попадания пули, затем ближайших игроков, и вычислить как-то координаты центра, мб средним арифметическим (сложить координаты игроков и разделить на их кол-во). Координаты игроков есть (B) и остаётся сделать MakeVectorFromPoints(A, B, velocity);
Ещё может помочь функция в этой теме для сдвига координат в нужную сторону.
|
|
| |
Shouldercannon
|
Дата: Понедельник, 25.03.2024, 10:16:56 | Сообщение # 5 |
|
Сообщений: 21
Репутация: 0 [ +/- ]
|
|
От гранаты получается нужный эффект. Только нужно поймать точку куда попала пуля и сделать там взрыв гранаты.
|
|
| |
|