Page 2 of 2

Re: Freeze time

Posted: 2013 Feb 06 11:11
by Giltinas
Turėtu veikti.

Code: Select all

#include <amxmodx>#include <engine>#include <hamsandwich> public plugin_init(){    RegisterHam(Ham_Spawn, "player", "bacon_spawn", 1)} public bacon_spawn(id){    if(!is_user_alive(id))        return PLUGIN_HANDLED;        if(get_user_team(id) == 1)    {        set_task(40.0, "OnTerroristFreeze");        }     return PLUGIN_CONTINUE;} public OnTerroristFreeze(){    new players[32], playerCount;    get_players(players, playerCount, "aceh", "TERRORIST");        if (!playerCount)        return;        for (new i; i < playerCount; i++)        set_entity_flags(players[i], FL_FROZEN, true);} 

Re: Freeze time

Posted: 2013 Feb 06 11:19
by MPD
Vietoj Ham_Spawn siūlyčiau HLTV event, nes tokiu atveju visus vienu metu užšaldys, o ne kada atsispawnins. Būna gi, kad vėliau prisijungęs žaidėjas keliom (ar daugiau) sec vėliau atsispawnina.

Re: Freeze time

Posted: 2013 Feb 06 12:37
by aaarnas
MPD wrote:Vietoj Ham_Spawn siūlyčiau HLTV event, nes tokiu atveju visus vienu metu užšaldys, o ne kada atsispawnins. Būna gi, kad vėliau prisijungęs žaidėjas keliom (ar daugiau) sec vėliau atsispawnina.
Pasakei dalį tiesos ir melo.
Viena, tai kai iškviečiamas HLTV eventas, tai žaidėjai dar nebūna prisikėlę. Tam reikia tada daryti task su 0.1s uždelsimu ir tada daryti norimus veiksmus.
Tiesa, kad šiuo metodu tada laikas visiems bus nevienodas. Jei kas vėliau kiek atėjo į serverį, tai vėliau ir gaus freeze.

Dar didžiulė nesąmonė šiuo atveju, kad task kviečiamas konkretaus žaidėjo spawn funkcijoje. Taip sukuriama daug lygiai tokių pačių task, kurie daro tą patį. Ta freeze funkcija galioja visiems žaidėjams, o ne individualiai.

Teisingas kodas būtų:

Code: Select all

public plugin_init(){    register_logevent("logevent_round_start",2, "1=Round_Start")} public logevent_round_start()     set_task(40.0, "OnTerroristFreeze");    } public OnTerroristFreeze(){    new players[32], playerCount;    get_players(players, playerCount, "aceh", "TERRORIST");        if (!playerCount)        return;        for (new i; i < playerCount; i++)        set_entity_flags(players[i], FL_FROZEN, true);}
logevent_round_start() čia yra laikas po freezetime pabaigos. Tikrojo raundo pradžia.

Re: Freeze time

Posted: 2013 Feb 06 16:17
by hleV
aaarnas wrote: Viena, tai kai iškviečiamas HLTV eventas, tai žaidėjai dar nebūna prisikėlę.
Jei uždėsi FL_FROZEN flag'ą prieš žaidėjui spawn'inant, tai po spawn'o tas flag'as nusiims?

Re: Freeze time

Posted: 2013 Feb 06 16:25
by Tetusis
aaarnas wrote:
MPD wrote:Vietoj Ham_Spawn siūlyčiau HLTV event, nes tokiu atveju visus vienu metu užšaldys, o ne kada atsispawnins. Būna gi, kad vėliau prisijungęs žaidėjas keliom (ar daugiau) sec vėliau atsispawnina.
Pasakei dalį tiesos ir melo.
Viena, tai kai iškviečiamas HLTV eventas, tai žaidėjai dar nebūna prisikėlę. Tam reikia tada daryti task su 0.1s uždelsimu ir tada daryti norimus veiksmus.
Tiesa, kad šiuo metodu tada laikas visiems bus nevienodas. Jei kas vėliau kiek atėjo į serverį, tai vėliau ir gaus freeze.

Dar didžiulė nesąmonė šiuo atveju, kad task kviečiamas konkretaus žaidėjo spawn funkcijoje. Taip sukuriama daug lygiai tokių pačių task, kurie daro tą patį. Ta freeze funkcija galioja visiems žaidėjams, o ne individualiai.

Teisingas kodas būtų:

Code: Select all

public plugin_init(){    register_logevent("logevent_round_start",2, "1=Round_Start")} public logevent_round_start()     set_task(40.0, "OnTerroristFreeze");    } public OnTerroristFreeze(){    new players[32], playerCount;    get_players(players, playerCount, "aceh", "TERRORIST");        if (!playerCount)        return;        for (new i; i < playerCount; i++)        set_entity_flags(players[i], FL_FROZEN, true);}
logevent_round_start() čia yra laikas po freezetime pabaigos. Tikrojo raundo pradžia.
hltv event'as skirtas daugiau statistikai ar kazkokiam skaiciavimui kaip ir minejo arnas zaideju dar tada nebuna, ham spawn yra individualus event'as kurio nereiketu naudoti jei nori sustabdyti kiekviena giltinas pievas raso.


stai pataisyta.

Code: Select all

register_logevent("logevent_round_start",2, "1=Round_Start")
>>>>>>>>>>>>

Code: Select all

register_logevent("logevent_round_start", 2, "1=Round_Start", "0=World triggered")

Re: Freeze time

Posted: 2013 Feb 06 17:11
by faqub
Viskas veikia dėkui. duodu karma

Re: Freeze time

Posted: 2013 Feb 06 19:25
by aaarnas
hleV wrote:
aaarnas wrote: Viena, tai kai iškviečiamas HLTV eventas, tai žaidėjai dar nebūna prisikėlę.
Jei uždėsi FL_FROZEN flag'ą prieš žaidėjui spawn'inant, tai po spawn'o tas flag'as nusiims?
Šito nežinau. Reikia SDK žiūrėti arba mėginti, dėl to geriau visada daryti užtikrintai.