패거리창고 소스

2007.04.12 11:39

그리움 조회 수:194 추천:67

☞패거리 창고 소스

#include "mtype.h"
#include "mstruct.h"
#include "mextern.h"

int save_fam_bank(str, obj_ptr)
char *str;
object *obj_ptr;
{

int fd;
long n;
char file[80];

sprintf(file, "%s/family/fam_bank/%s", PLAYERPATH, str);

fd = open(file, O_RDWR | O_BINARY, 0);

if(fd < 0) {
fd = open(file, O_RDWR | O_CREAT, ACC);

if(fd < 0)
return(-1);
}

n = write_obj(fd, obj_ptr, 0);

if(n <0)
return(-1);
close(fd);
return(0);

}

int load_fam_bank(str, obj_ptr)
char *str;
object *obj_ptr;
{

int fd;
long n;
char file[80];
object *bnk_ptr;

sprintf(file, "%s/family/fam_bank/%s", PLAYERPATH, str);
fd = open(file, O_RDONLY | O_BINARY, 0);

if(fd < 0) {
bnk_ptr = (object *)malloc(sizeof(object));
zero(bnk_ptr, sizeof(object));
bnk_ptr->shotsmax = 200;
bnk_ptr->value = 1000;
F_SET(bnk_ptr, OCONTN);
n = save_fam_bank(str, bnk_ptr);
free_obj(bnk_ptr);
return(-1);
}

*obj_ptr = (object *)malloc(sizeof(object));
n = read_obj(fd, *obj_ptr);

if(n < 0)
return(-1);
close(fd);
return(0);
}

int input_fam_bank(ply_ptr, cmnd)
creature *ply_ptr;
cmd *cmnd;
{

int fd, n;
object *cnt_ptr, *obj_ptr;
room *rom_ptr;
char bank[24];

fd = ply_ptr->fd;
rom_ptr = ply_ptr->parent_rom;

if(!(F_ISSET(ply_ptr->parent_rom, RFBANK) && \
F_ISSET(ply_ptr->parent_rom, RFAMIL))) {
print(fd, "\n여긴 패거리 창고가 아닙니다.");
return(0);
}

obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]);

if(!obj_ptr) {
print(fd, "\n무엇을 기증 하려고 하는지 모르겠습니다.");
return(0);
}

if((obj_ptr->type >= SHARP && obj_ptr->type <=MISSILE) && \
rom_ptr->special != 1) {
print(fd, "\n무기류 창고가 아닙니다.");
return(0);
}

if(obj_ptr->type == ARMOR && rom_ptr->special != 2) {
print(fd, "\n방어구류 창고가 아닙니다.");
return(0);
}

if((obj_ptr->type >= POTION &&obj_ptr->type <= SCROLL) && \
rom_ptr->special != 3) {
print(fd, "\n주술구류 창고가 아닙니다.");

if(cnt_ptr->shotscur >= cnt_ptr->shotsmax) {
print(fd, "\n창고 안에 더이상 넣을 수 없습니다.");
return(0);
}

if(obj_ptr->questnum && F_ISSET(obj_ptr, OEVENT) ply_ptr->class < DM) {
print(fd, "\n임무/이벤트 아이템은 개인은행을 이용하십시오.");
return(0);
}

if(F_ISSET(obj_ptr, OCONTN) && ply_ptr->class < DM) {
print(fd, "\n보따리 종류는 기증할 수 없습니다.");
return(0);
}
del_obj_crt(obj_ptr, ply_ptr);
add_obj_obj(obj_ptr, cnt_ptr);
cnt_ptr->shotscur++;
print(fd,"\n당신은 %1i%j 기증 하였습니다.", obj_ptr,"3");
broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 %1i%j 기증 하였습니다.",
ply_ptr, obj_ptr,"3");
savegame_nomsg(ply_ptr);
save_fam_bank(bank, cnt_ptr);
free_obj(cnt_ptr);
return(0);
}

int output_fam_bank(ply_ptr, cmnd)
creature *ply_ptr;
cmd *cmnd;
{

int fd, n;
object *cnt_ptr, *obj_ptr;
room *rom_ptr;
int cnt=0, i;
char bank[24];

fd = ply_ptr->fd;
rom_ptr = ply_ptr->parent_rom;

if(!(F_ISSET(ply_ptr->parent_rom, RFBANK) && \
F_ISSET(ply_ptr->parent_rom, RFAMIL))) {
print(fd, "\n여긴 패거리 창고가 아닙니다.");
return(0);
}

sprintf(bank, "%s-%d", family_str[ply_ptr->daily[DL_EXPND].max],
rom_ptr->special);

n = load_fam_bank(bank, &cnt_ptr);

if(n < 0) {
cnt_ptr = (object *)malloc(sizeof(object));
zero(cnt_ptr, sizeof(object));
cnt_ptr->shotsmax = 200;
F_SET(cnt_ptr, OCONTN);
}

for(i=0,cnt=0; i
if(ply_ptr->ready[i])
cnt++;
}

cnt += count_inv(ply_ptr, -1);

if(cmnd->num < 2) {
print(fd, "\n무엇을 꺼내시려고요?...[물건이름] [반출]");
return(0);
}

obj_ptr = find_obj(ply_ptr, cnt_ptr->first_obj, cmnd->str[1], cmnd->val[1]);

if(!obj_ptr) {
print(fd, "\n창고 안에 그런것은 없군요.");
return(0);
}

if((weight_ply(ply_ptr) + weight_obj(obj_ptr) > max_weight(ply_ptr) && \
cnt_ptr->parent_rom) || cnt>150) {
print(fd, "\n당신은 더이상 가질 수 없습니다.");
return(0);
}

cnt_ptr->shotscur--;
del_obj_obj(obj_ptr, cnt_ptr);
print(fd, "\n당신은 %1i%j 반출했습니다.", obj_ptr,"3");
broadcast_rom(fd, rom_ptr->rom_num, "\n패거리 창고에서 %M이 %1i%j 꺼냈습니다.",

ply_ptr, obj_ptr,"3");
add_obj_crt(obj_ptr, ply_ptr);
save_fam_bank(bank, cnt_ptr);
free_obj(cnt_ptr);
savegame_nomsg(ply_ptr);
return(0);
}

int fam_bank_inv(ply_ptr, cmnd)
creature *ply_ptr;
cmd *cmnd;
{

object *bnk_ptr;
room *rom_ptr;
int fd, n;
char str[2048];
char bank[24];

fd = ply_ptr->fd;
rom_ptr = ply_ptr->parent_rom;

if(!(F_ISSET(ply_ptr->parent_rom, RDEPOT) && \
F_ISSET(ply_ptr->parent_rom, RFAMIL))) {
print(fd, "\n여긴 패거리 창고가 아닙니다.");
return(0);
}

if(cmnd->num < 2) {
sprintf(bank, "%s-%d", family_str[ply_ptr->daily[DL_EXPND].max], \
rom_ptr->special);

n = load_family_bank(bank, &bnk_ptr);

if(n < 0) {
print(fd, "없음.");
bnk_ptr = (object *)malloc(sizeof(object));
zero(bnk_ptr, sizeof(object));
bnk_ptr->shotsmax = 200;
F_SET(bnk_ptr, OCONTN);
n = save_family_bank(bank, bnk_ptr);
free_obj(bnk_ptr);
}

else {

strcpy(str, "목록: ");
n = list_obj(&str[16], ply_ptr, bnk_ptr->first_obj);

if(n)
print(fd, "%s.\n", str);

else
print(fd, "없음.");
free_obj(bnk_ptr);
}

return(0);
}

else {

input_fam_bank(ply_ptr, cmnd);
}

return(0);
}


XE Login