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

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.285 by root, Sun May 4 08:25:33 2008 UTC vs.
Revision 1.292 by root, Tue Jul 29 02:00:55 2008 UTC

21 * The authors can be reached via e-mail to <support@deliantra.net> 21 * The authors can be reached via e-mail to <support@deliantra.net>
22 */ 22 */
23 23
24#include "autoconf.h" 24#include "autoconf.h"
25 25
26#define PLUGIN_NAME "perl"
27#define PLUGIN_VERSION "cfperl 0.5"
28
29#if HAVE_EXECINFO_H 26#if HAVE_EXECINFO_H
30# include <execinfo.h> 27# include <execinfo.h>
31#endif 28#endif
32 29
33#include <cstdarg> 30#include <cstdarg>
31#include <typeinfo>
34 32
35#include "global.h" 33#include "global.h"
36#include "loader.h" 34#include "loader.h"
37#include "../random_maps/random_map.h" 35#include "../random_maps/random_map.h"
38#include "evthread.h" 36#include "evthread.h"
944 CALL_CALL ("ext::books::make_book", G_VOID); 942 CALL_CALL ("ext::books::make_book", G_VOID);
945 CALL_END; 943 CALL_END;
946} 944}
947 945
948void 946void
947cfperl_expand_cfpod (player *pl, std::string &msg)
948{
949 CALL_BEGIN (2);
950 CALL_ARG (pl);
951 CALL_ARG_SV (newSVpvn_utf8 (msg.data (), msg.size ()));
952 CALL_CALL ("cf::player::expand_cfpod", G_SCALAR);
953
954 if (count)
955 {
956 STRLEN len;
957 char *data = SvPVutf8 (TOPs, len);
958 msg.assign (data, len);
959 }
960
961 CALL_END;
962}
963
964void
949cfperl_send_msg (client *ns, int color, const char *type, const char *msg) 965cfperl_send_msg (client *ns, int color, const char *type, const char *msg)
950{ 966{
951 CALL_BEGIN (4); 967 CALL_BEGIN (4);
952 CALL_ARG (ns); 968 CALL_ARG (ns);
953 CALL_ARG (type); 969 CALL_ARG (type);
977{ 993{
978 CALL_BEGIN (1); 994 CALL_BEGIN (1);
979 CALL_ARG (name); 995 CALL_ARG (name);
980 CALL_CALL ("cf::player::find", G_SCALAR); 996 CALL_CALL ("cf::player::find", G_SCALAR);
981 997
982 player *retval; 998 player *retval = 0;
983
984 if (count)
985 sv_to (POPs, retval); 999 if (count) sv_to (POPs, retval);
986 else 1000
987 retval = 0; 1001 CALL_END;
1002
1003 return retval;
1004}
1005
1006maptile *
1007find_style (const char *dirname, const char *stylename, int difficulty)
1008{
1009 CALL_BEGIN (3);
1010 CALL_ARG (dirname);
1011 CALL_ARG (stylename);
1012 CALL_ARG (difficulty);
1013 CALL_CALL ("ext::map_random::find_style", G_SCALAR);
1014
1015 maptile *retval = 0;
1016 if (count) sv_to (POPs, retval);
988 1017
989 CALL_END; 1018 CALL_END;
990 1019
991 return retval; 1020 return retval;
992} 1021}
997 CALL_BEGIN (2); 1026 CALL_BEGIN (2);
998 CALL_ARG (path); 1027 CALL_ARG (path);
999 CALL_ARG (origin); 1028 CALL_ARG (origin);
1000 CALL_CALL ("cf::map::find_sync", G_SCALAR); 1029 CALL_CALL ("cf::map::find_sync", G_SCALAR);
1001 1030
1002 maptile *retval; 1031 maptile *retval = 0;
1003
1004 if (count)
1005 sv_to (POPs, retval); 1032 if (count) sv_to (POPs, retval);
1006 else
1007 retval = 0;
1008 1033
1009 CALL_END; 1034 CALL_END;
1010 1035
1011 return retval; 1036 return retval;
1012} 1037}
1018 CALL_ARG (path); 1043 CALL_ARG (path);
1019 CALL_ARG (origin); 1044 CALL_ARG (origin);
1020 CALL_ARG (load); 1045 CALL_ARG (load);
1021 CALL_CALL ("cf::map::find_async", G_SCALAR); 1046 CALL_CALL ("cf::map::find_async", G_SCALAR);
1022 1047
1023 maptile *retval; 1048 maptile *retval = 0;
1024
1025 if (count)
1026 sv_to (POPs, retval); 1049 if (count) sv_to (POPs, retval);
1027 else
1028 retval = 0;
1029 1050
1030 CALL_END; 1051 CALL_END;
1031 1052
1032 return retval; 1053 return retval;
1033} 1054}
1058 1079
1059 CALL_BEGIN (2); 1080 CALL_BEGIN (2);
1060 CALL_ARG (this); 1081 CALL_ARG (this);
1061 CALL_ARG (exit); 1082 CALL_ARG (exit);
1062 CALL_CALL ("cf::object::player::enter_exit", G_VOID); 1083 CALL_CALL ("cf::object::player::enter_exit", G_VOID);
1084 CALL_END;
1085}
1086
1087void
1088object::player_goto (const char *path, int x, int y)
1089{
1090 if (type != PLAYER)
1091 return;
1092
1093 CALL_BEGIN (4);
1094 CALL_ARG (this);
1095 CALL_ARG (path);
1096 CALL_ARG (x);
1097 CALL_ARG (y);
1098 CALL_CALL ("cf::object::player::goto", G_VOID);
1063 CALL_END; 1099 CALL_END;
1064} 1100}
1065 1101
1066const char * 1102const char *
1067object::ref () const 1103object::ref () const
1573NV floor (NV x) 1609NV floor (NV x)
1574 1610
1575NV ceil (NV x) 1611NV ceil (NV x)
1576 1612
1577NV rndm (...) 1613NV rndm (...)
1614 ALIAS:
1615 rmg_rndm = 1
1578 CODE: 1616 CODE:
1617{
1618 rand_gen &gen = ix ? rmg_rndm : rndm;
1579 switch (items) 1619 switch (items)
1580 { 1620 {
1581 case 0: RETVAL = rndm (); break; 1621 case 0: RETVAL = gen (); break;
1582 case 1: RETVAL = rndm (SvUV (ST (0))); break; 1622 case 1: RETVAL = gen (SvUV (ST (0))); break;
1583 case 2: RETVAL = rndm (SvIV (ST (0)), SvIV (ST (1))); break; 1623 case 2: RETVAL = gen (SvIV (ST (0)), SvIV (ST (1))); break;
1584 default: croak ("cf::rndm requires none, one or two parameters."); break; 1624 default: croak ("cf::rndm requires none, one or two parameters."); break;
1585 } 1625 }
1626}
1586 OUTPUT: 1627 OUTPUT:
1587 RETVAL 1628 RETVAL
1588 1629
1589NV clamp (NV value, NV min_value, NV max_value) 1630NV clamp (NV value, NV min_value, NV max_value)
1590 CODE: 1631 CODE:
1787 PUSHs (sv_2mortal (to_sv (archetype::find (coins [i])))); 1828 PUSHs (sv_2mortal (to_sv (archetype::find (coins [i]))));
1788 1829
1789bool 1830bool
1790load_resource_file_ (octet_string filename) 1831load_resource_file_ (octet_string filename)
1791 1832
1833void
1834fix_weight ()
1835
1792MODULE = cf PACKAGE = cf::attachable 1836MODULE = cf PACKAGE = cf::attachable
1793 1837
1794int 1838int
1795valid (SV *obj) 1839valid (SV *obj)
1796 CODE: 1840 CODE:
2057void rangevector (object *ob, object *other, int flags = 0) 2101void rangevector (object *ob, object *other, int flags = 0)
2058 PROTOTYPE: $$;$ 2102 PROTOTYPE: $$;$
2059 PPCODE: 2103 PPCODE:
2060{ 2104{
2061 rv_vector rv; 2105 rv_vector rv;
2106
2107 PUTBACK;
2062 get_rangevector (ob, other, &rv, flags); 2108 get_rangevector (ob, other, &rv, flags);
2109 SPAGAIN;
2110
2063 EXTEND (SP, 5); 2111 EXTEND (SP, 5);
2064 PUSHs (newSVuv (rv.distance)); 2112 PUSHs (newSVuv (rv.distance));
2065 PUSHs (newSViv (rv.distance_x)); 2113 PUSHs (newSViv (rv.distance_x));
2066 PUSHs (newSViv (rv.distance_y)); 2114 PUSHs (newSViv (rv.distance_y));
2067 PUSHs (newSViv (rv.direction)); 2115 PUSHs (newSViv (rv.direction));
2374get_map_flags (maptile *map, int x, int y) 2422get_map_flags (maptile *map, int x, int y)
2375 PPCODE: 2423 PPCODE:
2376{ 2424{
2377 maptile *nmap = 0; 2425 maptile *nmap = 0;
2378 I16 nx = 0, ny = 0; 2426 I16 nx = 0, ny = 0;
2427
2428 PUTBACK;
2379 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2429 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2430 SPAGAIN;
2380 2431
2381 EXTEND (SP, 4); 2432 EXTEND (SP, 4);
2382 PUSHs (sv_2mortal (newSViv (flags))); 2433 PUSHs (sv_2mortal (newSViv (flags)));
2383 2434
2384 if (GIMME_V == G_ARRAY) 2435 if (GIMME_V == G_ARRAY)
2392void 2443void
2393at (maptile *map, unsigned int x, unsigned int y) 2444at (maptile *map, unsigned int x, unsigned int y)
2394 PROTOTYPE: $$$ 2445 PROTOTYPE: $$$
2395 PPCODE: 2446 PPCODE:
2396{ 2447{
2397 object *o;
2398 maptile *nmap = 0; 2448 maptile *nmap = 0;
2399 I16 nx, ny; 2449 I16 nx, ny;
2400 2450
2451 PUTBACK;
2401 get_map_flags (map, &nmap, x, y, &nx, &ny); 2452 get_map_flags (map, &nmap, x, y, &nx, &ny);
2453 SPAGAIN;
2402 2454
2403 if (nmap) 2455 if (nmap)
2404 for (o = GET_MAP_OB (nmap, nx, ny); o; o = o->above) 2456 for (object *o = nmap->at (nx, ny).bot; o; o = o->above)
2405 XPUSHs (sv_2mortal (to_sv (o))); 2457 XPUSHs (sv_2mortal (to_sv (o)));
2406} 2458}
2407 2459
2408SV * 2460SV *
2409bot_at (maptile *obj, unsigned int x, unsigned int y) 2461bot_at (maptile *obj, unsigned int x, unsigned int y)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines