Page 2 of 2

Re: String gavimas

Posted: 2011 May 11 21:25
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.

Re: String gavimas

Posted: 2011 May 11 21:37
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), ' ')

Re: String gavimas

Posted: 2011 May 12 15:01
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.

Re: String gavimas

Posted: 2011 May 12 17:14
by addinol
kaip jei su tarpais ? Nes !kickaddinol5uzkodinimaircheatinima man netinka ;//

-- 2011 Geg 12 18:15 --

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

Re: String gavimas

Posted: 2011 May 12 17:29
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ų).

Re: String gavimas

Posted: 2011 May 12 18:55
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.

Re: String gavimas

Posted: 2011 May 13 12:46
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ų ? :)