Page 1 of 2

Naujas round ir t.t.

Posted: 2011 Jan 19 17:11
by zirualas
Taigi noreciau pklausti kaip padaryti, kad kai prasideda round'as po 10 sec viena zaideja permestu i T?

Re: Naujas round ir t.t.

Posted: 2011 Jan 19 21:01
by beast
Vieną atsitiktinį permes.

Code: Select all

#include <amxmodx>#include <cstrike> #define TASKID      98413 new g_maxplayers public plugin_init(){    register_event("HLTV", "Event_StartRound", "a", "1=0", "2=0")    register_logevent("logevent_round_end", 2, "1=Round_End")        register_message(get_user_msgid("TextMsg"), "message_TextMsg")        g_maxplayers = get_maxplayers()} public Event_StartRound(){    if(!task_exists(TASKID))        set_task(10.0, "task", TASKID)      } public logevent_round_end()        remove_task(TASKID) public message_TextMsg(msg_id, msg_dest, id){    new buffer[32]        get_msg_arg_string(2, buffer, 31)        if(equal(buffer, "#Game_Commencing")    || equal(buffer, "#Round_Draw")    || containi(buffer, "#Game_will_restart") != -1)            remove_task(TASKID)} public task(){    new Players[32], x, id        for(id = 1; id <= g_maxplayers; id++)    {        if(!is_user_connected(id))            continue                if(cs_get_user_team(id) == CS_TEAM_CT)            Players[x++] = id    }        id = Players[random_num(0, x - 1)]        if(is_user_connected(id))        cs_set_user_team(id, CS_TEAM_T)} 

Re: Naujas round ir t.t.

Posted: 2011 Jan 19 21:22
by zirualas
Aciu, bet noreciau, kad paaskintum sia vieta

Code: Select all

# public message_TextMsg(msg_id, msg_dest, id)# {#     new buffer[32]#    #     get_msg_arg_string(2, buffer, 31)#    #     if(equal(buffer, "#Game_Commencing")#     || equal(buffer, "#Round_Draw")#     || containi(buffer, "#Game_will_restart") != -1)#     {#         if(task_exists(TASKID))#             remove_task(TASKID)#     }# }

Re: Naujas round ir t.t.

Posted: 2011 Jan 19 22:10
by beast
Pašalina task, kai įvyksta game commencing, round draw, round restart, tam, kad kitam raunde nebūtų perkelti du ar daugiau žaidejų į teroristų komandą (nes yra tikimybė, kad mano išvardinti atvejai gali įvykti dar nepraėjus 10 sek. nuo raundo pradžios).

Re: Naujas round ir t.t.

Posted: 2011 Jan 19 22:35
by newb
Yra nereikalingu tikrinimu...

Code: Select all

 public Event_StartRound(){    if(!task_exists(TASKID))        set_task(10.0, "task", TASKID)      } public logevent_round_end(){    if(task_exists(TASKID))        remove_task(TASKID)} 
Kaip gali ant StartRound buti tas taskas jei tu ji pasalini su round end arba su

Code: Select all

 public message_TextMsg(msg_id, msg_dest, id){    new buffer[32]       get_msg_arg_string(2, buffer, 31)       if(equal(buffer, "#Game_Commencing")    || equal(buffer, "#Round_Draw")    || containi(buffer, "#Game_will_restart") != -1)    {        if(task_exists(TASKID))            remove_task(TASKID)    }}
Kur irgi ispirmu otpimaliau tikrint ar yra taskas nei kurt varus ir tikrint 3 stringus is kuriu Round Draw manau niekaip nenutiks per 10 sec...

O sita:

Code: Select all

public task(){    new Players[32], x, id       for(id = 1; id <= g_maxplayers; id++)    {        if(!is_user_connected(id))            continue               if(cs_get_user_team(id) == CS_TEAM_CT)            Players[x++] = id    }       id = Players[random_num(0, x - 1)]       if(is_user_connected(id))        cs_set_user_team(id, CS_TEAM_T)}
Ilgai galvojau kodel cia nenaudojai get_players, bet taip ir nesupratau... Tuo labiau kam 2 kartus tikrint ar useris connected ar manai per ta laika kol sita skaiciuos kas nors spes iseit...

