PageRenderTime 62ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 0ms

/newhero.php

https://bitbucket.org/obsidian/selador
PHP | 523 lines | 426 code | 63 blank | 34 comment | 43 complexity | 9313cf2a983ee6dc9a44393a78ebca25 MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.1
  1. <?php
  2. /* newhero.php - Front-end code adding a new hero for a logged-in user
  3. *
  4. * Copyright (C) 2006, 2007, 2008 Kevin Read, Simone Schaefer
  5. *
  6. * This file is part of Selador, a browser-based fantasy strategy game
  7. *
  8. * This program is distributed under the terms of the GNU Affero General Public License.
  9. *
  10. *
  11. * Selador is free software: you can redistribute it and/or modify
  12. * it under the terms of the GNU Affero General Public License as published by
  13. * the Free Software Foundation, either version 3 of the License, or
  14. * any later version.
  15. *
  16. * Selador is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. * GNU Affero General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU Affero General Public License
  22. * along with Selador. If not, see <http://www.gnu.org/licenses/>.
  23. **/
  24. @header ("Content-Type: text/html; charset=UTF-8");
  25. @session_start ();
  26. if (!isset ($_SESSION['authed_user']) || !isset ($_SESSION['email_ok']))
  27. {
  28. require_once ("php/auth.php");
  29. ShowAuth();
  30. die ();
  31. }
  32. if (!$_SESSION['email_ok'])
  33. {
  34. require_once ("activate.php");
  35. die ();
  36. }
  37. require_once ("php/base_functions.php");
  38. require_once ("php/base_outside.php");
  39. require_once ("php/base/config.inc.php");
  40. require_once ("php/base/functions.inc.php");
  41. // require_once ("auth.php");
  42. $glob_log = array ();
  43. ?>
  44. <!-- <div id="background"></div> -->
  45. <?php
  46. require_once("header_extern.php");
  47. echo '</head>';
  48. require_once("menue_portal.php");
  49. echo '<div id="zentriert">
  50. <div id="contentbox">';
  51. ?>
  52. <!--<img src="gfx/steinhaus.jpg">-->
  53. <!--<div id="leiste-links" style="background-image:url(styles/sun/leiste-links.png);height:440px">
  54. <div id="angriffe">Held erstellen</div>
  55. <div id="rohstoffe">
  56. <span style="font-size:12px;">Hilfe zu den allgemeinen Benutzerdaten findest du <a href="hilfe_anmeldung.php" target="_blank">hier</a>.<br><br> Das [?] gibt Hilfe zu einem bestimmten Men&uuml;punkt</span></div></div>-->
  57. <div id="forschung" style="left:70px">
  58. <div id="seite-links" >
  59. <?php
  60. require_once ("php/base/user.inc.php");
  61. require_once ("php/base/AuthDB.inc.php");
  62. require_once ("php/auxiliary.php");
  63. if (!isset ($authdb))
  64. $authdb = new AuthDB;
  65. $db = new GameDB;
  66. if (isset ($_GET['debug']))
  67. $debug = true;
  68. if (!isset($_POST['nhsubmit']))
  69. {
  70. $show_screen = true;
  71. }
  72. else
  73. {
  74. $userid = $_SESSION['authed_uid'];
  75. $username = $_SESSION['authed_user'];
  76. $email = $_SESSION['authed_email'];
  77. $pw1 = $_SESSION['pwh'];
  78. if ((isset ($_POST['ecke'])) && (strlen ($_POST['ecke']) > 0))
  79. $ecke = $_POST['ecke'];
  80. else
  81. $errmsg .= "Ung&uuml;ltige Startecke.<br>";
  82. if ((isset ($_POST['Volk'])) && (strlen ($_POST['Volk']) > 0))
  83. $Volk = $_POST['Volk'];
  84. else
  85. $errmsg .= "Ung&uuml;ltiges Volk.<br>";
  86. if ((isset ($_POST['klasse'])) && (strlen ($_POST['klasse']) > 0))
  87. $klasse = $_POST['klasse'];
  88. else
  89. $errmsg .= "Ung&uuml;ltige Klasse.<br>";
  90. if (isset ($_POST['geschlecht']))
  91. $herosex = (int)$_POST['geschlecht'];
  92. else
  93. $errmsg .= "Ung&uuml;ltiges Geschlecht.<br>";
  94. if (!isset($_POST['accept']) || (int)$_POST['accept'] == 0)
  95. $errmsg .= "Du musst die AGB akzeptieren, um die anzumelden. ";
  96. $query = "select * from user where user like \"".$username."\"";
  97. $result = mysql_query ($query);
  98. if (mysql_num_rows ($result) > 0)
  99. $errmsg .= "In dieser Welt hast Du bereits einen Helden!.<br>";
  100. if ($errmsg)
  101. $show_screen = true;
  102. else
  103. {
  104. $world = new World;
  105. $world->ConnectWorld();
  106. $xw = $world->sizex;
  107. $yw = $world->sizey;
  108. $xwh = (int)($xw / 2);
  109. $ywh = (int)($yw / 2); // Select starting avatar
  110. if ($Volk == 1)
  111. {
  112. // humans get the unisex avatar
  113. $avatar = "gfx/a/all.png";
  114. }
  115. else
  116. {
  117. // orc avatars depend on sex
  118. // if ($herosex == 1) // not yet, we don't have any orc females :(
  119. $avatar = "gfx/a/o/m/1.png";
  120. /* else
  121. $avatar = "gfx/a/o/ */
  122. }
  123. switch ($ecke)
  124. {
  125. case 'nordwesten':
  126. $query = "select x, y, sqrt((".$xwh."-x)*(".$xwh."-x) + (".$ywh."-y)*(".$ywh."-y)) as dist from startvillage where x < ".$xwh." and y < ".$ywh." order by dist";
  127. break;
  128. case 'nordosten':
  129. $query = "select x, y, sqrt((".$xwh."-x)*(".$xwh."-x) + (".$ywh."-y)*(".$ywh."-y)) as dist from startvillage where x >= ".$xwh." and y < ".$ywh." order by dist";
  130. break;
  131. case 'suedwesten':
  132. $query = "select x, y, sqrt((".$xwh."-x)*(".$xwh."-x) + (".$ywh."-y)*(".$ywh."-y)) as dist from startvillage where x < ".$xwh." and y >= ".$ywh." order by dist";
  133. break;
  134. case 'suedosten':
  135. $query = "select x, y, sqrt((".$xwh."-x)*(".$xwh."-x) + (".$ywh."-y)*(".$ywh."-y)) as dist from startvillage where x >= ".$xwh." and y >= ".$xwh." order by dist";
  136. break;
  137. default:
  138. echo "Baaah!";
  139. die();
  140. break;
  141. }
  142. mysql_query ("start transaction");
  143. if (!($res = mysql_query ($query)))
  144. {
  145. $err = true;
  146. mini_log_err ("region select query failed: ".$query.": ".mysql_error());
  147. }
  148. if ($row = mysql_fetch_array ($res))
  149. {
  150. // FIXME: This definitely should be semaphored and be done without autocommiting
  151. $query = 'insert into user (uid, user, name, password, perms, created, race, class, hero_sex, email, last_healed, hero_health, msgs) values ('.$userid.', "'.$username.'", "", md5("'.$pw1.'"), 0, now(), '.$Volk.', '.$klasse.', '.$herosex. ', "'.$email.'", now(), 500, 1)';
  152. // echo $query;
  153. if (!mysql_query ($query))
  154. {
  155. $err = true;
  156. mini_log_err ("User insert query failed: ".$query.": ".mysql_error());
  157. mysql_query ("rollback");
  158. }
  159. else
  160. {
  161. $query = "insert into village (uid, original_uid, name, x, y, resmax, ress1, ress2, ress3, ress4, stamp, buildspeed, expansion) values (".$userid.", ".$userid.", \"".$username."s Stadt\", ".$row['x'].", ".$row['y'].", " . LVL1_STORAGE . ", 3500, 3500, 3500, 200, now(), 1.0, 0)";
  162. // echo $query."<br>";
  163. if (!mysql_query ($query))
  164. {
  165. $err = true;
  166. mini_log_err ("Village insert query failed: ".$query.": ".mysql_error());
  167. mysql_query ("rollback");
  168. }
  169. else
  170. {
  171. $villageid = mysql_insert_id ();
  172. $query = "delete from startvillage where x = ".$row['x']." and y = ".$row['y'];
  173. // echo $query."<br>";
  174. if (!mysql_query ($query))
  175. {
  176. $err = true;
  177. mini_log_err ("startvillage delete query failed: ".$query.": ".mysql_error());
  178. mysql_query ("rollback");
  179. }
  180. else
  181. {
  182. AllocResTiles ($userid, $villageid, $row['x'], $row['y']);
  183. $x = $row['x'];
  184. $y = $row['y'];
  185. // Insert starting main building and storage
  186. $query = "insert into villbuild values (".$villageid.", 1, 1),(".$villageid.", 6, 1)";
  187. if (!mysql_query ($query))
  188. {
  189. mini_log_err ("Cannot insert bergfried and storage for starting village. Query: ".$query.", ".mysql_error());
  190. $err = true;
  191. mysql_query ("rollback");
  192. }
  193. else
  194. {
  195. $query = "update tileres set level=1 where x=".($row['x']-1)." and y=".$row['y'];
  196. if (!mysql_query ($query))
  197. {
  198. mini_log_err ("Cannot update starting village ress tiles. Query: ".$query.", ".mysql_error());
  199. $err = true;
  200. mysql_query ("rollback");
  201. }
  202. else
  203. {
  204. $query = "update tileres set level=1 where x=".($row['x']+1)." and y=".$row['y'];
  205. if (!mysql_query ($query))
  206. {
  207. mini_log_err ("Cannot update starting village ress tiles. Query: ".$query.", ".mysql_error());
  208. mysql_query ("rollback");
  209. $err = true;
  210. }
  211. else
  212. {
  213. $query = "update tileres set level=1 where x=".$row['x']." and y=".($row['y']+1);
  214. if (!mysql_query ($query))
  215. {
  216. mysql_query ("rollback");
  217. mini_log_err ("Cannot update starting village ress tiles. Query: ".$query.", ".mysql_error());
  218. $err = true;
  219. }
  220. else
  221. {
  222. $query = "update tileres set level=1 where x=".$row['x']." and y=".($row['y']-1);
  223. if (!mysql_query ($query))
  224. {
  225. mini_log_err ("Cannot update starting village ress tiles. Query: ".$query.", ".mysql_error());
  226. $err = true;
  227. mysql_query ("rollback");
  228. }
  229. else
  230. {
  231. $query = "insert into hero (uid,att,hp,ini,survival,speed,damage,capacity,level,p1,p2,p3,m1,m2,m3,points_p,points_m,regen) values (".$userid.", 60, 500, 60, 80, 200, 150, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 50)";
  232. if (!mysql_query ($query))
  233. {
  234. mini_log_err ("Cannot insert starting hero values. Query: ".$query.", ".mysql_error());
  235. $err = true;
  236. mysql_query ("rollback");
  237. }
  238. else
  239. {
  240. $me = new User;
  241. $me->uid = $userid;
  242. $me->becomeUserByUid($userid);
  243. $me->CalcResearch (true);
  244. $me->UpdateResTile (0, 0, 0, 0, $villageid);
  245. $me->CalculateVillageProd($villageid);
  246. $world->ClearMapCache ($x, $y);
  247. $world->ClearLandCache ($x, $y);
  248. $query = "insert into armies (villageid,uid,flag,location) values (".$villageid.", ".$userid.", 0, ".$villageid.")";
  249. if (!mysql_query ($query))
  250. {
  251. mysql_query ("rollback");
  252. mini_log_err ("Couldn't insert starting army for new user. Query: ".$query.", ".mysql_error ());
  253. $err = true;
  254. }
  255. else
  256. {
  257. $troopid = mysql_insert_id ();
  258. $query = "insert into troops select ".$troopid.",unitid,0 from units where raceid=".$Volk;
  259. if (!mysql_query ($query))
  260. mini_log_err ("Couldn't insert starting troops for new user. Query: ".$query.", ".mysql_error ());
  261. $query = "insert into troops values (".$troopid.", 1000, 1)";
  262. if (!mysql_query ($query))
  263. {
  264. mini_log_err ("Couldn't insert starting hero troop for new user. Query: ".$query.", ".mysql_error ());
  265. mysql_query ("rollback");
  266. $err = true;
  267. }
  268. else
  269. {
  270. unset($query);
  271. $query='insert into profile (userid, sex, birthday, realname, city, icq, description, picture) values ('.$userid.', '.$herosex.', "0000-00-00", "keine Angabe", "keine Angabe", "", "", "'.$avatar.'")';
  272. if (!mysql_query ($query))
  273. {
  274. mini_log_err ("Couldn't insert starting profile for new user. Query: ".$query.", ".mysql_error ());
  275. }
  276. $query = "update user set hero_location=".$villageid." where uid=".$userid;
  277. if (!mysql_query ($query))
  278. {
  279. mysql_query ("rollback");
  280. mini_log_err ("Couldn't insert hero starting location for new user. Query: ".$query.", ".mysql_error ());
  281. $err = true;
  282. }
  283. else
  284. {
  285. $query = "select max(ranking) from ranking";
  286. if (!($res = mysql_query ($query)))
  287. {
  288. mini_log_err ("Cannot read max ranking. Query: ".$query.", ".mysql_error ());
  289. }
  290. if (!($row = mysql_fetch_row ($res)))
  291. {
  292. mini_log_err ("No rows found when reading max ranking. Query: ".$query.", ".mysql_error ());
  293. }
  294. else
  295. {
  296. $query = "insert into ranking values (".$userid.", ".((int)$row[0] + 1).")";
  297. if (!mysql_query ($query))
  298. mini_log_err ("Cannot add bad ranking for new hero. Query: ".$query.", ".mysql_error ());
  299. }
  300. mysql_query ("commit");
  301. $query = 'insert into worlds_players values ("'.WORLDNAME.'", '.$userid.', 1, '.$klasse.', '.$Volk.')';
  302. if (!$authdb->query ($query))
  303. mini_log_err ("Couldn't insert worlds_players entry for new hero. Query: ".$query.", ".$authdb->error());
  304. else
  305. {
  306. if (SEND_MAILS)
  307. {
  308. require_once ("php/base/mail.inc.php");
  309. $mail->From = "support@selador.de";
  310. $mail->FromName = "Selador-Portal";
  311. $mail->AddAddress($email); // name is optional
  312. $mail->Subject = "Dein Held betritt Welt \"".WORLDTITLE."\"";
  313. $text_body = "Hallo ".$username.",\r\n\r\n".
  314. "Dein Held hat die Welt \"".WORLDTITLE."\" betreten. Du kannst dich jederzeit über den Link ".
  315. "http://www.selador.de/ in der Spielewelt anmelden.\r\n\r\n".
  316. "Viel Erfolg in dieser Welt wünscht dir das Selador-Team.";
  317. $html_body = "<html><body><p>Hallo ".$username.",</p>".
  318. "<p>Dein Held hat die Welt \"".WORLDTITLE."\" betreten. Du kannst dich jederzeit über den Link ".
  319. "<a href=\"http://www.selador.de/\">http://www.selador.de/</a> in der Spielewelt anmelden.</p>".
  320. "<p>Viel Erfolg in dieser Welt wünscht dir das Selador-Team.</p></body></html>";
  321. $mail->Body = $html_body;
  322. $mail->AltBody = $text_body;
  323. if(!$mail->Send())
  324. {
  325. echo "Die Mail konnte nicht gesendet werden...";
  326. }
  327. }
  328. unset ($_SESSION['first_login']);
  329. }
  330. }
  331. }
  332. }
  333. }
  334. }
  335. }
  336. }
  337. }
  338. }
  339. }
  340. }
  341. }
  342. if (!isset ($err))
  343. {
  344. echo "<span class=\"success\">Erfolgreich angelegt. Du hast noch einmal eine Mail mit der Bestätigung darin erhalten. <a href=\"index.php\" class=\"dark\">Hier kannst du jetzt die Welt betreten</a></span>";
  345. //willkommensnachricht senden
  346. $supportid = SUPPORT_UID;
  347. $supportname = "support";
  348. $recip = $userid;
  349. $subject = mysql_real_escape_string ("Willkommen in Selador");
  350. $body = mysql_real_escape_string ("Schön, dass du den Weg zu uns gefunden hast. Wenn du Fragen hast, kannst du dich jederzeit an unser Forum oder an den Chat wenden. Die Links zu beiden findest du unten in der Menüleiste. Im Forum kannst du dich mit deinen Benutzerdaten aus dem Spiel einloggen, im Chat wirst du automatisch eingeloggt, wenn du auf den Link klickst. Wenn du neu in Selador bist oder gar noch nie ein Browsergame gespielt hast, solltest du zunächst einmal das Tutorial bestreiten. Ausserdem gibt es eine Hilfe im Menü, die sehr ausführlich alle Aspekte des Spiels beschreibt.\n\nViel Spaß wünscht dir dein Selador-Team!");
  351. $query = "insert into messages (sender,recip,subject,body,msg_read,sent,archived,name,snd_del) values (";
  352. $query .= $supportid.",".$recip.",'".$subject."','".$body."',0,now(),0,'".$supportname."',1)";
  353. if (!$db->query($query))
  354. {
  355. mini_log_err ("Couldn't insert welcome message for new user. Query: ".$query.", ".$db->error ());
  356. }
  357. }
  358. else
  359. echo "<br><br><b>Es ist leider ein Datenbank-Fehler aufgetreten. Tut uns leid :(</b>\n";
  360. }
  361. else
  362. {
  363. echo "<br><b><h1>Es konnte leider keine freie Stadt gefunden werden. Bitte zurück und eine andere Region wählen! Query: ".$query."</h1></b>";
  364. }
  365. }
  366. }
  367. if ($show_screen)
  368. {
  369. echo "<h3>Erstellung des Helden <a href=\"hilfe.php?Page=775\" target=\"_blank\">[?]</a></h3>";
  370. if (isset ($errmsg))
  371. echo "<br><b><span class=\"error\">".$errmsg."</span></b></p>";
  372. /*echo '<p>Du kannst in jeder Selador-Welt einen Helden haben.</p>';
  373. echo '<p>Dein Held f&uuml;hrt dein Volk an und sorgt f&uuml;r ihr &Uuml;berleben in Selador. Du kannst ausw&auml;hlen, in welchem Teil von Selador du beginnen m&ouml;chtest - falls du mit Freunden zusammen anf&auml;ngst, k&ouml;nnt ihr die gleiche Ecke w&auml;hlen.</p>';
  374. echo '<p>Du musst auch w&auml;hlen, zu welchem Volk du geh&ouml;ren m&ouml;chtest. Die besser organisierten Menschen bevorzugen dicke Mauern und starke R&uuml;stungen, um sich gut zu verteidgen. Die schnellen Orks nehmen genauso gern von ihren Nachbarn wie aus ihren eigenen Goldminen und greifen gerne in gro&szlig;en Massen an.</p>';*/
  375. // echo '</div>';
  376. //echo '<div id="seite-links">';
  377. echo "<form name=\"bla\" action=\"newhero.php\" method=\"post\">";
  378. echo '<table class="border"><tr><th class="bold" >Startecke<a target="_blank" href="hilfe.php?Page=778"> [?]</a></td></tr>';
  379. echo '<tr><td>';
  380. echo '<input type="radio" name="ecke" value="nordwesten"';
  381. if ($_POST['ecke'] == "nordwesten") echo " checked=\"checked\"";
  382. echo '> Nordwesten';
  383. // (= mehr Stein)
  384. echo '<br>';
  385. echo '<input type="radio" name="ecke" value="nordosten"';
  386. if ($_POST['ecke'] == "nordosten") echo " checked=\"checked\"";
  387. echo '> Nordosten ';
  388. //(= mehr Eisen)
  389. echo '<br>';
  390. echo '<input type="radio" name="ecke" value="suedwesten"';
  391. if ($_POST['ecke'] == "suedwesten") echo " checked=\"checked\"";
  392. echo '> S&uuml;dwesten ';
  393. echo '<br>';
  394. echo '<input type="radio" name="ecke" value="suedosten"';
  395. if ($_POST['ecke'] == "suedosten") echo " checked=\"checked\"";
  396. echo '> S&uuml;dosten';
  397. // (= mehr Holz)
  398. echo '</td></tr>';
  399. echo '<tr><th class="bold">Volk<a href="hilfe.php?Page=780" target="_blank"> [?]</a></th></tr><tr><td>';
  400. /*echo 'Holz, Stein und Eisen sind gleicherma&szlig;en für den Ausbau von Geb&auml;uden und Minen wichtig. Holz und Eisen wird dar&uuml;berhinaus zum Ausbau von Truppen ben&ouml;tigt. Nahrung wird gebraucht um Einheiten ern&auml;hren zu k&ouml;nnen.</td></tr>';
  401. echo '<tr id="rundrum"><td id="rundrum"><b>Volk</b></td><td id="rundrum">';
  402. echo 'Jedes der V&ouml;lker hat ihre eigenen Vorteile. Generell l&auml;sst sich sagen, dass Menschen eher defensiv veranlagt sind und Orks eher offensiv. ';
  403. echo 'Es l&auml;sst sich aber genauso gut auch eine offensive Spielweise beim Menschen und eine defensive Spielweise bei Orks verwirklichen.<br> ';
  404. echo 'Wenn du mehr Infos brauchst, schau dir mal das <a href="simone/hilfe.pdf">Handbuch</a> an.<br>';*/
  405. $query = "select * from races";
  406. $result = mysql_query ($query);
  407. while ($row = mysql_fetch_assoc($result))
  408. {
  409. echo "<input type=\"radio\" name=\"Volk\" value=\"".$row["raceid"]."\"";
  410. if ($Volk == $row['raceid'])
  411. echo " checked=\"checked\"";
  412. echo "> ".$row["name"]."<br>\n";
  413. }
  414. echo "</td></tr>";
  415. echo "<tr><th class=\"bold\">Klasse <a href=\"hilfe.php?Page=779\" target=\"_blank\"> [?]</a></th></tr><tr><td>";
  416. $query = "select * from classes";
  417. $result = mysql_query ($query);
  418. while ($row = mysql_fetch_assoc($result))
  419. {
  420. echo "<input type=\"radio\" name=\"klasse\" value=\"".$row["classid"]."\"";
  421. if ($klasse == $row['classid'])
  422. echo " checked=\"checked\"";
  423. echo "> ".$row["name"]."<br>\n";
  424. }
  425. echo "</td></tr>";
  426. echo '<tr><th class="bold">Geschlecht</th></tr><tr><td><input type="radio" name="geschlecht" value="1"> m&auml;nnlich<br><input type="radio" name="geschlecht" value="2"> weiblich</td></tr>';
  427. echo "<tr class=\"iterate\"><td ><input type=\"checkbox\" name=\"accept\" value=\"1\"> Ich akzeptiere die <a href=\"agb.php\" target=\"_blank\">AGB </a> und die <a href=\"regeln.php\" target=\"_blank\">Regeln </a> und m&ouml;chte mich<br><br> <input type=\"submit\" name=\"nhsubmit\" value=\"Anmelden\"></td></tr></table></form><p>";
  428. echo '</div><div id="seite-rechts"><span class="info">Wenn du gerne mehr &uuml;ber die einzelnen Punkte erfahren m&ouml;chtest, klicke einfach auf das dazugeh&ouml;rige [?]-Symbol.</span>';
  429. }
  430. ?>
  431. </div>
  432. </body></html>