Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Team SemiClip (nieoficjalny) - optymalizacja kodu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
1 odpowiedź w tym temacie

#1 Lacostii

    Profesjonalista

  • Użytkownik

Reputacja: 40
Pomocny

  • Postów:172
  • Lokalizacja:Poland
Offline

Napisano 14.11.2013 00:04

Witam, mam taki kod do przechodzenia przez swoich graczy zaczerpnięty stąd: http://amxx.pl/topic...ory-w-semiclip/ (upload DarkGL'a) Przy pełnym serwerze (23) zwiększa on nawet obciążenie CPU serwera o ~10% (wersja, w której przenikanie było aktywne nieustannie). Kod jest dla mnie trochę niejasny, bo słabo znam działanie modułu fakemeta, dlatego trudno mi tu edytować i zachować sprawność pluginu. Widzicie tu jakieś możliwości edycji tak by plugin oszczędzał bardziej serwer?

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

const Float:DYSTANS = 100.0
new Druzyna[25];
new Gracze;
new bool:przenik;
new bool:Solidny[25];
new bool:Duch[25];

public plugin_init(){
    register_plugin( "semiclip", "1.0", "diablix" );
    register_forward( FM_AddToFullPack, "fwdFullPack", 1 );
    register_logevent("round_start",2,"1=Round_Start");
    Gracze = get_maxplayers();
}

public client_disconnect(id)
    Druzyna[id] = 0;

public round_start()
    set_task(0.7, "przenikanieON")

public przenikanieON(){
    przenik = true;
    set_task(10.0, "przenikanieOFF")
}

public przenikanieOFF()
    przenik = false;

public client_PreThink(id){
    if(!przenik)
        return FMRES_IGNORED;
        
    static Think, i;
    
    if(Think > id){
        for( i = 1; i <= Gracze; i++ ){
            if( !is_user_alive(i) ){
                Solidny[ i ] = false;
                continue;
            }
            Druzyna[i] = _:get_user_team( i );
            Solidny[i] = entity_get_int( i, EV_INT_solid ) == SOLID_SLIDEBOX ? true : false;
        }
    }
    
    Think = id;
    
    if(!Solidny[id])
        return FMRES_IGNORED;
    
    for(i = 1; i <= Gracze; i++ )
    {
        if(!is_user_alive(i) || !Solidny[i] || Duch[i] || id == i || entity_range(id, i) > DYSTANS)
            continue;
        
        if(Druzyna[i] == Druzyna[id]){
            Duch[i] = true;
            entity_set_int(i, EV_INT_solid, SOLID_NOT);
        }
    }
    
    return FMRES_IGNORED;
}

public client_PostThink(id){
    if(przenik){
        static i;
        for(i = 1; i <= Gracze; i++){
            if(Duch[i] && is_user_alive(i)){
                Duch[i] = false;
                entity_set_int(i, EV_INT_solid, SOLID_SLIDEBOX );
            }
        }
    }
}

public fwdFullPack(iHandle, e, iEntity, id, iFlags, iPlayer, pSet){    
    if(!przenik || !iPlayer || id == iEntity || !is_user_alive(id) || !is_user_alive(iEntity))
        return FMRES_IGNORED;
    
    if( Solidny[id] && Solidny[iEntity] && Druzyna[id] == Druzyna[iEntity])
    {
        static Float:fDystans;
        fDystans = entity_range(id, iEntity);
        
        if( fDystans < DYSTANS)
        {
            set_es(iHandle, ES_Solid, SOLID_NOT );
            set_es(iHandle, ES_RenderMode, kRenderTransAlpha );
            set_es(iHandle, ES_RenderAmt, floatround( fDystans * 3));
        }
    }
    
    return FMRES_IGNORED;    
}

Przy okazji zapytam, bo mam wątpliwości w tej sprawie:

new bool:przenik, Solidny[25], Duch[25];

Czy teraz wszystkie 3 zmienne/tablice będą bool'owskie czy tylko "przenik" ?


  • +
  • -
  • 0

Zapraszam na forum Classic-Zone.pl . ;)


#2 ^Grzyboo

    Wszechobecny

  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 14.11.2013 16:17

Co do drugiego to tylko przenik


  • +
  • -
  • 1




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych