Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Фиксы плагинов

[РЕШЕНО]
Статус пользователя damilurg
сообщение 21.11.2014, 19:15
Сообщение #1


Иконка группы

Стаж: 13 лет

Сообщений: 1191
Благодарностей: 1297
Полезность: 1230

Antiflash, конфликт с Colored Flashbangs(решено)
Q:Имеется код от краша.
Antiflash
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define PLUGIN "AntiFlash"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

new g_PlayerFlasher

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_event("ScreenFade", "CheckFlash", "be", "4=255", "5=255", "6=255", "7>199")
register_event("23", "RemoveFlasher", "a", "1=5", "6=25", "7=6")

register_forward(FM_SetModel, "CheckFlasher")
}

public CheckFlash(id)
{
if(get_user_team(id) == get_user_team(g_PlayerFlasher))
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0, 0, 0}, id)
write_short(1)
write_short(1)
write_short(1)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(255)
message_end()
}
}

public RemoveFlasher()
{
set_task(0.05,"ResetFlasher")
return PLUGIN_CONTINUE
}

public ResetFlasher()
{
g_PlayerFlasher = 0
}


public SetFlasher(id)
{
g_PlayerFlasher = id - 12345
}


public CheckFlasher(iEntity, szModel[])
{

if(!equal(szModel, "models/w_flashbang.mdl"))
return FMRES_IGNORED

new iOwner = pev(iEntity, pev_owner)

if(iOwner == 0)
return FMRES_IGNORED

set_task(1.52, "SetFlasher", iOwner + 12345)
return FMRES_IGNORED
}
Работает, всё нормально, но идет конфликт с другим плагином
Colored Flashbangs
Код:
#include <amxmodx>

#define PLUGIN "Colored Flashbangs"
#define VERSION "1.0"
#define AUTHOR "v3x"

new g_nMsgScreenFade

public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)
register_event("ScreenFade","FlashedEvent","be","4=255","5=255","6=255","7>199")
g_nMsgScreenFade = get_user_msgid("ScreenFade")
// Cvars
register_cvar("amx_fb_mode", "1")
register_cvar("amx_fb_r", "255")
register_cvar("amx_fb_g", "25")
register_cvar("amx_fb_b", "25")
}

public FlashedEvent( id )
{
new iMode = get_cvar_num("amx_fb_mode")

if ( !iMode ) return PLUGIN_CONTINUE

new iRed,iGreen,iBlue

switch( iMode )
{
case 1:
{
iRed = get_cvar_num("amx_fb_r")
iGreen = get_cvar_num("amx_fb_g")
iBlue = get_cvar_num("amx_fb_b")
}
case 2:
{
iRed = random_num(0,255)
iGreen = random_num(0,255)
iBlue = random_num(0,255)
}
}

if ( !( iRed ) || !( iGreen ) || !( iBlue ) )
{
iRed = 100
iGreen = 100
iBlue = 100
}

message_begin( MSG_ONE,g_nMsgScreenFade,{0,0,0},id )
write_short( read_data( 1 ) ) // Duration
write_short( read_data( 2 ) ) // Hold time
write_short( read_data( 3 ) ) // Fade type
write_byte ( iRed ) // Red
write_byte ( iGreen ) // Green
write_byte ( iBlue ) // Blue
write_byte ( read_data( 7 ) ) // Alpha
message_end()

return PLUGIN_HANDLED
}
Конфликт в том, что colored_flashbangs перекрывают действие no_team_flash. Можно ли сделать так, чтобы своих тиммейтов и себя нельзя было ослепить, а colored_flashbangs действовал только на соседнюю команду?
A: от voed в сообщении #5


CS_NADE_DROPS, пофиксить баг
Q: Существует несущественный, но неприятный баг в плагине. Если у игрока на руках находится граната, и если он её начинает кидать и в этот момент его убивают, то мы получаем труп+брошенная граната+плагин дропает ту гранату, которая уже кинута игроком.
csnadedrops
Код:
#include <amxmodx>
#include <engine>
#include <fun>

#define VOL_LOW 0.5 // volume used to play nade bouncing sound
#define NADE_OFFSET 10 // distance (vaguely) between death origin and nade origin

// DeathMSG
public event_damage(id) {

// if player is still alive or plugin is disabled
if(get_user_health(id) > 0 || get_cvar_num("mp_nadedrops") < 1) {
return PLUGIN_CONTINUE;
}

// if player had HE grenade
if(hasweapon(id,"weapon_hegrenade") > 0) {
new grenade = create_entity("info_target"); // create grenade entity
entity_set_string(grenade,EV_SZ_classname,"fake_hegrenade"); // change name
entity_set_int(grenade,EV_ENT_owner,id); // set owner
entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet

// set grenade entity's size
new Float:minbox[3] = { -2.5, -2.5, -2.5 }
new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
entity_set_vector(grenade,EV_VEC_mins,minbox);
entity_set_vector(grenade,EV_VEC_maxs,maxbox);

// set grenade's overall being of a whole
entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);

// set a random angle
new Float:angles[3] = { 0.0, 0.0, 0.0 };
angles[1] = 90.0;
entity_set_vector(grenade,EV_VEC_angles,angles);

// get player's origin
new Float:origin[3];
entity_get_vector(id,EV_VEC_origin,origin);
//origin[0] += NADE_OFFSET; // offset

// set model and origin
entity_set_model(grenade,"models/w_hegrenade123.mdl");
entity_set_vector(grenade,EV_VEC_origin,origin);
}

// if player had smoke grenade
if(hasweapon(id,"weapon_smokegrenade") > 0) {
new grenade = create_entity("info_target"); // create grenade entity
entity_set_string(grenade,EV_SZ_classname,"fake_smokegrenade"); // change name
entity_set_int(grenade,EV_ENT_owner,id); // set owner
entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet

// set grenade entity's size
new Float:minbox[3] = { -2.5, -2.5, -2.5 }
new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
entity_set_vector(grenade,EV_VEC_mins,minbox);
entity_set_vector(grenade,EV_VEC_maxs,maxbox);

// set grenade's overall being of a whole
entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);

// set a random angle
new Float:angles[3] = { 0.0, 0.0, 0.0 };
angles[1] = 90.0;
entity_set_vector(grenade,EV_VEC_angles,angles);

// get player's origin
new Float:origin[3];
entity_get_vector(id,EV_VEC_origin,origin);
origin[1] -= NADE_OFFSET; // offset

// set model and origin
entity_set_model(grenade,"models/w_smokegrenade123.mdl");
entity_set_vector(grenade,EV_VEC_origin,origin);
}

// if player had at least one flashbang
if(hasweapon(id,"weapon_flashbang") > 0) {
new grenade = create_entity("info_target"); // create grenade entity
entity_set_string(grenade,EV_SZ_classname,"fake_flashbang"); // change name
entity_set_int(grenade,EV_ENT_owner,id); // set owner
entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet

// set grenade entity's size
new Float:minbox[3] = { -2.5, -2.5, -2.5 }
new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
entity_set_vector(grenade,EV_VEC_mins,minbox);
entity_set_vector(grenade,EV_VEC_maxs,maxbox);

// set grenade's overall being of a whole
entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);

// set a random angle
new Float:angles[3] = { 0.0, 0.0, 0.0 };
angles[1] = 90.0;
entity_set_vector(grenade,EV_VEC_angles,angles);

// get player's origin
new Float:origin[3];
entity_get_vector(id,EV_VEC_origin,origin);
origin[1] += NADE_OFFSET; // offset

// set model and origin
entity_set_model(grenade,"models/w_flashbang123.mdl");
entity_set_vector(grenade,EV_VEC_origin,origin);
}

// if player had two flashbangs, drop another
if(hasweapon(id,"weapon_flashbang") > 1) {
new grenade = create_entity("info_target"); // create grenade entity
entity_set_string(grenade,EV_SZ_classname,"fake_flashbang"); // change name
entity_set_int(grenade,EV_ENT_owner,id); // set owner
entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet

// set grenade entity's size
new Float:minbox[3] = { -2.5, -2.5, -2.5 }
new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
entity_set_vector(grenade,EV_VEC_mins,minbox);
entity_set_vector(grenade,EV_VEC_maxs,maxbox);

// set grenade's overall being of a whole
entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);

// set a random angle
new Float:angles[3] = { 0.0, 0.0, 0.0 };
angles[1] = 90.0;
entity_set_vector(grenade,EV_VEC_angles,angles);

// get player's origin
new Float:origin[3];
entity_get_vector(id,EV_VEC_origin,origin);
origin[1] -= NADE_OFFSET; // offset
origin[1] -= NADE_OFFSET; // offset

// set model and origin
entity_set_model(grenade,"models/w_flashbang123.mdl");
entity_set_vector(grenade,EV_VEC_origin,origin);
}

return PLUGIN_CONTINUE;
}

// ResetHUD
public event_resethud(id) {
if(is_user_connected(id) == 1 && get_user_team(id) < 3) {
set_task(0.5,"checkalive",id); // delay, because client is technically dead on ResetHUD
}
}

// check if user is alive
public checkalive(id) {
if(is_user_alive(id) == 1) { // if so
clear_nades(id); // clear nades (they just spawned)
}
}

