<?php
#####################################
# fonction récursive permettant de changer :
# RootPId, Rank
# de tous les descendants d'un joueur
#####################################
function downChange($playerPId,$rootPId,$rank)
{
	# si playerPId est un pere
	# on recupere les filleuls et on change les params de chacun
	$sons = main_db_query("SELECT Id FROM Players WHERE FatherPId='".$playerPId."'");
	while($son = db_fetch_array($sons))
		downChange($son[Id],$rootPId,$rank+1);

	# si playerPId est une feuille (ie sans filleuls)
	# on change son root
	main_db_query("UPDATE Players SET RootPId='".$rootPId."',Rank='".$rank."' WHERE Id='".$playerPId."'");
	echo "<br>change le root de ".$playerPId." en ".$rootPId;
}

#####################################
# remonte l'arbre (vers les parents) du player jusqu'à son root
# il modifie :
# Offspring, Sons, GrandSons et GrandGrandSons pour chacun d'eux
# afin que le player ne soit plus considéré comme un filleul
#####################################
function upperChange($sonPId,$minusOffSprings)
{
	# recup du player
	$player = getplayer2($sonPId);
	$playerSons = $player[Sons];
	$playerGSons = $player[GrandSons];

	$fatherPId = $player[FatherPId];
	
	# modif du pere
	main_db_query("UPDATE Players SET OffSprings=OffSprings-".$minusOffSprings.",Sons=Sons-1,GrandSons=GrandSons-".$playerSons.",GrandGrandSons=GrandGrandSons-".$playerGSons." WHERE Id='".$player[FatherPId]."'");

	$player = getplayer2($fatherPId);
	$fatherPId = $player[FatherPId];
	# modif du grand-pere
	main_db_query("UPDATE Players SET OffSprings=OffSprings-".$minusOffSprings.",GrandSons=GrandSons-1,GrandGrandSons=GrandGrandSons-".$playerSons." WHERE Id='".$player[FatherPId]."'");
	
	$player = getplayer2($fatherPId);
	$fatherPId = $player[FatherPId];
	# modif de l'arriere-grand-pere
	main_db_query("UPDATE Players SET OffSprings=OffSprings-".$minusOffSprings.",GrandGrandSons=GrandGrandSons-1 WHERE Id='".$player[FatherPId]."'");

	# pour les autres ancetres juste l'offsprings change
	while($player = getplayer2($fatherPId))
	{
		main_db_query("UPDATE Players SET OffSprings=OffSprings-".$minusOffSprings." WHERE Id='".$player[FatherPId]."'");
		$fatherPId = $player[FatherPId];
		echo "w";
	}
}


#####################################
# fonction qui sépare un filleul de son parrain
# le filleul devient "orphelin" ou plutôt "fondateur de sa dynastie"
# PARAMS --
# $sonPId : PlayerId du filleul à détacher
#####################################
function detachSon($sonPId)
{
	$player = getplayer2($sonPId);
	
	# il faut remonter l'arbre (aller vers les parents) pour modifier :
	# Offspring, Sons, GrandSons et GrandGrandSons pour chacun d'eux
	upperChange($sonPId,$player[Offsprings]+1);
	
	# le rootPId change, il devient lui-meme et récursivement pour toute la descendance
	# le rank devient =0
	downChange($sonPId,$sonPId,0);

	# on change son fatherPId, le filleul devient orphelin, donc fatherPId=0
	# on change son rank qui devient =0 puisqu'il devient fondateur de dynastie
	# son RootPId a été changé dans la fonction récursive downChange
	main_db_query("UPDATE Players SET FatherPId=0,Rank=0 WHERE Id='".$sonPId."'");
	main_db_query("UPDATE Members SET IsOff='1' WHERE Id='".$player[MemberId]."'");
}

#####################################
# affiche le couple Parrain/filleul à partir du PId du filleul
#####################################
function getCouple($PId)
{
	# recup du player
	$player = getplayer2($PId);

	# recup du nick du pere
	$father = getplayer2($player[FatherPId]);
	
	return array($father[NickName],$player[NickName]);
}
?>