Jump to content

rafoka

Members
  • Posts

    48
  • Joined

  • Last visited

Everything posted by rafoka

  1. Solved this problem, I put this maneria: function script SC_MOVEARM { movenpc getarg(0),rand(2,390),rand(2,390); getmapxy(.@map$,.@x,.@y,1,getarg(0)); if( !checkcell(.@map$,.@x,.@y,cell_chkreach) ){ return 0; } if( !checkcell(.@map$,.@x,.@y,cell_chkpass) ){ return 0; } return 1; } But it keeps giving this error: https://imageshack.com/i/ew518ad9p What can I do?
  2. -script Timmer#AC -1,{ OnInit: //set $arenac_gate, 1; setcell "job_thief1",174,18,185,18,cell_walkable,0; setcell "izlude",112,112,97,125,cell_nochat,1; setcell "izlude",112,112,97,125,cell_novending,1; //Armadilhas set $SC_ARMCRIS,17; //Chance de ir para arena com cristais premiados e PvP. set $SC_ARMBLIND,15; //Chance de congelar por 15 segundos. set $SC_ARMDEG,15; //Chance de diminuir agi. set $SC_ARMEXIT,43; //Chance de ser retirado da sala. set $SC_ARMBON1,7; //Chance de ganhar 2 bandeiras. set $SC_ARMBON2,12; //Chance de ganhar 1 bandeira. set $SC_ARMAGIL,17; //Chance de aumentar sua agilidade. set $SC_ARMDISPELL,15; //Chance de perder todos buffs e de-buffs set $SC_ARMIMUN,23; //Chance de ficar imune a todas armadilhas por 15 segundos set $SC_ARMSTRIP,7; //Chance de divestar algum equip end; //=== Não mexer aqui por favor ==// OnClock1031: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; OnClock1231: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; OnClock1431: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; OnClock1631: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; OnClock1831: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; OnClock2031: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; OnClock2231: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; OnClock0031: mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; end; // OnClock1002: setmapflag "izlude",mf_noskill; end; OnClock1202: setmapflag "izlude",mf_noskill; end; OnClock1402: setmapflag "izlude",mf_noskill; end; OnClock1602: setmapflag "izlude",mf_noskill; end; OnClock1802: setmapflag "izlude",mf_noskill; end; OnClock2002: setmapflag "izlude",mf_noskill; end; OnClock2202: setmapflag "izlude",mf_noskill; end; OnClock0002: setmapflag "izlude",mf_noskill; end; // OnClock1010: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; OnClock1210: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; OnClock1410: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; OnClock1610: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; OnClock1810: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; OnClock2010: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; OnClock2210: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; OnClock0010: set $arenac_gate, 1; announce "A Arena dos Cristais está aberta!",0; end; // OnClock1030: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; OnClock1230: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; OnClock1430: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; OnClock1630: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; OnClock1830: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; OnClock2030: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; OnClock2230: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; OnClock0030: set $arenac_gate, 0; announce "A Arena dos Cristais está fechada!",0; mapwarp "job_thief1","izlude",96,104; mapwarp "que_qaru01","izlude",96,104; mapwarp "job_monk","izlude",96,104; mapwarp "spl_fild01","izlude",96,104; removemapflag "izlude",mf_noskill; end; } izlude.gat,104,117,5 script Arena dos Cristais 470,{ set @limite1, 55; //Limite de usuários arena 1 set @limite2, 50; //Limite de usuários arena 2 set @limite3, 40; //Limite de usuários arena 3 L_Init: if($arenac_gate == 1) goto M_start; mes "[Arena dos Cristais]"; mes "Olá ^FF0000"+strcharinfo(0)+"^000000, hoje é um ótimo dia para dropar bandeiras, não acha?"; next; if($arenac_gate == 1) goto M_start; mes "[Arena dos Cristais]"; mes "Uma pena que a arena está fechada no momento!"; emotion e_wah,1; next; mes "[Arena dos Cristais]"; mes "A arena fica aberta nestes horários:"; mes "^FF0000 10:10 até 10:30 ^000000"; mes "^0000FF 12:10 até 12:30 ^000000"; mes "^FF0000 14:10 até 14:30 ^000000"; mes "^0000FF 16:10 até 16:30 ^000000"; mes "^FF0000 18:10 até 18:30 ^000000"; mes "^0000FF 20:10 até 20:30 ^000000"; mes "^FF0000 22:10 até 22:30 ^000000"; mes "^0000FF 00:10 até 00:30 ^000000"; close; end; M_start: mes "[Arena dos Cristais]"; mes "Qual arena deseja entrar?"; mes "^309A98Usuários VIP TOTAL podem entrar na arena mesmo estando lotada^000000."; if(getgmlevel() >= 20){ mes "^306C2FVocê é um usuário VIP TOTAL^000000."; }else{ mes "^306C2FVocê não é um usuário VIP TOTAL^000000."; } next; menu "Arena 1 ^0000FF[" + getmapusers("job_thief1") + "/" + @limite1 + "]^000000",arena1,"Arena 2 ^0000FF[" + getmapusers("que_qaru01") + "/" + @limite2 + "]^000000",arena2,"Arena 3 ^0000FF[" + getmapusers("spl_fild01") + "/" + @limite3 + "]^000000",arena3; arena1: if($arenac_gate == 1 && getgmlevel () >= 20) { warp "job_thief1",0,0; close; } if($arenac_gate == 1 && getmapusers("job_thief1") < @limite1){ warp "job_thief1",0,0; close; } if($arenac_gate == 1){ mes "[Arena dos Cristais]"; mes "A arena está lotada."; emotion e_wah,1; next; goto L_Init; } mes "[Arena dos Cristais]"; mes "Você está meio atrasado, não é?!"; next; mes "[Arena dos Cristais]"; mes "A arena já fechou!"; emotion e_hmm; close; end; arena2: if($arenac_gate == 1 && getgmlevel () >= 20) { warp "que_qaru01",0,0; close; } if($arenac_gate == 1 && getmapusers("que_qaru01") < @limite2){ warp "que_qaru01",0,0; close; } if($arenac_gate == 1){ mes "[Arena dos Cristais]"; mes "A arena está lotada."; emotion e_wah,1; next; goto L_Init; } mes "[Arena dos Cristais]"; mes "Você está meio atrasado, não é?!"; next; mes "[Arena dos Cristais]"; mes "A arena já fechou!"; emotion e_hmm; close; end; arena3: if($arenac_gate == 1 && getgmlevel () >= 20) { warp "spl_fild01",0,0; close; } if($arenac_gate == 1 && getmapusers("spl_fild01") < @limite3){ warp "spl_fild01",0,0; close; } if($arenac_gate == 1){ mes "[Arena dos Cristais]"; mes "A arena está lotada."; emotion e_wah,1; next; goto L_Init; } mes "[Arena dos Cristais]"; mes "Você está meio atrasado, não é?!"; next; mes "[Arena dos Cristais]"; mes "A arena já fechou!"; emotion e_hmm; close; end; } - script OnDie#2 -1,{ OnPCDieEvent: getmapxy(@mapn$,@x,@y,0); if(@mapn$ == "que_qaru01" || @mapn$ == "job_monk" || @map$ == "job_thief1" || @map$ == "spl_fild01"){ specialeffect2 555; sleep2 750; warp "izlude",96,104; end; } } - script OnDie#1 -1,{ OnPCDieEvent: getmapxy(@mapn$,@x,@y,0,strcharinfo(0)); if(@mapn$ == "job_monk"){ set @charid, getcharid(3); set @killer$,rid2name(killerrid); set @killed$,rid2name($crist_death); if(strcharinfo(0) == @killed$){ if(attachrid(killerrid)){ announce ""+strcharinfo(0)+" matou "+rid2name($crist_death)+" e ganhou 3 bandeiras!",bc_map; getitem 7549,3; specialeffect2 586; } set $crist_death,0; } } end; } job_monk,0,0,5 script Setter#551 -1,{ OnInit: monster "job_monk",0,0,"Cristal Premiado",1395,60,"Setter#551::OnDie"; end; OnDie: set @crist_death, @cristdeath+1; set @SC_RANDOM,rand(1,100); if(@crist_death > 120){ announce "A cabeça de "+strcharinfo(0)+" está ao preço de 3 bandeiras!",bc_map; set $crist_death,getcharid(3); set @crist_death, 0; specialeffect2 744; specialeffect2 233; end; } if(@SC_RANDOM >= 97){ announce ""+strcharinfo(0)+" matou o Cristal premiado e ganhou bônus de 2 bandeiras!",bc_map; getitem 7549,2; } if(@SC_RANDOM > 79 && @SC_RANDOM < 85){ dispbottom "Armadilha! você será jogado para fora"; warp "izlude",96,104; } if(@SC_RANDOM > 4 && @SC_RANDOM < 25){ specialeffect2 744; } if(@SC_RANDOM < 4){ announce "A cabeça de "+strcharinfo(0)+" está ao preço de 3 bandeiras!",bc_map; set $crist_death,getcharid(3); specialeffect2 744; specialeffect2 233; } monster "job_monk",0,0,"Cristal Premiado",1395,1,"Setter#551::OnDie"; end; } function script SC_DISPARM { if(@imun > 0){ emotion e_gg,1; dispbottom "Armadilha falhou! Você está imune."; return; } ARMEXIT: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMEXIT) { specialeffect2 69; specialeffect2 304; dispbottom "Armadilha! Você será jogado para fora"; warp "izlude",96,104; emotion e_sob,1; return; } else { goto ARMDEG; } ARMDEG: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMDEG) { specialeffect2 38; specialeffect2 234; specialeffect2 372; emotion e_an,1; dispbottom "Armadilha! Velocidade Diminuida!"; sc_start SC_DECREASEAGI,80000,50; sc_start SC_CHANGEUNDEAD,50000,0; return; } else { goto ARMDISPELL; } ARMDISPELL: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMDISPELL) { specialeffect2 235; emotion e_omg,1; dispbottom "Armadilha! Todos efeitos foram retirados!"; sc_end SC_ALL; return; } else { goto ARMIMUN; } ARMIMUN: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMIMUN) { specialeffect2 675; specialeffect2 749; emotion e_heh,1; dispbottom "Bônus! Você está imune as armadilhas por 15 segundos!"; set @imun,1; sleep2 15000; set @imun,0; return; } else { goto ARMSTRIP; } ARMSTRIP: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMSTRIP) { switch(rand(1,4)){ case 1: specialeffect2 269; dispbottom "Armadilha! Arma retirada!"; unequip 4; break; case 2: specialeffect2 270; dispbottom "Armadilha! Escudo retirado!"; unequip 3; break; case 3: specialeffect2 271; dispbottom "Armadilha! Armadura retirada!"; unequip 2; break; case 4: specialeffect2 272; dispbottom "Armadilha! Capacete retirado!"; unequip 1; break; } emotion e_omg,1; return; } else { goto ARMBON1; } ARMBON1: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMBON1) { specialeffect2 100; specialeffect2 847; emotion e_gg,1; dispbottom "Bônus! Você recebeu 2 Bandeiras Nacionais!"; getitem 7549,2; return; } else { goto ARMBON2; } ARMBON2: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMBON2) { specialeffect2 100; emotion e_heh,1; dispbottom "Bônus! Você recebeu 1 Bandeira Nacional!"; getitem 7549,1; return; } else { goto ARMBLIND; } ARMBLIND: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMBLIND) { if (checkoption(0x10)){ set @falcon, 1; } if (checkoption(0x20)){ set @peco, 1; } specialeffect2 108; emotion e_wah,1; dispbottom "Armadilha! Congelado!"; atcommand "@option 2"; if (@falcon > 0){ setoption 0x10; } if (@peco > 0){ setoption 0x20; } sleep2 6000; atcommand "@option 0"; if (@falcon > 0){ setoption 0x10; set @falcon, 0; } if (@peco > 0){ setoption 0x20; set @peco, 0; } return; } else { goto ARMAGIL; } ARMAGIL: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMAGIL) { dispbottom "Bônus! Você recebeu Aumentar Agilidade Nv. 10!"; emotion e_rice,1; sc_start 32,240000,10; skilleffect 29,0; specialeffect2 507; specialeffect2 519; return; } else { goto ARMCRIS; } ARMCRIS: set @SC_RANDOM,rand(1,100); if(@SC_RANDOM <= $SC_ARMCRIS) { emotion e_cash,1; pcblockmove getcharid(3),1; specialeffect2 60; specialeffect2 501; sleep2 2400; pcblockmove getcharid(3),0; dispbottom "Bônus! Teleporte para a Arena Premiada!"; specialeffect2 227; warp "job_monk",0,0; return; } else { goto ARMBONN; } ARMBONN: set @SC_RANDOM,rand(1,20); if(@SC_RANDOM <= 1){ if(countitem(7549) > 2) { specialeffect2 722; specialeffect2 380; emotion e_sob,1; dispbottom "Armadilha! Você perdeu 3 Bandeiras Nacionais!"; delitem 7549,3; return; } goto ARMFIM; }else{ goto ARMFIM; } ARMFIM: set @SC_RANDOM,rand(1,10); if(@SC_RANDOM <= 5){ if(countitem(7549) > 0) { specialeffect2 18; emotion e_wah,1; dispbottom "Armadilha! Você perdeu 1 Bandeira Nacional!"; delitem 7549,1; return; } return; } return; } function script SC_MOVEARM { movenpc 0,rand(2,390),rand(2,390); getmapxy(.@map$,.@x,.@y,1,0); if( !checkcell(.@map$,.@x,.@y,cell_chkreach) ){ return 0; } if( !checkcell(.@map$,.@x,.@y,cell_chkpass) ){ return 0; } return 1; } - script Warper#AC -1,{ end; OnTimer90000: areawarp "spl_fild01",rand(13,384),rand(18,387),rand(13,384),rand(18,387),"job_monk",0,0; initnpctimer; end; OnTimer60000: areawarp "job_thief1",rand(18,341),rand(18,341),rand(18,341),rand(18,341),"job_monk",0,0; end; OnInit: initnpctimer; end; } // spl_fild01,0,0,5 script SC_ARMS3#1::ARM2 -1,7,7,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000: SC_MOVEARM: movenpc strnpcinfo(0),rand(13,384),rand(18,387); initnpctimer; end; } spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#2 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#3 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#4 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#5 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#6 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#7 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#8 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#9 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#10 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#11 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#12 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#13 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#14 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#15 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#16 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#17 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#18 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#19 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#20 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#21 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#22 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#23 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#24 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#25 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#26 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#27 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#28 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#29 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#30 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#31 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#32 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#33 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#34 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#35 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#36 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#37 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#38 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#39 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#40 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#41 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#42 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#43 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#44 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#45 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#46 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#47 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#48 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#49 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#50 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#51 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#52 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#53 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#54 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#55 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#56 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#57 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#58 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#59 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#60 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#61 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#62 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#63 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#64 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#65 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#66 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#67 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#68 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#69 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#70 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#71 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#72 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#73 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#74 -1,7,7 spl_fild01,0,0,5 duplicate(ARM2) SC_ARMS3#75 -1,7,7 // job_thief1,0,0,5 script SC_ARMS#1::ARM1 -1,7,7,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000: SC_MOVEARM: movenpc strnpcinfo(0),rand(19,340),rand(27,340); initnpctimer; end; } job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#2 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#3 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#4 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#5 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#6 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#7 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#8 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#9 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#10 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#11 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#12 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#13 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#14 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#15 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#16 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#17 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#18 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#19 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#20 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#21 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#22 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#23 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#24 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#25 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#26 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#27 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#28 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#29 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#30 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#31 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#32 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#33 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#34 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#35 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#36 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#37 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#38 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#39 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#40 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#41 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#42 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#43 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#44 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#45 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#46 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#47 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#48 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#49 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#50 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#51 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#52 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#53 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#54 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#55 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#56 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#57 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#58 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#59 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#60 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#61 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#62 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#63 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#64 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#65 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#66 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#67 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#68 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#69 -1,7,7 job_thief1,0,0,5 duplicate(ARM1) SC_ARMS#70 -1,7,7 // que_qaru01,0,0,5 script SC_ARMS2#1 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#2 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#3 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#4 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#5 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#6 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#7 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#8 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#9 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#10 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#11 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#12 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#13 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#14 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#15 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#16 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#17 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#18 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#19 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#20 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#21 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#22 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#23 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#24 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#25 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#26 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#27 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#28 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#29 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#30 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#31 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#32 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#33 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#34 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } que_qaru01,0,0,5 script SC_ARMS2#35 -1,4,4,{ OnInit: callsub SC_MOVEARM; initnpctimer; end; OnTouch: callfunc "SC_DISPARM"; OnTimer60000:SC_MOVEARM: if( !callfunc("SC_MOVEARM",strnpcinfo(0)) ){ callsub SC_MOVEARM; } initnpctimer; end; } //Spawns do cristal. que_qaru01,0,0,0,0 monster Cristal pbRO 1395,95,30000,0,0 job_thief1,0,0,0,0 monster Cristal pbRO 1395,120,35000,0,0 spl_fild01,0,0,0,0 monster Cristal pbRO 1395,100,30000,0,0 gld_dun02,0,0,0,0 monster Cristal pbRO 1395,25,1800000,0,0 schg_dun01,0,0,0,0 monster Cristal pbRO 1395,25,1800000,0,0 //Warps D: que_qaru01,346,81,0 script WBQ#1-1 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,132,171,0 script WBQ#1-2 45,1,1,{ OnTouch: warp "que_qaru01",114,158; end; } que_qaru01,149,105,0 script WBQ#1-3 45,1,1,{ OnTouch: warp "que_qaru01",119,103; end; } que_qaru01,129,102,0 script WBQ#1-4 45,1,1,{ OnTouch: warp "que_qaru01",146,109; end; } que_qaru01,252,339,0 script WBQ#1-5 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,73,272,0 script WBQ#1-6 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,275,298,0 script WBQ#1-7 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,259,375,0 script WBQ#1-8 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,244,375,0 script WBQ#1-9 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,228,297,0 script WBQ#2-1 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,345,22,0 script WBQ#2-2 45,1,1,{ OnTouch: warp "que_qaru01",0,0; end; } que_qaru01,114,163,0 script WBQ#2-3 45,1,1,{ OnTouch: warp "que_qaru01",135,172; end; } //Mapflags. que_qaru01 mapflag nowarpto que_qaru01 mapflag nosave SavePoint que_qaru01 mapflag nomemo que_qaru01 mapflag nobranch que_qaru01 mapflag noreturn que_qaru01 mapflag noicewall que_qaru01 mapflag noteleport spl_fild01 mapflag nowarpto spl_fild01 mapflag nosave SavePoint spl_fild01 mapflag nomemo spl_fild01 mapflag nobranch spl_fild01 mapflag noreturn spl_fild01 mapflag noicewall spl_fild01 mapflag noteleport job_monk mapflag nowarp job_monk mapflag nosave SavePoint job_monk mapflag nomemo job_monk mapflag nobranch job_monk mapflag pvp job_monk mapflag noreturn job_monk mapflag noteleport job_thief1 mapflag noreturn job_thief1 mapflag nowarpto job_thief1 mapflag nosave SavePoint job_thief1 mapflag nomemo job_thief1 mapflag nobranch job_thief1 mapflag noicewall job_thief1 mapflag noteleport gld_dun02 mapflag pvp schg_dun01 mapflag pvp Image of error:
  3. Hi rafoka, This should explain it; http://www.cyberciti.biz/faq/linux-unix-osx-bsd-windows-0-0-0-0-network-address/ Thank you, I readed some about it, but I think that rAthena still doesn't support to bind (listen) multiple interfaces (maybe because it's only useful in very few cases, like me). Sad :/
  4. Hello, I've a dedicated server running rAthena. My server have 5 different IPs (and interfaces, eth0 ... eth4) and I'm trying to support connections from all these IPs (listening all IPs), because sometimes a player have a better connection from eth0 than eth4 (I know, it's weird, but I'm pretty sure about this). So, is possible to listen all interfaces ? login_athena.conf: // The login server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. //bind_ip: 127.0.0.1 // Login Server Port login_port: 6900 char_athena.conf: // Login Server IP // The character server connects to the login server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. login_ip: 127.0.0.1 // The character server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. //bind_ip: 127.0.0.1 // Login Server Port login_port: 6900 // Character Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. char_ip: wan ip eth0 // Character Server Port char_port: 6121 map_athena.conf: // Character Server IP // The map server connects to the character server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. char_ip: 127.0.0.1 // The map server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. //bind_ip: 127.0.0.1 // Character Server Port char_port: 6121 // Map Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. map_ip: my wan ip eth0 // Map Server Port map_port: 5121
  5. Sorry, but I'm trying to show to you in the tutorial How to Handle Patch Errors. You aren't supposed to take rathena 17271 e apply my patch on it, you need to take rathena 17170, apply the patch and then update and then apply my patch of section 6. Finally you should verify by errors on compile and read the section 5 to handle these errors. If I do the way you are saying I'll need to update the .patch file all the time and it's not nice.
  6. Still waiting for the shopping cart Choko.. and then I will surely buy this
  7. Well, you can also read what I've said in 5. Changed Functions (how to handle with the new parameters!). But for now I will help you. You should add a NULL in the pc_delitem, pc_additem functions on the second parameter! Like this: before: pc_delitem(sd,i,...) after: pc_delitem(sd,NULL,i,...) Do the same for pc_additem (put a NULL in the second parameter). Always, if there's missing a parameter error on a function and there isn't a player/mob/npc related in this transaction that you want to log on pc_additem or pc_delitem so you should add the NULL on the second parameter. Hope that this explains well
  8. Hello people! I know this topic: http://rathena.org/board/topic/71312-disabling-lvl-99-and-150-aura/ But I'm getting the same problem! Previously had the diff DisableLevel99Aura but today I cannot do a thing like that. I can disable auras in battle/client.conf but i can't disable the client to show to the user and just to the user the aura when the character is on level 99 or 150. What is possible to do is put default /aura ON, so the auras will be simplified. Anyone help with this? I think it is a problem of diff, but have not found anything like that yet. I already faced the standard list of diffs weediffgen have.
  9. No, it's needed to change the rAthena that handle the geoIP database. I thought right and it's silly to spend time on it, there is an API for PHP that can solve it more easily, the C API they have is very comprehensive and difficult to install Linux and Windows at the same time.
  10. Hello people, I think can be very useful if have a src mod that extend the support to GeoIP City! Actually, it's only GeoIP Country. The maxmind have a API, I downloaded it but my knowledges is not enough to integrate the API on rAthena or just adapt the acual rA code to read city database. http://dev.maxmind.com/geoip/geolite I think we can use, for example, to determine if people are using multiple accounts when "invite a player and win a reward", "v4p" and so many anti-fraud features. Also I can imagine something funny with that... a event that separates people by city/states/regions something like that could be funny. I looked at the actual rA code, but I could not adapt it to read the cities because there are some constants that do not know what values ​​should be, among other things.
  11. I can help but i don't have any idea how to resolve a DNS to IP in C. EDIT: It's already done in the code, so I just added it to the diff. I took the liberty of calling this version 1.1 Changes. * support DNS on ips, so you can put your no-ip hostname and it will works. * added a 'cache' system to up the efficiency. * changed "level" to "group_id" because it is the more correct name now NOTE: Only tested on localhost, sorry guys. I think isn't bugged but any bug i will try to fix. MasterPassword v1.1.diff
  12. very useful to force player to talk to a npc or something like that
  13. Good job, I personally like that hard core system
  14. Today I spent some time cleaning up the code and making the system more coherent. And there was also a recent update of the auction messages that left my diff quickly outdated. I will test the changes I made, move to a new version of rAthena and then I post the diff here. See ya. EDIT: Hello Guys, HUmpfff! FInally i edited all the topic, put examples and explained how to how to use the system modified functions, so it does not break in the future. NOTE: About revision 17170: If you experienced messages like ??#0 in the related_npc_name field (picklog) after making an auction, you need to increase the value of CHAR_MAX_MSG to 250 or higher, this is a rAthena bug of revision 17170 and I think it will be fixed soon.
  15. Good to see that someone appreciates it. It took some time to do because there are many changes in source. I've been thinking about optimizing the code and fix the diff to rAthena, but only worth it if someone else besides me is using, hehe.
  16. Hello everybody, Just a Better (intuitive) Log System Problem In my life of server administration always happened a few episodes where I had to check the logs and this always was a so boring task. Despite the caution, I had problems with players beign hacked (stolen their items) and even corruption of GameMasters. So I decided to spend some good time (I do not have much experience with the source of rAthena) to make a better system logs, so I can solve all kinds of problems (hacking, GM corruption, Bug Abuse, etc.) quickly and efficient. Solution In this system I improved some things and I left these things the way I initially had idealized the logs (in a more intuitive way), I'll try reporting the changes for each transaction: 1. A General View -- Trade/Vending/Buying Store/Mail Very simple, the new values of the row (related_char_id, related_account_id) is the another player of the trade/vending/buying store. -- Pick In every player Pick (type = 'P') the (related_char_id, related_account_id) can be another player or a mob (both columns = mob_id). It varies between who primiraly dropped the item to the floor: A player or a mob (when the mob die). -- Auctions In every auction transaction will be a info code to help you to discover what's going on! Later I will explain each code. -- Loot Mobs can loot items, when this happens will be a row with type='L'. Related_ids of this row is the item origins (a player or another mob, is who primarily dropped the item). -- Drop When a mob or player drops an item, it's still not related to anybody because we can't know who WILL pick the item. So in this case related_ids = 0. -- Scripts/NPCs If a NPC give/delete a item, the row column related_npc_name = npc name. -- Stolen/Mvp prizes It are in essence equal to mob drop, and works just like this one. 2. Explaining better some features These are the features that give me the harder work to make. It's hundreds of lines changeds in the source, but I think it's worth. The Drop/Pick System is a little complex, and I explain above how it works, but if you don't want to know everything you can just jump this section! -- Trade/Vending/Buying Store Very simple, the new values of the row (related_char_id, related_account_id) is the another player of the trade/vending/buying store. -- Drops/Picks Improved To understand this improvement well, you need to know that the emulator handles in different way the actions of: Mob drops a item (type='M') and Mob drops a looted item (type='L', amount negative). Also there's an operation where Mobs Loot a item (type='L', amount positive). But let focus on the informations that will be provided on the log rows, and how the system works: - Mob drop an item (type='M') Main ID is the mob_id. Item origins are setted=mob_id. Related_IDs = NULL. The monster dies and drop the item to the floor. - Player drop an item (type='P', amount negative) Main ID is the player. Item origins are setted=player_id. Related_IDs = NULL. The player just dropped the item to the floor. - Mob Loot an Item (type='L', amount positive) Main ID is the mob_id. Item origins aren't changed. Show item origins in related_IDs (can be a mob_id or a player_ids). - Mob Drop an Looted Item (type='L', amount negative) Main ID is the mob_id. Item origins aren't changed. Show item origins in related_IDs (can be a mob_id or a player_ids). - Player Pick an item (type='P', amount positive) Main ID is the player. Show item origins in related_IDs (the player who dropped) or (the mob_id that dropped the item). NOTE: Here is when you know the source of a player pick. So as i said: A player can't pick another player item without making a trace in related columns. More properly speaking, a player can't pick a item without you know the REAL SOURCE that primarily put it on the floor. - Mail In this system, mail transactions are full logged with related player that send and receive items/zeny on attachments. - Extra info on Auctions (and other systems that use mail_sendmail). New parameter send_is_NPC: Field of NPC Name will be logged. Alter on sender_id: If send_is_NPC is true, can use it to log a Related Player to this transaction. New parameter extra_log_info: If send_is_NPC is true, this string will be added on the end of npc_name_related on the logs. Extra info on NPC NAME of Auctions: "#0": new auction created, "#1": auction ended by time, "#2": auction ended by seller, "#3": auction ended by buy now, "#-1": auction canceled by seller, "#-2": auction no buyers, "#-3": auction {returned} bids, "#-4": auction failed by techinical error. - Other Systems that uses mail_sendmail() If you have a mod in source that uses mail_sendmail() you can add the new parameters (send_is_NPC, extra_log_info) to put information that you can view later on LOGs. And also, you can turn send_is_NPC=ON and use sender_id param to LOG that transaction binding a player to that transaction as a sender. Imagine that: A NPC system (that uses mail_sendmail()) that the GMs uses to give rewards to players in events, so you can call mail_sendmail() with send_is_NPC=true, sender_id=acc id of GM, send_name = "Event Rewards", extra_log_info = "". And all will be fine. In mail picklogs the GM CID and AID will be logged as related. 3. Tables PickLog Table 4 New columns: account_id: just the account_id of the player who triggered this picklog. related_char_id and related_account_id: These are the fields that will represent a person related to that transaction picklog BUT not the main person. (The other person in the trade, sale, mail, etc.). If is a pick from original mob drop (mob die and drop-NOT LOOT), it will be both = mob_id. related_npc_name is used when a npc is related to the transaction (name of the npc). Note: In transactions where there's no other player/npc/mob related, these related_values will be just 0 or a empty string. IDs 5-6: Trade IDs 8-7: Vending IDs 9-10: PlayerA drop and then playerB pick. IDs 15-18: PlayerA drop, mob(1153) loot, PlayerB pick. IDs 19-23: mob(1153) drop, mob(1177) loot, player pick. IDs 58-59: NPC buy/sell IDs 67-70: PlayerA make mr.smile quest IDs 71-72: Mob drop, player pick. IDs 79-81: Weapon Refine Skill IDs 109-110: mob 1159(phreeoni) 'drop' mvp prize item, playerA pick. IDs 112-113: PlayerA send mail, PLayerB pick attachment. IDs 116-117: Auction Started, Auction finalized (no buyers in time). IDs 122-121: BUying Store. ID 123: PlayerA atcommand "#item playerB poring_card" ZenyLog Table 4 New columns: account_id: just like picklog. (main player who triggered zenylog) related_char_id and related_account_id: just like picklog. (another person/mob related) related_npc_name just like picklog. (npc related) The transactions Trade, Vending, #Zeny, Mail, Auction, Buying Store create a related_ids to the another player in the transaction. Buy/Sell and "set Zeny, x" are NPC-Related so related_npc_name will be = the related npc name. (oh rly!?) Example: ID 1: Kafra "set Zeny, Zeny - 820" -> Cart Rental IDs 2-3: Trade IDs 4-5: Vending IDs 6-7: Zeny Knife granted zeny IDs 9-10: Buy/Sell on NPC IDs 12-13: Loss zeny on skills IDs 17: PlayerA sent a mail to playerB with zeny attached IDs 19: PlayerA started a auction a pay the fee. IDs 20-21: Buying Store AtcommandLog Table There are very few modifications in this table. Just the related_ids that are used when someone uses a #command that affects another player. So, related_ids = who typed #command. ID 191: Rafa2 gives card to Merchant player. -> Related info! ID 216: Rafa2 picks a card to himself ID 217: Rafa2 gives zeny to Merchant player -> Related info! ID 220-221: Rafa2 uses #command but to himself, no related info. #Commands also works well with picklog and zenylog, as you can see on the screens: Pick: Zeny: Note: If playerx types #zeny playerx 1000 the related_ids should be = 0, because in this case it's just not related to someone else. ChatLog 2 new fields: dst_charid, dst_accountid. As the name says, it's the player who received the whisper message (to others types of message it's = 0). SQL Indexes I also added some very useful indexes IMO on sql logs to make the select queries faster (I know that it make the insert slower), but when you have a 4 GB picklog DB it's better to have some CPU Cycles lost everytime than can't make queries without mysql going to 99% CPU utilization. If someone knows better about indexes optimization I can edit this to get a better performance to all of us 4. Download I would recommend to do a manual diff apply, it's not a big deal for who know. For download, there's a one that is completely based on rAthena 17170. Improved Logging System v1.2 rAthena.diff And another to eAmod-rAthena r49. Improved Logging System v1.2 _eAmod.diff SQL mail modified table: improved_log_mail.sql Logs SQL Modifieds tables: improved_logging_system.sql Maybe it's best you download a new revision of 17170 rAthena locked in, apply the patch and then update the SVN. Because are many changes in source, edit it is boring (I did twice and I'm very tired). 5. Changed Functions (how to handle with the new parameters!) I do not intend to update this code often to be laborious. I changed the code in much the second parameter of the functions, I did it because if there is something wrong it will generate compilation errors more easily. Compilation errors are your friends! So you can see where the error is and fix, which is much better than having a bug and do not know where to fix it. But I will not leave you in deep shit and above are the modified functions and how to handle with them: typedef struct // Improved Logging System [rafoka] { /* field // equivalent on SQL row */ int type; // int int1; // `related_char_id` int int2; // `related_account_id` char str1[40]; // `related_npc_name` } Related_Log_Info; typedef enum e_log_improved_system // Improved Logging System [rafoka] { LOG_RELATED_NOTHING = 0, LOG_RELATED_PLAYER = 1, LOG_RELATED_NPC = 2, LOG_RELATED_MOB = 3, LOG_RELATED_OTHER = 4, LOG_RELATED_PLAYER_BUT_SD_OFFLINE = 5, LOG_RELATED_LOOT = 6, LOG_RELATED_CUSTOM_MAIL = 7, LOG_DO_NOT_LOG = -1, } e_log_improved_system; Explanation: This struct is used to keep the related_values (who is related to that transaction) and it's passed by function to function until get on the log_pick/log_zeny/log_atcommand functions, that saves in SQL all the row and uses Related_Log_Info. IF your transaction don't have a related object (player, npc or mob) you can just put NULL on a function that receives Related_Log_Info* as argument (it's safe to!). Explanation: The related_log_infos is obviously: It is to receive the info to fill the (related_ids and related_npc_name) on the SQL rows. Explanation: It's explained in the text: send_is_NPC is a flag to custom mails (not ordinary mails sended by players) and extra_log_info is a optional argument that writes a little extra text on Log ROws when the player picks the attachment of this mail. Explanation: All the cases are already handled I don't think do you need to edit any of this. You can just put NULL because these functions are used only when mails are failed to be sent. There is just one time when we need to use mail_removeitem(sd,&info,1) in the place of common mail_removeitem(sd,NULL,0) and it's of course already handled in the diff. mail_getattachment() is when the player will pick the item so you always need to call this function with info correctly setted, actually it's handled on the diff but we don't know, the things can just change. Explanation: If there's no one object related to the transaction (player, mob or npc) you can just put NULL on these parameters. If there's a object (but not the main player) that is related to that transaction so you need to create a Related_Log_Info object and set the related object informations using make_related_log_info() and then call the function with all information correctly setted on the Related_Log_Info. There's a lot of examples on the DIFF. This varies if is a player, mob or npc. If If I'm not mistaken, pc_cart_delitem(sd,&info..) is only used on vendings and pc_setparam(sd,&info...) is only used to "set Zeny" in scripts. Functions that are your friends If someday you want to create a new transaction or the SVN Update just created a new transaction on the source and you want to fill the related_Columns of this transaction so you can use these functions. There's a lot of examples in the DIFF on how to use it. If it's related to a mob, char_id and account_id = mob_id, if it's related to a npc, char_id and acc_id = 0 and npc_mob_name = name of npc. The 1st function catch info of log and put on the Related_Log_Info, the second just fill the Related_Log_Info with NULL (but sometimes it's needed to avoid crashs). Data structures changed When in the source you drop a item (map_addflooritem), you need to use droppedBy_charid and droppedBy_accid to write who dropped the item (or the mob). Soo.. that's all folks! I worked hard here so that everyone who wants to use the system, able to do this. And use it without any problem in the future (or few problems) and being able to edit something from the source if necessary. EDIT: 6. Updates I explained how to do when there's a update that "conflits" with the Improved Logging System. But I will put here a update (example) and also because I think this one is important: Revision 17142 (cashshop inside the game creation): cashshop.c IMPROVED LOG SYSTEM patch r17142.patch It is at the same time a example how to create new logs with this system. See ya!
  17. New feature(s) ideas: + Option to add an item from a day X until day Y, that is, a temporarily available item (promotions, events, etc). + Option to from a day X until day Y, get a lower price to ALL itens ou just a GROUP of itens ! (Consumables, equips, etc). Still waiting shopping cart to buy. Sorry for bad english, Cheers!
  18. We are waiting Choko, it's about 110% chance that I will not be hesitating if you have the shopping cart. Your addon is very beautiful * - *
  19. Looks awesome! I would like to buy the system with shopping cart
  20. MAC address is the easier mechanism to hack ! Maybe a config IP that allows hostnames on-the-fly resolved. Majority routers have a config to automatic update a NO-IP/Dyndns hostname in theirs configs.
  21. really needed or it will not be coherent (in my server).
×
×
  • Create New...