All pastes #572577 Raw Edit

losl

public c v1 · immutable
·published 2007-06-17 19:03 UTC
rendered paste body
//inc_quests//Modular Quests System//Stephen Jackson / losl//blade2k.losl@gmail.com//Uses a system of modules to implement quests.#include "inc_bitflags"//CONSTANTSconst string QUEST_VARIABLE_PREFIX = "QUEST_";const string QUEST_2DA = "quests";const string QUEST_VARIABLE_ID = "QUEST_id";const string QUEST_VARIABLE_FIRST_CONFLICT = "QUEST_FirstConflict";const string QUEST_VARIABLE_CONFLICT = "QUEST_Conflict";const string QUEST_SUFFIX_PCSUCCESSFAIL = "_PCSuccessFail";const string QUEST_SUFFIX_PCCONFLICTOPEN = "_PCConflictOpen";const string QUEST_2DA_SUCCESSSCOLUMN = "success";const string QUEST_2DA_FAILURECOLUMN = "failure";const int QUEST_SUCCESS_FIELDS = 4;const int QUEST_FAIL_FIELDS = 4;//Change FROM Morikhans Idea//Directions are given with 4 letters, then any other directions//The Following are Validconst int QUEST_DIRECTION_LENGTH = 4;const string QUEST_DIRECTION_ENABLE = "enbl"; //Enables the specified Conflictconst string QUEST_DIRECTION_DISABLE = "dsbl"; //Disables the specified Conflictconst string QUEST_DIRECTION_GIVEREWARD = "rwrd"; //Gives reward by numberconst string QUEST_DIRECTION_EXECUTE = "exec"; //Executes a Scriptconst string QUEST_DIRECTION_END = "qend"; //Ends a quest//FOR YOUR INFORMATION://Index 31 is the status of a quest.//SuccessFail,ConflictOpen Notation//Quest Not Attempted:  0,0//Quest Ended Failure: 1,0//Quest Started: 0,1//Quest Ended Success: 1,1const int QUEST_STATUS_INDEX = 31;//PROTOTYPES://DoStartQuest//Starts A Quest. Sets Index 31 to record quest Progress//Needs the quest IDint QUEST_DoStartQuest(int nQuestID, object oPC);//DoEndQuest//Ends A Quest. Sets Index 31 based on bSuccessint QUEST_DoEndQuest(int nQuestID, object oPC, int bSuccess=TRUE);//GetConflictOpen//Checks to see if a Conflict is open//Code is identical to GetConflict Success//And its bad.int QUEST_GetConflictOpen(int nConflict, int nBitArray, int nFirstConflict);//GetConflictSuccess//Checks to see if a Conflict is a success//Code is identical to GetConflictOpen//And its bad.int QUEST_GetConflictSuccess(int nConflict, int nBitArray, int nFirstConflict);//DoConflictSuccess//Perform what happens when a conflict is successfully passedvoid QUEST_DoConflictSuccess(int nQuestID, int nConflict, object oPC, int nFirstConflict);//DoConflictFailure//Perform what happens when a conflict is not successfully passedvoid QUEST_DoConflictFailure(int nQuestID, int nConflict, object oPC, int nFirstConflict);//DoDirections//A function to follow the directions of the successfailure columns on the 2da//also useable by othoer meansvoid QUEST_DoDirections(int nQuestID, string sDirections, object oPC);//DoGiveReward//Gives a reward to oPC//Can we just do tokens?void QUEST_DoGiveReward(int rewardTokenID, object oPC);int QUEST_DoStartQuest(int nQuestID, object oPC){    int nPCSuccessFail = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL);    int nPCPaths = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCCONFLICTOPEN);    int bSFStatus = BITFLAG_GetStatus(QUEST_STATUS_INDEX, nPCSuccessFail);    int bCNStatus = BITFLAG_GetStatus(QUEST_STATUS_INDEX, nPCPaths);    if(bSFStatus == 0 && bCNStatus == 0)    {        nPCPaths = BITFLAGS_Switch(nConflict-nFirstConflict, TRUE, nPCPaths);        SetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCCONFLICTOPEN,nPCPaths);        return TRUE;    }    return FALSE;}int QUEST_DoEndQuest(int nQuestID, object oPC, int bSuccess=TRUE){    int nPCSuccessFail = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL);    int nPCPaths = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCCONFLICTOPEN);    int bSFStatus = BITFLAG_GetStatus(QUEST_STATUS_INDEX, nPCSuccessFail);    int bCNStatus = BITFLAG_GetStatus(QUEST_STATUS_INDEX, nPCPaths);    nPCSuccessFail = BITFLAGS_Switch(nConflict-nFirstConflict, TRUE, nPCSuccessFail);    SetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL,nPCSuccessFail);    if(bSuccess==TRUE)    {        nPCPaths = BITFLAGS_Switch(nConflict-nFirstConflict, FALSE, nPCPaths);        SetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCCONFLICTOPEN,nPCPaths);        return TRUE;    }    return FALSE;}int QUEST_GetConflictOpen(int nConflict, int nBitArray, int nFirstConflict){    return BITFLAG_GetStatus(nConflict-nFirstConflict, nBitArray);}int QUEST_GetConflictSuccess(int nConflict, int nBitArray, int nFirstConflict){    return BITFLAG_GetStatus(nConflict-nFirstConflict, nBitArray);}void QUEST_DoConflictSuccess(int nQuestID, int nConflict, object oPC, int nFirstConflict){    int nSuccessFail, nConflictOpen, i;    string sDirections;    int nPCSuccessFail = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL);    int nPCPaths = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCCONFLICTOPEN);    for(i=1; i <= QUEST_SUCCESS_FIELDS; i++)    {        sDirections = Get2DAString(QUEST_2DA,QUEST_2DA_SUCCESSSCOLUMN+IntToString(i),nConflict);        QUEST_DoDirections(sDirections, oPC);    }    nPCSuccessFail = BITFLAGS_Switch(nConflict-nFirstConflict, TRUE, nPCSuccessFail);    SetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL,nPCSuccessFail);}void QUEST_DoConflictFailure(int nQuestID, int nConflict, object oPC, int nFirstConflict){    int nSuccessFail, nConflictOpen, i;    string sDirections;    int nPCSuccessFail = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL);    int nPCPaths = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCCONFLICTOPEN);    for(i=1; i <= QUEST_FAIL_FIELDS; i++)    {        sDirections = Get2DAString(QUEST_2DA,QUEST_2DA_FAILURECOLUMN+IntToString(i),nConflict);        QUEST_DoDirections(sDirections, oPC);    }    nPCSuccessFail = BITFLAGS_Switch(nConflict-nFirstConflict, FALSE, nPCSuccessFail);    SetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL,nPCSuccessFail);}void QUEST_DoDirections(int nQuestID, string sDirections, object oPC){    int nPCSuccessFail = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCSUCCESSFAIL);    int nPCPaths = GetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+QUEST_SUFFIX_PCCONFLICTOPEN);    string sSubDirection;    sSubDirection = GetSubString(sDirection,0,QUEST_DIRECTION_LENGTH);    sDirection = GetSubString(sDirection,QUEST_DIRECTION_LENGTH,GetStringLength(sDirection)-QUEST_DIRECTION_LENGTH);    if(sSubDirection == QUEST_DIRECTION_ENABLE)    {        nPCPaths = BITFLAGS_Switch(StringToInt(sDirection), TRUE, nPCPaths);        SetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+PCCONFLICTOPEN,nPCPaths);    }    else if(sSubDirection == QUEST_DIRECTION_DISABLE)    {        nPCPaths = BITFLAGS_Switch(StringToInt(sDirection), FALSE, nPCPaths);        SetLocalInt(oPC,QUEST_VARIABLE_PREFIX+IntToString(nQuestID)+PCCONFLICTOPEN,nPCPaths);    }    else if(sSubDirection == QUEST_DIRECTION_GIVEREWARD)    {        QUEST_DoGiveReward(StringToInt(sDirection), oPC);    }    else if(sSubDirection == QUEST_DIRECTION_EXECUTE)    {        ExecuteScript(sDirection, oPC);    }    else if(sSubDirection == QUEST_DIRECTION_END)    {        QUEST_DoEndQuest(nQuestID, oPC,StringToInt(sDirection));    }    else    {        //Excuse me WTF r u doin?        return;    }}void QUEST_DoGiveReward(int rewardTokenID, object oPC){    //No Fuxing Clue how to do this yet    //TOKENS!?!?!?!?!?!?!}