Das nennt man Platzhalter.
Beiträge von Padarom
-
-
Du kannst nicht mehrere Dialoge gleichzeitig aufrufen.
Nutze die Funktion zum Aufrufen des zweiten Dialoges sobald du in OnDialogResponse die Passwortabfrage überprüft hast. -
Das kannst du nativ gar nicht abfragen. Du könntest höchstens manuell per Koordinaten Zonen erstellen und gucken ob sich der Spieler in einer dieser Zonen befindet.
Die Zone bei der er nicht rausfahren kann ist SetPlayerWorldBounds. Ansonsten am besten mit GangZoneCreate - Dann aber eher ohne Farben. -
new Tank[MAX_VEHICLES], bool:TanktGerade[MAX_VEHICLES]=false, tanktimer[MAX_PLAYERS];
Für jede spezifische Variable... Ein Array. -
Wenn du dem Tutorial richtig gefolgt bist, dann sollte das nicht so sein. Es wurde extra ein Array von Tankinhalten erstellt, anstatt einem zentralen.
Irgendetwas wirst du also wohl falsch gemacht haben. -
Beim CreateObject kannst du als Koordinaten überall 0 reinschreiben.
Das wird erst beim AttachObjectToVehicle richtig verlangt. -
Wenn es nicht Serverseitig geprüft wird, dann schon.
Nein, es geht ihm nur um den Rechner, nicht um einen Bestellvorgang. Der Berechner kalkuliert scheinbar nur einen Pauschalpreisvorschlag.
Die Bestellung ist dann eine andere Sache. -
Dafür die Frage wofür er das machen muss. Wenn er es für die Schule als Hausaufgabe zu erledigen hat, dann reicht es dadurch, ich glaube kaum dass Lehrer solche Arbeiten nach Injection-Möglichkeiten durchforsten.
Wenn er es jemandem verkaufen möchte, frage ich mich wieso er es überhaupt anbieten würde ohne eine Idee davon zu haben. -
Das ist doch keine große Sache?
In den jeweiligen Dropdownboxen den einzelnen Auswahlmöglichkeiten die Value mit dem Preis zuschreiben und am Ende alle Values zusammenrechnen.
Viel mehr PHP ist da eigentlich nicht drin.Wofür musst du das denn coden wenn ich fragen darf?
-
Eigentlich recht simpel.
// Irgendwo:
new light[MAX_VEHICLES];// In deinem /ucl Befehl:
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, GREEN, "Du bist Schokolade.");
new vehicleid = GetPlayerVehicleID(playerid), model = GetVehicleModel(vehicleid);
if(model == 1 || model == 2 || model = 3 || /* ... */ ) // Hier die ID's der Fahrzeuge eintragen, an denen man das Licht befestigen kann.
{
light[vehicleid] = CreateObject(/* ... */); // ID des Lichtobjektes
AttachObjectToVehicle(light[vehicleid], vehicleid, 0, 0, 1, 0, 0, 0); // Die Werte musst du selbst rausfinden
}
else SendClientMessage(playerid, GREEN, "Du bist Kuchen.");
In deinem /uclw-Befehl arbeitest du einfach mit DestroyObject.Mit freundl. Grüßen
Padarom -
Dir ist bewusst, dass während deiner Schleife 200x die Spielerposition gewechselt wird? Die Schleife läuft bis 200, wenn dann kein Haus mit der ID 200 existiert (also die Variablen HausInfo[200][haus_x] usw. noch nicht initialisiert sind), wird der Spieler zwangsläufig zu 0,0,0 teleportiert (was ja der Bauernhof ist).
Du kannst das in etwa so lösen:
enum haus_info {
bool:haus_initialisiert; // Diese Bool einfügen zum Abfragen.
}for(new hausid; hausid<200; hausid++) LoadHaus(hausid); // In OnGameModeInit
// Bei OnPlayerSpawn, idealerweise aber bei OnPlayerClassRequest mit SetPlayerSpawnInfo arbeiten
new haus = GetPlayerHaus(playerid);
if(haus == -1) SetPlayerPos(playeryid, 100, 200, 300); // Spieler hat kein Haus -> Anfangsspawn
else SetPlayerPos(playerid,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]);// Folgendes noch NACH der Existenzprüfung der Datei im Callback LoadHaus einfügen:
HausInfo[hausid][haus_initialisiert] = true;// Neuer Stock - Kannst du auch öfters verwenden
stock GetPlayerHaus(playerid)
{
new pName[24];
GetPlayerName(playerid, pName, 24);
for(new i=0; i<200; i++)
{
if(!HausInfo[i][haus_initialisiert]) continue;
if(!strcmp(HausInfo[i][haus_besitzer], pName)) return i;
}
return -1;
}Mit freundl. Grüßen
Padarom -
Falscher Bereich, das gehört in "Coding".
Abgesehen davon, welche Programmiersprache?edit:
Du musst den Pfad des Hintergrundbildes so angeben, dass es in Relation zum eigentlichen Programm steht (und das Bild dann ggf. mitsenden).
In VB.net müssten Bilder z.B. direkt in die .exe mitgespeichert werden. -
Piet:
Dir ist aber klar, dass man Funktionen auch ohne Timer aufrufen kann, oder?
Dennoch, meine Lösung sollte bereits die richtige sein. -
Scheinbar hast du den Code also einfach nur mit Copy & Paste in dein Script eingefügt, ohne auch nur ansatzweise eine Idee zu haben was da gemacht wird.
Guck dir die Abfrage nach dem Adminlevel an:
if(PlayerInfo[playerid][pAdmin] >= 1450) // Ersetzt du mit deinem Admin Level das diesen Befehl nutzen Darf.
Dahinter ist bereits ein passendes Kommentar. Je nachdem wie hoch das Adminlevel des Spielers sein soll, der diesen Command ausführen darf, musst du auch die Zahl dort ändern.
Außerdem musst du dir an anderer Stelle im Script dieses Adminlevel auch zuweisen.Mit freundl. rüßen
Padarom -
Richtig grausiger Ansatz, sorry. Ich versuche mal zu erklären was dein Code aktuell macht:
Es wird eine Schleife gestartet, die alle Spieler des Servers durchläuft (Obwohl du doch die SpielerID übergibst?). Bei jedem Spieler, bei dem die Variable "TutTime" größer gleich 1 ist (die aber irgendwie auch nirgends gesetzt wird), wird selbige um 1 erhöht.
Dann wird abgefragt wie hoch diese Variable (bei jedem Spieler des Servers!) ist, das Interior des jeweiligen Spielers neu gesetzt und sein Chat gecleared. Die Kamera wird allerdings beim mit playerid übergebenen Spieler geändert.
Eine Schleife läuft nicht unendlich lang weiter. Außerdem dauert ein Durchlauf keine ganze Sekunde, weshalb du nicht davon ausgehen könntest, dass TutTime durch die Erhöhung erst nach 20 Sekunden auf 20 wäre.Am besten löst du das so:
public tut1(playerid, id)
{
if(id == 1)
{
SetPlayerInterior(playerid, 0); // Wird nur einmal benötigt, danach ist der Spieler ja bereits im jeweiligen Interior.
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 2224.520019, 2404.315673, 16.344240, 2153.540527, 2313.615722, 60.157226, 10000);
InterpolateCameraLookAt(playerid, 2227.905029, 2407.916503, 17.103015, 2151.097656, 2309.258300, 60.368419, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 2); // Ggf. die Zeit anpassen!
}
else if(id == 2)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 2139.731689, 1967.328613, 17.607742, 2066.838867, 1683.506591, 14.777522, 10000);
InterpolateCameraLookAt(playerid, 2135.487548, 1964.687255, 17.713203, 2071.788085, 1683.407348, 15.482200, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 3); // Ggf. die Zeit anpassen!
}
else if(id == 3)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 1216.874145, 1385.585815, 35.823482, 1029.671997, 1443.950805, 37.058578, 10000);
InterpolateCameraLookAt(playerid, 1213.136718, 1382.266479, 35.706626, 1027.412841, 1448.393188, 37.460807, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 4); // Ggf. die Zeit anpassen!
}
else if(id == 4)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 1216.874145, 1385.585815, 35.823482, 1029.671997, 1443.950805, 37.058578, 10000);
InterpolateCameraLookAt(playerid, 1213.136718, 1382.266479, 35.706626, 1027.412841, 1448.393188, 37.460807, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 5); // Ggf. die Zeit anpassen!
}
else if(id == 5)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 24.192886, 1312.712890, 87.218193, 82.856452, 1734.160522, 54.378856, 15000);
InterpolateCameraLookAt(playerid, 21.173522, 1308.851928, 86.229858, 85.896827, 1738.113037, 54.013206, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 6); // Ggf. die Zeit anpassen!
}
else if(id == 6)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 24.192886, 1312.712890, 87.218193, 82.856452, 1734.160522, 54.378856, 15000);
InterpolateCameraLookAt(playerid, 21.173522, 1308.851928, 86.229858, 85.896827, 1738.113037, 54.013206, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 7); // Ggf. die Zeit anpassen!
}
else if(id == 7)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 24.192886, 1312.712890, 87.218193, 82.856452, 1734.160522, 54.378856, 15000);
InterpolateCameraLookAt(playerid, 21.173522, 1308.851928, 86.229858, 85.896827, 1738.113037, 54.013206, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 8); // Ggf. die Zeit anpassen!
}
else if(id == 8)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 1548.642333, 2626.509765, 59.889606, 1877.035644, 2604.894775, 51.598896, 10000);
InterpolateCameraLookAt(playerid, 1545.515869, 2630.389648, 59.476016, 1880.970825, 2607.971191, 51.376312, 10000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 9); // Ggf. die Zeit anpassen!
}
else if(id == 9)
{
ClearChatbox(playerid, 8);
InterpolateCameraPos(playerid, 2057.356445, 806.424377, 51.410240, 2057.969726, 1705.619995, 44.109199, 15000);
InterpolateCameraLookAt(playerid, 2057.464111, 811.379699, 50.752002, 2057.996337, 1710.608886, 43.777416, 15000);
SetTimerEx("tut1", 20000, false, "ii", playerid, 10); // Ggf. die Zeit anpassen!
}
else if(id == 10)
{
ClearChatbox(playerid, 8);
GameTextForPlayer(playerid,"~w~~n~~n~~n~~n~~n~~n~~n~~n~~n~Viel Spaß auf ~p~GTA Roleplay",5000,4);
SetCameraBehindPlayer(playerid);
SpawnPlayer(playerid);
}
return 1;
}Mit freundl. Grüßen
Padarom -
Wieso "oder sogar"? SetPlayerMoney gibt es nativ nicht.
Ich denke GivePlayerMoney mit negativem Wert (wie TheSven) sagte ist das was er sucht. -
Bin jetzt bei 679ms.
-
new Text3D:supporterCarLabel[MAX_VEHICLES];ocmd:veh(playerid,params[])
{
new Float:vehx,Float:vehy,Float:vehz;
new vehid,cc1,cc2,string[128], string2[128], string3[128];
if(sscanf(params,"iii",vehid,cc1,cc2))return SendClientMessage(playerid,COLOR_GRAU,"Benutze: /veh [VehicleID(400-611)] [Farbe 1] [Farbe 2]");
if(isPlayerAnAdmin(playerid,25))
{
GetPlayerPos(playerid,vehx,vehy,vehz);
new carid = CreateVehicle(vehid,vehx,vehy,vehz,3,cc1,cc2,-1);
SetVehicleNumberPlate(carid,"Admin");
PutPlayerInVehicle(playerid, carid, 0);
format(string,sizeof(string),"AdmCmd: Du hast ein Admincar gespawnt! FahrzeugID: %d",GetVehicleModel(GetPlayerVehicleID(playerid)));
format(string2,sizeof(string2),"AdmCmd: %s hat FahrzeugID: %d gespawnt!",SpielerName(playerid),GetVehicleModel(GetPlayerVehicleID(playerid)));
format(string3,sizeof(string3),"Supporter Car von\n%s", SpielerName(playerid));
supporterCarLabel[carid] = Create3DTextLabel(string3, COLOR_GREEN, 0, 0, 0, 50, 0, 1);
Attach3DTextLabelToVehicle( supporterCarLabel[carid] , carid, 0.0, 0.0, 2.0);
SendClientMessage(playerid,COLOR_ROT,string);
SendAdminMessage(COLOR_ADMIN,string2);
}
return 1;
}
So sollte es funktionieren.
Für weitere Probleme/Unverständlichkeiten diesbezüglich bitte die Wiki aufsuchen bzw. hier nochmal nachfragenMit freundl. Grüßen
Padarom -
Eigentlich ja, aber bei soetwas kommt es immer nur auf Millisekunden an, was nicht wirklich etwas weltbewegendes ist. Es ging mir nur darum es anzumerken.
Am besten wäre es einfach einen switch zu verwenden, da dieser imho von der Berechnungszeit am wenigsten in Anspruch nimmt.4#Future: Was hat das mit selber schuld zu tun? Ich sagte, dass ich gerade nichts wirklich erkennen kann - Was daran liegt, dass ich mich um diese Zeit gar nicht wirklich darum bemühe.
Ich habe ihn dafür auf einige Dinge hingewiesen, die ihm von Nutzen sein könnten. Aber es ist ja Blödsinn.In deinem Code sehe ich übrigens keine signifikante Besserung, beziehungsweise Lösung seines Problems - Sondern eher eine grundlegende Verbesserung. Nur weil er kein else-Statement für den Response verwendet hat, wird nicht zwangsläufig der Response-Fall nicht aufgerufen. Es geschieht hier lediglich eine eigene Separierung für den Falle Response = 0.
-
Ebenso unnötig. else if verlangsamt in dem Fall prinzipiell nur die Rechenzeit.
Durch mehrere if-Abfragen werden alle überprüft, allerdings nur eine durchlaufen.
Durch else-if Abfragen werden sie dennoch solange bis es zutrifft überprüft und ggf. durchlaufen.Ändert vom Script her nichts.