Re: Assigning Spec Procs on the fly...

From: Thomas Pedersen (classic@cloud9.net)
Date: 06/21/96


On Fri, 21 Jun 1996, Ground Zero Enterprises wrote:

hmm..why do it like this?  Create the obj normally, assign a SPEC_PROC
to it and then just load the obj in the spell code.

cl.

> 
> I have coded a new spell called gate that creates two portals, one where 
> the caster is and one where the target is and I wrote a special that 
> should let people enter the gate to go to the other room.  The problem is 
> I can't figure out how to assign the special as I create the object.  The 
> creation is just a mimick of the code to create a corpse except I have 
> added a special item type for portals.  Here is my code for the gate spell:
> 
> ASPELL(spell_gate)
> {
>   struct obj_data *portal, *tportal;
>   struct extra_descr_data *new_descr, *new_tdescr;
>   char buf[80];
> 
>   if (ch == NULL || victim == NULL)
>     return;
> 
>   if (ROOM_FLAGGED(victim->in_room, ROOM_PEACEFUL | ROOM_NOMAGIC)) {
>     send_to_char("Your magic cannot penetrate into that room!", ch);
>     return;
>   }
> 
>   /* create the portal */
>   portal = create_obj();
>   portal->item_number = NOTHING;
>   portal->in_room = NOWHERE;
>   portal->name = str_dup("portal gate gateway");
>   portal->description = str_dup("A glowing portal forms a gateway to 
> another place.");
>   portal->short_description = str_dup("a glowing portal");
>   GET_OBJ_TYPE(portal) = ITEM_PORTAL;
>   GET_OBJ_VAL(portal, 0) = victim->in_room;
>   GET_OBJ_TIMER(portal) = (int) (GET_LEVELX(ch, CLASS_MAGIC_USER) / 10);
>   CREATE(new_descr, struct extra_descr_data, 1);
>   new_descr->keyword = str_dup("portal gate gateway");
>   sprintf(buf, "You can barely make out %s.", world[victim->in_room].name);
>   new_descr->description = str_dup(buf);
>   new_descr->next = portal->ex_description;
>   portal->ex_description = new_descr;
> /*  obj_index[?????].func = portal; */
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   obj_to_room(portal, ch->in_room);
>  
>  /* create the portal at the other end */
>   tportal = create_obj();
>   tportal->item_number = NOTHING;
>   tportal->in_room = NOWHERE;
>   tportal->name = str_dup("portal gate gateway");
>   tportal->description = str_dup("A glowing portal forms a gateway to 
> another place.");
>   tportal->short_description = str_dup("a glowing portal");
>   GET_OBJ_TYPE(tportal) = ITEM_PORTAL;
>   GET_OBJ_VAL(tportal, 0) = ch->in_room;
>   GET_OBJ_TIMER(tportal) = (int) (GET_LEVELX(ch, CLASS_MAGIC_USER) / 10);
>   CREATE(new_tdescr, struct extra_descr_data, 1);
>   new_tdescr->keyword = str_dup("portal gate gateway");
>   sprintf(buf, "You can barely make out %s.", world[ch->in_room].name);
>   new_tdescr->description = str_dup(buf);
>   new_tdescr->next = tportal->ex_description;
>   tportal->ex_description = new_tdescr;
> /*  obj_index[?????].func = portal; */
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   obj_to_room(tportal, victim->in_room);
> }
> 
> I have tried several ways of assigning the procedure but i get several 
> compilation errors.  Any help would be appreciated, as this spell is 
> basically useless unless I can assign the special :)
> 
> Thanks,
> Chris
> 

_/_/_/_/_/_/_/_/_/_/
_/ Classic@Cloud9.net
_/ uskgf89j@ibmmail.com 
_/ http://www.cloud9.net/~classic
_/_/_/_/_/_/_/_/_/_/



This archive was generated by hypermail 2b30 : 12/18/00 PST