Gangfight Todesnachricht wird nicht abgeschickt

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
  • Es erscheint einfach leider kein Nachricht an die Fraktionen die im War sind :


    Hier der Code :


  • Das break in Zeile 34 beendet die Schleife nach dem ersten Durchlauf.
    Entferne die.


    Ich habe dir den Code etwas umgestellt, so sind die Abfragen, die nichts mit den Schleifen zu tun haben, außerhalb und werden nicht jedes mal geprüft.
    //Gang-War Kill System
    if(killerid!=INVALID_PLAYER_ID)
    {
    if(pInfo[playerid][fraktion] != pInfo[killerid][fraktion])
    {
    for(new i=0; i<sizeof(GangZoneInfo); i++)
    {
    if(!IsPlayerInGangZone(killerid, i))continue;
    if(!GangZoneInfo[i][inwar])continue;
    for(new gw=0; gw<sizeof(GangWarInfo); gw++)
    {
    if(GangWarInfo[gw][zoneid]!=i)continue;
    if(pInfo[killerid][fraktion]==GangWarInfo[gw][angreifer])
    {
    GangWarInfo[gw][kills_angreifer]++;
    }
    else if(pInfo[killerid][fraktion]==GangZoneInfo[i][gzowner])
    {
    GangWarInfo[gw][kills_owner]++;
    }
    new str[128];
    format(str,sizeof(str),"*Gangfight* %s wurde von %s getötet.",PlayerName(playerid),PlayerName(killerid));
    for(new ii = 0, j = GetPlayerPoolSize(); ii <= j; ii++)
    {
    if(!PlayerOnline(ii))continue;
    if(pInfo[ii][fraktion]!=GangZoneInfo[i][gzowner] && pInfo[ii][fraktion]!=GangWarInfo[gw][angreifer])continue;
    SendClientMessage(ii, 0x5F704F00, str);
    }
    break;
    }
    }
    }
    }

  • Dann musst du den Code debuggen.
    Was wird dir so im Server Log ausgegeben?
    //Gang-War Kill System
    printf("killerid: %d", killerid);
    if(killerid!=INVALID_PLAYER_ID)
    {
    printf("Fraks: %d != %d", pInfo[playerid][fraktion], pInfo[killerid][fraktion]);
    if(pInfo[playerid][fraktion] != pInfo[killerid][fraktion])
    {
    for(new i=0; i<sizeof(GangZoneInfo); i++)
    {
    printf("i: %d", i);
    printf("IsPlayerInGangZone: %d", IsPlayerInGangZone(killerid, i));
    if(!IsPlayerInGangZone(killerid, i))continue;
    printf("inwar: %d", GangZoneInfo[i][inwar]);
    if(!GangZoneInfo[i][inwar])continue;
    for(new gw=0; gw<sizeof(GangWarInfo); gw++)
    {
    printf("gw: %d", gw);
    printf("zoneid: %d == %d", GangWarInfo[gw][zoneid], i);
    if(GangWarInfo[gw][zoneid]!=i)continue;
    if(pInfo[killerid][fraktion]==GangWarInfo[gw][angreifer])
    {
    GangWarInfo[gw][kills_angreifer]++;
    }
    else if(pInfo[killerid][fraktion]==GangZoneInfo[i][gzowner])
    {
    GangWarInfo[gw][kills_owner]++;
    }
    printf("Nachricht.");
    new str[128];
    format(str,sizeof(str),"*Gangfight* %s wurde von %s getötet.",PlayerName(playerid),PlayerName(killerid));
    print(str);
    for(new ii = 0, j = GetPlayerPoolSize(); ii <= j; ii++)
    {
    printf("ii: %d (on: %d)", ii, PlayerOnline(ii));
    if(!PlayerOnline(ii))continue;
    printf("%d == %d || %d == %d", pInfo[ii][fraktion],GangZoneInfo[i][gzowner],pInfo[ii][fraktion],GangWarInfo[gw][angreifer]);
    if(pInfo[ii][fraktion]!=GangZoneInfo[i][gzowner] && pInfo[ii][fraktion]!=GangWarInfo[gw][angreifer])continue;
    printf("Sende Nachricht an %d", ii);
    SendClientMessage(ii, 0x5F704F00, str);
    }
    print("break");
    break;
    }
    }
    }
    print("Ende.");
    }

  • Hab gerade mal einfach so in die Log geguckt und dabei folgendes gefunden :


    Code
    [18:18:21] [kill] lol killed drai Desert Eagle
    [18:18:26] sscanf warning: Strings without a length are deprecated, please add a destination size.
    [18:18:26] sscanf warning: Strings without a length are deprecated, please add a destination size.
    [18:18:38] sscanf warning: Strings without a length are deprecated, please add a destination size.
    [18:18:45] [debug] Run time error 4: "Array index out of bounds"
    [18:18:45] [debug]  Attempted to read/write array element at negative index -1
    [18:18:45] [debug] AMX backtrace:
    [18:18:45] [debug] #0 000c2274 in public GangWarTimer (g=0) at C:\Users\Drai\Desktop\Server\gamemodes\gamemode.pwn:13928


    Line 13928 ist :



  • Also ich war mit dem Kollegen definitiv in der Gangzone drinne, waren sogar an der Flagge 8|



    Hier der stock dafür :


    Code
    stock IsPlayerInGangZone(playerid,gangzoneid)
    {
      new Float:Pos[3];
      GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
      if( Pos[0] >= GangZoneInfo[gangzoneid][pos1] && Pos[0] <= GangZoneInfo[gangzoneid][pos2] && Pos[1] >= GangZoneInfo[gangzoneid][pos3] && Pos[1] <= GangZoneInfo[gangzoneid][pos4] ) return 1;
      else return 0;
    
    
    }


    Und hier noch die enums etc.



  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Was wird dir so im Log ausgegeben?
    stock IsPlayerInGangZone(playerid,gangzoneid)
    {
    new Float:Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    printf("%f >= %f", Pos[0], GangZoneInfo[gangzoneid][pos1]);
    printf("%f <= %f", Pos[0], GangZoneInfo[gangzoneid][pos2]);
    printf("%f >= %f", Pos[1], GangZoneInfo[gangzoneid][pos3]);
    printf("%f <= %f", Pos[1], GangZoneInfo[gangzoneid][pos4]);
    if( Pos[0] >= GangZoneInfo[gangzoneid][pos1] && Pos[0] <= GangZoneInfo[gangzoneid][pos2] && Pos[1] >= GangZoneInfo[gangzoneid][pos3] && Pos[1] <= GangZoneInfo[gangzoneid][pos4] ) return 1;
    else return 0;
    }

  • So habe es im Las Colinas getestet, da habe ich sowie auch der andere keine Nachricht bekommen,aber im Industrial Gebiet hats geklappt, wieso auch immer.


    Hier die Log :



    Also in dem Gebiet klappts aber in dem anderen nicht xD

  • Jetzt gehts, weiß nicht wieso xD


  • stock IsPlayerInGangZone(playerid,gangzoneid)
    {
    new Float:Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    printf("%f >= %f", Pos[0], GangZoneInfo[gangzoneid][pos1]);
    printf("%f <= %f", Pos[0], GangZoneInfo[gangzoneid][pos3]);
    printf("%f >= %f", Pos[1], GangZoneInfo[gangzoneid][pos2]);
    printf("%f <= %f", Pos[1], GangZoneInfo[gangzoneid][pos4]);
    if( Pos[0] >= GangZoneInfo[gangzoneid][pos1] && Pos[0] <= GangZoneInfo[gangzoneid][pos3] && Pos[1] >= GangZoneInfo[gangzoneid][pos2] && Pos[1] <= GangZoneInfo[gangzoneid][pos4] ) return 1;
    else return 0;
    }


    Versuche es so.
    Ich habe 2 und 3 vertauscht.

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