←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Kilka pytań odnośnie tower de...

Zablokowany

  • +
  • -
ExTaza?! - zdjęcie ExTaza?! 09.02.2015

Cześć!
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
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 16.02.2015

0. Na to odpowiedzi nie znajdziesz, co najwyżej opinie zwolenników enginu lub fakemety. Różnice jakieś niby są, ale bardzo mało znaczące. Od siebie dodam, że sam stosuję taką zasadę, że jeśli mogę coś zrobić bez korzystania z fakemety, to robię to w engine, a jeśli chociaż jedna rzecz jest mi potrzebna z fakemety, to korzystam z fakemety, czyli z jednej strony staram się używać tylko engine, ale z drugiej strony, robię tak, żeby nie używać dwóch na raz.
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ę.
Odpowiedz

  • +
  • -
ExTaza?! - zdjęcie 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
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 17.02.2015

ad 3. to nie możesz zwracać odpowiedniej wartości w zależności od tego kto ma widzieć, a kto nie? Szkoda nadpisywać set_es dla ownera, skoro te którymi nadpisujesz robią to samo co domyślne.
Odpowiedz

  • +
  • -
ExTaza?! - zdjęcie 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ąć :)

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 18.02.2015

Taka jedna uwaga. Nie widzę sensu w pisaniu takich warunków
if(coś tam) return coś tam
else return coś tam
Skoro po spełnieniu warunku jest return, to nie trzeba używać "else".
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 19.02.2015

Jeśli nie zmieniasz niewidzialności, nie powinieneś WCALE nic zmieniać. przenieś set_es do odpowiedniego ifa, inaczej będziesz miał problem gdy ktoś użyje wersji amxx, metamoda czy hlds na której to działało tak jak kiedyś.
Odpowiedz

  • +
  • -
ExTaza?! - zdjęcie ExTaza?! 20.02.2015

@GwynBleiD Tower defense będzie tylko na 1.8.3

Odpowiedz

  • +
  • -
radim - zdjęcie radim 21.02.2015

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany