quests.c-Dateireferenz

#include <player/life.h>
#include <player/quest.h>
#include <thing/properties.h>
#include <player/base.h>
#include <living/life.h>
#include "/secure/questmaster.h"
#include <wizlevels.h>
#include <daemon.h>
#include <language.h>
#include <mail.h>
#include <defines.h>
#include <new_skills.h>
#include <events.h>
Include-Abhängigkeitsdiagramm für quests.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define NEED_PROTOTYPES

Funktionen

int QueryQuest (string questname)
static mixed _query_quests ()
static int _set_questpoints (int qp)
static int _query_questpoints ()
void create ()
varargs int GiveQuest (string questname, string message)
int DeleteQuest (string questname)
static mixed * _check_questpoints (mixed *eintrag, closure QueryQ)

Variablen

mixed quests
private nosave int qp

Makro-Dokumentation

#define NEED_PROTOTYPES

Definiert in Zeile 14 der Datei quests.c.


Dokumentation der Funktionen

static mixed* _check_questpoints ( mixed *  eintrag,
closure  QueryQ 
) [static]

Definiert in Zeile 143 der Datei quests.c.

Benutzt qp.

00144 {
00145     int qpoints;
00146     
00147     if ( stringp(eintrag) )
00148         eintrag = ({ eintrag });
00149 
00150     if ( (qpoints = funcall( QueryQ, eintrag[0] )) >= 0 ){
00151         qp += qpoints;
00152         return ({ eintrag[0], qpoints });
00153     }
00154     else
00155         return ({});
00156 }

static int _query_questpoints (  )  [static]

Definiert in Zeile 161 der Datei quests.c.

Benutzt i, ME, P_QP, QM, qp, Query(), quests, save_me(), Set() und SetProp().

00162 {
00163     int i, old_qp, qpoints;
00164                 
00165     old_qp = Query(P_QP);
00166     
00167     if ( !pointerp(quests) || !sizeof(quests) ){
00168         if ( this_interactive() == this_object() && old_qp ){
00169             SetProp( P_QP, 0 );
00170             save_me(1);
00171         }
00172         
00173         return 0;
00174     }
00175     
00176                 quests -= ({ ({}) });
00177     qp = 0;
00178 
00179     quests = map( quests, "_check_questpoints", ME,
00180                         symbol_function( "QueryQuestPoints", QM ) );
00181 
00182     quests -= ({ ({}) });
00183 
00184     if( this_interactive() == ME && old_qp != qp ){
00185         Set( P_QP, qp );
00186         save_me(1);
00187     }
00188 
00189     return qp;
00190 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

static mixed _query_quests (  )  [static]

Definiert in Zeile 199 der Datei quests.c.

Benutzt quests.

00199                              {
00200   return deep_copy(quests);
00201 }

static int _set_questpoints ( int  qp  )  [static]

Definiert in Zeile 192 der Datei quests.c.

Benutzt IS_ARCH, P_QP und Set().

00193 {
00194   if (!IS_ARCH(this_interactive())) 
00195     return -1;
00196   return Set(P_QP, qp);
00197 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

void create (  ) 

Definiert in Zeile 41 der Datei quests.c.

Benutzt F_MODE, F_SET_METHOD, NOSETMETHOD, P_QP, P_QUESTS, quests, SAVE, SECURED und Set().

00042 {
00043   Set(P_QUESTS, NOSETMETHOD, F_SET_METHOD);
00044   Set(P_QUESTS, quests = ({}));
00045   Set(P_QUESTS, SECURED, F_MODE);
00046   Set(P_QP, SAVE, F_MODE);
00047   Set(P_QP, SECURED, F_MODE);
00048 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

int DeleteQuest ( string  questname  ) 

Definiert in Zeile 103 der Datei quests.c.

Benutzt AddExp(), force_save(), i, IS_ARCH, P_QP, QM, QueryProp(), QueryQuest(), quests und Set().

00104 {
00105   mixed *quest;
00106   int i;
00107   
00108   // Quest ist nicht gesetzt
00109   if(!QueryQuest(questname)) return DQ_NOT_SET;
00110   quest=QM->QueryQuest(questname);
00111   // Questname ungueltig
00112   if (!quest||!pointerp(quest)||quest==({})) return DQ_KEY_INVALID;
00113   // Unbefugter Zugriff
00114   if (!IS_ARCH(this_interactive())) return DQ_ILLEGAL_OBJ;
00115   Set(P_QP, QueryProp(P_QP)-quest[0]);
00116   AddExp(-quest[1]);
00117   for(i=sizeof(quests)-1;i>=0;i--)
00118     if(quests[i][0]==questname)
00119       break;
00120   quests=quests[0..i-1]+quests[i+1..];
00121   force_save();
00122   return OK;
00123 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

varargs int GiveQuest ( string  questname,
string  message 
)

Definiert in Zeile 50 der Datei quests.c.

Benutzt AddExp(), Channel(), E_ENVIRONMENT, E_OBJECT, E_PLNAME, E_QP_GRANTED, E_QUESTNAME, EVENTD, EVT_LIB_QUEST_SOLVED, force_save(), guild, GUILD_DIR, IS_ARCH, ME, P_GUILD, P_QP, QM, query_real_name(), QueryProp(), QueryQuest(), quests, SendMail() und Set().

00051 {
00052   mixed *quest;
00053   string guild;
00054 
00055   quest=QM->QueryQuest(questname);
00056   // Questname ungueltig
00057   if (!quest||!pointerp(quest)||quest==({})) return GQ_KEY_INVALID;
00058   // Unbefugter Zugriff auf deaktivierte Quest
00059   if (!quest[6]&&!IS_ARCH(this_interactive())) return GQ_IS_INACTIVE;
00060   // Unbefugter Zugriff
00061   if (member(quest[2], load_name(previous_object()))==-1 &&
00062       !IS_ARCH(this_interactive()))
00063     return GQ_ILLEGAL_OBJ;
00064   
00065   // Gilde wird in jedem Fall informiert.
00066   guild=GUILD_DIR+QueryProp(P_GUILD);
00067   if (find_object(guild) || file_size(guild+".c")>-1)
00068     catch( call_other(guild, "NotifyGiveQuest", ME, questname);publish );
00069 
00070   // Quest bereits gesetzt
00071   if (QueryQuest(questname)) return GQ_ALREADY_SET;
00072   Set(P_QP, QueryProp(P_QP)+quest[0]);
00073   AddExp(quest[1]);
00074   if (quests)
00075     quests+=({({questname,quest[0]})});
00076   else
00077     quests=({({questname,quest[0]})});
00078   force_save();
00079   // Event ausloesen
00080   EVENTD->TriggerEvent(EVT_LIB_QUEST_SOLVED,([
00081              E_OBJECT: this_object(),
00082              E_PLNAME: getuid(this_object()),
00083              E_ENVIRONMENT: environment(),
00084              E_QUESTNAME: questname,
00085              E_QP_GRANTED: quest[0] ]) );
00086 
00087   if (message && message!="")
00088     if (message!="__silent__")
00089       message=implode(explode(message,"@@name@@"),
00090                                       capitalize(query_real_name()));
00091     else
00092       message="";
00093   else
00094     message=capitalize(query_real_name())
00095       +" hat gerade ein Abenteuer bestanden: "+ questname+"\n";
00096   if(message!="")
00097     catch("/secure/questmaster"->Channel(message);publish);
00098   catch("/secure/questmaster"->SendMail(questname, quest,
00099                                                 this_object());publish);
00100   return OK;
00101 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

int QueryQuest ( string  questname  ) 

Definiert in Zeile 125 der Datei quests.c.

Benutzt i und quests.

00126 {
00127   int i,dummy;
00128 
00129   if( sscanf( getuid(), "gast%d", dummy ) == 1 )
00130     return QQ_GUEST;
00131 
00132   if(!questname || !stringp(questname) || questname == "")
00133     return QQ_KEY_INVALID;
00134 
00135   foreach(mixed quest: quests) {
00136     if (questname==quest[0])
00137       return OK;
00138   }
00139   return QQ_KEY_INVALID;
00140 }


Variablen-Dokumentation

private nosave int qp

Definiert in Zeile 33 der Datei quests.c.

mixed quests

Definiert in Zeile 32 der Datei quests.c.

Erzeugt am Thu Jun 3 14:42:53 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3