Beiträge von Kasakow

    Würde für die Fraktionen am besten eine Spalte in der Datenbank hinzufügen, wo du alles rundum Spieleraccount verwaltest.


    simple - Erklärung

    schritt 2:


    Natürlich musst du den Wert 'Fraktion' auch speichern und auslesen lassen.




    //auslesen
    PlayerInfo[playerid][pFraktion] = cache_get_field_content_int(0, "Fraktion", dbhandle); //Muss natürlich auf dein Script angepasst werden



    Auf jeden Fall um zur Funktion zu kommen die den Fraktionsnamen ausgibt.




    stock FraktionsName(playerid)
    {
    new fraktname[50];
    switch(PlayerInfo[playerid][pFraktion])
    {
    case 0:{fraktname="Keine";}
    case 1:{fraktname="S.A.P.D";}
    case 2:{fraktname="F.B.I";}
    case 3:{fraktname="San Andreas Emergency Department";}
    case 4:{fraktname="Las Venturas Vagos";}
    case 5:{fraktname="Grove Street";}
    case 6:{fraktname="San Andreas Army";}
    case 7:{fraktname="Saint Jefferson Ballas";}
    case 8:{fraktname="Terroristen";}
    case 9:{fraktname="Yakuza";}
    case 10:{fraktname="San Andreas News Corporation";}
    case 11:{fraktname="Traffic Authority of San Andreas";}
    case 12:{fraktname="La Cosa Nostra";}
    case 13:{fraktname="Varrios Los Aztecas";}
    case 14:{fraktname="San Andreas Driving School";}
    case 15:{fraktname="San Andreas Electrical Service";}
    case 16:{fraktname="Goverment of San Andreas";}
    case 17:{fraktname="Russische Mafia";}
    case 18:{fraktname="United Turks";}
    case 19:{fraktname="Hitman Agency";}
    default:{fraktname="ERROR";}
    }
    return fraktname;
    }

    Du speicherst doch sicherlich den Account in der Datenbank mit einem Datensatz der entweder ein Text ist ("Name" z.B) oder anhand einer SQL ID die jedem Spieler zugewiesen ist, wüsste sonst nicht wie du deine Accounts speichern lässt.

    Bei einer Switch-Funktion musst du bei case immer einen break nutzen.
    Wenn du am Ende der Anweisung kein break setzt, so wird die Ausführung mit dem nächsten case fortgesetzt.
    Dadurch wird dir der letzte case ausgegeben.

    Er muss nicht immer break hinzufügen, das beendet dann nur das Fragen der anderen Sachen, was nicht unbedingt dumm ist wenn er eh schon sein Ergebnis hat, aber zwingend ist es nicht.


    Wäre das gleiche wie :



    stock Datencheck(datacheck[])
    {
    new abgleich[40] = "Banane";
    if(!strcmp(datacheck, abgleich, true))
    {
    print("Datenabgleich erfolgt, stimmt überein!");
    }
    if(strcmp(datacheck, abgleich, true))
    {
    print("Datenablgleich erfolgt, stimmt nicht überein!");
    }
    return 1;
    }

    Auch wenn datacheck "Banane" wäre, würde er unten nochmal prüfen ob datacheck nicht "Banane" ist, und dass weil man das ganze nicht stoppt, sobald eine Übereinstimmung statt findet. Aber die funktion an sich, kann er so lassen eigentlich.

    Abend,


    Ich hatte eine Funktion erstellt die 'CreateVehicleEx' heißt und dachte auch erst das es daran liegt, aber anscheinend doch nicht.
    In der ServerLog steht das 1 Fahrzeug erstellt wird, dabei sind es die 5 Roller die ich in der Funktion bereits ausgeklammert hab.
    Also der Server denkt 1 Fahrzeug wird erstellt, wenn ich mich dann registriere und spawne, sehe ich 5 Roller auf einem Fleck spawnen.



    stock CreateVehicles()
    {
    /*CreateVehicleEx(462, VEHICLE_ART_RENT, 1319.3834, -1368.5138, 13.1366, 177.0136, 0, 0); //Roller1
    CreateVehicleEx(462, VEHICLE_ART_RENT, 1320.3131, -1368.5138, 13.1366, 177.0136, 0, 0); //Roller2
    CreateVehicleEx(462, VEHICLE_ART_RENT, 1321.2260, -1368.5138, 13.1366, 177.0136, 0, 0); //Roller3
    CreateVehicleEx(462, VEHICLE_ART_RENT, 1322.0990, -1368.5138, 13.1366, 177.0136, 0, 0); //Roller4
    CreateVehicleEx(462, VEHICLE_ART_RENT, 1322.9420, -1368.5138, 13.1366, 177.0136, 0, 0); //Roller5*/
    return 1;
    }



    /*stock CreateVehicleEx(modelid, art, Float:cx, Float:cy, Float:cz, Float:cr, color0, color1)
    {
    new cID = CreateVehicle(modelid, cx, cy, cz, cr, color0, color1, -1, 0);
    ServerVehicles[cID][vCarId] = cID,
    ServerVehicles[cID][vModelId] = modelid,
    ServerVehicles[cID][vArt] = art,
    ToggleVehicleEngine(ServerVehicles[cID][vCarId], false);
    return cID;
    }*/


    ->ServerLog<-

    BTW:
    Ich selber benutze die von Strickenkid ist zwar schon etwas älter, aber funktioniert! :)


    BTT:
    Falls du bei den dynamischen Sachen nicht weiterkommst schaue dir das SOM 0.6 an, da sind die Sachen auch auf R41-2

    Ja, mit großer Datenmenge meinte ich aber einen Server der mit aktiven 150-300 Spielern läuft.
    Dafür sind einfach die neueren Plugins viel praktischer.

    geht alles


    //close

    Wenn er es mit meinem Quellcode probiert hat und es deswegen funktioniert, kann ich dir sagen das der Fehler darin lag das er an stellen wo hätte, "pID" stehen müssen "playerid" getippt hat, das hat aber an dem Punkt nicht gepasst.

    Probiere es mal so



    if(IsPlayerInAnyVehicle(pID))
    {
    new seatid = GetPlayerVehicleSeat(pID);
    SetPlayerPosEx(playerid,x,y + 4,z);
    SetVehiclePosEx(GetPlayerVehicleID(playerid),x,y + 4,z);
    PutPlayerInVehicleEx(playerid,GetPlayerVehicleID(pID),seatid); //könnte aber auch daran liegen, das die Seatid besetzt ist.
    SetPlayerInterior(playerid,GetPlayerInterior(pID));
    SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(pID));
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),GetPlayerInterior(pID));
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),GetPlayerVirtualWorld(pID));
    format(string,sizeof(string),"%s hat sich zu dir geportet.",SpielerName(playerid));
    SCM(pID,SAMP_GRUEN,string);
    format(string,sizeof(string),""IINFO" du hast dich zu %s geportet.",SpielerName(pID));
    SCM(playerid,SAMP_GRUEN,string);
    }
    else
    {
    SetPlayerPosEx(playerid,x,y + 1,z);
    SetPlayerInterior(playerid,GetPlayerInterior(pID));
    SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(pID));
    format(string,sizeof(string),"%s hat sich zu dir geportet.",SpielerName(playerid));
    SCM(pID,SAMP_WEISS,string);
    format(string,sizeof(string),""IINFO" du hast dich zu %s geportet.",SpielerName(pID));
    SCM(playerid,SAMP_GRUEN,string);
    }
    return 1;
    }


    ocmd:mheal(playerid, params[])
    {
    if(!IsPlayerConneced(playerid))return 1;
    if(PlayerInfo[playerid][pTot] == 1)return SendClientMessage(playerid, COLOR_GREY, "Tote können keine Befehle nutzen!");
    new giveplayerid, moneys;
    if(gTeam[playerid] != TEAM_CYAN&&PlayerInfo[playerid][pMember]!=4&&PlayerInfo[playerid][pLeader]!=4)return SendClientMessage(playerid, COLOR_RED, "Du bist kein Medic Mitglied");
    if(sscanf(params, "ui", giveplayerid, moneys))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /mheal [ID/NAME] [Preis]");
    if(moneys < 1 || moneys > 1000)return SendClientMessage(playerid, rot, "Der Preis darf nicht weniger als 1$ und höher als 100$ sein!");
    if(giveplayerid == playerid)return SendClientMessage(playerid,rot, "Du kannst dich nicht selber Heilen!");
    if(!IsPlayerConnected(giveplayerid) || giveplayerid == INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), " %d ist kein aktiver Spieler.", giveplayerid),
    SendClientMessage(playerid, COLOR_RED, string);
    return 1;
    }
    new playambu, Float:givehealth;
    playambu = GetPlayerVehicleID(playerid);
    givehealth = GetPlayerHealth(giveplayerid);
    if(!IsAnAmbulance(playambu))return SendClientMessage(playerid, COLOR_RED, "Du sitzt in keinem Krankenwagen");
    if(!IsPlayerInMyVehicle(playerid, giveplayerid))return SendClientMessage(playerid, COLOR_RED, "Ihr seid nicht im gleichen Wagen!");
    if(givehealth >= 99.0)return SendClientMessage(playerid, COLOR_RED, "Der Spieler hat genug leben");
    if(STDPlayer[giveplayerid] > 0)
    {
    STDPlayer[giveplayerid] = 0;
    SendClientMessage(giveplayerid, COLOR_WHITE, "Du bist nun nicht mehr an Ebola erkrankt. Die Ärzte konnten dich retten!");
    }
    SetPlayerHealth(giveplayerid, 100),
    PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0),
    PlayerPlaySound(giveplayerid, 1150, 0.0, 0.0, 0.0),
    format(string, sizeof(string), "Du wurdest für {009933}$%d {FFFFFF}geheilt.",moneys),
    ClearAnimations(giveplayerid),
    SendClientMessage(giveplayerid,COLOR_WHITE,string);
    return 1;
    }



    stock IsPlayerInMyVehicle(playerid, giveid)
    {
    new id_cache[2];
    id_cache[0] = GetPlayerVehicleID(playerid);
    id_cache[1] = GetPlayerVehicleID(giveid);
    if(id_cache[0] == id_cache[1])return 1;
    return 0;
    }

    Hab dir den Command mal bisschen umgeschrieben, unter anderem, habe ich es auf OCMD umgeschrieben.
    Also lege ich dir doch sehr ans Herz dass du dir die Include holst, sowie SSCANF einrichtest.
    Den SSCANF Stock musst du quasi einfach unten als "Funktion" einfügen oder dir ebenfalls die Include+Plugin reinhauen.


    #define TEAM TEAM_NO


    enum
    {
    TEAM_NO,
    TEAM_WAR
    };


    stock SpawnPlayerEx(playerid)
    {
    switch(GetFrak(playerid))
    {
    case TEAM_NO:
    {
    SetSpawnInfo(playerid, 0, GetSkin(playerid), 1309.8894,-1368.1423,13.5449,180.6100, 0, 0, 0, 0, 0, 0),
    SpawnPlayer(playerid);
    }
    case TEAM_WAR:
    {
    //Spawndaten
    }
    }
    return 1;
    }

    Ich habe in jeden meiner Script's immer eine extra Spawn-Funktion angelegt, kannst dich ja mal daran orientieren.

    Tag Leute,


    mach Menschen kennen mich hier noch von früher.
    Ich wurde vor ca 2-3 Jahren aus der Community "ausgeschlossen", da ich des öfteren unreifes Verhalten an den Tag legte oder die Moderation über PN beledigt habe.
    Einsicht entsteht mit der Zeit, wenn man auf zurückliegende Jahre zurückschaut, und sein damaliges Verhalten mit seinem heutigen Verhalten nicht mehr vergleichen kann.
    Ich möchte nur kurz ansprechen dass es von meiner Seite aus keine Beleidigungen, unnötiges Verhalten sowie Provokation geben wird.
    Das wird dann aber dann denke mehr und mehr selber zu sehen ein, das 2/3 Jahre unterschied zwischendrin liegen.


    Grüße :rolleyes:

    Möchte auch mal meinen Senf dazu geben.
    Man sieht das in dem UCP viel Arbeit herinnen steckte und dass du das nicht innerhalb weniger Stunden geschrieben hast.
    Leute die hier kein Interesse haben, sollten am besten erst gar nicht schreiben, statt hier gleich den ganzen Thread vollzumüllen so das der Endkunde letztes endlich auch gar keine lust mehr hat sich alle OT Beiträge durchzulesen und den Thread schon vorher verlässt.


    btw:
    Bin interessiert, ist das UCP OOP geschrieben ?


    mfg :thumbup: