Jump to content

Radian

Members
  • Posts

    1546
  • Joined

  • Last visited

  • Days Won

    19

Everything posted by Radian

  1. i've tested it and its working fine. even if you are a level 99 GM account.
  2. Hello everyone can you guys help me with this? how to make this warper NPC //===== rAthena Script ======================================= //= Warper //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.4a //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= A complete - but very condensed - warper script. //= Some coordinates written by Tekno-Kanix and ToastOfDoom. //===== Additional Comments: ================================= //= 1.0 Initial script. //= 1.1 Added missing duplicates and fixed coordinates. //= 1.2 Added new episodes and simplified functions. //= 1.3 Added Renewal checks and Instances menu. //= Aligned coordinates with @go. //= 1.4 Added new Guild Dungeons. //= 1.4a Slight edits. //============================================================ - script Warper -1,{ function Go; function Disp; function Pick; function Restrict; // -------------------------------------------------- // Main Menu: // -------------------------------------------------- menu "Last Warp ^777777["+lastwarp$+"]^000000",-, " ~ Towns",Towns, " ~ Fields",Fields, " ~ Dungeons",Dungeons, " ~ Vending Area",Vending, " ~ Donation Area",Donation; if (lastwarp$ == "") message strcharinfo(0),"You haven't warped anywhere yet."; else warp lastwarp$,lastwarpx,lastwarpy; end; // ------------------- Functions ------------------- // * Go("<map>",<x>,<y>); // ~ Warps directly to a map. // // * Disp("<Menu Option>",<first option>,<last option>); // * Pick("<map_prefix>"{,<index offset>}); // ~ Dynamic menu and map selection (auto-numbered). // // * Disp("<Option 1>:<Option 2>:<etc.>"); // * Pick("","<map1>","<map2>","<etc.>"); // ~ Manual menu and map selection (listed). // // * Restrict("<RE | Pre-RE>"{,<menu option numbers>}); // ~ Only allows map for Renewal or Pre-Renewal modes. // If menu option numbers are given, only those maps // will be restricted (i.e. not for "Go"). // // Other notes: // ~ Array @c[] holds all (x,y) coordinates. // ~ Use @c[2] EXCEPT when maps begin dynamically // at 0: use @c[0] and Pick() offset 1. // -------------------------------------------------- function Go { set lastwarp$, getarg(0); set lastwarpx, getarg(1,0); set lastwarpy, getarg(2,0); warp getarg(0),getarg(1,0),getarg(2,0); end; } function Disp { if (getargcount() < 3) set @menu$, getarg(0); else { set @menu$,""; for (set .@i,getarg(1); .@i<=getarg(2); set .@i,.@i+1) set @menu$, @menu$+getarg(0)+" "+.@i+":"; } return; } function Pick { set .@warp_block,@warp_block; set @warp_block,0; set .@select, select(@menu$); if (getarg(0) == "") { set .@i, .@select; set .@map$, getarg(.@i); } else { set .@i, .@select-getarg(1,0); set .@map$, getarg(0)+((.@i<10)?"0":"")+.@i; } if (.@warp_block & (1<<.@select)) { message strcharinfo(0),"This map is not enabled in "+((checkre(0))?"":"Pre-")+"Renewal."; end; } set .@x, @c[.@i*2]; set .@y, @c[.@i*2+1]; deletearray @c[0],getarraysize(@c); Go(.@map$,.@x,.@y); } function Restrict { if ((getarg(0) == "RE" && !checkre(0)) || (getarg(0) == "Pre-RE" && checkre(0))) { if (getarg(1,0)) { set @warp_block,0; for (set .@i,1; .@i<getargcount(); set .@i,.@i+1) set @warp_block, @warp_block | (1<<getarg(.@i)); } else { message strcharinfo(0),"This map is not enabled in "+((checkre(0))?"":"Pre-")+"Renewal."; end; } } return; } // -------------------------------------------------- Towns: // -------------------------------------------------- menu "Prontera",T1, "Alberta",T2, "Aldebaran",T3, "Amatsu",T4, "Ayothaya",T5, "Comodo",T7, "Einbech",T10, "Einbroch",T11, "Geffen",T13, "Gonryun",T14, "Hugel",T15, "Izlude",T16, "Jawaii",T17, "Lighthalzen",T18, "Louyang",T19, "Lutie",T20, "Manuk",T23, "Midgarts Expedition Camp",T24, "Morroc",T26, "Moscovia",T27, "Nameless Island",T28, "Niflheim",T29, "Payon",T30, "Rachel",T31, "Splendide",T32, "Thor Camp",T33, "Umbala",T34, "Veins",T35, "Yuno",T36; T1: Go("prontera",155,183); T2: Go("alberta",28,234); T3: Go("aldebaran",140,131); T4: Go("amatsu",198,84); T5: Go("ayothaya",208,166); //T6: Restrict("RE"); // Go("brasilis",196,217); T7: Go("comodo",209,143); //T8: Restrict("RE"); // Go("dewata",200,180); //T9: Restrict("RE"); // Go("ecl_in01",48,53); T10: Go("einbech",63,35); T11: Go("einbroch",64,200); //T12: Restrict("RE"); // Go("dicastes01",198,187); T13: Go("geffen",119,59); T14: Go("gonryun",160,120); T15: Go("hugel",96,145); T16: Go("izlude",128,(checkre(3)?146:114)); T17: Go("jawaii",251,132); T18: Go("lighthalzen",158,92); T19: Go("louyang",217,100); T20: Go("xmas",147,134); //T21: Restrict("RE"); // Go("malangdo",140,114); //T22: Restrict("RE"); // Go("malaya",231,200); T23: Go("manuk",282,138); T24: Go("mid_camp",210,288); //T25: Restrict("RE"); // Go("mora",55,146); T26: Go("morocc",156,93); T27: Go("moscovia",223,184); T28: Go("nameless_n",256,215); T29: Go("niflheim",202,174); T30: Go("payon",179,100); T31: Go("rachel",130,110); T32: Go("splendide",201,147); T33: Go("thor_camp",246,68); T34: Go("umbala",97,153); T35: Go("veins",216,123); T36: Go("yuno",157,51); // -------------------------------------------------- Fields: // -------------------------------------------------- menu "Amatsu Fields",F1, "Ayothaya Fields",F2, "Comodo Fields",F5, "Einbroch Fields",F8, "Geffen Fields",F10, "Gonryun Fields",F11, "Hugel Fields",F12, "Lighthalzen Fields",F13, "Louyang Field",F14, "Lutie Field",F15, "Manuk Fields",F17, "Mjolnir Fields",F18, "Moscovia Fields",F19, "Niflheim Fields",F20, "Payon Forests",F21, "Prontera Fields",F22, "Rachel Fields",F23, "Sograt Deserts",F24, "Splendide Fields",F25, "Umbala Fields",F26, "Veins Fields",F27, "Yuno Fields",F28; F1: setarray @c[2],190,197; Disp("Amatsu Field",1,1); Pick("ama_fild"); F2: setarray @c[2],173,134,212,150; Disp("Ayothaya Field",1,2); Pick("ayo_fild"); F3: Restrict("RE"); setarray @c[2],193,220,220,187; Disp("Bifrost Field",1,2); Pick("bif_fild"); //F4: Restrict("RE"); // setarray @c[2],74,32; // Disp("Brasilis Field",1,1); Pick("bra_fild"); F5: Restrict("Pre-RE",5); setarray @c[2],180,178,231,160,191,172,228,194,224,203,190,223,234,177,194,175,172,172; Disp("Comodo Field",1,9); Pick("cmd_fild"); //F6: Restrict("RE"); // setarray @c[2],371,212; // Disp("Dewata Field",1,1); Pick("dew_fild"); //F7: Restrict("RE"); // setarray @c[2],97,314; // Disp("Eclage Field",1,1); Pick("ecl_fild"); F8: Restrict("Pre-RE",2,10); setarray @c[2],142,225,182,141,187,228,185,173,216,173,195,148,272,220,173,214,207,174,196,200; Disp("Einbroch Field",1,10); Pick("ein_fild"); //F9: Restrict("RE"); // setarray @c[2],143,132,143,217; // Disp("El Dicastes Field",1,2); Pick("dic_fild"); F10: Restrict("Pre-RE",13,15); setarray @c[0],46,199,213,204,195,212,257,192,188,171,166,263,248,158,195,191,186,183,221,117,178,218,136,328,240,181,235,235,211,185; Disp("Geffen Field",0,14); Pick("gef_fild",1); F11: setarray @c[2],220,227; Disp("Gonryun Field",1,1); Pick("gon_fild"); F12: Restrict("Pre-RE",3,7); setarray @c[2],268,101,222,193,232,185,252,189,196,106,216,220,227,197; Disp("Hugel Field",1,7); Pick("hu_fild"); F13: setarray @c[2],240,179,185,235,240,226; Disp("Lighthalzen Field",1,3); Pick("lhz_fild"); F14: setarray @c[2],229,187; Disp("Louyang Field",1,1); Pick("lou_fild"); F15: setarray @c[2],115,145; Disp("Lutie Field",1,1); Pick("xmas_fild"); //F16: Restrict("RE"); // setarray @c[2],40,272,207,180; // Disp("Malaya Field",1,2); Pick("ma_fild"); F17: setarray @c[2],35,236,35,262,84,365; Disp("Manuk Field",1,3); Pick("man_fild"); F18: setarray @c[2],204,120,175,193,208,213,179,180,181,240,195,270,235,202,188,215,205,144,245,223,180,206,196,208; Disp("Mjolnir Field",1,12); Pick("mjolnir_"); F19: setarray @c[2],82,104,131,147; Disp("Moscovia Field",1,2); Pick("mosk_fild"); F20: setarray @c[2],215,229,167,234; Disp("Niflheim Field",1,2); Pick("nif_fild"); F21: Restrict("Pre-RE",5,11); setarray @c[2],158,206,151,219,205,148,186,247,134,204,193,235,200,177,137,189,201,224,160,205,194,150; Disp("Payon Forest",1,11); Pick("pay_fild"); F22: setarray @c[0],208,227,190,206,240,206,190,143,307,252,239,213,185,188,193,194,187,218,210,183,195,149,198,164; Disp("Prontera Field",0,11); Pick("prt_fild",1); F23: Restrict("Pre-RE",2,7,9,10,11,13); setarray @c[2],192,162,235,166,202,206,202,208,225,202,202,214,263,196,217,201,87,121,277,181,221,185,175,200,174,197; Disp("Rachel Field",1,13); Pick("ra_fild"); F24: setarray @c[2],219,205,177,206,194,182,224,170,198,216,156,187,185,263,206,228,208,238,209,223,85,97,207,202,31,195,38,195; Disp("Sograt Desert 1:Sograt Desert 2:Sograt Desert 3:Sograt Desert 7:Sograt Desert 11:Sograt Desert 12:Sograt Desert 13:Sograt Desert 16:Sograt Desert 17:Sograt Desert 18:Sograt Desert 19:Sograt Desert 20:Sograt Desert 21:Sograt Desert 22"); Pick("","moc_fild01","moc_fild02","moc_fild03","moc_fild07","moc_fild11","moc_fild12","moc_fild13","moc_fild16","moc_fild17","moc_fild18","moc_fild19","moc_fild20","moc_fild21","moc_fild22"); F25: setarray @c[2],175,186,236,184,188,204; Disp("Splendide Field",1,3); Pick("spl_fild"); F26: setarray @c[2],217,206,223,221,237,215,202,197; Disp("Umbala Field",1,4); Pick("um_fild"); F27: Restrict("Pre-RE",5); setarray @c[2],186,175,196,370,222,45,51,250,202,324,150,223,149,307; Disp("Veins Field",1,7); Pick("ve_fild"); F28: Restrict("Pre-RE",5,10); setarray @c[2],189,224,192,207,221,157,226,199,223,177,187,232,231,174,196,203,183,214,200,124,195,226,210,304; Disp("Yuno Field",1,12); Pick("yuno_fild"); // -------------------------------------------------- Dungeons: // -------------------------------------------------- menu "Abyss Lakes",D1, "Amatsu Dungeon",D2, "Anthell",D3, "Ayothaya Dungeon",D4, "Beach Dungeon",D5, "Bio Labs",D6,"Byalan Dungeon",D8, "Clock Tower",D9, "Coal Mines",D10, "Culvert",D11, "Cursed Abbey",D12, "Einbroch Dungeon",D14, "Gefenia",D15, "Geffen Dungeon",D16, "Glast Heim",D17, "Gonryun Dungeon",D18, "Hidden Dungeon",D19, "Ice Dungeon",D20, "Juperos",D21, "Kiel Dungeon",D22, "Louyang Dungeon",D23, "Magma Dungeon",D24,"Moscovia Dungeon",D26, "Nidhogg's Dungeon",D27, "Odin Temple",D28, "Orc Dungeon",D29, "Payon Dungeon",D30, "Pyramids",D31, "Rachel Sanctuary",D32, "Sphinx",D34, "Sunken Ship",D35, "Thanatos Tower",D36, "Thor Volcano",D37, "Toy Factory",D38, "Turtle Dungeon",D39, "Umbala Dungeon",D40; D1: setarray @c[2],261,272,275,270,116,27; Disp("Abyss Lakes",1,3); Pick("abyss_"); D2: setarray @c[2],228,11,34,41,119,14; Disp("Amatsu Dungeon",1,3); Pick("ama_dun"); D3: setarray @c[2],35,262,168,170; Disp("Anthell",1,2); Pick("anthell"); D4: setarray @c[2],275,19,24,26; Disp("Ancient Shrine Maze:Inside Ancient Shrine"); Pick("ayo_dun"); D5: setarray @c[2],266,67,255,244,23,260; Disp("Beach Dungeon",1,3); Pick("","beach_dun","beach_dun2","beach_dun3"); D6: Restrict("RE",4); setarray @c[2],150,288,150,18,140,134,244,52; Disp("Bio Lab",1,3); Pick("lhz_dun"); //D7: Restrict("RE"); // setarray @c[2],87,47,262,262; // Disp("Brasilis Dungeon",1,2); Pick("bra_dun"); D8: Restrict("RE",6); setarray @c[0],168,168,253,252,236,204,32,63,26,27,141,187; Disp("Byalan Dungeon",1,5); Pick("iz_dun",1); D9: setarray @c[2],199,159,148,283,65,147,56,155,297,25,127,169,277,178,268,74; Disp("Clock Tower 1:Clock Tower 2:Clock Tower 3:Clock Tower 4:Basement 1:Basement 2:Basement 3:Basement 4"); Pick("","c_tower1","c_tower2","c_tower3","c_tower4","alde_dun01","alde_dun02","alde_dun03","alde_dun04"); D10: setarray @c[2],52,17,381,343,302,262; Disp("Coal Mines",1,3); Pick("mjo_dun"); D11: setarray @c[2],131,247,19,19,180,169,100,92; Disp("Culvert",1,4); Pick("","prt_sewb1","prt_sewb2","prt_sewb3","prt_sewb4"); D12: setarray @c[2],51,14,150,11,120,10; Disp("Cursed Abbey",1,3); Pick("abbey"); //D13: Restrict("RE"); // setarray @c[2],285,160,299,29; // Disp("Dewata Dungeon",1,2); Pick("dew_dun"); D14: setarray @c[2],22,14,292,290; Disp("Einbroch Dungeon",1,2); Pick("ein_dun"); D15: setarray @c[2],40,103,203,34,266,168,130,272; Disp("Gefenia",1,4); Pick("gefenia",0); D16: setarray @c[0],104,99,115,236,106,132,203,200; Disp("Geffen Dungeon",1,4); Pick("gef_dun",1); D17: setarray @c[2],370,304,199,29,104,25,150,15,157,287,147,15,258,255,108,291,171,283,68,277,156,7,12,7,133,271,224,274,14,70,150,14; Disp("Entrance:Castle 1:Castle 2:Chivalry 1:Chivalry 2:Churchyard:Culvert 1:Culvert 2:Culvert 3:Culvert 4:St. Abbey:Staircase Dungeon:Underground Cave 1:Underground Cave 2:Underground Prison 1:Underground Prison 2"); Pick("","glast_01","gl_cas01","gl_cas02","gl_knt01","gl_knt02","gl_chyard","gl_sew01","gl_sew02","gl_sew03","gl_sew04","gl_church","gl_step","gl_dun01","gl_dun02","gl_prison","gl_prison1"); D18: setarray @c[2],153,53,28,113,68,16; Disp("Gonryun Dungeon",1,3); Pick("gon_dun"); D19: setarray @c[2],176,7,93,20,23,8; Disp("Hidden Dungeon",1,3); Pick("prt_maze"); D20: setarray @c[2],157,14,151,155,149,22,33,158; Disp("Ice Dungeon",1,4); Pick("ice_dun"); D21: setarray @c[2],140,51,53,247,37,63,150,285; Disp("Entrance:Juperos 1:Juperos 2:Core"); Pick("","jupe_cave","juperos_01","juperos_02","jupe_core"); D22: setarray @c[2],28,226,41,198; Disp("Kiel Dungeon",1,2); Pick("kh_dun"); D23: setarray @c[2],218,196,282,20,165,38; Disp("The Royal Tomb:Inside the Royal Tomb:Suei Long Gon"); Pick("lou_dun"); D24: setarray @c[2],126,68,47,30; Disp("Magma Dungeon",1,2); Pick("mag_dun"); //D25: Restrict("RE"); // setarray @c[2],33,230; // Disp("Malangdo Dungeon",1,1); Pick("mal_dun"); D26: setarray @c[2],189,48,165,30,32,135; Disp("Moscovia Dungeon",1,3); Pick("mosk_dun"); D27: setarray @c[2],61,239,60,271; Disp("Nidhogg's Dungeon",1,2); Pick("nyd_dun"); D28: setarray @c[2],298,167,224,149,266,280; Disp("Odin Temple",1,3); Pick("odin_tem"); D29: setarray @c[2],32,170,21,185; Disp("Orc Dungeon",1,2); Pick("orcsdun"); D30: setarray @c[0],21,183,19,33,19,63,155,159,201,204; Disp("Payon Dungeon",1,5); Pick("pay_dun",1); D31: Restrict("RE",7,8); setarray @c[2],192,9,10,192,100,92,181,11,94,96,192,8,94,96,192,8; Disp("Pyramids 1:Pyramids 2:Pyramids 3:Pyramids 4:Basement 1:Basement"); Pick("","moc_pryd01","moc_pryd02","moc_pryd03","moc_pryd04","moc_pryd05","moc_pryd06"); D32: setarray @c[2],140,11,32,21,4,149,204,218,150,9; Disp("Rachel Sanctuary",1,5); Pick("ra_san"); //D33: Restrict("RE"); // setarray @c[2],364,44,101,141; // Disp("Scaraba Hole",1,2); Pick("dic_dun"); D34: setarray @c[2],288,9,149,81,210,54,10,222,100,99; Disp("Sphinx",1,5); Pick("","in_sphinx1","in_sphinx2","in_sphinx3","in_sphinx4","in_sphinx5"); D35: setarray @c[2],69,24,102,27; Disp("Sunken Ship",1,2); Pick("treasure"); D36: setarray @c[2],150,39,150,136,220,158,59,143,62,11,89,221,35,166,93,148,29,107,159,138,19,20,130,52; Disp("Thanatos Tower",1,12); Pick("tha_t"); D37: setarray @c[2],21,228,75,205,34,272; Disp("Thor Volcano",1,3); Pick("thor_v"); D38: setarray @c[2],205,15,129,133; Disp("Toy Factory",1,2); Pick("xmas_dun"); D39: setarray @c[2],154,49,148,261,132,189,100,192; Disp("Entrance:Turtle Dungeon 1:Turtle Dungeon 2:Turtle Dungeon 3"); Pick("tur_dun"); D40: Restrict("Pre-RE",1,2); setarray @c[2],42,31,48,30,204,78; Disp("Carpenter's Shop in the Tree:Passage to a Foreign World:Hvergermil's Fountain"); Pick("","um_dun01","um_dun02","yggdrasil01"); //D41: Restrict("RE"); // setarray @c[2],57,13,64,88,45,14,26,23; // Disp("Bifrost Tower",1,4); Pick("ecl_tdun"); // -------------------------------------------------- Castles: // -------------------------------------------------- menu "Aldebaran Castles",C1, "Geffen Castles",C2, "Payon Castles",C3, "Prontera Castles",C4, "Arunafeltz Castles",C5, "Schwaltzvalt Castles",C6; C1: setarray @c[2],48,83,95,249,142,85,239,242,264,90; Disp("Neuschwanstein:Hohenschwangau:Nuenberg:Wuerzburg:Rothenburg"); Pick("","alde_gld","alde_gld","alde_gld","alde_gld","alde_gld"); C2: setarray @c[2],214,75,308,240,143,240,193,278,305,87; Disp("Repherion:Eeyolbriggar:Yesnelph:Bergel:Mersetzdeitz"); Pick("","gef_fild13","gef_fild13","gef_fild13","gef_fild13","gef_fild13"); C3: setarray @c[2],121,233,295,116,317,293,140,160,204,266; Disp("Bright Arbor:Scarlet Palace:Holy Shadow:Sacred Altar:Bamboo Grove Hill"); Pick("","pay_gld","pay_gld","pay_gld","pay_gld","pay_gld"); C4: setarray @c[2],134,65,240,128,153,137,111,240,208,240; Disp("Kriemhild:Swanhild:Fadhgridh:Skoegul:Gondul"); Pick("","prt_gld","prt_gld","prt_gld","prt_gld","prt_gld"); C5: setarray @c[2],158,272,83,47,68,155,299,345,292,107; Disp("Mardol:Cyr:Horn:Gefn:Banadis"); Pick("","aru_gld","aru_gld","aru_gld","aru_gld","aru_gld"); C6: setarray @c[2],293,100,288,252,97,196,137,90,71,315; Disp("Himinn:Andlangr:Viblainn:Hljod:Skidbladnir"); Pick("","sch_gld","sch_gld","sch_gld","sch_gld","sch_gld"); // -------------------------------------------------- Guild_Dungeons: // -------------------------------------------------- menu "Baldur",G1, "Luina",G2, "Valkyrie",G3, "Britoniah",G4, "Arunafeltz",G5, "Schwaltzvalt",G6; G1: Restrict("RE",2,3); setarray @c[2],119,93,119,93,120,130; Disp("Baldur F1:Baldur F2:Hall of Abyss"); Pick("","gld_dun01","gld_dun01_2","gld2_pay"); G2: Restrict("RE",2,3); setarray @c[2],39,161,39,161,147,155; Disp("Luina F1:Luina F2:Hall of Abyss"); Pick("","gld_dun02","gld_dun02_2","gld2_ald"); G3: Restrict("RE",2,3); setarray @c[2],50,44,50,44,140,132; Disp("Valkyrie F1:Valkyrie F2:Hall of Abyss"); Pick("","gld_dun03","gld_dun03_2","gld2_prt"); G4: Restrict("RE",2,3); setarray @c[2],116,45,116,45,152,118; Disp("Britoniah F1:Britoniah F2:Hall of Abyss"); Pick("","gld_dun04","gld_dun04_2","gld2_gef"); G5: Go("arug_dun01",199,195); G6: Go("schg_dun01",200,124); // -------------------------------------------------- Instances: // -------------------------------------------------- menu "Bakonawa Lake",I1, "Bangungot Hospital 2F",I2, "Buwaya Cave",I3, "Endless Tower",I4, "Hazy Forest",I5, "Malangdo Culvert",I6, "Nidhoggur's Nest",I7, "Octopus Cave",I8, "Old Glast Heim",I9, "Orc's Memory",I10, "Sealed Shrine",I11; I1: Restrict("RE"); Go("ma_scene01",172,175); I2: Restrict("RE"); Go("ma_dun01",151,8); I3: Restrict("RE"); Go("ma_fild02",316,317); I4: Go("e_tower",72,112); I5: Restrict("RE"); Go("bif_fild01",161,334); I6: Restrict("RE"); Go("mal_in01",164,21); I7: Go("nyd_dun02",95,193); I8: Restrict("RE"); Go("mal_dun01",152,230); I9: Restrict("RE"); Go("glast_01",204,268); I10: Go("gef_fild10",240,198); I11: Go("monk_test",306,143); // -------------------------------------------------- Special: // -------------------------------------------------- menu "Auction Hall",S1, "Battlegrounds",S2, "Casino",S3, "Eden Group Headquarters",S4, "Gonryun Arena",S5, "Izlude Arena",S6, "Monster Race Arena",S7, "Turbo Track",S8; S1: Go("auction_01",22,68); S2: Go("bat_room",154,150); S3: Go("cmd_in02",179,129); S4: Restrict("RE"); Go("moc_para01",31,14); S5: Go("gon_test",48,10); S6: Go("arena_room",100,88); S7: Go("p_track01",62,41); S8: Go("turbo_room",99,114); // -------------------------------------------------- Vending: // -------------------------------------------------- V1: Go("izlude",128,114); // -------------------------------------------------- Donation: // -------------------------------------------------- V2: Go("que_house_s",72,43); } // -------------------------------------------------- // Duplicates: // -------------------------------------------------- alb2trea,57,70,6 duplicate(Warper) Warper#tre 811 alberta,28,240,4 duplicate(Warper) Warper#alb 811 aldebaran,145,118,4 duplicate(Warper) Warper#alde 811 amatsu,203,87,4 duplicate(Warper) Warper#ama 811 ayothaya,209,169,6 duplicate(Warper) Warper#ayo 811 comodo,194,158,4 duplicate(Warper) Warper#com 811 einbech,59,38,6 duplicate(Warper) Warper#einbe 811 einbroch,69,202,4 duplicate(Warper) Warper#einbr 811 gef_fild10,71,339,4 duplicate(Warper) Warper#orc 811 geffen,124,72,4 duplicate(Warper) Warper#gef 811 glast_01,372,308,4 duplicate(Warper) Warper#glh 811 gonryun,162,122,4 duplicate(Warper) Warper#gon 811 hugel,101,151,4 duplicate(Warper) Warper#hug 811 izlu2dun,110,92,4 duplicate(Warper) Warper#izd 811 izlude,130,119,3 duplicate(Warper) Warper#izl 811 //Pre-RE: (132,120) jawaii,253,138,4 duplicate(Warper) Warper#jaw 811 lighthalzen,162,102,4 duplicate(Warper) Warper#lhz 811 louyang,208,103,6 duplicate(Warper) Warper#lou 811 manuk,274,146,6 duplicate(Warper) Warper#man 811 mid_camp,216,288,4 duplicate(Warper) Warper#mid 811 mjolnir_02,85,364,4 duplicate(Warper) Warper#mjo 811 moc_ruins,64,164,4 duplicate(Warper) Warper#moc 811 morocc,159,97,4 duplicate(Warper) Warper#mor 811 moscovia,229,191,4 duplicate(Warper) Warper#mos 811 nameless_n,259,213,4 duplicate(Warper) Warper#nam 811 niflheim,205,179,4 duplicate(Warper) Warper#nif 811 pay_arche,42,134,4 duplicate(Warper) Warper#arc 811 payon,182,108,4 duplicate(Warper) Warper#pay 811 prontera,159,185,3 duplicate(Warper) Warper#prt 811 prt_fild05,279,223,6 duplicate(Warper) Warper#cul 811 rachel,135,116,4 duplicate(Warper) Warper#rac 811 splendide,205,153,4 duplicate(Warper) Warper#spl 811 thor_camp,249,76,4 duplicate(Warper) Warper#thor 811 umbala,106,150,3 duplicate(Warper) Warper#umb 811 veins,214,123,4 duplicate(Warper) Warper#ve 811 xmas,150,136,6 duplicate(Warper) Warper#xmas 811 yuno,162,47,4 duplicate(Warper) Warper#yuno 811 mellina,87,88,3 duplicate(Warper) Warper#mell 99 // -------------------------------------------------- // Duplicates (Renewal): // -------------------------------------------------- brasilis,201,222,4 duplicate(Warper) Warper#bra 811 dewata,204,186,6 duplicate(Warper) Warper#dew 811 dicastes01,194,194,6 duplicate(Warper) Warper#dic 811 ecl_in01,51,60,4 duplicate(Warper) Warper#ecl 811 malangdo,134,117,6 duplicate(Warper) Warper#mal 811 malaya,231,204,4 duplicate(Warper) Warper#ma 811 mora,57,152,4 duplicate(Warper) Warper#mora 811 Walks on this coordinates [ 89,85 ] [ 86, 82 ] [ 80,83 ] im using mellina map. and Talk this messages [ Warper at your Service ] .. [ I can help you with maps like Dungeons, Fields and Towns ] ... [ How about special areas like Vending and Donation areas? ] with 5 seconds delay.. thanks!
  3. Your question is confusing me, I'm not sure what you're trying to do. Thor patcher doesn't offer a built-in encryption system, but it is possible to make encrypted patches for a protected GRF (or unprotected GRF, doesn't matter). There are multiple ways to achieve that : Rgz method Make a RGZ file with your encrypted GRF inside. This is quite easy to do, but it's not an optimal solution if you're planning to do multiple patches on your GRF. Grf in patch list method This is not very well known, but if you put a GRF file name in your patch list, Thor Patcher will merge the file with your default GRF. Example : ... 44 patch2014-09-07.thor 45 patch2014-09-08_encrypted.grf ... So you just need to make a new GRF, put your files to patch in it and encypt it using SecureGRF (I guess that's what you're using). GRF Editor method The method allows you to change the target GRF and save the patch as a Thor file. You will need the most recent version of GRF Editor for that. Encrypt your GRF with SecureGRF. Open the encrypted GRF with GRF Editor. Go in File > Save as... > Change the extension for .thor and save it. Click on the "Container options" tab from the right panel, and there you have all the same settings Thor Maker offers. As for data.ini, I'm... confused. What is your goal? This file is normally used to allow multiple GRFs to be read by your client, assuming you've diffed your client for that. Simply edit an existing one or create it from scratch yourself from a text file (rename it to .ini afterwards). Copy and paste the content in the file from the wiki page you've linked. I am planning to secured my unsecured GRF using thor patcher or patch. also about the data.ini i want to rename it (yes i can easily rename it but it wont read my GRF since the default was DATA.ini) thats why i search how to hex or change the DATA.ini in my client and the problem is i cant find any DATA.ini on my client base on wiki guide.
  4. Cool +1 for this and need to test this as soon as possible.
  5. when i use the vending and cancel it. map server crash.
  6. maybe this one right? /** * Extended Vending system [Lilith] **/ #define ITEMID_ZENY battle_config.item_zeny #define ITEMID_CASH battle_config.item_cash like this? { "item_zeny", &battle_config.item_zeny, 0, 0, ITEMID_ZENY, }, { "item_cash", &battle_config.item_cash, 0, 0, ITEMID_CASH, },
  7. I got this error 1>..\src\map\battle.c(7758): error C2065: 'MAX_ITEMDB' : undeclared identifier 1>..\src\map\battle.c(7758): error C2099: initializer is not a constant 1>..\src\map\battle.c(7759): error C2065: 'MAX_ITEMDB' : undeclared identifier 1>..\src\map\battle.c(7759): error C2099: initializer is not a constant and my battle.c looks like this /** * Extended Vending system [Lilith] **/ { "extended_vending", &battle_config.extended_vending, 1, 0, 1, }, { "show_item_vending", &battle_config.show_item_vending, 1, 0, 1, }, { "ex_vending_info", &battle_config.ex_vending_info, 1, 0, 1, }, { "item_zeny", &battle_config.item_zeny, 0, 0, MAX_ITEMDB, }, { "item_cash", &battle_config.item_cash, 0, 0, MAX_ITEMDB, }, and on my skill.c 1>..\src\map\skill.c(17070): error C2065: 'MAX_ITEMDB' : undeclared identifier i got this line if( nameid > MAX_ITEMDB ) anyone know how to fix this? @bump bump
  8. How can i add or change this into account based. e_tower,81,105,0 script Tower Protection Stone 406,{ set .@party_id,getcharid(3); set .@p_name$,getpartyname(.@party_id); set .@md_name$,"Endless Tower"; set .@etower_timer,checkquest(60200,PLAYTIME); // 12 Hours set .@etower_timer2,checkquest(60201,PLAYTIME); // 2 hours if (!instance_check_party(.@party_id,2)) { mes "Make or join a party with more than 1 member and try again."; close; } if (.@etower_timer == -1) { if (getcharid(3) == getpartyleader(.@party_id,2)) { i change this set .@party_id,getcharid(1); into this set .@party_id,getcharid(3); to make it account base then i change this if (getcharid(0) == getpartyleader(.@party_id,2)) { into this if (getcharid(3) == getpartyleader(.@party_id,2)) { to make it account base. im asking if i am doing it correctly (i am running it on a live server) that's why im asking.
  9. Cool but you need to configure the monsters ID# that will be available right? how about making it works only for MVP or Aggressive monsters? will it be possible? 1474, // Amon Ra summon Mimic 1477, // Amon Ra summon Arclouze 1438, // Amon Ra summon Khalitzburg 1191, // Mimic 1194, // Arclouze 1297, // Ancient Mummy 1785; // Atroce
  10. Hello guys, i don't have any idea how can i do this but i'll just ask how. I am planning to secure my main GRF by using patch of Thor Patcher. does anyone know how to do this? and also, a question for this http://rathena.org/wiki/DATA.INI i tested on 20120410RE client it seems that i can't see the DATA.ini on it. i even follow the guide here. can some help me with this? thanks!
  11. sorry. i will create a request regarding on my question.
  12. you can use woe:se map for the battlegroundhowever, you have to clone the map for it because mf_battleground and mf_gvg will conflict [Warning]: npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing BattleGround flag from prontera in file 'npc/custom1/zzz.txt', line '340'. Good to hear that, are you up to making that kind of battleground? lol. if its paid its ok.
  13. Is it possible that on Battle Ground , you can use the SE WOE maps?
  14. Radian

    MVP announcer

    Alright, thanks for the information =) Thank you, i will work on this. i was searching on the rAthena wiki and all i can find is that example. but anyway thank you again..
  15. Radian

    MVP announcer

    how can i do that? can you give me an example? is this a correct example of what you are saying? mes "I will spawn 5 Porings for you!"; close2; monster "this",0,0,"Poring 1",1002,1,strnpcinfo(0)+"::OnPoring1Dead"; monster "this",0,0,"Poring 2",1002,1,strnpcinfo(0)+"::OnPoring2Dead"; monster "this",0,0,"Poring 3",1002,1,strnpcinfo(0)+"::OnPoring3Dead"; monster "this",0,0,"Poring 4",1002,1,strnpcinfo(0)+"::OnPoring4Dead"; monster "this",0,0,"Poring 5",1002,1,strnpcinfo(0)+"::OnPoring5Dead"; end; OnPoring1Dead: mes "You killed Poring 1"; close; OnPoring2Dead: mes "You killed Poring 2"; close; OnPoring3Dead: mes "You killed Poring 3"; close; OnPoring4Dead: mes "You killed Poring 4"; close; OnPoring5Dead: mes "You killed Poring 5"; close;
  16. Radian

    MVP announcer

    like this right? if (getmonsterinfo(killedrid,MOB_MVPEXP)) thank Euphy, its working now.. How can i modify this script and only announce specific maps of the MVP's?
  17. Hi i was wondering why some normal monsters when killed this script announce it. - script MVPAnnounce -1,{ OnNPCKillEvent: //if ( getmonsterinfo( killedrid,21 )&0x0020 && getgmlevel() > 0 ) if ( getmonsterinfo( killedrid,21 )&0x0020) announce "[ Player ] "+strcharinfo(0)+" has slain [ "+getmonsterinfo(killedrid,0)+" ] at the map of [ "+strcharinfo(3)+" ]",0, 0x9A2EFE; end; } I was hoping that it will only announce MVP monsters. mini boss/normal mobs are not included.
  18. Alright, thanks AnnieRuru & Euphy =)
  19. The query is only needed once, no need to run it every time. 1 Question Euphy about this line + if (!@hm_char_del_check) { // check for deleted character + query_sql("SELECT 1 FROM `global_reg_value` WHERE `str` = '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; + } can i just add that line to the 1.3b version of Mission Hunting? i modified some of the reward and npc of the old version
  20. thanks for the reply. im gonna test this
  21. Hello everyone, i don't know if how to solve this problem. my problem is the Hunting Mission quest in rAthena. now my question is how can i solve this kind of problem? here's the script i'm using //===== rAthena Script ======================================= //= Hunting Missions //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.3b //===== 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. //============================================================ mellina,99,82,3 script Hunting Missions 837,{ 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; set #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: ~ View Top Hunters: ~ ^777777Cancel^000000")) { case 1: mes "[Hunting Missions]"; if (#Mission_Count) { mes "You've started a mission"; mes "on another character."; 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 (set .@i,0; .@i<.Quests; set .@i,.@i+1) { setd "Mission"+.@i, .@mob[.@i]; setd "Mission"+.@i +"_",0; } set #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; } set Zeny, Zeny-.Reset; emotion e_cash; } mes "[Hunting Missions]"; mes "Alright, I've dropped"; mes "your current mission."; specialeffect2 EF_STORMKICK4; for(set .@i,0; .@i<.Quests; set .@i,.@i+1) { setd "Mission"+.@i,0; setd "Mission"+.@i+"_",0; } set #Mission_Count,0; if (.Reset < 0 && .Delay) set #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 "The top hunters are:"; query_sql("SELECT char_id AS id, (SELECT `name` FROM `char` WHERE char_id = id),`value` FROM `global_reg_value` WHERE str = 'Mission_Total' ORDER BY CAST(`value` AS SIGNED) DESC LIMIT 5",.@id,.@name$,.@val); for(set .@i,0; .@i<5; set .@i,.@i+1) mes " [Rank "+(.@i+1)+"] "+((.@name$[.@i] == "")?"^777777none":"^0055FF"+.@name$[.@i]+"^000000 : ^FF0000"+.@val[.@i]+" pt.")+"^000000"; close; case 6: mes "[Hunting Missions]"; mes "Nothing? Okay..."; emotion e_hmm; close; } Mission_Status: set @f,0; deletearray .@j[0], getarraysize(.@j); for(set .@i,0; .@i<.Quests; set .@i,.@i+1) { set .@j[.@i], getd("Mission"+.@i); set .@j[.Quests], .@j[.Quests]+strmobinfo(3,.@j[.@i]); set .@j[.Quests+1], .@j[.Quests+1]+(strmobinfo(6,.@j[.@i])/(getbattleflag("base_exp_rate")/100)*.Modifier[0]); set .@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: set .@Mission_Points, 1+(.@j[.Quests]/.Quests/3); set .@Base_Exp, #Mission_Count*.@j[.Quests+1]/5; set .@Job_Exp, #Mission_Count*.@j[.Quests+2]/5; set .@Zeny, #Mission_Count*.Quests*.@j[.@i]*.Modifier[2]; next; mes "[Hunting Missions]"; mes "Mission rewards:"; mes " > Cash 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) { set @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; set #CASHPOINTS, #CASHPOINTS+.@Mission_Points; //set #Mission_Points, #Mission_Points+.@Mission_Points; set BaseExp, BaseExp+.@Base_Exp; set JobExp, JobExp+.@Job_Exp; set Zeny, Zeny+.@Zeny; for(set .@i,0; .@i<.Quests; set .@i,.@i+1) { setd "Mission"+.@i,0; setd "Mission"+.@i+"_",0; } set #Mission_Count,0; if (.Delay) set #Mission_Delay, gettimetick(2)+(.Delay*3600); set Mission_Total, Mission_Total+1; if (Mission_Total == 1) query_sql("INSERT INTO `global_reg_value` (`char_id`,`str`,`value`,`type`,`account_id`) VALUES ("+getcharid(0)+",'Mission_Total','1',3,0)"); else query_sql("UPDATE `global_reg_value` SET `value` = "+Mission_Total+" WHERE char_id = "+getcharid(0)+" AND `str` = '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"; if (.Delay) mes "every "+((.Delay == 1)?"hour.":.Delay+" hours."); else mes "whenever you want."; mes "That's everything~"; return; function Chk { if (getarg(0) < getarg(1)) { set @f,1; return "^FF0000"; } else return "^00FF00"; } OnBuyItem: set @cost,0; for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1) for(set .@j,0; .@j<getarraysize(.Shop); set .@j,.@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(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1) { getitem @bought_nameid[.@i], @bought_quantity[.@i]; dispbottom "Purchased "+@bought_quantity[.@i]+"x "+getitemname(@bought_nameid[.@i])+"."; } set #Mission_Points, #Mission_Points-@cost; mes "Deal completed."; emotion e_cash; } set @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 (set .@i, 0; .@i<.Quests; set .@i,.@i+1) { 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) { set .@mob, killedrid; getmapxy(.@map1$,.@x1,.@y1,0); getpartymember getcharid(1),1; getpartymember getcharid(1),2; for(set .@i,0; .@i<$@partymembercount; set .@i,.@i+1) { if (isloggedin($@partymemberaid[.@i], $@partymembercid[.@i])) { attachrid $@partymemberaid[.@i]; if (#Mission_Count && Mission0 && HP > 0) { getmapxy(.@map2$,.@x2,.@y2,0); if ((.@map1$ == .@map2$ || .Party == 1) && (distance(.@x1,.@y1,.@x2,.@y2) <= 30 || .Party < 3)) { for(set .@j,0; .@j<.Quests; set .@j,.@j+1) { if (strmobinfo(1,.@mob) == strmobinfo(1,getd("Mission"+.@j))) { if (getd("Mission"+.@j+"_") < #Mission_Count) { dispbottom "[Hunting Mission] Killed "+(set(getd("Mission"+.@j+"_"),getd("Mission"+.@j+"_")+1))+" of "+#Mission_Count+" "+strmobinfo(1,.@mob)+"."; break; } } } } } } } } end; OnInit: set .Delay,0; // Quest delay, in hours (0 to disable). set .Quests,5; // Number of subquests per mission (increases rewards). set .Party,3; // Party options: 0 (exclude party kills), 1 (include party kills), 2 (same map only), 3 (screen area only) set .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,70; setarray .Modifier[0], // Multipliers for Base Exp, Job Exp, and Zeny rewards. getbattleflag("base_exp_rate")/100,getbattleflag("job_exp_rate")/100,60; set .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). 512,1,513,1,514,1,538,5,539,5,558,10,561,10; set .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"; npcshopdelitem "mission_shop",512; for(set .@i,0; .@i<getarraysize(.Shop); set .@i,.@i+2) npcshopadditem "mission_shop", .Shop[.@i], .Shop[.@i+1]; end; } - shop mission_shop -1,512:-1
×
×
  • Create New...