Уважаемые пользователи, прежде чем открыть новую тему ознакомьтесь пожалуйста с правилами и воспользуйтесь поиском.
И снова Knife Duel
chakki056skrip Дата: Среда, 2014-07-02, 16:12 | Сообщение # 1
Сообщений: 287
Всем привет! Сделал свой knife duel, теперь там есть свечение, круги от игрока, звуки когда согласен на дуель или не согласен, звук от кругов, таймер(30 секунд) если они будут живы вдвоем, то они умрут. Вот в чем проблема: Я не знаю как обновить таймер. Я убил противника или он меня, а на следующий раунд таймер продолжает свое действие. Как исправить?
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <fakemeta> #include <hamsandwich> #include <fun> #define PLUGIN "Knife Duel [RUS]" #define VERSION "2.0" #define AUTHOR "Alka|||Skrip***" #define DUEL_START 1337 #define CBASE_CURRWPN_ENT 373 #define OFFSET_ENT_TO_INDEX 43 new g_Attack new const g_szKnifeSound[] = "weapons/knife_hitwall1.wav"; new const g_szSpawnClassname[] = "info_player_deathmatch"; new Float:g_fHit[33]; new iHitCount[33]; new g_iChallenged, g_iChallenger; new Float:g_vKnifeOrigin[2][3]; new bool:g_bInChallenge; new bool:g_bProtect; new g_iTimer2; new beaconsprite; enum _:max_cvars { CVAR_COUNT = 0, CVAR_TIMER, CVAR_TIMER2, CVAR_MAXDISTANCE, CVAR_PROTECTION, CVAR_ANNOUNCE, CVAR_RESET }; new g_Pcvar[max_cvars]; new g_iFwdSpawn; new g_iMaxPlayers; public plugin_precache() { g_iFwdSpawn = register_forward(FM_Spawn, "fwd_Spawn", 1); precache_sound("se7enkills/duel/messer15.mp3") precache_sound("se7enkills/duel/ssiclo.mp3") precache_sound("se7enkills/duel/blip.wav") beaconsprite = precache_model("sprites/shockwave.spr"); return PLUGIN_CONTINUE; } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_forward(FM_EmitSound, "fwd_EmitSound", 1); register_forward(FM_PlayerPreThink, "fwd_PlayerPreThink_post", 1); RegisterHam(Ham_Killed, "player", "fwd_Killed", 1); RegisterHam(Ham_TraceAttack, "player", "HamPlayerAttack"); unregister_forward(FM_Spawn, g_iFwdSpawn, 1); register_logevent("logevent_RoundEnd", 2, "1=Round_End", "1=Round_Draw"); RegisterHam(Ham_Spawn, "player", "HamSpawnPlayer", 1) g_Pcvar[CVAR_COUNT] = register_cvar("kd_knifecount", "3"); g_Pcvar[CVAR_TIMER2] = register_cvar("kd_timer", "30"); g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); g_Pcvar[CVAR_PROTECTION] = register_cvar("kd_protection", "1"); g_Pcvar[CVAR_MAXDISTANCE] = register_cvar("kd_maxdistance", "600"); g_Pcvar[CVAR_ANNOUNCE] = register_cvar("kd_announce", "1"); g_Pcvar[CVAR_RESET] = register_cvar("kd_resethp", "1"); g_iMaxPlayers = get_maxplayers(); } public HamSpawnPlayer(id) remove_task(id) public client_disconnect(id) { if((id == g_iChallenged) || (id == g_iChallenger)) { g_bInChallenge = false; g_bProtect = false; } } public fwd_Spawn(ent) { if(!pev_valid(ent)) return FMRES_IGNORED; static szClassname[32]; pev(ent, pev_classname, szClassname, sizeof szClassname - 1); if(equal(szClassname, g_szSpawnClassname)) { if(vec_null(g_vKnifeOrigin[0])) { pev(ent, pev_origin, g_vKnifeOrigin[0]); } else if(!vec_null(g_vKnifeOrigin[0]) && vec_null(g_vKnifeOrigin[1])) { static Float:vTmp[3]; pev(ent, pev_origin, vTmp); if((300.0 <= vector_distance(g_vKnifeOrigin[0], vTmp) < 600.0)) g_vKnifeOrigin[1] = vTmp; } } return FMRES_IGNORED; } public fwd_EmitSound(id, channel, const sound[]) { if(!is_user_alive(id)) return FMRES_IGNORED; if(!equal(sound, g_szKnifeSound)) return FMRES_IGNORED; static Float:fGmTime; fGmTime = get_gametime(); if((fGmTime - g_fHit[id]) >= 1.0) { iHitCount[id] = 0; g_fHit[id] = fGmTime; } ++iHitCount[id]; g_fHit[id] = fGmTime; if((iHitCount[id] >= get_pcvar_num(g_Pcvar[CVAR_COUNT])) && check_players() && !g_bInChallenge) { new iOpponent = get_opponent(3 - get_user_team(id)); if(!iOpponent) return FMRES_IGNORED; fnChallenge(id, iOpponent); iHitCount[id] = 0; } return FMRES_IGNORED; } public fwd_PlayerPreThink_post(id) { if(!is_user_alive(id) || !g_bInChallenge) return FMRES_IGNORED; static iWpn; iWpn = get_pdata_cbase(id, CBASE_CURRWPN_ENT); if(pev_valid(iWpn)) { if(get_pdata_int(iWpn, OFFSET_ENT_TO_INDEX) != CSW_KNIFE) engclient_cmd(id, "weapon_knife"); } static iOpponent; if(id == g_iChallenged) iOpponent = g_iChallenger; else iOpponent = g_iChallenged; if(!is_user_connected(iOpponent)) return FMRES_IGNORED; if((fm_get_entity_distance(id, iOpponent) >= get_pcvar_float(g_Pcvar[CVAR_MAXDISTANCE])) && g_bProtect) { static Float:vVel[3]; fm_get_speed_vector2(id, iOpponent, 100.0, vVel); set_pev(id, pev_velocity, vVel); } return FMRES_IGNORED; } public fwd_Killed(id, idattacker, shouldgib) { if(!get_pcvar_num(g_Pcvar[CVAR_ANNOUNCE])) return HAM_IGNORED; if(check_players()) { for(new i = 0 ; i <= g_iMaxPlayers ; i++) { if(!is_user_alive(i)) continue; client_print(i, print_chat, "* Чтобы вызвать игрока на дуэль на ножах, бейте ножом об стену.", get_pcvar_num(g_Pcvar[CVAR_COUNT])); } } return HAM_IGNORED; } public fnChallenge(id, opponent) { new szName[32], szOppName[32]; get_user_name(id, szName, sizeof szName - 1); get_user_name(opponent, szOppName, sizeof szOppName - 1); new szTitle[64]; formatex(szTitle, sizeof szTitle - 1, "%s бросил вам вызов на ножах!.", szName); new iMenu = menu_create(szTitle, "menu_MainHandler", 0); menu_additem(iMenu, "Да, я мужик!", "1", 0, -1); menu_additem(iMenu, "Нет, я сыкло!", "2", 0, -1); menu_setprop(iMenu, MPROP_EXIT, MEXIT_NEVER); menu_display(opponent, iMenu, 0); client_print(0, print_chat, "* %s вызвал %s на дуэль на ножах.", szName, szOppName); set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 5.0, 0.1, 0.5, 1) show_hudmessage(0, "* %s вызвал %s на дуэль на ножах.", szName, szOppName); g_iChallenger = id; g_iChallenged = opponent; g_bInChallenge = true; } public menu_MainHandler(id, menu, item) { if(!is_user_connected(id)) return 1; new szData[6], iAccess, iCallBack; menu_item_getinfo(menu, item, iAccess, szData, sizeof szData - 1, _, _, iCallBack); new iKey = str_to_num(szData); new szName[32]; get_user_name(id, szName, sizeof szName - 1); switch(iKey) { case 1: { client_print(0, print_chat, "* %s Согласился порезать на куски противника!", szName); set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 5.0, 0.1, 0.5, 1) show_hudmessage(0, "* %s принял вызов!", szName); client_cmd(0,"mp3 play sound/se7enkills/duel/messer15.mp3") beacon(id) fnStartDuel(); } case 2: { client_print(0, print_chat, "* %s мудак, Дуели не будет!", szName); set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 5.0, 0.1, 0.5, 1) show_hudmessage(0, "* %s мудак, непринял вызов!", szName); client_cmd(0,"mp3 play sound/se7enkills/duel/ssiclo.mp3") g_bInChallenge = false; } } return 1; } public fnStartDuel() { if(!is_user_connected(g_iChallenged) || !is_user_connected(g_iChallenger)) return; engfunc(EngFunc_SetOrigin, g_iChallenged, g_vKnifeOrigin[0]); engfunc(EngFunc_SetOrigin, g_iChallenger, g_vKnifeOrigin[1]); fm_entity_set_aim(g_iChallenged, g_iChallenger, 0); fm_entity_set_aim(g_iChallenger, g_iChallenged, 0); if(get_pcvar_num(g_Pcvar[CVAR_RESET])) { set_pev(g_iChallenged, pev_health, 100.0); set_pev(g_iChallenger, pev_health, 100.0); } set_task(1.0, "timer", 'x', "", 0, "b", 0); if(get_pcvar_num(g_Pcvar[CVAR_PROTECTION])) g_bProtect = true; } public timer() { if(g_iTimer2 > 0) { set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 1.0, 0.1, 0.9, 1); show_hudmessage(0, "До конца дуели осталось: %d", g_iTimer2--); } else { client_cmd(0, "kill") set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 1.0, 0.1, 0.5, 1); show_hudmessage(0, "Вы Не убили своего противника, умрите!"); g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); remove_task('x'); } } public HamPlayerAttack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits) { static CsTeams:vteam, CsTeams:ateam if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker) return HAM_IGNORED vteam = cs_get_user_team(victim) ateam = cs_get_user_team(attacker) if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT && g_Attack || vteam == CS_TEAM_T && ateam == CS_TEAM_CT && g_Attack ) return HAM_SUPERCEDE return HAM_IGNORED } public logevent_RoundEnd() { g_bInChallenge = false; g_bProtect = false; remove_task('x'); } stock fm_entity_set_aim(id, ent, bone = 0) { if(!is_user_connected(id) || !pev_valid(ent)) return 0; new Float:vOrigin[3]; pev(ent, pev_origin, vOrigin); new Float:vEntOrigin[3], Float:vAngles[3]; if(bone) engfunc(EngFunc_GetBonePosition, id, bone, vEntOrigin, vAngles); else pev(id, pev_origin, vEntOrigin); vOrigin[0] -= vEntOrigin[0]; vOrigin[1] -= vEntOrigin[1]; vOrigin[2] -= vEntOrigin[2]; new Float:v_length; v_length = vector_length(vOrigin); new Float:vAimVector[3]; vAimVector[0] = vOrigin[0] / v_length; vAimVector[1] = vOrigin[1] / v_length; vAimVector[2] = vOrigin[2] / v_length; new Float:vNewAngles[3]; vector_to_angle(vAimVector, vNewAngles); vNewAngles[0] *= -1; if(vNewAngles[1] > 180.0) vNewAngles[1] -= 360; if(vNewAngles[1] < -180.0) vNewAngles[1] += 360; if(vNewAngles[1] == 180.0 || vNewAngles[1] == -180.0) vNewAngles[1] = -179.9; set_pev(id, pev_angles, vNewAngles); set_pev(id, pev_fixangle, 1); return 1; } stock vec_null(Float:vec[3]) { if(!vec[0] && !vec[1] && !vec[2]) return 1; return 0; } stock bool:check_players() { new iNum[2]; for(new i = 1 ; i <= g_iMaxPlayers ; i++) { if(!is_user_alive(i)) continue; if(get_user_team(i) == 1) ++iNum[0]; else if(get_user_team(i) == 2) ++iNum[1]; } if((iNum[0] == 1) && (iNum[1] == 1)) return true; return false; } stock get_opponent(team) { for(new i = 0 ; i <= g_iMaxPlayers ; i++) { if(!is_user_alive(i)) continue; if(get_user_team(i) == team) return i; } return 0; } stock fm_set_user_godmode(index, godmode = 0) { set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM); return 1; } stock fm_get_speed_vector2(ent1, ent2, Float:speed, Float:new_velocity[3]) { if(!pev_valid(ent1) || !pev_valid(ent2)) return 0; static Float:vOrigin1[3]; pev(ent1, pev_origin, vOrigin1); static Float:vOrigin2[3]; pev(ent2, pev_origin, vOrigin2); new_velocity[0] = vOrigin2[0] - vOrigin1[0]; new_velocity[1] = vOrigin2[1] - vOrigin1[1]; new_velocity[2] = vOrigin2[2] - vOrigin1[2]; new Float:fNum = floatsqroot(speed * speed / (new_velocity[0] * new_velocity[0] + new_velocity[1] * new_velocity[1] + new_velocity[2] * new_velocity[2])); new_velocity[0] *= fNum; new_velocity[1] *= fNum; new_velocity[2] *= fNum; return 1; } stock Float:fm_get_entity_distance(ent1, ent2) { if(!pev_valid(ent1) || !pev_valid(ent2)) return 0.0; static Float:vOrigin1[3]; pev(ent1, pev_origin, vOrigin1); static Float:vOrigin2[3]; pev(ent2, pev_origin, vOrigin2); return vector_distance(vOrigin1, vOrigin2); } public beacon(id) { client_cmd(0, "sv_alltalk 1") beacon_spr(id) set_user_rendering(id,kRenderFxGlowShell,0,255,0,kRenderNormal,50); set_task(1.0, "beacon", id) } public beacon_spr(id) { if(cs_get_user_team(id) == CS_TEAM_CT) { static origin[3]; get_user_origin(id, origin); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_BEAMCYLINDER); write_coord(origin[0]); write_coord(origin[1]); write_coord(origin[2]-20) ; write_coord(origin[0]) ; write_coord(origin[1]) ; write_coord(origin[2]+200); write_short(beaconsprite); write_byte(0); write_byte(1); write_byte(6); write_byte(2) ; write_byte(1) ; write_byte(0) ; write_byte(0) ; write_byte(255) ; write_byte(255); write_byte(0); message_end(); } else { static origin[3]; get_user_origin(id, origin); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_BEAMCYLINDER); write_coord(origin[0]); write_coord(origin[1]); write_coord(origin[2]-20) ; write_coord(origin[0]) ; write_coord(origin[1]); write_coord(origin[2]+200); write_short(beaconsprite); write_byte(0); write_byte(1); write_byte(6); write_byte(2) ; write_byte(1) ; write_byte(255) ; write_byte(0) ; write_byte(0) ; write_byte(255); write_byte(0); message_end(); } client_cmd(0,"spk se7enkills/duel/blip") set_task(1.0, "beacon_spr", id) return PLUGIN_CONTINUE; }
Shaft Дата: Среда, 2014-07-02, 16:52 | Сообщение # 2
Сообщений: 351
Цитата chakki056skrip (
)
register_logevent("logevent_RoundEnd", 2, "1=Round_End", "1=Round_Draw");
Попробуй перехват нового раунда сделать так: register_event("HLTV", "logevent_RoundEnd", "a", "1=0", "2=0")
Лучше быть умным и немного тупить - чем быть тупым и много умничать! Если обращаетесь ко мне с просьбой помочь то: 1 - полностью опишите вашу проблему. 2 - что хотите от меня. Программирую на языках: Pawn, Delphi, C++
chakki056skrip Дата: Четверг, 2014-07-03, 06:11 | Сообщение # 3
Сообщений: 287
Цитата chakki056skrip (
)
а на следующий раунд таймер продолжает свое действие
Извини я неправильно выразился: на следующую дуэль таймер не обновляется. Допустим я вызвал на дуэль игрока, он согласился, таймер включился, и я его убиваю на 24 секунде, таймер остановился. На следующей дуэли таймер начинает свой отсчет с 24 секунды. Как Исправить?
Shaft Дата: Четверг, 2014-07-03, 10:52 | Сообщение # 4
Сообщений: 351
Ну я так понял что эти твои 30 секунд берутся из переменной g_iTimer2, и если игроки не убили друг друга то функция timer() обновляет ее { client_cmd(0, "kill") set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 1.0, 0.1, 0.5, 1); show_hudmessage(0, "Вы Не убили своего противника, умрите!"); g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); //обновление переменной! remove_task('x'); } А если убили то не обновляет Попробуй перед строкой 280(set_task(1.0, "timer", 'x', "", 0, "b", 0);) вписать g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); Чтоб получилось: g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); set_task(1.0, "timer", 'x', "", 0, "b", 0); P.S. Плагин убивает игроков через client_cmd, это не целесообразно так как 50% игроков играют с протекторами которые запрещают выполнение команд с сервера, используй user_kill(id)
Лучше быть умным и немного тупить - чем быть тупым и много умничать! Если обращаетесь ко мне с просьбой помочь то: 1 - полностью опишите вашу проблему. 2 - что хотите от меня. Программирую на языках: Pawn, Delphi, C++
Сообщение отредактировал Shaft - Четверг, 2014-07-03, 11:05
chakki056skrip Дата: Четверг, 2014-07-03, 15:39 | Сообщение # 5
Сообщений: 287
нет, не получилось.Добавлено (2014-07-03, 15:39) --------------------------------------------- таймер убрался вообще и телепортации нет
Shaft Дата: Четверг, 2014-07-03, 16:52 | Сообщение # 6
Сообщений: 351
Вот как, тогда попробуй в logevent_RoundEnd() Чтоб получилось: public logevent_RoundEnd() { g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); g_bInChallenge = false; g_bProtect = false; remove_task('x'); }
Лучше быть умным и немного тупить - чем быть тупым и много умничать! Если обращаетесь ко мне с просьбой помочь то: 1 - полностью опишите вашу проблему. 2 - что хотите от меня. Программирую на языках: Pawn, Delphi, C++
chakki056skrip Дата: Воскресенье, 2014-07-06, 09:58 | Сообщение # 7
Сообщений: 287
Спс, работает.Добавлено (2014-07-06, 09:58) ---------------------------------------------
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <fakemeta> #include <hamsandwich> #include <fun> #define PLUGIN "Knife Duel [RUS]" #define VERSION "2.0" #define AUTHOR "Alka|||Skrip***" #define DUEL_START 1337 #define CBASE_CURRWPN_ENT 373 #define OFFSET_ENT_TO_INDEX 43 new g_Attack new const g_szKnifeSound[] = "weapons/knife_hitwall1.wav"; new const g_szSpawnClassname[] = "info_player_deathmatch"; new Float:g_fHit[33]; new iHitCount[33]; new g_iChallenged, g_iChallenger; new Float:g_vKnifeOrigin[2][3]; new bool:g_bInChallenge; new bool:g_bProtect; new g_iTimer2; new beaconsprite; enum _:max_cvars { CVAR_COUNT = 0, CVAR_TIMER, CVAR_TIMER2, CVAR_MAXDISTANCE, CVAR_PROTECTION, CVAR_ANNOUNCE, CVAR_RESET }; new g_Pcvar[max_cvars]; new g_iFwdSpawn; new g_iMaxPlayers; new PlayerT = 0, PlayerCT = 0 public plugin_precache() { g_iFwdSpawn = register_forward(FM_Spawn, "fwd_Spawn", 1); precache_sound("se7enkills/duel/messer15.mp3") precache_sound("se7enkills/duel/ssiclo.mp3") precache_sound("se7enkills/duel/blip.wav") beaconsprite = precache_model("sprites/shockwave.spr"); return PLUGIN_CONTINUE; } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_forward(FM_EmitSound, "fwd_EmitSound", 1); register_forward(FM_PlayerPreThink, "fwd_PlayerPreThink_post", 1); RegisterHam(Ham_Killed, "player", "fwd_Killed", 1); RegisterHam(Ham_TraceAttack, "player", "HamPlayerAttack"); unregister_forward(FM_Spawn, g_iFwdSpawn, 1); register_clcmd("kill_me", "kill") register_logevent("logevent_RoundEnd", 2, "1=Round_End", "1=Round_Draw"); RegisterHam(Ham_Spawn, "player", "HamSpawnPlayer", 1) g_Pcvar[CVAR_COUNT] = register_cvar("kd_knifecount", "3"); g_Pcvar[CVAR_TIMER2] = register_cvar("kd_timer", "30"); g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); g_Pcvar[CVAR_PROTECTION] = register_cvar("kd_protection", "1"); g_Pcvar[CVAR_MAXDISTANCE] = register_cvar("kd_maxdistance", "600"); g_Pcvar[CVAR_ANNOUNCE] = register_cvar("kd_announce", "1"); g_Pcvar[CVAR_RESET] = register_cvar("kd_resethp", "1"); g_iMaxPlayers = get_maxplayers(); } public HamSpawnPlayer(id) remove_task(id) public client_disconnect(id) { if((id == g_iChallenged) || (id == g_iChallenger)) { g_bInChallenge = false; g_bProtect = false; } } public fwd_Spawn(ent) { if(!pev_valid(ent)) return FMRES_IGNORED; static szClassname[32]; pev(ent, pev_classname, szClassname, sizeof szClassname - 1); if(equal(szClassname, g_szSpawnClassname)) { if(vec_null(g_vKnifeOrigin[0])) { pev(ent, pev_origin, g_vKnifeOrigin[0]); } else if(!vec_null(g_vKnifeOrigin[0]) && vec_null(g_vKnifeOrigin[1])) { static Float:vTmp[3]; pev(ent, pev_origin, vTmp); if((300.0 <= vector_distance(g_vKnifeOrigin[0], vTmp) < 600.0)) g_vKnifeOrigin[1] = vTmp; } } return FMRES_IGNORED; } public fwd_EmitSound(id, channel, const sound[]) { if(!is_user_alive(id)) return FMRES_IGNORED; if(!equal(sound, g_szKnifeSound)) return FMRES_IGNORED; static Float:fGmTime; fGmTime = get_gametime(); if((fGmTime - g_fHit[id]) >= 1.0) { iHitCount[id] = 0; g_fHit[id] = fGmTime; } ++iHitCount[id]; g_fHit[id] = fGmTime; if((iHitCount[id] >= get_pcvar_num(g_Pcvar[CVAR_COUNT])) && check_players() && !g_bInChallenge) { new iOpponent = get_opponent(3 - get_user_team(id)); if(!iOpponent) return FMRES_IGNORED; fnChallenge(id, iOpponent); iHitCount[id] = 0; } return FMRES_IGNORED; } public fwd_PlayerPreThink_post(id) { if(!is_user_alive(id) || !g_bInChallenge) return FMRES_IGNORED; static iWpn; iWpn = get_pdata_cbase(id, CBASE_CURRWPN_ENT); if(pev_valid(iWpn)) { if(get_pdata_int(iWpn, OFFSET_ENT_TO_INDEX) != CSW_KNIFE) engclient_cmd(id, "weapon_knife"); } static iOpponent; if(id == g_iChallenged) iOpponent = g_iChallenger; else iOpponent = g_iChallenged; if(!is_user_connected(iOpponent)) return FMRES_IGNORED; if((fm_get_entity_distance(id, iOpponent) >= get_pcvar_float(g_Pcvar[CVAR_MAXDISTANCE])) && g_bProtect) { static Float:vVel[3]; fm_get_speed_vector2(id, iOpponent, 100.0, vVel); set_pev(id, pev_velocity, vVel); } return FMRES_IGNORED; } public fwd_Killed(id, idattacker, shouldgib) { if(!get_pcvar_num(g_Pcvar[CVAR_ANNOUNCE])) return HAM_IGNORED; if(check_players()) { for(new i = 0 ; i <= g_iMaxPlayers ; i++) { if(!is_user_alive(i)) continue; client_print(i, print_chat, "* Чтобы вызвать игрока на дуэль на ножах, бейте ножом об стену.", get_pcvar_num(g_Pcvar[CVAR_COUNT])); } } return HAM_IGNORED; } public fnChallenge(id, opponent) { new szName[32], szOppName[32]; get_user_name(id, szName, sizeof szName - 1); get_user_name(opponent, szOppName, sizeof szOppName - 1); new szTitle[64]; formatex(szTitle, sizeof szTitle - 1, "%s бросил вам вызов на ножах!.", szName); new iMenu = menu_create(szTitle, "menu_MainHandler", 0); menu_additem(iMenu, "Да, я мужик!", "1", 0, -1); menu_additem(iMenu, "Нет, я сыкло!", "2", 0, -1); menu_setprop(iMenu, MPROP_EXIT, MEXIT_NEVER); menu_display(opponent, iMenu, 0); client_print(0, print_chat, "* %s вызвал %s на дуэль на ножах.", szName, szOppName); set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 5.0, 0.1, 0.5, 1) show_hudmessage(0, "* %s вызвал %s на дуэль на ножах.", szName, szOppName); g_iChallenger = id; g_iChallenged = opponent; g_bInChallenge = true; } public menu_MainHandler(id, menu, item) { if(!is_user_connected(id)) return 1; new szData[6], iAccess, iCallBack; menu_item_getinfo(menu, item, iAccess, szData, sizeof szData - 1, _, _, iCallBack); new iKey = str_to_num(szData); new szName[32]; get_user_name(id, szName, sizeof szName - 1); switch(iKey) { case 1: { client_print(0, print_chat, "* %s Согласился порезать на куски противника!", szName); set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 5.0, 0.1, 0.5, 1) show_hudmessage(0, "* %s принял вызов!", szName); client_cmd(0,"mp3 play sound/se7enkills/duel/messer15.mp3") beacon(id) fnStartDuel(); } case 2: { client_print(0, print_chat, "* %s мудак, Дуели не будет!", szName); set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 5.0, 0.1, 0.5, 1) show_hudmessage(0, "* %s мудак, непринял вызов!", szName); client_cmd(0,"mp3 play sound/se7enkills/duel/ssiclo.mp3") g_bInChallenge = false; } } return 1; } public fnStartDuel() { if(!is_user_connected(g_iChallenged) || !is_user_connected(g_iChallenger)) return; engfunc(EngFunc_SetOrigin, g_iChallenged, g_vKnifeOrigin[0]); engfunc(EngFunc_SetOrigin, g_iChallenger, g_vKnifeOrigin[1]); fm_entity_set_aim(g_iChallenged, g_iChallenger, 0); fm_entity_set_aim(g_iChallenger, g_iChallenged, 0); for(new i = 0; i < get_maxplayers(); i++) { new ent, Float:fOrigin[3] while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "info_player_start"))) { pev(ent, pev_origin, fOrigin) set_pev(PlayerT, pev_origin, fOrigin) fOrigin[0] += 40 set_pev(PlayerCT, pev_origin, fOrigin) break } set_task(1.0, "beacon_spr", i) set_task(1.0, "beacon", i) } if(get_pcvar_num(g_Pcvar[CVAR_RESET])) { set_pev(g_iChallenged, pev_health, 100.0); set_pev(g_iChallenger, pev_health, 100.0); } set_task(1.0, "timer", 'x', "", 0, "b", 0); if(get_pcvar_num(g_Pcvar[CVAR_PROTECTION])) g_bProtect = true; } public timer() { if(g_iTimer2 > 0) { set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 1.0, 0.1, 0.9, 1); show_hudmessage(0, "До конца дуели осталось: %d", g_iTimer2--); } else { set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 1.0, 0.1, 0.5, 1); show_hudmessage(0, "Вы Не убили своего противника, умрите!"); g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); remove_task('x'); client_cmd(0, "kill_me") client_cmd(0, "stopsound") } } public kill(id) { user_kill(id,1) } public HamPlayerAttack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits) { static CsTeams:vteam, CsTeams:ateam if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker) return HAM_IGNORED vteam = cs_get_user_team(victim) ateam = cs_get_user_team(attacker) if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT && g_Attack || vteam == CS_TEAM_T && ateam == CS_TEAM_CT && g_Attack ) return HAM_SUPERCEDE return HAM_IGNORED } public logevent_RoundEnd() { g_iTimer2 = get_pcvar_num(g_Pcvar[CVAR_TIMER2]); g_bInChallenge = false; g_bProtect = false; client_cmd(0, "stopsound") remove_task('x'); } stock fm_entity_set_aim(id, ent, bone = 0) { if(!is_user_connected(id) || !pev_valid(ent)) return 0; new Float:vOrigin[3]; pev(ent, pev_origin, vOrigin); new Float:vEntOrigin[3], Float:vAngles[3]; if(bone) engfunc(EngFunc_GetBonePosition, id, bone, vEntOrigin, vAngles); else pev(id, pev_origin, vEntOrigin); vOrigin[0] -= vEntOrigin[0]; vOrigin[1] -= vEntOrigin[1]; vOrigin[2] -= vEntOrigin[2]; new Float:v_length; v_length = vector_length(vOrigin); new Float:vAimVector[3]; vAimVector[0] = vOrigin[0] / v_length; vAimVector[1] = vOrigin[1] / v_length; vAimVector[2] = vOrigin[2] / v_length; new Float:vNewAngles[3]; vector_to_angle(vAimVector, vNewAngles); vNewAngles[0] *= -1; if(vNewAngles[1] > 180.0) vNewAngles[1] -= 360; if(vNewAngles[1] < -180.0) vNewAngles[1] += 360; if(vNewAngles[1] == 180.0 || vNewAngles[1] == -180.0) vNewAngles[1] = -179.9; set_pev(id, pev_angles, vNewAngles); set_pev(id, pev_fixangle, 1); return 1; } stock vec_null(Float:vec[3]) { if(!vec[0] && !vec[1] && !vec[2]) return 1; return 0; } stock bool:check_players() { new iNum[2]; for(new i = 1 ; i <= g_iMaxPlayers ; i++) { if(!is_user_alive(i)) continue; if(get_user_team(i) == 1) ++iNum[0]; else if(get_user_team(i) == 2) ++iNum[1]; } if((iNum[0] == 1) && (iNum[1] == 1)) return true; return false; } stock get_opponent(team) { for(new i = 0 ; i <= g_iMaxPlayers ; i++) { if(!is_user_alive(i)) continue; if(get_user_team(i) == team) return i; } return 0; } stock fm_set_user_godmode(index, godmode = 0) { set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM); return 1; } stock fm_get_speed_vector2(ent1, ent2, Float:speed, Float:new_velocity[3]) { if(!pev_valid(ent1) || !pev_valid(ent2)) return 0; static Float:vOrigin1[3]; pev(ent1, pev_origin, vOrigin1); static Float:vOrigin2[3]; pev(ent2, pev_origin, vOrigin2); new_velocity[0] = vOrigin2[0] - vOrigin1[0]; new_velocity[1] = vOrigin2[1] - vOrigin1[1]; new_velocity[2] = vOrigin2[2] - vOrigin1[2]; new Float:fNum = floatsqroot(speed * speed / (new_velocity[0] * new_velocity[0] + new_velocity[1] * new_velocity[1] + new_velocity[2] * new_velocity[2])); new_velocity[0] *= fNum; new_velocity[1] *= fNum; new_velocity[2] *= fNum; return 1; } stock Float:fm_get_entity_distance(ent1, ent2) { if(!pev_valid(ent1) || !pev_valid(ent2)) return 0.0; static Float:vOrigin1[3]; pev(ent1, pev_origin, vOrigin1); static Float:vOrigin2[3]; pev(ent2, pev_origin, vOrigin2); return vector_distance(vOrigin1, vOrigin2); } public beacon(id) { client_cmd(0, "sv_alltalk 1") beacon_spr(id) set_user_rendering(id,kRenderFxGlowShell,0,255,0,kRenderNormal,50); set_task(1.0, "beacon", id) } public beacon_spr(id) { if(cs_get_user_team(id) == CS_TEAM_CT) { static origin[3]; get_user_origin(id, origin); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_BEAMCYLINDER); write_coord(origin[0]); write_coord(origin[1]); write_coord(origin[2]-20) ; write_coord(origin[0]) ; write_coord(origin[1]) ; write_coord(origin[2]+200); write_short(beaconsprite); write_byte(0); write_byte(1); write_byte(6); write_byte(3) ; write_byte(1) ; write_byte(255) ; //RED write_byte(255) ; //GREEN write_byte(0) ; //BLUE write_byte(1000); write_byte(0); message_end(); } else { static origin[3]; get_user_origin(id, origin); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_BEAMCYLINDER); write_coord(origin[0]); write_coord(origin[1]); write_coord(origin[2]-20) ; write_coord(origin[0]) ; write_coord(origin[1]); write_coord(origin[2]+200); write_short(beaconsprite); write_byte(0); write_byte(1); write_byte(6); write_byte(3) ; write_byte(1) ; write_byte(0) ; //RED write_byte(255) ; //GREEN write_byte(0) ; //BLUE write_byte(1000); write_byte(0); message_end(); } client_cmd(0,"spk se7enkills/duel/blip") set_task(1.0, "beacon_spr", id) return PLUGIN_CONTINUE; }
Вот новый исходник. Там очень много багов. Скомпилируй и посмотри какие баги там, а то так много объяснять придется. К примеру: Когда идет таймер, на 13-14 секунде пропадает круги вокруг игрока, а звук остается до смены карты. Нельзя убить дуэлянтов.(У них бессмертие. P.S раньше не было, незнаю как выключить) После дуэли не видно игрока пока не подойдешь к нему близко. Паутинка неправильно работает.
Сообщение отредактировал chakki056skrip - Пятница, 2014-07-04, 06:29
Статистика Форума
Последние темы
Читаемые темы
Лучшие пользователи
Новые пользователи