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.281 by root, Tue Apr 22 07:01:47 2008 UTC vs.
Revision 1.291 by root, Sun Jun 15 20:32:51 2008 UTC

20 * 20 *
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
26#define PLUGIN_NAME "perl"
27#define PLUGIN_VERSION "cfperl 0.5"
28 25
29#if HAVE_EXECINFO_H 26#if HAVE_EXECINFO_H
30# include <execinfo.h> 27# include <execinfo.h>
31#endif 28#endif
32 29
944 CALL_CALL ("ext::books::make_book", G_VOID); 941 CALL_CALL ("ext::books::make_book", G_VOID);
945 CALL_END; 942 CALL_END;
946} 943}
947 944
948void 945void
946cfperl_expand_cfpod (player *pl, std::string &msg)
947{
948 CALL_BEGIN (2);
949 CALL_ARG (pl);
950 CALL_ARG_SV (newSVpvn_utf8 (msg.data (), msg.size ()));
951 CALL_CALL ("cf::player::expand_cfpod", G_SCALAR);
952
953 if (count)
954 {
955 STRLEN len;
956 char *data = SvPVutf8 (TOPs, len);
957 msg.assign (data, len);
958 }
959
960 CALL_END;
961}
962
963void
949cfperl_send_msg (client *ns, int color, const char *type, const char *msg) 964cfperl_send_msg (client *ns, int color, const char *type, const char *msg)
950{ 965{
951 CALL_BEGIN (4); 966 CALL_BEGIN (4);
952 CALL_ARG (ns); 967 CALL_ARG (ns);
953 CALL_ARG (type); 968 CALL_ARG (type);
977{ 992{
978 CALL_BEGIN (1); 993 CALL_BEGIN (1);
979 CALL_ARG (name); 994 CALL_ARG (name);
980 CALL_CALL ("cf::player::find", G_SCALAR); 995 CALL_CALL ("cf::player::find", G_SCALAR);
981 996
982 player *retval; 997 player *retval = 0;
983
984 if (count)
985 sv_to (POPs, retval); 998 if (count) sv_to (POPs, retval);
986 else 999
987 retval = 0; 1000 CALL_END;
1001
1002 return retval;
1003}
1004
1005maptile *
1006find_style (const char *dirname, const char *stylename, int difficulty)
1007{
1008 CALL_BEGIN (3);
1009 CALL_ARG (dirname);
1010 CALL_ARG (stylename);
1011 CALL_ARG (difficulty);
1012 CALL_CALL ("ext::map_random::find_style", G_SCALAR);
1013
1014 maptile *retval = 0;
1015 if (count) sv_to (POPs, retval);
988 1016
989 CALL_END; 1017 CALL_END;
990 1018
991 return retval; 1019 return retval;
992} 1020}
997 CALL_BEGIN (2); 1025 CALL_BEGIN (2);
998 CALL_ARG (path); 1026 CALL_ARG (path);
999 CALL_ARG (origin); 1027 CALL_ARG (origin);
1000 CALL_CALL ("cf::map::find_sync", G_SCALAR); 1028 CALL_CALL ("cf::map::find_sync", G_SCALAR);
1001 1029
1002 maptile *retval; 1030 maptile *retval = 0;
1003
1004 if (count)
1005 sv_to (POPs, retval); 1031 if (count) sv_to (POPs, retval);
1006 else
1007 retval = 0;
1008 1032
1009 CALL_END; 1033 CALL_END;
1010 1034
1011 return retval; 1035 return retval;
1012} 1036}
1018 CALL_ARG (path); 1042 CALL_ARG (path);
1019 CALL_ARG (origin); 1043 CALL_ARG (origin);
1020 CALL_ARG (load); 1044 CALL_ARG (load);
1021 CALL_CALL ("cf::map::find_async", G_SCALAR); 1045 CALL_CALL ("cf::map::find_async", G_SCALAR);
1022 1046
1023 maptile *retval; 1047 maptile *retval = 0;
1024
1025 if (count)
1026 sv_to (POPs, retval); 1048 if (count) sv_to (POPs, retval);
1027 else
1028 retval = 0;
1029 1049
1030 CALL_END; 1050 CALL_END;
1031 1051
1032 return retval; 1052 return retval;
1033} 1053}
1058 1078
1059 CALL_BEGIN (2); 1079 CALL_BEGIN (2);
1060 CALL_ARG (this); 1080 CALL_ARG (this);
1061 CALL_ARG (exit); 1081 CALL_ARG (exit);
1062 CALL_CALL ("cf::object::player::enter_exit", G_VOID); 1082 CALL_CALL ("cf::object::player::enter_exit", G_VOID);
1083 CALL_END;
1084}
1085
1086void
1087object::player_goto (const char *path, int x, int y)
1088{
1089 if (type != PLAYER)
1090 return;
1091
1092 CALL_BEGIN (4);
1093 CALL_ARG (this);
1094 CALL_ARG (path);
1095 CALL_ARG (x);
1096 CALL_ARG (y);
1097 CALL_CALL ("cf::object::player::goto", G_VOID);
1063 CALL_END; 1098 CALL_END;
1064} 1099}
1065 1100
1066const char * 1101const char *
1067object::ref () const 1102object::ref () const
1573NV floor (NV x) 1608NV floor (NV x)
1574 1609
1575NV ceil (NV x) 1610NV ceil (NV x)
1576 1611
1577NV rndm (...) 1612NV rndm (...)
1613 ALIAS:
1614 rmg_rndm = 1
1578 CODE: 1615 CODE:
1616{
1617 rand_gen &gen = ix ? rmg_rndm : rndm;
1579 switch (items) 1618 switch (items)
1580 { 1619 {
1581 case 0: RETVAL = rndm (); break; 1620 case 0: RETVAL = gen (); break;
1582 case 1: RETVAL = rndm (SvUV (ST (0))); break; 1621 case 1: RETVAL = gen (SvUV (ST (0))); break;
1583 case 2: RETVAL = rndm (SvIV (ST (0)), SvIV (ST (1))); break; 1622 case 2: RETVAL = gen (SvIV (ST (0)), SvIV (ST (1))); break;
1584 default: croak ("cf::rndm requires none, one or two parameters."); break; 1623 default: croak ("cf::rndm requires none, one or two parameters."); break;
1585 } 1624 }
1625}
1586 OUTPUT: 1626 OUTPUT:
1587 RETVAL 1627 RETVAL
1588 1628
1589NV clamp (NV value, NV min_value, NV max_value) 1629NV clamp (NV value, NV min_value, NV max_value)
1590 CODE: 1630 CODE:
1693 PUSHs (sv_2mortal (newSVpv ("keepcost", 0))); PUSHs (sv_2mortal (newSViv (mai.keepcost))); 1733 PUSHs (sv_2mortal (newSVpv ("keepcost", 0))); PUSHs (sv_2mortal (newSViv (mai.keepcost)));
1694#endif 1734#endif
1695 EXTEND (SP, 2*2); 1735 EXTEND (SP, 2*2);
1696 PUSHs (sv_2mortal (newSVpv ("slice_alloc", 0))); PUSHs (sv_2mortal (newSVuv (slice_alloc))); 1736 PUSHs (sv_2mortal (newSVpv ("slice_alloc", 0))); PUSHs (sv_2mortal (newSVuv (slice_alloc)));
1697 PUSHs (sv_2mortal (newSVpv ("shstr_alloc", 0))); PUSHs (sv_2mortal (newSVuv (shstr_alloc))); 1737 PUSHs (sv_2mortal (newSVpv ("shstr_alloc", 0))); PUSHs (sv_2mortal (newSVuv (shstr_alloc)));
1738 PUSHs (sv_2mortal (newSVpv ("objects" , 0))); PUSHs (sv_2mortal (newSVuv (objects.size () * sizeof (object))));
1698} 1739}
1699 1740
1700int find_animation (utf8_string text) 1741int find_animation (utf8_string text)
1701 PROTOTYPE: $ 1742 PROTOTYPE: $
1702 1743
1786 PUSHs (sv_2mortal (to_sv (archetype::find (coins [i])))); 1827 PUSHs (sv_2mortal (to_sv (archetype::find (coins [i]))));
1787 1828
1788bool 1829bool
1789load_resource_file_ (octet_string filename) 1830load_resource_file_ (octet_string filename)
1790 1831
1832void
1833fix_weight ()
1834
1791MODULE = cf PACKAGE = cf::attachable 1835MODULE = cf PACKAGE = cf::attachable
1792 1836
1793int 1837int
1794valid (SV *obj) 1838valid (SV *obj)
1795 CODE: 1839 CODE:
1858object *actives (U32 index) 1902object *actives (U32 index)
1859 CODE: 1903 CODE:
1860 RETVAL = index < actives.size () ? actives [index] : 0; 1904 RETVAL = index < actives.size () ? actives [index] : 0;
1861 OUTPUT: RETVAL 1905 OUTPUT: RETVAL
1862 1906
1907int mortals_size ()
1908 CODE:
1909 RETVAL = attachable::mortals.size ();
1910 OUTPUT: RETVAL
1911
1863const char *slot_use_name (U32 slot) 1912const char *slot_use_name (U32 slot)
1864 ALIAS: 1913 ALIAS:
1865 slot_nonuse_name = 1 1914 slot_nonuse_name = 1
1866 CODE: 1915 CODE:
1867{ 1916{
1945void apply_below (object *op) 1994void apply_below (object *op)
1946 CODE: 1995 CODE:
1947 player_apply_below (op); 1996 player_apply_below (op);
1948 1997
1949int cast_heal (object *op, object *caster, object *spell, int dir = 0) 1998int cast_heal (object *op, object *caster, object *spell, int dir = 0)
1950
1951#//TODO
1952object *clone_ (object *op, int recursive = 0)
1953 CODE:
1954 if (recursive)
1955 RETVAL = object_create_clone (op);
1956 else
1957 {
1958 RETVAL = object::create ();
1959 op->copy_to (RETVAL);
1960 }
1961 OUTPUT: RETVAL
1962 1999
1963int pay_item (object *op, object *buyer) 2000int pay_item (object *op, object *buyer)
1964 CODE: 2001 CODE:
1965 RETVAL = pay_for_item (op, buyer); 2002 RETVAL = pay_for_item (op, buyer);
1966 OUTPUT: RETVAL 2003 OUTPUT: RETVAL
2044 CODE: 2081 CODE:
2045{ 2082{
2046 RETVAL = insert_ob_in_map_at (ob, where, orig, flag, x, y); 2083 RETVAL = insert_ob_in_map_at (ob, where, orig, flag, x, y);
2047} 2084}
2048 2085
2049const_utf8_string get_ob_key_value (object *op, utf8_string key) 2086shstr
2087object::kv_get (shstr key)
2050 2088
2051bool set_ob_key_value (object *op, utf8_string key, utf8_string value = 0, int add_key = 1) 2089void
2090object::kv_del (shstr key)
2091
2092void
2093object::kv_set (shstr key, shstr value)
2052 2094
2053object *get_nearest_player (object *ob) 2095object *get_nearest_player (object *ob)
2054 ALIAS: nearest_player = 0 2096 ALIAS: nearest_player = 0
2055 PREINIT: 2097 PREINIT:
2056 extern object *get_nearest_player (object *); 2098 extern object *get_nearest_player (object *);
2058void rangevector (object *ob, object *other, int flags = 0) 2100void rangevector (object *ob, object *other, int flags = 0)
2059 PROTOTYPE: $$;$ 2101 PROTOTYPE: $$;$
2060 PPCODE: 2102 PPCODE:
2061{ 2103{
2062 rv_vector rv; 2104 rv_vector rv;
2105
2106 PUTBACK;
2063 get_rangevector (ob, other, &rv, flags); 2107 get_rangevector (ob, other, &rv, flags);
2108 SPAGAIN;
2109
2064 EXTEND (SP, 5); 2110 EXTEND (SP, 5);
2065 PUSHs (newSVuv (rv.distance)); 2111 PUSHs (newSVuv (rv.distance));
2066 PUSHs (newSViv (rv.distance_x)); 2112 PUSHs (newSViv (rv.distance_x));
2067 PUSHs (newSViv (rv.distance_y)); 2113 PUSHs (newSViv (rv.distance_y));
2068 PUSHs (newSViv (rv.direction)); 2114 PUSHs (newSViv (rv.direction));
2375get_map_flags (maptile *map, int x, int y) 2421get_map_flags (maptile *map, int x, int y)
2376 PPCODE: 2422 PPCODE:
2377{ 2423{
2378 maptile *nmap = 0; 2424 maptile *nmap = 0;
2379 I16 nx = 0, ny = 0; 2425 I16 nx = 0, ny = 0;
2426
2427 PUTBACK;
2380 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2428 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2429 SPAGAIN;
2381 2430
2382 EXTEND (SP, 4); 2431 EXTEND (SP, 4);
2383 PUSHs (sv_2mortal (newSViv (flags))); 2432 PUSHs (sv_2mortal (newSViv (flags)));
2384 2433
2385 if (GIMME_V == G_ARRAY) 2434 if (GIMME_V == G_ARRAY)
2393void 2442void
2394at (maptile *map, unsigned int x, unsigned int y) 2443at (maptile *map, unsigned int x, unsigned int y)
2395 PROTOTYPE: $$$ 2444 PROTOTYPE: $$$
2396 PPCODE: 2445 PPCODE:
2397{ 2446{
2398 object *o;
2399 maptile *nmap = 0; 2447 maptile *nmap = 0;
2400 I16 nx, ny; 2448 I16 nx, ny;
2401 2449
2450 PUTBACK;
2402 get_map_flags (map, &nmap, x, y, &nx, &ny); 2451 get_map_flags (map, &nmap, x, y, &nx, &ny);
2452 SPAGAIN;
2403 2453
2404 if (nmap) 2454 if (nmap)
2405 for (o = GET_MAP_OB (nmap, nx, ny); o; o = o->above) 2455 for (object *o = nmap->at (nx, ny).bot; o; o = o->above)
2406 XPUSHs (sv_2mortal (to_sv (o))); 2456 XPUSHs (sv_2mortal (to_sv (o)));
2407} 2457}
2408 2458
2409SV * 2459SV *
2410bot_at (maptile *obj, unsigned int x, unsigned int y) 2460bot_at (maptile *obj, unsigned int x, unsigned int y)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines