//===== eAthena Script ======================================= //= 3D TTT //===== By: ================================================== //= ??? //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= eAthena SVN //===== Description: ========================================= //= Simple Tick Tack Toe Game in 3D. //===== Additional Comments: ================================= //= 1.0 First version. //============================================================ quiz_02,294,245,6 script 3D Tick Tack Toe 859,{ set .@name$,"[3D Tick Tack Toe]"; mes .@name$; mes "Hallo, wie kann ich dir behilflich sein?"; next; menu "Spielen",case_1,"Belohnungen",case_2,"Ups, verklickt...",case_3; case_1: mes .@name$; mes "Ok, warte einen Moment. Ich warpe dich gleich hin."; close2; warp "3D_TTT.gat",46,55; end; case_2: while( 1 ) { set @TTT_temp_menu$, "Fertig"; for( set @a, 1; @a <= .reward_item_amount; set @a, @a + 1 ) { if( TTT_points >= .reward_item_cost[@a] ) { set @TTT_temp_menu$, @TTT_temp_menu$ + ":" + .reward_item_name$[@a] + " [ " + .reward_item_cost[@a] + " Punkte" + " ]"; } else { set @TTT_temp_menu$, @TTT_temp_menu$ + ":"; } } mes .@name$; mes "Such dir eine Belohnung aus."; mes " "; mes "Dein 3DTTT-Punktestatus: " + TTT_points; next; set @TTT_selected, select( @TTT_temp_menu$ ) - 1; if( !@TTT_selected ) { break; } getitem .reward_item_id[@TTT_selected], 1; set TTT_points, TTT_points - .reward_item_cost[@TTT_selected]; } close; case_3: mes .@name$; mes "Ahso..."; close; OnInit: //======== ITEM SETTINGS ============================================================================= // If you DONT want reward Items just comment out the next line... setarray .reward_item_id[1], 678, 607, 670, 7619; setarray .reward_item_cost[1], 10, 10, 500, 250; //======== GAME SETTINGS ============================================================================= // first player, second player, blink, win effect; setarray $@TTT_EFFECTS[1], 171, 137, 12, 140; // If one of the four $@TTT_EFFECTS[] is 0 then the standard settings will be setted... // Sidenote: Short Effects vor first and secondplayer are VERY VERY BAD. // Please choose effects only with over ONE MINUTE effect time. // Here can ouy add some mapflags, i think this standards are good for every server... // Just in case that the OnInit from the other NPC wich gets the mapname is faster than // this NPC I just let this npc wait some miliseconds, so the other npc has enough time sleep 20; setmapflag $@TTT_MAP$, mf_nobranch; setmapflag $@TTT_MAP$, mf_nowarp; setmapflag $@TTT_MAP$, mf_nogo; setmapflag $@TTT_MAP$, mf_nodrop; setmapflag $@TTT_MAP$, mf_novending; setmapflag $@TTT_MAP$, mf_nochat; setmapflag $@TTT_MAP$, mf_noicewall; //======== DONT EDIT THIS PART ============================================================================= setmapflagnosave( $@TTT_MAP$, $@TTT_MAP$, $@TTT_X, ($@TTT_Y + 11) ); set .reward_item_amount, getarraysize( .reward_item_id ) - 1; if( .reward_item_amount <= 0 ) { set .npc_menu$[1], ""; end; } for( set .@a, 1; .@a <= .reward_item_amount; set .@a, .@a + 1 ) { set .reward_item_name$[.@a], getitemname( .reward_item_id[.@a] ); } end; } 3D_TTT.gat,42,56,6 script Exit::ticktacktoe 858,{ if( @TTT_playing == $@TTT_ROUND ) { end; } warp "maintown.gat",164,199; end; OnPCLogoutEvent: if( @TTT_playing == $@TTT_ROUND && !$@TTT_check_win ) { announce $@TTT_ANNOUNCE$[4], bc_map, 0x00FFFF; set $@TTT_check_win, 1; initnpctimer "TTT_POS_2"; } end; } //========================================================================================================= // FROM HERE ON... NO EDITS PLEASE! YOU WILL PROBABLY DESTORY THE SCRIPT... //========================================================================================================= function script TTT_MAIN { if( $@TTT_check_win ) { end; } if ( $@TTT_WHO < 1 ) { if( @TTT_playing == $@TTT_ROUND ) { end; } announce strcharinfo( 0 ) + $@TTT_ANNOUNCE$[3], bc_map, 0x00FFFF; set @TTT_playing, $@TTT_ROUND; if( $@TTT_WHO == -1 ) { set $@TTT_WHO, 0; set @TTT_player_num, 1; warp "3D_TTT.gat",46,50; } else { set $@TTT_WHO, 1; set @TTT_player_num, 2; set $@TTT_TICK, gettimetick( 2 ); warp "3D_TTT.gat",48,50; } end; } else if( @TTT_playing != $@TTT_ROUND ) { set @TTT_tick, gettimetick( 2 ); if( ( @TTT_tick - $@TTT_TICK ) > 30 ) { announce $@TTT_ANNOUNCE$[2], bc_map, 0x00FFFF; set $@TTT_check_win, 1; initnpctimer "TTT_POS_2"; } end; } if( $@TTT_POS[getarg(0)] ) { end; } if( @TTT_player_num != $@TTT_WHO ) { end; } set $@TTT_POS[getarg(0)], $@TTT_WHO; set $@TTT_TICK, gettimetick( 2 ); specialeffect $@TTT_EFFECTS[3]; if( $@TTT_WHO == 1 ) { specialeffect $@TTT_EFFECTS[1]; set $@TTT_WHO, 2; } else { specialeffect $@TTT_EFFECTS[2]; set $@TTT_WHO, 1; } if( $@TTT_TURN > 3 ) { // WEST - OST for( set .@a, 1; .@a <= 25; set .@a, .@a + 3 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 1), (.@a + 2), getarg(0) ); } // NORD - SÜD for( set .@a, 1; .@a <= 21; set .@a, .@a + 1 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 3), (.@a + 6), getarg(0) ); if( .@a == 3 ) { set .@a, 9; } else if( .@a == 12 ) { set .@a, 18; } } // OST NORD - WEST SÜD for( set .@a, 3; .@a <= 21; set .@a, .@a + 9 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 2), (.@a + 4), getarg(0) ); } // WEST NORD - OST SÜD for( set .@a, 1; .@a <= 19; set .@a, .@a + 9 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 4), (.@a + 8), getarg(0) ); } // OBEN - UNTEN for( set .@a, 1; .@a <= 9; set .@a, .@a + 1 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 9), (.@a + 18), getarg(0) ); } // NORD UNTEN - SÜD OBEN for( set .@a, 1; .@a <= 3; set .@a, .@a + 1 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 12), (.@a + 24), getarg(0) ); } // WEST UNTEN - OST OBEN for( set .@a, 1; .@a <= 7; set .@a, .@a + 3 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 10), (.@a + 20), getarg(0) ); } // NORD OST UNTEN - NORD WEST UNTEN for( set .@a, 3; .@a <= 9; set .@a, .@a + 3 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 8), (.@a + 16), getarg(0) ); } // SÜD WEST UNTEN - NORD WEST OBEN for( set .@a, 7; .@a <= 9; set .@a, .@a + 1 ) { callfunc( "TTT_CHECK_WIN", .@a, (.@a + 6), (.@a + 12), getarg(0) ); } // WEST SÜD UNTEN - OST NORD OBEN callfunc( "TTT_CHECK_WIN", 7, 14, 21, getarg(0) ); // OST SÜD UNTEN - WEST NORD OBEN callfunc( "TTT_CHECK_WIN", 9, 14, 19, getarg(0) ); // WEST NORD UNTEN - OST SÜD OBEN callfunc( "TTT_CHECK_WIN", 1, 14, 27, getarg(0) ); // OST NORD UNTEN - WEST SÜD OBEN callfunc( "TTT_CHECK_WIN", 3, 14, 25, getarg(0) ); } set $@TTT_TURN, $@TTT_TURN + 1; if( $@TTT_TURN == 27 ) { announce $@TTT_ANNOUNCE$[1], bc_map, 0x00FFFF; initnpctimer "TTT_POS_2"; end; } end; } function script TTT_RESET { cleararray $@TTT_POS[0], 0, 30; set $@TTT_TICK, 0; set $@TTT_TURN, 0; set $@TTT_ROUND, $@TTT_ROUND + 1; set $@TTT_WHO, -1; set $@TTT_check_win, 0; return; } function script TTT_CHECK_WIN { if( $@TTT_POS[getarg(0)] && $@TTT_POS[getarg(1)] && $@TTT_POS[getarg(2)] ) { set $@TTT_check_win, $@TTT_POS[getarg(0)] + $@TTT_POS[getarg(1)] + $@TTT_POS[getarg(2)]; if( $@TTT_check_win == 3 ) { set $@TTT_check_win, 1; } else if( $@TTT_check_win == 6 ) { set $@TTT_check_win, 2; } else { set $@TTT_check_win, 0; } } if( $@TTT_check_win ) { if ( getarg(0) != getarg(3) ) { doevent( "TTT_POS_" + getarg(0) + "::OnShowWin" ); } else { specialeffect $@TTT_EFFECTS[4]; } if ( getarg(1) != getarg(3) ) { doevent( "TTT_POS_" + getarg(1) + "::OnShowWin" ); } else { specialeffect $@TTT_EFFECTS[4]; } if ( getarg(2) != getarg(3) ) { doevent( "TTT_POS_" + getarg(2) + "::OnShowWin" ); } else { specialeffect $@TTT_EFFECTS[4]; } announce $@TTT_ANNOUNCE$[0] + strcharinfo( 0 ) + " !!~", bc_map, 0x00FFFF; set TTT_points, TTT_points + 1; initnpctimer "TTT_POS_2"; end; } return; } //----------------------------------------------------------------------- //----------------------------------------------------------------------- 3D_TTT.gat,38,46,6 script ::TTT_POS_1 111,{ callfunc "TTT_MAIN", 1; end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; OnInit: callfunc "TTT_RESET"; if( !$@TTT_EFFECTS[1] || !$@TTT_EFFECTS[2] || !$@TTT_EFFECTS[3] || !$@TTT_EFFECTS[4] ) { setarray $@TTT_EFFECTS[1], 171, 137, 12, 140; } while(1) { initnpctimer; end; OnTimer60000: stopnpctimer; setnpctimer 0; if( $@TTT_TURN ) { if( $@TTT_POS[1] ) { if( $@TTT_POS[1] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } } for( set .@b, 2; .@b <= 27; set .@b, .@b + 1 ) { if( $@TTT_POS[.@b] ) { initnpctimer "TTT_POS_" + .@b; } } } } } 3D_TTT.gat,40,46,6 script ::TTT_POS_2 111,{ callfunc "TTT_MAIN", 2; end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; OnTimer1: if( !$@TTT_check_win ) { stopnpctimer; setnpctimer 0; if( $@TTT_POS[2] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } } end; OnTimer3000: stopnpctimer; setnpctimer 0; mapwarp $@TTT_MAP$, $@TTT_MAP$, $@TTT_X, ($@TTT_Y + 11); callfunc "TTT_RESET"; end; } 3D_TTT.gat,42,46,53,6 script ::TTT_POS_3 111,{ callfunc "TTT_MAIN", 3; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[3] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- 3D_TTT.gat,38,44,6 script ::TTT_POS_4 111,{ callfunc "TTT_MAIN", 4; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[4] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,40,44,6 script ::TTT_POS_5 111,{ callfunc "TTT_MAIN", 5; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[5] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,42,44,6 script ::TTT_POS_6 111,{ callfunc "TTT_MAIN", 6; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[6] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- 3D_TTT.gat,38,42,6 script ::TTT_POS_7 111,{ callfunc "TTT_MAIN", 7; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[7] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,40,42,6 script ::TTT_POS_8 111,{ callfunc "TTT_MAIN", 8; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[8] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,42,42,6 script ::TTT_POS_9 111,{ callfunc "TTT_MAIN", 9; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[9] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- //----------------------------------------------------------------------- 3D_TTT.gat,45,46,6 script ::TTT_POS_10 111,{ callfunc "TTT_MAIN", 10; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[10] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,47,46,6 script ::TTT_POS_11 111,{ callfunc "TTT_MAIN", 11; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[11] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,49,46,6 script ::TTT_POS_12 111,{ callfunc "TTT_MAIN", 12; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[12] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- 3D_TTT.gat,45,44,6 script ::TTT_POS_13 111,{ callfunc "TTT_MAIN", 13; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[13] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,47,44,6 script ::TTT_POS_14 111,{ callfunc "TTT_MAIN", 14; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[14] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; OnInit: getmapxy $@TTT_MAP$, $@TTT_X, $@TTT_Y, 1; end; } 3D_TTT.gat,49,44,6 script ::TTT_POS_15 111,{ callfunc "TTT_MAIN", 15; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[15] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- 3D_TTT.gat,45,42,6 script ::TTT_POS_16 111,{ callfunc "TTT_MAIN", 16; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[16] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,47,42,6 script ::TTT_POS_17 111,{ callfunc "TTT_MAIN", 17; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[17] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,49,42,6 script ::TTT_POS_18 111,{ callfunc "TTT_MAIN", 18; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[18] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- //----------------------------------------------------------------------- 3D_TTT.gat,52,46,6 script ::TTT_POS_19 111,{ callfunc "TTT_MAIN", 19; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[19] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,54,46,6 script ::TTT_POS_20 111,{ callfunc "TTT_MAIN", 20; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[20] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,56,46,6 script ::TTT_POS_21 111,{ callfunc "TTT_MAIN", 21; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[21] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- 3D_TTT.gat,52,44,6 script ::TTT_POS_22 111,{ callfunc "TTT_MAIN", 22; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[22] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,54,44,6 script ::TTT_POS_23 111,{ callfunc "TTT_MAIN", 23; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[23] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,56,44,6 script ::TTT_POS_24 111,{ callfunc "TTT_MAIN", 24; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[24] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } //----------------------------------------------------------------------- 3D_TTT.gat,52,42,6 script ::TTT_POS_25 111,{ callfunc "TTT_MAIN", 25; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[25] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,54,42,6 script ::TTT_POS_26 111,{ callfunc "TTT_MAIN", 26; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[26] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; } 3D_TTT.gat,56,42,6 script ::TTT_POS_27 111,{ callfunc "TTT_MAIN", 27; end; OnTimer1: stopnpctimer; setnpctimer 0; if( $@TTT_POS[27] == 1 ) { specialeffect $@TTT_EFFECTS[1]; } else { specialeffect $@TTT_EFFECTS[2]; } end; OnShowWin: specialeffect $@TTT_EFFECTS[4]; end; }