[Dev] WebQuest System

Do you like the idea?


  • Total voters
    44

killar4eto

Well-Known Member
Joined
Apr 11, 2009
Messages
920
Reaction score
463
От днес.... 11/12/12 разработвам Уеб Quest система, чрез която ще направите "престоя" на потребителите във вашия сайт още по - интересен.
Този път си казвате, той пак прави ама не споделя нищо....

От сега казвам, че този проект ще е напълно достъпен за всички, които искат да го ползват разбира се :)

За жалост, ще се изисква малко писане на ръка, защото всички Quest-ве се съхраняват на специален файл и ест, може да имате над милион Custom quest-ве. За сега системата ще работи само с Experience, тоест ще дава само Опит на играчите. Този проект ще се развива постепенно и ще се добавят нови и нови модове ;]

PS: Вижте как ще изглежда файл-а на Quest-вете ;]
PS2: Release съвсем скоро... все пак днес(4:47) съм приключил с основното, а сега отивам да лягам ;]

[Update2]
PHP:
//Function WebQuest
function WebQuest(){
	$file = file_get_contents("./Quests.script");
	
	$x = 0;
	
	preg_match_all("/Begin Quest/is", $file, $matches);
	
	foreach($matches[0] As $value){
		 $x++;
	}
	for($i=0;$i<$x;$i++){
		$begin = explode("//Begin Quest $i", $file);
		$end = explode("//End Quest $i", $begin[1]);
		
		$name = explode("[QuestName]", $end[0]);
		$endname = explode("[/QuestName]", $name[1]);
		
		$desc = explode("[QuestDesc]", $end[0]);
		$enddesc = explode("[/QuestDesc]", $desc[1]);
		
		$need = explode("[QuestNeeds]", $end[0]);
		$endneed = explode("[/QuestNeeds]", $need[1]);
		
		$type = explode("[QuestType]", $end[0]);
		$endtype = explode("[/QuestType]", $type[1]);
		
		$stat = explode("[QuestStat]", $end[0]);
		$endstat = explode("[/QuestStat]", $stat[1]);
		
		$time = explode("[QuestTime]", $end[0]);
		$endtime = explode("[/QuestTime]", $time[1]);
		
		$prize = explode("[QuestPrize]", $end[0]);
		$endprize = explode("[/QuestPrize]", $prize[1]);
		
		if(!is_dir("./Quests/")){
			mkdir("./Quests/");
		}
		else{
			if(is_file("./Quests/$endname[0].tmp")){}
			else{
			$newQ = fopen("./Quests/$endname[0].tmp", 'w+');
			$new_Quest = fwrite($newQ, "Quest Name = $endname[0]\nQuest Description = $enddesc[0]\nQuest Time = $endtime[0]\nQuest Type = $endtype[0]\nQuest Stat = $endstat[0]\nQuest Needs = $endneed[0]\nQuest Prize = $endprize[0]");
			@fclose($newQ);
			}
		}
		
		switch($endtype[0]){
			case Stats:
				echo "<tr>
				<td aling='left'><a href='$_SERVER[REQUEST_URI]&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>			
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";				
			break;
			
			case Experience:
				echo "<tr>
				<td aling='left'><a href='?page=webevents&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";	
			break;
			
			case Items:
				echo "<tr>
				<td aling='left'><a href='?page=webevents&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";	
			break;			
		}
		
	}
	
		if(isset($_GET[quest])){
			$quest_name = htmlspecialchars($_GET[quest]);
			
			if(is_file("./Quests/$quest_name.tmp")){
				$q_file = file_get_contents("./Quests/$quest_name.tmp");
				
				$quest_title = explode("Quest Name =", $q_file);
				$end_q_t = explode("\n", $quest_title[1]);
				
				$q_need = explode("Quest Needs =", $q_file);
				$end_q_need = explode("\n", $q_need[1]);
				
				$q_type = explode("Quest Type =", $q_file);
				$end_q_type = explode("\n", $q_type[1]);
				
				$q_stat = explode("Quest Stat =", $q_file);
				$end_q_stat = explode("\n", $q_stat[1]);
				
				$q_prize = explode("Quest Prize =", $q_file);
				$end_q_prize = explode("\n", $q_prize[1]);
				
				if($end_q_type[0] == "Stats"){
						$query = mssql_query("SELECT $end_q_stat[0] FROM Character WHERE Name='killar4eto'") or die("Error1");
						$row = mssql_fetch_row($query);
						
						if($row[0] < $end_q_need[0]){
							print "killar4eto don't have enought $end_q_stat[0], now you have <font color='red'>$row[0]</font>/<font color='green'>$end_q_need[0]</font>";
						}
						else{
							$update = mssql_query("UPDATE Character SET $end_q_stat[0]=$end_q_stat[0]-$end_q_need[0], Money=Money+$end_q_prize[0] WHERE Name='killar4eto'") or die("Error2");
							print "<font color='green'>killar4eto successfully complete the end_q_t[0] quest.</font>";
						}
				}
				else{
						$query = mssql_query("SELECT $end_q_stat[0] FROM Character WHERE Name='killar4eto'") or die("Error1");
						$row = mssql_fetch_row($query);
						
						if($row[0] < $end_q_need[0]){
							print "killar4eto don't have enought $end_q_stat[0], now you have <font color='red'>$row[0]</font>/<font color='green'>$end_q_need[0]</font>.";
						}
						else{
							$update = mssql_query("UPDATE Character SET $end_q_stat[0]=$end_q_stat[0]-$end_q_need[0], Money=Money+$end_q_prize[0] WHERE Name='killar4eto'") or die("Error2");
							print "<font color='green'>killar4eto successfully complete the $end_q_t[0] quest.</font>";
						}				
				}				

			}
			else{
				print "<br/><font color='red'><b>$quest_name</b> not exists in our scenario!</font><br/><br/>";
			}
		}		
	
}
 

