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.16 by root, Sat Sep 16 22:24:13 2006 UTC vs.
Revision 1.23 by root, Wed Dec 13 03:28:42 2006 UTC

42 42
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 {cfapi_system_re_cmp, 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_local, 6, "cfapi_system_strdup_local"},
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"},
121 121
122/* NEW PLUGIN STUFF STARTS HERE */ 122/* NEW PLUGIN STUFF STARTS HERE */
123 123
124/*****************************************************************************/ 124/*****************************************************************************/
125 125
126#ifdef WIN32
127static const char *
128plugins_dlerror (void)
129{
130 static char buf[256];
131 DWORD err;
132 char *p;
133
134 err = GetLastError ();
135 if (FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0, buf, sizeof (buf), NULL) == 0)
136 snprintf (buf, sizeof (buf), "error %lu", err);
137 p = strchr (buf, '\0');
138 while (p > buf && (p[-1] == '\r' || p[-1] == '\n'))
139 p--;
140 *p = '\0';
141 return buf;
142}
143#endif /* WIN32 */
144
145/** 126/**
146 * Notify clients about a changed object. 127 * Notify clients about a changed object.
147 * 128 *
148 * @param op the object that has changed 129 * @param op the object that has changed
149 */ 130 */
575 *type = CFAPI_INT; 556 *type = CFAPI_INT;
576 return &rv; 557 return &rv;
577} 558}
578 559
579void * 560void *
580cfapi_system_re_cmp (int *type, ...)
581{
582 va_list args;
583 char *rv;
584 const char *str;
585 const char *regexp;
586
587 va_start (args, type);
588
589 str = va_arg (args, char *);
590 regexp = va_arg (args, char *);
591
592 rv = (char *) re_cmp (str, regexp);
593
594 va_end (args);
595 *type = CFAPI_STRING;
596 return rv;
597}
598
599void *
600cfapi_system_directory (int *type, ...) 561cfapi_system_directory (int *type, ...)
601{ 562{
602 va_list args; 563 va_list args;
603 int dirtype; 564 int dirtype;
604 565
1676 rv = &op->stats.exp; 1637 rv = &op->stats.exp;
1677 *type = CFAPI_LONG; 1638 *type = CFAPI_LONG;
1678 break; 1639 break;
1679 1640
1680 case CFAPI_OBJECT_PROP_OWNER: 1641 case CFAPI_OBJECT_PROP_OWNER:
1681 rv = get_owner (op); 1642 rv = op->owner;
1682 *type = CFAPI_POBJECT; 1643 *type = CFAPI_POBJECT;
1683 break; 1644 break;
1684 1645
1685 case CFAPI_OBJECT_PROP_PRESENT: 1646 case CFAPI_OBJECT_PROP_PRESENT:
1686 { 1647 {
1728 case CFAPI_OBJECT_PROP_MERGEABLE: 1689 case CFAPI_OBJECT_PROP_MERGEABLE:
1729 { 1690 {
1730 object *op2; 1691 object *op2;
1731 op2 = va_arg (args, object *); 1692 op2 = va_arg (args, object *);
1732 1693
1733 ri = CAN_MERGE (op, op2); 1694 ri = object::can_merge_slow (op, op2);
1734 rv = &ri; 1695 rv = &ri;
1735 } 1696 }
1736 *type = CFAPI_INT; 1697 *type = CFAPI_INT;
1737 break; 1698 break;
1738 1699
2310 break; 2271 break;
2311 2272
2312 case CFAPI_OBJECT_PROP_OWNER: 2273 case CFAPI_OBJECT_PROP_OWNER:
2313 oparg = va_arg (args, object *); 2274 oparg = va_arg (args, object *);
2314 2275
2315 set_owner (op, oparg); 2276 op->set_owner (oparg);
2316 break; 2277 break;
2317 2278
2318 case CFAPI_OBJECT_PROP_CHEATER: 2279 case CFAPI_OBJECT_PROP_CHEATER:
2319 set_cheat (op); 2280 set_cheat (op);
2320 break; 2281 break;
2455 if (op->contr) 2416 if (op->contr)
2456 { 2417 {
2457 oparg = va_arg (args, object *); 2418 oparg = va_arg (args, object *);
2458 2419
2459 op->contr->mark = oparg; 2420 op->contr->mark = oparg;
2460 if (oparg)
2461 op->contr->mark_count = oparg->count;
2462 } 2421 }
2463 break; 2422 break;
2464 2423
2465 case CFAPI_PLAYER_PROP_PARTY: 2424 case CFAPI_PLAYER_PROP_PARTY:
2466 if (op->contr) 2425 if (op->contr)
2645 op = va_arg (args, object *); 2604 op = va_arg (args, object *);
2646 2605
2647 va_end (args); 2606 va_end (args);
2648 2607
2649 send_removed_object (op); 2608 send_removed_object (op);
2650 remove_ob (op); 2609 op->remove ();
2651 *type = CFAPI_NONE; 2610 *type = CFAPI_NONE;
2652 return NULL; 2611 return NULL;
2653} 2612}
2654 2613
2655void * 2614void *
2662 2621
2663 op = va_arg (args, object *); 2622 op = va_arg (args, object *);
2664 2623
2665 va_end (args); 2624 va_end (args);
2666 2625
2667 free_object (op); 2626 op->destroy ();
2668 2627
2669 *type = CFAPI_NONE; 2628 *type = CFAPI_NONE;
2670 return NULL; 2629 return NULL;
2671} 2630}
2672 2631
2689 *type = CFAPI_POBJECT; 2648 *type = CFAPI_POBJECT;
2690 return object_create_clone (op); 2649 return object_create_clone (op);
2691 } 2650 }
2692 else 2651 else
2693 { 2652 {
2694 object *tmp; 2653 object *tmp = op->clone ();
2695
2696 tmp = get_object ();
2697 copy_object (op, tmp);
2698 *type = CFAPI_POBJECT; 2654 *type = CFAPI_POBJECT;
2699 return tmp; 2655 return tmp;
2700 } 2656 }
2701} 2657}
2702void * 2658void *
2766 *type = CFAPI_POBJECT; 2722 *type = CFAPI_POBJECT;
2767 switch (ival) 2723 switch (ival)
2768 { 2724 {
2769 case 0: 2725 case 0:
2770 va_end (args); 2726 va_end (args);
2771 return get_object (); 2727 return object::create ();
2772 break; 2728 break;
2773 2729
2774 case 1: /* Named object. Nearly the old plugin behavior, but we don't add artifact suffixes */ 2730 case 1: /* Named object. Nearly the old plugin behavior, but we don't add artifact suffixes */
2775 { 2731 {
2776 char *sval; 2732 char *sval;
2779 2735
2780 op = get_archetype_by_object_name (sval); 2736 op = get_archetype_by_object_name (sval);
2781 2737
2782 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0) 2738 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0)
2783 { 2739 {
2784 free_object (op); 2740 op->destroy ();
2785 /* Try with archetype names... */ 2741 /* Try with archetype names... */
2786 op = get_archetype (sval); 2742 op = get_archetype (sval);
2787 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0) 2743 if (strncmp (query_name (op), ARCH_SINGULARITY, ARCH_SINGULARITY_LEN) == 0)
2788 { 2744 {
2789 free_object (op); 2745 op->destroy ();
2790 *type = CFAPI_NONE; 2746 *type = CFAPI_NONE;
2791 va_end (args); 2747 va_end (args);
2792 return NULL; 2748 return NULL;
2793 } 2749 }
2794 } 2750 }
2953 2909
2954 op = va_arg (args, object *); 2910 op = va_arg (args, object *);
2955 2911
2956 va_end (args); 2912 va_end (args);
2957 2913
2958 clear_object (op); 2914 op->clear ();
2959 *type = CFAPI_NONE; 2915 *type = CFAPI_NONE;
2960 return NULL; 2916 return NULL;
2961} 2917}
2962 2918
2963void * 2919void *
3263 x = map->enter_x; 3219 x = map->enter_x;
3264 y = map->enter_y; 3220 y = map->enter_y;
3265 } 3221 }
3266 3222
3267/* 3223/*
3268 originator = get_object(); 3224 originator = object::create();
3269 EXIT_PATH(originator) = add_string(map->path); 3225 EXIT_PATH(originator) = add_string(map->path);
3270 EXIT_X(originator) = x; 3226 EXIT_X(originator) = x;
3271 EXIT_Y(originator) = y; 3227 EXIT_Y(originator) = y;
3272 printf("B Transfer: X=%d, Y=%d, OP=%s\n", x, y, op->name);*/ 3228 printf("B Transfer: X=%d, Y=%d, OP=%s\n", x, y, op->name);*/
3273 /*enter_exit(op, originator); */ 3229 /*enter_exit(op, originator); */
3274 insert_ob_in_map_at (op, map, NULL, 0, x, y); 3230 insert_ob_in_map_at (op, map, NULL, 0, x, y);
3275 /*printf("A Transfer: X=%d, Y=%d, MAP=%s\n", x, y, op->map->name); 3231 /*printf("A Transfer: X=%d, Y=%d, MAP=%s\n", x, y, op->map->name);
3276 free_object(originator); 3232 originator->destroy ();
3277 */ 3233 */
3278 *type = CFAPI_INT; 3234 *type = CFAPI_INT;
3279 return &rv; 3235 return &rv;
3280 break; 3236 break;
3281 3237
3470 result = 1; 3426 result = 1;
3471 return &result; 3427 return &result;
3472 } 3428 }
3473 3429
3474 send_removed_object (who); 3430 send_removed_object (who);
3475 remove_ob (who); 3431 who->remove ();
3476 3432
3477 for (tmp = who; tmp != NULL; tmp = tmp->more) 3433 for (tmp = who; tmp != NULL; tmp = tmp->more)
3478 tmp->x = x + freearr_x[k] + (tmp->arch == NULL ? 0 : tmp->arch->clone.x), 3434 tmp->x = x + freearr_x[k] + (tmp->arch == NULL ? 0 : tmp->arch->clone.x),
3479 tmp->y = y + freearr_y[k] + (tmp->arch == NULL ? 0 : tmp->arch->clone.y); 3435 tmp->y = y + freearr_y[k] + (tmp->arch == NULL ? 0 : tmp->arch->clone.y);
3480 3436

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines