]> jfr.im git - irc/gameservirc.git/commitdiff
Made significant advances in the do_identify function. A new function:
authorgameserv <redacted>
Sat, 18 Oct 2003 06:20:08 +0000 (06:20 +0000)
committergameserv <redacted>
Sat, 18 Oct 2003 06:20:08 +0000 (06:20 +0000)
void setPtr( T *value ) was added to the ListNode class. This enables the
user to change the address that the T *data variable points to, while deleting
the old one. This enabled the do_identify function to work properly, whereas
I simply have a NULLL aClient pointer on the players list, and when a
aClient on the clients list identifies, it sets the player data to the real
aClient, and points the player's aClient from a fake one to the real one,
then deletes the old fake aClient :)

--Kain

git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@13 bc333340-6410-0410-a689-9d09f3c113fa

gameserv/config.cpp
gameserv/gameserv.cpp
gameserv/list.h
gameserv/listnode.h
gameserv/player.cpp

index 0d00f5a947fd30e7b6f7b3494253062a2dfe6fab..2d02f2385821299d81b566a98c23282c4a4be4c7 100644 (file)
@@ -29,25 +29,25 @@ char *playerdata;           // File to store player data in
 void unload_config_file()
 {
     if (s_GameServ)
-       delete s_GameServ;
+       delete [] s_GameServ;
     if (gshost)
-       delete gshost;
+       delete [] gshost;
     if (gsident)
-       delete gsident;
+       delete [] gsident;
     if (servername)
-       delete servername;
+       delete [] servername;
     if (c_Forest)
-       delete c_Forest;
+       delete [] c_Forest;
     if (c_ForestTopic)
-       delete c_ForestTopic;
+       delete [] c_ForestTopic;
     if (remoteserver)
-       delete remoteserver;
+       delete [] remoteserver;
     if (remoteport)
-       delete remoteport;
+       delete [] remoteport;
     if (remotepass)
-       delete remotepass;
+       delete [] remotepass;
     if (playerdata)
-       delete playerdata;
+       delete [] playerdata;
 }
 void load_config_file(char *config)
 {
@@ -140,6 +140,6 @@ void load_config_file(char *config)
        }
        //infile.ignore(1);
     }
-delete buf;
+delete [] buf;
 infile.close();
 }
index 7e60ccb473490bc9a0921e8faad2ec78de6ea5e1..011496e61e17de657aed40da7a4341af256630b4 100644 (file)
@@ -191,12 +191,12 @@ void showstats(const char *u, const char *nick)
         space = spaces(strlen(buf), " ");
         notice(s_GameServ, sender->getNick(), "%s%sLevel: %d",  buf, space,
                  ni->stats->level);
-        delete space;
+        delete [] space;
 
         sprintf(buf, "Gold: %ld", ni->stats->gold);
         space = spaces(strlen(buf), " ");
         notice(s_GameServ, sender->getNick(), "%s%sGold in Bank: %ld", buf, space, ni->stats->bank);
-        delete space;
+        delete [] space;
 
         notice(s_GameServ, sender->getNick(), "Health Points: %d of %d", ni->stats->hp,
                  ni->stats->maxhp);
@@ -205,20 +205,20 @@ void showstats(const char *u, const char *nick)
         space = spaces(strlen(buf), " ");
         notice(s_GameServ, sender->getNick(), "%s%sDefense: %d",
                  buf, space, ni->stats->defense + arbonus[ni->stats->armor]);
-        delete space;
+        delete [] space;
 
         sprintf(buf, "Armor: %s", armors[ni->stats->armor]);
         space = spaces(strlen(buf), " ");
         notice(s_GameServ, sender->getNick(), "%s%sWeapon: %s", buf, space,
                  weapons[ni->stats->weapon]);
-        delete space;
+        delete [] space;
 
         sprintf(buf, "Forest Fights: %d", ni->stats->forest_fights);
         space = spaces(strlen(buf), " ");
         notice(s_GameServ, sender->getNick(), "%s%sPlayer Fights: %d", buf, space, ni->stats->player_fights);
-        delete space;
+        delete [] space;
     }
-    delete buf;
+    delete [] buf;
 
 }
 
@@ -263,7 +263,7 @@ void raw(const char *fmt, ...)
     sprintf(input, "%s%s", input, "\r\n");
     cout << "input: " << input << flush;
     sock_puts(sock, input);
-    delete input;
+    delete [] input;
     va_end(args);
 }
 /* Send a NOTICE from the given source to the given nick. */
@@ -306,7 +306,7 @@ void notice(const char *source, const char *dest, const char *fmt, ...)
     sprintf(input, "%s%s", input, "\r\n");
     cout << "input: " << input << flush;
     sock_puts(sock, input);
-    delete input;
+    delete [] input;
 va_end(args);
 }
 
@@ -418,7 +418,7 @@ void do_identify(char *u)
     {
         if (!user->stats)
         {
-//         user->stats = new Player();
+           //      user->stats = new Player();
 //         user->stats->setData(p->stats);
 //         user->stats->user = user; // Set the backwards pointer
 //         players.remove(p);
@@ -428,9 +428,22 @@ void do_identify(char *u)
            user->stats = new Player(user);
 //         user->stats->started = 1;
 //         user->stats->user = user; // Set the backwards pointer
-           players.insertAtBack(user);
+//         players.insertAtBack(user);
 
            //notice(s_GameServ, u, "Password Accepted. Identified.");
+
+           ListNode<aClient> *temp;
+           temp = players.Find(p);
+           if (!temp)
+           {
+               notice(s_GameServ, u, "Fatal error. Contact %S Admin. Buf: %s", 
+                       strtok(NULL, ""));
+               return;
+           }
+           temp->setPtr(user);
+           user->stats->setData(p->stats);
+           
+
        }
        else
        {
@@ -1643,7 +1656,7 @@ int load_gs_dbase()
        delete temp;
        cout << "Deleted" << endl;
     }
-delete buf;
+delete [] buf;
 }
 
 bool passcmp(char *encrypted, char *plaintext)
@@ -1667,3 +1680,4 @@ bool check_password(char *name, char *plaintext)
        return passcmp(client->stats->password, plaintext);
     }
 }
+
index 8a9287c2925caa78bee444ca74e948917a817f02..01b28fa660d4cd37a144a1d22b0a31cac94d14c8 100644 (file)
@@ -18,6 +18,7 @@ class List {
        bool remove( T * );
        bool isEmpty() const;
        void print() const;
+       ListNode < T > *Find( T * );
         ListNode < T > *First() { return firstPtr; };
        ListNode < T > *Last() { return lastPtr; };
     private:
@@ -142,6 +143,21 @@ ListNode<T> *List<T>::getNewNode( const T &value)
 
     return ptr;
 }
+template<class T>
+ListNode<T> *List<T>::Find( T *value )
+{
+    if (isEmpty()) {return NULL;}
+
+    ListNode<T> *currentPtr;
+    currentPtr = firstPtr;
+    while (currentPtr)
+    {
+       if (currentPtr->getData() == value)
+           return currentPtr;
+       currentPtr = currentPtr->Next();
+    }
+    return NULL;
+}
 
 template <class T>
 void List<T>::print() const
index 93d12c3f35740bbba58a12788571f3dbeec21ba4..135e59a907efa64dd300d42aff12e9e887f90f41 100644 (file)
@@ -10,8 +10,9 @@ class ListNode {
        friend class List<T>;
     public:
        ListNode(const T &);
-       virtual T *getData();
+       T *getData();
        void setData(const T &);
+       void setPtr( T * );
        ListNode<T> *Next() { return next; };
        ListNode<T> *Prev() { return prev; };
     private:
@@ -35,4 +36,12 @@ template <class T>
 void ListNode<T>::setData( const T &info )
        { data ( info ); }
 
+template <class T>
+void ListNode<T>::setPtr( T *newPtr )
+{
+    T *temp;
+    temp = data;
+    data = newPtr;
+    delete temp;
+}
 #endif
index c9850c4726b71fa795c4500db00ebfda4b8aa2b5..f62dc56f28ce019b079f2aacb9b24bd398477bc8 100644 (file)
@@ -57,12 +57,12 @@ Player::~Player()
     if (name)
     {
        cout << ": " << name;
-       delete name;
+       delete [] name;
     }
     if (password)
     {
        cout << "   Password: " << password;
-       delete password;
+       delete [] password;
     }
     cout << endl << "Player Deleted";
 }