<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - Blockspiel</title>
		<link>https://www.blitzforum.de/worklogs/504/</link>
		<description>Worklog von AnniXa</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Wed, 16 May 2012 22:23:38 +0200</pubDate>
		<lastBuildDate>Wed, 16 May 2012 22:23:38 +0200</lastBuildDate>

		<item>
			<title>Weitere lua geschichten.</title>
			<link>https://www.blitzforum.de/worklogs/504/#3544</link>
			<guid>https://www.blitzforum.de/worklogs/504/#3544</guid>
			<author>AnniXa</author>
			<description>Erstmal konnte ich nun dank studieren des LUA manuals und Sicherheitsnachfragem im englischen Forum endlich voll durchblicken was es mit dem ganzen State und stack und so weiter auf sich hat.&lt;br /&gt;&lt;br /&gt;Im das ganze push und pop ist im grunde wenn man erstmal dahinter gestiegen ist &amp;auml;hnlich simpel wie die OpenGL push und popperei &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt;&lt;br /&gt;&lt;br /&gt;So konnte ich nun z.B. den code der eine funktion in lua aufruft nun so gestalten:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;lua_getglobal&amp;#40;Lua.l, &amp;quot;on_mapGenerate&amp;quot;&amp;#41; '&amp;lt;-------------- 1&lt;br /&gt;&amp;nbsp; &amp;nbsp;If Not lua_isfunction&amp;#40;Lua.L, -1&amp;#41; Then '&amp;lt;-------------- 2&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Print &amp;quot;Warning! map&amp;#58;&amp;quot; + toGenerate.name + &amp;quot; script&amp;#58;&amp;quot; + toGenerate.source + &amp;quot; hat keine on_mapGenerate function!&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lua_pop&amp;#40;Lua.L, 1&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Return&lt;br /&gt;&amp;nbsp; &amp;nbsp; EndIf&lt;br /&gt;&amp;nbsp; &amp;nbsp;lua_pushbmaxobject&amp;#40;Lua.l, toGenerate.LuaInterfaceMap&amp;#41; '&amp;lt;-------------- 3&lt;br /&gt;&amp;nbsp; &amp;nbsp;lua_pcall&amp;#40;Lua.l, 1, 0, 0&amp;#41; '&amp;lt;-------------- 4&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1: Erstmal schieben wir die globale &amp;quot;on_mapGenerate&amp;quot; auf den stack.&lt;br /&gt;2: Dann pr&amp;uuml;fen wir mit lua_isfunction ob es sich bei dem was gerade auf dem stack ist um eine funktion handelt.&lt;br /&gt;3: Dann schieben wir das map object hinterher.&lt;br /&gt;4: Hier rufen wir die funktion auf, mit 1 parameter und 0 r&amp;uuml;ckgabewerten.&lt;br /&gt;&lt;br /&gt;Funktioniert alles ganz gut nun, und so habe ich die ersten funktionen und objekte eingbaut mit denen man von Lua aus das spielgeschehen beinflussen kann, da dies garnichtmal so wenige sind und im laufe der zeit sicher mehr werden, habe ich daf&amp;uuml;r ein google doc angelegt, wer mag kann es sich ja einmal anschauen:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.google.com/spreadsheet/ccc?key=0Ai_3a1qiUaAPdDRDVm9xR1FRamxOSndza1M4U2lUY3c#gid=0&quot; target=&quot;_blank&quot;&gt;https://docs.google.com/spread...UY3c#gid=0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alle mit X markierten Eintr&amp;auml;ge sind bereits eingebaut und Getestet.&lt;br /&gt;&lt;br /&gt;Um das ganze besser debuggen zu k&amp;ouml;nnen habe ich einen neuen server befehl eingebaut:&lt;br /&gt;/script &amp;lt;file&amp;gt;&lt;br /&gt;damit kann man vom clienten aus ein script (aus einer datei) auf dem server ausf&amp;uuml;hren um so die scripte und auch die funktionen auf der blitzmax seite zu &amp;uuml;berpr&amp;uuml;fen, oder sich eben mal ein paar HP dazu zu cheaten ;D.&lt;br /&gt;&lt;br /&gt;Dies ganze habe ich hier mit diesem lua script mal verdeutlicht:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('1')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('1')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox1&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('1');&quot;&gt;&lt;br /&gt;-- Player mit ID 0 holen&amp;#58;&lt;br /&gt;local player = GetPlayer&amp;#40;0&amp;#41;&lt;br /&gt;-- einen text dem spieler schicken&amp;#58;&lt;br /&gt;player&amp;#58;SendNotify &amp;#40;&amp;quot;deine maximalen hp&amp;#58;&amp;quot;..player&amp;#58;GetMaxHP&amp;#40;&amp;#41;&amp;#41;&lt;br /&gt;player&amp;#58;SendNotify &amp;#40;&amp;quot;deine aktuellen hp&amp;#58;&amp;quot;..player&amp;#58;GetCurrentHP&amp;#40;&amp;#41;&amp;#41;&lt;br /&gt;-- die map auf dem der spieler ist holen&amp;#58;&lt;br /&gt;map = player&amp;#58;GetMap&amp;#40;&amp;#41;&lt;br /&gt;-- Das licht der map &amp;auml;ndern&amp;#58;&lt;br /&gt;map&amp;#58;SetAmbientLight&amp;#40;64,64,64&amp;#41;&lt;br /&gt;map&amp;#58;SetSun&amp;#40;255,128,128,45,21&amp;#41;&lt;br /&gt;-- dem player den namen der map sagen, auf der er ist&amp;#58;&lt;br /&gt;player&amp;#58;SendNotify &amp;#40;&amp;quot;du bist auf der map&amp;#58;&amp;quot;..map&amp;#58;GetName&amp;#40;&amp;#41;&amp;#41;&lt;br /&gt;-- dem Player seine HP voll aufladen&amp;#58;&lt;br /&gt;player&amp;#58;SetCurrentHP&amp;#40;player&amp;#58;GetMaxHP&amp;#40;&amp;#41;&amp;#41;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Dies ist ist vor der ausf&amp;uuml;hrung:&lt;br /&gt;Der obligatorische HP balken ist fast runter, und das licht ist Recht hell eingestellt (so wie es aus dem .map file gelesen wurde)&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/lua_vorher.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nach einem druck auf enter, sieht es dann so aus:&lt;br /&gt;Das licht wurde verstellt (sonne und ambient)&lt;br /&gt;Es wurden nachrichten an den spieler gesandt, und seine HP aufgeladen.&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/lua_nachher.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Das Script wurde serverseitig ausgef&amp;uuml;rt und s&amp;auml;mtliche infos an den clienten &amp;uuml;bertragen.&lt;br /&gt;&lt;br /&gt;Als n&amp;auml;chstes werde ich nun mich damit befassen eine art event system zu bauen, und bestimmte funktionen immer aufrufen wenn etwas passiert, also so etwas wie on_PlayerDie(player) wenn jemand gestorben ist usw.&lt;br /&gt;&lt;br /&gt;Auserdem m&amp;ouml;chte ich ein paar grundlegende gui-fenster vom server senden k&amp;ouml;nnen mittels lua, und entsprechende events ausl&amp;ouml;sen wenn ein user auf eines dieser reagiert.&lt;br /&gt;Erstmal so simple dinge wie eine message senden oder eine frage stellen die man mit ja/nein beantworten kann.</description>
			<pubDate>Wed, 16 May 2012 22:23:38 +0200</pubDate>
		</item>

		<item>
			<title>Lua-&gt;LuGi</title>
			<link>https://www.blitzforum.de/worklogs/504/#3541</link>
			<guid>https://www.blitzforum.de/worklogs/504/#3541</guid>
			<author>AnniXa</author>
			<description>So nun mal ein neuer bericht =)&lt;br /&gt;Das WE &amp;uuml;ber hatte ich nicht soviel zeit aber heute dann wieder ein wenig.&lt;br /&gt;&lt;br /&gt;Erstmal habe ich das Lua zeug nochmal &amp;uuml;berarbeitet und es mit Lugi und dem mitgelieferten reflection code vorgenerator cooler l&amp;ouml;sen k&amp;ouml;nnen.&lt;br /&gt;&lt;br /&gt;Dazu habe ich die leute im Blitzbasic.com forum leicht belasten m&amp;uuml;ssen.&lt;br /&gt;&lt;br /&gt;Mehrere Maps k&amp;ouml;nnen sich nun ein LUA script teilen, es wird dann immer die function&lt;br /&gt;on_mapGenerate(map) in lua aufgerufen, und die map &amp;uuml;bergeben die gerade generiert werden soll.&lt;br /&gt;M&amp;ouml;chte man trozdem verschiedene map generatoren f&amp;uuml;r die maps verwenden kann man entweder in der .map datei verschiedene .lua dateien angeben, oder aber in seiner on_mapGenerate funktion am anfang den namen der map sich ausgeben lassen und anhand dessen entscheiden.&lt;br /&gt;map hat die methoden:&lt;br /&gt;&lt;br /&gt;map:GetSizeX()&lt;br /&gt;map:GetSizeY()&lt;br /&gt;map:GetSizeZ()&lt;br /&gt;map:GetName()&lt;br /&gt;map:GetBlock(x,y,z)&lt;br /&gt;map:SetBlock(x,y,z,b)&lt;br /&gt;map:GetAmbientR()&lt;br /&gt;map:GetAmbientG()&lt;br /&gt;map:GetAmbientB()&lt;br /&gt;map:SetAmbient(r,g,b)&lt;br /&gt;map:GetSunG()&lt;br /&gt;map:GetSunB()&lt;br /&gt;map:SetSun(r,g,b)&lt;br /&gt;map:GetSunYaw()&lt;br /&gt;map:GetSunPitch()&lt;br /&gt;map:SetSunAngle(Yaw,Pitch)&lt;br /&gt;&lt;br /&gt;Damit kann man eine map erstellen und auch die beleuchtung &amp;auml;ndern.&lt;br /&gt;Das mapscript aus dem letzten worklog beitrag sieht nun so aus:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('2')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('2')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox2&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('2');&quot;&gt;&lt;br /&gt;function on_mapGenerate&amp;#40;map&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; print &amp;#40;&amp;quot;------------------- START MAP GENERATE -----------------------&amp;quot;&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; if map == nil then &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &amp;#40;&amp;quot;map was nil &amp;#58;&amp;#40;&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- map generierungs script&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print&amp;#40;&amp;quot;creating map&amp;#58; flatworld&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- Die gr&amp;ouml;&amp;szlig;e der map ermitteln&amp;#58;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; local sx = map&amp;#58;GetSizeX&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; local sy = map&amp;#58;GetSizeY&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; local sz = map&amp;#58;GetSizeZ&amp;#40;&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- eine bodenplatte erstellen aus erde &amp;#40;1&amp;#41;&amp;#58;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for x = 0, sx, 1 do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for z = 0, sz, 1 do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; map&amp;#58;SetBlock&amp;#40;x,0,z,1&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- nun ein paar t&amp;uuml;rme in der landschaft verteilen&amp;#58;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for count = 0, 400, 1 do -- 400 t&amp;uuml;rme setzen&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --zuf&amp;auml;llige position&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; local rx = math.random&amp;#40;0,sx&amp;#41; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; local rz = math.random&amp;#40;0,sz&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --zuf&amp;auml;llige turmh&amp;ouml;he zwischen 1 und 5&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; local height = math.random&amp;#40;0,5&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --zuf&amp;auml;llige block id zwischen 1 und 10 woraus der turm wird&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; local block = math.random&amp;#40;1,5&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --diesen turm bauen&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for thisheight = 0 ,height,1 do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; map&amp;#58;SetBlock&amp;#40;rx,thisheight,rz,block&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end &lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; print &amp;#40;&amp;quot;------------------- END MAP GENERATE ------------------------&amp;quot;&amp;#41;&lt;br /&gt;end &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Das ganze zu machen war ein bischen tricky, also mit der object &amp;uuml;bergabe an eine funktion.&lt;br /&gt;Daf&amp;uuml;r habe ich dieses type angelegt&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('3')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('3')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox3&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('3');&quot;&gt;&lt;br /&gt;Type LuaFunctions &amp;#123;expose static noclass&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;'gibt die map zur&amp;uuml;ck f&amp;uuml;r den namen, oder nil wenn es keine gibt.&lt;br /&gt;&amp;nbsp; &amp;nbsp;Method GetMapForName&amp;#58;map&amp;#40;mapname&amp;#58;String&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Local smap&amp;#58;map = ActualScenario.GetMapForName&amp;#40;mapname&amp;#41;.LuaInterfaceMap&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Return&amp;#40;smap&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;End Method&lt;br /&gt;&lt;br /&gt;End Type&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;das noclass sagt dem gluecode generator, das dieses type in lua nicht existieren, und die methoden dann in lua als funktionen auftauchen.&lt;br /&gt;&lt;br /&gt;um das oben gesehene lua dann zu starten und auch die funktion aufzurufen bedarf es dann nurnoch dem in der erstellungsmethode der map (also in bmx):&lt;br /&gt;&lt;br /&gt;Lua.DoString(&amp;quot;on_mapGenerate(GetMapForName(~q&amp;quot; + Self.Name + &amp;quot;~q))&amp;quot;)&lt;br /&gt;&lt;br /&gt;Gute nacht!</description>
			<pubDate>Mon, 14 May 2012 22:27:43 +0200</pubDate>
		</item>

		<item>
			<title>Erste schritte mit luajit</title>
			<link>https://www.blitzforum.de/worklogs/504/#3537</link>
			<guid>https://www.blitzforum.de/worklogs/504/#3537</guid>
			<author>AnniXa</author>
			<description>Heute nacht hatte ich dann noch etwas zeit, um mich mal mit Lua herumzu&amp;auml;rgern.&lt;br /&gt;&lt;br /&gt;Meine Funktion welche einfach ein lua file ausf&amp;uuml;hren soll sieht so aus:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('4')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('4')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox4&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('4');&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Function RunLuaFile&amp;#40;file&amp;#58;String&amp;#41;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_dofile&amp;#40;luastate, file&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, LUA_GLOBALSINDEX, &amp;quot;debug&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, -1, &amp;quot;traceback&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_remove &amp;#40;luastate, -2&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;If &amp;#40;lua_pcall&amp;#40;luastate, 1, -1, -1&amp;#41;&amp;#41; &amp;lt;&amp;gt; 0 Then&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Print &amp;quot;LUA ERROR&amp;#58;&amp;quot; + lua_tostring&amp;#40;luastate, -1&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;soweit funktioniert sie auch gut, die habe ich aus irgendeinem sample abgeschaut.&lt;br /&gt;&lt;br /&gt;das einzigste problem war, das es fehler ausgibt obwohl alles zu gehen scheint.&lt;br /&gt;&lt;br /&gt;eine datei mit diesem inhalt:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox5&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('5')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox5&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('5')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox5&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('5');&quot;&gt;print&amp;#40;&amp;quot;test&amp;quot;&amp;#41;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;gab das aus:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox6&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('6')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox6&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('6')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox6&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('6');&quot;&gt;&lt;br /&gt;test&lt;br /&gt;LUA ERROR&amp;#58;attempt to call a nil value&lt;br /&gt;stack traceback&amp;#58;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Hm, komisch^^&lt;br /&gt;scheinbar gehts, test wird geprintet, aber irgendwie gibt es angebloch noch ein &amp;quot;attempt to call a nil value&amp;quot; ?&lt;br /&gt;hm vieleicht hat das &amp;quot; am ende vom print ja noch heimlich seine freunde gerufen, so weit war ich schon am herumprobieren das ich die &amp;Auml;pfel in meinem k&amp;uuml;hlschrank umsoritert habe um zu sehen ob es einen einfluss hat.&lt;br /&gt;&lt;br /&gt;egal ob ich es mit luaL_loadstring oder als datei mit dofile oder mit dostring oder sogar mit keinem apfel im k&amp;uuml;hlschrank machte, immer kam das dabei heraus.&lt;br /&gt;&lt;br /&gt;Dann hab ich aber den fehler gefunden, und zwar lag es an meinem lua init dingsie&lt;br /&gt;ich verwendete zwar&lt;br /&gt;luaL_openlibs(luastate)&lt;br /&gt;nicht aber:&lt;br /&gt;luaopen_base(luastate)&lt;br /&gt;&lt;br /&gt;aufjedenfall geht es nun =)&lt;br /&gt;&lt;br /&gt;In den anleitungen die ich gelesen habe wurde immer nur das eine oder das andere verwendet, ich hab nun einfach beides und es geht.&lt;br /&gt;&lt;br /&gt;Dies sind nun meine Funktionen die ich benutze&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox7&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('7')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox7&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('7')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox7&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('7');&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Global luastate&amp;#58;Byte ptr&lt;br /&gt;&amp;nbsp; &amp;nbsp;Global State&amp;#58;Int = 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;'lua VM erstellen&lt;br /&gt;&amp;nbsp; &amp;nbsp;Function Init&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Deinit&amp;#40;&amp;#41; 'es kann nur eine vm geben.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;luastate = luaL_newstate&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;State = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;luaL_openlibs&amp;#40;luastate&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;luaopen_base&amp;#40;luastate&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;'lua VM schliesen&lt;br /&gt;&amp;nbsp; &amp;nbsp;Function Deinit&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;If State = 1 Then lua_close&amp;#40;luastate&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;State = 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;'summary&amp;#58; f&amp;uuml;hrt eine string als lua aus.&lt;br /&gt;&amp;nbsp; &amp;nbsp;Function RunLua&amp;#40;Script&amp;#58;String&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_dostring&amp;#40;luastate, Script&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'irgendetwas wichtiges machen das man f&amp;uuml;r die error info braucht&amp;#58;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, LUA_GLOBALSINDEX, &amp;quot;debug&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, -1, &amp;quot;traceback&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_remove &amp;#40;luastate, -2&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'ausf&amp;uuml;hren und ggf fehlermeldung ausgeben&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;If &amp;#40;lua_pcall&amp;#40;luastate, 1, -1, -1&amp;#41;&amp;#41; &amp;lt;&amp;gt; 0 Then&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Print &amp;quot;LUA ERROR&amp;#58;&amp;quot; + lua_tostring&amp;#40;luastate, -1&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;'summary&amp;#58; l&amp;auml;dt eine datei und f&amp;uuml;hrt sie aus&lt;br /&gt;&amp;nbsp; &amp;nbsp;Function RunLuaFile&amp;#40;file&amp;#58;String&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_dofile&amp;#40;luastate, file&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'irgendetwas wichtiges machen das man f&amp;uuml;r die error info braucht&amp;#58;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, LUA_GLOBALSINDEX, &amp;quot;debug&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, -1, &amp;quot;traceback&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_remove &amp;#40;luastate, -2&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'ausf&amp;uuml;hren und ggf fehlermeldung ausgeben&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;If &amp;#40;lua_pcall&amp;#40;luastate, 1, -1, -1&amp;#41;&amp;#41; &amp;lt;&amp;gt; 0 Then&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Print &amp;quot;LUA ERROR&amp;#58;&amp;quot; + lua_tostring&amp;#40;luastate, -1&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;so ganz hab ich das zwar immernoch nicht geschnallt, was das alles macht:&lt;br /&gt;&lt;br /&gt;		lua_getfield(luastate, LUA_GLOBALSINDEX, &amp;quot;debug&amp;quot;)&lt;br /&gt;		lua_getfield(luastate, -1, &amp;quot;traceback&amp;quot;)&lt;br /&gt;		lua_remove (luastate, -2)&lt;br /&gt;&lt;br /&gt;aber irgendwann werde ich schon dahintersteigen^^&lt;br /&gt;&lt;br /&gt;Immerhin hab ich nach einer weile herausgefunden das ich ja schon bei dofile die ausf&amp;uuml;hrung gemacht habe und der pcall am ende eigentlich quatsch war.&lt;br /&gt;&lt;br /&gt;dofile scheint wohl einfach eine kombination aus &lt;br /&gt;luaL_loadfile und lua_pcall zu sein?&lt;br /&gt;&lt;br /&gt;so Funktioniert es nun:&lt;br /&gt;(malsehen wie lange^^)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox8&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('8')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox8&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('8')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox8&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('8');&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;'summary&amp;#58; l&amp;auml;dt eine datei und f&amp;uuml;hrt sie aus&lt;br /&gt;&amp;nbsp; &amp;nbsp;Function RunLuaFile&amp;#40;file&amp;#58;String&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;luaL_loadfile&amp;#40;luastate, file&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;'&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'irgendetwas wichtiges machen das man f&amp;uuml;r die error info braucht&amp;#58;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, LUA_GLOBALSINDEX, &amp;quot;debug&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_getfield&amp;#40;luastate, -1, &amp;quot;traceback&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;lua_remove &amp;#40;luastate, -2&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'ausf&amp;uuml;hren und ggf fehlermeldung ausgeben&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;If &amp;#40;lua_pcall&amp;#40;luastate, 1, -1, -1&amp;#41;&amp;#41; &amp;lt;&amp;gt; 0 Then&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Print &amp;quot;LUA ERROR&amp;#58;&amp;quot; + lua_tostring&amp;#40;luastate, -1&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ein paar einfach funktionen habe ich nun schon gewrappt (nennt man das so bei lua?):&lt;br /&gt;getmapsize() returnt 3 werte welche die map gr&amp;ouml;&amp;szlig;e angeben, welche in der .map datei angegeben ist&lt;br /&gt;setblock(x,y,z,blockID) setzt einen block an position XYZ&lt;br /&gt;getblock(x,y,z) gibt zur&amp;uuml;ck welcher block sich gerade an xyz befindet.&lt;br /&gt;&lt;br /&gt;das ist ja schonmal ein anfang oder?&lt;br /&gt;Dieses kleine map erzeugungs script habe ich zum testen geschrieben:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox9&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('9')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox9&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('9')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox9&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('9');&quot;&gt;&lt;br /&gt;-- map generierungs script&lt;br /&gt;print&amp;#40;&amp;quot;creating map&amp;#58; flatworld&amp;quot;&amp;#41;&lt;br /&gt;-- Die gr&amp;ouml;&amp;szlig;e der map ermitteln&amp;#58;&lt;br /&gt;local sx,sy,sz = getmapsize&amp;#40;&amp;#41;&lt;br /&gt;&lt;br /&gt;-- eine bodenplatte erstellen aus erde &amp;#40;1&amp;#41;&amp;#58;&lt;br /&gt;for x = 0, sx, 1 do&lt;br /&gt;&amp;nbsp; &amp;nbsp; for z = 0, sz, 1 do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setblock&amp;#40;x,0,z,1&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&amp;nbsp; &amp;nbsp;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;-- nun ein paar t&amp;uuml;rme in der landschaft verteilen&amp;#58;&lt;br /&gt;for count = 0, 400, 1 do -- 400 t&amp;uuml;rme setzen&lt;br /&gt;&amp;nbsp; &amp;nbsp; --zuf&amp;auml;llige position&lt;br /&gt;&amp;nbsp; &amp;nbsp; local rx = math.random&amp;#40;0,sx&amp;#41; &lt;br /&gt;&amp;nbsp; &amp;nbsp; local rz = math.random&amp;#40;0,sz&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; --zuf&amp;auml;llige turmh&amp;ouml;he zwischen 1 und 5&lt;br /&gt;&amp;nbsp; &amp;nbsp; local height = math.random&amp;#40;0,5&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; --zuf&amp;auml;llige block id zwischen 1 und 10 woraus der turm wird&lt;br /&gt;&amp;nbsp; &amp;nbsp; local block = math.random&amp;#40;1,15&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; --diesen turm bauen&lt;br /&gt;&amp;nbsp; &amp;nbsp; for thisheight = 0 ,height,1 do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setblock&amp;#40;rx,thisheight,rz,block&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;end &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;nachdem ich dieses script ins map file eingetragen habe:&lt;br /&gt;source=test.lua&lt;br /&gt;&lt;br /&gt;und ich dann im editor auf &amp;quot;Lua ausf&amp;uuml;hren&amp;quot; geklickt habe, pr&amp;auml;sentierte sich mir folgendes bild:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/luamap.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Das fand ich toll, angemessen um nun beruhigt schlafen zu gehen &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description>
			<pubDate>Sat, 12 May 2012 00:49:35 +0200</pubDate>
		</item>

		<item>
			<title>Blocktechnik</title>
			<link>https://www.blitzforum.de/worklogs/504/#3536</link>
			<guid>https://www.blitzforum.de/worklogs/504/#3536</guid>
			<author>AnniXa</author>
			<description>Heute habe ich mal einen versuch gewagt die ganze Struktur hinter meinem Blocksystem zu &amp;uuml;berarbeiten und daf&amp;uuml;r ein kleines tool zu schreiben um die &amp;quot;blocksets&amp;quot; zu bearbeiten, und ein &amp;auml;lteres tool nochmal ein wenig zu &amp;uuml;berarbeiten.&lt;br /&gt;&lt;br /&gt;Was ist ein blockset?&lt;br /&gt;Ein blockset ist ein steuerfile (ini abart) in welchem gespeichert ist wie die bl&amp;ouml;cke aussehen.&lt;br /&gt;Hiermit sind nicht die mesh daten selbst gemeint, sondern eher eine art &amp;quot;compilation&amp;quot; wie diese dargestellt werden.&lt;br /&gt;&lt;br /&gt;Es ist schwer das in sinvoller reihenfolge zu erkl&amp;auml;ren, aber ich versuchs einfach mal =)&lt;br /&gt;&lt;br /&gt;Ein block, den man in der blockmap sehen kann besteht aus mehreren komponenten/werten:&lt;br /&gt;+ Blockmesh&lt;br /&gt;+ MaterialID&lt;br /&gt;+ Texturverschiebung&lt;br /&gt;+ BlockFamily&lt;br /&gt;&lt;br /&gt;Diese werden dann zusammengefast und daraus ermittelt wie die surface&amp;acute;s welche die map darstellen zusammengesetzt werden m&amp;uuml;ssen.&lt;br /&gt;&lt;br /&gt;Dies ist ein tats&amp;auml;chlicher blockaufbau:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox10&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('10')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox10&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('10')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox10&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('10');&quot;&gt;&lt;br /&gt;&amp;#91;BLOCK&amp;#58;131&amp;#93;&lt;br /&gt;name=erde mit grass&lt;br /&gt;mesh0=block_1f&lt;br /&gt;tsy0=0.1250&lt;br /&gt;tsx0=0.0&lt;br /&gt;mesh1=bush&lt;br /&gt;tsy1=0.0&lt;br /&gt;tsx1=0.0&lt;br /&gt;family=ground&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;mesh0 und mesh1? also 2 meshes?&lt;br /&gt;Sozusagen ja, jeder materialID kann ein mesh zugeordnet werden.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_idea.gif&quot; alt=&quot;Idea&quot; /&gt; die Material ID&lt;br /&gt;&lt;br /&gt;Dies sind nur ein paar zeilen im steuerfile die angeben wie das material aussieht,&lt;br /&gt;in dem .mat file befinden sich weitere infos wie texturen, shader einstellungen, und so weiter (dies ist von leadwerks)&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox11&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('11')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox11&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('11')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox11&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('11');&quot;&gt;&lt;br /&gt;&amp;#91;MATERIAL&amp;#58;0&amp;#93;&lt;br /&gt;file=default.mat&lt;br /&gt;clipping=true&lt;br /&gt;texfilter=nearest&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;anhand von MATERIAL:X wird das material unter der ID X registriert.&lt;br /&gt;Wenn ein block dieses material verwendet, hat er einen eintrag als meshX= verwendet der block dieses material nicht gibt es diesen eintrag einfach nicht.&lt;br /&gt;&lt;br /&gt;das clipping=true gibt an, ob bl&amp;ouml;cke die mit diesem material gebaut werden sp&amp;auml;ter eine physix body bekommen, bzw ob ihre triangles in den clipping tree aufgenommen werden.&lt;br /&gt;&lt;br /&gt;Normalerweise wird es wohl nur 2 material IDs geben, eine f&amp;uuml;r den boden, w&amp;auml;nde etc, alles was clipping hat, und eine f&amp;uuml;r alles was kein clipping hat (b&amp;uuml;sche, und son zeug).&lt;br /&gt;&lt;br /&gt;Aber theoretisch kann man auch z.B. eine dritte einbauen wenn man m&amp;ouml;chte das einige teile von bl&amp;ouml;cken einen gl&amp;uuml;h effekt haben (via einen shader dann) oder was man immer auch machen m&amp;ouml;chte.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_idea.gif&quot; alt=&quot;Idea&quot; /&gt; das Blockmesh,&lt;br /&gt;Ein blockmesh bastelt man einfach in Blender zusammen, und exportiert es als .ply, mit einem kleinen speziellen konverter wird dieses dann in ein eigenes 3d format namens .blo umgewandelt.&lt;br /&gt;Warum das sein muss, und man nicht einfach direkt .ply oder gmf oder sonst ein anderes 3d format direkt nutzen kann liegt daran das in dem .blo noch weitere extra werte gespeichert werden, die indem konverter gesetzt werden m&amp;uuml;ssen. Z.B. muss f&amp;uuml;r Tri&amp;acute;s die sich am &amp;quot;blockrand&amp;quot; befinden ein side indicator eingegeben werden, damit tris die man eh nie sehen w&amp;uuml;rde nachher beim zusammenbauen der surface ausgefiltert werden k&amp;ouml;nnen.&lt;br /&gt;&lt;br /&gt;Dies ist der sogenannte konverter:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/blockdata.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dieses ding ist sehr improvisiert, aber es tut seinen job.&lt;br /&gt;&lt;br /&gt;anhand der eintrages im steuerfile:&lt;br /&gt;mesh0=block_1f&lt;br /&gt;mesh1=bush&lt;br /&gt;Ist also nun bekannt das dieser block das material 0 f&amp;uuml;r block_1f.blo verwendet.&lt;br /&gt;und das material 1 f&amp;uuml;r bush.blo verwendet wird.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_idea.gif&quot; alt=&quot;Idea&quot; /&gt; texturverschiebung?&lt;br /&gt;&lt;br /&gt;da ich es beknackt finden w&amp;uuml;rde f&amp;uuml;r jedes m&amp;ouml;gliche block ein eigenes .blo zu machen nur um die uv map anzupassen, gibt es die m&amp;ouml;glichkeit die gesamte UV map eines blockes einfach zu verschieben.&lt;br /&gt;Das heist in blender muss man die UV map immer oben in der linken ecke erstellen:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/blender1.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dies ist ein block mit 3 seitentexturen (oben,alle 4 seiten, unten) (wie bei minecraft z.B. dirt)&lt;br /&gt;&lt;br /&gt;durch&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox12&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('12')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox12&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('12')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox12&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('12');&quot;&gt;&lt;br /&gt;tsy0=0.1250&lt;br /&gt;tsx0=0.0&lt;/div&gt;&lt;br /&gt;wird die UV map aber nun nach unten verschoben um 0.1250 einheiten&lt;br /&gt;&lt;br /&gt;das sieht dann so aus:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/blockgrass.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Verschieben wir sie noch einmal um 0.0625 einheiten weiter nach unten sieht es schon ganz anders aus:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/block2.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(0.0625 entsprechen 64 pixel in meiner 1024x1024 textur) die werte werden in float angegeben damit sie unabh&amp;auml;nig von der textur aufl&amp;ouml;sung sind und man verschiedene textur aufl&amp;ouml;sungen verwenden kann.&lt;br /&gt;&lt;br /&gt;Dies klappt mit jeder erdenklichen form die man in blender baut, also es m&amp;uuml;ssen nicht immer bl&amp;ouml;cke sein, theoretisch geht es mit jeder form (zuhoch sollte der tri count aber nicht gehen) wenn die textur clever aufgebaut ist, kann man so unz&amp;auml;lige bl&amp;ouml;cke erstellen mit nur einer textur.&lt;br /&gt;Nat&amp;uuml;rlich ist es klug die uvmaps so anzuordnen das sie entweder immer in einem raster passen (64x64 pixel in diesem fall) oder aber wenn wie bei dem gra&amp;szlig; block &amp;uuml;ber 3, dann auch andere texturen auser nur gra&amp;szlig; entsprechend anzuordnen, wie es z.B. bei dem mesh &amp;quot;mauer mit holz&amp;quot; der fall ist.&lt;br /&gt;Diese beiden verwenden das gleiche blockmesh, nur ihre UV texturen sind anders verschoben. (wie oben in den bildern zu sehen)&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_idea.gif&quot; alt=&quot;Idea&quot; /&gt; blockfamily:&lt;br /&gt;die block family erlaubt es bl&amp;ouml;cke zu sortieren, z.B. k&amp;ouml;nnte man eine family &amp;quot;Dungeonwand&amp;quot; erstellen, und alle bl&amp;ouml;cke welche zu dungeon wand geh&amp;ouml;ren dort einsortieren.&lt;br /&gt;Nun k&amp;ouml;nnte man einfach sagen &amp;quot;setze dungeonwand an xyz&amp;quot; und es wird aus der family nach bestimmten kriterien eine dungeonwand ausgew&amp;auml;hlt, wahlweise abh&amp;auml;nig von den nachbarbl&amp;ouml;cken (als sich verbindende w&amp;auml;nde etc, oder zufall, wie man mag) das ganze ist aber noch nicht ganz fertig.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_idea.gif&quot; alt=&quot;Idea&quot; /&gt; voll viel -.-&lt;br /&gt;&lt;br /&gt;All diese vielen und komplizierten informationen werden wie beschrieben in einer abart ini datein gehalten,&lt;br /&gt;heute habe ich mich dran gemacht und ein kleines tool geschrieben, um diese ini dateien zu bearbeiten.&lt;br /&gt;es ist noch nicht ganz fertig, aber so sieht es aus:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/blockset.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hier kann ich nun bequem die bl&amp;ouml;cke aus der liste ausw&amp;auml;hlen und sie bearbeiten, ihre family einstellen, und welche meshes sie f&amp;uuml;r welche material ID verwenden und wie die jeweiligen UVmaps verschoben sind&lt;br /&gt;&lt;br /&gt;Der dort erstellte stachelblock sieht dann im map editor so aus:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/editor4.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Die stacheln haben in disem fall kein clipping, da sie zu Material:1 geh&amp;ouml;ren.&lt;br /&gt;es w&amp;auml;re auch unklug solche schon relativ complexen mesh daten in den clipping tree zu aufzunehmen.&lt;br /&gt;&lt;br /&gt;Soviel zu diesem thema &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt;&lt;br /&gt;&lt;br /&gt;</description>
			<pubDate>Fri, 11 May 2012 17:52:15 +0200</pubDate>
		</item>

		<item>
			<title>Ein Editor</title>
			<link>https://www.blitzforum.de/worklogs/504/#3535</link>
			<guid>https://www.blitzforum.de/worklogs/504/#3535</guid>
			<author>AnniXa</author>
			<description> &lt;img src=&quot;/forum/images/smiles/icon_arrow.gif&quot; alt=&quot;Arrow&quot; /&gt; Ein Editor?!&lt;br /&gt;&lt;br /&gt;Heute Nachmittag und abend habe ich mich dran gemacht einen ersten Aufbau f&amp;uuml;r einen Editor zu machen.&lt;br /&gt;Bisher wurde alles &amp;uuml;ber ini files geregelt und die &amp;quot;Map&amp;quot; hardcoded generiert (also der array mit den blockdaten).&lt;br /&gt;&lt;br /&gt;Also dachte ich mir das ich einfach mal einen editor baue,  der diese ini dateien ausliest und die werte bearbeiten kann und sie wieder speichern kann, sowie erstmal eine m&amp;ouml;glichkeit die map blockdaten zu bearbeiten und aus einem file zu lesen.&lt;br /&gt;&lt;br /&gt;F&amp;uuml;r eine Sp&amp;auml;tere lua map generierung habe ich auch vorgesorgt und das im gui eingeplant.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_arrow.gif&quot; alt=&quot;Arrow&quot; /&gt; Das Scenario system&lt;br /&gt;&lt;br /&gt;Dies ist sehr von dem Spiel &amp;quot;clonk&amp;quot; inspiriert, ein Scenario ist ein ordner, in dem alles organisiert wird.&lt;br /&gt;In diesem ordner befindet sich ein Steuerfile (scenario.scn) in welchem die Grundeigenschaften des Scenarios eingestellt sind.&lt;br /&gt;&lt;br /&gt;Also dinge wie beschreibung, name etc&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox13&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('13')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox13&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('13')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox13&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('13');&quot;&gt;&lt;br /&gt;&amp;#91;GENERAL&amp;#93;&lt;br /&gt;name=test&lt;br /&gt;desc=Dies ist ein test&lt;br /&gt;&amp;#91;MAPS&amp;#93;&lt;br /&gt;startmap=test1&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ini verwende ich gern weil es damit sehr leicht m&amp;ouml;glich ist fix neue werte und so weiter hinzuzuf&amp;uuml;gen, und andererseits diese auch schnell und einfach mit einem texteditor zu bearbeiten sind.&lt;br /&gt;&lt;br /&gt;Wie man sieht gibt es auch einen eintrag &amp;quot;startmap&amp;quot; dazu kommen wir nun.&lt;br /&gt;In einem Scenario ordner gibt es einen unterordner &amp;quot;maps&amp;quot;, ein scenario kann also mehrere verschiedene maps beinhalten.&lt;br /&gt;Ob und wie diese zur verwendung kommen h&amp;auml;ngt vom Scenario selbst ab, ein spieler kann durch Trigger auf eine andere map gesetzt werden, oder aber es kann vor dem start eine map ausgesucht werden.&lt;br /&gt;Dies alles muss sp&amp;auml;ter in LUA geschrieben werden, standartm&amp;auml;sig wenn es keine lua funktion f&amp;uuml;r den start gibt, wird man auf der map unter &amp;quot;startmap&amp;quot; anfangen.&lt;br /&gt;&lt;br /&gt;ein map file ist auch wieder eine ini struktur&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox14&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('14')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox14&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('14')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox14&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('14');&quot;&gt;&lt;br /&gt;&amp;#91;GENERATOR&amp;#93;&lt;br /&gt;source=test1.bm&lt;br /&gt;sizex=128&lt;br /&gt;sizey=8&lt;br /&gt;sizez=128&lt;br /&gt;&amp;#91;DISPLAY&amp;#93;&lt;br /&gt;name=test eins&lt;br /&gt;&amp;#91;BLOCK&amp;#93;&lt;br /&gt;blockset=kerker.bsi&lt;br /&gt;&amp;#91;SPAWN&amp;#58;0&amp;#93;&lt;br /&gt;name=Entry&lt;br /&gt;posx=10&lt;br /&gt;posy=3&lt;br /&gt;posz=10&lt;br /&gt;&amp;#91;AMBIENT&amp;#93;&lt;br /&gt;r=196&lt;br /&gt;g=196&lt;br /&gt;b=196&lt;br /&gt;&amp;#91;SUN&amp;#93;&lt;br /&gt;sun=true&lt;br /&gt;yaw=25&lt;br /&gt;pitch=45&lt;br /&gt;r=255&lt;br /&gt;g=255&lt;br /&gt;b=255&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Dies ist schon etwas mehr, unter generator kann eine map source eingestellt werden, jeh nach datei typ wird entweder eine map aus einem file geladen (.bm was soviel heissen soll wie binarymap)&lt;br /&gt;oder sp&amp;auml;ter dann auch ein lua script ausgef&amp;uuml;hrt, dies passiert bei .lua&lt;br /&gt;&lt;br /&gt;Dann gibt es noch eintr&amp;auml;ge f&amp;uuml;r blockset (ein weiteres ini file, in welchem die eigenschaften wie texturierung, form, verhalten und gruppierungen der bl&amp;ouml;cke etc verwaltet werden, dazu sp&amp;auml;ter einmal mehr, da dies aus einer &amp;auml;lteren blockmap version stammt kann es sein das ich dies nochmal &amp;auml;ndern werde.)&lt;br /&gt;sowie eintr&amp;auml;ge f&amp;uuml;r die spawnpoints und die lichteinstellung der map (ambient licht, sonnenwinkel, sonnenfarbe)&lt;br /&gt;&lt;br /&gt;All diese daten wurden vom server bereits auch schon eingelesen und entsprechend verarbeitet bzw an die clienten &amp;uuml;bertragen.&lt;br /&gt;&lt;br /&gt;Desweiteren befinden sich im maps ordner auch die .bm und sp&amp;auml;ter auch die .lua files f&amp;uuml;r die jeweiligen maps.&lt;br /&gt;Dann gibt es noch einen ordner namens &amp;quot;remote&amp;quot; in dem sich individuelle meshdaten, textur daten und so weiter befinden, der inhalt dieses ordners wird bei bedarf (also wenn die dateien fehlen oder die md5 summen nicht stimmen) an die clienten &amp;uuml;bertragen wichtig hierbei ist das die ini, .bm und .lua dateien NICHT an den spieler &amp;uuml;bertragen werden.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_arrow.gif&quot; alt=&quot;Arrow&quot; /&gt; Und nun ein editor ?&lt;br /&gt;&lt;br /&gt;Nun habe ich angefangen daf&amp;uuml;r ein Editor zu schreiben, in dem man ein scenario ordner ausw&amp;auml;hlt, und dessen daten ggf geladen und angezeigt werden und teilweise auch schon bearbeitet werden k&amp;ouml;nnen.&lt;br /&gt;Als wirklich irgendwie nervig hat sich hierbei maxgui herausgestellt, ich hab es leider vers&amp;auml;umt von anfang an eine gescheite verwaltung der gadgets und events hinzukriegen, so das ich nun ziemlich gemeine if/case b&amp;auml;ume und tonnenweise globale variablen habe.&lt;br /&gt;Also wenn ich den editor in 2 wochen nochmal &amp;uuml;berarbeiten m&amp;ouml;chte, werde ich ihn dann wohl eher neu schreiben m&amp;uuml;ssen weil ich nicht mehr durchblicke &lt;img src=&quot;/forum/images/smiles/icon_sad.gif&quot; alt=&quot;Sad&quot; /&gt;&lt;br /&gt;Aber da dies auch erstmal nur ein Quick &amp;amp; Dirty editor ist der an einem tag entstanden ist, finde ich das soweit erstmal okay.&lt;br /&gt;&lt;br /&gt;Bei editoren ist immer die frage, wie man eine gute bedienung hinbekommt, ich habe mich f&amp;uuml;r 2 steuerungs methoden entschieden.&lt;br /&gt;1. Numpad steuerung, diese steuermethode hatte ich bereits im &amp;auml;lteren versionen, mit dem ziffernblock kann man einen cursor steuern, bl&amp;ouml;cke setzen und so weiter, und auch mit der maus bl&amp;ouml;cke setzen.&lt;br /&gt;2. Ego/mouse view, mit WASD kann man sich &amp;auml;hnlich wie in einem shooter bewegen, mit rechter maustaste gedr&amp;uuml;ckt halten die sicht drehen und mit der linken maustaste bl&amp;ouml;cke setzen.&lt;br /&gt;&lt;br /&gt;Bei der zweiten methode ist es etwas umst&amp;auml;ndlicher wenn mal bl&amp;ouml;cke in die luft setzen m&amp;ouml;chte, weil es mit glUnproject arbeitet und wenn nichts in der luft ist kann man da auch nichts treffen &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt;&lt;br /&gt;Als kleine abhilfe kann man die Umschalttaste gedr&amp;uuml;ckt halten, dann wird der bl&amp;ouml;ck &amp;uuml;ber dem unter der maus gew&amp;auml;hlt&lt;br /&gt;&lt;br /&gt;Zudem gibt es noch 2 extra cursor, die man mit den tasten 1 und 2 setzen kann.&lt;br /&gt;(bei der numpad steuerung werden sie an die numpad cursor position gesetzt, ansonsten an die maus position)&lt;br /&gt;&lt;br /&gt;Mit den 2 extra cursor&amp;acute;s kann man extra funktionen ausf&amp;uuml;hren wie z.B. einen bereich f&amp;uuml;llen oder kopieren,&lt;br /&gt;wer das plugin f&amp;uuml;r bukkit/hmod &amp;quot;WorldEdit&amp;quot; kennt weis woher die inspiration daf&amp;uuml;r gekommen ist =)&lt;br /&gt;Bis jetzt geht jedoch nur f&amp;uuml;llen,leeren, kopieren und einf&amp;uuml;gen.&lt;br /&gt;wobei einf&amp;uuml;gen sich immer am roten cursor orientiert&lt;br /&gt;&lt;br /&gt;Dies alles zu machen war nicht schwer, da ich das meiste schonmal irgendwann gemacht habe, und nun nurnoch die types und funktionen zusammen bringen musste.&lt;br /&gt;&lt;br /&gt;Wer sich einen ersten eindruck davon verschaffen m&amp;ouml;chte kann sich den spa&amp;szlig; hier herunterladen:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/editor_test.zip&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/editor_test.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Benutzung:&lt;br /&gt;Ein scenario muss geladen werden (ein neues erstellen geht (noch) nicht).&lt;br /&gt;Dazu im menu auf File-&amp;gt;Scenario laden, und dann im ornder &amp;quot;/scen/test&amp;quot; die scenario.scn ausw&amp;auml;hlen.&lt;br /&gt;Danach kann man unten umschalten auf den tab &amp;quot;maps&amp;quot; und dort die map test1.map ausw&amp;auml;hlen (doppelklick) und eine map daf&amp;uuml;r erstellen und diese bearbeiten.&lt;br /&gt;&lt;br /&gt;Speichern und Laden etc sollte alles funktionieren soweit ich es ausgetestet habe &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Vieleicht findet ja jemand einen Fehler oder bug und/oder hat Verbesserungsvorschl&amp;auml;ge.&lt;br /&gt;&lt;br /&gt;Ansonsten gibt es hier ein paar Bildchen:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/editor_0.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Ein smiley macht ja gute laune so heist es &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/editor_1.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Dank der kopieren / einf&amp;uuml;gen Funktionen mit dem tShematic type auch mehrfach.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://mapleinfo.de/mystuff/editor_2.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Abendliche Stimmung kann man mit den Lichteinstellungen verbreiten.&lt;br /&gt;&lt;br /&gt;Das wars erstmal f&amp;uuml;r heute =)</description>
			<pubDate>Thu, 10 May 2012 21:52:58 +0200</pubDate>
		</item>

		<item>
			<title>Was so das sein?</title>
			<link>https://www.blitzforum.de/worklogs/504/#3534</link>
			<guid>https://www.blitzforum.de/worklogs/504/#3534</guid>
			<author>AnniXa</author>
			<description>Wenn man &amp;quot;Block&amp;quot; liest, denkt man ja immer gleich an Minecraft.&lt;br /&gt;Der Vergleich mit Minecraft ist aber hier nur teilweise g&amp;uuml;ltig, wenngleich es etwas damit zu tun hat.&lt;br /&gt;&lt;br /&gt;Es wird leider etwas viel Text, und viele Bilder auch, daher habe ich die Bilder als URL eingef&amp;uuml;gt, damit niemand gezwungen ist alle zu laden.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_arrow.gif&quot; alt=&quot;Arrow&quot; /&gt; Geschichte&lt;br /&gt;&lt;br /&gt;Als damals so 2009 oder so die ersten Minecraft Dinger auftauchten Hatte ich mir &amp;uuml;berlegt ein vergleichbares Blockmap System zu schreiben.&lt;br /&gt;(das war damals glaube ich noch irgendeine beta obwohl es noch nicht die betas waren die es dann sp&amp;auml;ter gab oder so, also noch ohne Survival, einfach auf einer 256x256x256 (oder so) gro&amp;szlig;en Map mit nem creative mode spielen).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Damals noch in B3D und kurz darauf dann in Blitzmax mit MiniB3d.&lt;br /&gt;&lt;br /&gt;meine erste Interpretation hat so ausgesehen:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_m26c1a2a7.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...c1a2a7.png&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_314c029a.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...4c029a.png&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Da ich jedoch keinen weiteren Verwendungszweck daf&amp;uuml;r hatte, habe ich damit Erstmal nichts weiter gemacht und mich anderen Interessanteren Dingen zugewendet, z.B. Lieber Minecraft zu spielen als vergeblich versuchen es zu Kopieren ;D&lt;br /&gt;&lt;br /&gt;Nach einer weile dann hatte ich mit einem freund (phillipk) vor ein Spiel zu machen, unter Verwendung dieser &amp;quot;engine&amp;quot;, aber wir waren da wohl beide noch etwas zu unerfahren und wollten wohl zuviel (das gute alte mmorpg gemischt mit shooter und aufbau elementen) so das wir irgendwann uns zwischen zigtausend Zeilen d&amp;uuml;rftig Auskommentierten Code und vielen verschiedenen Dateien und eigenen kuriosen dateiformaten verirrt haben.&lt;br /&gt;Es gab Probleme mit der Netzwerk&amp;uuml;bertragung, VBO bugs, gui Probleme und sonstige viele andere nerverein das wir beschlossen hatten es auf Eis zu legen und uns vorerst mehreren Kleineren Projekten zuzuwenden. =)&lt;br /&gt;&lt;br /&gt;so hat das damals ausgesehen das projekt:&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_m24243ae6.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...243ae6.png&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_mc7eb86c.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...7eb86c.png&lt;/a&gt;&lt;br /&gt;Die block engine war damals jedoch schon recht vielseitig, wenn auch etwas undynamisch und sehr viel Hardcoded mit nahezu gigantischen IF/case b&amp;auml;umen.&lt;br /&gt;Die netzwerk library war tibit.tnet, die wie wir leider nachher erst wusten so einige bugs und macken aufwies.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_question.gif&quot; alt=&quot;Question&quot; /&gt; Und jetzt?&lt;br /&gt;&lt;br /&gt;Inzwischen habe ich und auch phillipk f&amp;uuml;r fast alle Probleme die es damals gab voneinander Unabh&amp;auml;nige Einzell&amp;ouml;sungen geschrieben, und diese m&amp;ouml;chte ich nun zu einem Funktionierendem Spiel zusammenf&amp;uuml;gen.&lt;br /&gt;&lt;br /&gt;Die einzelnen &amp;quot;Prototypen&amp;quot; die ich im laufe der zeit so geschrieben habe m&amp;ouml;chte ich euch gern Vorstellen:&lt;br /&gt;&lt;br /&gt;Ann2d:&lt;br /&gt;Ann2d ist ein Ersatz f&amp;uuml;r max2d, da ich einige Dinge dort nervig fand, insbesondere mit Schriftarten und so weiter und ich einige extra Funktionen haben wollte.&lt;br /&gt;Es ist in OpenGL geschrieben und kann alles fast was max2d kann und noch vieles mehr, und ist teilweise schneller, vorallem beim zeichnen gro&amp;szlig;er texte, da diese auf wunsch beim erstellen einmalig als openGL array zum zeichnen mit DrawArray oder gar auch als VBO erstellt werden.&lt;br /&gt;Eingef&amp;auml;rbte Texte, mit Bitmapfonts, schriftformatierungen (gr&amp;ouml;&amp;szlig;e, kursiv etc) sind damit m&amp;ouml;glich.&lt;br /&gt;&lt;br /&gt;AnnGui:&lt;br /&gt;Anngui baut auf ann2d auf und bietet Fenster, Buttons, Textfelder, Listen, Fortschrittsbalken und all den ganzen kram den man in einem gui so braucht.&lt;br /&gt;Auch hier werden die fenster als DrawArray oder VBO erstellt.&lt;br /&gt;Ann2d und Anngui gehen in normalem OpenGL, MiniB3D, Leadwerks und Ogre3d, ich denke ohne probleme auch in jeder anderen openGL basierten umgebung.&lt;br /&gt;&lt;br /&gt;Bilder von kleineren Projekten mit Ann2d und Anngui gibt es hier:&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_76bf2991.jpg&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...bf2991.jpg&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_3404b944.jpg&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...04b944.jpg&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_7af89087.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...f89087.png&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lobby:&lt;br /&gt;eine auf RakNet aufbauende Netzwerklobby inklusive chat, synchronisation von datei Ordnern, userlevel, einem system f&amp;uuml;r server commands (/kick /start u.s.w.) und einem sehr flexiblem vote system (jeder server command kann mit /vote davor abgestimmt werden)&lt;br /&gt;Ebenso wie ein flexibles server/game setting system.&lt;br /&gt;das ganze sieht in etwa so aus:&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_m49b12ac9.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...b12ac9.png&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/lobby.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/lobby.png&lt;/a&gt;&lt;br /&gt;Die Fenster und gui Elemente sind wie ihr sicher ahnen k&amp;ouml;nnt mit AnnGui gemacht^^&lt;br /&gt;&lt;br /&gt;Blockmap v3&lt;br /&gt;Immernoch im grunde das selbe grundprinzip wie das erste blockmap system damals, nur etwas komplexer als z.B. bei minecraft, daf&amp;uuml;r aber nicht mit endlosen maps.&lt;br /&gt;Mit Texturen die tilebar sind, Komplexeren meshes f&amp;uuml;r die bl&amp;ouml;cke, blockToEntity und EntityToBlock transformationen, blockkategorien (bl&amp;ouml;cke aus der selben kategorie verbinden sich miteinander etc.) und viele andere spielerein.&lt;br /&gt;Vor einigen wochen habe ich das ganze auch von MiniB3d zu Leadwerks portiert.&lt;br /&gt;&lt;br /&gt;die sieht in dann so aus:&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/index_html_m1248139a.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/in...48139a.png&lt;/a&gt;&lt;br /&gt;die texturen sind immernoch die selben &lt;img src=&quot;/forum/images/smiles/icon_biggrin.gif&quot; alt=&quot;Very Happy&quot; /&gt; daher sieht das nicht wirklich neu aus, das einzigste neue ist der schattenwurf durch Leadwerks.&lt;br /&gt;&lt;br /&gt;Sowie einige andere kleiner helferlein:&lt;br /&gt;Iniloader - l&amp;auml;dt datein im ini format aus (von Phillipk)&lt;br /&gt;guiloader - l&amp;auml;dt anweisungen f&amp;uuml;r anngui fenster aus einem ini file (von phillipk)&lt;br /&gt;tann3d - h&amp;auml;ngt 2d elemente (bilder und texte) an 3d objekte (entitys)&lt;br /&gt;settingshandler - h&amp;auml;lt und verwaltet nicht nur Einstellungen, sondern auch gleich die informationen welche Einstellungen m&amp;ouml;glich sind, und kann Gui Fenster bauen wo man diese einstellen kann, und bietet Schnittstellen diese auszulesen und zu setzen, sowie diese mit raknet oder bnetex zu synchronisieren.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_idea.gif&quot; alt=&quot;Idea&quot; /&gt; Kombination!&lt;br /&gt;&lt;br /&gt;Das ganze habe ich nun Gestern und Heute zu einem ersten nutzbaren klumpen Zusammengepappt.&lt;br /&gt;Man kann nun einen Server aufmachen und die Leute k&amp;ouml;nnen sich dort einloggen.&lt;br /&gt;Jeh nachdem welche dateien f&amp;uuml;r die aktuelle Spielwelt ben&amp;ouml;tigt werden werden diese an die Clienten gesendet sofern n&amp;ouml;tig (vorher gibt es einen abgleich mit Md5 Pr&amp;uuml;fsummen wenn es die datei schon gibt ob updates/&amp;auml;nderungen n&amp;ouml;tig sind).&lt;br /&gt;Dabei werden falls n&amp;ouml;tig die kompletten mapdaten &amp;uuml;bertragen (texturen, mesh, mapfile etc).&lt;br /&gt;Wenn man synchron ist und der server ein spiel am laufen hat kann man beitreten und &amp;quot;mitspielen&amp;quot;.&lt;br /&gt;Wobei ein spiel wirklich noch nicht vorhanden ist, man kann auf einer welt umherrennen und h&amp;uuml;pfen und sich mit &amp;quot;eiern&amp;quot; beballern.&lt;br /&gt;Es gibt weder eine schadensberechnung noch eine HP anzeige.&lt;br /&gt;&lt;br /&gt;Testen konnte ich es bereits auf Localhost, im lan und auch schon 2 mal &amp;uuml;ber internet.&lt;br /&gt;Bisher funktionierte es ganz gut.&lt;br /&gt;Ein paar Bilder von einem Localhost test:&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/synctest.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/synctest.png&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://mapleinfo.de/mystuff/synctest2.png&quot; target=&quot;_blank&quot;&gt;http://mapleinfo.de/mystuff/synctest2.png&lt;/a&gt;&lt;br /&gt;Erl&amp;auml;uterung zu den bildern:&lt;br /&gt;die bunten kugeln sind die Spieler^^&lt;br /&gt;das lange ding unter den kugeln ist der Zeiger der anzeigt in welche Richtung der Spieler gerade zielt, auch das wird grob synchronisiert.&lt;br /&gt;Gesteuert wird von oben mit einer WASD steuerung, und mit der maus zielen und schiesen.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;/forum/images/smiles/icon_rolleyes.gif&quot; alt=&quot;Rolling Eyes&quot; /&gt; Was wird nun daraus?&lt;br /&gt;&lt;br /&gt;Geplant ist daraus ein spiel zu machen das sich vom gameplay in etwa an dem spiel &amp;quot;egoboo&amp;quot; orientiert.&lt;br /&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=6lLAXr5Rl6E&quot; target=&quot;_blank&quot;&gt;http://www.youtube.com/watch?v=6lLAXr5Rl6E&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jedoch soll es hier nur &amp;uuml;ber einen dedizierten Server laufen, auf welchem mittels LUA ein teil der spiellogik ausgelagert wird.&lt;br /&gt;So das man verschiedene Spielmodi wie z.B. Deathmatch oder coop dungeons mit lua schreiben kann.&lt;br /&gt;Wie weit das gehen wird steht noch in den Sternen, aufjedenfall soll aber die map erstellung mit Lua m&amp;ouml;glich sein, um so z.B. dynamische Dungeons zu erm&amp;ouml;glichen oder einfach eine Map aus einem file laden, sowie die erstellung von Ausl&amp;ouml;ser events (wenn personX block XYZ betritt lua script ausf&amp;uuml;hren).&lt;br /&gt;&lt;br /&gt;Warum das ganze?&lt;br /&gt;Ich habe gerade viel zeit und Langeweile, das Wetter k&amp;ouml;nnte auch besser sein also was soll ich sonst machen?&lt;br /&gt;Das des Projekt wirklich mal etwas wird halte ich f&amp;uuml;r unwahrscheinlich, allein weil ich schon keine lust und wohl auch nicht genug F&amp;auml;higkeiten habe sch&amp;ouml;ne models/animationen/texturen etc zu machen.&lt;br /&gt;&lt;br /&gt;Und da ich in dieser Community schon viel gelernt habe, dachte ich mir das ich es mal wieder mit einem Worklog versuche und so vielleicht ein bisschen etwas zur&amp;uuml;ckzugeben und ausserdem f&amp;auml;llt einem oft die L&amp;ouml;sung ein wenn man ein Problem versucht zu erkl&amp;auml;ren =)</description>
			<pubDate>Wed, 09 May 2012 23:33:23 +0200</pubDate>
		</item>


	</channel>
</rss>
