Basic Effects
| |
dases2003
|
Дата: Понедельник, 21.07.2014, 06:50:54 | Сообщение # 31 |
|
Сообщений: 107
Репутация: 1 [ +/- ]
|
|
Узнать позицию игрока, и поставить туда эффект
|
|
| |
BarD
|
Дата: Понедельник, 21.07.2014, 12:16:24 | Сообщение # 32 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Loco, Ставим повторяющийся таймер на 0.1, в таймере узнаем позицию игрока и накладываем туда цилиндр.
Тут небольшой пример. При активации команды создается таймер на 0.1 секунды, который включает цилиндр по истечению. Цилиндр работает 0.1 секунды, чтобы убраться в момент постановки нового.
Код new CylTimer[MAXPLAYERS + 1];
public OnPluginStart() { RegConsoleCmd("sm_cyl", Cyl); HookEvent("player_death", Death); }
public Action:Cyl(client, args) { if (client && IsClientInGame(client) && IsPlayerAlive(client)) { if (CylTimer[client] != INVALID_HANDLE) { KillTimer(CylTimer[client]); CylTimer[client] == INVALID_HANDLE; }
//Если хэндл убит, то ставим таймер
CylTimer[client] = CreateTimer(0.1, MyTimer, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); } return Plugin_Handled; }
//Когда активируется таймер, ставим сюда цилиндр на 0.1 секунды
public Action:MyTimer(Handle:timer, any:client) { if (IsClientInGame(client) && client && IsPlayerAlive(client)) { new Float:pos[3]; GetClientAbsOrigin(client, pos); for (new i = 1; i <= 150; i++) { TE_SetupBeamRingPoint(pos, 50.0, 51.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.1, 2.0, 0.0, {255, 255, 0, 255}, 10, 0);// Создаем на 0.1 сек. TE_SendToAll(); pos[2] = pos[2] + 1.0; } } }
//Если игрок выходит, убиваем его таймер, если он есть.
public OnPlayerDisconnect(client) { if (client && CylTimer[client] != INVALID_HANDLE) { KillTimer(CylTimer(client)); CylTimer[client] == INVALID_HANDLE; } }
//Если игрок умирает, проверяем, не включен ли у него таймер, чтобы убить его таймер
public Action:Death(Handle:event, const String:name[], bool:dontBroadcast) { new victim = GetClientOfUserId(GetEventInt(event, "userid")); if (victim > 0 && victim) { if (CylTimer[victim] != INVALID_HANDLE) { KillTimer(CylTimer[victim]); CylTimer[victim] == INVALID_HANDLE; } } }
Сообщение отредактировал BarD - Понедельник, 21.07.2014, 12:17:26 |
|
| |
Loco
|
Дата: Вторник, 22.07.2014, 16:30:56 | Сообщение # 33 |
|
Сообщений: 42
Репутация: 0 [ +/- ]
|
|
BarD, Спасибо! Попробую.
|
|
| |
SAN6991
|
Дата: Пятница, 19.12.2014, 23:55:17 | Сообщение # 34 |
|
Сообщений: 4
Репутация: 0 [ +/- ]
|
|
Подскажите как исправить фигню с проигрыванием эффекта при подключение на сервак.
|
|
| |
BarD
|
Дата: Суббота, 20.12.2014, 10:15:21 | Сообщение # 35 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
SAN6991, какого эффекта и в каком плагине?
|
|
| |
TEIN
|
Дата: Суббота, 20.12.2014, 14:43:34 | Сообщение # 36 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
BarD 1. CylTimer[client] == INVALID_HANDLE не нужно делать в public Action:Cyl(client, args)
2. if (IsClientInGame(client) && client && IsPlayerAlive(client)) без этого тоже, думаю, можно обойтись, ведь если клиент не в игре или мертв - таймер убьет
3. При отключении/смерти клиента у тебя одинаковый код, можно объединить
4. Проверять при отключении клиента, на то, что его индекс не равен нулю не нужно, вроде как, ведь 0 - не может отключиться от сервера, верно?)
|
|
| |
SAN6991
|
Дата: Суббота, 20.12.2014, 20:31:23 | Сообщение # 37 |
|
Сообщений: 4
Репутация: 0 [ +/- ]
|
|
Код public OnPluginStart() { HookEvent("player_spawn", Effects); }
public OnMapStart() { g_ExplosionSprite = PrecacheModel("materials/sprites/sprite_fire01.vmt"); g_SmokeSprite = PrecacheModel( "sprites/smoke.vmt"); g_SteamSprite = PrecacheModel("sprites/steam1.vmt"); g_LightningSprite = PrecacheModel("sprites/lgtning.vmt"); }
public Action:Effects(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); new Float:pos[3]; GetClientAbsOrigin(client, pos); new randomx = GetRandomInt(-500, 500); new randomy = GetRandomInt(-500, 500); new Float:startpos[3]; startpos[0] = pos[0] + randomx; startpos[1] = pos[1] + randomy; startpos[2] = pos[2] + 800; new color[4] = {0, 0, 255, 255}; new Float:dir[3] = {0.0, 0.0, 0.0}; TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 20.0, 10.0, 0, 2.0, color, 3); TE_SendToAll(); TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 10.0, 5.0, 0, 1.0, {255, 255, 255, 255}, 3); TE_SendToAll(); TE_SetupSparks(pos, dir, 5000, 1000); TE_SendToAll(); TE_SetupEnergySplash(pos, dir, false); TE_SendToAll(); TE_SetupSmoke(pos, g_SteamSprite, 5.0, 10); TE_SendToAll(); TE_SetupExplosion(pos, g_ExplosionSprite, 10.0, 1, 0, 100, 5000); TE_SendToAll(); TE_SetupSmoke( pos, g_SmokeSprite, 10.0, 3 ); TE_SendToAll(); }
|
|
| |
BarD
|
Дата: Воскресенье, 21.12.2014, 04:49:23 | Сообщение # 38 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
А что не так-то?
TEIN, согласен. Код давно писал, неопытный был)
Сообщение отредактировал BarD - Воскресенье, 21.12.2014, 04:55:25 |
|
| |
SAN6991
|
Дата: Воскресенье, 21.12.2014, 08:01:53 | Сообщение # 39 |
|
Сообщений: 4
Репутация: 0 [ +/- ]
|
|
Цитата BarD ( ) А что не так-то? Когда игрок подключается на сервер проигрывается комбинация эффектов в рандомной точке на карте(без повода). Помогите исправит!
|
|
| |
BarD
|
Дата: Воскресенье, 21.12.2014, 10:19:20 | Сообщение # 40 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Код public Action:Effects(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if (client && IsClientInGame(client) && GetClientTeam(client)>1) { new Float:pos[3]; GetClientAbsOrigin(client, pos); new randomx = GetRandomInt(-500, 500); new randomy = GetRandomInt(-500, 500); new Float:startpos[3]; startpos[0] = pos[0] + randomx; startpos[1] = pos[1] + randomy; startpos[2] = pos[2] + 800; new color[4] = {0, 0, 255, 255}; new Float:dir[3] = {0.0, 0.0, 0.0}; TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 20.0, 10.0, 0, 2.0, color, 3); TE_SendToAll(); TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 10.0, 5.0, 0, 1.0, {255, 255, 255, 255}, 3); TE_SendToAll(); TE_SetupSparks(pos, dir, 5000, 1000); TE_SendToAll(); TE_SetupEnergySplash(pos, dir, false); TE_SendToAll(); TE_SetupSmoke(pos, g_SteamSprite, 5.0, 10); TE_SendToAll(); TE_SetupExplosion(pos, g_ExplosionSprite, 10.0, 1, 0, 100, 5000); TE_SendToAll(); TE_SetupSmoke( pos, g_SmokeSprite, 10.0, 3 ); TE_SendToAll(); } } Думаю, что это связано с тем, что происходит спавн игрока при заходе. Код выше, я думаю, поможет исправить проблему. В нем идёт проверка на текущую команду игрока. Если он не наблюдатель и играет либо за Т, либо за КТ, то проигрываем.
Сообщение отредактировал BarD - Воскресенье, 21.12.2014, 10:19:47 |
|
| |
SAN6991
|
Дата: Среда, 24.12.2014, 01:11:59 | Сообщение # 41 |
|
Сообщений: 4
Репутация: 0 [ +/- ]
|
|
Цитата BarD ( ) Думаю, что это связано с тем, что происходит спавн игрока при заходе. Код выше, я думаю, поможет исправить проблему. В нем идёт проверка на текущую команду игрока. Если он не наблюдатель и играет либо за Т, либо за КТ, то проигрываем. Да спасибо помогло но заметил ещё косяк эффект проигрывается не для каждого игрока, например взрыв только тогда когда они все в куче!
|
|
| |
BarD
|
Дата: Среда, 24.12.2014, 16:22:55 | Сообщение # 42 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Цитата SAN6991 ( ) эффект проигрывается не для каждого игрока, например взрыв только тогда когда они все в куче! Понятия не имею, с чем это связано. Если КС:ГО, то там багов полно, так что вполне возможно.
|
|
| |
BarD
|
Дата: Суббота, 03.01.2015, 05:47:17 | Сообщение # 43 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
[Программист], добрый день. Что конкретно не работает? Поясните, пожалуйста.
|
|
| |
Santaro
|
Дата: Понедельник, 05.01.2015, 02:26:45 | Сообщение # 44 |
|
Сообщений: 5
Репутация: 0 [ +/- ]
|
|
В CS:GO пашет?
|
|
| |
BarD
|
Дата: Понедельник, 05.01.2015, 05:19:28 | Сообщение # 45 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Santaro, думаю, будет, т.к. набор функций практически одинаков. Думаю, что большинство эффектов работает :)
[Программист], CSS или CSGO у тебя? Большинство эффектов появляются на прицеле) может быть, ты куда-то вдаль смотришь, вот и не видно их?)
Сообщение отредактировал BarD - Понедельник, 05.01.2015, 05:19:48 |
|
| |
|