Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Здравейте, плъгинът ми трябва за респаунд сървър в "weapon menu" имам само HE граната , ако може да се направи така че да не се взима от "weapon menu"и плъгинът да дава един път "Teleport Smoke Grenade" на хора с флаг "Б",на всяко прераждане.Благодаря предварително!
Последно промяна от M36 на 09 Юни 2019, 15:29, променено общо 1 път.
-
SkandaU
Извън линия - Потребител
- Мнения: 213
- Регистриран на: 09 Яну 2017, 12:37
- Се отблагодари: 45 пъти
- Получена благодарност: 22 пъти
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Прикачи .sma файла на въпросното "weapon menu", за да спрем даването на въпросната граната. Не можем да гадаем кое точно използваш.
В сървъра ползваш ли някакъв VIP Плъгин? Ако не използваш и искаш да дава само "teleport smoke granade" --> https://www.amxx-bg.info/forum/vipgen/. Всичко е опростено, направи така, че потребителите с флаг "Б" да получават smoke granade (teleport granade).
И последна стъпка от твоята заявка е да напишеш в чичко гугъл "amxx teleport granade" и дърпаш плъгина.
В сървъра ползваш ли някакъв VIP Плъгин? Ако не използваш и искаш да дава само "teleport smoke granade" --> https://www.amxx-bg.info/forum/vipgen/. Всичко е опростено, направи така, че потребителите с флаг "Б" да получават smoke granade (teleport granade).
И последна стъпка от твоята заявка е да напишеш в чичко гугъл "amxx teleport granade" и дърпаш плъгина.
-
JackEyedJones
Извън линия - Потребител
- Мнения: 399
- Регистриран на: 10 Сеп 2018, 17:26
- Местоположение: Plovdiv, Bulgaria, Europe, Entire World
- Се отблагодари: 4 пъти
- Получена благодарност: 69 пъти
- Обратна връзка:
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#define PLUGIN_NAME "Teleport Smoke Grenade"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"
#define SMOKE_SCALE 30
#define SMOKE_FRAMERATE 12
#define SMOKE_GROUND_OFFSET 6
#define Smoke_Nade_Flag ADMIN_RESERVATION
// do not edit
new const g_sound_explosion[] = "weapons/sg_explode.wav"
new const g_classname_grenade[] = "grenade"
new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}}
new g_spriteid_steam1
new g_eventid_createsmoke
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_forward(FM_EmitSound, "forward_emitsound")
register_forward(FM_PlaybackEvent, "forward_playbackevent")
// we do not precaching, but retrieving the indexes
g_spriteid_steam1 = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr")
g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc")
RegisterHam(Ham_Spawn, "player", "SmokeOnSpawn", 1);
}
public SmokeOnSpawn(id)
{
if(!is_user_alive(id) || !is_user_vip(id))
return
if(user_has_weapon(id, CSW_SMOKEGRENADE))
return
give_item(id, "weapon_smokegrenade")
}
bool:is_user_vip(id)
return bool:(get_user_flags(id) & Smoke_Nade_Flag)
public forward_emitsound(ent, channel, const sound[]) {
if (!equal(sound, g_sound_explosion) || !is_grenade(ent))
return FMRES_IGNORED
static id, Float:origin[3]
id = pev(ent, pev_owner)
pev(ent, pev_origin, origin)
engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, g_sound_explosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_RemoveEntity, ent)
origin[2] += SMOKE_GROUND_OFFSET
create_smoke(origin)
if (is_user_alive(id)) {
static Float:mins[3], hull
pev(id, pev_mins, mins)
origin[2] -= mins[2] + SMOKE_GROUND_OFFSET
hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
if (is_hull_vacant(origin, hull))
engfunc(EngFunc_SetOrigin, id, origin)
else { // close to a solid object, trying to find a vacant spot
static Float:vec[3]
vec[2] = origin[2]
for (new i; i < sizeof g_sign; ++i) {
vec[0] = origin[0] - mins[0] * g_sign[i][0]
vec[1] = origin[1] - mins[1] * g_sign[i][1]
if (is_hull_vacant(vec, hull)) {
engfunc(EngFunc_SetOrigin, id, vec)
break
}
}
}
}
return FMRES_SUPERCEDE
}
public forward_playbackevent(flags, invoker, eventindex) {
// we do not need a large amount of smoke
if (eventindex == g_eventid_createsmoke)
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
bool:is_grenade(ent) {
if (!pev_valid(ent))
return false
static classname[sizeof g_classname_grenade + 1]
pev(ent, pev_classname, classname, sizeof g_classname_grenade)
if (equal(classname, g_classname_grenade))
return true
return false
}
create_smoke(const Float:origin[3]) {
// engfunc because origin are float
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_SMOKE)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_short(g_spriteid_steam1)
write_byte(SMOKE_SCALE)
write_byte(SMOKE_FRAMERATE)
message_end()
}
stock bool:is_hull_vacant(const Float:origin[3], hull) {
new tr = 0
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr)
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true
return false
}
Код за потвърждение: Избери целия код
#define Smoke_Nade_Flag ADMIN_RESERVATION
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
има малко разминаванеJackEyedJones написа: ↑09 Юни 2019, 15:28Чичко Гугъл не помага в този специфичен случай.Код за потвърждение: Избери целия код
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <fun> #include <cstrike> #define PLUGIN_NAME "Teleport Smoke Grenade" #define PLUGIN_VERSION "0.1" #define PLUGIN_AUTHOR "VEN" #define SMOKE_SCALE 30 #define SMOKE_FRAMERATE 12 #define SMOKE_GROUND_OFFSET 6 #define Smoke_Nade_Flag ADMIN_RESERVATION // do not edit new const g_sound_explosion[] = "weapons/sg_explode.wav" new const g_classname_grenade[] = "grenade" new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}} new g_spriteid_steam1 new g_eventid_createsmoke public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_forward(FM_EmitSound, "forward_emitsound") register_forward(FM_PlaybackEvent, "forward_playbackevent") // we do not precaching, but retrieving the indexes g_spriteid_steam1 = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr") g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc") RegisterHam(Ham_Spawn, "player", "SmokeOnSpawn", 1); } public SmokeOnSpawn(id) { if(!is_user_alive(id) || !is_user_vip(id)) return if(user_has_weapon(id, CSW_SMOKEGRENADE)) return give_item(id, "weapon_smokegrenade") } bool:is_user_vip(id) return bool:(get_user_flags(id) & Smoke_Nade_Flag) public forward_emitsound(ent, channel, const sound[]) { if (!equal(sound, g_sound_explosion) || !is_grenade(ent)) return FMRES_IGNORED static id, Float:origin[3] id = pev(ent, pev_owner) pev(ent, pev_origin, origin) engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, g_sound_explosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) engfunc(EngFunc_RemoveEntity, ent) origin[2] += SMOKE_GROUND_OFFSET create_smoke(origin) if (is_user_alive(id)) { static Float:mins[3], hull pev(id, pev_mins, mins) origin[2] -= mins[2] + SMOKE_GROUND_OFFSET hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN if (is_hull_vacant(origin, hull)) engfunc(EngFunc_SetOrigin, id, origin) else { // close to a solid object, trying to find a vacant spot static Float:vec[3] vec[2] = origin[2] for (new i; i < sizeof g_sign; ++i) { vec[0] = origin[0] - mins[0] * g_sign[i][0] vec[1] = origin[1] - mins[1] * g_sign[i][1] if (is_hull_vacant(vec, hull)) { engfunc(EngFunc_SetOrigin, id, vec) break } } } } return FMRES_SUPERCEDE } public forward_playbackevent(flags, invoker, eventindex) { // we do not need a large amount of smoke if (eventindex == g_eventid_createsmoke) return FMRES_SUPERCEDE return FMRES_IGNORED } bool:is_grenade(ent) { if (!pev_valid(ent)) return false static classname[sizeof g_classname_grenade + 1] pev(ent, pev_classname, classname, sizeof g_classname_grenade) if (equal(classname, g_classname_grenade)) return true return false } create_smoke(const Float:origin[3]) { // engfunc because origin are float engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0) write_byte(TE_SMOKE) engfunc(EngFunc_WriteCoord, origin[0]) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]) write_short(g_spriteid_steam1) write_byte(SMOKE_SCALE) write_byte(SMOKE_FRAMERATE) message_end() } stock bool:is_hull_vacant(const Float:origin[3], hull) { new tr = 0 engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr) if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen)) return true return false }
Код за потвърждение: Избери целия код
#define Smoke_Nade_Flag ADMIN_RESERVATION
Код за потвърждение: Избери целия код
teleport_smokegren.sma(43) : error 017: undefined symbol "has_weapon"
teleport_smokegren.sma(46) : error 017: undefined symbol "give_weapon"
-
JackEyedJones
Извън линия - Потребител
- Мнения: 399
- Регистриран на: 10 Сеп 2018, 17:26
- Местоположение: Plovdiv, Bulgaria, Europe, Entire World
- Се отблагодари: 4 пъти
- Получена благодарност: 69 пъти
- Обратна връзка:
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Коригирах грешките с undefined symbol. Възможно е да се проявява от друг плъгин.
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
този плъгин не ми върши работа ,1во че недава гранатата,2ро пак крашва сървъра когато сложа към веапон менюто да дава смок гранатаJackEyedJones написа: ↑09 Юни 2019, 15:42 Коригирах грешките с undefined symbol. Възможно е да се проявява от друг плъгин.
-
SkandaU
Извън линия - Потребител
- Мнения: 213
- Регистриран на: 09 Яну 2017, 12:37
- Се отблагодари: 45 пъти
- Получена благодарност: 22 пъти
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Чичко гугъл не помага ли? Слагаш плъгина, който променя смоука на телепорт.JackEyedJones написа: ↑09 Юни 2019, 15:28Чичко Гугъл не помага в този специфичен случай.Код за потвърждение: Избери целия код
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <fun> #include <cstrike> #define PLUGIN_NAME "Teleport Smoke Grenade" #define PLUGIN_VERSION "0.1" #define PLUGIN_AUTHOR "VEN" #define SMOKE_SCALE 30 #define SMOKE_FRAMERATE 12 #define SMOKE_GROUND_OFFSET 6 #define Smoke_Nade_Flag ADMIN_RESERVATION // do not edit new const g_sound_explosion[] = "weapons/sg_explode.wav" new const g_classname_grenade[] = "grenade" new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}} new g_spriteid_steam1 new g_eventid_createsmoke public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_forward(FM_EmitSound, "forward_emitsound") register_forward(FM_PlaybackEvent, "forward_playbackevent") // we do not precaching, but retrieving the indexes g_spriteid_steam1 = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr") g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc") RegisterHam(Ham_Spawn, "player", "SmokeOnSpawn", 1); } public SmokeOnSpawn(id) { if(!is_user_alive(id) || !is_user_vip(id)) return if(user_has_weapon(id, CSW_SMOKEGRENADE)) return give_item(id, "weapon_smokegrenade") } bool:is_user_vip(id) return bool:(get_user_flags(id) & Smoke_Nade_Flag) public forward_emitsound(ent, channel, const sound[]) { if (!equal(sound, g_sound_explosion) || !is_grenade(ent)) return FMRES_IGNORED static id, Float:origin[3] id = pev(ent, pev_owner) pev(ent, pev_origin, origin) engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, g_sound_explosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) engfunc(EngFunc_RemoveEntity, ent) origin[2] += SMOKE_GROUND_OFFSET create_smoke(origin) if (is_user_alive(id)) { static Float:mins[3], hull pev(id, pev_mins, mins) origin[2] -= mins[2] + SMOKE_GROUND_OFFSET hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN if (is_hull_vacant(origin, hull)) engfunc(EngFunc_SetOrigin, id, origin) else { // close to a solid object, trying to find a vacant spot static Float:vec[3] vec[2] = origin[2] for (new i; i < sizeof g_sign; ++i) { vec[0] = origin[0] - mins[0] * g_sign[i][0] vec[1] = origin[1] - mins[1] * g_sign[i][1] if (is_hull_vacant(vec, hull)) { engfunc(EngFunc_SetOrigin, id, vec) break } } } } return FMRES_SUPERCEDE } public forward_playbackevent(flags, invoker, eventindex) { // we do not need a large amount of smoke if (eventindex == g_eventid_createsmoke) return FMRES_SUPERCEDE return FMRES_IGNORED } bool:is_grenade(ent) { if (!pev_valid(ent)) return false static classname[sizeof g_classname_grenade + 1] pev(ent, pev_classname, classname, sizeof g_classname_grenade) if (equal(classname, g_classname_grenade)) return true return false } create_smoke(const Float:origin[3]) { // engfunc because origin are float engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0) write_byte(TE_SMOKE) engfunc(EngFunc_WriteCoord, origin[0]) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]) write_short(g_spriteid_steam1) write_byte(SMOKE_SCALE) write_byte(SMOKE_FRAMERATE) message_end() } stock bool:is_hull_vacant(const Float:origin[3], hull) { new tr = 0 engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr) if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen)) return true return false }
Код за потвърждение: Избери целия код
#define Smoke_Nade_Flag ADMIN_RESERVATION
Чрез ВИП плъгин генератора нагласяш випа да получава Smoke Grenade и си готов.. най-лесния начин..
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Аз не съм точно толкова наясно със нещата за това пиша тук ако може някой да ми направи по опростен варянт на вип плътин който да ти дава телепор смок граната при всяко преражданеSkandaU написа: ↑09 Юни 2019, 18:52Чичко гугъл не помага ли? Слагаш плъгина, който променя смоука на телепорт.JackEyedJones написа: ↑09 Юни 2019, 15:28Чичко Гугъл не помага в този специфичен случай.Код за потвърждение: Избери целия код
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <fun> #include <cstrike> #define PLUGIN_NAME "Teleport Smoke Grenade" #define PLUGIN_VERSION "0.1" #define PLUGIN_AUTHOR "VEN" #define SMOKE_SCALE 30 #define SMOKE_FRAMERATE 12 #define SMOKE_GROUND_OFFSET 6 #define Smoke_Nade_Flag ADMIN_RESERVATION // do not edit new const g_sound_explosion[] = "weapons/sg_explode.wav" new const g_classname_grenade[] = "grenade" new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}} new g_spriteid_steam1 new g_eventid_createsmoke public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_forward(FM_EmitSound, "forward_emitsound") register_forward(FM_PlaybackEvent, "forward_playbackevent") // we do not precaching, but retrieving the indexes g_spriteid_steam1 = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr") g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc") RegisterHam(Ham_Spawn, "player", "SmokeOnSpawn", 1); } public SmokeOnSpawn(id) { if(!is_user_alive(id) || !is_user_vip(id)) return if(user_has_weapon(id, CSW_SMOKEGRENADE)) return give_item(id, "weapon_smokegrenade") } bool:is_user_vip(id) return bool:(get_user_flags(id) & Smoke_Nade_Flag) public forward_emitsound(ent, channel, const sound[]) { if (!equal(sound, g_sound_explosion) || !is_grenade(ent)) return FMRES_IGNORED static id, Float:origin[3] id = pev(ent, pev_owner) pev(ent, pev_origin, origin) engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, g_sound_explosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) engfunc(EngFunc_RemoveEntity, ent) origin[2] += SMOKE_GROUND_OFFSET create_smoke(origin) if (is_user_alive(id)) { static Float:mins[3], hull pev(id, pev_mins, mins) origin[2] -= mins[2] + SMOKE_GROUND_OFFSET hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN if (is_hull_vacant(origin, hull)) engfunc(EngFunc_SetOrigin, id, origin) else { // close to a solid object, trying to find a vacant spot static Float:vec[3] vec[2] = origin[2] for (new i; i < sizeof g_sign; ++i) { vec[0] = origin[0] - mins[0] * g_sign[i][0] vec[1] = origin[1] - mins[1] * g_sign[i][1] if (is_hull_vacant(vec, hull)) { engfunc(EngFunc_SetOrigin, id, vec) break } } } } return FMRES_SUPERCEDE } public forward_playbackevent(flags, invoker, eventindex) { // we do not need a large amount of smoke if (eventindex == g_eventid_createsmoke) return FMRES_SUPERCEDE return FMRES_IGNORED } bool:is_grenade(ent) { if (!pev_valid(ent)) return false static classname[sizeof g_classname_grenade + 1] pev(ent, pev_classname, classname, sizeof g_classname_grenade) if (equal(classname, g_classname_grenade)) return true return false } create_smoke(const Float:origin[3]) { // engfunc because origin are float engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0) write_byte(TE_SMOKE) engfunc(EngFunc_WriteCoord, origin[0]) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]) write_short(g_spriteid_steam1) write_byte(SMOKE_SCALE) write_byte(SMOKE_FRAMERATE) message_end() } stock bool:is_hull_vacant(const Float:origin[3], hull) { new tr = 0 engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr) if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen)) return true return false }
Код за потвърждение: Избери целия код
#define Smoke_Nade_Flag ADMIN_RESERVATION
Чрез ВИП плъгин генератора нагласяш випа да получава Smoke Grenade и си готов.. най-лесния начин..
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
От ВИП генератора по-опростен вариант за даване оръжие при прераждане не съществува. Къде си тръгнал да правиш сървър ако не можеш да се оправиш с най-простия плъгин?
Заявка за изработка на плъгин "Teleport Smoke Grenade" под флаг "Б"
Става въпрос че този плъгин които ми дават сървърт крашва от него не върви при мен ,имаше тук същатата тема за тоз плъгин и аз попадам само на него в нета ,споредмен плъгина трябва да се преработи за да не крашва сървърът или да се направи друг подобен,затова пиша тук за помощ оци.
ето го и въпросния плъгин от които крашва сървара когато се телеторнисх от гранатата
Код за потвърждение: Избери целия код
/* AMX Mod X
* Teleport Smoke Grenade
*
* (c) Copyright 2006 by VEN
*
* This file is provided as is (no warranties)
*
* DESCRIPTION
* Plugin changes the smoke grenade to teleport grenade with a bit of smoke.
* Usage: drop the grenade, you will be teleported to the spot of explosion.
* Try to crouch if the height of the spot are small for uncrouched player.
*
* CREDITS
* Dread Pirate - idea
*/
#include <amxmodx>
#include <fakemeta>
#define PLUGIN_NAME "Teleport Smoke Grenade"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"
#define SMOKE_SCALE 30
#define SMOKE_FRAMERATE 12
#define SMOKE_GROUND_OFFSET 6
// do not edit
new const g_sound_explosion[] = "weapons/sg_explode.wav"
new const g_classname_grenade[] = "grenade"
new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}}
new g_spriteid_steam1
new g_eventid_createsmoke
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_forward(FM_EmitSound, "forward_emitsound")
register_forward(FM_PlaybackEvent, "forward_playbackevent")
// we do not precaching, but retrieving the indexes
g_spriteid_steam1 = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr")
g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc")
}
public forward_emitsound(ent, channel, const sound[]) {
if (!equal(sound, g_sound_explosion) || !is_grenade(ent))
return FMRES_IGNORED
static id, Float:origin[3]
id = pev(ent, pev_owner)
pev(ent, pev_origin, origin)
engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, g_sound_explosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_RemoveEntity, ent)
origin[2] += SMOKE_GROUND_OFFSET
create_smoke(origin)
if (is_user_alive(id)) {
static Float:mins[3], hull
pev(id, pev_mins, mins)
origin[2] -= mins[2] + SMOKE_GROUND_OFFSET
hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
if (is_hull_vacant(origin, hull))
engfunc(EngFunc_SetOrigin, id, origin)
else { // close to a solid object, trying to find a vacant spot
static Float:vec[3]
vec[2] = origin[2]
for (new i; i < sizeof g_sign; ++i) {
vec[0] = origin[0] - mins[0] * g_sign[i][0]
vec[1] = origin[1] - mins[1] * g_sign[i][1]
if (is_hull_vacant(vec, hull)) {
engfunc(EngFunc_SetOrigin, id, vec)
break
}
}
}
}
return FMRES_SUPERCEDE
}
public forward_playbackevent(flags, invoker, eventindex) {
// we do not need a large amount of smoke
if (eventindex == g_eventid_createsmoke)
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
bool:is_grenade(ent) {
if (!pev_valid(ent))
return false
static classname[sizeof g_classname_grenade + 1]
pev(ent, pev_classname, classname, sizeof g_classname_grenade)
if (equal(classname, g_classname_grenade))
return true
return false
}
create_smoke(const Float:origin[3]) {
// engfunc because origin are float
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_SMOKE)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_short(g_spriteid_steam1)
write_byte(SMOKE_SCALE)
write_byte(SMOKE_FRAMERATE)
message_end()
}
stock bool:is_hull_vacant(const Float:origin[3], hull) {
new tr = 0
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr)
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true
return false
}
-
- Подобни теми
- Отговори
- Преглеждания
- Последно мнение
-
- 1 Отговори
- 1476 Преглеждания
-
Последно мнение от OciXCrom
-
- 2 Отговори
- 1358 Преглеждания
-
Последно мнение от SILENT HILL`
-
- 0 Отговори
- 1174 Преглеждания
-
Последно мнение от summertime vibes
-
- 6 Отговори
- 2498 Преглеждания
-
Последно мнение от jumby1990
-
- 0 Отговори
- 1122 Преглеждания
-
Последно мнение от neppyS BG
-
- 5 Отговори
- 1362 Преглеждания
-
Последно мнение от YankoNL
-
- 0 Отговори
- 414 Преглеждания
-
Последно мнение от gaziranavoda
Кой е на линия
Потребители разглеждащи този форум: Google [Bot] и 13 госта