Jump to content
  • 0

Help on BG Emperium


caizercafe

Question


  • Group:  Members
  • Topic Count:  13
  • Topics Per Day:  0.00
  • Content Count:  62
  • Reputation:   1
  • Joined:  10/09/13
  • Last Seen:  

Hello there, 

 

i have a problem regarding Anie Ruru's script, about BG Emperium

 

that when the game start, the client will crash...

 

this is the script...

 

-    script    bg_emp#control    -1,{
OnInit:
    setarray .rewarditem, 969, 100; // reward to the winning team
    set .winningscore, 2; // final score to win
    set .eventlasting, 20 * 60; // abort the system if there's no progress, 20 mins * seconds
    set .register_lasting, 10 * 60; // 10 minutes to joins, else abort registration, 10 mins * seconds
    sleep 1;
    disablenpc .rednpcname$;
    disablenpc .bluenpcname$;
    end;
OnStart:
    if ( getwaitingroomstate( 0, .rednpcname$ ) < .minplayer2start || getwaitingroomstate( 0, .bluenpcname$ ) < .minplayer2start ) end;
    set .red, waitingroom2bg( "bat_a01", 171,346, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ );
    copyarray .team1aid, $@arenamembers, $@arenamembersnum;
    set .blue, waitingroom2bg( "bat_a01", 162,50, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ );
    copyarray .team2aid, $@arenamembers, $@arenamembersnum;
    .inprogress = 2;
    awake strnpcinfo(0);
    bg_warp .red, "bat_a01", 171,346;
    bg_warp .blue, "bat_a01", 162,50;
    setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue";
    setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
    bg_updatescore "bat_a01", 0, 0;
    sleep 6000; if ( .inprogress == 0 ) goto L_Abort;
    mapannounce "bat_a01", "Rules are simple. The first one to break the opponent's emperium will get a score.", 0;
    sleep 3000; if ( .inprogress == 0 ) goto L_Abort;
    mapannounce "bat_a01", "Score "+ .winningscore +" rounds to win ! ... GET READY", 0;
    sleep 2000; if ( .inprogress == 0 ) goto L_Abort;
    while (1) {
        for ( .@i = 5; .@i > 0; .@i-- ) {
            mapannounce "bat_a01", .@i +"", 0;
            sleep 1000; if ( .inprogress == 0 ) goto L_Abort;
        }
        if ( .score[1] == .winningscore -1 && .score[2] == .winningscore -1 )
            mapannounce "bat_a01", "Final Round start!", 0;
        else
            mapannounce "bat_a01", "Round "+ .round++ +" start!", 0;
        bg_monster .red,"bat_a01",171,346, "--ja--",1915, strnpcinfo(3)+"::OnRedDown";
        bg_monster .blue,"bat_a01",162,50, "--ja--",1914, strnpcinfo(3)+"::OnBlueDown";
        delwall "bg_emp_town_red";
        delwall "bg_emp_town_blue";
        sleep .eventlasting * 1000; if ( .inprogress == 0 ) goto L_Abort;
        .score[ .winside ]++;
        bg_updatescore "bat_a01", .score[1], .score[2];
        killmonster "bat_a01", strnpcinfo(3)+"::OnRedDown";
        killmonster "bat_a01", strnpcinfo(3)+"::OnBlueDown";
        if ( .winside )
            mapannounce "bat_a01", .empkiller$ +" has Destroy "+( ( .winside == 1 )?"Blue":"Red" )+"'s side Emperium. "+( ( .winside == 1 )?"Red":"Blue" )+" team score a point !", 0;
        if ( .score[1] == .winningscore || .score[2] == .winningscore || !.winside ) break;
        sleep 5000; if ( .inprogress == 0 ) goto L_Abort;
        bg_warp .red, "bat_a01", 171,346;
        bg_warp .blue, "bat_a01", 162,50;
        setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue";
        setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
        .winside = 0;
    }
    if ( .winside ) {
        mapannounce "bat_a01", ( ( .winside == 1 )?"Red":"Blue" )+" side wins !", 0;
        .@size = getarraysize( getd(".team"+ .winside +"aid") );
        for ( .@i = 0; .@i < .@size; .@i++ )
            getitem .rewarditem[0], .rewarditem[1], getd(".team"+ .winside +"aid["+ .@i +"]" );
    } else
        mapannounce "bat_a01", "Time Out. Aborting the match.", 0;
    sleep 5000;
L_Abort:
    bg_warp .red, "prontera", 155,182;
    bg_warp .blue, "prontera", 158,182;
    bg_destroy .red;
    bg_destroy .blue;
    delwall "bg_emp_town_red";
    delwall "bg_emp_town_blue";
    deletearray .team1aid;
    deletearray .team2aid;
    .round = .winside = .score[2] = .score[1] = .inprogress = 0;
    end;
