Jump to content

Skorm

Forum Moderator
  • Posts

    1282
  • Joined

  • Last visited

  • Days Won

    41

Everything posted by Skorm

  1. No restrictions but here's the general idea. -- Code moved to final post --
  2. Like this? prontera,100,100,5 script VIP ROOM 45,3,3,{ if( vip_status(1) && !countitem(6269) ) { mes "[VIP ROOM]"; mes "Ahh, looks like your a VIP why don't you take this pass to our special room."; next; mes "[VIP ROOM]"; mes "But, remember the pass only lasts for 3 months 1 week and 3 days."; next; mes "[VIP ROOM]"; mes "Talk to me again if you want to warp to the VIP room!"; close2; rentitem 6269,3456000; end; } OnTouch: if( !countitem(6269) ) { mes "[VIP ROOM]"; mes "You need a special pass to enter this room!"; close; } warp "<index_name>",0,0; end; }
  3. prontera,164,191,4 script 3v3 757,{ mes "I am Party Match Manager."; mes "Party Leader may create a PVP Match here."; next; switch( select( ( .Created )?"Join Game[ ^FF0000"+.No+"vs"+.No+"^000000 ]":"Create Game", ( ( getgmlevel() >= .GMLevel || getcharid(0) == getpartyleader( getcharid(1),2 ) ) && .Created )?"^FF0000Remove Game^000000":"" )){ Case 1: switch( .Created ){ Case 0: getpartymember getcharid(1),1; if( getcharid(0) != getpartyleader( getcharid(1),2 ) || !getcharid(1) ){ mes "Sorry, but only a ^FF0000Party Leader^000000 can register a game here."; }else{ mes "How many Players for each Party Team ?"; mes "Min = 1"; mes "Because you only have "+$@partymembercount+" member right now."; next; input .No,3; announce "[ "+.No+"vs"+.No+" Party Match ] created by "+strcharinfo(0)+", you may register to join.",0; set .Team[0],getcharid(1); set .Created,1; } close; Case 1: if( !.Team[1] && getcharid(1) == .Team[0] ){ mes "Please wait for ^FF0000Team 2^000000 to Register."; }else{ if( getcharid(0) != getpartyleader( getcharid(1),2 ) || !getcharid(1) ){ mes "Sorry, but only a ^FF0000Party Leader^000000 can register a game here."; close; } getpartymember getcharid(1),1; if( $@partymembercount < .No ){ mes "You didn't have enough of "+.No+" Member for the Game."; mes "You only have "+$@partymembercount+" Member."; }else{ mes "Confirm Registration ?"; if( select("Yes:No") == 1 ){ set .Team[1],getcharid(1); set .Created,2; setarray .Members[0],.No,.No; for( set .@party,0; .@party < 2; set .@party,.@party + 1 ){ getpartymember .Team[.@party],1; for( set .@i,0; .@i < .No; set .@i,.@i + 1 ) warpchar .Map$,.party_x[.@party],.party_y[.@party],$@partymembercid[.@i]; } end; } } } close; Case 2: mes "^FF0000The Game is in Progress.^000000"; mes "[ A "+.No+" vs "+.No+" Game ]"; mes "Team ^FF0000"+getpartyname( .Team[0] )+"^000000 vs Team ^FF0000"+getpartyname( .Team[1] )+"^000000 ."; close; } close; Case 2: mes "Done, Match will be terminated right away."; mapannounce .Map$,"Match has been Cancelled by a GM.",0; close2; OnReset: deletearray .Team[0],getarraysize( .Team ); deletearray .Members[0],getarraysize( .Members ); if( .Winner ){ getpartymember .Winner,2; for( set .@i,0; .@i < .No; set .@i,.@i + 1 ){ getitem .prize_id,1,$@partymemberaid[.@i]; } set .Winner,0; } sleep2 2000; set .Created,0; mapwarp .Map$,"prontera",155,181; end; } close; OnPCDieEvent: OnPCLogoutEvent: if( strcharinfo(3) == .Map$ && .Created ){ for( set .@i,0; .@i < 2; set .@i,.@i + 1 ) if( getcharid(1) == .Team[.@i] ) set .Members[.@i],.Members[.@i] - 1; if( .Members[0] < 1 ) set .Winner,.Team[1]; else if( .Members[1] < 1 ) set .Winner,.Team[0]; if( .Winner ){ mapannounce .Map$,"Team "+getpartyname( .Winner )+" Win the "+.No+"vs"+.No+" Game.",0; donpcevent strnpcinfo(0)+"::OnReset"; }else{ warp "prontera",155,181; } } end; OnInit: set .GMLevel,80; set .Map$,"guild_vs1"; // Team 1| Team 2 setarray .party_x, 50 , 100 ; setarray .party_y, 50 , 100 ; set .prize_id, 22555; end; } Fixed the random warp thing... I can't really understand what you're asking for the other parts.
  4. Yeah I have to stop using -= and += they hardly work for anyone yet the script_command text clearly says they're viable... Probably the worst error explanation ever. xD
  5. Skorm

    Help! edit

    Are you using rAthena? I'll attempt the patch on a fresh server. Edit: I modified a few things to make it work at a further range and I added updated error messages to the patch file. Tested and working with the latest revision of rA at the time of this post. @follow.patch
  6. I think it looks good anyways, but you should make colors for all real gems instead of black... Ex: Emerald, Sapphire, Garnet, etc...
  7. Skorm

    Help! edit

    Alright. @follow.patch
  8. prontera,100,100,5 script MVP Spawner 100,{ mes "["+strcharinfo(0)+"]"; mes "Yes, I'd like to spawn some random MVPs."; next; mes "[MVP Spawner]"; mes "Are you sure? It will cost 10m zeny to spawn 1 random MVP."; next; if( select("Yup:No, that's to much.")==2 ) { mes "[MVP Spawner]"; mes "Sure, maybe next time!"; close; } if( Zeny<10000000 ) { mes "[MVP Spawner]"; mes "You don't seem to have that much money. How about you come back when you get a little more?"; close; } monster "this",-1,-1,"--ja--",-3,1,""; Zeny-=10000000; end; }
  9. warpparty "SavePointAll",0,0,.@party_id; I don't know of Annie's custom bg script so any further assistance is beyond me.
  10. Courtesy of Ziu: https://www.dropbox.com/s/qz25fmuqbyptat6/HeroesTrailsGeneralNPC.rar
  11. //===== rAthena Script ======================================= //= tr0n's Questboard //===== By: ================================================== //= tr0n //===== Current Version: ===================================== //= 1.4.4 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= Easily add collection and hunting quests. //===== Additional Comments: ================================= // 1.0.0 Release // 1.1.0 Added zeny reward // 1.2.0 Rewrote checkmob and killcounter // 1.3.1 Added level restriction // 1.3.4 Added Reward Item Amount // 1.4.4 Added Quest delay //============================================================ sky_quest,41,41,5 script Bulletin Quest 837,{ if(c_run==1){ mes "[^FF7700Questboard^000000]"; mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000"; mes "--------------------------------"; for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); set .@j,.@j+2) { mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000"; } mes "--------------------------------"; mes "[Reward]"; mes "Item: ^0000FF"+((getd("." +currentquest$+"_collectionprize"))?getitemname(getd("." +currentquest$+"_collectionprize"))+" - "+getd("." +currentquest$+"_collectionamount")+" ea.^000000":"Nothing^000000"); mes "Zeny: ^0000FF"+getd("." +currentquest$+"_collectionzeny")+"^000000"; mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+0+"]")+"^000000"; mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+1+"]")+"^000000"; next; if(select("Finish:Abort") == 2){ mes "[^FF7700Questboard^000000]"; mes "Quest aborted."; set currentquest$, ""; set c_run, 0; close; } goto L_checkitems; } if(h_run==1){ mes "[^FF7700Questboard^000000]"; mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000"; mes "--------------------------------"; for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) { set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]"); mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000"; } mes "--------------------------------"; mes "[Reward]"; mes "Item: ^0000FF"+((getd("." +currentquest$+"_huntingprize"))?getitemname(getd("." +currentquest$+"_huntingprize"))+" - "+getd("." +currentquest$+"_huntingamount")+" ea.^000000":"Nothing^000000"); mes "Zeny: ^0000FF"+getd("." +currentquest$+"_huntingzeny")+"^000000"; mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+0+"]")+"^000000"; mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+1+"]")+"^000000"; next; if(select("Finish:Abort") == 2){ mes "[^FF7700Questboard^000000]"; mes "Quest aborted."; for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){ set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]"); setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0); } set currentquest$, ""; set h_run, 0; close; } goto L_checkmobs; } L_questmenu: mes "[^FF7700Questboard^000000]"; mes "Select category:"; next; switch(select((.collection)?"Collection Quests":"", (.hunting)?"Hunting Quests":"", "Exit")) { case 1: set .@collectmenu$, ""; for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1) { if (.@i) set .@collectmenu$,.@collectmenu$+":"; set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$"); } set .@selection,select(.@collectmenu$); if(gettimetick(2) < getd(.@selection + "_collection_delay")){ set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2); mes "[^FF7700Questboard^000000]"; if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again."; if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again."; mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again."; close; } mes "[^FF7700Questboard^000000]"; mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000"; mes "--------------------------------"; for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); set .@j,.@j+2) { mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000"; } mes "--------------------------------"; mes "[Reward]"; mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000"); mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000"; mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000"; mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000"; next; if(select("Accept:Decline") == 2){ close; } if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax")) { mes "[^FF7700Questboard^000000]"; mes "Quest accepted."; set c_run, 1; set currentquest$, .@selection; close; } else { mes "[^FF7700Questboard^000000]"; mes "You don't have the required"; mes "level to do this quest."; close; } case 2: set .@huntmenu$, ""; for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1) { if (.@i) set .@huntmenu$,.@huntmenu$+":"; set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$"); } set .@selection,select(.@huntmenu$); if(gettimetick(2) < getd(.@selection + "_hunting_delay")){ set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2); mes "[^FF7700Questboard^000000]"; if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again."; if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again."; mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again."; close; } mes "[^FF7700Questboard^000000]"; mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000"; mes "--------------------------------"; for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) { mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000"; } mes "--------------------------------"; mes "[Reward]"; mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000"); mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000"; mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000"; mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000"; next; if(select("Accept:Decline") == 2){ close; } if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax")) { mes "[^FF7700Questboard^000000]"; mes "Quest accepted."; set h_run, 1; set currentquest$, .@selection; close; } else { mes "[^FF7700Questboard^000000]"; mes "You don't have the required"; mes "level to do this quest."; close; } case 3: close; } L_checkitems: for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) { if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){ set .@checkitem,.@checkitem+2; } } if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){ mes "[^FF7700Questboard^000000]"; mes "You don't have everything."; close; } for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@delcount,.@delcount+2) { delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]"); } mes "[^FF7700Questboard^000000]"; mes "Congratulation! Here is your Reward."; announce strcharinfo(0)+" has completed the "+getd("."+currentquest$+"_collectionname$")+" quest!",bc_all; if(getd("." +currentquest$+"_collectionprize")!=0) getitem(getd("." +currentquest$+"_collectionprize"),getd("." +currentquest$+"_collectionamount")); set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny"); getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]"); setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay; set currentquest$, ""; set c_run, 0; close; L_checkmobs: set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2); for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){ set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]"); if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){ set .@checkmonster, .@checkmonster+1; if(.@checkmonster==.@goal){ goto L_checkmobs2; } continue; } goto L_checkmobs2; } L_checkmobs2: if(.@checkmonster<.@goal){ mes "[^FF7700Questboard^000000]"; mes "You didn't kill everything."; close; } mes "[^FF7700Questboard^000000]"; mes "Congratulation! Here is your Reward."; announce strcharinfo(0)+" has completed the "+getd("."+currentquest$+"_huntingname$")+" quest!",bc_all; for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){ set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]"); setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0); } if(getd("." +currentquest$+"_huntingprize")!=0) getitem(getd("." +currentquest$+"_huntingprize"),getd("." +currentquest$+"_huntingamount")); set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny"); getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]"); setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay; set currentquest$, ""; set h_run, 0; close; OnNPCKillEvent: if(h_run!=1) end; for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){ if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){ set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]"); if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")>=getd("."+currentquest$+"_huntingmob["+.@i+"]")) end; setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1); dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")"; end; } continue; } end; OnInit: function AddCollection; function AddHunting; //Activate/Deactive quest categories here set .collection, 1; set .hunting, 1; //Quest Delay (seconds) //24 hours = 86400 seconds set .quest_delay, 0; //Checks if quests are loaded (prevents out of index) if(.questsloaded==1) end; set .questsloaded, 1; //Add Collection Quests here //AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...); AddCollection("Angelic Set",99,255,30101,1,1000000,10000,5000,949,2500,916,2500,7063,1000,7938,500,6394,500,7115,500,7440,500,6393,500,7079,5); AddCollection("Mystic Soul Set",99,255,30104,1,1000000,10000,5000,7255,2500,7849,2500,6087,500,6003,50,6001,50,6088,500,7307,500,7701,50,7089,5); AddCollection("Absolute Set",99,255,30102,1,1000000,10000,5000,6269,500,7960,2500,1053,500,7210,2500,6072,2500,7297,50,7430,50,7023,500,6024,10); AddCollection("The Scientist Set",99,255,30103,1,1000000,10000,5000,6278,2500,6274,2500,6541,500,6427,500,672,500,6386,500,7913,500,7871,500,7081,5); AddCollection("Dark Shadow Set",99,255,30105,1,1000000,10000,5000,7524,2500,7886,2500,7345,500,7315,500,7157,500,6089,500,6091,50,18002,50,7837,5); AddCollection("Mermaid Set",99,255,30106,1,1000000,10000,5000,1036,2500,7562,50,951,500,950,500,995,2500,954,500,926,50,722,50,7836,5); AddCollection("Pierrot Set",99,255,30107,1,1000000,10000,5000,6270,2500,6511,2500,7328,500,7803,500,982,500,30011,500,7537,50,7284,50,7833,5); AddCollection("Holy Guardian Set",99,255,30108,1,1000000,10000,5000,6187,2500,6274,2500,7914,500,6395,500,7796,50,7866,50,6152,500,7024,50,7074,5); AddCollection("White Vestment Set",99,255,30109,1,1000000,10000,5000,6418,2500,7960,2500,6173,500,676,500,11524,500,7230,50,30012,50,7092,5); AddCollection("Deadly Shadow Set",99,255,30110,1,1000000,10000,5000,6470,2500,7109,50,7449,500,7563,2500,631,500,678,500,7936,50,6306,50,7090,5); AddCollection("Shadow of Darkness Set",99,255,30111,1,1000000,10000,5000,6100,2500,7798,2500,6027,500,641,500,12020,500,7511,500,7566,50,7340,50,7080,5); AddCollection("Powerful Mantra Set",99,255,30112,1,1000000,10000,5000,7504,2500,1045,2500,7921,500,7057,500,7939,500,6219,500,30013,50,7305,50,7075,5); AddCollection("Goblin Master Coat",99,255,25027,1,1000000,10000,5000,996,200,693,100,7265,300,1820,10,992,100); AddCollection("Clear Cyclops",99,255,25028,1,1000000,10000,5000,7511,1000,7507,200,7111,100,7151,100,1048,200,7312,300); //Add Hunting Quests here //AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...); AddHunting("Valkyrie Quest",150,255,24001,1,1000000,100000,50000,1751,1,1765,10); AddHunting("Darker Than Black",150,255,25001,1,100000,10000,5000,1120,5,1179,50,1116,50,1869,50,1143,50); AddHunting("Thanatos Slaves",150,255,25002,1,100000,10000,5000,1704,10,1705,10,1706,10,1707,10,1708,1); AddHunting("Valkyrie Realm",150,255,25003,1,100000,10000,5000,1765,10,1751,1); AddHunting("Mask of Despair",150,255,25004,1,100000,10000,5000,1130,50,1831,30,1833,30,1837,50,1832,1); AddHunting("Glass of Despair",150,255,25005,1,100000,10000,5000,1130,50,1831,50,1833,50,1837,50,1832,1); AddHunting("Scarf Of Nightmare",150,255,25006,1,100000,10000,5000,1867,50,1268,10,1507,50,1109,50); AddHunting("Ring Of Night",150,255,25007,1,100000,10000,5000,1146,100,1203,10,1379,50); AddHunting("Ring Of Sound Wave",150,255,25008,1,100000,10000,5000,1408,50,1267,100,1513,30,1299,1); AddHunting("Sun Glass Of Hidden",150,255,25009,1,100000,10000,5000,1289,150); AddHunting("Beats By Dr. Dre",150,255,25010,1,100000,10000,5000,1114,500); AddHunting("Ring of Flower",150,255,25011,1,100000,10000,5000,1078,20,1079,20,1080,20,1082,20); AddHunting("Spirit of the Sun",150,255,25012,1,100000,10000,5000,1837,500); AddHunting("Winter Snow",150,255,25013,1,100000,10000,5000,1776,1000); AddHunting("Soul of 2 Headed Dragon",150,255,25014,1,100000,10000,5000,1720,50); AddHunting("Rune of Spells",150,255,25040,1,100000,10000,5000,1639,100,1059,5,1713,300); AddHunting("Shinobi of Konoha",150,255,25042,1,100000,10000,5000,1068,100,1034,100,1785,10); AddHunting("Hollowed Mask",150,255,25039,1,100000,10000,5000,1163,300,1159,5,1583,5); end; function AddCollection { set .collectionquestcount,.collectionquestcount+1; setd ("." +.collectionquestcount+"_collectionname$", getarg(0)); setd ("." +.collectionquestcount+"_collectionmin", getarg(1)); setd ("." +.collectionquestcount+"_collectionmax", getarg(2)); setd ("." +.collectionquestcount+"_collectionprize", getarg(3)); setd ("." +.collectionquestcount+"_collectionamount", getarg(4)); setd ("." +.collectionquestcount+"_collectionzeny", getarg(5)); set .@argcount, 6; set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp")); setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount)); setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1)); set .@argcount, .@argcount+2; while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) { set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem")); setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount)); setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1)); set .@argcount,.@argcount+2; } return; } function AddHunting { set .huntingquestcount,.huntingquestcount+1; setd ("." +.huntingquestcount+"_huntingname$", getarg(0)); setd ("." +.huntingquestcount+"_huntingmin", getarg(1)); setd ("." +.huntingquestcount+"_huntingmax", getarg(2)); setd ("." +.huntingquestcount+"_huntingprize", getarg(3)); setd ("." +.huntingquestcount+"_huntingamount", getarg(4)); setd ("." +.huntingquestcount+"_huntingzeny", getarg(5)); set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp")); set .@argcount, 6; setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount)); setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1)); set .@argcount, .@argcount+2; while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) { set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob")); setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount)); setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1)); set .@argcount, .@argcount+2; } return; } } sky_quest,54,40,3 script Valkyrie Randgris 403,{ for ( .@lv = 1; .@lv < .max_lv; .@lv++ ) { if ( countitem( getd( ".valkyrie_lv"+ .@lv ) ) ) { if ( .@found ) next; .@found++; mes "You have ^0000FF"+ getitemname( getd( ".valkyrie_lv"+ .@lv ) ) +"^000000"; mes "Requirement ->"; .@size = getarraysize( getd( ".valkyrie_lv"+ .@lv ) ); .@complete = 0; for ( .@i = 1; .@i < .@size; .@i += 2 ) { if ( countitem( getd( ".valkyrie_lv"+ .@lv +"["+ .@i +"]" ) ) < getd( ".valkyrie_lv"+ .@lv +"["+( .@i +1 )+"]" ) ) .@color$ = "^FF0000"; else { .@color$ = "^009900"; .@complete++; } mes .@color$ + getd( ".valkyrie_lv"+ .@lv +"["+( .@i +1 )+"]" )+"x "+ getitemname( getd( ".valkyrie_lv"+ .@lv +"["+ .@i +"]" ) ); } if ( .@complete == .@size /2 ) { mes " "; mes "^000000your "+ getitemname( getd( ".valkyrie_lv"+ .@lv ) ) +" has upgrade into "+ getitemname( getd( ".valkyrie_lv"+( .@lv +1 ) ) ); for ( .@i = 1; .@i < .@size; .@i += 2 ) delitem getd( ".valkyrie_lv"+ .@lv +"["+ .@i +"]" ), getd( ".valkyrie_lv"+ .@lv +"["+( .@i +1 )+"]" ); delitem getd( ".valkyrie_lv"+ .@lv ), 1; getitem getd( ".valkyrie_lv"+( .@lv +1 ) ), 1; announce strcharinfo(0)+" has upgrade "+ getitemname( getd( ".valkyrie_lv"+ .@lv ) ) +" into "+ getitemname( getd( ".valkyrie_lv"+( .@lv +1 ) ) ),bc_all|bc_blue; } } } if ( !.@found ) mes "Im Sorry, you need Pure Valkyrie Helm"; //mes "you don't have Pure Valkyrie Helm in your inventory"; close; OnInit: setarray .valkyrie_lv1, 24001, 7090,5,7838,5,7835,5,7837,5,7836,5,7511,500,7563,1000; setarray .valkyrie_lv2, 24002, 7090,10,7838,10,7835,10,7837,10,7836,10,7511,550,7563,1100; setarray .valkyrie_lv3, 24003, 7090,15,7838,15,7835,15,7837,15,7836,15,7511,600,7563,1200; setarray .valkyrie_lv4, 24004, 7090,20,7838,20,7835,20,7837,20,7836,20,7511,650,7563,1300; setarray .valkyrie_lv5, 24005, 7090,25,7838,25,7835,25,7837,25,7836,25,7511,700,7563,1400; setarray .valkyrie_lv6, 24006, 7090,30,7838,30,7835,30,7837,30,7836,30,7511,750,7563,1500; setarray .valkyrie_lv7, 24007, 7090,35,7838,35,7835,35,7837,35,7836,35,7511,800,7563,1600; setarray .valkyrie_lv8, 24008, 7090,40,7838,40,7835,40,7837,40,7836,40,7511,850,7563,1700; setarray .valkyrie_lv9, 24009, 7090,45,7838,45,7835,45,7837,45,7836,45,7511,900,7563,1800; setarray .valkyrie_lv10, 24010, 7090,50,7838,50,7835,50,7837,50,7836,50,7511,950,7563,1900; setarray .valkyrie_lv11, 24011, 7090,60,7838,60,7835,60,7837,60,7836,60,7511,1000,7563,2000; setarray .valkyrie_lv12, 24012; .max_lv = 1; while ( getd( ".valkyrie_lv"+ .max_lv ) ) .max_lv++; .max_lv--; end; }
  12. 12103,Bloody_Dead_Branch,Bloody Branch,2,10000,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ if(Zeny>=1000) { monster "this",-1,-1,"--ja--",-3,1,""; Zeny-=1000; } else { getitem(12103,1); dispbottom("You need at least 1000 Zeny to use this item."); } },{},{}
  13. Skorm

    Help! edit

    That all depends on if you modify it correctly. Search for this and paste the above code over it. /*==================================================== * Timered function to make id follow a target. * @id = bl.id (player only atm) * target is define in sd->followtarget (bl.id) * used by pc_follow *----------------------------------------------------*/ int pc_follow_timer(int tid, unsigned int tick, int id, intptr_t data) { struct map_session_data *sd; struct block_list *tbl; sd = map_id2sd(id); nullpo_ret(sd); if (sd->followtimer != tid){ ShowError("pc_follow_timer %d != %d\n",sd->followtimer,tid); sd->followtimer = INVALID_TIMER; return 0; } sd->followtimer = INVALID_TIMER; tbl = map_id2bl(sd->followtarget); if (tbl == NULL || pc_isdead(sd) || status_isdead(tbl)) { pc_stop_following(sd); return 0; } // either player or target is currently detached from map blocks (could be teleporting), // but still connected to this map, so we'll just increment the timer and check back later if (sd->bl.prev != NULL && tbl->prev != NULL && sd->ud.skilltimer == INVALID_TIMER && sd->ud.attacktimer == INVALID_TIMER && sd->ud.walktimer == INVALID_TIMER) { if((sd->bl.m == tbl->m) && unit_can_reach_bl(&sd->bl,tbl, AREA_SIZE, 0, NULL, NULL)) { if (!check_distance_bl(&sd->bl, tbl, 5)) unit_walktobl(&sd->bl, tbl, 5, 0); } else pc_setpos(sd, map_id2index(tbl->m), tbl->x, tbl->y, CLR_TELEPORT); } sd->followtimer = add_timer( tick + 1000, // increase time a bit to loosen up map's load pc_follow_timer, sd->bl.id, 0); return 0; }
  14. Skorm

    Help! edit

    Something like that can't be done in script... Well it could but poorly. Anyways I found some bits of code lying in the source and adapted them to the @follow command. I'm not saying it's perfect but it works. xD Replace the old pc_follow_timer with this one it's located in pc.c... static int char_warpchase_sub(struct block_list *bl,va_list ap) { struct block_list *target; struct npc_data **target_nd; struct npc_data *nd; int *min_distance; int cur_distance; target= va_arg(ap, struct block_list*); target_nd= va_arg(ap, struct npc_data**); min_distance= va_arg(ap, int*); nd = (TBL_NPC*) bl; if(nd->subtype != WARP) return 0; //Not a warp if(nd->u.warp.mapindex != map[target->m].index) return 0; //Does not lead to the same map. cur_distance = distance_blxy(target, nd->u.warp.x, nd->u.warp.y); if (cur_distance < *min_distance) { //Pick warp that leads closest to target. *target_nd = nd; *min_distance = cur_distance; return 1; } return 0; } int char_warpchase(struct map_session_data *sd, struct block_list *target) { struct npc_data *warp = NULL; int distance = AREA_SIZE; if (target->m == sd->bl.m && check_distance_bl(&sd->bl, target, AREA_SIZE)) return 0; //No need to do a warp chase. if (sd->ud.walktimer != INVALID_TIMER && map_getcell(sd->bl.m,sd->ud.to_x,sd->ud.to_y,CELL_CHKNPC)) return 1; //Already walking to a warp. //Search for warps within mob's viewing range. map_foreachinrange(char_warpchase_sub, &sd->bl, AREA_SIZE, BL_NPC, target, &warp, &distance); if (warp && unit_walktobl(&sd->bl, &warp->bl, 1, 1)) return 1; return 0; } /*==================================================== * Timered function to make id follow a target. * @id = bl.id (player only atm) * target is define in sd->followtarget (bl.id) * used by pc_follow *----------------------------------------------------*/ int pc_follow_timer(int tid, unsigned int tick, int id, intptr_t data) { struct map_session_data *sd; struct block_list *tbl; sd = map_id2sd(id); nullpo_ret(sd); if (sd->followtimer != tid){ ShowError("pc_follow_timer %d != %d\n",sd->followtimer,tid); sd->followtimer = INVALID_TIMER; return 0; } sd->followtimer = INVALID_TIMER; tbl = map_id2bl(sd->followtarget); if (tbl == NULL || pc_isdead(sd) || status_isdead(tbl)) { pc_stop_following(sd); return 0; } // either player or target is currently detached from map blocks (could be teleporting), // but still connected to this map, so we'll just increment the timer and check back later if (sd->bl.prev != NULL && tbl->prev != NULL && sd->ud.skilltimer == INVALID_TIMER && sd->ud.attacktimer == INVALID_TIMER && sd->ud.walktimer == INVALID_TIMER) { if((sd->bl.m == tbl->m) && unit_can_reach_bl(&sd->bl,tbl, AREA_SIZE, 0, NULL, NULL)) { if (!check_distance_bl(&sd->bl, tbl, 3)) unit_walktobl(&sd->bl, tbl, 3, 0); } else { if (!char_warpchase(sd, tbl)) { clif_displaymessage(sd->fd, msg_txt(sd,3)); // Character not found. pc_stop_following(sd); clif_displaymessage(sd->fd, msg_txt(sd,1159)); // Follow mode OFF. return 0; //Not chasing this target. } } } sd->followtimer = add_timer( tick + 1000, // increase time a bit to loosen up map's load pc_follow_timer, sd->bl.id, 0); return 0; } What it does now: If the target is within visual range it will locate and follow them. If they warp through a portal it will attempt to follow them through the portal. The messages that appear when you search for a player, that is online but out of range, are a little off because of the original commands structure. I have a fix for it but it requires more changes in different files. I'm not sure if something so trivial is worth the extra copy and paste.
  15. Sounds more like a source edit to me probably a pretty simple one at that. I'm not 100% sure on this one but in status.c on line 3399 where it says... if(sd->delayrate < 0) sd->delayrate = 0; Try changing that to... if(sd->delayrate < 20) sd->delayrate = 20; Then recompiling. I think your other option here would be to just limit the number of kiels equipped... IE leaving it as a footgear card.
  16. I'm not really sure about the EXP thing but you can disable autoloot and debuff them so they don't have reflect sheild. - script at_abuse -1,{ OnCommand: sc_end SC_REFLECTSHIELD; atcommand "@autoloot 0"; atcommand "@autotrade"; end; OnInit: bindatcmd "autotrade","at_abuse::OnCommand"; } Just follow the format to add more events.
  17. Great work guys!
  18. "if == && if != make me confused." To answer this... == means equal to inside of a condition. Ex: "if .@container is equal to 3? Do .@container+1" if( .@container == 3 ) { .@container++: } && is a way to extend the condition. It's like saying and. Ex: "if .@container is equal to 3 and .@package is equal to 4? Do .@container+1 .@package+2" if( .@contrainer == 1 && .@package == 4 ) { .@container++; .@package+=2; } != treat this like saying is not equal to. Ex: "if .@container is not equal to 3? Do .@container+1." if( .@container != 3 ) { .@container++; } Anyways I hope that helps a little. I don't have time for your other problem atm. :/
  19. This assumes that all his MvPs have a fix respawn time. OnTopic: There is no label for "OnMVPSpawn" I guess, so you would need to remove the variable spawn times and make everything fix and then set up a timer like Skorm said. No it doesn't, I said if the NPC he is using for the "Event" is fixed... Lmao I didn't assume anything. I gave a parameter to my answer.
  20. If your talking about a naturally spawning mvp tutn the map to pvpon with onint bevause spqwn reset when map server resets then add death event to the mvp or choice. Turn pvpoff with that label.when he dies also set a timer for the spawn to turn pvp back on. Sent from phone sorry for grammar.
  21. Break these shackles and set yourself free.

  22. Probably you could try it yourself... Just mess around with @option. Or sc_start SC_FREEZE,600000,0,10000;
  23. OnInit: setmapflag "<map name>",mf_nightmaredrop,off; Or <map_name> mapflag pvp_nightmaredrop off Also did you check mapflag/nightmare.txt
  24. Skorm

    Blacklist

    Yeah it might be a bad idea as the-final-say on whether or not you join a server... But as a forums topic it's a great idea. I personally would love to read all the juicy drama that takes place inside the RO servers throughout the webs. I think if done right it could generate a lot of new traffic.
  25. Female, Why? Athena is the Greek virgin goddess of reason, intelligent activity, arts and literature. Athena is the daughter of Zeus. She sprang full grown in armour from his forehead, thus has no mother. She is fierce and brave in battle but, only wars to defined the state and home from outside enemies. Ageless, probably looks 18-25... Why? Physically first for battle and intelligent... How tall.... Going by Greek mythology I'd say tall (at least 6ft) but tall isn't normally kawaii... Characteristics: Family oriented so kind towards those she trusts; skeptical towards others, but willing to listen without rash impulsive judgment. Main goal for justice or honor maybe. Maybe hop over to the wiki for more information. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- If I was going to base a character solely on our community... Female, Why? Asks a lot of questions. Young, I'd say 16... Curiosity, and eager. Short, slightly shorter than an average 16 year old female. To exemplify, and provoke hot blood. Characteristics: Always asks about anything and everything she doesn't know. Never says please but always says thank you even if it's only sarcasm. Likes to look older than she actually is, so the clothes she picks are often a little too big. She is profoundly obsessed with Anime, Video games, and anything tangible based on the two. Never backs down from a challenge and is always willing to help. If challenged she'll raise the stakes. Will listen to reason but often already has her own unspoken intentions. Impulsive but only when angered. Vastly intelligent beyond her years but none too wise. Skilled artist, linguist, and programmer. Likes: Things her way. Personal projects. The color Blue. Adults she can relate to. Dislikes: Being wrong. Absolutely hates being asked about her age xor height. Kids around her age. Anyone that think they're smart than her. Favorite Video Games: 1. Ragnarok 2. Dota 3. LoL 4. Chrono Trigger 5. Pokemon ( Any but she prefers the originals ) I might have more later but that's a good start... I did have a name but the more I thought about it the less appealing it was to me.
×
×
  • Create New...