PageRenderTime 73ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 1ms

/merchant/merchants_calculations.php

https://bitbucket.org/obsidian/selador
PHP | 752 lines | 611 code | 83 blank | 58 comment | 159 complexity | dd1611866cd8eabc84f571019c330009 MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.1
  1. <?php
  2. //supermarket ("grosshandel")
  3. if ($f ==4)
  4. {
  5. if (isset ($_REQUEST['ok']))
  6. {
  7. //ueberpruefe: wurden alle felder eingegeben?
  8. if (!isset($_REQUEST['offerkind']))
  9. $merchant_err = "Fehlende Eingabe: Was willst du denn eintauschen?<br>";
  10. else
  11. {
  12. if (!isset($_REQUEST['offersize']))
  13. $merchant_err = "Fehlende Eingabe: Wieviel willst du denn eintauschen?<br>";
  14. else
  15. {
  16. if (!isset($_REQUEST['searchkind']))
  17. $merchant_err = "Fehlende Eingabe: Was suchst du denn?<br>";
  18. //*******ueberall wurde was eingetragen... aber auch das richtige?!?
  19. else
  20. {
  21. $offerkind = abs ((int) $_REQUEST['offerkind']);
  22. $offersize = abs ((int) $_REQUEST['offersize']);
  23. $searchkind = (int) $_REQUEST['searchkind'];
  24. if (!$me->activevillage->can_spend_type ($offerkind, $offersize))
  25. $merchant_err = "Fehler: Netter Versuch. Aber so viele Rohstoffe haben wir nicht.";
  26. else
  27. {
  28. switch ($searchkind)
  29. {
  30. case 1:
  31. case 2:
  32. case 3:
  33. $min_amount = 2;
  34. break;
  35. case 4:
  36. $min_amount = 5;
  37. break;
  38. }
  39. if ($offersize < $min_amount)
  40. $merchant_err = "Fehler: Du musst mindestens ".$min_amount." Rohstoffe eintauschen.";
  41. else
  42. {
  43. $old_value = $me->activevillage->ress[$offerkind]; //fuers debuggen
  44. $offersize -= ($offersize % $min_amount);
  45. $me->activevillage->spend_type ($offerkind, $offersize);
  46. $new_value = $me->activevillage->ress[$offerkind];
  47. if ($searchkind != 4)
  48. {
  49. $me->activevillage->spend_type ($searchkind, -(floor ($offersize/2)));
  50. $got = floor ($offersize/2);
  51. }
  52. else
  53. {
  54. $me->activevillage->spend_type ($searchkind, -(floor ($offersize/5)));
  55. $got = floor ($offersize/5);
  56. }
  57. if (1 == $offerkind)
  58. $offerkind = "Holz";
  59. if (2 == $offerkind)
  60. $offerkind = "Stein";
  61. if (3 == $offerkind)
  62. $offerkind = "Eisen";
  63. if (4 == $offerkind)
  64. $offerkind = "Gold";
  65. if (1 == $searchkind)
  66. $searchkind = "Holz";
  67. if (2 == $searchkind)
  68. $searchkind = "Stein";
  69. if (3 == $searchkind)
  70. $searchkind = "Eisen";
  71. if (4 == $searchkind)
  72. $searchkind = "Gold";
  73. $merchant_success = "Erfolgreich eingetauscht: " . $offersize . " " . $offerkind . " gegen " . $got. " " . $searchkind;
  74. log_debug("Grosshaendler: ".$offersize." ".$offerkind." eingetauscht gegen ".$got." ".$searchkind.". Rohstoffe vorher: ".$old_value." ".$offerkind.", nachher: ".$new_value);
  75. }
  76. }
  77. }
  78. }
  79. }
  80. }
  81. }
  82. //send ressources
  83. if ($f == 1)
  84. {
  85. $step = 1;
  86. //wurde soeben der schicken-Button oder der "wirklich schicken"-button gedrueckt?
  87. //EIngaben ueberpruefen!
  88. if ((isset ($_REQUEST['schicken']) || (isset ($_REQUEST['really']))) && (!$me->activeoutpostid))
  89. {
  90. $holz = (int)abs ($_REQUEST['holz']);
  91. $stein = (int)abs ($_REQUEST['stein']);
  92. $eisen = (int)abs ($_REQUEST['eisen']);
  93. $gold = (int)abs ($_REQUEST['gold']);
  94. $counter = (int)abs ($_REQUEST['counter']);
  95. if ($holz == 0 && $stein == 0 && $eisen == 0 && $gold == 0)
  96. $merchant_err = "Wenn du nichts verschicken willst, bleib ich einfach zu Hause?!";
  97. else
  98. {
  99. $enoughcash = $me->activevillage->can_spend_single ($holz, $stein, $eisen, $gold);
  100. //too much wood
  101. if (!$enoughcash[1])
  102. {
  103. $merchant_err = "Dein H&auml;ndler sagt: Soviel Holz haben wir nicht. Sollen wir noch schnell welches hacken gehen?";
  104. }
  105. //too much stone
  106. else
  107. {
  108. if (!$enoughcash[2])
  109. {
  110. $merchant_err = "Dein H&auml;ndler sagt: Soviel Stein haben wir nicht. Aber ich habe geh&ouml;rt, B&auml;cker M&uuml;ller hat noch etwas Brot von letzter Woche.";
  111. }
  112. //too much stone
  113. else
  114. {
  115. if (!$enoughcash[3])
  116. {
  117. $merchant_err = "Dein H&auml;ndler sagt: Soviel Eisen haben wir nicht. Wir k&ouml;nnten stattdessen einfach unsere R&uuml;stungen einschmelzen .";
  118. }
  119. //too much gold
  120. else
  121. {
  122. if (!$enoughcash[4])
  123. {
  124. $merchant_err = "Dein H&auml;ndler sagt: Soviel Gold haben wir nicht. Wir sind hier ja nicht im Wunderland.";
  125. }
  126. //non-existing coordinates
  127. else
  128. {
  129. if (isset ($_REQUEST['x']) && isset ($_REQUEST['y']) && is_numeric ($_REQUEST['x']) && is_numeric ($_REQUEST['y']) && ($_REQUEST['x'] != 0) && ($_REQUEST['y'] != 0))
  130. {
  131. $x = $_REQUEST['x'];
  132. $y = $_REQUEST['y'];
  133. $query_villages = "select name,uid,villageid,outpost_of from village where x=".$x." and y=".$y;
  134. if ($result_villages = mysql_query($query_villages))
  135. {
  136. if (!($villagerow = mysql_fetch_array ($result_villages)))
  137. $merchant_err = "Dein H&auml;ndler sagt: Dort gibt es keine Stadt. Ohne Empfangsquittung gebe ich nirgends meine Waren ab.";
  138. else
  139. {
  140. if ($me->sat_by)
  141. {
  142. if ($villagerow['uid'] != $me->uid)
  143. {
  144. $merchant_err = "Als Sitter darfst du nur innerhalb deiner eigenen St&auml;dte handeln. ";
  145. }
  146. }
  147. }
  148. mysql_free_result ($result_villages);
  149. }
  150. else
  151. {
  152. $merchant_err = "Es ist leider ein DB-Fehler aufgetreten. Bitte nochmal probieren.";
  153. log_err ("handel.php: Cannot find village by coordinates. Query: ".$query.", ".mysql_error ());
  154. }
  155. }
  156. else
  157. {
  158. if (isset ($_REQUEST['villagedd']) && $_REQUEST['villagedd'] != "")
  159. {
  160. $query = "select * from village where villageid=".(int)$_REQUEST['villagedd'];
  161. if (!($res = mysql_query ($query)))
  162. {
  163. $merchant_err = "Leider ist ein DB-Fehler aufgetreten. Bitte nochmal probieren";
  164. log_err ("Error while trying to find village that was given by villagedd. Query: ".$query.", ".mysql_error ());
  165. }
  166. else
  167. {
  168. if (mysql_num_rows ($res))
  169. {
  170. $villagerow = mysql_fetch_array ($res);
  171. $x = $_REQUEST['x'] = $villagerow['x'];
  172. $y = $_REQUEST['y'] = $villagerow['y'];
  173. }
  174. else
  175. {
  176. $merchant_err = "Diese Stadt wurde nicht gefunden??";
  177. log_err ("Cannot find village ".$_REQUEST['villagedd']." given by villagedd. Query: ".$query);
  178. }
  179. }
  180. }
  181. else
  182. {
  183. if (isset ($_REQUEST['vname']))
  184. {
  185. $vsearch = village_byname ($_REQUEST['vname']);
  186. if (!$vsearch)
  187. $merchant_err = "Es wurde leider keine Stadt mit diesem Namen gefunden";
  188. else
  189. {
  190. // If the result is a two-dimensional array, we have to create the
  191. // drop-down menu
  192. if (is_array ($vsearch) && is_array (reset ($vsearch)))
  193. {
  194. // But only if there is more than one item
  195. if (count ($vsearch) == 1)
  196. {
  197. $firstv = reset ($vsearch);
  198. $villagerow = $firstv;
  199. $_REQUEST['vname'] = $firstv['name'];
  200. $x = $_REQUEST['x'] = $firstv['x'];
  201. $y = $_REQUEST['y'] = $firstv['y'];
  202. }
  203. else
  204. {
  205. $dd = "<select name=\"villagedd\" size=\"1\">";
  206. foreach ($vsearch as $vidx => $thisv)
  207. {
  208. $dd .= "<option value=\"".$thisv['villageid']."\">".$thisv['name']." (".$thisv['x']."|".$thisv['y'].") von ".$thisv['user']."</option>";
  209. }
  210. $dd .= "</select>\n";
  211. }
  212. }
  213. else
  214. {
  215. if (is_array ($vsearch))
  216. {
  217. $villagerow = $vsearch;
  218. $_REQUEST['vname'] = $vsearch['name'];
  219. $x = $_REQUEST['x'] = $vsearch['x'];
  220. $y = $_REQUEST['y'] = $vsearch['y'];
  221. }
  222. else
  223. $merchant_err = "Es wurde leider keine Stadt mit diesem Namen gefunden";
  224. }
  225. }
  226. }
  227. }
  228. }
  229. if (!isset ($dd))
  230. {
  231. if ($villagerow['outpost_of'] > 0)
  232. $merchant_err = "Ich kann keine Au&szlig;enposten beliefern, nur St&auml;dte.";
  233. else
  234. {
  235. if ($villagerow['villageid'] == $me->activevillageid)
  236. $merchant_err = "Na das ist ja nicht soo weit, da lass ich den Wagen daheim.";
  237. else
  238. {
  239. $allinall = $holz + $stein + $eisen + $gold;
  240. $merchants_needed = ceil ($allinall / ($me->merchant_cap));
  241. calcMerchants();
  242. if ($merchants_needed > (($me->activevillage->merchants)-$merchants_gone))
  243. $merchant_err = "So viele H&auml;ndler sind wir nicht.";
  244. else
  245. {
  246. if (!isset ($merchant_err))
  247. $step = 2;
  248. }
  249. }
  250. }
  251. }
  252. }
  253. }
  254. }
  255. }
  256. }
  257. //if all is ok, we search for the name and the owner of the village
  258. if (2 == $step)
  259. {
  260. $query_owner = "select user from user where uid=".$villagerow['uid'].";";
  261. if ($result_owner = mysql_query($query_owner))
  262. {
  263. if ($row_owner = mysql_fetch_array ($result_owner))
  264. {
  265. //calculate the distance
  266. $start_x = $me->activevillage->x;
  267. $start_y = $me->activevillage->y;
  268. $distance_a = ($x - $start_x) * ($x - $start_x);
  269. $distance_b = ($y - $start_y) * ($y - $start_y);
  270. $distance = sqrt ($distance_a + $distance_b);
  271. //calculate duration
  272. $time = $distance / ($me->merchant_speed * WORLD_MERCH_SPEED);
  273. $timestring = calcDuration($distance, $me);
  274. }
  275. }
  276. else
  277. {
  278. log_err ("handel.php: Cannot find target user. Query: ".$query.", ".mysql_error ());
  279. $merchant_err = "Leider ist ein DB-Fehler aufgetreten";
  280. }
  281. if (isset ($_REQUEST['really']))
  282. {
  283. if ($_REQUEST['counter'] == $me->reload_counter)
  284. {
  285. require_once ("php/event.php");
  286. // Wirklich abschicken, Tests wurden ja abgeschlossen :)
  287. $query_transport = "insert into transport values (NULL,".$holz.",".$stein.",".$eisen.",".$gold.",".$me->activevillageid.",".$villagerow['villageid'].",0,".$merchants_needed.",'".mysql_real_escape_string (strip_tags (trim ($_REQUEST['trade_msg'])))."')";
  288. if (!mysql_query ($query_transport))
  289. {
  290. log_err ("Cannot send merchants. Query: ".$query_transport.", ".mysql_error ());
  291. $merchant_err = "<b>Leider k&ouml;nnen die H&auml;dler wegen eines Datenbankfehlers gerade nicht abgeschickt werden :(<br>Bitte sp&auml;ter nochmal probieren</b>";
  292. }
  293. else
  294. {
  295. $transportid = mysql_insert_id ();
  296. $query = "insert into event (uid1, village1, uid2, village2, type, param, param2, timestamp, flag) values (".$me->uid.", ".$me->activevillageid.", ".$villagerow['uid'].", ".$villagerow['villageid'].", ".TRANSPORT.", ".$transportid.", ".(int)($time*3600).", addtime(now(), sec_to_time(".(int)($time*3600).")), 1)";
  297. // echo $query;
  298. if (!mysql_query ($query))
  299. {
  300. log_err ("Cannot send merchants. Query: ".$query.", ".mysql_error ());
  301. $merchant_err = "<b>Leider k&ouml;nnen die H&auml;dler wegen eines Datenbankfehlers gerade nicht abgeschickt werden :(<br>Bitte sp&auml;er nochmal probieren</b>";
  302. }
  303. $me->reload_counter++;
  304. // echo $query_transport;
  305. $step = 3;
  306. unset ($_REQUEST['x']);
  307. unset ($_REQUEST['y']);
  308. unset ($_REQUEST['vname']);
  309. // H채ndler unterwegs neu berechnen FIXME: This could be optimized
  310. $query_transport = "select A.*, B.name as from_vill, B.x as from_x, B.y as from_y, C.name as to_vill, C.x as to_x, C.y as to_y from transport A join village B on (A.village1=B.villageid) join village C on (A.village2=C.villageid) where A.village1=".$me->activevillageid." or (A.village2=".$me->activevillageid." and A.flag=0);";
  311. if ($result_transport = mysql_query($query_transport))
  312. {
  313. while (($transportrow = mysql_fetch_array ($result_transport)))
  314. {
  315. if ($transportrow['village1'] == $me->activevillageid)
  316. {
  317. $mymerchants[$transportrow['merchantid']] = $transportrow;
  318. //$merchants_gone += $transportrow['merchants'];
  319. }
  320. else
  321. $othermerchants[$transportrow['merchantid']] = $transportrow;
  322. }
  323. mysql_free_result($result_transport);
  324. }
  325. //echo '<h1>gone: </h1>'.$merchants_gone;
  326. $merchants_gone += $merchants_needed;
  327. //echo '<h1>gone after: </h1>'.$merchants_gone;
  328. //calcMerchants();
  329. //FIXME merchants don't refresh immediately
  330. // Nun fehlt noch die Zeit f&uuml;r den gerade losgeschickten H채ndler, der ja erst vom Eventhandler
  331. // eingesetzt werden w&uuml;rde
  332. $gui->my_transports[$transportid] = (int)($time*3600);
  333. $gui->all_transports[$transportid] = (int)($time*3600);
  334. // Rohstoffe werden ausgegeben - hah!
  335. $me->activevillage->spend ($holz, $stein, $eisen, $gold);
  336. unset ($holz);
  337. unset ($gold);
  338. unset ($eisen);
  339. unset ($stein);
  340. }
  341. }
  342. else
  343. $_REQUEST['schicken'] = "bla"; // Evil hack to prevent redisplay of target dialog
  344. }
  345. }
  346. }
  347. }
  348. //buy offer from market
  349. //buy offer
  350. if ($f == 2)
  351. {
  352. if (isset ($_REQUEST['o']))
  353. {
  354. //$offerid = (int)$_REQUEST['o'];
  355. $offerid = (int)key($_POST['o']);
  356. $query = "select A.*, B.x, B.y from offers A join village B on (A.villageid=B.villageid) where A.offerid=".$offerid;
  357. if (!($res = mysql_query ($query)))
  358. {
  359. log_err ("Cannot fetch offer when accepting. Query: ".$query.", ".mysql_error());
  360. }
  361. else
  362. {
  363. if (!($row = mysql_fetch_array ($res)))
  364. {
  365. log_err ("No rows found when accepting offer. Query: ".$query);
  366. }
  367. else
  368. {
  369. calcMerchants();
  370. $number_on_market = (int)$row['number'];
  371. $number_tmp = $_POST['number'];
  372. $number_wanted = $number_tmp[$offerid];
  373. if (!$me->activevillage->can_spend_type ($row['searchkind'], $row['searchsize'] * $number_wanted))
  374. $merchant_err = "<b>Nicht gen&uuml;gend Rohstoffe hier</b>";
  375. else
  376. {
  377. if ($row['searchsize'] *$number_wanted > $merchants_here * $me->merchant_cap)
  378. $merchant_err = "<b>Nicht gen&uuml;gend H&auml;ndler hier - Cheater ;)</b>";
  379. else
  380. {
  381. //echo '<h1>yeahi!</h1>'.$query;
  382. $merchants_needed = ceil ($row['searchsize'] * $number_wanted / $me->merchant_cap); // diese Haendler werden insgesamt gebraucht!
  383. $merchant_per_offer = ceil ($row['searchsize'] / $me->merchant_cap);
  384. //calculate the distance
  385. $start_x = $me->activevillage->x;
  386. $start_y = $me->activevillage->y;
  387. $distance_a = ($row['x'] - $start_x) * ($row['x'] - $start_x);
  388. $distance_b = ($row['y'] - $start_y) * ($row['y'] - $start_y);
  389. $distance = sqrt ($distance_a + $distance_b);
  390. //calculate duration
  391. $time = $distance /($me->merchant_speed) / WORLD_MERCH_SPEED;
  392. //CHECKME is this really necessary?
  393. $mhours = (int) $time;
  394. $rest = $time - $mhours;
  395. $mminutes = (int) ($rest * 60);
  396. $rest2 = ($rest*60) - $mminutes;
  397. $mseconds = round ($rest2 * 60);
  398. $mminutes += (int)($mseconds/60);
  399. $mseconds = ($mseconds % 60);
  400. if ($mhours < 10)
  401. $mhours = "0".$mhours;
  402. if ($mminutes < 10)
  403. $mminutes = "0".$mminutes;
  404. if ($mseconds < 10)
  405. $mseconds = "0".$mseconds;
  406. require_once ("php/event.php");
  407. $query_transport = "";
  408. // Wirklich abschicken, Tests wurden ja abgeschlossen :)
  409. //for ($helpme=0;$helpme < $number_wanted;$helpme++)
  410. {
  411. $query_transport = "insert into transport values (NULL, ".offer_query ($row['searchkind'], ($row['searchsize'] * $number_wanted))." ,".$me->activevillageid.",".$row['villageid'].",0,".($merchant_per_offer * $number_wanted) .", '');";
  412. if (!mysql_query ($query_transport))
  413. {
  414. log_err ("Cannot send merchants for offer from target. Query: ".$query_transport.", ".mysql_error ());
  415. $merchant_err = "<b>Leider k&ouml;nnen die H&auml;dler wegen eines Datenbankfehlers gerade nicht abgeschickt werden :(<br>Bitte sp&auml;ter nochmal probieren</b>";
  416. }
  417. else
  418. {
  419. $transportid = mysql_insert_id ();
  420. $query = "insert into event (uid1, village1, uid2, village2, type, param, param2, timestamp, flag) values (".$me->uid.", ".$me->activevillageid.", ".$row['uid'].", ".$row['villageid'].", ".TRANSPORT.", ".$transportid.", ".(int)($time*3600).", addtime(now(), sec_to_time(".(int)($time*3600).")), 1)";
  421. if (!mysql_query ($query))
  422. {
  423. log_err ("Cannot send merchants for offer from target. Query: ".$query.", ".mysql_error ());
  424. $merchant_err = "<b>Leider k&ouml;nnen die H&auml;dler wegen eines Datenbankfehlers gerade nicht abgeschickt werden :(<br>Bitte sp&auml;er nochmal probieren</b>";
  425. }
  426. else
  427. {
  428. // Wirklich abschicken, Tests wurden ja abgeschlossen :)
  429. $query_transport = "insert into transport values (NULL, ".offer_query ($row['offerkind'], ($row['offersize']*$number_wanted))." , ".$row['villageid'].", ".$me->activevillageid.", 0, ".($row['merchants']*$number_wanted).", '')";
  430. // echo $query_transport;
  431. if (!mysql_query ($query_transport))
  432. {
  433. log_err ("Cannot send merchants for offer from receiver. Query: ".$query_transport.", ".mysql_error ());
  434. $merchant_err = "<b>Leider k&ouml;nnen die H&auml;dler wegen eines Datenbankfehlers gerade nicht abgeschickt werden :(<br>Bitte sp&auml;ter nochmal probieren</b>";
  435. }
  436. else
  437. {
  438. $transportid = mysql_insert_id ();
  439. $query = "insert into event (uid1, village1, uid2, village2, type, param, param2, timestamp, flag) values (".$row['uid'].", ".$row['villageid'].", ".$me->uid.", ".$me->activevillageid.", ".TRANSPORT.", ".$transportid.", ".(int)($time*3600).", addtime(now(), sec_to_time(".(int)($time*3600).")), 1)";
  440. // echo $query;
  441. if (!mysql_query ($query))
  442. {
  443. log_err ("Cannot send merchants for offer from receiver. Query: ".$query.", ".mysql_error ());
  444. $merchant_err = "<b>Leider k&ouml;nnen die H&auml;dler wegen eines Datenbankfehlers gerade nicht abgeschickt werden :(<br>Bitte sp&auml;er nochmal probieren</b>";
  445. }
  446. else
  447. {
  448. if ($already_visited == false)
  449. {
  450. //wenn alle angebote angenommen wurden, wird das angebot geloescht
  451. //ansonsten nur erniedrigt
  452. if ($number_wanted >= $number_on_market)
  453. $query = "delete from offers where offerid=".$offerid;
  454. else
  455. $query = "update offers set number=number-".$number_wanted." where offerid=".$offerid;
  456. if (!mysql_query ($query))
  457. {
  458. log_err ("Cannot delete offer entry when accepting offer. Query: ".$query.", ".mysql_error());
  459. }
  460. }
  461. /* else
  462. {*/
  463. $me->reload_counter++;
  464. $already_visited = true;
  465. // H채ndler unterwegs neu berechnen FIXME: This could be optimized
  466. $merchants_gone = 0;
  467. $query_transport = "select A.*, B.name as from_vill, B.x as from_x, B.y as from_y, C.name as to_vill, C.x as to_x, C.y as to_y from transport A join village B on (A.village1=B.villageid) join village C on (A.village2=C.villageid) where A.village1=".$me->activevillageid." or (A.village2=".$me->activevillageid." and A.flag=0);";
  468. if ($result_transport = mysql_query($query_transport))
  469. {
  470. while (($transportrow = mysql_fetch_array ($result_transport)))
  471. {
  472. if ($transportrow['village1'] == $me->activevillageid)
  473. {
  474. $mymerchants[$transportrow['merchantid']] = $transportrow;
  475. $merchants_gone += $transportrow['merchants'];
  476. }
  477. else
  478. $othermerchants[$transportrow['merchantid']] = $transportrow;
  479. }
  480. mysql_free_result($result_transport);
  481. }
  482. // Rohstoffe werden ausgegeben - hah!
  483. $tmp_costs = array (0, 0, 0, 0, 0, 0);
  484. $tmp_costs[$row['searchkind']] = $row['searchsize']*$number_wanted;
  485. $me->activevillage->spend_array ($tmp_costs);
  486. $merchants_here = $me->activevillage->merchants - $merchants_gone;
  487. }
  488. }
  489. }
  490. }
  491. }
  492. }
  493. }
  494. }
  495. }
  496. }
  497. }
  498. //create new offers
  499. if (isset ($_REQUEST['ok']) && $f < 4)
  500. {
  501. //ueberpruefe: wurden alle felder eingegeben?
  502. if (!isset($_REQUEST['offerkind']))
  503. $merchant_err = "Fehlende Eingabe: Was willst du denn verkaufen?<br>";
  504. else
  505. {
  506. if ((int)$_POST['offersize']== 0)
  507. $merchant_err = "Fehlende Eingabe: Wieviel willst du denn verkaufen?<br>";
  508. else
  509. {
  510. if (!isset($_REQUEST['searchkind']))
  511. $merchant_err = "Fehlende Eingabe: Was suchst du denn?<br>";
  512. else
  513. {
  514. if ((int)$_POST['searchsize']== 0)
  515. $merchant_err = "Fehlende Eingabe: Wieviel suchst du denn?<br>";
  516. //*******ueberall wurde was eingetragen... aber auch das richtige?!?
  517. else
  518. {
  519. if ((int) $_REQUEST['how_many_offers'] > 0)
  520. {
  521. $num_offers = (int)abs ($_REQUEST['how_many_offers']);
  522. $offerkind = (int)abs ($_REQUEST['offerkind']);
  523. $offersize = (int)abs ($_REQUEST['offersize']);
  524. $searchkind = (int)abs ($_REQUEST['searchkind']);
  525. $searchsize = (int)abs ($_REQUEST['searchsize']);
  526. //FIXME refresh $merchants_gone
  527. $merchants_here = $me->activevillage->merchants - $merchants_gone;
  528. $number_merchants = ceil ($offersize / $me->merchant_cap);
  529. if (!$me->activevillage->can_spend_type ($offerkind, ($offersize * $num_offers)))
  530. $merchant_err = "Netter Versuch. Aber so viele Rohstoffe haben wir nicht.";
  531. else
  532. {
  533. if (0 == $merchants_here)
  534. $merchant_err = "Keine H&auml;ndler vorhanden!";
  535. else
  536. {
  537. calcMerchants();
  538. if (($number_merchants * $num_offers) > $merchants_here)
  539. {
  540. $merchant_err = "Wir sind zu wenige f&uuml;r den ganzen Kram!";
  541. }
  542. else
  543. {
  544. //stimmt das verh채ltnis zeischen suchen/bieten?
  545. if ((($offerkind != 4) && ($searchsize > (5 * $offersize))) || (($offerkind == 4) && ($searchsize > (20 * $offersize))))
  546. $merchant_err = "Das ist Wucher, so etwas akzeptieren wir hier nicht!! ;)<br>(Max. Handelsverh&auml;ltnis: 1:5, Gold: 1:20)";
  547. else
  548. {
  549. if ((($searchkind != 4) && ($offersize > (5 * $searchsize))) || (($searchkind == 4) && ($offersize > (20 * $searchsize))))
  550. $merchant_err = "Na, na, verkauf deine Ware doch mal nicht so unter Wert ;)<br> (Max. Handelsverh&auml;ltnis: 1:5, Gold:1:20)";
  551. else
  552. {
  553. if ($searchkind == $offerkind)
  554. {
  555. $merchant_err = "Ung&uuml;tiges Angebot";
  556. }
  557. else
  558. {
  559. if ($offersize < 20 || $searchsize < 20)
  560. {
  561. $merchant_err = "Ung&uuml;tiges Angebot: Die Mindestmenge ist 20.";
  562. }
  563. else
  564. {
  565. $trading_partner = (int)$_POST['hab'] | (int)$_POST['bnd'] | (int)$_POST['own'] | (int)$_POST['meta'];
  566. //jetzt wissen wir, dass alles ok eingegeben wurden. also schreiben wirs in die datenbank!
  567. $query_offer = "insert into offers values ";
  568. $query_offer.= "(NULL,".$me->activevillageid.",".$offersize.",".$offerkind.",".$searchsize.",".$searchkind.",".$number_merchants.", ".$me->uid.", ".$num_offers.", ".(int) $trading_partner.")";
  569. $me->activevillage->spend_type ($offerkind, $offersize * $num_offers);
  570. if (!mysql_query ($query_offer))
  571. {
  572. log_err ("Cannot insert offer. Query: ".$query_offer.", ".mysql_error ());
  573. $merchant_err = "<b>Leider k&ouml;nnen die H&auml;ndler wegen eines Datenbankfehlers gerade nicht eingestellt werden :(<br>Bitte sp&auml;ter nochmal probieren</b>";
  574. }
  575. $merchants_gone += $number_merchants * $num_offers;
  576. }
  577. }
  578. }
  579. }
  580. }
  581. }
  582. }
  583. }
  584. else
  585. {
  586. $merchant_err = "Bitte mindestens 1 Angebot erstellen";
  587. }
  588. }
  589. }
  590. }
  591. }
  592. }
  593. //delete existing offers
  594. if (isset ($_REQUEST['c']))
  595. {
  596. $offerid = (int)$_REQUEST['c'];
  597. $query = "select * from offers where offerid=".$offerid;
  598. if (!($res = mysql_query ($query)))
  599. {
  600. log_err ("Cannot read offer while aborting it. Query: ".$query.", ".mysql_error());
  601. }
  602. else
  603. {
  604. if (!($row = mysql_fetch_array ($res)))
  605. {
  606. log_err ("Row empty while aborting offer. Query: ".$query.", ".mysql_error ());
  607. }
  608. else
  609. {
  610. $me->activevillage->spend_type ($row['offerkind'], -$row['offersize']*$row['number']);
  611. $query = "delete from offers where offerid=".$offerid." and villageid=".$me->activevillageid;
  612. if (!mysql_query ($query))
  613. {
  614. $me->activevillage->spend_type ($row['offerkind'], +$row['offersize']*$row['number']);
  615. log_err ("Cannot abort offer. Query: ".$query.", ".mysql_error ());
  616. }
  617. }
  618. }
  619. }
  620. //edit offers
  621. if (isset($_POST['hidden_offerid']) && isset($_POST['change_number']))
  622. {
  623. $query = "select * from offers where offerid=".(int)$_POST['hidden_offerid'];
  624. if ($res = mysql_query($query))
  625. {
  626. if ($row = mysql_fetch_array($res))
  627. {
  628. if ($row['uid'] == $me->uid)
  629. {
  630. $former_number = $row['number'];
  631. $new_number = max(1, min(99, (int)$_POST['new_number']));
  632. $spend = array (0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0);
  633. $spend[$row['offerkind']] = ($row['offersize']*$new_number)-($row['offersize']*$former_number);
  634. $former_merchants = ceil (($row['offersize']*$former_number) / $me->merchant_cap);
  635. if ($former_number != $new_number)
  636. {
  637. //if ($former_number < $new_number)
  638. {
  639. if ($me->activevillage->can_spend_array ($spend))
  640. {
  641. calcMerchants();
  642. //FIXME check for enough merchants
  643. $number_merchants = ceil ($row['offersize'] * $new_number / $me->merchant_cap) ;
  644. //echo '<h1>number: '.$number_merchants.', here: '.$merchants_here.', former: '.$former_merchants.'</h1>';
  645. if ($number_merchants > ($merchants_here+$former_merchants))
  646. {
  647. $merchant_err = 'So viele H&auml;ndler hast du nicht. ';
  648. }
  649. else
  650. {
  651. $query = "update offers set number=".$new_number." where offerid=".(int)$_POST['hidden_offerid'];
  652. if (mysql_query($query))
  653. {
  654. $me->activevillage->spend_type ($row['offerkind'], -($row['offersize'] * ($former_number - $new_number)));
  655. }
  656. }
  657. }
  658. else
  659. {
  660. $merchant_err = 'So viele Rohstoffe hast du nicht.';
  661. }
  662. }
  663. }
  664. }
  665. }
  666. }
  667. }
  668. calcMerchants();
  669. ?>