Ein neues Thema erstellen  Auf das Thema antworten  [ 87 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 5 Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: 09.01.2003, 21:12 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
Zitat:
Vielleicht sollte man doch mal die "anstößigen" Quellcodezeilen hier posten, damit man genau weiss, was gemeint ist und was nicht.
in meinem 1. post zum problem
Zitat:
Warum sollte das nicht gehen?
weil der compiler dann sagt:
WARNING: possibly unintended bitwise operation, siehe 1. post
Zitat:
Du hättest ja mal BlackKnight den Tip geben können, dass Du die ausgewählten Maps als Bitmaske abspeicherst
ich war eigentlich davon ausgegangen, dass er das verstanden hatte
Zitat:
Stattdessen willst Du eine Warnung des Compilers wegbekommen, die doch eigentlich genau das beschreibt, was Du auch bezweckst.
nein tut sie nicht. denn die bitwise operation war ganz und gar nicht unintended. und wieso stattdessen? die warnings wegzukriegen war der einzige grund weshalb ich das ganze gepostet habe. denn funktionieren tat es von anfang an
Zitat:
So sieht es für mich aus, als ob Du selbst nicht so genau weisst, was Du da eigentlich programmiert hast...
da es prinzipiell funktioniert, glaube ich schon, dass ich weiss, was ich getan habe. nur, dass der compiler da anderer meinung war.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 09.01.2003, 22:12 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Die Warning kann man dann wohl wirklich ignorieren. Der Compiler meint, dass Du eine "bitwise operation" machen wolltest, dies aber in einer if-Schleife ungewöhnlich ist. Und siehe da, in die Falle bin ich ja auch getreten. Ich dachte ja auch, dass Du "&&" meintest. Ich habe mir den Restcode nicht angesehen. Und vom Compiler darfst Du nicht erwarten, dass er mehr Verständnis für den Code mitbringt als ich. ;-) Mit Bitoperationen habe ich mich bisher nicht beschäftigt.
Er hat es richtig interpretiert, will Dich aber warnen, dass Du evtl. was anderes vorhattest.
Ergo, führe die Aktion komplett vorher aus und schreibe das Ergebnis in eine Variable. Anschließend vergleichst Du die Variable. Versuch mal:
Code:
new g_sMaps;
Code:
g_sMaps=g_SelectedMaps[UserIndex] & (1<<i);
if(g_sMaps) {
Das ergibt beim Compile keine Warning mehr und sollte auch Deiner Funktion genüge tragen.
Hoffentlich haben wir das Problem jetzt vom Tisch. :D

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 09.01.2003, 22:27 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Aber Fazit von der ganzen Diskussion:

Eine Warnung ist nur eine Warnung/ Hinweis.

Warum dann den Hinweis wegbekommen, wenn man doch genau eine "Bitweise" Operation durchführen will und der Compilier eben denkt, das sie nicht beabsichtigt ist.(da sie bisher wahrscheinlich sehr sehr selten in small angewandt wurde)

Ok. Einziger Grund wäre, sich die Diskussionen im Anschluss zu ersparen, die dann die User an einen herantragen, da sie beim Compilieren "Warnings" erhalten.

Nun denn...just my two cents..

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 09.01.2003, 22:49 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Genau das ist der Grund für die Diskussion. Was nicht sein muss, kann auch vermieden werden.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 09.01.2003, 23:52 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Wie? Was nicht sein muss?

Es ist doch gewollt...Das Bitweise Gedöhns ist gewollt. Also. Warum sich ein Bein ausbrechen, nur damit der Compiler es auch ohne Warning akzeptiert und der User nachher keine Fragen stellt....

Wenns klappt, dann klappt es. Ja, ich weiß. Ich denke da was anders als Du :-)

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 10.01.2003, 01:19 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Zitat:
Zitat:
Warum sollte das nicht gehen?
weil der compiler dann sagt:
WARNING: possibly unintended bitwise operation, siehe 1. post
Nur weil der Compiler zu "dumm" ist und eine Warnung ausspuckt, heisst das noch lange nicht, dass der Code nicht fehlerfrei ist und trotzdem funktioniert. Man sollte zwischen Warnung und Fehler unterscheiden.
Da ich ein Mensch bin, weiss ich, dass der Code
Code:
if(i & j == 6) { 
   ... 
} else { 
   ... 
}
fehlerfrei ist und funktioniert! Warum sollte er auch nicht?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 10.01.2003, 01:27 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
ich wusste das auch. hätte ich es nicht gewusst, hätte ich niemanden mit meinem problem belästigt. und das problem lag darin, dass der compiler OBWOHL es richtig ist ein warning ausspuckt. natürlich weiss ich, wass man warnings ignorieren kann. aber das will ich nicht.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 10.01.2003, 01:33 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Also wenn ich diese Warnung bekommen hätte, hätte ich mal kurz im Code nachgeschaut und gesagt: "Jaja Du vorlaute Maschine, immer alles besser wissen wollen, wer hat Dir eigentlich nur soviel künstliche Dummheit eingehaucht?"
... und die Warnung ad acta gelegt...


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 10.01.2003, 07:49 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
jep. Zustimmung.
Genau der Meinung bin ich auch.

