Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
- Конференция мира Аладон - > Идеи и пожелания > Переналожение заклинаний


Автор: Фелей Jan 23 2019, 19:43
Часто замечал следующее. Остается последняя минута действия защиты храма, а зона какая нибудь суровая. И вот стою я своим дохлым магом, жду когда санка сойдет, чтобы заново ее наколдовать. Может сделать так, чтобы при наложении на себя эффект обновлялся? То есть старый удалялся и заменялся новым. Судя по коду сделать просто. Например для заклинания 'броня' код в rom следующий
CODE

void spell_armor( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   CHAR_DATA *victim = (CHAR_DATA *) vo;
   AFFECT_DATA af;

   if ( is_affected( victim, sn ) )
   {
       if (victim == ch)
         send_to_char("You are already armored.\n\r",ch);
       else
         act("$N is already armored.",ch,NULL,victim,TO_CHAR);
       return;
   }
   af.where  = TO_AFFECTS;
   af.type      = sn;
   af.level  = level;
   af.duration  = 24;
   af.modifier  = -20;
   af.location  = APPLY_AC;
   af.bitvector = 0;
   affect_to_char( victim, &af );
   send_to_char( "You feel someone protecting you.\n\r", victim );
   if ( ch != victim )
       act("$N is protected by your magic.",ch,NULL,victim,TO_CHAR);
   return;
}

В проверке вместо выдачи сообщения удаляем аффект, получается
CODE

void spell_armor( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   CHAR_DATA *victim = (CHAR_DATA *) vo;
   AFFECT_DATA af;

   if ( is_affected( victim, sn ) )
   {
       if (victim == ch)
         affect_strip(victim,sn);
       else
       {
         act("$N is already armored.",ch,NULL,victim,TO_CHAR);
         return;
       }
   }
   af.where  = TO_AFFECTS;
   af.type      = sn;
   af.level  = level;
   af.duration  = 24;
   af.modifier  = -20;
   af.location  = APPLY_AC;
   af.bitvector = 0;
   affect_to_char( victim, &af );
   send_to_char( "You feel someone protecting you.\n\r", victim );
   if ( ch != victim )
       act("$N is protected by your magic.",ch,NULL,victim,TO_CHAR);
   return;
}

Замена активна только при касте на себя, на другого срабатывает по старому (чтоб не абьюзили). Остальные заклинания меняются аналогично.

Автор: Морвиел Jan 25 2019, 11:51
Идея неплоха и в общем то расширить ее можно и на других, если сравнивать уровень кастующего с уровнем уже наложенного эффекта. Если уровень >= уровня эффекта, то удалять и перенакладывать, иначе выдавать "На Васю действует более мощная версия этого заклинания" или что-то аналогичное.

Правда это верно только для тех заклинаний, где modifier не зависит от % знания заклинания, но таких, вроде бы, подавляющее большинство.

Но в любом случае, правки кода у нас временно на стопе сейчас.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)