RU
RU
UA
EN
PL
ГЛАВНАЯ
УСЛУГИ
ПЛАГИНЫ
КАРТЫ
REBUY
SCANMON
CASSA
SALE
ФОРУМ
МОНИТОР
HELP
КОНТАКТ
Главная
/
Plugins
/
Knife Duels Arena 1v1
Плагин не прошел проверку:
сюда разве не должен быть доп файл ?
Создайте новую запись с устранением ошибок
Knife Duels Arena 1v1
Теги:
Скачать плагины cs
Серверные
Плагин, который создает отдельную текстуру (арену) для игроков.
Компилятор: 1.8.2
2688
Команды:
Кваров и команд нет
.sma / .sp
/* Plugin generated by AMXX-Studio */ #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
new MAXPLAYERS #define CHAT_TAG "^3[^4KnifeDuels^3]^1 " // Добавьте/уберите пробел перед последними кавычками, если хотите/не хотите отделить префикс от сообщения #define DUEL_COMMAND "/duel" // чат команда для начала дуэли #define TOGGLE_COMMAND "/offduel" // чат команда чтобы перейти в онлайн или оффлайн режим #define GIVEUP_COMMAND "/giveup" // чат команда для завершения дуэли #define ARENA_ENT_NAME "entity_arena" // название объекта арены // Максимальное количство игроков для участия на арене #define MAX_ARENAS 4 new const arena_names[][] = { "", "A", // 1st arena "B", // 2nd arena "C", // 3rd arena "D" // 4th arena } // some arena codes... #define ARENA_CODE 305924 #define FAKE_CODE 6969696969 #define CENTER_CODE 9696969696 #define EXTRA_CODE 911911911 // task code for advert #define TASK_AD 34585029 #define TASK_DUEL 34585029 #define TASK_GIVEUP 34585029 #define TASK_OFFLINE 34585029 // some movement defines #define MOVE_UP 0 #define MOVE_DOWN 1 #define MOVE_RIGHT 2 #define MOVE_LEFT 3 #define MOVE_FRONT 4 #define MOVE_BACK 5 // Arena ground size #define ARENA_MINS Float:{-150.0,-62.0,-1.5} #define ARENA_MAXS Float:{10.0,62.0,1.5} // arena coords offcourse, this is used to build the arena. new const Float:ARENA_COORDS[][2] = { {0.0,0.0}, {100.0,0.0}, {0.0,100.0}, {100.0,100.0}, {-100.0,0.0}, {0.0,-100.0}, {-100.0,-100.0}, {-100.0,100.0}, {100.0,-100.0}, {200.0,0.0}, {200.0,100.0}, {200.0,-100.0} } enum { BLUE_SIDE = 0, RED_SIDE = 1, LEFT_SIDE = 2, RIGHT_SIDE = 3, TOP_SIDE = 4 } new const ARENA_FILE[] = "%s/duel_arena/%s.cfg" new user_can_spawn[33]; // если вы хотите отключить один из звуков ниже, то переименуйте его в "common/null.wav" new const DUEL_SOUNDS[][] = { "ambience/goal_1.wav", // 0 round win "x/nih_die2.wav", // 1 round lose "ambience/des_wind1.wav", // 2 round draw "buttons/bell1.wav", // 3 round start "buttons/blip1.wav" , // 4 accepted duel "common/null.wav", // 5 Countdown "common/null.wav" // 6 "Go!" } new const ARENA_MODELS[][] = { "models/Knif3Albastrel.mdl", // Arena's ground "models/Knif3Albastrel.mdl" // Arena's walls } new const MAP_FIX[][] = { "35hp_2" } new Float:MAP_FIX_Z_COORD[] = { -864.253723 } new Head_shot[33][33] new fakes; new is_in_duel[33],his_countdown[33],is_frozen[33],his_challenger[33],his_asker[33],arena_number[33],his_wins[33],his_name[33][64]; new rounds[MAX_ARENAS+1],Float:arena_coord[MAX_ARENAS+1][3]; // using +1 just incase... new Float:his_spawn[33][3],got_spawn[33],Float:his_angle[33][3],Float:his_original_spawn[33][3]; new next_empty_arena,total_arenas; new map_name[32] new cvar_z_fix,cvar_sounds,cvar_rounds,cvar_kills,cvar_cooldown,cvar_time new Float:max_size[3],Float:min_size[3]; new selected = 1,Float:move_size[33],his_timer[33],his_offline[33],his_HS[33]; new map_default_hp; new map_id = -1; new his_previous_team[33]; // using these for less cpu usage. new IS_BUGGED_MAP = 0,MAP_FIX_ENABLED,SOUNDS_ENABLED,MAX_ROUNDS,MAX_KILLS,MAX_COUNTDOWN,MAX_TIME; new g_allocPmod, g_allocVmod static const szg_Pbk[] = "models/p_raizo.mdl" static const szg_Vbk[] = "models/v_raizo.mdl" const OFFSET_WEAPONOWNER = 41 const OFFSET_LINUX_WEAPONS = 4 #define P_NAME "Knife Duels" #define P_VERS "2.0.5" #define P_AUTH "raizo" #define P_REQ "- Knife Arena -" new killed_forward; #define ROUND_START_TASK 3215468 new const IP[] = "100.81.228.126:27015" public plugin_init() { new curIP[128]; get_user_ip(0,curIP,charsmax(curIP),0) if(!equali(IP,curIP)) { set_fail_state("Need to pay for license 'Steam : raizo99'") return; } register_plugin(P_NAME, P_VERS, P_AUTH) register_clcmd("say","say_hook") register_clcmd("say_team","say_hook") register_clcmd("say /origin","print_coords") register_clcmd("say /arena","editor_menu") // prevent the use of C4? //register_event("CurWeapon","CurrentWeapon","be","1=1") RegisterHam(Ham_Killed, "player", "Player_Killed") RegisterHam(Ham_TakeDamage, "player", "Player_Take_Damage", 0) //RegisterHam(Ham_CS_RoundRespawn, "player", "Player_Respawn_pre", 0) register_forward( FM_CmdStart , "Cmd_start" ); register_event("HLTV", "round_start_event", "a", "1=0", "2=0") cvar_z_fix = register_cvar("gld_z_map_fix","1") cvar_sounds = register_cvar("gld_sounds","1") cvar_rounds =register_cvar("gld_rounds","20") cvar_kills =register_cvar("gld_kills","20") cvar_cooldown = register_cvar("gld_cooldown","1") cvar_time = register_cvar("gld_max_nokill_time","20") //register_forward(FM_SetModel, "fw_SetModel") RegisterHam(Ham_Spawn,"player","Player_spawn_post",1) g_allocPmod = engfunc(EngFunc_AllocString, szg_Pbk) g_allocVmod = engfunc(EngFunc_AllocString, szg_Vbk) get_mapname(map_name,charsmax(map_name)) new size = sizeof(MAP_FIX) for(new i; i
MAX_ARENAS || selected == -1) { selected = 1 select_the_fake_arena(EXTRA_CODE+selected) } } } else client_print_color(id,"%s ^3Достигнуто максимальное количество арен.^1",CHAT_TAG) } else if(equali(szName,"Ydalit")) { if(fakes_count()) { if(selected > MAX_ARENAS || selected == -1) selected = 1 delete_the_fake_arena(EXTRA_CODE+selected) if(fakes_count()) next_selection() } else client_print_color(id,"%s ^3Арены не найдены.",CHAT_TAG) } else if(equali(szName,"Ydalit vse")) { //remove_menu(id) remove_the_fake_arena() client_print_color(id,"%s ^3Все арены удалены.",CHAT_TAG) } else if(equali(szName,"Videlit")) { if(fakes_count()) { next_selection() } else client_print_color(id,"%s ^3Арены не найдены.",CHAT_TAG) } else if(equali(szName,"Videlit vse")) { if(fakes_count()) { selected = -1 select_the_fake_arena(EXTRA_CODE+selected) } else client_print_color(id,"%s ^3Арены не найдены.",CHAT_TAG) } else if(equali(szName,"Raspolozhenie")) { if(fakes_count()) { if(selected > MAX_ARENAS) selected = 1 select_the_fake_arena(EXTRA_CODE+selected) menu_destroy( menu ); move_menu(id,EXTRA_CODE+selected) return PLUGIN_CONTINUE; } else client_print_color(id,"%s ^3Арены не найдены.",CHAT_TAG) } else if(equali(szName,"Zagryzit areny")) { remove_the_fake_arena() load_arena_coords(id) //client_print_color(id, DontChange,"%s ^3Координаты арены загружены.",CHAT_TAG) set_task(0.1,"delay_build",id) } else if(equali(szName,"Save")) { if(fakes_count()) { save_arena_coords(id) remove_the_fake_arena() load_arena_coords(id) } else { client_print_color(id,"%s ^3Арены не найдены.",CHAT_TAG) } } if(!arenas_found && fakes_count()) { next_selection() } menu_destroy( menu ); editor_menu(id) return PLUGIN_CONTINUE; } stock next_selection() { if(selected == -1) { selected = 1 } new size = MAX_ARENAS*3 for(new slct=0;slct < size;slct++) { selected++ if(selected > MAX_ARENAS) selected = 1 if(fake_arena_exists(selected)) { select_the_fake_arena(EXTRA_CODE+selected) return; } } } public fake_arena_exists(code) { new arenas_ent = -1 new code_ent while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE) { code_ent = entity_get_int(arenas_ent,EV_INT_iuser3)-EXTRA_CODE if(code_ent == code) { return PLUGIN_HANDLED } } } return PLUGIN_CONTINUE } public fakes_count() { new arenas_ent = -1 new found = 0 while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE) { found++ } } return found } public arenas_count() { new found = 0 for(new id;id < MAXPLAYERS;id++) { if(is_user_connected(id)) { if(is_in_duel[id] == 2) found++ } } return found/2 } public delay_build(id) { for(new i=1;i < total_arenas+1;i++) { start_fake_build(id,i) } if(fakes_count()) { next_selection() } } public move_menu(id,code) { new menu menu = menu_create( "\rРасположение арены:", "move_handler" ); new nameu[32]; new code_t[32]; num_to_str(code,code_t,charsmax(code_t)) formatex(nameu,charsmax(nameu), "Sdvig vverx"); menu_additem(menu, nameu, code_t, 0); formatex(nameu,charsmax(nameu), "Sdvig vniz"); menu_additem(menu, nameu, code_t, 0); formatex(nameu,charsmax(nameu), "Sdvig vpered"); menu_additem(menu, nameu, code_t, 0); formatex(nameu,charsmax(nameu), "Sdvig nazad"); menu_additem(menu, nameu, code_t, 0); formatex(nameu,charsmax(nameu), "Sdvig vpravo"); menu_additem(menu, nameu, code_t, 0); formatex(nameu,charsmax(nameu), "Sdvig vlevo"); menu_additem(menu, nameu, code_t, 0); formatex(nameu,charsmax(nameu), "Ydalit areny"); menu_additem(menu, nameu, code_t, 0); formatex(nameu,charsmax(nameu), "Razmer areni: %.2f",move_size[id]); menu_additem(menu, nameu, code_t, 0); menu_display(id, menu, 0 ); return PLUGIN_HANDLED } public move_handler( id, menu, item ) { if ( item == MENU_EXIT ) { menu_destroy( menu ); set_task(0.1,"editor_menu",id) return PLUGIN_HANDLED; } new szData[32], szName[64]; new _access, item_callback; menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback ); new code = str_to_num(szData) if(equali(szName,"ydalit areny")) { delete_the_fake_arena(code) menu_destroy( menu ); editor_menu(id) unselect_the_fake_arena(0) return PLUGIN_CONTINUE; } else if(containi(szName,"razmer areni:") != -1) { move_size[id]+= 10.0 if(move_size[id] > 100.0) { move_size[id] = 10.0 } } else if(equali(szName,"sdvig vverx")) { move_the_fake_arena(id,code,MOVE_UP) } else if(equali(szName,"sdvig vniz")) { move_the_fake_arena(id,code,MOVE_DOWN) } else if(equali(szName,"sdvig vpravo")) { move_the_fake_arena(id,code,MOVE_RIGHT) } else if(equali(szName,"sdvig vlevo")) { move_the_fake_arena(id,code,MOVE_LEFT) } else if(equali(szName,"sdvig vpered")) { move_the_fake_arena(id,code,MOVE_FRONT) } else if(equali(szName,"sdvig nazad")) { move_the_fake_arena(id,code,MOVE_BACK) } menu_destroy( menu ); move_menu(id,code) return PLUGIN_CONTINUE; } public save_arena_coords(id) { new found; new cfgdir[32], mapname[32], urlfile[64] get_configsdir(cfgdir, charsmax(cfgdir)) get_mapname(mapname, charsmax(mapname)) formatex(urlfile, charsmax(urlfile), ARENA_FILE, cfgdir, mapname) if (file_exists(urlfile)) delete_file(urlfile) new lineset[128] new Float:origin[3] new arenas_ent=-1; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE) { found++ pev(arenas_ent,pev_origin,origin); format(lineset, charsmax(lineset), "%.f %.f %.f", origin[0], origin[1], origin[2]) write_file(urlfile, lineset,found) } } if(!found) client_print_color(id, "%s Не удалось сохранить: ^3Арена не найдена.",CHAT_TAG) else client_print_color(id,"%s %d ^3Координаты арены сохранены.",CHAT_TAG,found) } public print_coords(id) { new Float:coord[3] pev(id,pev_origin,coord); client_print_color(id,"origin: ^3%.f %.f %.f",coord[0],coord[1],coord[2]) return PLUGIN_HANDLED } public start_fake_build(id,zecode) { if(!is_user_connected(id)) return PLUGIN_HANDLED new ext_code if(zecode == -1) { ext_code = next_fake_arena() if(ext_code == -1) return PLUGIN_HANDLED } else ext_code = zecode ext_code+=EXTRA_CODE static Float:origin[3]; if(zecode == -1) get_user_hitpoint(id,origin) else { origin[0]=arena_coord[zecode][0] origin[1]=arena_coord[zecode][1] origin[2]=arena_coord[zecode][2] } /*origin[0] = 1002.911376 origin[1] = -1561.421997 origin[2] = 0.0*/ new Float:fake_origin[3] static size size = sizeof(ARENA_COORDS) new ent_code = FAKE_CODE fakes++ for(new coords;coords < size; coords++) { fake_origin[0] = origin[0] fake_origin[1] = origin[1] if(bugged_map()) fake_origin[2]= MAP_FIX_Z_COORD[map_id] else fake_origin[2] = origin[2] //fake_origin[2]=-712.876892 fake_origin[0]+=ARENA_COORDS[coords][0]*1.7 fake_origin[1]+=ARENA_COORDS[coords][1]*1.53 new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall")); set_pev(ent,pev_classname,ARENA_ENT_NAME); engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]); entity_set_int(ent, EV_INT_solid, SOLID_BBOX); engfunc(EngFunc_SetSize,ent,ARENA_MINS,ARENA_MAXS); entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE); entity_set_int(ent,EV_INT_iuser1,ent_code) entity_set_int(ent,EV_INT_iuser3,ext_code) engfunc(EngFunc_SetOrigin,ent,fake_origin); stuck_check(fake_origin,120.0) static Float:rvec[3]; pev(ent,pev_v_angle,rvec); rvec[0]=90.0; set_pev(ent,pev_angles,rvec); if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 100.0) { fake_origin[0] += max_size[0] fake_origin[1] += max_size[1] //create_wall(LEFT_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin) } if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == -100.0) { fake_origin[0] += max_size[2] fake_origin[1] += min_size[0] //create_wall(RIGHT_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin) } if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 0.0) { create_wall(TOP_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin) entity_set_int(ent,EV_INT_iuser2,CENTER_CODE) } else if(ARENA_COORDS[coords][0] == 200.0 && ARENA_COORDS[coords][1] == 0.0) { fake_origin[0] += min_size[1] //create_wall(BLUE_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin) } else if(ARENA_COORDS[coords][0] == -100.0 && ARENA_COORDS[coords][1] == 0.0) { fake_origin[0] += min_size[2] //create_wall(RED_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin) } set_rendering(ent,kRenderFxGlowShell,0,50,0,kRenderNormal,10) } select_the_fake_arena(ext_code) return PLUGIN_HANDLED; } public move_the_fake_arena(id,code,moveto) { new num; num = code-EXTRA_CODE new arenas_ent=-1; new Float:origin[3]; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE) { if(entity_get_int(arenas_ent,EV_INT_iuser3) == code || num == -1) { pev(arenas_ent,pev_origin,origin); switch(moveto) { case MOVE_UP: { origin[2]+=move_size[id] } case MOVE_DOWN: { origin[2]-=move_size[id] } case MOVE_RIGHT: { origin[1]+=move_size[id] } case MOVE_LEFT: { origin[1]-=move_size[id] } case MOVE_FRONT: { origin[0]+=move_size[id] } case MOVE_BACK: { origin[0]-=move_size[id] } } engfunc(EngFunc_SetOrigin,arenas_ent,origin); stuck_check(origin,360.0) } } } } public select_the_fake_arena(code) { new num; num = code-EXTRA_CODE new arenas_ent=-1; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE) { if(num == -1) set_rendering(arenas_ent,kRenderFxGlowShell,250,0,0,kRenderNormal,10) else if(entity_get_int(arenas_ent,EV_INT_iuser3) == code) set_rendering(arenas_ent,kRenderFxGlowShell,250,0,0,kRenderNormal,10) } } unselect_the_fake_arena(code) } public unselect_the_fake_arena(code) { new num; num = code-EXTRA_CODE if(num == -1) return; new arenas_ent=-1; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE && entity_get_int(arenas_ent,EV_INT_iuser3) != code) set_rendering(arenas_ent,kRenderFxGlowShell,50,50,50,kRenderTransAdd,120) } } public delete_the_fake_arena(code) { new arenas_ent=-1; new found = 0 while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE && entity_get_int(arenas_ent,EV_INT_iuser3) == code) { engfunc(EngFunc_RemoveEntity,arenas_ent) found++ } } if(found) { fakes-- } } public load_arena_coords(id) { // Check for spawns points of the current map new cfgdir[32], mapname[32], filepath[100], linedata[64] get_configsdir(cfgdir, charsmax(cfgdir)) get_mapname(mapname, charsmax(mapname)) formatex(filepath, charsmax(filepath), ARENA_FILE, cfgdir, mapname) new arena = 0 total_arenas = 0 // Load spawns points if (file_exists(filepath)) { new file = fopen(filepath,"rt"), row[4][6] while (file && !feof(file)) { fgets(file, linedata, charsmax(linedata)) // invalid spawn if(!linedata[0] || str_count(linedata,' ') < 2) continue; arena++ if (arena > MAX_ARENAS) { break } // get spawn point data parse(linedata,row[0],5,row[1],5,row[2],5) // origin arena_coord[arena][0] = floatstr(row[0]) arena_coord[arena][1] = floatstr(row[1]) if(bugged_map()) arena_coord[arena][2] = MAP_FIX_Z_COORD[map_id] else arena_coord[arena][2] = floatstr(row[2]) total_arenas = arena } if (file) fclose(file) } if(id != -1) { if(!total_arenas) { client_print_color(id,"%sНе удалось загрузить: ^3Арена не найдена.",CHAT_TAG) } else { client_print_color(id,"%s%d ^3арена%s загружена.",CHAT_TAG,total_arenas, (total_arenas > 1 ? "s" : "")) } } } stock bugged_map() { if(!MAP_FIX_ENABLED) return PLUGIN_CONTINUE if(IS_BUGGED_MAP) return PLUGIN_HANDLED return PLUGIN_CONTINUE } stock str_count(const str[], searchchar) { new count, i, len = strlen(str) for (i = 0; i <= len; i++) { if(str[i] == searchchar) count++ } return count; } public Player_spawn_post(id) { Set_Entity_Invisible(id, 0) if(is_user_alive(id)) { if(is_in_duel[id] != 2) { set_task(1.0,"get_spawn_origin",id) return; } if(is_in_duel[id] == 2) spawn_back(id) } } public spawn_back(id) { entity_set_origin(id,his_spawn[id]) set_user_health(id,map_default_hp) set_user_armor(id,0) set_user_godmode(id, 0) if(is_user_connected(his_challenger[id])) { check_teams(id,his_challenger[id]) entity_set_origin(his_challenger[id],his_spawn[his_challenger[id]]) set_user_health(his_challenger[id],map_default_hp) set_user_armor(his_challenger[id],0) entity_set_vector(id, EV_VEC_angles, his_angle[id]) entity_set_int(id, EV_INT_fixangle, 1) entity_set_vector(his_challenger[id], EV_VEC_angles, his_angle[his_challenger[id]]) entity_set_int(his_challenger[id], EV_INT_fixangle, 1) } } public update_cvars() { MAP_FIX_ENABLED = get_pcvar_num(cvar_z_fix) SOUNDS_ENABLED = get_pcvar_num(cvar_sounds) MAX_ROUNDS = get_pcvar_num(cvar_rounds) MAX_KILLS = get_pcvar_num(cvar_kills) MAX_COUNTDOWN = get_pcvar_num(cvar_cooldown) MAX_TIME = get_pcvar_num(cvar_time) } stock remove_allarenas() { new arenas_ent=-1; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { engfunc(EngFunc_RemoveEntity,arenas_ent) } fakes = 0 } public get_all_arena_coords(id) { new Float:origin[3] new arenas_ent=-1; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE) { pev(arenas_ent,pev_origin,origin); client_print(id,print_console,"%.f %.f %.f",origin[0],origin[1],origin[2]) } } client_print_color(id, "%s ^4Координаты отображены в консоле.",CHAT_TAG) } public remove_the_fake_arena() { new arenas_ent=-1; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE) engfunc(EngFunc_RemoveEntity,arenas_ent) } fakes = 0 } public next_fake_arena() { if(fakes_count() >= MAX_ARENAS) return -1 for(new i=1;i < MAX_ARENAS+1;i++) { if(!fake_arena_exists(i)) { return i } } return -1 /*new num = fakes num++ return num*/ } public remove_the_arena(code) { new arenas_ent=-1; while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) { if(entity_get_int(arenas_ent,EV_INT_iuser1) == code) engfunc(EngFunc_RemoveEntity,arenas_ent) } } public start_build(id) { if(!is_user_connected(id)) return PLUGIN_HANDLED if(is_in_duel[id] != 2) return PLUGIN_HANDLED if(!his_challenger[id]) return PLUGIN_HANDLED if(!total_arenas) { return PLUGIN_HANDLED } static Float:origin[3]; //get_user_hitpoint(id,origin) /*origin[0] = 1002.911376 origin[1] = -1561.421997 origin[2] = 0.0*/ origin[0] = arena_coord[arena_number[id]][0] origin[1] = arena_coord[arena_number[id]][1] origin[2] = arena_coord[arena_number[id]][2] new Float:fake_origin[3] static size size = sizeof(ARENA_COORDS) new ent_code = arena_number[id]+ARENA_CODE for(new coords;coords < size; coords++) { fake_origin[0] = origin[0] fake_origin[1] = origin[1] fake_origin[2] = origin[2] //fake_origin[2]=-712.876892 //fake_origin[2]=-864.253723 fake_origin[0]+=ARENA_COORDS[coords][0]*1.7 fake_origin[1]+=ARENA_COORDS[coords][1]*1.53 new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall")); set_pev(ent,pev_classname,ARENA_ENT_NAME); engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]); entity_set_int(ent, EV_INT_solid, SOLID_BBOX); engfunc(EngFunc_SetSize,ent,ARENA_MINS,ARENA_MAXS); entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE); entity_set_int(ent,EV_INT_iuser1,ent_code) engfunc(EngFunc_SetOrigin,ent,fake_origin); static Float:rvec[3]; pev(ent,pev_v_angle,rvec); rvec[0]=90.0; set_pev(ent,pev_angles,rvec); if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 100.0) { create_wall(LEFT_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin) } if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == -100.0) { create_wall(RIGHT_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin) } if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 0.0) { create_wall(TOP_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin) entity_set_int(ent,EV_INT_iuser2,CENTER_CODE) } else if(ARENA_COORDS[coords][0] == 200.0 && ARENA_COORDS[coords][1] == 0.0) { create_wall(BLUE_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin) if(cs_get_user_team(id) == CS_TEAM_CT) { set_spawn_positions(id,BLUE_SIDE,fake_origin,rvec) } else { if(his_challenger[id]) { set_spawn_positions(his_challenger[id],BLUE_SIDE,fake_origin,rvec) } } //set_rendering(ent,kRenderFxGlowShell,0,0,200,kRenderNormal,10) } else if(ARENA_COORDS[coords][0] == -100.0 && ARENA_COORDS[coords][1] == 0.0) { create_wall(RED_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin) if(cs_get_user_team(id) == CS_TEAM_T) { set_spawn_positions(id,RED_SIDE,fake_origin,rvec) } else { if(his_challenger[id]) { set_spawn_positions(his_challenger[id],RED_SIDE,fake_origin,rvec) } } //set_rendering(ent,kRenderFxGlowShell,200,0,0,kRenderNormal,10) } spawn_back(id) } return PLUGIN_HANDLED; } public set_spawn_positions(id,side,Float:origin[3],Float:angle[3]) { if(side == BLUE_SIDE) his_spawn[id][0] = origin[0]-20.0 else his_spawn[id][0] = origin[0]-120.0 his_spawn[id][1] = origin[1] his_spawn[id][2] = origin[2]+50.0 entity_get_vector(id, EV_VEC_angles,his_angle[id]) switch(side) { case RED_SIDE: { his_angle[id][1] = 0.0 his_angle[id][0] = 0.0 } case BLUE_SIDE: { his_angle[id][1] = 180.0 his_angle[id][0] = 0.0 } } got_spawn[id] = 1 } public stuck_check(Float:origin[3],Float:radius) { new player=-1; while((player = find_ent_in_sphere(player,origin,radius)) != 0) { if(is_user_alive(player)) { if(is_player_stuck(player) && is_in_duel[player] != 2) { back_to_the_spawn(player) } } } } stock is_player_stuck(id) { static Float:originF[3] pev(id, pev_origin, originF) engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0) if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen)) return true; return false; } public create_wall(type,alpha,solidity,code,code1,code2,Float:origin[3]) { new Float:wall_maxsize[3]; new Float:wall_minsize[3]; new Float:rvec[3]; new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall")); pev(ent,pev_v_angle,rvec); switch(type) { case BLUE_SIDE: { wall_maxsize[0] = 2.0 wall_minsize[0] = 0.0 wall_maxsize[1] = 230.0 wall_minsize[1] = -230.0 wall_maxsize[2] = 150.0 wall_minsize[2] = -1.0 rvec[1]=180.0 } case RED_SIDE: { wall_maxsize[0] = -150.0 wall_minsize[0] = -152.0 wall_maxsize[1] = 230.0 wall_minsize[1] = -230.0 wall_maxsize[2] = 150.0 wall_minsize[2] = -1.0 rvec[1]=180.0 } case LEFT_SIDE: { wall_maxsize[0] = 360.0 wall_minsize[0] = -300.0 wall_maxsize[1] = 65.0 wall_minsize[1] = 63.0 wall_maxsize[2] = 150.0 wall_minsize[2] = -1.0 rvec[1]=90.0 } case RIGHT_SIDE: { wall_maxsize[0] = 360.0 wall_minsize[0] = -300.0 wall_maxsize[1] = -63.0 wall_minsize[1] = -65.0 wall_maxsize[2] = 150.0 rvec[1]=90.0 } case TOP_SIDE: { wall_maxsize[0] = 360.0 wall_minsize[0] = -300.0 wall_maxsize[1] = 230.0 wall_minsize[1] = -230.0 wall_maxsize[2] = 150.0 wall_minsize[2] = 148.0 rvec[0]=90.0 } } set_pev(ent,pev_angles,rvec); set_pev(ent,pev_classname,ARENA_ENT_NAME); engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]); entity_set_int(ent, EV_INT_solid, solidity); engfunc(EngFunc_SetSize,ent,wall_minsize,wall_maxsize); entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE); entity_set_int(ent,EV_INT_iuser1,code) entity_set_int(ent,EV_INT_iuser2,code1) entity_set_int(ent,EV_INT_iuser3,code2) engfunc(EngFunc_SetOrigin,ent,origin); set_rendering(ent,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,alpha) } public get_spawn_origin(id) { pev(id,pev_origin,his_original_spawn[id]); } stock get_user_hitpoint(id,Float:hOrigin[3]) { if(!is_user_alive(id)) return 0; new Float:fOrigin[3],Float:fvAngle[3],Float:fvOffset[3],Float:fvOrigin[3],Float:feOrigin[3]; new Float:fTemp[3]; pev(id,pev_origin,fOrigin); pev(id,pev_v_angle,fvAngle); pev(id,pev_view_ofs,fvOffset); xs_vec_add(fOrigin,fvOffset,fvOrigin); engfunc(EngFunc_AngleVectors,fvAngle,feOrigin,fTemp,fTemp); xs_vec_mul_scalar(feOrigin,9999.9,feOrigin); xs_vec_add(fvOrigin,feOrigin,feOrigin); engfunc(EngFunc_TraceLine,fvOrigin,feOrigin,0,id); global_get(glb_trace_endpos,hOrigin); return 1; } public plugin_precache() { new size; size = sizeof(ARENA_MODELS) for(new i; i< size; i++) { engfunc(EngFunc_PrecacheModel,ARENA_MODELS[i]); precache_model("models/v_raizo.mdl") precache_model("models/p_raizo.mdl") } } public round_start_event() { update_cvars() // использование переменной для хранения имен игроков вместо того, чтобы все время восстанавливать... for(new id;id < MAXPLAYERS;id++) { if(is_user_connected(id)) { get_user_name(id,his_name[id],charsmax(his_name)) } } } public Advertise(task) { client_print_color(0,"^3[^4Арена^3] ^1Победи ^4или ^1Умри ^4на ^3%s",P_NAME) set_task(100.0,"Advertise",TASK_AD) } public GlobalKnife(task) { client_print_color(0,"^3[^4Арена^3] ^1Команда ^3%s ^1позволяет открыть ^4Меню дуэли",DUEL_COMMAND) set_task(150.0,"GlobalKnife",TASK_DUEL) } public GiveUpDuel(task) { client_print_color(0,"^3[^4Арена^3] ^1Команда ^3%s ^1позволит завершить ^4Дуэль",GIVEUP_COMMAND) set_task(200.0,"GiveUpDuel",TASK_GIVEUP) } public OfflineDuel(task) { client_print_color(0,"^3[^4Арена^3] ^1Команда ^3%s ^1Чтобы перейти в^1 ^4online^3 или ^4offline^3 режим",TOGGLE_COMMAND) set_task(250.0,"OfflineDuel",TASK_OFFLINE) } public Cmd_start(id,hndle) { if(!is_user_alive(id)) return FMRES_IGNORED if(!is_frozen[id]) return FMRES_IGNORED new Buttons = get_uc(hndle,UC_Buttons) if(Buttons & IN_ATTACK) { Buttons &= ~IN_ATTACK set_uc( hndle , UC_Buttons , Buttons ) return FMRES_SUPERCEDE } if(Buttons & IN_ATTACK2) { Buttons &= ~IN_ATTACK2 set_uc( hndle , UC_Buttons , Buttons ) return FMRES_SUPERCEDE } return FMRES_IGNORED } public Player_Take_Damage(victim, inflictor, attacker, Float:damage, damage_bits) { if(is_user_connected(attacker)) // убеждаемся что игрок атакующий { if(is_in_duel[victim] == 2 || is_in_duel[attacker] == 2) { if(his_challenger[victim] != attacker || his_challenger[attacker] != victim) { // мы защищаем соперников от убийства другими игроками, или от их убийства других? return HAM_SUPERCEDE } } } return HAM_IGNORED } public client_putinserver(id) { get_user_name(id,his_name[id],charsmax(his_name)) reset_values(id) move_size[id] = 10.0 his_offline[id] = 0 his_previous_team[id] = 0 } public client_disconnect(id) { end_his_duel(id) } public end_his_duel(id) { if(his_challenger[id]) { client_print_color(0,"^3[^4Арена: %s^3] ^4%s^1 соперник ^4%s^1 покинул ^3игру^1.",arena_names[arena_number[id]],his_name[his_challenger[id]],his_name[id]) user_can_spawn[his_challenger[id]] = 1 user_can_spawn[id] = 1 if(arena_number[id] == arena_number[his_challenger[id]]) remove_the_arena(arena_number[id] +ARENA_CODE) back_to_the_spawn(id) back_to_the_spawn(his_challenger[id]) reset_values(his_challenger[id]) } reset_values(id) } public times_up_duel(id) { client_print_color(0,"^3[^4Арена: %s^3] ^4%s^1 и ^4%s^1 провели ^3длительный бой^1.",arena_names[arena_number[id]],his_name[his_challenger[id]],his_name[id]) if(his_challenger[id]) { if(arena_number[id] == arena_number[his_challenger[id]]) remove_the_arena(arena_number[id] +ARENA_CODE) user_kill(id,1) user_kill(his_challenger[id],1) //back_to_the_spawn(id) //back_to_the_spawn(his_challenger[id]) reset_values(his_challenger[id]) } reset_values(id) } public battle_timer(id) { if(is_user_connected(id)) { if(is_in_duel[id] == 2) { his_timer[id]++ if(his_timer[id] > MAX_TIME) { times_up_duel(id) } set_task(1.0,"battle_timer",id) } } } public say_hook(id) { static Chat_C[32] read_args(Chat_C,charsmax(Chat_C)) remove_quotes(Chat_C) if(equali(Chat_C,DUEL_COMMAND)) { //request a duel duel_players_list(id) } if(equali(Chat_C,TOGGLE_COMMAND)) { //request a duel toggle_offline(id) } if(equali(Chat_C,GIVEUP_COMMAND)) { //leave a duel if(is_in_duel[id] == 2) { give_up_player(id) } else { client_print_color(id,"%sТы не участвуешь ни в одной битве.",CHAT_TAG) } } return PLUGIN_CONTINUE } public toggle_offline(id) { switch(his_offline[id]) { case 0: { his_offline[id] = 1 client_print_color(0,"%s^4%s^1 покинул дуэль.",CHAT_TAG,his_name[id]) } default: { his_offline[id] = 0 client_print_color(0,"%s^4%s^1 присоединился к дуэли.",CHAT_TAG,his_name[id]) } } } public give_up_player(id) { if(is_user_connected(his_challenger[id])) { client_print_color(0,"%s^4%s^3 испугался сразиться ^4%s^1 :)",CHAT_TAG,his_name[id],his_name[his_challenger[id]]) if(arena_number[id] == arena_number[his_challenger[id]]) remove_the_arena(arena_number[id] +ARENA_CODE) back_to_the_spawn(id) back_to_the_spawn(his_challenger[id]) reset_values(his_challenger[id]) } reset_values(id) } public reward_winner(id) { if(is_user_connected(id)) { // here you can reward the winner with something give_item(id, "weapon_hegrenade") client_print_color(id,"%s^4Поздравляем!!!^1, Вы ^3выиграли эту битву^1!",CHAT_TAG) if(SOUNDS_ENABLED) client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[0]) /*if(cs_get_user_money(id)+15000 <= 16000) { cs_set_user_money(id,cs_get_user_money(id)+15000,1) //client_print_color(id, DontChange,"%s^4Вы заработали ^3$15000^4!",CHAT_TAG) } else cs_set_user_money(id,16000,1)*/ } } public reward_loser(id) { if(is_user_connected(id)) { // here you can reward the winner with something //user_kill(id,1) client_print_color(id,"%sТы ^3проиграл эту битву^1!",CHAT_TAG) if(SOUNDS_ENABLED) client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[1]) /*if(cs_get_user_money(id)-15000 >= 0) { cs_set_user_money(id,cs_get_user_money(id)-15000,1) //client_print_color(id, DontChange,"%s^4Ты не выиграл ^3$15000^4!",CHAT_TAG) } else cs_set_user_money(id,0,1)*/ } } public duel_players_list(id) { if(!is_user_alive(id)) { client_print_color(id,"%s Ты не можешь сразиться, ^3ты мертв^1.",CHAT_TAG) return PLUGIN_HANDLED } if(his_offline[id]) { client_print_color(id,"%s Ты не можешь сразиться ^3в offline режиме^1.",CHAT_TAG) return PLUGIN_HANDLED } if(is_user_connected(his_challenger[id])) { client_print_color(id,"%s^4%s ^1все еще сражается против вас^1.",CHAT_TAG,his_name[his_challenger[id]]) return PLUGIN_HANDLED } if(is_user_connected(his_asker[id])) { client_print_color(id,"%s Доступна только ^3одна дуэль.^1 Ты сражаешься с ^4%s^1.",CHAT_TAG,his_name[his_asker[id]]) return PLUGIN_HANDLED } if(!available_duelers(id)) { client_print_color(id,"%s Нет ^4того^1 с кем можно сразиться.",CHAT_TAG) return PLUGIN_HANDLED } if(get_next_arena() == -1) { client_print_color(id,"%s^4На арене максимум игроков.",CHAT_TAG) return PLUGIN_HANDLED } new menu,menuformat[64]; formatex(menuformat,charsmax(menuformat),"\w[\rGlobal Knife\w] \yНожевые дуэли ^n\dАрена свободна: %d/%d \w",arenas_count(),total_arenas) menu = menu_create( menuformat, "Duel_handler" ); new tempid; new szName[32], szUserId[32],nameu[92],CsTeams:team; formatex(nameu,charsmax(nameu), "\yОбновление"); menu_additem(menu, nameu,"rf_c", 0); menu_addblank(menu,0) //get_players( players, pnum, "c" ); for ( new e; e
= MAX_ROUNDS || his_wins[attacker] >= MAX_KILLS) { if(!get_non_duelers_alive()) { ExecuteHamB(Ham_CS_RoundRespawn, victim) Check_Results(attacker,victim) return HAM_SUPERCEDE } else { ExecuteHamB(Ham_CS_RoundRespawn, victim) Check_Results(attacker,victim) } } else { wait_for_enemy_loop(attacker) //client_print_color(attacker, DontChange,"%s^4Раунд^1:^3%d^4/^3%d^1 | ^4Ты^1:^3%d^4/^3%d^1 | ^4%s^1:^3%d^4/^3%d^1.",CHAT_TAG,rounds[arena_number[attacker]],MAX_ROUNDS,his_wins[attacker],MAX_KILLS,his_name[victim],his_wins[victim],MAX_KILLS) //client_print_color(victim, DontChange,"%s^4Раунд^1:^3%d^4/^3%d^1 | ^4Ты^1:^3%d^4/^3%d^1 | ^4%s^1:^3%d^4/^3%d^1.",CHAT_TAG,rounds[arena_number[attacker]],MAX_ROUNDS,his_wins[victim],MAX_KILLS,his_name[attacker],his_wins[attacker],MAX_KILLS) } Set_Entity_Invisible(victim, 1) set_task(0.1,"delay_respawn",victim) return HAM_SUPERCEDE } return HAM_IGNORED } public delay_respawn(id) { if(is_user_connected(id)) { if(!is_user_alive(id)) { if(is_in_duel[id] == 2) { user_can_spawn[id] = 1 ExecuteHamB(Ham_CS_RoundRespawn, id) user_can_spawn[id] = 0 }else{ user_can_spawn[id] = 1 ExecuteHamB(Ham_CS_RoundRespawn, id) } } Set_Entity_Invisible(id, 0) } return PLUGIN_CONTINUE } public Check_Results(id,enemy) { reset_teams(id) reset_teams(enemy) new id_name[64],enemy_name[64]; get_user_name(id,id_name,charsmax(id_name)) get_user_name(enemy,enemy_name,charsmax(enemy_name)) if(his_wins[id] > his_wins[enemy]) { client_print_color(0,"^3[^4Арена: %s^3] ^4%s ^1победил ^4%s ^1со счетом ^3%d/%d",arena_names[arena_number[id]],id_name,enemy_name,his_wins[id],his_wins[enemy]) reward_winner(id) reward_loser(enemy) } else if(his_wins[enemy] > his_wins[id]) { client_print_color(0,"^3[^4Арена: %s^3] ^4%s ^1победил ^4%s ^1со счетом ^3%d/%d",arena_names[arena_number[id]],enemy_name,id_name,his_wins[enemy],his_wins[id]) reward_winner(enemy) reward_loser(id) } else { client_print_color(0,"^3[^4Арена: %s^3] ^4%s ^1and ^4%s ^1закончили сражение^3 в ничью.",arena_names[arena_number[id]],id_name,enemy_name) if(SOUNDS_ENABLED) { client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[2]) client_cmd(enemy,"spk ^"%s^"",DUEL_SOUNDS[2]) } if(his_wins[id] == his_wins[enemy]) { back_to_the_spawn(id) back_to_the_spawn(enemy) } } //client_print_color(0, DontChange,"%s^3Удары в голову: ^4%s^1:^3%d ^4%s^1:^3%d^1.",CHAT_TAG,id_name,his_HS[id],enemy_name,his_HS[enemy]) if(arena_number[id] == arena_number[enemy]) remove_the_arena(arena_number[id] +ARENA_CODE) back_to_the_spawn(id) back_to_the_spawn(enemy) reset_values(enemy) reset_values(id) } public back_to_the_spawn(id) { if(is_user_alive(id)) { entity_set_origin(id,his_original_spawn[id]) Set_Entity_Invisible(id, 0) set_user_health(id,map_default_hp) } set_user_armor(id,0) set_user_godmode(id, 0) } public manage_battle(id) { is_in_duel[id] = 2 his_challenger[id] = his_asker[id] his_challenger[his_challenger[id]] = id is_in_duel[his_challenger[id]] = 2 his_asker[id] = 0 his_wins[id] = 0 user_can_spawn[id] = 0 his_wins[his_challenger[id]] = 0 new aren_code = get_next_arena() arena_number[id] = aren_code arena_number[his_challenger[id]] = aren_code rounds[aren_code] = 0 new CsTeams:teamid,CsTeams:teamenemy; teamid = cs_get_user_team(id) teamenemy = cs_get_user_team(his_challenger[id]) if(teamid == CS_TEAM_T) { his_previous_team[id] = 2 } else if(teamid == CS_TEAM_CT) { his_previous_team[id] = 1 } else his_previous_team[id] = 0 if(teamenemy == CS_TEAM_T) { his_previous_team[his_challenger[id]] = 2 } else if(teamenemy == CS_TEAM_CT) { his_previous_team[his_challenger[id]] = 1 } else his_previous_team[his_challenger[id]] = 0 start_build(his_challenger[id]) if(SOUNDS_ENABLED) { client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[4]) client_cmd(his_challenger[id],"spk ^"%s^"",DUEL_SOUNDS[4]) } battle_timer(id) battle_timer(his_challenger[id]) hud_displayer(id) hud_displayer(his_challenger[id]) strip_user_weapons(his_challenger[id]) give_item(his_challenger[id],"weapon_knife") set_pev(id, pev_viewmodel, g_allocVmod) set_pev(id, pev_weaponmodel, g_allocPmod) client_print_color(0,"%s^4%s^1 принял вызов ^4%s",CHAT_TAG,his_name[id],his_name[his_challenger[id]]) } public begin_the_battle(id,enemy) { start_new_round(id,enemy) } public start_new_round(id,enemy) { his_timer[id] = 0 his_timer[enemy] = 0 is_frozen[id] = 1 is_frozen[enemy] = 1 his_countdown[id] = MAX_COUNTDOWN his_countdown[enemy] = MAX_COUNTDOWN countdown(id) countdown(enemy) strip_user_weapons(his_challenger[id]) give_item(his_challenger[id],"weapon_knife") strip_user_weapons(his_challenger[enemy]) give_item(his_challenger[enemy],"weapon_knife") set_pev(his_challenger[id], pev_viewmodel, g_allocVmod) set_pev(his_challenger[id], pev_weaponmodel, g_allocPmod) set_pev(his_challenger[enemy], pev_viewmodel, g_allocVmod) set_pev(his_challenger[enemy], pev_weaponmodel, g_allocPmod) } public countdown(id) { if(is_user_connected(id)) { his_countdown[id]-- if(0 >= his_countdown[id]) { is_frozen[id] = 0 unfreeze_player(id) if(SOUNDS_ENABLED) client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[6]) client_print(id,print_center,"Fight!") return PLUGIN_HANDLED } else { freeze_player(id) if(SOUNDS_ENABLED) client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[5]) client_print(id,print_center,"%d",his_countdown[id]) if(!is_frozen[id]) // we prevent it from spamming is_frozen[id] = 1 } set_task(1.0,"countdown",id) } return PLUGIN_CONTINUE } public reset_teams(id) { if(his_previous_team[id] == 1) { cs_set_user_team(id,CS_TEAM_CT) } else if(his_previous_team[id] == 2) { cs_set_user_team(id,CS_TEAM_T) } return PLUGIN_CONTINUE } public check_teams(id,enemy) { if(!is_user_connected(id) || !is_user_connected(enemy)) return PLUGIN_CONTINUE; new CsTeams:teamid,CsTeams:teamenemy; teamid = cs_get_user_team(id) teamenemy = cs_get_user_team(enemy) if(!users_in_same_team(id,enemy) && !is_in_false_team(id) && !is_in_false_team(enemy)) return PLUGIN_HANDLED if(teamid == CS_TEAM_CT && teamenemy == CS_TEAM_CT ) { cs_set_user_team(id,CS_TEAM_T) } else if(teamid == CS_TEAM_T && teamenemy == CS_TEAM_T) { cs_set_user_team(id,CS_TEAM_CT) } else { Check_Results(id,enemy) return PLUGIN_CONTINUE } return PLUGIN_HANDLED } stock is_in_false_team(id) { if(cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED) return PLUGIN_HANDLED return PLUGIN_CONTINUE } stock users_in_same_team(id,enemy) { if(cs_get_user_team(id) == cs_get_user_team(enemy)) return PLUGIN_HANDLED return PLUGIN_CONTINUE } stock get_next_arena() { next_empty_arena = 0 for(new id;id < MAXPLAYERS;id++) { if(is_user_connected(id)) { if(arena_number[id] == next_empty_arena) { next_empty_arena++ if(next_empty_arena > total_arenas) return -1 } } } if(next_empty_arena > total_arenas) { return -1 } return next_empty_arena } stock reset_values(id) { his_HS[id] = 0 rounds[arena_number[id]] = 0 is_in_duel[id] = 0 his_challenger[id] = 0 his_asker[id] = 0 arena_number[id] = 0 his_wins[id] = 0 got_spawn[id] = 0 his_timer[id] = 0 user_can_spawn[id] = 1 } public freeze_player(id) { set_user_maxspeed(id,1.0) } public unfreeze_player(id) { set_user_maxspeed(id,250.0) } public wait_for_enemy_loop(id) { if(is_user_connected(id)) { if(is_in_duel[id] == 2) { if(is_user_connected(his_challenger[id])) { if(is_in_duel[his_challenger[id]] == 2) { if(is_user_alive(his_challenger[id])) { begin_the_battle(id,his_challenger[id]) return PLUGIN_HANDLED } set_task(0.1,"wait_for_enemy_loop",id) } } } } return PLUGIN_CONTINUE } public hud_displayer(id) { if(is_user_connected(id)) { if(is_in_duel[id] == 2 && is_user_connected(his_challenger[id])) { new name[64],his_name[64]; get_user_name(id,name,charsmax(name)) get_user_name(his_challenger[id],his_name,charsmax(his_name)) set_dhudmessage(0, 255, 0, -1.0, 0.0, 0, 6.0, 0.1) show_dhudmessage(id, "Arena: %s | Rounds: %d/%d ^n%s -- %d/%d (HS:%d)^nVS^n%s -- %d/%d (HS:%d)" ,arena_names[arena_number[id]] ,rounds[arena_number[id]] ,MAX_ROUNDS,name,his_wins[id] ,MAX_KILLS,his_HS[id] ,his_name,his_wins[his_challenger[id]] ,MAX_KILLS,his_HS[his_challenger[id]]) set_task(0.1,"hud_displayer",id) } } } stock Set_Entity_Invisible(ent, Invisible = 1) { if(!pev_valid(ent)) return set_pev(ent, pev_effects, Invisible == 0 ? pev(ent, pev_effects) & ~EF_NODRAW : pev(ent, pev_effects) | EF_NODRAW) } stock client_print_color(const id, const input[], any:...) { new count = 1, players[32]; static msg[191]; vformat(msg, 190, input, 3); replace_all(msg, 190, "!g", "^x04"); // Зеленый цвет replace_all(msg, 190, "!y", "^x01"); // Стандартный цвет replace_all(msg, 190, "!t", "^x03"); // Командный цвет if (id) players[0] = id; else get_players(players, count, "ch"); { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]); write_byte(players[i]); write_string(msg); message_end(); } } } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par } */
Отправить
Загрузил
dvoenkin23gfg
2019-01-07 21:48:36
1
244
Установить на сервер
Скачать
Нет оплаченых серверов
Купить сервер CS 1.6
Купить сервер CS:GO
Купить сервер CSS v34
Подключить свой VDS к панели
их не было
dvoenkin23gfg
2019-01-08 15:23:12
Данная иконка означает, что плагин был проверен администрацией хостинга на тестовом сервере, и проблем с ним не было выявлено. Рекомендуем ставить исключительно проверенные плагины.
Плагин загружен на сервер, но проверка еще не была проведена.
CSHOST.COM.UA 2012-2024 Хостинг игровых серверов