...du musst natürlich auch über phpmyadmin oder einem ähnlichen Panel deine MySQL Datenbank konfigurieren, dass sie genau dieses Passwort besitzt ![]()
Beiträge von Kaliber
-
-
...der genaue Log wäre natürlich von Vorteil mit einem bla bla kann man nicht wirklich arbeiten xD
Aber ich würde mal vermuten, dass du ein falsches Passwort verwendest bzw gar keins

Setz mal eins oder überprüfe es.
-
Nein, das bedeutet dass du in beiden Arrays die selben IDs hast xD
Irgendwas stimmt da mit deiner Zuweisung nicht

Aber wie gesagt, eigentlich musst du Money pickups nicht extra definieren nur alle anderen

-
Hallo, kann mir jemand verraten warum der 2 Sting nicht an gesendet wird? Im Spiel ist nur eine Leerzeile im Chat dann
Hier, probier mal folgendes:
Cocmd:ooc(playerid,params[]) { if(!IsPlayerGM(playerid,2)) return 1; new string[128]; format(string,sizeof(string),"%s %s hat den OOC Chat %s!", GetGMRang(playerid),getPlayerName(playerid),((OOChat)?("geschlossen"):("geöffnet (/o )"))); SendClientMessageToAll(FARBE_ROT,string); OOChat = !OOChat; return 1; }Da sparste dir einiges

-
Habe ich da was falsch gemacht?
Also 2 Dinge:
1. 0 zu returnen ist nicht gut, da auch das 1. Element im Array mit 0 indexiert ist.
2. mit l und r gibst du die Array Positionen an und nicht die Elemente.
Also deine müsste z.B. so aussehen:
binsearch(MoneyPickups,pickupid,0,sizeof(MoneyPickups)-1);
-
Hier, mach es mal so:
C
Alles anzeigennew mres = binsearch(pickupid,MoneyPickups,sizeof(MoneyPickups)); if(mres != -1) return index=mres,MONEY_TYPE; printf("ID: %d mres: %d",pickupid,mres); //Funktion: stock binsearch(x, v[], n) { new low, high = n-1, mid; while(low < high) { mid = (low + high) / 2; if(x <= v[mid]) high = mid; else low = mid+1; } return (x == v[low]) ? low : -1; } -
Quicksort wäre schneller als Heapsort

Und du müsstest genau dann das Array neu sortieren, wenn sich etwas ändert, also genau unter:
MoneyPickups[index]=-1;
-
Wenn dein Hauptbestandteil aus money Pickups besteht, dann kannst du es smarter machen und brauchst diese gar nicht definieren.
Dann sind die MoneyPickups alle INVALID_PICKUP_TYPE, das funktioniert solange du alle anderen definierst

Dann suchst der nur in den anderen und wenn er es dort nicht findet, weiß er instant, dass es ein money pickup sein muss

Eine Binäre Suche funktioniert leider nur mit geordneten Arrays. Also wenn sie sortiert wären, würde das gehen..sind sie aber hier leider nicht, da ja in der Mitte zum beispeil ein Pickup verschwinden könnte...

//Edit:
Zitatbestimmt 600-700 Zeilen mit einem # inzwischen
Das sind aber ganz schön viele...da könntest du bestimmt etwas vereinfachen

-
Wie wäre es, wenn du das ein bisschen übersichtlicher gestaltest.
Also, es würde funktionieren, wie Pr0x das gezeigt hat, aber nur unter der Vorraussetzung, dass du entweder ActorPickups oder MoneyPickups hast.
Falls noch eine weitere Art Pickup hinzukommt, wird das als money interpretiert...Also hier mal ein kleines Beispiel wie man sowas aufbauen könnte:
C
Alles anzeigen//Hier alle Pickuptypen enum { INVALID_PICKUP_TYPE, MONEY_TYPE, ACTOR_TYPE }; //Hier deine Pickup-Arrays: new money_pickups[100], actor_pickups[50]; //Dann der Callback public OnPlayerPickUpPickup(playerid, pickupid) { new index; switch(GetPickupType(pickupid,index)) { case INVALID_PICKUP_TYPE: { //Wenn es weder Money noch Actor ist...(also nicht definiert) } case MONEY_TYPE: { maxmoney -= 1; GivePlayerMoney(playerid, 1000); printf("ID picked up: %d",maxmoney); //Sehr wichtig, dass du auch das Pickup im Array clearst money_pickups[index]=-1; DestroyPickup(pickupid); } case ACTOR_TYPE: { ShowMenuForPlayer(shopmenu,playerid); TogglePlayerControllable(playerid,false); //Könntest z.B. mit actor_pickups[index] auf das im Array zugreifen } } return 1; } //Und dann die Funktion (ohne Makro) stock GetPickupType(pickupid, &index) { for(new i; i<sizeof(money_pickups); i++) { if(money_pickups[i] == pickupid) return index=i,MONEY_TYPE; } for(new i; i<sizeof(actor_pickups); i++) { if(actor_pickups[i] == pickupid) return index=i,ACTOR_TYPE; } return INVALID_PICKUP_TYPE; } /* Da das immer das selbe im Endeffekt ist, kann man das auch zusammenfassen mit einem Makro und sich so Schreibarbeit sparen: */ #define CheckForPickupType(%0,%1); for(new i; i<sizeof(%0); i++) if(%0[i] == pickupid) return index=i,%1; stock GetPickupType(pickupid, &index) { CheckForPickupType(money_pickups,MONEY_TYPE); CheckForPickupType(actor_pickups,ACTOR_TYPE); return INVALID_PICKUP_TYPE; }Nur so als Anregung bzw Idee, damit du es übersichtlicher hast
Musst halt auch schauen, dass du im Callback immer das Richtige Array verwendest, welches du unten angibst, da sich daran der Index anpasst
//Edit:
Parameter übergibst du mit SetTimerEx //Wiki Code buggt.lelvolatile existiert in Pawn nicht, da das alles in einer VM ausgeführt wird und nicht direkt auf der Hardware.
-
printf gibt immer aus dass die Pickupids 1, 2,3,4,5 sind, bei einer sizeof(GlobalActors) von 5, egal was ich als pickupid in die Funktion gebe
Das liegt daran, dass du pickupids nicht setzen kannst, sondern sie werden zugewiesen...
Wie vehicleids / objectids / actorids auch, werden vom Server erstellt

Aber schau nochmal in meinen Code...hab doch gezeigt wie du es machen musst

