Jump to content
  • 0

Error when unloading and reloading script need '('


Question

Posted (edited)

So as the title says

im getting error with these lines

but when i initiate @reloadscript it works just fine

if (!Class_Mastery) { message strcharinfo(0),"The book does not respond."; end; }
if (!(Class_Mastery & pow(2,.@i)))

and the full script im talking about.

Spoiler
prontera,148,203,4    script    Class Mastery::CMSys    405,{

    set .@n$,"[Class Mastery]";
    mes .@n$;
    mes "How may I assist you?";
    next;
    switch(select(" ~ Purchase a manual: ~ Purchase classes: ~ ^777777Close^000000")) {
        case 1:
            mes .@n$;
            if (!.Mode[3]) {
                mes "It seems like we're out of stock";
                mes "at the moment. My apologies.";
                close; }
            if (countitem(.ManualID)) {
                mes "We only allow one manual per character. Orders, orders...";
                close; }
            mes "Manuals cost ^FF0000"+.Mode[3]+" Zeny^000000.";
            mes "Would you like one?";
            next;
            switch(select(" ~ Sure!: ~ I'll think about it.")) {
                case 1:
                    mes .@n$;
                    if (Zeny < .Mode[3]) {
                        mes "You don't appear to have";
                        mes "enough Zeny... These are very";
                        mes "valuable books, you know?";
                        close; }
                    set Zeny, Zeny-.Mode[3];
                    getitem .ManualID,1;
                    specialeffect2 441;
                    mes "Enjoy!";
                    close;
                case 2:
                    mes .@n$;
                    mes "Okay. Take your time.";
                    close; }
        case 2:
            mes .@n$;
            if (!.Mode[4]) {
                mes "No classes are available for";
                mes "purchase. You'll have to earn";
                mes "them manually, I suppose...";
                close; }
            if (!countitem(.ManualID)) {
                mes "You'll need a manual first!";
                close; }
            mes "Entries cost ^FF0000"+.Mode[4]+" Zeny^000000 each.";
            if (Zeny < .Mode[4]) {
                mes "Go earn some more!";
                close; }
            set .@menu$,"";
            for(set .@i,1; .@i<getarraysize(.JobList); set .@i,.@i+1) {
                if (!(Class_Mastery & pow(2,.@i)))
                    set .@menu$, .@menu$+" ~ "+jobname(.JobList[.@i]);
                set .@menu$, .@menu$+":"; }
            set .@menu$, .@menu$+" ~ ^777777Cancel^000000";
            next;
            set .@i, select(.@menu$);
            if (.@i == getarraysize(.JobList)) close;
            mes .@n$;
            mes "Are you sure you want to purchase an entry for the ^0055FF"+jobname(.JobList[.@i])+" ^000000class?";
            next;
            if(select(" ~ I'm sure.: ~ No, wait...") == 2) {
                mes .@n$;
                mes "That's perfectly fine.";
                mes "Come back whenever you'd like.";
                close; }
            mes .@n$;
            set Zeny, Zeny-.Mode[4];
            set Class_Mastery, Class_Mastery | pow(2,.@i);
            specialeffect2 441;
            mes "There you go, all done!";
            message strcharinfo(0),jobname(.JobList[.@i])+" added to Class Manual.";
            close;
        case 3:
            close; }

OnPCJobLvUpEvent:
    if (!.Mode[1]) end;
    if (@JNull$ == jobname(Class)) end;
    else set @JNull$,"";
    if (!@JIndex || .JobList[@JIndex] != Class) {
        set @JIndex,0;
        for(set .@i,1; .@i<=getarraysize(.JobList); set .@i,.@i+1)
            if (Class == .JobList[.@i]) { set @JIndex, .@i; break; }
        if (!@JIndex) { set @JNull$, jobname(Class); end; } }
    if ((JobLevel == .JLvlMax[@JIndex]) && !(Class_Mastery & pow(2,@JIndex))) {
        set Class_Mastery, Class_Mastery | pow(2,@JIndex);
        atcommand "@allskill";
        message strcharinfo(0),jobname(Class)+" added to Class Manual.";
        for(set .@i,0; .@i<4; set .@i, .@i+1) {
            specialeffect2 441; sleep2 50; }
    } end;

OnPCLoginEvent:
    if (.Mode[0] && !countitem(.ManualID)) getitem .ManualID,1;
    end;

OnTimer50:
    stopnpctimer;
    setnpctimer 0;
    close;

OnInit:
// --------------------- Config ---------------------
// Mode:
//    [0] Manual received automatically upon login? (1: yes / 0: no)
//    [1] Classes added automatically through leveling up? (1: yes / 0: no)
//    [2] Enable NPC to purchase manual/classes? (1: yes / 0: no)
//    [3] Price of manual, in Zeny (if NPC enabled; 0 to disable)
//    [4] Price per class, in Zeny (if NPC enabled; 0 to disable)
    setarray .Mode[0],0,1,1,10000000,5000000;

// JobList: All the classes (ID) that are available.
// JLvlMax: The max job level of classes in JobList.
    setarray .JobList[1],0, 4008,4009,4010,4011,4012,4013,4015,4016,4017,4018,4019,4020,4021,23,24,25,4046,4047,4049;
    setarray .JLvlMax[1],10,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,99,70,70,  50,  50,  50;

    set .ManualID,3333;    // Item ID of manual
    set .CastTime,4;    // Seconds for class change
    set .Interrupt,1;    // Class change is interruptable? (1: yes / 0: no)
    set .BuildCount,4;    // Number of builds and Quick Change options (max 26)
    set .MaxLevel,99;    // Maximum base level (to prevent stat overflow)

// --------------------------------------------------
    if (!.Mode[2]) hideonnpc "CMSys";
    end;
}