Deswegen habe ich auch geschrieben, dass der Compiler die Warnung ausgibt, da in Small eine Bitweise Operation wahrscheinlich sehr selten vorkommt und daher der Programmierer des Compilers sich gedacht hat, dass es besser wäre, eine Warnung mal auszusprechen.

Nun denn.
Es ist ja trotz allem auch eine Lösung gefunden worden, eine Bitweise Operation durchzuführen, ohne das der Compiler eine Warnung ausgibt. Also hat der Thread sein Ziel erfüllt.

*Und ich musste mal wieder feststellen, dass mir eine Menge Grundlagen zur Programmierung fehlen....Gott sei Dank muss ich in meinen Plugins nicht so tief ins Eingemachte gehen*

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 10.01.2003, 09:45 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Jungs,
das war mal eine richtige schicke konstruktive Diskussion. Und ich glaube wir haben alle was dazugelernt. Was mich betrifft auf jeden Fall.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07.02.2003, 23:55 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
mir fällt grade auf dass das plugin noch gar nicht in der link-list steht. also hier nochmal ne aktuelle version (von heute ;))

bitte nachfolgenden post beachten


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.02.2003, 00:06 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
das plugin_rindy_menubase muss in der plugin.ini UNTER plugin_rm_rindy_player stehen.

Beschreibung: Ersetzt admin_kick und admin_ban. Fügt ein neues command admin_warn hinzu. alle commands können mit grund (jeweils letzter parameter) benutzt werden. die gründe werden in die dateien warnreasons.log, kickreasons.log und banreasons.log im addons/adminmod verseichnis eingetragen. dabei versucht das plugin, den ungefakten nick des admins zu ermitteln, indem es seine wonid und sein adminmod-passwort mit einträgen in einer datei, der addons/adminmod/config/nicks.txt, vergleicht. diese muss im format
'wonid passwort name' z.b.
12345 meinpasswort Name kann Leerzeichen enthalten
spieler die in dieser datei aufgelistet sind, haben gleichzeitig immunität gegen diese 3 commands. als weiteres feature merkt sich das plugin die daten der letzten spieler, die den server verlassen haben (im plugin einstellbar, default 5), so dass diese gebannt werden können, wenn sie den server schon verlassen haben.
um die administration des ganzen zu erleichtern, habe ich noch ein kleines menü eingebaut. admin_playermenu listet alle spieler auf. wählt man einen aus, erhält man die wahl zwischen warn, kick und ban, sowie 9 gründe und 6 banzeiten zur auswahl, die man durchschalten kann.
verwarnte spieler haben im menü ein rotes '#' vor dem nick, gekickte ein '*!*' und admins ein gelbes '@'. weiterhin werden alle admins (admins sind in diesem fall alle, die in der nicks.txt stehen) über warns, kicks und bans informiert, sowie wenn ein kurzfristig gekickter spieler unter anderem namen zurückkehrt.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.02.2003, 14:29 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Hi!

