String gavimas

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: String gavimas

Post by newb »

strtok dalina stringa i kaire ir i desne nuo pirmo tarpo (nebutinai tarpo), tai pirma dalini i viena name i kita time su reason, o veliau time ir reason atskiri.

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: String gavimas

Post by addinol »

nesupratau ;/

tipo

1. Target Time
2. Time Reason

Code: Select all

strtok(arg, target, charsmax(target), bantime, charsmax(bantime), ' ')strtok(arg, bantime, charsmax(bantime), reason, charsmax(reason), ' ')

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

Re: String gavimas

Post by aaarnas »

Code: Select all

/* Plugin generated by AMXX-Studio */ #include <amxmodx>#include <amxmisc> #define PLUGIN "Plugin"#define VERSION "1.0"#define AUTHOR "aaarnas"  public plugin_init() {    register_plugin(PLUGIN, VERSION, AUTHOR)        register_clcmd("say", "clmds")} public clmds(id) {        static text[250]    read_args(text, charsmax(text))    remove_quotes(text)        if(text[0] != '!') return PLUGIN_CONTINUE;        new lenght = strlen(text)    new param, slot, i    new cmd[48], nick[40], ttime[10], reason[128]    for(i=0; i<lenght; i++) {                if(!text[i]) break;                if(text[i] == ' ') { param++; slot = i+1; continue;}                switch(param) {            case 0: {                if(i>charsmax(cmd)) return PLUGIN_HANDLED;                cmd[i] = text[i]                cmd[i+1] = 0            }            case 1: {                if(i-slot>charsmax(nick)) return PLUGIN_HANDLED;                nick[i-slot] = text[i]                nick[i-slot+1] = 0            }            case 2: {                if(i-slot>charsmax(ttime)) return PLUGIN_HANDLED;                ttime[i-slot] = text[i]                ttime[i-slot+1] = 0            }            case 3: break;        }    }    copy(reason, charsmax(reason), text[i])    /*client_print(id, print_console, cmd)    client_print(id, print_console, nick)    client_print(id, print_console, ttime)    client_print(id, print_console, reason)*/        return PLUGIN_HANDLED;}
Veikia puikiai, į modulį kreipiasi tik 4 kartus. Žinoma komandą, nick ir laiką reikės rašyti be tarpų, kitaip per chat neapsimoka daryti tada.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: String gavimas

Post by addinol »

kaip jei su tarpais ? Nes !kickaddinol5uzkodinimaircheatinima man netinka ;//

-- 2011 Geg 12 18:15 --

kaip jei su tarpais ? Nes !kickaddinol5uzkodinimaircheatinima man netinka ;//

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

Re: String gavimas

Post by hleV »

Ta prasme "!kick" negali turėt tarpų ir "nick" negali. Jei žaidėjo nick'as bus "a b c", tai nelabai jį išspirsi pagal nick'ą, pagal user ID nebent.
Aš tai siūlyčiau naudot parse() ir viską, kas turi tarpus (nick'ą ar priežastį), rašyt kabutėse, kaip tai daroma konsolės komandomis. Arba naudot anksčiau pateiktus metodus (nick'ui su tarpais vistiek reiks kabučių).
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

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

Re: String gavimas

Post by aaarnas »

hleV panašiai ir pasakė.

Ar su parse, ar su mano būdu, vis tiek negalėsi niko parašyti, jei jis susidės iš daugiau nei vieno žodžio.
Ta prasme:

!kick Asta La Vista 160 laminimas
Tada bus gauta taip:
cmd: !kick
Nick: Asta
Laikas: La
Reason: Vista 160 laminimas

Paprastai užtenka ir vieno žodžio iš niko, bet kaip hleV minėjo, jei žaidėjo nikas koks a b c, ar iš viso kokia viena raidė, tai su cmd_target tu niekaip neaptiksi to žaidėjo.
Tad jei labai reikia, galima padaryti, kad reaguotų į kabutes, bet neapsimoka, nes su konsolės komanda būtų žymiai paprasčiau tada.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: String gavimas

Post by addinol »

ok o kaip su šituo padaryti daug komandų, ta prasme bus pas mane, slay, kick, ban ir dar pora, kiekvienas turės skirtingus parametrus.

!kick player reason
!ban player time reason
!slay player reason
!mute player time reason

ir t.t.

-- 2011 Geg 13 21:54 --

Code: Select all

static arg[60]    read_argv(1, arg, charsmax(arg))        if(arg[0] != '!')        return PLUGIN_CONTINUE;        if(equal(arg, "!mute", 5))    {        new target[20], mutetime[7], reason[40]                   replace(arg, charsmax(arg), "!mute ", "")                strbreak ( arg, target, sizeof target-1, mutetime, sizeof mutetime-1 )                replace(arg, charsmax(arg), target, "")        replace(arg, charsmax(arg), mutetime, "")                copy(reason, charsmax(reason), arg)                client_print(id, print_console, "^nTarget: %s", target)        client_print(id, print_console, "Time: %d", mutetime)        client_print(id, print_console, "Reason: %s", reason)                return PLUGIN_HANDLED_MAIN;    }    return PLUGIN_CONTINUE;
O jei naudočiau kažką panašaus į tai ? ar veiktų ? :)

Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot], Bing [Bot] and 4 guests