/*
||======================================================||
||======================================================||
|| 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 ;
}