summaryrefslogblamecommitdiff
path: root/src/tmw-athena.patch
blob: 8104073d6882ddb9a0e08ede8bb1f5bba39764d7 (plain) (tree)



































































































































































































































                                                                                                                                                                                              
diff -ru athena/src/char/char.c athena-tmw/src/char/char.c
--- athena/src/char/char.c	2007-11-15 18:19:02.000000000 +0100
+++ athena-tmw/src/char/char.c	2007-11-15 17:58:30.000000000 +0100
@@ -91,7 +91,7 @@
 int autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
 int start_zeny = 500;
 int start_weapon = 1201;
-int start_armor = 2301;
+int start_armor = 1202;
 
 // Initial position (it's possible to set it in conf file)
 struct point start_point = {"new_1-1.gat", 53, 111};
@@ -768,7 +768,7 @@
 	if (dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29] != 5*6 || // stats
 	    dat[30] >= 9 || // slots (dat[30] can not be negativ)
 	    dat[33] <= 0 || dat[33] >= 20 || // hair style
-	    dat[31] >= 9) { // hair color (dat[31] can not be negativ)
+	    dat[31] >= 12) { // hair color (dat[31] can not be negativ)
 		char_log("Make new char error (invalid values): (connection #%d, account: %d) slot %d, name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d" RETCODE,
 		         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
 		return -1;
diff -ru athena/src/login/login.c athena-tmw/src/login/login.c
--- athena/src/login/login.c	2007-11-15 18:19:02.000000000 +0100
+++ athena-tmw/src/login/login.c	2007-11-15 17:58:24.000000000 +0100
@@ -1036,7 +1036,7 @@
 		if (newaccount) {
 			login_log("Attempt of creation of an already existant account (account: %s_%c, pass: %s, received pass: %s, ip: %s)" RETCODE,
 			          account->userid, account->userid[len+1], auth_dat[i].pass, account->passwd, ip);
-			return 1; // 1 = Incorrect Password
+			return 9; // 9 = Account already exists
 		}
 		ld = session[fd]->session_data;
 #ifdef PASSWORDENC
diff -ru athena/src/map/clif.c athena-tmw/src/map/clif.c
--- athena/src/map/clif.c	2007-11-15 18:19:02.000000000 +0100
+++ athena-tmw/src/map/clif.c	2007-11-15 17:59:24.000000000 +0100
@@ -3208,17 +3208,19 @@
  * �A�C�e���lj�����/���s
  *------------------------------------------
  */
-int clif_tradeitemok(struct map_session_data *sd,int index,int fail)
+int clif_tradeitemok(struct map_session_data *sd,int index,int amount,int fail)
 {
 	int fd;
 
 	nullpo_retr(0, sd);
 
 	fd=sd->fd;
-	WFIFOW(fd,0)=0xea;
+    WFIFOW(fd,0)=0x1b1;
+	//WFIFOW(fd,0)=0xea;
 	WFIFOW(fd,2)=index;
-	WFIFOB(fd,4)=fail;
-	WFIFOSET(fd,packet_len_table[0xea]);
+	WFIFOW(fd,4)=amount;
+    WFIFOB(fd,6)=fail;
+	WFIFOSET(fd,packet_len_table[0x1b1]);
 
 	return 0;
 }
@@ -7887,8 +7889,11 @@
 	if(sd->sc_data && ( sd->sc_data[SC_BLADESTOP].timer!=-1 || sd->sc_data[SC_BERSERK].timer!=-1 )) return;
 
 	if(sd->status.inventory[index].identify != 1) {		// ���Ӓ�
-		clif_equipitemack(sd,index,0,0);	// fail
-		return;
+		// Bjorn: Auto-identify items when equipping them as there
+		//  is no nice way to do this in the client yet.
+		sd->status.inventory[index].identify = 1;
+		//clif_equipitemack(sd,index,0,0);	// fail
+		//return;
 	}
 	//�y�b�g�p�����ł��邩�Ȃ���
 	if(sd->inventory_data[index]) {
diff -ru athena/src/map/clif.h athena-tmw/src/map/clif.h
--- athena/src/map/clif.h	2007-11-15 18:19:16.000000000 +0100
+++ athena-tmw/src/map/clif.h	2007-11-15 17:59:18.000000000 +0100
@@ -97,7 +97,7 @@
 int clif_traderequest(struct map_session_data *sd,char *name);
 int clif_tradestart(struct map_session_data *sd,int type);
 int clif_tradeadditem(struct map_session_data *sd,struct map_session_data *tsd,int index,int amount);
-int clif_tradeitemok(struct map_session_data *sd,int index,int fail);
+int clif_tradeitemok(struct map_session_data *sd,int index,int amount,int fail);
 int clif_tradedeal_lock(struct map_session_data *sd,int fail);
 int clif_tradecancelled(struct map_session_data *sd);
 int clif_tradecompleted(struct map_session_data *sd,int fail);
diff -ru athena/src/map/map.c athena-tmw/src/map/map.c
--- athena/src/map/map.c	2007-11-15 18:19:02.000000000 +0100
+++ athena-tmw/src/map/map.c	2007-11-15 17:59:25.000000000 +0100
@@ -1390,10 +1390,10 @@
  *------------------------------------------
  */
 static int map_readmap(int m,char *fn, char *alias) {
-	unsigned char *gat="";
+    unsigned char *gat = "";
 	int s;
 	int x,y,xs,ys;
-	struct gat_1cell {float high[4]; int type;} *p=NULL;
+	struct gat_1cell {char type;} *p;
 	int wh;
 	size_t size;
 
@@ -1401,28 +1401,34 @@
 	gat=grfio_read(fn);
 	if(gat==NULL)
 		return -1;
-
+	
 	printf("\rLoading Maps [%d/%d]: %-50s  ",m,map_num,fn);
 	fflush(stdout);
 
 	map[m].m=m;
-	xs=map[m].xs=*(int*)(gat+6);
-	ys=map[m].ys=*(int*)(gat+10);
-	map[m].gat = (unsigned char *)aCalloc(s = map[m].xs * map[m].ys,sizeof(unsigned char));
+	xs=map[m].xs=*(short*)(gat);
+	ys=map[m].ys=*(short*)(gat+2);
+	printf("\n%i %i\n", xs, ys);
+	map[m].gat = calloc(s = map[m].xs * map[m].ys, 1);
+	if(map[m].gat==NULL){
+		printf("out of memory : map_readmap gat\n");
+		exit(1);
+	}
+
 	map[m].npc_num=0;
 	map[m].users=0;
 	memset(&map[m].flag,0,sizeof(map[m].flag));
 	if(battle_config.pk_mode) map[m].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris]
 	wh=map_waterheight(map[m].name);
 	for(y=0;y<ys;y++){
-		p=(struct gat_1cell*)(gat+y*xs*20+14);
+		p=(struct gat_1cell*)(gat+y*xs+4);
 		for(x=0;x<xs;x++){
-			if(wh!=NO_WATER && p->type==0){
+			/*if(wh!=NO_WATER && p->type==0){
 				// ���ꔻ��
 				map[m].gat[x+y*xs]=(p->high[0]>wh || p->high[1]>wh || p->high[2]>wh || p->high[3]>wh) ? 3 : 0;
-			} else {
+			} else {*/
 				map[m].gat[x+y*xs]=p->type;
-			}
+			//}
 			p++;
 		}
 	}
@@ -1431,12 +1437,36 @@
 	map[m].bxs=(xs+BLOCK_SIZE-1)/BLOCK_SIZE;
 	map[m].bys=(ys+BLOCK_SIZE-1)/BLOCK_SIZE;
 	size = map[m].bxs * map[m].bys * sizeof(struct block_list*);
-	map[m].block = (struct block_list **)aCalloc(1,size);
-	map[m].block_mob = (struct block_list **)aCalloc(1,size);
+
+	map[m].block = calloc(size, 1);
+	if(map[m].block == NULL){
+		printf("out of memory : map_readmap block\n");
+		exit(1);
+	}
+
+	map[m].block_mob = calloc(size, 1);
+	if (map[m].block_mob == NULL) {
+		printf("out of memory : map_readmap block_mob\n");
+		exit(1);
+	}
+
 	size = map[m].bxs*map[m].bys*sizeof(int);
-	map[m].block_count = (int *)aCalloc(1,size);
-	map[m].block_mob_count=(int *)aCalloc(1,size);
-           strdb_insert(map_db,map[m].name,&map[m]);
+
+	map[m].block_count = calloc(size, 1);
+	if(map[m].block_count==NULL){
+		printf("out of memory : map_readmap block\n");
+		exit(1);
+	}
+	memset(map[m].block_count,0,size);
+
+	map[m].block_mob_count=calloc(size, 1);
+	if(map[m].block_mob_count==NULL){
+		printf("out of memory : map_readmap block_mob\n");
+		exit(1);
+	}
+	memset(map[m].block_mob_count,0,size);
+
+	strdb_insert(map_db,map[m].name,&map[m]);
 
 //	printf("%s read done\n",fn);
 
diff -ru athena/src/map/pc.c athena-tmw/src/map/pc.c
--- athena/src/map/pc.c	2007-11-15 18:19:02.000000000 +0100
+++ athena-tmw/src/map/pc.c	2007-11-15 17:59:19.000000000 +0100
@@ -6110,6 +6110,7 @@
 	nameid = sd->status.inventory[n].nameid;
 	id = sd->inventory_data[n];
 	pos = pc_equippoint(sd,n);
+
 	if(battle_config.battle_log)
 		printf("equip %d(%d) %x:%x\n",nameid,n,id->equip,pos);
 	if(!pc_isequip(sd,n) || !pos || sd->status.inventory[n].broken==1 ) { // [Valaris]
diff -ru athena/src/map/trade.c athena-tmw/src/map/trade.c
--- athena/src/map/trade.c	2007-11-15 18:19:02.000000000 +0100
+++ athena-tmw/src/map/trade.c	2007-11-15 17:59:18.000000000 +0100
@@ -98,7 +98,7 @@
 				if(sd->deal_item_amount[trade_i] == 0){
 					trade_weight+=sd->inventory_data[index-2]->weight*amount;
 					if(target_sd->weight + trade_weight > target_sd->max_weight){
-						clif_tradeitemok(sd,index,1); //fail to add item -- the player was over weighted.
+						clif_tradeitemok(sd,index,0,1); //fail to add item -- the player was over weighted.
                                                 amount = 0; // [MouseJstr]
 					}else{
 						for(c=0; c==trade_i-1;c++){ // re-deal exploit protection [Valaris]
@@ -109,7 +109,7 @@
 						}
 						sd->deal_item_index[trade_i] =index;
 						sd->deal_item_amount[trade_i]+=amount;
-						clif_tradeitemok(sd,index,0); //success to add item
+						clif_tradeitemok(sd,index,amount,0); //success to add item
 						clif_tradeadditem(sd,target_sd,index,amount);
 					}
 					break;
@@ -143,7 +143,7 @@
 	
 	if((target_sd = map_id2sd(sd->trade_partner)) != NULL){
 		sd->deal_locked=1;
-		clif_tradeitemok(sd,0,0);
+		clif_tradeitemok(sd,0,0,0);
 		clif_tradedeal_lock(sd,0);
 		clif_tradedeal_lock(target_sd,1);
 	}