… | |
… | |
147 | draw_ext_info_format (NDI_UNIQUE | NDI_GREEN, 0, op, |
147 | draw_ext_info_format (NDI_UNIQUE | NDI_GREEN, 0, op, |
148 | MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_NEWS, "INFORMATION: %s\n%s\n", (char *)"%s\n%s", subject, news); |
148 | MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_NEWS, "INFORMATION: %s\n%s\n", (char *)"%s\n%s", subject, news); |
149 | close_and_delete (fp, comp); |
149 | close_and_delete (fp, comp); |
150 | } |
150 | } |
151 | |
151 | |
152 | float |
|
|
153 | player::weapon_speed () const |
|
|
154 | { |
|
|
155 | return ob->speed / weapon_sp * .5f;//TODO, the .5 is arbitrary |
|
|
156 | } |
|
|
157 | |
|
|
158 | /* This loads the first map an puts the player on it. */ |
152 | /* This loads the first map an puts the player on it. */ |
159 | static void |
153 | static void |
160 | set_first_map (object *op) |
154 | set_first_map (object *op) |
161 | { |
155 | { |
162 | op->contr->maplevel = first_map_path; |
156 | op->contr->maplevel = first_map_path; |
… | |
… | |
264 | |
258 | |
265 | new_draw_info (NDI_UNIQUE, 0, ob, "Welcome Back!"); |
259 | new_draw_info (NDI_UNIQUE, 0, ob, "Welcome Back!"); |
266 | |
260 | |
267 | esrv_new_player (this, ob->weight + ob->carrying); |
261 | esrv_new_player (this, ob->weight + ob->carrying); |
268 | |
262 | |
|
|
263 | ob->flag [FLAG_READY_WEAPON] = false; |
|
|
264 | ob->flag [FLAG_READY_SKILL] = false; |
|
|
265 | ob->flag [FLAG_READY_BOW] = false; |
|
|
266 | |
269 | for (object *op = ob->inv; op; op = op->below) |
267 | for (object *op = ob->inv; op; op = op->below) |
270 | if (op->flag [FLAG_APPLIED]) |
268 | if (op->flag [FLAG_APPLIED]) |
271 | switch (op->type) |
269 | switch (op->type) |
272 | { |
270 | { |
|
|
271 | case SKILL: |
|
|
272 | ob->flag [FLAG_APPLIED] = false; |
|
|
273 | break; |
|
|
274 | |
273 | case WAND: |
275 | case WAND: |
274 | case ROD: |
276 | case ROD: |
275 | case HORN: |
277 | case HORN: |
276 | case BOW: |
278 | case BOW: |
277 | case SKILL: |
279 | ranged_ob = op; |
278 | case SKILL_TOOL: |
280 | break; |
|
|
281 | |
279 | case WEAPON: |
282 | case WEAPON: |
280 | apply_special (ob, op, AP_UNAPPLY); |
283 | combat_ob = op; |
281 | apply_special (ob, op, AP_APPLY); |
|
|
282 | break; |
284 | break; |
283 | } |
285 | } |
284 | |
286 | |
|
|
287 | ob->change_weapon (combat_ob ? combat_ob : ranged_ob); |
285 | ob->update_stats (); |
288 | ob->update_stats (); |
|
|
289 | |
286 | ns->floorbox_update (); |
290 | ns->floorbox_update (); |
287 | |
|
|
288 | esrv_send_inventory (ob, ob); |
291 | esrv_send_inventory (ob, ob); |
289 | esrv_add_spells (this, 0); |
292 | esrv_add_spells (this, 0); |
290 | |
293 | |
291 | activate (); |
294 | activate (); |
292 | |
295 | |
… | |
… | |
1637 | if (player *pl = op->contr) |
1640 | if (player *pl = op->contr) |
1638 | { |
1641 | { |
1639 | if (!pl->has_hit) |
1642 | if (!pl->has_hit) |
1640 | { |
1643 | { |
1641 | pl->has_hit = 1; |
1644 | pl->has_hit = 1; |
1642 | pl->ob->speed_left += pl->weapon_speed () - pl->ob->speed; |
1645 | pl->ob->speed_left += pl->weapon_sp - pl->ob->speed; |
1643 | } |
1646 | } |
1644 | #if 0 |
1647 | #if 0 |
1645 | float speed = pl->weapon_sp; |
1648 | float speed = pl->weapon_sp; |
1646 | |
1649 | |
1647 | /* penalize ROF for bestarrow */ |
1650 | /* penalize ROF for bestarrow */ |
… | |
… | |
2167 | ((mon->type != PLAYER || op->contr->party == NULL || op->contr->party != mon->contr->party))) |
2170 | ((mon->type != PLAYER || op->contr->party == NULL || op->contr->party != mon->contr->party))) |
2168 | { |
2171 | { |
2169 | if (!op->contr->has_hit) |
2172 | if (!op->contr->has_hit) |
2170 | { |
2173 | { |
2171 | op->contr->has_hit = 1; |
2174 | op->contr->has_hit = 1; |
2172 | op->speed_left += op->contr->weapon_speed () - op->speed; |
2175 | op->speed_left += op->contr->weapon_sp - op->speed; |
2173 | } |
2176 | } |
2174 | |
2177 | |
2175 | skill_attack (mon, op, 0, 0, 0); |
2178 | skill_attack (mon, op, 0, 0, 0); |
2176 | |
2179 | |
2177 | /* If attacking another player, that player gets automatic |
2180 | /* If attacking another player, that player gets automatic |