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

Comparing deliantra/server/server/plugins.C (file contents):
Revision 1.20 by root, Tue Dec 12 20:53:03 2006 UTC vs.
Revision 1.29 by root, Wed Dec 20 09:14:22 2006 UTC

43static const hook_entry plug_hooks[NR_OF_HOOKS] = { 43static const hook_entry plug_hooks[NR_OF_HOOKS] = {
44 {cfapi_system_register_global_event, 1, "cfapi_system_register_global_event"}, 44 {cfapi_system_register_global_event, 1, "cfapi_system_register_global_event"},
45 {cfapi_system_unregister_global_event, 3, "cfapi_system_unregister_global_event"}, 45 {cfapi_system_unregister_global_event, 3, "cfapi_system_unregister_global_event"},
46 {cfapi_system_check_path, 4, "cfapi_system_check_path"}, 46 {cfapi_system_check_path, 4, "cfapi_system_check_path"},
47 {NULL, 5, "cfapi_system_re_cmp"}, 47 {NULL, 5, "cfapi_system_re_cmp"},
48 {cfapi_system_strdup_local, 6, "cfapi_system_strdup_local"}, 48 {cfapi_system_strdup, 6, "cfapi_system_strdup"},
49 {cfapi_system_directory, 7, "cfapi_system_directory"}, 49 {cfapi_system_directory, 7, "cfapi_system_directory"},
50 {cfapi_system_find_animation, 8, "cfapi_system_find_animation"}, 50 {cfapi_system_find_animation, 8, "cfapi_system_find_animation"},
51 {cfapi_object_clean_object, 9, "cfapi_object_clean_object"}, 51 {cfapi_object_clean_object, 9, "cfapi_object_clean_object"},
52 {cfapi_object_on_same_map, 10, "cfapi_object_on_same_map"}, 52 {cfapi_object_on_same_map, 10, "cfapi_object_on_same_map"},
53 {cfapi_object_get_key, 11, "cfapi_object_get_key"}, 53 {cfapi_object_get_key, 11, "cfapi_object_get_key"},
132send_changed_object (object *op) 132send_changed_object (object *op)
133{ 133{
134 object *tmp; 134 object *tmp;
135 player *pl; 135 player *pl;
136 136
137 if (op->env != NULL) 137 if (op->env)
138 { 138 {
139 tmp = is_player_inv (op->env); 139 tmp = op->in_player ();
140
140 if (!tmp) 141 if (!tmp)
141 { 142 {
142 for (pl = first_player; pl; pl = pl->next) 143 for (pl = first_player; pl; pl = pl->next)
143 if (pl->ob->container == op->env) 144 if (pl->ob->container == op->env)
144 break; 145 break;
146
145 if (pl) 147 if (pl)
146 tmp = pl->ob; 148 tmp = pl->ob;
147 else 149 else
148 tmp = NULL; 150 tmp = NULL;
149 } 151 }
152
150 if (tmp) 153 if (tmp)
151 esrv_send_item (tmp, op); 154 esrv_send_item (tmp, op);
152 } 155 }
153 else 156 else
154 { 157 {
174 { 177 {
175 /* no action necessary: remove_ob() notifies the client */ 178 /* no action necessary: remove_ob() notifies the client */
176 return; 179 return;
177 } 180 }
178 181
179 tmp = is_player_inv (op->env); 182 tmp = op->in_player ();
180 if (!tmp) 183 if (!tmp)
181 { 184 {
182 for (pl = first_player; pl; pl = pl->next) 185 for (pl = first_player; pl; pl = pl->next)
183 if (pl->ob->container == op->env) 186 if (pl->ob->container == op->env)
184 break; 187 break;
482 *type = CFAPI_INT; 485 *type = CFAPI_INT;
483 return &rv; 486 return &rv;
484} 487}
485 488
486void * 489void *
487cfapi_system_strdup_local (int *type, ...) 490cfapi_system_strdup (int *type, ...)
488{ 491{
489 va_list args; 492 va_list args;
490 char *txt; 493 char *txt;
491 494
492 va_start (args, type); 495 va_start (args, type);
493 txt = va_arg (args, char *); 496 txt = va_arg (args, char *);
494 497
495 va_end (args); 498 va_end (args);
496 *type = CFAPI_STRING; 499 *type = CFAPI_STRING;
497 return strdup_local (txt); 500 return strdup (txt);
498} 501}
499 502
500void * 503void *
501cfapi_system_register_global_event (int *type, ...) 504cfapi_system_register_global_event (int *type, ...)
502{ 505{
1090 x = va_arg (args, int); 1093 x = va_arg (args, int);
1091 y = va_arg (args, int); 1094 y = va_arg (args, int);
1092 1095
1093 va_end (args); 1096 va_end (args);
1094 1097
1095 rv = get_map_ob (map, x, y); 1098 rv = GET_MAP_OB (map, x, y);
1096 *type = CFAPI_POBJECT; 1099 *type = CFAPI_POBJECT;
1097 return rv; 1100 return rv;
1098} 1101}
1099 1102
1100void * 1103void *
1637 rv = &op->stats.exp; 1640 rv = &op->stats.exp;
1638 *type = CFAPI_LONG; 1641 *type = CFAPI_LONG;
1639 break; 1642 break;
1640 1643
1641 case CFAPI_OBJECT_PROP_OWNER: 1644 case CFAPI_OBJECT_PROP_OWNER:
1642 rv = get_owner (op); 1645 rv = op->owner;
1643 *type = CFAPI_POBJECT; 1646 *type = CFAPI_POBJECT;
1644 break; 1647 break;
1645 1648
1646 case CFAPI_OBJECT_PROP_PRESENT: 1649 case CFAPI_OBJECT_PROP_PRESENT:
1647 { 1650 {
1689 case CFAPI_OBJECT_PROP_MERGEABLE: 1692 case CFAPI_OBJECT_PROP_MERGEABLE:
1690 { 1693 {
1691 object *op2; 1694 object *op2;
1692 op2 = va_arg (args, object *); 1695 op2 = va_arg (args, object *);
1693 1696
1694 ri = CAN_MERGE (op, op2); 1697 ri = object::can_merge_slow (op, op2);
1695 rv = &ri; 1698 rv = &ri;
1696 } 1699 }
1697 *type = CFAPI_INT; 1700 *type = CFAPI_INT;
1698 break; 1701 break;
1699 1702
1846 rv = &ri; 1849 rv = &ri;
1847 *type = CFAPI_INT; 1850 *type = CFAPI_INT;
1848 break; 1851 break;
1849 1852
1850 case CFAPI_PLAYER_PROP_IP: 1853 case CFAPI_PLAYER_PROP_IP:
1851 rv = op->contr->socket.host; 1854 rv = op->contr->socket->host;
1852 *type = CFAPI_STRING; 1855 *type = CFAPI_STRING;
1853 break; 1856 break;
1854 1857
1855 case CFAPI_PLAYER_PROP_MARKED_ITEM: 1858 case CFAPI_PLAYER_PROP_MARKED_ITEM:
1856 rv = find_marked_object (op); 1859 rv = find_marked_object (op);
1971 player *pl; 1974 player *pl;
1972 1975
1973 op->nrof = iarg; 1976 op->nrof = iarg;
1974 if (op->env != NULL) 1977 if (op->env != NULL)
1975 { 1978 {
1976 tmp = is_player_inv (op->env); 1979 tmp = op->in_player ();
1977 if (!tmp) 1980 if (!tmp)
1978 { 1981 {
1979 for (pl = first_player; pl; pl = pl->next) 1982 for (pl = first_player; pl; pl = pl->next)
1980 if (pl->ob->container == op->env) 1983 if (pl->ob->container == op->env)
1981 break; 1984 break;
2132 player *pl; 2135 player *pl;
2133 2136
2134 op->weight = iarg; 2137 op->weight = iarg;
2135 if (op->env != NULL) 2138 if (op->env != NULL)
2136 { 2139 {
2137 tmp = is_player_inv (op->env); 2140 tmp = op->in_player ();
2138 if (!tmp) 2141 if (!tmp)
2139 { 2142 {
2140 for (pl = first_player; pl; pl = pl->next) 2143 for (pl = first_player; pl; pl = pl->next)
2141 if (pl->ob->container == op->env) 2144 if (pl->ob->container == op->env)
2142 break; 2145 break;
2271 break; 2274 break;
2272 2275
2273 case CFAPI_OBJECT_PROP_OWNER: 2276 case CFAPI_OBJECT_PROP_OWNER:
2274 oparg = va_arg (args, object *); 2277 oparg = va_arg (args, object *);
2275 2278
2276 set_owner (op, oparg); 2279 op->set_owner (oparg);
2277 break; 2280 break;
2278 2281
2279 case CFAPI_OBJECT_PROP_CHEATER: 2282 case CFAPI_OBJECT_PROP_CHEATER:
2280 set_cheat (op); 2283 set_cheat (op);
2281 break; 2284 break;
2621 2624
2622 op = va_arg (args, object *); 2625 op = va_arg (args, object *);
2623 2626
2624 va_end (args); 2627 va_end (args);
2625 2628
2626 op->destroy (0); 2629 op->destroy ();
2627 2630
2628 *type = CFAPI_NONE; 2631 *type = CFAPI_NONE;
2629 return NULL; 2632 return NULL;
2630} 2633}
2631 2634
2648 *type = CFAPI_POBJECT; 2651 *type = CFAPI_POBJECT;
2649 return object_create_clone (op); 2652 return object_create_clone (op);
2650 } 2653 }
2651 else 2654 else
2652 { 2655 {
2653 object *tmp; 2656 object *tmp = op->clone ();
2654
2655 tmp = get_object ();
2656 copy_object (op, tmp);
2657 *type = CFAPI_POBJECT; 2657 *type = CFAPI_POBJECT;
2658 return tmp; 2658 return tmp;
2659 } 2659 }
2660} 2660}
2661void * 2661void *
2697 break; 2697 break;
2698 2698
2699 case 3: 2699 case 3:
2700 op = va_arg (args, object *); 2700 op = va_arg (args, object *);
2701 2701
2702 rv = is_player_inv (op); 2702 rv = op->in_player ();
2703 break; 2703 break;
2704 2704
2705 default: 2705 default:
2706 rv = NULL; 2706 rv = NULL;
2707 *type = CFAPI_NONE; 2707 *type = CFAPI_NONE;
2725 *type = CFAPI_POBJECT; 2725 *type = CFAPI_POBJECT;
2726 switch (ival) 2726 switch (ival)
2727 { 2727 {
2728 case 0: 2728 case 0:
2729 va_end (args); 2729 va_end (args);
2730 return get_object (); 2730 return object::create ();
2731 break; 2731 break;
2732 2732
2733 case 1: /* Named object. Nearly the old plugin behavior, but we don't add artifact suffixes */ 2733 case 1: /* Named object. Nearly the old plugin behavior, but we don't add artifact suffixes */
2734 { 2734 {
2735 char *sval; 2735 char *sval;
2738 2738
2739 op = get_archetype_by_object_name (sval); 2739 op = get_archetype_by_object_name (sval);
2740 2740
2741 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0) 2741 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0)
2742 { 2742 {
2743 op->destroy (0); 2743 op->destroy ();
2744 /* Try with archetype names... */ 2744 /* Try with archetype names... */
2745 op = get_archetype (sval); 2745 op = get_archetype (sval);
2746 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0) 2746 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0)
2747 { 2747 {
2748 op->destroy (0); 2748 op->destroy ();
2749 *type = CFAPI_NONE; 2749 *type = CFAPI_NONE;
2750 va_end (args); 2750 va_end (args);
2751 return NULL; 2751 return NULL;
2752 } 2752 }
2753 } 2753 }
2912 2912
2913 op = va_arg (args, object *); 2913 op = va_arg (args, object *);
2914 2914
2915 va_end (args); 2915 va_end (args);
2916 2916
2917 clear_object (op); 2917 op->clear ();
2918 *type = CFAPI_NONE; 2918 *type = CFAPI_NONE;
2919 return NULL; 2919 return NULL;
2920} 2920}
2921 2921
2922void * 2922void *
3222 x = map->enter_x; 3222 x = map->enter_x;
3223 y = map->enter_y; 3223 y = map->enter_y;
3224 } 3224 }
3225 3225
3226/* 3226/*
3227 originator = get_object(); 3227 originator = object::create();
3228 EXIT_PATH(originator) = add_string(map->path); 3228 EXIT_PATH(originator) = add_string(map->path);
3229 EXIT_X(originator) = x; 3229 EXIT_X(originator) = x;
3230 EXIT_Y(originator) = y; 3230 EXIT_Y(originator) = y;
3231 printf("B Transfer: X=%d, Y=%d, OP=%s\n", x, y, op->name);*/ 3231 printf("B Transfer: X=%d, Y=%d, OP=%s\n", x, y, op->name);*/
3232 /*enter_exit(op, originator); */ 3232 /*enter_exit(op, originator); */
3233 insert_ob_in_map_at (op, map, NULL, 0, x, y); 3233 insert_ob_in_map_at (op, map, NULL, 0, x, y);
3234 /*printf("A Transfer: X=%d, Y=%d, MAP=%s\n", x, y, op->map->name); 3234 /*printf("A Transfer: X=%d, Y=%d, MAP=%s\n", x, y, op->map->name);
3235 originator->destroy (0); 3235 originator->destroy ();
3236 */ 3236 */
3237 *type = CFAPI_INT; 3237 *type = CFAPI_INT;
3238 return &rv; 3238 return &rv;
3239 break; 3239 break;
3240 3240
3313 drop (author, op); 3313 drop (author, op);
3314 3314
3315 if (author->type == PLAYER) 3315 if (author->type == PLAYER)
3316 { 3316 {
3317 author->contr->count = 0; 3317 author->contr->count = 0;
3318 author->contr->socket.update_look = 1; 3318 author->contr->socket->floorbox_update ();
3319 } 3319 }
3320 3320
3321 *type = CFAPI_NONE; 3321 *type = CFAPI_NONE;
3322 return NULL; 3322 return NULL;
3323} 3323}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines