Jump to content

qtdan

Members
  • Posts

    223
  • Joined

  • Last visited

  • Days Won

    5

Posts posted by qtdan

  1. ROBASIC ITEM GENERATOR


    Hello rAthena,

    This tool is an item generator, to make easier to add new custom headgears on our servers.

    Don't hesitate to give me a feedbacks or suggestions!

    If you have question pm me on discord imaqtdan#1741

     

    buy me a coffee : [email protected] PAYPAL

     

     


    • Submitter
    • Submitted
      04/24/2022
    • Category
    • Video
      https://youtu.be/hQUM611UBNY
    • Content Author
      qtdan

     

  2. 15 hours ago, Singe Horizontal said:

    A small awk program to be called from command line that generates a job_basepoints.yml for a desired level.
    For windows users, awk is available in cygwin or git bash.
    Change directory to the one where the file was downloaded and run the command :

    ./job_basepoints_re_gen.awk 200 > job_basepoints.yml

    It should produce a job_basepoints.yml file.


    https://gist.github.com/Singe-Horizontal/4c59ca0ee10cd21fd736101bec9e8cfa

    can we have this for pre renewal calc?

  3. @Rynbef

    L_monthly_reset_statue:
    OnTimer1200000:
    //OnClock0000: // refresh every 1 second for debug, change this to 30 seconds or 1 minute
    	for (.@i = 0; .@i < 5; ++.@i) {
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADTOP, 0;
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADMIDDLE, 0;
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADBOTTOM, 0;
    	}
    	.@query$  = "SELECT `char`.`char_id`, `char`.`guild_id`, `char`.`name`, `char`.`class`, `char`.`sex`, `char`.`hair`, `char`.`hair_color`, `char`.`clothes_color`, `char`.`body`, `char`.`head_top`, `char`.`head_mid`, `char`.`head_bottom`, `pvpladder_epic`.`kills`, `pvpladder_epic`.`deaths` ";
    	.@query$ += "FROM `char` RIGHT JOIN `pvpladder_epic` ON `char`.`char_id` = `pvpladder_epic`.`char_id` ";
    	.@query$ += "ORDER BY `kills` DESC LIMIT 5";
    	.@nb = query_sql(.@query$, .@cid, .@guild_id, .@name$, .@class, .@sex$, .@hair, .@hair_color, .@clothes_color, .@body, .@head_top, .@head_mid, .@head_bottom, .@kills, .@deaths);
    	for (.@i = 0; .@i < .@nb; ++.@i) {
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_CLASS, .@class[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_SEX, (.@sex$[.@i] == "F")?SEX_FEMALE:SEX_MALE;
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HAIRSTYLE, .@hair[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HAIRCOLOR, .@hair_color[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_CLOTHCOLOR, .@clothes_color[.@i];
    		//setunitdata .pvp_ladder_statues[.@i +1], UNPC_BODY2, .@body[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADTOP, .@head_top[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADMIDDLE, .@head_mid[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADBOTTOM, .@head_bottom[.@i];
    		setnpcdisplay "pvp_ladder_statues#"+(.@i +1), .@name$[.@i];
    		.statue_name$[.@i +1] = .@name$[.@i];
    		.statue_guild$[.@i +1] = getguildname(.@guild_id[.@i]);
    		.statue_kills[.@i +1] = .@kills[.@i];
    		.statue_deaths[.@i +1] = .@deaths[.@i];
    	}
    	for (.@i = .@nb; .@i < 5; ++.@i)
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_CLASS, HIDDEN_WARP_NPC; // HIDDEN_NPC = 111, HIDDEN_WARP_NPC = 139
    	if (.start)
    		initnpctimer;
    	else
    		stopnpctimer;
    	end;

    here on this line 

    setunitdata .pvp_ladder_statues[.@i +1],UNPC_SEX,(.@sex$[.@i] == "F")?SEX_FEMALE:SEX_MALE;

    we are talking about is when the statue are appearing at the map instead pulling out the gender of the character, whenever its a male or female it only shows female.

  4. On 11/20/2021 at 3:42 AM, AinsLord said:

    it automatically sets cash/zeny for vending

    for using only zeny and cash

    put 0 to the item IDs in item_vending.txt <--- this file is not existing you just need to create it on db/item_vending.txt

    +// Specific items for Vending System
    +// Format: ItemID
    +// Max items is equal MAX_INVENTORY ( 100 by default )
    +
    +// TCG Card
    +7227
    +// Mithril Coin
    +674
    +// Silver Coin
    +675
    +// Bronze Coin
    +673

    but for custom currency or points

    it will make some additional scripts/modification on src

     

    how to set up the item_vending.yaml

    i can see the item currency but i cant buy it,

  5. Just now, Slammer said:

    can u give a full script?

    L_monthly_reset_statue:
    OnTimer1200000:
    //OnClock0000: // refresh every 1 second for debug, change this to 30 seconds or 1 minute
    	for (.@i = 0; .@i < 5; ++.@i) {
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADTOP, 0;
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADMIDDLE, 0;
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADBOTTOM, 0;
    	}
    	.@query$  = "SELECT `char`.`char_id`, `char`.`guild_id`, `char`.`name`, `char`.`class`, `char`.`sex`, `char`.`hair`, `char`.`hair_color`, `char`.`clothes_color`, `char`.`body`, `char`.`head_top`, `char`.`head_mid`, `char`.`head_bottom`, `pvpladder_epic`.`kills`, `pvpladder_epic`.`deaths` ";
    	.@query$ += "FROM `char` RIGHT JOIN `pvpladder_epic` ON `char`.`char_id` = `pvpladder_epic`.`char_id` ";
    	.@query$ += "ORDER BY `kills` DESC LIMIT 5";
    	.@nb = query_sql(.@query$, .@cid, .@guild_id, .@name$, .@class, .@sex$, .@hair, .@hair_color, .@clothes_color, .@body, .@head_top, .@head_mid, .@head_bottom, .@kills, .@deaths);
    	for (.@i = 0; .@i < .@nb; ++.@i) {
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_CLASS, .@class[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_SEX, (.@sex$[.@i] == "F")?SEX_FEMALE:SEX_MALE;
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HAIRSTYLE, .@hair[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HAIRCOLOR, .@hair_color[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_CLOTHCOLOR, .@clothes_color[.@i];
    		//setunitdata .pvp_ladder_statues[.@i +1], UNPC_BODY2, .@body[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADTOP, .@head_top[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADMIDDLE, .@head_mid[.@i];
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_HEADBOTTOM, .@head_bottom[.@i];
    		setnpcdisplay "pvp_ladder_statues#"+(.@i +1), .@name$[.@i];
    		.statue_name$[.@i +1] = .@name$[.@i];
    		.statue_guild$[.@i +1] = getguildname(.@guild_id[.@i]);
    		.statue_kills[.@i +1] = .@kills[.@i];
    		.statue_deaths[.@i +1] = .@deaths[.@i];
    	}
    	for (.@i = .@nb; .@i < 5; ++.@i)
    		setunitdata .pvp_ladder_statues[.@i +1], UNPC_CLASS, HIDDEN_WARP_NPC; // HIDDEN_NPC = 111, HIDDEN_WARP_NPC = 139
    	if (.start)
    		initnpctimer;
    	else
    		stopnpctimer;
    	end;
    OnGMCommandStart:
    OnMinute00: // configure time
    //OnMon2000:
    	.start = true;
    	pvpon .map$;
    	deletearray .guild_ownage;
    	initnpctimer;
    	end;
    OnMinute59:
    //OnMon2045:
    	.start = true;
    	pvpon .map$;
    	deletearray .guild_ownage;
    	end;
    L_read:
    	mes "["+ strnpcinfo(1) +"]";
    	mes "Hello! "+strcharinfo(0)+".";
    	mes "Join PVP! To Earn Rewards.";
    	mes "Top 15 of the PVP Rankings will sure get an surprise reward.";
    	next;
    	switch(select(
    		"Enter PvP Room",
    		"Show Top 15 Rank",
    		"My Ranking")) {
    	mes "["+ strnpcinfo(1) +"]";
    	case 1:
    		if (!.start) {
    		if( BaseLevel < 999 || Class == Job_Novice ){
        		mes "Novice or Below level 999 cant enter.";
       		close;
    		}
    			warp .map$, 0, 0; break;
    			close;
    		}
    		if( BaseLevel < 999 || Class == Job_Novice ){
        		mes "Novice or Below level 999 cant enter.";
       		close;
    		}
    		switch(rand(2)) {
    		announce strcharinfo(0) +" entered PVP Room",bc_all,0xe57c00;
    		default: warp .map$, 0, 0; break;
    		case 1: warp .map$, 0, 0; break;
    		}
    		if (@dota_sql_kills == 0 && @dota_sql_deaths == 0)
    			query_sql "SELECT `kills`, `deaths` FROM `pvpladder_epic` WHERE `char_id` = "+ getcharid(0), @dota_sql_kills, @dota_sql_deaths;
    		end;
    	case 2:
    		.@nb = query_sql("SELECT `name`, `kills`, `deaths` FROM `pvpladder_epic` ORDER BY `kills` DESC LIMIT "+ .show_ranking, .@name$, .@kills, .@deaths);
    		if (!.@nb) {
    			mes "The ladder currently is empty.";
    			close;
    		}
    		mes "^996600RANK: ^006699NAME ^00AA00[Kills] ^FF0000<Deaths>^000000";
    		for (.@i = 0; .@i < .@nb; ++.@i) 
    			mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AA00["+ .@kills[.@i] +"] ^FF0000<"+ .@deaths[.@i] +">^000000";
    		close;
    	case 3:
    		if (!query_sql("SELECT `kills`, `deaths`, 1+(SELECT COUNT(1) FROM `pvpladder_epic` t1 WHERE t1.`kills` > t2.`kills`) FROM `pvpladder_epic` t2 WHERE `char_id` = "+ getcharid(0), .@kills, .@deaths, .@rank)) {
    			mes "You haven't kill anybody in this month.";
    			close;
    		}
    		mes "Your kills -> "+ .@kills;
    		mes "Your deaths -> "+ .@deaths;
    		mes "Your current rank -> "+ F_GetNumSuffix(.@rank);
    		close;
    	}
    	end;
    OnPCKillEvent:
    	if (.gmnokill && getgmlevel() >= .gmnokill) end;
    	if (strcharinfo(3) != .map$) end;
    	.@killername$ = strcharinfo(0);
    	.@killeraid = getcharid(3);
    	.@killercid = getcharid(0);
    	.@killerguildid = getcharid(2);
    	attachrid killedrid;
    	.@victimname$ = strcharinfo(0);
    	.@victimaid = getcharid(3);
    	.@victimcid = getcharid(0);
    	.@victimguildid = getcharid(2);
    	if (@PlayersKilledStreak >= .holyshit)
    		.@streakname$ = "Beyond Godlike";
    	else if (@PlayersKilledStreak >= .godlike)
    		.@streakname$ = "Godlike";
    	else if (@PlayersKilledStreak >= .monsterkill)
    		.@streakname$ = "Monster Kill";
    	else if (@PlayersKilledStreak >= .wickedsick)
    		.@streakname$ = "Wicked Sick";
    	else if (@PlayersKilledStreak >= .unstoppable)
    		.@streakname$ = "Unstoppable";
    	else if (@PlayersKilledStreak >= .megakill)
    		.@streakname$ = "Mega-kill";
    	else if (@PlayersKilledStreak >= .dominating)
    		.@streakname$ = "Dominating";
    	else if (@PlayersKilledStreak >= .killingspree)
    		.@streakname$ = "Killing Spree";
    	if (@PlayersKilledStreak >= .killingspree && .@killeraid == .@victimaid)
    		announce sprintf("%s has ended %s own %s[%d] streak", .@killername$, (Sex)?"him":"her", .@streakname$, @PlayersKilledStreak), bc_all,0xe57c00;
    	else if (@PlayersKilledStreak >= .killingspree)
    		announce sprintf("%s has ended %s's %s[%d] streak", .@killername$, .@victimname$, .@streakname$, @PlayersKilledStreak), bc_all,0xe57c00;
    	else if (.@killeraid != .@victimaid)
    		announce sprintf("%s has pawned %s's head", .@killername$, .@victimname$), bc_all,0xe57c00;
    	@PlayersKilledStreak = 0;
    	++@dota_sql_deaths;
    	@dota_multikills = 0;
    	if (.@victimguildid)
    		.guild_ownage[.@victimguildid] = 0;
    	if (.@killeraid == .@victimaid) {
    		query_sql "REPLACE INTO `pvpladder_epic` VALUES ("+ .@victimcid +", '"+ escape_sql(.@victimname$) +"', "+ @dota_sql_kills +", "+ @dota_sql_deaths +")";
    		end;
    	}
    	.@victim_kills = @dota_sql_kills;
    	.@victim_deaths = @dota_sql_deaths;
    	attachrid killerrid;
    	++@PlayersKilledStreak;
    	++@dota_sql_kills;
    	if (@PlayersKilledStreak == .killingspree)
    		setarray .@streakname$, "killingspree.wav", "is on a KILLING SPREE", "!";
    	else if (@PlayersKilledStreak == .dominating)
    		setarray .@streakname$, "dominating.wav", "is DOMINATING", "!";
    	else if (@PlayersKilledStreak == .megakill)
    		setarray .@streakname$, "megakill.wav", "has a MEGA KILL", "!";
    	else if (@PlayersKilledStreak == .unstoppable)
    		setarray .@streakname$, "unstoppable.wav", "is UNSTOPPABLE", "!!";
    	else if (@PlayersKilledStreak == .wickedsick)
    		setarray .@streakname$, "wickedsick.wav", "is WICKED SICK", "!!";
    	else if (@PlayersKilledStreak == .monsterkill)
    		setarray .@streakname$, "monsterkill.wav", "has a MONSTER KILL", "!!";
    	else if (@PlayersKilledStreak == .godlike)
    		setarray .@streakname$, "godlike.wav", "is GODLIKE", "!!!";
    	else if (@PlayersKilledStreak >= .holyshit && ((@PlayersKilledStreak - .holyshit) % .continue == 0))
    		setarray .@streakname$,"holyshit.wav", "is BEYOND GODLIKE",". Someone KILL "+( (Sex)?"HIM":"HER" ) +"!!!!!!";
    	if (getstrlen(.@streakname$[1])) {
    		announce sprintf("%s %s[%d] %s", .@killername$, .@streakname$[1], @PlayersKilledStreak, .@streakname$[2]), bc_all,0xe57c00;
    		soundeffectall .@streakname$[0], 0, .map$;
    	}
    	++@dota_multikills;
    	deltimer strnpcinfo(0) +"::OnStreakReset";
    	addtimer 18000, strnpcinfo(0) +"::OnStreakReset";
    	query_sql sprintf("REPLACE INTO `pvpladder_epic` VALUES (%d, '%s', %d, %d), (%d, '%s', %d, %d)",
    		.@killercid, escape_sql(.@killername$), @dota_sql_kills, @dota_sql_deaths,
    		.@victimcid, escape_sql(.@victimname$), .@victim_kills, .@victim_deaths);
    	if (.@killerguildid && .@killerguildid != .@victimguildid)
    		++.guild_ownage[.@killerguildid];
    	.@dota_multikills = @dota_multikills;
    	sleep 1500;
    	if (.@killerguildid && .@killerguildid != .@victimguildid && .guild_ownage[.@killerguildid] >= .owned && ((.guild_ownage[.@killerguildid] - .owned) % .owncontinue == 0)) {
    		announce "The guild ["+ getguildname(.@killerguildid) +"] is OWNING["+ .guild_ownage[.@killerguildid] +"] !!!", bc_all;
    		soundeffectall "ownage.wav",0,.@map$;
    	}
    	sleep 1250;
    	if (!attachrid(.@killeraid)) end;
    	if (.@dota_multikills == 2) {
    		announce strcharinfo(0) +" just got a Double Kill !", bc_all,0xe57c00;
    		soundeffectall "doublekill.wav", 0, .map$;
    	}
    	else if (.@dota_multikills == 3) {
    		announce strcharinfo(0) +" just got a Triple Kill !!!", bc_all,0xe57c00;
    		soundeffectall "triplekill.wav", 0, .map$;
    	}
    	else if (.@dota_multikills == 4) {
    		announce strcharinfo(0) +" just got an Ultra Kill !!!", bc_all,0xe57c00;
    		soundeffectall "ultrakill.wav", 0, .map$;
    	}
    	else if (.@dota_multikills >= 5) {
    		announce strcharinfo(0) +" is on a Rampage !!!", bc_all,0xe57c00;
    		soundeffectall "rampage.wav", 0, .map$;
    	}
    	end;
    OnStreakReset:
    	@dota_multikills = 0;
    	end;
    OnClock0000:
    	if (gettime(DT_DAYOFMONTH) != 1) end;
    L_Monthly_Reward_Rank:
    	$pvpevent_last_given = atoi(gettime(7) +""+ gettime(6));
    	.@nb = query_sql("SELECT `char_id` FROM `pvpladder_epic` ORDER BY `kills` DESC LIMIT "+ .reward_monthly, .@cid);
    	if (!.@nb) end;
    	for (.@i = 0; .@i < .@nb; ++.@i) {
    		setarray .@mail_itemid, getd(".reward_monthly_for_rank_"+(.@i +1)+"[1]"), getd(".reward_monthly_for_rank_"+(.@i +1)+"[3]");
    		setarray .@mail_amount, getd(".reward_monthly_for_rank_"+(.@i +1)+"[0]"), getd(".reward_monthly_for_rank_"+(.@i +1)+"[2]");
    		mail .@cid[.@i],
    			"PvP Ladder Event",
    			"Monthly PvP Ladder Event Rewards",
    			"Congratulations for being "+ F_GetNumSuffix(.@i +1) +" Rank on PvP Ladder Event, this is your rewards.",
    			0,
    			.@mail_itemid,
    			.@mail_amount;
    	}
    	query_sql "TRUNCATE `pvpladder_epic`";
    	goto L_monthly_reset_statue;
    }
    function	script	pvp_ladder_statues	{
    	.@id = inarray(getvariableofnpc(.pvp_ladder_statues, "PvP Ladder Event"), getnpcid(0));
    	mes "^996600[TOP "+ .@id +"]";
    	mes "^006699Name : "+ getelementofarray(getvariableofnpc(.statue_name$, "PvP Ladder Event"), .@id);
    	.@guildname$ = getelementofarray(getvariableofnpc(.statue_guild$, "PvP Ladder Event"), .@id);
    	mes "^00AAAAGuild : "+((.@guildname$ == "null")? "^666666None": .@guildname$);
    	mes " ";
    	mes "^00AA00Kills : ["+ getelementofarray(getvariableofnpc(.statue_kills, "PvP Ladder Event"), .@id) +"]";
    	mes "^FF0000Deaths : <"+ getelementofarray(getvariableofnpc(.statue_deaths, "PvP Ladder Event"), .@id) +">";
    	return;
    }
    maintown,253,247,4	script	pvp_ladder_statues#1	HIDDEN_WARP_NPC,{ callfunc "pvp_ladder_statues"; end; OnInit: set getvariableofnpc(.pvp_ladder_statues[1], "PvP Ladder Event"), getnpcid(0); end; }
    maintown,256,247,4	script	pvp_ladder_statues#2	HIDDEN_WARP_NPC,{ callfunc "pvp_ladder_statues"; end; OnInit: set getvariableofnpc(.pvp_ladder_statues[2], "PvP Ladder Event"), getnpcid(0); end; }
    maintown,259,247,4	script	pvp_ladder_statues#3	HIDDEN_WARP_NPC,{ callfunc "pvp_ladder_statues"; end; OnInit: set getvariableofnpc(.pvp_ladder_statues[3], "PvP Ladder Event"), getnpcid(0); end; }
    maintown,262,247,4	script	pvp_ladder_statues#4	HIDDEN_WARP_NPC,{ callfunc "pvp_ladder_statues"; end; OnInit: set getvariableofnpc(.pvp_ladder_statues[4], "PvP Ladder Event"), getnpcid(0); end; }
    maintown,265,247,4	script	pvp_ladder_statues#5	HIDDEN_WARP_NPC,{ callfunc "pvp_ladder_statues"; end; OnInit: set getvariableofnpc(.pvp_ladder_statues[5], "PvP Ladder Event"), getnpcid(0); end; }

    HERE

  6. 2 hours ago, April Summers said:

    Hello, so I ended up managing to run rAthena (I think ? I have 3 terminals running things then stopping on not error looking messages ?)

    On the other side I downloaded files and tried to setup a client, downloading kro files and ended up with a "2020-04-01bRagexe_patched.exe" at the root of my game files.

    Now I'm starting the client, it does go to a login menu, but how is it supposed to find my server ? I tried to enter my username and pwd and it told me after a bit something like "unable to find the server". I probably missed some middle step here...

    Any advice on where to start looking ? Thanks !

    Go to your grf clientinfo.xml
              <address>127.0.0.1</address>
              <port>6900</port>

    put correctly your server ip and port
     

×
×
  • Create New...