diff --git a/html/37.php b/html/37.php new file mode 100644 index 0000000000000000000000000000000000000000..939826af1f16357fbdf1e15d66602f1c84afcd29 --- /dev/null +++ b/html/37.php @@ -0,0 +1,32 @@ +--- +layout: default +saison: 37 +date: '2022-10-21' +ligaspieltag: 8 +step: 1 +finals_step: 2 +finalteams: 8 +startliste: + - + - is + - es + - bw + - nl + - cm + - se + - co + - pl + - tz + +startliste_partien_pause: + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 0 +--- diff --git a/html/_data/global.yml b/html/_data/global.yml index c2fd52e0bb7629912a30d232bf7081e8323e8117..3784f1df686e3930c2c39fb932778ceccdff9e13 100644 --- a/html/_data/global.yml +++ b/html/_data/global.yml @@ -1 +1 @@ -saison_now: 36 +saison_now: 37 diff --git a/html/_layouts/default.php b/html/_layouts/default.php index 7bd9f1ea8729ec282ea90dde759e7fee0c8ec32b..fbc8083a38f1446fee9a1f580d958e4f80e7e899 100644 --- a/html/_layouts/default.php +++ b/html/_layouts/default.php @@ -43,10 +43,12 @@ if( !empty($csv) ){ $w=preg_split('/,/',$v); if( !empty($TEAMS[$w[0]]) ){ if( $TEAMS[$w[0]] == $w[1] ){ - db_addSpieler($v,$secret); + //db_addSpieler($v,$secret); } } } + } else if( trim($C[0]) == 'SpielerID,Spieler,Alter,Nt,Saison,Liga,TeamID,Team,S,T,A,Z+,Z-,Zd,Bk,Bi+,Bi-,Attr,Face,Karriereende' ){ + db_addSpieler(array_pop($C),$secret); } } @@ -100,7 +102,7 @@ if( !empty($csv) ){ STATISTIK_SAISON={}; STAT_SAISON.forEach( function(v,i){ - if( STATISTIK_SAISON[v.SpielerID] == undefined ) STATISTIK_SAISON[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [] }; + if( STATISTIK_SAISON[v.SpielerID] == undefined ) STATISTIK_SAISON[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [], 'face' : '' }; STATISTIK_SAISON[v.SpielerID].S++; STATISTIK_SAISON[v.SpielerID].T+=v.Tore*1; STATISTIK_SAISON[v.SpielerID].A+=v.Assists*1; @@ -113,13 +115,14 @@ if( !empty($csv) ){ STATISTIK_SAISON[v.SpielerID].age_saison=v.age_saison*1; STATISTIK_SAISON[v.SpielerID].nt=v.nt; STATISTIK_SAISON[v.SpielerID].attr=v.attr; + STATISTIK_SAISON[v.SpielerID].face=v.face; } ); STATISTIK_ALL={}; STAT_ALL.forEach( function(v,i){ - if( STATISTIK_ALL[v.SpielerID] == undefined ) STATISTIK_ALL[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [] }; + if( STATISTIK_ALL[v.SpielerID] == undefined ) STATISTIK_ALL[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [], 'face' : '' }; STATISTIK_ALL[v.SpielerID].S++; STATISTIK_ALL[v.SpielerID].T+=v.Tore*1; STATISTIK_ALL[v.SpielerID].A+=v.Assists*1; @@ -132,6 +135,7 @@ if( !empty($csv) ){ STATISTIK_ALL[v.SpielerID].age_saison=v.age_saison*1; STATISTIK_ALL[v.SpielerID].nt=v.nt; STATISTIK_ALL[v.SpielerID].attr=v.attr; + STATISTIK_ALL[v.SpielerID].face=v.face; } ); @@ -153,16 +157,16 @@ if( !empty($csv) ){ calculatePartien('{{ page.saison }}', '{{ page.date }}'); calculatePunktestand('{{ page.saison }}', '7'); //calculatePunktestand( 0, '7'); - calculateTore('{{ page.saison }}'); - calculateAssists('{{ page.saison }}'); - calculateZwk('{{ page.saison }}'); + calculateTabelle('{{ page.saison }}','T'); + calculateTabelle('{{ page.saison }}','A'); + calculateTabelle('{{ page.saison }}','Z'); $('h4.tabelle button').on('click', function(){ $('h4.tabelle button').toggleClass('active',false); $(this).toggleClass('active',true); $('table.tabelle').toggleClass('d-none',true); - $('#tabelle_'+$(this).text().toLowerCase()).toggleClass('d-none',false); + $('#tabelle_'+$(this).text()[0]).toggleClass('d-none',false); } ); $('#news tbody').html(''); @@ -231,6 +235,33 @@ if( !empty($csv) ){ $(td).text( st == 1 ? 'vor ' + st + ' Tag' : 'vor ' + st + ' Tagen' ); $(tr).append(td); + var td = document.createElement('td'); + var div = document.createElement('div'); + div.classList='face'; + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_head_' + v.face.split(/_/g)[0] + '.png'; + $(div).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_hair_' + v.face.split(/_/g)[1] + '.png'; + $(div).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_beard_' + v.face.split(/_/g)[2] + '.png'; + $(div).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_mouth_' + v.face.split(/_/g)[3] + '.png'; + $(div).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_eyes_' + v.face.split(/_/g)[4] + '.png'; + $(div).append(img); + + $(td).append(div); + $(tr).append(td); + var td = document.createElement('td'); var img = document.createElement('img'); @@ -310,7 +341,7 @@ if( !empty($csv) ){ </div> <h4 class="tabelle">Tabelle <button>Zweikampf</button><button>Assists</button><button>Tore</button><button class="punktestand active">Punktestand</button></h2> - <table id="tabelle_punktestand" class="tabelle"> + <table id="tabelle_P" class="tabelle"> <thead> <tr> <th>Pl.</th> @@ -333,11 +364,12 @@ if( !empty($csv) ){ </tbody> </table> - <table id="tabelle_tore" class="tabelle d-none"> + <table id="tabelle_T" class="tabelle d-none"> <thead> <tr> <th>Pl.</th> <th>Sp.</th> + <th></th> <th>Name</th> <th>Team</th> <th>T</th> @@ -347,11 +379,12 @@ if( !empty($csv) ){ </tbody> </table> - <table id="tabelle_assists" class="tabelle d-none"> + <table id="tabelle_A" class="tabelle d-none"> <thead> <tr> <th>Pl.</th> <th>Sp.</th> + <th></th> <th>Name</th> <th>Team</th> <th>A</th> @@ -361,11 +394,12 @@ if( !empty($csv) ){ </tbody> </table> - <table id="tabelle_zweikampf" class="tabelle d-none"> + <table id="tabelle_Z" class="tabelle d-none"> <thead> <tr> <th>Pl.</th> <th>Sp.</th> + <th></th> <th>Name</th> <th>Team</th> <th>Z</th> @@ -401,6 +435,7 @@ if( !empty($csv) ){ <table id="news"> <thead> <th>Zeit</th> + <th></th> <th>Nt</th> <th>Spieler</th> <th>Team</th> diff --git a/html/assets/css/custom.scss b/html/assets/css/custom.scss index e97d47f02bebee0e9cfa87927287e68d22aa3005..350dea50c8e177056d03e4d1945cdc6f877aee29 100644 --- a/html/assets/css/custom.scss +++ b/html/assets/css/custom.scss @@ -177,6 +177,7 @@ tr.begegnungen { img.flags { width: 20px; border: 1px solid darkgrey; + /*margin-right: 10px; */ } #copypaste { @@ -239,7 +240,7 @@ tr.stats { } } -#tabelle_tore, #tabelle_assists, #tabelle_zweikampf { +#tabelle_T, #tabelle_A, #tabelle_Z { tr { td,th { &:last-child { @@ -248,8 +249,17 @@ tr.stats { } &:nth-child(1) { width: 30px; text-align: right; } &:nth-child(2) { width: 30px; text-align: right; } - &:nth-child(3) { width: 280px; } - &:nth-child(4) { width: 200px; } + &:nth-child(3) { width: 30px; text-align: right; } + &:nth-child(4) { width: 280px; } + &:nth-child(5) { width: 200px; } + } + } +} + +#tabelle_team { + tr { + td,th { + &:nth-child(1) { width: 350px; text-align: left; } } } } @@ -346,21 +356,72 @@ td.n { color: firebrick; } thead { display: table; } tbody { display: block; max-height: 200px; overflow: auto; } tr > th,td { - &:nth-child(1) { width: 100px; } - &:nth-child(2) { width: 30px; } - &:nth-child(3) { width: 270px; } - &:nth-child(4) { width: 200px; } + &:nth-child(1) { width: 70px; } + &:nth-child(2) { width: 20px; } + &:nth-child(3) { width: 30px; } + &:nth-child(4) { width: 270px; } + &:nth-child(5) { width: 190px; } } tr > td:nth-child(1){ font-size: 0.7em; } tr:nth-child(odd){ background: whitesmoke; } - i.fas { - padding-right:5px; - } + } .mono { font-family: monospace; font-size: 1.2em; } + +.face { + position: fixed; + top: 100px; + right: 65%; + > img { + position: absolute; + &:nth-child(1){ z-index: 1 } + &:nth-child(2){ z-index: 5 } + &:nth-child(3){ z-index: 2 } + &:nth-child(4){ z-index: 3 } + &:nth-child(5){ z-index: 4; position: relative; } + } + span { + margin-left:10px; + } +} + +#news div.face { + position: relative; + img { + width: 20px; + left: 12px; + top: -100px; + } +} + +.tabelle td.face { + position: initial; + img { + width: 20px; + } +} + +.tabelle span.face { + position: initial; + img { + width: 20px; + margin-right: 10px; + } +} + + + + +i.fas { + padding-right:5px; +} + +.tabelle img.flags { + margin-right: 5px; +} diff --git a/html/assets/js/script.js b/html/assets/js/script.js index 84c2ec780f757aa82fbbfbd5c19fc893b0734b80..d14b407eb8f8285819d01c3193bd5dd16e875597 100644 --- a/html/assets/js/script.js +++ b/html/assets/js/script.js @@ -429,7 +429,7 @@ function calculatePunktestand(saison,runde,show=true){ return Tabelle; } - var tabelle='#tabelle_punktestand tbody'; + var tabelle='#tabelle_P tbody'; $(tabelle).html(''); var TabelleLast= ( saison > 26 ) ? calculateAllPunktestand()[saison-27] : []; @@ -451,7 +451,7 @@ function calculatePunktestand(saison,runde,show=true){ var finalist=( calculateAllPunktestand().filter((a) => ( a[1].nt == v.nt.toLowerCase() ) ).length + ERGEBNISSE.filter((a) => ( a.runde=='F' && ( a.H.toLowerCase() == v.nt.toLowerCase() && a.TH < a.TA || a.A.toLowerCase() == v.nt.toLowerCase() && a.TH > a.TA ) ) ).length ); tmp+='<td class="'+border+'">'+S+'</td>'; - tmp+='<td class="'+border+'"><img class="flags" src="./images/flags/'+(( v.flag ) ? v.flag : v.nt.toLowerCase())+'.svg"> <a href="javascript:calculateTeam('+((saison == 0) ? SAISON_NOW : saison)+',\''+v.nt+'\')">'+v.name.replace(/\(NL\)/g,'<sup>'+v.nt.toUpperCase()+'</sup></a>')+' <a href="'+v.link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'+(( trophy.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-trophy"></i>' : '') + + tmp+='<td class="'+border+'"><img class="flags" src="./images/flags/'+(( v.flag ) ? v.flag : v.nt.toLowerCase())+'.svg"> <a href="javascript:calculateTeam('+((saison == 0 && false) ? SAISON_NOW : saison)+',\''+v.nt+'\')">'+v.name.replace(/\(NL\)/g,'<sup>'+v.nt.toUpperCase()+'</sup></a>')+' <a href="'+v.link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'+(( trophy.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-trophy"></i>' : '') + ' '+(( master.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-crown"></i>' : '') +'</td>'; tmp+='<td class="'+border+'">'+((pokal>0) ? pokal : '')+'</td>'; tmp+='<td class="'+border+'">'+((meistertitel>0) ? meistertitel : '')+'</td>'; @@ -471,126 +471,257 @@ function calculatePunktestand(saison,runde,show=true){ } -function calculateTore(saison){ +function calculateTabelle(saison,param){ var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON; - var n=Object.entries( STATISTIK ).sort( function(a,b){ return ( ( a[1].T < b[1].T || ( a[1].T == b[1].T && a[1].S > b[1].S ) ) ? 1 : -1 ) } ).slice(0,10).map( + var n=Object.entries( STATISTIK ).sort( (a,b) => ( a[1][param] < b[1][param] || ( a[1][param] == b[1][param] && a[1].S > b[1].S ) ) ? 1 : -1 ).slice(0,10).map( function(v,i){ var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) ); + if( team.length == 0 ){ - var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">'; - var team_name=''; + var flag = document.createElement('img'); + flag.classList='flags'; + flag.src='./images/flags/xx.svg' + flag.title='n/a'; + //var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">'; + //var team_name=''; + var span = document.createElement('span'); + span.innerText=''; + } else { - var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">'; - var team_name='<a href="javascript:calculateTeam('+saison+',\''+team[0].nt+'\')">'+team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup></a>')+' <a href="'+team[0].link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'; + + var face = document.createElement('td'); + face.classList='face'; + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_head_' + v[1].face.split(/_/g)[0] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_hair_' + v[1].face.split(/_/g)[1] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_beard_' + v[1].face.split(/_/g)[2] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_mouth_' + v[1].face.split(/_/g)[3] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_eyes_' + v[1].face.split(/_/g)[4] + '.png'; + $(face).append(img); + + var flag = document.createElement('img'); + flag.classList='flags'; + flag.src='./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg'; + flag.title=team[0].name.split('(NL)')[0].trim(); + + var span = document.createElement('span'); + var a_ = document.createElement('a'); + a_.href='javascript:calculateTeam('+saison+',\''+team[0].nt+'\')'; + a_.innerHTML=team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup> '); + span.append(a_); + + var a_ = document.createElement('a'); + a_.href=team[0].link; + a_.target='ultrasoccer'; + var i_ = document.createElement('i'); + i_.classList='fas fa-link'; + a_.append(i_); + span.append(a_); } - var attr=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' '); + var attr=document.createElement('span'); + attr.innerHTML=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' && a != 'fas' ? '<i class="fas '+a+'"></i>' : '' ) ).join(''); + + var tr=document.createElement('tr'); + + var td=document.createElement('td'); + td.innerText=(i+1); + tr.append(td); + + var td=document.createElement('td'); + td.innerText=(( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0); + tr.append(td); + + tr.append(face); + + var td=document.createElement('td'); + td.append(flag); + td.append(attr); + + var a_=document.createElement('a'); + a_.href='https://ultrasoccer.de/playerprofile/?id='+v[0]; + a_.target='ultrasoccer'; + a_.innerText=(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : v[0] ); + td.append(a_); + tr.append(td); + + var td=document.createElement('td'); + td.append(span) + tr.append(td); + + var td=document.createElement('td'); + td.innerText = ( param == 'Z' && v[1][param] > 0 ) ? '+' + v[1][param] : v[1][param]; + if( param == 'Z' ) td.classList = v[1][param] > 0 ? 'p' : ( v[1][param] == 0 ) ? 'u' : 'n'; + tr.append(td); + + return tr; - return '<td>'+ - [ - i+1, - (( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0), - team_flag+' '+attr+' '+(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : '<a href="https://ultrasoccer.de/playerprofile/?id='+v[0]+'" target="ultrasoccer">'+v[0]+'</a>' ), - team_name, - v[1].T - ].join('</td><td>')+'</td>'; } ); - $('#tabelle_tore tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' ); + + $('#tabelle_'+param+' tbody').html( n ); } -function calculateAssists(saison){ + +function calculateTeam_old(saison,nt){ var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON; - var n=Object.entries( STATISTIK ).sort( (a,b) => ( a[1].A < b[1].A || ( a[1].A == b[1].A && a[1].S > b[1].S ) ) ? 1 : -1 ).slice(0,10).map( - function(v,i){ - var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) ); + + var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( STATISTIK[b.id] ) ).filter( (c) => ( c !== undefined ) ).map( + function(v){ + + var team=TEAMS.filter( (a) => ( a.nt == v.nt ) ); if( team.length == 0 ){ var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">'; var team_name=''; } else { var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">'; - var team_name='<a href="javascript:calculateTeam('+saison+',\''+team[0].nt+'\')">'+team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup></a>')+' <a href="'+team[0].link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'; + var team_name='<a href="'+team[0].link+'" target="ultrasoccer">'+team[0].name+'</a>'; } - var attr=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' '); + var attr=((v.attr != undefined) ? v.attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' '); - return '<td>'+ - [ - i+1, - (( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0), - team_flag+' '+attr+' '+(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : '<a href="https://ultrasoccer.de/playerprofile/?id='+v[0]+'" target="ultrasoccer">'+v[0]+'</a>' ), - team_name, - v[1].A - ].join('</td><td>')+'</td>'; + var tmp=''; + tmp+='<td>'+team_flag+' '+attr+' '+v.name+'</td>'; + tmp+='<td>'+(v.age*1+saison*1-v.age_saison)+'</td>'; + tmp+='<td>'+v.S+'/'+v.T+'/'+v.A+'</td>'; + tmp+='<td class="'+(( v.Z > 0 ) ? 'p' : (( v.Z < 0 ) ? 'n' : 'u' ) )+'">'+v.Zpos+'/'+v.Zneg+'</td>'; + return tmp; } ); - $('#tabelle_assists tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' ); + $('table.tabelle').toggleClass('d-none',true); + $('#tabelle_team').toggleClass('d-none',false); + $('#tabelle_team tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' ); } -function calculateZwk(saison){ +function calculateTeam(saison,nt){ var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON; - var n=Object.entries( STATISTIK ).sort( (a,b) => ( a[1].Z < b[1].Z || ( a[1].Z == b[1].Z && a[1].S > b[1].S ) ) ? 1 : -1 ).slice(0,10).map( + + var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( [ b.id, STATISTIK[b.id] ] ) ).filter( (c) => ( c[1] !== undefined ) ).map( function(v,i){ + + console.log(v,i); var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) ); if( team.length == 0 ){ - var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">'; - var team_name=''; + var flag = document.createElement('img'); + flag.classList='flags'; + flag.src='./images/flags/xx.svg' + flag.title='n/a'; + //var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">'; + //var team_name=''; + var span = document.createElement('span'); + span.innerText=''; + } else { - var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">'; - var team_name='<a href="javascript:calculateTeam('+saison+',\''+team[0].nt+'\')">'+team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup></a>')+' <a href="'+team[0].link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'; + + var face = document.createElement('span'); + face.classList='face'; + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_head_' + v[1].face.split(/_/g)[0] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_hair_' + v[1].face.split(/_/g)[1] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_beard_' + v[1].face.split(/_/g)[2] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_mouth_' + v[1].face.split(/_/g)[3] + '.png'; + $(face).append(img); + + var img = document.createElement('img'); + img.src='images/facegenerator/fg_eyes_' + v[1].face.split(/_/g)[4] + '.png'; + $(face).append(img); + + var flag = document.createElement('img'); + flag.classList='flags'; + flag.src='./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg'; + flag.title=team[0].name.split('(NL)')[0].trim(); + + var span = document.createElement('span'); + var a_ = document.createElement('a'); + a_.href='javascript:calculateTeam('+saison+',\''+team[0].nt+'\')'; + a_.innerHTML=team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup> '); + span.append(a_); + + var a_ = document.createElement('a'); + a_.href=team[0].link; + a_.target='ultrasoccer'; + var i_ = document.createElement('i'); + i_.classList='fas fa-link'; + a_.append(i_); + span.append(a_); } - var attr=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' '); + var attr=document.createElement('span'); + attr.innerHTML=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' && a != 'fas' ? '<i class="fas '+a+'"></i>' : '' ) ).join(''); - return '<td>'+ - [ - i+1, - (( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0), - team_flag+' '+attr+' '+(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : '<a href="https://ultrasoccer.de/playerprofile/?id='+v[0]+'" target="ultrasoccer">'+v[0]+'</a>' ), - team_name, - (( v[1].Z > 0 ) ? '+' : '' )+v[1].Z - ].join('</td><td>')+'</td>'; - } - ); + var tr=document.createElement('tr'); - $('#tabelle_zweikampf tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' ); -} -function calculateTeam(saison,nt){ - var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON; + var td=document.createElement('td'); + td.append(face); + td.append(flag); + td.append(attr); + var a_=document.createElement('a'); + a_.href='https://ultrasoccer.de/playerprofile/?id='+i; + a_.target='ultrasoccer'; + a_.innerText=(( v[1].name != null ) ? v[1].name : v[0] ); + td.append(a_); + tr.append(td); - var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( STATISTIK[b.id] ) ).filter( (c) => ( c !== undefined ) ).map( - function(v){ - var team=TEAMS.filter( (a) => ( a.nt == v.nt ) ); - if( team.length == 0 ){ - var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">'; - var team_name=''; - } else { - var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">'; - var team_name='<a href="'+team[0].link+'" target="ultrasoccer">'+team[0].name+'</a>'; - } + var td=document.createElement('td'); + td.innerText=(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison); + tr.append(td); - var attr=((v.attr != undefined) ? v.attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' '); + var td=document.createElement('td'); + td.innerText=v[1].S+'/'+v[1].T+'/'+v[1].A; + tr.append(td); + var td=document.createElement('td'); + td.innerText=v[1].Zpos+'/'+v[1].Zneg; + td.classList=(( v[1].Z > 0 ) ? 'p' : (( v[1].Z < 0 ) ? 'n' : 'u' ) ) + tr.append(td); + + /* var tmp=''; tmp+='<td>'+team_flag+' '+attr+' '+v.name+'</td>'; tmp+='<td>'+(v.age*1+saison*1-v.age_saison)+'</td>'; tmp+='<td>'+v.S+'/'+v.T+'/'+v.A+'</td>'; tmp+='<td class="'+(( v.Z > 0 ) ? 'p' : (( v.Z < 0 ) ? 'n' : 'u' ) )+'">'+v.Zpos+'/'+v.Zneg+'</td>'; return tmp; + */ + + return tr; } ); $('table.tabelle').toggleClass('d-none',true); $('#tabelle_team').toggleClass('d-none',false); - $('#tabelle_team tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' ); + $('#tabelle_team tbody').html( n ); } function calculateEwige(){ calculatePunktestand(0,'7'); - calculateTore(0); - calculateAssists(0); - calculateZwk(0); + calculateTabelle(0,'T'); + calculateTabelle(0,'A'); + calculateTabelle(0,'Z'); $('button.active').toggleClass('active',false); $('#ewige').toggleClass('active',true); $('table.tabelle').toggleClass('d-none',true); - $('#tabelle_punktestand').toggleClass('d-none'); + $('#tabelle_P').toggleClass('d-none'); $('h4.tabelle > button.punktestand').toggleClass('active',true); $('h4.tabelle').toggleClass('d-none',false); } diff --git a/html/functions/db_methods.php b/html/functions/db_methods.php index c28d84194e3be2b46f72a9646820d04623c4fb67..9e4da9bcfc89a84adf137575a49e95e30e58e64f 100644 --- a/html/functions/db_methods.php +++ b/html/functions/db_methods.php @@ -1,50 +1,5 @@ <?php -function db_addPartie( $csv ){ - - echo $csv; - return; - - $data=array( - 'member:'.get_0($member), - 'location:'.$location, - 'tags:'.$tags, - 'url:'.$url, - 'orderlist:'.preg_replace('/\r\n/',PHP_EOL,$orderlist), - 'price:'.number_format( $price,8,'.','' ), - 'shipping:'.number_format( $shipping,8,'.','' ), - 'currency:'.$currency - ); - $datastring=implode(PHP_EOL,$data); - $m=db_getFromMembersById( $member ); - - $F=new FaircoinAddress($m['fair_address'],false); - if( !$F->verifymessage($datastring , $signature ) ){ - // signature invalid - return array( 'success' => false, 'message' => 'signature could not be verified!', 'd' => [ $m['fair_address'], $datastring, $signature ] ); - } - - $db=new db; - - $signature_hex=bin2hex( base64_decode($signature) ); - $sql = "INSERT INTO stargate_list ( member, location, tags, url, orderlist, price, shipping, currency, signature ) VALUES ( ".$member.",'".$location."','".$tags."','".$url."','".$orderlist."',".$price.", ".$shipping.",'".$currency."', 0x".$signature_hex.")"; - - if ( $db->query($sql) === TRUE) { - // success - $result=array( 'success' => true, 'message' => 'order verified and added successfully!', 'data' => db_getFromListBySignature($signature)); - } else { - // check if already exists - $row=db_getFromListBySignature($signature); - if($row){ - $result=array( 'success' => true, 'message' => 'order already exists and successfully verified!', 'data' => $row ); - } else { - $result=array( 'success' => false, 'message' => 'sql error!' ); - } - } - - unset($db); - return $result; -} function db_addErgebnisse( $csv, $secret ){ $C=preg_split('/,/',$csv); @@ -77,7 +32,7 @@ function db_addErgebnisse( $csv, $secret ){ unset($db); return $result; } -function db_addSpieler( $csv, $secret ){ +function db_addSpieler_old( $csv, $secret ){ $C=preg_split('/,/',$csv); $C[1]='"'.$C[1].'"'; @@ -114,7 +69,75 @@ function db_addSpieler( $csv, $secret ){ if ( $db->query( $sql ) === TRUE) { // success - $result=array( 'success' => true, 'message' => 'Spieltag erfolgreich hinzugefügt!', 'data' => [] ); + $result=array( 'success' => true, 'message' => 'Spieler erfolgreich hinzugefügt!', 'data' => [] ); + } else { + echo 'SQL-Error: '.$sql.'<br>'; + } + + unset($db); + return $result; +} +function db_addSpieler( $csv, $secret ){ + + //CSV: SpielerID,Spieler,Alter,Nt,Saison,Liga,TeamID,Team,S,T,A,Z+,Z-,Zd,Bk,Bi+,Bi-,Attr,Face,Karriereende + + // ba79796eb0452460503db15aefe3c332,Maximilian Koller,20,at,36,4-3,1496,Verein Bottrop,4,3,0,9,5,4,7,12,4,,6_9_7_1_5,0 + // ba79796eb0452460503db15aefe3c332,Maximilian Koller,20,at,36,3-3,1613,SV Saint-Pierre,1,0,0,0,0,0,6,7,0,,6_9_7_1_5,1 + + //DB: teamID,nt,id,attr,name,age,age_saison,face,userID,zeitstempel + + $C=preg_split('/,/',$csv); + + $TEAMS=db_getIdNtFromTeams(); + if( $TEAMS[$C[6]] != $C[3] ) return false; + + $D=[]; + $D[]=$C[6]; // teamID + $D[]='"'.$C[3].'"'; // nt + $D[]='0x'.$C[0]; // id + $D[]='"'.$C[17].'"'; // attr + $D[]='"'.$C[1].'"'; // name + $D[]=$C[2]; // age + $D[]=$C[4]; // age_saison + $D[]='"'.$C[18].'"'; // face + + + /* + $C[1]='"'.$C[1].'"'; + $C[2]='0x'.$C[2]; + $C[3]='"'.$C[3].'"'; + $C[4]='"'.$C[4].'"'; + unset($C[6]); + unset($C[7]); + unset($C[8]); + unset($C[9]); + unset($C[10]); + unset($C[11]); + unset($C[12]); + unset($C[13]); + */ + + //$C[]=SAISON_NOW; + $user=db_checkSecret($secret); + if( empty( $user ) ) return false; + + $D[]=$user['id']; + + if( $S=db_getFromSpielerById($D[2]) ){ + $D[]='"'.$S['zeitstempel'].'"'; + } else { + $D[]='NOW()'; + } + + $csv=implode($D,','); + + $db=new db; + + $sql = "REPLACE INTO Spieler VALUES ( ".$csv." )"; + + if ( $db->query( $sql ) === TRUE) { + // success + $result=array( 'success' => true, 'message' => 'Spieler erfolgreich hinzugefügt!', 'data' => [] ); } else { echo 'SQL-Error: '.$sql.'<br>'; } @@ -350,7 +373,7 @@ function db_getFromStatistikBySaison($saison){ WHERE Ergebnisse.saison = '.$saison.' GROUP BY SpielerID, MID'; */ - $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk" FROM Statistik + $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk", Spieler.face FROM Statistik INNER JOIN Ergebnisse ON Ergebnisse.MID = Statistik.MID LEFT JOIN Spieler ON Spieler.id = Statistik.SpielerID LEFT JOIN Teams ON Teams.id = Spieler.teamID @@ -374,7 +397,7 @@ function db_getFromStatistikBySaison($saison){ function db_getFromStatistik(){ $db=new db; - $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk" FROM Statistik + $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk", Spieler.face FROM Statistik INNER JOIN Ergebnisse ON Ergebnisse.MID = Statistik.MID LEFT JOIN Spieler ON Spieler.id = Statistik.SpielerID LEFT JOIN Teams ON Teams.id = Spieler.teamID diff --git a/html/images/facegenerator/fg_beard_0.png b/html/images/facegenerator/fg_beard_0.png new file mode 100644 index 0000000000000000000000000000000000000000..77a36aebd6722ffea8fe9688a02697784dd6cf7c Binary files /dev/null and b/html/images/facegenerator/fg_beard_0.png differ diff --git a/html/images/facegenerator/fg_beard_1.png b/html/images/facegenerator/fg_beard_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ff605757114a4a59b8b812130be90eb9d8f05f3b Binary files /dev/null and b/html/images/facegenerator/fg_beard_1.png differ diff --git a/html/images/facegenerator/fg_beard_2.png b/html/images/facegenerator/fg_beard_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5d760759490fe3d06c7fb5151932178a6ec3934b Binary files /dev/null and b/html/images/facegenerator/fg_beard_2.png differ diff --git a/html/images/facegenerator/fg_beard_3.png b/html/images/facegenerator/fg_beard_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c89b4e90a1242766a67d2ec377406a17939f1478 Binary files /dev/null and b/html/images/facegenerator/fg_beard_3.png differ diff --git a/html/images/facegenerator/fg_beard_4.png b/html/images/facegenerator/fg_beard_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6d30572273e695f0cf4f17b42816d8e88c9b8a8f Binary files /dev/null and b/html/images/facegenerator/fg_beard_4.png differ diff --git a/html/images/facegenerator/fg_beard_5.png b/html/images/facegenerator/fg_beard_5.png new file mode 100644 index 0000000000000000000000000000000000000000..446a853d612617dc0361adb8c090acd57002b981 Binary files /dev/null and b/html/images/facegenerator/fg_beard_5.png differ diff --git a/html/images/facegenerator/fg_beard_6.png b/html/images/facegenerator/fg_beard_6.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1e2b6ec291def81e937b18e083bdd891e5db20 Binary files /dev/null and b/html/images/facegenerator/fg_beard_6.png differ diff --git a/html/images/facegenerator/fg_beard_7.png b/html/images/facegenerator/fg_beard_7.png new file mode 100644 index 0000000000000000000000000000000000000000..71eec17b0f724bb9e3072048b97ee988c1053f3c Binary files /dev/null and b/html/images/facegenerator/fg_beard_7.png differ diff --git a/html/images/facegenerator/fg_eyes_0.png b/html/images/facegenerator/fg_eyes_0.png new file mode 100644 index 0000000000000000000000000000000000000000..41c7f620b35cad5b94ec726421ec5fa3a86ebe50 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_0.png differ diff --git a/html/images/facegenerator/fg_eyes_1.png b/html/images/facegenerator/fg_eyes_1.png new file mode 100644 index 0000000000000000000000000000000000000000..236ccbe446127f4ff0bd703e74ab7256fa780fc7 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_1.png differ diff --git a/html/images/facegenerator/fg_eyes_10.png b/html/images/facegenerator/fg_eyes_10.png new file mode 100644 index 0000000000000000000000000000000000000000..1565b174e11c1098eb669a28e5bd0212cff8ff84 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_10.png differ diff --git a/html/images/facegenerator/fg_eyes_11.png b/html/images/facegenerator/fg_eyes_11.png new file mode 100644 index 0000000000000000000000000000000000000000..af48b5db1a03a9e36629ffb48103b18b6c3ae05d Binary files /dev/null and b/html/images/facegenerator/fg_eyes_11.png differ diff --git a/html/images/facegenerator/fg_eyes_12.png b/html/images/facegenerator/fg_eyes_12.png new file mode 100644 index 0000000000000000000000000000000000000000..528be71ef853ed094fff2981f23bff30cf0a105d Binary files /dev/null and b/html/images/facegenerator/fg_eyes_12.png differ diff --git a/html/images/facegenerator/fg_eyes_13.png b/html/images/facegenerator/fg_eyes_13.png new file mode 100644 index 0000000000000000000000000000000000000000..40c28717045b5faa535eff78d3c3667042eb8c98 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_13.png differ diff --git a/html/images/facegenerator/fg_eyes_2.png b/html/images/facegenerator/fg_eyes_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5efbab8c36b77426a699e5a263f796142e5faa36 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_2.png differ diff --git a/html/images/facegenerator/fg_eyes_3.png b/html/images/facegenerator/fg_eyes_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8802a246ae3f41d402c02c5e0ca5355cdf1757f1 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_3.png differ diff --git a/html/images/facegenerator/fg_eyes_4.png b/html/images/facegenerator/fg_eyes_4.png new file mode 100644 index 0000000000000000000000000000000000000000..8f010ceeae5c208f5a9de466282a269201ad9a89 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_4.png differ diff --git a/html/images/facegenerator/fg_eyes_5.png b/html/images/facegenerator/fg_eyes_5.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff1574e76dc74bf83f2d7f9a732513d20cded64 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_5.png differ diff --git a/html/images/facegenerator/fg_eyes_6.png b/html/images/facegenerator/fg_eyes_6.png new file mode 100644 index 0000000000000000000000000000000000000000..126f6df285d7ebe0d1f6049d586aa68f5d6f51f0 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_6.png differ diff --git a/html/images/facegenerator/fg_eyes_7.png b/html/images/facegenerator/fg_eyes_7.png new file mode 100644 index 0000000000000000000000000000000000000000..95a18072e160053537dd5a995f51e2e9a1d50fec Binary files /dev/null and b/html/images/facegenerator/fg_eyes_7.png differ diff --git a/html/images/facegenerator/fg_eyes_8.png b/html/images/facegenerator/fg_eyes_8.png new file mode 100644 index 0000000000000000000000000000000000000000..76a4203c82a042d81b80bb7004c8258df735b5fd Binary files /dev/null and b/html/images/facegenerator/fg_eyes_8.png differ diff --git a/html/images/facegenerator/fg_eyes_9.png b/html/images/facegenerator/fg_eyes_9.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0686642b0de7b38fdedc033fc417509f40f106 Binary files /dev/null and b/html/images/facegenerator/fg_eyes_9.png differ diff --git a/html/images/facegenerator/fg_hair_0.png b/html/images/facegenerator/fg_hair_0.png new file mode 100644 index 0000000000000000000000000000000000000000..71b9a999a112faf12d15bd25912f67b1b4b43b78 Binary files /dev/null and b/html/images/facegenerator/fg_hair_0.png differ diff --git a/html/images/facegenerator/fg_hair_1.png b/html/images/facegenerator/fg_hair_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9fdad91415b07bcb7ef5bade9704ae6cae5819 Binary files /dev/null and b/html/images/facegenerator/fg_hair_1.png differ diff --git a/html/images/facegenerator/fg_hair_10.png b/html/images/facegenerator/fg_hair_10.png new file mode 100644 index 0000000000000000000000000000000000000000..fffa87703d64f51736aae5f9c9dfc5c034738495 Binary files /dev/null and b/html/images/facegenerator/fg_hair_10.png differ diff --git a/html/images/facegenerator/fg_hair_11.png b/html/images/facegenerator/fg_hair_11.png new file mode 100644 index 0000000000000000000000000000000000000000..796b54d77502878cae3bd2c0e28f1f452adb9660 Binary files /dev/null and b/html/images/facegenerator/fg_hair_11.png differ diff --git a/html/images/facegenerator/fg_hair_12.png b/html/images/facegenerator/fg_hair_12.png new file mode 100644 index 0000000000000000000000000000000000000000..fa30db66a001d50fdc0a702b1b780ff88f9fc67f Binary files /dev/null and b/html/images/facegenerator/fg_hair_12.png differ diff --git a/html/images/facegenerator/fg_hair_13.png b/html/images/facegenerator/fg_hair_13.png new file mode 100644 index 0000000000000000000000000000000000000000..cfeb350e3c6002463eae9588635d65bb69386d3a Binary files /dev/null and b/html/images/facegenerator/fg_hair_13.png differ diff --git a/html/images/facegenerator/fg_hair_14.png b/html/images/facegenerator/fg_hair_14.png new file mode 100644 index 0000000000000000000000000000000000000000..77479294a72d7eac32f63d4f615efc63797eb32c Binary files /dev/null and b/html/images/facegenerator/fg_hair_14.png differ diff --git a/html/images/facegenerator/fg_hair_15.png b/html/images/facegenerator/fg_hair_15.png new file mode 100644 index 0000000000000000000000000000000000000000..451a91f6d4991d800854db1a69dfd9d98ccf5bc2 Binary files /dev/null and b/html/images/facegenerator/fg_hair_15.png differ diff --git a/html/images/facegenerator/fg_hair_2.png b/html/images/facegenerator/fg_hair_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6f59e6c4787d5dbfd1dd2fcf86b32c495072faa4 Binary files /dev/null and b/html/images/facegenerator/fg_hair_2.png differ diff --git a/html/images/facegenerator/fg_hair_3.png b/html/images/facegenerator/fg_hair_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5acf3e09cc6360d18c8f1ea71471b8614c1d5ebd Binary files /dev/null and b/html/images/facegenerator/fg_hair_3.png differ diff --git a/html/images/facegenerator/fg_hair_4.png b/html/images/facegenerator/fg_hair_4.png new file mode 100644 index 0000000000000000000000000000000000000000..651a18aaae8654404e32f4faac4d7fab33ae9b42 Binary files /dev/null and b/html/images/facegenerator/fg_hair_4.png differ diff --git a/html/images/facegenerator/fg_hair_5.png b/html/images/facegenerator/fg_hair_5.png new file mode 100644 index 0000000000000000000000000000000000000000..18807bfab988ecee0d6db0574dcb179d679c6394 Binary files /dev/null and b/html/images/facegenerator/fg_hair_5.png differ diff --git a/html/images/facegenerator/fg_hair_6.png b/html/images/facegenerator/fg_hair_6.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2b168ff2b7a0dc97cd761043a5f1556205df37 Binary files /dev/null and b/html/images/facegenerator/fg_hair_6.png differ diff --git a/html/images/facegenerator/fg_hair_7.png b/html/images/facegenerator/fg_hair_7.png new file mode 100644 index 0000000000000000000000000000000000000000..d4da8eeb2cdb5284a9d1736df3a7302670c9c20b Binary files /dev/null and b/html/images/facegenerator/fg_hair_7.png differ diff --git a/html/images/facegenerator/fg_hair_8.png b/html/images/facegenerator/fg_hair_8.png new file mode 100644 index 0000000000000000000000000000000000000000..e3010e73be6acda360632bf66309911119daa215 Binary files /dev/null and b/html/images/facegenerator/fg_hair_8.png differ diff --git a/html/images/facegenerator/fg_hair_9.png b/html/images/facegenerator/fg_hair_9.png new file mode 100644 index 0000000000000000000000000000000000000000..69fbb166b7784e6144f50a31482ab5daf610c638 Binary files /dev/null and b/html/images/facegenerator/fg_hair_9.png differ diff --git a/html/images/facegenerator/fg_head_0.png b/html/images/facegenerator/fg_head_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ec985cc0266bb62c46c623e5ffae4c1e2d6988 Binary files /dev/null and b/html/images/facegenerator/fg_head_0.png differ diff --git a/html/images/facegenerator/fg_head_1.png b/html/images/facegenerator/fg_head_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d84610072fb8c16de0d0ad6aeb50a1db2db25dcb Binary files /dev/null and b/html/images/facegenerator/fg_head_1.png differ diff --git a/html/images/facegenerator/fg_head_2.png b/html/images/facegenerator/fg_head_2.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7ca1b862ca52a5d80de9a60d4aa53e957d3f5d Binary files /dev/null and b/html/images/facegenerator/fg_head_2.png differ diff --git a/html/images/facegenerator/fg_head_3.png b/html/images/facegenerator/fg_head_3.png new file mode 100644 index 0000000000000000000000000000000000000000..61a4987ceb713316aff3995061dcb4056012d471 Binary files /dev/null and b/html/images/facegenerator/fg_head_3.png differ diff --git a/html/images/facegenerator/fg_head_4.png b/html/images/facegenerator/fg_head_4.png new file mode 100644 index 0000000000000000000000000000000000000000..12c4420db671b0f6c4a989cea21b2e1cea37bd06 Binary files /dev/null and b/html/images/facegenerator/fg_head_4.png differ diff --git a/html/images/facegenerator/fg_head_5.png b/html/images/facegenerator/fg_head_5.png new file mode 100644 index 0000000000000000000000000000000000000000..3f95020741e2eaabbb2f3c6fd26e55cf6c801bcc Binary files /dev/null and b/html/images/facegenerator/fg_head_5.png differ diff --git a/html/images/facegenerator/fg_head_6.png b/html/images/facegenerator/fg_head_6.png new file mode 100644 index 0000000000000000000000000000000000000000..46dd6ba992f8eab4dba78034cfd68bf2748e1489 Binary files /dev/null and b/html/images/facegenerator/fg_head_6.png differ diff --git a/html/images/facegenerator/fg_head_7.png b/html/images/facegenerator/fg_head_7.png new file mode 100644 index 0000000000000000000000000000000000000000..2c16de64626a9a0f4da761586bf0345563b9d852 Binary files /dev/null and b/html/images/facegenerator/fg_head_7.png differ diff --git a/html/images/facegenerator/fg_mouth_0.png b/html/images/facegenerator/fg_mouth_0.png new file mode 100644 index 0000000000000000000000000000000000000000..114e20c3d5d1058f544e03b24b3d67b722df2875 Binary files /dev/null and b/html/images/facegenerator/fg_mouth_0.png differ diff --git a/html/images/facegenerator/fg_mouth_1.png b/html/images/facegenerator/fg_mouth_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3a4b0533e19685b4f10fd3ce58d14be2daecc7f0 Binary files /dev/null and b/html/images/facegenerator/fg_mouth_1.png differ diff --git a/html/images/facegenerator/fg_mouth_2.png b/html/images/facegenerator/fg_mouth_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cfbfe3281acc4c802baed7152e99b5c20867e71a Binary files /dev/null and b/html/images/facegenerator/fg_mouth_2.png differ diff --git a/html/images/facegenerator/fg_mouth_3.png b/html/images/facegenerator/fg_mouth_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5088c7a7e815ee318cc11b5532ebb144601ce3bb Binary files /dev/null and b/html/images/facegenerator/fg_mouth_3.png differ diff --git a/html/images/facegenerator/fg_mouth_4.png b/html/images/facegenerator/fg_mouth_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ea6f7bc15eea1de58e3558040e1e8123649a7c Binary files /dev/null and b/html/images/facegenerator/fg_mouth_4.png differ diff --git a/html/images/facegenerator/fg_mouth_5.png b/html/images/facegenerator/fg_mouth_5.png new file mode 100644 index 0000000000000000000000000000000000000000..08e2546bbacd258cbea468afd558adcd36346353 Binary files /dev/null and b/html/images/facegenerator/fg_mouth_5.png differ diff --git a/html/images/facegenerator/fg_mouth_6.png b/html/images/facegenerator/fg_mouth_6.png new file mode 100644 index 0000000000000000000000000000000000000000..263a9168bfaaed936d7391031d74f7446a2b33d4 Binary files /dev/null and b/html/images/facegenerator/fg_mouth_6.png differ diff --git a/html/images/facegenerator/fg_mouth_7.png b/html/images/facegenerator/fg_mouth_7.png new file mode 100644 index 0000000000000000000000000000000000000000..d070f187d7f5aac7f6a1596d7cf1463c2fa6ee9a Binary files /dev/null and b/html/images/facegenerator/fg_mouth_7.png differ