2022-04-02 01:57:54 +02:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include "game.h"
|
|
|
|
#include "event.h"
|
|
|
|
#include "player.h"
|
2022-04-18 00:06:32 +02:00
|
|
|
#include "capacite.h"
|
2022-04-18 02:14:07 +02:00
|
|
|
#include "inventory.h"
|
2022-04-22 00:32:31 +02:00
|
|
|
#include "item.h"
|
2022-05-16 23:57:25 +02:00
|
|
|
#include "type.h"
|
2022-05-26 18:47:58 +02:00
|
|
|
#include "draw_util.h"
|
|
|
|
#include "talkable.h"
|
2022-04-02 01:57:54 +02:00
|
|
|
|
|
|
|
bool handle_event(struct Game *game, char const *event)
|
|
|
|
{
|
|
|
|
if(!strncmp(event, "give:", 5)) {
|
|
|
|
event += 5;
|
|
|
|
// Isoler le nom et la quantité
|
|
|
|
int len=strlen(event), qty=1;
|
|
|
|
char *star = strchr(event, '*');
|
2022-04-23 00:47:27 +02:00
|
|
|
char name[20];
|
2022-04-02 01:57:54 +02:00
|
|
|
if(star) len=star-event, qty=atoi(star+1);
|
2022-04-23 00:47:27 +02:00
|
|
|
strncpy(name,event,len);
|
|
|
|
name[len] = '\0';
|
|
|
|
while(qty) {
|
|
|
|
add_item_to_inventory(game, &game->player->inventory, get_item_from_name(name));
|
|
|
|
qty--;
|
|
|
|
}
|
2022-04-02 01:57:54 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if(!strncmp(event, "xp:", 3)) {
|
2022-12-07 00:17:18 +01:00
|
|
|
event += 3;
|
|
|
|
add_xp(game->player, atoi(event));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if(!strcmp(event, "hp:all")) {
|
|
|
|
reset_hp(game->player);
|
|
|
|
return true;
|
2022-04-02 01:57:54 +02:00
|
|
|
}
|
2022-04-23 00:47:27 +02:00
|
|
|
else if(!strncmp(event, "hp:", 3)) {
|
2022-12-07 00:17:18 +01:00
|
|
|
event += 3;
|
2022-05-26 18:47:58 +02:00
|
|
|
if(game->player->stats.pv != game->player->stats.max_pv) {
|
|
|
|
game->player->stats.pv += atoi(event);
|
|
|
|
if(game->player->stats.pv > game->player->stats.max_pv) game->player->stats.pv = game->player->stats.max_pv;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
2022-04-23 00:47:27 +02:00
|
|
|
}
|
|
|
|
else if(!strcmp(event, "pp:all")) {
|
|
|
|
reset_pp(game->player);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if(!strncmp(event, "pp:", 3)) {
|
2022-12-07 00:17:18 +01:00
|
|
|
event += 3;
|
|
|
|
return add_pp(game->player, atoi(event));
|
2022-04-23 00:47:27 +02:00
|
|
|
}
|
2022-05-16 23:57:25 +02:00
|
|
|
else if(!strncmp(event, "type:", 5)) {
|
2022-12-07 00:17:18 +01:00
|
|
|
event += 5;
|
2022-05-16 23:57:25 +02:00
|
|
|
int len=strlen(event);
|
|
|
|
char name[20];
|
|
|
|
strncpy(name,event,len);
|
|
|
|
name[len] = '\0';
|
2022-12-07 00:17:18 +01:00
|
|
|
change_type(game->player, getTypeFromName(name));
|
|
|
|
return true;
|
2022-05-16 23:57:25 +02:00
|
|
|
}
|
2022-04-18 00:06:32 +02:00
|
|
|
else if(!strncmp(event, "move:", 5)) {
|
2022-12-07 00:17:18 +01:00
|
|
|
event += 5;
|
|
|
|
add_move(game->player, get_move_id(atoi(event)));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if(!strncmp(event, "infotype:", 9)) {
|
|
|
|
event += 9;
|
|
|
|
int len=strlen(event);
|
|
|
|
char name[20];
|
|
|
|
strncpy(name,event,len);
|
|
|
|
name[len] = '\0';
|
|
|
|
drawTypeEffects(getTypeFromName(name));
|
|
|
|
return true;
|
2022-04-18 00:06:32 +02:00
|
|
|
}
|
2022-05-26 18:47:58 +02:00
|
|
|
else if(!strcmp(event, "zone:begin")) {
|
|
|
|
draw_dialog_text(game, "Bienvenue dans ce projet de RPG grandeur nature !;Voici une courte preview de ce qui est possible.");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if(!strcmp(event, "zone:musthave5")) {
|
|
|
|
if(game->player->stats.level < 5) {
|
|
|
|
draw_dialog_text(game, "Tu dois avoir au moins 5 niveaux pour passer.");
|
|
|
|
player_step_back(game->player);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
draw_dialog_text(game, "Tu possèdes au moins 5 niveaux, bravo.");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2022-04-02 01:57:54 +02:00
|
|
|
return false;
|
|
|
|
}
|