/* ||======================================================|| ||======================================================|| || NPC: || ||======================================================|| || Tic Tac Toe || ||======================================================|| || Version 1.2.5 || ||======================================================|| || Made by Streiker || ||======================================================|| || Updates: || || (5 latests) || || || || Version 1.2.1: || || Fixed: other players can reset the game.|| || || || Version 1.2.2: || || Fixed: game can start without 2 users. || || Changed the default color of the || || announce. || || || || Version 1.2.3: (Credits to ~AnnieRuru~) || || Fixed: turns. || || Fixed: draw game. || || Optimized. || || || || Version 1.2.4: || || Fixed: Tic Tac Toe check. || || || || Version 1.2.5: || || Fixed: console errors. || || Small optimization. || ||======================================================|| || Description: || || || || The simple and famous tic tac toe game. || ||======================================================|| || Additional Comments: || || || || At the moment none. || ||======================================================|| ||======================================================|| */ - script 3er_2 -1,{ if ( ( .X2 && .O2 ) && ( .X2 == getcharid ( 3 ) || .O2 == getcharid ( 3 ) ) && ( ! isloggedin ( .X2, .X ) || ! isloggedin ( .O2, .O ) ) ) donpcevent "Tic Tac Toe#3z::OnResetGame"; set .@a, atoi ( strnpcinfo ( 2 ) ); if ( ( ! $@ttt_a[.@a] ) && ( $@ttt_turn ) ) { if ( getcharid ( 0 ) == getvariableofnpc ( .X, "Tic Tac Toe#3z" ) ) { if ( ( $@ttt_turn % 2 ) ) { set $@ttt_a[.@a], 1; setnpcdisplay "Poring#"+ .@a, $@ttt_ids[0] ; set .@c, 1; } else dispbottom "Is not your turn!"; } if ( getcharid ( 0 ) == getvariableofnpc ( .O, "Tic Tac Toe#3z" ) ) { if ( ! ( $@ttt_turn % 2 ) ) { set $@ttt_a[.@a], 2; setnpcdisplay "Poring#"+ .@a, $@ttt_ids[1] ; set .@c, 2; } else dispbottom "Is not your turn!"; } if ( .@c ) { set $@ttt_turn, $@ttt_turn + 1; specialeffect 44 ; set .@b, callsub ( CheckTic, .@c ); if ( .@b ) callsub Winner, .@b; else if ( $@ttt_turn >= 10 ) { if ( $@ttt_ann >= 0 ) announce "Draw game.", ( ( $@ttt_ann <= 3 ) ? $@ttt_ann : 3 ), "0x"+$@ttt_ann$ ; donpcevent "Tic Tac Toe#3z::OnResetGame"; } } } end ; OnInit: /* Item1 Amount1, Item2, Amount2, {Item...}, {Amount...} ( Max items: 64 ) */ setarray $@ttt_prizes[0],0,0; // Sprites. // ID X ID O setarray $@ttt_ids[0],1582,1568; /* Announce: -1 = No announce 0 = All. 1 = Map. 2 = Area. 3 = Self. */ set $@ttt_ann,1; // Color of the announce (winner). // Default = "30bdb5" set $@ttt_ann$,"30bdb5"; end; CheckTic: setarray .@a[0], 1, 2, 3, 1, 5, 9, 3, 5, 7, 4, 5, 6, 7, 8, 9, 1, 6, 7, 2, 5, 8, 3, 4, 9; for ( set .@b, 0; .@b < getarraysize ( .@a ) ; set .@b, .@b + 3 ) if ( $@ttt_a[.@a[.@b]] == getarg ( 0 ) && $@ttt_a[.@a[.@b + 1]] == getarg ( 0 ) && $@ttt_a[.@a[.@b + 2]] == getarg ( 0 ) ) return getarg ( 0 ) ; return 0; Winner: for ( set .@i, 0; .@i < getarraysize ( $@ttt_prizes ) ; set .@i, .@i + 2 ) getitem $@ttt_prizes[.@i], $@ttt_prizes[.@i + 1]; if ( $@ttt_ann >= 0 ) announce "The player "+ getarg ( 0 ) +" ("+ strcharinfo ( 0 ) +") has won!", ( ( $@ttt_ann <= 3 ) ? $@ttt_ann : 3 ), "0x"+$@ttt_ann$ ; donpcevent "Tic Tac Toe#3z::OnResetGame"; return ; } prontera,152,112,4 duplicate(3er_2) Poring#1 909 prontera,155,112,4 duplicate(3er_2) Poring#2 909 prontera,158,112,4 duplicate(3er_2) Poring#3 909 prontera,158,109,4 duplicate(3er_2) Poring#4 909 prontera,155,109,4 duplicate(3er_2) Poring#5 909 prontera,152,109,4 duplicate(3er_2) Poring#6 909 prontera,152,106,4 duplicate(3er_2) Poring#7 909 prontera,155,106,4 duplicate(3er_2) Poring#8 909 prontera,158,106,4 duplicate(3er_2) Poring#9 909 prontera,163,112,4 script Tic Tac Toe#3z 909,{ // NPC Name. set .@a$, "^2b86b5Tic Tac Toe^000000"; mes .@a$; setarray .@a[0], .X2, .X, .O2, .O; for ( set .@b, getarraysize ( .@a ) ; .@c < .@b ; set .@c, .@c + 2 ) { if ( isloggedin ( .@a[.@c], .@a[.@c + 1] ) ) mes "Player "+ ( .@c / 2 + 1 ) +": "+ rid2name ( ( ( .@c == 0 ) ? .X2 : .O2 ) ) +"."; else { mes "Player "+ ( .@c / 2 + 1 ) +": There isn't."; setd ( ( .@c == 0 ) ? ".X2" : ".O2" ), 0; setd ( ( .@c == 0 ) ? ".X" : ".O" ), 0; } } switch ( select ( "Register", "^911b1bExit^000000" ) ) { case 1: if ( .X && .O ) { mes "I'm sorry, but somebody else has already register before than you."; break ; } if ( .X2 == getcharid ( 3 ) || .O2 == getcharid ( 3 ) ) { mes "You're registered already."; break ; } if ( ! .X && ! .O ) { set .@a, rand ( 1, 2 ); setd ( ( .@a == 1 ) ? ".X" : ".O" ), getcharid ( 0 ); setd ( ( .@a == 1 ) ? ".X2" : ".O2" ), getcharid ( 3 ); } else { setd ( ( .X == 0 ) ? ".X" : ".O" ), getcharid ( 0 ); setd ( ( .X2 == 0 ) ? ".X2" : ".O2" ), getcharid ( 3 ); } if ( .X && .O ) { set $@ttt_turn, rand ( 1, 2 ); npctalk "The game can start, "+ strcharinfo ( 0 ) +" has been register!"; } mes "You're registered now, you're the "+ ( ( .X2 == getcharid ( 3 ) ) ? "Deviling" : "Angeling" ); break ; case 2: mes "Have a nice day."; break ; } close ; OnResetGame: while ( set ( .@i, .@i + 1 ) < 10 ) { set $@ttt_a[.@i], 0; setnpcdisplay "Poring#"+ .@i, 909 ; } set .X2, 0; set .X, 0; set .O2, 0; set .O, 0; end ; }