OnPlayerPickUpPickup wird nicht aufgerufen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i = 0;i<_cache_weps;i++)
    {
    if(pickupid == WeapData[i][WepPickupID])
    {
    if(pInfo[playerid][gTeam] == WeapData[i][WepFrakID])
    {
    GivePlayerWeapon(playerid,WeapData[i][WepaID],5000);
    printf("%s - Ja",WeapData[i][WepFrakID]);
    }else{
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Mitglied!");
    }
    }
    break;
    printf("[%i] - [%i]",i,_cache_weps);
    }
    return 1;
    }


    Doch ausgeben tut er nichts wenn ich ins Pickup (WeapData[_cache_weps][WepPickupID] = CreateDynamicPickup(1239,2,ppX,ppY,ppZ);) laufe.

  • Danke. Jetzt steht da aber


    [0] - [1]


    EDIT:


    Wenn ich das Eintrage:


    printf("[%i] - [%i]",i,_cache_weps);
    printf("[%i] - [%i]",pickupid,WeapData[i][WepPickupID]);


    steht in der Console:


    [121] - [5]


    Warum wird die PickupID nicht richtig gespeichert?


    EDIT:


    Egal was ich mache es geht nicht.. Kann mir bitte jmd. mal helfen :(?

    2 Mal editiert, zuletzt von GooMan ()

  • Das break ist auch falsch.Nach dem ersten durchlauf der Schleife wird sie durch das break beendet.Du hast das break im falschen Level, es müsste im folgenden Block sein:
    if(pickupid == WeapData[i][WepPickupID])
    {
    //
    break;
    }
    Bei dir ist es
    if(pickupid == WeapData[i][WepPickupID])
    {
    //
    }
    break;

  • for(new i = 0;i<_cache_weps;i++)
    {
    if(pickupid == WeapData[i][WepPickupID])
    {
    if(pInfo[playerid][gTeam] == WeapData[i][WepFrakID])
    {
    GivePlayerWeapon(playerid,WeapData[i][WepaID],5000);
    printf("%s - Ja",WeapData[i][WepFrakID]);
    break;
    }else{
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Mitglied!");
    }
    }
    printf("[%i] - [%i]",pickupid,WeapData[i][WepPickupID]);
    printf("[%i] - [%i]",i,_cache_weps);
    }


    EDIT:


    Falsches Script eingefügt XD


    EDIT:


    Edit vergessen XD

    Einmal editiert, zuletzt von GooMan ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • WeapData[_cache_weps][WepPickupID] = CreateDynamicPickup(1239,2,ppX,ppY,ppZ);


    LoadWeaps:
    WeapData[_cache_weps][WepPickupID] = CreateDynamicPickup(WeapData[_cache_weps][WepModelID],2,WeapData[_cache_weps][WepX],WeapData[_cache_weps][WepY],WeapData[_cache_weps][WepZ]);


    EDIT:


    Das sind die Erstellten Pickups.. Aber ich finde dort keinen fehler...

    Einmal editiert, zuletzt von GooMan ()

  • Immer nur [0] - [1] und das 5x

    kann eigentlich nicht sein, da du in der Schleife 2 Print's drin hast. Also müßte er 6 Print's ausgeben.


    Übrigens:


    WeapData[_cache_weps][WepPickupID] = CreateDynamicPickup(1239,2,ppX,ppY,ppZ);
    WeapData[_cache_weps][WepPickupID] = CreateDynamicPickup(WeapData[_cache_weps][WepModelID],2,WeapData[_cache_weps][WepX],WeapData[_cache_weps][WepY],WeapData[_cache_weps][WepZ]);


    Dein Fehler ist hier einfach, daß du _cache_weps (was ja 5 entspricht bei dir) da drin hast.
    Du weißt also immer den letzten Array den Wert von CreateDynamicPickup zu. Richtig wäre demnach:


    WeapData[0][WepPickupID] = CreateDynamicPickup(1239,2,ppX,ppY,ppZ);
    WeapData[1][WepPickupID] = CreateDynamicPickup(WeapData[_cache_weps][WepModelID],2,WeapData[_cache_weps][WepX],WeapData[_cache_weps][WepY],WeapData[_cache_weps][WepZ]);


    im übrigen versteh ich nicht, wieso du ein Doppelarray für die Pickups verwendest.


    Probiers mal so:



    WeapData[0] = CreateDynamicPickup(1239,2,ppX,ppY,ppZ);
    WeapData[1] = CreateDynamicPickup(WeapData[_cache_weps][WepModelID],2,WeapData[_cache_weps][WepX],WeapData[_cache_weps][WepY],WeapData[_cache_weps][WepZ]);


    bei

    Public OnPlayerPickupPickup(playerid,pickupid)
    {
    for(new i = 0;i<_cache_weps;i++)
    {
    if(pickupid == WeapData[i])
    {
    if(pInfo[playerid][gTeam] == WeapData[i][WepFrakID])
    {
    GivePlayerWeapon(playerid,WeapData[i][WepaID],5000);
    printf("%s - Ja",WeapData[i][WepFrakID]);
    break;
    }else{
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Mitglied!");
    }
    }
    printf("[%i] - [%i]",pickupid,WeapData[i][WepPickupID]);
    printf("[%i] - [%i]",i,_cache_weps);
    }
    return 1;
    }


    Ein doppelter Array macht hier eigentlich keinen Sinn und verschwendet nur Speicherplatz. Desweiteren benutzt du anscheinend einen Pickupstreamer. Bietet dir dieser nicht ein eigenes Callback ala OnPlayerStreamingPickup(...)?

  • Also das mit dem Doppelarray ist weil ich ein Savesystem mit eingebaut habe.. Also d.h. es wird nicht im Script definiert sondern man kann Ingame die Weapon Pickups erstellen^^


    EDIT:


    Laden tu ich das ganze so:


    forward LoadWeaps();
    public LoadWeaps()
    {
    /*
    enum wepdata
    {
    WepaID,
    WepModelID,
    Float:WepX,
    Float:WepY,
    Float:WepZ
    }
    new WeapData[MAX_WEPPICKS][wepdata];
    WeapData[_cache_weps][Wep]*/
    new line[255],File:wepx = fopen(WEAP_DATEI,io_read),
    wep_index;
    if(wepx)
    {
    while(fread(wepx,line))
    {
    if(line[strlen(line)-2] == '\r')line[strlen(line)-2] = '\0';
    if(line[strlen(line)-1] == '\n')line[strlen(line)-1] = '\0';
    WeapData[_cache_weps][WepaID] = strval(strtok(line,wep_index,','));
    WeapData[_cache_weps][WepModelID] = strval(strtok(line,wep_index,','));
    WeapData[_cache_weps][WepFrakID] = strval(strtok(line,wep_index,','));
    WeapData[_cache_weps][WepX] = floatstr(strtok(line,wep_index,','));
    WeapData[_cache_weps][WepY] = floatstr(strtok(line,wep_index,','));
    WeapData[_cache_weps][WepZ] = floatstr(strtok(line,wep_index,','));

    WeapData[_cache_weps][WepPickupID] = CreateDynamicPickup(WeapData[_cache_weps][WepModelID],2,WeapData[_cache_weps][WepX],WeapData[_cache_weps][WepY],WeapData[_cache_weps][WepZ]);
    WeapData[_cache_weps][WepText] = Create3DTextLabel(waffen[WeapData[_cache_weps][WepaID]],COLOR_GREEN,WeapData[_cache_weps][WepX],WeapData[_cache_weps][WepY],WeapData[_cache_weps][WepZ],40.0,0,0);
    wep_index = 0;

    printf("%i",WeapData[_cache_weps][WepPickupID]);
    _cache_weps++;


    }
    fclose(wepx);
    }
    printf("%d - WEAPs geladen",_cache_weps);
    return 1;
    }


    d.H. _cache_weps wird nach jedem while geplust^^


    EDIT:


    Also ich habs immer noch nicht hinbekommen. Ich hab jetzt alles was mit Pickup rausgenommen ausser die Weaps.. Aber es geht einfach nicht.

    Einmal editiert, zuletzt von GooMan ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen