|
|
- //gcc -m32 -fno-stack-protector -z execstack -no-pie blackmarket.c -o blackmarket
- #include <stdlib.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <string.h>
- #include <assert.h>
- #include <time.h>
- #include "blackmarket.h"
-
- #define BUFSIZE 0x1ff
-
- int diamond;
-
- void not_used(){
- system("/bin/sh");
- }
-
- Node *Node_create(){
- Node *node = malloc(sizeof(Node));
-
- assert(node != NULL);
-
- node->data = "";
- node->next = NULL;
- }
-
- List *List_create(){
- List *list = malloc(sizeof(List));
- assert(list != NULL);
-
- Node *node = Node_create();
- list->first = node;
- return list;
- }
-
- void List_append(List *list, char *str){
- assert(list != NULL);
- assert(str != NULL);
-
- Node *node = list->first;
- while(node->next != NULL){
- node = node->next;
- }
- node->data = str;
- node->next = Node_create();
- }
-
- int List_find(List *list, char *str){
- assert(list != NULL);
- assert(str != NULL);
-
- int index = 0;
- Node *node = list->first;
- while(node->next != NULL){
- int cmp = strcmp(str, node->data);
- if(cmp == 0){
- return index;
- }
- node = node->next;
- index++;
- }
- return -1;
- }
-
- int List_length(List *list){
- assert(list != NULL);
-
- Node *node = list->first;
- int length = 0;
- while(node->next != NULL){
- length++;
- node = node->next;
- }
- return length;
- }
-
- void Node_destroy(Node *node){
- assert(node != NULL);
- free(node);
- }
-
- void List_remove(List *list, int index){
- assert(list != NULL);
- if(index < 0){
- exit(0);
- }else{
- assert(index < List_length(list));
-
- if(index == 0){
- Node *node = list->first;
- list->first = list->first->next;
- Node_destroy(node);
- }else{
- Node *before = list->first;
- for(int i=1; i<index; ++i){
- before = before->next;
- index--;
- }
- Node *node = before->next;
- before->next = before->next->next;
- Node_destroy(node);
- }
- }
- }
-
- void List_print(List *list){
- if(list != NULL){
- printf("[");
- Node *node = list->first;
- if(node->next == NULL){
- printf("NULL");
- }
- while(node->next != NULL){
- printf("%s", node->data);
- node = node->next;
- if (node->next != NULL){
- printf(", ");
- }
- }
- printf("]\n");
- }
- }
-
- int sell_item(char *item){
- int current_wallet = 0;
-
- if(strcmp(item, "potatoes") == 0){
- printf("You've earn 50 wallet!\n");
- current_wallet = 50;
- return current_wallet;
- }else if(strcmp(item, "grape") == 0){
- printf("You've earn 100 wallet!\n");
- current_wallet = 100;
- return current_wallet;
- }else if(strcmp(item, "apel") == 0){
- printf("You've earn 60 wallet!\n");
- current_wallet = 60;
- return current_wallet;
- }
- }
-
- void message(){
- printf("You don't have enough wallet!\n");
- }
-
- void success_msg(char *item){
- printf("%s added to the list!\n", item);
- }
-
- void menu(){
-
- printf("+-----------------------+\n");
- printf("MASSIVE BLACKMARKET STORE\n");
- printf("+-----------------------+\n");
- printf("1. buy flag (200 Diamond)\n");
- printf("2. buy potatoes (50 Wallet)\n");
- printf("3. buy grape (100 Wallet)\n");
- printf("4. buy apel (60 Wallet)\n");
- printf("5. show items\n");
- printf("6. sell items\n");
- printf("7. check wallet\n");
- printf("8. check diamond\n");
- printf("9. get free diamond!\n");
- printf("10. exit\n");
- }
-
- int main(){
-
- List *l = List_create();
- char buffer[BUFSIZE+1], ans[2];
- int wallet = 300, temp, try = 0;
-
- LOOP:while(1){
- menu();
- printf(">>");
- fflush(stdout);
- scanf("%s", &ans);
- if(strcmp(ans, "1") == 0){
- if(diamond < 200){
- printf("Not enough diamond to buy flag!\nnothing to add.\n");
- goto LOOP;
- }else if(diamond >= 200){
- diamond = diamond - 200;
- List_append(l, "flag");
- success_msg("flag");
- goto LOOP;
- }
- }else if(strcmp(ans, "2") == 0){
- if(wallet < 50){
- message();
- goto LOOP;
- }
- success_msg("potatoes");
- wallet = wallet - 50;
- List_append(l, "potatoes");
- goto LOOP;
- }else if(strcmp(ans, "3") == 0){
- if(wallet < 100){
- message();
- goto LOOP;
- }
- success_msg("grape");
- wallet = wallet - 100;
- List_append(l, "grape");
- goto LOOP;
- }else if(strcmp(ans, "4") == 0){
- if(wallet < 60){
- message();
- goto LOOP;
- }
- success_msg("apel");
- wallet = wallet - 60;
- List_append(l, "apel");
- goto LOOP;
- }else if(strcmp(ans, "5") == 0){
- printf("\nYour Items :\n");
- List_print(l);
- goto LOOP;
- }else if(strcmp(ans, "6") == 0){
- getchar();
- printf("What items you want to sell ?\n");
- fflush(stdout);
- fgets(buffer, sizeof(buffer), stdin);
- printf("You sell : ");
- printf(buffer);
- strtok(buffer, "\n");
- int check = List_find(l, buffer);
- if(check == (-1)){
- printf("Not Found!\n");
- exit(1);
- }else{
- List_remove(l, List_find(l, buffer));
- wallet = wallet + sell_item(buffer);
- }
- }else if(strcmp(ans, "7") == 0){
- printf("\nYour Wallet : %d\n", wallet);
- goto LOOP;
- }else if(strcmp(ans, "8") == 0){
- printf("\nYour diamond : %d\n", diamond);
- goto LOOP;
- }else if(strcmp(ans, "9") == 0){
- try += 1;
- srand(time(NULL));
- int r = rand() % 10;
- if(try <= 4){
- printf("You get %d diamond\n", r);
- diamond = diamond + r;
- goto LOOP;
- }
- printf("No diamond for you!\n");
- goto LOOP;
- }else if(strcmp(ans, "10") == 0){
- printf("Thankyou for visiting!");
- exit(0);
- }else{
- fprintf(stderr, "Bad Request!\n");
- exit(0);
- }
- }
- }
|