#include #include #include #include #include #include #include #include #define PLUGIN "Call of Duty: MW Mod" #define VERSION "1.0" #define AUTHOR "QTM_Peyote & cypis" #define ZADANIE_POKAZ_INFORMACJE 672 #define ZADANIE_WSKRZES 704 #define ZADANIE_WYSZKOLENIE_SANITARNE 736 #define ZADANIE_POKAZ_REKLAME 768 #define ZADANIE_USTAW_SZYBKOSC 832 new SyncHudObj; new SyncHudObj2; new sprite_white; new sprite_blast; new cvar_doswiadczenie_za_zabojstwo, cvar_doswiadczenie_za_wygrana, cvar_limit_poziomu, new nazwa_gracza[33][64]; new klasa_gracza[33]; new poziom_gracza[33] = 1; new doswiadczenie_gracza[33]; new nowa_klasa_gracza[33]; enum {NONE = 0, Snajper, Komandos, Strzelec, Obronca, Medyk, Wsparcie, Saper, Demolitions, Rusher, Admiral}; new const nazwy_klas[][] = {"Brak", "Snajper", "Komandos", "Strzelec wyborowy", "Obronca", "Medyk", "Wsparcie ogniowe", "Saper", "Demolitions", "Rusher", "Admiral (Klasa Premium)" }; new const opisy_klas[][] = {"Brak", "Dostaje AWP, scout i deagle, 120hp bazowe, 1/3 szansy natychmiastowego zabicia noza, 110% biegu, 100 pancerza", "Dostaje Deagle, 140hp bazowe, Natychmiastowe zabicie z noza (prawy przycisk myszy), 135% biegu, 100 pancerza", "Dostaje AK i M4A1, 110hp bazowe, 80 % biegu, 100 pancerza", "Dostaje M249 (Krowa), 120hp bazowe, 80% biegu, jest odporny na miny, ma wszystkie granaty, 150 pancerza", "Dostaje UMP45, 110hp bazowe, posiada apteczke, 100 pancerza", "Dostaje MP5, 100 hp bazowe, Ma dwie rakiety,ktore po trafieniu przeciwnika zadaja dużo obrazen", "Dostaje P90, 100hp bazowe, 100 pancerza, Dostaje 3 miny, gdy ktos w nie wejdzie wybuchaja", "Dostaje AUG, 110 hp bazowe, 100 pancerza, Ma wszystkie granaty, Dostaje dynamit, który zabiera sporo zycia wszystkim znajdującym się blisko niego", "Dostaje szotgana M3, 100 hp bazowe, 130% biegu", "Dostaje Famasa, 130 hp bazowe, 120% biegu, za kazde zabojstwo +20 hp oraz pelen magazynek, podwojny skok" }; new lvl_klasy_gracza[33][sizeof nazwy_klas]; new xp_klasy_gracza[33][sizeof nazwy_klas]; new polaczony_raz[33], wczytane_dane[33]; new Handle:info; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1); RegisterHam(Ham_Killed, "player", "SmiercGraczaPost", 1); register_forward(FM_CmdStart, "CmdStart"); register_forward(FM_EmitSound, "EmitSound"); register_event("SendAudio", "WygranaTerro" , "a", "2&%!MRAD_terwin"); register_event("SendAudio", "WygranaCT", "a", "2&%!MRAD_ctwin"); cvar_doswiadczenie_za_zabojstwo = register_cvar("cod_killxp", "10"); cvar_doswiadczenie_za_wygrana = register_cvar("cod_winxp", "40"); cvar_limit_poziomu = register_cvar("cod_maxlevel", "201"); register_cvar("cod_host", ""); register_cvar("cod_user", ""); register_cvar("cod_pass", ""); register_cvar("cod_db", ""); register_cvar("cod_table", "codmod_table"); register_clcmd("say /klasa", "WybierzKlase"); register_clcmd("say /class", "WybierzKlase"); register_clcmd("say /klasy", "OpisKlasy"); register_clcmd("say /classinfo", "OpisKlasy"); register_clcmd("say /item", "Pomoc"); register_concmd("cod_setlvl", "cmd_setlvl", ADMIN_RCON, " "); SyncHudObj = CreateHudSyncObj(); SyncHudObj2 = CreateHudSyncObj(); } public plugin_cfg() { new Host[64], User[64], Pass[64], DB[64], Table[32]; get_cvar_string("cod_host", Host, 63); get_cvar_string("cod_user", User, 63); get_cvar_string("cod_pass", Pass, 63); get_cvar_string("cod_db", DB, 63); get_cvar_string("cod_table", Table, 31); info = SQL_MakeDbTuple(Host, User, Pass, DB); if(info == Empty_Handle){ set_fail_state("Brak polaczenia z baza danych!"); return; } new szTemp[1028], iLen = 0 iLen += formatex(szTemp[iLen], charsmax(szTemp)-iLen, "CREATE TABLE IF NOT EXISTS `%s` (`nick` VARCHAR(64)", Table); for(new i=1; i= doswiadczenie_poziomu(poziom_gracza[id])) { poziom_gracza[id]++; set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2); ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]); client_cmd(id, "spk QTM_CodMod/levelupmw"); } while(doswiadczenie_gracza[id] < doswiadczenie_poziomu(poziom_gracza[id]-1)) { poziom_gracza[id]--; set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2); ShowSyncHudMsg(id, SyncHudObj2,"Spadles do %i poziomu!", poziom_gracza[id]); } if(poziom_gracza[id] > limit_poziomu) { poziom_gracza[id] = limit_poziomu; } ZapiszDane(id); } if(poziom_gracza[id] > limit_poziomu) { poziom_gracza[id] = limit_poziomu; ZapiszDane(id); } } public PokazInformacje(id) { id -= ZADANIE_POKAZ_INFORMACJE; if(!is_user_alive(id) && is_user_connected(id)) { new target = entity_get_int(id, EV_INT_iuser2); if(!target) return PLUGIN_CONTINUE; set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2); ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], doswiadczenie_poziomu(poziom_gracza[target]), poziom_gracza[target]); return PLUGIN_CONTINUE; } set_hudmessage(255, 0, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], doswiadczenie_poziomu(poziom_gracza[id]), poziom_gracza[id]); return PLUGIN_CONTINUE; } public PokazReklame(id) { id-=ZADANIE_POKAZ_REKLAME; client_print(id, print_chat, "[COD:MW] Witaj w Modyfikacji Call of Duty stworzonej przez QTM_Peyote, a edytowanej przez Cypis"); client_print(id, print_chat, "[COD:MW] W celu uzyskania informacji o komendach napisz /pomoc."); } public Pomoc(id) show_menu(id, 1023, "\y/reset\w - resetuje statystyki^n\y/statystyki\w - wyswietla statystyki^n\y/klasa\w - uruchamia menu wyboru klas^n\y/wyrzuc\w - wyrzuca perk^n\y/perk\w - pokazuje opis twojego perku^n\y/klasy\w - pokazuje opisy klas^n\y+use\w - Uzycie umiejetnosci klasy^n\yradio3\w (standardowo C) lub \yuseperk\w - Uzycie perku^n \wZapraszamy na \y GamesBoard.pl", -1, "Pomoc"); public cmd_setlvl(id, level, cid) { if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED; new arg[2][33]; read_argv(1, arg[0], 32); read_argv(2, arg[1], 32); new player = cmd_target(id, arg[0], 8); new value = str_to_num(arg[1]); doswiadczenie_gracza[player] = doswiadczenie_poziomu(value); poziom_gracza[player] = 0; SprawdzPoziom(player); return PLUGIN_HANDLED; } stock bool:UTIL_In_FOV(id,target) { if (Find_Angle(id,target,9999.9) > 0.0) return true; return false; } stock Float:Find_Angle(Core,Target,Float:dist) { new Float:vec2LOS[2]; new Float:flDot; new Float:CoreOrigin[3]; new Float:TargetOrigin[3]; new Float:CoreAngles[3]; pev(Core,pev_origin,CoreOrigin); pev(Target,pev_origin,TargetOrigin); if (get_distance_f(CoreOrigin,TargetOrigin) > dist) return 0.0; pev(Core,pev_angles, CoreAngles); for ( new i = 0; i < 2; i++ ) vec2LOS[i] = TargetOrigin[i] - CoreOrigin[i]; new Float:veclength = Vec2DLength(vec2LOS); //Normalize V2LOS if (veclength <= 0.0) { vec2LOS[0] = 0.0; vec2LOS[1] = 0.0; } else { new Float:flLen = 1.0 / veclength; vec2LOS[0] = vec2LOS[0]*flLen; vec2LOS[1] = vec2LOS[1]*flLen; } //Do a makevector to make v_forward right engfunc(EngFunc_MakeVectors,CoreAngles); new Float:v_forward[3]; new Float:v_forward2D[2]; get_global_vector(GL_v_forward, v_forward); v_forward2D[0] = v_forward[0]; v_forward2D[1] = v_forward[1]; flDot = vec2LOS[0]*v_forward2D[0]+vec2LOS[1]*v_forward2D[1]; if ( flDot > 0.5 ) { return flDot; } return 0.0; } stock Float:Vec2DLength( Float:Vec[2] ) { return floatsqroot(Vec[0]*Vec[0] + Vec[1]*Vec[1] ); } stock set_user_clip(id, ammo) { new weaponname[32], weaponid = -1, weapon = get_user_weapon(id, _, _); get_weaponname(weapon, weaponname, 31); while ((weaponid = find_ent_by_class(weaponid, weaponname)) != 0) if(entity_get_edict(weaponid, EV_ENT_owner) == id) { set_pdata_int(weaponid, 51, ammo, 4); return weaponid; } return 0; }