@Rinde: Kannst es doch in die Plugin-Link-Liste setzen.
Da darfst Du mal meinen Beitrag editieren.
Hab im Moment keine Zeit!

Gruß,
SDal

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.02.2003, 16:17 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
done


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.02.2003, 16:44 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
kk.

Aber Du hast vergessen, das Datum im Titel zu ändern.

Done.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 17.02.2003, 23:57 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
es ist mal wieder soweit. ich habe einen fehler, dessen herkunft mit ein absolutes rätsel ist
Code:
public plugin_init() {
    ...
    plugin_registercmd("admin_unfake","UnFake",ACCESS_UNFAKE,"admin_unfake: Prints name(s) of all faked players.");
    plugin_registercmd("specmode","Connect",ACCESS_ALL); //function called on connect
    return PLUGIN_CONTINUE;
}

public Connect(HLCommand,HLData,HLUserName,UserIndex) {
    ...
    g_Admin[UserIndex] = isadmin(UserIndex);
    ...
    return PLUGIN_CONTINUE;
}

public UnFake(HLCommand,HLData,HLUserName,UserIndex) {
    new Menutext[512];
    new LineData[MAX_DATA_LENGTH];
    new Name[MAX_NAME_LENGTH];
    new UserName[MAX_NAME_LENGTH];
    new Pass[MAX_NAME_LENGTH];
    new players[MAX_PLAYERS];
    new num_faked;
    new pos;
    new i,j;
    if(!UserIndex) {
        selfmessage("This command cannot be used from console.");
        return PLUGIN_HANDLED;
    }
    for(i=1;i<=g_Maxplayers;i++) {
        if(g_Lines[i][j] && i != UserIndex) {
            if(playerinfo(i,UserName,MAX_NAME_LENGTH)) {
                j = 0;
                pos = 0;
                if(!strncmp(UserName,"[FN]",4)) {
                    pos = (UserName[4] == ' ') ? 5 : 4;
                }
                do {
                    readfile(g_Nicksfile,LineData,g_Lines[i][j++],MAX_DATA_LENGTH);
                    players[num_faked] = 0;
                    if(strgsplit(LineData," ","^"","",0,Pass,MAX_NAME_LENGTH,Name,MAX_NAME_LENGTH) == 3) {
                        if(strcmp(Name,UserName[pos]) == 0) break;
                    } else if(strcmp(Pass,UserName[pos]) == 0) break;
                    players[num_faked] = i;
                    if(j == MAX_NICKS) break;
                } while(g_Lines[i][j]);
                if(players[num_faked]) num_faked++;
            }
        }
    }
    if(!num_faked) {
        convert_string(HLUserName,UserName,MAX_NAME_LENGTH);
        kill_menu(UserIndex);
        menu(UserName,"^n^n^n^n^n^n\yCouldn't find faked players.",1023,0);
        return PLUGIN_HANDLED;
    }
    strcpy(Menutext,"\yFaked players:",512);
    for(i=0;i<num_faked;i++) {
        strcat(Menutext,"^n\r",512);
        playerinfo(players[i],UserName,MAX_NAME_LENGTH);
        strcat(Menutext,UserName,512);
        strcat(Menutext,"\w",512);
        j = 0;
        while(g_Lines[players[i]][j]) {
            strcat(Menutext,"^n   ",512);
            readfile(g_Nicksfile,LineData,g_Lines[players[i]][j],MAX_DATA_LENGTH);
            j++;
            if(strgsplit(LineData," ","^"","",0,Pass,MAX_NAME_LENGTH,Name,MAX_NAME_LENGTH) == 3) {
                strcat(Menutext,Name,512);
            } else {
                strcat(Menutext,Pass,512);
            }
        }
    }
    snprintf(UserName,MAX_NAME_LENGTH,"^n^n\y%i players",num_faked);
    strcat(Menutext,UserName,512);
    convert_string(HLUserName,UserName,MAX_NAME_LENGTH);
    kill_menu(UserIndex);
    menu(UserName,Menutext,1023,0);
    snprintf(Menutext,512,"(Admin) %s used command admin_unfake",UserName);
    for(i=1;i<g_Maxplayers;i++) {
        if(i != UserIndex && playerinfo(i,Name,MAX_NAME_LENGTH) && access(ACCESS_UNFAKE,Name)) {
            messageex(Name,Menutext,print_chat);
        }
    }
    return PLUGIN_HANDLED;
}

isadmin(UserIndex) {
    new LineData[MAX_DATA_LENGTH];
    new AuthID[MAX_AUTHID_LENGTH];
    new Line;
    new i;
    new result;
    while(readfile(g_Nicksfile,LineData,++Line,MAX_DATA_LENGTH) == 1) {
        if(!LineData[0] || LineData[0] == '#') continue;
        strgsplit(LineData," ","^"",AuthID,MAX_AUTHID_LENGTH);
        if(strcmp(AuthID,g_AuthID[UserIndex]) == 0) {
            g_Lines[UserIndex][i] = Line;
            i++;
            if(i == MAX_NICKS) break;
        }
    }
    result = i ? (auth("") ? 2 : 1) : 0;
    while(i < MAX_NICKS) {
        g_Lines[UserIndex][i] = 0;
        i++;
    }
    return result;
}
es geht um die menüausgabe der unfake-funktion
an den letzten eintrag der liste, egal wieviele gefakte personen auf dem server sind, wird die wonid dieses spielers ohne das erste zeichen angehängt, nicht aber "^n^nxx players", dieser erschein gar nicht. nochmal zur verdeutlichung. wenn ich auf dem server fake, und ein andere admin benutzt das command, sieht er folgendes

\yFaked players:
\rMeinfakenick
\wRinde52676

meine wonid ist 452676
frage: wieso wird statt des "^n^n\y%i players",num_faked
meine wonid angehägt? und dann ohne das erste zeichen?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.02.2003, 09:34 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Erst einmal würde ich zur Sicherheit
Code:
  new num_faked;
in
Code:
  new num_faked=0;
umschreiben.

Trotzdem seltsam... Was passiert, wenn Du ohne Farben arbeitest? Schon mal %d statt %i versucht? Irgendwie sehe ich den Fehler auch nicht.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.02.2003, 17:31 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
ich glaube man draf
strgsplit(LineData," ","^"","",0,...);
nicht mit einem leeren 1. parameter aufrufen, möglich?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.02.2003, 20:00 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
zu leeren Parameterübergabe ("") habe ich schon die dubiosesten Fehler bekommen.

In irgendeinem Thread habe ich es beschrieben.

In einem Timer "abc" ein Case eingebaut, der mir entsprechend eine Hilfsfunktion mit 2 Parametern aufruft. Der zweite Parameter war leer und wollte ihn mit "" übergeben.

Der Timer "abc" war endless repeated. Irgendwann wollte er eine Timerfunktion "xyz" anstatt 'abc' aufrufen und ausführen. Den gab es aber nicht.

Konnte das ganze umgehen, in dem ich einen Dummy[MAX_XYZ] eingesetzt habe und diesen übergab.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.02.2003, 22:57 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Und ich hab mich gestern schon gefragt, warum diese dummy Variable im CW-Creator im Vote-Befehl vorkam. Na gut, dann lass ich das so.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 87 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 5 Nächste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de
Original Design von "[ Half-Life Admin Mod © Alfred Reynolds 2000-2003 ] - [ site design by Jägermeister ]"