Beiträge von Manyula

    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, 2000, 1);
    GivePlayerMoney(playerid, money);
    return 1;
    }


    EDIT: Der Code stimmt, ich hab eine Kleinigkeit nicht bedacht. In der User File war für pInfo[playerid][Money] auch der Wert 5000 gespeichert. Deswegen könnte ich den Unterschied nicht sehen und dachte, es funktioniert nicht.^^

    Halte ich für subotoptimal... Ich habs jetzt mal mit nem boolean versucht.


    if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);
    if(response)
    {
    new hashpass[129],
    pName_[MAX_PLAYER_NAME],
    stringDE_[150],
    stringEN_[150];
    GetPlayerName(playerid, pName_, sizeof(pName_));
    WP_Hash(hashpass, sizeof(hashpass), inputtext);
    if(!strcmp(hashpass, pInfo[playerid][Password], false))
    {
    INI_ParseFile(Path(playerid), "loadaccount_%s", .bExtra = true, .extra = playerid);
    format(stringDE_, sizeof(stringDE_), "»SPIELERINFO« Willkommen zurück, "#C_GOLD_E"%s"#C_TURQUOISE_E"! Du hast dich erfolgreich eingeloggt.", pName_);
    format(stringEN_, sizeof(stringEN_), "»PLAYERINFO« Welcome back, "#C_GOLD_E"%s"#C_TURQUOISE_E"! You have successfully logged in.", pName_);
    SendLanguageMessage(playerid, C_TURQUOISE, stringDE_, stringEN_);
    LoggedIn[playerid] = true;
    JustLoggedIn[playerid] = true; //Eingefügt
    }
    else
    {
    format(stringDE_, sizeof(stringDE_), "Willkommen zurück, "#C_LIGHT_BLUE_E"%s"#C_DIALOG_E"! Dieser Account ist registriert!\nBitte gib das Passwort für diesen Account ein!\n"#C_RED_E"Falsches Passwort!", pName_);
    format(stringEN_, sizeof(stringEN_), "Welcome back, "#C_LIGHT_BLUE_E"%s"#C_DIALOG_E"! This account is registered!\nPlease type in the password for this account!\n"#C_RED_E"Wrong password!", pName_);
    ShowLanguageDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Login", stringDE_, stringEN_, "Einloggen", "Log in", "Abbrechen", "Cancel");
    return 1;
    }
    }
    }


    public OnPlayerSpawn(playerid)
    {
    new VirtualWorld = GetPlayerVirtualWorld(playerid);
    switch(VirtualWorld)
    {
    case 0:
    {
    UseTeleports[playerid] = true;
    if(JustLoggedIn[playerid] == true)
    {
    SendClientMessage(playerid, -1, "JustLoggedIn[playerid] Abfrage: TRUE.");
    GivePlayerMoneyEx(playerid, pInfo[playerid][Money]);
    SendClientMessage(playerid, -1, "Geld gegeben.");
    SetPlayerScore(playerid, pInfo[playerid][Score]);
    SendClientMessage(playerid, -1, "Score gegeben.");
    JustLoggedIn[playerid] = false;
    SendClientMessage(playerid, -1, "JustLoggedIn[playerid] == false");
    return 1;
    }
    else if(JustLoggedIn[playerid] == false) return GivePlayerMoneyEx(playerid, 5000);
    SetSpawnProtection(playerid);
    }
    case 1..7:
    {
    UseTeleports[playerid] = false;
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    SetSpawnProtection(playerid);
    }
    }
    return 1;
    }


    Das Ganze will aber nicht so recht funktionieren. Wenn der Spieler spawnt, bekommt er immer 5000$ auf die Hand.

    Hallo, liebe Community,


    ich hätte mal eine allgemeine Frage zu Arrays, bzw. multidimensionalen Arrays.


    new OhneIndexAngabe[][] =
    {
    //Code
    };


    new MitIndexAngabe[5][3] =
    {
    //Code
    };


    Spielt es eine Rolle, ob man, z.B. bei einem zweidimensionalen Array, die genauen Spalten- und Zeilen angibt, also, den genauen Index?


    Danke!

    //Globale Variablen


    new GangZone[MAX_GANG_ZONES];
    new GangZoneCP[MAX_GANG_ZONES];


    new Float:GW_ZoneCoordinates[][4] =
    {
    //Zonenkoordinaten im Format {MinX, MinY, MaxX, MaxY},
    };


    new Float: GW_MapIcons[][3] =
    {
    //Koordinaten für die Mapicons im Format {X, Y, Z},
    };


    new Float:GW_CaptureCPs[][3] =
    {
    //Koordinaten für die CPs im Format {X, Y, Z},
    };


    //Callbacks mitsamt Hooks =========================================================================================================================================================


    public OnGameModeInit()
    {
    for(new i=0; i < MAX_GANG_ZONES; i++)
    {
    GangZone[i] = GangZoneCreate(GW_ZoneCoordinates[i][i], GW_ZoneCoordinates[i][i+1], GW_ZoneCoordinates[i][i+2], GW_ZoneCoordinates[i][i+3]);
    }
    return GANG_OnGameModeInit();
    }


    forward GANG_OnGameModeInit();
    #if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
    #else
    #define _ALS_OnGameModeInit
    #endif
    #define OnGameModeInit GANG_OnGameModeInit


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


    public OnPlayerSpawn(playerid)
    {
    for(new i=0; i < MAX_GANG_ZONES; i++)
    {
    CreateDynamicMapIcon(GW_MapIcons[i][i], GW_MapIcons[i][i+1], GW_MapIcons[i][i+2], 19, C_RED, 0, -1, -1, 250.0);
    GangZoneCP[i] = CreateDynamicCP(GW_CaptureCPs[i][i], GW_CaptureCPs[i][i+1], GW_CaptureCPs[i][i+2], 7.0, 0, -1, -1, 100.0);
    GangZoneShowForAll(GangZone[i], 0xFF000080);
    }
    return GANG_OnPlayerSpawn(playerid);
    }


    forward GANG_OnPlayerSpawn(playerid);
    #if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
    #else
    #define _ALS_OnPlayerSpawn
    #endif
    #define OnPlayerSpawn GANG_OnPlayerSpawn


    Es kompiliert alles einwandfrei. Wenn ich jedoch online gehe, sehe ich nicht von all dem. Ich spawne an den 0 Koordinaten und nichts wird erstellt.

    Ich grab das hier mal wieder aus.


    Das Problem ist, dass OnPlayerSpawn sowohl Spawns als auch RE-Spawns bearbeitet. Daraus resultiert dann bei mir, dass ein Spieler nach jedem Kill erstmal sein Geld verliert und beim anschließenden Respawn das Geld wieder bekommt, da ja OnPlayerSpawn aufgerufen wird.

    stock CreateLanguage3DTextLabel(const textDE[], const textEN[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0)
    {
    if(pInfo[playerid][Language] == LANGUAGE_DE) CreateDynamic3DTextLabel(const textDE[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
    if(pInfo[playerid][Language] == LANGUAGE_EN) CreateDynamic3DTextLabel(const textEN[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
    return 1;
    }


    Errors:
    error 029: invalid expression, assumed zero
    Die Errorline bezieht sich auf die erste if-Abfrage im Codeblock.

    Die meisten User hier wissen doch garnicht ob ein Thema eventuell interessant für andere sein könnte. Da wird oftmals ein Problem geschildert und man bekommt 10 Lösungen, eine davon klappte, dann kommt direkt "Bitte schließen". Ich meine was soll das? Gibt wahrscheinlich mehr als genug User, die genau das gleiche Problem haben und nicht weiter kommen.


    Selbst, wenn ein Thread dann geschlossen ist, ist er ja noch für die, die dasselbe Problem haben zugänglich. Wenn sie daraus nicht schlauer werden, öffnen sie eben einen neuen Thread, schildern ihr Problem und verweisen evtl. auf den Thread aus dem sie nicht schlauer wurden. Das lief bisher genauso, wo liegt das Problem?

    Ich halte es grundsätzlich nicht für verkehrt, wenn ein Threadersteller seinen eigenen Thread schließen kann. Was das Öffnen angeht, bin ich mir nicht ganz sicher, denke aber eher, dass das ganz der Moderation überlassen sein sollte.

    Die farbigen Quadrate bzw. Dreiecke auf dem Radar, die andere Spieler symbolisieren, haben zwei Bezeichnungen: (Radar) Blip oder Marker, wobei der erstere der gängigere ist.


    ElDiabolo: Danke, die Funktion ist das was ich brauche! Und das packe ich nun in eine For-Schleife, oder wie mache ich das am besten? Im Prinzip so?
    #define DEFENDER 0
    #define ATTACKER 1


    new GangWarMode[MAX_PLAYERS];


    CMD:gattack(playerid, params[])
    {
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(GangWarMode[i] == DEFENDER)
    {
    //Hide nametags and blips of ATTACKERs
    }
    if(GangWarMode[i] == ATTACKER)
    {
    //Hide nametags and blips of DEFENDERs
    }
    }
    return 1;
    }

    Hallo,


    Wie stelle ich es am besten an, dass bestimmte Nametags und Blips nur für bestimmte Spieler für eine bestimmte Zeit nicht sichtbar sind?
    Das ganze bezieht sich auf ein GangWar-System. Sobald ein GangWar gestartet wird, sollen beide Gangs jeweils die Blips und Nametags des Gegners nicht sehen können.
    Beispiel: Gang A sieht die Blips und Nametags ALLER Spieler, die auf dem Server sind, nur nicht die der gegnerischen Gang B.


    Da ich ja dazu lernen möchte, wären ein paar Denkanstöße für mich sehr nützlich!


    Vielen Dank schonmal!

    Ich habe dir meine Fragen schon per PM zukommen lassen, schreibe sie aber nochmals hier rein.


    1. Wie erstellt man Makros? Wozu sind sie gut? Wie sind sie effizienz-technisch einzustufen? Sind sie besser als stock Funktionen?
    2. Wobei werden CallLocalFuntion und CallRemoteFunction gebraucht? Kommt man auch gut ohne sie aus, wenn man nur einen GM scriptet?
    3. Wie stelle ich folgendes an:
    Ich habe in einem Array ein paar verschiedene Pickup Spawns festgelegt. Nun möchte ich, dass zwischen 300.000ms und 500.000ms (random) an einem der Spawns eine Minigun spawnt, die beim aufsammeln verschwindet. Wird sie nicht aufgesammelt, soll sie beim Erstellen der nächsten Minigun zerstört werden. Es soll also immer nur eine Minigun auf dem Feld sein. Das ganze darf sich nur in einer virtuellen Welt abspielen und nur, solange Spieler sich in dieser befinden.

    Hallo, liebe Community,


    ich habe nun einen Batzen an Gangzones erstellt. Soweit so gut. Nun ist mir im Bereich von Verona Beach aufgefallen, dass, wenn ich meinen Blickwinkel gen Norden, bzw leicht nord-westlich wende, dass die Gangzonen praktisch ins "negativ" wechseln, was bedeutet, dass die Gangzone mit dem Gebiet außenrum die Farbe tauscht. Anbei zwei Bilder, die zeigen, wie es normal aussieht und wie es "negativ" aussieht.




    Weiß jemand was die Ursache dafür sein könnte?