Attachments

  • QuestSystem.jpg
    QuestSystem.jpg
    394.7 KB · Views: 180
  • QuestSystemInc.jpg
    QuestSystemInc.jpg
    557.9 KB · Views: 246
  • QuestsUpdate1.jpg
    QuestsUpdate1.jpg
    233.4 KB · Views: 188
Last edited:
Ок, малко пипнах тук - таме и сложих няколко нови реда и вече имаме и QuestType ^^ за сега ще се придържам към Items|Zen|PvE|Resets... Малко идеи няма да дойдат в излишък :D
 
честно казано не можах да разбера какво точно правиш, но звучи доста интересно надявам се да се получи :)
 
Браво колега! Много добра работа ;) Ще помагам с идеи когато дойдат такива ;д
 
Ок, малко пипнах тук - таме и сложих няколко нови реда и вече имаме и QuestType ^^ за сега ще се придържам към Items|Zen|PvE|Resets... Малко идеи няма да дойдат в излишък :D

Предлагам да се сложи и за кредити. И може би 1 Custom който може да си добави човека който ползва системата. да дефинира таблица, колонка и така нататак.
 
  • Like
Reactions: killar4eto
Предлагам да се сложи и за кредити. И може би 1 Custom който може да си добави човека който ползва системата. да дефинира таблица, колонка и така нататак.

Като идея става... но номера е да го запазя "просто" за да може всеки един да си прави собствени промени без да има знания като PHP и SQL :)
 
  • Like
Reactions: MeMoS and ivowe3
Аз съм си казал !!!
Killer4eto ще превърне muonline в браузер игра.
Проекта е много добър нямам какво да кажа ,а по горното изречение го приеми като комплимент :)
 
  • Like
Reactions: killar4eto
Ето съвсем малка част от кода ;]. Според мен достат интересно го правя, но да си кажа от сега кода не подважи на критики (punch) (devil) Нарочно го пиша така, защото имам нещо в замисъл :)

PHP:
//Function WebQuest
function WebQuest(){
	$file = file_get_contents("./Quests.script");
	
	$x = 0;
	
	preg_match_all("/Begin Quest/is", $file, $matches);
	
	foreach($matches[0] As $value){
		 $x++;
	}
	for($i=0;$i<$x;$i++){
		$begin = explode("//Begin Quest $i", $file);
		$end = explode("//End Quest $i", $begin[1]);
		
		$name = explode("[QuestName]", $end[0]);
		$endname = explode("[/QuestName]", $name[1]);
		
		$desc = explode("[QuestDesc]", $end[0]);
		$enddesc = explode("[/QuestDesc]", $desc[1]);
		
		$need = explode("[QuestNeeds]", $end[0]);
		$endneed = explode("[/QuestNeeds]", $need[1]);
		
		$type = explode("[QuestType]", $end[0]);
		$endtype = explode("[/QuestType]", $type[1]);
		
		$stat = explode("[QuestStat]", $end[0]);
		$endstat = explode("[/QuestStat]", $stat[1]);
		
		switch($endtype[0]){
			case Stats:
				echo "<tr>
				<td aling='left'><a href='?page=webevents&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";				
			break;
			
			case Experience:
				echo "<tr>
				<td aling='left'><a href='?page=webevents&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";	
			break;
			
			case Items:
				echo "<tr>
				<td aling='left'><a href='?page=webevents&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";	
			break;			
		}
		
	}
	
		if(isset($_GET[quest])){
			//Code is here(hidded for now)
		}	
	
}
 
  • Like
