//Author : Goddameit //Version : 2012/05/12 18:27 //Web : http://goo.gl/q9sej prontera,150,180,4 script Blackjack 100,{ // function cC2P ; function cPoint ; function cR ; function cRs ; function PLeave ; function cN ; function LsN ; function sS ; function iSc ; function cI ; function allPASS ; // function iSc { if(isloggedin(.playeraid[getarg(0)])) return 1; else return 0; } // function sS { for(set .@i,0;getarg(.@i,"")!="";set .@i,.@i+1) set .@s$,.@s$+getarg(.@i)+":"; set .@s$,.@s$+"[Pass]"; set .@c,prompt(.@s$); return .@c; } // select("Start"); for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { if(.playeraid[.@i]==getcharid(3)) { mes "You have already registered."; close; } } for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { if(!iSc(.@i)) { set .playeraid[.@i],getcharid(3); if(.joinmax-.@i>0) announce "[Blackjack]:Need '"+(.joinmax-.@i)+"' player to active the game.",0; break; } } if(.@i==.joinmax) { for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { callsub OnAddCard,.@i,1; } initnpctimer; } close; // OnTimer1: if(.uSC) { callsub OnEndd; end; } callsub OnTurn; callsub OnAttach; callsub OnlLP; doevent strnpcinfo(0)+"::OnsS"; end; OnsSe: if(allPASS()) { callsub OncVictore,0; } initnpctimer; close; // dSinle: attachrid(.playeraid[getarg(0)]); getitem 607,1; return; // OnsS: mes "Display total'"+cPoint(.turn,1)+"'"; mes "All'"+cPoint(.turn,0)+"'"; sS("[See cards]","[Add card]"); if(!cN(.turn)||.turnarray[.turn]) { doevent strnpcinfo(0)+"::OnsSe"; end; } switch(@menu) { case 1: set .@select$,""; for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) set .@select$,.@select$+(iSc(.@i)?rid2name(.playeraid[.@i]):"-")+":"; set .@select$,.@select$+""; set .@i,sS(.@select$); if(.@i==255||.@i==3) { break; } set .@cN,cN(.@i); dispbottom "**===============["+(iSc(.@i)?rid2name(.playeraid[.@i]):"-")+"]===============**"; if(.playeraid[@menu]!=getcharid(3)) dispbottom "[???][???]"; else dispbottom ""+(getd(".pcardj_"+.@i+"[0]")?"[Fooled]":"")+""+cR(getd(".pcardt_"+.@i+"[0]"))+"["+cRs(getd(".pcardn_"+.@i+"[0]"))+"]"; for(set .@j,1;.@j<.@cN;set .@j,.@j+1) dispbottom ""+(getd(".pcardj_"+.@i+"["+.@j+"]")?"[Fooled]":"")+""+cR(getd(".pcardt_"+.@i+"["+.@j+"]"))+"["+cRs(getd(".pcardn_"+.@i+"["+.@j+"]"))+"]"; set .turn,.turn-1; next; break; case 2: callsub OnAddCard,.turn; break; case 3: case 255: set .turnarray[.turn],1; break; } doevent strnpcinfo(0)+"::OnsSe"; end; // function LsN { set .@p,0; for(set .@i,1;.@i<=5;set .@i,.@i+1) for(set .@j,1;.@j<=cI(.@i);set .@j,.@j+1) if(!getd(".card_"+.@i+"["+.@j+"]")) set .@p,.@p+1; return .@p; } // function cN { return getarraysize(getd(".pcardn_"+getarg(0))); } // function PLeave { set .playeraid[getarg(0)],0; deletearray getd(".pcardn_"+getarg(0)),128; deletearray getd(".pcardt_"+getarg(0)),128; deletearray getd(".pcardj_"+getarg(0)),128; return; } // function cRs { if(getarg(0)<11) { if(getarg(0)<10) return " "+getarg(0); else return getarg(0); }else{ switch(getarg(0)-10) { case 1: return " J"; case 2: return " Q"; case 3: return " K"; case 89: return "--"; } } } // function cR { switch(getarg(0)) { case 1:return "[Clubs]"; case 2:return "[Diamonds]"; case 3:return "[Hearts]"; case 4:return "[Spades]"; case 5:return "[Joker]"; } } // function cC2P { set .@n,getd(".pcardn_"+getarg(0)+"["+getarg(1)+"]"); set .@j,getd(".pcardj_"+getarg(0)+"["+getarg(1)+"]"); if(.@j||.@n==99||.@n==10) return 0; else if(.@n>=11&&.@n<=13) return 10; else if(.@n==1&&cN(getarg(0))==1) return 11; else return .@n; } // function cPoint { set .@p,0; set .@cN,cN(getarg(0)); for(set .@i,getarg(1,0);.@i<.@cN;set .@i,.@i+1) { set .@p,.@p+cC2P(getarg(0),.@i); } return .@p; } // OnlLP: set .@p,0; for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { set .@p,.@p+cN(.@i); } if(.@p==cN(.turn)) { callsub OncVictore,.turn; callsub OnEndd; close; } return; // function allPASS { for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) if(.turnarray[.@i]||!cN(.@i)) set .@p,.@p+1; else break; if(.@p>=.joinmax) return 1; else return 0; } // OnTurn: set .turn,.turn>=.joinmax?1:.turn+1; return; // OnAttach: if(!attachrid(.playeraid[.turn])) { PLeave(.turn); } return; // OncVictore: if(!getarg(0)) { for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { set .@p[.@i],cPoint(.@i); set .@q[.@i],cN(.@i); if(.@p[.@i]>21) { set .@p[.@i],0; set .@q[.@i],0; } } for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { if(.@p[.@i]) { for(set .@j,1;.@j<=.joinmax;set .@j,.@j+1) { if(.@p[.@i]>.@p[.@j]) { set .@p[.@j],0; set .@q[.@j],0; } } } } set .@vi,0; for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { if(.@p[.@i]) set .@vi,.@vi+1; } if(.@vi>1)//¦³¦P¤Àªº { for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { if(.@q[.@i]) { for(set .@j,1;.@j<=.joinmax;set .@j,.@j+1) { if(.@q[.@i]>.@q[.@j]) { set .@p[.@i],0; set .@q[.@i],0; } } } } } for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) if(.@q[.@i]&&iSc(.@i)) { announce "[Blackjack]:Player "+rid2name(.playeraid[.@i])+" win!!",0; callsub dSinle,.@i; } }else{ if(iSc(getarg(0))) { announce "[Blackjack]:Player "+rid2name(.playeraid[getarg(0)])+" win!!",0; callsub dSinle,getarg(0); } } set .uSC,1; return; // function cI { if(getarg(0)!=5) return 13; else return .bjcnmax; } // OnAddCard: if(!LsN()) { callsub OncVictore,0; return; } deletearray .@can_n[0],128; deletearray .@can_t[0],128; for(set .@i,1;.@i<=5;set .@i,.@i+1) for(set .@j,1;.@j<=cI(.@i);set .@j,.@j+1) if(!getd(".card_"+.@i+"["+(.@j-1)+"]")) { setarray .@can_n[set(.@p,.@p+1)-1],.@j; setarray .@can_t[.@p-1],.@i; } set .@r,rand(getarraysize(.@can_n)); setd ".card_"+.@can_t[.@r]+"["+.@can_n[.@r]+"]",1; if(.@can_t[.@r]==5) { set .@can_n[.@r],99; if(!getarg(1,0)) callsub OnBJcard,getarg(0); } set .@cN,cN(getarg(0)); setd ".pcardn_"+getarg(0)+"["+.@cN+"]",.@can_n[.@r]; setd ".pcardt_"+getarg(0)+"["+.@cN+"]",.@can_t[.@r]; if(getarg(1,0)) return; for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) if(iSc(.@i)) message rid2name(.playeraid[.@i])," "+rid2name(.playeraid[getarg(0)])+" New Card : "+cR(getd(".pcardt_"+.turn+"["+.@cN+"]"))+"["+cRs(getd(".pcardn_"+.turn+"["+.@cN+"]"))+"]"; else PLeave(.@i); if(cPoint(getarg(0),1)>21) { mes "Display card points over 21, you out!"; PLeave(getarg(0)); return; } return; // OnPCLogOut: if(.playeraid[.turn]==getcharid(3)) { PLeave(.turn); } end; // OnBJcard: set .@select$,""; set .@cN,cN(getarg(0)); for(set .@i,0;.@i<.@cN;set .@i,.@i+1) { set .@select$,.@select$+cR(getd(".pcardt_"+getarg(0)+"["+.@i+"]"))+"["+cRs(getd(".pcardn_"+getarg(0)+"["+.@i+"]"))+"]:"; } set .@select$,.@select$+"[Pass]"; set .@cN,cN(getarg(0)); if(attachrid(.playeraid[getarg(0)])) { set .@t,0; while(1) { mes "Choose a card to be 'Fooled'(be zero point)"; mes "('Pass' and 'Fooled' can't be chosen.)"; if(prompt(.@select$)>.@cN||getd(".pcardj_"+getarg(0)+"["+set(@menu,@menu-1)+"]")) { set .@t,.@t+1; if(.@t>=10) { mes "Wrong type too many times, you out."; PLeave(getarg(0)); return; } continue; }else{ mes ""+cR(getd(".pcardt_"+getarg(0)+"["+@menu+"]"))+"["+cRs(getd(".pcardn_"+getarg(0)+"["+@menu+"]"))+"]"; setd ".pcardj_"+getarg(0)+"["+@menu+"]",1; mes "OK."; return; } } }else{ PLeave(getarg(0)); } return; // OnInit: // set .joinmax,2; set .bjcnmax,2; // callsub OnEndd; end; // OnEndd: set .uSC,0; set .turn,0; deletearray .card_1[0],128; deletearray .card_2[0],128; deletearray .card_3[0],128; deletearray .card_4[0],128; deletearray .card_5[0],128; deletearray .turnarray[0],128; for(set .@i,1;.@i<=.joinmax;set .@i,.@i+1) { if(iSc(.@i)) { message rid2name(.playeraid[.@i]),"Game Over!"; } deletearray getd(".pcardn_"+.@i),128; deletearray getd(".pcardt_"+.@i),128; deletearray getd(".pcardj_"+.@i),128; } deletearray .playeraid[0],128; return; }