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.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:
1693 PUSHs (sv_2mortal (newSVpv ("keepcost", 0))); PUSHs (sv_2mortal (newSViv (mai.keepcost))); 1734 PUSHs (sv_2mortal (newSVpv ("keepcost", 0))); PUSHs (sv_2mortal (newSViv (mai.keepcost)));
1694#endif 1735#endif
1695 EXTEND (SP, 2*2); 1736 EXTEND (SP, 2*2);
1696 PUSHs (sv_2mortal (newSVpv ("slice_alloc", 0))); PUSHs (sv_2mortal (newSVuv (slice_alloc))); 1737 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))); 1738 PUSHs (sv_2mortal (newSVpv ("shstr_alloc", 0))); PUSHs (sv_2mortal (newSVuv (shstr_alloc)));
1739 PUSHs (sv_2mortal (newSVpv ("objects" , 0))); PUSHs (sv_2mortal (newSVuv (objects.size () * sizeof (object))));
1698} 1740}
1699 1741
1700int find_animation (utf8_string text) 1742int find_animation (utf8_string text)
1701 PROTOTYPE: $ 1743 PROTOTYPE: $
1702 1744
1786 PUSHs (sv_2mortal (to_sv (archetype::find (coins [i])))); 1828 PUSHs (sv_2mortal (to_sv (archetype::find (coins [i]))));
1787 1829
1788bool 1830bool
1789load_resource_file_ (octet_string filename) 1831load_resource_file_ (octet_string filename)
1790 1832
1833void
1834fix_weight ()
1835
1791MODULE = cf PACKAGE = cf::attachable 1836MODULE = cf PACKAGE = cf::attachable
1792 1837
1793int 1838int
1794valid (SV *obj) 1839valid (SV *obj)
1795 CODE: 1840 CODE:
1858object *actives (U32 index) 1903object *actives (U32 index)
1859 CODE: 1904 CODE:
1860 RETVAL = index < actives.size () ? actives [index] : 0; 1905 RETVAL = index < actives.size () ? actives [index] : 0;
1861 OUTPUT: RETVAL 1906 OUTPUT: RETVAL
1862 1907
1908int mortals_size ()
1909 CODE:
1910 RETVAL = attachable::mortals.size ();
1911 OUTPUT: RETVAL
1912
1863const char *slot_use_name (U32 slot) 1913const char *slot_use_name (U32 slot)
1864 ALIAS: 1914 ALIAS:
1865 slot_nonuse_name = 1 1915 slot_nonuse_name = 1
1866 CODE: 1916 CODE:
1867{ 1917{
1945void apply_below (object *op) 1995void apply_below (object *op)
1946 CODE: 1996 CODE:
1947 player_apply_below (op); 1997 player_apply_below (op);
1948 1998
1949int cast_heal (object *op, object *caster, object *spell, int dir = 0) 1999int 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 2000
1963int pay_item (object *op, object *buyer) 2001int pay_item (object *op, object *buyer)
1964 CODE: 2002 CODE:
1965 RETVAL = pay_for_item (op, buyer); 2003 RETVAL = pay_for_item (op, buyer);
1966 OUTPUT: RETVAL 2004 OUTPUT: RETVAL
2044 CODE: 2082 CODE:
2045{ 2083{
2046 RETVAL = insert_ob_in_map_at (ob, where, orig, flag, x, y); 2084 RETVAL = insert_ob_in_map_at (ob, where, orig, flag, x, y);
2047} 2085}
2048 2086
2049const_utf8_string get_ob_key_value (object *op, utf8_string key) 2087shstr
2088object::kv_get (shstr key)
2050 2089
2051bool set_ob_key_value (object *op, utf8_string key, utf8_string value = 0, int add_key = 1) 2090void
2091object::kv_del (shstr key)
2092
2093void
2094object::kv_set (shstr key, shstr value)
2052 2095
2053object *get_nearest_player (object *ob) 2096object *get_nearest_player (object *ob)
2054 ALIAS: nearest_player = 0 2097 ALIAS: nearest_player = 0
2055 PREINIT: 2098 PREINIT:
2056 extern object *get_nearest_player (object *); 2099 extern object *get_nearest_player (object *);
2058void rangevector (object *ob, object *other, int flags = 0) 2101void rangevector (object *ob, object *other, int flags = 0)
2059 PROTOTYPE: $$;$ 2102 PROTOTYPE: $$;$
2060 PPCODE: 2103 PPCODE:
2061{ 2104{
2062 rv_vector rv; 2105 rv_vector rv;
2106
2107 PUTBACK;
2063 get_rangevector (ob, other, &rv, flags); 2108 get_rangevector (ob, other, &rv, flags);
2109 SPAGAIN;
2110
2064 EXTEND (SP, 5); 2111 EXTEND (SP, 5);
2065 PUSHs (newSVuv (rv.distance)); 2112 PUSHs (newSVuv (rv.distance));
2066 PUSHs (newSViv (rv.distance_x)); 2113 PUSHs (newSViv (rv.distance_x));
2067 PUSHs (newSViv (rv.distance_y)); 2114 PUSHs (newSViv (rv.distance_y));
2068 PUSHs (newSViv (rv.direction)); 2115 PUSHs (newSViv (rv.direction));
2375get_map_flags (maptile *map, int x, int y) 2422get_map_flags (maptile *map, int x, int y)
2376 PPCODE: 2423 PPCODE:
2377{ 2424{
2378 maptile *nmap = 0; 2425 maptile *nmap = 0;
2379 I16 nx = 0, ny = 0; 2426 I16 nx = 0, ny = 0;
2427
2428 PUTBACK;
2380 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;
2381 2431
2382 EXTEND (SP, 4); 2432 EXTEND (SP, 4);
2383 PUSHs (sv_2mortal (newSViv (flags))); 2433 PUSHs (sv_2mortal (newSViv (flags)));
2384 2434
2385 if (GIMME_V == G_ARRAY) 2435 if (GIMME_V == G_ARRAY)
2393void 2443void
2394at (maptile *map, unsigned int x, unsigned int y) 2444at (maptile *map, unsigned int x, unsigned int y)
2395 PROTOTYPE: $$$ 2445 PROTOTYPE: $$$
2396 PPCODE: 2446 PPCODE:
2397{ 2447{
2398 object *o;
2399 maptile *nmap = 0; 2448 maptile *nmap = 0;
2400 I16 nx, ny; 2449 I16 nx, ny;
2401 2450
2451 PUTBACK;
2402 get_map_flags (map, &nmap, x, y, &nx, &ny); 2452 get_map_flags (map, &nmap, x, y, &nx, &ny);
2453 SPAGAIN;
2403 2454
2404 if (nmap) 2455 if (nmap)
2405 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)
2406 XPUSHs (sv_2mortal (to_sv (o))); 2457 XPUSHs (sv_2mortal (to_sv (o)));
2407} 2458}
2408 2459
2409SV * 2460SV *
2410bot_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