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

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

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

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

Помогите поменять расположение гранат!

, плагин csnadedrops
Статус пользователя spals
сообщение 11.12.2011, 8:27
Сообщение #1


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

Я поставил плагин csnadedrops и задался вопросом как поменять расположение гранат!
Я видел на одном сервере что так сделали!
Но сам так и не понял как это сделать!

вот так они падают щас




вот так я хочу что-бы было




вот исходник плагина 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] = float(random_num(0,180));
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] = float(random_num(0,180));
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_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] = float(random_num(0,180));
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] = float(random_num(0,180));
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);
}

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
}
}


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя scurra
сообщение 11.12.2011, 9:57
Сообщение #2


Стаж: 17 лет

Сообщений: 458
Благодарностей: 141
Полезность: 707

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

ты хочешь чтобы они вертикально стояли или лежали в ряд?
в любом случае это делается в этих строчках:
Код
new Float:angles[3] = { 0.0, 0.0, 0.0 };
angles[1] = float(random_num(0,180));
entity_set_vector(grenade,EV_VEC_angles,angles);
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя spals
сообщение 11.12.2011, 10:00
Сообщение #3


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

Я хочу что-бы они лежали в ряд! Я то понял что изменять в этих строчках но дело в том что без понятия как и на что менять!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя scurra
сообщение 11.12.2011, 10:15
Сообщение #4


Стаж: 17 лет

Сообщений: 458
Благодарностей: 141
Полезность: 707

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

опять же вопрос: лежали в ряд все грены всех игроков одинаково или у каждого по разному?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя spals
сообщение 11.12.2011, 16:47
Сообщение #5


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

Я же сделал скрин как я хочу в первом посте! Именно так!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя scurra
сообщение 11.12.2011, 19:11
Сообщение #6


Стаж: 17 лет

Сообщений: 458
Благодарностей: 141
Полезность: 707

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

замени
Код
float(random_num(0,180))

на это
Код
90.0

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


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

если я так ставлю то тогда выходят ошибки

ошибка
csnadedrops.sma(35) : warning 213: tag mismatch
csnadedrops.sma(35) : error 088: number of arguments does not match definition
csnadedrops.sma(67) : warning 213: tag mismatch
csnadedrops.sma(67) : error 088: number of arguments does not match definition
csnadedrops.sma(99) : warning 213: tag mismatch
csnadedrops.sma(99) : error 088: number of arguments does not match definition
csnadedrops.sma(131) : warning 213: tag mismatch
csnadedrops.sma(131) : error 088: number of arguments does not match definition
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя scurra
сообщение 11.12.2011, 20:08
Сообщение #8


Стаж: 17 лет

Сообщений: 458
Благодарностей: 141
Полезность: 707

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

выложи куски кода из указанных в логе строк, нужно видеть как ты их написал ... у меня компилится без проблем
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя spals
сообщение 11.12.2011, 20:58
Сообщение #9


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

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

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

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

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


в общем исходник
#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] = float(random_num(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] = float(random_num(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_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] = float(random_num(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] = float(random_num(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);
}

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
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя scurra
сообщение 11.12.2011, 21:14
Сообщение #10


Стаж: 17 лет

Сообщений: 458
Благодарностей: 141
Полезность: 707

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

Код
angles[1] = 90.0;
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя spals
сообщение 11.12.2011, 21:27
Сообщение #11


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

scurra,
Спасибо конешно они не падают так как хотелось бы но по крайней мере так безобразно!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя scurra
сообщение 11.12.2011, 22:15
Сообщение #12


Стаж: 17 лет

Сообщений: 458
Благодарностей: 141
Полезность: 707

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

выложи скрин... попробуй другие значения от 0.0 до 180.0
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя spals
сообщение 12.12.2011, 3:05
Сообщение #13


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

вот так щас они падают

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя scurra
сообщение 12.12.2011, 14:13
Сообщение #14


Стаж: 17 лет

Сообщений: 458
Благодарностей: 141
Полезность: 707

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

пробуй так

#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
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя spals
сообщение 12.12.2011, 17:50
Сообщение #15


Стаж: 14 лет

Сообщений: 99
Благодарностей: 8
Полезность: < 0

scurra,

Всё огроменное вам спасибо!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: