Jump to content

Santafe

Members
  • Posts

    325
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Santafe

  1. 2 hours ago, Alayne said:

    Yeah the disablenpc will disable it as said ans I dunno if when disabled the onclock, which is inside the same npc, will un hide it. To be tested. 

    For the menu can you make a screen I don't understand sorry ^^'. The items are in the array you need to fill it I used dummy data. 

    5a17c60f60c5a_Test1(5).thumb.jpg.776c3a221e64c67da9a75a8e9b35f3b0.jpg5a17c6042497b_Test1(3).thumb.jpg.899904b4cc1f2d5efb3e182fcdc2ef3c.jpg5a17c5fee51fc_Test1(2).thumb.jpg.276e81afaf479e37f3de44b6474b423c.jpg5a17c646b55bb_Test1(4).thumb.jpg.c6e90c4bb956c2bf064849a122674e9b.jpg5a17c646b55bb_Test1(4).thumb.jpg.c6e90c4bb956c2bf064849a122674e9b.jpg5a17c60f60c5a_Test1(5).thumb.jpg.776c3a221e64c67da9a75a8e9b35f3b0.jpg5a17c6042497b_Test1(3).thumb.jpg.899904b4cc1f2d5efb3e182fcdc2ef3c.jpg

    The menu is split into 2 ( meaning, when i click the "3" option, it goes to a new option with 3 and exchange with carrot as a new menu again ) 

  2. 49 minutes ago, Scanty said:
    
    hideoffnpc strnpcinfo(3);

    to

    
    disablenpc strnpcinfo(0);

    Maybe?

    Yea that actually worked, thanks! but i donno if it would reappear when the OnClock happens,

    Also @Alayne the menu when I talk to npc seems to be messed up like, "What do you want to do" >> options are : 

    3

    exchange for carrot

    i cant exchange for anything else but a carrot or a grape :o

  3. Hey everyone,

    I would like to request a unique item exchanger. Lets say there are 4 items a,b,c,d. The exchanger can exchange item "a" for b/c/d / item "b" for a/c/d and so on. This exchanger also appears only at a particular day? like OnFriday with an OnClock ? and also there is an announcement when he arrives and leaves. He disappears after 1 hour (hidenpc?) 

    Thanks and Regards ,

    Santa :D

  4. 9 hours ago, sader1992 said:
    
    -	script	mall_command	-1,{
    OnMall:
    	if(getmapflag(strcharinfo(3),mf_town)){
    		warp "quiz_02",0,0;
    	}else{
    		message strcharinfo(0),"you have to be in town to use this command";
    	}
    end;
    OnInit:
    	bindatcmd("mall",strnpcinfo(3)+"::OnMall",0,99);
    }

     

    oh ma gerd works like a charm ty Sader <3 

    @Alayne thanks for your help too <3

  5. 6 hours ago, Alayne said:

    Can't test it but this should do the job

     

    
    
    
    prontera,119,42,0	script	AtCommand::alaatcom	HIDDEN_WARP_NPC,{
    	end;
    	
    OnWarpAsked:
    
    	freeloop 1;
    	.@continue = 1;
    	for( .@i = 0; .@i<getarraysize(.townMap$) && .@continue == 1; .@i++)
    	{
    		if(.townMap$[.@i] == strcharinfo(3))
    		{
    			.@continue = 0;
    		}
    	}
    	freeloop 0;
    	
    	if(.@continue == 0)
    	{
    		warp .warpMap$, .warpX, .warpY;
    	}
    	else
    	{
    		dispbottom "[Warp System] You must be in town to use this command";
    	}	
    	return 1;
    
    OnInit:
    	bindatcmd "toquiz",strnpcinfo(3)+"::OnWarpAsked";
    	.warpMap$ = "quiz_02";
    	.warpX = 0;
    	.warpY = 0;
    	setarray .townMap$[0],"prontera","geffen","alberta"; //to fill
    	end;
    }

     

    Hello, thanks for the scrip, the command works but i get this warning and debug everytime i use it :

    [warning]: script:run_func:AtCommand at prontera (119,42)
    [debug]: Source(NPC): AtCommand at prontera (119,42)

     

  6. 4 hours ago, whodhell said:

    i enable the mission hunting quest on rathena

    i got this error

    
    [Warning]: script:op_2num: overflow detected op=C_MUL i1=47 i2=690130000
    [Debug]: Source (NPC): Hunting Missions at prontera (145,172)
    [Warning]: script:op_2num: overflow detected op=C_MUL i1=47 i2=307900000
    [Debug]: Source (NPC): Hunting Missions at prontera (145,172)
    

    here is the script

    
    //===== rAthena Script =======================================
    //= Hunting Missions
    //===== By: ==================================================
    //= Euphy
    //===== Current Version: =====================================
    //= 1.4
    //===== Compatible With: ===================================== 
    //= rAthena Project
    //===== Description: =========================================
    //= Random hunting missions.
    //= Rewards are based on quest difficulty.
    //= 
    //= NOTE: Requires SQL mob database.
    //===== Additional Comments: =================================
    //= 1.0 Initial script.
    //= 1.1 Small improvements and fixes.
    //= 1.2 Added party support and replaced blacklists with an
    //=     SQL query, both thanks to AnnieRuru.
    //= 1.3 Re-added a blacklist adapted for the SQL query.
    //= 1.3a Added mission reset options.
    //= 1.3b Function updates.
    //= 1.4 Check for deleted characters, thanks to AnnieRuru.
    //=     Syntax updates and style cleaning.
    //============================================================
    
    prontera,145,172,5	script	Hunting Missions	951,{
    function Chk;
    	mes "[Hunting Missions]";
    	mes "Hello, " + strcharinfo(0) + "!";
    	if (!#Mission_Delay) {
    		next;
    		mes "[Hunting Missions]";
    		mes "I can't find any records...";
    		mes "You must be new here!";
    		emotion e_omg;
    		next;
    		callsub Mission_Info;
    		emotion e_go;
    		#Mission_Delay = 1;
    		close;
    	}
    	mes rand(2) ? "Working hard, as always..." : "Not slacking, I hope...";
    	mes "Is there anything I can help";
    	mes "you with?";
    	mes " ";
    	mes "^777777~ You've completed " + callfunc("F_InsertPlural",Mission_Total,"mission",0,"^0055FF%d^777777 %s") + ". ~^000000";
    	next;
    	switch(select(
    		((!Mission0) ? " ~ New Mission::" : ": ~ Mission Status: ~ Abandon Mission") +
    		": ~ Information: ~ Mission Shop: ~ View Top Hunters: ~ ^777777Cancel^000000"
    	)) {
    	case 1:
    		mes "[Hunting Missions]";
    		if (#Mission_Count) {
    			mes "You've started a mission";
    			mes "on another character.";
    			if (!@hm_char_del_check) {  // check for deleted character
    				query_sql("SELECT 1 FROM `char_reg_num` WHERE `key` = 'Mission0' AND `char_id` IN(SELECT `char_id` FROM `char` WHERE `account_id` = " + getcharid(3) + ")", .@i);
    				if (!.@i) {
    					next;
    					mes "[Hunting Missions]";
    					mes "I can't seem to find any records";
    					mes "for that character, though...";
    					mes "One moment, please.";
    					emotion e_hmm;
    					#Mission_Count = 0;
    				}
    				@hm_char_del_check = 1;
    			}
    			close;
    		}
    		if (#Mission_Delay > gettimetick(2) && .Delay) {
    			mes "I'm afraid you'll have to wait " + callfunc("Time2Str",#Mission_Delay) + " before taking another mission.";
    			close;
    		}
    		mes "You must hunt:";
    		query_sql("SELECT ID FROM `" + .mob_db$ + "` WHERE left(Sprite, 4) != 'meta' AND left(Sprite, 2) != 'E_' AND ~Mode & 32 AND EXP > 0 AND MVP1id = 0 AND DropCardid > 4000 AND DropCardid < 5000 AND ID < 2000 AND instr('"+.Blacklist$+"',ID) = 0 ORDER BY rand() LIMIT " + .Quests, .@mob);
    		for (.@i = 0; .@i < .Quests; .@i++) {
    			setd "Mission" + .@i, .@mob[.@i];
    			setd "Mission" + .@i +"_", 0;
    		}
    		#Mission_Count = rand(.Count[0], .Count[1]);
    		callsub Mission_Status;
    		next;
    		mes "[Hunting Missions]";
    		mes "Report back when";
    		mes "you've finished.";
    		mes "Good luck!";
    		close;
    	case 2:
    		mes "[Hunting Missions]";
    		mes "Mission status:";
    		callsub Mission_Status;
    		close;
    	case 3:
    		mes "[Hunting Missions]";
    		mes "Do you really want to";
    		mes "abandon your mission?";
    		if (.Reset < 0 && .Delay)
    			mes "Your delay time will not be reset.";
    		else if (.Reset > 0)
    			mes "It will cost " + callfunc("F_InsertComma",.Reset) + " Zeny.";
    		next;
    		switch(select(" ~ Abandon...: ~ ^777777Cancel^000000")) {
    		case 1:
    			if (.Reset > 0) {
    				if (Zeny < .Reset) {
    					mes "[Hunting Missions]";
    					mes "You don't have enough";
    					mes "Zeny to drop this mission.";
    					emotion e_sry;
    					close;
    				}
    				Zeny -= .Reset;
    				emotion e_cash;
    			}
    			mes "[Hunting Missions]";
    			mes "Alright, I've dropped";
    			mes "your current mission.";
    			specialeffect2 EF_STORMKICK4;
    			for (.@i = 0; .@i < .Quests; .@i++) {
    				setd "Mission"+.@i, 0;
    				setd "Mission"+.@i+"_", 0;
    			}
    			#Mission_Count = 0;
    			if (.Reset < 0 && .Delay)
    				#Mission_Delay = gettimetick(2) + (.Delay * 3600);
    			close;
    		case 2:
    			mes "[Hunting Missions]";
    			mes "I knew you were kidding!";
    			mes "Keep up the good work.";
    			emotion e_heh;
    			close;
    		}
    	case 4:
    		callsub Mission_Info;
    		close;
    	case 5:
    		mes "[Hunting Missions]";
    		mes "You have ^0055FF" + #Mission_Points + "^000000 Mission Points.";
    		mes "Use them well!";
    		callshop "mission_shop",1;
    		npcshopattach "mission_shop";
    		end;
    	case 6:
    		mes "[Hunting Missions]";
    		mes "The top hunters are:";
    		query_sql("SELECT char_id AS id, (SELECT `name` FROM `char` WHERE char_id = id),`value` FROM `char_reg_num` WHERE `key` = 'Mission_Total' ORDER BY CAST(`value` AS SIGNED) DESC LIMIT 5", .@id, .@name$, .@val);
    		for (.@i = 0; .@i < 5; .@i++)
    			mes "  [Rank " + (.@i+1) + "]  " + ((.@name$[.@i] == "") ? "^777777none" : "^0055FF" + .@name$[.@i]+"^000000 : ^FF0000" + .@val[.@i] + " pt.") + "^000000";
    		close;
    	case 7:
    		mes "[Hunting Missions]";
    		mes "Nothing? Okay...";
    		emotion e_hmm;
    		close;
    	}
    	end;
    
    Mission_Status:
    	@f = 0;
    	deletearray .@j[0], getarraysize(.@j);
    	for (.@i = 0; .@i < .Quests; .@i++) {
    		.@j[.@i] = getd("Mission" + .@i);
    		.@j[.Quests] = .@j[.Quests] + strmobinfo(3,.@j[.@i]);
    		.@j[.Quests+1] = .@j[.Quests+1] + (strmobinfo(6,.@j[.@i]) / (getbattleflag("base_exp_rate") / 100) * .Modifier[0]);
    		.@j[.Quests+2] = .@j[.Quests+2] + (strmobinfo(7,.@j[.@i]) / (getbattleflag("job_exp_rate") / 100) * .Modifier[1]);
    		mes " > "+Chk(getd("Mission"+.@i+"_"),#Mission_Count) + strmobinfo(1,.@j[.@i]) + " (" + getd("Mission"+.@i+"_") + "/" + #Mission_Count + ")^000000";
    	}
    
    	// Reward formulas:
    	.@Mission_Points = 3 + (.@j[.Quests] / .Quests / 6);
    	.@Base_Exp = #Mission_Count * .@j[.Quests+1] / 5;
    	.@Job_Exp = #Mission_Count * .@j[.Quests+2] / 5;
    	.@Zeny = #Mission_Count * .Quests * .@j[.@i] * .Modifier[2];
    
    	next;
    	mes "[Hunting Missions]";
    	mes "Mission rewards:";
    	mes " > Mission Points: ^0055FF" + .@Mission_Points + "^000000";
    	mes " > Base Experience: ^0055FF" + callfunc("F_InsertComma",.@Base_Exp) + "^000000";
    	mes " > Job Experience: ^0055FF" + callfunc("F_InsertComma",.@Job_Exp) + "^000000";
    	mes " > Zeny: ^0055FF" + callfunc("F_InsertComma",.@Zeny) + "^000000";
    	if (@f) {
    		@f = 0;
    		return;
    	}
    	next;
    	mes "[Hunting Missions]";
    	mes "Oh, you're done!";
    	mes "Good work.";
    	mes "Here's your reward.";
    	emotion e_no1;
    	specialeffect2 EF_ANGEL;
    	specialeffect2 EF_TRUESIGHT;
    	#Mission_Points += .@Mission_Points;
    	BaseExp += .@Base_Exp;
    	JobExp += .@Job_Exp;
    	Zeny += .@Zeny;
    	for (.@i = 0; .@i < .Quests; .@i++) {
    		setd "Mission" + .@i, 0;
    		setd "Mission" + .@i+"_", 0;
    	}
    	#Mission_Count = 0;
    	if (.Delay)
    		#Mission_Delay = gettimetick(2) + (.Delay * 3600);
    	Mission_Total++;
    	if (Mission_Total == 1)
    		query_sql("INSERT INTO `char_reg_num` (`char_id`,`key`,`index`,`value`) VALUES (" + getcharid(0) + ",'Mission_Total','0',1)");
    	else
    		query_sql("UPDATE `char_reg_num` SET `value` = " + Mission_Total + " WHERE `char_id` = " + getcharid(0) + " AND `key` = 'Mission_Total'");
    	close;
    
    Mission_Info:
    	mes "[Hunting Missions]";
    	mes "If you so choose, I can assign";
    	mes "you a random hunting quest.";
    	mes "Some are easier than others, but";
    	mes "the rewards increase with difficulty.";
    	next;
    	mes "[Hunting Missions]";
    	mes "Missions points are shared";
    	mes "amongst all your characters.";
    	if (.Delay)
    		mes "Delay time is, too.";
    	mes "You can't take missions on";
    	mes "multiple characters at once.";
    	next;
    	mes "[Hunting Missions]";
    	mes "You can start a quest";
    	mes (.Delay ? "every " + ((.Delay == 1) ? "hour." : .Delay + " hours.") : "whenever you want.");
    	mes "That's everything~";
    	return;
    
    function Chk {
    	if (getarg(0) < getarg(1)) {
    		@f = 1;
    		return "^FF0000";
    	} else
    		return "^00FF00";
    }
    
    OnBuyItem:
    	@cost = 0;
    	for (.@i = 0; .@i < getarraysize(@bought_nameid); .@i++)
    		for (.@j = 0; .@j < getarraysize(.Shop); .@j += 2)
    			if (@bought_nameid[.@i] == .Shop[.@j]) {
    				set @cost, @cost + (.Shop[.@j+1] * @bought_quantity[.@i]);
    				break;
    			}
    	mes "[Hunting Missions]";
    	if (@cost > #Mission_Points)
    		mes "You don't have enough Mission Points.";
    	else {
    		for (.@i = 0; .@i < getarraysize(@bought_nameid); .@i++) {
    			getitem @bought_nameid[.@i], @bought_quantity[.@i];
    			dispbottom "Purchased " + @bought_quantity[.@i] + "x " + getitemname(@bought_nameid[.@i]) + ".";
    		}
    		#Mission_Points -= @cost;
    		mes "Deal completed.";
    		emotion e_cash;
    	}
    	@cost = 0;
    	deletearray @bought_nameid[0], getarraysize(@bought_nameid);
    	deletearray @bought_quantity[0], getarraysize(@bought_quantity);
    	close;
    
    OnNPCKillEvent:
    	if (!getcharid(1) || !.Party) {
    		if (!#Mission_Count || !Mission0) end;
    		for (.@i = 0; .@i < .Quests; .@i++) {
    			if (strmobinfo(1,killedrid) == strmobinfo(1,getd("Mission" + .@i))) {
    				if (getd("Mission" + .@i + "_") < #Mission_Count) {
    					dispbottom "[Hunting Mission] Killed " + (set(getd("Mission" + .@i + "_"),getd("Mission" + .@i + "_") + 1)) +
    					           " of " + #Mission_Count + " " + strmobinfo(1,killedrid) + ".";
    					end;
    				}
    			}
    		}
    	} else if (.Party) {
    		.@mob = killedrid;
    		getmapxy(.@map1$,.@x1,.@y1,UNITTYPE_PC);
    		getpartymember getcharid(1),1;
    		getpartymember getcharid(1),2;
    		for (.@i = 0; .@i < $@partymembercount; .@i++) {
    			if (isloggedin($@partymemberaid[.@i], $@partymembercid[.@i])) {
    				set .@Mission_Count, getvar(#Mission_Count, $@partymembercid[.@i]);
    				set .@Mission0, getvar(Mission0, $@partymembercid[.@i]);
    				set .@HP, readparam(HP, $@partymembercid[.@i]);
    
    				if (.@Mission_Count && .@Mission0 && .@HP > 0) {
    					getmapxy(.@map2$,.@x2,.@y2,UNITTYPE_PC);
    					if ((.@map1$ == .@map2$ || .Party == 1) && (distance(.@x1,.@y1,.@x2,.@y2) <= 30 || .Party < 3)) {
    						for (.@j = 0; .@j < .Quests; .@j++) {
    							.@my_mob_id = getvar( getd("Mission"+.@j),$@partymembercid[.@i] );
    							.@my_count = getvar( getd("Mission"+.@j+"_"), $@partymembercid[.@i] );
    							if (strmobinfo(1,.@mob) == strmobinfo(1,.@my_mob_id)) {
    								if (.@my_count < .@Mission_Count) {
    									setd "Mission"+.@j+"_", (.@my_count+1), $@partymembercid[.@i];
    									dispbottom "[Hunting Mission] Killed " + (.@my_count+1) + " of " + .@Mission_Count + " " + strmobinfo(1,.@mob) + ".", 0x777777, $@partymembercid[.@i];
    									break;
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	end;
    
    OnInit:
    	.Delay = 6;            // Quest delay, in hours (0 to disable).
    	.Quests = 4;            // Number of subquests per mission (increases rewards).
    	.Party = 0;             // Party options: 0 (exclude party kills), 1 (include party kills), 2 (same map only), 3 (screen area only)
    	.Reset = -1;            // Reset options: -1 (abandoning mission sets delay time), 0 (no delay time), [Zeny] (cost to abandon mission, no delay time)
    	setarray .Count[0],     // Min and max monsters per subquest (increases rewards).
    		40,50;
    	setarray .Modifier[0],  // Multipliers for Base Exp, Job Exp, and Zeny rewards.
    		getbattleflag("base_exp_rate")/100,getbattleflag("job_exp_rate")/100,60;
    	.mob_db$ =              // Table name of SQL mob database
    		(checkre(0))?"mob_db_re":"mob_db";
    	setarray .Shop[0],      // Reward items: <ID>,<point cost> (about 10~20 points per hunt).
    		49992,100;
    	.Blacklist$ =           // Blacklisted mob IDs.
    		"1062,1088,1183,1186,1200,1212,1220,1221,1234,1235,"+
    		"1244,1245,1250,1268,1290,1293,1294,1296,1298,1299,"+
    		"1300,1301,1303,1304,1305,1306,1308,1309,1311,1313,"+
    		"1515,1588,1618,1676,1677,1678,1679,1796,1797,1974,"+
    		"1975,1976,1977,1978,1979,1203,1108,1270,1289,1096,"+
    		"1388,1641,1873,1830,1839,1307,1283,1302,1582,1091,"+
    		"1093,1205,1783,1681,1120,1259,1990,1626,1643,1645,"+
    		"1720,1920,1918,1921,1919,1833,1640,1090,1262,1956,"+
    		"1700,1894,1701,1644,1703,1829,1991,1710,1705,1707,"+
    		"1712,1711,1706,1704,1709,1960,1961,1959,1958,1204,"+
    		"1089,1092,1765,1642,1929";
    
    	npcshopdelitem "mission_shop",512;
    	for (.@i = 0; .@i < getarraysize(.Shop); .@i += 2)
    		npcshopadditem "mission_shop", .Shop[.@i], .Shop[.@i+1];
    	end;
    }
    -	shop	mission_shop	-1,512:-1

     

    You have a custom base and job exp so it shows the overflow.

    Replace 100 in this line :

    	setarray .Modifier[0],  // Multipliers for Base Exp, Job Exp, and Zeny rewards.
    		getbattleflag("base_exp_rate")/100,getbattleflag("job_exp_rate")/100,60;

    into watever rate you have in ur base and job exp rate in the "exp.conf" file.

  7. Hey everyone, I would like to request a render of rA logo so that i could use it on my login screen saying Powered by rA . (rA or rAthena is fine) Thanks in advance :D

    Edit: My bad got it from here 

     

  8. 13 hours ago, pumks said:

    i mean my damage after i edit skill formula in src file from 

    
    i = 10 * (16 - skill_lv); to 
    
    i = 10 * (14 - skill_lv);

    that make my CT damage increased to 999k, can you help me to decrease that to 50k or 35k?

    By making it 14 u increased the skill's damage. Try to make the 14 into 18 to 22 or more depending on wat the damage output is.

  9. 3 hours ago, pumks said:

    It's work bro to increase damage, but i want make damage high and then low by Hit chance  not stay on high dmg, help me plss....

    I dont understand what your saying but im guessing u mean increase the crit rate of CT. Any skill will miss if the HIT is below the flee rate unless u have seeking atk(Hits flee opponents even with low hit). If ur talking about critical damage then make a weapon that is exclusive to Whitesmith and use this bonus : bonus bCriticalRate,n; and replace "n" with any number. If u say 1 = 1% crit rate 2 = 2% and so on. Hope this helps. I dont think theres any other way to vary the damage like u mentioned.

  10. Hello everyone, I would like to request a refiner that refines an equipment for a particular set of coins. Example : Safe refines like normal refiner till +4, for +5 ~ +10 player needs to exchange 10 gold coins per refine. i.e. 10 GC for +6 / 15 GC for +7... till +10 and from 11-20 using platinum coins with similar increment. The player gets a sure refine ( no chance of failing). If it matters in anyway (script wise), I use rAmod :)

  11. On 9/20/2017 at 8:06 AM, pumks said:

    Hi rAthena I need help for increase dmg Cart Termination White Smith skill anyone help me pls ....:mellow:

    There are 2 ways to do so.

    1. You increase max_cart_weight at this directory >/conf/battle/player.conf and your CT damage increases accordingly.

    2. Read the skill description and do what crazyarashi wrote but you need to do unnecessary calculations. 

    the % of weight considered as damage increases as level of skill increases so u just reduce the "16"  in i = 10 * (16 - skill_lv);

    Note: Make sure u dont change 16 to any value below 11 this might cause problems as the CT will do 0 dmg if its 10 or below.

     

     

  12. Make sure you open port :80 at your modem/router via port fowarding 

     

    Also, dont open skype when u start wamp. Skype will use port : 80 thus it will make your localhost web not working.

    i dont have skype. tried it and still no avail :( the localhost works. its just that fluxcp folder doesnt work. i click and the installation doesnt come its just a error page where it says site cannot be reached and DNS not found

  13. Hey everyone, i just installed wamp and got the phpmyadmin to work. I pasted the fluxcp file in the "www" folder inside wamp. when i open it on my browser at localhost and click on fluxcp file i get a page that says "flux DNS address could not be found" and "The site cant be reached" . all database usernames and pass have been set perfectly but i donno y it isnt working :( plz help asap :/

  14. Hey guyz, i request a npc that does the following :

    first says hi then bla bla bl(so i can fill in with my own quotes?)

    then he asks if player has 5 items(different items) if the player does have it, hell take it from the player and gives him a hunting quest where he has to kill multiple mobs(example: 3 mobs?)(note: it should not have a time limit he can finish it any time he wants) ex: 500 porings 200 lunatics etc, and finally gives a randomized item ( out of a list of 5 items?) and gives an announcement to server saying "Player"Has finished the quest to recieve "xxx"(item name which was obtained? from those 5 items). Thanks in advance :D


    *Blump*
×
×
  • Create New...