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

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

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

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

Разминирование бомбы

, плагин
Статус пользователя pr0.JeR
сообщение 23.5.2015, 13:40
Сообщение #1
Стаж: 15 лет

Сообщений: 80
Благодарностей: 1
Полезность: 14

Имеется плагин
Код:
#include <amxmodx>
#include <fakemeta>

#define TE_EXPLOSION 3

new keys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2;
new g_Switch;
new i;
new PlayerDefused[33];
new Sprite;
new Float: Location[3];
new wire;
new g_AllTalk;

public plugin_init()
{
register_plugin("Cut The Right Wire","0.4","The Specialist");
g_Switch = register_cvar("ctrw_switch","1");
g_AllTalk = register_cvar("ctrw_alltalk","1");
register_dictionary("right_wire.txt");
register_menucmd(register_menuid("menu_show"),1023,"menu_choose");
register_event("ResetHUD","wire_call","be");
register_logevent("bomb_defuse_no_kit", 3, "2=Begin_Bomb_Defuse_Without_Kit");
register_logevent("bomb_defuse_no_kit", 3, "2=Begin_Bomb_Defuse_With_Kit");
register_forward(FM_PlayerPreThink,"block_buttons");
}
// detect defusing
public bomb_defuse_no_kit()
{
new id = get_loguser_index();

if(get_pcvar_num(g_Switch)==0 || PlayerDefused[id] > 0 || is_user_bot(id)==1)
{
return PLUGIN_HANDLED;
}else{
new menu[192];
format(menu,191,"%L",id,"CHOOSE");
show_menu(id,keys,menu,-1,"menu_show");
++PlayerDefused[id];
all_talk();
++i;
return 0;
}
return 0;
}
// reset hud event
public wire_call(id)
{
PlayerDefused[id] = 0;
wire = random_num(0,1);
}
// remove use button and show menu
public menu_choose(id,key)
{
switch(key)
{
case 0 :
{
if( wire == 0 )
{
--i;
return PLUGIN_HANDLED;
}else{
bomb_explosion(id);
PlayerDefused[id] = 0;
return 1
}
}
case 1:
{
if( wire == 1)
{
--i;
return PLUGIN_HANDLED;
}else{
bomb_explosion(id);
PlayerDefused[id] = 0;
return 1
}
}
}
return PLUGIN_HANDLED;
}
// block the users use button
public block_buttons(id)
{
if( i == 0 )
{
return 1;
}else{
set_pev( id, pev_button, pev(id,pev_button) & ~IN_USE);
}
return 1;
}
//bomb explosion
public bomb_explosion(id)
{
pev(id, pev_origin,Location);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION);
engfunc(EngFunc_WriteCoord,Location[0]);
engfunc(EngFunc_WriteCoord,Location[1]);
engfunc(EngFunc_WriteCoord,Location[2]);
write_short(Sprite);
write_byte(255);
write_byte(0);
write_byte(0);
message_end();
user_silentkill(id);
PlayerDefused[id] = 0;
i = 0;
return 1;
}
// turn all talk on
public all_talk()
{
if(get_pcvar_num(g_AllTalk)==0)
{
return PLUGIN_HANDLED;
}else{
set_cvar_string("sv_alltalk","1");
}
return PLUGIN_HANDLED;
}
// function to get index from log events
public get_loguser_index()
{
new loguser[80], name[32];
read_logargv(0, loguser, 79);
parse_loguser(loguser, name, 31);
return get_user_index(name);
}
//precache sprites for exloasion
public plugin_precache()
{
Sprite = precache_model("sprites/zerogxplode.spr");
}

хотелось бы сделать так чтоб выбрал провод и бомба была либо разминированна либо нет.
В данном плагине идет выбор провода, затем разминирование если ты угадал.
Может кто ни то помочь в этом?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fintok
сообщение 27.5.2015, 15:51
Сообщение #2


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Копаться в чужом коде, если честно лень, покажу лиш простой пример функций быстрого разминирования и взрыва бомбы.
Принцип работы плагина: при минировании игроком бомбы случайно выбирается действие, обезвредить бомбу или взорвать немедленно, шанс 50х50

Код:
#include <amxmodx>
#include <fakemeta_util>

#define PLUGIN "Lucky Guy"
#define VERSION "0.1"
#define AUTHOR "Player"

#define m_flC4Blow 100
#define m_flDefuseCountDown 99

new g_iBarTime

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

g_iBarTime = get_user_msgid("BarTime")
}

public bomb_defusing(id)
{
new c4 = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl")

new m_flAction = (random(101) > 50) ? m_flDefuseCountDown : m_flC4Blow

set_pdata_float(c4, m_flAction, 0.0)
dllfunc(DLLFunc_Think, c4)

message_begin(MSG_ONE, g_iBarTime, _, id)
write_short(0)
message_end()
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: