AdminMod.de
https://www.adminmod.de/

Auf "USER SAY" reagieren...
https://www.adminmod.de/viewtopic.php?t=2492
Seite 1 von 2

Autor:  SN8P [ 14.04.2002, 00:27 ]
Betreff des Beitrags:  Auf "USER SAY" reagieren...

Hallo!

Wie man zweifelsohne schon an meiner Betreffzeile erkennen kann, bin ich in punkto Plugins ein ABSOLUTERBEGINNER
Ich programmiere zwar (beruflich) selbst in Delphi - und C hab' ich auch schonmal verwendet aber... blablabla
:wink:

Ich möchte gerne ein plugin schreiben, das den Text eines users mitbekommt und ihn mit einer festen Zeichenkette vergleicht um ggf. daruf zu reagieren. Dazu ist es ebenfalls notwendig mitzubekommen von wem der SAY-String ist...

Bsp.: -> say '!console' [von user 'PLAYER']

darauf möchte ich mit sowas wie "admin_console PLAYER" reagieren.

Die genauen Fragen: :-?

O Wie bekomme ich eine SAY-Message mit?
O Wie erfahre ich von wem diese Message ist?
o Wo erfahre ich etwas über den grundsätzlichen Aufbau von Plugins?

Vielen Dank!

PS: Ich bin ja selbst ein regelmässiger Hinweiser was die Suchfunktion betrifft, aber mit dem Suchstring "user AND say OR text" hat er mir nicht wirklich was ausgespuckt.

Autor:  [WING] Black Knight [ 14.04.2002, 02:29 ]
Betreff des Beitrags: 

Ich verstehe zwar nicht viel von der Plugin-Programmierung, aber schau Dir mal sank_sounds an. Das reagiert auch auf Benutzereingaben.

Autor:  SN8P [ 14.04.2002, 02:32 ]
Betreff des Beitrags:  Ein Schritt weiter...

Ich sitz' natürlich nicht still zu hause rum und warte bis mir alles in den Schoß fällt, und daher bin ich zu folgendem Fehler gelangt:
Code:
/*
THIS PLUGIN REACTS ON THE SAY-TEXT "!console" AND ACTIVATES THE CONSOLE
AT THE USER WHO HAS ENTERED THE TEXT

THIS PLUGIN DEPENDS ON THE plugin_console
*/

#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>

#define ACCESS_CONSOLE 1

/*********************************
*    AutoConsole version 0.10    *
*********************************/

new STRING_VERSION[MAX_DATA_LENGTH] = "0.10";

public HandleSay(HLCommand, HLData, HLUserName, UserIndex) {
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];

	convert_string(HLData, Data,MAX_DATA_LENGTH);
	convert_string(HLUserName, User,MAX_NAME_LENGTH);

	if (Data = "!console") {
		plugin_exec(admin_psay, User, "Your console has been activated/npress ^ to to toggle it!")
		plugin_exec(admin_console, User)
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public plugin_init() {
	plugin_registerinfo("ADDON to plugin_console to autoactivate it.", STRING_VERSION);
	plugin_registercmd("say", "HandleSay", ACCESS_ALL);
	plugin_registercmd("say_team", "HandleSay", ACCESS_ALL);
	return PLUGIN_CONTINUE
}
  • Die Fehler

    plugin_autocon.sma(33) Warning [211]: possibly unintended assignment
    plugin_autocon.sma(33) Error [33]: array must be indexed (variable "Data")
    plugin_autocon.sma(42) Warning [202]: number of arguments does not match definition

Autor:  [WING] Black Knight [ 14.04.2002, 03:58 ]
Betreff des Beitrags: 

Meiner Meinung nach fehlen Dir ein paar Semikola in den Zeilen 30, 31, 32, 34 und 41.
In den Nachfolgezeilen wundert sich dann der Compiler, da es sich um geschweifte Klammern handelt, wovor auf JEDEN Fall ein Semikolon hätte kommen müssen.

Autor:  daRope [ 14.04.2002, 11:40 ]
Betreff des Beitrags:  Re: Auf "USER SAY" reagieren...

Aha. Der naechste, der einen Anschiss kassieren will. ;) Na dann wollen wir mal... :)
Zitat:
Ich programmiere zwar (beruflich) selbst in Delphi - und C hab' ich auch schonmal verwendet aber... blablabla
Na, dann hoffe ich mal, dass Du noch eine andere Einnahmequelle hast und nicht von Deinen Programmierkuensten abhaengig bist. Da Du eigentlich mit Delphi arbeitest und wenig mit C zu tun hast, sehe ich Dir ein paar Fehler nach. Aber nicht, dass Du Dir nicht die Muehe machst, deine Problemchen selber zu loesen, sei es durch logisches Denken oder nachschlagen der entsprechenden Infos. Von einem beruflichen Programmierer darf man das ja wohl erwarten, auch wenn Delphi eigentlich weniger mit Programmierung als mit rumklicken zu tun hat. Ausserdem gehe ich davon aus, dass Du Englisch kannst.

So, da Du mir hier aber bisher eher postiv aufgefallen bist, sag ich Dir trotzdem, was Du falsch machst. (Auch wenn es fuer Dich trivial sein sollte. :))
Zitat:
Ich möchte gerne ein plugin schreiben, das den Text eines users mitbekommt und ihn mit einer festen Zeichenkette vergleicht um ggf. daruf zu reagieren.
Ist das gerade in Mode, oder was? :)
Zitat:
O Wie bekomme ich eine SAY-Message mit?
O Wie erfahre ich von wem diese Message ist?
o Wo erfahre ich etwas über den grundsätzlichen Aufbau von Plugins?
Auch fuer Dich gilt: Sourcen lesen. Zum Beispiel plugin_retribution. Aber das hat sich ja inzwischen soweit geklaert.
Zitat:
Ich sitz' natürlich nicht still zu hause rum und warte bis mir alles in den Schoß fällt, und daher bin ich zu folgendem Fehler gelangt:
Das ist loeblich. Kommen wir also zum Eingemachten. Erstens fehlen da tatsaechlich etliche Semicolons. Obwohl Small das zulaesst, ist das eine Unart, die Du vermeiden solltest.

Erster Fehler:
Zitat:
plugin_autocon.sma(33) Warning [211]: possibly unintended assignment
Code:
   
if (Data = "!console") {
Typischer Delphiuser Fehler, daher nicht so schlimm. Das steht ganz klar "possibly unintended assignment". Und was sagt der Code? Der sagt 'if (Data = "ebbes")'. Und was sagt Dir das? Das sagt Dir, dass dort eine Zuweisung steht, die Du aber wahrscheinlich nicht meintest. In anderen Worten "sollte da nicht vielleicht 'if (Data == "ebbes")' stehen?". (Tut mir leid, aber auch bei Dir kann ich mir ein wenig Sarkasmus heute nicht verkneifen). In Small (und C) ist '=' ein Zuweisung und '==' ein Vergleich.

Zweiter Fehler. Der ist weniger verzeihlich.
Zitat:
plugin_autocon.sma(33) Error [33]: array must be indexed (variable "Data")
Code:
   
new Data[MAX_DATA_LENGTH];
   if (Data = "!console") {
Data ist ein ARRAY! Nun erlaubt Small tatsaechlich so ein unsaegliches Konstrukt, wie Deines. Aber nur, wenn beide Arrays dieselbe Laenge haben. Das ist hier nicht der Fall. Also bleiben wir schoen bei der normalen Behandlung von Arrays bzw. Strings und verwenden die entsprechenden Funktionen. Also:
Code:
if ( strcmp(Data, "!console") == 0 )
Dritter Fehler:
Zitat:
plugin_autocon.sma(42) Warning [202]: number of arguments does not match definition
Code:
   plugin_registerinfo("ADDON to plugin_console to autoactivate it.", STRING_VERSION);
   plugin_registercmd("say", "HandleSay", ACCESS_ALL);
Auch hier weiss ich eigentlich nicht, was an der Fehlermeldung so unverstaendlich sind. Kucken wir doch mal in die Includedatei wie plugin_exec() aussieht:
Code:
native plugin_exec( sCommand[], sArguments[] );
Da sehe ich zwei Parameter. Warum benutzt Du dann einmal drei und einmal zwei Parameter?

Autor:  SN8P [ 14.04.2002, 17:05 ]
Betreff des Beitrags: 

Ok!

Genial! Muss Dir echt recht geben... :oops:
Aber in meinem Wahn möglichst alle functions die so vermisse schnell noch vor der nächsten LAN-Party umzusetzten hab' ich mich wenig auf den Syntax von SMALL konzentriert... kommt nicht wieder vor :D

Ein grosses Dankeschön an Dich für deine Hilfe - nicht nur wegen des plugins :wink:

Autor:  daRope [ 14.04.2002, 17:18 ]
Betreff des Beitrags: 

Und ich dachte schon, Dir haette es die Sprache verschlagen. =B

(Endlich mal einer, der mich versteht 8))

Autor:  SN8P [ 14.04.2002, 17:47 ]
Betreff des Beitrags: 

...ist das erst der Anfang meiner Probleme?!?
Ich weiss ich bin dumm, aber wo in '3 Teufels Namen' ist denn da ein Fehler - deswegen konnte ich auch DAS noch nicht testen...
Code:
/*********************************
*    AutoComand version 0.20    *
*********************************/

#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>

#define ACCESS_CONSOLE 0

new STRING_VERSION[MAX_DATA_LENGTH] = "0.20";

/*------------------------------------------------------------*/

public HandleSay(HLCommand,HLData,HLUserName,UserIndex)
{
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
	new Param[MAX_TEXT_LENGTH];


	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);

	if ( strcmp(Data, "console!") == 0 )
	{
		snprintf(Param, MAX_TEXT_LENGTH, "%s Your console has been activated/npress ^ to to toggle it!", User);
		plugin_exec("admin_psay", Param);
		plugin_exec("admin_console", User);
		return PLUGIN_HANDLED
	}
	if ( strcmp(Data, "vote_awp") == 0 )
	{
		/* vote function
		   admin_awpcheck   */
		playsound(User, "misc/notavail.wav");
	}
	return PLUGIN_CONTINUE
}

