Naujas round ir t.t.

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
User avatar
zirualas
Gana aktyvus vartotojas
Posts: 216
Joined: 2010 Oct 16 21:33
Skype: zirual
Location: Vilnius
Contact:

Naujas round ir t.t.

Post by zirualas »

Taigi noreciau pklausti kaip padaryti, kad kai prasideda round'as po 10 sec viena zaideja permestu i T?

User avatar
beast
AMX Mod X ekspertai
Posts: 509
Joined: 2011 Jan 08 18:44
Skype: thefurious4
Contact:

Re: Naujas round ir t.t.

Post 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)} 
Last edited by beast on 2011 Jan 20 15:49, edited 1 time in total.

User avatar
zirualas
Gana aktyvus vartotojas
Posts: 216
Joined: 2010 Oct 16 21:33
Skype: zirual
Location: Vilnius
Contact:

Re: Naujas round ir t.t.

Post 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)#     }# }

User avatar
beast
AMX Mod X ekspertai
Posts: 509
Joined: 2011 Jan 08 18:44
Skype: thefurious4
Contact:

Re: Naujas round ir t.t.

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

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: Naujas round ir t.t.

Post 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
Last edited by newb on 2011 Jan 19 22:36, edited 1 time in total.

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

Re: Naujas round ir t.t.

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

User avatar
zirualas
Gana aktyvus vartotojas
Posts: 216
Joined: 2010 Oct 16 21:33
Skype: zirual
Location: Vilnius
Contact:

Re: Naujas round ir t.t.

Post by zirualas »

O jei pavizdziui noriu padaryti kad i T permestu 3 - 4 zaidejus atsitiktinai, tai tureciau deti su random?

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

Re: Naujas round ir t.t.

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

User avatar
beast
AMX Mod X ekspertai
Posts: 509
Joined: 2011 Jan 08 18:44
Skype: thefurious4
Contact:

Re: Naujas round ir t.t.

Post 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:

User avatar
zirualas
Gana aktyvus vartotojas
Posts: 216
Joined: 2010 Oct 16 21:33
Skype: zirual
Location: Vilnius
Contact:

Re: Naujas round ir t.t.

Post 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++        }    }}

Post Reply

Who is online

Users browsing this forum: No registered users and 9 guests