// entity touching
public pfn_touch(ptr,ptd) {
if(!is_valid_ent(ptd)) { // invalid toucher
return PLUGIN_CONTINUE;
}

new classname[32];
entity_get_string(ptd,EV_SZ_classname,classname,31); // get name of toucher

new bounced = entity_get_int(ptd,EV_INT_iuser1); // bounced yet?

// check if one of our fake grenades is colliding with world and mp_nadedropsounds is positive
if((equal(classname,"fake_hegrenade") || equal(classname,"fake_flashbang") || equal(classname,"fake_smokegrenade")) && ptr == 0 && bounced == 0 && get_cvar_num("mp_nadedropsounds") > 0) {
emit_sound(ptd,CHAN_ITEM,"weapons/he_bounce-1.wav",VOL_LOW,ATTN_NORM,0,PITCH_LOW); // play sound
entity_set_int(ptd,EV_INT_iuser1,1); // has bounced
return PLUGIN_CONTINUE;
}

// now check for more invalid entities or players
if(!is_valid_ent(ptr) || !is_valid_ent(ptd) || !is_user_connected(ptd)) {
return PLUGIN_CONTINUE;
}

entity_get_string(ptr,EV_SZ_classname,classname,31); // get name of touched

// if player is touching hegrenade and doesn't have one
if(equal(classname,"fake_hegrenade") && hasweapon(ptd,"weapon_hegrenade") == 0) {
give_item(ptd,"weapon_hegrenade");
remove_entity(ptr);
return PLUGIN_CONTINUE;
}

// if player is touching smokegrenade and doesn't have one
if(equal(classname,"fake_smokegrenade") && hasweapon(ptd,"weapon_smokegrenade") == 0) {
give_item(ptd,"weapon_smokegrenade");
remove_entity(ptr);
return PLUGIN_CONTINUE;
}

// if player is touching flashbang and has room for another
if(equal(classname,"fake_flashbang") && hasweapon(ptd,"weapon_flashbang") < 2) {
give_item(ptd,"weapon_flashbang");
remove_entity(ptr);
return PLUGIN_CONTINUE;
}

return PLUGIN_CONTINUE;
}

// client disconnection
public client_disconnect(id) {
clear_nades(id);
}

// function to check if player has a specific weapon.
// returns the amount of ammo for that weapon in backpack.
// we use this so we can check for multiple flashbangs as well
public hasweapon(id,weaponname[32]) {
if(is_user_connected(id) == 0 || get_user_team(id) > 2) {
return 0;
}

new weapons[32], num;
get_user_weapons(id,weapons,num); // get weapons

new foundweapon; // if we found the weapon yet (and if we did how much ammo for it)

// loop through weapons
for(new i=0;i<num;i++) {
new checkweaponname[32];
get_weaponname(weapons[i],checkweaponname,31);

if(equal(weaponname,checkweaponname)) { // compare names
new clip, ammo; // clip and ammo
get_user_ammo(id,weapons[i],clip,ammo); // get clip and ammo
foundweapon = ammo; // return amount in clip (for multiple FBs)
break;
}
}

return foundweapon;
}

// clear user's grenades
public clear_nades(id) {
new currnade;

// go through fake HE grenades
currnade = -1;
while((currnade = find_ent_by_class(currnade,"fake_hegrenade")) > 0) {
if(entity_get_int(currnade,EV_ENT_owner) == id) {
remove_entity(currnade);
}
}

// go through fake smoke grenades
currnade = -1;
while((currnade = find_ent_by_class(currnade,"fake_smokegrenade")) > 0) {
if(entity_get_int(currnade,EV_ENT_owner) == id) {
remove_entity(currnade);
}
}

// go through fake flashbangs
currnade = -1;
while((currnade = find_ent_by_class(currnade,"fake_flashbang")) > 0) {
if(entity_get_int(currnade,EV_ENT_owner) == id) {
remove_entity(currnade);
}
}
}

// plugin precache
public plugin_precache() {
precache_model("models/w_hegrenade123.mdl");
precache_model("models/w_flashbang123.mdl");
precache_model("models/w_smokegrenade123.mdl");
precache_sound("weapons/he_bounce-1.wav");
}

// plugin initiation
public plugin_init() {
register_plugin("CSNadeDrops","0.14","Avalanche");
console_print(0,"* CSNadeDrops 0.14 by Avalanche");

register_event("Damage","event_damage","b","2!0"); // damage event
register_event("ResetHUD","event_resethud","b"); // reset HUD event

register_cvar("mp_nadedrops","1",FCVAR_PRINTABLEONLY); // cvar to disable/enable plugin
register_cvar("mp_nadedropsounds","1",FCVAR_PRINTABLEONLY); // cvar to disable/enable nade drop sounds

// get the mod's name
new modname[32];
get_modname(modname,31);

// if this isn't Counter-Strike
if(!equal(modname,"cstrike")) {
pause("ae"); // lock the plugin
}
}
A: -
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 21.11.2014, 19:16
Сообщение #2


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

