From: <ma...@us...> - 2012-12-29 00:28:03
|
Revision: 7235 http://exult.svn.sourceforge.net/exult/?rev=7235&view=rev Author: marzojr Date: 2012-12-29 00:27:57 +0000 (Sat, 29 Dec 2012) Log Message: ----------- Missing file from previous commit. Modified Paths: -------------- exult/trunk/schedule.cc Modified: exult/trunk/schedule.cc =================================================================== --- exult/trunk/schedule.cc 2012-12-29 00:24:51 UTC (rev 7234) +++ exult/trunk/schedule.cc 2012-12-29 00:27:57 UTC (rev 7235) @@ -1557,7 +1557,7 @@ if (kid) { - Fast_pathfinder_client cost(1); + Fast_pathfinder_client cost(npc, kid->get_tile(), 1); Actor_action *pact = Path_walking_actor_action::create_path( pos, kid->get_tile(), cost); if (pact) @@ -1852,9 +1852,9 @@ if (try_proximity_usecode(12)) return; int newdist = 1 + rand()%2; // Aim for about 3 tiles from Avatar. - Fast_pathfinder_client cost(newdist); avpos.tx += rand()%3 - 1; // Vary a bit randomly. avpos.ty += rand()%3 - 1; + Fast_pathfinder_client cost(npc, avpos, newdist); Actor_action *pact = Path_walking_actor_action::create_path(npcpos, avpos, cost); if (pact) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wjp...@us...> - 2013-04-11 23:04:39
|
Revision: 7379 http://exult.svn.sourceforge.net/exult/?rev=7379&view=rev Author: wjpalenstijn Date: 2013-04-11 23:04:33 +0000 (Thu, 11 Apr 2013) Log Message: ----------- Cleanup Modified Paths: -------------- exult/trunk/schedule.cc Modified: exult/trunk/schedule.cc =================================================================== --- exult/trunk/schedule.cc 2013-04-11 22:55:58 UTC (rev 7378) +++ exult/trunk/schedule.cc 2013-04-11 23:04:33 UTC (rev 7379) @@ -962,19 +962,15 @@ Schedule_change *list; int cnt; npc->get_schedules(list, cnt); - if (cnt != 0 && list[npc->find_schedule_at_time(gclock->get_hour() / 3)].get_type() != Schedule::patrol){ - Actor *safenpc = npc; - // May delete us. - safenpc->update_schedule(gclock->get_hour() / 3); - // So bail out if it happens. - if (safenpc->get_schedule() != this) - return; - }else{ + if (cnt != 0 && list[npc->find_schedule_at_time(gclock->get_hour() / 3)].get_type() != Schedule::patrol) { + npc->update_schedule(gclock->get_hour() / 3); + } else { // when the preset schedule is patrol or there is no preset // change schedule to loiter npc->set_schedule_type(loiter); - return; } + // The above will have deleted us, so return immediately. + return; } seek_combat = true; state = 4; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <js...@us...> - 2013-05-31 03:43:29
|
Revision: 7387 http://sourceforge.net/p/exult/code/7387 Author: jsf Date: 2013-05-31 03:43:26 +0000 (Fri, 31 May 2013) Log Message: ----------- Desk_schedule NPC now opens/closes shutters Modified Paths: -------------- exult/trunk/schedule.cc Modified: exult/trunk/schedule.cc =================================================================== --- exult/trunk/schedule.cc 2013-05-23 13:12:04 UTC (rev 7386) +++ exult/trunk/schedule.cc 2013-05-31 03:43:26 UTC (rev 7387) @@ -2453,6 +2453,9 @@ add_client(chair); } int frnum = npc->get_framenum(); + if (rand() % 2 == 0) // Check for lamps, etc. + if (try_street_maintenance()) + return; // We no longer exist. if ((frnum & 0xf) != Actor::sit_frame) { if (!Sit_schedule::set_action(npc, chair, 0)) { chair = 0; // Look for any nearby chair. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <js...@us...> - 2013-06-05 03:02:09
|
Revision: 7392 http://sourceforge.net/p/exult/code/7392 Author: jsf Date: 2013-06-05 03:02:06 +0000 (Wed, 05 Jun 2013) Log Message: ----------- Create extra desk items Modified Paths: -------------- exult/trunk/schedule.cc Modified: exult/trunk/schedule.cc =================================================================== --- exult/trunk/schedule.cc 2013-06-04 06:23:07 UTC (rev 7391) +++ exult/trunk/schedule.cc 2013-06-05 03:02:06 UTC (rev 7392) @@ -2469,13 +2469,8 @@ return false; } -/* - * Walk to desk item. - * Output: false if failed. - */ -bool Desk_schedule::walk_to_desk_item() { - Game_object_vector vec; - desk_item = 0; +static int find_desk_items(Game_object_vector &vec, Actor *npc) +{ npc->find_nearby(vec, 675, 16, 0); int floor = npc->get_lift() / 5; // Make sure it's on same floor. for (Game_object_vector::iterator it = vec.begin(); it != vec.end(); @@ -2484,10 +2479,22 @@ if (item->get_lift() / 5 != floor) vec.erase(it); } - if (vec.size()) { - desk_item = vec[rand() % vec.size()]; + return vec.size(); +} + +/* + * Walk to desk item. + * Output: false if failed. + */ +bool Desk_schedule::walk_to_desk_item() { + Game_object_vector vec; + desk_item = 0; + int nitems = find_desk_items(vec, npc); + if (nitems) { + desk_item = vec[rand() % nitems]; add_client(desk_item); Tile_coord spot = desk_item->get_tile(); + int floor = npc->get_lift() / 5; spot.tz = floor*5; Tile_coord pos = Map_chunk::find_spot(spot, 1, npc); if (pos.tx != -1 && @@ -2509,9 +2516,28 @@ return; // We no longer exist. switch (state) { - case desk_setup: + case desk_setup: { static int desks[2] = {283, 407}; Stand_up(npc); + if (tables.empty()) { + find_tables(890); + find_tables(633); + find_tables(1000); + } + // Create desk items if needed. + items_in_hand = npc->count_objects(675); + Game_object_vector vec; + int nearby = find_desk_items(vec, npc); + int nitems = (7 + rand()%5) - items_in_hand - nearby; + if (nitems > 0) { + int nframes = ShapeID(675, 0).get_num_frames(); + items_in_hand += nitems; + for (int i = 0; i < nitems; ++i) { + int frame = rand() % nframes; + Game_object *item = new Ireg_game_object(675, frame, 0, 0, 0); + npc->add(item, true); + } + } desk = npc->find_closest(desks, 2); if (desk) { static int chairs[2] = {873, 292}; @@ -2523,12 +2549,8 @@ return; } add_client(chair); - if (tables.empty()) { - find_tables(890); - find_tables(633); - find_tables(1000); + state = sit_at_desk; } - state = sit_at_desk; /* FALL THROUGH */ case sit_at_desk: { int frnum = npc->get_framenum(); @@ -2595,7 +2617,8 @@ : foot.y + foot.h - 1; Shape_info &info = table->get_info(); spot.tz = table->get_lift() + info.get_3d_height(); - Tile_coord pos = Map_chunk::find_spot(spot, 1, to_drop); + Tile_coord pos = Map_chunk::find_spot(spot, 1, + to_drop->get_shapenum(), to_drop->get_framenum()); if (pos.tx != -1 && pos.tz == spot.tz && foot.has_world_point(pos.tx, pos.ty)) { // Passes test. @@ -2619,7 +2642,7 @@ new Frames_actor_action(frames, sizeof(frames) / sizeof(frames[0])))); } - npc->start(250, 2000 + rand() % 1000); + npc->start(250, 1000 + rand() % 500); break; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <js...@us...> - 2013-06-08 20:33:12
|
Revision: 7393 http://sourceforge.net/p/exult/code/7393 Author: jsf Date: 2013-06-08 20:33:09 +0000 (Sat, 08 Jun 2013) Log Message: ----------- Desk_schedule: create more reasonable desk items Modified Paths: -------------- exult/trunk/schedule.cc Modified: exult/trunk/schedule.cc =================================================================== --- exult/trunk/schedule.cc 2013-06-05 03:02:06 UTC (rev 7392) +++ exult/trunk/schedule.cc 2013-06-08 20:33:09 UTC (rev 7393) @@ -2505,6 +2505,31 @@ return false; } +// Pick a 'reasonable' desk item frame to create. +static int Desk_item_frame() +{ + static int quills[] = {1, 14, 15}; + static int documents[] = {6, 13}; + static int wax[] = {7, 12}; + static int non_docs = 0; // Make sure to create docs. + + int n = non_docs >= 2 ? 6 : rand() % 10; + ++non_docs; + switch (n) { + case 0: return 0; // Gavel. + case 1: return quills[rand()%3]; + case 2: return 2; // Inkwell + case 3: return 3; // Quill holder + case 4: return 4; // Book mark. + case 5: return 5; // Letter opener. + case 6: non_docs = 0; return documents[rand()%2]; + case 7: return wax[rand()%2]; + case 8: return 8; // Seal. + case 9: return 9; // Blotter. + default: return 0; + } +} + /* * Schedule change for 'desk work': */ @@ -2530,10 +2555,9 @@ int nearby = find_desk_items(vec, npc); int nitems = (7 + rand()%5) - items_in_hand - nearby; if (nitems > 0) { - int nframes = ShapeID(675, 0).get_num_frames(); items_in_hand += nitems; for (int i = 0; i < nitems; ++i) { - int frame = rand() % nframes; + int frame = Desk_item_frame(); Game_object *item = new Ireg_game_object(675, frame, 0, 0, 0); npc->add(item, true); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <js...@us...> - 2013-09-29 20:07:09
|
Revision: 7433 http://sourceforge.net/p/exult/code/7433 Author: jsf Date: 2013-09-29 20:07:06 +0000 (Sun, 29 Sep 2013) Log Message: ----------- Don't have an NPC on the Desk_schedule pick up parrots. Modified Paths: -------------- exult/trunk/schedule.cc Modified: exult/trunk/schedule.cc =================================================================== --- exult/trunk/schedule.cc 2013-09-02 15:04:11 UTC (rev 7432) +++ exult/trunk/schedule.cc 2013-09-29 20:07:06 UTC (rev 7433) @@ -2472,6 +2472,8 @@ return false; } +static char desk_frames[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15}; +#define DESK_FRAMES_CNT sizeof(desk_frames)/sizeof(desk_frames[0]) static int find_desk_items(Game_object_vector &vec, Actor *npc) { npc->find_nearby(vec, 675, 16, 0); @@ -2479,7 +2481,8 @@ for (Game_object_vector::iterator it = vec.begin(); it != vec.end(); ++it) { Game_object *item = *it; - if (item->get_lift() / 5 != floor) + if (item->get_lift() / 5 != floor || + memchr(desk_frames, item->get_framenum(), DESK_FRAMES_CNT) == 0) vec.erase(it); } return vec.size(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |