BulgaR
Użytkownik-
Postów
160 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
10
Treść opublikowana przez BulgaR
-
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
-
- 1
-
- cs:go
- codmod_stary
-
(i 3 więcej)
Oznaczone tagami:
-
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
- 1 odpowiedź
-
- 2
-
- cs:go
- codmod_stary
-
(i 3 więcej)
Oznaczone tagami:
-
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
-
- 1
-
- cs:go
- codmod_stary
-
(i 3 więcej)
Oznaczone tagami:
-
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
-
- 1
-
- cs:go
- codmod_stary
-
(i 3 więcej)
Oznaczone tagami:
-
Ciekawe ;) Nie mogę się doczekać heheh :D
-
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
-
- 1
-
- klasy/perku
- niewidzialnosc
-
(i 3 więcej)
Oznaczone tagami:
-
Już widzę te MMy z misji na tych mapach haha, te stracone nerwy :D
-
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 ;)
-
VALVE wprowadza obowiązkowy system tokenów "Steam Game Server Login Tokens (GSLTs)
BulgaR odpowiedział(a) na
owner_2019temat w Pomoc technicznaNie rozumiem co trzeba wpisać w: Memo (text stored with the account, just shown here to help you keep track): Ktoś wie? -
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.
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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.
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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?
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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 ?
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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
- 4 odpowiedzi
-
- 1
-
- specyfikacja
- serwera
-
(i 1 więcej)
Oznaczone tagami:
-
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.
- 4 odpowiedzi
-
- 1
-
- specyfikacja
- serwera
-
(i 1 więcej)
Oznaczone tagami:
-
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
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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ę?
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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.
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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?
- 79 odpowiedzi
-
- pelni
- CodMod_Stary
-
(i 9 więcej)
Oznaczone tagami:
-
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
- 3 odpowiedzi
-
- przenikanie
- przez
-
(i 1 więcej)
Oznaczone tagami:
-
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ą.