Bzw. das Public nicht..
Suchst du vllt [wiki]OnVehicleDeath[/wiki]?
Bzw. das Public nicht..
Suchst du vllt [wiki]OnVehicleDeath[/wiki]?
Brauche dringend eure Hilfe!
Der Compiler ist gecrasht (läuft aber noch im Hintergrund) der ist da in einer Endlosschleife gefangen.
Öffne den Task-Manger und beende jeden Prozess der mit pawn anfängt.
Dann finde den Fehler, warum der Compiler crasht.
Vermutlich ein Klammerfehler
Gibt genug Tutorials & Tools um das zu finden...alsooo good luck!
Jaaa da steht doch der Fehler...
Musst einfach drüber:
new string [128];
schreiben...
Oder eben anpassen je nach Länge
if(IsInAorB(vehicleid))
Achso, ja das wird nicht abgedeckt, schreibe die Funktion mal so:
stock IsInAorB(vehicleid)
{
if(!vehicleid) return 0;
for(new i; i<sizeof(FahrzeugTypA); i++) if(vehicleid == FahrzeugTypA[i]) return 1;
for(new i; i<sizeof(FahrzeugTypB); i++) if(vehicleid == FahrzeugTypB[i]) return 1;
return 0;
}
Aber ist komisch, dass das geht...das bedeutet wohl, dass nicht alle Array-Felder Fahrzeugen zugewiesen wurden
Was mache ich falsch?
Nichts?
Was geht denn nicht? Was passiert..bisschen mehr Infos, meine Glaskugel ist leider kaputt
Das ist ja so blöd, da ich 2 Schleifen davor laufen lassen muss.
Gibt hier 2 Möglichkeiten.
//Wenn du die Fahrzeuge alle nacheinander erstellst, kann du das einfach so abfragen:
stock IsInAorB(vehicleid)
{
return (FahrzeugTypA[0] <= vehicleid <= FahrzeugTypA[sizeof(FahrzeugTypA)-1]) ||
(FahrzeugTypB[0] <= vehicleid <= FahrzeugTypB[sizeof(FahrzeugTypB)-1]);
}
//Oder mit Schleifen:
stock IsInAorB(vehicleid)
{
for(new i; i<sizeof(FahrzeugTypA); i++) if(vehicleid == FahrzeugTypA[i]) return 1;
for(new i; i<sizeof(FahrzeugTypB); i++) if(vehicleid == FahrzeugTypB[i]) return 1;
return 0;
}
Alles anzeigen
Leider gibt es da doch Errors
Sei doch mal spezifisch, was denn für Fehler?
Warum geht es nicht?
Beide Fahrzeugtypen haben die selbe Model-ID sind aber anders.
Wat?
Was genau möchtest du denn nun wissen? Ich werde aus deiner Fragestellung nicht schlau?
Willst du wissen, ob das Fahrzeug diese modelid hat...oder möchtest du wissen in welchem Fahrzeug er ist und zu welcher der Variablen gehört?
Bzw möchtest du wissen, ob es ein Fahrzeug von Typ A ist oder von Typ B?
//Edit:
Das mit dem Trash machst du einfach so:
Leider ist in diesem Fall doch eher eine andere Variante via Funktion gewuenscht.
Wieso? :o
und das wollte ich jetzt testen
Nur zur Info, du musst das nicht alles selbst schreiben, da gab es schon einige vor dir:
https://forum.sa-mp.com/showthread.php?t=646429
https://forum.sa-mp.com/showthread.php?t=509952
https://forum.sa-mp.com/showthread.php?t=301328
Vielleicht hilft dir das ja ein wenig weiter
bei mir compilet der einfach nicht wenn ich das so habe, kann mir jemand helfen?
Da ist vermutlich ein Klammerfehler und deine Schleifen sind falsch...
Aber ich würd dir eh empfehlen, es so zu schreiben:
if(dialogid == DIALOG_Frakcars)
{
if(!response) return 1;
RespawnFrakVehicles(listitem);
format(string, sizeof(string), "%s hat die Fraktionsfahrzeuge der Fraktion LSPD [ID: %d]respawnt.", sendername,listitem+1);
ABroadCast(COLOR_YELLOW,string,1);
}
//Irgendwo außerhalb
stock RespawnFrakVehicles(frak)
{
switch(frak)
{
case 0:
{
for(new i,v; i<sizeof(LSPDCar); i++)
{
v = LSPDCar[i];
if(GetVehicleDriver(v) != -1) SetVehicleToRespawn(v),SetVehicleHealth(v,1000);
}
}
case 1:
{
for(new i,v; i<sizeof(fbicar); i++)
{
v = fbicar[i];
if(GetVehicleDriver(v) != -1) SetVehicleToRespawn(v),SetVehicleHealth(v,1000);
}
}
}
return 1;
}
Alles anzeigen
Welchen Kommandoprozessor koennt ihr als den besten empfehlen?
Ist schon cute: https://forum.sa-mp.com/showthread.php?t=608474
Meld dich mal als root an:
sudo -i
Hast du denn überhaupt das root pw?
Und dann einfach den Befehl nochmal ausführen:
./samp03svr &
ja,aber hat bist jetzt nicht geholfen.
Zeig mal, wie deine Befehle sind, um den Server zu starten, also was du so eingibst
kann mir einer helfen?
Liest du, was ich schreibe?
Assertion `fp!=((void *)0)' failed.
fp steht für FilePointer.
Da wird versucht auf die scriptfiles zuzugreifen und das klappt nicht, da der Prozess keine Rechte darüber hat
Entweder du bekommst es auf die Ketten die Rechte einzustellen oder du nutzt einfach stumpf mal sudo um deinen Server zu starten
Wie muss ich nun mit einer Schleife vorgehen, das er Beachtet welches Geschlecht er ist und welche Fraktion er ist.
Und das er dann natürlich nur den Skin aus meiner Liste Erhält.
Das könntest du so lösen:
stock GetRandomSkin(playerid, gender, fraktion)
{
new counter, str[10];
for(new i; i<sizeof(SkinData); i++)
{
if(SkinData[i][skinGender] != geneder || SkinData[i][skinFraktion] != fraktion) continue;
format(str,sizeof(str),"r!s_%d",counter++),
SetPVarInt(playerid,str,SkinData[i][skinID]);
}
if(!counter) return -1;
format(str,sizeof(str),"r!s_%d",random(counter));
new final_skin = GetPVarInt(playerid,str);
for(new i=counter-1; i!=-1; i--)
{
format(str,sizeof(str),"r!s_%d",i),
DeletePVar(playerid,str);
}
return final_skin;
}
Alles anzeigen
Beispiel Nutzung:
new skin = GetRandomSkin(playerid, gender, fraktion);
if(skin == -1) return -1; //Fehler, weil kein Skin mit diesen Kriterien gefunden!!
SetPlayerSkin(playerid, skin);
Erklärung wie funktioniert der Code?
Also am Anfang werden 2 Variablen erstellt.
counter dient dazu mit zu zählen, wie viele Skins in Frage kämen mit den passenden Kriterien.
str in dieser Variable wird einfach nur der String gespeichert.
Anschließend kommt die Schleife, wo jeder Skin durchgegangen wird und geprüft wird, ob das Geschlecht & die Fraktion dem Skin entsprechen würden.
Dieser wird anschließend in einem PVar gespeichert und der counter natürlich um 1 hochgezählt.
Ist nach der Schleife der counter 0 wissen wir, dass kein Skin gefunden wurde. (also return -1)
Nun wird aus den Skins, die potentiell in Frage kämen einer zufällig ausgewählt. (und zwischengespeichert)
Anschließend werden alle PVars wieder gelöscht, weil brauchen wir ja jetzt nicht mehr.
Und der finale-Skin wird zurückgegeben
Noch ein Mini Vorschlag:
Nutze stock const anstatt new bei deinen SkinData.
Da das ja quasi keine Variable ist, hier wird nichts mehr verändert (während der Laufzeit), das sind ja alles Konstanten
Deshalb gebe das so an, dann kann der Compiler das besser im Speicher optimieren.
stock const SkinData[MAX_SKIN_DATA][e_SkinData] = {
{2, 1, 0}, {6, 1, 0}, {7, 1, 0}, {15, 1, 0}, {19, 1, 0}, {21, 1, 0}, {22, 1, 0}, {23, 1, 0}, {26, 1, 0}, {29, 1, 0},
{11, 2, 0}, {12, 2, 0}, {13, 2, 0}, {41, 2, 0}, {54, 2, 0}, {55, 2, 0}, {69, 2, 0}, {90, 2, 0}, {93, 2, 0}, {192, 2, 0}
};
Desweiteren brauchst du theoretisch dieses MAX_SKIN_DATA nicht.
Das verwirrt meiner Meinung nach nur irgendwie xD
Schreibe es einfach so:
stock const SkinData[][e_SkinData] = {
{2, 1, 0}, {6, 1, 0}, {7, 1, 0}, {15, 1, 0}, {19, 1, 0}, {21, 1, 0}, {22, 1, 0}, {23, 1, 0}, {26, 1, 0}, {29, 1, 0},
{11, 2, 0}, {12, 2, 0}, {13, 2, 0}, {41, 2, 0}, {54, 2, 0}, {55, 2, 0}, {69, 2, 0}, {90, 2, 0}, {93, 2, 0}, {192, 2, 0}
};
Und wie viele Elemente jetzt im Array sind, kannst du einfach mit:
sizeof(SkinData) abfragen.
Keine Angst, von der Performanz her macht das keinen Unterschied, da das vom Pre-Compiler auch ersetzt wird durch eine konstante Zahl, wie das Makro
Hoffe ich hatte dich richtig verstanden und die Antwort hilft dir weiter!
wen ich auf windows starte hat der kein problem.
Hast du auch die scriptfiles kopiert?
Und hat der Server die Rechte darauf zuzugreifen?
kommt immer diesen fehler(sehe im server log).
Welchen meinst du nun genau?
So wie es aussieht fehlen dir ein paar scriptfiels
Check mal die Beschreibung für das Map-Andreas Plugin und das mSelection Include, was man dafür alles benötigt.
bzw, am besten das ganze noch fuer 3 Sprachen.
Du kannst dafür ein Makro nutzen
Habe mal eins Geschrieben, exakt für 3 Sprachen:
#define SendMessageEx(%0,%1,%2,%3,%4,%5) format(string,sizeof(string),(player_Language[%0]==0)?(%2):(player_Language[%0]==1)?(%3):(%4),%5),SendClientMessage(%0,%1,string)
//Kannst die Sprachen so definieren
enum
{
LANGUAGE_A,
LANGUAGE_B,
LANGUAGE_C
};
//Dann mal ein Beispiel:
player_Language[playerid] = LANGUAGE_A;
new string[128];
SendMessageEx(playerid,-1,"A: %d","B: %d","C: %d",5);
//Output:
//A: 5
Alles anzeigen
Bei LANGUAGE_B würde eben B: 5 ausgegeben werden und bei LANGUAGE_C eben C: 5
In C kannst du wie in Pawn, einfach Funktionen etc in Includes auslagern und diese dann einfach in deine Main-Datei inkludieren und nutzen