Nochmal neue Texturen draufgehaun'. Die Alten waren nicht so schön.
Hier die Neuen:
Nochmal neue Texturen draufgehaun'. Die Alten waren nicht so schön.
Hier die Neuen:
Jetzt wo ich mir es so überlege: Du könntest die Art des Autos anzeigen lassen. Also SUV, Kompaktwagen etc
was für ein auto er fahrt?
Lies dir den Thread durch & dann nochmal deinen Post
public OnPlayerSpawn(playerid)
{
return SpawnPlayer(playerid);
}
Bin nachts (glaube es war so 3-4 Uhr) rum gesessen und hab mich stundenlang gewundert, warum der Server laggt.
GetPlayerFacingAngle(playerid,r);
new cv = CreateVehicle(vID, x, y, z, 90, color1, color2, -1);
Du hast es doch schon fast. Setz R anstatt 90 ein.
Alles anzeigenAlso da bleibe ich bei meiner Methode das via einem Define zu lösen auch, bei deiner Variante belegst du nochmal extra Speicher und bringst deine .amx noch zu anschwellen.
PAWN Quelltext
#define Gras(%0) SetDynamicObjectMaterial(%0,0, 10560, "baseballground_sfs","Grass_128HV",0xFFFFFFFF)
Gras(CreateDynamicObject(19381, 1286.54358, -1295.11670, 12.42060, 0.00000, 90.00000, 0.00000));
Oha, so weit hab ich gar nicht gedacht. Ist natürlich auch eine Möglichkeit.
Achso, wenn du mir noch ein paar Stellen nennst, kann ich das ganze noch erweitern.
@Rocky: Das ist auch eine Variante, aber mir wäre das viel zu unübersichtlich.
Sieht sehr nach c&p aus, sonst ist aber ziemlich nützlich! 9/10
Ich habe das selbst geschrieben. Ich wüsste nicht, wo es ich es kopiert haben soll.
Kann man die Objekte nicht einfach über die Datenbank erstellen lassen, oder würde dies zu Komplikationen kommen?
Würde da die Datenbank überhaupt mitspielen, oder würde diese abstürzen?
Klar, kann da gerne noch einen extra Absatz machen, der das ganze genau erklärt.
Guten Abend,
aufgrund eines Threads möchte ich nun eine gute und angenehme Technik erklären, mit der man Platzsparend und in weniger als 5 Minuten viele Objekte mit Texturen versehen kann.
Schritt 1: Enum
enum walls
{
}
Aber warum? Es ist - einfach gesagt - eine große Box mit vielen kleinen Schubladen. Diese Schubladen werden wir später mit Daten füllen. ( Viele kennen das ja aus den Login & Registersystemen)
Nun müssen wir neue Schubladen anlegen. Dazu überlegen wir nochmal, was wir wollen. Wir wollen ein Objekt erstellen. Deswegen schauen wir uns die Parameter von "CreateDynamicObject" an.
Diese sind:
Model - Modelid des Objektes
X, Y & Z - Koordinaten des Objektes
Rx, Ry & Rz - Rotation des Objektes
World - ID der Welt ( default : -1 )
Interior - Interiorid ( default : -1 )
playerid - Playrid ( default : -1 )
Streamdistance - Wann das Objekt streamt
Drawdistance
Wir füllen also die Box mit den Schubladen
enum wall
{
mod, //modelid
Float:x, //x achse
Float:y, //y achse
Float:z, // z achse
Float:rx, // rotation auf der x achse
Float:ry, // rotation auf der y achse
Float:rz, // rotation auf der z achse
world, // welt
inter, // interior
player, // player
streamd, //streamdistance
drawd //drawdistance
}
Schritt 2: Daten
Die Box ist nun fertig. Nun ist es an der Zeit, diese zu füllen.
Dies geschieht mit
static const NAME[][NAME_DES_ENUMS] = {
};
Warum const? constbedeutet, dass die Daten immer gleich bleiben. Beispiel:
const variable = 5;
variable = 4;
//Error! Ich darf "variable" nicht ändern
A static variable is like a global new variable but with a more limited scope. When static is used globally the resulting created variables are limited to only the section in which they were created (see #section). So taking the earlier "new" example: - Wiki
Das heißt, Variablen, die mit static deklariert werden, sind nur auf lokaler Ebene "sichtbar". Sie sind also für andere Script unsichtbar.
Die Formatierung ist folgendermaßen
static const NAME[][NAME_DES_ENUMS] = {
{model..},
{model..}
};
Schritt 3: Konvertieren
Pro-Tipp:
Zum konvertieren der MapDaten, empfiehlt sich http://convertffs.com/
Hier kann man sein eigenes Format angeben. ( Change - add custom Format )
In unserem Fall brauchen wir {{model},{x},{y},{z},{rx},{ry},{rz},-1,-1,-1,200,-1},
Wenn wir also unserer Objekte konvertiert haben, können wir sie einsetzen.
static const wall_obj[][wall] = { // WÄNDE
{19446,219.6636000,1834.9028300,10003.3134800,0.0000000,0.0000000,0.0000000,-1,-1,-1,200,0},
{..},
{..} // <- letzter Eintrag hat kein Komma!
};
Nun haben wir die Schublade mit Informationen gefüllt, die wir zum erstellen brauchen.
Schritt 4: Laden
Jetzt erstellen wir die Objekte.
Dazu gehen wir zu OnGameModeInit und erstellen eine Schleife, die die Daten der einzelnen Schubladen durchgeht.
new g;
for(;g< sizeof(wall_obj);g++)
{
CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
wall_obj[g][streamd],wall_obj[g][drawd]);
}
Die Objekte werden nur erstellt. Nun wollen wir diese noch mit einer Textur versehen
Dafür verwenden wir SetDynamicObjectMaterial
Pro-Tipp: http://textures.future-elife.com/?page=textures . Hier suche ich meine Texturen. Super Seite mit vorgefertigtem Code.
Ich mache das dann immer folgendermaßen.
new g;
for(;g< sizeof(wall_obj);g++)
{
// SetObjectMaterial(CreateObject(...), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF); <- Ich kopiere also den Code von der Website.
CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
wall_obj[g][streamd],wall_obj[g][drawd]);
}
Nun schreibe ich vor CreateDynamicObject SetDynamicObjectMaterial(
for(;g< sizeof(wall_obj);g++)
{
// SetObjectMaterial(CreateObject(...), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF); <- Ich kopiere also den Code von der Website.
SetDynamicObjectMaterial(CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
wall_obj[g][streamd],wall_obj[g][drawd]);
}
Jetzt setze ich hinter die letzte rechteckige Klammer ein Komma "," und kopiere den Rest des Codes der Website. 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF);
for(;g< sizeof(wall_obj);g++)
{
// SetObjectMaterial(CreateObject(...), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF); <- Ich kopiere also den Code von der Website.
CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
wall_obj[g][streamd],wall_obj[g][drawd]), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF);
}
Fertig. Die Objekte sind nun fertig texturiert.
Mit dieser Technik sparen wir uns sehr viel Arbeit und Mühe.
Grüße, Raven.
Ich wollte ihm nur einen Code zeigen, mit welchem er das machen könnte Wenn er in ein paar Monaten nochmal das selbe Problem hat, kann er ja - sofern er fortgeschrittener ist - den Code als Beispiel verwenden
Es geht aber auch einfacher.
Aus meinem Script bzw Map.pwn
enum wall // WÄNDE
{
mod,
Float:x,
Float:y,
Float:z,
Float:rx,
Float:ry,
Float:rz,
world,
inter,
player,
streamd,
drawd
}
static const wall_obj[][wall] = { // WÄNDE
{19446,219.6636000,1834.9028300,10003.3134800,0.0000000,0.0000000,0.0000000,-1,-1,-1,200,0},
{..},
{..},
{19427,213.7154100,1811.0428500,10003.3134800,0.0000000,0.0000000,0.0000000,-1,-1,-1,200,0} // <- letzter eintag darf kein "," haben
};
Unter OnGameModeInit
new g;
for(;g< sizeof(wall_obj);g++)
{
SetDynamicObjectMaterial(CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
wall_obj[g][streamd],wall_obj[g][drawd]),0, 8839, "vgsecarshow", "sw_wallbrick_06", 0xFFFFFFFF); //Objekt & Textur werden erstellt. So spart man sich viele viele Zeilen
}
Kleiner Tipp noch, weil ich das gerade sehe.
Ich würde dir empfehlen, das Laden sowie das Speichern noch umzuschreiben. Bei vielen Daten zieht das ne' Menge an Ressourcen. Und das kann zu laggs führen. Man öffnet ja auch nicht jedes mal aufs Neue den Kühlschrank, wenn man 10 Sachen rausholen will.
-Nur als Hinweis für später.
/Edit.
Wenn NUR der Projektleiter den Command ausführen soll, musst du einfach die Variable aus dem Array nehmen.
if(SpielerInfo[playerid][pAdmin] != Level_für_PLeiter)return Send..(.."du bist kein Projektleiter");
Leider erst heute Abend, da ich momentan keine Zeit habe.
Guten Abend,
ich arbeite seit gestern Abend/Nacht an eine Map, mit der ich fast fertig bin. Ursprünglich sollte es ein Irish Pub werden, allerdings ist das eher eine Bar mit Bühne geworden. Die Map ist eigentlich soweit fertig, ein paar kleine Details (Tischdeko etc) müssen noch hinzugefügt werden.
( Die Bilder sind etwas verzerrt, liegt an dem Firstpersonmod )
Konstruktive Kritik erwünscht.
Grüße, Raven.
Den müsste man meines Wissens nach beantragen. Weiß nicht, ob das immer noch so ist.
Weiß zufällig jemand, ob es außer der Gitarre sonst noch Musikinstrumente gibt? GTA bezogen natürlich.
Textdraw2 = TextDrawCreate(542.000000, 392.000000, ".");
TextDrawBackgroundColor(Textdraw2, 255);
TextDrawFont(Textdraw2, 1);
TextDrawLetterSize(Textdraw2, 9.249999, 1.000000);
TextDrawColor(Textdraw2, -1);
TextDrawSetOutline(Textdraw2, 0);
TextDrawSetProportional(Textdraw2, 1);
TextDrawSetShadow(Textdraw2, 1);
Ist einfach ein Punkt, der in die Länge gezogen ist. ^ Da hat man dann diese abrundungen
Nächstes mal bitte hier rein
Tu was du nicht lassen kannst. Keiner hält dich auf.
Warum nur die? Was macht denn "trusted" aus?
Es gibt sicherlich auch andere Mittelsmänner, welchen man vertrauen kann & die keine Teammitglieder sind. Im Allgemeinen sind die Teammitglieder jedoch vertrauenswürdiger als ein dahergelaufener User mit 0 Bewertungen.
Wenn du eh keine Ahnung hast, wieso schreibst du es dann überhaupt?
Sorry, dass ich keine juristische Ausbildung habe. Es ist ein Tipp. Tipps sind dazu da, um anderen zu helfen.
Deine Möglichkeit C. ist ja ganz toll... Wer die wählt kann sich sämtliche Ratschläge hier eh sonst wohin schmieren!
Ich habe selber noch keine Transaktion durchgeführt. Deswegen lasse ich die Option offen. A & B sind die wohl die meist genutzten Methoden.
Alles in allem ist dein Thread hier alles andere als hilfreich!
Immer noch besser, als nichts zu tun.
wurde hier bereits in mehreren Themen berichtet.
Und? Es ist besser, wenn alles zusammengeschrieben ist. Keiner hat Lust, 1 691 089 Beiträge durchzulesen, um genau diesen Tipp zu bekommen.