Как убрать спрайт трайла после смерти игрока?
| |
Vor4uN
|
Дата: Среда, 19.02.2014, 17:51:39 | Сообщение # 1 |
|
Сообщений: 49
Репутация: 3 [ +/- ]
|
|
Есть плагин выдает определнный трайл всем админам. Но после того как админ умер его трай выдается тому за кого он смотрит в спеках. Как убрать его?Код #include <sourcemod> #include <sdktools>
new Handle:TrailSetTimer[MAXPLAYERS+1]; new trail[MAXPLAYERS+1];
public OnPluginStart() { HookEvent("player_spawn", PlayerSpawn); AddFileToDownloadsTable("materials/sprites/trails/apple.vmt"); AddFileToDownloadsTable("materials/sprites/trails/apple.vtf"); } public OnMapStart() { PrecacheModel("sprites/trails/wheel.vmt"); } public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new client; client = GetClientOfUserId(GetEventInt(event, "userid")); TrailSetTimer[client] = CreateTimer(0.1, TrailSet, client); } public player_death(Handle:event, const String:name[], bool:silent) { Void_KillTrail(GetClientOfUserId(GetEventInt(event,"userid"))); } public Action:TrailSet(Handle:timer, any:client) { if(client > 0 && IsClientInGame(client) && IsPlayerAlive(client) && (GetUserFlagBits(client) & ADMFLAG_ROOT)) { new Float:Pos[3]; GetClientAbsOrigin(client, Pos); Pos[2] += 65.0; trail[client] = CreateEntityByName("env_spritetrail"); if (trail[client] < 1) { LogError("env_spritetrail create error!"); return Plugin_Handled; } SetEntPropFloat(trail[client], Prop_Send, "m_flTextureRes", 0.05); DispatchKeyValueVector(trail[client], "origin", Pos); decl String:xName[10]; IntToString(client, xName, 10); DispatchKeyValue(client, "targetname", xName); DispatchKeyValue(trail[client], "spritename", "sprites/trails/apple.vmt"); DispatchKeyValue(trail[client], "rendermode", "5"); DispatchKeyValue(trail[client], "rendercolor", "255 255 255"); DispatchKeyValue(trail[client], "renderamt", "255"); DispatchKeyValueFloat(trail[client], "lifetime", 5.0); DispatchKeyValueFloat(trail[client], "startwidth", 10.0); DispatchKeyValueFloat(trail[client], "endwidth", 5.0); DispatchSpawn(trail[client]); SetVariantString(xName); AcceptEntityInput(trail[client], "SetParent"); AcceptEntityInput(trail[client], "ShowSprite"); } TrailSetTimer[client] = INVALID_HANDLE; return Plugin_Handled; }
Добавлено (19.02.2014, 17:51:39) --------------------------------------------- Хотя бы примеры какие нибудь киньте, парни. Я просто весь мозг сломал не могу ничего придумать. Если делаю Код AcceptEntityInput(trail[client], "ClearParent"); AcceptEntityInput(trail[client], "Kill"); То сервер крашится и все ни лога нету ничего.
Как нож сделать родителем спрайта?
Сообщение отредактировал Vor4uN - Среда, 19.02.2014, 17:53:30 |
|
| |
sssw
|
Дата: Среда, 19.02.2014, 21:12:02 | Сообщение # 2 |
|
Сообщений: 123
Репутация: 14 [ +/- ]
|
|
Побывал сделать не видимым может тебя это решение устроит? Не могу сейчас тестировать код по этому не знаю как удалить трайл.
P.s попробуй RemoveEdict()
Сообщение отредактировал sssw - Среда, 19.02.2014, 21:12:52 |
|
| |
Vor4uN
|
Дата: Четверг, 20.02.2014, 09:43:17 | Сообщение # 3 |
|
Сообщений: 49
Репутация: 3 [ +/- ]
|
|
Цитата sssw ( ) Побывал сделать не видимым может тебя это решение устроит? Не могу сейчас тестировать код по этому не знаю как удалить трайл.
P.s попробуй RemoveEdict() Все перепробовал! Не получается у меня, не хватает знаний. Трайл появляется когда умер и смотришь за игрока и ни чего не могу сделать. Видел ктото писал про то что можно сделать родителем нож, но как сделать не описал, а примеров я не нашел((((
|
|
| |
nailllain
|
Дата: Четверг, 20.02.2014, 13:21:51 | Сообщение # 4 |
|
Сообщений: 14
Репутация: 2 [ +/- ]
|
|
Код public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new client; client = GetClientOfUserId(GetEventInt(event, "userid")); If (IsPlayerAlive(client)) { TrailSetTimer[client] = CreateTimer(0.1, TrailSet, client); } }
|
|
| |
Vor4uN
|
Дата: Четверг, 20.02.2014, 18:00:08 | Сообщение # 5 |
|
Сообщений: 49
Репутация: 3 [ +/- ]
|
|
Цитата nailllain ( ) public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new client; client = GetClientOfUserId(GetEventInt(event, "userid")); If (IsPlayerAlive(client)) { TrailSetTimer[client] = CreateTimer(0.1, TrailSet, client); } }
Вобще ни о чем ??? Может я что на так объяснил? Вобщим я пишу плагин себе трайлы за фраги у меня все получилось на основе данного выше кода, кроме как если игрок с трайлом умирает и попадает в спеки - то тот за кем он смотрит получает его трайл. Понимаешь теперь?? А твой код просто добавит условие при выдачи трайла при спавне игрока (проверка на не мертв ли он тут не нужна если он спавнится бро).
|
|
| |
nailllain
|
Дата: Четверг, 20.02.2014, 18:34:37 | Сообщение # 6 |
|
Сообщений: 14
Репутация: 2 [ +/- ]
|
|
Если несколько раз умереть, то у тебя трейлы получается должны друг на друга нализать. Это так?
|
|
| |
Sallcom
|
Дата: Четверг, 20.02.2014, 18:59:19 | Сообщение # 7 |
|
Сообщений: 205
Репутация: 31 [ +/- ]
|
|
Цитата nailllain ( ) проверка на не мертв ли он тут не нужна если он спавнится бро А ничего, что когда ты в наблюдатели заходишь срабатывает PlayerSpawn?
И логичней будет делать не IsPlayerAlive(client) в player_spawn?
Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 14:48:26 |
|
| |
Vor4uN
|
Дата: Четверг, 20.02.2014, 19:53:01 | Сообщение # 8 |
|
Сообщений: 49
Репутация: 3 [ +/- ]
|
|
Цитата Sallmap ( ) IsPlayerAlive(client) а GetClientTeam(client) > 1 Зная это я и сделал так.
Код public player_death(Handle:event, const String:name[], bool:silent) { if(IsPlayerAlive(client) && IsClientInGame(client) && GetClientTeam(client) > 1) { Void_KillTrail(GetClientOfUserId(GetEventInt(event,"userid"))); } }
void:Void_KillTrail(client) { if(trail[client] > 0 && IsValidEdict(trail[client])) { AcceptEntityInput(trail[client], "ClearParent"); AcceptEntityInput(trail[client], "Kill"); } trail[client] = -1; }
Результат крашит сервер именно команда kill, остальное вообще не срабатывает. Если вставить вывод текстового сообщения после выполнения кода, то оно идет норм. Что не так сделал ???
Добавлено (20.02.2014, 19:53:01) --------------------------------------------- Цитата nailllain ( ) Если несколько раз умереть, то у тебя трейлы получается должны друг на друга нализать. Это так? Было бы так если бы я именно этот код использовал, а я говорю что взял его за основу и сделал с базой , теперь все она регулирует забирает все при дисконекте, а (выдает все что взял клиент функцией) при спавне. Говорю же все работает норм кроме вот этой дурацкой непонятной проблемы.
Сообщение отредактировал Vor4uN - Четверг, 20.02.2014, 19:54:06 |
|
| |
Sallcom
|
Дата: Четверг, 20.02.2014, 20:36:02 | Сообщение # 9 |
|
Сообщений: 205
Репутация: 31 [ +/- ]
|
|
Цитата Vor4uN ( ) Зная это я и сделал так. Цитата public player_death(Handle:event, const String:name[], bool:silent) { if(IsPlayerAlive(client) && IsClientInGame(client) && GetClientTeam(client) > 1) ......
Я же ясно написал, что условия нужны в PlayerSpawn. А у тебя условие, когда игрок умирает проверяется живой ли он, если живой, то удалять трейл, но игрок то мертвый)))
Попробуй: Код public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if(IsPlayerAlive(client)) CreateTimer(0.1, Timer_CreateTrail, client); }
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event,"userid")); decl String:classname[64]; if(IsValidEntity(trail[client])) { GetEntPropString(trail[client], Prop_Data, "m_iClassname", classname, sizeof(classname)); if(StrEqual(classname, "env_spritetrail")) AcceptEntityInput(trail[client], "Kill") else trail[client] = -1; } }
public Action:Timer_CreateTrail(Handle:timer, any:client) { if(IsClientInGame(client) && IsPlayerAlive(client) && (GetUserFlagBits(client) & ADMFLAG_ROOT)) { //Тут создаешь трейл } }
Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 12:14:42 |
|
| |
Vor4uN
|
Дата: Пятница, 21.02.2014, 00:10:37 | Сообщение # 10 |
|
Сообщений: 49
Репутация: 3 [ +/- ]
|
|
Нет не компилирует даже, все в ошибках теперь каждая строка ошибка. Я думаю это не то. Получается ты пытаешься выдрать строку из кода выданного трайла и убить его командой kill. Это не совсем верно получиться так как код найдет все env_spritetrail у всех игроков и уберет их. Это в теории а на практике не компилируется((( Лучше подскажите как сделать родителем ентити env_spritetrail не игрока а его нож? Тогда и проблема думаю сама собой отпадет, нож игрока пропадает с его смертью, а раз нет родителя нет и наследника.
|
|
| |
sssw
|
Дата: Пятница, 21.02.2014, 02:50:09 | Сообщение # 11 |
|
Сообщений: 123
Репутация: 14 [ +/- ]
|
|
Код public KillEntityIn(i_Ent, Float:f_Seconds) { if (IsValidEdict(i_Ent)) { // Добавляем событие "kill" в очередь для удаления объекта decl String:s_AddOutput[64] FormatEx(s_AddOutput, sizeof(s_AddOutput), "OnUser1 !self:kill::%f:1", f_Seconds) SetVariantString(s_AddOutput) AcceptEntityInput(i_Ent, "AddOutput") AcceptEntityInput(i_Ent, "FireUser1") } } Пробуй.
Сообщение отредактировал sssw - Пятница, 21.02.2014, 02:51:07 |
|
| |
Sallcom
|
Дата: Пятница, 21.02.2014, 07:14:01 | Сообщение # 12 |
|
Сообщений: 205
Репутация: 31 [ +/- ]
|
|
Цитата sssw ( ) Нет не компилирует даже, все в ошибках теперь каждая строка ошибка. Я думаю это не то. Получается ты пытаешься выдрать строку из кода выданного трайла и убить его командой kill. Это не совсем верно получиться так как код найдет все env_spritetrail у всех игроков и уберет их. Это в теории а на практике не компилируется((( Лучше подскажите как сделать родителем ентити env_spritetrail не игрока а его нож? Тогда и проблема думаю сама собой отпадет, нож игрока пропадает с его смертью, а раз нет родителя нет и наследника. Ты вообще понимаешь смысл того, что написано в этом коде?
Цитата Sallmap ( ) получиться так как код найдет все env_spritetrail у всех игроков и уберет их Код public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event,"userid")); decl String:classname[64]; if(IsValidEntity(trail[client])) { GetEntPropString(trail[client], Prop_Data, "m_iClassname", classname, sizeof(classname)); if(StrEqual(classname, "env_spritetrail")) AcceptEntityInput(trail[client], "Kill") else trail[client] = -1; } } Разве тут запущен цикл, который удаляет трейлы всех игроков?
P.S. Так сложно воспользоваться гуглом и перевести ошибки, которые вам выдает компилятор? В основном это не подключенные инклюды или не объявленные переменные и вы сразу говорите: "Код даже не компилируется, одни ошибки", так что сначала научитесь понимать ошибки, а потом писать плагины.
Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 07:25:37 |
|
| |
Vor4uN
|
Дата: Пятница, 21.02.2014, 09:04:18 | Сообщение # 13 |
|
Сообщений: 49
Репутация: 3 [ +/- ]
|
|
Цитата Sallmap ( ) P.S. Так сложно воспользоваться гуглом и перевести ошибки, которые вам выдает компилятор? Блин да как объяснить то тебе? Я же сразу написал что код не такой как тут а взят за основу и у меня теперь не так все устроено в плагине вот смотри код.
Код public Event_Spawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); проверя клиента на использование бонусов если есть то выполняю, код выдаю функцию таймером. "тут код проверки " BonusSetTimer[client] = CreateTimer(0.1, BonusSet, client); этот таймер запускает установку всего что купил клиент в начале раунда, при дисконекте база обнуляет все бонусы. }
public Event_Death(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "attacker")); if(client > 0 && GetClientTeam(client) != GetClientTeam(GetClientOfUserId(GetEventInt(event, "userid")))) points[client] += 50; }
выдача трайла так же заменена вот таким кодом { new trail = CreateEntityByName("env_spritetrail", -1); if (trail < 1) { LogError("env_spritetrail create error!"); return 0; } DispatchKeyValueVector(trail, "origin", Pos); decl String:xName[10]; IntToString(client, xName, 10); DispatchKeyValue(client, "targetname", xName); DispatchKeyValue(trail, "spritename", "название картинки трайла"); DispatchKeyValue(trail, "rendermode", "5"); DispatchKeyValue(trail, "rendercolor", "255 255 255"); DispatchKeyValue(trail, "renderamt", "255"); DispatchKeyValueFloat(trail, "lifetime", 10.0); DispatchKeyValueFloat(trail, "startwidth", 10.0); DispatchKeyValueFloat(trail, "endwidth", 5.0); DispatchSpawn(trail); SetVariantString(xName); AcceptEntityInput(trail, "SetParent"); AcceptEntityInput(trail, "ShowSprite"); }
При установке твоего куска кода, возникает ошибка параметра класснейм и не правельно установленных значений клиент и трайл. Я конечно не так хорошо разбираюсь в коде как ты , но интуитивно понимаю что код не прокатит твой.
Сообщение отредактировал Vor4uN - Пятница, 21.02.2014, 16:13:21 |
|
| |
Sallcom
|
Дата: Пятница, 21.02.2014, 12:13:45 | Сообщение # 14 |
|
Сообщений: 205
Репутация: 31 [ +/- ]
|
|
Если ты не можешь различить переменные trail[client] и trail, то это твои проблемы.
Цитата Vor4uN ( ) не так хорошо разбираюсь в коде как ты , но интуитивно понимаю что код не прокатит твой. "интуитивно" - знаний 0, а уже думаешь, что понимаешь код, который пишешь))
P.S. Не думай, что я тебя пытаюсь унизить, просто нужно понимать то, что ты пишешь, а не делать copy-paste из другого плагина.
Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 12:18:55 |
|
| |
Vor4uN
|
Дата: Пятница, 21.02.2014, 12:34:12 | Сообщение # 15 |
|
Сообщений: 49
Репутация: 3 [ +/- ]
|
|
Цитата Sallmap ( ) Если ты не можешь различить переменные trail[client] и trail, то это твои проблемы. Балван ты!!! Написал же что переменные все поменял сразу , че агришся? Не можешь помочь потому что не знаешь код и не умеешь писать его? Не понимаю таких людей. ты сам дал мне код из другого плагина который я уже видел до тебя и испробовал его. По поводу понятия того что пишешь, попробуй скомпиль то что ты тут нацарапал с исходный кодом и ты увидишь кто тут ботинок ссаный в кодинге. PS Не хочу тебя обижать бро, просто надо понимать, что ты пишешь когда пытаешься показаться умнее других.Добавлено (21.02.2014, 12:34:12) --------------------------------------------- По поводу копи паста - укажи мне плагин с которого я якобы взял код. Если не сможешь жду публичных извенений за тухлый базар
|
|
| |
|