OnRedDown: callsub L_EmpDown, 2;
OnBlueDown: callsub L_EmpDown, 1;
L_EmpDown:
    .empkiller$ = strcharinfo(0);
    .winside = getarg(0);
    awake strnpcinfo(3);
OnRedDead:
OnBlueDead:
    end;
OnRedQuit: callsub L_quit, .red, "Red", "Blue", 2;
OnBlueQuit: callsub L_quit, .blue, "Blue", "Red", 1;
L_quit:
    if ( bg_get_data( getarg(0), 0 ) ) end;
    mapannounce "bat_a01", "All "+ getarg(1) +" team members has Quit ! "+ getarg(2) +" side wins !", 0;
    .@size = getarraysize( getd(".team"+ getarg(3) +"aid") );
    for ( .@i = 0; .@i < .@size; .@i++ )
        getitem .rewarditem[0], .rewarditem[1], getd(".team"+ getarg(3) +"aid["+ .@i +"]" );
    goto L_Abort;
OnAutoAbort:
    sleep .register_lasting * 1000;
    delwaitingroom .rednpcname$;
    delwaitingroom .bluenpcname$;
    disablenpc .rednpcname$;
    disablenpc .bluenpcname$;
    if ( .inprogress == 1 ) {
        .inprogress = 0;
        announce "battleground has self-aborted because not enough members", 0;
    }
    end;
}

prontera,156,186,5    script    gm_start    100,{
    if ( getgmlevel() < 99 ) {
        mes "I only talk to gm";
        close;
    }
    if ( getvariableofnpc( .inprogress, "bg_emp#control" ) ) {
        mes "abort ?";
        next;
        if ( select ( "Yes", "No" ) == 2 ) close;
        set getvariableofnpc( .inprogress, "bg_emp#control" ), 0;
        awake "bg_emp#control";
        killmonster "bat_a01", "bg_emp#control::OnRedDown";
        killmonster "bat_a01", "bg_emp#control::OnBlueDown";
        announce strcharinfo(0) +" has abort the battleground", 0;
        close;
    }
    mes "select how many players to start";
    next;
    if ( input( .@a, 1, 30 ) ) close;
    set getvariableofnpc( .minplayer2start, "bg_emp#control" ), .@a;
    announce strcharinfo(0) +" has hosted "+ .@a +"vs"+ .@a +" battleground", 0;
    enablenpc getvariableofnpc( .rednpcname$, "bg_emp#control" );
    enablenpc getvariableofnpc( .bluenpcname$, "bg_emp#control" );
    donpcevent getvariableofnpc( .rednpcname$, "bg_emp#control" ) +"::OnStart";
    donpcevent getvariableofnpc( .bluenpcname$, "bg_emp#control" ) +"::OnStart";
    set getvariableofnpc( .inprogress, "bg_emp#control" ), 1;
    donpcevent "bg_emp#control::OnAutoAbort";
    close;
}

prontera,155,182,5    script    Red side#bg_emp    100,{
    end;
OnStart:
    waitingroom "Red side", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_emp#control" );
    end;
OnInit:
    set getvariableofnpc( .rednpcname$, "bg_emp#control" ), strnpcinfo(0);
    end;
}

prontera,158,182,5    script    Blue side#bg_emp    100,{
    end;
OnStart:
    waitingroom "Blue side", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_emp#control" );
    end;
OnInit:
    set getvariableofnpc( .bluenpcname$, "bg_emp#control" ), strnpcinfo(0);
    end;
}

bat_a01    mapflag    battleground    2
bat_a01    mapflag    nosave    SavePoint
bat_a01    mapflag    nowarp
bat_a01    mapflag    nowarpto
bat_a01    mapflag    noteleport
bat_a01    mapflag    nomemo
bat_a01    mapflag    nopenalty
bat_a01    mapflag    nobranch
bat_a01    mapflag    noicewall

 

Edited by caizercafe
Link to comment
Share on other sites

1 answer to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  18
  • Topics Per Day:  0.00
  • Content Count:  2044
  • Reputation:   682
  • Joined:  10/09/12
  • Last Seen:  

the client crash is caused by the *setwall script command

the behavior of setwall script command are unlike setcell

setwall updates the client to make the coordinate unwalkable

to fix it, change

    bg_warp .red, "bat_a01", 171,346;
    bg_warp .blue, "bat_a01", 162,50;
    setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue";
    setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
into

    setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue";
    setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
    bg_warp .red, "bat_a01", 171,346;
    bg_warp .blue, "bat_a01", 162,50;
which means, instead of warping the player, and updates the client

its better for the server to update the setcell information then send the unwalkable data packet to the client

then it will lessen the chance of client crash

Link to comment
Share on other sites

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.

×
×
  • Create New...