Beiträge von Jeffry

    Ah, ok, dann meinst du es so?
    ocmd:torauf(playerid,params[])
    {
    if(IsPlayerInRangeOfPoint(playerid, 10.0, 3193.15967, -328.29831, 9.13039)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist nicht nahe dem Tor.");
    if(SpielerInfo[playerid][pFraktion] != 1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist nicht in der Fraktion."); //ANPASSEN!
    if(saedtorstatus) return SendClientMessage(playerid,blau,"Error: Das Tor ist bereits offen");
    MoveDynamicObject(saedtor,3193.15967, -328.29831, 9.13039,5.0,0.00000, 0.00000, 90.00000);
    SendClientMessage(playerid,blau,"SAED Tor wurde geöffnet!");
    SetTimerEx("saedtorzu_timer",5000,false,"d",playerid);
    saedtorstatus = true;
    return 1;
    }


    Beachte, dass du die Fraktionsabfrage anpassen musst, an deine Variablenbezeichnung.

    Irgendein Spieler, oder nur der Spieler, der den Befehl eingibt?
    Soll es sich automatisch öffnen, wenn ein Spieler in die Nähe kommt, und wenn keiner mehr da ist, schließt es sich wieder?

    Ich nehme als Beispiel einfach diese Objekt, da machst du es dann so:


    Unter den Includes:
    new myGate;
    new bool:myGateStatus;


    Bei OnGameModeInit:
    CreateDynamicObject(980, 3193.15967, -328.29831, 9.13039, 0.00000, 0.00000, 90.00000);
    zu:
    myGate = CreateDynamicObject(980, 3193.15967, -328.29831, 9.13039, 0.00000, 0.00000, 90.00000);


    Und der Befehl so:
    ocmd:saedtorauf(playerid,params[])
    {
    if(myGateStatus) return SendClientMessage(playerid, 0xFF0000FF, "Error: Das Tor ist bereits offen.");
    MoveDynamicObject(myGate,3193.15967, -328.29831, 3.16775, 5.0, 0.00000, 0.00000, 90.00000);
    SendClientMessage(playerid,blau,"SAED Tor Wurde geöffnet!");
    SetTimerEx("saedtorzu_timer", 5000, false, "d", playerid);
    myGateStatus = true;
    return 1;
    }


    Und der Timer:
    forward saedtorzu_timer(playerid);
    public saedtorzu_timer(playerid);
    {
    MoveDynamicObject(myGate,3193.15967, -328.29831, 9.13039, 5.0, 0.00000, 0.00000, 90.00000);
    SendClientMessage(playerid,blau,"SAED Tor Wurde geschlossen!");
    myGateStatus = false;
    return 1;
    }

    Das kann so nicht funktioniert haben, da du jedes mal ein neues Objekt erstellst, an der Zu-Position.
    Außerdem hast du MoveObject anstatt MoveDynamicObject verwendet und die Koordinate beim Schließen-Befehl hat nicht gepasst (war bei Z auch 3 anstatt 9).


    Wenn es mal geklappt hat, dann war das bestimmt anders, denn wenn du jedes mal das Objekt neu erstellst, kann es nicht klappen, dann hast du an der Stelle irgendwann 1000x das gleiche Objekt. ;)

    Du musst es so machen:


    Unter den Includes:
    new myGate;


    Bei OnGameModeInit:
    CreateDynamicObject(980, 3193.15967, -328.29831, 9.13039, 0.00000, 0.00000, 90.00000);
    zu:
    myGate = CreateDynamicObject(980, 3193.15967, -328.29831, 9.13039, 0.00000, 0.00000, 90.00000);


    Und die Befehle so:
    ocmd:saedtorauf(playerid,params[])
    {
    MoveDynamicObject(myGate,3193.15967, -328.29831, 3.16775, 5.0, 0.00000, 0.00000, 90.00000);
    SendClientMessage(playerid,blau,"SAED Tor Wurde geöffnet!");
    return 1;
    }
    ocmd:saedtorzu(playerid,params[])
    {
    MoveDynamicObject(myGate,3193.15967, -328.29831, 9.13039, 5.0, 0.00000, 0.00000, 90.00000);
    SendClientMessage(playerid,blau,"SAED Tor Wurde geschlossen!");
    return 1;
    }

    SendClientMessage kann keine Zeilenumbrüche verarbeiten, man muss jede Nachricht einzeln senden.
    ocmd:members(playerid,params[])
    {
    new string[145],sendername[MAX_PLAYER_NAME];
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Fraktions Member Online:");
    if(Spieler[playerid][Team] >= 1)
    {
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && Spieler[playerid][Team] == Spieler[i][Team])
    {
    GetPlayerName(i,sendername,sizeof(sendername));
    format(string,sizeof(string),"%s [Rang: %d]",sendername,Spieler[i][Rank]);
    SendClientMessage(playerid,Grau,string);
    }
    }
    }
    return 1;
    }


    Man könnte die Namen höchstens nebeneinander schreiben, das sieht aber meistens unschön aus.
    Im Dialog macht es aber am meisten Sinn:
    ocmd:members(playerid,params[])
    {
    new string[512],sendername[MAX_PLAYER_NAME];
    if(Spieler[playerid][Team] >= 1)
    {
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && Spieler[playerid][Team] == Spieler[i][Team])
    {
    GetPlayerName(i,sendername,sizeof(sendername));
    format(string,sizeof(string),"%s%s [Rang: %d]\n",string,sendername,Spieler[i][Rank]);
    }
    }
    }
    ShowPlayerDialog(playerid, DIALOG_MEMBERS, DIALOG_STYLE_MSGBOX, "Fraktions Member Online:", string, "Ok", "");
    return 1;
    }

    Lasse dir mal ausgeben, was in den Variablen steht. Außerdem musst du prüfen ob inputtext nicht leer ist.
    printf("Name: %s / inputtext: %s", Spieler[playerid][pNutzer],inputtext);
    if(!strcmp(Spieler[playerid][pNutzer],inputtext,true) && strlen(inputtext))


    Möglicherweise fehlt im enum bei pNutzer das Array von MAX_PLAYER_NAME.

    Scheint mir als steht bei den cache_get_field_content_int noch das i im ersten Parameter, anstatt der 0.
    Ersetze das "i" im ersten Parameter mit der "0" (jeweils ohne Anführungszeichen).

    Super, dass du es so selbst lösen konntest!

    es lag nicht am "FROM" (denke ich :D)

    Yup. SQL Anweisungen sind nicht case-Sensitive, man kann sie schreiben wie man will.


    Sowas hier geht auch:

    SQL
    sElEcT * frOM `tabELle` WHeRe `sPaLTe` = '1';

    Das gibt trotzdem das Richtige aus - kann halt kein Mensch mehr gescheit lesen.

    Das Objekt sitzt etwas zu tief.
    So klappt es bei mir:

    new LSPDstr1 = CreateObject(4163, 1469.51, -1732.19, 12.48, 0.00, 0.00, 0.00);
    SetObjectMaterial(LSPDstr1,3,6322,"law2_roadsb","rodeo3sjm",0);

    Lass dir das qDone mal per print ausgeben, ob da überhaupt was drin steht:
    printf("qDone: %s", qDone);



    Dann kannst du ja mal manuell vergleichen, ob der String gefunden werden kann.



    Übrigens, setze das Query und das Auslesen des Caches aus der Schleife raus, du brauchst ja nicht 4x das gleiche Query ausführen.

    Das ist mir unerklärlich, es stimmt eigentlich alles.
    Hast du denn irgendwo auf dem Server noch anderen 3D Labels, die du siehst? Wenn nein, versuche mal auf einem leeren Server eines zu erstellen, und schau ob du das siehst. Nicht dass es am Ende an deinem Spiel liegt, dass es nicht geht, und es andere aber sehen.



    PS: Ich bin ab morgen im Urlaub und werde dir erst danach wieder antworten können. Was ich dir anbieten kann ist, wenn du es nicht bis dahin gelöst bekommst, dass du mir den Code komplett mal schickst (in PN) und ich es bei mir teste, wenn ich aus dem Urlaub wieder zu Hause bin.



    EDIT:
    Wie blind man doch sein kann, wenn man glaubt, alles passt. Tatsächlich hat bei dem Text Label die Draw-Distance gefehlt, somit war diese auf 0. Unglaublich, dass mir das nicht aufgefallen ist.
    Immerhin ein Trost, das hat das Problem auch nicht gelöst, sondern der Code musste etwas angepasst werden, um korrekt zu funktionieren.


    Zum einen das hier so:
    case QueryCallHouse:
    {
    cache_get_data(rows,fields);
    if(rows) {
    oldtime=GetTickCount();
    new ho;
    for(;ho<rows;ho++) {
    //if(ho==0){ho++;}
    cache_get_field_content(ho,"ID",result);
    HausInfo[ho][hID] = strval(result);
    cache_get_field_content(ho,"PosX",result);
    HausInfo[ho][hPosX] = floatstr(result);
    cache_get_field_content(ho,"PosY",result);
    HausInfo[ho][hPosY] = floatstr(result);
    cache_get_field_content(ho,"PosZ",result);
    HausInfo[ho][hPosZ] = floatstr(result);
    cache_get_field_content(ho,"Level",result);
    HausInfo[ho][hLevel] = strval(result);
    cache_get_field_content(ho,"Preis",result);
    HausInfo[ho][hPreis] = strval(result);
    cache_get_field_content(ho,"Besitzer",result);
    format(HausInfo[ho][hBesitzer],24,"%s",result);
    cache_get_field_content(ho,"Bought",result);
    HausInfo[ho][hBought] = strval(result);
    cache_get_field_content(ho,"Rooms",result);
    HausInfo[ho][hRooms] = strval(result);
    cache_get_field_content(ho,"InteriorID",result);
    HausInfo[ho][hInteriorID] = strval(result);
    cache_get_field_content(ho,"Interior",result);
    HausInfo[ho][hInterior] = strval(result);
    cache_get_field_content(ho,"IntX",result);
    HausInfo[ho][hIntX] = floatstr(result);
    cache_get_field_content(ho,"IntY",result);
    HausInfo[ho][hIntY] = floatstr(result);
    cache_get_field_content(ho,"IntZ",result);
    HausInfo[ho][hIntZ] = floatstr(result);
    cache_get_field_content(ho,"Locked",result);
    HausInfo[ho][hLocked] = strval(result);
    cache_get_field_content(ho,"Rentable",result);
    HausInfo[ho][hRentable] = strval(result);
    cache_get_field_content(ho,"RentPrice",result);
    HausInfo[ho][hRentPrice] = strval(result);
    cache_get_field_content(ho,"Renter1",result);
    format(HausInfo[ho][hRenter1],24,"%s",result);
    cache_get_field_content(ho,"Renter2",result);
    format(HausInfo[ho][hRenter2],24,"%s",result);
    cache_get_field_content(ho,"Renter3",result);
    format(HausInfo[ho][hRenter3],24,"%s",result);
    cache_get_field_content(ho,"Renter4",result);
    format(HausInfo[ho][hRenter4],24,"%s",result);
    cache_get_field_content(ho,"Renter5",result);
    format(HausInfo[ho][hRenter5],24,"%s",result);
    cache_get_field_content(ho,"Renter6",result);
    format(HausInfo[ho][hRenter6],24,"%s",result);
    HausInfo[ho][hVW] = HausInfo[ho][hID]+1;
    HausInfo[ho][hOutPickup] = CreatePickup(1318,1,HausInfo[ho][hIntX],HausInfo[ho][hIntY],HausInfo[ho][hIntZ],0);
    if(HausInfo[ho][hBought] == 0) {
    HausInfo[ho][hPickup] = CreatePickup(1272,1,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ]);
    format(str,256,"Hausnummer %d\nDieses Haus ist zu verkaufen!\nPreis: %s€\nLevel: %d\nMieträume: %d\nHaus besichtigen: ~k~~VEHICLE_ENTER_EXIT~ drücken\nHaus kaufen: /buy",ho,inspoints(HausInfo[ho][hPreis]),HausInfo[ho][hLevel],HausInfo[ho][hRooms]);
    } else {
    if(HausInfo[ho][hRentable] == 1) {
    format(str,256,"Hausnummer %d\nBesitzer: %s\nMietpreis: %s€\nZimmer mieten - /rentroom",ho,HausInfo[ho][hBesitzer],inspoints(HausInfo[ho][hRentPrice]));
    } else if(HausInfo[ho][hRentable] == 0) {
    format(str,256,"Hausnummer %d\nBesitzer: %s",ho,HausInfo[ho][hBesitzer]);
    }
    HausInfo[ho][hPickup] = CreatePickup(1239,1,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ]);
    }
    HausInfo[ho][hLabel]=Create3DTextLabel(str,COLOR_AO,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ],5,0,1);
    printf("ho: %d / Erstellte Label ID: %d", ho, _:HausInfo[ho][hLabel]);
    printf("Label Details: Color: %d / Pos: %f / %f / %f => 0, 1", COLOR_AO,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ]);
    printf("Label Text: %s |ENDE", str);
    HausInfo[ho][hOutLabel]=Create3DTextLabel("Austreten:\n~k~~VEHICLE_ENTER_EXIT~ drücken",COLOR_AO,HausInfo[ho][hIntX],HausInfo[ho][hIntY],HausInfo[ho][hIntZ],5,HausInfo[ho][hVW],1);
    HausInfo[ho][hCreated]=true;
    }
    printf("<-| [MYSQL-LOAD] Es wurden %d Häuser geladen - Dauer: %dms",ho,GetTickCount()-oldtime);
    }
    }


    Und zum anderen das hier so:
    case QueryCallLoadHouse:
    {
    cache_get_data(rows,fields);
    if(rows) {
    new ho = cache_get_field_content_int(0, "ID");
    //if(ho==0){ho++;}
    cache_get_field_content(0,"ID",result);
    HausInfo[ho][hID] = strval(result);
    cache_get_field_content(0,"PosX",result);
    HausInfo[ho][hPosX] = floatstr(result);
    cache_get_field_content(0,"PosY",result);
    HausInfo[ho][hPosY] = floatstr(result);
    cache_get_field_content(0,"PosZ",result);
    HausInfo[ho][hPosZ] = floatstr(result);
    cache_get_field_content(0,"Level",result);
    HausInfo[ho][hLevel] = strval(result);
    cache_get_field_content(0,"Preis",result);
    HausInfo[ho][hPreis] = strval(result);
    cache_get_field_content(0,"Besitzer",result);
    format(HausInfo[ho][hBesitzer],24,"%s",result);
    cache_get_field_content(0,"Bought",result);
    HausInfo[ho][hBought] = strval(result);
    cache_get_field_content(0,"Rooms",result);
    HausInfo[ho][hRooms] = strval(result);
    cache_get_field_content(0,"InteriorID",result);
    HausInfo[ho][hInteriorID] = strval(result);
    cache_get_field_content(0,"Interior",result);
    HausInfo[ho][hInterior] = strval(result);
    cache_get_field_content(0,"IntX",result);
    HausInfo[ho][hIntX] = floatstr(result);
    cache_get_field_content(0,"IntY",result);
    HausInfo[ho][hIntY] = floatstr(result);
    cache_get_field_content(0,"IntZ",result);
    HausInfo[ho][hIntZ] = floatstr(result);
    cache_get_field_content(0,"Locked",result);
    HausInfo[ho][hLocked] = strval(result);
    cache_get_field_content(0,"Rentable",result);
    HausInfo[ho][hRentable] = strval(result);
    cache_get_field_content(0,"RentPrice",result);
    HausInfo[ho][hRentPrice] = strval(result);
    cache_get_field_content(0,"Renter1",result);
    format(HausInfo[ho][hRenter1],24,"%s",result);
    cache_get_field_content(0,"Renter2",result);
    format(HausInfo[ho][hRenter2],24,"%s",result);
    cache_get_field_content(0,"Renter3",result);
    format(HausInfo[ho][hRenter3],24,"%s",result);
    cache_get_field_content(0,"Renter4",result);
    format(HausInfo[ho][hRenter4],24,"%s",result);
    cache_get_field_content(0,"Renter5",result);
    format(HausInfo[ho][hRenter5],24,"%s",result);
    cache_get_field_content(0,"Renter6",result);
    format(HausInfo[ho][hRenter6],24,"%s",result);
    HausInfo[ho][hVW] = HausInfo[ho][hID]+1;
    HausInfo[ho][hOutPickup] = CreatePickup(1318,1,HausInfo[ho][hIntX],HausInfo[ho][hIntY],HausInfo[ho][hIntZ],0);
    if(HausInfo[ho][hBought] == 0) {
    HausInfo[ho][hPickup] = CreatePickup(1272,1,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ]);
    format(str,256,"Hausnummer %d\nDieses Haus ist zu verkaufen!\nPreis: %s€\nLevel: %d\nMieträume: %d\nHaus besichtigen: ~k~~VEHICLE_ENTER_EXIT~ drücken\nHaus kaufen: /buy",ho,inspoints(HausInfo[ho][hPreis]),HausInfo[ho][hLevel],HausInfo[ho][hRooms]);
    } else {
    if(HausInfo[ho][hRentable] == 1) {
    format(str,256,"Hausnummer %d\nBesitzer: %s\nMietpreis: %s€\nZimmer mieten - /rentroom",ho,HausInfo[ho][hBesitzer],inspoints(HausInfo[ho][hRentPrice]));
    } else if(HausInfo[ho][hRentable] == 0) {
    format(str,256,"Hausnummer %d\nBesitzer: %s",ho,HausInfo[ho][hBesitzer]);
    }
    HausInfo[ho][hPickup] = CreatePickup(1239,1,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ]);
    }
    HausInfo[ho][hLabel]=Create3DTextLabel(str,COLOR_AO,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ],5,0,1);
    printf("ho: %d / Erstellte Label ID: %d", ho, _:HausInfo[ho][hLabel]);
    printf("Label Details: Color: %d / Pos: %f / %f / %f => 0, 1", COLOR_AO,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ]);
    printf("Label Text: %s |ENDE", str);
    HausInfo[ho][hOutLabel]=Create3DTextLabel("Austreten:\n~k~~VEHICLE_ENTER_EXIT~ drücken",COLOR_AO,HausInfo[ho][hIntX],HausInfo[ho][hIntY],HausInfo[ho][hIntZ],5,HausInfo[ho][hVW],1);
    HausInfo[ho][hCreated]=true;
    }
    }



    Dann klappt mit den Text Labels - endlich - alles.

    Was wird dir ausgegeben, wenn du das Query printest?
    format(query,sizeof query,"UPDATE `user` SET `waffe%d`='%d' ,`munition%d`='%d' WHERE id='%d'",i ,pWaffen[i][0],i,pWaffen[i][1],sInfo[playerid][db_id]);
    print(query);

    Irgendwie ist der Code ziemlich durcheinander und gibt für mich keinen Sinn, vor allem mit der Schleife, da immer nur der Index 0 ausgeführt werden kann.
    Teste es mal so:
    new Weizenzahl[MAX_PLAYERS];
    public farmtimer(playerid)
    {
    if(IsPlayerInArea(playerid,-1191.2891,-1060.6648,-1007.6477,-930.9543))
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SetTimerEx("farmtimer",1500,false,"i",playerid);
    if(GetVehicleSpeed(GetPlayerVehicleID(playerid)) == 0) return SetTimerEx("farmtimer",1500,false,"i",playerid);
    if(farminfo[playerid][farmteil] == 1)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 531) return SetTimerEx("farmtimer",1500,false,"i",playerid);
    if(Weizenzahl[playerid] != sizeof(Weizen))
    {
    new Float:z, w = Weizenzahl[playerid];
    GetPlayerPos(playerid,Weizen[w][w_X],Weizen[w][w_Y],z);
    Weizen[w][w_Z] = 123.200;
    Weizen[w][w_Objekt] = CreatePlayerObject(playerid,855,Weizen[w][w_X],Weizen[w][w_Y],123.200,0.0, 0.0, 0.0);
    Weizen[w][w_besitzer] = playerid;
    Weizenzahl[playerid] ++;
    SetTimerEx("UpdateWeizen", 1000, false,"ii",playerid,w);
    SetTimerEx("farmtimer",1500,false,"i",playerid);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du kannst jetze das Weizen ernten!");
    farminfo[playerid][farmteil] = 2;
    Jobc[GetPlayerVehicleID(playerid)][Playerid] = -1;
    farmtruck[playerid] = -1;
    new string[50];
    format(string,sizeof(string),"Ernte das Weizen~n~Farmteil 2");
    PlayerTextDrawSetString(playerid,Job1[playerid], string);
    Weizenzahl[playerid] = 0;
    return SetTimerEx("farmtimer",1500,false,"i",playerid);
    }
    }
    if(farminfo[playerid][farmteil] == 2)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 532) return SetTimerEx("farmtimer",1500,false,"i",playerid);
    new w = IsPlayerInRangeOfPflanzen(playerid);
    if(w == -1) SetTimerEx("farmtimer",1500,false,"i",playerid);
    if(IsValidPlayerObject(playerid,Weizen[w][w_Objekt]))
    {
    if(fahrweizen[GetPlayerVehicleID(playerid)] >= 5000) return SetTimerEx("farmtimer",1500,false,"i",playerid);
    if(GetVehicleSpeed(GetPlayerVehicleID(playerid)) > 25)
    {
    SendClientMessage(playerid,ROT,"Du bist zu Schnell! Max: 25 Km/h");
    return SetTimerEx("farmtimer",1500,false,"i",playerid);
    }
    }
    DestroyPlayerObject(playerid,Weizen[w][w_Objekt]);
    Weizen[w][w_Objekt] = -1;
    new kg = RandomEx(10,60);
    fahrweizen[GetPlayerVehicleID(playerid)] += kg;
    new string[50];
    format(string,sizeof(string),"Ernte das Getreide~n~%d/5000 Kg",fahrweizen[GetPlayerVehicleID(playerid)]);
    PlayerTextDrawSetString(playerid,Job1[playerid], string);
    if(fahrweizen[GetPlayerVehicleID(playerid)] >= 5000)
    {
    fahrweizen[GetPlayerVehicleID(playerid)] = 5000;
    format(string,sizeof(string),"Leere dein M\145;hdrescher~n~%d/5000 Kg",fahrweizen[GetPlayerVehicleID(playerid)]);
    PlayerTextDrawSetString(playerid,Job1[playerid], string);
    }
    if(alleweizenweg())
    {
    format(string,sizeof(string),"Leere dein M\145;hdrescher~n~%d/5000 Kg",fahrweizen[GetPlayerVehicleID(playerid)]);
    PlayerTextDrawSetString(playerid,Job1[playerid], string);
    farminfo[playerid][farmteil] = 3;
    }
    return SetTimerEx("farmtimer",1500,false,"i",playerid);
    }
    }
    SetTimerEx("farmtimer",1500,false,"i",playerid);
    return SendClientMessage(playerid,ROT,"Du musst auf dem Feld bleiben!");
    }

    Das dauerhafte Auslesen der Zeile 0 im Cache war schon korrekt, da du ja nur eine Result-Zeile aus deinem Query bekommst, von dem du den Cache ausliest. Mache diese Änderung also wieder rückgängig.


    Wo wird denn dieser Code ausgeführt? Beim Login? Bist du da schon gespawnt? Wenn nicht, dann sind die Waffen mit dem Spawn nämlich wieder weg.


    Lass dir doch mal per print die Werte ausgeben, die geladen werden:
    printf("Waffe: %d, Ammo: %d", pWaffenID[i],pAmmu[i]);


    Was wird so ausgegeben?
    Wenn die Werte stimmen, dann liegt es wie gesagt daran, dass du die Waffe zwar bekommst, die aber dann nicht mehr hast. In dem Fall musst du die Werte in eine Spielervariable (oder Array) speichern, und sie bei OnPlayerSpawn auslesen, und dort die Waffen geben.