Das hat nicht viel mit Zaubern zutun, mann muss nur wissen wie man es berechnet und ob es mit den normalen SAMP Funktionen möglich ist.
Und einfach die X und Y Koordinate nehmen geht nicht, da ja bei den 2D Koordinaten nicht Z die Höhe ist, sondern Y.
*edit*
Danke IPrototypeI, genau das habe ich gesucht
Beiträge von Oskaar1994
-
-
Hey,
hätte jemand eine Lösung für mich wie ich eine 3D Welt Koordinate zu einer 2D Koordinate und andersrum umrechnen kann ?
Ich habe da ein Cleo Script gefunden, aber da ich mich damit gar nicht auskenne könnte mir vlt. jemand anders helfen.
Das Cleo Script:Code
Alles anzeigen:getScreenXYFrom3DCoords{ Parameters: Passed: 0@ - position X 1@ - position Y 2@ - position Z Result: 3@ - screen X 4@ - screen Y Example: 0AB1: call_scm_func @getScreenXYFrom3DCoords 3 coords_XYZ 2488.562 -1666.865 12.8757 store_to 1@ 2@ } 0AB1: call_scm_func @getLocalVarOffset 1 var 0 store_to 12@ 0AB1: call_scm_func @getLocalVarOffset 1 var 3 store_to 13@ 0AB1: call_scm_func @getLocalVarOffset 1 var 6 store_to 14@ 0AB1: call_scm_func @getLocalVarOffset 1 var 9 store_to 15@ 0AA5: call 0x70CE30 num_params 6 pop 6 bNearClip 0 bFarClip 0 pMultY 15@ pMultX 14@ pScreen 13@ pCoords 12@ 0AB1: call_scm_func @getFullScreenXY 2 coords_XY 3@ 4@ store_to 3@ 4@ 0AB2: ret 2 3@ 4@ :get3DCoordsFromScreenXY { Parameters: Passed: 0@ - screen X 1@ - screen Y 2@ - distance Result: 14@ - position X 15@ - position Y 16@ - position Z Example: 0AB1: call_scm_func @get3DCoordsFromScreenXY 3 coords_XY 320.0 224.0 distance 1.0 store_to 1@ 2@ 3@ } 0A8D: 3@ = read_memory 0x8D5038 size 4 virtual_protect 0 // field of view 3@ *= 0.5 02F6: 4@ = sine 3@ 02F7: 5@ = cosine 3@ 0073: 4@ /= 5@ 6@ = 1.0 0@ /= HALF_WIDTH // half screen X 0063: 6@ -= 0@ 006B: 6@ *= 4@ 7@ = 1.0 1@ /= HALF_HEIGHT // half screen Y 0063: 7@ -= 1@ 006B: 7@ *= 4@ 0A8D: 8@ = read_memory 0xC3EFA4 size 4 virtual_protect 0 // screen aspect ratio 0073: 7@ /= 8@ 006B: 6@ *= 2@ 006B: 7@ *= 2@ 0087: 9@ = 6@ 0087: 10@ = 2@ 0087: 11@ = 7@ 0A8D: 12@ = read_memory 0xB6F03C size 4 virtual_protect 0 // camera matrix 0AB1: call_scm_func @getLocalVarOffset 1 var 9 store_to 13@ 0AA5: call 0x59C790 num_params 3 pop 3 pOffsets 13@ pMatrix 12@ pResult 13@ // CPlaceable__getMatrixAbsOffsets 12@ += 0x30 0A8D: 14@ = read_memory 12@ size 4 virtual_protect 0 // camera X position 12@ += 0x4 0A8D: 15@ = read_memory 12@ size 4 virtual_protect 0 // camera Y position 12@ += 0x4 0A8D: 16@ = read_memory 12@ size 4 virtual_protect 0 // camera Z position 005B: 14@ += 9@ 005B: 15@ += 10@ 005B: 16@ += 11@ 0AB2: ret 3 14@ 15@ 16@
Das einzige was ich daran verstanden habe ist, dass irgendwie mit der Spieler und Kameraposition gearbeitet wird.
-
Hast du den Server mit gmx neu gestartet, oder hast du den Server komplett durchgestartet, also die Konsole beendet und neu geöffnet?
Wenn du es mit gmx machst ist es klar, weil das die Filterscripts nicht neu lädt. Ich rate dir immer den Server komplett zu schließen.Habe ich gemacht.
-
Du musst die Textdraws korrekt löschen, dazu gehört auch, dass du die Variablen zurücksetzt.
if(TextDraw[playerid] != Text:-1) TextDrawDestroy(TextDraw[playerid]);
TextDraw[playerid] = Text:-1;Das musst du so bei allen machen. Ebenso muss du die als -1 initialisieren:
new TextDraw[MAX_PLAYERS] = {-1,...}; //Die drei Punkte sollen da sein.Wenn du das für alle TextDraws überall einhältst, hast du keine Probleme mehr.
Naja das Problem tritt aber auch auf wenn ich den Server neu gestartet habe und frisch beigetreten bin, ohne ihn zu verlassen.
-
Hey,
habe schon öfters das Problem gehabt, dass Textdraws sich vermischen. Mit vermischen meine ich, dass z.B. eines an der Stelle des anderen ist also es quasi ersetzt. Ich habe alles überprüft, ich habe das Textdrawlimit nicht überschritten, keine gleichnamigen Textdraws und keine Filterscripts oder Includes die Textdraws erstellen.
Das Problem bezieht sich nicht auf bestimmte Textdraws oder Codeabschnitte, das ist schon öfters passiert. Hat noch jemand das gleiche Problem oder eine Lösung für mich ? -
Hatte das Problem auch schonmal. Ich habe einfach alle Ramriegel raus genommen,gesäubert und wieder eingesetzt, dann war wieder alles ok
-
Hey,
bin derzeit noch mit der Entwicklung der Website meines bald kommenden (englischen bzw. internationalen) Servers beschäftigt, aber mir fehlt leider noch ein geeigneter Name.
Ihr seit gefragt, welcher Name würde euch gefallen ? Ich würde mich sehr über Vorschläge freuen (Der Name sollte auf Englisch sein). -
Habe jetzt noch ein paar kleine Probleme. Mir sind auf Anhieb ein paar Fehler aufgefallen, die habe ich jetzt verbessert, aber ein paar Dinge sind mir noch Rätselhaft.
Erstmal der Code:
new objectModels[MAX_OBJECTS];
forward ScanObject(playerid, objectid, Float:curx, Float:cury);
public ScanObject(playerid, objectid, Float:curx, Float:cury)
{
// End on invalid objects
if (!IsValidObject(objectid)) return;
new Float:sphere=GetColSphereRadius(objectModels[objectid]);new Float:px, Float:py, Float:pz;
GetPlayerPos(playerid, px, py, pz);
// Update z value, -0.5 offset might need to be adjusted
MapAndreas_SetZ_For2DCoord(px, py, pz-0.5);if (++curx > sphere*2) {
cury++;
curx = 0.0;
}
if (cury > sphere*2) {
// Object done, continue with the next one, 300ms falling time
SetTimerEx("ScanObject", 500, 0, "iiff", playerid, curobject+1, 0.0, 0.0);
return;
}// Scan the next position for that object
GetObjectPos(curobject, px, py, pz);
SetPlayerPos(playerid, px-sphere+curx, py-sphere+cury, pz+sphere);
SetTimerEx("ScanObject", 500, 0, "iiff", playerid, curobject, curx, cury);
}
Curobject ist nicht definiert, also wenn ich jetzt curobject erstelle, welchen Wert soll ich dann zuweisen ? curobject = objectid ? Dann wäre da noch objectModels und objectid. Bei objectModels soll ich dann nochmal einzeln alle Objektmodele zuweisen ? Also grade blick ich garnicht mehr durch. -
Ok danke dann wäre das schonmal geklärt Und mit den Ungenauigkeiten meine ich, falls es laggt und ich dann in ein Objekt falle stimmen die Koordinaten nicht.
-
Das ist genau das selbe Prinzip welches bei dem One Piece Server genutzt wurde nur hat der die ganzen Daten in einer Datenbank gespeichert und mit Mathlab visualisiert.
/edit
Oskaar1994
Wieso ?Du musst nur die neue hmap noch einbinden.
Die koordinaten werden in den Arbeitsspeicher geladen davon werden die Z koordinaten letztendlich ermitteltHabe mir den Code noch mal genauer durchgelesen und habe es jetzt kapiert Noch eine Frage: Wäre es schlauer den Code mit einer Schleife oder einem Timer mit einem Intervall von ca 500ms zu nutzen ? Ich kann mir vorstellen, dass der Server mit einer Schleife entweder abschmieren würde oder dass alles total laggt und dadurch die Koordinaten ungenau werden ?
-
Dann nehme die version von mauzen da kannst du deine eigene .hmap erstellen und laden oder einer bestehenden
neue koordinaten hinzufügen.Mauzen hat dazu nal ein Codeschnipsel geschrieben.
http://forum.sa-mp.com/showthread.php?t=275492&page=16
Der Versuch über Mta geht nur, wenn der Apieler in der nähe ist die Objekte in Mta werden auch eingestreamt dafür hat Mta seinen eigenen streamer
Danke, genau sowas habe ich gesucht. Ich war zwar in Mauzen's thread aber habe es irgendwie übersehen Jetzt muss ich das nur irgendwie in die bestehende .hmap einbauen
-
Nein, ich mappe nicht mit MTA aber wenn es funktionieren würde wäre es mir meine Maps zu konvertieren. Ich werde es mal probieren, danke für den Tipp
Aber selbst wenn es funktioniert stehe ich noch vor der Herausforderung Lua -
Hey,
ich beschäftige mich derzeit mit dem MapAndreas Plugin, da es sehr wichtig für meinen Gamemode ist, nur ist da ein Problem. Die .hmap die mit dem Plugin mitgeliefert wird, ist nur für die normale SA Map geeignet, aber ich habe sehr viele und auch große eigene Maps auf dem Server. Ich wüsste zwar wie ich mir eine .hmap für die normale SA Map erstelle, aber wie kann ich das mit gemappten Objekten machen ? Möglich ist es anscheinend: http://forum.sa-mp.com/showthread.php?t=508552
Wie hat er das gemacht ? Ich denke er nicht, dass er das manuell gemacht hat, und jeden Meter einzeln abgelaufen ist.
Wäre enorm dankbar wenn jemand eine Lösung für mich hat -
Womit mapst du?
SA-MP Map Construction -
Hey,
ich bräuchte mal etwas Hilfe. Ich will gerade die Landebahn von Verdant Meadows Airport (der alte in der Wüste) neu texturieren, aber immer wenn ich im Map Editor die Landebahn dubliziere dann verschiebt sie sich komisch. Liegt das an meinem Editor ? Und wenn nicht, hat das schonmal jemand gemacht und könnte mir die genauen Koordinaten für die richtige Ausrichtung der Landebahn geben ?
Würde mich über Hilfe freuen -
stock RemoveObjectsAtConnect(playerid)
{
for(new i=0;i<max_maps;i++)
{
for(new r = 0; r < MAX_REMOVE_CODES; r++)
{
RemoveBuildingForPlayer(playerid,ServerMaps[i][removeModel][r],ServerMaps[i][removeX][r],ServerMaps[i][removeY][r],ServerMaps[i][removeZ][r],ServerMaps[i][removeRadius][r]);
}
}
return 1;
}So.
Danke Da hatte ich auch schon dran gedacht, aber ich dachte eine Loop in einer Loop würde nicht funktionieren
*edit* Zu früh gefreut, der Code bringt den Client zum Abstürzen -
Naja da müsste ich mich halt wieder komplett neu einarbeiten, was etwas blöd wäre weil mit der Funktion, mein Mapsystem fertig wäre.
-
MAX_REMOVE_CODES definiert wie viel Removecodes eine Map höchstens hat bzw. haben darf. Und ja das macht Sinn, sonst könnte ich pro Map ja nur ein Objekt entfernen
-
stock RemoveObjectsAtConnect(playerid)
{
for(new i=0;i<max_maps;i++)
{
RemoveBuildingForPlayer(playerid,ServerMaps[i][removeModel],ServerMaps[i][removeX],ServerMaps[i][removeY],ServerMaps[i][removeZ],ServerMaps[i][removeRadius]);
}
return 1;
}
Ups hatte das ServerMaps[i] vergessen, aber das ist trotzdem nicht die Lösung für mein Problem, glaube ich zumindest -
Hey,
ich arbeite derzeit noch an meinem Map System und bin auf ein Problem gestoßen. Ich muss durch ein multidimensionales Array loopen, aber das habe ich noch nie gemacht bzw. verstanden. Ich erkläre mal was ich vor habe.
Hier mein Array + Enum:
enum Maps
{
MapID,
mapname[64],
objects[MAX_MAP_OBJECTS],
removeModel[MAX_REMOVE_CODES],
Float: removeX[MAX_REMOVE_CODES],
Float: removeY[MAX_REMOVE_CODES],
Float: removeZ[MAX_REMOVE_CODES],
Float: removeRadius[MAX_REMOVE_CODES],
};
new ServerMaps[MAX_MAPS][Maps];
Ich möchte wenn jemanden den Server betritt, dass die entsprechenden Gebäude entfernt werden. Wie mache ich das mit mehreren Removecodes ? So habe ich angefangen (würde nur mit einem Removecode funktionieren):
stock RemoveObjectsAtConnect(playerid)
{
for(new i=0;i<sizeof(ServerMaps);i++)
{
RemoveBuildingForPlayer(playerid,removeModel,removeX,removeY,removeZ,removeRadius);
}
return 1;
}
Wäre nett, wenn mir jemand weiterhelfen könnte