[Ante-cvs] SF.net SVN: ante: [485] trunk/ant
Brought to you by:
roguestar191
|
From: <rog...@us...> - 2007-01-25 08:41:51
|
Revision: 485
http://svn.sourceforge.net/ante/?rev=485&view=rev
Author: roguestar191
Date: 2007-01-25 00:41:50 -0800 (Thu, 25 Jan 2007)
Log Message:
-----------
cleanups of ticking, still needs overhaul, see todo
Modified Paths:
--------------
trunk/ant/areas.cpp
trunk/ant/cgiscript.cpp
trunk/ant/objects.cpp
trunk/ant/objects.h
trunk/ant/todo
Modified: trunk/ant/areas.cpp
===================================================================
--- trunk/ant/areas.cpp 2007-01-24 09:49:52 UTC (rev 484)
+++ trunk/ant/areas.cpp 2007-01-25 08:41:50 UTC (rev 485)
@@ -67,15 +67,16 @@
return true;
};
bool Area::players() {
- if(playerl.size() > 0) return true;
+ if(playerl.size() != 0) return true;
+ std::cout << "Not in area list\n";
std::vector<Room *>::iterator iter = rooms.begin();
size_t size = rooms.size();
-
while(size != 0) {
- if((*(iter))->players.size() != 0) return true;
+ if((*(iter))->players.size() != 0) return true;
iter++;
size--;
}
+
return false;
}
std::string Area::saveMe() {
Modified: trunk/ant/cgiscript.cpp
===================================================================
--- trunk/ant/cgiscript.cpp 2007-01-24 09:49:52 UTC (rev 484)
+++ trunk/ant/cgiscript.cpp 2007-01-25 08:41:50 UTC (rev 485)
@@ -1,8 +1,21 @@
#include "mob.h"
#include "cgiscript.h"
#include "phpscript.h"
+
+void CopyStrvecToTickvec(std::vector<tick_script>&out, std::vector<std::string> in) {
+ std::vector<std::string>::iterator iter = in.begin(), end = in.end();
+ while(iter!=end) {
+ std::string dou = (*(iter));
+ tick_script d = dou;
+ out.push_back(d);
+ iter++;
+ }
+}
+
extern phpCom com;
extern bool COPYTRIG;
+
+
namespace FH {
SFunctor<loaderhelper>* addS;
SFunctor<loaderhelper>* print;
@@ -905,7 +918,7 @@
} else obj->FullyPlaying = false;
return "Success";
} else if(name.compare("tickscripts") ==0) {
-obj->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(obj->tickscripts, strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
obj->arbscripts = strToVec(restofit);
@@ -982,7 +995,7 @@
return "Failed";
} // }}}
else if(name.compare("tickscripts") ==0) {
- (*(iter))->tickscripts = strToVec(restofit);
+ CopyStrvecToTickvec((*(iter))->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
(*(iter))->arbscripts = strToVec(restofit);
@@ -1010,7 +1023,7 @@
return "Success";
}
else if(name.compare("tickscripts") ==0) {
-obj->area_in->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(obj->area_in->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
obj->area_in->arbscripts = strToVec(restofit);
@@ -1029,7 +1042,7 @@
m->room_in->Name.append(restofit);
return "Success";
}else if(name.compare("tickscripts") ==0) {
-obj->room_in->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(obj->room_in->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
obj->room_in->arbscripts = strToVec(restofit);
@@ -1050,7 +1063,7 @@
return "Success";
}
else if(name.compare("tickscripts") ==0) {
-m->editingbp->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(m->editingbp->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
m->editingbp->arbscripts = strToVec(restofit);
@@ -1102,7 +1115,7 @@
ret += " not found!";
return ret;
}else if(name.compare("tickscripts") ==0) {
-m->editingRace->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(m->editingRace->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
m->editingRace->arbscripts = strToVec(restofit);
@@ -1133,7 +1146,7 @@
}
return "Success";
}else if(name.compare("tickscripts") ==0) {
-m->modifyingexit->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(m->modifyingexit->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
m->modifyingexit->arbscripts = strToVec(restofit);
@@ -1178,7 +1191,7 @@
}
return "Success";
}else if(name.compare("tickscripts") ==0) {
-m->modifyingitem->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(m->modifyingitem->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
m->modifyingitem->arbscripts = strToVec(restofit);
@@ -1234,7 +1247,7 @@
} else return "Only players can be immortal!";
}else if(name.compare("tickscripts") ==0) {
-m->editingmob->tickscripts = strToVec(restofit);
+CopyStrvecToTickvec(m->editingmob->tickscripts , strToVec(restofit));
return "Success";
} else if(name.compare("arbscripts") == 0) {
m->editingmob->arbscripts = strToVec(restofit);
Modified: trunk/ant/objects.cpp
===================================================================
--- trunk/ant/objects.cpp 2007-01-24 09:49:52 UTC (rev 484)
+++ trunk/ant/objects.cpp 2007-01-25 08:41:50 UTC (rev 485)
@@ -192,66 +192,66 @@
}
// }}}
+int tickscriptModeRev(std::string &in) {
+ size_t find = in.find("always;");
+ if(find == 0) {
+ in.replace(0, 7, "");
+ return -1;
+ }
+ find = in.find("area;");
+ if(find == 0) {
+ in.replace(0, 5, "");
+ return 0;
+ }
+ find = in.find("room;");
+ if(find == 0) {
+ in.replace(0, 5, "");
+ }
+ return 1;
+}
bool object::TickScript() {// {{{
// std::string type = myTypes();
if(myType == TYPE_MOB || myType == TYPE_PLAYER) {
if(room_in != NULL) {
Room *room = static_cast<Room*>(room_in);
if(room->area_in->players()) {
- if(tickscripts.size() > 0)
- for(std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter<end;iter++) {
- object::input((*(iter)), 0, false);
- }
+ if(tickscripts.size() != 0) for(std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter!=end;iter++) object::input((*(iter)).script, 0, false);
}
}
+ return true;
}
if(myType == TYPE_ITEM) {
- Item &i = *static_cast<Item*>(this);
- if(i.room_in!= NULL) {
- for(std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter<end;iter++) {
- std::string cpy = (*(iter));
- size_t x = cpy.find("always;");
- if(x != std::string::npos) {
- x+=7;
- cpy.replace(0, x, "");
- object::input(cpy,0,false);
- } else {
- x = cpy.find("area;");
- if(x != std::string::npos) {
- if(i.room_in->area_in->players()) {
- x+=5;
- cpy.replace(0, x, "");
- object::input(cpy,0,false);
- }
- } else {
- if(i.room_in->players.size() > 0)
- object::input(cpy, 0, false);
- }
- }
+ if(room_in!= NULL) {
+ for(std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter!=end;iter++) {
+ if((*(iter)).mode == -2) (*(iter)).mode = tickscriptModeRev((*(iter)).script);
+ if((*(iter)).mode == -1) object::input((*(iter)).script,0,false);
+ else if((*(iter)).mode == 0) {
+ if(room_in->area_in->players()) object::input((*(iter)).script,0,false);
+ } else if(room_in->players.size() > 0) object::input((*(iter)).script, 0, false);
}
}
return true;
}
if(myType == TYPE_AREA) {
Area&a = *static_cast<Area*>(this);
- if(a.players()) {
- for(std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter<end;iter++)object::input((*(iter)),0,false);
- }
+ if(a.players()) for(std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter!=end;iter++)object::input((*(iter)).script,0,false);
return true;
}
if(myType == TYPE_ROOM) {
Room&r = *static_cast<Room*>(this);
- if(r.players.size() > 0) for(std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter<end;iter++)object::input((*(iter)),0,false);
+ if(r.players.size() != 0) for(std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter!=end;iter++)object::input((*(iter)).script,0,false);
return true;
}
if(myType==TYPE_BODYPART) {
BodyPart&bp = *static_cast<BodyPart*>(this);
- if(bp.mymob != NULL) for(std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter<end;iter++)object::input((*(iter)),0,false);
+ if(bp.mymob != NULL) for(std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter!=end;iter++)object::input((*(iter)).script,0,false);
+
+ return true;
}
if(myType==TYPE_EXIT) {
// anexit&ex = *static_cast<anexit*>(this);
- if(room_in != NULL) if(room_in->players.size() > 0) for(std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter<end;iter++)object::input((*(iter)),0,false);
+ if(room_in != NULL) if(room_in->players.size() != 0) for(std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end(); iter!=end;iter++)object::input((*(iter)).script,0,false);
return true;
}
return true;
@@ -306,12 +306,13 @@
std::cout << "WTH.. How did I move to a null room\n";
it->room_in = oroom;
- }
+ } else it->area_in = static_cast<Area *>(it->room_in->area_in);
if(it->FullyPlaying) {
//player
- it->room_in->players.push_back(it);
+ it->room_in->addPlayer(it);
+// it->room_in->players.push_back(it);
} else {
//mobile
if(it->myType == TYPE_MOB)
@@ -800,8 +801,11 @@
editingmob = in.editingmob;
{
+ {
+ std::vector<tick_script>::const_iterator iter,end;
+ if(in.tickscripts.size() > 0) for(iter = in.tickscripts.begin(), end = in.tickscripts.end(); iter<end;iter++) tickscripts.push_back((*(iter)));
+ }
std::vector<std::string>::const_iterator iter,end;
- if(in.tickscripts.size() > 0) for(iter = in.tickscripts.begin(), end = in.tickscripts.end(); iter<end;iter++) tickscripts.push_back((*(iter)));
if(in.arbscripts.size() >0) for(iter = in.arbscripts.begin(), end = in.arbscripts.end();iter<end;iter++) arbscripts.push_back((*(iter)));
}
FullyPlaying = in.FullyPlaying;
@@ -958,15 +962,17 @@
};
std::string object::saveMe() {
+// Don't use this.. use saveMe2(std::string)...
+
//this function just puts the description and name in to an std::string
//and returns it, the object itself is responsible for writing (
//ok, so I need a write() routine like print1.)
std::ostringstream rstring;
rstring << "<TYPE>" << myType << "</TYPE>" << "<NAME>" << Name << "</NAME>" << "<DESC>" << Description << "</DESC>" << "<FDESC>" << frontdesc << "</FDESC>" << "<VARDATA>" << vardata << "</VARDATA>";
if(tickscripts.size() > 0) {
- std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end();
+ std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end();
for(;iter<end;iter++) {
- rstring << "<TICKSCRIPT>" << (*(iter))<< "</TICKSCRIPT>";
+ rstring << "<TICKSCRIPT>" << (*(iter)).script << "</TICKSCRIPT>";
}
}
if(arbscripts.size() > 0) {
@@ -979,6 +985,14 @@
if(FullyPlaying) rstring << "<FULLYPLAYING>";
return rstring.str();
};
+
+std::string tickscriptMode(int mode) {
+ if(mode == -2) return "";
+ if(mode == -1) return "always;";
+ if(mode == 0) return "area;";
+ if(mode == 1) return "room;";
+ throw "UNKNOWN TICKSCRIPT MODE U GOT A MEMLEAK UNLESS YOU'RE CHANGING TICKSCRIPTS THEn LOOK AT line 1001 OBJECTS.CPP.";
+}
std::string object::saveMe2(std::string &marker) {
std::string ret;;
ret.append("<TYPE");
@@ -1019,9 +1033,9 @@
ret.append(marker);
ret.append(">");
if(tickscripts.size() > 0) {
- std::vector<std::string>::iterator iter = tickscripts.begin(), end = tickscripts.end();
+ std::vector<tick_script>::iterator iter = tickscripts.begin(), end = tickscripts.end();
for(;iter<end;iter++) {
- ret += "<TICKSCRIPT"; ret+=marker;ret +=">"; ret+=(*(iter));ret+="</TICKSCRIPT";ret+=marker;ret+=">";
+ ret += "<TICKSCRIPT"; ret+=marker;ret +=">";ret+=tickscriptMode((*(iter)).mode); ret+=(*(iter)).script;ret+="</TICKSCRIPT";ret+=marker;ret+=">";
}
}
if(arbscripts.size() > 0) {
@@ -1103,7 +1117,9 @@
y = sfind(d,"</TICKSCRIPT>");
while(x != std::string::npos && y != std::string::npos) {
x+= 12;
- tickscripts.push_back(d.substr(x,y-x));
+ std::string nt = d.substr(x,y-x);
+ tick_script nts(nt);
+ tickscripts.push_back(nts);
y+=13;
x-=12;
d.replace(x, y-x, "");
@@ -1222,7 +1238,9 @@
y = sfind(d,two.c_str());
while(x != std::string::npos && y != std::string::npos) {
x+= one.size();
- tickscripts.push_back(d.substr(x,y-x));
+ std::string ts = d.substr(x, y-x);
+ tick_script nts = ts;
+ tickscripts.push_back(nts);
y+=two.size();
x-=one.size();
d.replace(x, y-x, "");
Modified: trunk/ant/objects.h
===================================================================
--- trunk/ant/objects.h 2007-01-24 09:49:52 UTC (rev 484)
+++ trunk/ant/objects.h 2007-01-25 08:41:50 UTC (rev 485)
@@ -42,7 +42,16 @@
//class anexit;
class Item;
class mob;
-
+class tick_script {
+ public:
+ tick_script(std::string &in) { script = in; mode = -2; }
+ tick_script(const tick_script &old) { script = old.script, mode = old.mode; };
+ int mode; // -1 is always, 0 area, 1 room
+ std::string script;
+ void operator=(std::string &in) {
+ mode = -1, script = in;
+ }
+};
class object : public base {
bool isloggedin; //this is private
public:
@@ -78,7 +87,7 @@
std::string Description; // a description for any object
std::string frontdesc; //front description in look
std::string vardata; // this can hold anything, scripts will use it to hold stuff like health/mana/etc, for anything that inherits object.
- std::vector<std::string> tickscripts;
+ std::vector<tick_script> tickscripts;
std::vector<std::string> arbscripts;
int mode; //decipher mode, login/whatever, use enums below. Barely used now but it is used
bool deleteme; // Mark for deletion
Modified: trunk/ant/todo
===================================================================
--- trunk/ant/todo 2007-01-24 09:49:52 UTC (rev 484)
+++ trunk/ant/todo 2007-01-25 08:41:50 UTC (rev 485)
@@ -5,6 +5,9 @@
On username ban it grabs the last ip of the user, and bans it, and bans any ip that tries to log into that username(successfully) until the username is unbanned. all banned ip's related to the username should be unbanned.
+Ticking has to be optimized, right now, everything ticks all at once, every 2 seconds everything all ticks. They shouldn't all be ticked at the same time however, the server should tick 5, maybe 10 items, do another read loop, tick 5 or 10 more, and so on, and only tick each one once every two seconds - To do this select() may need to be used in non-blocking mode with nanosleep thrown in the way the fcgi-modules do it..
+
+
Step 2
memtests, test mud, release 1.0
---------------------------------------------------------------------------------------------
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|