AntiFlash
разве ослепление не исчезает при смене оружия?
или impulse 101 ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя damilurg
сообщение 21.11.2014, 19:23
Сообщение #3


Иконка группы

Стаж: 13 лет

Сообщений: 1191
Благодарностей: 1297
Полезность: 1230

Legenda,
AntiFlash как раз таки блокирует ослепление своих тиммейтов и себя.
Colored Flashbangs ослепляет всех, и при смене оружия ослепление не исчезает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 21.11.2014, 19:25
Сообщение #4


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

хах
подумал что это AntiAntiFlash
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 21.11.2014, 19:46
Сообщение #5
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define PLUGIN "AntiFlash"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

new g_PlayerFlasher
new g_nMsgScreenFade
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_event("ScreenFade", "CheckFlash", "be", "4=255", "5=255", "6=255", "7>199")
register_event("23", "RemoveFlasher", "a", "1=5", "6=25", "7=6")
g_nMsgScreenFade = get_user_msgid("ScreenFade")
register_cvar("amx_fb_mode", "1")
register_cvar("amx_fb_r", "255")
register_cvar("amx_fb_g", "25")
register_cvar("amx_fb_b", "25")

register_forward(FM_SetModel, "CheckFlasher")
}

public CheckFlash(id)
{
if(get_user_team(id) == get_user_team(g_PlayerFlasher))
{
new iMode = get_cvar_num("amx_fb_mode")

if ( !iMode ) return PLUGIN_CONTINUE

new iRed,iGreen,iBlue

switch( iMode )
{
case 1:
{
iRed = get_cvar_num("amx_fb_r")
iGreen = get_cvar_num("amx_fb_g")
iBlue = get_cvar_num("amx_fb_b")
}
case 2:
{
iRed = random_num(0,255)
iGreen = random_num(0,255)
iBlue = random_num(0,255)
}
}

if ( !( iRed ) || !( iGreen ) || !( iBlue ) )
{
iRed = 100
iGreen = 100
iBlue = 100
}

message_begin( MSG_ONE,g_nMsgScreenFade,{0,0,0},id )
write_short( read_data( 1 ) ) // Duration
write_short( read_data( 2 ) ) // Hold time
write_short( read_data( 3 ) ) // Fade type
write_byte ( iRed ) // Red
write_byte ( iGreen ) // Green
write_byte ( iBlue ) // Blue
write_byte ( read_data( 7 ) ) // Alpha
message_end()
}
}

public RemoveFlasher()
{
set_task(0.05,"ResetFlasher")
return PLUGIN_CONTINUE
}

public ResetFlasher()
{
g_PlayerFlasher = 0
}


public SetFlasher(id)
{
g_PlayerFlasher = id - 12345
}


public CheckFlasher(iEntity, szModel[])
{

if(!equal(szModel, "models/w_flashbang.mdl"))
return FMRES_IGNORED

new iOwner = pev(iEntity, pev_owner)

if(iOwner == 0)
return FMRES_IGNORED

set_task(1.52, "SetFlasher", iOwner + 12345)
return FMRES_IGNORED
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя damilurg
сообщение 21.11.2014, 20:01
Сообщение #6


Иконка группы

Стаж: 13 лет

Сообщений: 1191
Благодарностей: 1297
Полезность: 1230

voed, теперь если выключить плагин Colored Flashbangs, то теперь флешка слепит рандомными цветами.
С включенным Colored Flashbangs эффект тот же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 21.11.2014, 20:15
Сообщение #7
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(damilurg @ 21.11.2014, 19:01) *
voed, теперь если выключить плагин Colored Flashbangs, то теперь флешка слепит рандомными цветами.
С включенным Colored Flashbangs эффект тот же.

Его и надо выключить. Я весь его функционал перенес в первый плагин, так что настраивай кварами
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 21.11.2014, 21:56
Сообщение #8
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

дада код креша,
я вот думал почему set_task 1,52

http://amxx.pl/topic/8913-czarny-flash-kto-cie-oslepil/

содрал внаглую


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

ham primarry attack тоже ненадежен, вызывается каждый фрейм, единственно корректно для эвента срабатывает csx - grenade_throw

таймер - 1.60 минимально, 1.69 чаще

Отредактировал: csnet, - 21.11.2014, 22:37


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: