Nowe bronie i edycja broni jest podobna jak nowe perki/klasy w codmodzie.
Ale nie będę tak mocno do CodModa przywiązywał bo CheQ będzie zły
Przejdźmy do rzeczy, jako skrypter wychwytujemy otrzymanie i stracenie broni tak, aby plugin wiedział kiedy gracz ma broń, a kiedy nie.
Robimy to w ten sposób, rejestrujemy bibliotekę ggpro dodając pod
#include <amxmodx>to
#include <ggpro>
I tworzymy nową zmienną globalną który przyjmie wartość true, kiedy gracz będzie miał broń, robimy to dodając jakąś tam zmienną nad plugin_init (głupio brzmi ;D)
Moja będzie się nazywała ma_bron, a linijka z dodaniem wygląda tak
new bool:ma_bron[33];
Teraz ustawienie zmiennej na true dla gracza, kiedy on zdobędzie daną broń, w moim przypadku bronią będzie ... "Extra AK47"
public gg_weapon_gived(id, bron[]) if(equal(bron, "Extra AK47")) ma_bron[id] = true;
I ustawienie na false kiedy broń straci
public gg_weapon_taked(id, bron[]) if(equal(bron, "Extra AK47")) ma_bron[id] = false;
Tera operacje kiedy gracz ma broń, u mnie gracz będzie dostawał brak rozrzutu, trzeba dodać do plugin_init
register_forward(FM_PlayerPreThink, "PreThink"); register_forward(FM_UpdateClientData, "UpdateClientData", 1)
I na koniec pluginu to
public PreThink(id) { if(ma_bron[id]) set_pev(id, pev_punchangle, {0.0,0.0,0.0}) } public UpdateClientData(id, sw, cd_handle) { if(ma_bron[id]) set_cd(cd_handle, CD_PunchAngle, {0.0,0.0,0.0}) }
I zarejestrować bibliotekę fakemeta'y
#include <fakemeta>
Teraz jeszcze dawanie jakiejś broni przy spawnie gracza i przy otrzymaniu broni, nie trzeba wyrzucać broni po jej odebraniu gdyż bronie resetowane są tak czy tak.
A więc zamieniamy public gg_weapon_gived na
public gg_weapon_gived(id, bron[]) { if(equal(bron, "Extra AK47")) { ma_bron[id] = true; give_item(id, "weapon_ak47"); //moja broń to ak47 } }
Dodajemy na koniec pluginu
public gg_user_spawned(id) { if(ma_bron[id]) { give_item(id, "weapon_ak47"); } }
I rejestrujemy fun'a dodając pod
#include <ggpro>to
#include <fun>
I nowa broń gotowa, w moim przypadku dostanie on ak47 i brak rozrzutu. Oczywiście trzeba dodać broń "Extra AK47" do listy w gg_weapons.
Gotowiec
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <fakemeta> #include <ggpro> #include <fun> #define PLUGIN "GG Weapon: Extra AK47" #define VERSION "1.0" #define AUTHOR "d0naciak" new bool:ma_bron[33]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_forward(FM_PlayerPreThink, "PreThink"); register_forward(FM_UpdateClientData, "UpdateClientData", 1) } public gg_weapon_gived(id, bron[]) { if(equal(bron, "Extra AK47")) { ma_bron[id] = true; give_item(id, "weapon_ak47"); //moja broń to ak47 } } public gg_weapon_taked(id, bron[]) if(equal(bron, "Extra AK47")) ma_bron[id] = false; public gg_user_spawned(id) { if(ma_bron[id]) { give_item(id, "weapon_ak47"); } } public PreThink(id) { if(ma_bron[id]) set_pev(id, pev_punchangle, {0.0,0.0,0.0}) } public UpdateClientData(id, sw, cd_handle) { if(ma_bron[id]) set_cd(cd_handle, CD_PunchAngle, {0.0,0.0,0.0}) }