#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>
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 |
| 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 }

| static mixed _query_quests | ( | ) | [static] |
| static int _set_questpoints | ( | int | qp | ) | [static] |
| 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 }

| 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 }

| 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 }

| int QueryQuest | ( | string | questname | ) |
Definiert in Zeile 125 der Datei quests.c.
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 }
1.6.3