- Removed backup.pl (for TXT servers) and vs9-to-vs8.php (outdated versions);

- Merged @killmonster2 with @killmonster tid:73632;
- Fixed bugreport:6764, auction code was misplaced;
- Follow up to r16753 (bugreport:6523), fixed bugreport:6673, using Gravitational Field with Safety Wall would keep the character immobilized. Blame myself, thankyou Lunar for the fix;
- Fixed bugreport:6514, @slaveclone wouldn't be targeted by monster. Thanks to zippy;
- Fixed bugreport:6837, some code was duplicated;
- Fixed bugreport:6768, removed some leftovers from TXT removal;
- Fixed bugreport:6868, Unequipping a weapon with Incantation Samurai card will not kill you if you have less than 999 hp and are on a non-pvp map;
- Fixed wrong bit field on ai field in mob_data structure. Credits to Ind.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16881 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
momacabu 2012-11-09 00:26:36 +00:00
parent 07512c2353
commit aae7d1d129
21 changed files with 29 additions and 215 deletions

View File

@ -1888,7 +1888,7 @@
4260,Wootan_Shooter_Card,Wootan Shooter Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDef,1; bonus2 bResEff,Eff_Confusion,2000; },{},{}
4261,Wootan_Fighter_Card,Wootan Fighter Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDef,1; bonus2 bResEff,Eff_Bleeding,2000; },{},{}
4262,Evil_Cloud_Hermit_Card,Cloud Hermit Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12029,RC_Plant,100; },{},{}
4263,Incant_Samurai_Card,Samurai Spector Card,6,20,,10,,,,,,,,2,,,,,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000; },{},{ heal -999,0; }
4263,Incant_Samurai_Card,Samurai Spector Card,6,20,,10,,,,,,,,2,,,,,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000; },{},{ if( (Hp <= 999) && !getmapflag(strcharinfo(3),6) && !getmapflag(strcharinfo(3),7) && !getmapflag(strcharinfo(3),8) ) { heal (1 - Hp), 0; } else { heal -999, 0; } }
4264,Wind_Ghost_Card,Wind Ghost Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"WZ_JUPITEL",3+7*(getskilllv("WZ_JUPITEL")==10),20; },{},{}
4265,Li_Me_Mang_Ryang_Card,Jing Guai Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12033,RC_Angel,100; },{},{}
4266,Eclipse_Card,Eclipse Card,6,20,,10,,,,,,,,4,,,,,{ bonus bVit,1; },{},{}

View File

@ -2168,7 +2168,7 @@
4260,Wootan_Shooter_Card,Wootan Shooter Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDef,1; bonus2 bResEff,Eff_Confusion,2000; },{},{}
4261,Wootan_Fighter_Card,Wootan Fighter Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDef,1; bonus2 bResEff,Eff_Bleeding,2000; },{},{}
4262,Evil_Cloud_Hermit_Card,Cloud Hermit Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12029,RC_Plant,100; },{},{}
4263,Incant_Samurai_Card,Samurai Spector Card,6,20,,10,,,,,,,,2,,,,,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000; },{},{ heal -999,0; }
4263,Incant_Samurai_Card,Samurai Spector Card,6,20,,10,,,,,,,,2,,,,,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000; },{},{ if( (Hp <= 999) && !getmapflag(strcharinfo(3),6) && !getmapflag(strcharinfo(3),7) && !getmapflag(strcharinfo(3),8) ) { heal (1 - Hp), 0; } else { heal -999, 0; } }
4264,Wind_Ghost_Card,Wind Ghost Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"WZ_JUPITEL",3+7*(getskilllv("WZ_JUPITEL")==10),20; },{},{}
4265,Li_Me_Mang_Ryang_Card,Jing Guai Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12033,RC_Angel,100; },{},{}
4266,Eclipse_Card,Eclipse Card,6,20,,10,,,,,,,,4,,,,,{ bonus bVit,1; },{},{}

View File

@ -1919,7 +1919,7 @@ REPLACE INTO `item_db` VALUES (4259,'Wooden_Golem_Card','Wooden Golem Card',6,20
REPLACE INTO `item_db` VALUES (4260,'Wootan_Shooter_Card','Wootan Shooter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Confusion,2000;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4261,'Wootan_Fighter_Card','Wootan Fighter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Bleeding,2000;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4262,'Evil_Cloud_Hermit_Card','Cloud Hermit Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12029,RC_Plant,100;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4263,'Incant_Samurai_Card','Samurai Spector Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000;',NULL,'heal -999,0;');
REPLACE INTO `item_db` VALUES (4263,'Incant_Samurai_Card','Samurai Spector Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000;',NULL,'if( (Hp <= 999) && !getmapflag(strcharinfo(3),6) && !getmapflag(strcharinfo(3),7) && !getmapflag(strcharinfo(3),8) ) { heal (1 - Hp), 0; } else { heal -999, 0; }');
REPLACE INTO `item_db` VALUES (4264,'Wind_Ghost_Card','Wind Ghost Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAutoSpell,"WZ_JUPITEL",3+7*(getskilllv("WZ_JUPITEL")==10),20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4265,'Li_Me_Mang_Ryang_Card','Jing Guai Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12033,RC_Angel,100;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4266,'Eclipse_Card','Eclipse Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bVit,1;',NULL,NULL);

View File

@ -2199,7 +2199,7 @@ REPLACE INTO `item_db_re` VALUES (4259,'Wooden_Golem_Card','Wooden Golem Card',6
REPLACE INTO `item_db_re` VALUES (4260,'Wootan_Shooter_Card','Wootan Shooter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Confusion,2000;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4261,'Wootan_Fighter_Card','Wootan Fighter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Bleeding,2000;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4262,'Evil_Cloud_Hermit_Card','Cloud Hermit Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12029,RC_Plant,100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4263,'Incant_Samurai_Card','Samurai Spector Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000;',NULL,'heal -999,0;');
REPLACE INTO `item_db_re` VALUES (4263,'Incant_Samurai_Card','Samurai Spector Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000;',NULL,'if( (Hp <= 999) && !getmapflag(strcharinfo(3),6) && !getmapflag(strcharinfo(3),7) && !getmapflag(strcharinfo(3),8) ) { heal (1 - Hp), 0; } else { heal -999, 0; }');
REPLACE INTO `item_db_re` VALUES (4264,'Wind_Ghost_Card','Wind Ghost Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAutoSpell,"WZ_JUPITEL",3+7*(getskilllv("WZ_JUPITEL")==10),20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4265,'Li_Me_Mang_Ryang_Card','Jing Guai Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12033,RC_Angel,100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4266,'Eclipse_Card','Eclipse Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bVit,1;',NULL,NULL);

View File

@ -90,8 +90,6 @@ bool mapif_elemental_delete(int ele_id) {
return true;
}
#ifndef TXT_SQL_CONVERT
static void mapif_elemental_send(int fd, struct s_elemental *ele, unsigned char flag) {
int size = sizeof(struct s_elemental) + 5;
@ -161,4 +159,3 @@ int inter_elemental_parse_frommap(int fd) {
}
return 1;
}
#endif //TXT_SQL_CONVERT

View File

@ -34,8 +34,4 @@ int inter_guild_charname_changed(int guild_id,int account_id, int char_id, char
int inter_guild_CharOnline(int char_id, int guild_id);
int inter_guild_CharOffline(int char_id, int guild_id);
//For the TXT->SQL converter.
int inter_guild_tosql(struct guild *g,int flag);
int inter_guildcastle_tosql(struct guild_castle *gc);
#endif /* _INT_GUILD_SQL_H_ */

View File

@ -22,7 +22,5 @@ void inter_party_sql_final(void);
int inter_party_leave(int party_id,int account_id, int char_id);
int inter_party_CharOnline(int char_id, int party_id);
int inter_party_CharOffline(int char_id, int party_id);
//Required for the TXT->SQL converter
int inter_party_tosql(struct party *p, int flag, int index);
#endif /* _INT_PARTY_SQL_H_ */

View File

@ -2179,12 +2179,11 @@ static int atkillmonster_sub(struct block_list *bl, va_list ap)
return 1;
}
void atcommand_killmonster_sub(const int fd, struct map_session_data* sd, const char* message, const int drop)
ACMD_FUNC(killmonster)
{
int map_id;
int map_id, drop_flag;
char map_name[MAP_NAME_LENGTH_EXT];
if (!sd) return;
nullpo_retr(-1, sd);
memset(map_name, '\0', sizeof(map_name));
@ -2194,26 +2193,13 @@ void atcommand_killmonster_sub(const int fd, struct map_session_data* sd, const
if ((map_id = map_mapname2mapid(map_name)) < 0)
map_id = sd->bl.m;
}
drop_flag = strcmp(command+1, "killmonster2");
map_foreachinmap(atkillmonster_sub, map_id, BL_MOB, drop);
map_foreachinmap(atkillmonster_sub, map_id, BL_MOB, -drop_flag);
clif_displaymessage(fd, msg_txt(165)); // All monsters killed!
return;
}
ACMD_FUNC(killmonster)
{
atcommand_killmonster_sub(fd, sd, message, 1);
return 0;
}
/*==========================================
*
*------------------------------------------*/
ACMD_FUNC(killmonster2)
{
atcommand_killmonster_sub(fd, sd, message, 0);
return 0;
}
@ -8866,7 +8852,7 @@ void atcommand_basecommands(void) {
ACMD_DEF2("monstersmall", monster),
ACMD_DEF2("monsterbig", monster),
ACMD_DEF(killmonster),
ACMD_DEF(killmonster2),
ACMD_DEF2("killmonster2", killmonster),
ACMD_DEF(refine),
ACMD_DEF(produce),
ACMD_DEF(memo),

View File

@ -5230,8 +5230,10 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if( !md->special_state.ai )
{ //Normal mobs
if( (target->type == BL_MOB && t_bl->type == BL_PC && ((TBL_MOB*)target)->special_state.ai < 4) ||
( t_bl->type == BL_MOB && !((TBL_MOB*)t_bl)->special_state.ai ) )
if(
( target->type == BL_MOB && t_bl->type == BL_PC && ( ((TBL_MOB*)target)->special_state.ai != 4 && ((TBL_MOB*)target)->special_state.ai != 1 ) ) ||
( t_bl->type == BL_MOB && !((TBL_MOB*)t_bl)->special_state.ai )
)
state |= BCT_PARTY; //Normal mobs with no ai are friends.
else
state |= BCT_ENEMY; //However, all else are enemies.

View File

@ -457,13 +457,6 @@ int elemental_change_mode(struct elemental_data *ed, int mode) {
return 1;
}
void elemental_damage(struct elemental_data *ed, int hp, int sp) {
if( hp )
clif_elemental_updatestatus(ed->master, SP_HP);
if( sp )
clif_elemental_updatestatus(ed->master, SP_SP);
}
void elemental_heal(struct elemental_data *ed, int hp, int sp) {
if( hp )
clif_elemental_updatestatus(ed->master, SP_HP);
@ -471,7 +464,7 @@ void elemental_heal(struct elemental_data *ed, int hp, int sp) {
clif_elemental_updatestatus(ed->master, SP_SP);
}
int elemental_dead(struct elemental_data *ed, struct block_list *src) {
int elemental_dead(struct elemental_data *ed) {
elemental_delete(ed, 1);
return 0;
}
@ -645,7 +638,6 @@ static int elemental_ai_sub_foreachclient(struct map_session_data *sd, va_list a
static int elemental_ai_timer(int tid, unsigned int tick, int id, intptr_t data) {
map_foreachpc(elemental_ai_sub_foreachclient,tick);
return 0;
}

View File

@ -67,9 +67,8 @@ int elemental_save(struct elemental_data *ed);
int elemental_change_mode_ack(struct elemental_data *ed, int mode);
int elemental_change_mode(struct elemental_data *ed, int mode);
void elemental_damage(struct elemental_data *ed, int hp, int sp);
void elemental_heal(struct elemental_data *ed, int hp, int sp);
int elemental_dead(struct elemental_data *ed, struct block_list *src);
int elemental_dead(struct elemental_data *ed);
int elemental_delete(struct elemental_data *ed, int reply);
void elemental_summon_stop(struct elemental_data *ed);

View File

@ -85,7 +85,7 @@ void merc_damage(struct homun_data *hd) {
clif_hominfo(hd->master,hd,0);
}
int merc_hom_dead(struct homun_data *hd, struct block_list *src)
int merc_hom_dead(struct homun_data *hd)
{
//There's no intimacy penalties on death (from Tharis)
struct map_session_data *sd = hd->master;

View File

@ -80,7 +80,7 @@ int merc_hom_recv_data(int account_id, struct s_homunculus *sh, int flag); //alb
struct view_data* merc_get_hom_viewdata(int class_);
int hom_class2mapid(int hom_class);
void merc_damage(struct homun_data *hd);
int merc_hom_dead(struct homun_data *hd, struct block_list *src);
int merc_hom_dead(struct homun_data *hd);
void merc_hom_skillup(struct homun_data *hd,int skillnum);
int merc_hom_calc_skilltree(struct homun_data *hd);
int merc_hom_checkskill(struct homun_data *hd,int skill_id);

View File

@ -20,7 +20,6 @@ void mail_clear(struct map_session_data *sd)
sd->mail.index = 0;
sd->mail.amount = 0;
sd->mail.zeny = 0;
sd->auction.amount = 0;
return;
}

View File

@ -344,14 +344,6 @@ int merc_data_received(struct s_mercenary *merc, bool flag)
return 1;
}
void mercenary_damage(struct mercenary_data *md, int hp, int sp)
{
if( hp )
clif_mercenary_updatestatus(md->master, SP_HP);
if( sp )
clif_mercenary_updatestatus(md->master, SP_SP);
}
void mercenary_heal(struct mercenary_data *md, int hp, int sp)
{
if( hp )
@ -360,7 +352,7 @@ void mercenary_heal(struct mercenary_data *md, int hp, int sp)
clif_mercenary_updatestatus(md->master, SP_SP);
}
int mercenary_dead(struct mercenary_data *md, struct block_list *src)
int mercenary_dead(struct mercenary_data *md)
{
merc_delete(md, 1);
return 0;

View File

@ -56,9 +56,8 @@ int merc_create(struct map_session_data *sd, int class_, unsigned int lifetime);
int merc_data_received(struct s_mercenary *merc, bool flag);
int mercenary_save(struct mercenary_data *md);
void mercenary_damage(struct mercenary_data *md, int hp, int sp);
void mercenary_heal(struct mercenary_data *md, int hp, int sp);
int mercenary_dead(struct mercenary_data *md, struct block_list *src);
int mercenary_dead(struct mercenary_data *md);
int merc_delete(struct mercenary_data *md, int reply);
void merc_contract_stop(struct mercenary_data *md);

View File

@ -121,7 +121,7 @@ struct mob_data {
char name[NAME_LENGTH];
struct {
unsigned int size : 2; //Small/Big monsters.
unsigned int ai : 3; //Special ai for summoned monsters.
unsigned int ai : 4; //Special ai for summoned monsters.
//0: Normal mob.
//1: Standard summon, attacks mobs.
//2: Alchemist Marine Sphere

View File

@ -11902,8 +11902,8 @@ static int skill_unit_effect (struct block_list* bl, va_list ap)
skill_id = group->skill_id;
//Target-type check.
if( !(group->bl_flag&bl->type && battle_check_target(&unit->bl,bl,group->target_flag)>0) && (flag&4) ) {
if( group->state.song_dance&0x1 || (group->src_id == bl->id && group->state.song_dance&0x2) )
if( !(group->bl_flag&bl->type && battle_check_target(&unit->bl,bl,group->target_flag)>0) ) {
if( flag&4 && ((group->src_id == bl->id && group->state.song_dance&0x2) || skill_get_inf2(skill_id)&INF2_SONG_DANCE) )
skill_unit_onleft(skill_id, bl, tick);//Ensemble check to terminate it.
} else {
if( flag&1 )

View File

@ -1224,8 +1224,8 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s
case BL_PC: pc_damage((TBL_PC*)target,src,hp,sp); break;
case BL_MOB: mob_damage((TBL_MOB*)target, src, hp); break;
case BL_HOM: merc_damage((TBL_HOM*)target); break;
case BL_MER: mercenary_damage((TBL_MER*)target,hp,sp); break;
case BL_ELEM: elemental_damage((TBL_ELEM*)target,hp,sp); break;
case BL_MER: mercenary_heal((TBL_MER*)target,hp,sp); break;
case BL_ELEM: elemental_heal((TBL_ELEM*)target,hp,sp); break;
}
if( src && target->type == BL_PC && ((TBL_PC*)target)->disguise ) {// stop walking when attacked in disguise to prevent walk-delay bug
@ -1248,9 +1248,9 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s
switch (target->type) {
case BL_PC: flag = pc_dead((TBL_PC*)target,src); break;
case BL_MOB: flag = mob_dead((TBL_MOB*)target, src, flag&4?3:0); break;
case BL_HOM: flag = merc_hom_dead((TBL_HOM*)target,src); break;
case BL_MER: flag = mercenary_dead((TBL_MER*)target,src); break;
case BL_ELEM: flag = elemental_dead((TBL_ELEM*)target,src); break;
case BL_HOM: flag = merc_hom_dead((TBL_HOM*)target); break;
case BL_MER: flag = mercenary_dead((TBL_MER*)target); break;
case BL_ELEM: flag = elemental_dead((TBL_ELEM*)target); break;
default: //Unhandled case, do nothing to object.
flag = 0;
break;

View File

@ -1,100 +0,0 @@
#!/usr/bin/perl
##########################################################################
# Athena用データバックアップツール
#
#  Athenaの各種データファイル*.txtをバックアップするツール
#
#-------------------------------------------------------------------------
# 設定方法
#  実行する時のカレントフォルダからのデータへのパス、ファイルのリストを
#  正しく設定します。バックアップ先のフォルダは自動作成されないので、
#  自分で作成しておく必要があります。
#  フォルダの最後の「/」は省略できません。
#
#  フォルダは引数でも指定できます。例>./backup ../save/ ./backup_data/
#  フォルダの最後の「/」は省略できません。
#
#  実行するとバックアップ先のフォルダへ、ファイル名に現在の日付と時刻を
#  つけてファイルをコピーします。
#
# * toolフォルダ内にbackup_dataフォルダを作成し、
#   athena.shの中に「./tool/backup ./save/ ./tool/backup_data/」
# という行を追加すると、athenaを起動するたびにバックアップが取れます
#
# 復元するときは引数に「-r 日付と時刻」を指定します。
#  またその後ろにフォルダを指定することも出来ます
#  例1> ./backup -r 200309191607
#  例2> ./backup -r 200309191607 ../save ./backup_data/
#  この例では2003/09/19の16:07分にバックアップしたデータを復元しています
#
#  復元するとき、Athenaディレクトリにあるデータは *.bak に名前を変更して
#  残しているので、いらない場合は rm *.bak などで消してください。
#
##########################################################################
$sdir="../save/"; #バックアップ元(Athenaのディレクトリ/save/)
$tdir="./backup_data/"; #バックアップ先
@files=( #ファイルのリスト
"account","athena","storage","party","guild","castle","pet"
);
#-------------------------------設定ここまで-----------------------------
if($ARGV[0]=~/^\-r$/i || $ARGV[0]=~/\-\-(recover|restore)/i){
#復元処理
$file=$ARGV[1];
$sdir=$ARGV[2]||$sdir;
$tdir=$ARGV[3]||$tdir;
&restorecopy($_) foreach @files;
exit(0);
}
#バックアップ処理
$sdir=$ARGV[0]||$sdir;
$tdir=$ARGV[1]||$tdir;
unless( -d $tdir ){
print "$0: \"$tdir\" : No such directory\n";
exit(1);
}
(undef,$min,$hour,$day,$month,$year)=localtime;
$file=sprintf("%04d%02d%02d%02d%02d",
$year+1900, $month+1, $day, $hour, $min );
&backupcopy($_) foreach @files;
exit(0);
sub backupcopy {
my($name)= @_;
system("cp $sdir$name.txt $tdir$name$file.txt");
}
sub restorecopy {
my($name)= @_;
unless( -f "$sdir$name.txt" ){
printf("$0: \"$sdir$name.txt\" not found!\n");
return 0;
}
unless( -f "$tdir$name$file.txt" ){
printf("$0: \"$tdir$name$file.txt\" not found!\n");
return 0;
}
rename "$sdir$name.txt","$sdir$name.bak";
system("cp $tdir$name$file.txt $sdir$name.txt");
}

View File

@ -1,46 +0,0 @@
<?php
// Visual Studio 9 to Visual Studio 8 project file converter
// author : theultramage
// version: 16. august 2008
?>
<?php
fwrite(STDERR, "VS9 to VS8 project file converter".PHP_EOL);
fwrite(STDERR, "---------------------------------".PHP_EOL);
if( @$_SERVER["argc"] < 2 )
{
fwrite(STDERR, "Usage: {$_SERVER["argv"][0]} file.vcproj".PHP_EOL);
exit();
}
$input = @$_SERVER["argv"][1];
$data = file($input);
if( $data === FALSE )
die("invalid input file '".$input."'");
fwrite(STDERR, "Converting {$input}...".PHP_EOL);
$eol = ( strstr($data[0], "\r\n") !== FALSE ) ? "\r\n" : "\n";
define("EOL", $eol);
foreach( $data as $line )
{
if( strstr($line,'Version="9,00"') !== FALSE )
fwrite(STDOUT, "\t".'Version="8,00"'.EOL);
else
if( strstr($line,'Version="9.00"') !== FALSE )
fwrite(STDOUT, "\t".'Version="8.00"'.EOL);
else
if( strstr($line,'TargetFrameworkVersion') !== FALSE )
;
else
if( strstr($line,'RandomizedBaseAddress') !== FALSE )
;
else
if( strstr($line,'DataExecutionPrevention') !== FALSE )
;
else // default
fwrite(STDOUT, $line);
}
fwrite(STDERR, "done.".PHP_EOL);
?>