Reactions: MeMoS and Dea7h
Деца, първият тест на Quest системата мина успешно... 2:11 AM 13/12/12 :) ^^
Ако така вървят нещатата, май ще си имаме release до края на седмицата ^^
 
  • Like
Reactions: MeMoS and Dea7h
Супер, но не мислиш ли че това би могло да се ползва само за някой доста труден сървър? Имам предвид това че дава само "опит" като награда?
Аз преди си мислех да правя подобно (ако се сещаш на oveRLuckEd) която беше да търсиш определени предмети за тази "мисия" и като награда получаваш определен предмет... Или нещо такова нооо нямам много време да се занимавам... :x

Та ако решиш може да добавиш нещо подобно? Би било добре :p Иначе се поличава страхотно! Успех и дано нямаш проблеми!!! :)
 
  • Like
Reactions: killar4eto
Супер, но не мислиш ли че това би могло да се ползва само за някой доста труден сървър? Имам предвид това че дава само "опит" като награда?
Аз преди си мислех да правя подобно (ако се сещаш на oveRLuckEd) която беше да търсиш определени предмети за тази "мисия" и като награда получаваш определен предмет... Или нещо такова нооо нямам много време да се занимавам... :x

Та ако решиш може да добавиш нещо подобно? Би било добре :p Иначе се поличава страхотно! Успех и дано нямаш проблеми!!! :)

Системата не дава само "Опит"... на първо време мислех, че ще е само за хард сървъри, но мога да потвърдя, че системата работи с Credits, Items и т.н.т... зависи какъв Type(тип) си избрал :D :D ;]

PS: Казах ти, че съм зъл гений :D :D
 
  • Like
Reactions: MeMoS and Dea7h
нямали да е по добре ако е на XML и PHP (think)
 
нямали да е по добре ако е на XML и PHP (think)
Принципно би ми спестило много време и нерви (да не говорим за проблеми), но едва ли повечето потребители знаят как да работят с XML, все пак го правя за абсолютно всички, й повярвай като видиш Source ще разбереш какво имам в предвит.

PS: Quest System-a който правя НЕ ползва специални база данни или нещо от сорта, но все пак си взаимодейства с SQL за "Update"-ване на Character таблицата ;]... тоест теглиш функцията "прикачваш" я към сайта си и от там на татък всичко е автоматично, е все пак потребителите трябва да цъкнат на Quest-а де ^^
 
  • Like
Reactions: Dea7h and MeMoS
Ето още 1 Update

