/*/ 배포 전 공성전에 관련된 기본 개념 /*/
// 공성전의 시간설정은 script_time.txt 에서 하실 수 있으며 입장가능시간 이후 10분동안 입장이 가능
// 공성전 중간에 공성전으로의 입장은 불가능
// 공성은 30분간 진행하며 수정은 알아서
// 공성전 도중 로그아웃시 대기실로 좌표되게끔은 script.txt의 pclogout에서 직접 하시길
/*/ 죄송하게도 메모장가지고만 짠거라 테스트는 안되있을 뿐 아니라 좌표들도 엉망입니다. /*/
/*/ 임의로 설정되어 있으며 설정 가능하게 세팅해 뒀으니 직접 수정해서 사용하시면 됩니다. /*/
ONLOGIN {
// 이 스크립트는 script.txt 내의 onlogin을 의미하며, 덮어서 사용하실 시 다른 부분에 오류가 발생할 수 있으니
// 짜집기 해서 사용하시기를 바랍니다.
set @sd, mysd();
set @time, callfunc("NOWTIME");
if($clan_clothes1_time + (86400*5) < @time)
{
if(get_equipitem(@sd, 1) == item2nameid("청룡의옷"))
{
set_unequipitem @sd, 1;
}
if(countitem(@sd, name2itemid("청룡의옷")) < 1)
{
broadcast 5, get_name(@sd) + "님의 아이템 정상회수 실패!";
broadcast 5, get_name(@sd) + "이 세계후를 보신 분은 스크린샷을 꼭 찍어 게시판에 올려주세요!";
}
delitem @sd, name2itemid("청룡의옷"), 1;
message @sd, 3, "청룡의옷 주었습니다.";
}
}
청룡의성대기실워프 {
set @sd, mysd();
set @id, myid();
if(#auto_fight == 0)
{
set @clanid, get_clanid(@sd);
if(get_level(@sd) < 56 || get_clanname(@clanid) != #blue_dragon_clan$)
{
warp @sd, get_mapid(), get_x(@id), get_y(@id)+2;
//북쪽으로 입장한다고 가정해서 캐릭터를 밑으로 내린거
message @sd, 3, "감히 접근할 수 없습니다.";
}
//공성전이 전혀 진행중이지 않을 경우에는 성을 먹은 문파만 입장 가능
if(get_clanname(@clanid) == #blue_dragon_clan$)
{
set @mapid, 0; // 청룡의성맵설정
set @map_x, 0; // 청룡의성워프좌표
set @map_y, 0;
warp @sd, @mapid, @map_x, @map_y;
}
}
else if(#auto_fight == 1)
{
set @mapid, 0; // 청룡의성대기실맵설정
set @map_x, 0; // 청룡의성대기실워프될x좌표
set @map_y, 0; // 청룡의성대기실워프될y좌표
warp @sd, @mapid, @map_x, @map_y;
}
else if(#auto_fight == 2)
{
warp @sd, get_mapid(), get_x(@id), get_y(@id)+2;
//북쪽으로 입장한다고 가정해서 캐릭터를 밑으로 내린거
message @sd, 3, "현재 공성전이 진행중입니다. 진행중에는 입장하실 수 없습니다.";
}
}
청룡의성입장 {
set @sd, mysd();
if(#auto_fight == 1)
{
set @pos, dialog(0, 0, 0, "정각부터 정상적으로 전장 입장이 가능합니다.\\n대기실을 벗어나시면 공성전에 참여하실 수 없으니 기다려 주시기 바랍니다.");
end;
}
else if(#auto_fight == 2)
{
set @now_time, callfunc("NOWTIME");
//function은 맨 아래에.. 현재 시간을 알아옵니다.
timecount @sd, 2, #auto_fight_end_time - @now_time;
//공성이 남은 시간만큼 타이머 걸어줍니다
set @mapid, 0; // 청룡의성맵아디
set @map_x, 0; // x좌표
set @map_y, 0; // y좌표
warp @sd, @mapid, @map_x, @map_y;
}
}
청룡의성 {
set @sd, mysd();
set @clanid(@sd);
if(#auto_fight != 0) end;
if(get_clanname(@clanid) == #blue_dragon_clan$)
{
set @pos, list2(@list, 0, 0, "안녕하세요?\\n무엇을 도와드릴까요?", "청룡의옷을 받고 싶습니다.");
if(@pos != 1) end;
if(@list == 1)
{
setarray @blue_dragon_clothes$[0], #type1_clothes_1$, #type1_clothes_2$, #type1_clothes_3$, #type1_clothes_4$, #type1_clothes_5$;
for(set @i, 0; @i < 5; set @i, @i+1)
{
if(@blue_dragon_clothes$[@i] == get_name(@sd)) goto next;
else if(@blue_dragon_clotes$[@i] == "")
{
set @blue_dragon_clothes$[@i], get_name(@sd);
additem @sd, name2itemid("청룡의옷"), 1;
message @sd, 3, "청룡의옷 얻었습니다.";
set $clan_clothes1_time, callfunc("NOWTIME");
goto last;
}
}
set @pos, dialog(0, 0, 0, "청룡의옷은 선착순 5명에 한해서 받으실 수 있습니다.");
goto next;
}
}
last:
set #type1_clothes_1$, @blue_dragon_clothes$[0];
set #type1_clothes_2$, @blue_dragon_clothes$[1];
set #type1_clothes_3$, @blue_dragon_clothes$[2];
set #type1_clothes_4$, @blue_dragon_clothes$[3];
set #type1_clothes_5$, @blue_dragon_clothes$[4];
next:
deletearray @blue_dragon_clothes[0], getarraysize(@blue_dragon_clothes);
end;
}
청룡의성말하기 {
set @id, objid();
if(#auto_fight == 1)
{
// 공성대기실의 입장을 알리는 변수
if(#auto_fight_type == 1)
{
// 공성전장이 청룡의성임을 알리는 변수 ( 청룡, 현무, 주작, 백호 순 )
set #auto_count, #auto_count + 1;
if(#auto_count = 150) // 10분 후
{
set #auto_fight, 2;
// 위의 변수가 2가 되면 공성전장으로 입장이 가능하며, 공성시작
)
else if(#auto_count == 600) // 공성시작 30분후
{
set @winner_id, obj_getxy(15,15); // 옥좌좌표를 15, 15 로 임의로 설정
if(@winner_id > 0)
{
set @target_sd, id2sd(@winner_id);
set @clanid, get_clanid(@target_sd);
broadcast 5, get_clanname(@clanid) + " 문파가 공성전에서 승리하였습니다!";
set_money @target_sd, get_money(@target_sd) + 5000000;
// 옥좌 점령자에게 500만전 지급
set #blue_dragon_clan$, get_clanname(@clanid);
// 위의 서버변수를 청룡의성을 소유한 문파의 이름을 저장한다고 가정
broadcast 5, "공성전이 종료되었습니다.";
broadcast 5, "공성전장의 사람들은 1분 후 주막으로 자동워프됩니다.";
}
else
//시간이 지났음에도 옥좌에 아무도 없으면
{
callfunc "FIGHTEND";
// function 은 맨 아래에..
broadcast 5, "공성이 종료되었습니다.";
// 공성종료
}
}
else if(#auto_count == 615) // 공성승리 이후 1분 후
{
callfunc "FIGHTEND";
// 공성전장을 20,50 짜리 맵으로 가정했을 경우 전체워프입니다
for(set @x, 0; @x < 20; set @x, @x+1)
{
for(set @y, 0; @y <= 25; set @y, @y+1)
{
set @target_id, obj_getxy(@x, @y);
if(@target_id > 0 && istype(@target_id) == 1)
{
set @target_sd, id2sd(@target_id);
warp @target_sd, 15, rand(4,6), rand(4,6);
}
}
for(set @y, 26; @y < 50; set @y, @y+1)
{
set @target_id, obj_getxy(@x, @y);
if(@target_id > 0 && istype(@target_id) == 1)
{
set @target_sd, id2sd(@target_id);
warp @target_sd, 15, rand(4,6), rand(4,6);
}
}
}
}
}
}
}
FUNC_FIGHTEND {
set #auto_count, 0;
set #auto_fight, 0;
if(#auto_fight_type == 4)
{
set $auto_fight_type, 1;
}
else
{
set #auto_fight_type, #auto_fight_type + 1;
}
set #auto_fight_end_time, 0;
return;
}
FUNC_NOWTIME {
set @second, gettime(1,0);
set @minute, gettime(2,0) * 60;
set @hour, gettime(3,0) * 3600;
set @day, gettime(4,0) * 86400;
set @month, gettime(5,0);
if(@month == 1 || @month == 3 || @month == 5 || @month == 7 || @month == 8 || @month == 10 || @month == 12)
{
set @month_time, @month * 2678400;
}
else if(@month == 2)
{
set @month_time, @month * 2505600;
}
else
{
set @month_time, @month * 2592000;
}
set @year, gettime(6,0) - 2010;
set @year_time, @year * (365*86400);
set @total, @second + @minute + @hour + @day + @month_time + @year_time;
return @total;
}