1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
#include "swserv.h"
int NetHandleSetShields(int condescriptor, char *arg)
{
long object_num, con_object_num;
int shield_state;
double shield_frequency;
xsw_object_struct *obj_ptr;
con_object_num = connection[condescriptor]->object_num;
if(DBIsObjectGarbage(con_object_num))
return(-1);
else
obj_ptr = xsw_object[con_object_num];
/*
* NET_CMD_SETSHIELDS format:
*
* object_num, shield_state, shield_frequency
*/
sscanf(arg, "%ld %i %lf",
&object_num,
&shield_state,
&shield_frequency
);
/* Connection must own object. */
if(object_num != con_object_num)
return(-3);
/* Does object have shields generators? */
if(obj_ptr->shield_state == SHIELD_STATE_NONE)
return(1);
/* Set shield_frequency. */
if(shield_frequency > SWR_FREQ_MAX)
shield_frequency = SWR_FREQ_MAX;
else if(shield_frequency < SWR_FREQ_MIN)
shield_frequency = SWR_FREQ_MIN;
obj_ptr->shield_frequency = shield_frequency;
/* Is the cloak up? */
if(obj_ptr->cloak_state == CLOAK_STATE_UP)
{
obj_ptr->shield_state = SHIELD_STATE_DOWN;
return(1);
}
/* Set shield visibility if shield is just raised. */
if((obj_ptr->shield_state == SHIELD_STATE_DOWN) &&
(obj_ptr->power_max > 0) &&
(shield_state == SHIELD_STATE_UP)
)
{
obj_ptr->shield_visibility =
obj_ptr->power / obj_ptr->power_max;
/* Send shield visibility to all connections. */
NetSendShieldVis(-1, object_num);
}
obj_ptr->shield_state = shield_state;
/* Set next object values update to now, so it gets updated now. */
next.object_values = cur_millitime;
return(0);
}
int NetSendSetShields(int condescriptor, long object_num)
{
return(0);
}
|