1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768 |
- #define VERSION_MAJOR 0
- #define VERSION_MINOR 6
- #ifndef VERSION_TYPE
- #define VERSION_TYPE "dev"
- #endif
- #define PATH_MAX 256
- #define PATH_SEP "/"
- #include <OpenDoor.h> // Now using odoors for c++
- #include <sqlite3.h>
- #if defined(_MSC_VER) || defined(WIN32)
- #define snprintf _snprintf
- #define strcasecmp _stricmp
- #include <winsock2.h>
- #ifndef _MSC_VER
- #define _MSC_VER 1
- #endif
- #else
- #include <arpa/inet.h>
- #endif
- #include <time.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <ctype.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h> // stat
- #include <string>
- std::string log_path = "logs";
- int inuse = 0;
- int debug = 0;
- int allowDev = 1;
- std::string sysop_pass = "spaceISbig";
- int randrange(int min, int max){
- return min + rand() / (RAND_MAX / (max - min + 1) + 1);
- }
- class user_info {
-
- int uid, experience, gun, fuel, metal, armor, shield, hitpoints, armorpoints, shieldpoints, shieldsup, laston;
- bool dirt;
- std::string nick;
- std::string real;
- public:
- void set_up(int uuid, std::string name, std::string realname, int exp, int lo, int a, int ap, int s, int sp, int su, int hp, int g, int m, int f) {
-
- uid = uuid;
- nick = name;
- real = realname;
- experience = exp;
- laston = lo;
- armor = a;
- armorpoints = ap;
- shield = s;
- shieldpoints = sp;
- shieldsup = su;
- hitpoints = hp;
- gun = g;
- metal = m;
- fuel = f;
- dirt = false;
- }
- void set_new(std::string name, std::string realname) {
-
- nick = name;
- real = realname;
- experience = 0;
- laston = 0;
- armor = 1;
- armorpoints = 8;
- shield = 0;
- shieldpoints = 0;
- shieldsup = 0;
- hitpoints = 4;
- gun = 1;
- metal = 0;
- fuel = 10;
- dirt = true;
- }
- bool dirty() {
-
- return dirt;
- }
- int calcArmor() {
-
- return (3 * (armor + 1));
- }
- int calcShield() {
-
- return (6 * (shield + 1));
- }
- int calcGun() {
-
- return (4 * (gun + 1));
- }
- int calcHP() {
-
- return (gun + armor + shield + 2);
- }
- int calcSP() {
-
- return (shield * 3);
- }
- int calcAP() {
-
- return (armor * 8);
- }
- void regen() {
-
- if(shieldsup != 0) {
- dirt = true;
- shieldsup -= 1;
- }
- if(shieldsup != 0) {
- dirt = true;
- shieldpoints += shield;
- } else {
- dirt = true;
- shieldpoints += 1;
- }
- if(shieldpoints > calcSP()) {
- dirt = true;
- shieldpoints = calcSP();
- }
- }
- void repair(bool docked) {
-
- int amount;
- if(docked) {
- amount = 4;
- } else {
- amount = 2;
- }
- if(armorpoints < calcAP()) {
- if(metal != 0) {
- dirt = true;
- metal -= 1;
- armorpoints += amount;
- if(armorpoints > calcAP()) {
- armorpoints = calcAP();
- }
- }
- }
- }
- void set_dirty(bool state) {
-
- dirt = state;
- }
- int takeDamage(int dmg) {
-
-
-
- if(shieldsup == 0) {
- if(shieldpoints >= dmg) {
-
- dirt = true;
- shieldpoints -= dmg;
- return 0;
- } else {
-
- dirt = true;
- dmg -= shieldpoints;
- shieldpoints = 0;
- }
- }
- if(dmg > 0) {
- if(armorpoints >= dmg) {
-
- dirt = true;
- armorpoints -= dmg;
- return 0;
- } else {
-
- dirt = true;
- dmg -= armorpoints;
- armorpoints = 0;
- }
- }
- if(dmg > 0) {
- if(hitpoints > dmg) {
-
- dirt = true;
- hitpoints -= dmg;
- return 0;
- } else {
-
-
- dirt = true;
- int temp = dmg;
- dmg -= hitpoints;
- hitpoints -= temp;
- temp = 0;
- return dmg;
- }
- }
- }
-
- void addEXP(int amount) {
- dirt = true;
- experience += amount;
- }
- void rmEXP(int amount) {
- dirt = true;
- experience -= amount;
- }
- void addMetal(int amount) {
- dirt = true;
- metal += amount;
- }
- void rmMetal(int amount) {
- dirt = true;
- metal -= amount;
- }
- void addFuel(int amount) {
- dirt = true;
- fuel += amount;
- }
- void rmFuel(int amount) {
- dirt = true;
- fuel -= amount;
- }
- void rmLaston(int amount) {
- dirt = true;
- laston -= amount;
- if(laston < 0) {
- laston = 0;
- }
- }
-
- void addHP(int amount) {
- dirt = true;
- hitpoints += amount;
- if(hitpoints > calcHP()) {
- hitpoints = calcHP();
- }
- }
- void addGun(int amount) {
- dirt = true;
- gun += amount;
- addHP(1);
- }
- void addArmor(int amount) {
- dirt = true;
- armor += amount;
- armorpoints += (amount * calcAP());
- addHP(1);
- }
- void addShield(int amount) {
- dirt = true;
- shield += amount;
- if(shieldsup == 0) {
- shieldpoints += (amount * calcSP());
- } else {
- shieldpoints += amount;
- }
- addHP(1);
- }
- void rmSU(int amount) {
- dirt = true;
- shieldsup -= amount;
- if(shieldsup > 0) {
- shieldsup = 0;
- }
- }
-
- void set_laston(int lo) {laston = lo;}
- void set_uid(int uuid) {uid = uuid;}
- void set_nick(std::string name) {nick = name;}
- void set_real(std::string name) {real = name;}
- void set_experience(int exp) {experience = exp;}
- void set_metal(int m) {metal = m;}
- void set_fuel(int f) {fuel = f;}
- void set_gun(int g) {gun = g;}
- void set_armor(int a) {armor = a;}
- void set_shield(int s) {shield = s;}
- void set_shieldsup(int su) {shieldsup = su;}
- void set_armorpoints(int ap) {armorpoints = ap;}
- void set_shieldpoints(int sp) {shieldpoints = sp;}
- void set_hitpoints(int hp) {hitpoints = hp;}
-
- int get_laston() {return laston;}
- int get_uid() {return uid;}
- std::string get_nick() {return nick;}
- std::string get_real() {return real;}
- int get_experience() {return experience;}
- int get_metal() {return metal;}
- int get_fuel() {return fuel;}
- int get_gun() {return gun;}
- int get_armor() {return armor;}
- int get_shield() {return shield;}
- int get_armorpoints() {return armorpoints;}
- int get_shieldpoints() {return shieldpoints;}
- int get_shieldsup() {return shieldsup;}
- int get_hitpoints() {return hitpoints;}
- };
- typedef struct dateTamp {
- int year;
- int month;
- int day;
- int age;
- } dT;
- void dolog(char *fmt, ...) {
-
- char buffer[PATH_MAX];
- struct tm *time_now;
- time_t timen;
- FILE *logfptr;
- timen = time(NULL);
- time_now = localtime(&timen);
- if (log_path != "") {
- snprintf(buffer, PATH_MAX, "%s%s%04d%02d%02d.log", log_path, PATH_SEP,
- time_now->tm_year + 1900, time_now->tm_mon + 1, time_now->tm_mday);
- } else {
- snprintf(buffer, PATH_MAX, "%04d%02d%02d.log", time_now->tm_year + 1900,
- time_now->tm_mon + 1, time_now->tm_mday);
- }
- logfptr = fopen(buffer, "a");
- if (!logfptr) {
- return;
- }
- va_list ap;
- va_start(ap, fmt);
- vsnprintf(buffer, 512, fmt, ap);
- va_end(ap);
- fprintf(logfptr, "%02d:%02d:%02d %s\n", time_now->tm_hour, time_now->tm_min,
- time_now->tm_sec, buffer);
- fclose(logfptr);
- }
- int dateStamp() {
-
- struct tm *time_now;
- time_t timen;
- int result = 0;
- timen = time(NULL);
- time_now = localtime(&timen);
- result += ((time_now->tm_year + 1900) * 10000);
- result += (time_now->tm_mon * 100) + 100;
- result += time_now->tm_mday;
- return result;
- }
- int compareDate(int dt) {
-
- struct tm *time_now;
- time_t timen;
- int now = 0;
- timen = time(NULL);
- time_now = localtime(&timen);
- now += ((time_now->tm_year + 1900) * 10000);
- now += (time_now->tm_mon * 100) + 100;
- now += time_now->tm_mday;
- return (now - dt);
- }
- dT fromDate(int diff) {
-
- dT result;
- result.year = diff / 10000;
- result.month = (diff / 100) % 100;
- result.day = diff % 100;
- result.age = 0;
-
- result.age += (365 * result.year);
- result.age += (30 * result.month);
- result.age += result.day;
- return result;
- }
- int db_test() {
-
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[256];
- char strbuffer[256];
- int sizeofdb = 0;
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
-
- strcpy(sqlbuffer, "SELECT * FROM user;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer), &stmt, NULL);
- while(sqlite3_step(stmt) == SQLITE_ROW) {
- od_printf("`white`%s=%d %s=%s %s=%s %s=%d %s=%d %s=%d %s=%d %s=%d %s=%d %s=%d %s=%d %s=%d %s=%d %s=%d\r\n",
- sqlite3_column_name(stmt, 0),
- sqlite3_column_int(stmt, 0),
- sqlite3_column_name(stmt, 1),
- sqlite3_column_text(stmt, 1),
- sqlite3_column_name(stmt, 2),
- sqlite3_column_text(stmt, 2),
- sqlite3_column_name(stmt, 3),
- sqlite3_column_int(stmt, 3),
- sqlite3_column_name(stmt, 4),
- sqlite3_column_int(stmt, 4),
- sqlite3_column_name(stmt, 5),
- sqlite3_column_int(stmt, 5),
- sqlite3_column_name(stmt, 6),
- sqlite3_column_int(stmt, 6),
- sqlite3_column_name(stmt, 7),
- sqlite3_column_int(stmt, 7),
- sqlite3_column_name(stmt, 8),
- sqlite3_column_int(stmt, 8),
- sqlite3_column_name(stmt, 9),
- sqlite3_column_int(stmt, 9),
- sqlite3_column_name(stmt, 10),
- sqlite3_column_int(stmt, 10),
- sqlite3_column_name(stmt, 11),
- sqlite3_column_int(stmt, 11),
- sqlite3_column_name(stmt, 12),
- sqlite3_column_int(stmt, 12),
- sqlite3_column_name(stmt, 13),
- sqlite3_column_int(stmt, 13)
- );
- sizeofdb += 1;
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- return sizeofdb;
- }
- int check_lock() {
-
- struct stat s;
- if (stat("lock.flg", &s) == 0) {
- return 1;
- } else {
- return 0;
- }
- }
- int grab_lock() {
-
- int valid = check_lock();
- FILE *fhandle;
- if (valid == 0) {
- fhandle = fopen("lock.flg", "w");
- if(!fhandle) {
- dolog("E: Unable to make lock.flg!");
- dolog("E: Something went wrong perhaps we don't have permissions?");
- return -1;
- }
- fprintf(fhandle, "I am in use already!\n");
- fclose(fhandle);
- return 1;
- } else {
- dolog("W: Lock already established!");
- return 0;
- }
- }
- void rel_lock() {
-
- int valid = check_lock();
- if (valid == 1) {
- if (unlink("lock.flg") != 0) {
- dolog("C: Unable to release lock.flg!");
- dolog("C: Something went wrong! Players might not be able to play now!");
- }
- } else {
- dolog("W: Lock already released!");
- }
- }
- void log_drop() {
-
- od_printf("`white`Name=%s Alias=%s TimeLeft=%d SecLevel=%d Location=%s Node=%d Sysop=%s\r\n",
- od_control.user_name,
- od_control.user_handle,
- od_control.user_timelimit,
- od_control.user_security,
- od_control.user_location,
- od_control.od_node,
- od_control.sysop_name
- );
- }
- void paws() {
-
- od_printf("`white`Press any key to continue...");
- od_get_key(TRUE);
- od_printf("\r\n");
- }
- int yesNo() {
- char ch;
- int done = 0;
- od_printf("`bright black`(`bright white`Y`bright black`)`white`es `bright black`(`bright red`N`bright black`)`red`o`white`");
- ch = od_get_answer("YyNn\r");
- od_printf("\r\n");
- switch(tolower(ch)) {
- case 'y':
- done = 1;
- break;
- case '\r':
- case 'n':
- break;
- }
- return done;
- }
- int locate_player(char name[]) {
-
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[256];
- int result = 0;
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
-
-
- strcpy(sqlbuffer, "SELECT * from user where real=? COLLATE NOCASE;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- sqlite3_bind_text(stmt, 1, name, strlen(name), SQLITE_STATIC);
- rc = sqlite3_step(stmt);
- if (rc == SQLITE_ROW) {
-
- result = sqlite3_column_int(stmt, 0);
- } else {
-
- dolog("W: Unable to locate user=%s", name);
- result = 0;
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- return result;
- }
- void check_database() {
-
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[256];
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("C: Failed opening database %s (%d)", sqlite3_errmsg(db), rc);
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
- strcpy(sqlbuffer, "SELCECT COUNT(*) FROM user;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- rc = sqlite3_step(stmt);
- if(rc == SQLITE_ROW) {
-
- } else {
-
- char *errmsg;
- rc = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS \"user\" (`uid` INTEGER PRIMARY KEY AUTOINCREMENT,`nick` TEXT,`real` TEXT,`experience` INTEGER,`metal` INTEGER,`fuel` INTEGER,`gun` INTEGER,`armor` INTEGER,`shield` INTEGER,`armorpoints` INTEGER,`shieldpoints` INTEGER,`hitpoints` INTEGER,`shieldsup` INTEGER,`laston` INTEGER);", NULL, NULL, &errmsg);
- dolog("W: Users table did not exist created with %d", rc);
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- }
- user_info* load_player(int uuid) {
-
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[256];
- user_info *result;
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
- strcpy(sqlbuffer, "SELECT * FROM user WHERE uid=?;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- sqlite3_bind_int(stmt, 1, uuid);
- rc = sqlite3_step(stmt);
- if (rc == SQLITE_ROW) {
-
- result->set_up(sqlite3_column_int(stmt, 0), sqlite3_column_text(stmt, 1), sqlite3_column_text(stmt, 2), sqlite3_column_int(stmt, 3), sqlite3_column_int(stmt, 13), sqlite3_column_int(stmt, 7), sqlite3_column_int(stmt, 9), sqlite3_column_int(stmt, 8), sqlite3_column_int(stmt, 10), sqlite3_column_int(stmt, 12), sqlite3_column_int(stmt, 11), sqlite3_column_int(stmt, 6), sqlite3_column_int(stmt, 4), sqlite3_column_int(stmt, 5));
- } else {
-
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- result->set_uid(0);
- return result;
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- return result;
- }
- user_info* highest_player() {
-
- int done = 0;
- user_info *test;
- int high = 0;
- int high_exp = 0;
- int id = 1;
- while(!done) {
- test = load_player(id);
- if(test->get_uid() != 0) {
- if(test->get_experience() > high_exp) {
-
- high_exp = test->get_experience();
- high = id;
- }
- } else {
- done = 1;
- }
- id += 1;
- }
- test = load_player(high);
- return test;
- }
- void update_player(user_info *data) {
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[1024];
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
-
-
-
- strcpy(sqlbuffer, "UPDATE user SET nick=?, experience=?, metal=?, fuel=?, gun=?, armor=?, shield=?, armorpoints=?, shieldpoints=?, hitpoints=?, shieldsup=?, laston=? WHERE uid=?;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
-
- sqlite3_bind_text(stmt, 1, data->get_nick(), data->get_nick().length(), SQLITE_STATIC);
- sqlite3_bind_int(stmt, 2, data->get_experience());
- sqlite3_bind_int(stmt, 3, data->get_metal());
- sqlite3_bind_int(stmt, 4, data->get_fuel());
- sqlite3_bind_int(stmt, 5, data->get_gun());
- sqlite3_bind_int(stmt, 6, data->get_armor());
- sqlite3_bind_int(stmt, 7, data->get_shield());
- sqlite3_bind_int(stmt, 8, data->get_armorpoints());
- sqlite3_bind_int(stmt, 9, data->get_shieldpoints());
- sqlite3_bind_int(stmt, 10, data->get_hitpoints());
- sqlite3_bind_int(stmt, 11, data->get_shieldsup());
- sqlite3_bind_int(stmt, 12, data->get_laston());
- sqlite3_bind_int(stmt, 13, data->get_uid());
-
- rc = sqlite3_step(stmt);
- if(rc != SQLITE_DONE) {
- dolog("E: failed updating player=%d got error %s (%d)", data->get_uid(), sqlite3_errmsg(db), rc);
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- }
- int create_player(user_info *data) {
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[1024];
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
- strcpy(sqlbuffer, "INSERT INTO user (nick, real, experience, metal, fuel, gun, armor, shield, armorpoints, shieldpoints, hitpoints, shieldsup, laston) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- sqlite3_bind_text(stmt, 1, data->get_nick(), data->get_nick().length(), SQLITE_STATIC);
- sqlite3_bind_text(stmt, 2, data->get_real(), data->get_real().length(), SQLITE_STATIC);
- sqlite3_bind_int(stmt, 3, data->get_experience());
- sqlite3_bind_int(stmt, 4, data->get_metal());
- sqlite3_bind_int(stmt, 5, data->get_fuel());
- sqlite3_bind_int(stmt, 6, data->get_gun());
- sqlite3_bind_int(stmt, 7, data->get_armor());
- sqlite3_bind_int(stmt, 8, data->get_shield());
- sqlite3_bind_int(stmt, 9, data->get_armorpoints());
- sqlite3_bind_int(stmt, 10, data->get_shieldpoints());
- sqlite3_bind_int(stmt, 11, data->get_hitpoints());
- sqlite3_bind_int(stmt, 12, data->get_shieldsup());
- sqlite3_bind_int(stmt, 13, data->get_laston());
- rc = sqlite3_step(stmt);
- if(rc != SQLITE_DONE) {
- dolog("E: failed inserting player=%d got error %s (%d)", data->get_nick(), sqlite3_errmsg(db), rc);
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- return 1;
- }
- void delete_players() {
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[256];
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
- strcpy(sqlbuffer, "DELETE FROM user;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- rc = sqlite3_step(stmt);
- if (rc != SQLITE_DONE){
- dolog("E: Delete_players 1/2, Unexpected error got %s (%d)", sqlite3_errmsg(db), rc);
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- strcpy(sqlbuffer, "UPDATE sqlite_sequence SET seq = 0 WHERE name='user';");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- rc = sqlite3_step(stmt);
- if (rc != SQLITE_DONE){
- dolog("E: Delete_players 2/2, Unexpected error got %s (%d)", sqlite3_errmsg(db), rc);
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- }
- int display_all_players() {
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[1024];
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
- strcpy(sqlbuffer, "SELECT * from user ORDER BY experience DESC, nick DESC;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- int total = 0;
- od_printf("`bright green`___ The Players ___\r\n");
- while(sqlite3_step(stmt) == SQLITE_ROW) {
- od_printf("`bright white` %s (%d)\r\n", sqlite3_column_text(stmt, 1), sqlite3_column_int(stmt, 3));
- total += 1;
- }
- if(total > 1) {
- od_printf("`green`There are a total of `bright green`%d`green` players\r\n", total);
- } else if(total == 0) {
- od_printf("`green`There are a total of `bright green`%d`green` players\r\n", total);
- } else {
- od_printf("`green`There are a total of `bright green`%d`green` player\r\n", total);
- }
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- return total;
- }
- int display_all_opponents(int us) {
- sqlite3 *db;
- sqlite3_stmt *stmt;
- char sqlbuffer[1024];
- int rc = sqlite3_open("spaceconstruct.db3", &db);
- if(rc) {
- dolog("E: failed opening database %s", sqlite3_errmsg(db));
- sqlite3_close(db);
- od_exit(-1, FALSE);
- }
- sqlite3_busy_timeout(db, 5000);
- strcpy(sqlbuffer, "SELECT * from user ORDER BY experience DESC, nick DESC;");
- sqlite3_prepare_v2(db, sqlbuffer, strlen(sqlbuffer) + 1, &stmt, NULL);
- int total = 1;
- od_printf("`bright green`___ Target List ___\r\n");
- while(sqlite3_step(stmt) == SQLITE_ROW) {
- if(total != us) {
- od_printf("`bright black`(`bright white`%d`bright black`) `bright white`%s (%d)\r\n", total, sqlite3_column_text(stmt, 1), sqlite3_column_int(stmt, 3));
- }
- total += 1;
- }
- total -= 1;
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- return total;
- }
- user_info* build_menu(user_info *my) {
- int done = 0;
- char ch;
- if(my->get_metal() != 0) {
- while(!done) {
- od_clr_scr();
- od_send_file("ansis/sc_build.ans");
-
- od_set_cursor(3, 15);
- od_printf("%5d", my->calcGun());
- od_set_cursor(4, 15);
- od_printf("%5d", my->calcArmor());
- od_set_cursor(5, 15);
- od_printf("%5d", my->calcShield());
- od_set_cursor(9, 1);
-
- od_printf("`bright yellow`You have %8d metal\r\n", my->get_metal());
- ch = od_get_answer("GgAaSsCcRr\r");
- switch(tolower(ch)) {
- case 'g':
- if(my->get_metal() >= my->calcGun()) {
- my->rmMetal(my->calcGun());
- my->addGun(1);
- od_printf("`bright green`Added a new gun!\r\n`white`");
- paws();
- } else {
- od_printf("`bright red`You don't have the %d metal for this!\r\n`white`", my->calcGun());
- paws();
- }
- break;
- case 'a':
- if(my->get_metal() >= my->calcArmor()) {
- my->rmMetal(my->calcArmor());
- my->addArmor(1);
- od_printf("`bright green`Added a new armor!\r\n`white`");
- paws();
- } else {
- od_printf("`bright red`You don't have the %d metal for this!\r\n`white`", my->calcArmor());
- paws();
- }
- break;
- case 's':
- if(my->get_metal() >= my->calcShield()) {
- my->rmMetal(my->calcShield());
- my->addShield(1);
- od_printf("`bright green`Added a new shield!\r\n`white`");
- paws();
- } else {
- od_printf("`bright red`You don't have the %d metal for this!\r\n`white`", my->calcShield());
- paws();
- }
- break;
- case '\r':
- case 'c':
- done = 1;
- break;
- case 'r':
- if(my->get_experience() >= 25) {
- if(my->get_metal() >= 25) {
- my->rmEXP(25);
- my->rmMetal(25);
- my->addFuel(5);
- od_printf("`bright green`Made 5 fuel using 25 experience and 25 metal!\r\n");
- paws();
- } else {
- od_printf("`bright red`You need 25 experience and 25 metal to make fuel!\r\n");
- paws();
- }
- } else {
- od_printf("`bright red`You need 25 experience and 25 metal to make fuel!\r\n");
- paws();
- }
- break;
- }
- }
- update_player(my);
- return my;
- } else {
- return my;
- }
- }
- void pvp_menu(user_info *my, user_info *targ) {
- int done = 0;
- int playerWon = 0;
- char ch;
-
- int temp_hp = targ->get_hitpoints();
- int temp_ap = targ->get_armorpoints();
- int temp_sp = targ->get_shieldpoints();
- int temp_su = targ->get_shieldsup();
-
- int targ_dmg = (targ->get_gun() + 1);
- targ->set_hitpoints(targ->calcHP());
- targ->set_armorpoints(targ->calcAP());
- targ->set_shieldpoints(targ->calcSP());
- targ->set_shieldsup(0);
-
- int fire = 0;
- int flee = 0;
- int regen = 0;
- int test = 0;
- int test2 = 0;
- while(!done) {
-
- if(temp_su != 0) {
- temp_su -= 1;
- }
- if(my->get_shieldsup() != 0) {
- my->rmSU(1);
- }
-
- if(targ->get_hitpoints() < targ->calcHP()) {
- regen = randrange(0, 100);
- if(regen >= 85) {
- targ->addHP(1);
- od_printf("`bright green`%s`green`'s crew repaired their hull for 1 point!\r\n", targ->get_nick());
- }
- }
- if(my->get_hitpoints() < my->calcHP()) {
- regen = randrange(0, 100);
- if(regen >= 90) {
- my->addHP(1);
- od_printf("`bright green`Your crew repaired your hull for 1 point!\r\n");
- }
- }
-
-
- regen = randrange(0, 100);
- if(regen >= 75) {
- targ->regen();
- }
- od_printf("`bright white`%s has `bright cyan`%d`bright white` shields, %d armor and %d hitpoints left\r\n", targ->get_nick(), temp_sp, temp_ap, temp_hp);
-
- regen = randrange(0, 100);
- if(regen >= 80) {
- my->regen();
- }
- od_printf("`bright white`Your ship has `bright cyan`%d`bright white` shields, %d armor and %d hitpoints left\r\n", my->get_shieldpoints(), my->get_armorpoints(), my->get_hitpoints());
-
- od_printf("`bright black`(`bright white`A`bright black`)`white`ttack\r\n");
- od_printf("`bright black`(`bright white`F`bright black`)`white`lee\r\n");
-
- ch = od_get_answer("AaFf\r");
- switch(tolower(ch)) {
- case '\r':
- case 'a':
- fire = randrange(0, 100);
- if(fire >= 50) {
-
- test = targ->takeDamage(my->get_gun());
- if(test == 0) {
- od_printf("`bright red`%s took %d damage!\r\n", targ->get_nick(), my->get_gun());
- } else {
- od_printf("`bright red`%s took %d damage, and blew up!\r\n", targ->get_nick(), my->get_gun());
- playerWon = 1;
- }
- } else {
- od_printf("`white`You missed!\r\n");
- }
- break;
- case 'f':
- flee = randrange(0, 100);
- if(flee >= 80) {
- playerWon = 3;
- done = 1;
- od_printf("`bright green`You ran away from %s!\r\n", targ->get_nick());
- } else {
- od_printf("`bright red`%s found you!\r\n", targ->get_nick());
- }
- break;
- }
- if(!playerWon) {
- fire = randrange(0, 100);
- if(fire >= 45) {
- test2 = my->takeDamage(targ_dmg);
- if(test2 == 0) {
- od_printf("`bright red`You took %d damage!\r\n", targ_dmg);
- } else {
- od_printf("`bright red`You took %d damage, and blew up!\r\n", targ_dmg);
- playerWon = 2;
- }
- }
- }
-
- if(playerWon) {
- switch(playerWon) {
- case 1:
- if(targ->get_experience()) {
- my->addEXP((targ->get_experience() / 2));
- targ->rmEXP((targ->get_experience() / 2));
- }
- if(targ->get_metal()) {
- my->addMetal((targ->get_metal() / 2));
- targ->rmMetal((targ->get_metal() / 2));
- }
- my->rmFuel(4);
- if(my->get_fuel() < 0) {
- my->set_fuel(0);
- }
- od_printf("`bright green`Congrats on defeating %s!\r\n`white`", targ->get_nick());
- break;
- case 2:
- if(my->get_experience()) {
- targ->addEXP((my->get_experience() / 2));
- my->rmEXP((my->get_experience() / 2));
- }
- if(my->get_metal()) {
- targ->addMetal((my->get_metal() / 2));
- my->rmMetal((my->get_metal() / 2));
- }
- my->rmFuel(4);
- if(my->get_fuel() < 0) {
- my->set_fuel(0);
- }
- od_printf("`bright red`Sorry for your loss! (We rebuild your ship)\r\n");
- my->set_hitpoints(4);
- my->set_armorpoints(8);
- my->set_shieldpoints(0);
- my->set_shieldsup(0);
- my->set_armor(1);
- my->set_shield(0);
- my->set_gun(1);
- break;
- case 3:
- my->rmFuel(4);
- if(my->get_fuel() < 0) {
- my->set_fuel(0);
- }
- break;
- }
- }
-
- targ->set_shieldsup(temp_su);
- targ->set_armorpoints(temp_ap);
- targ->set_hitpoints(temp_hp);
- targ->set_shieldpoints(temp_sp);
-
- update_player(targ);
- update_player(my);
- }
- }
- void combat_menu(user_info *my, int targ_hp, int targ_dmg, int asteroid) {
- int done = 0;
- int playerWon = 0;
- char ch;
- int armorRep = 0;
- int temp = 0;
- int temp1 = 0;
- int temp2 = 0;
- int temp_hp = targ_hp;
- int flee = 0;
- int fire = 0;
- int regen = 0;
- while(!done) {
- if(asteroid == 0) {
- od_printf("`bright white`Pirate has %d hitpoints left\r\n", targ_hp);
- } else if(asteroid == 1) {
- od_printf("`bright white`Asteroid has %d hitpoints left\r\n", targ_hp);
- } else if(asteroid == 2) {
- od_printf("`bright white`Unknown One has %d hitpoints left\r\n", targ_hp);
- }
-
- if(my->get_shieldsup() != 0) {
- my->rmSU(1);
- }
-
- if(my->get_hitpoints() < my->calcHP()) {
- regen = randrange(0, 100);
- if(regen >= 90) {
- my->addHP(1);
- }
- }
-
- regen = randrange(0, 100);
- if(regen >= 80) {
- my->regen();
- }
- od_printf("`bright white`Your ship has `bright cyan`%d`bright white` shields, %d armor and %d hitpoints left:\r\n", my->get_shieldpoints(), my->get_armorpoints(), my->get_hitpoints());
-
- od_printf("`bright black`(`bright white`A`bright black`)`white`ttack\r\n");
- if(my->get_armorpoints() < my->calcAP()) {
- od_printf("`bright black`(`bright white`R`bright black`)`white`epair Armor\r\n");
- armorRep = 1;
- }
- od_printf("`bright black`(`bright white`F`bright black`)`white`lee\r\n");
-
- ch = od_get_answer("AaRrFf\r");
- switch(tolower(ch)) {
- case '\r':
- case 'a':
- fire = rand() % 100;
- if(asteroid == 1) {
- fire -= 15;
- }
- if(fire >= 50) {
- targ_hp -= my->get_gun();
- if(targ_hp <= 0) {
- od_printf("`bright red`Target Destroyed!\r\n");
- done = 1;
- playerWon = 1;
- } else {
- od_printf("`bright red`Target took %d damage!\r\n", my->get_gun());
- }
- } else {
- od_printf("`white`You Missed!\r\n");
- }
- break;
- case 'r':
- if(armorRep) {
- my->repair(false);
- } else {
- od_printf("`bright yellow`You don't seem to need repairs!\r\n");
- }
- break;
- case 'f':
- flee = rand() % 100;
- if(asteroid == 1) {
- flee = 100;
- } else if(asteroid == 2) {
- flee = 0;
- }
- if(flee >= 82) {
- playerWon = 3;
- done = 1;
- od_printf("`bright green`You ran away!\r\n");
- } else {
- od_printf("`bright red`Target found you!\r\n");
- }
- break;
- }
- if(targ_hp > 0) {
- targ_dmg;
- fire = rand() % 100;
- if(asteroid == 1) {
- fire = 0;
- } else if(asteroid == 2) {
- fire += 5;
- }
- if(fire >= 40) {
- temp = my->takeDamage(targ_dmg);
- if(temp == 0) {
- od_printf("`bright red`You took %d damage!\r\n", targ_dmg);
- } else {
- od_printf("`bright red`You took %d damage, and blew up!\r\n", targ_dmg);
- playerWon = 2;
- }
- }
-
- }
-
- if(playerWon) {
- if(playerWon == 1) {
-
- my->addEXP((temp_hp + targ_dmg));
- my->addMetal(temp_hp);
- if(asteroid == 1) {
- my->addEXP(2);
- my->addMetal(2);
- } else if(asteroid == 2) {
- my->addEXP(6000);
- my->set_metal(0);
- my->set_fuel(2);
- }
- my->rmFuel(2);
- if(my->get_fuel() < 0) {
- my->set_fuel(0);
- }
- od_printf("`bright green`Congrats on your victory!\r\n`white`");
- } else if(playerWon == 2) {
-
- my->rmEXP((temp_hp + targ_dmg));
- my->rmMetal(temp_hp);
- my->rmFuel(3);
- if(my->get_experience() < 0) {
- my->set_experience(0);
- }
- if(my->get_metal() < 0) {
- my->set_metal(0);
- }
- if(my->get_fuel() < 0) {
- my->set_fuel(0);
- }
- od_printf("`bright red`Sorry for your loss! (We rebuild your ship)\r\n");
- my->set_hitpoints(4);
- my->set_armorpoints(8);
- my->set_shieldpoints(0);
- my->set_shieldsup(0);
- my->set_armor(1);
- my->set_shield(0);
- my->set_gun(1);
- } else if(playerWon == 3) {
-
- my->rmFuel(1);
- }
- }
- }
- update_player(my);
- }
- void about_game() {
- int done = 0;
- int page = 1;
- while(!done) {
- switch(page) {
- case 1:
- od_clr_scr();
- od_send_file("ansis/sc_doc_1.ans");
- paws();
- break;
- case 2:
- od_clr_scr();
- od_send_file("ansis/sc_doc_2.ans");
- paws();
- break;
- case 3:
- od_clr_scr();
- od_send_file("ansis/sc_doc_3.ans");
- paws();
- break;
- case 4:
- od_clr_scr();
- od_send_file("ansis/sc_doc_4.ans");
- paws();
- break;
- case 5:
- od_clr_scr();
- od_send_file("ansis/sc_doc_5.ans");
- paws();
- break;
- case 6:
- done = 1;
- break;
- }
- od_clr_scr();
- page += 1;
- }
- }
- void play_game() {
- int done = 0;
- char ch;
- char ch1[256];
- user_info *myself;
- user_info *myself2;
- user_info *testing;
- int reset = 0;
- int doRefuel = 0;
- int pirate_encounter = 0;
- int pirate_hp = 0;
- int pirate_dmg = 0;
- int asteroid = 0;
- int me = locate_player(od_control.user_name);
- int abort = 0;
- if(me != 0) {
-
- testing = load_player(me);
- if(testing->get_uid() != 0) {
- myself = load_player(me);
- }
- dT age = fromDate(compareDate(myself->get_laston()));
-
- if(age.age >= 30) {
- od_printf("`bright green`Since you haven't played a while we have reset your account!\r\n");
- me = 0;
- reset = 1;
- }
-
- if(age.age != 0) {
- doRefuel = 1;
- }
- }
- if(me != 0) {
- od_printf("`bright white`Welcome back `bright green`%s\r\n", myself->get_nick());
- dT age = fromDate(compareDate(myself->get_laston()));
- dolog("%s is now playing (G=%d A=%d S=%d F=%d M=%d AP=%d SP=%d (%d) HP=%d LO=%d or %d days)",
- myself->get_nick(), myself->get_gun(), myself->get_armor(), myself->get_shield(), myself->get_fuel(), myself->get_metal(), myself->get_armorpoints(),
- myself->get_shieldpoints(), myself->get_shieldsup(), myself->get_hitpoints(), myself->get_laston(), age.age);
- myself->set_laston(dateStamp());
- if(age.day != 0 || age.month != 0 || age.year != 0) {
- od_printf("`bright yellow`Haven't seen you for");
- }
- if(age.day != 0) {
- if(age.day > 1) {
- od_printf(" %d days", age.day);
- } else {
- od_printf(" %d day", age.day);
- }
- }
- if(age.month != 0) {
- if(age.month > 1) {
- od_printf(" %d months", age.month);
- } else {
- od_printf(" %d month", age.month);
- }
- }
- if(age.year != 0) {
- if(age.year > 1) {
- od_printf(" %d years", age.year);
- } else {
- od_printf(" %d year", age.year);
- }
- }
- if(age.day != 0 || age.month != 0 || age.year != 0) {
- od_printf("\r\n");
- }
- if(doRefuel) {
- if(myself->get_fuel() != 0) {
- myself->addFuel((age.age * 2));
- } else {
- myself->addFuel(((age.age * 2) + 10));
- od_printf("`bright green`For using all your fuel last time you get bonus fuel today!\r\n");
- }
- od_printf("`bright green`You now have %d fuel\r\n", myself->get_fuel());
- }
- update_player(myself);
- paws();
- } else {
- od_printf("`bright white`You look new here. (Hit Enter to abort)\r\n");
- while(done == 0) {
- od_printf("`bright yellow`What's your name: ");
- od_input_str(ch1, 26, 32, 126);
- od_printf("\r\n");
- if(strlen(ch1) > 0) {
-
- myself->set_nick(ch1);
- } else {
- od_clr_scr();
- abort = 1;
- done = 1;
- od_printf("`bright red`Ok, come back later then...`white`\r\n");
- paws();
- }
- if(abort == 0) {
- od_printf("`bright white`Are you sure you want to be called `bright green`%s\r\n");
- done = yesNo();
- if(done) {
- if(reset) {
- myself->set_up(myself->get_uid(), myself->get_nick(), myself->get_real(), 0, dateStamp(), 1, 8, 0, 0, 0, 4, 1, 0, 10);
- update_player(myself);
- } else {
- myself2->set_new(myself->get_nick(), od_control.user_name);
- create_player(myself2);
- myself = load_player(locate_player(od_control.user_name));
- }
- }
- }
- }
- done = 0;
- }
-
- if(abort == 0) {
- od_clr_scr();
- while(!done) {
- od_printf("`bright yellow`You have %d fuel left for today,\r\n", myself->get_fuel());
- if(myself->get_shieldsup() == 0) {
- od_printf("`bright yellow`Your ship has `bright cyan`%d`bright yellow` shields, %d armor and %d hitpoints left:\r\n", myself->get_shieldpoints(), myself->get_armorpoints(), myself->get_hitpoints());
- } else {
- od_printf("`bright yellow`Your ship has %d armor, `bright cyan`%d`bright yellow` shields and %d hitpoints left:\r\n", myself->get_shieldpoints(), myself->get_armorpoints(), myself->get_hitpoints());
- }
- if(myself->get_armorpoints() < myself->calcAP()) {
- od_printf("`bright black`(`bright white`R`bright black`)`white`epair Armor\r\n");
- }
- if(myself->get_shieldpoints() < myself->calcSP() || myself->get_shieldsup() != 0) {
- od_printf("`bright black`(`bright white`G`bright black`)`white`enerate Shields\r\n");
- }
- if(myself->get_fuel() >= 2) {
- od_send_file("ansis/sc_gameh.ans");
- ch = od_get_answer("SsHhBbQqRrGgLlVv");
- } else {
- od_send_file("ansis/sc_gamel.ans");
- ch = od_get_answer("BbQqRrGgLlVv");
- }
- od_clr_scr();
- switch(tolower(ch)) {
- case 's':
- if(myself->get_fuel() >= 1) {
- pirate_encounter = rand() % 100;
- if(pirate_encounter >= 75) {
- if(myself->get_experience() > 3000) {
- if(pirate_encounter >= 95) {
- od_printf("`bright yellow`You encounter the `bright red`Unknown One\r\n`white`");
- asteroid = 2;
- } else {
- od_printf("`bright yellow`You encounter a `bright red`Pirate\r\n`white`");
- asteroid = 0;
- }
- } else {
- od_printf("`bright yellow`You encounter a `bright red`Pirate\r\n`white`");
- asteroid = 0;
- }
- } else {
- od_printf("`bright yellow`You encounter a `bright red`Asteroid\r\n`white`");
- asteroid = 1;
- }
- if(asteroid == 0 || asteroid == 2) {
- pirate_hp = ((myself->get_hitpoints() + 1) + (randrange(0, 4)));
- if(asteroid == 2) {
- pirate_hp += 10;
- }
-
- pirate_dmg = (myself->get_experience() / 500);
- if(pirate_dmg == 0) {
- pirate_dmg = 1;
- }
- if(asteroid == 2) {
- pirate_dmg += 2;
- }
-
- combat_menu(myself, pirate_hp, pirate_dmg, asteroid);
- } else {
- pirate_hp = (myself->get_hitpoints() + 1) + (rand() % 10);
-
- combat_menu(myself, pirate_hp, 0, asteroid);
- }
- }
- break;
- case 'h':
- if(myself->get_fuel() >= 4) {
- int targs = display_all_opponents(myself->get_uid());
- int targg = 1;
- int done2 = 0;
- if(targg == myself->get_uid()) {
- targg += 1;
- }
- while(!done2) {
- od_printf("`bright red`Targetting: %d\r\n", targg);
- if(yesNo()) {
- done2 = 1;
- } else if(targg < targs){
- targg += 1;
- } else {
- done2 = 1;
- od_printf("`bright red`ABORTED!\r\n");
- break;
- }
- }
- user_info *targ = load_player(targg);
- if(targ->get_uid() != 0) {
-
- int proceed = 0;
- int temp = targ->get_experience() + 1000;
- int temp1 = targ->get_experience() - 500;
- if(temp1 > 0) {
- temp1 = 0;
- }
- if(temp > myself->get_experience() && temp1 < myself->get_experience()) {
- proceed = 1;
- }
- if(proceed) {
- pvp_menu(myself, targ);
- } else {
- od_printf("`bright white`Please select a opponent within your range of expertise!\r\n");
- break;
- }
- }
- } else {
- od_printf("`bright white`You need 4 fuel to fight another player!\r\n`white`");
- }
- break;
- case 'b':
- if(myself->get_metal() != 0) {
-
- od_clr_scr();
-
- myself = build_menu(myself);
- } else {
- od_printf("`bright white`I am sorry you have no metal go fight.`white`\r\n");
- }
- break;
- case 'q':
- done = 1;
- break;
- case 'r':
- if(myself->get_armorpoints() < (myself->get_armor() * 8)) {
- myself->repair(true);
- update_player(myself);
- } else {
- od_printf("`bright yellow`You don't seem to need repairs!\r\n`white`");
- }
- break;
- case 'g':
- if(myself->get_shieldpoints() < myself->calcSP() || myself->get_shieldsup() != 0) {
- myself->regen();
- update_player(myself);
- } else {
- od_printf("`bright yellow`You don't seem to need to regenerate shields!\r\n`white`");
- }
- break;
- case 'v':
- od_printf("`bright white` ___ %s's Ship Status ___\r\n", myself->get_nick());
- od_printf("`bright white`Items: # Installed: Metal to Upgrade:\r\n");
- od_printf("`bright red`Guns: %8d %8d\r\n", myself->get_gun(), myself->calcGun());
- od_printf("`bright yellow`Armor: %8d %8d\r\n", myself->get_armor(), myself->calcArmor());
- od_printf("`bright cyan`Shields: %8d %8d\r\n", myself->get_shield(), myself->calcShield());
- od_printf("`bright white`\r\n ___ Situation Report ___\r\n");
- od_printf("`bright white`Items: Maximum: Current:\r\n");
- od_printf("`bright green`Hitpoints: %8d %8d\r\n", myself->calcHP(), myself->get_hitpoints());
- od_printf("`bright yellow`Armor: %8d %8d\r\n", myself->calcAP(), myself->get_armorpoints());
- od_printf("`bright cyan`Shields: %8d %8d\r\n", myself->calcSP(), myself->get_shieldpoints());
- od_printf("`bright magenta`Experience: %8d\r\n", myself->get_experience());
- od_printf("`bright magenta`Fuel: %8d\r\n", myself->get_fuel());
- od_printf("`white`Metal: %8d\r\n", myself->get_metal());
- paws();
- od_clr_scr();
- break;
- }
- }
- }
- }
- void sysop_menu() {
- int done = 0;
- char ch;
- int targ_ply = 1;
- int targ_max = 0;
- int done1 = 0;
- user_info *targ;
- while(!done) {
- od_clr_scr();
- od_send_file("ansis/sc_sysop.ans");
- ch = od_get_answer("RrNnQq");
-
- switch(tolower(ch)) {
- case 'q':
- done = 1;
- break;
- case 'r':
- od_printf("`bright red`__ Reset ___\r\n");
- od_printf("`bright red`DANGER THIS WILL DELETE ALL PLAYERS IN GAME\r\n");
- if(yesNo() == 0) {
- od_printf("`bright red`ABORTED!\r\n");
- paws();
- break;
- }
- dolog("%s issued reset", od_control.user_handle);
- delete_players();
- paws();
- break;
- case 'n':
- od_printf("`bright red`__ New Day ___\r\n");
- while(!done1) {
- targ = load_player(targ_ply);
- if(targ->get_uid() != 0) {
- targ->rmLaston(1);
- update_player(targ);
- } else {
- done1 = 1;
- }
- targ_ply += 1;
- targ_max += 1;
- }
- od_printf("`bright red`%d players affected\r\n", (targ_max - 1));
- targ_ply = 1;
- targ_max = 0;
- done1 = 0;
- dolog("%s issued new day", od_control.user_handle);
- paws();
- break;
- }
- }
- od_clr_scr();
- }
- void cleanMe() {
- rel_lock();
- od_exit(0, FALSE);
- }
- void main_menu() {
-
- int done = 0;
- int done1 = 0;
- int targ_ply = 1;
- int targ_max = 0;
- user_info *targ;
- user_info *test;
- dT targ_age;
- dT test2;
- char targ_real[256];
- char ch;
- int auth;
- char sys[48];
-
- while(!done) {
- od_clr_scr();
- od_send_file("ansis/sc_main.ans");
- ch = od_get_answer("PpLlVvQqSsAa");
- od_clr_scr();
- switch(tolower(ch)){
- case 'q':
-
- done = 1;
- break;
- case 'p':
-
-
- test = highest_player();
- test2 = fromDate(compareDate(test->get_laston()));
- if(test->get_experience() >= 8000) {
- if(test2.age >= 3) {
- delete_players();
- dolog("Auto-Reset Occured!");
- od_printf("`bright green`Game has been reset!\r\n");
- paws();
- } else {
- int resetage = 3 - test2.age;
- od_printf("`bright green`%s has won the game!\r\n", test->get_nick());
- od_printf("`bright green`The Game will reset in %d days!\r\n", resetage);
- paws();
- break;
- }
- }
- play_game();
- break;
- case 'a':
- about_game();
- break;
- case 'l':
-
- display_all_players();
- paws();
- break;
- case 'v':
-
- od_clr_scr();
- od_printf("`bright yellow`_____________________________\r\n");
- od_printf("`bright yellow` Space Construct v%d.%d-%s\r\n", VERSION_MAJOR, VERSION_MINOR, VERSION_TYPE);
- od_printf("`bright yellow` By: Beanzilla\r\n");
- od_printf("`bright yellow` FsxNet 21:4/110\r\n");
- od_printf("`bright yellow` HappyNet 637:1/110\r\n");
- od_printf("`bright yellow`_____________________________\r\n");
- paws();
- break;
- case 's':
- auth = 0;
- if(allowDev && strcmp(od_control.user_handle, "Beanzilla") == 0) {
- od_printf("`bright green`Access Granted\r\n");
- auth = 1;
- } else {
- od_printf("`bright red`Sysop Password: ");
- strcpy(sys, "");
- od_input_str(sys, 32, 32, 126);
- od_clr_scr();
- if(sys == sysop_pass) {
- od_printf("`bright green`Access Granted\r\n");
- auth = 1;
- }
- }
-
- if(auth) {
- paws();
- sysop_menu();
- } else {
- od_printf("`bright red`Access Denied\r\n");
- paws();
- }
- break;
- }
- }
- }
- int main(int argc, char *argv[]) {
- od_parse_cmd_line(argc, argv);
-
- od_init();
- od_clr_scr();
- check_database();
-
- if (debug) {
- dolog("=== Debug ===");
- od_printf("`white`=== Debug ===\r\n");
- od_printf("DropFile...\r\n");
- log_drop();
- int test = check_lock();
- if (test == 0) {
- od_printf("Lock is: Avalible\r\n");
- od_printf("Database...\r\n");
- db_test();
- } else {
- od_printf("Lock is: Taken\r\n");
- od_printf("CANCELED Database Dump\r\n");
- }
- paws();
- od_clr_scr();
- } else {
- dolog("--- Debug ---");
- }
-
-
-
- }
|