gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | MAX_DELAYTIME 90 |
| #define | DEFAULT_WALK_DELAY 180 |
| #define | MAX_JOB_COST 200000 |
| #define | TIME(t) (t & 0x00ff) |
| #define | RANDOM(r) ((r & 0xff00) >> 8) |
| #define | WERT(t, r) ((t & 0x00ff)+((r << 8) & 0xff00)) |
| #define | ERROR(x) raise_error(sprintf(x, previous_object())); |
Funktionen | |
| void | create () |
| varargs void | RegisterWalker (int time, int rand, closure walk_closure) |
| int | dummy_walk () |
| void | RemoveWalker () |
| int | Registration () |
| void | heart_beat () |
| void | reset () |
| mixed * | WalkerList () |
Variablen | |
| static int | counter |
| static int | num_walker |
| static mixed * | walker |
| #define DEFAULT_WALK_DELAY 180 |
Definiert in Zeile 22 der Datei walk_master.c.
Wird benutzt von RegisterWalker().
Definiert in Zeile 46 der Datei walk_master.c.
| #define MAX_DELAYTIME 90 |
Definiert in Zeile 21 der Datei walk_master.c.
Wird benutzt von heart_beat(), RegisterWalker(), Registration() und reset().
| #define MAX_JOB_COST 200000 |
Definiert in Zeile 23 der Datei walk_master.c.
Wird benutzt von heart_beat().
| #define RANDOM | ( | r | ) | ((r & 0xff00) >> 8) |
Definiert in Zeile 28 der Datei walk_master.c.
Wird benutzt von heart_beat().
| #define TIME | ( | t | ) | (t & 0x00ff) |
Definiert in Zeile 27 der Datei walk_master.c.
| #define WERT | ( | t, | |||
| r | ) | ((t & 0x00ff)+((r << 8) & 0xff00)) |
Definiert in Zeile 29 der Datei walk_master.c.
Wird benutzt von RegisterWalker().
| void create | ( | ) |
Definiert in Zeile 35 der Datei walk_master.c.
Benutzt destruct(), num_walker und walker.
00036 { 00037 if (clonep(this_object())) { 00038 destruct(this_object()); 00039 raise_error("walk_master can't be clonend.\n"); 00040 } 00041 walker=({}); 00042 num_walker=0; 00043 enable_commands(); // ohne das, kein heart_beat() 00044 }

| int dummy_walk | ( | ) |
Definiert in Zeile 83 der Datei walk_master.c.
| void heart_beat | ( | ) |
Definiert in Zeile 123 der Datei walk_master.c.
Benutzt counter, i, MAX_DELAYTIME, MAX_JOB_COST, num_walker, RANDOM, TIME und walker.
00124 { 00125 int i; 00126 if (num_walker && i=sizeof(walker[counter])) { 00127 int tmp; 00128 num_walker-=i; 00129 for (i--;i>=0;i--) { 00130 if (get_eval_cost() < MAX_JOB_COST) { 00131 // nicht abgefertigte NPCs im naechsten heart_beat ausfuehren 00132 walker[counter]=walker[counter][0..i]; 00133 num_walker+=i+1; 00134 return; 00135 } 00136 else { 00137 if (walker[counter][i][1] && 00138 !catch(tmp=(int)funcall(walker[counter][i][1])) && tmp) { 00139 tmp=counter+(TIME(walker[counter][i][0]) 00140 +random(RANDOM(walker[counter][i][0])))/2; 00141 if (tmp>MAX_DELAYTIME) tmp-=MAX_DELAYTIME; 00142 walker[tmp]+=({ walker[counter][i] }); 00143 num_walker++; 00144 } 00145 } 00146 } 00147 walker[counter]=({}); // komplett leeren 00148 } 00149 if (counter == MAX_DELAYTIME) 00150 counter=0; 00151 else counter++; 00152 if (!num_walker) { 00153 set_heart_beat(0); 00154 walker=({}); // Speicher freigeben... 00155 } 00156 }
| varargs void RegisterWalker | ( | int | time, | |
| int | rand, | |||
| closure | walk_closure | |||
| ) |
Definiert in Zeile 51 der Datei walk_master.c.
Benutzt DEFAULT_WALK_DELAY, ERROR, MAX_DELAYTIME, num_walker, walker und WERT.
00052 { 00053 int wert, next; 00054 closure func; 00055 00056 // pruefen ob die Paramter zulaessig sind... 00057 if (time<0) ERROR("negative time to RegisterWalker() from %O.\n"); 00058 if (rand<0) ERROR("negative random to RegisterWalker() from %O.\n"); 00059 if ((time+rand) > (2*MAX_DELAYTIME)) 00060 ERROR("Too long delaytime from %s to RegisterWalker().\n"); 00061 00062 wert=WERT(time, rand); 00063 if (!wert && !rand) wert=DEFAULT_WALK_DELAY; 00064 if (walk_closure) 00065 func=walk_closure; 00066 else { 00067 func=symbol_function("Walk", previous_object()); 00068 if (!func) 00069 raise_error("RegisterWalker() call from Object without Walk() function.\n"); 00070 } 00071 if (!num_walker) { 00072 set_heart_beat(1); 00073 if (!pointerp(walker) || !sizeof(walker)) 00074 walker=map(allocate(MAX_DELAYTIME+1), #'allocate); 00075 } 00076 next=counter; 00077 next+=(time+random(rand))/2; 00078 if (next>MAX_DELAYTIME) next-=MAX_DELAYTIME; 00079 walker[next]+=({ ({ wert, func }) }); 00080 num_walker++; 00081 }
| int Registration | ( | ) |
Definiert in Zeile 111 der Datei walk_master.c.
Benutzt i, MAX_DELAYTIME, num_walker, query_closure_object() und walker.
00112 { 00113 int i, j, reg; 00114 if (!num_walker) return 0; 00115 reg=0; 00116 for (i=MAX_DELAYTIME; i>=0; i--) { 00117 for (j=sizeof(walker[i])-1; j>=0; j--) 00118 if (query_closure_object(walker[i][j])==previous_object()) reg++; 00119 } 00120 return reg; 00121 }

| void RemoveWalker | ( | ) |
Definiert in Zeile 89 der Datei walk_master.c.
00090 { 00091 int i, j; 00092 if (!num_walker) return; 00093 for (i=MAX_DELAYTIME; i>=0; i--) { 00094 for (j=sizeof(walker[i])-1; j>=0; j--) { 00095 if (query_closure_object(walker[i][j])==previous_object()) { 00096 if (i==counter) // koennte gerade im heart_beat stecken... 00097 walker[i][j]=({ 0, #'dummy_walk }); 00098 else walker[i][j]=0; 00099 num_walker--; 00100 } 00101 } 00102 if (i!=counter) // koennte gerade im heart_beat stecken... 00103 walker[i]-=({ 0 }); 00104 } 00105 }
| void reset | ( | void | ) |
Definiert in Zeile 158 der Datei walk_master.c.
Benutzt dtime(), i, MAX_DELAYTIME, num_walker und walker.
00161 { 00162 if (set_heart_beat(0)<=0) { 00163 int i; 00164 num_walker=0; // neu berechnen... 00165 if (!sizeof(walker)) return; 00166 for (i=MAX_DELAYTIME; i>=0; i--) 00167 num_walker+=sizeof(walker[i]); 00168 if (num_walker>0) { 00169 write_file(object_name()+".err", sprintf( 00170 "%s: Fehler im heart_beat(). %d aktive Prozesse.\n", 00171 dtime(time()), num_walker)); 00172 enable_commands(); 00173 set_heart_beat(1); 00174 } 00175 } 00176 else set_heart_beat(1); 00177 }

| mixed* WalkerList | ( | ) |
Definiert in Zeile 179 der Datei walk_master.c.
Benutzt counter, num_walker und walker.
00180 { return ({ num_walker, walker, counter }); }
int counter [static] |
Definiert in Zeile 31 der Datei walk_master.c.
int num_walker [static] |
Definiert in Zeile 32 der Datei walk_master.c.
Wird benutzt von create(), heart_beat(), RegisterWalker(), Registration(), reset() und WalkerList().
mixed* walker [static] |
Definiert in Zeile 33 der Datei walk_master.c.
Wird benutzt von create(), heart_beat(), RegisterWalker(), Registration(), reset() und WalkerList().
1.6.3