Jump to content

Athan17

Members
  • Posts

    57
  • Joined

  • Last visited

  • Days Won

    1

Athan17 last won the day on January 8 2017

Athan17 had the most liked content!

Profile Information

  • Gender
    Male

Recent Profile Visitors

1983 profile views

Athan17's Achievements

Poring

Poring (1/15)

16

Reputation

9

Community Answers

  1. Untested, basically this is the idea taken from the current rathena docs and item_db.txt If something doesn't work, you can easily check which one didn't work. item_db 2357 { bonus bAllStats,3; bonus bUnbreakableArmor; } 2524 { bonus bUnbreakableGarment; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bFlee2,3+(getequiprefinerycnt(EQI_GARMENT)*2); else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bShortWeaponDamageReturn,3+(getequiprefinerycnt(EQI_GARMENT)*2); } 2421 { bonus2 bResEff,Eff_Sleep,100; bonus bMaxHPrate,15; bonus bMaxSPrate,15; bonus bMdef,5; .@r = getequiprefinerycnt(EQI_SHOES); if(.@r > 5) bonus bMaxHPrate,2*.@r; if(.@r > 5) bonus bMaxSPrate,2*.@r; bonus bSpeedRate,25; bonus bUnbreakableShoes; } 2115 { bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubEle,Ele_Undead,10; bonus bMdef,5; bonus2 bSubEle,Ele_Neutral,5; } item_combo_db 2357:2524:2421, { bonus bMaxHPrate,10; bonus bMaxSPrate,10; bonus bAtkRate,3; bonus bMatkRate,3; bonus bMaxHPrate,(getequiprefinerycnt(EQI_ARMOR)/2); } Source: https://raw.githubusercontent.com/rathena/rathena/master/db/re/item_db.txt https://github.com/rathena/rathena/blob/master/db/re/item_combo_db.txt Docs: https://github.com/rathena/rathena/blob/master/doc/item_db.txt https://github.com/rathena/rathena/blob/master/doc/item_bonus.txt
  2. finally found it, thank you. I've been trying to create a web based ro client, however i don't know where to start. lemme grab the torch and will try to continue what's left. wish me luck Thanks.
  3. check how lhz_dun03 and lhz_dun04 bosses are spawned. well, base on your script, looks like you kill the mvp every 10mins? i have two solutions for you, coz im not sure if you want to retain that every 10 mins of spawn. first solution would be, make an npc variable that will be set to "true" when is spawned and set to "false" when mvp died. OnInit: set .isMonAlive, 0; // not alive ... OnMinute00: OnMinute10: OnMinute20: OnMinute30: OnMinute40: OnMinute50: if(.isMonAlive) end; // checks if monster still alive, do not run the script. ... //after calling monster .isMonAlive = 1; // set to 1 because monster spawned ... OnBossMvPKilled: .isMonAlive = 0; // after mvp died, set 0, means its dead. then, 2nd solution would be, spawn a random monster every 10 mins, this works like lhz_dun03/04 OnInit: // spawn monster on init OnTimer60000: //not sure if 10mins or 1hr, check docu //call random monster with ::OnBossMvpDead ... end; OnBossMvpDead: initnpctimer; end;
  4. in skill_db.txt //id,range,hit,inf,element,nk,splash,max,list_num,castcancel,cast_defence_rate,inf2,maxcount,skill_type,blow_count,inf3,name,description where // 04 inf (0- passive, 1- enemy, 2- place, 4- self, 16- friend, 32- trap) therefore: 402,9,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, PF_MINDBREAKER,Mind Breaker to 402,9,6,21,0,0x1,0,5,1,no,0,0,0,none,0,0x0, PF_MINDBREAKER,Mind Breaker // can target enemy, self and friends/party
  5. its in skill.c Text editing softwares has a powerful tool called "Search", and most of them are toggled by hitting CTRL+F. and also, why not just grant the skill Clementia and Canto Candidus when Soul Linked? It will be easier than modifying the source.. if you dont know what're doing (since you asked, seems like it) since Agi/Bless is a target skill while Clem/Canto is a self skill, you might not get the effect you'd wanted (being the agi/bless transforms from target skill to self skill when soul linked). perhaps separating them is a better approach.
  6. check script commands "callshop", "npcshopattach" and "OnSellItem" at https://raw.githubusercontent.com/rathena/rathena/master/doc/script_commands.txt
  7. have you tried bg_monster and bg_monster_set_team? well since you claimed you're "good" with script, no need for explanation.
  8. // set each class with itemid. set .rewardperclass[1], 4276; // Swordsman set .rewardperclass[3], 4525; // Archer set .rewardperclass[2], 4386; // Mage set .rewardperclass[4], 4372; // Acolyte set .rewardperclass[5], 4,342; // Merchant set .rewardperclass[6], 4168; // Thief set .rewardperclass[4046], 4425; // Taekwon set .rewardperclass[0], 4123; // Super Novice set .rewardperclass[24], 4324; // Gunslinger set .rewardperclass[25], 4134; // Ninja // you can also use script constants like JOB_RUNE_KNIGHT, JOB_HIGH_PRIEST on arrays more info at src/map/script_constants.h // then use the variable like this: // .rewardperclass[BaseClass] // if you want to get specific class like Lord Knight, Paladin etc, then use [Class] instead of [BaseClass], and edit the class ids on array. // for limited time items, use rentitem rentitem .rewardperclass[BaseClass],32000; // 320000 is one day?
  9. haha i thought so, here's an update regarding bug check. sorry i cant test it in office. // Reset Position In-game version prontera,160,160,4 script Position Reset 909,{ mes "[System]"; mes "Please select a character"; mes "return to save point..."; set .@count, query_sql("SELECT `char_id`,`name` FROM `char` WHERE `account_id` = "+getcharid(3),.@charid,.@charname$); set .@menu$, ""; for ( set @ctr,0; @ctr < .@count; @ctr++ ) .@menu$ = .@menu$ + .@charname$[@ctr]+":"; .@menu = .@menu$ + "Cancel"; set .@selectedchar, select(.@menu$)-1; next; if( .@selectedchar < .@count ) { if( getcharid(0) != .@charid[.@selectedchar] ) { query_sql("UPDATE `char` AS ch SET ch.last_map = ch.save_map, ch.last_x = ch.save_x, ch.last_y = ch.save_y WHERE ch.char_id = "+.@charid[.@selectedchar]); mes .@charname$[@selectedchar] + "'s position has been reset."; } else { // TODO: instead of having if-else, its better not to show the invoker's name in selection. mes "you cant reset your own position"; } } end; }
  10. made this script few hours ago, but im too scared to post it, might have a lot of bugs on it coz didnt tested it yet. // Reset Position In-game version prontera,160,160,4 script Position Reset 909,{ mes "[System]"; mes "Please select a character"; mes "return to save point..."; set .@count, query_sql("SELECT `char_id`,`name` FROM `char` WHERE `account_id` = "+getcharid(3),.@charid,.@charname$); set .@menu$, ""; for ( set @ctr,0; @ctr < .@count; @ctr++ ) .@menu$ = .@menu$ + .@charname$[@ctr]+":"; .@menu = .@menu$ + "Cancel"; set .@selectedchar, select(.@menu)-1; next; if( .@selectedchar < .@count ) { if( getcharid(0) != .@charid[.@selectedchar] ) { query_sql("UPDATE `char` AS ch SET ch.last_map = ch.save_map, ch.last_x = ch.save_x, ch.last_y = ch.save_y WHERE ch.char_id = "+.@charid[.@selectedchar]); mes .@charname$[@selectedchar] + "'s position has been reset."; } else { // TODO: instead of having if-else, its better not to show the invoker's name in selection. mes "you cant reset your own position"; } } end; }
  11. havent tested it yet, but try it //===== rAthena Script ======================================= //= Battleground: PVP //===== By: ================================================== //= AnnieRuru //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= A simple battleground script: //= Kill players from the other team. //===== Additional Comments: ================================= //= 1.0 First version, edited. [Euphy] //= 1.1 Added rewards for losers. [Athan17] //============================================================ - script bg_pvp#control -1,{ OnInit: .minplayer2start = 2; // minimum players to start (ex. if 3vs3, set to 3) .eventlasting = 20*60; // event duration before auto-reset (20 minutes * seconds) setarray .rewarditem[0], // rewards for the winning team: <item>,<amount>,... 501, 10; setarray .rewardloser[0], // rewards for the losing team: <item>,<amount>,... 969, 1; end; OnStart: if ( getwaitingroomstate( 0, .rednpcname$ ) < .minplayer2start || getwaitingroomstate( 0, .bluenpcname$ ) < .minplayer2start ) end; // create Battleground and teams .red = waitingroom2bg( "guild_vs3", 13,50, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ ); copyarray .team1aid, $@arenamembers, $@arenamembersnum; .team1count = .minplayer2start; .blue = waitingroom2bg( "guild_vs3", 86,50, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ ); copyarray .team2aid, $@arenamembers, $@arenamembersnum; .team2count = .minplayer2start; delwaitingroom .rednpcname$; delwaitingroom .bluenpcname$; bg_warp .red, "guild_vs3", 13,50; bg_warp .blue, "guild_vs3", 86,50; .score[1] = .score[2] = .minplayer2start; bg_updatescore "guild_vs3", .score[1], .score[2]; // match duration sleep .eventlasting * 1000; // end match, destroy Battleground, reset NPCs if ( .score[1] > .score[2] ) { mapannounce "guild_vs3", "- Red Team is victorious! -", bc_map; callsub L_Reward, 1,2; } else if ( .score[1] < .score[2] ) { mapannounce "guild_vs3", "- Blue Team is victorious! -", bc_map; callsub L_Reward, 2,1; } else mapannounce "guild_vs3", "- The match has ended in a draw! -", bc_map; bg_warp .red, "prontera",152,178; bg_warp .blue, "prontera",154,178; bg_destroy .red; bg_destroy .blue; donpcevent .rednpcname$ +"::OnStart"; donpcevent .bluenpcname$ +"::OnStart"; end; L_Reward: for ( .@i = 0; .@i < getd(".team"+ getarg(0) +"count"); .@i++ ) getitem .rewarditem[0], .rewarditem[1], getd(".team"+ getarg(0) +"aid["+ .@i +"]" ); for ( .@i = 0; .@i < getd(".team"+ getarg(1) +"count"); .@i++ ) getitem .rewarditem[0], .rewarditem[1], getd(".team"+ getarg(1) +"aid["+ .@i +"]" ); return; // "OnDeath" event OnRedDead: callsub L_Dead, 1; OnBlueDead: callsub L_Dead, 2; L_Dead: .score[ getarg(0) ]--; bg_updatescore "guild_vs3", .score[1], .score[2]; while ( getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ) != getcharid(3) && .@i < getd(".team"+ getarg(0) +"count") ) .@i++; deletearray getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ), 1; setd ".team"+ getarg(0) +"count", getd(".team"+ getarg(0) +"count") -1; bg_leave; if ( !.score[ getarg(0) ] ) awake strnpcinfo(0); sleep2 1250; percentheal 100,100; end; // "OnQuit" event OnRedQuit: callsub L_Quit, 1; OnBlueQuit: callsub L_Quit, 2; L_Quit: .score[ getarg(0) ]--; bg_updatescore "guild_vs3", .score[1], .score[2]; percentheal 100, 100; while ( getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ) != getcharid(3) && .@i < getd(".team"+ getarg(0) +"count") ) .@i++; deletearray getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ), 1; setd ".team"+ getarg(0) +"count", getd(".team"+ getarg(0) +"count") -1; if ( !.score[ getarg(0) ] ) awake strnpcinfo(0); end; } prontera,152,178,5 script Red Team#bg_pvp 733,{ end; OnInit: sleep 1; set getvariableofnpc( .rednpcname$, "bg_pvp#control" ), strnpcinfo(0); OnStart: waitingroom "Red Team", getvariableofnpc( .minplayer2start, "bg_pvp#control" ) +1, "bg_pvp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_pvp#control" ); end; } prontera,154,178,5 script Blue Team#bg_pvp 734,{ end; OnInit: sleep 1; set getvariableofnpc( .bluenpcname$, "bg_pvp#control" ), strnpcinfo(0); OnStart: waitingroom "Blue Team", getvariableofnpc( .minplayer2start, "bg_pvp#control" ) +1, "bg_pvp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_pvp#control" ); end; } guild_vs3 mapflag battleground 2 guild_vs3 mapflag nosave SavePoint guild_vs3 mapflag nowarp guild_vs3 mapflag nowarpto guild_vs3 mapflag noteleport guild_vs3 mapflag nomemo guild_vs3 mapflag nopenalty guild_vs3 mapflag nobranch guild_vs3 mapflag noicewall //guild_vs3 mapflag hidemobhpbar the trick here is: callsub L_Reward, 1,2; and callsub L_Reward, 2,1; then L_Reward: // using getarg(0) for ( .@i = 0; .@i < getd(".team"+ getarg(0) +"count"); .@i++ ) getitem .rewarditem[0], .rewarditem[1], getd(".team"+ getarg(0) +"aid["+ .@i +"]" ); // using getarg(1) for ( .@i = 0; .@i < getd(".team"+ getarg(1) +"count"); .@i++ ) getitem .rewarditem[0], .rewarditem[1], getd(".team"+ getarg(1) +"aid["+ .@i +"]" ); return; but i need confirmation also, coz didnt tried it yet. cheers!
  12. may i know who will use this NPC? anyone or GM only? is it like, a reset position in-game? so if you have another character that is stuck, you can just character select~>use another char then talk to this npc, list up all your characters then return to savepoint the selected char? or GM only npc that once accessed, the npc will list up all/online players then return a chosen player to their save point?
  13. im sure your athan i know from elsword XD

    former SDS,GoD here (OwO)/

    1. Athan17

      Athan17

      hehe, yep your damn right XD

      and yeah i remember you, we never teamed up but we always clash on pvp specially on 3v3
      whats up AshliHanna? still playing elsword?

    2. Hanashi

      Hanashi

      nah i got bored ,tired gave up my account and here i am developing stuff just for a hobby ^^

  14. prontera,150,150,5 script Guard 966,2,2,{ // <~ you need to set x and y something
  15. Cool! gonna try it also later. about hidemobhpbar, i guess its a new mapflag implemented around november? i also dont have it in my fork, its best not to use it if you don't need it, or pull from master.
×
×
  • Create New...