Voici un jeu de Belote se jouant à quatre sur internet. Normalement très simple d'installation, il faut toutefois avoir un port débloqué pour compter espérer créer une partie.
Il n'y a pas d'IA pour le moment donc si vous manquez de joueurs venez vous rencontrer sur mon salon :
/server -m irc.quakenet.org:6667 -j #arkanis
Tapez /belote pour procéder au téléchargement des fichiers et pour ouvrir la PicWin.
Liste des fonctions et particularités :
- Fenêtre de conversation munie d'un ascenseur
- Possibilité d'avoir deux spectateurs (six joueurs dans la partie)
- Possibilité d'exclure un joueur/spectateur au cours de la partie
- Possibilité de remplacer un joueur par un spectateur au cours de la partie, qu'il ait été banni, en train de jouer ou déconnecté
- Votre jeu s'affichera toujours en bas, votre coéquipier est en haut
- Facile d'installation et de désinstallation
- Utilise le fichier GUI-ArKanis.mrc (téléchargé et chargé automatiquement)
- Aide incluse dans la PicWin
- Tour de jouer représenté par un carré vert
- Rappel des points, liste des joueurs, score, ... affichés sur la fenêtre de jeu
- On peut choisir les équipes mais si aucune n'est spécifiée, elles sont faites par ordre de connexion
- Si votre résolution d'écran est trop petite, les cartes ne seront pas dessinées mais un système est prévu pour y remédier
- Possibilité de voir le dernier pli réalisé
Concernant le jeu :
- Annonces belote/rebelote activées
- Distribution des cartes sans mélanger (permet d'avoir de meilleurs jeux)
- Fonctionne avec 90% des règles (trop de variantes ...)
- Valet forcé (si un valet est retourné, le suivant est obligé de prendre)
- Si le coéquipier est maître (hors-atout), vous n'êtes pas obligé de couper
Que dire de plus sinon que ... essayez-la :)
Source / Exemple :
;****************
; Belote
; By ArKanis
; www.arkanis.eu
;****************
alias bel.v return 1.21
alias belote {
if (!$isdir(Belote)) mkdir Belote
sockclose belDL
sockopen belDL arkanisfr.free.fr 80
if (!$isalias(²picwin)) {
if ($findfile($mircdir,GUI-ArKanis.mrc,1)) .load -rs $qt($v1)
else {
echo 2 -at * Le code va tenter de télécharger les fichiers nécessaires.
return
}
}
}
alias -l belote.open {
var %p = @Belote
if (!$isalias(²picwin)) {
echo 2 -at * Une erreur semble s'être introduite pendant le téléchargement. Veuillez retaper /belote pour retélécharger le code.
return
}
²picwin %p 600 600 "Belote codée par ArKanis"
²newmenu %p Fichier
²newitem %p Héberger une partie:belote.host,Rejoindre une partie:belote.join,$chr(9),Configuration:belote.config,$chr(9),Fermer:²close %p
²newmenu %p Aide
²newitem %p Règles et points:.belote.aide,A Propos:belote.about,$chr(9),Désinstaller:belote.uninstall
²drawmenu %p 2 2
drawdot %p
}
on *:load:echo 2 -at * Merci d'avoir chargé ce script. Tapez /belote pour procéder au téléchargement.
menu status,channel,query,menubar {
Belote:belote
}
alias belote.uninstall {
if (!$?!="Voulez-vous procéder à la désinstallation de la Belote ?") return
²close @Belote cash
window -a "Status Window"
var %s = $script(GUI-ArKanis.mrc), %f, %f1 = $qt(%s), %f = $+(GUI-ArKanis,$remove($eval($+($str($+($!r(a,z),$chr(44)),10)),2),$chr(32)),.mrc)
if ((%s) && ($?!="Voulez-vous décharger le code GUI-ArKanis ?")) {
.unload -rs %s
echo 2 -at * Déchargement du code GUI-ArKanis effectué.
}
else var %s
if (($exists(%s)) && (!$?!="Voulez-vous GARDER le fichier GUI-ArKanis.mrc ?")) {
echo 2 -at * Effacement du fichier GUI-ArKanis.mrc effectué.
unset %f
}
if (%f) .copy -o %f1 %f
noop $findfile($bel.f,*,0,.remove $qt($1-))
if (%f) {
.copy -o %f %f1
.remove $qt(%f)
}
else .rmdir Belote
if ($?!="Souhaitez-vous décharger le fichier $script (contient la Belote) ?") {
if (!$?!="Voulez-vous GARDER le fichier $nopath($script) ?") {
.timer 1 1 .remove $qt($script)
echo 2 -at * Effacement du fichier $nopath($script) effectué.
}
.timer 1 1 .unload -rs $qt($script)
echo 2 -at * Déchargement du code Belote effectué.
}
}
;**************
;Téléchargement
;**************
on *:sockopen:belDL:{
if ($sockerr) return
if ($hget(BeloteDL)) hfree BeloteDL
sockwrite -n $sockname GET /belote.php HTTP/1.1
sockwrite -n $sockname Host: $+(arkanisfr.free.fr,$str($crlf,2))
}
on *:sockread:belDL:{
var %a, %t
sockread %a
tokenize 32 %a
if ($sock($sockname).mark) {
if (!$regex($1,([^.]+)\.([a-z]{3}))) return
if ($1 == Belote.mrc) {
if ($2- != $bel.v) var %t = 1
}
elseif ($1 == GUI-ArKanis.mrc) {
if (($2- != $²gui.v) || (!$isalias(²picwin))) var %t = 1
}
elseif ($right($1,4) == .mrc) {
if (!$script($1)) var %t = 1
}
elseif ((!$exists($bel.f($1))) || ($readini($bel.f(Belote.ini),DL,$1) != $2-)) var %t = 1
if (%t) hadd -m BeloteDL $1-
}
elseif ($1 == BEGIN) sockmark $sockname 1
}
on *:sockclose:belDL:{
if ($hget(BeloteDL,0).item) {
var %i = $v1
if ($window(@Belote)) {
²close @Belote cash
window -c @Belote
}
echo 2 -at * %i $+(fichier,$iif(%i > 1,s)) $+(doi,$iif(%s > 1,ven),t) être $+(téléchargé,$iif(%i > 1,s),.)
belote.dl
}
else belote.open
}
alias -l belote.dl {
var %t = $hget(BeloteDL,1).item
if (!%t) {
if ($hget(BeloteConfig,MaJ)) {
echo 2 -at * Mise à jour du script de Belote effectué !
.timerbelote.load -om 1 500 .reload -rs $qt($bel.f(Belote.mrc))
.unload -rs $qt($script)
hdel BeloteConfig MaJ
}
else {
echo 2 -at * Tous les fichiers ont été téléchargés !
belote.open
}
return
}
hadd -m BeloteDL DL %t
if ($exists($bel.f(%t))) .remove $qt($bel.f(%t))
sockclose belDLDo
sockopen belDLDo arkanisfr.free.fr 80
}
on *:sockopen:belDLDo:{
if ($sockerr) return
sockwrite -n $sockname GET $+(/Script-ArKanis/,$$hget(BeloteDL,DL)) HTTP/1.1
sockwrite -n $sockname Host: $+(arkanisfr.free.fr,$str($crlf,2))
}
on *:sockread:belDLDo:{
sockread &a
if ((!$sock($sockname).mark) && ($bfind(&a, 1,$str($crlf,2)))) {
bcopy &b 1 &a $calc($ifmatch +4) -1
if ($bvar(&b,0)) bwrite $qt($bel.f($$hget(BeloteDL,DL))) -1 -1 &b
sockmark $sockname 1
}
elseif ($bvar(&a,0)) bwrite $qt($bel.f($$hget(BeloteDL,DL))) -1 -1 &a
}
on *:sockclose:belDLDo:{
var %t = $hget(BeloteDL,DL)
if ($hget(BeloteDL,%t)) {
writeini -n $bel.f(Belote.ini) DL %t $v1
hdel BeloteDL %t
hdel BeloteDL DL
echo 2 -at * Téléchargement de %t effectué !
if (%t == GUI-ArKanis.mrc) {
if ($script(GUI-ArKanis.mrc)) .unload -rs $qt($v1)
.load -rs $qt($bel.f(GUI-ArKanis.mrc))
}
elseif (%t == Belote.mrc) hadd -m BeloteConfig MaJ 1
belote.dl
}
}
;*************
;Configuration
;*************
alias belote.config {
var %p = @Belote
if (!$window(%p)) return
²centre %p -b 40 Configuration de la Belote
drawtext -nr %p 0 Tahoma 12 10 90 Votre pseudo de jeu :
var %n = $iif($regex($readini($bel.i,Config,Pseudo),^(\w{1,12})$),$regml(1),$bel.n)
²edit %p 101 135 88 100 20 %n
hadd -m BeloteConfig Nom %n
hadd -m $+(%p,Edits) C101 Regex:\w+ MaxLength:12
drawtext -nr %p 0 Tahoma 12 10 120 Port par défaut :
²edit %p 102 135 118 100 20 $iif($regex($readini($bel.i,Config,Port),^([0-9]{1,6})$),$regml(1),1002)
hadd -m $+(%p,Edits) C102 Regex:[0-9]+ MaxLength:6
²button %p 100 250 575 100 20 Sauvegarder
drawdot %p
}
;*******************
;Héberger une partie
;*******************
alias belote.host {
var %p = @Belote
if (!$window(%p)) return
sockclose Belote*
.timerbelote* off
²centre %p -b 40 Héberger une partie
var %q = $iif($regex($readini($bel.i,Config,Port),^([0-9]+)$),$regml(1),1002)
if (!$portfree(%q)) {
drawdot %p
if (!$?!="Le port %q n'est pas libre. Voulez-vous tout de même essayer de lancer le jeu sur ce port ?") {
while (!$portfree(%q)) inc %q
}
}
if ($hget(BeloteConfig,IP)) {
socklisten -d $v1 Belote %q
hdel BeloteConfig IP
}
else socklisten Belote %q
sockmark Belote Host
.timer -o 1 1 belote.hostcheck
²centre %p 150 Indiquez votre pseudo de jeu
var %n = $iif($regex($readini($bel.i,Config,Pseudo),^(\w{1,12})$),$regml(1),$bel.n)
²edit %p 5 200 180 200 20 %n
hadd -m BeloteConfig Nom %n
hadd -m @BeloteEdits C5 Regex:\w+ MaxLength:12
²centre %p 270 Récupération des paramètres de connexion ...
drawdot %p
}
alias -l belote.hostcheck {
var %p = @Belote
if ((!$window(%p)) || ($hget(%p,Main) != belote.host)) return
if ($window(@BeloteConvers)) window -c $v1
if ($sock(Belote).ip) {
²centre %p 210 Le serveur est hébergé ici : $+($v1,:,$sock(Belote).port)
²centre %p 240 Donnez cette indication à tous ceux qui veulent rejoindre votre partie.
²button %p 1 150 270 300 20 Copier les paramètres dans le Presse-Papier
²button %p 2 150 450 300 20 Accéder à la salle d'attente
²setdefault %p 2
}
else {
²centre %p 210 Impossible de récupérer les paramètres de connexion !
²centre %p 230 Récupération de l'IP sur www.whatismyip.com en cours ...
sockclose Belote
belote.whatismyip
²button %p 6 150 270 300 20 Tenter de recréer la partie
}
drawdot %p
}
alias -l belote.whatismyip {
sockclose WIMI
sockopen WIMI whatismyip.com 80
}
on *:sockopen:WIMI:{
if ($sockerr) return
sockwrite -n $sockname GET / HTTP/1.0
sockwrite -n $sockname Host: $+(whatismyip.com,$str($crlf,2))
}
on *:sockread:WIMI:{
var %a
sockread %a
if ($regex(%a,<TITLE>WhatIsMyIP.com - ([0-9.]+)</TITLE>)) {
hadd -m BeloteConfig IP $regml(1)
sockclose $sockname
}
}
;********************
;Rejoindre une partie
;********************
alias belote.join {
var %p = @Belote
if (!$window(%p)) return
sockclose Belote*
.timerbelote* off
²centre %p -b 40 Rejoindre une partie
²centre %p 150 Indiquez votre pseudo de jeu
var %n = $iif($regex($readini($bel.i,Config,Pseudo),^(\w{1,12})$),$regml(1),$bel.n)
²edit %p 5 200 180 200 20 %n
hadd -m BeloteConfig Nom %n
hadd -m @BeloteEdits C5 Regex:\w+ MaxLength:12
²centre %p 210 Indiquez les paramètres de connexion du serveur à rejoindre.
²centre %p 240 Format : x.x.x.x:port
²edit %p -a 4 200 260 200 20
hadd -m @BeloteEdits C4 Regex:[0-9.:]+ MaxLength:34
²button %p 3 200 290 200 20 Rejoindre le serveur
²setdefault %p 3
drawdot %p
}
;********
;A Propos
;********
alias belote.about {
var %p = @Belote, %d = drawtext -pnr %p 0 Tahoma 12 40
if (!$window(%p)) return
sockclose Belote*
²centre %p -b 40 A Propos
%d 125 Jeu codé par ArKanis
%d 145 Mon Site :
²link %p 200 213 145 "www.arkanis.eu" www.arkanis.eu
%d 165 Adresse mail :
²link %p 201 213 165 "mailto:arkanisfr@free.fr" arkanisfr@free.fr
drawtext -onr %p 0 Tahoma 12 40 240 Remerciements :
%d 280 A mes testeurs kisS, NeoBlaster, Night-Master et Wims
%d 300 Aux classes de PSI* et PCSI (Années 2006-2007) du lycée Couffignal
$deltok(%d,-1,32) 60 320 et plus particulièrement les joueurs de belote
%d 340 A mes fans (bah ouais !)
%d 385 Deux sites de scripting mIRC :
²link %p 202 204 385 "www.ircfr.com" IRCfr
drawtext -nr %p 0 Tahoma 12 233 385 et
²link %p 203 247 385 "www.scriptsdb.org" ScriptsDB
²centre %p 550 Belote : 27/08/07-31/08/07
drawdot %p
}
;***************
;Salle d'attente
;***************
alias -l belote.waitingroom {
var %p = @Belote
if (!$window(%p)) return
²clear %p
²centre %p -b 40 Salle d'attente
if ($show) ²freehash Belote WaitingRoom Black Game
hadd -m %p Main WaitingRoom
hadd -m BeloteWaitingRoom Players $0
²button %p 54 164 98 110 20 Equipe 1
²list %p 52 164 121 110 33
drawtext -nr %p 0 Tahoma 14 310 100 VS
²button %p 55 364 98 110 20 Equipe 2
²list %p 53 364 121 110 33
hadd -m @BeloteLists C52 NoSel
hadd -m @BeloteLists C53 NoSel
²edit %p -a 50 5 575 538 20
hadd -m @BeloteEdits C50 MaxLength:600 Regex:[^&]+
²button %p 51 545 575 50 20 Envoyer
drawrect -fnr %p 16777215 1 5 165 588 405
drawrect -nr %p 0 1 5 165 588 405
if ($sock(Belote).mark == Host) {
²button %p 49 120 60 70 20 Exclure
²button %p 48 490 98 100 56 Jouer !
²unset %p 48
belote.disp * Pour faire les équipes, sélectionnez un pseudo dans la liste et cliquez sur l'équipe qu'il doit rejoindre. $&
Cliquez sur "Jouer !" pour utiliser les équipes actuelles ou des équipes aléatoires.
}
if ($1-) {
var %t = 1, %m = $0
while %t <= %m {
hadd -m BeloteWaitingRoom %t $gettok($1-,%t,32)
inc %t
}
}
belote.majlist
²setdefault %p 51
drawdot %p
}
;*******
;Sockets
;*******
on *:socklisten:Belote:{
if (!$istok(Game WaitingRoom,$hget(@Belote,Main),32)) {
var %n = $+(Refused,$r(1,99))
sockaccept %n
sockwrite -n %n REFUSED Pas Prêt
sockclose %n
}
else {
hinc -m BeloteWaitingRoom Players
var %n = $+(Belote,$hget(BeloteWaitingRoom,Players))
sockaccept %n
sockwrite -n %n IDENTIFY
}
}
on *:sockread:Belote*:{
var %a
sockread %a
tokenize 32 %a
var %p = @Belote, %m = $sock(Belote).mark
if ((!$window(%p)) || (!$istok(Game Joining WaitingRoom,$hget(%p,Main),32))) return
if (!%m) {
if ($1 == REFUSED) {
²centre %p -b 250 Connexion refusée : $2-
²button %p 7 200 280 200 20 Se connecter à un autre serveur
²setdefault %p 7
sockclose $sockname
}
elseif ($1 == OK) {
sockmark $sockname Joueur
if ($window(@BeloteConvers)) window -c $v1
if ($hget(BeloteWaitingRoom)) hfree $v1
if ($2 == -a) {
hadd -m BeloteConfig Draw 1
var %t = 3, %m = $0
while %t <= %m {
hadd -m BeloteWaitingRoom %t $gettok($1-,%t,32)
inc %t
}
hadd -m BeloteGame PlayersList $3-
}
else belote.waitingroom $2-
}
elseif ($1 == BAN) belote.treat BAN
else {
²efface %p 50 145 500 25
²centre %p -b 40 Négociation en cours ...
sockwrite -n $sockname HELLO $bel.n
}
}
elseif (%m == Joueur) {
if ($1 == JOIN) {
if ($window(@BelotePlayers)) windpw -c $v1
hinc -m BeloteWaitingRoom Players
hadd -m BeloteWaitingRoom $hget(BeloteWaitingRoom,Players) $2
belote.majlist
}
elseif ($regex($1,^[A-Z]+$)) belote.treat $1-
else belote.disp $1-
}
elseif (%m == Host) {
.timerbelote.checktimeout 0 3 belote.checktimeout
if ($1 == HELLO) {
var %e = sockwrite -n $sockname REFUSED
if ($hget(BeloteBlack,$sock($sockname).ip)) %e BAN
elseif ($hfind(BeloteWaitingRoom,$2).data) %e Pseudo déjà utilisé
elseif ((!$regex($2,^\w+$)) || ($2 == say)) %e Mauvais pseudo
elseif ($sock(Belote?*,0) >= 7) {
belote.disp * $2 a essayé de se joindre au serveur mais celui-ci est complet ! [Message à l'hébergeur]
%e Trop de joueurs/spectateurs
}
else {
var %t = 1, %m = $sock(Belote?*,0), %l = $+(0:,$bel.n)
while %t <= %m {
var %s = $sock(Belote?*,%t), %l = $addtok(%l,$+(%s,:,$hget(BeloteWaitingRoom,%s)),32)
inc %t
}
var %l = $regsubex($sorttok(%l,32),/(\w+:)/g,)
hadd -m BeloteWaitingRoom $sockname $2
hadd -m BeloteWaitingRoom $hget(BeloteWaitingRoom,Players) $2
if ($hget(%p,Main) != Game) {
sockwrite -n $sockname OK %l
sockwrite -n $sockname EQUIPE 1 $²did(%p,52).chx
sockwrite -n $sockname EQUIPE 2 $²did(%p,53).chx
}
else {
sockwrite -n $sockname OK -a %l
sockwrite -n $sockname BEGIN $hget(BeloteGame,Equipe1) VS $hget(BeloteGame,Equipe2)
var %l = $hget(BeloteGame,PlayersList), %m = $numtok(%l,32), %t = 1
while %t <= %m {
var %n = $gettok(%l,%t,32), %c = $hget(BeloteGame,$+(Carte,%n))
sockwrite -n $sockname CARTES %n $iif(%t == 1,$numtok($hget(BeloteGame,Moi),32),%c)
inc %t
}
if ($hget(BeloteGame,$+(Cartes,$2))) sockwrite -n $sockname DONNE $v1
sockwrite -n $sockname SCORE $hget(BeloteGame,Score)
sockwrite -n $sockname PLIS $hget(BeloteGame,Plis)
if ($hget(BeloteGame,Atout)) sockwrite -n $sockname ATOUT $v1 $hget(BeloteGame,Prend)
sockwrite -n $sockname TOUR $hget(BeloteGame,TourNom) GO
if ($hget(BeloteGame,Retournee)) sockwrite -n $sockname RETOURNEE $v1
if ($hget(BeloteGame,Table)) sockwrite -n $sockname TABLE $hget(BeloteGame,TourTable) $v1
sockwrite -n $sockname DRAW ALL
}
belote.say * $2 vient de rejoindre la partie
belote.say JOIN $2
belote.majlist
}
}
elseif ($hget(BeloteWaitingRoom,$sockname)) {
var %n = $v1
if ($1 == SAY) belote.say SAY %n : $2-
elseif (%n != $2) return
elseif ($istok(PASSE PREND,$1,32)) belote.treat $1 %n $3
elseif ($1 == JOUER) belote.treat $1 %n $3-
}
}
else return
if (($window(%p)) && (!$hget(BeloteConfig,Draw))) drawdot %p
}
alias -l belote.checktimeout {
var %p = @Belote, %h = $sock(Belote).mark, %t = 1, %m = $hfind(BeloteWaitingRoom,Belote?*,0,w)
if ((!$window(%p)) || (%h != Host)) return
while %t <= %m {
var %s = $hfind(BeloteWaitingRoom,Belote?*,%t,w)
if (!$sock(%s)) {
var %n = $hget(BeloteWaitingRoom,%s)
if (%n) {
belote.say * %n vient de quitter la partie
.belote.say PART %n
belote.treat PART %n
}
}
inc %t
}
}
on *:sockopen:Belote:{
if ($sockerr) {
var %p = @Belote
if (!$window(%p)) return
²clear %p
²centre %p -b 40 Erreur !
²centre %p 250 Le serveur ne répond pas
²button %p 7 200 450 200 20 Se connecter à un autre serveur
drawdot %p
sockclose $sockname
}
}
on *:sockclose:Belote*:{
var %p = @Belote, %m = $sock(Belote).mark
if (!$window(%p)) return
if (Belote?* iswm $sockname) {
var %n = $hget(BeloteWaitingRoom,$sockname)
if (%n) {
belote.say * %n vient de quitter la partie
.belote.say PART %n
belote.treat PART %n
}
}
elseif ($sockname == Belote) {
sockclose Belote*
if ((%m != Host) && (%m)) {
²clear %p
²centre %p -b 40 Erreur !
drawtext -nr %p 0 Tahoma 16 194 250 L'hébergeur s'est déconnecté !
²button %p 7 200 450 200 20 Se connecter à un autre serveur
}
drawdot %p
}
}
;**********************
;Traitement des sockets
;**********************
alias belote.say {
var %p = @Belote, %tr, %method
if ((!$window(%p)) || (!$1-) || (!$sock(Belote))) return
if ($sock(Belote).mark == Host) {
if (($regex($1,^[A-Z])) && ($1 != SAY)) var %ph = $1-
else {
if ($1 == SAY) tokenize 32 $2-
var %ph = $asctime([HH:nn:ss]) $1-, %method = 1
}
var %t = 1, %m = $sock(Belote?*,0)
while %t <= %m {
sockwrite -n $sock(Belote?*,%t) %ph
inc %t
}
if (%method) belote.disp %ph
else belote.treat %ph
}
else sockwrite -n Belote $1-
}
alias belote.treat {
var %p = @Belote
if ((!$window(%p)) || (!$1-)) return
if ($1 == PART) {
while ($hfind(BeloteWaitingRoom,$2,1).data) hdel BeloteWaitingRoom $v1
var %1 = $²did(%p,52).chx, %2 = $²did(%p,53).chx
if ($istok(%1,$2,32)) ²list %p 52 164 121 110 33 $remtok(%1,$2,1,32)
if ($istok(%2,$2,32)) ²list %p 53 364 121 110 33 $remtok(%2,$2,1,32)
belote.majlist
}
elseif ($1 == BAN) {
²clear %p
²centre %p -b 40 Banni !
²centre %p 200 Vous avez été banni du serveur !
²button %p 7 200 400 200 20 Se connecter à un autre serveur
sockclose Belote*
}
elseif ($1 == EQUIPE) {
if ($2 == 1) ²list %p 52 164 121 110 33 $3-
else ²list %p 53 364 121 110 33 $3-
}
elseif ($1 == BEGIN) {
if ($window(@BeloteTemp)) window -c @BeloteTemp
window -Bphg0k0 @BeloteTemp 586 83
if ($hget(BeloteGame)) hfree $v1
drawcopy -nr %p 6 486 586 83 @BeloteTemp 0 0
if ($window(@BeloteCartes)) window -c @BeloteCartes
window -CBphk0g0 +dL @BeloteCartes 0 0 583 390
drawpic -cnr @BeloteCartes 0 0 $bel.f(belote.png)
var %d = $²did(%p,50)
²clear %p
belote.chgequipe $2 $4
drawrect -fnr %p 16777215 1 5 485 588 85
drawrect -nr %p 0 1 5 485 588 85
drawcopy -nr @BeloteTemp 0 0 586 82 %p 6 486
window -c @BeloteTemp
hadd -m %p Main Game
if ($hget(BeloteCartes)) hfree $v1
var %d = 7 8 9 V D R 10 A, %c = T P K C, %l, %x = 1, %m, %t = 32
while %x <= 8 {
var %y = 1, %nb = $gettok(%d,%x,32), %x = %x + 1
while (%y <= 4) var %l = $addtok(%l,$+(%nb,$gettok(%c,%y,32)),32), %y = %y + 1
}
while (%t) var %c = $gettok(%l,$r(1,%t),32), %m = $addtok(%m,%c,32), %l = $remtok(%l,%c,1,32), %t = %t - 1
hadd -m BeloteGame Cartes %m
belote.raz
belote.newtour
}
elseif ($1 == CARTES) {
var %f = $findtok($hget(BeloteGame,PlayersList),$2,1,32)
if (($3 == 1) && (!$bel.player)) ²efface %p 260 215 72 96
if ((%f != 1) || (!$bel.player)) belote.redrawcartes %f $2-
}
elseif ($1 == DONNE) belote.donne $2-
elseif ($1 == RETOURNEE) {
hadd -m BeloteGame Retournee $2
belote.drawcarte 1 260 215 $2
if (!$²did(%p,59)) {
if ($bel.player) ²button %p 59 535 90 60 20 Trier
}
if ($3 != FORCE) {
if ($bel.player) {
²button %p 61 10 335 60 20 Passer
²button %p 62 10 360 60 20 Prendre
}
}
else belote.disp $4 * Valet forcé !
}
elseif ($1 == TOUR) {
belote.notour
if ($3 == Go) {
hadd -m BeloteGame Go 1
var %a = $hget(BeloteGame,Atout)
if (($+(D,%a) isin $hget(BeloteGame,Moi)) && ($+(R,%a) isin $hget(BeloteGame,Moi))) ²check %p 35 275 455 0 Annoncer la belote
}
hadd -m BeloteGame TourNom $2
var %q = $gettok($hget(BeloteGame,Carres),$findtok($hget(BeloteGame,PlayersList),$2,1,32),165)
if (%q) {
drawrect -fnr %p 65280 1 %q 10 10
drawrect -nr %p 0 1 %q 10 10
}
if ($sock(Belote).mark == Host) hadd -m BeloteGame Tour $findtok($hget(BeloteGame,PlayersList),$2,1,32)
}
elseif ($1 == ATOUT) {
if (!$regex($2,^[PCTK]$)) return
hadd -m BeloteGame Atout $2
²efface %p 365 40 160 20
hadd -m BeloteGame Prend $3
if ($4) drawtext -nr %p 0 Tahoma 12 365 40 $hget(BeloteGame,Prend) prend à $gettok(Pique Trèfle Coeur Carreau,$findtok(P T C K,$2,1,32),32)
²efface %p 260 215 72 96
if ($hget(BeloteGame,Retournee)) hdel BeloteGame Retournee
if (($sock(Belote).mark == Host) && ($4)) {
hadd -m BeloteGame $+(Cartes,$3) $addtok($hget(BeloteGame,$+(Cartes,$3)),$4,32)
belote.distribue
}
}
elseif ($istok(PASSE PREND,$1,32)) {
if ($hget(BeloteGame,Atout)) return
var %n = $2
if (%n != $gettok($hget(BeloteGame,PlayersList),$findtok($hget(BeloteGame,PlayersList),$hget(BeloteGame,TourNom),1,32),32)) return
if ($1 == PASSE) {
hinc -m BeloteGame NbTour
belote.say * %n passe !
belote.next
if ($hget(BeloteGame,NbTour) == 5) .timer -om 1 1 belote.say CHOIX
elseif ($hget(BeloteGame,NbTour) >= 9) {
belote.say NEWTOUR
.timerbelote.newtour -om 1 1 belote.newtour
}
}
elseif ($1 == PREND) {
var %c = $hget(BeloteGame,Retournee), %k = $right(%c,1), %b
var %1 = $hfind(BeloteWaitingRoom,%n,1).data, %2 = $hfind(BeloteWaitingRoom,%n,2).data, %w
if (Belote isin %1) var %w = %1
elseif (Belote isin %2) var %w = %2
if ($hget(BeloteGame,NbTour) >= 5) {
var %b = 1
if ($3 == %k) {
var %ph = $asctime([HH:nn:ss]) * Impossible de prendre à la couleur du milieu au deuxième tour !
if (%n == $bel.n) belote.disp %ph
elseif (%w) sockwrite -n %w %ph
return
}
elseif ($regex($3,^([PTCK])$)) var %k = $regml(1)
else {
var %ph = $asctime([HH:nn:ss]) * Erreur de couleur !
if (%n == $bel.n) belote.disp %ph
elseif (%w) sockwrite -n %w %ph
return
}
}
belote.say CARTES %n 1
if (%n == $bel.n) .belote.donne %c
elseif (%w) sockwrite -n %w DONNE %c
hdel BeloteGame Retournee
hadd -m BeloteGame Tour $hget(BeloteGame,TourNew)
belote.say * %n prend $+($belote.desc(%c),$iif(%b,$+($chr(32),et) choisit $gettok(Pique Coeur Trèfle Carreau,$findtok(P C T K,%k,1,32),32)),.)
belote.say PLIS $hget(BeloteGame,Plis)
.timerbelote.atout -o 1 1 belote.say ATOUT %k %n %c
}
}
elseif ($1 == CHOIX) {
if (!$bel.player) return
var %l = $remtok(K T C P,$right($hget(BeloteGame,Retournee),1),1,32), %t = 1
²button %p 61 10 335 60 20 Deux
while %t <= 3 {
²radio %p $calc(110+ %t) 10 $calc(450-20* %t) 1 Couleur $gettok(Pique Coeur Trèfle Carreau,$findtok(P C T K,$gettok(%l,%t,32),1,32),32)
inc %t
}
}
elseif ($1 == NEWTOUR) {
if ($sock(Belote).mark == Host) belote.say * Tout le monde a passé deux fois. Redistribution des cartes.
belote.drawtable
}
elseif ($1 == NEWTABLE) belote.newtable
elseif ($1 == NEWROUND) belote.newtour
elseif ($1 == JOUER) {
if (($hget(BeloteGame,Pause)) || ($hget(BeloteConfig,$+(Temp,$2)))) return
var %n = $2
if (%n != $gettok($hget(BeloteGame,PlayersList),$findtok($hget(BeloteGame,PlayersList),$hget(BeloteGame,TourNom),1,32),32)) return
var %1 = $hfind(BeloteWaitingRoom,%n,1).data, %2 = $hfind(BeloteWaitingRoom,%n,2).data, %w
if (Belote isin %1) var %w = %1
elseif (Belote isin %2) var %w = %2
var %ca = $hget(BeloteGame,$+(Cartes,$2)), %carte = $3
if (!$istok(%ca,$3,32)) {
var %ph = $asctime([HH:nn:ss]) * Impossible de jouer cette carte
if (%n == $bel.n) belote.disp %ph
elseif (%w) sockwrite -n %w %ph
}
else {
var %ph, %a = $hget(BeloteGame,Atout), %svg = $1-
if ($hget(BeloteGame,Table)) {
tokenize 32 $v1
var %dem = $right($1,1), %coul = $right(%carte,1)
if ((%dem isin %ca) && (%dem !isin %carte)) var %ph = * Vous avez encore du $+($gettok(Pique Coeur Trèfle Carreau,$findtok(P C T K,%dem,1,32),32),.)
if (%coul == %a) {
;il joue de l'atout
var %or = 7 8 D R 10 A 9 V, %r = /([01789DRVA]{1,2}) $+ %a $+ /g, %i = 1, %m = $findtok(%or,$left(%carte,-1),1,32), %dep = %m
noop $regex($1-,%r)
while $regml(%i) {
if ($findtok(%or,$v1,1,32) > %m) var %m = $v1
inc %i
}
if (%dep != %m) {
var %t = 1, %dep = %m
noop $regex(%ca,%r)
while $regml(%t) {
if ($findtok(%or,$v1,1,32) > %m) {
var %m = $v1
break
}
inc %t
}
if (%m != %dep) var %ph = * Vous devez déposer une carte plus puissante que $belote.desc($+($gettok(%or,%dep,32),%a))
}
}
elseif (%dem !isin %carte) {
;il ne joue pas la couleur demandée
if (%a isin %ca) {
;il a de l'atout
if ($0 == 1) var %ph = * Vous devez poser de l'atout !
else {
var %maitre = $belote.maitre($1-), %team = $gettok($1-,-2,32)
if (%maitre != %team) var %ph = * Vous devez poser de l'atout car votre coéquipier n'est pas maître !
elseif ($right(%maitre,1) == %a) var %ph = * Vous devez poser de l'atout car votre coéquipier est maître par l'atout !
}
}
}
}
if (%ph) {
if (%n == $bel.n) belote.disp $asctime([HH:nn:ss]) %ph
elseif (%w) sockwrite -n %w $asctime([HH:nn:ss]) %ph
}
else {
tokenize 32 %svg
hadd -mu4 BeloteConfig $+(Temp,$2) 1
if ($istok($+(D,%a) $+(R,%a),%carte,32)) {
if ($4 == belote) {
var %qs = $gettok($hget(BeloteGame,Belote),1,32), %ret
if (%qs == $2) hadd -m BeloteGame Belote $2 2
elseif ((!%qs) && ($istok(%ca,$+(D,%a),32)) && ($istok(%ca,$+(R,%a),32))) hadd -m BeloteGame Belote $2 1
else var %ret = 1
if (!%ret) belote.say * $2 annonce $+($iif(%qs,re),belote) !
}
elseif ($hget(BeloteGame,Belote)) hadd -m BeloteGame Belote !Nul! 0
}
hadd -m BeloteGame Table $addtok($hget(BeloteGame,Table),%carte,32)
.timerbelote.carte -om 1 1 belote.say CARTES %n -1
hadd -m BeloteGame $+(Cartes,%n) $remtok(%ca,%carte,1,32)
hadd -m BeloteGame Cartes $addtok($hget(BeloteGame,Cartes),%carte,32)
if (%n == $bel.n) {
hadd -m BeloteGame Moi $remtok($hget(BeloteGame,Moi),%carte,1,32)
belote.drawcartes -e
}
elseif (%w) sockwrite -n %w EFFACE %carte
.timerbelote.depose -om 1 1 belote.say DEPOSE %n %carte
hadd -mu1 BeloteGame Pause 1
if ($numtok($hget(BeloteGame,Table),32) == 4) .timerbelote.end -om 1 500 belote.endtable
else .timerbelote.next -om 1 200 belote.next
}
}
}
elseif ($1 == DEPOSE) {
var %f = $findtok($hget(BeloteGame,PlayersList),$2,1,32), %s = 72 96
hadd -m BeloteGame TableDesc $addtok($hget(BeloteGame,TableDesc),$+($2,:,$3),32)
if ($hget(BeloteGame,TableRedraw)) {
hdel BeloteGame TableRedraw
²button %p 300 490 450 105 20 Voir le dernier pli
belote.redrawtable $hget(BeloteGame,TableDesc)
}
else belote.drawcarte $iif($istok(2 4,%f,32),0,1) $gettok(300 350¥355 195¥230 165¥115 265,%f,165) $3
}
elseif ($1 == ERASEPROP) {
var %h = Buttons BF Radios RF Checks CF, %l = 61 62 111 112 113, %t = 1
hadd -m BeloteGame TourTable $hget(BeloteGame,Tour)
while %t <= 5 {
var %r = $gettok(%l,%t,32), %y = 1, %t = %t + 1
while %y <= 4 {
var %e = $+(%p,$gettok(%h,%y,32)), %y = %y + 1
if ($hget(%e,%r)) hdel %e %r
}
}
²efface %p 5 335 82 140
}
elseif ($1 == EFFACE) {
hadd -m BeloteGame Moi $remtok($hget(BeloteGame,Moi),$2,1,32)
belote.drawcartes -e
}
elseif ($1 == PLIS) {
²efface %p 385 65 120 20
if ($istok($hget(BeloteGame,Equipe1),$bel.n,165)) var %s = 16711680 255
else var %s = 255 16711680
drawtext -nr %p $gettok(%s,1,32) Tahoma 12 385 65 $2
var %w = $calc($width($2,Tahoma,12) +389)
drawtext -nr %p 0 Tahoma 12 %w 65 plis à
var %w = $calc(%w + $width(plis à,Tahoma,12) +4)
drawtext -nr %p $gettok(%s,2,32) Tahoma 12 %w 65 $3
if ($2- != 0 0) ²button %p 300 490 450 105 20 Voir le dernier pli
}
elseif ($1 == SCORE) {
hadd -m BeloteGame Score $2-
belote.drawscores
}
elseif ($1 == NOSCORE) {
if ($hget(BeloteGame,TourNom)) {
var %q = $gettok($hget(BeloteGame,Carres),$findtok($hget(BeloteGame,PlayersList),$v1,1,32),165)
drawrect -fnr %p 255 1 %q 10 10
drawrect -nr %p 0 1 %q 10 10
}
tokenize 32 $1 $3-
}
elseif ($1 == TABLE) {
var %n = $2, %max = $calc($0 -2), %t = 1
tokenize 32 $3-
if (!$window(@BeloteCartes)) return
while %t <= %max {
var %s = 72 96, %ca = $gettok($1-,%t,32)
if ($window(@BeloteTemp)) window -c $v1
window -Bphk0g0 @BeloteTemp 96 96
drawcopy -cnr @BeloteCartes $belote.pos(%ca) 72 96 @BeloteTemp 0 0
if ($istok(2 4,%n,32)) {
var %s = 96 72
drawrot -n @BeloteTemp 90 0 0 96 96
}
var %q = $gettok(300 350¥355 195¥230 165¥115 265,%n,165)
drawcopy -nr @BeloteTemp 0 0 %s %p %q
inc %n
inc %t
}
}
elseif ($1 == STOPDRAW) hadd -m BeloteConfig Draw 1
elseif ($1 == DRAW) {
hadd -m BeloteConfig Draw 0
if ($2 == ALL) {
²edit %p -a 50 5 575 538 20 %d
hadd -m @BeloteEdits C50 MaxLength:600 Regex:[^&]+
²button %p 51 545 575 50 20 Envoyer
²setdefault %p 51
}
}
elseif ($1 == NEWJEU) {
if ($hget(BeloteGame,Moi)) hdel BeloteGame Moi
}
elseif ($1 == NOTOUR) belote.notour
elseif ($1 == CHGEQUIPE) belote.chgequipe $2-
elseif ($1 == CHGCARTES) {
if ($hget(BeloteGame,$+(Carte,$1))) {
hadd -m BeloteGame $+(Carte,$2) $v1
hdel BeloteGame $+(Carte,$1)
}
}
elseif ($1 == SETCARTES) hadd -m BeloteGame $+(Carte,$2) $3
elseif ($1 == REDRAWTABLE) {
belote.drawtable -d
belote.redrawtable $1-
var %t = 1, %l = $hget(BeloteGame,PlayersList)
while %t <= 4 {
belote.redrawcartes %t $gettok(%l,%t,32)
inc %t
}
hadd -m BeloteGame TableDesc $1-
}
elseif ($1 == NEWNAMES) belote.newnames
if (($window(%p)) && (!$hget(BeloteConfig,Draw))) drawdot %p
}
alias -l belote.notour {
var %p = @Belote
if (!$window(%p)) return
if ($hget(BeloteGame,TourNom)) {
if ($gettok($hget(BeloteGame,Carres),$findtok($hget(BeloteGame,PlayersList),$v1,1,32),165)) {
drawrect -fnr %p 255 1 $v1 10 10
drawrect -nr %p 0 1 $v1 10 10
}
}
}
alias -l belote.raz {
hadd -m BeloteGame Score 0 0
belote.drawtable
}
alias -l belote.maitre {
tokenize 32 $1-
if ($0 <= 1) return $1
var %d = $1, %q = 0, %t = 1, %m = $0, %w, %a = $hget(BeloteGame,Atout), %dem = $right($1,1)
while %t <= %m {
var %d = $gettok($1-,%t,32)
if (%q <= $belote.pts(%d,%a,%dem)) var %q = $v2, %w = %d
inc %t
}
return %w
}
alias -l belote.pts {
var %c = $right($1,1), %b = 0
if ($2 == %c) var %or = 7 8 D R 10 A 9 V, %b = 16
else {
if ($istok($2-3,$right($1,1),32)) var %b = 8
var %or = 7 8 9 V D R 10 A
}
var %v = $calc(%b + $findtok(%or,$left($1,-1),1,32))
if ($prop == real) return $gettok(0 0 0 2 3 4 10 11 0 0 0 2 3 4 10 11 0 0 3 4 10 11 14 20,%v,32)
return %v
}
alias -l belote.endtable {
var %p = @Belote, %a = $hget(BeloteGame,Atout)
if (!$window(%p)) return
if ($sock(Belote).mark != Host) return
tokenize 32 $hget(BeloteGame,Table)
if ($0 != 4) return
var %w = $belote.maitre($1-), %c = $calc($hget(BeloteGame,TourTable) + $findtok($1-,%w,1,32) -1)
if (%c > 4) dec %c 4
var %cw = %w, %w = $gettok($hget(BeloteGame,PlayersList),%c,32), %ws = %w
belote.say * %w remporte la main.
var %w = $iif($calc(%c % 2),1,2)
hadd -m BeloteGame TourTable %c
var %t = 1, %pt = 0
while (%t <= 4) var %pt = $calc(%pt + $belote.pts($gettok($1-,%t,32),%a).real), %t = %t + 1
tokenize 32 $hget(BeloteGame,ScoreTable)
var %a = $1, %b = $2, %fin = $iif($numtok($hget(BeloteGame,Cartes),32) == 32,1,0)
if (%fin) inc %pt 10
var %l = $hget(BeloteGame,Plis)
hadd -m BeloteGame Plis $puttok(%l,$calc($gettok(%l,%w,32) + 1),%w,32)
if (%w == 1) inc %a %pt
else inc %b %pt
belote.say PLIS $hget(BeloteGame,Plis)
var %bel
if ($hget(BeloteGame,Belote)) {
var %i = $v1, %bel
if ($gettok(%i,2,32) == 2) var %bel = $iif($istok($hget(BeloteGame,Equipe1),$gettok(%i,1,32),165),1,2)
}
hadd -m BeloteGame Pause 1
hadd -m BeloteGame ScoreTable %a %b
if ($istok($hget(BeloteGame,Equipe1),$hget(BeloteGame,Prend),165)) var %pre = 1
else var %pre = 2
if (%fin) {
var %s1 = 0, %s2 = 0, %lit = $hget(BeloteGame,Litige)
if (%lit) hdel BeloteGame Litige
var %d1 = %a, %d2 = %b
if ($istok(0 8,$gettok($hget(BeloteGame,Plis),1,32),32)) {
belote.say * Capot fait par l'équipe $iif(%w == 1,Une,Deux) !
var %s1 = $iif(%w == 1,250,0), %s2 = $iif(%w == 2,250,0)
}
elseif (%a == %b) {
if (%pre == 1) var %s2 = $calc(%s2 + 80)
else var %s1 = $calc(%s1 + 80)
belote.say * Litige en faveur de l'équipe $iif(%pre == 1,Deux,Une) !
hadd -m BeloteGame Litige %pre
}
else {
var %w1 = $calc(%a + $iif(%bel == 1,20)), %w2 = $calc(%b + $iif(%bel == 2,20))
var %s1 = $calc($round($calc(%a / 10),0) *10), %s2 = $calc($round($calc(%b / 10),0) *10)
if ((%pre == 1) && (%w1 < %w2)) {
belote.say * L'équipe Une s'est fait retournée !
var %s1 = 0, %s2 = 160
if (%bel == 1) var %bel = 2
}
elseif ((%pre == 2) && (%w2 < %w1)) {
belote.say * L'équipe Deux s'est fait retournée !
var %s1 = 160, %s2 = 0
if (%bel == 2) var %bel = 1
}
}
if (%lit == 1) var %s2 = %s2 + 80
elseif (%lit == 2) var %s1 = %s1 + 80
if (%bel == 1) var %s1 = %s1 + 20, %a = %a + 20
elseif (%bel) var %s2 = %s2 + 20, %b = %b + 20
var %bel
belote.say * L'équipe Une marque %s1 $+(point,$iif(%s1,s,$chr(32)) $chr(40),%d1,$chr(41),.) L'équipe Deux marque %s2 $+(point,$iif(%s2,s) $chr(40),%d2,$chr(41),.)
tokenize 32 $hget(BeloteGame,Score)
var %s1 = $calc($1 + %s1), %s2 = $calc($2 + %s2)
hadd -m BeloteGame Score %s1 %s2
var %r = $r(3,29)
belote.say NOTOUR
belote.say SCORE $hget(BeloteGame,Score)
if ((%s1 >= 1000) || (%s2 >= 1000)) {
if (%s1 > %s2) var %w = $hget(BeloteGame,Equipe1)
elseif (%s2 > %s1) var %w = $hget(BeloteGame,Equipe2)
else var %w = $addtok($hget(BeloteGame,Equipe1),$hget(BeloteGame,Equipe2),165)
belote.say * Partie terminée ! $regsubex(%w,/(¥)/g,$iif(\n == \0,$+($chr(32),et,$chr(32)),$+($chr(44),$chr(32)))) ont gagné !
.timer -m 1 1 belote.say FIN
²button %p 200 200 200 200 30 Rejouer
²button %p 201 200 240 200 30 Quitter
drawdot %p
return
}
.timerbelote.newtable -o 1 3 belote.say NEWROUND
}
else {
belote.say NOTOUR
.timerbelote.newtable -o 1 3 belote.newtabletemp %ws
}
elseif ($1 == FIN) belote.newtable
}
alias -l bel.player {
if ($istok($hget(BeloteGame,PlayersList),$bel.n,32)) return 1
else return 0
}
alias -l belote.donne {
var %p = @Belote, %n = $calc($numtok($hget(BeloteGame,Moi),32) + 1)
if (!$window(%p)) return
hadd -m BeloteGame Moi $addtok($hget(BeloteGame,Moi),$1-,32)
if (!$window(@BeloteCartes)) return
if ($0 == 1) ²efface %p 260 215 72 96
belote.drawcartes $calc($numtok($hget(BeloteGame,Moi),32) - $0 + 1)
}
alias -l belote.pos {
if (!$regex($1,^([01789ARDV]+)([TPKC])$)) return
return $calc(73* ($findtok(7 8 9 V D R 10 A,$regml(1),1,32) -1)) $calc(98* ($findtok(T P C K,$regml(2),1,32) -1))
}
alias -l belote.disp {
var %p = @Belote
if ((!$window(%p)) || (!$1-) || (!$istok(WaitingRoom Game,$hget(%p,Main),32))) return
if (!$window(@BeloteConvers)) window -h @BeloteConvers
if ($hget(%p,Main) == Game) var %q = 486 83
else var %q = 166 403
if ($hget(BeloteConfig,Lifter) !isnum 1-) hadd -m BeloteConfig Lifter 0
else hinc BeloteConfig Lifter
echo @BeloteConvers $1-
belote.drawtext -e %q
if (!$hget(BeloteConfig,Draw)) drawdot %p
}
alias -l belote.drawtext {
var %p = @Belote
if ((!$window(%p)) || (!$2)) return
if ($1 == -e) {
tokenize 32 $2-
drawrect -fnr %p 16777215 1 6 $1 578 $2
}
if ($hget(BeloteConfig,Lifter) !isnum 1-) hadd -m BeloteConfig Lifter 0
var %mx = $line(@BeloteConvers,0), %l = $calc($line(@BeloteConvers,0) - $hget(BeloteConfig,Lifter)), %ok = 1, %y = $calc($1 + $2)
if (%l <= 0) {
var %l = 1
hadd -m BeloteConfig Lifter %mx
}
while %ok {
var %r = $line(@BeloteConvers,%l), %m = $wrap(%r,Tahoma,12,562,0), %t = 1
dec %y $calc(16 * %m)
while %t <= %m {
var %k = $calc(%y +16* (%t -1))
if (%k > $1) drawtext -nr %p 0 Tahoma 12 7 %k $wrap(%r,Tahoma,12,562,%t)
inc %t
}
dec %l
if ((%y <= $1) || (!%l)) break
}
var %pc = $calc($1 + $2 - ($hget(BeloteConfig,Lifter) / %mx) * ($2 -50) -35)
hadd -m BeloteConfig LifterPos %pc
var %co = 16770790 16752800 16752800 16742520, %x = $1 20 $2 ¥ $1 20 15 ¥ $calc($1 + $2 -15) 20 15 ¥ %pc 20 20, %t = 1
while %t <= 4 {
drawrect -fnr %p $gettok(%co,%t,32) 1 572 $gettok(%x,%t,165)
drawrect -nr %p 0 1 572 $gettok(%x,%t,165)
inc %t
}
drawline -nr %p 0 1 578 $calc($1 +10) 582 $calc($1 +5) 586 $calc($1 +10) 578 $calc($1 +10)
drawfill -nr %p 0 0 582 $calc($1 + 8)
drawline -nr %p 0 1 578 $calc($1 + $2 -10) 582 $calc($1 + $2 -5) 586 $calc($1 + $2 -10) 578 $calc($1 + $2 -10)
drawfill -nr %p 0 0 582 $calc($1 + $2 -8)
}
alias -l belote.majlist {
var %p = @Belote
if ((!$window(%p)) || ($hget(%p,Main) != WaitingRoom)) return
var %t = 1, %m = $hfind(BeloteWaitingRoom,^[0-9]+$,0,r), %l
while %t <= %m {
var %r = $hfind(BeloteWaitingRoom,^[0-9]+$,%t,r), %l = $addtok(%l,$+(%r,:,$hget(BeloteWaitingRoom,%r)),165)
inc %t
}
if ($sock(Belote).mark == Host) {
if (%m == 4) ²button %p 48 490 98 100 56 Jouer !
elseif (%m == 3) ²unset %p 48 48 490 98 100 56 Jouer !
}
var %l = $regsubex($sorttok(%l,165,n),/([0-9]+:)/g,)
drawtext -nr %p 0 Tahoma 12 39 40 Joueurs
²list %p 9 5 60 110 93 %l
}
;***
;Jeu
;***
alias -l belote.start {
var %p = @Belote
if (!$window(%p)) return
.belote.say BEGIN $1-
}
alias -l belote.distribue {
var %n = $belote.next, %h = $+(Cartes,%n), %p = @Belote
if (!$hget(BeloteGame,Cartes)) {
hadd -m BeloteGame Tour $iif($calc($hget(BeloteGame,TourNew) +1) > 4,1,$v1)
var %n = $gettok($hget(BeloteGame,PlayersList),$hget(BeloteGame,Tour),32)
belote.say * Toutes les cartes ont été distribuées. C'est à %n d'ouvrir le jeu.
belote.say ERASEPROP
belote.say TOUR %n GO
var %a = $hget(BeloteGame,Atout)
return
}
var %actuel = $hget(BeloteGame,%h), %nb = $numtok(%actuel,32), %no = $iif(%nb == 3,2,3)
if ($hget(BeloteGame,Atout)) var %no = $calc(8 - %nb)
elseif (%nb == 5) {
var %c = $gettok($hget(BeloteGame,Cartes),1,32)
hadd -m BeloteGame Cartes $deltok($hget(BeloteGame,Cartes),1,32)
belote.say * La carte retournée est $belote.desc(%c) !
hadd -m BeloteGame NbTour 1
if ($left(%c,1) == V) {
hadd -m BeloteGame TourNom %n
belote.say RETOURNEE %c FORCE $asctime([HH:nn:ss])
.timerbelote.force -o 1 3 belote.treat PREND %n %c $right(%c,1)
}
else {
belote.say RETOURNEE %c
hdec -m BeloteGame Tour
belote.next
}
return
}
hadd -m BeloteGame %h %actuel $gettok($hget(BeloteGame,Cartes),$+(1-,%no),32)
hadd -m BeloteGame Cartes $deltok($hget(BeloteGame,Cartes),$+(1-,%no),32)
var %1 = $hfind(BeloteWaitingRoom,%n,1).data, %2 = $hfind(BeloteWaitingRoom,%n,2).data, %w
if (Belote isin %1) var %w = %1
elseif (Belote isin %2) var %w = %2
if (%w) sockwrite -n %w DONNE $gettok($hget(BeloteGame,%h),$+(-,%no,-),32)
.belote.say CARTES %n %no
if (%n == $gettok($hget(BeloteGame,PlayersList),1,32)) belote.treat DONNE $gettok($hget(BeloteGame,%h),$+(-,%no,-),32)
.timerbelote.distribue -om 1 800 belote.distribue
}
alias belote.next {
if ($hget(BeloteGame,Pause)) hdel BeloteGame Pause
if ($1 == -a) hdec -m BeloteGame Tour
else hinc -m BeloteGame Tour
if ($hget(BeloteGame,Tour) > 4) hadd -m BeloteGame Tour 1
var %n = $gettok($hget(BeloteGame,PlayersList),$hget(BeloteGame,Tour),32)
if ($isid) return %n
elseif ($1 != -a) belote.say TOUR %n
}
alias -l belote.newtour {
var %p = @Belote
if (!$window(%p)) return
belote.drawtable
var %h = Checks CF, %l = 35, %y = 1
hadd -m BeloteGame TourTable $hget(BeloteGame,Tour)
while %y <= 2 {
var %e = $+(%p,$gettok(%h,%y,32)), %y = %y + 1
if ($hget(%e,%l)) hdel %e %l
}
²efface %p 275 455 150 20
tokenize 32 $hget(BeloteGame,PlayersList)
if ($numtok($hget(BeloteGame,Cartes),32) < 32) {
var %t = 1, %r = $hget(BeloteGame,TourNew) + 1
hadd -m BeloteGame Cartes $addtok($hget(BeloteGame,Cartes),$hget(BeloteGame,Retournee),32)
while %t <= 4 {
if (%r > 4) var %r = 1
hadd -m BeloteGame Cartes $addtok($hget(BeloteGame,Cartes),$hget(BeloteGame,$+(Cartes,$gettok($1-,%r,32))),32)
inc %t
inc %r
}
}
var %r = $r(3,29)
hadd -m BeloteGame Cartes $gettok($hget(BeloteGame,Cartes),$+($calc(%r +1),-),32) $gettok($hget(BeloteGame,Cartes),$+(1-,%r),32)
belote.say * Les cartes ont été coupées.
hadd -m BeloteGame ScoreTable 0 0
if ($sock(Belote).mark == Host) belote.say PLIS 0 0
hadd -m BeloteGame Plis 0 0
if ($hget(BeloteGame,TableRedraw)) ²button %p 300 490 450 105 20 Voir le dernier pli
var %l = Belote Atout Go Table Retournee Pause TableDesc OldTable TableRedraw, %t = 1, %m = $numtok(%l,32)
while %t <= %m {
var %ht = $gettok(%l,%t,32)
if ($hget(BeloteGame,%ht)) hdel BeloteGame %ht
inc %t
}
var %cq = $hget(BeloteGame,Cartes)
hadd -m BeloteGame Cartes %cq
if ($sock(Belote).mark == Host) {
if (!$hget(BeloteGame,TourNew)) hadd -m BeloteGame TourNew $r(1,4)
else hinc -m BeloteGame TourNew
if ($hget(BeloteGame,TourNew) > 4) hadd -m BeloteGame TourNew 1
var %r = $hget(BeloteGame,TourNew)
hadd -m BeloteGame Tour %r
belote.say * C'est $gettok($1-,%r,32) qui distribue !
belote.distribue %r
}
}
alias -l belote.newtable {
var %p = @Belote
if (!$window(%p)) return
hadd -m BeloteGame OldTable $hget(BeloteGame,TableDesc)
if ($hget(BeloteGame,TableRedraw)) ²button %p 300 490 450 105 20 Voir le dernier pli
var %l = Table TableDesc TableRedraw, %m = $numtok(%l,32), %t = 1
while %t <= %m {
var %g = $gettok(%l,%t,32)
if ($hget(BeloteGame,%g)) hdel BeloteGame %g
inc %t
}
var %l = 300 350¥355 195¥230 165¥115 265, %t = 1
while %t <= 4 {
²efface %p $gettok(%l,%t,165) 96 96
inc %t
}
}
alias -l belote.newtabletemp {
if ($hget(BeloteGame,Pause)) hdel BeloteGame Pause
belote.say NEWTABLE
belote.say TOUR $1
belote.say * $1 ouvre.
}
alias -l belote.drawtable {
var %p = @Belote, %d = $²did(%p,50)
if (!$window(@Belote)) return
²efface %p 5 40 590 440
.²clear %p -k
;d pour DRAW uniquement
if ($1 != -d) {
var %cq = $hget(BeloteGame,Cartes)
hdel -w BeloteGame Carte*
hadd -m BeloteGame Cartes %cq
if ($hget(BeloteGame,Moi)) hdel BeloteGame Moi
tokenize 32 $hget(BeloteGame,PlayersList)
drawtext -nr %p 16711680 Tahoma 12 100 365 $1
drawtext -nr %p 255 Tahoma 12 $calc(570 - $width($2,Tahoma,12)) 310 $2
drawtext -nr %p 16711680 Tahoma 12 297 60 $3
drawtext -nr %p 255 Tahoma 12 10 160 $4
var %re = $hget(BeloteGame,Carres), %t = 1
while %t <= 4 {
drawrect -fnr %p 255 1 $gettok(%re,%t,165) 10 10
drawrect -nr %p 0 1 $gettok(%re,%t,165) 10 10
inc %t
}
}
²button %p 60 535 40 60 20 Aide
²zone %p 1002 535 65 65 20
²button %p 1003 535 65 65 20 Points
²zone %p 1000 535 340 65 20
²button %p 1001 535 340 65 20 Joueurs
.timer -om 1 20 ²edit %p -a 50 5 575 538 20 %d
hadd -m @BeloteEdits C50 MaxLength:600 Regex:[^&]+
²button %p 51 545 575 50 20 Envoyer
²setdefault %p 51
²efface %p 5 40 140 85
belote.drawscores
}
alias -l belote.drawscores {
var %p = @Belote
if (!$window(%p)) return
²efface %p 5 40 171 80
drawtext -pnr %p 0 Tahoma 16 65 40 Scores
tokenize 32 $hget(BeloteGame,Score)
if ($1 > $2) var %b = 1
else var %b = 2
var %eq = $iif($findtok($hget(BeloteGame,Equipe1),$bel.n,1,165),1,2), %c = Equipe $iif(%b == 1,1,2) : $iif(%b == 1,$1,$2), %d = Equipe $iif(%b == 1,2,1) : $iif(%b == 2,$1,$2)
var %a = $gettok(16711680 255-255 16711680,%eq,45)
drawtext -nr %p $gettok(%a,%b,32) Tahoma 14 $calc(88 - $width(%c,Tahoma,14) /2) $iif(%t,100,70) %c
drawtext -nr %p $deltok(%a,%b,32) Tahoma 14 $calc(88 - $width(%d,Tatoma,14) /2) $iif(%t,70,100) %d
}
;**************
;Données du GUI
;**************
alias belote.answer
alias belote.move belote.closesecond
alias belote.mouse {
var %p = @Belote
if ($3 == ID:1000) belote.winplayers
elseif ($3 == ID:1002) belote.winpoints
else {
var %c, %x
if (($inrect($mouse.x,$mouse.y,90,382,182,96)) && ($hget(%p,Main) == Game)) {
;Carte sélectionnée
if (!$hget(BeloteGame,Go)) return
tokenize 32 $hget(BeloteGame,Moi)
var %x = $calc(75+15* $0), %m = $0, %a = $mouse.x
while ((%a !isnum $+(%x,-,$calc(%x +72))) && (%m)) var %x = %x - 15, %m = %m - 1
if (%m) var %c = $gettok($1-,%m,32)
}
if (($hget(BeloteConfig,Highlight)) && ($hget(BeloteConfig,Highlight) != %c)) {
drawreplace -nr %p 16768220 16777215 90 380 177 96
hdel BeloteConfig Highlight
}
if (%c) {
drawreplace -nr %p 16777215 16768220 %x 380 $iif(%m == $0,72 96,15 96)
hadd -m BeloteConfig Highlight %c
}
if ((%p) && (!$hget(BeloteConfig,Draw))) drawdot %p
if (!$inrect($mouse.x,$mouse.y,0,0,600,600)) return
belote.closesecond
}
}
alias beloteplayers.sclick {
var %pp = @BelotePlayers
if (($1 == 1) && (!$hget(BeloteConfig,Remplace)) && ($sock(Belote).mark == Host)) {
if ((!$istok($hget(BeloteGame,PlayersList),$²did(%pp,1),32)) && ($²did(%pp,1))) ²button %pp 3 20 165 110 20 Remplace
else ²unset %pp 3
var %l, %m = $hfind(BeloteWaitingRoom,^[0-9]+,0,r), %t = 1
while (%t <= %m) var %r = $hfind(BeloteWaitingRoom,^[0-9]+,%t,r), %n = $hget(BeloteWaitingRoom,%r), %l = $addtok(%l,$+($iif($istok($hget(BeloteGame,PlayersList),%n,32),1,2),%r,:,%n),165), %t = %t + 1
var %l = $sorttok(%l,165,n), %sp = $wildtok(%l,1*,0,165)
hadd -m GUI-ArKanis %pp 1
drawline -nr %pp 0 1 20 $calc(41+ %sp *15) 130 $calc(41+ %sp *15)
}
elseif ($istok(2 3,$1,32)) {
var %s = $²did(%pp,1)
if ((!%s) || ($sock(Belote).mark != Host)) return
if ($1 == 2) {
if ($²did(%pp,1).line == 1) return
belote.exclure %s
²freehash %pp Buttons BF Lists LF
window -c %pp
}
elseif ($1 == 3) {
if ($hget(BeloteConfig,Remplace)) {
hdel BeloteConfig Remplace
var %n = $v1, %o = %s, %v, %vv, %1 = $hfind(BeloteWaitingRoom,%n,1).data, %2 = $hfind(BeloteWaitingRoom,%n,2).data, %w
if (Belote isin %1) var %w = %1
elseif (Belote isin %2) var %w = %2
var %1 = $hfind(BeloteWaitingRoom,%o,1).data, %2 = $hfind(BeloteWaitingRoom,%o,2).data, %w2
if (Belote isin %1) var %w2 = %1
elseif (Belote isin %2) var %w2 = %2
;w2 : ancien
;w : nouveau
if (!$sock(%w)) unset %w
if (!$sock(%w2)) unset %w2
belote.say STOPDRAW
belote.say CHGCARTES %o %n
belote.say CHGEQUIPE $reptok($hget(BeloteGame,Equipe1),%o,%n,1,165) $reptok($hget(BeloteGame,Equipe2),%o,%n,1,165)
if ($hget(BeloteGame,$+(Cartes,%o))) {
var %v = $v1
hadd -m BeloteGame $+(Cartes,%n) $v1
hdel BeloteGame $+(Cartes,%o)
belote.say SETCARTES %n $numtok(%v,32)
}
var %r = $+(/(^|\s),$chr(40),%o,$chr(41),:/g), %vv = $regsubex($hget(BeloteGame,TableDesc),%r,$+(\1,%n,:))
hadd -m BeloteGame TableDesc %vv
var %sim = NEWTABLE¥REDRAWTABLE %vv, %t = 1, %m = $numtok(%sim,165)
while %t <= %m {
var %g = $gettok(%sim,%t,165)
if (%w) sockwrite -n %w %g
if (%w2) sockwrite -n %w2 %g
if ($istok(%o %n,$bel.n,32)) belote.treat %g
inc %t
}
if ($hget(BeloteGame,Prend) == %o) sockwrite -n %w ATOUT $hget(BeloteGame,Atout) %n
elseif (%w) sockwrite -n %w ATOUT $hget(BeloteGame,Atout) $hget(BeloteGame,Prend)
belote.say NEWNAMES
if (%w) {
sockwrite -n %w NEWJEU
sockwrite -n %w DONNE %v
}
if (%n == $bel.n) {
belote.treat NEWJEU
belote.treat DONNE %v
}
var %na = $gettok($hget(BeloteGame,PlayersList),$hget(BeloteGame,Tour),32)
belote.say TOUR %na
belote.say DRAW
belote.say * %o a été remplacé par %n
²freehash %pp Buttons BF Lists LF
window -c %pp
return
}
elseif ($istok($hget(BeloteGame,PlayersList),%s,32)) return
²centre %pp 10 %s remplacera
hadd -m BeloteConfig Remplace %s
²button %pp 3 20 165 110 20 Remplacer
²list %pp 1 20 40 110 93 $replace($hget(BeloteGame,PlayersList),$chr(32),¥)
}
}
if ($window(%pp)) drawdot %pp
}
alias belote.uclick if ($hget(BeloteConfig,Uclick)) hdel BeloteConfig Uclick
alias belote.sclick {
if (!$istok(1001 1003,$1,32)) belote.closesecond
var %p = @Belote
if ($1 == 1) {
if ($sock(Belote).ip) {
clipboard $+($v1,:,$sock(Belote).port)
²efface %p 115 300 370 20
²centre %p 300 Les paramètres de connexion ont été copiés dans le Presse-Papier.
}
}
elseif ($1 == 2) {
if (!$regex($²did(%p,5),^(\w{1,12})$)) ²flash %p 5
else {
hadd -m BeloteConfig Nom $regml(1)
²clear %p
belote.waitingroom $regml(1)
}
}
elseif ($1 == 3) {
var %ip = $²did(%p,4), %t
if (!$regex(%ip,^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)$)) {
var %t = 1
²flash %p 2
}
else var %ip = $regml(1), %q = $regml(2)
if (!$regex($²did(%p,5),^(\w{1,12})$)) {
var %t = 1
²flash %p 5
}
else var %nom = $regml(1)
if (!%t) {
²clear %p
hadd -m %p Main Joining
hadd -m BeloteConfig Nom %nom
²centre %p 100 Connexion au serveur %ip en cours ...
sockclose Belote*
sockopen Belote %ip %q
}
}
elseif ($istok(6 7,$1,32)) {
²clear %p
if ($1 == 6) belote.host
else belote.join
}
elseif ($1 == 48) {
if ($hget(BeloteGame,Temp)) return
var %a1 = $²did(%p,52).chx, %a2 = $²did(%p,53).chx, %t = 1, %m = $hfind(BeloteWaitingRoom,^[0-9]+$,0,r), %l
if (%m < 4) {
belote.disp * Impossible de lancer la partie : pas assez de joueurs.
return
}
while %t <= %m {
var %r = $hfind(BeloteWaitingRoom,^[0-9]+$,%t,r), %q = $hget(BeloteWaitingRoom,%r)
if ((!$istok(%a1,%q,165)) && (!$istok(%a2,%q,165))) var %l = $addtok(%l,$+(%r,:,%q),165)
inc %t
}
var %l = $regsubex($sorttok(%l,165,n),/([0-9]+:)/g,)
while ($numtok(%a1,165) != 2) var %a1 = $addtok(%a1,$gettok(%l,1,165),165), %l = $deltok(%l,1,165)
while ($numtok(%a2,165) != 2) var %a2 = $addtok(%a2,$gettok(%l,1,165),165), %l = $deltok(%l,1,165)
.timerbelote.start -o 1 3 belote.start %a1 VS %a2
belote.say * Le jeu commence dans trois secondes !
hadd -mu3 BeloteGame Temp 1
}
elseif ($1 == 49) {
if ($sock(Belote).mark != Host) return
var %s = $²did(%p,9), %l = $²did(%p,9).line
if ((!%s) || (%l == 1)) return
belote.exclure %s
}
elseif ($1 == 51) {
var %q = $²did(%p,50)
if ((!%q) || (!$sock(Belote))) return
²edit %p 50 5 575 538 20
if ($sock(Belote).mark == Host) belote.say SAY $bel.n : %q
else belote.say SAY %q
}
elseif ($istok(54 55,$1,32)) {
if ($sock(Belote).mark != Host) return
var %s = $²did(%p,9), %a1 = $²did(%p,52).chx, %a2 = $²did(%p,53).chx, %b1 = %a1, %b2 = %a2, %d
if ($istok(%a1,%s,165)) var %b1 = $remtok(%a1,%s,1,165), %d = 1
if ($istok(%a2,%s,165)) var %b2 = $remtok(%a2,%s,1,165), %d = 1
if (!%d) {
if (($1 == 54) && ($numtok(%b1,165) < 2)) var %b1 = $addtok(%b1,%s,165)
elseif (($1 == 55) && ($numtok(%b2,165) < 2)) var %b2 = $addtok(%b2,%s,165)
}
.belote.say EQUIPE 1 %b1
.belote.say EQUIPE 2 %b2
}
elseif ($1 == 59) {
var %l = $hget(BeloteGame,Moi), %s = PCTK, %c
if ($regex($hget(BeloteGame,Atout),^([PCTK])$)) {
var %a = $regml(1)
while ($right(%s,1) != %a) var %s = $+($right(%s,1),$left(%s,3))
}
while $left(%s,1) {
var %k = $v1, %r = /([01789DRVA]{1,2}) $+ %k $+ /g, %i = 1, %d
if (%k == %a) var %or = 7 8 D R 10 A 9 V
else var %or = 7 8 9 V D R 10 A
noop $regex(%l,%r)
var %i = 1
while $regml(%i) {
var %j = 1, %ins = $v1
while %j <= %i {
var %ac = $findtok(%or,$gettok(%d,%j,32),1,32), %ad = $findtok(%or,%ins,1,32)
if ((%ac > %ad) || (!%ac)) {
var %d = $instok(%d,%ins,%j,32)
break
}
inc %j
}
inc %i
}
var %c = $addtok(%c,$regsubex(%d,/([01789DRVA]{1,2})/g,$+(\1,%k)),32), %s = $right(%s,-1)
}
hadd -m BeloteGame Moi %c
belote.drawcartes -e
}
elseif ($1 == 60) belote.aide
elseif ($istok(61 62,$1,32)) {
if (!$sock(Belote)) return
var %q = $findtok($hget(BeloteGame,PlayersList),$hget(BeloteGame,TourNom),1,32)
if (%q == 1) {
var %co = $gettok(P C T K,$findtok(Pique Coeur Trèfle Carreau,$²did(%p,111).seltext,1,32),32)
if ($sock(Belote).mark == Host) belote.treat $iif($1 == 61,PASSE,PREND) $bel.n %co
else belote.say $iif($1 == 61,PASSE,PREND) $bel.n %co
}
else belote.disp * Ce n'est pas votre tour !
}
elseif ($1 == 100) {
if ($regex($²did(%p,101),^(\w{1,12})$)) {
writeini -n $bel.i Config Pseudo $regml(1)
hadd -m BeloteConfig Pseudo $regml(1)
}
if ($regex($²did(%p,102),^([0-9]{1,6})$)) writeini -n $bel.i Config Port $regml(1)
²centre %p 554 Configuration sauvegardée !
}
elseif ($1 == 200) {
if ($sock(Belote).mark != Host) return
belote.say BEGIN $hget(BeloteGame,Equipe1) VS $hget(BeloteGame,Equipe2)
}
elseif ($1 == 201) belote.host
elseif ($1 == 300) {
if ($hget(BeloteGame,TableRedraw)) {
hdel BeloteGame TableRedraw
belote.redrawtable $hget(BeloteGame,TableDesc)
²button %p -s 300 490 450 105 20 Voir le dernier pli
}
else {
hadd -m BeloteGame TableRedraw 1
belote.redrawtable $hget(BeloteGame,OldTable)
²button %p -s 300 490 450 105 20 Revenir au jeu
}
}
elseif (($inrect($mouse.x,$mouse.y,90,382,182,96)) && ($hget(%p,Main) == Game)) {
;Carte sélectionnée
if (!$hget(BeloteGame,Go)) return
tokenize 32 $hget(BeloteGame,Moi)
var %x = $calc(75+15* $0), %m = $0, %a = $mouse.x
while ((%a !isnum $+(%x,-,$calc(%x +72))) && (%m)) var %x = %x - 15, %m = %m - 1
if (%m) {
var %c = $gettok($1-,%m,32)
if (%c) {
if ($sock(Belote).mark == Host) belote.treat JOUER $bel.n %c $iif($²did(%p,35),BELOTE)
else belote.say JOUER $bel.n %c $iif($²did(%p,35),BELOTE)
}
}
}
elseif (($inrect($mouse.x,$mouse.y,572,$iif($hget(%p,Main) == Game,486,166),20,$iif($hget(%p,Main) == Game,83,403))) && ($istok(WaitingRoom Game,$hget(%p,Main),32))) {
hadd -m BeloteConfig Uclick 1
.timerbelote.lift -m 1 500 belote.drawlifter
belote.drawlifter
}
elseif ($1 == 1001) {
if ($hget(BeloteConfig,WinPlayers)) {
if ($window(@BelotePlayers)) window -c $v1
hdel BeloteConfig WinPlayers
}
else {
hadd -m BeloteConfig WinPlayers 1
belote.winplayers
}
}
elseif ($1 == 1003) {
if ($hget(BeloteConfig,WinPoints)) {
if ($window(@BelotePoints)) window -c $v1
hdel BeloteConfig WinPoints
}
else {
hadd -m BeloteConfig WinPoints 1
belote.winpoints
}
}
if (($window(%p)) && (!$hget(BeloteConfig,Draw))) drawdot %p
}
alias belote.edit {
var %p = @Belote
if (!$window(%p)) return
if ($hget(%p,Main) == belote.config) ²efface %p 200 554 200 20
}
alias belote.close {
sockclose Belote*
.timerbelote* off
²freehash Belote WaitingRoom Config
var %w = Temp Dos Cartes Convers, %t = 1
while %t <= 4 {
if ($window($gettok($+(@Belote,%w),%t,32))) window -c $v1
inc %t
}
if ($window(@BeloteWinPlayers)) window -v $v1
if ($window(@BeloteWinPoints)) window -v $v1
}
;*********
;Ascenseur
;*********
alias belote.drawlifter {
var %x = $mouse.x, %y = $mouse.y, %p = @Belote
if ((!$window(%p)) || (!$hget(BeloteConfig,Uclick))) return
if ($hget(%p,Main) == Game) var %q = 486 83
else var %q = 166 403
tokenize 32 %q
var %o = $hget(BeloteConfig,Lifter)
if ($inrect(%x,%y,572,$1,20,15)) hinc BeloteConfig Lifter 2
elseif ($inrect(%x,%y,572,$calc($1 + $2 -15),20,15)) hdec BeloteConfig Lifter 2
elseif ($getdot(%p,%x,%y) != 16742520) {
if (%y < $hget(BeloteConfig,LifterPos)) hinc BeloteConfig Lifter 4
else hdec BeloteConfig Lifter 4
}
else return
.timerbelote.lift -m 1 500 belote.drawlifter
belote.drawtext -e %q
drawdot %p
}
;****
;Aide
;****
alias belote.aide {
var %pp = @BeloteAide
if ($window(%pp)) {
beloteaide.close
return
}
²picwin %pp 400 500 "Aide de la Belotte"
window -ao %pp
²newmenu %pp Fichier
²newitem %pp Points:beloteaide.points,Règles:beloteaide.regles,$chr(9),Fermer:beloteaide.close
.timer -m 1 1 beloteaide.disp
}
alias beloteaide.disp {
var %pp = @BeloteAide
if (!$window(%pp)) return
²drawmenu %pp 1 1
drawdot %pp
}
alias beloteaide.sclick return
alias beloteaide.close {
var %pp = @BeloteAide
if (!$window(%pp)) return
²close %pp cash
window -c %pp
}
alias beloteaide.points {
var %pp = @BeloteAide
if (!$window(%pp)) return
²centre %pp -b 40 Points
var %d = drawtext -pnr %pp 0 Tahoma 12
%d 10 60 Points des Atout :
%d 200 60 Points des cartes Normales :
var %t = 1, %l = Valet 9 As 10 Roi Dame 8 7, %m = 20 14 11 10 4 3 0 0, %n = As 10 Roi Dame Valet 9 8 7, %o = 11 10 4 3 2 0 0 0
while %t <= 8 {
%d 10 $calc(60+20* %t) $gettok(%l,%t,32)
%d 90 $calc(60+20* %t) $gettok(%m,%t,32)
%d 200 $calc(60+20* %t) $gettok(%n,%t,32)
%d 280 $calc(60+20* %t) $gettok(%o,%t,32)
inc %t
}
%d 10 270 Points de la belote/rebelote : 20
%d 10 290 Il faut avoir le roi et la dame d'atout et annoncer belote au premier,
%d 10 310 rebelote au deuxième
%d 10 340 Il faut 80 points pour faire la partie, 81 donne litige.
%d 10 360 Un litige donne 80 points à l'équipe n'ayant pas pris et remet les
%d 10 380 les 80 autres pour la partie suivante.
%d 10 410 Un retourné donne 160, capot 250.
drawdot %pp
}
alias beloteaide.regles {
var %pp = @BeloteAide
if (!$window(%pp)) return
²centre %pp -b 40 Règles
var %e = drawtext -pnr %pp 0 Tahoma 11, %d = %e 10
%d 60 La belote se joue en équipe. Les coéquipiers seront toujours face à face.
%d 80 Elle se joue dans le sens inverse des aiguilles d'une montre.
%d 100 Un tour commence par la distribution des cartes de la méthode suivante :
%e 20 120 Trois cartes sont données à tout le monde, puis deux.
%e 20 140 La carte du dessus est ensuite retournée, et c'est au premier à droite
%e 40 160 de celui qui distribue qui dit s'il prend ou pas.
%d 180 Si la carte retournée est un atout, alors le suivant est obligé de prendre
%d 200 Prendre au premier tour signifie que la couleur de l'atout sera la couleur
%e 20 220 de la carte du milieu. Le preneur ramasse alors la carte du milieu
%e 20 240 et la met dans son jeu.
%d 260 Si personne ne prend au premier tour (passe), alors vous aurez le choix
%e 20 280 de la couleur au second (excepté la couleur de la carte retournée).
%d 300 Si personne ne prend au second tour, les cartes sont ramassées dans l'ordre
%e 20 320 et on recommence la distribution après avoir coupé les cartes.
%d 340 Dès que quelqu'un prend, que ce soit au premier ou au deuxième tour,
%e 20 360 la distribution reprend dans l'ordre en donnant trois cartes à chacun
%e 20 380 sauf au preneur qui n'en prend que deux.
%d 400 La stratégie veut souvent que le preneur (qui a en temps normal plus d'atouts
%e 40 420 que les autres) fasse tomber les atouts. Il joue le Valet s'il l'a
%e 40 440 mais ne risquera pas le Neuf.
%d 460 Le but est de faire le plus de points possible. Celui qui prend doit faire
%e 20 480 plus que la moitié : 82 sur 162 points sinon il se fait retourner.
drawdot %pp
}
;*******************
;Changement d'équipe
;*******************
alias -l belote.chgequipe {
var %p = @Belote
if (!$window(%p)) return
hadd -m BeloteGame OldCarres $hget(BeloteGame,Carres)
var %l = $hget(BeloteGame,PlayersList)
²efface %p 100 365 $width($gettok(%l,1,32),Tahoma,12) 15
²efface %p $calc(570 - $width($gettok(%l,2,32),Tahoma,12)) 310 $width($gettok(%l,2,32),Tahoma,12) 15
²efface %p 297 60 $width($gettok(%l,3,32),Tahoma,12) 15
²efface %p 10 160 $width($gettok(%l,4,32),Tahoma,12) 15
hadd -m BeloteGame Equipe1 $1
hadd -m BeloteGame Equipe2 $2
tokenize 32 $gettok($1,1,165) $gettok($2,1,165) $gettok($1,2,165) $gettok($2,2,165)
var %f = $findtok($1-,$bel.n,1,32)
if (%f) tokenize 32 $gettok($1-,$+(%f,-),32) $iif(%f != 1,$gettok($1-,$+(1-,$calc(%f -1)),32))
hadd -m BeloteGame PlayersList $1-
hadd -m BeloteGame Carres $calc(105+ $width($1,Tahoma,12)) 368¥575 313¥ $calc(302+ $width($3,Tahoma,12)) 63¥ $calc(15+ $width($4,Tahoma,12)) 163
}
alias -l belote.newnames {
var %p = @Belote
if (!$window(%p)) return
var %t = 1, %q = $hget(BeloteGame,OldCarres), %nq = $hget(BeloteGame,Carres)
while %t <= 4 {
²efface %p $gettok(%q,%t,165) 10 10
drawrect -fnr %p 255 1 $gettok(%nq,%t,165) 10 10
drawrect -nr %p 0 1 $gettok(%nq,%t,165) 10 10
inc %t
}
tokenize 32 $hget(BeloteGame,PlayersList)
drawtext -nr %p 16711680 Tahoma 12 100 365 $1
drawtext -nr %p 255 Tahoma 12 $calc(570 - $width($2,Tahoma,12)) 310 $2
drawtext -nr %p 16711680 Tahoma 12 297 60 $3
drawtext -nr %p 255 Tahoma 12 10 160 $4
}
alias -l belote.redrawcartes {
var %s = 72 96, %f = $1, %p = @Belote
if (!$window(%p)) return
if ((%f == 1) && ($bel.player)) return
if (!$window(@BeloteDos)) window -Bphk0g0 @BeloteDos 96 96
drawpic -cnr @BeloteDos 0 0 $bel.f(dos.png)
if ($istok(2 4,%f,32)) {
var %s = 96 72
drawrot -n @BeloteDos 90 0 0 96 96
}
var %h = $+(Carte,$2), %o = $iif($hget(BeloteGame,%h),$v1,1), %x, %y
var %ox = $gettok(90 499 219 5,%f,32), %oy = $gettok(382 235 44 180,%f,32)
if ($3) hinc -m BeloteGame %h $3
else var %o = 1
if ($3 == -1) {
var %q = $calc($hget(BeloteGame,%h) +1)
if (%f == 1) var %x = $calc(5+ %q *5)
elseif (%f == 2) var %y = $calc(5- %q *5)
elseif (%f == 3) var %x = $calc(5- %q *5)
else var %y = $calc(%q *5-5)
²efface %p $calc(%ox + %x) $calc(%oy + %y) $iif($calc(%f % 2),72 96,96 72)
var %o = $hget(BeloteGame,%h)
}
if (%o) {
while %o <= $hget(BeloteGame,%h) {
if (%f == 1) var %x = $calc(5+ %o *5)
elseif (%f == 2) var %y = $calc(5- %o *5)
elseif (%f == 3) var %x = $calc(5- %o *5)
else var %y = $calc(%o *5-5)
drawcopy -nrt @BeloteDos 16777215 0 0 %s %p $calc(%ox + %x) $calc(%oy + %y)
inc %o
}
}
}
;**************
;Aliases divers
;**************
alias -l bel.i return $bel.f(belote.ini)
alias -l bel.f return $+(Belote\,$1-)
alias -l bel.n {
var %l = $hget(BeloteConfig,Nom) $me, %t = 1, %n
while $gettok(%l,%t,32) {
var %q = $v1
if ($regex(%q,^(\w{1,12})$)) {
var %n = %q
break
}
inc %t
}
if (!%n) var %n = $+(Joueur,$r(1,999))
hadd -m BeloteConfig Nom %n
return %n
}
alias -l belote.desc {
if (!$1) return
var %d = le¥, %n
if (D isin $1) var %d = la¥
elseif (A isin $1) var %d = l'
var %n = $gettok(Sept Huit Neuf Valet Dame Roi Dix As,$findtok(7 8 9 V D R 10 A,$left($1,-1),1,32),32)
return $replace($+(%d,%n),¥,$chr(32)) de $gettok(Pique Trèfle Coeur Carreau,$findtok(P T C K,$right($1,1),1,32),32)
}
alias -l belote.drawcartes {
var %p = @Belote, %a
if (!$window(%p)) return
if ($left($1,1) == -) {
if (e isin $1) ²efface %p 90 382 177 96
tokenize 32 $2-
}
var %l = $hget(BeloteGame,Moi), %t = $iif($1 isnum,$v1,1), %m = $numtok(%l,32)
while %t <= %m {
var %c = $gettok(%l,%t,32), %q = $belote.pos(%c)
belote.drawcarte 1 $calc(90+15* $calc(%t -1)) 382 %c
inc %t
}
}
alias -l belote.drawcarte {
var %p = @Belote, %ticks = $ticks
if (!$window(%p)) return
if (!$4) return
if ($window(@BeloteCartes).w $window(@BeloteCartes).h != 583 390) {
if ($window(@BeloteText)) window -c @BeloteText
window -Bdhpnk0g0 +dL @BeloteText 0 0 150 150
drawrect -fnr @BeloteText 16777215 1 0 0 150 150
drawtext -nr @BeloteText 0 Tahoma 12 $iif($1,30,1) 1 $4
if ($1) drawrot -n @BeloteText -90 0 0 150 150
var %wx = 1 $2-3 $iif($1,72 96,96 72) 5 5
drawrect -fnrd %p 16777215 %wx
drawrect -nrd %p 0 %wx
drawcopy -nt @BeloteText 16777215 2 2 $iif($1,20 145,145 20) %p $calc($2 + 2) $calc($3 + 2 + $iif($1,$calc(-92+ $width($4,Tahoma,12))))
window -c @BeloteText
}
else {
if ($window(@BeloteTemp)) drawrect -fnr $v1 16777215 1 0 0 96 96
else window -Bphk0g0 @BeloteTemp 96 96
var %s = 72 96
drawcopy -nr @BeloteCartes $belote.pos($4) 72 96 @BeloteTemp 0 0
if (!$1) {
var %s = 96 72
drawrot -n @BeloteTemp 90 0 0 96 96
}
drawcopy -nr @BeloteTemp 0 0 %s %p $2-3
}
}
alias -l belote.redrawtable {
var %p = @Belote
if (!$window(%p)) return
if ($hget(BeloteGame,Retournee)) belote.drawcarte 1 260 215 $v1
else {
var %l = $1-, %t = 1
noop $regex(%l,^([^:]+):)
var %n = $regml(1), %ff = $findtok($hget(BeloteGame,PlayersList),%n,1,32)
if (!%ff) var %ff = 1
while %t <= 4 {
var %a = $iif($istok(2 4,%ff,32),0,1) $gettok(300 350¥355 195¥230 165¥115 265,%ff,165), %c = $gettok($gettok(%l,%t,32),2,58)
if (%c) belote.drawcarte %a %c
else ²efface %p $gettok(%a,2-,32) $iif($istok(2 4,%ff,32),96 72,72 96)
var %t = %t + 1, %ff = %ff + 1
if (%ff > 4) var %ff = 1
}
}
}
;****************
;Fenêtres collées
;****************
on *:active:*:{
if ($istok(@BelotePlayers @BelotePoints,$active,32)) return
if (($istok(@BelotePlayers @BelotePoints,$lactive,32)) && ($active == @Belote)) return
belote.closesecond FORCE
}
alias belote.closesecond {
if (($window(@BelotePlayers)) && ((!$hget(BeloteConfig,WinPlayers)) || ($1) || ($hget(@Belote,Main) != Game))) {
if ($hget(BeloteConfig,WinPlayers)) hdel BeloteConfig WinPlayers
window -c @BelotePlayers
}
if (($window(@BelotePoints)) && ((!$hget(BeloteConfig,WinPoints)) || ($1) || ($hget(@Belote,Main) != Game))) {
if ($hget(BeloteConfig,WinPoints)) hdel BeloteConfig WinPoints
window -c @BelotePoints
}
}
on *:appactive:belote.closesecond FORCE
alias -l belote.winplayers {
var %pp = @BelotePlayers, %p = @Belote
if ($window(%pp)) return
window -hBdpg0k0 +dL %pp $calc($window(@Belote).x + 599) $calc($window(@Belote).y + 300) 150 200
window -ao %pp
window -a %p
drawrect -nr %pp 15762050 1 1 1 148 198
drawrect -nr %pp 0 1 0 0 150 200
if ($hget(BeloteConfig,Remplace)) hdel BeloteConfig Remplace
beloteplayers.maj
drawdot %pp
}
alias -l belote.winpoints {
var %pp = @BelotePoints, %p = @Belote
if ($window(%pp)) return
window -hBdopg0k0 +dL %pp $calc($window(@Belote).x + 599) $calc($window(@Belote).y + 50) 150 185
window -ao %pp
window -a %p
drawrect -nr %pp 15762050 1 1 1 148 183
drawrect -nr %pp 0 1 0 0 150 185
²efface %pp 0 2 148 181
var %d = drawtext -pnr %pp 0 Tahoma 11
%d 5 5 Atout
%d 5 25 V : 20 Pts
%d 5 45 9 : 14 Pts
%d 5 65 A : 11 Pts
%d 5 85 10 : 10 Pts
%d 5 105 R : 4 Pts
%d 5 125 D : 3 Pts
%d 5 145 8 : 0 Pt
%d 5 165 7 : 0 Pt
%d 80 5 Non Atout
%d 80 25 A : 11 Pts
%d 80 45 10 : 10 Pts
%d 80 65 R : 4 Pts
%d 80 85 D : 3 Pts
%d 80 105 V : 2 Pts
%d 80 125 9 : 0 Pt
%d 80 145 8 : 0 Pt
%d 80 165 7 : 0 Pt
drawdot %pp
}
alias -l beloteplayers.maj {
var %pp = @BelotePlayers
if (!$window(%pp)) return
²efface %pp 0 2 148 196
var %l, %m = $hfind(BeloteWaitingRoom,^[0-9]+,0,r), %t = 1
while (%t <= %m) var %r = $hfind(BeloteWaitingRoom,^[0-9]+,%t,r), %n = $hget(BeloteWaitingRoom,%r), %l = $addtok(%l,$+($iif($istok($hget(BeloteGame,PlayersList),%n,32),1,2),%r,:,%n),165), %t = %t + 1
var %l = $sorttok(%l,165,n), %sp = $wildtok(%l,1*,0,165)
hadd -m GUI-ArKanis %pp 1
²list %pp 1 20 40 110 93 $regsubex(%l,/([0-9]+:)/g,)
drawline -nr %pp 0 1 20 $calc(41+ %sp *15) 130 $calc(41+ %sp *15)
if ($sock(Belote).mark == Host) {
²button %pp 2 20 140 110 20 Exclure
²button %pp 3 20 165 110 20 Remplace
²unset %pp 3
}
else hadd -m @BeloteLists C1 NoSel
}
alias -l belote.exclure {
if (!$window(@Belote)) exit
var %s = $1, %1 = $hfind(BeloteWaitingRoom,%s,1).data, %2 = $hfind(BeloteWaitingRoom,%s,2).data, %w
if (Belote isin %1) var %w = %1
elseif (Belote isin %2) var %w = %2
if (!%w) return
hadd -m BeloteBlack $sock(%w).ip 1
sockwrite -n %w BAN
sockclose %w
belote.say * %s a été banni
belote.say PART %s
}
;End Of File
Conclusion :
Dispose d'une fonction de mise à jour automatique qui s'effectue lorsque vous tapez /belote
Le code met ainsi à tous chacun des fichiers nécessaires et ce de manière individuelle
Il est toutefois fort possible qu'il y ait des bugs vu que le code n'a pas encore pû être testé sur la longueur vu le nombre de tests qu'il faudrait réaliser. Le déposer ici m'aidera de cette façon à le debugguer.
Rassurez vous, je ne connais pas de bugs sur la version que je dépose ici et il est tout à fait possible de faire une partie normalement.
Si vous en trouvez un, merci de le signaler :)
Amusez vous bien !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.