/php/auxiliary.php
PHP | 508 lines | 342 code | 102 blank | 64 comment | 56 complexity | c306c1f3517af2c53431eadc8150b9cd MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.1
- <?php
- /* auxiliary.php - Auxiliary back-end functions that aren't used often
- *
- * Copyright (C) 2006, 2007, 2008 Kevin Read, Simone Schaefer
- *
- * This file is part of Selador, a browser-based fantasy strategy game
- *
- * This program is distributed under the terms of the GNU Affero General Public License.
- *
- *
- * Selador is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * any later version.
- *
- * Selador is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Selador. If not, see <http://www.gnu.org/licenses/>.
- **/
- // Seems to work ok.
- function AllocResTiles ($playerid, $villageid, $x, $y)
- {
- global $world;
- $x -= 1; // center them
- $y -= 1;
- foreach ($world->citytilesy as $index => $cty)
- {
- $my = ($y + $cty);
- $mx = ($x + $world->citytilesx[$index]);
- /* if ($mx < 0)
- $mx += $world->sizex;
- if ($my < 0)
- $my += $world->sizey; */
- $query = "insert into tileres (villageid, x, y, uid, level, staff, time_exhaust) values (".$villageid.", ".$mx.", ".$my.", ".$playerid.", 0, 0, \"2038-01-01 00:00:00\")";
- // echo $query."\n";
- mysql_query ($query);
- // echo $index.", looking at ".$ctx.", ".$world->citytilesy[$index]." (".$debugmap[$ctx][$world->citytilesy[$index]].": ".((int)($map[$ctx][$world->citytilesy[$index]] / 100))."\n";
- }
- }
- function CleanOutUser ($uid)
- {
- global $gamedb, $authdb, $_ghost_uids, $world;
- $query = "insert into deleted_users_villages select uid, villageid from village where uid=".$uid;
- if (!($res = $gamedb->query ($query)))
- {
- log_err ("Cannot log delete attempt user villages. Query: ".$query.", ".$gamedb->error ());
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- $gamedb->query ("rollback");
- return (false);
- }
- $query = "insert into deleted_users select uid, created, now() from user where uid=".$uid;
- if (!($res = $gamedb->query ($query)))
- {
- log_err ("Cannot log delete attempt. Query: ".$query.", ".$gamedb->error ());
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- $gamedb->query ("rollback");
- return (false);
- }
- $query = "select race from user where uid=".$uid;
- if (!($res = $gamedb->query ($query)))
- {
- log_err ("Cannot look up race for user that should be deleted. Query: ".$query.", ".$gamedb->error ());
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- $gamedb->query ("rollback");
- return (false);
- }
- else
- {
- if (!($row = mysql_fetch_array ($res)))
- {
- log_err ("User ".$uid." doesn't have an entry when deleting. Query: ".$query.", ".mysql_error ());
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- $gamedb->query ("rollback");
- return (false);
- }
- else
- {
- // Now we know the race, we can select the correct ghost uid.
- $race = $row['race'];
- $ghost_uid = $_ghost_uids[$race];
- // Flush the cache for this guys villages
- $query = "select x,y,villageid from village where uid=".$uid;
- if (!($res = $gamedb->query ($query)))
- {
- log_err ("Cannot find coordinates for user ".$uid." when deleting him. Query: ".$query.", ".mysql_error ());
- $gamedb->query ("rollback");
- return (false);
- }
- else
- {
- if (!mysql_num_rows ($res))
- {
- log_err ("User ".$uid." has no villages when we delete him! Query: ".$query);
- $gamedb->query ("rollback");
- return (false);
- }
- else
- {
- while ($vrow = mysql_fetch_array ($res))
- {
- $world->ClearMapCache ($vrow['x'], $vrow['y']);
- $world->ClearLandCache ($vrow['x'], $vrow['y']);
- // Ok, to delete heroes we set the uid for all villages of the player to the
- // uid of the global "deleted" user, as well as redirect all events targeted
- // at this player.
- $query = "update village set name=\"Geisterstadt (".$vrow['x']."|".$vrow['y'].")\",uid=".$ghost_uid." where villageid=".$vrow['villageid'];
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler (16) aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot pass on villages while deleting user ".$query.", ".$authdb->error ());
- }
- }
- }
- // Now clear out the armies. First we delete all hero units, then
- // we move them over to the ghost account
- $query = "update troops set amount=0 where unitid=1000 and troopid in (select troopid from armies where uid=".$uid.")";
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler (17) aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot delete hero units while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- }
- else
- {
- // Delete all outside armies (this will also squash the empty hero army if there is one)
- $query = "select A.troopid from armies A where A.uid=".$uid." and A.villageid!=A.location and (A.flag=0 or A.flag=6);";
- if (!($res = $gamedb->query ($query)))
- {
- $delerr = "Leider ist ein Datenbank-Fehler (18) aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot find outside armies while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- return (false);
- }
- $deltroopids = array ();
- // And now delete every row - ugly but I don't care just now
- while ($row = mysql_fetch_array ($res))
- {
- $deltroopids[] = $row['troopid'];
- }
- if (count ($deltroopids) > 0)
- {
- $query = "delete from armies where troopid in (".implode (",", $deltroopids).")";
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot delete outside armies while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- return (false);
- }
- $query = "delete from troops where troopid in (".implode (",", $deltroopids).")";
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot delete outside troops while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- return (false);
- }
- }
- $query = "update armies set uid=".$ghost_uid." where uid=".$uid;
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot pass on armies while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- return (false);
- }
- else
- {
- $query = "delete from event where uid1=".$uid." and type=".RESEARCH;
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot delete research events while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- }
- else
- {
- $query = "update event set uid1=".$ghost_uid." where uid1=".$uid;
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot pass on own events while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- }
- else
- {
- $query = "update event set uid2=".$ghost_uid." where uid2=".$uid;
- if (!$gamedb->query ($query))
- {
- $delerr = "Leider ist ein Datenbank-Fehler aufgetreten. Bitte versuche es später noch einmal.";
- log_err ("Cannot pass on foreign events while deleting user ".$gamedb->error ());
- $gamedb->query ("rollback");
- }
- else
- {
- $query = "delete from worlds_players where uid=".$uid." and worldname=\"".WORLDNAME."\"";
- if (!$authdb->query ($query))
- log_err ("Cannot delete player from world in deleting user. Query: ".$query.", ".$authdb->error ());
- $query = "delete from offers where uid=".$uid;
- if (!$gamedb->query ($query))
- log_err ("Cannot delete offers in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from ally_blog_comments where entryId in (select entryid from ally_blog where userid=".$uid.")";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete blog comment responses in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from ally_blog where userid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete blog posts in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from ally_invite where uid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete ally invites in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "update allyactions set stamp=stamp,uid1=NULL where uid1=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot remove allyactions1 in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "update allyactions set stamp=stamp,uid2=NULL where uid2=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot remove allyactions2 in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from allymembers where uid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete allymembers in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from allyperms where uid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete allyperms in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "update bat_armies set uid=".$ghost_uid." where uid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot update bat_armies in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "update rep_loot set value=".$ghost_uid." where value=".$uid." and coin in (4,5,6,7,8,9,10,11,60,0,1,2,3,30)";
- if (!$gamedb->query ($query))
- log_err ("Cannot update rep_loot in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "update reports set stamp=stamp,uid1=".$ghost_uid." where uid1=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot remove battles1 in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "update reports set stamp=stamp,uid2=".$ghost_uid." where uid2=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot remove battles2 in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from profile where userid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete profile in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from hero where uid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete hero in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from user where uid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete user in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- $query = "delete from hero where uid=".$uid."";
- if (!$gamedb->query ($query))
- log_err ("Cannot delete hero in cleanoutusers. Query: ".$query.", ".$gamedb->error ());
- }
- }
- }
- }
- }
- }
- }
- }
- }
- function calculate_ranking ($db)
- {
- global $_ghost_uids;
- $oneweek = 24*3600*7;
- $twoweeks = $oneweek * 2;
- $query = 'update user set userstate=null,inactivity=0 where userstate<now()';
- $db->query ($query);
- $query = 'update user set score=0 where user="Geist"';
- $db->query ($query);
- $query = "select uid, score, unix_timestamp(now())-unix_timestamp(changed),inactivity from user where uid not in (".implode (",", $_ghost_uids)." ) order by score desc";
- if (!($res = mysql_query ($query)))
- echo "Cannot calculate ranking: ".$query.", ".$db->error ();
- $number_rows = mysql_num_rows ($res);
- $query = "replace into ranking values ";
- $prefix = "";
- for ($temp = 1; $temp <= $number_rows; $temp++)
- {
- $row = mysql_fetch_row($res);
- // echo $temp.": ".$row[0].": ".$row[1]."\n";
- $query .= $prefix."(".$row[0].", ".$temp.")";
- $prefix = ",";
- // Do not change the state of blocked players
- if ($row[3] == 3)
- continue;
- // Reactivate players that started playing again
- if (($row[2] < $oneweek) && ($row[3] > 0))
- {
- $re_act[] = $row[0];
- }
- else
- {
- // Mark semi-active players as semi-active
- if (($row[2] >= $oneweek) && ($row[3] == 0))
- $de_act[] = $row[0];
- /* else
- {
- if (($row[2] > $twoweeks) && ($row[3] < 2))
- $kill[] = $row[0];
- }*/
- }
- }
- if (isset ($re_act))
- {
- // echo "Wieder aktivierte:\n";
- $digits = log (count ($re_act), 10) + 10;
- /* foreach ($re_act as $idx=>$uid)
- echo $idx.": ".$uid."\n"; */
- // echo "\n";
- $aquery = "update user set changed=changed,inactivity=0 where uid in (".implode (",", $re_act).")";
- if (!mysql_query ($aquery))
- echo "Konnte diese Spieler nicht reaktivieren! Fehler: ".mysql_error ();
- // echo $query;
- }
- if (isset ($de_act))
- {
- // echo "Jetzt semi-aktive:\n";
- /* foreach ($de_act as $idx=>$uid)
- echo $idx.": ".$uid."\n"; */
- // echo "\n";
- $aquery = "update user set changed=changed,inactivity=1 where uid in (".implode (",", $de_act).")";
- if (!mysql_query ($aquery))
- echo "Konnte diese Spieler nicht semi-aktivieren! Fehler: ".mysql_error ();
- }
- if (isset ($kill))
- {
- // echo "Jetzt deaktive:\n";
- /* foreach ($kill as $idx=>$uid)
- echo $idx.": ".$uid."\n"; */
- // echo "\n";
- $aquery = "update user set changed=changed,inactivity=2 where uid in (".implode (",", $kill).")";
- /* if (!mysql_query ($query))
- echo "Konnte diese Spieler nicht deaktivieren! Fehler: ".mysql_error (); */
- }
- // echo $query;
- mysql_query ($query);
- $query = "select uid, xp from user where uid not in (".implode (",", $_ghost_uids)." ) order by xp desc";
- $res = mysql_query ($query);
- $number_rows = mysql_num_rows ($res);
- $query = "replace into hero_ranking values ";
- $prefix = "";
- for ($temp = 1; $temp <= $number_rows; $temp++)
- {
- $row = mysql_fetch_row($res);
- // echo $temp.": ".$row[0].": ".$row[1]."\n";
- $query .= $prefix."(".$row[0].", ".$temp.")";
- $prefix = ",";
- }
- mysql_query ($query);
- $query = "select A.aid, sum(round((B.score)/1000)) as score, count(A.uid) as players from allymembers A, user B where A.uid=B.uid group by A.aid order by score desc";
- $res = mysql_query ($query);
- $number_rows = mysql_num_rows ($res);
- $query = "replace into ally_ranking (aid, aranking, ascore, players) values ";
- $prefix = "";
- for ($temp = 1; $temp <= $number_rows; $temp++)
- {
- $row = mysql_fetch_row($res);
- $query .= $prefix."(".$row[0].", ".$temp.", ".$row[1].", ".$row[2].")";
- $prefix = ",";
- }
- mysql_query ($query);
- /**jetzt die kriegsstatistik*/
- // $query = "select A.aid, sum(round((B.score)/1000)) as score, count(A.uid) as players from allymembers A, user B where A.uid=B.uid group by A.aid order by score desc";
- $query = "select A.aid, A.score, A.lost, A.won, (A.score / (A.lost + A.won)) as average from war_stats A order by A.score desc,A.won desc, A.lost desc";//;, A.won, A.lost desc";
- //echo "Query ist: ".$query."\n";
- $res = mysql_query ($query);
- $number_rows = mysql_num_rows ($res);
- $query = "replace into war_ranking (aid, ranking, score, lost, won, average) values ";
- $prefix = "";
- for ($temp = 1; $temp <= $number_rows; $temp++)
- {
- $row = mysql_fetch_row($res);
- if ($row[4] == NULL)
- $row[4] = 0;
- $query .= $prefix."(".$row[0].", ".$temp.", ".$row[1].", ".$row[2].", ".$row[3].", ".$row[4].")";
- $prefix = ",";
- }
- //echo $query."\n";
- mysql_query ($query);
- }
- function CheckPasswordStrength($password)
- {
- $strength = 0;
- $patterns = array('#[a-z]#','#[A-Z]#','#[0-9]#','/[!"$%^&*()`{}\[\]:@~;\'#<>?,.\/\\-=_+\|]/');
- foreach($patterns as $pattern)
- {
- if(preg_match($pattern,$password,$matches))
- {
- $strength++;
- }
- }
- return $strength;
- // 1 - weak
- // 2 - not weak
- // 3 - acceptable
- // 4 - strong
- }
- ?>