Added PnP Dire Rat.
Added PnP Dire Rat.
This commit is contained in:
250
nwn_dark_sun/bbs_include.nss
Normal file
250
nwn_dark_sun/bbs_include.nss
Normal file
@@ -0,0 +1,250 @@
|
||||
//void main(){}
|
||||
//BULLETIN BOARD SYSTEM VERSION 1.1
|
||||
|
||||
//This is an include file. Upon building your module you will get
|
||||
//a compile error in this file. That is normal and does not
|
||||
//affect the operation of the bulletin board.
|
||||
#include "aps_include"
|
||||
|
||||
void bbs_do_board_stats();
|
||||
void bbs_initiate(object oBBS);
|
||||
int bbs_can_show(int WhichEntry);
|
||||
void bbs_change_page(int PageChange);
|
||||
void bbs_select_entry(int WhichEntry);
|
||||
void bbs_add_notice(object oBBS, string sPoster, string sTitle, string sMessage, string sDate, string sBBStag = "");
|
||||
int bbs_drop_lowest(string sBBStag, int LowestItem);
|
||||
|
||||
//Loads into tokens the stats for a board
|
||||
void bbs_do_board_stats() {
|
||||
object oBBS = GetLocalObject(GetModule(), "BBS_" + GetTag(OBJECT_SELF));
|
||||
int PageSize = GetLocalInt(oBBS, "PageSize");
|
||||
int TotalItems = 0;
|
||||
string sSQL = "SELECT * FROM bbs_stats WHERE Tag='"+SQLEncodeSpecialChars(GetTag(oBBS))+"'";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFirstRow()==SQL_SUCCESS)
|
||||
TotalItems = StringToInt(SQLGetData(2));
|
||||
int PageIndex = GetLocalInt(GetPCSpeaker(), "PageIndex") + 1;
|
||||
SetCustomToken(3671, IntToString(TotalItems));
|
||||
if (TotalItems == 0) {PageIndex = 0;}
|
||||
SetCustomToken(3672, IntToString(PageIndex));
|
||||
SetCustomToken(3673, IntToString((TotalItems + PageSize - 1) / PageSize));
|
||||
}
|
||||
|
||||
//Initiates a bulletin board's settings if neccessary
|
||||
void bbs_initiate(object oBBS) {
|
||||
string sBBS = "BBS_" + GetTag(oBBS);
|
||||
object myBBS = GetLocalObject(GetModule(), sBBS);
|
||||
if (!GetIsObjectValid(myBBS)) {
|
||||
SetLocalObject(GetModule(), sBBS, oBBS);
|
||||
myBBS = oBBS;
|
||||
//MaxItems is the maximum number of messages
|
||||
SetLocalInt(myBBS, "MaxItems", 50);
|
||||
//PageSize is the number of entries per page, between 1 and 10
|
||||
SetLocalInt(myBBS, "PageSize", 5);
|
||||
}
|
||||
}
|
||||
|
||||
//Determines whether a dialogue option is visible in conversation
|
||||
int bbs_can_show(int WhichEntry) {
|
||||
object oBBS = GetLocalObject(GetModule(), "BBS_" + GetTag(OBJECT_SELF));
|
||||
int PageSize = GetLocalInt(oBBS, "PageSize");
|
||||
int nSpot = GetLocalInt(GetPCSpeaker(), "PageIndex") * PageSize + WhichEntry;
|
||||
int TotalItems = 0;
|
||||
if(WhichEntry>PageSize)
|
||||
return FALSE;
|
||||
string sSQL = "SELECT * FROM bbs_stats WHERE Tag='"+SQLEncodeSpecialChars(GetTag(oBBS))+"'";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFirstRow()==SQL_SUCCESS)
|
||||
TotalItems = StringToInt(SQLGetData(2));
|
||||
if(nSpot <= TotalItems && WhichEntry <= PageSize) {return TRUE;}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//Moves the page by the required PageFlip:
|
||||
//0 to reload page, -1 for previous page, 1 for next page
|
||||
void bbs_change_page(int PageFlip) {
|
||||
object oBBS = GetLocalObject(GetModule(), "BBS_" + GetTag(OBJECT_SELF));
|
||||
int PageSize = GetLocalInt(oBBS, "PageSize");
|
||||
int MaxItems = GetLocalInt(oBBS, "MaxItems");
|
||||
int TotalItems,LatestItem,LowestItem;
|
||||
string sBBStag = SQLEncodeSpecialChars(GetTag(oBBS));
|
||||
string sSQL = "SELECT * FROM bbs_stats WHERE Tag='"+sBBStag+"'";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFetch()){
|
||||
TotalItems = StringToInt(SQLGetData(2));
|
||||
LatestItem = StringToInt(SQLGetData(3));
|
||||
LowestItem = StringToInt(SQLGetData(4));
|
||||
}
|
||||
int PageIndex = GetLocalInt(GetPCSpeaker(), "PageIndex") + 1 * PageFlip;
|
||||
if (PageIndex < 0) {PageIndex = 0;}
|
||||
SetLocalInt(GetPCSpeaker(), "PageIndex", PageIndex);
|
||||
SetLocalString(GetPCSpeaker(),"PostAuthor","");
|
||||
int i;
|
||||
for(i = 3680; i<=3700;i++)
|
||||
SetCustomToken(i,"");
|
||||
string sInfo;
|
||||
int Page = PageIndex*PageSize;
|
||||
int iOffset = 0;
|
||||
int iLimitStart = PageIndex*PageSize;
|
||||
int iLimitEnd = ((PageIndex+1)*PageSize);
|
||||
sSQL = "SELECT * FROM bbs WHERE Tag='"+sBBStag+"' ORDER BY ID DESC LIMIT "+IntToString(iLimitStart)+","+IntToString(iLimitEnd);
|
||||
SQLExecDirect(sSQL);
|
||||
while(SQLFetch()!=SQL_ERROR){
|
||||
sInfo = SQLDecodeSpecialChars(SQLGetData(5));
|
||||
SetCustomToken((3680 + iOffset), sInfo);
|
||||
sInfo = SQLDecodeSpecialChars(SQLGetData(3));
|
||||
SetCustomToken((3690 + iOffset), sInfo);
|
||||
iOffset++;
|
||||
}
|
||||
SetCustomToken((3690 + (iOffset-1)),(sInfo+"\n\n"));
|
||||
bbs_do_board_stats();
|
||||
SetCustomToken(3674, "");
|
||||
SetCustomToken(3675, "");
|
||||
SetCustomToken(3676, "");
|
||||
SetCustomToken(3677, "");
|
||||
SetCustomToken(3678, "");
|
||||
}
|
||||
|
||||
//Displays the selected post
|
||||
void bbs_select_entry(int WhichEntry) {
|
||||
object oBBS = GetLocalObject(GetModule(), "BBS_" + GetTag(OBJECT_SELF));
|
||||
string sBBStag = SQLEncodeSpecialChars(GetTag(oBBS));
|
||||
int PageSize = GetLocalInt(oBBS, "PageSize");
|
||||
int MaxItems = GetLocalInt(oBBS, "MaxItems");
|
||||
int LatestItem = 0;
|
||||
string sSQL = "SELECT * FROM bbs_stats WHERE Tag='"+sBBStag+"'";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFirstRow()==SQL_SUCCESS)
|
||||
LatestItem = StringToInt(SQLGetData(3));
|
||||
int PageIndex = GetLocalInt(GetPCSpeaker(), "PageIndex");
|
||||
string sPoster,sTitle,sDate,sMessage,sID;
|
||||
int iLimit = PageIndex * PageSize + WhichEntry;
|
||||
int iOffset = 1;
|
||||
sSQL = "SELECT * FROM bbs WHERE Tag='"+sBBStag+"' ORDER BY ID DESC LIMIT "+IntToString(iLimit);
|
||||
SQLExecDirect(sSQL);
|
||||
while(SQLFetch()!=SQL_ERROR){
|
||||
if(iOffset == iLimit){
|
||||
sID = SQLGetData(2);
|
||||
sPoster = SQLDecodeSpecialChars(SQLGetData(3));
|
||||
sDate = SQLDecodeSpecialChars(SQLGetData(4));
|
||||
sTitle = SQLDecodeSpecialChars(SQLGetData(5));
|
||||
sMessage = SQLDecodeSpecialChars(SQLGetData(6));
|
||||
}
|
||||
iOffset++;
|
||||
}
|
||||
SetLocalString(GetPCSpeaker(),"PostAuthor",sPoster);
|
||||
SetLocalInt(GetPCSpeaker(),"CurrentEntry",StringToInt(sID));
|
||||
bbs_do_board_stats();
|
||||
SetCustomToken(3674, "\n\n"+sTitle+"\nBy: ");
|
||||
SetCustomToken(3675, sPoster);
|
||||
SetCustomToken(3676, " On: ");
|
||||
SetCustomToken(3677, sDate);
|
||||
SetCustomToken(3678, "\n"+sMessage);
|
||||
}
|
||||
|
||||
//Adds a post to the bulletin board. This can be called at any time
|
||||
//so you can insert your own notices. If you don't specify a sDate,
|
||||
//it will use the current game time. The proper format for sDate is
|
||||
//something like "6/30/1373 11:58".
|
||||
void bbs_add_notice(object oBBS, string sPoster, string sTitle, string sMessage, string sDate, string sBBStag = "")
|
||||
{
|
||||
if (sBBStag != "") {oBBS = GetObjectByTag(sBBStag);}
|
||||
bbs_initiate(oBBS);
|
||||
oBBS = GetLocalObject(GetModule(), "BBS_" + GetTag(oBBS));
|
||||
sBBStag = SQLEncodeSpecialChars(GetTag(oBBS));
|
||||
if (sDate == "") {
|
||||
sDate = IntToString(GetTimeMinute());
|
||||
if (GetStringLength(sDate) == 1) {sDate = "0" + sDate;}
|
||||
sDate = IntToString(GetCalendarMonth()) + "/" + IntToString(GetCalendarDay()) + "/" + IntToString(GetCalendarYear()) + " " + IntToString(GetTimeHour()) + ":" + sDate;
|
||||
}
|
||||
int MaxItems = GetLocalInt(oBBS,"MaxItems");
|
||||
int TotalItems,LatestItem,LowestItem;
|
||||
sBBStag = SQLEncodeSpecialChars(sBBStag);
|
||||
sPoster = SQLEncodeSpecialChars(sPoster);
|
||||
sTitle = SQLEncodeSpecialChars(sTitle);
|
||||
sDate = SQLEncodeSpecialChars(sDate);
|
||||
sMessage = SQLEncodeSpecialChars(sMessage);
|
||||
string sSQL;
|
||||
sSQL = "SELECT * FROM bbs_stats WHERE Tag='" + sBBStag + "'";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFetch()==SQL_SUCCESS){
|
||||
TotalItems = (StringToInt(SQLGetData(2))+1);
|
||||
LatestItem = (StringToInt(SQLGetData(3))+1);
|
||||
LowestItem = StringToInt(SQLGetData(4));
|
||||
if(TotalItems>MaxItems){
|
||||
LowestItem = bbs_drop_lowest(sBBStag,LowestItem);
|
||||
TotalItems--;
|
||||
}
|
||||
//Update the Board Stats row
|
||||
sSQL = "UPDATE bbs_stats SET Total="+IntToString(TotalItems)+", Latest="+IntToString(LatestItem)+", Lowest="+IntToString(LowestItem)+" WHERE Tag='" +sBBStag+"'";
|
||||
SQLExecDirect(sSQL);
|
||||
}
|
||||
else {
|
||||
TotalItems = 1;
|
||||
LatestItem = 1;
|
||||
LowestItem = 1;
|
||||
if(LowestItem == 0){LowestItem=LatestItem;}
|
||||
//Create the Boards Stats row
|
||||
sSQL = "INSERT INTO bbs_stats (Tag,Total,Latest,Lowest) VALUES ('"+sBBStag+"',"+IntToString(TotalItems)+","+IntToString(LatestItem)+","+IntToString(LowestItem)+")";
|
||||
SQLExecDirect(sSQL);
|
||||
}
|
||||
sSQL = "INSERT INTO bbs (Tag,ID,Poster,Date,Title,Message) VALUES "+
|
||||
"('"+sBBStag+"',"+IntToString(LatestItem)+",'"+sPoster+
|
||||
"','"+sDate+"','"+sTitle+"','"+sMessage+"')";
|
||||
SQLExecDirect(sSQL);
|
||||
|
||||
}
|
||||
|
||||
int bbs_drop_lowest(string sBBStag,int LowestItem)
|
||||
{
|
||||
string sSQL;
|
||||
int Lowest;
|
||||
sSQL = "DELETE FROM bbs WHERE Tag='"+sBBStag+"' AND ID="+IntToString(LowestItem);
|
||||
SQLExecDirect(sSQL);
|
||||
sSQL = "SELECT * FROM bbs WHERE Tag='"+sBBStag+"' ORDER BY ID LIMIT 1";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFirstRow()==SQL_SUCCESS)
|
||||
Lowest = StringToInt(SQLGetData(2));
|
||||
else
|
||||
Lowest = 0;
|
||||
return Lowest;
|
||||
}
|
||||
|
||||
void bbs_delete_entry() {
|
||||
int CurrentEntry = GetLocalInt(GetPCSpeaker(), "CurrentEntry");
|
||||
object oBBS = GetLocalObject(GetModule(), "BBS_"+GetTag(OBJECT_SELF));
|
||||
string sSQL;
|
||||
string sBBStag = SQLEncodeSpecialChars(GetTag(oBBS));
|
||||
int TotalItems = 0;
|
||||
int LatestItem = 0;
|
||||
int LowestItem = 0 ;
|
||||
sSQL = "SELECT * FROM bbs_stats WHERE Tag='" + sBBStag + "'";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFetch()==SQL_SUCCESS){
|
||||
TotalItems = StringToInt(SQLGetData(2));
|
||||
LatestItem = StringToInt(SQLGetData(3));
|
||||
LowestItem = StringToInt(SQLGetData(4));
|
||||
}
|
||||
sSQL = "DELETE FROM bbs WHERE Tag='"+sBBStag+"' AND ID="+IntToString(CurrentEntry);
|
||||
SQLExecDirect(sSQL);
|
||||
if(CurrentEntry==LowestItem){
|
||||
sSQL = "SELECT * FROM bbs WHERE Tag='"+sBBStag+"' ORDER BY ID LIMIT 1";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFetch()==SQL_SUCCESS)
|
||||
LowestItem = StringToInt(SQLGetData(2));
|
||||
else
|
||||
LowestItem = 0;
|
||||
}
|
||||
if(CurrentEntry==LatestItem){
|
||||
sSQL = "SELECT * FROM bbs WHERE Tag='"+sBBStag+"' ORDER BY ID DESC LIMIT 1";
|
||||
SQLExecDirect(sSQL);
|
||||
if(SQLFetch()==SQL_SUCCESS)
|
||||
LatestItem = StringToInt(SQLGetData(2));
|
||||
else
|
||||
LatestItem = 0;
|
||||
}
|
||||
TotalItems--;
|
||||
sSQL = "UPDATE bbs_stats SET Total="+IntToString(TotalItems)+", Latest="+IntToString(LatestItem)+", Lowest="+IntToString(LowestItem)+" WHERE Tag='"+sBBStag+"'";
|
||||
SQLExecDirect(sSQL);
|
||||
bbs_change_page(TotalItems * -1);
|
||||
}
|
Reference in New Issue
Block a user