Beiträge von Macronix
-
-
Servus. Bin auf der Suche nach einem DL für das OG Godfather auf diesen Thread hier gestoßen. Habe mich nach Jahren de Abstinenz mal wieder ans SA:MP scripting rangewagt (auch wenn das game im deutschsprachigen Raum ja leider quasi tot ist).
Aber hab aktuell einfach Bock mal wieder bisschen in die Materie einzutauchen und würde mir dazu gerne mal das legendäre GF Script ansehen.
Könnte mir da jemand ggf. einen Downloadlink für zukommen lassen? :> wäre mega nice.
-
Moin,
ich bin mal wieder an einem Punkt angelangt, wo ich auch nach stundenlangem Probieren nicht selbst auf die Lösung komme. Es geht um einen /carlock Befehl. Den Befehl an sich habe ich mir dabei so gedacht:
/carlock OCMD Befehl ocmd:carlock(playerid,params[])
{
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][id_x]==0)continue;
new Float:x,Float:y,Float:z;
GetVehiclePos(cInfo[i][id_x],x,y,z);
if(!IsPlayerInRangeOfPoint(playerid,2,x,y,z))return SendClientMessage(playerid,GRAU,"Du bist nicht an deinem Fahrzeug.");
if(cInfo[i][besitzer]!=sInfo[playerid][db_id])return SendClientMessage(playerid,GRAU,"Du bist nicht der Besitzer dieses Fahrzeugs!");
new tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
{
GetVehicleParamsEx(cInfo[i][id_x], tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
if(tmp_doors==1)
{
tmp_doors = 0;
SendClientMessage(playerid,GRUEN,"Fahrzeug aufgeschlossen.");
}
else
{
tmp_doors = 1;
SendClientMessage(playerid,GRUEN,"Fahrzeug abgeschlossen.");
}
SetVehicleParamsEx(cInfo[i][id_x], tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
PlayerPlaySound(playerid,1145,0,0,0);
}
return 1;
}
return 1;
}Dies funktioniert auch einigermaßen. Allerdings ist es für jeden Spieler in meinem Testscript derzeit noch möglich, unbegrenzt viele Fahrzeuge zu haben. Der Befehl funktioniert dann nur beim 1. Auto des Spielers in der Fahrzeugdatenbank, alle weiteren Fahrzeuge werden nicht berücksichtigt. Hier ein Screen von der Struktur meiner Datenbank:
In meinem Fall funktioniert der Befehl also nur bei "ID 6", dem Infernus mit der model id 411. Bei allen weiteren Fahrzeugen erscheint dann die von mir erstellte message, dass ich nicht an meinem Fahrzeug bin.
Und hier nochmal mein CarEnum, falls zum Verständnis benötigt:
CarEnum enum carEnum{
id_x,
model,
carcol1,
carcol2,
c_paintjob,
c_spoiler,
c_hood,
c_roof,
c_side,
c_lamps,
c_nitro,
c_exhaust,
c_wheels,
c_stereo,
c_hydraulics,
c_fbump,
c_rbump,
c_ventleft,
c_ventright,
c_tank,
c_health,
c_lock,
besitzer,
Float:c_x,
Float:c_y,
Float:c_z,
Float:c_r,
db_id
}Wie prüfe ich also alle Fahrzeuge eines Spielers ab, sodass der Befehl auch entsprechend bei allen Fahrzeugen eines Spielers funktioniert? Wie immer bitte ich zu berücksichtigen, dass ich mich erst seit ca. 1 Woche mit dem Scripting beschäftige. Sollte es offensichtlich Quatsch sein, was ich da programmiert habe, seht es mir nach.
Danke!
// Keiner einen Tipp parat?
-
Das ist ja spannend. Da hätte ich mir ja noch ewig den Kopf zermartern können, auf sowas kommt mal als Scriptneuling natürlich nicht direkt. Jetzt weiß ich bescheid.
Inzwischen sitze ich zwar schon wieder vor einem neuen Problem, aber davon verschone ich euch erst mal. Danke für deine Hilfe!
-
Jetzt funktionierts! Vielen Dank!
Da das Script mir als Endprodukt relativ egal ist und es mir eher um das Lernen geht, muss ich nun nur noch raffen, warum das nun funktioniert und vorher nicht.
-
Nein, wie gesagt, das hat das Problem leider nicht gelöst.
Ich habe den debug Modus aktiviert und dir die mysql_log.txt angehängt, weiß nicht genau was du davon benötigtst.
-
Danke erstmal für die schnelle Antwort und fürs Willkommenheißen!
Stimmt, da scheint was zu fehlen, denn ich habe es zum Beispiel vor kurzem hinbekommen die Farben (1 und 2) der Autos zu speichern, mit folgendem Code, der ja an sich nach dem gleichen Schema funktioniert:
Farben speichern public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][id_x]==0)continue;
if(cInfo[i][besitzer]!=sInfo[playerid][db_id])continue;
GetVehicleColor(cInfo[i][id_x],cInfo[i][carcol1],cInfo[i][carcol2]);
new query[256];
format(query,sizeof(query),"UPDATE autos SET carcol1='%i',carcol2='%i' WHERE id='%i'",cInfo[i][carcol1],cInfo[i][carcol2],cInfo[i][db_id]);
mysql_function_query(dbhandle,query,false,"","");
}
return 1;
}Das 'i' was du meintest, ist dann wohl das cInfo[db_id]?
Trotz allem habe ich deine Korrektur gerade vorgenommen, leider tut sich immer noch nichts. Noch ratloser als zuvor.
-
Nabend zusammen.
Voweg: ich bin ein absoluter Scriptneuling, befasse mich damit erst seit ca. 1 Woche. Habe mich anhand Tutorials auf Youtube rangetastet und bin nun dabei die übernommenen Systeme auf eigene Faust zu erweitern (um präzise zu werden, ich benutze das System von MrMonat's Tutorials).
Zur Sache: ich benutze MySQL als Datenbank und möchte an Fahrzeugen angebrachtes Tuning speichern. Dafür habe ich für jeden 'Carmod-Typ' (also Spoiler, Felgen etc.) eine eigene Spalte in meiner 'Autos' MySQL Tabelle erstellt und die entsprechenden Variablen meinem AutoEnum hinzugefügt. Welches Tuning verbaut ist wollte ich dann entweder bei OnVehicleMod oder OnEnterExitModShop (Funktioniert das bei beiden?) auslesen, das ganze per GetVehicleComponentInSlot.
Hier der Code, den ich mir dafür überlegt habe:
Tuning auslesen &amp;amp; speichern public OnVehicleMod(playerid, vehicleid, componentid)
{
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][id_x]==0)continue;
if(cInfo[i][besitzer]!=sInfo[playerid][db_id])continue;
cInfo[i][c_spoiler] = GetVehicleComponentInSlot(cInfo[i][id_x],CARMODTYPE_SPOILER);
new query[128];
format(query,sizeof(query),"UPDATE autos SET c_spoiler='%i' WHERE id='%i'",cInfo[i][c_spoiler]);
mysql_function_query(dbhandle,query,false,"","");
}
return 1;
}Leider haut das nicht hin. Wichtig zu erwähnen ist aber, dass das ganze rückwärts bereits einwandfrei funktioniert! D.h., wenn ich in meiner MySQL Datenbank die Spalte "c_spoiler" mit der entsprechenden Komponenten ID fülle und ins Spiel gehe, wird das Auto tatsächlich mit dem korrekten Tuningteil geladen. Es funktioniert nur nicht das Auslesen und Speichern der Teile in die Datenbank.
Hier nochmal der Code, den ich fürs Laden verwende, falls relevant:
Tuning laden public OnPlayerCarsLoad(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(!num_rows)return 1;
for(new i=0; i<num_rows; i++)
{
new id=getFreeCarID();
cInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle);
cInfo[id][carcol1]=cache_get_field_content_int(i,"carcol1",dbhandle);
cInfo[id][carcol2]=cache_get_field_content_int(i,"carcol2",dbhandle);
cInfo[id][c_spoiler]=cache_get_field_content_int(i,"c_spoiler",dbhandle);
cInfo[id][c_hood]=cache_get_field_content_int(i,"c_hood",dbhandle);
cInfo[id][c_roof]=cache_get_field_content_int(i,"c_roof",dbhandle);
cInfo[id][c_side]=cache_get_field_content_int(i,"c_side",dbhandle);
cInfo[id][c_lamps]=cache_get_field_content_int(i,"c_lamps",dbhandle);
cInfo[id][c_nitro]=cache_get_field_content_int(i,"c_nitro",dbhandle);
cInfo[id][c_exhaust]=cache_get_field_content_int(i,"c_exhaust",dbhandle);
cInfo[id][c_wheels]=cache_get_field_content_int(i,"c_wheels",dbhandle);
cInfo[id][c_stereo]=cache_get_field_content_int(i,"c_stereo",dbhandle);
cInfo[id][c_hydraulics]=cache_get_field_content_int(i,"c_hydraulics",dbhandle);
cInfo[id][c_fbump]=cache_get_field_content_int(i,"c_fbump",dbhandle);
cInfo[id][c_rbump]=cache_get_field_content_int(i,"c_rbump",dbhandle);
cInfo[id][c_ventleft]=cache_get_field_content_int(i,"c_ventleft",dbhandle);
cInfo[id][c_ventright]=cache_get_field_content_int(i,"c_ventright",dbhandle);
cInfo[id][besitzer]=cache_get_field_content_int(i,"besitzer",dbhandle);
cInfo[id][c_x]=cache_get_field_content_float(i,"x",dbhandle);
cInfo[id][c_y]=cache_get_field_content_float(i,"y",dbhandle);
cInfo[id][c_z]=cache_get_field_content_float(i,"z",dbhandle);
cInfo[id][c_r]=cache_get_field_content_float(i,"r",dbhandle);
cInfo[id][db_id]=cache_get_field_content_int(i,"id",dbhandle);
cInfo[id][id_x]=CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],cInfo[id][carcol1],cInfo[id][carcol2],-1);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_spoiler]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_hood]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_roof]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_side]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_lamps]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_nitro]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_exhaust]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_wheels]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_stereo]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_hydraulics]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_fbump]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_rbump]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_ventleft]);
AddVehicleComponent(cInfo[id][id_x],cInfo[id][c_ventright]);
tank[cInfo[i][id_x]]=cache_get_field_content_int(i,"c_tank",dbhandle);
}
return 1;
}Wenn es ein total banaler Fehler oder Quatsch von mir ist, bitte ich um Nachsicht. Danke im Voraus!
-
Hallo,
dieser Thread beschreibt meine Frage gut, leider kommen dort keine Antworten zustande. Problem mit Pickup
Ist der dort beschriebene Weg wirklich der einzige, um zu verhindern dass beim Pickup einsammeln automatisches Häuserbetreten erfolgt?
Fragen zu Autos:
Nachdem ich auf meinen Testserver joine, sind die platzierten Fahrzeuge oft wie 'tiefergelegt' sieht so aus, als würde ein Gewicht von paar Tonnen auf denen lasten, sind eben plattgedrückt. Manchmal versinken die Räder dazu auch leicht im Boden. Sieht alles in allem ziemlich unschön aus.
Nummer zwei: Die Autos fahren sich irgendwie merkwürdig. Ich bin es vom SP und anderen Servern definitiv anders gewöhnt. Wenn ich beschleunige und dann vom Gas gehe, rollen die Autos auf meinem Server viel kürzer und bleiben ziemlich schnell stehen. Auch die Beschleunigung und das Kurvenverhalten wirkt ziemlich behäbig.Beide Tatsachen wirken irgenwie so, als sei die Schwerkraft höher. Steht aber nichts in meinem Script, was das bewirken würde.
Wäre super, wenn ich zu allen Themen hilfreiche Antworten bekommen würde. Danke euch.
-
Ja, habe es gegen ein anderes ersetzt, funktioniert.
// Wer Lust hat, kann hier noch mal reinschauen. Bräuchte bzgl. nem anderen Thema auch Hilfe. Wäre nett, danke.
-
Wunderbar, vielen Dank!
// Edit: Habe nun das Tor neu hingemappt (ID 3036). Funktioniert auch mit dem öffnen etc. Allerdings kann man das Tor zerstören, durchfahren reicht. So solls natürlich nicht sein. Liegts am Objekt selbst, oder kann ich es irgendwie machen, dass es unzerstörbar wird?
-
Hallo Leute.
Da ich aus mir unverständlichen Gründen keinen Beitrag im Mapping-Unterforum erstellen kann, poste ich mein Anliegen hier.
Ich habe auf meinem SAMP Testserver im "Yakuza HQ" (zumindest dort, wo es hinsoll - in Chinatown SF natürlich) dieses Tor hier vorgefunden (das linke, große ist gemeint:
Beim MTA Map Editor und bei einem anderen Editor war dieses Tor aber gar nicht dort an dieser Stelle, nur dieses kleine Gitter rechts daneben! Wollte es gern entfernen und ein anderes hinsetzen, welches ich dann per CMD öffnen kann. Nur kann ichs gar nicht entfernen, da es in den Editoren gar nicht da ist, nur in SAMP. Habe das Objekt in meinem Script nicht dort platziert. Warum ist es denn in SAMP da, bei MTA aber nicht?
Und wie kann ich es nun am besten öffnen?
Danke.
// habe dieses Tool benutzt: http://forum.sa-mp.com/showthread.php?p=1399384#post1399384
auch meine .pwn importiert, das Tor war nicht da. Beweis dafür, dass es nicht in meinem Script ist. -
Danke für den Tipp, wie gesagt, sowas kann ich gar nicht wissen, mit meinem Wissensstand von "Vakuum" bezüglich Scripting. :x
Aber das ist für den moment erstmal zweitrangig.Normal müsste in der .txt Datei aber dann Geld=0, Adminlevel=0 etc stehen. Wenn ich es manuell eintrage und mich einlogge, wird es auch nicht ingame übernommen.
// Ich mag ja nicht drängen, aber hast du oder jemand schon herausgefunden, wo der Fehler liegt?
-
Hi Leute.
Vorab .. ich bin 'n absoluter Noob, wenns ums Scripten geht, da ich erst vor gut 2 Tagen bei NULL angefangen habe. Habe mir einige Tutorials auf YT angesehen, und bisschen probiert und nachgebastelt.
Es geht um ein Adminscript, an dem ich mich versucht habe. Desweiteren sollen verschiedene Dinge in einer Spielerdatei im scriptfiles Ordner gespeichert werden, wie z.B. Geld, Level, Adminlevel, Fraktion etc. Allerdings wird bei mir immer nur das Passwort abgespeichert.
Als Vorlage haben mit die Tutorials von diesem Youtuber hier gedient: http://www.youtube.com/watch?v=3l4LVUc9rSE&feature=relmfu
Habe es mehrfach kontrolliert, aber komme nicht auf den Fehler. Gespeichert werden sollen: Passwort, Level, Geld, Adminlevel, Fraktion.
Kann sich jemand mal mein Script ansehen (Anhang) und mir weiterhelfen? Sorry, wenns für euch zu banal ist, aber ich komm nicht weiter. :l