[ROZWIĄZANE] Kilka pytań odnośnie tower de...
ExTaza?!
09.02.2015
Z racji tego, ze przejąłem mod Tower Defense mam do was kilka pytań.
0. Lepszy engine czy fakemeta w zarządzaniu entami ?
1. Lepsze jest tworzenie entow przy plugin_precache a potem edytowanie ich właściwości, czy tak jak jest teraz czyli tworzenie, usuwanie, tworzenie, usuwanie..
2. Jak najlepiej nadać niewidzialność entowi ? set_rendering, set_ent_rendering czy set_entity_visiblity ?
3.
public fwAddToFullPack(es_handle, e, ENT, HOST, hostflags, player, set) { if(player || !is_user_connected(HOST) || !is_user_alive(HOST) || !is_valid_ent(ENT)) return FMRES_IGNORED; if(td_is_ranger(ENT) && entity_get_int(ENT, EV_INT_ranger_status)) { if(entity_get_edict(ENT, EV_ENT_turret_owner) == HOST) { set_es(es_handle, ES_RenderMode, kRenderTransAdd) set_es(es_handle, ES_RenderAmt, 255) } else { set_es(es_handle, ES_RenderMode, kRenderTransAdd) set_es(es_handle, ES_RenderAmt, 0) } } else if(td_is_ammobar(ENT)) { for(new i ; i < MAX_PLAYER_TURRET ; i++) { if(is_valid_ent( entity_get_edict(gPlayerTurretEnt[HOST][i], EV_ENT_turret_ammobar))) entity_set_float( entity_get_edict(gPlayerTurretEnt[HOST][i], EV_ENT_turret_ammobar), EV_FL_scale, gfPlayerAmmoBarScale[HOST]) } if(gCvarValue[TURRET_SHOW_AMMO_BAR] == 1) { if(entity_get_edict(ENT, EV_ENT_turret_owner) == HOST) { set_es(es_handle, ES_RenderMode, kRenderTransTexture) set_es(es_handle, ES_RenderAmt, 255) } else { set_es(es_handle, ES_RenderMode, kRenderTransTexture) set_es(es_handle, ES_RenderAmt, 0) } } } return FMRES_IGNORED; }
Ranger oraz ammo bar widzi każdy.. Dlaczego ? (ranger_status daje 1 jeśli ranger ma być widoczny dla WŁAŚCICIELA, 0 jeśli nie)
Użytkownik GwynBleidD edytował ten post 09.02.2015 23:25
sebul
16.02.2015
1. To zależy jak często jakiś ent jest potrzebny, no i ogólnie do czego.
2. Ja tam zawsze używam "set_rendering".
3. Teraz tego nie ogarnę, późno i nie chce mi się.
ExTaza?!
16.02.2015
0. Mam takie samo zdanie, tylko myślałem, że są "inne" rozwiązania
1. Co Wave(aktualnie) są tworzone nowe enty z nowymi potworami, jeśli ich hp <= 0 wtedy jest odgrywana animacja śmierci i w zależności od czasu usuwa enta potowra. Bardzo podobnie jest z ich healthbarami, tylko one są usuwane zaraz po hp<= 0.
2. Dzięki
3. Powiedzmy, że "próbowaliśmy"(mrG) coś zdziałać, dla testów ustawiłem wypisywanie zmiennych, i wszystko wchodzi(wszystkie zmienne) są poprawne, czyli jeżeli jest właścicielem, to wchodzi do tego ifa, jednak tak jakby set_es nie działało. Jeśli może to zmienić dalszy przebieg: Używam najnowszej wersji 1.8.3dev. (build nr... jakiś tam, aktualizuje na bieżąco). Pan G podsunął mi pomysł ze zwracanymi wartościami, FMRES_IGNORED, FMRES_OVVERIDE....
I tutaj jest bez sens.
- Jeśli ustawie w każdym z tych RenderAmt na 0 (czyli nie powinno pokazywać wogóle) to pokazje każdemu.
--- Jeśli ustawie w każdym z tych RenderAmt na 0 oraz zwrócę FMRES_OVERRIDE to nie pokaże ŻADNEGO ENTU, tak jakby wszystko było nie widzialne. (Przy FMRES_IGNORED pokazuje kazdemu)
- Jeśli jest tak jak teraz w kodzie, to pokazuje każdemu.
--- JEśli jestt tak jak teraz i zwrócę FMRES_OVERRIDE to nie pokazuje ŻADNEGO ENTu, tak jakby wszystko było nei widzialne. (Przy FMRES_IGNORED pokazuje każdemu).
Użytkownik ExTaza?! edytował ten post 16.02.2015 21:47
GwynBleidD
17.02.2015
ExTaza?!
18.02.2015
3.
public fwAddToFullPack(es_handle, e, ENT, HOST, hostflags, player, set) { if(player || !is_user_connected(HOST) || !is_user_alive(HOST) || !is_valid_ent(ENT)) return FMRES_IGNORED; if(td_is_ranger(ENT) && entity_get_int(ENT, EV_INT_ranger_status)) { set_es(es_handle, ES_RenderMode, kRenderTransAdd) set_es(es_handle, ES_RenderFx, kRenderFxNone) if(entity_get_edict(ENT, EV_ENT_turret_owner) == HOST) { return FMRES_IGNORED; } else { set_es(es_handle, ES_RenderAmt, 0) return FMRES_OVERRIDE } } else if(td_is_ammobar(ENT)) { for(new i ; i < MAX_PLAYER_TURRET ; i++) { if(is_valid_ent( entity_get_edict(gPlayerTurretEnt[HOST][i], EV_ENT_turret_ammobar))) entity_set_float( entity_get_edict(gPlayerTurretEnt[HOST][i], EV_ENT_turret_ammobar), EV_FL_scale, gfPlayerAmmoBarScale[HOST]) } if(gCvarValue[TURRET_SHOW_AMMO_BAR] == 1) { set_es(es_handle, ES_RenderMode, kRenderTransTexture) set_es(es_handle, ES_RenderFx, kRenderFxNone) if(entity_get_edict(ENT, EV_ENT_turret_owner) == HOST) { return FMRES_IGNORED } else { set_es(es_handle, ES_RenderAmt, 0) return FMRES_OVERRIDE } } } return FMRES_IGNORED; }
I działa tak jak dawniej.. co ciekawe wcześniej teGo nie używałem (tych reTurnów) i działało poprawnie.... może coś usprawnili w 1.8.3 ? :0
Dzięki Sebul za pomoc, oraz GwynBleidD.
Można zamknąć
sebul
18.02.2015
if(coś tam) return coś tam else return coś tamSkoro po spełnieniu warunku jest return, to nie trzeba używać "else".
GwynBleidD
19.02.2015
radim
21.02.2015
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