Freeze time

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
User avatar
Giltinas
Jau po truputį tampa savu
Posts: 149
Joined: 2012 Jan 03 21:38
Skype: edgaras9512
Location: Šilutė

Re: Freeze time

Post 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);} 
Image

User avatar
MPD
Gana aktyvus vartotojas
Posts: 309
Joined: 2011 Jul 08 07:24
Location: Kaunas

Re: Freeze time

Post 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.
Image

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Freeze time

Post 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.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Freeze time

Post 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?
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

Tetusis

Re: Freeze time

Post 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")

faqub
Ar galit patikėti? Jis jau parašė 20 žinučių
Posts: 27
Joined: 2013 Feb 05 17:15

Re: Freeze time

Post by faqub »

Viskas veikia dėkui. duodu karma
Image

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Freeze time

Post 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.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Post Reply

Who is online

Users browsing this forum: Amazon [Bot] and 1 guest