What's new

Licytacja domk?w

Status
Not open for further replies.

Magic

3+3=3!
Joined
Aug 4, 2008
Messages
1,338
Reaction score
180
Zapytania MySQL:
Code:
ALTER TABLE players ADD moneys int (20) NOT NULL default 0;
DROP TABLE house_auctions;
CREATE TABLE IF NOT EXISTS `house_auctions` (
  `house_id` int(10) unsigned NOT NULL,
  `world_id` tinyint(2) unsigned NOT NULL default '0',
  `bid` int(30) unsigned NOT NULL default '0',
  `limit` int(10) unsigned NOT NULL default '0',
  `time` bigint(20) unsigned NOT NULL default '0',
  `player_id` int(11) NOT NULL
);
ALTER TABLE houses ADD time int(15) NOT NULL default 0;
Do config/config.php dodajemy
Code:
$config['site']['minBid'] = 1000;
$config['site']['levelToHouse'] = 1;
$config['site']['daysPerAuction'] = 7;
Tworzymy nowy plik w g??wnym folderze acc makera o nazwie housesauc.php, a nast?pnie uzupe?niamy go tym kodem:
PHP:
<?PHP
$server = parse_ini_file($config['site']['server_path'].'config.lua');
$id = (int) $_GET['id'];
$auc = $_GET['auc'];
$houses_list = new OTS_HousesList($config['site']['server_path'].'data\world\\'.$server['mapName'].'-house.xml');
if ((empty($id) || !$houses_list->hasHouseId($id)) && !isset($auc)){
	$house_query = $SQL->query('SELECT * FROM houses WHERE owner = 0 ORDER BY price DESC')->fetchAll();
	$counter = 0;
	foreach($house_query as $house){
		if(is_int($counter / 2))
			$bgcolor = $config['site']['darkborder'];
		else
			$bgcolor = $config['site']['lightborder'];
		$counter++;
		$house_town = !empty($towns_list[''.$house['world_id'].''][''.$house['town'].'']) ? $towns_list[''.$house['world_id'].''][''.$house['town'].''] : 'Unnamed';
		$house_name = !empty($house['name']) ? $house['name'] : 'No name House '.$counter;
		$houses .= '<tr bgcolor="'.$bgcolor.'"><td width="30"><center>'.$counter.'.</center></td><td width="125">'.$config['site']['worlds'][''.$house['world_id'].''].'</td><td width="100">'.$house_town.'</td><td width="170">'.	$house_name.'</td><td width="90">'.$house['size'].' sqm</td><td width="170">'.$house['price'].' gols coins</td><td width="100"><a href="'.$_SERVER['REQUEST_URI'].'&id='.$house['id'].'">More info</a></td></tr>';	
	}
$main_content .= '<table border=0 cellspacing=1 cellpadding=4 width=100%><tr bgcolor="'.$config['site']['vdarkborder'].'"><td class=white width="30"><b>Lp.</b></td><td class=white width="125"><b>World</b></td><td class=white width="100"><b>Town</b></td><td class=white width="170"><b>Name</b></td><td class=white width="90"><b>Size</b></td><td class=white width="170"><b>Price</b></td><td class=white width="100"><b>Info</b></td></tr></table><table border=0 cellspacing=1 cellpadding=4 width=100%>'.$houses.'</table>';
}
else{
	$last = $SQL->query('SELECT player_id, bid FROM house_auctions WHERE house_id = '.$id.' ORDER by time DESC')->fetch();
	if ($last)
	$moneys = $SQL->query('SELECT moneys FROM players WHERE id = '.$last['player_id'].'')->fetch();
	if ($logged){
		$account_players = $account_logged->getPlayers();
		foreach($houses_list as $housel){
			if (isset($id) && $id == $housel->getId()){
				if ($housel->getOwner() == NULL){
					$pos = array('x' => $housel->getEntry()->x, 'y' => $housel->getEntry()->y, 'z' => $housel->getEntry()->z);
				}
			}
		}	
		$main_content .= '<table border=0 cellspacing=1 cellpadding=4 width=100%><tr bgcolor="'.$config['site']['vdarkborder'].'"><td class=white><b>More information about house</b></td></tr></table>';
		$house = $SQL->query('SELECT * FROM houses WHERE id = '.$id.'')->fetch();
		if ($house['owner'] == 0){
			$auction = $SQL->query('SELECT * FROM house_auctions WHERE house_id = '.$id.' AND world_id = '.$house['world_id'].'')->fetch();
			if ($auction){
				$player_name = $SQL->query('SELECT name FROM players WHERE id = '.$auction['player_id'])->fetch();
				$player_name = !empty($player_name['name']) ? ', a zaoferowal ja <a href="?subtopic=characters&name='.urlencode($player_name['name']).'">'.$player_name['name'].'</a>' : '';
			}
			$house_town = !empty($towns_list[''.$house['world_id'].''][''.$house['town'].'']) ? $towns_list[''.$house['world_id'].''][''.$house['town'].''] : 'Unnamed';
			$house_name = !empty($house['name']) ? $house['name'] : 'No name House';
			$house_bid = !empty($auction['bid']) ? $auction['bid'] : $house['price'];
			$house_owner = $house['owner'];
			$house_time = $house['time'] == 0 ? '<br/>Licytacja nie rozpoczela sie.' : '<br/>Aukcja konczy sie '.date('Y-m-d H:m', $house['time']).'';
			if ($house['time'] > time() || $house['time'] == 0){
				$main_content .= '<table border=0 cellspacing=1 cellpadding=4 width=100%><tr><td width="20%"><img src="housemapgenerate.php?x='.$pos['x'].'&y='.$pos['y'].'&z='.$pos['z'].'"</td><td valign="top"><b>'.$house_name.'</b><br/><br/>Ten dom ma <b>'.$house['size'].'</b> metrow kwadratowych. Aktualna cena wynosi <b>'.$house_bid.'</b> gold coins'.$player_name.'. Mieszkanie znajduje sie na swiecie <b>'.$config['site']['worlds'][''.$house['world_id'].''].'</b>, w miescie zwanym <b>'.$house_town.'</b>.<br/> Chcesz go miec? <a href="'.$_SERVER['REQUEST_URI'].'&auc=true">Kup go!</a>'.$house_time.' </td></tr></table>';
			}
				else{
					if ($house['owner'] == 0){
						foreach($account_players as $acc_player){
							if($acc_player->getId() == $last['player_id']){
								$last_player = $last['player_id'];
							}
						}
						if (!empty($last_player)){
							$main_content .= '<fieldset><b>Czy jestes pewien, ze chcesz zamieszkac w tym domu? Jesli tak, kliknij <a href="'.$_SERVER['REQUEST_URI'].'&get=true">tutaj</a></b></fieldset>';
							if ($_GET['get'] == 'true'){								
								if ($moneys['moneys'] >= $last['bid']){
									$SQL->query('UPDATE houses SET owner = '.$last_player.', time = 0 WHERE id = '.$id.'');
									$main_content .= 'Od teraz domek '.$house_name.' znajdujacy sie w '.$house_town.' jest Twoj!.';
								}
								else{
									$main_content .= 'Nie masz wystarczajacej ilosci pieniedzy na koncie. Wplac minimum '.$last['bid'].' uzywajac komendy <b>!house "deposit, '.$last['bid'].'</b>.';
								}
							}
						}
						$main_content .= '<fieldset><font color="red"><b>Ta aukcja jest juz zakonczona.</b></font></fieldset>';
					}
				} 
		}
		if ($auc == 'true'){
				if ($account_players>0){
						if ($account_logged->isPremium()){
							$main_content .= 'Aby zalicytowac, musisz zwiekszyc stawke o conajmniej <b>'.$config['site']['minBid'].'</b> gold coins. Sume, ktora chcesz postawic na ten dom musisz zdepozytowac specjalna komenda <b><i>!house "deposit</i></b>. Jezeli jednak przegrasz licytacje mozesz wyplacic swoje pieniadze uzywajac komendy <b><i>!house "withdraw</i></b>.<br/><br/><fieldset title="Licytacja"><legend>Licytacja</legend><table align="center" border=0>';
							foreach($account_players as $acc_player){
								if ($acc_player->getLevel() >= $config['site']['levelToHouse'])
									$options .= '<option name="'.$acc_player.'">'.$acc_player.'</option>';
							}
								if (empty($options))
									$main_content .= 'Wymagany poziom do kupienie mieszkania to <b>'.$config['site']['levelToHouse'].'</b>.';	
								else
							$main_content .= '<form action="" method="post"><tr><td>Stawka</td><td><input type="text" name="bid"><select name="player">'.$options.'</select></td><tr><td><input type="submit" value="Licytuj" name="sub"></form>';
							$main_content .= '</table></fieldset>';
							if (isset($_POST['sub']) && $house_owner == 0){
								$bid = $_POST['bid'];
								if ($house_bid + $config['site']['minBid'] < $bid){
									$player = $SQL->query('SELECT id, level FROM players WHERE name = "'.$_POST['player'].'"')->fetch();
									 if ($config['site']['levelToHouse'] < $player['level']){
										if ($moneys['moneys'] > $last['bid']){
											$SQL->query('INSERT INTO house_auctions(house_id, world_id, player_id, bid, time) VALUES('.$id.', '.$house['world_id'].', '.$player['id'].', '.$bid.', UNIX_TIMESTAMP())');
											if ($SQL->query('SELECT id FROM houses WHERE id = '.$id.' and time < 1')){
												$time = time() + $config['site']['daysPerAuction']*24*60*60;
												$SQL->query('UPDATE houses SET time = '.$time.' WHERE id = '.$id.'');
											}
											$main_content .= '<font color="green">Zalicytowales domek!';
										}
										else{
											$main_content .= 'Nie masz wystarczajacej ilosci pieniedzy na koncie. Wplac minimum '.$last['bid'].' uzywajac komendy <b>!house "deposit, '.$last['bid'].'</b>.';
										}
									}
									else{
										$main_content .= '<font color="red">Twoj poziom jest zbyt maly. Aby licytowac mieszkanie musisz miec minimalnie '.$config['site']['levelToHouse'].' poziom.';
									}
								}
								else{
									$main_content .= '<font color="red">Postawiles za malo! Stawka musi byc wieksza od poprzedniej i powiekszona conajmniej o <b>'.$config['site']['minBid'].'</b>.</font>';
								}
							}					
						}
						else{
							Header('Location: ?subtopic=shopsystem');
						}
				}
				else{
					Header('Location: ?subtopic=accountmanagement');
				}
		}
	}
	else{
		Header('Location: ?subtopic=accountmanagement');
	}
}
?>
Tworzymy housemapgenerate.php i wklejamy to:
PHP:
<?
header("Content-type: image/png");
function drawBorder(&$img, &$color, $thickness = 1)
{
    $x1 = 0;
    $y1 = 0;
    $x2 = ImageSX($img) - 1;
    $y2 = ImageSY($img) - 1;
    for($i = 0; $i < $thickness; $i++)
    {
        ImageRectangle($img, $x1++, $y1++, $x2--, $y2--, $color_black);
    }
}
		$x = $_GET['x'];
		$y = $_GET['y'];
		$z = $_GET['z'];
		$image = imagecreatefrompng("./maps/".$z.".png");
		list($width, $height) = getimagesize("./maps/".$z.".png");
		$new_width = 200;
		$new_height= 200;
		$color_white = ImageColorAllocate($image, 255, 255, 255);
		$color_black = ImageColorAllocate($image, 0, 0, 0); 
		ImageFilledRectangle($image, $x-30, $y-25, $x-28, $y-23, $color_black);
		ImageArc($image, $x-29, $y-24, 5, 5, 0, 0, $color_white);
		$image_new = imagecreatetruecolor($new_width, $new_height); 
		imagecopyresized($image_new, $image, 0, 0, $x-60, $y-60, $new_width, $new_height,70, 70); 
		drawBorder($image_new, $color_black, 3); 
		imagepng($image_new);
		imagedestroy($image_new);
?>
Aby mie? obraz domu, musimy zrobic eksport mapy z RME do plik?w .bmp a nast?pnie przerobi? zdj?cia na (poziom).png i wrzuci? je do folderu /maps/ w acc makerze. Dla przyk?adu najni?szy poziom to 0.png, a najwy?szy to 14.png.
Kolejngo do index.php dodajemu:
PHP:
case "Houses Auctions";
  $topic = "Houses Auctions";
  $subtopic = "housesauc";
  include("housesauc.php");
break;
 

Magic

3+3=3!
Joined
Aug 4, 2008
Messages
1,338
Reaction score
180
Odp: #1 - Licytacja domk?w - Kowol

Odp: #1 - Licytacja domk?w - Kowol

Aby link do tego skryptu by? widzialny w acc makerze musicie doda? jeszcze odpowiedni kod do layout.php, lecz on jest zale?ny od layoutu. Dla layoutu ala rl tibia wygl?da to tak:
PHP:
<a href='?subtopic=housesauc'>
  <div id='submenu_createaccount' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
    <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
    <div id='ActiveSubmenuItemIcon_createaccount' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
    <div class='SubmenuitemLabel'>Houses Licitation</div>
    <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
  </div>
</a>
Dodajemy to pod tym:
PHP:
<div id='community_Submenu' class='Submenu'>
<a href='?subtopic=characters'>
  <div id='submenu_characters' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
    <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
    <div id='ActiveSubmenuItemIcon_characters' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
    <div class='SubmenuitemLabel'>Characters</div>
    <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
  </div>
