Bots Disconnecten wenn Spieler Disconnected

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 OnPlayerDisconnect(playerid,reason)
    {
    new string[128];
    RemovePlayer(playerid);
    OnlinePlayer(playerid,false);
    gamblingJoined[playerid] = 0;
    SavePlayerClothes(playerid);
    SaveAccount(playerid);
    Delete3DTextLabel(UserText3D[playerid]);
    if(IsPlayerNPC(playerid))return 0;
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    StopPlayerPlaySound(playerid);
    StopAudioStreamForPlayer(playerid);
    SetPlayerName(playerid,Spieler[playerid][pName]);
    SetPlayerScore(playerid,GetPlayerLevel(playerid));
    format(string,sizeof(string),"RP-Name: %s | Community-Name: %s | IP: %s",Spieler[playerid][pRPName],SpielerName(playerid),SpielerIP(playerid));
    Log("Logout, Spieler",string);
    if(Paintball[playerid] == 0)
    {
    CreateOfflineInfo(playerid);
    ResetWeapons(playerid,false);
    for(new slot=0;slot<13;slot++)
    {
    if(Spieler[playerid][pPlayerWeapon][slot] != 0 && Spieler[playerid][pPlayerWeaponAmmo][slot] != 0)
    {
    GiveWeapon(playerid,Spieler[playerid][pPlayerWeapon][slot],Spieler[playerid][pPlayerWeaponAmmo][slot],false);
    }
    }
    }
    if(Spieler[playerid][TachoShow] == true)
    {
    KillTimer(Spieler[playerid][TachoTimer]);
    Spieler[playerid][TachoShow] = false;
    }


    if(InviteInRace[playerid] == 1)
    {
    if(RaceFahrzeug[playerid] != 0) DestroyVehicle(RaceFahrzeug[playerid]);
    RaceCps[playerid] = 0;
    for(new t=0;t<12;t++){ PlayerTextDrawHide(playerid,newRACEDraw[playerid][t]); }
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    if(InviteInRace[i] == 1)
    {
    switch(reason)
    {
    case 0:
    {
    format(string,sizeof(string),"%s hat das Rennen verlassen! [Grund: Timeout/Crash/Taskmanager]",Spieler[playerid][pRPName]);
    SendClientMessage(i,FMELDUNG,string);
    }
    case 1:
    {
    format(string,sizeof(string),"%s hat das Rennen verlassen! [Grund: Ausgeloggt]",Spieler[playerid][pRPName]);
    SendClientMessage(i,FMELDUNG,string);
    }
    case 2:
    {
    format(string,sizeof(string),"%s hat das Rennen verlassen! [Grund: Kick/Ban]",Spieler[playerid][pRPName]);
    SendClientMessage(i,FMELDUNG,string);
    }
    }
    }
    }
    }
    InviteInRace[playerid] = 0;
    }


    if(Spieler[playerid][pAtReport] != 0)
    {
    format(string,sizeof(string),"[SUPPORT] Dein Supportpartner %s hat den Server verlassen.",Spieler[playerid][pRPName]);
    SendClientMessage(Spieler[playerid][pReportPartner],REPORTANDAFKCOLOR,string);
    for(new i=0;i<5;i++){ Spieler[Spieler[playerid][pReportPartner]][pWriteReport][i] = false; }
    Spieler[Spieler[playerid][pReportPartner]][pReportPartner] = -1;
    Spieler[Spieler[playerid][pReportPartner]][pAReport] = 0;
    Spieler[Spieler[playerid][pReportPartner]][pAtReport] = 0;
    Spieler[playerid][pReportPartner] = -1;
    Spieler[playerid][pAReport] = 0;
    Spieler[playerid][pAtReport] = 0;
    DeleteReport(playerid);
    DeleteReport(Spieler[playerid][pReportPartner]);
    Delete3DTextLabel(ReportLabel[Spieler[playerid][pReportPartner]]);
    Delete3DTextLabel(ReportLabel[playerid]);
    return 1;
    }


    if(Spieler[playerid][pAReport] != 0)
    {
    DeleteReport(playerid);
    DeleteReport(Spieler[playerid][pReportPartner]);
    Spieler[playerid][pReportPartner] = -1;
    Spieler[playerid][pAReport] = 0;
    Spieler[playerid][pAtReport] = 0;
    return 1;
    }


    for(new i=0;i<3;i++){ PlayerTextDrawDestroy(playerid,Tutorialdraw[playerid][i]); }
    for(new i=0;i<5;i++){ PlayerTextDrawDestroy(playerid,playerJobDraw[playerid][i]); }
    for(new i=0;i<8;i++){ PlayerTextDrawDestroy(playerid,HandyInfodraw[playerid][i]); }
    PlayerTextDrawDestroy(playerid,PRISONdraw[playerid]);
    PlayerTextDrawDestroy(playerid,HandyCalldraw[playerid]);
    for(new i=0;i<19;i++){ PlayerTextDrawDestroy(playerid,Tacho[playerid][i]); }
    for(new i=0;i<3;i++){ PlayerTextDrawDestroy(playerid,AFKdraw[playerid][i]); }
    PlayerTextDrawDestroy(playerid,NODMdraw[playerid]);
    PlayerTextDrawDestroy(playerid,BINCOplayerdraw[playerid]);
    for(new i=0;i<12;i++){ PlayerTextDrawDestroy(playerid,newRACEDraw[playerid][i]); }
    animak[playerid] = false;
    HandsUpPerson[playerid] = false;
    KillTimer(Spieler[playerid][pTutTimer4All]);
    for(new i=0;i<3;i++){ KillTimer(Spieler[playerid][pStonedTimer][i]); }
    KillTimer(AkkuTimer[playerid]);
    KillTimer(JobTimer[playerid]);
    KillTimer(FschulTimer[playerid]);
    KillTimer(Spieler[playerid][pBusTimer]);
    KillTimer(SpielerOrtenTimer[playerid]);
    KillTimer(UpdateAFK[playerid]);
    KillTimer(Spieler[playerid][pBaggerTimer]);
    KillTimer(Spieler[playerid][pSpraytagTimer]);


    if(Paintball[playerid] != 0) PaintBallPickupRefresh(playerid);


    if(Spieler[playerid][pAReport] != 0) DeleteReport(playerid);
    if(SpawnKillStatus[playerid] == 1) TextDrawHideForPlayer(playerid,Spawnkilldraw);
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1) Delete3DTextLabel(AFKLabel[playerid]);
    if(Spieler[playerid][pAdminOnduty] == true) Delete3DTextLabel(aDuty[playerid]);
    if(Spieler[playerid][pDuty] == 1 && isPlayerInFrakt(playerid,14)) if(IsValidDynamic3DTextLabel(fSCHULleher[playerid])) DestroyDynamic3DTextLabel(fSCHULleher[playerid]);
    if(IsValidDynamic3DTextLabel(fSCHULleher[playerid])) DestroyDynamic3DTextLabel(fSCHULleher[playerid]);
    if(farmpflanze[playerid] != -1) DestroyDynamicObject(farmpflanze[playerid]);
    DestroyObject(Spieler[playerid][pFirstPersonObj]);
    if(Spieler[playerid][PprobefahrtVeh] != 0) DeleteVehicle(Spieler[playerid][PprobefahrtVeh]);
    if(Spieler[playerid][pKart] != -1) DeleteVehicle(Spieler[playerid][pKart]);
    if(Spieler[playerid][pSchulungsVEH] != -1) DeleteVehicle(Spieler[playerid][pSchulungsVEH]);
    if(RentVeh[playerid][0] != -1) DeleteVehicle(RentVeh[playerid][0]);
    if(RentVeh[playerid][1] != -1) DeleteVehicle(RentVeh[playerid][1]);
    if(truckertrailer[playerid] != -1) DeleteVehicle(truckertrailer[playerid]);


    if(Spieler[playerid][pTankArt] != 0)
    {
    RefillVehicle[Spieler[playerid][pTankVehicle]] = 0;
    DestroyDynamic3DTextLabel(TankenLabel[Spieler[playerid][pTankVehicle]]);
    vFahrzeug[Spieler[playerid][pTankVehicle]][Tank] = Tankcount[playerid];
    Spieler[playerid][pTankArt] = 0;
    Spieler[playerid][pTankVehicle] = 0;
    Spieler[playerid][pTankState] = false;
    Tankcount[playerid] = 0;
    }
    if(Spieler[playerid][pSnow] == 1) DestroyPlayerObject(playerid,Spieler[playerid][pHaveSnow]);
    if(Spieler[playerid][pTutMissionComplete][0] == true) DestroyDynamicPickup(tutorialpickup[playerid][0]);
    if(Spieler[playerid][pTutMissionComplete][1] == true) DestroyDynamicPickup(tutorialpickup[playerid][1]);
    if(Spieler[playerid][pTutMissionComplete][3] == true)
    {
    for(new i=3;i<154;i++)
    {
    DestroyPlayerObject(playerid,Spieler[playerid][pTutorialObject][i]);
    }
    }
    if(Spieler[playerid][pTutMissionComplete][4] == true)
    {
    for(new i=0;i<3;i++)
    {
    DestroyPlayerObject(playerid,Spieler[playerid][pTutorialObject][i]);
    }
    }


    RemovePlayerAttachedObject(playerid,2);
    RemovePlayerAttachedObject(playerid,3);
    RemovePlayerAttachedObject(playerid,4);
    RemovePlayerAttachedObject(playerid,5);
    RemovePlayerAttachedObject(playerid,6);
    RemovePlayerAttachedObject(playerid,7);
    RemovePlayerAttachedObject(playerid,8);
    RemovePlayerAttachedObject(playerid,9);


    if(gettime() > ImmobilienKeyTime[playerid]) KillTimer(ImmobilienTimer[playerid]),HauslockbyMakler(playerid,ImmobilienKeyID[playerid]);
    if(gettime() < Spieler[playerid][pRobOtherTime]) ACMoney(playerid,-Spieler[playerid][pRobOtherThing]);
    if(gettime() < Spieler[playerid][pWaffenlagerRobOtherTime]) Spieler[playerid][pMaterials] -= Spieler[playerid][pWaffenlagerRobOtherThing];
    if(Spieler[playerid][LiveView] == 1)
    {
    format(string,sizeof(string),"%s verließ das Interview.",Spieler[playerid][pRPName]);
    SendClientMessageToAll(ORANGE,string);
    Spieler[playerid][InviteInterView] = 0;
    Spieler[playerid][LiveView] = 0;
    }


    if(Spieler[playerid][pC4RobState] == true)
    {
    SendClientMessage(playerid,ROT,"Ihr seid am C4-Raub gescheitert.");
    KillTimer(C4robTimer);
    robc4sec = 0;
    Spieler[playerid][pC4RobState] = true;
    pRobC4BackwardTime = 0;
    pRobC4TimeNearVehicle = 0;
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPVarInt(i,"Eingeloggt") == 0)
    {
    if(Spieler[i][pC4RobState] == true) Spieler[i][pC4RobState] = false;
    if(isPlayerInFrakt(i,2) || isPlayerInFrakt(i,6))
    {
    if(Spieler[i][pDuty] != 0)
    {
    SetPlayerMarkerForPlayer(i,playerid,0xFFFFFF00);
    SendClientMessage(i,DUNKELBLAU,"HQ: An alle Einheiten, der Überfall auf den C4-Transporter war nicht erfolgreich!");
    }
    }
    }
    }
    }
    }


    if(Spieler[playerid][pBankRobState] == true)
    {
    SendClientMessageToAll(ORANGE,"News: Die Staatsmächte konnten den Bankräuber stoppen.");
    SendClientMessage(playerid,ROT,"Du bist am Bankraub gescheitert.");
    KillTimer(Spieler[playerid][pBankRobTimer]);
    robsec = 0;
    Spieler[playerid][pBankRobState] = false;
    Spieler[playerid][pRobBackwardTimeTresor] = 0;
    Spieler[playerid][pRobTimeInTresor] = 0;
    PlayerTalkPublic(playerid,WEISS,"ALARM: Die Tresortür schließt sich alle raus hier !!!",50);
    MoveDynamicObject(tor[17],1472.04,-998.54,44.58,1);
    PlayerHearMusicInRange(1472.04,-998.54,44.58,1035,5,1,2000);//x,y,z,soundid,radius,timer an = 1 wenn aus = 0,zeit wann timer music/sound beendet
    }


    if(Spieler[playerid][pWaffenlagerRobState] == true)
    {
    SendClientMessageToAll(ORANGE,"News: Die Staatsmächte konnten den Raub im Waffenlager stoppen.");
    SendClientMessage(playerid,ROT,"Du bist beim Raub im Waffenlager gescheitert.");
    KillTimer(Spieler[playerid][pWaffenlagerRobTimer]);
    wrobsec = 0;
    Spieler[playerid][pWaffenlagerRobState] = false;
    Spieler[playerid][pWaffenlagerBackwardTimeTresor] = 0;
    Spieler[playerid][pWaffenlagerTimeInTresor] = 0;
    PlayerTalkPublic(playerid,WEISS,"ALARM: Die Tresortür schließt sich alle raus hier !!!",50);
    MoveDynamicObject(tor[96],973.15155, 2067.90112, 11.47930,1);
    MoveDynamicObject(tor[97],977.71112, 2072.88623, 11.47930,1);
    PlayerHearMusicInRange(1062.5, 2083.1001, 9.8,1035,5,1,2000);
    }


    if(isPlayerAnAdmin(playerid,1))
    {
    format(string,sizeof(string),"{FF0000}<< {FFFFFF}%s %s hat sich ausgeloggt{FF0000} >>",Adminrang(playerid),Spieler[playerid][pName]);
    SendAdminMessage(WEISS,string);
    format(string,sizeof(string),"Admin: %s | Adminlevel: %i | IP: %s | PlayerID : %i",Spieler[playerid][pName],Spieler[playerid][pAdmin],SpielerIP(playerid),playerid);
    Log("Logout, Administrator",string);
    }


    if(Spieler[playerid][pFraktion] != 0)
    {
    format(string,sizeof(string),"{00FFFF}<< Fraktionsmitglied{FF0000} %s {00FFFF}hat sich ausgeloggt >>",Spieler[playerid][pName]);
    SendFraktionsMessage(Spieler[playerid][pFraktion],HELLBLAU,string);
    format(string,sizeof(string),"RP-Name: %s | Community-Name: %s | IP: %s | Fraktion: %s",Spieler[playerid][pRPName],SpielerName(playerid),SpielerIP(playerid),FraktionsName(Spieler[playerid][pFraktion]));
    Log("Logout, Fraktion",string);
    }


    if(Spieler[playerid][pCallHim] == 1)
    {
    new pID = Spieler[playerid][pCall];
    Spieler[pID][pCallHim] = 0;
    Spieler[pID][pCall] = -1;
    SetPlayerSpecialAction(pID,SPECIAL_ACTION_STOPUSECELLPHONE);
    SendClientMessage(pID,GELB,"Der Gesprächspartner hat aufgelegt.");
    PlayerTextDrawHide(pID,HandyCalldraw[pID]);
    PlayerPlaySound(pID,1077,0.0,0.0,0.0);
    RemovePlayerAttachedObject(pID,8);
    }


    if(PlayerSpawned[playerid] == 1)
    {
    switch(reason)
    {
    case 0:
    {
    if(Paintball[playerid] == 0) Spieler[playerid][pAntiOfflineFlucht] = 1;
    format(string,sizeof(string),"* Anti-Offlineflucht: %s hat den Server verlassen (Timeout/Crash/Taskmanager).",Spieler[playerid][pName]);
    PlayerTalkPublic(playerid,GRAU,string,15);
    }
    case 1:
    {
    format(string,sizeof(string),"* Anti-Offlineflucht: %s hat den Server verlassen (Normal).",Spieler[playerid][pName]);
    PlayerTalkPublic(playerid,GRAU,string,15);
    }
    case 2:
    {
    if(Paintball[playerid] == 0) Spieler[playerid][pAntiOfflineFlucht] = 1;
    format(string,sizeof(string),"* Anti-Offlineflucht: %s hat den Server verlassen (Kick/Bann).",Spieler[playerid][pName]);
    PlayerTalkPublic(playerid,GRAU,string,15);
    }
    }
    }


    new sm = IsPlayerInSmarkFightZone(playerid);
    if(isPlayerInFrakt(playerid,4) || isPlayerInFrakt(playerid,5) || isPlayerInFrakt(playerid,7) || isPlayerInFrakt(playerid,9) || isPlayerInFrakt(playerid,12) || isPlayerInFrakt(playerid,13) || isPlayerInFrakt(playerid,17))
    {
    if(sm != -1)
    {
    if((isPlayerInFrakt(playerid,SmarkInfo[sm][sattackerfraktid]) || isPlayerInFrakt(playerid,SmarkInfo[sm][sfraktid])) && SmarkInfo[sm][sattackerfraktid] != 0)
    {
    switch(reason)
    {
    case 0:format(string,sizeof(string),"%s hat das Spiel am Umkämpften Schwarzmarkt (ID:%i) verlassen! (Timeout/Crash/Taskmanager)",Spieler[playerid][pRPName],sm);
    case 1:format(string,sizeof(string),"%s hat das Spiel am Umkämpften Schwarzmarkt (ID:%i) verlassen! (Normal)",Spieler[playerid][pRPName],sm);
    case 2:format(string,sizeof(string),"%s hat das Spiel am Umkämpften Schwarzmarkt (ID:%i) verlassen! (Kick/Bann)",Spieler[playerid][pRPName],sm);
    }
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i))
    {
    if(isPlayerInFrakt(i,SmarkInfo[sm][sattackerfraktid]) || isPlayerInFrakt(i,SmarkInfo[sm][sfraktid]))
    {
    SendClientMessage(i,FMELDUNG,string);
    }
    }
    }
    if(isPlayerInFrakt(playerid,SmarkInfo[sm][sfraktid])) SmarkInfo[sm][swarattackerpoints] += 2;
    if(isPlayerInFrakt(playerid,SmarkInfo[sm][sattackerfraktid])) SmarkInfo[sm][swarownerpoints] += 2;
    }
    }
    }


    new gwzone = GWIsPlayerInWarArea(playerid);
    if(isPlayerInFrakt(playerid,4) || isPlayerInFrakt(playerid,5) || isPlayerInFrakt(playerid,7) || isPlayerInFrakt(playerid,9) || isPlayerInFrakt(playerid,12) || isPlayerInFrakt(playerid,13) || isPlayerInFrakt(playerid,17))
    {
    if(gwzone != -1)
    {
    if(GangwarZones[gwzone][War_Time] != 0 || GangwarZones[gwzone][War_Attacker] != 0 || GangwarZones[gwzone][War_Started] == 1)
    {
    if(isPlayerInFrakt(playerid,GangwarZones[gwzone][War_Owner]) || isPlayerInFrakt(playerid,GangwarZones[gwzone][War_Attacker]) && GangwarZones[gwzone][War_Started] == 1)
    {
    switch(reason)
    {
    case 0:format(string,sizeof(string),"Gangwar: %s hat das Spiel im Gangwargebiet verlassen! (Timeout/Crash/Taskmanager)",Spieler[playerid][pRPName]);
    case 1:format(string,sizeof(string),"Gangwar: %s hat das Spiel im Gangwargebiet verlassen! (Normal)",Spieler[playerid][pRPName]);
    case 2:format(string,sizeof(string),"Gangwar: %s hat das Spiel im Gangwargebiet verlassen! (Kick/Bann)",Spieler[playerid][pRPName]);
    }
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i))
    {
    if(Spieler[i][pFraktion] == GangwarZones[gwzone][War_Owner] || Spieler[i][pFraktion] == GangwarZones[gwzone][War_Attacker])
    {
    SendClientMessage(i,GWCHATCOLOR,string);
    }
    }
    }
    new Float:x,Float:y,Float:z,dropcount = 0;
    GetPlayerPos(playerid,x,y,z);
    for(new i_slot=0,gun,ammo;i_slot<13;i_slot++)
    {
    GetPlayerWeaponData(playerid,i_slot,gun,ammo);
    if(gun != 0 && ammo != 0)
    {
    dropcount++;
    CreateDroppedGun(playerid,gun,ammo,x+random(2)-random(2),y+random(2)-random(2),z);
    }
    }
    if(dropcount != 0)
    {
    format(string,sizeof(string),"** %s lässt etwas fallen **",Spieler[playerid][pRPName]);
    PlayerTalkPublic(playerid,MEFARBE,string,10);
    }
    if(Spieler[playerid][pFraktion] == GangwarZones[gwzone][War_Owner])
    {
    GangwarZones[gwzone][War_AttackerPoints]++;
    format(string,sizeof(string),"%s %i/%i",FraktionsName(GangwarZones[gwzone][War_Attacker]),GangwarZones[gwzone][War_AttackerPoints],MAX_GWPOINT4WINNER);
    TextDrawSetString(GangwarZones[gwzone][WARdraw][1],string);
    if((GangwarZones[gwzone][War_OwnerPoints] -3) <= 0)
    {
    GangwarZones[gwzone][War_OwnerPoints] = 0;
    format(string,sizeof(string),"%s %i/%i",FraktionsName(GangwarZones[gwzone][War_Attacker]),GangwarZones[gwzone][War_AttackerPoints],MAX_GWPOINT4WINNER);
    return TextDrawSetString(GangwarZones[gwzone][WARdraw][1],string);
    }
    GangwarZones[gwzone][War_OwnerPoints] -= 3;
    format(string,sizeof(string),"%s %i/%i",FraktionsName(GangwarZones[gwzone][War_Owner]),GangwarZones[gwzone][War_OwnerPoints],MAX_GWPOINT4WINNER);
    TextDrawSetString(GangwarZones[gwzone][WARdraw][0],string);
    }
    if(Spieler[playerid][pFraktion] == GangwarZones[gwzone][War_Attacker])
    {
    GangwarZones[gwzone][War_OwnerPoints]++;
    format(string,sizeof(string),"%s %i/%i",FraktionsName(GangwarZones[gwzone][War_Owner]),GangwarZones[gwzone][War_OwnerPoints],MAX_GWPOINT4WINNER);
    TextDrawSetString(GangwarZones[gwzone][WARdraw][0],string);
    if((GangwarZones[gwzone][War_AttackerPoints] -3) <= 0)
    {
    GangwarZones[gwzone][War_AttackerPoints] = 0;
    format(string,sizeof(string),"%s %i/%i",FraktionsName(GangwarZones[gwzone][War_Attacker]),GangwarZones[gwzone][War_AttackerPoints],MAX_GWPOINT4WINNER);
    return TextDrawSetString(GangwarZones[gwzone][WARdraw][1],string);
    }
    GangwarZones[gwzone][War_AttackerPoints] -= 3;
    format(string,sizeof(string),"%s %i/%i",FraktionsName(GangwarZones[gwzone][War_Attacker]),GangwarZones[gwzone][War_AttackerPoints],MAX_GWPOINT4WINNER);
    TextDrawSetString(GangwarZones[gwzone][WARdraw][1],string);
    }
    }
    }
    }
    }
    DeletePVar(playerid,"Eingeloggt");
    }
    DestroyVars(playerid);
    return 1;
    }

  • Heyo,


    ab hier sollte nichts mehr weiter laufen, sofern playerid ein NPC ist.


    Da ich deinen Code nicht kenne, kann ich nicht direkt wissen was die Funktion 'RemovePlayer' oder 'OnlinePlayer' kann.
    Kannst du mir davon ggf. den Ausschnitt zeigen?


    Gruß