Stillen Login entfernt.
Bislang gab es die Moeglichkeit eines stillen Logins fuer den Fall,
dass jemand reconnected, aber schon eingeloggt war. Dann wurde nur die
alte Verbindung getrennt und die neue ans Spielerobjekt gebunden.
Die Idee war, dann Meldungen und Callbacks nicht zu machen, weil der
Spieler ja nie ausgeloggt war. Das war allerdings nicht richtig
implementiert. Das Problem ist aber vor allem, dass es keinen stillen
Logout gibt. D.h. beim Trennen der alten Verbindung werden Callbacks
gerufen und Meldungen ausgegeben. Dann muss man das aber auch beim
Login machen, sondern denken Objekte, dass der Spieler
raus ist...
Solange es nicht stillen Login *und* Logout gibt, wird daher der stille
Login entfernt.
Change-Id: I28362822b597a36408f2228c8e93b66c22d93157
diff --git a/secure/login.c b/secure/login.c
index 8eee5f3..c6d28c4 100644
--- a/secure/login.c
+++ b/secure/login.c
@@ -775,7 +775,6 @@
static int load_player_object( int guestflag )
{
object ob;
- int was_interactive;
if ( sizeof(users()) >= 195 && !IS_WIZARD(loginname) ){
write( "Die maximale Spielerzahl wurde bereits erreicht!!!\n"
@@ -860,9 +859,7 @@
}
else {
/* Test if we are already playing */
- was_interactive = 0;
ob = find_player(loginname) || find_netdead(loginname);
-
if (ob) {
write( "Du nimmst schon am Spiel teil!\n" );
write( "Verwende Deine alte sterbliche Huelle ...\n" );
@@ -872,7 +869,6 @@
// The other object is still interactive; disconnect it first
// and attach our connection to the player object.
remove_interactive(ob);
- was_interactive = 1;
}
// Wenn Invislogin, P_INVIS setzen.
if ( invis && IS_WIZARD(ob) )
@@ -886,7 +882,7 @@
if ( (({int})ob->QueryProp(P_LEVEL)) == -1 )
ob->start_player( cap_name );
else
- ob->Reconnect( was_interactive );
+ ob->Reconnect();
call_out( "remove", 2 );
return 1;
diff --git a/std/player/base.c b/std/player/base.c
index 347a695..23e1577 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -537,8 +537,8 @@
// Und Meldung ans Environment. Erst an dieser Stelle, weil der Spieler
// u.U. durch ein BecomesNetAlive() noch bewegt wurde.
- if ( !(flags & CNP_FLAG_SILENT) && environment()
- && object_name(environment()) != NETDEAD_ROOM )
+ if (environment()
+ && object_name(environment()) != NETDEAD_ROOM )
{
if(query_hc_play()<=1)
tell_room(environment(),QueryProp(P_NAME)
@@ -578,20 +578,17 @@
|| file_size("/gilden/"+gilde+".c")>0))
catch(("/gilden/"+gilde)->notify_player_change(ME, rein); publish);
- // und wenn nicht silent: dann noch die anderen Spieler informieren
- if (!(flags & CNP_FLAG_SILENT))
- {
- string wer = getuid(ME);
- int mag = IS_LEARNER(ME);
- int invis = QueryProp(P_INVIS);
- object *u = users() - ({ME}); // sich selber nicht melden
- if (mag && invis) { // Invismagier nur Magiern melden
- u = filter(u, function int (object o)
- { return query_wiz_level(o) >= LEARNER_LVL; }
- );
- }
- u->notify_player_change(capitalize(wer),rein,invis);
+ // dann noch die anderen Spieler informieren
+ string wer = getuid(ME);
+ int mag = IS_LEARNER(ME);
+ int invis = QueryProp(P_INVIS);
+ object *u = users() - ({ME}); // sich selber nicht melden
+ if (mag && invis) { // Invismagier nur Magiern melden
+ u = filter(u, function int (object o)
+ { return query_wiz_level(o) >= LEARNER_LVL; }
+ );
}
+ u->notify_player_change(capitalize(wer),rein,invis);
}
/** Ruft im uebergebenen Objekt ein init() auf, sofern notwendig.
@@ -647,16 +644,9 @@
/** Belebt einen Netztoten wieder.
Wird im Login gerufen, wenn der Spieler netztot war. Aequivalent zu
start_player()
- @param[in] silent Wenn Flag gesetzt, werden div. Callbacks nicht gerufen und
- Meldungen nicht ausgegeben. Wird vom Loginobjekt gesetzt, wenn das
- Spielerobjekt bereits interaktiv ist und nur die Netzverbindung durch
- Reconnect wechselt. *Nicht* zu verwechseln mit dem 'silent' von move & Co
- oder durch P_INVIS!
- @param[in] ip Textuelle Repraesentation der IP-Adresse, von der der Spieler
- kommt.
@see start_player()
*/
-varargs void Reconnect( int silent )
+varargs void Reconnect()
{
int num;
string called_from_ip;
@@ -694,8 +684,7 @@
if ( interactive(ME) )
{
- call_notify_player_change(
- CNP_FLAG_ENTER | (silent ? CNP_FLAG_SILENT : 0 ) );
+ call_notify_player_change(CNP_FLAG_ENTER);
}
if ( query_once_interactive(ME) )
diff --git a/std/player/moving.c b/std/player/moving.c
index a59d954..8c74e3d 100644
--- a/std/player/moving.c
+++ b/std/player/moving.c
@@ -54,8 +54,6 @@
{
// Andere wollen auch informiert werden ueber den (ggf. impliziten)
// Logout.
- // Achtung: *kein* CNP_FLAG_SILENT - das hat eine andere Bedeutung als das
- // argument silent hier!
if ( interactive(ME) )
call_notify_player_change(CNP_FLAG_QUIT);
diff --git a/sys/player/base.h b/sys/player/base.h
index c460813..dbb2617 100644
--- a/sys/player/base.h
+++ b/sys/player/base.h
@@ -102,9 +102,6 @@
#define CNP_FLAG_ENTER 0x1 // player enters mud
#define CNP_FLAG_SLEEP 0x2 // player disconnects/sleeps
#define CNP_FLAG_QUIT 0x4 // player quits or is removed
-// silent logon, don't call most callbacks, because the player is already
-// online, but net connection is replaced by new one.
-#define CNP_FLAG_SILENT 0x8
// prototypes