</a>
Nast?pnie otwieramy folder z naszym otsem i przechodzimy do folderu talkactions i podmieniamy zawarto?? pliku leavehouse.lua na t?:
Code:
function onSay(cid, words, param, channel)
	local house = getHouseFromPos(getCreaturePosition(cid))
	if(not house) then
		doPlayerSendCancel(cid, "You are not inside a house.")
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
		return false
	end
	local owner = getHouseInfo(house).owner
	if(owner ~= getPlayerGUID(cid) and (owner ~= getPlayerGuildId(cid) or getPlayerGuildLevel(cid) ~= GUILDLEVEL_LEADER)) then
		doPlayerSendCancel(cid, "You are not the owner of this house.")
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
		return false
	end
	setHouseOwner(house, 0)
	db.executeQuery("UPDATE houses SET time = 0 WHERE owner = "..owner.."")
	doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_BLUE)
	return false
end
Nast?pnie tworzymy nowy plik w tym samym folderze o nazwie housesauc.lua i uzupe?niamy go tym:
Code:
function onSay(cid, words, param, channel)
local query_moneys = db.getResult("SELECT moneys FROM players WHERE id = "..getPlayerGUID(cid).." LIMIT 1")
local moneys = query_moneys:getDataInt("moneys")
if (param == "") then
      doPlayerPopupFYI(cid, "Uzycie:\n!house deposit, ilosc (wplaca dana ilosc na konto)\n!house withdraw (wyciaga pieniadze z konta)\n\nStan konta: "..moneys.." gold coins")
return TRUE
end
local param = string.explode(param, ",")
	if (param[1] == "deposit") then
		if (doPlayerRemoveMoney(cid, param[2])) then
			db.executeQuery("UPDATE players SET moneys = moneys + "..param[2].." WHERE id = "..getPlayerGUID(cid).." LIMIT 1")
			doPlayerSendTextMessage(cid, 20, "Dodales "..param[2].." gold coins do swojego konta.")
		else
			doPlayerSendTextMessage(cid, 20, "Masz zbyt malo pieniedzy.")
		end
	elseif (param[1] == "withdraw") then
		local query_houses = db.getResult("SELECT owner FROM houses WHERE id = (SELECT house_id FROM house_auctions WHERE player_id = "..getPlayerGUID(cid).." ORDER BY time DESC LIMIT 1) and time > 0")
		if query_houses:getID() == -1 then
			if (moneys > 0) then
				if (doPlayerAddMoney(cid, moneys)) then
					doPlayerSendTextMessage(cid, 20, "Wyciagnales "..moneys.." gold coins ze swojego konta.")
					db.executeQuery("UPDATE players SET moneys = 0 WHERE id = "..getPlayerGUID(cid).."")
					query_moneys:free()
				end
			else
				doPlayerSendTextMessage(cid, 20, "Nie masz srodkow na koncie.")
			end
		else
			doPlayerSendTextMessage(cid, 20, "Jestes w trakcie licytacji domku, nie mozesz wyplacic pieniedzy")
		end
	end
return TRUE
end
Do talkactions.xml dodajemy:
Code:
<talkaction words="!house" hide="yes" event="script" value="housesauc.lua"/>
To ju? koniec! Mo?esz si? cieszy? nowym systemem
 
Last edited:

Magic

3+3=3!
Joined
Aug 4, 2008
Messages
1,338
Reaction score
180
Odp: #1 - Licytacja domk?w - Kowol

Odp: #1 - Licytacja domk?w - Kowol

Jak dla mnie genialny skrypt, przydatno?? na RPG jest ogromna, wszystko jest wspaniale opisane, oraz bardzo ?adnie wygl?da w accmarkerze. Umieszczenie map domk?w by?o ?wietnym pomys?em - dzi?ki temu nie trzeba b?dzie biega? po ca?ym otsie i szuka? domku. Nie mam nic do zarzucenia, moja ocena to 10/10.
 
