Nein, das geht nicht. Die Größe eines Arrays aus einem enum kann nicht ausgelesen werden, außer man deklariert es eben konstant (sowas wie MAX_PLAYERS, oder MEIN_TEXT_LAENGE, ...), dann ließt man aber nur die Konstante aus, und nicht das Element aus dem enum.
Das würde dir hier aber auch nicht viel bringen.
Beiträge von Jeffry
-
-
Wenn es nicht das RCON Admin ist, dann kann ich mir vorstellen, dass du einen Fehler im Code hast, dass zum Beispiel die Admin Variable bei OnPlayerConnect/Disconnect nicht auf 0 gesetzt wird, und der Spieler somit unter Umständen das Level hat, das der Spieler hatte, der zuvor auf dieser playerid war.
-
Wenn du so eine Schleife durch das enum machst, dann fällt mit jedem Index der nächste Buchstabe von vorne eines Strings weg. Das liegt daran, dass ein String lediglich eine Aneinanderreihung von Buchstaben ist.
Hier hast du ein sehr gutes Tutorial dazu: http://forum.sa-mp.com/showthread.php?t=318307
Dort wird das auch beschrieben:
Cenum DATA { INT, //This will get "0" (Remember, starting value) STRING[10], //(This will get 1 but since it's a string, just one block isn't sufficient!) //^ So, the correct numbers will be: 1,2,3,4,5,6,7,8,9,10! Because length of the string is 10! INT2, //This will get the number 11, it comes after STRING[10] which had the last number of 10.. STRING2[10] //And this will start with 12 and end to 22 because it requires 10 spaces. };Und dieses Bild zur Veranschaulichung:

(http://desmond.imageshack.us/H…ename=enum.png&res=medium) -
Wird der Spieler zu einem RCON Admin, oder hat er lediglich ein Admin Level das im Code so erstellt wurde (zum Beispiel Moderator, oder Admin, ...)?
-
Könnest du von dem Problem das du beschrieben hast vielleicht mal ein kurzes Video machen und das posten? Vielleicht lässt sich da etwas erkennen, was auf das Problem rückschließen lässt. Für sowas ist es immer hilfreich, es mal gesehen zu haben.
Je nach dem was sich aus dem Video dann erkennen lässt müsstest du dann wahrscheinlich weiteren Code posten, den wir dann gegebenenfalls mal debuggen müssen, zum schauen, warum das passiert, aber erstmal wäre es gut zu sehen, wie das eigentlich aussieht.
-
Ah, gut, dass du dies herausgefunden hast.
Du greifst in dem Befehl mit der vehicleid auf den Index zu, anstatt mit dem Zähler (i), du hast es praktisch doppelt indiziert.Versuche es so:
C
Alles anzeigenocmd:fcarcolor(playerid,params[]) { new farbe1,farbe2,vid=GetPlayerVehicleID(playerid); if(!DarfPlayerCommand(playerid))return ErrorMsg(playerid,"Du darfst keine Befehle nutzen."); if(!IsPlayerAnAdmin(playerid,5))return ErrorMsg(playerid,"Du bist kein "#SERVERTAG" Teammitglied. /Dein Rang reicht nicht aus."); if(sscanf(params,"ii",farbe1,farbe2))return ErrorMsg(playerid,"Nutze: /fcarcolor [farbe1] [farbe2]"); if(!IsPlayerInAnyVehicle(playerid))return ErrorMsg(playerid,"Du sitzt in keinen Fahrzeug."); if(!isFraktAuto(vid))return ErrorMsg(playerid,"Das Fahrzeug in dem du sitzt gehört keiner Fraktion an."); for(new i=1;i<MAX_AUTOS; i++) { if(FraktAuto[i][id_x]==vid) { if(FraktAuto[i][besitzer]==SpielerInfo[playerid][Frakt]||IsPlayerAnAdmin(playerid,6)) { FraktAuto[i][vfarbe1]=farbe1; FraktAuto[i][vfarbe2]=farbe2; ChangeVehicleColor(FraktAuto[i][id_x],farbe1,farbe2); format(string,sizeof(string),"Du hast die Farbe des %s's geändert.",GetVehicleName(GetVehicleModel(FraktAuto[i][id_x]))); SendClientMessage(playerid,COLOR_GRUEN,string); OneFCarSave(i); return 1; } } } return 1; }
Dann dürfte das passen. -
Möglicherweise liegt es daran, dass du das Objekt sofort wieder erstellst.
Versuche es mal so:C
Alles anzeigenif(hittype == BULLET_HIT_TYPE_PLAYER_OBJECT) { static lastHit[MAX_PLAYERS]; if(lastHit[playerid] + 100 < GetTickCount()) { if(hitid == SkillTrainInfo[playerid][SkillObject]) { lastHit[playerid] = GetTickCount(); if(IsPlayerInRangeOfPoint(playerid,1,300.1365,-134.0314,1004.0625)) { if(weaponid == SkillTrainInfo[playerid][SkillWeapon]) { DestroyPlayerObject(playerid,SkillTrainInfo[playerid][SkillObject]); SkillTrainInfo[playerid][SkillObject] = CreatePlayerObject(playerid,1586,273 + random(13),-142.7 + random(16),1003,0,0,270); SkillTrainInfo[playerid][SkillTCount]++; new Float:x,Float:y,Float:z; GetPlayerPos(playerid,x,y,z); PlayerPlaySound(playerid,1056,x,y,z); } else { SCM(playerid,COLOR_RED,"Du schießt mit der falschen Waffe!"); SetPlayerArmedWeapon(playerid,SkillTrainInfo[playerid][SkillWeapon]); } } else { SCM(playerid,COLOR_RED,"Der Punkt wurde nicht gewertet weil du die Kabine verlassen hast!"); s_SetPlayerPos(playerid,300.1365,-134.0314,1004.0625); SetPlayerFacingAngle(playerid,90); DestroyPlayerObject(playerid,SkillTrainInfo[playerid][SkillObject]); SkillTrainInfo[playerid][SkillObject] = CreatePlayerObject(playerid,1586,273 + random(13),-142.7 + random(16),1003,0,0,270); } } } }
Das würde nur alle 100ms einen Treffer erlauben, gegebenenfalls löst es das Problem, falls es so ist, dass das neu erstellte Objekt immer sofort wieder als getroffen gezählt wurde. -
In den zweiten Parameter, wo bei dir "" steht, tstring schreiben.
-
C
Alles anzeigenstock GetPlayerClosestVehicle(playerid, Float:range) //©Jeffry { new Float:x, Float:y, Float:z, Float:tmp, Float:dist = range , id = -1; for(new i = 0; i < MAX_VEHICLES; i++) { if(GetVehicleModel(i) == 0) continue; GetVehiclePos(i, x, y, z); tmp = GetPlayerDistanceFromPoint(playerid, x, y, z); if(tmp <= dist) { dist = tmp; id = i; } } return id; }Du kannst diesen stock nutzen, um das nächste Fahrzeug herauszufinden:
-
Was heißt "Standardfarbe"?
Steht das so beim Laden in der Datenbank, oder wie kann ich das verstehen?Wenn das Fahrzeug gespeichert wird, steht dann die richtige Farbe in der Datenbank?
Wenn nicht, dann prüfe mal, welche Schritte du machst, vom setzen der Farbe bis dahin wo es falsch wird, und poste in Reihenfolge die Schritte die du machst (Befehle, etc...). -
Ohne das Gleichzeichen, wenn du -- nutzt.
-
Warum willst du das machen? Hat es einen bestimmten Grund?
Weil zu empfehlen ist es generell aus Sicht der Performance nicht.Zu deiner Frage:
SetPVarInt(playerid, "minutes", GetPVarInt(playerid, "minutes")+1); -
Das ist kein Fehler, sondern ist in WBB4 nicht mehr anders möglich.
Entweder ist das Pushen für alle immer an, oder für alle immer aus. Was anderes lässt sich da leider nicht mehr einstellen.Das Team hat sich einige Tage nach der Umstellung dazu entschieden, es für alle immer an zu machen, was ich persönlich gut finde.
-
Jo, die Zahlen war nur von mir geschätzt, dann musst du sie etwas anpassen, so wie es dir dann passt und gefällt.
Kein Problem!
-
Versuche es mal, indem du immer einen Schritt weiter nach hinten gehst. Geht es dann irgendwann? Wenn ja, dann musst du die 6.0 kleiner machen.
-
-
Was steht im Chat wenn du den Befehl eingibst?
-
Wie respawnst du das Fahrzeug (Code) und wie spawnst du es danach wieder (Code) ?
-
-
Du musst den return-Wert nehmen.
So, in dem Teil von dir eingebaut:C
Alles anzeigenOnPlayerTakeDamage... { if(Eingeloggt[playerid] == 1) { new roundAmount = floataround(amount,floataround_ceil); format(string,sizeof(string),"%d amount",roundAmount); //Wird nicht aufgerundet angezeigt ... SpielerHP[playerid] - roundAmount; //Hier auch? Gegebenenfalls wieder rückgängig machen. //Originale HP sind rund und diese eben nicht return 1; ... } return 1; }