Beiträge von Domain_26


    Leider die zweite Variante. Der Timer soll Loopen. Habe es jetzt so implementiert, dass der Timer nur beim betreten der Arena (DM Script) erstellt wird und gelöscht wenn der Spieler die Arena verlässt.
    Somit läuft der Timer nicht permanent (?).

    Es sollen für Spieler die im selbem Team sind (GetPlayerTeam) Marker gesetzt werden (SetPlayerMarkerForPlayer). Siehe ein paar Posts weiter oben.


    Hab es schon bei OnPlayerSpawn  versucht aber es ist buggy. (laut SA-MP Forum funktioniert das auch nicht vernünftig in dem Callback, frag mich nicht wieso)

    Hey, hab glaub schon mal hier wegen dem Problem geschrieben.


    Es geht um SetPlayerMarkerForPlayer. Es sollen nur Marker für Spieler gesetzt werden die sich im selben Team befinden (GetPlayerTeam).


    Folgendes Problem: Manchmal erhalten die Teammitglieder auch Marker aber manchmal nicht


    Hab das mit einem Timer geschrieben der nach 1 Sekunde die Marker setzen soll.


    Code (runtergebrochen) :



    public OnPlayerSpawn(playerid){
    SetTimerEx("ShowFactionTeamMarker", 1000, 0, "i", playerid);
    return 1;
    }


    forward ShowFactionTeamMarker(playerid);
    public ShowFactionTeamMarker(playerid){
    for(new i = 0; i < MAX_PLAYERS; i++){
    if(!IsPlayerConnected(i))continue;

    if(GetPlayerTeam(playerid) == GetPlayerTeam(i)){
    SetPlayerMarkerForPlayer(playerid, i, 0xFF00FFFF);
    SetPlayerMarkerForPlayer(i, playerid, 0xFF00FFFF);
    }
    }
    return 1;
    }

    Wie kann man Marker erstellen die nur innerhalb eines Teams funtkionieren (SetPlayerTeam)?


    Bsp.: Man geht in eine Fratkion und es werden nur Marker von allen Mitgliedern der Fraktion angezeigt.


    Mein bisheriger Ansatz:


    Code
    for(new i = 0; i < MAX_PLAYERS; i++){
    				if(!IsPlayerConnected(i))continue;
    				if(GetPlayerTeam(playerid) == GetPlayerTeam(i)){
    					SetPlayerMarkerForPlayer(playerid, i, GetPlayerColor(i) & 0xC2A2DAFF);
    					SetPlayerMarkerForPlayer(i, playerid, GetPlayerColor(playerid) & 0xC2A2DAFF);
    				}	
    			}

    Problem: Die Marker werden nicht angezeigt und die Farbe des Namen ändert sich nur bei einem selbst.


    Habe im Script ShowPlayerMarkers(2).


    Bei OnPlayerSpawn  hab ich standardmäßig SetPlayerColor(playerid, 0xFFFFFF00) drinne, Marker sollen nur in dieser Arena (Gangfigt) sichtbar sein .

    @Cireyses


    Es ist ein IP-Bann System (Ist ein mix aus MySQL (Speicherung der gesperrten IPs) und /rcon banip bzw. unbanip )


    Beim Problem geht es hier nur um das Entbannen:


    Wenn die IP in der Liste ausgewählt wird soll diese auch entsperrt werden


    Es werden dem Admin (Bsp.: Head-Admin) nur die IPs angezeigt die er auch selber gesperrt hat.
    Nur der ranghöchste Admin (Bsp.: Projektleiter) kann alle gesperrten IPs sehen.


    Deshalb ist die Länge der Liste bei jedem Spieler anders weshalb listitem immer verschieden groß ist.

    Ist es möglich mit eine Dialog-Liste mit unbestimmten Elementen (listitem) zu erzeugen?


    Bsp.:


    Eine Datenbank mit einigen Datensätzen. Diese sollen in der Dialog-Liste angezeigt werden und auch auswählbar sein, sodass auch was passiert wenn diese ausgewählt werden.


    Nun ist diese Liste nicht konstant, sondern ändert sich ständig (Löschen von Datensätzen bzw. Erstellen). Das Problem ist nun switch(listitem) (was ich benutze).
    Wie drückt man das aus in OnDialoResponse, da ich keine feste Anzahl an Fällen (case) habe?


    Mein Ansatz wären die Anzahl der Zeilen (rows), weitre komm ich gerade nicht.


    TL;DR: Hauptproblem: Auswählen von einer unbestimmten Anzahl an Listen-Elementen .

    Ich erstelle einen 3DTextLabel , welcher nur für bestimmte Spieler anzeigt wird (Admins)


    Klappt auch, doch wenn ich es wieder löschen will wird es nur für eine Person gelöscht, bei den anderen bleibt es sichtbar.


    Testumgebung: 2 Spieler, beide Admin (hier Rang 3 und höher) für den einen wird es gelöscht, beim anderen nicht.


    Code:




    //Erstellung
    for(new j = 0; j < MAX_PLAYERS; j++){
    if(!IsPlayerConnected(j))continue;
    if(!IsPlayerAnAdmin(j, 3))continue;
    eventBar[i][barlabel] = CreateDynamic3DTextLabel(str, COLOR_TWHITE, pos[0], pos[1], pos[2], 5.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), j);
    }


    //Löschung
    for(new i = 0; i < MAX_EVENT_BARRICADE; i++){
    if(eventBar[i][baractive] == 1){
    eventBar[i][baractive] = 0;
    DestroyDynamicObject(eventBar[i][barobject]);
    DestroyDynamic3DTextLabel(eventBar[i][barlabel]);
    }


    }

    Warum wird mein Objekt erst sichtbar wenn ich mich nach dem Erstellen bewege?
    Wenn ich stillstehe ist das Objekt nicht sichtbar. Erste wenn ich meinen Charakter bewege spawnt es unter mir.


    ocmd:barricade(playerid, params[]){
    if(IsPlayerAnAdmin(playerid, 3)){
    new Float:pos[4];
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GetPlayerFacingAngle(playerid, pos[3]);
    for(new i = 0; i < MAX_EVENT_BARRICADE; i++){
    if(eventBar[i][baractive] == 0){
    new str[32];
    format(str, sizeof(str), "Absperrung Nr. %i", i);
    eventBar[i][baractive] = 1;
    eventBar[i][barobject] = CreateDynamicObject(978, pos[0], pos[1], pos[2] - 0.5, 0.0, 0.0, pos[3], GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
    for(new j = 0; j < MAX_PLAYERS; j++){
    if(!IsPlayerAnAdmin(j, 3))continue;
    eventBar[i][barlabel] = CreateDynamic3DTextLabel(str, COLOR_TWHITE, pos[0], pos[1], pos[2], 5.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), j);
    }
    break;
    }
    }
    return 1;
    }else{
    SendClientMessage(playerid, COLOR_GRAY, notAdmin);
    }
    return SendClientMessage(playerid, COLOR_GRAY, "Absperrung konnte nicht erstellt werden.");
    }



    Benutze CreatDynamicObject vom streamer-Plugin.


    Ich vermute, dass es was mit dem streamer-Plugin zutun hat.

    Wie kann man in PAWN ausdrücken, dass etwas mit einer x%-tigen Chance passiert.


    Beispiel:


    Eine 5 prozentige Chance, dass ein Spieler ein Paket (Pickup-spawn) in Form von EXP, Geld droppt.


    random() solle da etwas unzuverlässig arbeiten, hab ich gehört.

    Hol sie dir doch einfach mit Hilfe des SAMP Colorpickers?
    Würde denke mal am schnellsten gehen.

    die exakten Farbcodes


    Soll ich etwa die Farben erraten?
    Es gibt zwar Bilder von den Gebieten des Servers, aber man muss das Alpha (Transparenz) berücksichtigen. Damit wird es schon etwas schwieriger, außer jemand hat eine Lösung das zu umgehen.

    Hi,


    hat jemand zufällig die exakten Farbcodes von den Gangzones auf RGN?


    Um genau zu sein von diesen Fraktionen:


    Grove Street
    Ballas
    Vagos
    Yakuza
    Cali Kartell
    Brigada
    Rifa
    Triaden


    Weiß jetzt nicht ob solche Anfragen hier erlaubt sind oder in dieses Forum passen. Wenn nicht, dann löschen/verschieben bitte.


    Gruß

    Deine Ansätze haben nicht geklappt, aber hab es trotzdem hingekriegt.


    GetPlayerCameraMode war doch nicht 55 als ich den Drive-By beendet habe (es war 18 -> Fahrzeug Kamera)


    Ich musste erst mit GetPlayerWeaponData alle Waffen speichern und die letzte Waffe in der Hand in einer Variable, dann ResetPlayerWeapons, nach einem Timer (kA wieso, aber ohne Funktionierts nicht) alle Waffen wieder zurück geben und mit SetPlayerArmedWeapon die letzte Waffe wieder auf die Hand geben.

    Hey,


    bin gerade dabei ein Drive-By-System zu schreiben bei dem man den Drive-By Modus beenden und erneut starten kann.


    Das beenden klappt, das erneute starten, nun...




    Code
    if(newkeys & KEY_CROUCH){
    	    if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_PASSENGER){
    	        if(GetPlayerCameraMode(playerid) == 55){
    				dPlayerWeapons[playerid] = GetPlayerWeapon(playerid);
    				SetPlayerArmedWeapon(playerid, 1);
    				ApplyAnimation(playerid, "ped", "CAR_sit", 4.1, 0, 0, 0, 0, 0, 0);
    				SetPlayerArmedWeapon(playerid, dPlayerWeapons[playerid]);
    	        }
    	    }
    	}


    Ich frage über GetPlayerCameraMode ab ob der Spieler überhaupt im Drive-By Modus ist. Dann setze ich die Sitz-Animation für ihn damit er mit dem Drive-By aufhört.


    Das Hauptproblem ist nun, dass anscheinend der Drive-By Modus nicht wirklich beendet ist. Ich habe bereits mit printf den Kamera-Modus nach Beendigung des Drive-By ausgeben lassen und er gibt mir 55 aus was bedeutet, dass er immer noch im Drive-By ist.


    Meine Frage ist nun, ob und wie man den Drive-By Modus vollständig beenden kann (ohne den dabei Spieler aus dem Fahrzeug zu werfen usw.).

    Jetzt kommt das Problem:


    So wie ich es gemacht habe, benötige ich playerid, da ich aber den Timer bei OnGameModeInit(); ersstellt habe, ist SetTimerEx(); nicht möglich, da
    Das Callback kein Wert wie playerid zurückgibt bzw. garnichts zurückgibt.


    Neuer Code (nun mit PlayerTextDraw):


    for(new i=0;i<MAX_PLAYERS; i++){
    if(!IsPlayerConnected(i))continue;
    if(gSpectateID[i] == playerid){
    new info[128],info1[128],info2[128],Float:health,wp[2];
    GetPlayerHealth(playerid,health);
    format(info,sizeof(info),"Beobachtungsinformationen von: %s (%d)",SpielerName(playerid),playerid);
    format(info1,sizeof(info1),"HP: %.2f, Ping: %d, FPS: %d~n~~n~~n~",health,GetPlayerPing(playerid),pFPS[playerid]);
    for(new x=0;x<6;x++){
    GetPlayerWeaponData(playerid,x,wp[0],wp[1]);
    if(wp[0] != 0){
    format(info2,sizeof(info2),"%s%d: %s(%d)",info2,x,WaffenName[wp[0]],wp[1]);
    }
    }
    }
    }
    PlayerTextDrawSetString(playerid,t_Name[playerid],info);
    PlayerTextDrawSetString(playerid,t_Stats[playerid],info1);
    PlayerTextDrawSetString(playerid,t_WaffenInfo[playerid],info2);


    Also, ich muss da irgendwie playerid reinbringen aber dabei nicht wieder die ineffiziente Methode verwenden.
    Oder kann man das einfacher machen?

    Hey,


    ich habe ein Problem mit meinem Textdraw, der Informationen von Spielern während des Spectaten übergibt (HP, FPS, Ping, Waffen etc.).
    Um genau zu sein betrifft das die Waffeninformationen, denn diese werden zwar dargestellt, aber nur die Waffendaten im ersten (nullten?) Waffenslot werden übergeben
    bzw. als Textdraw dargestellt.
    Das bedeutet alle anderen Waffendaten in anderen Slots werden ignoriert und nicht dargestellt.
    Ich habs zwar noch nicht getestet aber wäre es richtig, einfach noch ein Textdraw im gleichen Format zu erstellen?


    grobe Skizze vom TextDraw (ASCII Art Level: -1):


    Code
    Beobachtungsinformationen von Name(ID) <- Text[7]
    ----------------------------------------------------
    HP: , Ping:, FPS:                                   | <- Text[6]
                                              BOX       |
    Waffen:                                             | <-Text[8]
    WaffeX(Munition)                                    | <-Text[9]
    ----------------------------------------------------


    Code:


    ocmd:spec(playerid, params[]){
    TextDrawShowForPlayer(playerid,Text[6]); //Wesentliche
    TextDrawShowForPlayer(playerid,Text[7]);
    TextDrawShowForPlayer(playerid,Text[8]);
    TextDrawShowForPlayer(playerid,Text[9]);
    gSpecTimer[playerid] = SetTimerEx("SpecInfo",1000,1,"d",pID);
    }


    public SpecInfo(pID)
    {
    new info[128],info1[128],info2[128],Float:health,wp[2];
    GetPlayerHealth(pID,health);
    format(info,sizeof(info),"Beobachtungsinformationen von: %s (%d)",SpielerName(pID),pID);
    format(info1,sizeof(info1),"HP: %.2f, Ping: %d, FPS: %d~n~~n~~n~",health,GetPlayerPing(pID),pFPS[pID]);
    for(new x=0;x<6;x++){
    GetPlayerWeaponData(pID,x,wp[0],wp[1]);
    if(wp[0] != 0){
    format(info2,sizeof(info2),"%d: %s(%d)",x,WaffenName[wp[0]],wp[1]);
    TextDrawSetString(Text[9],info2);
    }
    }
    TextDrawSetString(Text[6],info1);
    TextDrawSetString(Text[7],info);
    }


    (Ist zwar nich die Effizienteste - vielleicht auch garnicht geignete Methode, (Timer wird für jeden, der den Befehl eingibt erstellt ) aber für den Anfang erstmal ist es so, da ich noch etwas unerfahren mit dynamischen TextDraws bin)