… | |
… | |
241 | |
241 | |
242 | new_draw_info (NDI_UNIQUE, 0, ob, "Welcome Back!"); |
242 | new_draw_info (NDI_UNIQUE, 0, ob, "Welcome Back!"); |
243 | |
243 | |
244 | esrv_new_player (this, ob->weight + ob->carrying); |
244 | esrv_new_player (this, ob->weight + ob->carrying); |
245 | |
245 | |
|
|
246 | ob->update_stats (); |
|
|
247 | |
|
|
248 | ns->floorbox_update (); |
|
|
249 | esrv_send_inventory (ob, ob); |
|
|
250 | esrv_add_spells (this, 0); |
|
|
251 | |
|
|
252 | activate (); |
|
|
253 | |
|
|
254 | send_rules (ob); |
|
|
255 | send_news (ob); |
|
|
256 | display_motd (ob); |
|
|
257 | |
|
|
258 | INVOKE_PLAYER (CONNECT, this); |
|
|
259 | INVOKE_PLAYER (LOGIN, this); |
|
|
260 | } |
|
|
261 | |
|
|
262 | void |
|
|
263 | player::disconnect () |
|
|
264 | { |
|
|
265 | if (ob) |
|
|
266 | { |
|
|
267 | ob->close_container (); //TODO: client-specific |
|
|
268 | ob->drop_unpaid_items (); |
|
|
269 | } |
|
|
270 | |
|
|
271 | if (ns) |
|
|
272 | { |
|
|
273 | if (active) |
|
|
274 | INVOKE_PLAYER (LOGOUT, this, ARG_INT (0)); |
|
|
275 | |
|
|
276 | INVOKE_PLAYER (DISCONNECT, this); |
|
|
277 | |
|
|
278 | ns->reset_stats (); |
|
|
279 | ns->pl = 0; |
|
|
280 | ns = 0; |
|
|
281 | } |
|
|
282 | |
|
|
283 | observe = ob; |
|
|
284 | |
|
|
285 | deactivate (); |
|
|
286 | } |
|
|
287 | |
|
|
288 | // the need for this function can be explained |
|
|
289 | // by load_object not returning the object |
|
|
290 | void |
|
|
291 | player::set_object (object *op) |
|
|
292 | { |
|
|
293 | ob = observe = op; |
|
|
294 | ob->contr = this; /* this aren't yet in archetype */ |
|
|
295 | |
|
|
296 | ob->speed = 1.0f; |
|
|
297 | ob->speed_left = 0.5f; |
|
|
298 | |
|
|
299 | ob->direction = 5; /* So player faces south */ |
|
|
300 | |
246 | ob->flag [FLAG_READY_WEAPON] = false; |
301 | ob->flag [FLAG_READY_WEAPON] = false; |
247 | ob->flag [FLAG_READY_SKILL] = false; |
302 | ob->flag [FLAG_READY_SKILL] = false; |
248 | ob->flag [FLAG_READY_BOW] = false; |
303 | ob->flag [FLAG_READY_BOW] = false; |
249 | |
304 | |
250 | for (object *op = ob->inv; op; op = op->below) |
305 | for (object *op = ob->inv; op; op = op->below) |
… | |
… | |
266 | combat_ob = op; |
321 | combat_ob = op; |
267 | break; |
322 | break; |
268 | } |
323 | } |
269 | |
324 | |
270 | ob->change_weapon (combat_ob ? combat_ob : ranged_ob); |
325 | ob->change_weapon (combat_ob ? combat_ob : ranged_ob); |
271 | ob->update_stats (); |
|
|
272 | |
|
|
273 | ns->floorbox_update (); |
|
|
274 | esrv_send_inventory (ob, ob); |
|
|
275 | esrv_add_spells (this, 0); |
|
|
276 | |
|
|
277 | activate (); |
|
|
278 | |
|
|
279 | send_rules (ob); |
|
|
280 | send_news (ob); |
|
|
281 | display_motd (ob); |
|
|
282 | |
|
|
283 | INVOKE_PLAYER (CONNECT, this); |
|
|
284 | INVOKE_PLAYER (LOGIN, this); |
|
|
285 | } |
|
|
286 | |
|
|
287 | void |
|
|
288 | player::disconnect () |
|
|
289 | { |
|
|
290 | if (ob) |
|
|
291 | { |
|
|
292 | ob->close_container (); //TODO: client-specific |
|
|
293 | ob->drop_unpaid_items (); |
|
|
294 | } |
|
|
295 | |
|
|
296 | if (ns) |
|
|
297 | { |
|
|
298 | if (active) |
|
|
299 | INVOKE_PLAYER (LOGOUT, this, ARG_INT (0)); |
|
|
300 | |
|
|
301 | INVOKE_PLAYER (DISCONNECT, this); |
|
|
302 | |
|
|
303 | ns->reset_stats (); |
|
|
304 | ns->pl = 0; |
|
|
305 | ns = 0; |
|
|
306 | } |
|
|
307 | |
|
|
308 | observe = ob; |
|
|
309 | |
|
|
310 | deactivate (); |
|
|
311 | } |
|
|
312 | |
|
|
313 | // the need for this function can be explained |
|
|
314 | // by load_object not returning the object |
|
|
315 | void |
|
|
316 | player::set_object (object *op) |
|
|
317 | { |
|
|
318 | ob = observe = op; |
|
|
319 | ob->contr = this; /* this aren't yet in archetype */ |
|
|
320 | |
|
|
321 | ob->speed = 1.0f; |
|
|
322 | ob->speed_left = 0.5f; |
|
|
323 | |
|
|
324 | ob->direction = 5; /* So player faces south */ |
|
|
325 | } |
326 | } |
326 | |
327 | |
327 | void |
328 | void |
328 | player::set_observe (object *op) |
329 | player::set_observe (object *op) |
329 | { |
330 | { |
… | |
… | |
1350 | { |
1351 | { |
1351 | object *tmp = 0; |
1352 | object *tmp = 0; |
1352 | |
1353 | |
1353 | for (op = op->inv; op; op = op->below) |
1354 | for (op = op->inv; op; op = op->below) |
1354 | if (!tmp && op->type == CONTAINER && op->race == type && QUERY_FLAG (op, FLAG_APPLIED)) |
1355 | if (!tmp && op->type == CONTAINER && op->race == type && QUERY_FLAG (op, FLAG_APPLIED)) |
1355 | tmp = find_arrow (op, type); |
1356 | tmp = find_arrow (splay (op), type); |
1356 | else if (op->type == ARROW && op->race == type) |
1357 | else if (op->type == ARROW && op->race == type) |
1357 | return op; |
1358 | return splay (op); |
1358 | |
1359 | |
1359 | return tmp; |
1360 | return tmp; |
1360 | } |
1361 | } |
1361 | |
1362 | |
1362 | /* |
1363 | /* |