P.S. Megstu kritikuot, nors kartais bunu neteisus :D

Re: Naujas round ir t.t.

Posted: 2011 Jan 19 23:29
by aaarnas
Be to, prieš remove_task nebūtina tikrinti ar task egzistuoja. Jei task nėra, tai remove_task paprasčiausiai gražins 0. Klaidos dėl to neįvyks.

Re: Naujas round ir t.t.

Posted: 2011 Jan 20 14:27
by zirualas
O jei pavizdziui noriu padaryti kad i T permestu 3 - 4 zaidejus atsitiktinai, tai tureciau deti su random?

Re: Naujas round ir t.t.

Posted: 2011 Jan 20 15:21
by aaarnas

Code: Select all

public task(){    new Players[32], x, x2[33], c, id       for(id = 1; id <= g_maxplayers; id++)    {        if(!is_user_connected(id))        continue               if(cs_get_user_team(id) == CS_TEAM_CT)        Players[x++] = id    }       while(c < 4) {                id = Players[random_num(0, x - 1)]        if(!x2[id]) {                    cs_set_user_team(id, CS_TEAM_T)            x2[id] = true            c++        }    }}

Re: Naujas round ir t.t.

Posted: 2011 Jan 20 15:41
by beast
Newb, čia tik fail-safe patikrinimai. Toks jau mano programavimo stilius, geriau patikrinu, nei paskui gaunu errorą. Kiekvienas gali pasiredaguoti pagal savo stilių bei supratimo lygį. Beje dėl to get_players, tai jei gerai pamenu, su "e" flagu ten pasitaiko problemų kažkokiu tai atveju, dėl to nenaudojau.
aaarnas wrote:Be to, prieš remove_task nebūtina tikrinti ar task egzistuoja. Jei task nėra, tai remove_task paprasčiausiai gražins 0. Klaidos dėl to neįvyks.
Šito nežinojau. :liux:

Re: Naujas round ir t.t.

Posted: 2011 Jan 20 17:17
by zirualas
Pasileidziu serveri, ir nieko nevyksta...
Codas:

Code: Select all

#define TASKID  98413 new g_maxplayers public plugin_init(){    register_plugin(PLUGIN, VERSION, AUTHOR)        register_event("HLTV", "Event_StartRound", "a", "1=0", "2=0")    register_logevent("logevent_round_end", 2, "1=Round_End")        register_message(get_user_msgid("TextMsg"), "message_TextMsg")        g_maxplayers = get_maxplayers()} public Event_StartRound(id){    if(!task_exists(TASKID))    client_print(id, print_chat, "BandauuuUuuuuuu!")    set_task(10.0, "Choosing", TASKID)         if(cs_get_user_team(id) == CS_TEAM_T)    {        cs_set_user_team(id, CS_TEAM_CT)    }} public logevent_round_end(id)    remove_task(TASKID) public message_TextMsg(msg_id, msg_dest, id){    new buffer[32]       get_msg_arg_string(2, buffer, 31)     if(equal(buffer, "#Game_Commencing")    || equal(buffer, "#Round_Draw")    || containi(buffer, "#Game_will_restart") != -1)        remove_task(TASKID)} public Choosing(id){    new Players[32], x, x2[33], c, id        client_print(id, print_chat, "BandauuuUuuuuuu!")        for(id = 1; id <= g_maxplayers; id++)    {        if(!is_user_connected(id))        continue                if(cs_get_user_team(id) == CS_TEAM_CT)        Players[x++] = id    }        while(c < 4)     {           id = Players[random_num(0, x - 1)]        if(!x2[id]) {            cs_set_user_team(id, CS_TEAM_T)        x2[id] = true        c++        }    }}