ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/plugin_common.C
Revision: 1.3
Committed: Sun Jul 1 05:00:20 2007 UTC (16 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_2
Changes since 1.2: +10 -11 lines
Log Message:
- upgrade crossfire trt to the GPL version 3 (hopefully correctly).
- add a single file covered by the GNU Affero General Public License
  (which is not yet released, so I used the current draft, which is
  legally a bit wavy, but its likely better than nothing as it expresses
  direct intent by the authors, and we can upgrade as soon as it has been
  released).
  * this should ensure availability of source code for the server at least
    and hopefully also archetypes and maps even when modified versions
    are not being distributed, in accordance of section 13 of the agplv3.

File Contents

# Content
1 /*
2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 *
4 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
5 * Copyright (©) 2001-2005,2007 Chachkoff Yann (Feel free to deliver your complaints)
6 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
7 *
8 * Crossfire TRT is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 *
21 * The authors can be reached via e-mail to <crossfire@schmorp.de>
22 */
23
24 /*****************************************************************************/
25 /* The CPICP are the various functions of the server that can be used by all */
26 /* plugins. It is recommended that plugins do not call the server-provided */
27 /* functions directly, but instead use the wrappers provided here by the */
28 /* CPICP interface. By doing so, various validity checks can be performed */
29 /* by CPICP, protecting the server from potential nasty effects of passing */
30 /* it wrong parameter values. */
31 /*****************************************************************************/
32
33 #include <plugin_common.h>
34
35 static f_plug_api cfapiSystem_register_global_event = NULL;
36 static f_plug_api cfapiSystem_unregister_global_event = NULL;
37 static f_plug_api cfapiSystem_find_animation = NULL;
38
39 static f_plug_api cfapiMap_create_path = NULL;
40
41 static f_plug_api cfapiObject_get_property = NULL;
42 static f_plug_api cfapiObject_set_property = NULL;
43 static f_plug_api cfapiObject_apply = NULL;
44 static f_plug_api cfapiObject_identify = NULL;
45 static f_plug_api cfapiObject_describe = NULL;
46 static f_plug_api cfapiObject_drain = NULL;
47 static f_plug_api cfapiObject_fix = NULL;
48 static f_plug_api cfapiObject_give_skill = NULL;
49 static f_plug_api cfapiObject_transmute = NULL;
50 static f_plug_api cfapiObject_remove = NULL;
51 static f_plug_api cfapiObject_delete = NULL;
52 static f_plug_api cfapiObject_clone = NULL;
53 static f_plug_api cfapiObject_find = NULL;
54 static f_plug_api cfapiObject_create = NULL;
55 static f_plug_api cfapiObject_insert = NULL;
56 static f_plug_api cfapiObject_split = NULL;
57 static f_plug_api cfapiObject_merge = NULL;
58 static f_plug_api cfapiObject_distance = NULL;
59 static f_plug_api cfapiObject_update = NULL;
60 static f_plug_api cfapiObject_clear = NULL;
61 static f_plug_api cfapiObject_reset = NULL;
62 /* static f_plug_api cfapiCheck_inventory = NULL; */
63 static f_plug_api cfapiObject_activate_rune = NULL;
64 static f_plug_api cfapiObject_check_trigger = NULL;
65 static f_plug_api cfapiObject_query_money = NULL;
66 static f_plug_api cfapiObject_query_cost = NULL;
67 static f_plug_api cfapiObject_cast = NULL;
68 static f_plug_api cfapiObject_learn_spell = NULL;
69 static f_plug_api cfapiObject_forget_spell = NULL;
70 static f_plug_api cfapiObject_check_spell = NULL;
71 static f_plug_api cfapiObject_pay_amount = NULL;
72 static f_plug_api cfapiObject_pay_item = NULL;
73 static f_plug_api cfapiObject_transfer = NULL;
74 static f_plug_api cfapiObject_find_archetype_inside = NULL;
75 static f_plug_api cfapiObject_out_of_map = NULL;
76 static f_plug_api cfapiObject_drop = NULL;
77 static f_plug_api cfapiObject_take = NULL;
78 static f_plug_api cfapiObject_say = NULL;
79 static f_plug_api cfapiObject_speak = NULL;
80 static f_plug_api cfapiMap_get_property = NULL;
81 static f_plug_api cfapiMap_set_property = NULL;
82 static f_plug_api cfapiMap_get_map = NULL;
83 static f_plug_api cfapiMap_message = NULL;
84 static f_plug_api cfapiMap_get_object_at = NULL;
85 static f_plug_api cfapiMap_present_arch_by_name = NULL;
86 static f_plug_api cfapiMap_get_flags = NULL;
87 static f_plug_api cfapiPlayer_find = NULL;
88 static f_plug_api cfapiPlayer_message = NULL;
89 static f_plug_api cfapiPlayer_send_inventory = NULL;
90 static f_plug_api cfapiObject_teleport = NULL;
91 static f_plug_api cfapiObject_pickup = NULL;
92 static f_plug_api cfapiObject_get_key = NULL;
93 static f_plug_api cfapiObject_set_key = NULL;
94 static f_plug_api cfapiObject_move = NULL;
95 static f_plug_api cfapiObject_apply_below = NULL;
96 static f_plug_api cfapiArchetype_get_first = NULL;
97 static f_plug_api cfapiArchetype_get_property = NULL;
98 static f_plug_api cfapiParty_get_property = NULL;
99 static f_plug_api cfapiRegion_get_property = NULL;
100
101 #define GET_HOOK( x, y, z ) \
102 { \
103 x = ( f_plug_api )getHooks( &z, 1, y ); \
104 if ( z != CFAPI_FUNC ) {\
105 printf( "unable to find hook %s!\n", y ); return 0; \
106 } }
107
108 int cf_init_plugin( f_plug_api getHooks )
109 {
110 int z;
111 GET_HOOK( cfapiSystem_register_global_event, "cfapi_system_register_global_event", z );
112 GET_HOOK( cfapiSystem_unregister_global_event, "cfapi_system_unregister_global_event", z );
113 GET_HOOK( cfapiSystem_find_animation, "cfapi_system_find_animation", z );
114 GET_HOOK( cfapiObject_get_property, "cfapi_object_get_property", z );
115 GET_HOOK( cfapiObject_set_property, "cfapi_object_set_property", z );
116 GET_HOOK( cfapiObject_apply, "cfapi_object_apply", z );
117 GET_HOOK( cfapiObject_identify, "cfapi_object_identify", z );
118 GET_HOOK( cfapiObject_describe, "cfapi_object_describe", z );
119 GET_HOOK( cfapiObject_drain, "cfapi_object_drain", z );
120 GET_HOOK( cfapiObject_fix, "cfapi_object_fix", z );
121 GET_HOOK( cfapiObject_give_skill, "cfapi_object_give_skill", z );
122 GET_HOOK( cfapiObject_transmute, "cfapi_object_transmute", z );
123 GET_HOOK( cfapiObject_remove, "cfapi_object_remove", z );
124 GET_HOOK( cfapiObject_delete, "cfapi_object_delete", z );
125 GET_HOOK( cfapiObject_clone, "cfapi_object_clone", z );
126 GET_HOOK( cfapiObject_find, "cfapi_object_find", z );
127 GET_HOOK( cfapiObject_create, "cfapi_object_create", z );
128 GET_HOOK( cfapiObject_insert, "cfapi_object_insert", z );
129 GET_HOOK( cfapiObject_split, "cfapi_object_split", z );
130 GET_HOOK( cfapiObject_merge, "cfapi_object_merge", z );
131 GET_HOOK( cfapiObject_distance, "cfapi_object_distance", z );
132 GET_HOOK( cfapiObject_update, "cfapi_object_update", z );
133 GET_HOOK( cfapiObject_clear, "cfapi_object_clear", z );
134 GET_HOOK( cfapiObject_reset, "cfapi_object_reset", z );
135 GET_HOOK( cfapiObject_activate_rune, "cfapi_object_spring_trap", z );
136 GET_HOOK( cfapiObject_check_trigger, "cfapi_object_check_trigger", z );
137 GET_HOOK( cfapiObject_query_money,"cfapi_object_query_money", z );
138 GET_HOOK( cfapiObject_query_cost,"cfapi_object_query_cost", z );
139 GET_HOOK( cfapiObject_cast,"cfapi_object_cast", z );
140 GET_HOOK( cfapiObject_learn_spell,"cfapi_object_learn_spell", z );
141 GET_HOOK( cfapiObject_forget_spell,"cfapi_object_forget_spell", z );
142 GET_HOOK( cfapiObject_check_spell,"cfapi_object_check_spell", z );
143 GET_HOOK( cfapiObject_pay_amount,"cfapi_object_pay_amount", z );
144 GET_HOOK( cfapiObject_pay_item,"cfapi_object_pay_item", z );
145 GET_HOOK( cfapiObject_transfer, "cfapi_object_transfer", z );
146 GET_HOOK( cfapiObject_find_archetype_inside, "cfapi_object_find_archetype_inside", z );
147 GET_HOOK( cfapiObject_remove, "cfapi_object_remove", z );
148 GET_HOOK( cfapiObject_delete, "cfapi_object_delete", z );
149 GET_HOOK( cfapiObject_out_of_map, "cfapi_map_out_of_map", z );
150 GET_HOOK( cfapiObject_drop, "cfapi_object_drop", z );
151 GET_HOOK( cfapiObject_take, "cfapi_object_take", z );
152 GET_HOOK( cfapiObject_say, "cfapi_object_say", z );
153 GET_HOOK( cfapiObject_speak, "cfapi_object_speak", z );
154 /*GET_HOOK( cfapiCheck_inventory, "cfapi_check_inventory", z );*/
155 GET_HOOK( cfapiMap_create_path, "cfapi_map_create_path", z );
156 GET_HOOK( cfapiMap_get_property,"cfapi_map_get_property", z );
157 GET_HOOK( cfapiMap_set_property,"cfapi_map_set_property", z );
158 GET_HOOK( cfapiMap_get_map, "cfapi_map_get_map", z );
159 GET_HOOK( cfapiMap_message, "cfapi_map_message", z );
160 GET_HOOK( cfapiMap_get_object_at, "cfapi_map_get_object_at", z );
161 GET_HOOK( cfapiMap_present_arch_by_name, "cfapi_map_present_arch_by_name", z );
162 GET_HOOK( cfapiMap_get_flags, "cfapi_map_get_flags", z );
163 GET_HOOK( cfapiPlayer_find, "cfapi_player_find", z );
164 GET_HOOK( cfapiPlayer_message, "cfapi_player_message", z );
165 GET_HOOK( cfapiPlayer_send_inventory, "cfapi_player_send_inventory", z );
166 GET_HOOK( cfapiObject_teleport, "cfapi_object_teleport", z );
167 GET_HOOK( cfapiObject_pickup, "cfapi_object_pickup", z );
168 GET_HOOK( cfapiObject_get_key, "cfapi_object_get_key", z );
169 GET_HOOK( cfapiObject_set_key, "cfapi_object_set_key", z );
170 GET_HOOK( cfapiObject_move, "cfapi_object_move", z );
171 GET_HOOK( cfapiObject_apply_below, "cfapi_object_apply_below", z );
172 GET_HOOK( cfapiArchetype_get_first, "cfapi_archetype_get_first", z );
173 GET_HOOK( cfapiArchetype_get_property, "cfapi_archetype_get_property", z );
174 GET_HOOK( cfapiParty_get_property, "cfapi_party_get_property", z );
175 GET_HOOK( cfapiRegion_get_property, "cfapi_region_get_property", z );
176 return 1;
177 }
178
179 /* Should get replaced by tons of more explicit wrappers */
180 void* cf_map_get_property(maptile* map, int propcode)
181 {
182 int val;
183 return cfapiMap_get_property(&val, propcode, map);
184 }
185 /* Should get replaced by tons of more explicit wrappers */
186 void* cf_map_set_int_property(maptile* map, int propcode, int value)
187 {
188 int val;
189 return cfapiMap_set_property(&val, map, propcode,value);
190 }
191 /* Should get replaced by tons of more explicit wrappers */
192 void* cf_object_get_property(object* op, int propcode)
193 {
194 int val;
195 return cfapiObject_get_property(&val, op, propcode);
196 }
197 sint16 cf_object_get_resistance(object* op, int rtype)
198 {
199 int val;
200 return *(int*)cfapiObject_get_property(&val, op, CFAPI_OBJECT_PROP_RESIST, rtype);
201 }
202 /* Should get replaced by tons of more explicit wrappers */
203 void* cf_object_set_int_property(object* op, int propcode, int value)
204 {
205 int val;
206 return cfapiObject_set_property(&val, op, propcode,value);
207 }
208 /* Should get replaced by tons of more explicit wrappers */
209 void* cf_object_set_long_property(object* op, int propcode, long value)
210 {
211 int val;
212 return cfapiObject_set_property(&val, op, propcode,value);
213 }
214 /* Should get replaced by tons of more explicit wrappers */
215 void* cf_object_set_string_property(object* op, int propcode, char* value)
216 {
217 int val;
218 return cfapiObject_set_property(&val, op, propcode,value);
219 }
220 void cf_player_move(player* pl, int dir)
221 {
222 int val;
223 cfapiObject_move(&val,1,pl,dir);
224 }
225 void cf_object_move(object* op, int dir, object*originator)
226 {
227 int val;
228 cfapiObject_move(&val,0,op,dir,originator);
229 }
230 object* cf_player_send_inventory(object* op)
231 {
232 int val;
233 return (object*) cfapiPlayer_send_inventory(&val, op);
234 }
235 void cf_object_apply(object* op, object* author, int flags)
236 {
237 int val;
238 cfapiObject_apply(&val,op,author,flags);
239 }
240 void cf_object_apply_below(object* op)
241 {
242 int val;
243 cfapiObject_apply_below(&val,op);
244 }
245 void cf_object_remove(object* op)
246 {
247 int val;
248 cfapiObject_remove(&val, op);
249 }
250 void cf_object_free(object* op)
251 {
252 int val;
253 cfapiObject_delete(&val, op);
254 }
255 object* cf_object_present_archname_inside(object* op, char* whatstr)
256 {
257 int val;
258 return (object*) cfapiObject_find_archetype_inside(&val, op, 0, whatstr);
259 }
260 int cf_object_transfer(object* op,int x,int y,int r,object* orig)
261 {
262 int val;
263 /* return *(int*)cfapiObject_transfer(&val,op,1,x,y,op->map);*/
264 return *(int*)cfapiObject_transfer(&val,op,0,x,y,r,orig);
265 }
266 int cf_object_change_map(object* op, int x, int y, maptile* map)
267 {
268 int val;
269 return *(int*)cfapiObject_transfer(&val,op,1,x,y,map);
270 /*cfapiObject_transfer(&val,op,1,x,y,map);
271 return 0;*/
272 }
273 object* cf_map_get_object_at(maptile* m, int x, int y)
274 {
275 int val;
276 return (object*) cfapiMap_get_object_at(&val, m, x, y);
277 }
278 void cf_map_message(maptile* m, char* msg, int color)
279 {
280 int val;
281 cfapiMap_message(&val, m, msg, color);
282 }
283 object* cf_object_clone(object* op, int clonetype)
284 {
285 int val;
286 return (object*)cfapiObject_clone(&val, op, clonetype);
287 }
288 int cf_object_pay_item(object* op, object* buyer)
289 {
290 int val;
291 return *(int*)cfapiObject_pay_item(&val, op, buyer);
292 }
293 int cf_object_pay_amount(object* op, uint64 amount)
294 {
295 int val;
296 return *(int*)cfapiObject_pay_amount(&val, op, amount);
297 }
298 int cf_object_cast_spell(object* caster, object* ctoo, int dir, object* sp, char* flags)
299 {
300 int val;
301 return *(int*)cfapiObject_cast(&val, caster, ctoo, dir, sp, flags);
302 }
303 /* Should there be a difference nowadays between that and cast_spell ? */
304 int cf_object_cast_ability(object* caster, object* ctoo, int dir, object* sp, char* flags)
305 {
306 int val;
307 return *(int*)cfapiObject_cast(&val, caster, ctoo, dir, sp, flags);
308 }
309 void cf_object_learn_spell(object* op, object* sp)
310 {
311 int val;
312 cfapiObject_learn_spell(&val, op, sp, 0);
313 }
314 void cf_object_forget_spell(object* op, object* sp)
315 {
316 int val;
317 cfapiObject_forget_spell(&val, op, sp);
318 }
319 object* cf_object_check_for_spell(object* op, char* spellname)
320 {
321 int val;
322 return (object*) cfapiObject_check_spell(&val, op, spellname);
323 }
324 void cf_player_message(object* op, char* txt, int flags)
325 {
326 int val;
327 cfapiPlayer_message(&val, flags, 0, op, txt);
328 }
329
330 player* cf_player_find(char* txt)
331 {
332 int val;
333 return (player*) cfapiPlayer_find(&val, txt);
334 }
335 char* cf_player_get_ip(object* op)
336 {
337 int val;
338 return (char*) cfapiObject_get_property(&val, op, CFAPI_PLAYER_PROP_IP);
339 }
340 object* cf_player_get_marked_item(object* op)
341 {
342 int val;
343 return (object*) cfapiObject_get_property(&val, op, CFAPI_PLAYER_PROP_MARKED_ITEM);
344 }
345 void cf_player_set_marked_item(object* op, object* ob)
346 {
347 int val;
348 cfapiObject_set_property(&val, op, CFAPI_PLAYER_PROP_MARKED_ITEM, ob);
349 }
350 partylist* cf_player_get_party(object* op)
351 {
352 int val;
353 return (partylist*) cfapiObject_get_property(&val, op, CFAPI_PLAYER_PROP_PARTY);
354 }
355 void cf_player_set_party(object* op, partylist* party)
356 {
357 int val;
358 cfapiObject_set_property(&val, op, CFAPI_PLAYER_PROP_PARTY, party);
359 }
360
361 maptile* cf_map_get_map( char* name )
362 {
363 int val;
364 return (maptile*) cfapiMap_get_map( &val, 1, name, 0);
365 }
366 maptile* cf_map_get_first(void)
367 {
368 int val;
369 return (maptile*) cfapiMap_get_map( &val, 3);
370 }
371 int cf_object_query_money( object* op)
372 {
373 int val;
374 return *(int*)cfapiObject_query_money( &val, op);
375 }
376 int cf_object_query_cost( object* op, object* who, int flags)
377 {
378 int val;
379 return *(int*)cfapiObject_query_cost(&val,op,who,flags);
380 }
381 void cf_object_activate_rune( object* op , object* victim)
382 {
383 int val;
384 if ( op )
385 cfapiObject_activate_rune( &val, op, victim );
386 }
387 int cf_object_check_trigger( object* op, object* cause )
388 {
389 int val;
390 return *(int*)cfapiObject_check_trigger( &val, op, cause );
391 }
392 int cf_object_out_of_map( object* op, int x, int y)
393 {
394 abort ();
395 }
396 void cf_object_drop( object* op, object* author)
397 {
398 int val;
399 cfapiObject_drop( &val, op, author );
400 }
401 void cf_object_take( object* op, object* author)
402 {
403 int val;
404 cfapiObject_take( &val, op, author );
405 }
406 void cf_object_say( object* op, char* msg)
407 {
408 int val;
409 cfapiObject_say( &val, op, msg );
410 }
411 void cf_object_speak( object* op, char* msg)
412 {
413 int val;
414 cfapiObject_speak( &val, op, msg );
415 }
416 object* cf_object_insert_object(object* op, object* container)
417 {
418 int val;
419 return (object*) cfapiObject_insert(&val, op, 3, container);
420 }
421 char* cf_get_maps_directory(char* str)
422 {
423 int val;
424
425 /*printf("Calling with %s, type 0\n",str);
426 printf("Value of the pointer: %p\n", cfapiMap_create_path);*/
427 return (char*) cfapiMap_create_path(&val, 0, str);
428 }
429 object* cf_create_object()
430 {
431 int val;
432 return (object*) cfapiObject_create(&val, 0);
433 }
434 object* cf_create_object_by_name( const char* name )
435 {
436 int val;
437 return (object*) cfapiObject_create(&val, 1, name);
438 }
439 void cf_free_object( object* ob )
440 {
441 int val;
442 if ( ob )
443 cfapiObject_delete( &val, ob );
444 }
445
446 void cf_system_register_global_event( int event, const char* name, f_plug_api hook )
447 {
448 int val;
449 cfapiSystem_register_global_event( &val, event, name, hook );
450 }
451
452 void cf_fix_object( object* pl )
453 {
454 int val;
455 if ( pl )
456 cfapiObject_fix( &val, pl );
457 }
458
459 char* cf_query_name( object* ob )
460 {
461 int val;
462 return (char*) cfapiObject_get_property( &val, ob, CFAPI_OBJECT_PROP_NAME );
463 }
464
465 char* cf_query_name_pl( object* ob )
466 {
467 int val;
468 return (char*) cfapiObject_get_property( &val, ob, CFAPI_OBJECT_PROP_NAME_PLURAL );
469 }
470
471 char* cf_query_base_name( object* ob, int plural )
472 {
473 int val;
474 return (char*) cfapiObject_get_property( &val, ob, CFAPI_OBJECT_PROP_BASE_NAME, plural );
475 }
476
477 object* cf_insert_ob_in_ob( object* ob, object* where )
478 {
479 int val;
480 return (object*) cfapiObject_insert( &val, ob, 3, where );
481 }
482
483 const char* cf_object_get_msg( object* ob )
484 {
485 int val;
486 return (const char*) cfapiObject_get_property( &val, ob, CFAPI_OBJECT_PROP_MESSAGE );
487 }
488
489 void cf_object_set_weight( object* ob, int weight )
490 {
491 int val;
492 cfapiObject_set_property( &val, ob, CFAPI_OBJECT_PROP_WEIGHT, weight );
493 }
494
495 void cf_object_set_weight_limit( object* ob, int weight_limit )
496 {
497 int val;
498 cfapiObject_set_property( &val, ob, CFAPI_OBJECT_PROP_WEIGHT_LIMIT, weight_limit );
499 }
500
501 int cf_object_get_weight( object* ob )
502 {
503 int val;
504 return *( int* )cfapiObject_get_property( &val, ob, CFAPI_OBJECT_PROP_WEIGHT );
505 }
506
507 int cf_object_get_weight_limit( object* ob )
508 {
509 int val;
510 int *dummy;
511 dummy = (int*) cfapiObject_get_property( &val, ob, CFAPI_OBJECT_PROP_WEIGHT_LIMIT );
512 return *dummy;
513 }
514
515 /**
516 * @return -1=nrof is invalid, 0=nrof is ok#
517 */
518 int cf_object_set_nrof( object* ob, int nrof )
519 {
520 int val;
521
522 if (nrof < 0)
523 return -1;
524
525 cfapiObject_set_property( &val, ob, CFAPI_OBJECT_PROP_NROF, nrof );
526 return 0;
527 }
528
529 int cf_object_get_nrof( object* ob )
530 {
531 int val;
532 return *( int* )cfapiObject_get_property( &val, ob, CFAPI_OBJECT_PROP_NROF );
533 }
534
535 int cf_object_get_flag( object* ob, int flag )
536 {
537 int type;
538 int rv;
539 rv = *(int*)cfapiObject_get_property( &type, ob, CFAPI_OBJECT_PROP_FLAGS, flag );
540 if (rv != 0)
541 return 1;
542 else
543 return 0;
544 }
545
546 void cf_object_set_flag( object* ob, int flag, int value )
547 {
548 int type;
549 cfapiObject_set_property( &type, ob, CFAPI_OBJECT_PROP_FLAGS, flag, value ? 1 : 0 );
550 }
551
552 object* cf_object_insert_in_ob( object* ob, object* where )
553 {
554 int type;
555
556 if (!cf_object_get_flag(ob,FLAG_REMOVED))
557 {
558 cfapiObject_remove( &type, ob );
559 }
560
561 return (object*) cfapiObject_insert( &type, ob, 3, where );
562 }
563
564 object* cf_map_insert_object_there(maptile* where, object* op, object* originator, int flags)
565 {
566 int val;
567 return (object*)cfapiObject_insert(&val, op, 1, where, originator, flags);
568 }
569 object* cf_map_insert_object(maptile* where , object* op, int x, int y)
570 {
571 int type;
572 return (object*) cfapiObject_insert( &type, op, 0, where, NULL, 0 , x, y);
573 }
574 int cf_object_teleport( object* op, maptile* map, int x, int y )
575 {
576 int val;
577 return *( int* )cfapiObject_teleport( &val, op, map, x, y );
578 }
579 object* cf_map_present_arch_by_name(const char* str, maptile* map, int nx, int ny)
580 {
581 int val;
582 return (object*)cfapiMap_present_arch_by_name(&val, str,map,nx,ny);
583 }
584
585 static int cf_get_map_int_property(maptile* map, int property)
586 {
587 int type;
588 void* rv;
589 rv = cfapiMap_get_property(&type, property, map);
590 if ( !rv || type != CFAPI_INT )
591 return PLUGIN_ERROR_INT;
592 return *(int*)rv;
593 }
594
595 int cf_map_get_difficulty(maptile* map)
596 {
597 return cf_get_map_int_property(map,CFAPI_MAP_PROP_DIFFICULTY);
598 }
599
600 int cf_map_get_reset_time(maptile* map)
601 {
602 return cf_get_map_int_property(map,CFAPI_MAP_PROP_RESET_TIME);
603 }
604
605 int cf_map_get_reset_timeout(maptile* map)
606 {
607 return cf_get_map_int_property(map,CFAPI_MAP_PROP_RESET_TIMEOUT);
608 }
609
610 int cf_map_get_players(maptile* map)
611 {
612 return cf_get_map_int_property(map,CFAPI_MAP_PROP_PLAYERS);
613 }
614
615 int cf_map_get_darkness(maptile* map)
616 {
617 return cf_get_map_int_property(map,CFAPI_MAP_PROP_DARKNESS);
618 }
619
620 int cf_map_get_width(maptile* map)
621 {
622 return cf_get_map_int_property(map,CFAPI_MAP_PROP_WIDTH);
623 }
624
625 int cf_map_get_height(maptile* map)
626 {
627 return cf_get_map_int_property(map,CFAPI_MAP_PROP_HEIGHT);
628 }
629
630 int cf_map_get_enter_x(maptile* map)
631 {
632 return cf_get_map_int_property(map,CFAPI_MAP_PROP_ENTER_X);
633 }
634
635 int cf_map_get_enter_y(maptile* map)
636 {
637 return cf_get_map_int_property(map,CFAPI_MAP_PROP_ENTER_Y);
638 }
639
640 int cf_map_get_temperature(maptile* map)
641 {
642 return cf_get_map_int_property(map,CFAPI_MAP_PROP_TEMPERATURE);
643 }
644
645 int cf_map_get_pressure(maptile* map)
646 {
647 return cf_get_map_int_property(map,CFAPI_MAP_PROP_PRESSURE);
648 }
649
650 int cf_map_get_humidity(maptile* map)
651 {
652 return cf_get_map_int_property(map,CFAPI_MAP_PROP_HUMIDITY);
653 }
654
655 int cf_map_get_windspeed(maptile* map)
656 {
657 return cf_get_map_int_property(map,CFAPI_MAP_PROP_WINDSPEED);
658 }
659
660 int cf_map_get_winddir(maptile* map)
661 {
662 return cf_get_map_int_property(map,CFAPI_MAP_PROP_WINDDIR);
663 }
664
665 int cf_map_get_sky(maptile* map)
666 {
667 return cf_get_map_int_property(map,CFAPI_MAP_PROP_SKY);
668 }
669
670 int cf_map_get_wpartx(maptile* map)
671 {
672 return cf_get_map_int_property(map,CFAPI_MAP_PROP_WPARTX);
673 }
674
675 int cf_map_get_wparty(maptile* map)
676 {
677 return cf_get_map_int_property(map,CFAPI_MAP_PROP_WPARTY);
678 }
679
680 void cf_object_update( object* op, int flags)
681 {
682 int val;
683 cfapiObject_update(&val, op, flags);
684 }
685 void cf_object_pickup( object* op, object* what)
686 {
687 int val;
688 cfapiObject_pickup(&val, op, what);
689 }
690 char* cf_strdup(char* txt)
691 {
692 return (char*)strdup(txt);
693 }
694 int cf_map_get_flags( maptile* map, maptile** nmap, sint16 x, sint16 y, sint16* nx, sint16* ny )
695 {
696 int val;
697 return *( int* )cfapiMap_get_flags(&val, map, nmap, x, y, nx, ny);
698 }
699 int cf_find_animation(char* txt)
700 {
701 int val;
702 return *(int*)cfapiSystem_find_animation(&val, txt);
703 }
704 char* cf_object_get_key(object* op, char* keyname)
705 {
706 int val;
707 return (char*)cfapiObject_get_key(&val, op, keyname);
708 }
709 void cf_object_set_key(object* op, char* keyname, char* value)
710 {
711 int val;
712 cfapiObject_set_key(&val, op, keyname, value);
713 }
714
715 /* Archetype-related functions */
716 archetype* cf_archetype_get_first()
717 {
718 int val;
719 return (archetype*) cfapiArchetype_get_first(&val);
720 }
721
722 const char* cf_archetype_get_name(archetype* arch)
723 {
724 int val;
725 return (const char*) cfapiArchetype_get_property(&val, arch, CFAPI_ARCH_PROP_NAME);
726 }
727
728 archetype* cf_archetype_get_next(archetype* arch)
729 {
730 int val;
731 return (archetype*) cfapiArchetype_get_property(&val, arch, CFAPI_ARCH_PROP_NEXT);
732 }
733
734 archetype* cf_archetype_get_more(archetype* arch)
735 {
736 int val;
737 return (archetype*) cfapiArchetype_get_property(&val, arch, CFAPI_ARCH_PROP_MORE);
738 }
739
740 archetype* cf_archetype_get_head(archetype* arch)
741 {
742 int val;
743 return (archetype*) cfapiArchetype_get_property(&val, arch, CFAPI_ARCH_PROP_HEAD);
744 }
745
746 object* cf_archetype_get_clone(archetype* arch)
747 {
748 int val;
749 return (object*) cfapiArchetype_get_property(&val, arch, CFAPI_ARCH_PROP_CLONE);
750 }
751
752 /* Party-related functions */
753 partylist* cf_party_get_first(void)
754 {
755 int val;
756 return (partylist*) cfapiParty_get_property(&val, NULL, CFAPI_PARTY_PROP_NEXT);
757 }
758
759 const char* cf_party_get_name(partylist* party)
760 {
761 int val;
762 return (const char*) cfapiParty_get_property(&val, party, CFAPI_PARTY_PROP_NAME);
763 }
764
765 partylist* cf_party_get_next(partylist* party)
766 {
767 int val;
768 return (partylist*) cfapiParty_get_property(&val, party, CFAPI_PARTY_PROP_NEXT);
769 }
770
771 const char* cf_party_get_password(partylist* party)
772 {
773 int val;
774 return (const char*) cfapiParty_get_property(&val, party, CFAPI_PARTY_PROP_PASSWORD);
775 }
776
777 player* cf_party_get_first_player(partylist* party)
778 {
779 int val;
780 return (player*) cfapiParty_get_property(&val, party, CFAPI_PARTY_PROP_PLAYER, NULL);
781 }
782
783 player* cf_party_get_next_player(partylist* party, player* op)
784 {
785 int val;
786 return (player*) cfapiParty_get_property(&val, party, CFAPI_PARTY_PROP_PLAYER, op);
787 }
788
789 region* cf_region_get_first(void)
790 {
791 int val;
792 return (region*) cfapiRegion_get_property(&val, NULL, CFAPI_REGION_PROP_NEXT);
793 }
794
795 const char* cf_region_get_name(region* reg)
796 {
797 int val;
798 return (const char*) cfapiRegion_get_property(&val, reg, CFAPI_REGION_PROP_NAME);
799 }
800
801 region* cf_region_get_next(region* reg)
802 {
803 int val;
804 return (region*) cfapiRegion_get_property(&val, reg, CFAPI_REGION_PROP_NEXT);
805 }
806
807 region* cf_region_get_parent(region* reg)
808 {
809 int val;
810 return (region*) cfapiRegion_get_property(&val, reg, CFAPI_REGION_PROP_PARENT);
811 }
812
813 const char* cf_region_get_longname(region* reg)
814 {
815 int val;
816 return (const char*) cfapiRegion_get_property(&val, reg, CFAPI_REGION_PROP_LONGNAME);
817 }
818
819 const char* cf_region_get_message(region* reg)
820 {
821 int val;
822 return (const char*) cfapiRegion_get_property(&val, reg, CFAPI_REGION_PROP_MESSAGE);
823 }