Dann hab ich doch gezeigt wie das gemacht werden kann ![]()
Beiträge von Kaliber
-
-
ob es richtig ist
...das ist mit einer Cäsar Verschlüsselung noch versehen...
//Edit: Mal entfernt, sonst hab ich zuviel verraten
//Edit:
Ihr könnt natürlich gerne in diesem Thread über Lösungsansätze etc diskutieren.
Das macht nicht soviel Sinn oder?

Aufgrund folgender Punkte:
- Ist das rätsel nicht allzu schwer zu lösen und die steps sind ziemlich kurz. Deshalb nehm ich mal das was ich geschrieben hatte raus
- Würde man sich ja somit konkurrenz machen, wenn man wirklich was gewinnen kann
- Nimmt man den anderen den Spaß am knobeln xD
-
Wenn du damit z.B. meinst:
C
Alles anzeigenenum test { a, b, c }; new Info[test]; //Um jetzt nachzufragen was c für einen Wert hat: printf("%d", Info[test:2]); //Sieht dein enum jetzt so aus: enum test { a, b, d, c }; //Würdest du mit selbem Code jetzt den Wert von d bekommenAlso falls du das meinst

Wenn nicht, musst du dich klarer artikulieren

Es hilft auch manchmal mit Pseudo-Code zur Darstellung zu arbeiten

-
Ich weiß noch nicht, auf was hättest du den mal wieder lust?
Ist schwer zu sagen. Aber ich kann ja mal meine Gedanken äußern:
Die meisten versuchen wie eh und je, entweder ein Reallife/Roleplay Projekt zu machen, aber in meinen Augen ist das mehr als ausgelutscht. Das zeigt sich auch anhand der Spielerzahlen dann auf den Servern. Die einzigen wo Leute noch spielen, sind entweder GFs, weil es einfach bisschen nostalgisch ist oder noch mehr bei GF + Statsback. Einfach damit man auf dem Stand vom letzten Server ist.
Das ist schön und gut, dass es solche Server gibt, aber in meinen Augen ist es deshalb ein wenig unnötig das wieder und wieder zu probieren, einfach weil es soviele schon probiert haben und es immer wieder gescheitert ist, zum Teil auch, weil der Aufwand so groß ist und durch wenige Spieler, können solche Konzepte dann nicht halten. Oder das Team springt ab, man kennt ja die üblichen Probleme, vom Geld mal ganz abgesehen.
Zumal von solchen Servern erwartet wird, dass man extrem LANGE spielt, was ich dämlich finde. Also die selbe Trucker Route nun zum 30.000x zu fahren, damit man bisschen Kohle bekommt, für ein Haus, was einem nix bringt...gg
Das macht ja auch nicht wirklich Spaß.
Also ich fände es cool, wenn es auf einem Server mal nur um Spaß und Freizeitgestaltung geht...und damit meine ich kein dummes DM oder irgendwelche komischen Derby/Race Geschichten.
Sondern mal etwas innovatives, was Geschicklichkeit erfordert, bin ein riesen Fan von so Missions, deshalb hatte ich ja auch mal einen Mission Server geschrieben xD
*Hust*
Der kam eig ganz gut bei den Leuten an, aber da habe ich gemerkt, dass nicht wirklich viele Leute, meine Leidenschaft dafür teilen
Also...da waren immer mal nur so paar Leute drauf und wirklich den Multiplayer Mode haben glaube auch nur so 10 Leute gemacht
Fand ich bisschen Schwach xD
Aber was soll man machen xD
Bin aber ein riesen Fan von Missions + Games wie Basketball, Minigolf, Volleyball, Billard, Fußball xDAber generell, weiß ich nicht geht meine Empfehlung dahin, es eigentlich sein zu lassen hahaha xD
-
Wahrscheinlich heißt irgendwas schon so, aber die Lösung ist eigentlich doof, da das sehr aufwändig ist.
Wir machen das mal anders, behalte mal deinen alten Code und ändere einfach mal im Include die dini_Get Funktion so ab:
C
Alles anzeigenstock dini_Get(filename[],key[]) { new tmpres[DINI_MAX_STRING]; new key_length = strlen(key); if (key_length==0 || key_length+2>DINI_MAX_STRING) return tmpres; new File:fohnd; fohnd=fopen(filename,io_read); if (!fohnd) return tmpres; while (fread(fohnd,tmpres)) { if ( tmpres[key_length]=='=' && !strcmp(tmpres, key, true, key_length) ) { /* We've got what we need */ DINI_StripNewLine(tmpres); strmid(tmpres, tmpres, key_length + 1, strlen(tmpres), DINI_MAX_STRING); fclose(fohnd); if(tmpres[0] == EOS) tmpres = "/"; return tmpres; } } fclose(fohnd); if(tmpres[0] == EOS) tmpres = "/"; return tmpres; } -
für ein Projekt
Was für ein Mode denn?

-
Ja, das ist doch richtig...mein Code funktioniert doch..
Jetzt sollte dir der Dialog angezeigt werden.
Der Grund wieso dir der Name nicht angezeigt wird, liegt an deinem File.
In dini schreibt man z.B. CharacterName1=Arnold, also du musst das mit einem = separieren, nicht mit einem Leerzeichen...
-
Du Scherzkeks, wieso verwendest du den Code, wenn ich dir doch schon in meiner 1. Antwort erklärt habe, wieso da nichts angezeigt wird?!
Wieso verwendest du dann weiter deinen Code und wunderst dich, wieso es weiterhin nicht geht?
Nimm doch meinen Code?!
-
<null>
Bei allen drei.....Ja, wie sieht dein Code aus?
Und bist du sicher, dass der Pfad zu deiner Datei stimmt?
-
String ist einfach leer.
Dann prüfe mal die anderen Strings, aus denen sich der Hauptstring zusammensetzt.
Zeig am besten mal deinen aktuellen Code und das was du uns da geschickt hast ist nicht der server_log

-
Dann lade mal crashdetect vielleicht gibt dir das was im server log aus.
Ansonsten verwende mal ein print und schau, was im string steht

-
Wenn der String von dem ersten Charakter leer ist, wird das sogenannte NULL-Byte zurückgegeben.
Sobald im String das NULL-Byte steht, wird jede lese Operation darauf abgebrochen.
Beispiel kann dein string sein "\0Hallo" dann würdest du nicht Hallo lesen können, da beim NULL Byte schon abgebrochen wird.
Folglich musst du prüfen ob das im String vorhanden ist
C
Alles anzeigennew ch[3][MAX_PLAYER_NAME]; format(Info[playerid][CharacterName1],MAX_PLAYER_NAME,dini_Get(file, "CharacterName1")); format(Info[playerid][CharacterName2],MAX_PLAYER_NAME,dini_Get(file, "CharacterName2")); format(Info[playerid][CharacterName3],MAX_PLAYER_NAME,dini_Get(file, "CharacterName3")); if(Info[playerid][CharacterName1][0] == EOS) ch[0] = "/"; else strcat(ch[0],Info[playerid][CharacterName1]); if(Info[playerid][CharacterName2][0] == EOS) ch[1] = "/"; else strcat(ch[1],Info[playerid][CharacterName2]); if(Info[playerid][CharacterName3][0] == EOS) ch[2] = "/"; else strcat(ch[2],Info[playerid][CharacterName3]); format(string,sizeof(string),"%s\n%s\n%s",ch[0],ch[1],ch[2]); ShowPlayerDialog(playerid,DIALOG_LOGIN_2,DIALOG_STYLE_LIST,"Charaktere:",string,"Login","Abbrechen"); -
aber dachte man kann den chat closen.
Ja theoretisch ginge das, wenn du ein einfaches Include erstellst.
Hier habe das mal für dich gemacht:
C
Alles anzeigen/* SA-MP Include Chat Control System * * (c) by Kaliber, 2018 * */ // native ClearChat(playerid); // native HideChatForPlayer(playerid); // native ShowChatForPlayer(playerid); native chat__SendClientMessage(playerid,color,const string[]) = SendClientMessage; native chat__SendClientMessageToAll(color,const string[]) = SendClientMessageToAll; stock ClearChat(playerid) { for(new i; i<30; i++) chat__SendClientMessage(playerid,-1," "); return 1; } stock HideChatForPlayer(playerid) { SetPVarInt(playerid,"_hide_chat",true); return 1; } stock ShowChatForPlayer(playerid) { DeletePVar(playerid,"_hide_chat"); return 1; } stock chat_SendClientMessage(playerid,color,const string[]) { return (!GetPVarType(playerid,"_hide_chat")) ? chat__SendClientMessage(playerid,color,string) : 1; } #if defined _ALS_SendClientMessage #undef SendClientMessage #else #define _ALS_SendClientMessage #endif #define SendClientMessage chat_SendClientMessage stock chat_SendClientMessageToAll(color,const string[]) { chat__SendClientMessageToAll(color,string); for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(IsPlayerConnected(i) && !IsPlayerNPC(i) && GetPVarType(i,"_hide_chat")) ClearChat(i); } return 1; } #if defined _ALS_SendClientMessageToAll #undef SendClientMessageToAll #else #define _ALS_SendClientMessageToAll #endif #define SendClientMessageToAll chat_SendClientMessageToAllFunktionieren tut das ganz einfach in deinem Fall:
C//Wenn er in den TV-Mode geht: ClearChat(playerid); //cleart den chat HideChatForPlayer(playerid); //sorgt dafür, dass keine weiteren Nachrichten mehr an den Spieler gesendet werden können //Wenn er wieder raus geht: ShowChatForPlayer(playerid); //jetzt können wieder Nachrichten an den Spieler gesendet werden--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Allerdings würde er Informationen verlieren, falls er angeschrieben worden wäre in dieser Zeit.
Dafür hatte ich mal das hier entwickelt: Nachrichten Cache
Wenn du die Nachrichten zusätzlich dem Spieler erhalten magst, kannst du das integrieren.
Also du musst das nachrichten-cache Include inkludieren und dann, das nachrichten-control Include so abändern:
C
Alles anzeigen/* SA-MP Include Chat Control System + Nachrichten Cache * * (c) by Kaliber, 2018 * */ // native ClearChat(playerid); // native HideChatForPlayer(playerid); // native ShowChatForPlayer(playerid); native chat__SendClientMessage(playerid,color,const string[]) = SendClientMessage; native chat__SendClientMessageToAll(color,const string[]) = SendClientMessageToAll; stock ClearChat(playerid) { for(new i; i<30; i++) chat__SendClientMessage(playerid,-1," "); return 1; } stock HideChatForPlayer(playerid) { SetPVarInt(playerid,"_hide_chat",true); return 1; } stock ShowChatForPlayer(playerid) { DeletePVar(playerid,"_hide_chat"); return 1; } stock chat_SendClientMessage(playerid,color,const string[]) { if(isCache(playerid)) appendCache(playerid,color,string); return (!GetPVarType(playerid,"_hide_chat")) ? chat__SendClientMessage(playerid,color,string) : 1; } #if defined _ALS_SendClientMessage #undef SendClientMessage #else #define _ALS_SendClientMessage #endif #define SendClientMessage chat_SendClientMessage stock chat_SendClientMessageToAll(color,const string[]) { chat__SendClientMessageToAll(color,string); for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(IsPlayerConnected(i) && !IsPlayerNPC(i) && GetPVarType(i,"_hide_chat")) { if(isCache(i)) appendCache(i,color,string); ClearChat(i); } } return 1; } #if defined _ALS_SendClientMessageToAll #undef SendClientMessageToAll #else #define _ALS_SendClientMessageToAll #endif #define SendClientMessageToAll chat_SendClientMessageToAllNutzen tust du das dann einfach so:
C
Alles anzeigen//Füge unter OnPlayerConnect folgendes ein: initCache(playerid); //Wenn er in den TV-Mode geht: ClearChat(playerid); //Löscht den Chat startCache(playerid); //Startet die Nachrichten-Aufzeichnung HideChatForPlayer(playerid); //Sendet keine Nachrichten mehr an den Spieler //Wenn er aus dem TV-Mode geht: ShowChatForPlayer(playerid); //Jetzt können wieder Nachrichten an den Spieler gesendet werden endCache(playerid); //Sendet alle Nachrichten, die der Spieler verpasst hat, an ihn :)Hahaha, nur für den Fall der Fälle hahaha

-
HideChatForPlayer oder wie?
Eine native Funktion gibt es leider dafür nicht, aber sowas könnte man skripten.
for(new i; i<50; i++) SendClientMessage(playerid,-1," ");
Das Beispielsweise cleart den chat für den Spieler.
Anschließend müsstest du dafür sorgen, dass der Spieler keine Nachrichten mehr bekommt über OnPlayerText. Ja ist etwas aufwändiger, aber ansonsten gibt es da keine Möglichkeit oder du sagst ihm er soll 2x F7 drücken hahaha
-
Hab es versucht mit Textdraw Filterscript zu erstellen aber ich habe eine ganz alte Version und das hat nicht ganz geklappt.
Das ist eine ziemlich schlechte & faule Ausrede...schließlich könntest du einfach eine neue Version downloaden und es nochmal probieren

Mit ein paar einfachen Kniffen ist dann z.B. sowas möglich:

Hier wenn du den Code willst:
Bist du sicher, dass du den Code willst?
Willst du es nicht lieber noch einmal selbst probieren?
Rly?
C
Alles anzeigenstock SetPlayerTVMode(playerid) //Zeigt den Mode { new const Float:data[][] = { {-0.500, -0.500, 314.500, 239.500}, {640.000, -0.500, -326.000, 235.000}, {-0.500, 448.000, 329.500, -236.000}, {640.000, 448.000, -314.000, -228.500} }; new PlayerText:tv[6]; tv[0] = CreatePlayerTextDraw(playerid,0.000000, 0.000000, "_"); PlayerTextDrawLetterSize(playerid,tv[0], 0.500000, 50.000000); PlayerTextDrawColor(playerid,tv[0], -1); PlayerTextDrawSetOutline(playerid,tv[0], 0); PlayerTextDrawSetProportional(playerid,tv[0], 1); PlayerTextDrawSetShadow(playerid,tv[0], 1); PlayerTextDrawUseBox(playerid,tv[0], 1); PlayerTextDrawBoxColor(playerid,tv[0], 0x00000044); //->Macht den tv screen dunkler, wenn du z.B. 0x00000022 machst, wird es heller PlayerTextDrawTextSize(playerid,tv[0], 640.000000, 0.000000); tv[1] = CreatePlayerTextDraw(playerid,566.000000, 39.000000, "REC\124;"); PlayerTextDrawLetterSize(playerid,tv[1], 0.200000, 1.000000); PlayerTextDrawColor(playerid,tv[1], -1); PlayerTextDrawSetOutline(playerid,tv[1], 1); PlayerTextDrawSetProportional(playerid,tv[1], 1); for (new i; i<sizeof(data); i++) { tv[i+2] = CreatePlayerTextDraw(playerid,data[i][0], data[i][1], "ld_grav:tvcorn"); PlayerTextDrawFont(playerid,tv[i+2], 4),PlayerTextDrawColor(playerid,tv[i+2], -1); PlayerTextDrawTextSize(playerid,tv[i+2], data[i][2], data[i][3]); } for(new i,str[16]; i<sizeof(tv); i++) { PlayerTextDrawShow(playerid,tv[i]); format(str,sizeof(str),"tv_mode_%d",i); SetPVarInt(playerid,str,_:tv[i]); } return 1; } stock HidePlayerTVMode(playerid) //Versteckt den Mode { for(new i,PlayerText:id,str[16]; i<6; i++) { format(str,sizeof(str),"tv_mode_%d",i); if(!GetPVarType(playerid,str)) return 0; id = PlayerText:GetPVarInt(playerid,str); PlayerTextDrawHide(playerid,id); PlayerTextDrawDestroy(playerid,id); DeletePVar(playerid,str); } return 1; } -
-
Ansich nicht schlecht und in Zukunft wohl eine der besten Optionen.
Naja...
Da finde ich die Idee von Google viel ambitionierter und eleganter:
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt. -
Wenn die glauben Fleisch wächst auf Bäumen, dann wurden die mit Lügen erzogen.
Meins schon
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt. -
was ist hier los
Ja wie schon erwähnt ist dies ein Skript Fehler.
Nun bräuchten wir Code...so von OnPlayerConnect, OnPlayerRequestClass und eben da wo du den Spieler Einloggen willst usw.
Oder du kannst auch auf eigene Faust ermitteln und mal überall prints verteilen und schauen, wie weit du kommst bzw wo der Code hängen bleibt

Wenn du das gezielt machst, kannst du genau feststellen, an welcher Zeile es hängen bleibt

-
Tjaa...was sollen wir jetzt tun?

Unsere Wunderkugel befragen?

Offensichtlich ist dann etwas an deinem Code verkehrt, wenn wirklich nichts im Log steht