function    script    Class_Mastery    {
function Class_Change; function Get_Menu; function Save_Build; function Load_Build;

    if (!Class_Mastery) { message strcharinfo(0),"The book does not respond."; end; }
    while(1) {
        message strcharinfo(0)," ~ Class Mastery System ~ ";
        switch(select(" > Quick Change: > Set Quick Change Options: > Switch Classes: > Manage Builds: > ^777777Close^000000")) {
            case 1:
                message strcharinfo(0),"Quick Change:";
                set .@index, Get_Menu(1,getvariableofnpc(.BuildCount,"CMSys"));
                if (.@index == getvariableofnpc(.BuildCount,"CMSys")+1) break;
                if (!@QC1[.@index] && (!@QC2[.@index] || BaseLevel < getvariableofnpc(.MaxLevel,"CMSys"))) {
                    message strcharinfo(0),"Class change failed."; close; }
                if (@QC1[.@index]) Class_Change(@QC1[.@index]);
                if (@QC2[.@index]) { 
                    if (BaseLevel < getvariableofnpc(.MaxLevel,"CMSys")) message strcharinfo(0),"Level requirement not met for build change.";
                    else Load_Build(getd("Build_"+@QC2[.@index]+"$")); }
                close;
            case 2:
                setarray .@ar$[0],"*","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z";
                while(1) {
                    message strcharinfo(0),"Set Quick Change Options:";
                    set .@index, Get_Menu(1,getvariableofnpc(.BuildCount,"CMSys"));
                    if (.@index == getvariableofnpc(.BuildCount,"CMSys")+1) break;
                    message strcharinfo(0),"Set Quick Change Options > Slot "+.@index+":";
                    switch(select(" > Edit job ("+((@QC1[.@index])?"^0055FF"+jobname(getvariableofnpc(.JobList[@QC1[.@index]],"CMSys")):"^777777none")+"^000000): > Edit build ("+((@QC2[.@index])?"^0055FF"+@QC2[.@index]:"^777777none")+"^000000): > ^777777Back^000000")) {
                        case 1:
                            message strcharinfo(0),"Set Quick Change Options > Slot "+.@index+" > Edit job:";
                            set .@i, Get_Menu(2,getarraysize(getvariableofnpc(.JobList,"CMSys")));
                            if (.@i == getarraysize(getvariableofnpc(.JobList,"CMSys"))) break;
                            set @QC1[.@index], .@i;
                            set QC1$,"_";
                            for(set .@i,1; .@i<=getvariableofnpc(.BuildCount,"CMSys"); set .@i,.@i+1)
                                set QC1$, QC1$+.@ar$[@QC1[.@i]];
                            message strcharinfo(0),"Changes saved.";
                            sleep2 250; break;
                        case 2:
                            message strcharinfo(0),"Set Quick Change Options > Slot "+.@index+" > Edit build:";
                            if (BaseLevel < getvariableofnpc(.MaxLevel,"CMSys")) {
                                message strcharinfo(0),"You must be level "+getvariableofnpc(.MaxLevel,"CMSys")+" to use this."; sleep2 250; break; }
                            set .@build, Get_Menu(3,getvariableofnpc(.BuildCount,"CMSys"),1);
                            if (.@build == getvariableofnpc(.BuildCount,"CMSys")+2) break;
                            if (getd("Build_"+.@build+"$")=="" && .@build != getvariableofnpc(.BuildCount,"CMSys")+1) {
                                message strcharinfo(0),"No build info found."; sleep2 250; break; }
                            else set @QC2[.@index], (((.@build == getvariableofnpc(.BuildCount,"CMSys")+1))?0:.@build);
                            set QC2$,"_";
                            for(set .@i,1; .@i<=getvariableofnpc(.BuildCount,"CMSys"); set .@i,.@i+1)
                                set QC2$, QC2$+.@ar$[@QC2[.@i]];
                            message strcharinfo(0),"Changes saved.";
                            sleep2 250; break;
                        case 3:
                            break; }
                sleep2 250; }
                break;
            case 3:
                message strcharinfo(0),"Switch Classes:";
                set .@i, Get_Menu(2,getarraysize(getvariableofnpc(.JobList,"CMSys")));
                if (.@i == getarraysize(getvariableofnpc(.JobList,"CMSys"))) break;
                if (Class == getvariableofnpc(.JobList[.@i],"CMSys")) {
                    message strcharinfo(0),"Class change failed."; close; }
                message strcharinfo(0),"Select '"+jobname(getvariableofnpc(.JobList[.@i],"CMSys"))+"'?";
                if (select("Yes:No") == 2) break;
                Class_Change(.@i);
                close;
            case 4:
                if (BaseLevel < getvariableofnpc(.MaxLevel,"CMSys")) {
                    message strcharinfo(0),"You must be level "+getvariableofnpc(.MaxLevel,"CMSys")+" to use this."; sleep2 250; break; }
                while(1) {
                    message strcharinfo(0),"Build Manager:";
                    switch(select(" > Save Build...: > Load Build...: > Rename Build...: > ^777777Back^000000")) {
                        case 1:
                            message strcharinfo(0),"Build Manager > Save Build:";
                            set .@build, Get_Menu(3,getvariableofnpc(.BuildCount,"CMSys"));
                            if (.@build == getvariableofnpc(.BuildCount,"CMSys")+1) break;
                            if (getd("Build_"+.@build+"$")!="") {
                                message strcharinfo(0),"Overwrite previous build #"+.@build+"?";
                                if(select("Save new build:Cancel")==2) break; }
                            Save_Build(.@build);
                            message strcharinfo(0),"Type a name for your build.";
                            input getd("Build_"+.@build+"n$");
                            message strcharinfo(0),"Build #"+.@build+" ("+getd("Build_"+.@build+"n$")+") saved.";
                            sleep2 250; break;
                        case 2:
                            message strcharinfo(0),"Build Manager > Load Build:";
                            set .@build, Get_Menu(3,getvariableofnpc(.BuildCount,"CMSys"));
                            if (.@build == getvariableofnpc(.BuildCount,"CMSys")+1) break;
                            if (getd("Build_"+.@build+"$")=="") {
                                message strcharinfo(0),"No build info found."; sleep2 250; break; }
                            Load_Build(getd("Build_"+.@build+"$"));
                            message strcharinfo(0),"Build #"+.@build+" loaded.";
                            sleep2 250; break;
                        case 3:
                            message strcharinfo(0),"Build Manager > Rename Build:";
                            set .@build, Get_Menu(3,getvariableofnpc(.BuildCount,"CMSys"));
                            if (.@build == getvariableofnpc(.BuildCount,"CMSys")+1) break;
                            if (getd("Build_"+.@build+"$")=="") {
                                message strcharinfo(0),"No build info found."; sleep2 250; break; }
                            message strcharinfo(0),"Type a new name for Build #"+.@build+" ("+getd("Build_"+.@build+"n$")+").";
                            input getd("Build_"+.@build+"n$");
                            message strcharinfo(0),"Build #"+.@build+" renamed.";
                            sleep2 250; break;
                        case 4:
                            set .@j,1; break; }
                if (.@j) { set .@j,0; break; }
                sleep2 250; }
                break;
            case 5:
                close; }
        sleep2 250; }

    function Class_Change {
        specialeffect2 348;
        if (getvariableofnpc(.Interrupt,"CMSys")) {
            message strcharinfo(0),"Casting...";
            initnpctimer "CMSys",1;
            progressbar "", getvariableofnpc(.CastTime,"CMSys"); }
        else for(set .@i,0; .@i<getvariableofnpc(.CastTime,"CMSys"); set .@i,.@i+1) {
            message strcharinfo(0),(getvariableofnpc(.CastTime,"CMSys")-.@i)+" seconds remaining...";
            sleep2 1000; }
        jobchange getvariableofnpc(.JobList[getarg(0)],"CMSys");
        set JobLevel, getvariableofnpc(.JLvlMax[getarg(0)],"CMSys");
        atcommand "@allskill";
        set SkillPoint,0;
        skilleffect 292,0;
        return; }
    function Get_Menu {
        set .@menu$,"";
        switch(getarg(0)) {
            case 1:
                deletearray @QC1[0],getarraysize(@QC1);
                deletearray @QC2[0],getarraysize(@QC2);
                setarray .@ar$[0],"*","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z";
                set .@s$,"_";
                for(set .@i,1; .@i<=getstrlen(QC1$); set .@i,.@i+1)
                    for(set .@j,0; .@j<27; set .@j,.@j+1)
                        if (compare(QC1$,.@s$+.@ar$[.@j])) {
                            set @QC1[.@i], .@j;
                            set .@s$, .@s$+.@ar$[.@j];
                            break; }
                set .@s$,"_";
                for(set .@i,1; .@i<=getstrlen(QC2$); set .@i,.@i+1)
                    for(set .@j,0; .@j<27; set .@j,.@j+1)
                        if (compare(QC2$,.@s$+.@ar$[.@j])) {
                            set @QC2[.@i], .@j;
                            set .@s$, .@s$+.@ar$[.@j];
                            break; }
                for(set .@i,1; .@i<=getarg(1); set .@i,.@i+1)
                    set .@menu$, .@menu$+" > "+((@QC1[.@i])?"^0055FF"+jobname(getvariableofnpc(.JobList[@QC1[.@i]],"CMSys")):"^777777no job")+"^000000 / build "+((@QC2[.@i])?"^0055FF"+@QC2[.@i]:"^777777empty")+"^000000:";
                set .@menu$, .@menu$+" > ^777777Back^000000";
                break;
            case 2:
                for(set .@i,1; .@i<getarg(1); set .@i,.@i+1) {
                    if (Class_Mastery & pow(2,.@i))
                        set .@menu$, .@menu$+" > "+jobname(getvariableofnpc(.JobList[.@i],"CMSys"));
                    set .@menu$, .@menu$+":"; }
                set .@menu$, .@menu$+" > ^777777Back^000000";
                break;
            case 3:
                for(set .@i,1; .@i<=getarg(1); set .@i,.@i+1)
                    set .@menu$, .@menu$+" > Slot "+.@i+" ("+((getd("Build_"+.@i+"n$")=="")?"^777777empty":"^0055FF"+getd("Build_"+.@i+"n$"))+"^000000):";
                if (getarg(2,0)) set .@menu$, .@menu$+" > No build:";
                set .@menu$, .@menu$+" > ^777777Back^000000";
                break; }
        return select(.@menu$); }
    function Save_Build {
        setarray .@ar$[0],"a","b","c","d","e","f","g";
        set .@s$,"";
        for(set .@i,0; .@i<7; set .@i,.@i+1)
            set .@s$,.@s$+.@ar$[.@i]+((.@i==6)?StatusPoint:readparam(.@i+13))+"|";
        setd "Build_"+getarg(0)+"$", .@s$;
        return; }
    function Load_Build {
        setarray .@num$[0],"0","1","2","3","4","5","6","7","8","9";
        setarray .@ar$[0],"a","b","c","d","e","f","g";
        ResetStatus;
        for(set .@j,13; .@j<20; set .@j,.@j+1) {
            set .@var$,"";
            set .@s$,.@ar$[.@j-13];
            while(1) {
                for(set .@i,0; .@i<10; set .@i,.@i+1) {
                    if (compare(getarg(0),.@s$+.@num$[.@i])) {
                        set .@var$,.@var$+.@num$[.@i];
                        set .@s$,.@s$+.@num$[.@i];
                        break; }
                } if (compare(getarg(0),.@s$+"|")) break; }
        if (.@j==19) set StatusPoint, atoi(.@var$);
        else statusup2 .@j, atoi(.@var$)-1; }
        return; }
}

 

 

Edited by kalabasa
codebox

2 answers to this question

Recommended Posts

  • 0
Posted

Functions don't get unloaded when you reload a script. So the script engine thinks that Class_Mastery is a function since it was previously defined here:

function	script	Class_Mastery	{

But you're using it as a constant variable... everywhere. Either change the names around, like F_Class_Mastery, or remove the function altogether. It feels like you're using this function on an item script, so changing it to F_Class_Mastery would be enough. (Also, you might want to use proper formatting, it's very hard to read.)

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...