
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;


Dodatki SourceMod















