Beiträge von Manyula

    Wenn du mit dem Scripten erst anfangen willst, dann würd ich sagen, dass du dir erst mal ein wenig Grundwissen aneignest und schaust, was du mit den elementarsten Dingen so schönes zusammenschustern kannst. Das Erstellen eines Gamemodes soll ja ein Produkt deiner Kreativität sein, nicht die Nachahmung fremder Konzepte.


    B2T: Was mich häufig aufregt ist, dass Leute, die einen DM Gamemode ins Leben rufen von Anfang an meinen, dass sie bis zum Serverstart all ihre Ideen eingebaut haben müssen, was kompletter Blödsinn ist. Bei vielen Servern, die ich bisher mal beobachtet habe, war das Angebot viel zu groß, in Anbetracht einer meist kleinen Playerbase. Die DM Möglichkeiten schlicht und einfach halten, ist für mich die Devise. Hierzu kommt natürlich die Schwierigkeit herauszufinden, was man denn bringen will: Gangfights? Walkies? Runnies? Erlaube ich C Bug oder 2 shot? Wie bereits gesagt, für eine kleine Playerbase ist ein großes Angebot nicht besonders vom Vorteil, insbesondere dann nicht, wenn die Geschmäcker dazu noch verschieden sind. So kommen in den einzelnen DM Bereichen keine gescheiten Kämpfe zustande, und die Lust geht flöten. Der Content des Gamemodes muss mit der Playerbase wachsen.

    Ich hab gedacht, das wäre doppelt gemoppelt, deswegen hab ich es eingegrenzt.
    Einmal eine Abfrage ob = 0 für eine bestimmte ClientMessage.
    Und zum Zweiten eine Abfrage, ob des größer 0 und kleiner 5 ist, also 1 bis 4, für eine weitere ClientMessage.


    EDIT: Das ist nicht des Rätsels Lösung.

    COMMAND:fix(playerid, params[])
    {
    if(PlayerActionForbidden(playerid)) //Abfrage, ob der Spieler den CMD benutzen darf, unabhängig vom Spielerrang, also irrelevant für mein momentanes Problem
    return 1;


    if(pInfo[playerid][AdminLevel] == 0)
    return SendLanguageMessage(playerid, C_RED, "»ERROR« Du bist kein Admin.", "»ERROR« You are not an admin.");


    else if(pInfo[playerid][AdminLevel] > 0 && pInfo[playerid][AdminLevel] < 5)
    return SendLanguageMessage(playerid, C_RED, "»ERROR« Du hast einen zu niedrigen Adminlevel, um diese Aktion auszuführen!", "»ERROR« Your admin level is too low to execute this action!");


    else if(pInfo[playerid][AdminLevel] == 5 || IsPlayerAdmin(playerid))
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new Float:VehicleAngle,
    Vehicle = GetPlayerVehicleID(playerid);
    RepairVehicle(Vehicle);
    SetVehicleHealth(Vehicle, 1000.0);
    GetVehicleZAngle(Vehicle, VehicleAngle);
    SetVehicleZAngle(Vehicle, VehicleAngle);
    PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
    SendLanguageMessage(playerid, C_TURQUOISE, "»ADMININFO« Das Fahrzeug wurde repariert.", "»ADMININFO« The vehicle has been repaired.");
    }
    else SendLanguageMessage(playerid, C_RED, "»ERROR« Du bist in keinem Fahrzeug!", "»ERROR« You are not in a vehicle!");
    }
    return 1;
    }


    Also, wie ihr bestimmt sehen könnt, möchte ich, dass Spieler mit dem Level 0 bis 4 diesen Befehl nicht nutzen dürfen.
    Ist der Spieler Level 5 ODER als RCON eingeloggt, soll er den CMD nutzen können. Das mit dem Level klappt, aber, wenn ich z.B. Level 0 bin, und RCON bin, dann klappt die ganze Geschichte nicht mehr. Was mache ich falsch?


    Vielen Dank!

    An deiner Stelle würde ich daraus einfach einen Command basteln, bzw. unter dem Callback OnPlayerClickPlayer machen.
    Da erstellst du dann einfach einen Dialog (MSG BOX Style), und formatierst die Spielerdaten da rein.

    Ich habe nun folgende stock Funtion geschrieben.
    stock GivePlayerMoneyEx(playerid, money)
    {
    new moneystring[11];
    if(money > 0) format(moneystring, sizeof(moneystring), "~g~+%d$", money);
    else if(money < 0) format(moneystring, sizeof(moneystring), "~r~%d$", money);
    GameTextForPlayer(playerid, moneystring, 5000, 1);
    GivePlayerMoney(playerid, money);
    return 1;
    }


    Auf der Wikiseite steht ja schon, dass es unabhängig von der Angabe in ms nach 8s ausfadet.
    Wenn ich nun allerdings innerhalb der 8s einen anderen GameText anzeigen möchte, wird dieser nicht angezeigt, bis der davor gezeigte nicht ausgefadet ist.


    Beispiel:
    Ich erhalte 100$. -> das wird im gametext angezeigt. ("+100$")
    Mir werden 50$ abgezogen. -> der gametext ("-50$") wird mir nicht angezeigt, da ("+100$") noch nicht ausgefadet ist.


    Gibt es dafür eine tolle Lösung?


    Danke!

    enum HPandAP
    {
    health,
    armour
    }


    new Float:PlayerHPandAP[MAX_PLAYERS][HPandAP];


    stock SavePlayerHPandAP(playerid)
    {
    GetPlayerHealth(playerid, PlayerHPandAP[playerid][health]); //Tag Mismatch
    GetPlayerArmour(playerid, PlayerHPandAP[playerid][armour]); //Tag Mismatch
    return 1;
    }


    stock ReturnPlayerHPandAP(playerid)
    {
    SetPlayerHealth(playerid, PlayerHPandAP[playerid][health]);
    SetPlayerArmour(playerid, PlayerHPandAP[playerid][armour]);
    return 1;
    }


    Habe es nun mit einem enum gemacht. Mir wird aber noch ein Tag Mismatch angezeigt.

    Ich stecke bei etwas so trivialem fest, dass es schon zu trivial ist.


    #define MAX_HP_AND_AP 100


    new Float:PlayerHPandAP[MAX_PLAYERS][MAX_HP_AND_AP];


    stock SavePlayerHPandAP(playerid)
    {
    new Float:health,
    Float:armour;
    GetPlayerHealth(playerid, PlayerHPandAP[playerid][health]);
    GetPlayerArmour(playerid, PlayerHPandAP[playerid][armour]);
    return 1;
    }


    stock ReturnPlayerHPandAP(playerid)
    {
    new Float:health,
    Float:armour;
    SetPlayerHealth(playerid, PlayerHPandAP[playerid][health]);
    SetPlayerArmour(playerid, PlayerHPandAP[playerid][armour]);
    return 1;
    }


    Ich realisiere, dass der Code kompletter Nonsense ist. Ich stehe gerade echt auf dem Schlauch.^^


    EDIT: Code update.

    Danke für deine Mühe, sehr sauberes Tutorial! ;)
    Die ganzen Präfixe, die du bei deiner Variablendeklaration benutzt, verwirren mich etwas, aber das wird schon. Ist doch eher was für Fortgeschrittene einen interaktiven Dialog zu scripten.

    0.3z RC2 ist nun verfügbar.


    Zitat

    Originally Posted by Kalcor
    Updates:


    SA-MP 0.3z RC2 Client/Server update


    - Removes autoaim ability from the joypad controls
    - Adds BULLET_HIT_TYPE_PLAYER_OBJECT 4
    - Fixes gunshell/smoke particle offset problem

    Das wird eine riesen Umstellung.^^
    Die Schere zwischen Pro's und Noobs geht weiter zusammen, was nicht unbedingt negativ sein muss, sondern, im Gegenteil, sogar weitaus interessanter. Für viele vllt auch ein großer Frustfaktor. :D Besonders für die Leute, die 2shot beherrschen, wird es eine krasse Umstellung von Lead Aim zum On Skin Aim. Aber, wie gesagt, das mit dem Joypad ist doch ziemlich nervig, da wirklich jeder Schuss trifft. Wenn man nicht mal gerade irgendwo spielt, wo man in Deckung gehen kann, dann ist man ein leichtes Opfer.


    Im Großen und Ganzen gefällt mir die Version, hab schon lange auf die Implementierung von OnPlayerWeaponShot gewartet.

    Ich finde Sanktionen auch ein wenig übertrieben.
    Themen, die auch schon zig Mal vorgekommen sind, werden auf dem Board eh schon von den Usern, die helfen könne, es aber nicht wollen, gekonnt ignoriert, hab ich auch schon so einige Male erlebt, obwohl ich die SuFu vorher benutzt hatte.

    CMD:one(playerid, params[])
    {
    if(pInfo[playerid][Language] == LANGUAGE_DE) SendClientMessage(playerid, -1, "Deutscher Text");
    if(pInfo[playerid][Language] == LANGUAGE_EN) SendClientMessage(playerid, -1, "English Text");
    return 1;
    }


    //=====================================================================================================


    stock SendLanguageMessage(playerid, color, LanguageDE[], LanguageEN[])
    {
    if(pInfo[playerid][Language] == LANGUAGE_DE) SendClientMessage(playerid, color, LanguageDE);
    if(pInfo[playerid][Language] == LANGUAGE_EN) SendClientMessage(playerid, color, LanguageEN);
    return 1;
    }


    CMD:two(playerid, params[]);
    {
    new stringDE[128], stringEN[128];
    format(stringDE, sizeof(stringDE), "Deutscher Text");
    format(stringEN, sizeof(stringEN), "English text");
    SendLanguageMessage(playerid, -1, stringDE, stringEN);
    return 1;
    }


    "Two" finde ich z.B. wesentlich komfortabler zum Arbeiten. "One" ist aber um einiges kürzer.

    Das ist alles doch ziemlich viel Neuland...
    Ich versteh jetzt nicht, warum ich da mit sscanf einen String splitten muss? Würde sich bitte jmd die Mühe machen ein Musterbeispiel für das, was im Callback gemacht werden muss, zu machen?

    Was schreibe ich dann unter den einzelnen listitems unterm Callback?
    Angezeigt werden soll alles in folgendem Format: "Manyula - MapName - Waffe".
    Ich bin gerade scheinbar etwas begriffsstutzig, tut mir Leid. D:

    Umfangreich ist i.d.R. immer gut. Vielen Dank für deine Mühe, jetzt macht es schon mehr Sinn. ;)


    Ich werd mich mal ransetzen!


    EDIT: Okay, ich bin immer noch verwirrt.
    Wo baue ich die Schleife ein? Im Command, oder unter dem Callback?