[ROZWIĄZANE] Zmienienie modelu w_ dla gran...
Najlepsza odpowiedź K@MILOVVSKY 08.08.2018 19:46
Przepraszam bardzo za kolejny post pod sobą i dlatego uprzejmię proszę moderatora o połączenie moich postów.
Znalazłem w końcu rozwiązanie. Testowałem to pod (chyba) każdym możliwym względem i każdy test kończył się pozytywnie, dlatego śmiało mogę rzec, że działa jak natura chciała.
Zmieniłem
if(equali(model, OLDWORLD_MODEL1) < 0) return FMRES_IGNORED;
na
if(!equali(model, OLDWORLD_MODEL1)) if(!equali(model, OLDWORLD_MODEL2)) if(!equali(model, OLDWORLD_MODEL3)) return FMRES_IGNORED;
a dwa ostatnie returny zamieniłem tak, aby zwracały FMRES_SUPERCEDE, no i działa!
Temat uważam za wyczerpany.
Przejdź do postu
K@MILOVVSKY
07.08.2018
Witam. Posiadam CSGO Mod'a i chciałbym, aby modele lecących już granatów (w_x.mdl, gdzie x = nazwa granatu) były zmienione na te z CS:GO.
Więc znalazłem odpowiednie modele, teraz czas jakoś je podmienić. Na amxx nic nie znalazłem, natomiast na allied'ach już tak: https://forums.allie...ad.php?t=104582
Podano tam niżej taki kod:
#include <amxmodx> #include <engine> #include <fakemeta> new WORLD_MODEL[] = "models/Hello-Kitty/w_kittys_c4.mdl" new OLDWORLD_MODEL[] = "models/w_c4.mdl" public plugin_init() { register_plugin("22323", "2323", "2323") register_forward(FM_SetModel, "fw_SetModel") } public plugin_precache() { precache_model(WORLD_MODEL) } public fw_SetModel(entity, model[]) { if(!is_valid_ent(entity)) return FMRES_IGNORED if(!equali(model, OLDWORLD_MODEL)) return FMRES_IGNORED new className[33] entity_get_string(entity, EV_SZ_classname, className, 32) if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade")) { entity_set_model(entity, WORLD_MODEL) return FMRES_SUPERCEDE } return FMRES_IGNORED }
Postanowiłem potestować dla jednego granata (HE). Zrobiłem co trzeba, wchodzę, rzucam i okazuje się, że działa. Więc postanowiłem zrobić tak dla pozostałych 2 granatów.
Zgrzebałem taki kodzik:
#include <amxmodx> #include <engine> #include <fakemeta> new WORLD_MODEL1[] = "models/xxx/xxx/w_xxx.mdl" new WORLD_MODEL2[] = "models/xxx/xxx/w_xxx.mdl" new WORLD_MODEL3[] = "models/xxx/xxx/w_xxx.mdl" new OLDWORLD_MODEL1[] = "models/w_xxx.mdl" new OLDWORLD_MODEL2[] = "models/w_xxx.mdl" new OLDWORLD_MODEL3[] = "models/w_xxx.mdl" public plugin_init() { register_plugin("22323", "2323", "2323") register_forward(FM_SetModel, "fw_SetModel") } public plugin_precache() { precache_model(WORLD_MODEL1) precache_model(WORLD_MODEL2) precache_model(WORLD_MODEL3) } public fw_SetModel(entity, model[]) { if(!is_valid_ent(entity)) return FMRES_IGNORED if(!equali(model, OLDWORLD_MODEL1)) if(!equali(model, OLDWORLD_MODEL2)) if(!equali(model, OLDWORLD_MODEL3)) return FMRES_IGNORED new className[33] entity_get_string(entity, EV_SZ_classname, className, 32) if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade")) { entity_set_model(entity, WORLD_MODEL1) entity_set_model(entity, WORLD_MODEL2) entity_set_model(entity, WORLD_MODEL3) return FMRES_SUPERCEDE } return FMRES_IGNORED }
No i podmienia, ale na jeden - ostatni (w tym przypadku smoke). Czyli nawet jak rzucam he, fb to pokazuje się model smoke'a.
Pokminiłem trochę i pomyślałem, że przecież w ostatnim if'ie musi być warunek, dla jakiej broni co ma podmieniać.
Zrobiłem coś takiego:
if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade")) { if(get_user_weapon(entity) == CSW_HEGRENADE) { entity_set_model(entity, WORLD_MODEL1) } if(get_user_weapon(entity) == CSW_FLASHBANG) { entity_set_model(entity, WORLD_MODEL2) } if(get_user_weapon(entity) == CSW_SMOKEGRENADE) { entity_set_model(entity, WORLD_MODEL3) } return FMRES_SUPERCEDE }
Ale w ogóle nie podmienia modeli w_.
W jaki sposób mogę uzyskać pożądany efekt?
Użytkownik K@MILOVVSKY edytował ten post 07.08.2018 18:13
Robiin
07.08.2018
Have fun
Załączone pliki
Użytkownik aSiorr edytował ten post 07.08.2018 18:19
K@MILOVVSKY
07.08.2018
Dobra, zrobiłem coś takiego:
#include <amxmodx> #include <fun> #include <cstrike> #include <fakemeta_util> #include <hamsandwich> #define PLUGIN "Podmiana granatow w locie" #define VERSION "1.0.0" #define AUTHOR "Cypis & K@MILOVVSKY" public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_forward(FM_SetModel, "fwSetModelGrenade") } public plugin_precache() { precache_model("models/csgo/granaty/w_hegrenade.mdl"); precache_model("models/csgo/granaty/w_flashbang.mdl"); precache_model("models/csgo/granaty/w_smokegrenade.mdl"); } public fwSetModelGrenade(ent, const model[]) { if(!equal(model,"models/w_hegrenade.mdl")) { //return HAM_IGNORED; fm_entity_set_model(ent, "models/csgo/granaty/w_hegrenade.mdl"); } else if(!equal(model,"models/w_flashbang.mdl")) { //return HAM_HANDLED; fm_entity_set_model(ent, "models/csgo/granaty/w_flashbang.mdl"); } else if(!equal(model,"models/w_smokegrenade.mdl")) { //return HAM_HANDLED; fm_entity_set_model(ent, "models/csgo/granaty/w_smokegrenade.mdl"); } return HAM_SUPERCEDE; }
Jednak jest tak:
rzucam HE - pokazuje model FB,
rzucam FB - pokazuje model HE,
rzucam SG - pokazuje model HE.
K@MILOVVSKY
08.08.2018
Niestety nie pomaga.
Jeśli usunę "!" tylko w pierwszym if'ie to he jest ok, fb zamienia na sg, sg zamienia na fb oraz model podczas śmierci się freezuje i wypada z niego granat (fb z moim modelem w_):
Jeśli usunę "!" w dwóch pierwszych model freezuje się w jakiejś ścianie:
Jeśli usunę we wszystkich 3 to w ogóle nie podmienia.
Dziwna sprawa. Może temu pluginowi brak jakiejś funkcji? Ktoś ma może pomysł na naprawę lub inny plugin?
Użytkownik K@MILOVVSKY edytował ten post 08.08.2018 13:38
K@MILOVVSKY
08.08.2018
Nie mogę edytować postu up.
Udało mi się zrobić takowy plugin. Kod dla innych:
#include <amxmodx> #include <engine> #include <fakemeta> new WORLD_MODEL1[] = "models/csgo/granaty/w_hegrenade.mdl" new WORLD_MODEL2[] = "models/csgo/granaty/w_flashbang.mdl" new WORLD_MODEL3[] = "models/csgo/granaty/w_smokegrenade.mdl" new OLDWORLD_MODEL1[] = "models/w_hegrenade.mdl" new OLDWORLD_MODEL2[] = "models/w_flashbang.mdl" new OLDWORLD_MODEL3[] = "models/w_smokegrenade.mdl" public plugin_init() { register_plugin("22323", "2323", "2323") register_forward(FM_SetModel, "fw_SetModelH") register_forward(FM_SetModel, "fw_SetModelF") register_forward(FM_SetModel, "fw_SetModelS") } public plugin_precache() { precache_model(WORLD_MODEL1) precache_model(WORLD_MODEL2) precache_model(WORLD_MODEL3) } public fw_SetModelH(entity, model[]) { if(!is_valid_ent(entity)) return FMRES_IGNORED if(!equali(model, OLDWORLD_MODEL1)) return FMRES_IGNORED new className[33] entity_get_string(entity, EV_SZ_classname, className, 32) if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade")) { entity_set_model(entity, WORLD_MODEL1) return FMRES_SUPERCEDE } return FMRES_IGNORED } public fw_SetModelF(entity, model[]) { if(!is_valid_ent(entity)) return FMRES_IGNORED if(!equali(model, OLDWORLD_MODEL2)) return FMRES_IGNORED new className[33] entity_get_string(entity, EV_SZ_classname, className, 32) if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade")) { entity_set_model(entity, WORLD_MODEL2) return FMRES_SUPERCEDE } return FMRES_IGNORED } public fw_SetModelS(entity, model[]) { if(!is_valid_ent(entity)) return FMRES_IGNORED if(!equali(model, OLDWORLD_MODEL3)) return FMRES_IGNORED new className[33] entity_get_string(entity, EV_SZ_classname, className, 32) if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade")) { entity_set_model(entity, WORLD_MODEL3) return FMRES_SUPERCEDE } return FMRES_IGNORED }
Zrobiłem po prostu 3 forwardy zmieniając ich nazwy dla każdego z granatów, ale jak widać tego samego typu. Stąd moje pytanie: czy jest to optymalne?
K@MILOVVSKY
08.08.2018
Nie mogłem wczoraj, ale here:
Spoiler
Dziękuję bardzo, taki zapis z pewnością jest lepszy.
Można close.
K@MILOVVSKY
08.08.2018
Jednak nie jest git, po wyrzuceniu jakiejkolwiek broni na ziemię jej model znika (aczkolwiek da się ją podnieść, ale jej nie widać).
Robiin
08.08.2018
return FMRES_SUPERCEDE; }
na
return FMRES_IGNORED; }
na linii 41. bo sprawdzane są modele granatów - jeśli aktualna bron to granat to zamienia model na odpoweidni granat, jeśli nie to FMRES_SUPERCEDE, czyli blokuje wykonanie funkcji, czyli tym samym blokuje ustawienie domyślnego modelu.
K@MILOVVSKY
08.08.2018
Znów pojawia się model leżących broni, ale nie zmienia modeli granatów.
Najlepsza odpowiedź
K@MILOVVSKY
08.08.2018
Przepraszam bardzo za kolejny post pod sobą i dlatego uprzejmię proszę moderatora o połączenie moich postów.
Znalazłem w końcu rozwiązanie. Testowałem to pod (chyba) każdym możliwym względem i każdy test kończył się pozytywnie, dlatego śmiało mogę rzec, że działa jak natura chciała.
Zmieniłem
if(equali(model, OLDWORLD_MODEL1) < 0) return FMRES_IGNORED;
na
if(!equali(model, OLDWORLD_MODEL1)) if(!equali(model, OLDWORLD_MODEL2)) if(!equali(model, OLDWORLD_MODEL3)) return FMRES_IGNORED;
a dwa ostatnie returny zamieniłem tak, aby zwracały FMRES_SUPERCEDE, no i działa!
Temat uważam za wyczerpany.
DarkGL
08.08.2018
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL