Beiträge von Kaliber
-
-
-
Habe gerade iwie ein Kleines Problem.
Nutze doch Arrays, damit kannst du das viel einfacher alles machen:
C
Alles anzeigennew holzTyp[] = { 1, //Fichte 1, //Pappel 1, //Tanne 1, //Eiche 1 //Buche }; new Float:hf_q[] = {0.0, 0.25, 0.5, 0.75, 1.0}; forward Float:GetPreis(playerid, i); stock Float:GetPreis(playerid, i) { new idx = Holzf[playerid][holzf_hladei][i]; new typ = Holzfb[idx][holzfb_typ]; new quali = Holzfb[idx][holzfb_qualitat]; if(typ <= 0 || typ > sizeof(holzTyp)) return 0.0; if(quali < 0 || quali >= sizeof(hf_q)) return 0.0; printf("%.02f * %.02f = %.02f",hf_q[quali],holzTyp[typ-1],floatmul(hf_q[quali], holzTyp[typ-1])); return floatmul(hf_q[quali], holzTyp[typ-1]); }Und dann schau mal aufs print

-
Vielleicht auch mal was abgespacestes wie SA:MP?

-
Ich pushe das mal weil ich immer noch keine Lösung gefunden habe
Mach das am Besten zu einer Funktion:
Cstock GivePlayerHealth(playerid, Float:add) { new Float:h; GetPlayerHealth(playerid, h); return SetPlayerHealth(playerid, h+add); } //Nutzung dann einfach: GivePlayerHealth(playerid, 50.0);Mal kurz eine frage...
Du hast aber keine Plugins in die Server.cfg eingetragen und es scheint, dass ein paar c++ redistributable fehlen

Weiß Jemand warum ?
Timer sind unpräzise. Es kann gut sein, dass der Timer eig viel länger braucht.
Dafür gibt es einen TimerFix oder stell die Animationszeit einfach bissl höher
-
Keine Ahnung von was du da redest, probier es am Besten einfach aus.
-
Würde nicht gehen weil die Werte alphabetisch sotiert werden sollen und das auch mit neu Erstellten
Kannst du doch machen?!
Ich sagte du kannst nur noch die Reihenfolge im Enum ändern, also etwas über Qualität setzten.
Allerdings kannst du unten drunter alles erstellen.
Und zu dem Zeitpunkt wo du das enum speicherst, ist es sortiert und wo du es lädst auch, da verändert sich ja nichts. -
Speichert der die auch einfach so ab und müssen die Werte in einer Reihe sein die bleibt oder kann man auch dynamisch im Nachhinein die Reihenfolge verändern?
Nichts für ungut, aber das kannst du doch in 5 Sekunden mit einem einfachen Befehl testen, wo du das kurz speicherst die Werte einliest ...abfragst und speicherst..abfragst bla blub.
Die Werte im Enum müssen aufjedenfall in einer Reihenfolge bleiben, sprich du kannst nicht plötzlich irgendwas über Qualität setzen oder das oberste Array verdoppeln.
Das führt zu Fehlern, es sei denn du löscht nochmal die gespeicherte Datei und machst das neu, dann ist das egal.
Aber im Array selbst, lädt er genau das in die Array Spalte..was eben gespeichert wurde, kp was genau du jetzt machen willst.
-
Was im doc beschrieben ist wäre ein Klammerfehler.
Nein, wenn du es testest siehst du auch, dass bei deinem Beispiel Error 14 auftaucht.
Hier mal ein Beispiel für den Fehler:
Das geht ohne Probleme, da nur ein Statement auf das case folgt.Jetzt geht das aber nicht mehr, da nur eine Anweisung folgen darf.
Jetzt muss man darum einen Klammerblock machen oder diese durch ein , verbinden
-
Akitas sind cool

-
Und jetzt ist gut. Kindergarten hier.
Klar wer kennt es nicht, man speichert Konstante Strings in Variablen, wäre ja auch zu einfach Konsten für Konsten und Variablen für Variablen zu nutzen.
new Float:diff = ((playerAngle + 180) % 360) - Pos[1];
new Float:diff = (floatround(playerAngle + 180) % 360) - Pos[1];Modulo ist hier nur für Integer definiert, also aus dem Float einfach einen Integer machen.
-
Damit ist diese - mal wieder - völlig sinnfreie Diskussion für mich beendet. Eine direkte Zuweisung ist in diesem expliziten Fall nicht möglich (außer bei exakter Länge). Das kannst du einsehen oder auch nicht. Fakt ist, es geht nicht.
Du weißt doch gar nicht was er zuweisen will, wtf.
Er will sicher keinen statischen Wert zuweisen, sondern etwas aus einer Variable.
Und da kann man das genau so machen:
Cenum tEnum { e_Name[MAX_PLAYER_NAME] //24 Zeichen }; new testArray[MAX_PLAYERS][tEnum]; //Dann da wo er was zuweisen will, was du auch nicht weißt, deshalb hatte ich ihn gefragt... new name[MAX_PLAYER_NAME],x; if(sscanf(params,"sd",name,x)) return Bla(..); testArray[playerid][e_Name] = name; //Man kann das direkt so zuweisenEs kommt halt darauf an, was genau er vor hat.
Da er aber darauf nicht geantwortet hat und du das nicht gefragt hast, kannst du es auch gar nicht wissen.
Klar geht es mit format, strcat, strmid oder what ever. Gibt ja viele Möglichkeiten.
-
Natürlich macht es das.
Ich sagte Deklarations Länge, schau auf mein Beispiel.
Und dabei ist es unerheblich ob da noch n index zwischen ist oder nicht.
Aber ist auch egal, er hat sich ja eh für format entschieden.
-
Ist wieder nicht das gleiche. In deinem Beispiel hat das Array keinen Index für die playerid.
Das macht keinen Unterschied. Geht trotzdem, deshalb.
Es kommt nur auf die Deklarations Größe an.
-
Nicht in dem Fall. Probiere es aus bevor du etwas behauptest.
Ja ich weiß ja nicht mal genau, was er machen will, das hat er ja nicht gesagt, aber prinzipiell kann man das direkt zuweisen.
Cenum pInfo { pFunktionName[MAX_PLAYER_NAME] }; new Spieler[pInfo], b[MAX_PLAYER_NAME] = "Hallo"; Spieler[pFunktionName]=b;Ist ja kein Problem.
-
Das geht nur, wenn deine direkte Zuweisung exakt die Länge MAX_PLAYER_NAME-1 (wegen EOS) hat.
Nein, das geht solange das Array das du zuweisen willst kleiner ist, als das wo es rein soll.
-
auf einen bestimmten string setzen (den ich noch nicht habe)
Du bekommst doch einen Fehler, zeig uns doch einfach mal die Zeile, wie du es bis jetzt machst.
und das new PlayerInfo würde ich gern noch sehenzu:
Das mit dem strcat ist ein richtig schlechter Ratschlag, denn sobald das 2x aufgerufen werden sollte...hat der das 2x da drinnen stehen.
und format ist ultra lahm, wieso nicht einfach durch eine direkte Zuweisung lösen.
Nur in den seltensten Fällen ist format nötig.
-
(16929) : error 047: array sizes do not match, or destination array is too smal
enum pInfo
{ // so sieht der anfang vom enum aus
pFunktionName[MAX_PLAYER_NAME] ( IM ENUM)Habs schon mit n paar größen probiert (512 z.B)
Bitte unterlasse Vollzitate, das ist unnötig.
Desweiteren, zeig doch mal ganz genau wie du die Variable von dem enum deklariert hast und dann wie du den string deklariert hast, den du zuweisen willst und dann wie du es zuweist

Gib doch einfach ein wenig von deinem Code preis...oder sollen wir das alles erraten?!

-
Wie setzte ich einen string auf ein Enum?
So bspw:
PlayerInfo[playerid][pFunktionName] = "fname";
Das kannst du genau so machen...
Falls es nicht geht...zeige uns Code und erkläre was du vor hast
Kann mir jemand erklären weshalb, wieso oder warum ?
Das liegt daran, dass pPlayer immer 0 ist, sobald GetPlayerName aufgerufen wird, da du das vor dem sscanf aufrufst und erst ab dem sscanf aber pPlayer einen Wert zugewiesen bekommt

Die Lösung, einfach GetPlayerName unter das sscanf packen

-
sa-mp.com ist leider down
Dafür gibts doch n Web-Archiv

https://web.archive.org/web/20…ki.sa-mp.com:80/wiki/Keys
Ist ja nicht so, dass es uns an Speicherplatz mangelt
