On Sun, 23 Jun 1996, ShadowLord wrote: > On Sat, 22 Jun 1996, Ground Zero Enterprises wrote: > > > Now on to more important things, has anyone stayed with the current > > spello() system but made it a bit more flexible? I recently was creating > > a spell 'gate' that could only target players so I added target flags > > TAR_PLR_WORLD and TAR_PLR_ROOM but I am also planning on adding a flag > > TAR_SPEC that would pass to a diffrent function and determine is a target > > is valid. Then for example it would be easier for you to create a spell > > that only targets elves or warrios or mobs that have full hit points. I > > als changed the section of spello() that was a TRUE/FALSE check for > > violent to an int so it could record bitvectors and renamed it flags. > > Since I haven't added many spells it was easy to change all of the TRUEs > > to CAST_VIOLENCE and all the FALSEs to CAST_NONE. I mainly did this > > because i wanted to have sort of, levels of violence. For example > > although 'word of recall' wouldn't start a fight but it may not be > > allowed in a PEACEFUL room so that characters couldn't be moved to a > > room where they could be stolen from. I was just curious if anyone had > > done something similar and if so what methods they used to go about it. > > TAR_CHAR, TAR_CHAR_ROOM, and TAR_MANUAL seem to take care of the things > you added. If you want only players you can add a little check in the > actual case statement for the individual spells. That seems fairly > flexible to me. > > [snip] > -dak The targetting routines currently don't cater to many possible needs that could come up though. First of all there is no TAR_MANUAL in stock bpl11. The problem is, say you have a spell like telepathy for example. It is supposed to let you 'tell' a player messages and not mobs (ignore the fact this spell is useless). Now it doesn't really fit any of the stock mag_x routines so you flag it as mag_manual and create an ASPELL(spell_telepathy) for it. Now if the first check in it says if(!IS_NPC(victim)) send_to_char("This spell may only target players!", ch); return; the spell won't work on mobs but you will still get a message from do_cast so it will look like this Okay. This spell may only target players! and you'll still have to sit through a WAIT_STATE(ch, PULSE_VIOLENCE) even tho the spell was never cast. It would be siompler to just add a check at the beginning of the checks to see if the spell had a valid target like if (!target && (IS_SET(SINFO.targets, TAR_SPEC))) send it to a function that determines if the specific spell target is present using a switch statement. This would also more easily allow a spell like 'knock' or something that would target a door in a room and try to magically unlock it. Well that's enough of my ramblings so Ill shut up now. Chris
This archive was generated by hypermail 2b30 : 12/18/00 PST