1
<?php
2
/**
3
 *   Huta - wytapianie sztabek, przetapianie ekwipunku, wzmacnianie ekwipunku
4
 *
5
 *   @name                 : smelter.php                            
6
 *   @copyright            : (C) Orodlin
7
 *   @author               : mzah <s.paweska@gmail.com>
8
 *   @version              : preAlfa
9
 *   @since                : 26.08.2007
10
 *
11
 */
12
13
class Huta {
14
	var $step='';
15
	var $action='';
16
17
	/**
18
* Konstruktor
19
*/
20
	function Huta() {
21
		global $player;
22
		if ((isset($_GET['step']) && !ereg("^[a-zA-Z0-9]", $_GET['step'])) || (isset($_GET['action']) &&  !ereg("^[a-zA-Z0-9]", $_GET['action'])))
23
		{
24
			error (ERROR);
25
		}
26
		if (!isset($_GET['step'])) {
27
			$this->step='';
28
		} else {
29
			$this->step=$_GET['step'];
30
			if ($player -> hp <= 0) error(YOU_DEAD);
31
		}
32
		if (isset($_GET['action'])) {
33
			$this->action=$_GET['action'];
34
		} elseif (isset($_POST['action'])) {
35
			$this->action=$_POST['action'];
36
		} else {
37
			$this->action='';
38
		}
39
	}
40
41
	/**
42
* Sprawdza z jakiego materialu jest przedmiot
43
*/	
44
	function sztabka ($typ, $maxwt)
45
	{
46
		$sztabka='steel';
47
		if ($typ=='A' || $typ='W') {
48
			$arrWt=array(640,320,160,80);
49
		}
50
		else {
51
			$arrWt=array(320,160,80,40);
52
		}
53
		if ($maxwt<$arrWt[3]) {
54
			$sztabka='copper';
55
		} elseif ($maxwt<$arrWt[2]) {
56
			$sztabka='bronze';
57
		} elseif ($maxwt<$arrWt[1]) {
58
			$sztabka='brass';
59
		} elseif ($maxwt<$arrWt[0]) {
60
			$sztabka='iron';
61
		}
62
		return $sztabka;
63
	}
64
	/**
65
* Function to show poisoned equipment.
66
*/	
67
	function showpoisoned ( $intPoisonPower, $strPoisonType)
68
	{
69
		$strPoisonInfo ='';
70
		if ($intPoisonPower > 0)
71
		{
72
			switch ($strPoisonType)
73
			{
74
				case 'D':
75
					$strPoisonInfo = '( '.POISON_TYPE.' Dynallca: +'.$intPoisonPower.') ';
76
					break;
77
				case 'N':
78
					$strPoisonInfo = '( '.POISON_TYPE.' Nutari: +'.$intPoisonPower.') ';
79
					break;
80
				default:
81
					$strPoisonInfo = '( '.POISON_TYPE.' Illani: +'.$intPoisonPower.') ';
82
			}
83
		}
84
		return $strPoisonInfo;
85
	}
86
	/**
87
 * Przedmioty w plecaku (bez szat, rozdzek i tych gratow, ktore nosimy na sobie)
88
 */
89
	function backpack ($playerid)
90
	{
91
		global $smarty;
92
		global $db;
93
94
		if ($this -> step == 'wzmocnij') {
95
			$arm = $db -> Execute('SELECT * FROM `equipment` WHERE `owner`='.$playerid.' AND `type`!=\'C\' AND `type`!=\'T\' AND `status`!=\'E\' AND `wzmocnienie`!=\'Y\'');
96
		} else {
97
			$arm = $db -> Execute('SELECT * FROM `equipment` WHERE `owner`='.$playerid.' AND `type`!=\'C\' AND `type`!=\'T\' AND `status`!=\'E\'');
98
		}
99
100
		$arrshow = array();
101
102
		while (!$arm -> EOF)
103
		{
104
			if ($arm -> fields['zr'] < 0) {
105
				$arm -> fields['zr'] = str_replace('-','',$arm -> fields['zr']);
106
				$agility = '(+'.$arm -> fields['zr'].' '.EQUIP_AGI.')';
107
			} elseif ($arm -> fields['zr'] > 0) {
108
				$agility = '(-'.$arm -> fields['zr'].'% '.EQUIP_AGI.')';
109
			} elseif ($arm -> fields['zr'] == 0) {
110
				$agility = '';
111
			}
112
			if ($arm -> fields['szyb'] > 0 && $arm -> fields['type'] != 'A')
113
			{
114
				$speed = '(+'.$arm -> fields['szyb'].' '.EQUIP_SPEED.')';
115
			} else {
116
				$speed = '';
117
			}
118
			$strWarn = ($arm -> fields['wt'] < 11) ? '<blink>' : '';
119
			$strWarn1 =($arm -> fields['wt'] < 11) ? '</blink>' : '';
120
			$strPoisonType ='';
121
			$arrshow[$arm->fields['type']][] = '<input type="radio" name="action" value="'.$arm -> fields['id'].'">'.$strWarn.'<b>('.AMOUNT.': '.$arm -> fields['amount'].')</b> '.$arm -> fields['name'].' (+'.$arm -> fields['power'].')'.$this->showpoisoned($arm -> fields['poison'], $arm -> fields['ptype']).' '.$agility.$speed.' ('.$arm -> fields['wt'].'/'.$arm -> fields['maxwt'].' '.DURABILITY.')'.$strWarn1.'</input>';
122
			$arm -> MoveNext();
123
		}
124
		$arrTyp = array('W', 'H', 'A', 'S', 'C', 'L');
125
		foreach ($arrTyp AS $typ) {
126
			if (!empty($arrshow[$typ])) {
127
				switch ($typ) {
128
					case 'W':
129
						$smartyname='Bweapons';
130
						break;
131
					case 'H':
132
						$smartyname='Bhelmets';
133
						break;
134
					case 'A':
135
						$smartyname='Barmors';
136
						break;
137
					case 'S':
138
						$smartyname='Bshields';
139
						break;
140
					case 'L':
141
						$smartyname='Blegs';
142
						break;
143
				}
144
				$smarty -> assign ($smartyname, $arrshow[$typ]);
145
			}
146
		}
147
	}
148
	/**
149
 * Przetapianie ekwipunku (jeden typ {nagole/helmy/itd})       //wiekszosc wzorow w f-cji do pojedynczego przetapiania przedmiotow
150
 */
151
	function przetop_wszystkie () {
152
		global $smarty;
153
		global $db;
154
		global $player;
155
156
		$smarty -> assign(array(
157
		'Bweapons' => '',
158
		'Bhelmets' => '',
159
		'Barmors' => '',
160
		'Bshields' => '',
161
		'Blegs' => '',
162
		'Message' => ''));
163
164
		if (!empty($this->action) && $this->action!='') {
165
166
			$player->artisandata();
167
			$arm = $db -> Execute('SELECT * FROM `equipment` WHERE `type`=\''.$this->action.'\' AND status!=\'E\' AND `owner`='.$player->id);
168
			if (!$arm -> fields['id']) {
169
				error (NO_ARM);
170
			}
171
172
			$arrPoziom=array(1,3,5,10,15,20,25,30,40,50,60,70,80,90,100);
173
			$arrSztabki=array(1,4,8,20,36,60,86,120,200,300,420,560,720,900,1100);
174
			$arrWspSurowca = array(6, 10, 14, 17, 20);
175
176
			$wegiel=0;
177
			$energia=0;
178
179
			$objSmelter = $db -> Execute('SELECT `level` FROM `smelter` WHERE `owner`='.$player -> id); // sprawdzmy lvl huty (czy jest wystarczajacy do przetopienia)
180
181
			if (!isset($objSmelter -> fields['level'])) {
182
				$intSmelterlevel = 0;
183
			} else {
184
				$intSmelterlevel = $objSmelter -> fields['level'];
185
			}
186
187
			while (!$arm -> EOF)     //PHP4 ssie while=>foreach
188
			{
189
				$intKey = array_search($arm -> fields['minlev'], $arrPoziom);
190
				$testSztabka=$this->sztabka ($arm -> fields['type'], $arm -> fields['maxwt']);
191
				switch ($testSztabka) {
192
					case 'copper':
193
						$wegiel+=1;
194
						$hutaTest=1;
195
						break;
196
					case 'bronze':
197
						$wegiel+=2;
198
						$hutaTest=2;
199
						break;
200
					case 'brass':
201
						$wegiel+=3;
202
						$hutaTest=3;
203
						break;
204
					case 'iron':
205
						$wegiel+=4;
206
						$hutaTest=4;
207
						break;
208
					case 'steel':
209
						$wegiel+=5;
210
						$hutaTest=5;
211
						break;
212
				}
213
				$typeModificator = $hutaTest;
214
				$wegiel*=$arm->fields['amount'];
215
216
				$armEnergia=0.2 * $typeModificator * $arm -> fields['minlev'] * $arm -> fields['amount'];
217
				if ($arm -> fields['type'] == 'A') $armEnergia *= 2;
218
				$energia+=$armEnergia;
219
220
				if($hutaTest>$intSmelterlevel) { //sprawdza lvl huty
221
					error(HUTA_LVL);
222
				}
223
				$arm -> MoveNext();
224
			}
225
			if ($energia>$player->energy) {
226
				error(NO_ENERGY);
227
			}
228
229
			$objMineral=$db -> Execute('SELECT `coal` FROM `minerals` WHERE `owner`='.$player->id);
230
			if ($objMineral->fields['coal']<$wegiel) {
231
				error (N0_COAL);
232
			}
233
234
			$arrMaterial=array('copper','bronze','brass','iron','steel');
235
			$sumaOdzyskaneSztabki = array(0,0,0,0,0);
236
237
			$hutnictwo=0;
238
			$intPd = 0;
239
			$arm = $db -> Execute('SELECT * FROM `equipment` WHERE `type`=\''.$this->action.'\' AND status!=\'E\' AND `owner`='.$player->id);
240
			while (!$arm -> EOF)     //PHP4 ssie while=>foreach
241
			{
242
				$intKeySztabka = array_search($this->sztabka ($arm -> fields['type'], $arm -> fields['maxwt']), $arrMaterial);  //sprawdzmy jaki material
243
244
				$udaneProby=0;
245
				for ($i=0;$i<$arm->fields['amount'];$i++) {
246
					$szansaPrzetopienia=50+$player->hutnictwo-$arm->fields['minlev']*8*$arrWspSurowca[$intKeySztabka];
247
					if ($szansaPrzetopienia>95) {
248
						$szansaPrzetopienia=95;
249
					}
250
					$rand=rand(1,100);
251
					if ($szansaPrzetopienia>$rand) {
252
						$udaneProby++;
253
					}
254
				}
255
256
				$intKey = array_search($arm -> fields['minlev'], $arrPoziom);
257
258
				if ($arm -> fields['type']=='A') {
259
					$sztabki=$udaneProby*$arrSztabki[$intKey]*2;
260
				} else {
261
					$sztabki=$udaneProby*$arrSztabki[$intKey];
262
				}
263
264
				//$intOdzyskaneSztabki=ceil[(Hutnictwo/wspolczynnik_surowca)*10] % surowcow potrzebnych do wykonania danego przedmiotu
265
				$intOdzyskaneSztabki=ceil($player->hutnictwo/$arrWspSurowca[$intKey]*10);
266
267
				//(maksymalna ilosc odzywkanych surowcow to 90%)
268
				if ($intOdzyskaneSztabki>$sztabki*.9) {
269
					$intOdzyskaneSztabki=ceil($sztabki*.9);
270
				}
271
				$sumaOdzyskaneSztabki[$intKeySztabka]+=$intOdzyskaneSztabki;
272
273
			//za kazde udane przetopienie gracz dostaje:
274
				$intPd += ceil($arm -> fields['minlev'] * $arm -> fields['amount'] * ($intKeySztabka+1) / 2);
275
276
				$hutnictwo += $arm -> fields['amount'] / 100;
277
				$arm -> MoveNext();
278
			}
279
280
			$arrTekst = array(SZTABKA1, SZTABKA2, SZTABKA3, SZTABKA4, SZTABKA5);
281
282
			$i=0;
283
			$strSql = '';
284
			$strMessage='';
285
			foreach ($sumaOdzyskaneSztabki AS $OdzyskaneSztabki) {   //sklejamy sql'a do zabrania mineralow
286
				if ($OdzyskaneSztabki>0) {
287
					if ($strSql == '') {
288
						$strSql.=$arrMaterial[$i].'='.$arrMaterial[$i].'+'.$OdzyskaneSztabki;
289
					} else {
290
						$strSql.=', '.$arrMaterial[$i].'='.$arrMaterial[$i].'+'.$OdzyskaneSztabki;
291
					}
292
					$strMessage.=$OdzyskaneSztabki.$arrTekst[$i];
293
				}
294
				$i++;
295
			}
296
297
			checkexp($player -> exp, $intPd, $player -> level, $player -> race, $player -> user, $player -> id, 0, 0, $player -> id, 'hutnictwo', $hutnictwo);
298
			$smarty -> assign('Message', PRZETOP.$strMessage.$hutnictwo.PRZETOP2.$intPd.PRZETOP3.$energia.ENERGY);
299
300
			$db -> Execute('UPDATE `minerals` SET '.$strSql.' WHERE `owner`='.$player -> id);
301
			$db -> Execute('DELETE FROM `equipment` WHERE `type`=\''.$this->action.'\' AND `owner`='.$player->id);
302
			$db -> Execute('UPDATE `players` SET `energy`=`energy`-'.$energia.' WHERE `id`='.$player -> id);
303
		}
304
		$this->backpack ($player -> id);
305
	}
306
307
308
	/**
309
 * Przetapianie ekwipunku
310
 */
311
	function przetop () {
312
		global $smarty;
313
		global $db;
314
		global $player;
315
		$smarty -> assign(array(
316
		'Bweapons' => '',
317
		'Bhelmets' => '',
318
		'Barmors' => '',
319
		'Bshields' => '',
320
		'Blegs' => '',
321
		'Message' => ''));
322
323
		if (!empty($this->action) && $this->action>0) {
324
			$amount = (int)$_POST['amount'];
325
			if (!isset($amount) || $amount == '' || $amount <= 0) error(ERROR);
326
327
			$player->artisandata();
328
329
			$arm = $db -> Execute("SELECT * FROM `equipment` WHERE `id`=".(int)$this->action);
330
			if (!$arm -> fields['id']) {
331
				error(NO_ARM);
332
			}
333
			if ($arm->fields['owner']!=$player->id) {
334
				error(OWNER);
335
			}
336
337
			if ($amount > $arm -> fields['amount']) {
338
				$amount = $arm -> fields['amount'];
339
			}
340
			/*
341
			Przetopienie wymaga takze wegla do rozgrzenia pieca wg przelicznika
342
			- sztabka miedzi potrzebuje 1sz wegla
343
			- sztabka brazu potrzebuje 2sz wegla
344
			- sztabka mosiadzu potrzebuje 3sz wegla
345
			- sztabka zelaza potrzebuje 4sz wegla
346
			- sztabka stali potrzebuje 5sz wegla
347
			*/
348
349
			$testSztabka=$this->sztabka ($arm->fields['type'], $arm->fields['maxwt']);
350
			switch ($testSztabka) {
351
				case 'copper':
352
					$wegiel=1;
353
					break;
354
				case 'bronze':
355
					$wegiel=2;
356
					break;
357
				case 'brass':
358
					$wegiel=3;
359
					break;
360
				case 'iron':
361
					$wegiel=4;
362
					break;
363
				case 'steel':
364
					$wegiel=5;
365
					break;
366
			}
367
			$typeModificator = $wegiel;
368
369
			$objMineral=$db -> Execute('SELECT `coal` FROM `minerals` WHERE `owner`='.$player->id);
370
371
			if ($objMineral->fields['coal']<$wegiel*$amount) {
372
				error (NO_COAL);
373
			}
374
375
			$objSmelter = $db -> Execute('SELECT `level` FROM `smelter` WHERE `owner`='.$player -> id); // sprawdzmy lvl huty (czy jest wystarczajacy do przetopienia)
376
377
			if (!isset($objSmelter -> fields['level'])) {
378
				$intSmelterlevel = 0;
379
			} else {
380
				$intSmelterlevel = $objSmelter -> fields['level'];
381
			}
382
383
			if($typeModificator>$intSmelterlevel) {
384
				error(HUTA_LVL);
385
			}
386
			$wegiel*=$amount;
387
388
389
			//przy udanym przetopieniu hutnik bedzie odzyskiwal:
390
			//ceil[(Hutnictwo/wspolczynnik_surowca)*10] % surowcow potrzebnych do wykonania danego przedmiotu (maksymalna ilosc odzywkanych surowcow to 90%)
391
			$arrPoziom=array(1,3,5,10,15,20,25,30,40,50,60,70,80,90,100);
392
			$arrSztabki=array(1,4,8,20,36,60,86,120,200,300,420,560,720,900,1100);
393
394
			$intKey = array_search($arm -> fields['minlev'], $arrPoziom);
395
396
			//Energia potrzebna to przetopienia bedzie zalezec od ekwiwalentu ilosci sztabek potrzebnych na wykonanie danego przedmiotu. (naliczanie zuzycia energii analogicznie jak przy wytapianiu)   -> to zdanie z projektu ;)
397
			$energia = 0.2 * $typeModificator * $arm -> fields['minlev'] * $amount;
398
			if ($arm -> fields['type'] == 'A') $energia *= 2;
399
			if ($energia>$player->energy) {
400
				error(NO_ENERGY);
401
			}
402
403
			//prawd. przetopienia: 50+hutnictwo - level_przedmiotu*8*wspołczynnik_surowca
404
			$arrMaterial=array('copper','bronze','brass','iron','steel');
405
			$arrWspSurowca = array(6, 10, 14, 17, 20);
406
			$intKey = array_search($this->sztabka ($arm -> fields['type'], $arm -> fields['maxwt']), $arrMaterial);  //sprawdzmy jaki material
407
408
			$udaneProby=0;  //rand dla kazdego przedmiotu a nie calosci zeby nie bylo tak ze jeden rand nam spiepszy 2k sztyletow itd
409
			for ($i=0;$i<$amount;$i++) {
410
				$szansaPrzetopienia=50+$player->hutnictwo-$arm->fields['minlev']*8*$arrWspSurowca[$intKey];
411
				if ($szansaPrzetopienia>95) {
412
					$szansaPrzetopienia=95;
413
				}
414
				$rand=rand(1,100);
415
				if ($szansaPrzetopienia>$rand) {
416
					$udaneProby++;
417
				}
418
			}
419
420
			if ($arm -> fields['type']=='A') {  //za pancerze odzyskujemy x2 sztabek
421
				$sztabki=$udaneProby*$arrSztabki[$intKey]*2;
422
			} else {
423
				$sztabki=$udaneProby*$arrSztabki[$intKey];
424
			}
425
426
			//$intOdzyskaneSztabki=ceil[(Hutnictwo/wspolczynnik_surowca)*10] % surowcow potrzebnych do wykonania danego przedmiotu
427
			$intOdzyskaneSztabki=ceil($player->hutnictwo/$arrWspSurowca[$intKey]*10);
428
429
430
			//(maksymalna ilosc odzywkanych surowcow to 90%)
431
			if ($intOdzyskaneSztabki>$sztabki*.9) {
432
				$intOdzyskaneSztabki=ceil($sztabki*.9);
433
			}
434
435
			//za kazde udane przetopienie gracz dostaje:
436
			$intPd = ceil($arm -> fields['minlev'] * $amount * $typeModificator / 2);
437
438
			//hutnictwo -> nie bylo w projekcie -> umiejka i za udane i nieudane proby
439
			$hutnictwo = $amount / 100;
440
441
			$arrTekst = array(SZTABKA1, SZTABKA2, SZTABKA3, SZTABKA4, SZTABKA5);
442
443
			checkexp($player -> exp, $intPd, $player -> level, $player -> race, $player -> user, $player -> id, 0, 0, $player -> id, 'hutnictwo', $hutnictwo);
444
			$smarty -> assign('Message', PRZETOP.$intOdzyskaneSztabki.$arrTekst[$intKey].$intPd.PRZETOP2.$hutnictwo.PRZETOP3.$energia.ENERGY);
445
446
			$db -> Execute("UPDATE `minerals` SET ".$testSztabka."=".$testSztabka."+".$intOdzyskaneSztabki." WHERE `owner`=".$player -> id);
447
			if ($amount == $arm -> fields['amount']) {
448
				$db -> Execute('DELETE FROM `equipment` WHERE `id`='.$arm -> fields['id']);
449
			} else {
450
				$db -> Execute('UPDATE `equipment` SET `amount` = `amount` - '.$amount.' WHERE `id`='.$arm -> fields['id']);
451
			}
452
			$db -> Execute('UPDATE `players` SET `energy`=`energy`-'.$energia.' WHERE `id`='.$player -> id);
453
454
		}
455
		$this->backpack ($player -> id);
456
	}
457
	/**
458
 * Wzmacnianie ekwipunku
459
 */
460
	function wzmocnij () {
461
		global $smarty;
462
		global $db;
463
		global $player;
464
465
		if ($player -> clas != 'Rzemieślnik') {
466
			error(KLASA);
467
		}
468
		$player->artisandata();
469
470
		$smarty -> assign(array(
471
		'Bweapons' => '',
472
		'Bhelmets' => '',
473
		'Barmors' => '',
474
		'Bshields' => '',
475
		'Blegs' => '',
476
		'PrzedmiotId' => $this->action,
477
		'Message' => ''));
478
		if (!empty($this->action) && $this->action>0) {
479
480
			if (isset($_POST['typ'])) {
481
				$arm = $db -> Execute('SELECT * FROM `equipment` WHERE `id`='.(int)$this->action);
482
				if (empty($arm)) {
483
					error (NO_ARM);
484
				}
485
				if ($arm->fields['owner']!=$player->id) {
486
					error(OWNER);
487
				}
488
				if ($arm->fields['minlev'] > $player -> energy) {
489
					error(NO_ENERGY);
490
				}
491
				if ($arm->fields['wzmocnienie']=='Y') {   //dodac do equip!
492
					error(WZMOCNIONY);
493
				}
494
				//siła wzmocnienia:
495
				//Hutnictwo/20*i, gdzie i=1 dla adamantytu i krysztalu oraz i=2 dla meteorytu
496
				switch ($_POST['typ']) {
497
					case 'a':
498
						$mineralKosztN=3;
499
						$iModifier = 1;
500
						$mineral='adamantium';
501
						break;
502
					case 'k':
503
						$mineralKosztN=3;
504
						$iModifier = 1;
505
						$mineral='crystal';
506
						break;
507
					case 'm':
508
						$mineralKosztN=2;
509
						$iModifier = 2;
510
						$mineral='meteor';
511
						break;
512
					default:
513
						error(ERROR);
514
						break;
515
				}
516
				if ($arm->fields['type']=='A') {
517
					$mineralKoszt = $arm -> fields['minlev'] * $mineralKosztN * 2;
518
				} else {
519
					$mineralKoszt = $arm -> fields['minlev'] * $mineralKosztN;
520
				}
521
				$objMineral=$db -> Execute('SELECT '.$mineral.' FROM `minerals` WHERE `owner`='.$player->id);
522
				if ($objMineral -> fields[$mineral] < $mineralKoszt) {
523
					error (NO_MINERALS);
524
				}
525
526
				$arrMaterial=array('copper','bronze','brass','iron','steel');
527
				$arrModyfikator=array(2,5,8,10,15);
528
				$intKey = array_search($this->sztabka ($arm -> fields['type'], $arm -> fields['maxwt']), $arrMaterial);
529
530
				///prawd. wzmocnienia stopu:
531
				//rand(Hutnictwo/100, Hutnictwo/(2*N)) - gdzie N= 2,5,8,10,15 dla kolejno (miedz, braz, mosiadz zelazo, stal),
532
				//$szansa=rand($player->hutnictwo/100,$player->hutnictwo/(2*$arrModyfikator[$intKey]));
533
				//zmieniony na:
534
				$szansa=rand($player->hutnictwo/(50*$iModifier),$player->hutnictwo/(5*$arrModyfikator[$intKey]*$iModifier));
535
536
				// maksymalne prawd. to 80%
537
				if ($szansa>80) {
538
					$szansa=80;
539
				}
540
				$szansaTest=rand(0,100);
541
				$db -> Execute('UPDATE `minerals` SET '.$mineral.'='.$mineral.'-'.$mineralKoszt.' WHERE `owner`='.$player->id);
542
				$pd=0;
543
				if ($szansa>$szansaTest) {
544
					$pd=ceil($arrModyfikator[$intKey] * $arm -> fields['minlev'] / 2);
545
					$silaWzmocnienia = ceil($player -> hutnictwo / (20 * $iModifier));
546
547
					//maks bonusu 10*lvl
548
					if ($silaWzmocnienia > 10 * $arm->fields['minlev']) {
549
						$silaWzmocnienia = 10 * $arm->fields['minlev'];
550
					}
551
					$name = $arm -> fields['name'].' (W)';
552
					$statsSql = '';
553
					if ($arm -> fields['amount']==1) {
554
						if ($_POST['typ'] == 'a' || $_POST['typ'] == 'm') {
555
							$statsSql .= '`power`=`power`+'.$silaWzmocnienia.', ';
556
						}
557
						if ($_POST['typ'] == 'k' || $_POST['typ'] == 'm') {
558
							$statsSql .= '`zr`=`zr`-'.$silaWzmocnienia.', ';
559
						}
560
						$sql = "UPDATE `equipment` SET ".$statsSql."`name` = '".$name."', `wzmocnienie` = 'Y' WHERE `id` = ".((int)$this->action);
561
						$db -> Execute($sql);
562
					} else {
563
						$db -> Execute('UPDATE `equipment` SET `amount`=`amount`-1 WHERE `id`='.(int)$this->action);
564
						switch ($_POST['typ']) {
565
							case 'a':
566
								$power = $arm -> fields['power'] + $silaWzmocnienia;
567
								$db -> Execute('INSERT INTO `equipment` (`owner`, `name`, `power`, `type`, `cost`, `zr`, `wt`, `minlev`, `maxwt`, `amount`, `magic`, `poison`, `szyb`, `ptype`, `twohand`, `wzmocnienie`, `repair`) VALUES('.$player -> id.', \''.$name.'\', '.$power.', \''.$arm -> fields['type'].'\', '.$arm -> fields['cost'].', '.$arm -> fields['zr'].', '.$arm -> fields['wt'].', '.$arm -> fields['minlev'].', '.$arm -> fields['maxwt'].', 1, \'N\', '.$arm -> fields['poison'].','.$arm -> fields['szyb'].', \''.$arm -> fields['ptype'].'\', \''.$arm -> fields['twohand'].'\', \'Y\','.$arm -> fields['repair'].')');
568
								break;
569
							case 'k':
570
								$zr = $arm -> fields['zr'] - $silaWzmocnienia;
571
								$db -> Execute('INSERT INTO `equipment` (`owner`, `name`, `power`, `type`, `cost`, `zr`, `wt`, `minlev`, `maxwt`, `amount`, `magic`, `poison`, `szyb`, `ptype`, `twohand`, `wzmocnienie`, `repair`) VALUES('.$player -> id.', \''.$name.'\', '.$arm -> fields['power'].', \''.$arm -> fields['type'].'\', '.$arm -> fields['cost'].', '.$zr.', '.$arm -> fields['wt'].', '.$arm -> fields['minlev'].', '.$arm -> fields['maxwt'].', 1, \'N\', '.$arm -> fields['poison'].','.$arm -> fields['szyb'].', \''.$arm -> fields['ptype'].'\', \''.$arm -> fields['twohand'].'\', \'Y\','.$arm -> fields['repair'].')');
572
								break;
573
							case 'm':
574
								$power = $arm -> fields['power'] + $silaWzmocnienia;
575
								$zr = $arm -> fields['zr'] - $silaWzmocnienia;
576
								$db -> Execute('INSERT INTO `equipment` (`owner`, `name`, `power`, `type`, `cost`, `zr`, `wt`, `minlev`, `maxwt`, `amount`, `magic`, `poison`, `szyb`, `ptype`, `twohand`, `wzmocnienie`, `repair`) VALUES('.$player -> id.', \''.$name.'\', '.$power.', \''.$arm -> fields['type'].'\', '.$arm -> fields['cost'].', '.$zr.', '.$arm -> fields['wt'].', '.$arm -> fields['minlev'].', '.$arm -> fields['maxwt'].', 1, \'N\', '.$arm -> fields['poison'].','.$arm -> fields['szyb'].', \''.$arm -> fields['ptype'].'\', \''.$arm -> fields['twohand'].'\', \'Y\','.$arm -> fields['repair'].')');
577
								break;;
578
						}
579
					}
580
581
					$hutnictwo = $arm -> fields['minlev'] / 50;
582
					
583
					switch ($_POST['typ']) {
584
						case 'a':
585
							$smarty -> assign('Message', SUKCES.$silaWzmocnienia.SUKCESA.'<br/>'.YOU_GAINED.$hutnictwo.SMELTER_ABILITY.$pd.EXPERIENCE);
586
							break;
587
						case 'k':
588
							$smarty -> assign('Message', SUKCES.$silaWzmocnienia.SUKCESK.'<br/>'.YOU_GAINED.$hutnictwo.SMELTER_ABILITY.$pd.EXPERIENCE);
589
							break;
590
						case 'm':
591
							$smarty -> assign('Message', SUKCES.$silaWzmocnienia.SUKCESM.'<br/>'.YOU_GAINED.$hutnictwo.SMELTER_ABILITY.$pd.EXPERIENCE);
592
							break;;
593
					}
594
				} else {
595
					$smarty -> assign('Message', PORAZKA);
596
					if ($arm -> fields['amount']==1) {
597
						$db -> Execute('DELETE FROM `equipment` WHERE `id`='.(int)$this->action);
598
					} else {
599
						$db -> Execute('UPDATE `equipment` SET `amount`=`amount`-1 WHERE `id`='.(int)$this->action);
600
					}
601
					$hutnictwo = $arm -> fields['minlev'] / 100;
602
				}
603
604
				checkexp($player -> exp, $pd, $player -> level, $player -> race, $player -> user, $player -> id, 0, 0, $player -> id, 'hutnictwo', $hutnictwo);
605
				$db -> Execute('UPDATE `players` SET `energy`=`energy`-'.($arm -> fields['minlev']).' WHERE `id`='.$player -> id);
606
			}
607
		}
608
		$this -> backpack($player -> id);
609
	}
610
611
	/**
612
 * Wytapianie sztabek
613
 */
614
	function wytop () {
615
		global $smarty;
616
		global $db;
617
		global $player;
618
619
		$objSmelter = $db -> Execute('SELECT level FROM smelter WHERE owner='.$player -> id); // sprawdzmy lvl huty
620
621
		if (!isset($objSmelter -> fields['level'])) {
622
			$intSmelterlevel = 0;
623
			$strLevel = LEVEL0;
624
		} else {
625
			$intSmelterlevel = $objSmelter -> fields['level'];
626
			$strLevel='';
627
			switch ($objSmelter -> fields['level']) {
628
				case 1:
629
					$strLevel = LEVEL1;
630
					break;
631
				case 2:
632
					$strLevel = LEVEL2;
633
					break;
634
				case 3:
635
					$strLevel = LEVEL3;
636
					break;
637
				case 4:
638
					$strLevel = LEVEL4;
639
					break;
640
			}
641
		}
642
		if ($this->action=='Y') { //ulepszmy hute
643
			if ($objSmelter -> fields['level'] == 5) {
644
				error(NO_UPGRADE);
645
			}
646
			$arrCost = array(1000, 5000, 20000, 60000, 120000);
647
			if ($player -> credits < $arrCost[$intSmelterlevel]) {
648
				error(NO_MONEY);
649
			}
650
			if ($intSmelterlevel == 0) {
651
				$db -> Execute('INSERT INTO `smelter` (`owner`, `level`) VALUES('.$player -> id.', 1)');
652
			} else {
653
				$db -> Execute('UPDATE `smelter` SET `level`=`level`+1 WHERE `owner`='.$player -> id);
654
			}
655
			$db -> Execute('UPDATE `players` SET `credits`=`credits`-'.$arrCost[$intSmelterlevel].' WHERE `id`='.$player -> id);
656
			error(YOU_UPGRADE);
657
		} else {
658
			$smarty -> assign('MessageUpdate', '');
659
		}
660
661
		$player->artisandata();
662
663
		$arrAction = array('copper', 'bronze', 'brass', 'iron', 'steel');     //przytnijmy akcje w zaleznosci od tego jaki jest lvl huty
664
		$arrAction = array_slice($arrAction, 0, $objSmelter -> fields['level']);
665
666
		$arrSmelt = array(SMELT1, SMELT2, SMELT3, SMELT4, SMELT5);
667
		$arrSmelt = array_slice($arrSmelt, 0, $objSmelter -> fields['level']);
668
669
		$objTest = $db -> Execute('SELECT copperore, coal, tinore, zincore, ironore FROM minerals WHERE owner='.$player -> id);
670
		$arrTestName = array('copperore', 'coal', 'tinore', 'zincore', 'ironore');
671
672
		$i=0;
673
		foreach ($arrTestName AS $array) {
674
			$arrTest[$i]=$objTest->fields[$array];
675
			$i++;
676
		}
677
678
		$arrSmeltAmount = array(        //koszt w mineralach dla poszczegolnych sztabek
679
		array(2, 1, 0, 0, 0),
680
		array(1, 2, 1, 0, 0),
681
		array(2, 2, 0, 1, 0),
682
		array(0, 3, 0, 0, 2),
683
		array(0, 7, 0, 0, 3));
684
685
		$arrWspSurowca = array(6, 10, 14, 17, 20);
686
687
		//ilosc wytopionych sztabek= [10*(1/(i*4) + hutnictwo/(50+30*i))] za 1 energii
688
		//gdize i=1,3,5,7,9 kolejno dla miedzi, brazu, mosiadzu, zelaza i stali
689
		$arrWspI = array(1, 3, 5, 7, 9);
690
691
		$j = 0;
692
		foreach ($arrSmeltAmount AS $array) {  //ile mozna maksymalnie przeznaczyc energii na wytop
693
			unset($ileMax);
694
			$i=0;
695
			$energiiNaSztabke[$j] = round(1 / (10 * ( 0.25 / $arrWspI[$j] + $player -> hutnictwo / (50 + 30 * $arrWspI[$j]) ) ) , 2);
696
			foreach ($array AS $test) {
697
				if($test != 0) {
698
					$ile=floor( $arrTest[$i] / $test );
699
					if(!isset($ileMax)) {
700
						$ileMax=$ile;
701
					} elseif($ile<$ileMax) {
702
						$ileMax=$ile;
703
					}
704
				}
705
				$i++;
706
			}
707
			if (isset($ileMax) && floor($player ->  energy / $energiiNaSztabke[$j]) < $ileMax) {
708
				$ileMax = floor($player ->  energy / $energiiNaSztabke[$j]);
709
			}
710
			$arrIleMax[] = (!isset($ileMax)) ? 0 : $ileMax;
711
			$j++;
712
		}
713
714
		$arrIleMaxTekst = array(SMELTM1, SMELTM2, SMELTM3, SMELTM4, SMELTM5);
715
		for ($i=0;$i<5;$i++) {
716
			$arrIleMaxTekst[$i] .= $energiiNaSztabke[$i].ENERGY_PER_TRY;
717
		}
718
		$arrIleMaxTekst = array_slice($arrIleMaxTekst, 0, $objSmelter -> fields['level']);
719
		$arrIleMax = array_slice($arrIleMax, 0, $objSmelter -> fields['level']);
720
721
722
		$arrIleSurowceTekst = array(MIN1, MIN2, MIN3, MIN4, MIN5);
723
		$smarty -> assign(array(
724
		'Action'=> $this->action,
725
		'Ilesurowce' => $arrTest,
726
		'Levelinfo' => $strLevel,
727
		'Smelterlevel' => $intSmelterlevel,
728
		'Ilesurowcetekst' => $arrIleSurowceTekst,
729
		'Ilemaxtekst' => $arrIleMaxTekst,
730
		'Ilemax' => $arrIleMax,
731
		'Asmelt' => $arrSmelt,
732
		'Smeltaction' => $arrAction,
733
		'Message' => ''));
734
735
736
		if (isset($_GET['action']) && $this->action!='Y') //Wybrano jaka sztabka
737
		{
738
			if (!in_array($_GET['action'], $arrAction)) {
739
				error(ERROR);
740
			}
741
			if ($player -> hp < 1) {
742
				error(YOU_DEAD);
743
			}
744
			$intKey = array_search($_GET['action'], $arrAction);
745
			$arrSmeltmineral = array(SMELTME1, SMELTME2, SMELTME3, SMELTME4, SMELTME5);
746
			$smarty -> assign(array('Asmelt2' => A_SMELT,
747
			'Smeltm' => $arrSmeltmineral[$intKey],
748
			'Get' => $this->action,
749
			)
750
			);
751
752
			if (isset($_POST['amount'])) // Ile energii
753
			{
754
				if (!ereg('^[1-9][0-9]*$', $_POST['amount'])) {
755
					error(ERROR);
756
				}
757
				if ($_POST['amount'] > $arrIleMax[$intKey])
758
				{
759
					error(NO_MINERALS);
760
				}
761
762
				$triesAmount = (int)$_POST['amount'];
763
				$energiiNaSztabke = round(1 / (10 * ( 0.25 / $arrWspI[$intKey] + $player -> hutnictwo / (50 + 30 * $arrWspI[$intKey]) ) ), 2);
764
				$neededEnergy = $triesAmount * $energiiNaSztabke;
765
				if ($player->energy < $neededEnergy)
766
				{
767
					error(NO_ENERGY);
768
				}
769
770
				//pradopodobienstwo ze z z danej liczby mozliwych wytopionych sztabek beda udane:
771
				//prawd. wytopienia 1 sztabki = ceil(100+hutnictwo -8*współczynnik surowca)% [maksylanie jest 95% szansy na udany wytop]
772
				$udaneProby=0;
773
				for ($i=0;$i<$triesAmount;$i++) {
774
					$szansaWytopienia=floor(100+$player->hutnictwo-8*$arrWspSurowca[$intKey]);
775
					if ($szansaWytopienia>95) {
776
						$szansaWytopienia=95;
777
					}
778
					$rand=rand(1,100);
779
					if ($szansaWytopienia>$rand) {
780
						$udaneProby++;
781
					}
782
				}
783
784
785
				//Pozyskanie PD na wytop
786
				//PD= liczba wytopionych_sztabek*(i+1)
787
				//gdzie i=1,3,5,7,9 bo kolejne sztabki
788
				$pd=$udaneProby*($arrWspI[$intKey]+1);
789
790
				$i=0;
791
				$strSql = '';
792
				$arrKosztMineraly=$arrSmeltAmount[$intKey];
793
				foreach ($arrKosztMineraly as $KosztMineraly) {   //sklejamy sql'a do zabrania mineralow
794
					if ($KosztMineraly>0) {
795
						$strSql.=', '.$arrTestName[$i].'='.$arrTestName[$i].'-'.($KosztMineraly * $triesAmount);
796
					}
797
					$i++;
798
				}
799
800
				//zdobyte hutnictwo
801
				$hutnictwo = (float)((int)$neededEnergy) / 100;
802
803
				$arrTekst = array(SMELTME1, SMELTME2, SMELTME3, SMELTME4, SMELTME5);
804
				checkexp($player -> exp, $pd, $player -> level, $player -> race, $player -> user, $player -> id, 0, 0, $player -> id, 'hutnictwo', $hutnictwo);
805
806
				$db -> Execute('UPDATE `minerals` SET '.$_GET['action'].'='.$_GET['action'].'+'.$udaneProby.$strSql.' WHERE `owner`='.$player -> id);
807
				$db -> Execute('UPDATE `players` SET `energy`=`energy`-'.$neededEnergy.' WHERE `id`='.$player -> id);
808
				$smarty -> assign('Message', YOU_SMELT.' '.$udaneProby.' '.$arrTekst[$intKey].', '.$hutnictwo.YOU_SMELT2.$pd.YOU_SMELT3);
809
			}
810
		}
811
	}
812
}
813
814
815
$title = 'Huta';
816
require_once('includes/head.php');
817
require_once('includes/checkexp.php');
818
819
/**
820
* Get the localization for game
821
*/
822
require_once('languages/'.$player->lang.'/smelter.php');
823
824
if ($player -> location != 'Altara' && $player -> location != 'Ardulith') {
825
	error (ERROR);
826
}
827
828
$Huta = new huta();
829
switch ($Huta->step) {
830
	case 'wytop':
831
		$Huta->wytop();
832
		break;
833
	case 'przetop':
834
		$Huta->przetop();
835
		break;
836
	case 'wzmocnij':
837
		$Huta->wzmocnij();
838
		break;
839
	case 'przetop_wszystkie':
840
		$Huta->przetop_wszystkie();
841
		break;
842
}
843
844
/**
845
* Assign variables to template and display page
846
*/
847
$smarty -> assign(array(
848
'Step' => $Huta->step,
849
'Aback' => A_BACK,
850
'Smelt' => $Huta->action,
851
'Class' => $player  -> clas)
852
);
853
$smarty -> display ('smelter.tpl');
854
855
require_once('includes/foot.php');
856
?>