Beiträge von Dudalus

    Hallo


    Du erstellst ein globales Array:


    new VehicleItem[MAX_VEHICLES];


    Und zum Beispiel einen solchen Befehl:



    COMMAND:produkte(playerid, params[])
    {
    #pragma unused params
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(VehicleItem[vehicleid] > 1000)
    {
    SendClientMessage(playerid, COLOR_XYZ, "Das Fahrzeug kann maximal 1000 Einheiten fassen");
    }
    else
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    VehicleItem[vehicleid] += 100;
    SendClientMessage(playerid, COLOR_XYZ, "Items wurden um 100 Einheiten erhöht");
    }
    }
    return 1;
    }


    PS: Wenn es dir um das Schreiben/Lesen von diesen Daten geht, schau dir mal diese Links an:


    [ INCLUDE ] HSA Multi - Einfach und schnell speichern! v. 2.1.1
    Gruss

    Hallo


    Gloabel Variabeln für einen KillTimer von ner playerid sind unberechenbar. Am Betsen so:


    new statusRegisterTimer[MAX_PLAYERS];
    new statusLoginTimer[MAX_PLAYERS];


    statusRegisterTimer[playerid] = SetTimerEx("RegisterTimer",60000,1,"i",playerid);
    statusLoginTimer[playerid] = SetTimerEx("LoginTimer",60000,1,"i",playerid);


    KillTimer(statusRegisterTimer[playerid]);
    KillTimer(statusLoginTimer[playerid]);



    Das Ganze geht natürlich auch mit PVars.

    Hallo


    Es gibt 2 Arten von Timern:


    Code
    SetTimer() -> Funktion, Intervall und Wiederholung
    SetTimerEx() -> Funktion, Intervall, Wiederholung und Parameter


    Da playerid ein Integer und folglich ein Parameter ist, musst Du SetTimerEx verwenden. Nun möchtest Du bei LoginTimer() und RegisterTimer() auch wissen, welchen Spieler(playerid) es betrifft, sprich Du musst als Parameter dort die playerid des Spielers verwenden.


    Hier den Link für SetTimerEx():
    http://wiki.sa-mp.com/wiki/SetTimerEx


    Ich hoffe dir ist klar, dass die beiden Funktionen nicht wissen, was/wer nun playerid ist


    Gruss

    Hallo


    Meiner Meinung nach eine gute Idee. Aber wirf mal einen Blick nach C++ (Denkanstoss, kein Pawn vs C/++ Vergleich) und überleg dir mal , wann man zu bitmässigem AND/OR (und Bitshifting) rät und greifen sollte und wann nicht. Dazu kommt noch das wie. Ein Integer ist so klein, da sparst du fast nichts und zumal alloziert die Pawn Virtual Machine ihren Speicher aufgrund der Angaben im Fileheader in der Initialisierungsphase, von dem her also...


    Aber mal ein abwechslungsreicher Post hier im Forum ;)


    PS: Dazu hier ein Beitrag in C/++. Beachte den Beitrag über "Sinn" und Werkzeug zum setzen:


    http://stackoverflow.com/quest…ngle-bit-in-c/47990#47990

    Hallo


    Also sieh dir mal bitte den Rückgabewert von SetVehicleNumberPlate an, was fällt dir auf (Im Englischen heisst es return value):


    http://wiki.sa-mp.com/wiki/SetVehiclePlate


    Ich würde es so machen, das sieht einiges schöner aus:


    new car;
    car = CreateVehicle(vid,x,y,z,3,c1,c2,-1);
    SetVehicleNumberPlate(car, "Support");


    oder dann halt meiner Meinung nach unschön wie im Wiki:


    SetVehicleNumberPlate(CreateVehicle(542,2074.73071289,1089.89611816,10.51527309,0.00000000,-1,-1, -1), "Jay's Ride");


    Zudem noch 2 Anmerkungen:

    • Du musst normalerweise nach SetVehicNumberPlate das Fahrzeug respawnen lassen
    • Der Code löscht dir auch Fahrzeuge, welche von anderen Admins erstellt worden sind


    Gruss


    Equ
    Wenn man keine Ahnung hat einfach bitte nichts sagen:



    new car,supportcarf; // <-- Bereits vorhanden !!!

    Also diverse Fragen über GTA V hab ich, aber die kannst Du mir weder ein anderer momentan beantworten, vielen Dank Rockstar !


    PS: Grund ist die Informationspolitik von Rockstar.....

    Hallo


    Es geht doch nicht darum, was ist besser und was ist schlechter. PVars und Array (Enumeration) haben beide ihre Vorteile und Nachteile. Ich brauch gerne PVars, weil man sie beim Logout des Spielers im Gegensatz zu einem Array nicht resetten muss und weil man sie formatieren kann (zB pWaffe1, pWaffe2 .... pWaffe13). Nachteil ist halt, man merkt einen Schreibfehler im Variabelnnamen nicht grad zur Compiletime.


    Aber jetzt einen PVar vs. Array Kampf zu führen ist doch unnötig, es geht schlussendlich darum was er möchte und was für ihn besser geeignet ist.


    Gruss

    Hallo


    Also Du speicherst für jedes Fahrzeug den Ersteller. Möchtest Du nun deine Fahrzeuge zerstören, zerstörst Du nur die Fahrzeuge, welche auch deine ID haben, sprich welche Du erstellt hast. Sähe in etwa so aus:



    new VehicleOwnerAsID[MAX_VEHICLES]; // Speichert die Playerid des Erstellers, - 1 bedeutet nicht erstellt


    public OnGameModeInit()
    {
    for(new i = 0; i < MAX_VEHICLES; i++)
    {
    VehicleOwnerAsID[i] = -1; // Resetten
    }
    }


    ocmd:createveh(playerid, params[])
    {
    new modelid, color1, color2;
    if(sscanf(params, "iii", modelid, color1, color2)) return SendClientMessage(playerid, Rot, "Fehler");
    // Hier deine Adminabfrage/ Werteüberprufung what ever


    new vehid = CreateVehicle(...);
    VehicleOwnerAsID[vehid] = playerid;
    // Hier halt der restliche Code
    return 1;
    }


    ocmd:deletemyvehs(playerid, params[])
    {
    #pragma unused params
    for(new i = 0; i < MAX_VEHICLES; i++)
    {
    if(VehicleOwnerAsID[i] == playerid)
    {
    DestroyVehicle(i);
    VehicleOwnerAsID[i] = -1;
    }
    }
    return 1;
    }


    Gruss


    Edit: Die Lösung über mir würde auch gehen, nür können dann nicht mehrere Administratoren diesen Befehl benützen, was hier geht

    Hallo


    Sonst ändere die Koordinaten so, dass sie dir zusagen, ich hab mich nach dieser Enumeration orientiert ;)



    enum AHInfo //Autohausinfo
    {
    Name[50], //Autohaus name
    Float:posx, //autohaus posi
    Float:posy,
    Float:posz,
    Float:spawnx, //gekauftes auto spawn
    Float:spawny,
    Float:spawnz,
    Float:spawna,
    Kasse, //Kasse
    Besitzer[MAX_PLAYER_NAME] //name des Besitzers
    }


    Gruss

    Ein Blick in den Code ?



    new Autohaus[1][AHInfo] = {//die [1] steht für die Anzahl der Autohäuser. [AHinfo] steht für die enum.
    {"Los Santos Autohaus", 500.0, -250.0, 15.25, -3.0, -50.5, 15.2, 270.5, 0, "Staat"};


    Also sollte (Sollte bedeutet sollte, da ich das Script nicht kenne) es bei X = 500.0, Y = -250.0, Z = 15.25 liegen. Wenn dir die Koordinaten unklar sind, schau die Enumeration AHInfo an


    Gruss

    Hallo


    Eventuell kann mir jemand die Frage beantworten. Warum müssen Funktionen, welche mit SetTimer oder SetTimerEx etc. aufgerufen werden forward'ed werden ? Geht es schlichtwegs darum, dass die Hostapplikation mittels amx_FindPublic() die Funktion/Speicheradresse in der Virtual Machine finden kann und dort dann einhängen und die Parameter pushen kann oder wo liegt der Grund ?


    Siehe http://www.compuphase.com/pawn/Pawn_Implementer_Guide.pdf
    Seite 17 - Calling public functions


    Gruss

    Innen Top, aussen "Flop". Also ich kann dir nur 7/10 geben. Drive-In ist super (Man kann reinsehen und theoretisch ne Animation/Bot platzieren), aber verpass dem Haus ein richtiges Dach, das Flachdach passt meiner Meinung nach einfach garnicht dazu ;)