Dzisiaj pokażę wam, jak zrobić klasę/perk ze zmienionym modelem broni (p_/v_/w_). Zacznę od wytłumaczenia, który model za co odpowiada:
- v_* jest to model, który widzimy my z perspektywy 1. osoby,
- p_* jest to model broni w naszych rękach, jaki widzą inni gracze,
- w_* jest to model broni leżącej na ziemi.
CoD Nowy
Zacznijmy od przygotowania pliku. Weźmy np. takiego Rushera. Plik .sma wygląda tak:
Dodajmy wsród zmiennych warunek typu true/false (o nazwie ma_klase dla klasy lub ma_perk dla perku) i wrzućmy do forwardów cod_class_enabled i cod_class_disabled (jeżeli zmieniamy to dla perku, to do forwardów cod_perk_enabled i cod_perk_disabled). Następnie zaincludujmy potrzebną bibliotekę fakemeta oraz dodajmy modele do plugin_precache (żeby się ściągały przed dołączeniem do serwera).
Zacznijmy od zmiany modelów p_ i v_. Dodajemy to do plugin_init:
register_event("CurWeapon", "CurWeapon", "be", "1=1")
A to na koniec pliku:
public CurWeapon(id)
{
new weapon = read_data(2);
if(ma_klase[id]) //tutaj wstawiamy ma_klase lub ma_perk
{
if(weapon == CSW_M3) //tutaj ustawiamy broń, jakiej model będziemy zmieniać
{
set_pev(id, pev_viewmodel2, "models/cod/v_m3.mdl")
//tu dajemy ścieżkę do nowego modeli v_
set_pev(id, pev_weaponmodel2, "models/cod/p_m3.mdl")
//tu dajemy ścieżkę do nowego modeli p_
}
}
}
Całość wygląda tak:
Teraz zajmijmy się zmianą modelu w_. Dodajemy to do plugin_init:
register_forward(FM_SetModel, "fw_SetModel");
A to na koniec pliku:
public fw_SetModel(entity, model[])
{
if(!pev_valid(entity))
return FMRES_IGNORED
if(!equali(model, "models/w_m3.mdl")) //tutaj wpisujemy ścieżkę do STAREGO modelu w_, czyli tego który chcemy podmienić
return FMRES_IGNORED;
new entityowner = pev(entity, pev_owner);
if(!ma_klase[entityowner]) //tutaj wpisujemy ma_perk lub ma_klase
return FMRES_IGNORED;
engfunc(EngFunc_SetModel, entity, "models/cod/w_m3.mdl")
return FMRES_SUPERCEDE
}
A to gotowy .sma:
To by było na tyle. Mam nadzieję, że zrozumieliście jak to zrobić. Niestety - modele musicie sami sobie znaleść .
Użytkownik Goliath edytował ten post 16.05.2011 17:03