ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/c_new.C
(Generate patch)

Comparing deliantra/server/server/c_new.C (file contents):
Revision 1.1 by elmex, Sun Aug 13 17:16:03 2006 UTC vs.
Revision 1.6 by root, Mon Dec 11 02:54:57 2006 UTC

1/*
2 * static char *rcsid_c_new_c =
3 * "$Id: c_new.C,v 1.1 2006/08/13 17:16:03 elmex Exp $";
4 */
5
6/* 1/*
7 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
8 3
9 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
10 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
21 16
22 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 20
26 The author can be reached via e-mail to crossfire-devel@real-time.com 21 The author can be reached via e-mail to <crossfire@schmorp.de>
27*/ 22*/
28 23
29/* This file deals with administrative commands from the client. */ 24/* This file deals with administrative commands from the client. */
30#include <global.h> 25#include <global.h>
31#include <commands.h> 26#include <commands.h>
32#ifndef __CEXTRACT__ 27#ifndef __CEXTRACT__
33#include <sproto.h> 28# include <sproto.h>
34#endif 29#endif
35 30
36#ifndef tolower 31#ifndef tolower
37#define tolower(C) (((C) >= 'A' && (C) <= 'Z')? (C) - 'A' + 'a': (C)) 32# define tolower(C) (((C) >= 'A' && (C) <= 'Z')? (C) - 'A' + 'a': (C))
38#endif 33#endif
39 34
40 35
36static int
41static int compare_A(const void *a, const void *b) 37compare_A (const void *a, const void *b)
42{ 38{
43 return strcmp(((CommArray_s *)a)->name, ((CommArray_s *)b)->name); 39 return strcmp (((CommArray_s *) a)->name, ((CommArray_s *) b)->name);
44} 40}
45 41
42static CommArray_s *
46static CommArray_s *find_command_element(char *cmd, CommArray_s *commarray, 43find_command_element (char *cmd, CommArray_s * commarray, int commsize)
47 int commsize)
48{ 44{
49 CommArray_s *asp, dummy; 45 CommArray_s *asp, dummy;
50 char *cp;
51 46
52 dummy.name =cmd; 47 dummy.name = cmd;
53 asp =(CommArray_s *)bsearch((void *)&dummy, 48 asp = (CommArray_s *) bsearch ((void *) &dummy, (void *) commarray, commsize, sizeof (CommArray_s), compare_A);
54 (void *)commarray, commsize,
55 sizeof(CommArray_s), compare_A);
56 return asp; 49 return asp;
57} 50}
58 51
59/* This function is called from the new client/server code. 52/* This function is called from the new client/server code.
60 * pl is the player who is issuing the command, command is the 53 * pl is the player who is issuing the command, command is the
61 * command. 54 * command.
62 */ 55 */
56int
63int execute_newserver_command(object *pl, char *command) 57execute_newserver_command (object *pl, char *command)
64{ 58{
65 CommArray_s *csp; 59 CommArray_s *csp;
66 char *cp; 60 char *cp;
67 61
68 pl->contr->has_hit=0; 62 pl->contr->has_hit = 0;
69 63
70 /* 64 /*
71 * remove trailing spaces from commant 65 * remove trailing spaces from commant
72 */ 66 */
73 cp=command+strlen(command)-1; 67 cp = command + strlen (command) - 1;
74 while ( (cp>=command) && (*cp==' ')){ 68 while ((cp >= command) && (*cp == ' '))
69 {
75 *cp='\0'; 70 *cp = '\0';
76 cp--; 71 cp--;
77 } 72 }
78 cp=strchr(command, ' '); 73 cp = strchr (command, ' ');
79 if (cp) { 74 if (cp)
75 {
80 *(cp++) ='\0'; 76 *(cp++) = '\0';
81 while (*cp==' ') cp++; 77 while (*cp == ' ')
78 cp++;
82 } 79 }
83 80
84 csp = find_plugin_command(command,pl); 81 csp = find_plugin_command (command, pl);
85 82
86 if (!csp)
87 csp = find_command_element(command, NewServerCommands, NewServerCommandSize); 83 if (!csp) csp = find_command_element (command, NewServerCommands, NewServerCommandSize);
88 if (!csp)
89 csp = find_command_element(command, Commands, CommandsSize); 84 if (!csp) csp = find_command_element (command, Commands, CommandsSize);
90 if (!csp)
91 csp = find_command_element(command, CommunicationCommands, CommunicationCommandSize); 85 if (!csp) csp = find_command_element (command, CommunicationCommands, CommunicationCommandSize);
92 if (!csp && QUERY_FLAG(pl, FLAG_WIZ)) 86 if (!csp && QUERY_FLAG (pl, FLAG_WIZ))
93 csp = find_command_element(command, WizCommands, WizCommandsSize); 87 csp = find_command_element (command, WizCommands, WizCommandsSize);
94 88
95 if (csp==NULL) { 89 if (csp == NULL)
96 new_draw_info_format(NDI_UNIQUE, 0,pl, 90 {
97 "'%s' is not a valid command.", command); 91 new_draw_info_format (NDI_UNIQUE, 0, pl, "'%s' is not a valid command.", command);
98 return 0; 92 return 0;
99 } 93 }
100 94
101 pl->speed_left -= csp->time; 95 pl->speed_left -= csp->time;
102 96
103 /* A character time can never exceed his speed (which in many cases, 97 /* A character time can never exceed his speed (which in many cases,
104 * if wearing armor, is less than one.) Thus, in most cases, if 98 * if wearing armor, is less than one.) Thus, in most cases, if
105 * the command takes 1.0, the player's speed will be less than zero. 99 * the command takes 1.0, the player's speed will be less than zero.
106 * it is only really an issue if time goes below -1 100 * it is only really an issue if time goes below -1
107 * Due to various reasons that are too long to go into here, we will 101 * Due to various reasons that are too long to go into here, we will
108 * actually still execute player even if his time is less than 0, 102 * actually still execute player even if his time is less than 0,
109 * but greater than -1. This is to improve the performance of the 103 * but greater than -1. This is to improve the performance of the
110 * new client/server. In theory, it shouldn't make much difference. 104 * new client/server. In theory, it shouldn't make much difference.
111 */ 105 */
112 106
113 if (csp->time && pl->speed_left<-2.0) { 107 if (csp->time && pl->speed_left < -2.0)
114 LOG(llevDebug,"execute_newclient_command: Player issued command that takes more time than he has left.\n"); 108 LOG (llevDebug, "execute_newclient_command: Player issued command that takes more time than he has left.\n");
115 } 109
116 return csp->func(pl, cp); 110 return csp->func (pl, cp);
117} 111}
118 112
113int
119int command_run(object *op, char *params) 114command_run (object *op, char *params)
120{ 115{
121 int dir; 116 int dir;
117
122 dir = params?atoi(params):0; 118 dir = params ? atoi (params) : 0;
123 if ( dir<0 || dir>=9 ){ 119 if (dir < 0 || dir >= 9)
120 {
124 new_draw_info(NDI_UNIQUE, 0,op,"Can't run into a non adjacent square."); 121 new_draw_info (NDI_UNIQUE, 0, op, "Can't run into a non adjacent square.");
125 return 0; 122 return 0;
126 } 123 }
127 op->contr->run_on=1; 124 op->contr->run_on = 1;
128 return move_player(op, dir); 125 return move_player (op, dir);
129} 126}
130 127
128int
131int command_run_stop(object *op, char *params) 129command_run_stop (object *op, char *params)
132{ 130{
133 op->contr->run_on=0; 131 op->contr->run_on = 0;
134 return 1; 132 return 1;
135} 133}
136 134
135int
137int command_fire(object *op, char *params) 136command_fire (object *op, char *params)
138{ 137{
139 int dir; 138 int dir;
139
140 dir = params?atoi(params):0; 140 dir = params ? atoi (params) : 0;
141 if ( dir<0 || dir>=9 ){ 141 if (dir < 0 || dir >= 9)
142 {
142 new_draw_info(NDI_UNIQUE, 0,op,"Can't fire to a non adjacent square."); 143 new_draw_info (NDI_UNIQUE, 0, op, "Can't fire to a non adjacent square.");
143 return 0; 144 return 0;
144 }; 145 };
145 op->contr->fire_on=1; 146 op->contr->fire_on = 1;
146 return move_player(op, dir); 147 return move_player (op, dir);
147} 148}
148 149
150int
149int command_fire_stop(object *op, char *params) 151command_fire_stop (object *op, char *params)
150{ 152{
151 op->contr->fire_on=0; 153 op->contr->fire_on = 0;
152 return 1; 154 return 1;
153} 155}
154 156
157int
155int bad_command(object *op, char *params) 158bad_command (object *op, char *params)
156{ 159{
157 new_draw_info(NDI_UNIQUE, 0,op,"bind and unbind are no longer handled on the server"); 160 new_draw_info (NDI_UNIQUE, 0, op, "bind and unbind are no longer handled on the server");
158 return 1; 161 return 1;
159} 162}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines