Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

BulgaR

Użytkownik
  • Postów

    160
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    10

Treść opublikowana przez BulgaR

  1. W tym poradniku pokaze w jaki sposob dodac rakietki do klasy/itemu. Na poczatek musimy standardowo utworzyc jakas klase lub item a nastepnie gdzies na gorze dodajemy: new ilosc_rakiet_gracza[MAX_PLAYERS+1] Nastepnie szukamy: new String:modele_serwera[][] = { i tworzymy nowy wpis, jako nowa pozycje (w tym wypadku 11) dodajemy: "models/props/de_vertigo/construction_safetyribbon_01.mdl" // 11 Teraz szukamy: public OnMapStart() { i dodajemy do srodka: PrecacheSound("weapons/hegrenade/explode5.wav"); Schodzimy troche nizej i widzimy: public OnClientPutInServer(client) { i do srodka dodajemy: ilosc_rakiet_gracza[client] = 0; nastepnie szukamy: public Action:Prethink(client) { if(!IsValidClient(client) || IsFakeClient(client) || freeze_time) return Plugin_Continue; if(IsPlayerAlive(client)) { new buttons = GetClientButtons(client); new ile = poziom_gracza[client]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[client]-1]: 0; new Float:procent_gracza = 0.0; procent_gracza = (float(doswiadczenie_gracza[client]-ile)/float(doswiadczenie_poziomu[poziom_gracza[client]]-ile))*100.0; PrintHintText(client, "[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]); new String:weapon[32]; GetClientWeapon(client, weapon, sizeof(weapon)); i teraz dodajemy do switcha klasy lub itemu sprawdzanie czy gracz naciska klawisz, jesli tak to wykonujemy public StworzRakiete. Nizej przyklad dla klasy Wsparcie Ogniowe: Do switch(klasa_gracza[client]) { dodaje case WsparcieOgniowe: { if(!oldbuttons1[client] && buttons & IN_USE) { StworzRakiete(client); oldbuttons1[client] = 1; } else if(oldbuttons1[client] && !(buttons & IN_USE)) oldbuttons1[client] = 0; } Po nacisnieciu a nastepnie puszczeniu klawisza E, bedzie wykonywany kod rakiety. Nastepnie gdzies na silnika dole dodajemy: public Action:StworzRakiete(client) { if(ilosc_rakiet_gracza[client]) { new ent = CreateEntityByName("hegrenade_projectile"); if(ent == -1) return; new Float:OwnerAng[3]; new Float:OwnerPos[3]; new Float:InitialPos[3]; new Float:InitialVec[3]; new Float:InitialAng[3]; SetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity", client); GetClientEyeAngles(client, OwnerAng); GetClientEyePosition(client, OwnerPos); TR_TraceRayFilter(OwnerPos, OwnerAng, MASK_SOLID, RayType_Infinite, WybuchEnta, ent); TR_GetEndPosition(InitialPos); MakeVectorFromPoints(OwnerPos, InitialPos, InitialVec); NormalizeVector(InitialVec, InitialVec); ScaleVector(InitialVec, 1000.0); GetVectorAngles(InitialVec, InitialAng); DispatchSpawn(ent); ActivateEntity(ent); SetEntityModel(ent, modele_serwera[11]); SetEntityMoveType(ent, MOVETYPE_FLY); TeleportEntity(ent, OwnerPos, InitialAng, InitialVec); SDKHook(ent, SDKHook_StartTouchPost, DotykRakiety); ilosc_rakiet_gracza[client]--; } else PrintToChat(client, "[COD:MW] Wykorzystales juz moc swojej klasy w tej rundzie!"); } public Action:DotykRakiety(ent, other) { if(GetEntProp(other, Prop_Data, "m_nSolidType") && !(GetEntProp(other, Prop_Data, "m_usSolidFlags") & 0x0004)) { new MissileOwner = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity"); if(IsValidClient(MissileOwner)) { new Float:MissilePos[3]; new MissileOwnerTeam = GetEntProp(MissileOwner, Prop_Send, "m_iTeamNum"); new ExplosionIndex = CreateEntityByName("env_explosion"); GetEntPropVector(ent, Prop_Send, "m_vecOrigin", MissilePos); SetEntProp(ent, Prop_Send, "m_iTeamNum", MissileOwnerTeam); DispatchKeyValue(ExplosionIndex,"classname","hegrenade_projectile"); SetEntProp(ExplosionIndex, Prop_Data, "m_spawnflags", 6146); SetEntProp(ExplosionIndex, Prop_Data, "m_iMagnitude", 40+(inteligencja_gracza[MissileOwner]+bonusowa_inteligencja_gracza[MissileOwner])/6); SetEntProp(ExplosionIndex, Prop_Data, "m_iRadiusOverride", 200); DispatchSpawn(ExplosionIndex); ActivateEntity(ExplosionIndex); TeleportEntity(ExplosionIndex, MissilePos, NULL_VECTOR, NULL_VECTOR); SetEntPropEnt(ExplosionIndex, Prop_Send, "m_hOwnerEntity", MissileOwner); SetEntProp(ExplosionIndex, Prop_Send, "m_iTeamNum", MissileOwnerTeam); EmitSoundToAll("weapons/hegrenade/explode5.wav", ExplosionIndex, 1, 90); AcceptEntityInput(ExplosionIndex, "Explode"); DispatchKeyValue(ExplosionIndex,"classname","env_explosion"); AcceptEntityInput(ExplosionIndex, "Kill"); AcceptEntityInput(ent, "Kill"); } else AcceptEntityInput(ent, "Kill"); } } public bool:WybuchEnta(ent, contentsMask, any:data) { return false; } Musimy jeszcze przypisac odpowiednia ilosc rakiet dla warunku jaki przypisalismy. Tak wiec jezeli ma to byc dla klasy to przechodzimy do odrodzenia, a jezeli dla itemu to do dajitem. Ja pokaze na tej samej klasie na ktorej dodalem wykonywanie kodu rakiety, a wiec szukam: public Action:Odrodzenie(client) { if(!IsValidClient(client) || !IsPlayerAlive(client)) return; if(!klasa_gracza[client]) WybierzKlase(client); else { if(nowa_klasa_gracza[client]) { klasa_gracza[client] = nowa_klasa_gracza[client]; nowa_klasa_gracza[client] = 0; ilosc_apteczek_gracza[client] = 0; CS_UpdateClientModel(client); WczytajDane(client, klasa_gracza[client]); } switch(klasa_gracza[client]) { i dodaje: Do switch(klasa_gracza[client}) case WsparcieOgniowe: ilosc_rakiet_gracza[client] = 2; To na tyle, obrazenia z rakiety zmienia sie w public DotykRakiety. Co do modelu, odradzam ustawianie innych niz tych standardowych, poniewaz moga wystapic bledy. Jezeli gracz bedzie miec jakis problem z pobraniem modelu lub jej tekstury to zamiast modelu wyswietli sie mu napis "ERROR". Opcjonalnie, jezeli nie chcemy by w momencie zmiany klasy rakiety nie przechodzily na inna klase to do if(nowa_klasa_gracza[client]), dodajemy resetowanie rakiet czyl: ilosc_rakiet_gracza[client] = 0; Autorem poradnika jest @Linux`. Oryginalny temat: [cs:go]CodMod_Stary - Dodanie rakietek do klasy/itemu - Tutoriale - AMXX.pl: Support AMX Mod X
  2. W tym poradniku pokaze w jaki sposob dodac wlasny kolor hud na zyczenie gracza. Pierw gdzies na gorze dodajemy: new hud_gracza[MAX_PLAYERS+1], hud_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1] new String:nazwy_hud[][] = { "#ADFF2F", // 0 "#ADFF2F", // 1 "#008000", // 2 "#FFFF00", // 3 "#FFFFFF", // 4 "#FFA500", // 5 "#FF0000", // 6 "#1E90FF", // 7 "#00FFFF", // 8 "#808000", // 9 "#9400D3", // 10 "#8B4513", // 11 "#FF00FF" // 12 }; new String:opis_hud[][] = { "Domyslny", // 0 "Zielonozolty", // 1 "Zielony", // 2 "Zolty", // 3 "Bialy", // 4 "Pomaranczowy ", // 5 "Czerwony", // 6 "Niebieski", // 7 "Morski", // 8 "Oliwkowy", // 9 "Fioletowy", // 10 "Brazowy", // 11 "Rozowy" // 12 }; teraz szukamy: public OnClientPutInServer(client) { i dodajemy do srodka: hud_gracza[client] = 0; oraz zamieniamy: for(new i = 1; i < sizeof nazwy_klas; i ++) { poziom_klasy_gracza[client][i] = 1; doswiadczenie_klasy_gracza[client][i] = 0; inteligencja_klasy_gracza[client][i] = 0; zdrowie_klasy_gracza[client][i] = 0; obrazenia_klasy_gracza[client][i] = 0; wytrzymalosc_klasy_gracza[client][i] = 0; kondycja_klasy_gracza[client][i] = 0; } na: for(new i = 1; i < sizeof nazwy_klas; i ++) { poziom_klasy_gracza[client][i] = 1; doswiadczenie_klasy_gracza[client][i] = 0; inteligencja_klasy_gracza[client][i] = 0; zdrowie_klasy_gracza[client][i] = 0; obrazenia_klasy_gracza[client][i] = 0; wytrzymalosc_klasy_gracza[client][i] = 0; kondycja_klasy_gracza[client][i] = 0; hud_klasy_gracza[client][i] = 0; } nastepnie przechodzimy do: public Action:DataBaseConnect() { i zamieniamy SQL_FastQuery(sql, "CREATE TABLE IF NOT EXISTS `codmod` (`id` INT(11) NOT NULL AUTO_INCREMENT, `steamid` VARCHAR(48) NOT NULL, `klasa` VARCHAR(48) NOT NULL, `lvl` INT(11) DEFAULT 1, `xp` INT(14), `inteligencja` INT(9), `zdrowie` INT(9), `obrazenia` INT(9), `wytrzymalosc` INT(9), `kondycja` INT(9), PRIMARY KEY (`id`), UNIQUE KEY `klasaid` (`klasa`,`steamid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;"); na SQL_FastQuery(sql, "CREATE TABLE IF NOT EXISTS `codmod` (`id` INT(11) NOT NULL AUTO_INCREMENT, `steamid` VARCHAR(48) NOT NULL, `klasa` VARCHAR(48) NOT NULL, `lvl` INT(11) DEFAULT 1, `xp` INT(14), `inteligencja` INT(9), `zdrowie` INT(9), `obrazenia` INT(9), `wytrzymalosc` INT(9), `kondycja` INT(9), `hudkolor` INT(9), PRIMARY KEY (`id`), UNIQUE KEY `klasaid` (`klasa`,`steamid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;"); teraz szukamy: public Action:ZapiszDane(client) { i zamieniamy Format(tmp, sizeof(tmp), "INSERT INTO `codmod` (`steamid`, `klasa`, `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, %d) ON DUPLICATE KEY UPDATE `lvl`=VALUES(`lvl`), `xp`=VALUES(`xp`), `inteligencja`=VALUES(`inteligencja`), `zdrowie`=VALUES(`zdrowie`), `obrazenia`=VALUES(`obrazenia`), `wytrzymalosc`=VALUES(`wytrzymalosc`), `kondycja`=VALUES(`kondycja`);", authid, nazwy_klas[klasa_gracza[client]], poziom_gracza[client], doswiadczenie_gracza[client], inteligencja_gracza[client], zdrowie_gracza[client], obrazenia_gracza[client], wytrzymalosc_gracza[client], kondycja_gracza[client]); na Format(tmp, sizeof(tmp), "INSERT INTO `codmod` (`steamid`, `klasa`, `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `hudkolor`) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d) ON DUPLICATE KEY UPDATE `lvl`=VALUES(`lvl`), `xp`=VALUES(`xp`), `inteligencja`=VALUES(`inteligencja`), `zdrowie`=VALUES(`zdrowie`), `obrazenia`=VALUES(`obrazenia`), `wytrzymalosc`=VALUES(`wytrzymalosc`), `kondycja`=VALUES(`kondycja`), `hudkolor`=VALUES(`hudkolor`);", authid, nazwy_klas[klasa_gracza[client]], poziom_gracza[client], doswiadczenie_gracza[client], inteligencja_gracza[client], zdrowie_gracza[client], obrazenia_gracza[client], wytrzymalosc_gracza[client], kondycja_gracza[client], hud_gracza[client]); nastepnie przechodzimy do: public Action:WczytajDane(client, klasa) { i pod kondycja_gracza[client] = kondycja_klasy_gracza[client][klasa]; dodajemy hud_gracza[client] = hud_klasy_gracza[client][klasa]; i znow szukamy: public Action:Prethink(client) { i zamieniamy PrintHintText(client, "[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]); na PrintHintText(client, "<font color='%s'>[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_hud[hud_gracza[client]], nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]); oraz (opcjonalnie) PrintHintText(client, "[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[target]], procent_gracza, poziom_gracza[target], nazwy_itemow[informacje_itemu_gracza[target][0]], moc_itemu[target]); na PrintHintText(client, "<font color='%s'>[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_hud[hud_gracza[target]], nazwy_klas[klasa_gracza[target]], procent_gracza, poziom_gracza[target], nazwy_itemow[informacje_itemu_gracza[target][0]], moc_itemu[target]); teraz gdzies na koncu dodajemy: public Action:HudMenu(client) { if(klasa_gracza[client]) { if(IsPlayerAlive(client)) { new String:lista[512]; new Handle:menu = CreateMenu(HudMenu_Handler); SetMenuTitle(menu, "HudKolor:"); for(new i = 1; i < sizeof nazwy_hud; i ++) { Format(lista, sizeof(lista), "%s", opis_hud[i]); AddMenuItem(menu, "1", lista); } DisplayMenu(menu, client, 250); } else PrintToChat(client, "[COD:MW] Musisz byc zywy aby moc zmienic kolor hud!"); } else PrintToChat(client, "[COD:MW] Musisz miec wybrana klase aby moc zmienic kolor hud!"); } public HudMenu_Handler(Handle:classhandle, MenuAction:action, client, Position) { if(action == MenuAction_Select) { new String:Item[32]; GetMenuItem(classhandle, Position, Item, sizeof(Item)); Position++; if(StrEqual(Item, "1")) { if(!zapisz_dane[client]) zapisz_dane[client] = 1; hud_gracza[client] = Position; PrintToChat(client, "[COD:MW] Zmieniles kolor swojego hud na %s.", opis_hud[Position]); HudMenu(client); } } else if(action == MenuAction_End) CloseHandle(classhandle); } nastepnie przechodzimy do: public Action:Komendy(client, args) { i gdzies w srodku pod public WyrzucItem dodajemy: else if(strcmp(text, "/hud", false) == 0 || strcmp(text, "/kolor", false) == 0) HudMenu(client); teraz szukamy: public Action:WybierzKlase(client) { i pod kondycja_klasy_gracza[client][klasa_g] = kondycja_gracza[client]; dodajemy hud_klasy_gracza[client][klasa_g] = hud_gracza[client]; nastepnie zamieniamy Format(tmp, sizeof(tmp), "SELECT `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `klasa` FROM `codmod` WHERE steamid = '%s';", authid); na Format(tmp, sizeof(tmp), "SELECT `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `hudkolor`, `klasa` FROM `codmod` WHERE steamid = '%s';", authid); nastepnie zamieniamy caly: public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client) { na public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client) { if(query == INVALID_HANDLE) { LogError("Load error: %s", error); return; } if(SQL_GetRowCount(query)) { new poziom = 1, doswiadczenie = 0, inteligencja = 0, zdrowie = 0, obrazenia = 0, wytrzymalosc = 0, kondycja = 0, hud = 0; new String:klasa[512]; while(SQL_MoreRows(query)) { while(SQL_FetchRow(query)) { poziom = SQL_FetchInt(query, 0); doswiadczenie = SQL_FetchInt(query, 1); inteligencja = SQL_FetchInt(query, 2); zdrowie = SQL_FetchInt(query, 3); obrazenia = SQL_FetchInt(query, 4); wytrzymalosc = SQL_FetchInt(query, 5); kondycja = SQL_FetchInt(query, 6); hud = SQL_FetchInt(query, 7); SQL_FetchString(query, 8, klasa, sizeof(klasa)); for(new i = 1; i < sizeof nazwy_klas; i ++) { if(StrEqual(nazwy_klas[i], klasa)) { poziom_klasy_gracza[client][i] = poziom; doswiadczenie_klasy_gracza[client][i] = doswiadczenie; inteligencja_klasy_gracza[client][i] = inteligencja; zdrowie_klasy_gracza[client][i] = zdrowie; obrazenia_klasy_gracza[client][i] = obrazenia; wytrzymalosc_klasy_gracza[client][i] = wytrzymalosc; kondycja_klasy_gracza[client][i] = kondycja; hud_klasy_gracza[client][i] = hud; } } } } } WybierzKlaseMenu(client); polaczony_raz[client] = 0; } Jezeli zrobiles wszystko tak jak wyzej to powinienes miec dzialajaca zmiane koloru hud na zyczenie. Uwaga, jezeli modyfikujesz swoj zapis, musisz usunac aktualny plik zapisu lub go zmodyfikowac poprzez dodanie nowej kolumny do pliku. Jezeli tego nie zrobisz serwer bedzie wyswietlac bledy. I teraz jak zmodyfikowac liste kolorow, wszystkie zmiany wprowadzasz w: new String:nazwy_hud[][] = oraz w opisie danego koloru. Powyzsze kolory to tylko moja propozycja, kolor mozna sobie wybrac dowolny jak i tresc do kolorowania. Autorem poradnika jest @Linux`. Oryginalny temat: [cs:go]CodMod_Stary - Wlasny kolor hud na zyczenie - Tutoriale - AMXX.pl: Support AMX Mod X
  3. W tym tutku opisze w jaki sposob dodac klase premium do silnika. Najpierw musimy dodac normalna klase, robimy to wedlug tego poradnika. Nastepnie szukamy: public WybierzKlase_Handler(Handle:classhandle, MenuAction:action, client, Position) { i w srodku zamieniamy: if(ma_poziom) { if(klasa_gracza[client]) { nowa_klasa_gracza[client] = Position; PrintToChat(client, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie."); } else { klasa_gracza[client] = Position; WczytajDane(client, klasa_gracza[client]); Odrodzenie(client); } } else { WybierzKlase(client) PrintToChat(client, "[COD:MW] Wybrana klasa dostepna jest od %dLv!", umiejetnosci_klas[Position][0]); } na: if(ma_poziom) { if(Position == NAZWA && !(GetUserFlagBits(client) & FLAGA)) { WybierzKlase(client) PrintToChat(client, "[COD:MW] Wybrana klasa dostepna jest tylko dla posiadaczy Uslug Premium!"); } else { if(klasa_gracza[client]) { nowa_klasa_gracza[client] = Position; PrintToChat(client, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie."); } else { klasa_gracza[client] = Position; WczytajDane(client, klasa_gracza[client]); Odrodzenie(client); } } } else { WybierzKlase(client) PrintToChat(client, "[COD:MW] Wybrana klasa dostepna jest od %dLv!", umiejetnosci_klas[Position][0]); } Zamiast NAZWA musimy podac nazwe klasy ktora ma byc premium. Zamiast FLAGA podajemy flage dla jakiej ma byc dostepna klasa. Oczywiscie mozemy zrobic takze by klasa byla dostepna dopiero po wbiciu okreslonego poziomu i tylko dla posiadaczy flagi. Poziom od ktorego ma byc klasa ustalamy w standardowy sposob. A, jezeli teraz chcielibysmy dodac kilka klas premium zamiast jednej to zamieniamy: if(Position == NAZWA && !(GetUserFlagBits(client) & FLAGA)) na: if(Position == NAZWA && !(GetUserFlagBits(client) & FLAGA) || Position == NAZWA && !(GetUserFlagBits(client) & FLAGA)) i tak dalej... Lista flag: Spoiler ADMFLAG_RESERVATION Rezerwacja slota // A ADMFLAG_GENERIC Admin // B ADMFLAG_KICK Możliwość kickowania // C ADMFLAG_BAN Możliwość banowania // D ADMFLAG_UNBAN Możliwość dawania UB // E ADMFLAG_SLAY Możliwość Slayowania (zabijania) gracza // F ADMFLAG_CHANGEMAP Możliwość zmiany mapy // G ADMFLAG_CONVARS Możliwość zmiany cvarów // H ADMFLAG_CONFIG Możliwość ładowania plików CFG na serwerze // I ADMFLAG_VOTE Możliwość tworzenia głosowań // K ADMFLAG_PASSWORD Możliwość utworzenia hasła na serwerze // L ADMFLAG_RCON Możliwość używania komend RCON // M ADMFLAG_CHEATS Możliwość zmiany wartości sv_cheats // N ADMFLAG_ROOT Wszystkie Flagi // Z ADMFLAG_CUSTOM1 Flaga bez zastosowania // O ADMFLAG_CUSTOM2 Flaga bez zastosowania // P ADMFLAG_CUSTOM3 Flaga bez zastosowania // Q ADMFLAG_CUSTOM4 Flaga bez zastosowania // R ADMFLAG_CUSTOM5 Flaga bez zastosowania // S ADMFLAG_CUSTOM6 Flaga bez zastosowania // T Autorem poradnika jest @Linux`. Oryginalny temat: [cs:go]CodMod_Stary - Dodanie klasy premium - Tutoriale - AMXX.pl: Support AMX Mod X
  4. W tym poradniku pokaze w jaki sposob dodac dynamit do klasy/itemu. Na poczatek musimy standardowo utworzyc jakas klase lub item a nastepnie gdzies na gorze dodajemy: new ilosc_dynamitow_gracza[MAX_PLAYERS+1] Nastepnie szukamy: public OnClientPutInServer(client) { i do srodka dodajemy: ilosc_dynamitow_gracza[client] = 0; nastepnie szukamy: public Action:Prethink(client) { if(!IsValidClient(client) || IsFakeClient(client) || freeze_time) return Plugin_Continue; if(IsPlayerAlive(client)) { new buttons = GetClientButtons(client); new ile = poziom_gracza[client]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[client]-1]: 0; new Float:procent_gracza = 0.0; procent_gracza = (float(doswiadczenie_gracza[client]-ile)/float(doswiadczenie_poziomu[poziom_gracza[client]]-ile))*100.0; PrintHintText(client, "[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]); new String:weapon[32]; GetClientWeapon(client, weapon, sizeof(weapon)); i teraz dodajemy do switcha klasy lub itemu sprawdzanie czy gracz naciska klawisz, jesli tak to wykonujemy funkcje dynamitu. Nizej przyklad dla klasy Saper: Do: switch(klasa_gracza[client]) { dodaje case Saper: { if(!oldbuttons1[client] && buttons & IN_USE) { if(ilosc_dynamitow_gracza[client]) { new Float:fOrigin[3]; new Float:iOrigin[3]; GetClientEyePosition(client, Float:fOrigin); for(new i = 1, max = GetMaxClients(); i <= max; ++ i) { if(!IsClientInGame(i) || !IsPlayerAlive(i)) continue; if(GetClientTeam(client) == GetClientTeam(i)) continue; GetClientEyePosition(i, Float:iOrigin); if(GetVectorDistance(fOrigin, iOrigin) <= 200.0) SDKHooks_TakeDamage(i, client, client, ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 30)? 0.0: 40.0+(inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client])/6), DMG_GENERIC); } TE_SetupBeamRingPoint(fOrigin, 20.0, 200.0, sprite_laser, sprite_halo, 0, 10, 0.6, 6.0, 0.0, {255, 255, 255, 128}, 10, 0); TE_SendToAll(); ilosc_dynamitow_gracza[client]--; } else PrintToChat(client, "[COD:MW] Wykorzystales juz moc swojej klasy w tej rundzie!"); oldbuttons1[client] = 1; } else if(oldbuttons1[client] && !(buttons & IN_USE)) oldbuttons1[client] = 0; } Po nacisnieciu a nastepnie puszczeniu klawisza E, bedzie wykonywany kod dynamitu. Musimy jeszcze przypisac odpowiednia ilosc dynamitow dla warunku jaki przypisalismy. Tak wiec jezeli ma to byc dla klasy to przechodzimy do odrodzenia, a jezeli dla itemu to do dajitem. Ja pokaze na tej samej klasie na ktorej dodalem wykonywanie kodu dynamitu, a wiec szukam: public Action:Odrodzenie(client) { if(!IsValidClient(client) || !IsPlayerAlive(client)) return; if(!klasa_gracza[client]) WybierzKlase(client); else { if(nowa_klasa_gracza[client]) { klasa_gracza[client] = nowa_klasa_gracza[client]; nowa_klasa_gracza[client] = 0; ilosc_apteczek_gracza[client] = 0; CS_UpdateClientModel(client); WczytajDane(client, klasa_gracza[client]); } switch(klasa_gracza[client]) { i dodaje: Do switch(klasa_gracza[client}) case Saper: ilosc_dynamitow_gracza[client] = 2; Opcjonalnie, jezeli nie chcemy by w momencie zmiany klasy dynamit nie przechodzil na inna klase to do if(nowa_klasa_gracza[client]), dodajemy resetowanie dynamitu czyl: ilosc_dynamitow_gracza[client] = 0; Autorem poradnika jest @Linux`. Oryginalny temat: [cs:go]CodMod_Stary - Dodanie dynamitu do klasy - Tutoriale - AMXX.pl: Support AMX Mod X
  5. STEAM_0:0:58228962 dla csgo STEAM_1:0:58228962
  6. W tym prostym tutku postaram sie opisac w jaki sposob dodac niewidzialnosc dla klasy/itemu. Pierw musimu dodac klase lub item, robimy to w standardowy sposob. Nastepnie czas na niewidzialnosc, dodajemy ja tylko przy odrodzeniu lub okreslonym warunku (np w wypadku dodawania jej do itemu przy funkcji DajItem). Niewidzialnosc w sourcemodzie mozna dodac na kilka sposobow, sam znam trzy. Ponizszy kod funkcji niewidzialnosci ktora wam przedstawie jest dosc banalny a co za tym idzie jest to najlepszy ze wszystkich sposobow, poniewaz mozna ustawic kazdy poziom widocznosci. Jak dodac niewidzialnosc dla klasy: Spoiler Najpierw przechodzimy do: public Action:Odrodzenie(client) { i szukamy switch(klasa_gracza[client]) { w srodku do okreslonego case klasy dodajemy UstawWidocznosc(client, 50); liczba 50 odpowiada za poziom widocznosci. Opcjonalnie, do if(nowa_klasa_gracza[client]) mozemy dodac resetowanie poziomu widocznosci dla klasy czyli UstawWidocznosc(client, 255); 255 to pelna widocznosc. Mozemy wybierac zakres widocznosci z liczby od 1-255. Nastepnie gdzies na dole silnika dodajemy: public Action:UstawWidocznosc(client, widocznosc) { SetEntityRenderMode(client, RENDER_TRANSCOLOR); SetEntityRenderColor(client, 255, 255, 255, widocznosc); } Jak dodac niewidzialnosc dla itemu: Spoiler Najpierw przechodzimy do: public Action:DajItem(client, item) { i szukamy switch(item) { teraz do odpowiedniego numeru case itemu dodajemy niewidocznosc, czyli UstawWidocznosc(client, 50); liczba 50 odpowiada za poziom widocznosci. Oraz opcjonalnie mozemy takze dodac resetowanie widocznosci przy wyrzuceniu itemu. W tym celu szukamy: public Action:UsunItem(client) { switch(informacje_itemu_gracza[client][0]) { i do case itemu do ktorego dodalismy widocznosc dodajemy jego resetowanie, czyli: UstawWidocznosc(client, 255); 255 to pelna widocznosc. Mozemy wybierac zakres widocznosci z liczby od 1-255. Nastepnie gdzies na dole silnika dodajemy: public Action:UstawWidocznosc(client, widocznosc) { SetEntityRenderMode(client, RENDER_TRANSCOLOR); SetEntityRenderColor(client, 255, 255, 255, widocznosc); } Bardzo wazna rzecza jest by pamietac by cvar sv_disable_immunity_alpha byl ustawiony na 1. W przeciwnym razie niewidocznosc nie bedzie dzialac. Autorem poradnika jest @Linux`. Oryginalny temat: [cs:go]CodMod_Stary - Jak dodac niewidzialnosc dla klasy/perku - Tutoriale - AMXX.pl: Support AMX Mod X
  7. Mam nadzieje, że po update 9 grudnia będzie mniej tego syfu. Niby mają coś wprowadzić z tym trade i kto wie jak sobie poradzi z tym lounge czy jackpoty ;)
  8. Nie rozumiem co trzeba wpisać w: Memo (text stored with the account, just shown here to help you keep track): Ktoś wie?
  9. Powinien być jakiś cvar który odpowiada za podkładanie paki. Bo jak ktoś jest sam na serwie i se pake podkłada to dostaje expa. Troszke lipa. Powinno być np minimum 4 players.
  10. Nie, tak powinno byc. Tak jest w orginale, w starym codzie a to na nim sie wzorowalem. Uzycie komenda "nick" "ile poziom dodac". Więc chyba jest to zbugowane, bo nie dodaje leveli tak jak powinno. Pomimo wpisania +1lvl dodaje ich np 2 albo 3 a przy większych lvl to jeszcze więcej.
  11. Chyba się nie rozumiemy, ja tutaj mówię o samych lvl nie punktach do klasy Przykładowo mam Klasę LVL 100 i wpisuję komendę "sm_lvl Nick 1" bo chcę mieć LVL 101 ale zamiast tego ustawia mi się LVL 151. EDIT: Ogólnie ta komenda powinna ustawiać lvl a nie go dodawać, może to błąd?
  12. Nie wiem czy to bug, ale dlaczego gdy dodaję sobie LVL komendą "sm_lvl Nick 1" to zamiast dodać mi 1 lvl czasami dodaje 10 czy 20 ?
  13. Ram to zbedna rzecz, od ilosci ramu zalezy tylko w jakim czasie beda ladowac sie ustawienia serwera (zmiana map itp). 1gb ramu w zupelnosci wystarcza przy tylu slotach. Owszem, jednak mało jaka firma (Lepsza firma) sprzeda ci dobrą maszynę z 1gb ram
  14. 2,4 GHz Procek 4 GB RAM Dysk 20GB 100 Mbps Miałem serwer do mixów na takiej maszynie i nie było zbytnio problemu.
  15. Jasne, że nie jest to trudne Tylko nie mam zbytnio czasu do tego przysiąść W Niedziele sobie siądę na spokojnie i ogarnę co i jak
  16. Jasne że mogę. Z tego co widzę to nic w tym trudnego i jest to praktycznie to samo co było w 1.6. Jednak z wywaleniem tych klas to może być nieco więcej zabawy Jakaś rada jak szybko wywalić klasy których nie chcę?
  17. Wszystko cacy tylko za dużo lvl. Przydało by się coś jak dawniej gdzie było mało klas i 201 lvli. Wtedy by się zrobiło taki serwer z LOW EXP i przyjemniej by się grało.
  18. Jak mam to rozumieć: Terrorysta [Od 500Lv] Z tego co wiem w COD lvl jest wbijany na klasie. Po tym co tutaj pisze to wygląda to tak jakby lvl wbijał się tylko jeden a ty możesz wybrać tego Terrorystę jak będziesz miał 500? Interesuje mnie czy lvl jest na klase czy po prostu jeden lvl i wszystkie klasy ten sam?
  19. Do tego raczej nie trzeba pluginu. Komenda "mp_solid_teammates" była od tego jak się nie mylę. No chyba, że chcesz plugin na przenikanie przez pierwsze x sekund. To wtedy plugin https://forums.alliedmods.net/showthread.php?p=1816881
  20. Można ale prędzej czy później dostaniesz bana. Gdy tylko volvo zauważy, że na twoim serwerze gracz ma skina którego nie powinien to pewnie cie zblokują.
  21. Odświeżyłem, niestety nie mogłem tego dodać tu na forum więc wrzuciłem na speedyshare.
×
×
  • Dodaj nową pozycję...