-
Ich weiß um ehrlich zu sein nicht was die Schleife da oben genau soll
Na..stellen wir uns mal folgendes vor, wir haben folgendes Array:
[1,2,3,-1,-1,-1,-1]
Dann ist der letzte Eintrag ja nicht -1, sondern 3...
Ich dachte, wir reden hier von einem Array welches nicht voll gefüllt ist, wenn natürlich das Element immer auf einem statischen Feld ist..ist das ja trivial und du kannst es natürlich mit array[sizeof(array)-1] lösen..
-
Das mit den Pickups musst du leider z.B. so machen:
C
Alles anzeigen//global new money[95],money_zähler; //Wenn sie erstellt werden //Musst natürlich beachten dass es nicht mehr sind als 95 money[money_zähler++] = CreatePickup(...); //OnPlayerPickUpPickup for(new i; i<sizeof(money); i++) { if(money[i] == pickupid) { DestroyPickup(money[i]); money[i] = -1; return 1; } }Ist es ausserdem Moeglich, irgendwie aus einem Array immer die letzte Zeile im Array auszulesen?
Das ist gar nicht so leicht.
Es geht mit invaliden Werten und wenn du immer das Array sortierst bzw keine leeren Felder drinnen hast. -
Hier mal ein Beispiel:
C
Alles anzeigen#define TEAM_1_TAG "VIOLETT" #define TEAM_2_TAG "YELLOW" #define TEAM_3_TAG "BROWN" #define TEAM_4_TAG "LIME" #define TEAM_1_PRE_HEX 610D96 #define TEAM_2_PRE_HEX FFFF00 #define TEAM_3_PRE_HEX 8B4513 #define TEAM_4_PRE_HEX 2EFF31 #define TEAM_1_HEX 0x610D9655 #define TEAM_2_HEX 0xFFFF0055 #define TEAM_3_HEX 0x8B451355 #define TEAM_4_HEX 0x2EFF3155 #define TEAM_1_DRAW "~b~~h~~h~" #define TEAM_2_DRAW "~y~~h~~h~" #define TEAM_3_DRAW "~x~" #define TEAM_4_DRAW "~g~~h~~h~" #define TEAM_CODE(%0) "{"#TEAM_%0_PRE_HEX#"}"#TEAM_%0_TAG #define TEAM_DRAW(%0) TEAM_%0_DRAW#TEAM_%0_TAG #define TEAM_COLOR(%0) TEAM_%0_HEX //Anwendung: print("Willkommen im Team: "#TEAM_DRAW(1)); ->Out: Willkommen im Team: ~b~~h~~h~VIOLETT print("Oder in einer ClientMessage: "#TEAM_CODE(1)); ->Out: Oder in einer ClientMessage: {610D96}VIOLETT SendClientMessage(0,TEAM_COLOR(1),"Hallo"); ->Farbe: ViolettHoffe ich konnte dir bisschen zeigen, was man da so alles anstellen kann

-
Also mal als erstes, wenn du schon Makros nutzt, dann pack sie statisch rein, da brauchst keine extra Funktionen und auch keine Variablen:
CPlayerTextDrawSetString(playerid, TeamText[playerid], "Team: "#FIRST_TEAM_COLOR_TAG); PlayerTextDrawShow(playerid,TeamText[playerid]); PlayerTextDrawSetString(playerid, LocText[playerid], "Location: "#FIRST_TEAM_LOCATION); PlayerTextDrawShow(playerid,LocText[playerid]);Der Grund aber, wieso das in SendClientMessage Funktioniert, aber nicht mit TextDraws oder GameTexten liegt daran, dass es dort diese Color codes mit den Klammern {FFFFFF} nicht gibt!
Schau mal hier:
http://wiki.sa-mp.com/wiki/Colors_List#GameTextWenn da musst du eben sowas verwenden:
#define FIRST_TEAM_COLOR_TAG "~b~~h~~h~VIOLETT"
#grammar nazi
Es heißt violett, nicht
violet
-
Wie sieht denn dein Code nu aus?

-
Du brauchst den String nicht formatieren, wenn es eine Konstante ist...
#define FIRST_TEAM_COLOR_TAG "{610D96}VIOLET"SendClientMessage(playerid, -1, FIRST_TEAM_COLOR_TAG);
Es reicht hier sowas...du musst dir einfach vorstelle, dass das Makro 1zu1 vom Compiler übersetzt wird...und das sieht ja nicht wirklich gut aus:SendClientMessage(playerid, -1, ""#"{610D96}VIOLET""");
Ich meine gut, könnte sogar compilen...aber nunja e^pi*i ist auch -1...aber deshalb muss man es ja nicht hinschreiben xD
-
Das ist nicht ZCMD, sondern iZCMD..und wie man sieht, ist es instabil, was mich nicht wundert, wenn ich mal so über den Code schaue xD
Benutz einfach den normalen ZCMD...xD
-
Poste mal das Include

-
Das liegt wahrscheinlich an dem "CMD-Prozessor".
Eventuell mal die neuste Version downloaden

-
In Zeile 3 hast du ein Semikolon ; am Ende vergessen.
und in Zeile 5 schreib das mal so (sry hatte noch das Referenz Muster im Kopf, aber das ja nur bei strings in pawn)
anzahl = db_get_field_int(db_result,0);