public plugin_init() {
	plugin_registerinfo("ADDON to plugin_console to autoactivate it.", STRING_VERSION);
	plugin_registercmd("say", "HandleSay", ACCESS_ALL);
	plugin_registercmd("say_team", "HandleSay", ACCESS_ALL);
	return PLUGIN_CONTINUE
}
Fehler: plugin_autocon.sma(42) Error [27]: invalid character constant
Code:
                   public HandleSay(HLCommand,HLData,HLUserName,UserIndex)
in dieser Zeile -> {
                   new Data[MAX_DATA_LENGTH];
vielleicht ein drüber oder ein drunter, aber nach einigem hin- und hervergleichen hab' ich nix gefunden...
Übrigens, die plugin_init-function ist so kopiert...

Autor:  daRope [ 14.04.2002, 17:48 ]
Betreff des Beitrags: 

Und auch hier bezweifel ich, dass das was wird:
Code:
"Your console has been activated/npress ^ to to toggle it!"
Ich wuerde mal ganz freimuetig behaupten, das muss so lauten:
Code:
"Your console has been activated^npress ^^ to toggle it!"

Autor:  SN8P [ 14.04.2002, 17:49 ]
Betreff des Beitrags: 

Da wirst Du wohl Recht haben, aber was ist mit dem Rest ?!?

Autor:  daRope [ 14.04.2002, 17:52 ]
Betreff des Beitrags: 

Das ist der Rest.

Autor:  SN8P [ 14.04.2002, 18:01 ]
Betreff des Beitrags: 

Zitat:
Das ist der Rest.
Du hast Recht! Nur müsste ich vielleicht mal genau lesen... Ich wollte eben schon wieder nachfragen wie ich ein '^' denn jetzt als Text ausgegeben bekomme und ob das genauso wie in Delphi durch '^^' geht... aber ich hab' dann ja - bevor ich mich ganz blamier - zum Glück nochmal meine Augen etwas nach oben geführt...

Man erlaubt sich euch den Titel 'TheGreat' zu führen :lol:

Autor:  daRope [ 14.04.2002, 18:22 ]
Betreff des Beitrags: 

Zum Dank darfst Du jetzt MrSpoocy aus der Misere helfen. :)

Autor:  SN8P [ 14.04.2002, 18:28 ]
Betreff des Beitrags: 

Und da ist es auch schon passiert!

Wie Du bereits in dem wichtigen Thread angezweifelt hattest das die ganze Schose läuft - NEIN sie tut es nicht!

Wenn ich über den 'SAY'-Key/Taste console! oder vote_awp eingebe spricht zwar das plugin an, aber es kommt garnicht zu einer 'positiven' Auswertung, d.h. es 'findet' nicht den entsprechenden Text obwohl er genau das ist!!!
Gehe ich in die console unt gebe dort 'say console!' oder 'say vote_awp' so klappt alles genau so wie es soll...

liegt es vielleicht an admin_messagemode ?!?

Autor:  Sir Drink a lot [ 15.04.2002, 01:53 ]
Betreff des Beitrags: 

strstripquotes(Data) vergessen ?

Autor:  SN8P [ 15.04.2002, 20:11 ]
Betreff des Beitrags: 

Zitat:
strstripquotes(Data) vergessen ?
Tschuldige die Frage aber was bewirkt das genau?...
Also lesen kann ich selbst - auch English - was ich wissen möchte, ist was diese funkcion genau tut.

Bsp.:
kommen mit dem say-Befehl (als Taste) die Daten als "TEXT" an und
wenn ich's direkt in die Konsole schreibe (say TEXT) als TEXT ?!?

Das würde das ja erklären... ich probiers halt mal...

Autor:  Sir Drink a lot [ 15.04.2002, 21:14 ]
Betreff des Beitrags: 

Es ist genau so, wie Du Dir es schon selbst erklärt hast.

Autor:  SN8P [ 15.04.2002, 21:41 ]
Betreff des Beitrags: 

Cool! 8)

:wink:

Autor:  daRope [ 15.04.2002, 22:24 ]
Betreff des Beitrags: 

Ein
Code:
log(Data);
strstripquotes(Data);
log(Data);
bringt Klarheit. log() ist ne feine Sache, wenn man was ueberpruefen will. Hardcore-Programmierer nehmen natuerlich direkt printf().

Autor:  SN8P [ 15.04.2002, 22:44 ]
Betreff des Beitrags: 

Zitat:
Ein
Code:
log(Data);
strstripquotes(Data);
log(Data);
bringt Klarheit. log() ist ne feine Sache, wenn man was ueberpruefen will. Hardcore-Programmierer nehmen natuerlich direkt printf().
Ich nehm' log! und nebenbei kurz bemerkt... es läuft!!!

Juchu!!! Bild

Seite 1 von 2 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/