T

Tairens

Guest
Odp: #1 - Licytacja domk?w - Kowol

Odp: #1 - Licytacja domk?w - Kowol

Najlepszy skrypt w tej rundzie, ogromna przydatno?? RPG, tematyka jak najbardziej trafiona.?wietnie! Opr?cz paru drobiazg?w w kodzie, jak powtarzanie czynno?ci kt?re przewidzia? G?sior, to nie mam nic do zarzucenia.10/10

Ocena og?lna jury: 10/10.
Miejsce: 1
 

Asta

Advanced User
Joined
Apr 11, 2008
Messages
382
Reaction score
10
Odp: #1 - Licytacja domk?w - Kowol

Odp: #1 - Licytacja domk?w - Kowol

Nie wy?wietla mi zdj?cia domku.
 

Kowol

Senior User
Joined
Apr 9, 2008
Messages
1,250
Reaction score
158
Odp: #1 - Licytacja domk?w - Kowol

Odp: #1 - Licytacja domk?w - Kowol

Masz zdj?cia w folderze /maps/ w postaci 0.png - 14.png?
 

Asta

Advanced User
Joined
Apr 11, 2008
Messages
382
Reaction score
10
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

41462800.png

Tak.
 

Kowol

Senior User
Joined
Apr 9, 2008
Messages
1,250
Reaction score
158
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Masz skrypt za to odpowiadaj?cy pod nazw? housemapgenerate.php?
 

Asta

Advanced User
Joined
Apr 11, 2008
Messages
382
Reaction score
10
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Tak, robi?em to ju? z 5 razy i to samo.
98221258.png
 

Kowol

Senior User
Joined
Apr 9, 2008
Messages
1,250
Reaction score
158
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Mo?liwe, ?e masz stary silnik. Zmie? 5 linijk? w housesauc.php na swoj? ?cie?k? do pliku ~-house.xml
 
Last edited:

Asta

Advanced User
Joined
Apr 11, 2008
Messages
382
Reaction score
10
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

U?ywam TFS'a 0.3.6pl1, ?cie?ka do xxx-house.xml te? mam dobr?.
 

Brolly182

User
Joined
Jun 6, 2008
Messages
46
Reaction score
5
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

@Asta
folder maps znajduje si? w tym samym katalogu co mapgenerator?

@Topic
nono :) gratuluj? 1 miejsca ^^
Oraz tak?e musz? przyzna? ?e jest bardzo poka?ny ;)
 
Last edited:

Asta

Advanced User
Joined
Apr 11, 2008
Messages
382
Reaction score
10
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

@Asta
folder maps znajduje si? w tym samym katalogu co mapgenerator?
@Topic
nono :) gratuluj? 1 miejsca ^^
Oraz tak?e musz? przyzna? ?e jest bardzo poka?ny ;)
Tak, folder jak i pliki znajduj? si? w g??wnym katalogu Acc Makera (htdocs).
 

kurski

Advanced User
Joined
May 11, 2010
Messages
186
Reaction score
3
Age
30
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Warning: include(shopsystem.php) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\sev\index.php on line 277

Warning: include() [function.include]: Failed opening 'shopsystem.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\sev\index.php on line 277

hmm?
[27/06/2010 13:02:20] mysql_real_query(): SELECT `house_id`, `player_id`, `bid` FROM `house_auctions` WHERE `endtime` < 1277636540 - MYSQL ERROR: Unknown column 'endtime' in 'where clause' (1054)
 
Last edited:

PanTade???

Advanced User
Joined
Oct 21, 2008
Messages
262
Reaction score
4
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

[02/09/2010 17:45:32] mysql_real_query(): SELECT `house_id`, `player_id`, `bid` FROM `house_auctions` WHERE `endtime` < 1283442332 - MYSQL ERROR: Unknown column 'endtime' in 'where clause' (1054)
 

Marozii

Active User
Joined
Apr 30, 2010
Messages
81
Reaction score
8
Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

Odp: #1 - Licytacja domk?w - Kowol Miejsce: 1 Punkty: 10/10

M?j Real szuka? Tego Skryptu .. Powiedzia? ze jest ?wietny .. dzi?kuje za niego.. i pkt Reputacji Wpadnie :]
 
Status
Not open for further replies.
Top