Update2:
PHP:
//Function WebQuest
function WebQuest(){
	$file = file_get_contents("./Quests.script");
	
	$x = 0;
	
	preg_match_all("/Begin Quest/is", $file, $matches);
	
	foreach($matches[0] As $value){
		 $x++;
	}
	for($i=0;$i<$x;$i++){
		$begin = explode("//Begin Quest $i", $file);
		$end = explode("//End Quest $i", $begin[1]);
		
		$name = explode("[QuestName]", $end[0]);
		$endname = explode("[/QuestName]", $name[1]);
		
		$desc = explode("[QuestDesc]", $end[0]);
		$enddesc = explode("[/QuestDesc]", $desc[1]);
		
		$need = explode("[QuestNeeds]", $end[0]);
		$endneed = explode("[/QuestNeeds]", $need[1]);
		
		$type = explode("[QuestType]", $end[0]);
		$endtype = explode("[/QuestType]", $type[1]);
		
		$stat = explode("[QuestStat]", $end[0]);
		$endstat = explode("[/QuestStat]", $stat[1]);
		
		$time = explode("[QuestTime]", $end[0]);
		$endtime = explode("[/QuestTime]", $time[1]);
		
		$prize = explode("[QuestPrize]", $end[0]);
		$endprize = explode("[/QuestPrize]", $prize[1]);
		
		if(!is_dir("./Quests/")){
			mkdir("./Quests/");
		}
		else{
			if(is_file("./Quests/$endname[0].tmp")){}
			else{
			$newQ = fopen("./Quests/$endname[0].tmp", 'w+');
			$new_Quest = fwrite($newQ, "Quest Name = $endname[0]\nQuest Description = $enddesc[0]\nQuest Time = $endtime[0]\nQuest Type = $endtype[0]\nQuest Stat = $endstat[0]\nQuest Needs = $endneed[0]\nQuest Prize = $endprize[0]");
			@fclose($newQ);
			}
		}
		
		switch($endtype[0]){
			case Stats:
				echo "<tr>
				<td aling='left'><a href='$_SERVER[REQUEST_URI]&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>			
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";				
			break;
			
			case Experience:
				echo "<tr>
				<td aling='left'><a href='?page=webevents&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";	
			break;
			
			case Items:
				echo "<tr>
				<td aling='left'><a href='?page=webevents&quest=$endname[0]'>$endname[0]</a></td>
				<td aling='left'>$enddesc[0]</td>
				<td aling='left'>$endneed[0] $endstat[0]</td>
				</tr>";	
			break;			
		}
		
	}
	
		if(isset($_GET[quest])){
			$quest_name = htmlspecialchars($_GET[quest]);
			
			if(is_file("./Quests/$quest_name.tmp")){
				$q_file = file_get_contents("./Quests/$quest_name.tmp");
				
				$quest_title = explode("Quest Name =", $q_file);
				$end_q_t = explode("\n", $quest_title[1]);
				
				$q_need = explode("Quest Needs =", $q_file);
				$end_q_need = explode("\n", $q_need[1]);
				
				$q_type = explode("Quest Type =", $q_file);
				$end_q_type = explode("\n", $q_type[1]);
				
				$q_stat = explode("Quest Stat =", $q_file);
				$end_q_stat = explode("\n", $q_stat[1]);
				
				$q_prize = explode("Quest Prize =", $q_file);
				$end_q_prize = explode("\n", $q_prize[1]);
				
				if($end_q_type[0] == "Stats"){
						$query = mssql_query("SELECT $end_q_stat[0] FROM Character WHERE Name='killar4eto'") or die("Error1");
						$row = mssql_fetch_row($query);
						
						if($row[0] < $end_q_need[0]){
							print "killar4eto don't have enought $end_q_stat[0], now you have <font color='red'>$row[0]</font>/<font color='green'>$end_q_need[0]</font>";
						}
						else{
							$update = mssql_query("UPDATE Character SET $end_q_stat[0]=$end_q_stat[0]-$end_q_need[0], Money=Money+$end_q_prize[0] WHERE Name='killar4eto'") or die("Error2");
							print "<font color='green'>killar4eto successfully complete the end_q_t[0] quest.</font>";
						}
				}
				else{
						$query = mssql_query("SELECT $end_q_stat[0] FROM Character WHERE Name='killar4eto'") or die("Error1");
						$row = mssql_fetch_row($query);
						
						if($row[0] < $end_q_need[0]){
							print "killar4eto don't have enought $end_q_stat[0], now you have <font color='red'>$row[0]</font>/<font color='green'>$end_q_need[0]</font>.";
						}
						else{
							$update = mssql_query("UPDATE Character SET $end_q_stat[0]=$end_q_stat[0]-$end_q_need[0], Money=Money+$end_q_prize[0] WHERE Name='killar4eto'") or die("Error2");
							print "<font color='green'>killar4eto successfully complete the $end_q_t[0] quest.</font>";
						}				
				}				

			}
			else{
				print "<br/><font color='red'><b>$quest_name</b> not exists in our scenario!</font><br/><br/>";
			}
		}		
	
}

ест... не е перфектен, но още работя по isset offset-а :D :D ^^... Мисля, че от този форум няколко човека ще могат да разчетат какво правя и защо ;] ^^... нали така колеги :D
 
От неделя пак продължавам работа по Quest System-а... че тука тази седмица предавам проекти ^^
 
  • Like
Reactions: MeMoS and Dea7h
За сега работят:
Stats & Items... скоро другите ;] очавайте неочакваното ;]
 
  • Like
Reactions: Dea7h and ivowe3
Да като награди, но сега се чудя дали да направя Items-а да са няколко... или да го оставя за сега само 1 Item... и кофтито е че трябва сами да си пишат Item ID-то... демек първите 4 знака само... др начин е направя файл който да съдържа името, ид-то и сериала... Дай някакъв съвет, колега :)
 
да използва дб-то на някой webshop ако има инсталнати, защото няма как да прави промените в дб-то без да има всички итеми, или като ги направи ще търка итеми.