Jump to content

_Okuz_

Members
  • Posts

    92
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by _Okuz_

  1. Hello myieee, how are you buddy? Try this one: https://rathena.org/board/topic/57377-dead-link-toastys-woe-controller/ If you don't like it, try looking at this forums: https://rathena.org/board/forum/139-pvp-gvg-woe-battleground-script-releases/ https://rathena.org/board/forum/28-script-releases/ We have a lot of WoE Controllers here, try using the search tool to help you improve your search. C ya!
  2. @Kurofly You did a really good work, buddy! I forgot some checks, as I always do... And it's all about reading the Kafra script, because all those requirements were right there in the F_KafCart function. And regarding to the setcart script command, in its description they say we need to have the MC_PUSHCART skill in order to make it work... Again, it's all about reading the script documentation... Besides that, I like your custom features like the possibility to remove and get back the cart. PS: I'm not used to this new script syntax that uses links and multiple messages in the same mes command. Although I know this syntax is better to keep our code clean. PS2: You should always use emoticons and other features like effects. Those commands makes me feel like if the NPC have the capability to react to my answers. PS3: Personally, I don't like inline coding... What I have in mind is that sometimes we have people here that never were able to write a line of code, so I prefer to keep my scripts with a few instructions on each line, in order to make them more readable. Here is the new version based in your considerations. prontera,150,150,5 script Cart Rental NPC 73,{ function F_checkRequirements; function F_getCart; mes "[Sophia]"; mes "Hello "+strcharinfo(0)+", how may I help you?"; next; set .@option, select("Please, rent me a Pushcart!:Can you change my cart appearance?"); if (.@option == 1) { if (!F_checkRequirements(6,"5:10:18:23:4006:4011:4019:4028:4033:4041:4045:4058:4064:4071:4078:4086:4087:4100:4107:4112:4190:4191")) close; F_getCart(0, "rent you a cart"); } else { if (!F_checkRequirements(12,"5:10:18:23:4006:4011:4019:4028:4033:4041:4045:4058:4064:4071:4078:4086:4087:4100:4107:4112:4190:4191")) close; F_getCart(2, "change your cart appearance"); } // ======================================== // F_checkRequirements based on F_KafCart. // Arg(0): flag (bit field) // 1 - Ensure that the class wanting to rent a pushcart is a class listed in the second arg // 2 - Make sure the invoking character does not have a cart already // 4 - Check if the player has the Pushcart skill // 8 - Make sure the invoking character does have a cart already // Arg(1): "class_id1,class_id2,class_idN..." (string field) // Return: boolean // ======================================== function F_checkRequirements { if (getarg(0) & 1) { if (!.size) { explode(.class_id$, getarg(1), ":"); set .size, getarraysize(.class_id$); } for (set .@i, 0; .@i < .size; set .@i, .@i + 1) { if (Class == atoi(.class_id$[.@i])) { set .@checked, 1; break; } } if (!.@checked) { mes "[Sophia]"; mes "I'm sorry, but the Pushcart rental service is not available for your class."; return 0; } } if (getarg(0) & 2) { if (checkcart()) { mes "[Sophia]"; mes "You already have a Pushcart equipped."; mes "Unfortunately, we can't rent more than one to each customer at a time."; return 0; } } if (getarg(0) & 4) { if (!getskilllv("MC_PUSHCART")) { mes "[Kafra Employee]"; mes "You can only rent a cart after learning the \"Push Cart\" skill."; return 0; } } if (getarg(0) & 8) { if (!checkcart()) { mes "[Sophia]"; mes "You don't have a Pushcart equipped."; mes "Unfortunately, we can't change your cart appearance if you don't even have one."; return 0; } } return 1; } // ======================================== // F_getCart // Arg(0): flag (0: rent, 2: appearance) // Arg(1): message // Return: void // ======================================== function F_getCart { set .@i, getarg(0); set .@message$, getarg(1); mes "[Sophia]"; mes "Here is what I need to "+.@message$+":"; mes "^FF0000("+.ingredients[(.@i + 1)]+"x) - "+getitemname(.ingredients[.@i])+"^000000"; next; mes "[Sophia]"; mes "Have you already got everything I need?"; next; if (select("Yes, sure!:Hmm not yet...") == 2) { mes "[Sophia]"; mes "No problem I'm always here, please come back whenever you want!"; close; } if (countitem(.ingredients[.@i]) < .ingredients[(.@i + 1)]) { mes "[Sophia]"; mes "Liar, I trusted you!"; close2; emotion e_cry; end; } if (.@i == 2) { mes "[Sophia]"; mes "Wow, nice!"; mes "Which cart do you want? ^FF0000(1 ~ "+MAX_CART+")^000000"; next; while (input(.@cart_number, 1, MAX_CART) != 0) { mes "[Sophia]"; mes "Please, chose a look between ^FF00001 and "+MAX_CART+"^000000."; next; } setcart 0; // I don't know if I need to remove it before changing its appearance but I don't think so... regardless it's better to let the command here but feel free to remove it if you think you're not gonna need it. setcart .@cart_number; } else { setcart; } delitem .ingredients[.@i], .ingredients[(.@i + 1)]; mes "[Sophia]"; mes "Hope you enjoy it, bye!"; close; } OnInit: setarray .ingredients[0], 7227, 1000, // item_id, amount -> needed for renting a cart. 7227, 100; // item_id, amount -> needed for changing cart appearance. } Please read the description above each function in order to understand their behavior. Merged all the checks in a function called F_checkRequirements(); Merged the get cart and change cart look into the same function called F_getCart(); Take care you too, and thanks for all your notes!
  3. Hello DutchDuck, how are you buddy? Well, I need to consider some things before doing your request, please answer me asap. Players are able to change their cart appearance by using the Change Cart Skill. If you want to force players to use this NPC to change their cart appearance you should block that skill by removing its quest or removing the skill itself. Now let's move to the NPC. I'll be back soon with your request. C ya! EDIT--- Here is your request, please let me know if it works! Bye! prontera,150,150,5 script Cart Rental NPC 73,{ mes "[Sophia]"; mes "Hello "+strcharinfo(0)+", how may I help you?"; next; set .@option, select("Please, rent me a cart!:Can you change my cart appearance?"); switch(.@option) { case 1: { mes "[Sophia]"; mes "Here is what I need to rent you a cart:"; mes "^FF0000("+.ingredients[1]+"x) - "+getitemname(.ingredients[0])+"^000000"; next; mes "[Sophia]"; mes "Have you already got everything I need?"; next; if (select("Yes, sure!:Hmm not yet...") == 2) { mes "[Sophia]"; mes "No problem I'm always here, please come back whenever you want!"; close; } if (countitem(.ingredients[0]) < .ingredients[1]) { mes "[Sophia]"; mes "Liar, I trusted you!"; close2; emotion e_cry; end; } else { delitem .ingredients[0], .ingredients[1]; if (!checkcart()) setcart 1; mes "[Sophia]"; mes "Hope you enjoy it, bye!"; close; } } case 2: { if (!checkcart()) { mes "[Sophia]"; mes "You must have a cart to change its appearance."; close; } mes "[Sophia]"; mes "Here is what I need to change your cart appearance:"; mes "^FF0000("+.ingredients[3]+"x) - "+getitemname(.ingredients[2])+"^000000"; next; mes "[Sophia]"; mes "Have you already got everything I need?"; next; if (select("Yes, sure!:Hmm not yet...") == 2) { mes "[Sophia]"; mes "No problem I'm always here, please come back whenever you want!"; close; } if (countitem(.ingredients[2]) < .ingredients[3]) { mes "[Sophia]"; mes "Liar, I trusted you!"; close2; emotion e_cry; end; } else { mes "[Sophia]"; mes "Wow, nice!"; mes "Which cart do you want? (1 ~ "+MAX_CART+")"; next; input(.@cart_number, 1, MAX_CART); delitem .ingredients[2], .ingredients[3]; setcart 0; // I don't know if I need to remove it before changing its appearance but I don't think so... regardless it's better to let the command here but feel free to remove it if you think you're not gonna need it. setcart .@cart_number; mes "[Sophia]"; mes "Hope you enjoy it, bye!"; close; } } } OnInit: setarray .ingredients[0], 7227, 1000, // item_id, amount -> needed for renting a cart. 7227, 100; // item_id, amount -> needed for changing cart appearance. }
  4. Olá Puff, tudo bem bro? Então, pra alterar essa mensagem é bem simples, basta você ir até o diretório conf/ e alterar o conteúdo do arquivo motd.txt Caso este não seja o arquivo que você está procurando, então essa mensagem pode estar em diferentes tipos de arquivo, relacionados diretamente ao seu cliente ou ao seu servidor. Por exemplo, pode ser uma mensagem do msgstringtable.txt que foi editada como também pode ser um script do servidor que envia a mensagem baseado numa ação ou comportamento, como o próprio ato de teleportar. Por hora sugiro a você ir eliminando as alternativas até você encontrar o arquivo que contém o que você procura. Qualquer coisa estamos a disposição para ajuda-lo. Até mais! x)
  5. Yes it is. But I have made a few changes so it could be more accurate. First of all, there's no need to set a permanent player variable to store room password.. If it's intended to be a constant then it won't be changed anyway so we just need to declare one time. Besides that I have made more changes related to variable scopes. // Author: Oceanid prontera,100,100,5 script Gold Room Warper 109,{ mes "[Gold Room Warper]"; mes "Please enter the following phrase to enter: Gold Room"; next; input .@phrase$; if(.@phrase$ != .passcode$){ mes "[Gold Room Warper]"; mes "What you entered did not match the passphrase."; mes "Please speak with me again to re-enter the phrase."; close; } else { mes "[Gold Room Warper]"; mes "Ok, there we go!"; close2; warp "turbo_room",0,0; end; } OnInit: set .passcode$, "Gold Room"; } All the credits to Sir Oceanid, the original author.
  6. Sorry, but in cases like this you have to post the full script so we can assist you better. Try using this: - script PVPLADDEROPTIONS -1,{ end; OnInit: // 0 = Disabled (NO) // 1 = Enable (YES) set $@languageselect, 0; //Enable/Disable language selection [English/German] (Default: 1) set $@LadderAnnounce, 0; //Enable/Disable the announcement when a char reaches a new position in the ladder (Default: 1) set $@LadderLength, 30; //Set the length of the Ladder [!Not higher than 128!] (Default: 30) set $@LadderSteps, 10; //Set the views per page (Default: 10)set $@LadderExpGain, 1; //Enable/Disable experience gain when reaching a new position in the ladder (*Note1) set $@LadderExp, 50; //Set Experience gain value (*Note1) set $@LadderZenyGain, 1; //Enable/Disable zeny gain when reaching a new position in the ladder set $@LadderZeny, 50; //Set Zeny gain value set $@LadderChatRoom, 1; //Enable/Disable an Chat Room over the NPC with the message "PvP Ladder" (Users can not enter the Chat room) set $@LadderAskLogin, 0; //Enable/Disable that the NPC asks about the Broadcast when a Player logins / or with the Npc Chat (0 = Login Ask , 1 = Npc Chat) Related: 0 set $@LadderGM, 100; //All GM LVL UNDER this value will show on the PvP Ladder (Over GM LVL: Not shown on Ladder | under GM LVL: Shown on Ladder) set $@LadderGMMenu, 99; //GM LVL that need for entering GM Menu } - script PVPLADDER -1,{ OnPCKillEvent: if ( getgmlevel() >= $@LadderGM ) end; if (terces_PVP_resets != $terces_PVP_resets) { dispbottom "Please relog your character, in order to get the correct kills for you in the PVP ladder."; dispbottom "Because a GM just reset the ladder."; end; } if ( killedrid == getcharid(3) ) { set PVPDeaths, PVPDeaths +1; set #PVPDeathsAccount, #PVPDeathsAccount +1; set @PVPDeathstoday, @PVPDeathstoday +1; end; } set $@PVPcounter,$@PVPcounter+1; set getd("$@PVPKill"+$@PVPcounter),getcharid(3); //getd to avoid errors when more than 1 people kill someone attachrid(killedrid); set PVPDeaths,PVPDeaths+1; set @PVPDeathstoday,@PVPDeathstoday+1; set #PVPDeathsAccount,#PVPDeathsAccount+1; set getd("$@PVPkilledplayer"+$@PVPcounter+"$"), strcharinfo(0); //again, getd to avoid possible glitches detachrid; attachrid(getd("$@PVPKill"+$@PVPcounter)); CountKills: set PVPKills,PVPKills+1; set @PVPKillstoday,@PVPKillstoday+1; set #PVPKillsAccount,#PVPKillsAccount+1; setarray @playerstats[0],@PVPKillstoday,@PVPDeathstoday,PVPKills,PVPDeaths,#PVPKillsAccount,#PVPDeathsAccount; l_ladder: set @considerdeath,0; for (set @PosinLadder, 0; @PosinLadder < $@LadderLength; set @PosinLadder, @PosinLadder + 1){ if (PVPKills >= $terces_PVP_kills[@PosinLadder]){ //Player deserves to be in the ladder //Check if Death plays a role on the position if ((PVPKills == $terces_PVP_kills[@PosinLadder]) && (PVPDeaths > $terces_PVP_deaths[@PosinLadder])) set @considerdeath,1; //Consider Deaths //Check if the player only topped his own scores if ($terces_PVP_names$[@PosinLadder] == strcharinfo(0)){ set $terces_PVP_kills[@PosinLadder],PVPKills; set $terces_PVP_deaths[@PosinLadder],PVPDeaths; end; } //Moves all characters in the Ladder for (set @beginmoving, $@LadderLength; @beginmoving >= (@PosinLadder+@considerdeath); set @beginmoving, @beginmoving - 1){ if ($terces_PVP_names$[@beginmoving] == strcharinfo(0)){ //If the player already is in the Ladder it only has to move players between characters new position and characters old position callsub L_LadderMove,0; end; } else if (@beginmoving == (@PosinLadder+@considerdeath)){ //Player is not in the Ladder and therefor it has to move all players from characters new position downwards callsub L_LadderMove,1; end; } } end; } } end; L_LadderMove: if (getarg(0) == 0) set @length,@beginmoving; if (getarg(0) == 1) set @length,$@LadderLength; for (set @movecycle, @length; @movecycle > (@PosinLadder+@considerdeath); set @movecycle, @movecycle - 1){ set $terces_PVP_names$[@movecycle],$terces_PVP_names$[(@movecycle-1)]; set $terces_PVP_kills[@movecycle],$terces_PVP_kills[(@movecycle-1)]; set $terces_PVP_deaths[@movecycle],$terces_PVP_deaths[(@movecycle-1)]; set $terces_PVP_times[@movecycle],$terces_PVP_times[(@movecycle-1)]; } //sets the character's stats in the new position set $terces_PVP_names$[(@PosinLadder+@considerdeath)],strcharinfo(0); set $terces_PVP_kills[(@PosinLadder+@considerdeath)],PVPKills; set $terces_PVP_deaths[(@PosinLadder+@considerdeath)],PVPDeaths; set $terces_PVP_times[(@PosinLadder+@considerdeath)],gettimetick(2); //Experience Gain if ($@LadderExpGain == 1){ set BaseExp,BaseExp+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderExp); dispbottom "You have just been rewarded with "+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderExp)+" base experience points"; } //Zeny Gain if ($@LadderZenyGain == 1){ set Zeny,Zeny+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderZeny); dispbottom "You have just been rewarded with "+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderZeny)+" Zeny"; } //Announcement (Setting for Char) if (pvpbroadcast == 2){ announce strcharinfo(0)+" just claimed the "+((@PosinLadder+@considerdeath)+1)+". Position in the Top "+$@LadderLength+" after killing "+getd("$@PVPkilledplayer"+$@PVPcounter+"$")+".",16; } //Announcement (Setting for Account) if (#pvpbroadcast == 2){ announce strcharinfo(0)+" just claimed the "+((@PosinLadder+@considerdeath)+1)+". Position in the Top "+$@LadderLength+" after killing "+getd("$@PVPkilledplayer"+$@PVPcounter+"$")+".",bc_all,0xf7646c; } end; OnPCLoginEvent: if (terces_PVP_resets != $terces_PVP_resets){ set PVPDeaths,0; set @PVPDeathstoday,0; set #PVPDeathsAccount,0; set PVPKills,0; set @PVPKillstoday,0; set #PVPKillsAccount,0; set terces_PVP_resets,$terces_PVP_resets; } if ($@LadderAskLogin == 0){ if (pvpbroadcast == 0) set #pvpbroadcast,2; } } prontera.gat,148,193,5 script PvP Ladder 827,{ set @name$,"[PvP-Ladder]"; //Colour of: Position Name Kills Deaths Time setarray @colour$[0], "^996600", "^006699", "^00AA00", "^FF0000", "^EE8800"; if ($@LadderAskLogin == 1){ if (#pvpbroadcast == 2) goto access_eng; if (pvpbroadcast == 2) goto access_eng; if (#pvpbroadcast == 1) goto access_eng; if (pvpbroadcast == 1) goto access_eng; if (pvpbroadcast == 0) mes "Hi, "+strcharinfo(0)+""; mes "Me is the PvP Top Management!"; mes "Let me ask you one Question and i will let you play!"; menu "Later please",L_close,"Okay, fine",L_fine; L_fine: next; mes "Well, do you want read Broadcast Messages when a Player reach a new position on the PvP Ranglist?"; menu "Yeah, why not",L_accept,"No, thanks",L_accept_2,"Wtf is Broadcast?",L_broadcast; L_accept: next; mes "Yay, thank you! ^_^"; mes "Will this Setting work on all your Chars on this account or only this char?"; menu "Account",L_account,"Only this char",L_char; L_account: set #pvpbroadcast,2; next; mes "Okay, "+strcharinfo(0)+""; mes "Thank you for your time and have fun!"; close; L_char: set pvpbroadcast,2; next; mes "Okay, "+strcharinfo(0)+""; mes "Thank you for your time and have fun!"; goto access_eng; close; L_accept_2: next; mes "Yay, thank you! ^_^"; mes "Will this Setting work on all your Chars on this account or only this char?"; menu "Account",L_account_2,"Only this char",L_char_2; L_close: close; L_account_2: set #pvpbroadcast,1; next; mes "Okay, "+strcharinfo(0)+""; mes "Thank you for your time and have fun!"; close; L_char_2: set pvpbroadcast,1; next; mes "Okay, "+strcharinfo(0)+""; mes "Thank you for your time and have fun!"; goto access_eng; close; L_broadcast: mes "Broadcasts are this yellow messages from the GMs"; goto L_fine; } access_eng: mes @name$; mes "Hello "+strcharinfo(0)+"..."; mes "If you want to I can show you your PVP stats."; next; M_selection_eng: if ( getgmlevel () < $@LadderGMMenu ) menu "Show me the PVP Ladder",M_Ladder_eng,"PvP stats since my login",M_seitLogin_eng,"PvP stats of this Char",M_dieserChar_eng,"Stats of the whole account",M_vomAccount_eng,"Cancel",M_abbrechen_eng; else menu "[GM MENU]",GMMenu,"[USER MENU]",UserMenu; UserMenu: menu "Show me the PVP Ladder",M_Ladder_eng,"PvP stats since my login",M_seitLogin_eng,"PvP stats of this Char",M_dieserChar_eng,"Stats of the whole account",M_vomAccount_eng,"Cancel",M_abbrechen_eng; GMMenu: mes "PVP Ladder Script"; mes "Version: 1.7.3"; mes "Status of functions: "; mes "Reset Ladder: No Bugs"; mes "Delete Char on the ladder: BETA [Not working perfect]"; menu "Reset Ladder",L_reset,"Delete a Char on the Ladder",L_del_char,"Cancel",M_abbrechen_eng; M_Ladder_eng: mes "Alright...I'll show you the Top "+ $@LadderLength +" with "+$@LadderSteps+" entries per page."; mes "It'll be viewed like this:"; mes @colour$[0]+"Place^000000: "+@colour$[1]+"<name>^000000 :"+@colour$[2]+"<kills>^000000:"+@colour$[3]+"<deaths>^000000 "+@colour$[4]+"<time>"; next; callsub L_Ladder; goto M_selection_eng; M_seitLogin_eng: mes @name$; mes "Your stats since your login:"; mes @PVPKillstoday+"/"+@PVPDeathstoday+"(Kills/Deaths)"; next; goto M_selection_eng; M_dieserChar_eng: mes @name$; mes "Your stats of this Char:"; mes PVPKills+"/"+PVPDeaths+"(Kills/Deaths)"; next; goto M_selection_eng; M_vomAccount_eng: mes @name$; mes "Your stats of the whole account:"; mes #PVPKillsAccount+"/"+#PVPDeathsAccount+"(Kills/Deaths)"; next; goto M_selection_eng; M_abbrechen_eng: mes @name$; mes "OK. You can come back to me and see your stats whenever you want."; close; L_del_char: if (getgmlevel() < 99) end; mes "Do you want to delete a char on the Ladder?"; if (select ("Yes","No") == 2) goto L_end; next; mes "Please give me the Ladder Position of the Char"; input $@CharLadderInput; set $@CharLadder, $@CharLadderInput; deletearray @PosinLadder, $@CharLadderInput; next; mes "THIS IS ONLY BETA"; mes "When this step has not worked PLEASE wait until the next Update for this script"; mes "Please don't request support when this step has not worked"; close; L_reset: if (getgmlevel() < 99) end; mes "Do you want to reset the ladder?"; if (select ("Yes","No") == 2) goto L_end; mes "Are you really really sure you want to reset it?"; menu "Yes, ffs!!",-,"No",L_end; deletearray $terces_PVP_kills,128; deletearray $terces_PVP_deaths,128; deletearray $terces_PVP_names$,128; deletearray $terces_PVP_times,128; set $terces_PVP_resets,$terces_PVP_resets +1; L_end: mes "Okay...cya"; close; L_Ladder: for (set @y,0; @y < $@LadderLength; set @y,@y+$@LadderSteps){ for (set @x,@y; (@x < (@y+$@LadderSteps)) && (@x < ($@LadderLength)); set @x,@x+1){ if ($terces_PVP_names$[@x] != ""){ mes @colour$[0]+(@x+1)+"^000000: "+@colour$[1]+$terces_PVP_names$[@x]+"^000000 "+@colour$[2]+$terces_PVP_kills[@x]+"^000000:"+@colour$[3]+$terces_PVP_deaths[@x]+"^000000 ~ "+@colour$[4]+callfunc ("Gettime",$terces_PVP_times[@x])+"^000000"; } else { mes "^DD0000"+(@x+1)+": ^006699None^000000 "; } } next; } return; OnInit: if ($@LadderChatRoom == 1) { freeloop(1); while(1) { waitingroom "Top 1 " + $terces_PVP_names$[0],0; sleep 1000; delwaitingroom; } freeloop(0); } } function script Gettime { if (getarg(0)==0) return; set @difftimedays,(gettimetick(2) - getarg(0)); set @difftimehours,@difftimedays%86400; set @difftimeminutes,@difftimehours%3600; set @difftimeseconds,@difftimeminutes%60; set @days,@difftimedays/86400; set @hours,@difftimehours/3600; set @minutes,@difftimeminutes/60; set @seconds,@difftimeseconds; set @result$,""; if(@days != 0) set @result$,@result$+@days+"d "; if(@hours != 0) set @result$,@result$+@hours+"h "; if(@minutes != 0) set @result$,@result$+@minutes+"m "; if(@seconds != 0) set @result$,@result$+@seconds+"s"; return (@result$); } As you can see the OnInit is my last instruction because I want this to be triggered only when map-server is loaded. I have made this because now I'm sure that OnInit won't be accessed by players anymore. Maybe you should request a new script or ask someone to rewrite this one, because I can see a very old script syntax using commands such as menu; Label: and goto;... C ya!
  7. @YffarNaj06 I'm sorry for posting in english in the Filipino's Support Area, but I guess you're trying to find this: https://github.com/rathena/rathena/blob/master/npc/custom/etc/mvp_arena.txt C ya!
  8. @Haxzor As per the first post, he wants a clickable NPC that needs registration to start recording playing time without checking if anybody is in idle, vending or chatting. =]
  9. @myiee The correct syntax is: if(countitem(7227) < 50 || countitem(720) < 500 || countitem(995) < 500) GOTO L_NOITEM; delitem 7227,50; delitem 720,500; delitem 995,500; atcommand "@costumeitem 5512 1"; // atcommand "@costumeitem <item_id> <item_amount>"; C ya!
  10. @bearnope246 Actually you can talk to the NPC but your NPC must contain texts or anything else to proceed with the dialog because this draft that I left for you is only intended to display a waitingroom that is reloaded every second. So if you want to do something more with this script you should start bellow the first line and please don't forget to use close; close2; end; before reaching your On* Events. Take a look at the scripts that I did for you, I edited both of them to make a sample. C ya!
  11. Hmm I don't think this issue has been caused by the script itself. When playing battlegrounds there is only one command to update scores, bg_updatescore. According to this command description, you must have the battleground 2 flag enabled on the target map. As you can see the first command that we find is the battleground 2 flag so I guess this can be an hexed or packet issue maybe. Are you able to test another hexed?
  12. Hmmm that's because we're checking if the player is in idle state, not the homunculus. Honestly, I don't know what makes a player being in idle state and moreover how to revert that state. Now, the first script is intended to check player's position (x and y) every minute and if any player is in the same position for more than 2 minutes they are considered as AFK. I think the solution is to change from gethominfo(2) != null to checkhomcall() == 0. So, the final script should be something like this: - script AFK_Vaporizer -1,{ OnPCLoginEvent: initnpctimer getcharid(3); end; OnTimer60000: if (checkhomcall() == 0 && (checkidle() / 60 >= .vaporize)) { atcommand "@useskill 244 1 "+strcharinfo(0); dispbottom "You are not allowed to farm with Homun while AFK."; } initnpctimer getcharid(3); end; OnInit: set .vaporize, 2; // How many minutes to use vaporize. } Now only players with active homunculus (checkhomcall() == 0) will be checked by our code. Let me know if it works, c ya!
  13. @alternate Hello buddy, how are you? Your problem have no relation with that part of the script that you have mentioned. While talking to the NPC if the variable .status have not been yet initialized you will find the scenario that you're now. Now, take a look at this: OnClock0100: OnClock0300: OnClock0500: OnClock0700: OnClock0900: OnClock1100: OnClock1300: OnClock1500: OnClock1700: OnClock1900: OnClock2100: OnClock2300: callsub OnActive; end; OnActive: callsub OnEndd; set .status,1; Announce "[Battle Ground]:Someone active the game! Go to prontera,150,180 and join us!",0; end; As you can see in the above part of the same script, there are lots of OnClock Events that when triggered starts the execution of the OnActive Sub. In the OnActive Sub, as you can see, the value of the .status variable is set to 1 and then the event is started and the NPC will be available for clicking etc... I don't see anything wrong with this script except by the fact that it needs an extra check to see if the event is available (.status != 0) or not (.status == 0). C ya!
  14. @myieee My mistake... I forgot to put an extra validation for that, please change this: if (hourly_reward < gettimetick(2) && !received) { To this: if (hourly_reward > 0 && hourly_reward < gettimetick(2) && !received) { And now your script should be fine, please let me know if it works.
  15. @bearnope246 Hello buddy, how are you? Here is what you want, btw I don't know if we need to put freeloop()'s to bypass the infinite loop protection, If so try using the script that uses the donpcevent command. I really don't know if it works and besides that I don't know if its a good choice but let me know if you get any performance issues. for-loop: prontera,155,188,5 script PvP Ladder 857,{ mes "[PvP Ladder]"; mes "Hello, how are you?"; next; mes "[PvP Ladder]"; mes "Bye bye!"; close; OnInit: if ($@LadderChatRoom == 1) { freeloop(1); while(1) { waitingroom "Top 1 " + $terces_PVP_names$[0],0; sleep 1000; delwaitingroom; } freeloop(0); } } donpcevent: prontera,155,188,5 script PvP Ladder 857,{ mes "[PvP Ladder]"; mes "Hello, how are you?"; next; mes "[PvP Ladder]"; mes "Bye bye!"; close; OnDisplayWaitingRoom: waitingroom "Top 1 " + $terces_PVP_names$[0],0; sleep 1000; delwaitingroom; donpcevent strnpcinfo(3)+"::OnDisplayWaitingRoom"; end; OnInit: if ($@LadderChatRoom == 1) { donpcevent strnpcinfo(3)+"::OnDisplayWaitingRoom"; } } C ya!
  16. @Yami Hmmm.. This issue have been fixed by me on my above script. Well, try using this: switch ( select ( "Most Kills:Highest Streak:Longest Ownage:Own Information:Explanation" + ((getgmlevel()>=.min_gm_menu)?":Reset Ladder":"") ) ) {
  17. @Yami Whooooaaa, nice! Change the value of .min_gm_menu variable and then your restriction will be done. C ya!
  18. @Yami My bad... I forgot to put the Query SQL inside the command query_sql("Query SQL");! Hahaha sorry! Please, change this: case 6: truncate table `pvpladder`; truncate table `ownladder`; mes "DONE!"; break; To this: case 6: query_sql "truncate table `pvpladder`"; query_sql "truncate table `ownladder`"; mes "DONE!"; break; Please, let us know if the map-server got any error or warning after clicking the NPC.
  19. Hello Yami, how are you? Here is the script requested, properly edited with the suggestions of Technoken. Let me know if it works, please! //===== eAthena Script ======================================================= //= PVP ladder script with dota announcement ( SQL only ) //===== By: ================================================================== //= ~AnnieRuru~ //===== Current Version: ===================================================== //= 2.9 //===== Compatible With: ===================================================== //= eAthena SQL 14279, with MySQL 5.1 //===== Description: ========================================================= //= PVP ladder store in SQL table //= plus anti-sit-killer feature //===== Topic ================================================================ //= http://www.eathena.ws/board/index.php?showtopic=177918 //===== Additional Comments: ================================================= //= still don't have modify value option, will be done ... in next year ... //============================================================================ // add all the maps that you want this script to trigger ... all pvp and event maps perhaps ? // but if you already enable "all" maps, then can comment all these guild_vs1 mapflag loadevent guild_vs2 mapflag loadevent guild_vs3 mapflag loadevent guild_vs4 mapflag loadevent guild_vs5 mapflag loadevent - script DOTAPVP -1,{ OnInit: // Config set .sound, 0; // soundeffect : 0 - disable, 1 - play soundeffect to all players on map, 2 - play soundeffect to an area around the killer, 3 - play soundeffect to killer only set .announce, 0; // announce to : 0 - global, 1 - map set .announcemap, 0; // announce the map name in the announcement ? : 0 - off, 1 - on set .announcekill, 1; // announce who pawn who's head : 0 - off, 1 - on set .msg_die, 0; // show message who kill you when die : 0 - off, 1 - on set .msg_kill, 0; // show message you kill who when killed someone : 0 - off, 1 - on set .gmnokill, 2; // GMs are not suppose to kill players. A GM with <this number> level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off set .killingspree, 3; set .dominating, 4; set .megakill, 5; set .unstoppable, 6; set .wickedsick, 7; set .monsterkill, 8; set .godlike, 9; set .holyshit, 10; set .continue, 1; // after beyond-godlike, every <this number> kills will make announcement again set .owned, 5; // how many times the party/guild has to kill to announce ownage set .owncontinue, 10; // after ownage, every <this number> party/guild cumulative kills will make ownage announce again set .min_gm_menu, 90; // minimum level of GM can use the GM menu on ladder npc set .showtotal, 10; // show the length of ladder. Note : Maximum value = 128 set .showpage, 10; // set the views per page. Note : Maximum value = 128 set .loweststreak, 5; // mininum streak count allow to show in highest streak ladder. Default 3 means must at least have killing spree streak to display in ladder set .lowestownage, 5; // mininum ownage count allow to show in longest ownage ladder. Default 5 means must at least have 5 ownage counts to display in ladder setarray .maptrigger$, // only these maps will trigger this script "all", // uncomment this to allow load all maps "guild_vs1", "guild_vs2", "guild_vs3", "guild_vs4", "guild_vs5"; // anti-sit-killer system // a player must kill another player with this minimum <this number> base level to get the announcement and in the ladder. // Otherwise only have streak ended announcement and killed player's streak reset. // Its possible for a level 1 novice to kill a level 99 player and he/she will still get in the ladder // but a level 99 kill a level 1 player will get nothing // 0 - off this system ( default is 55, pk setting ) set .lvltokill, 150; // when a player kill another same player <this number> times in a row, the player is warp back to save point. // and the player's streak, kills, and ownage count will deduct accordingly // 0 - off this system set .counttopunish, 6; // minimum level range to kill another player // eg. when set to 20, player level 99 needs to kill another player with minimum level of 79 to get announcement and increase the kill rank. // but a player with base level 50 kills a level 99 will also get the announcement // higher base level cannot kill lower level, but lower level can kill higher level // 0 - off this system set .minlvlrange, 1; // Config ends ------------------------------------------------------------------------------------------ // to prevent bug happen if ( .announce < 0 || .announce > 1 ) set .announce, 0; if ( .continue < 1 ) set .continue, 1; if ( .owncontinue < 1 ) set .owncontinue, 1; if ( .gmnokill <= 0 ) set .gmnokill, 100; if ( .lvltokill <= 1 ) set .lvltokill, 0; if ( .counttopunish <= 1 ) set .counttopunish, 0; set .maptriggersize, getarraysize(.maptrigger$); end; // script start. OnPCKillEvent: if ( getgmlevel() >= .gmnokill ) end; getmapxy .@map$, .@x, .@y, 0; if ( .maptrigger$ != "all" ) { for ( set .@i, 0; .@i < .maptriggersize; set .@i, .@i +1 ) { if ( .@map$ == .maptrigger$[.@i] ) break; } if ( .@i == .maptriggersize ) end; } attachrid killedrid; if ( killerrid != getcharid(3) && ( .msg_die || .msg_kill ) ) { if ( .msg_die ) message strcharinfo(0),"You have been killed by "+ rid2name(killerrid); if ( .msg_kill ) message rid2name(killerrid),"You just killed "+ strcharinfo(0); } if ( @PlayersKilledStreak >= .holyshit ) set .@streakname$,"Beyond Godlike"; else if ( @PlayersKilledStreak >= .godlike ) set .@streakname$,"Godlike"; else if ( @PlayersKilledStreak >= .monsterkill ) set .@streakname$,"Monster Kill"; else if ( @PlayersKilledStreak >= .wickedsick ) set .@streakname$,"Wicked Sick"; else if ( @PlayersKilledStreak >= .unstoppable ) set .@streakname$,"Unstoppable"; else if ( @PlayersKilledStreak >= .megakill ) set .@streakname$,"Mega-kill"; else if ( @PlayersKilledStreak >= .dominating ) set .@streakname$,"Dominating"; else if ( @PlayersKilledStreak >= .killingspree ) set .@streakname$,"Killing Spree"; if ( @PlayersKilledStreak >= .killingspree && killerrid == getcharid(3) ) announce strcharinfo(0) +" has ended "+( (sex)?"him":"her" )+" own "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce; else if ( @PlayersKilledStreak >= .killingspree ) announce rid2name(killerrid) +" has ended "+ strcharinfo(0) +"'s "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce; else if ( .announcekill && killerrid != getcharid(3) ) announce rid2name(killerrid) +" has pawned "+ strcharinfo(0) +" "+( (.announcemap)?("at "+ .@map$):""),16|.announce; set @PlayersKilledStreak,0; set @dota_sql_deaths, @dota_sql_deaths +1; set @dota_multikills,0; query_sql "replace into pvpladder values ( "+ getcharid(0) +", '"+ escape_sql(strcharinfo(0)) +"', "+ @dota_sql_streaks +", "+ @dota_sql_kills +", "+ @dota_sql_deaths +", from_unixtime("+ @dota_sql_streaktime +") )"; set .@killed_gid, getcharid(2); if ( .@killed_gid ) { setd ".dota_sql_"+ .@killed_gid +"_c", 0; if ( getd(".dota_sql_"+ .@killed_gid +"_h") ) query_sql "replace into ownladder values ( "+ .@killed_gid +", '"+ escape_sql(getguildname(.@killed_gid)) +"', "+ getd(".dota_sql_"+ .@killed_gid +"_c") +", "+ getd(".dota_sql_"+ .@killed_gid +"_h") +", from_unixtime("+ getd(".dota_sql_"+ .@killed_gid +"_t") +") )"; } if ( killerrid == getcharid(3) || baselevel < .lvltokill ) end; if ( .minlvlrange ) set .@killedlvl, baselevel; attachrid killerrid; if ( .minlvlrange && .@killedlvl + .minlvlrange < baselevel ) end; if ( .counttopunish ) { if ( @sitkillminute != gettime(2) ) { deletearray @sitkillid, 128; deletearray @sitkilltimes, 128; set @sitkillminute, gettime(2); } set .@sitkillsize, getarraysize(@sitkillid); for ( set .@i,0; .@i < .@sitkillsize; set .@i, .@i +1 ) { if ( @sitkillid[.@i] != killedrid ) continue; else { set @sitkilltimes[.@i], @sitkilltimes[.@i] +1 ; if ( @sitkilltimes[.@i] >= .counttopunish ) { warp "SavePoint",0,0; announce strcharinfo(0) +" , Stop killing "+ rid2name(killedrid) + " !!!",0; debugmes strcharinfo(0) +" is sit-killing "+ rid2name(killedrid) +" for "+ @sitkilltimes[.@i] + " times"; logmes "is sit-killing "+ rid2name(killedrid) +" for "+ @sitkilltimes[.@i] +" times"; if ( @PlayersKilledStreak == @dota_sql_streaks ) { set @dota_sql_streaks, @dota_sql_streaks +1 - .counttopunish; set @dota_sql_streaktime, gettimetick(2); } set @PlayersKilledStreak, @PlayersKilledStreak +1 - .counttopunish; set @dota_sql_kills, @dota_sql_kills +1 - .counttopunish; query_sql "replace into pvpladder values ( "+ getcharid(0) +", '"+ escape_sql(strcharinfo(0)) +"', "+ @dota_sql_streaks +", "+ @dota_sql_kills +", "+ @dota_sql_deaths +", from_unixtime("+ @dota_sql_streaktime +") )"; set .@killer_gid, getcharid(2); if ( .@killer_gid ) { if ( getd(".dota_sql_"+ .@killer_gid +"_c") == getd(".dota_sql_"+ .@killer_gid +"_h") ) { setd ".dota_sql_"+ .@killer_gid +"_h", getd(".dota_sql_"+ .@killer_gid +"_h") +1 - .counttopunish; setd ".dota_sql_"+ .@killer_gid +"_t", gettimetick(2); } setd (".dota_sql_"+ .@killer_gid +"_c"), getd(".dota_sql_"+ .@killer_gid +"_c") +1 - .counttopunish; query_sql "replace into ownladder values ( "+ .@killer_gid +", '"+ escape_sql(getguildname(.@killer_gid)) +"', "+ getd(".dota_sql_"+ .@killer_gid +"_c") +", "+ getd(".dota_sql_"+ .@killer_gid +"_h") +", from_unixtime("+ getd(".dota_sql_"+ .@killer_gid +"_t") +") )"; } end; } break; } } if ( .@i == .@sitkillsize ) { set @sitkillid[.@i], killedrid; set @sitkilltimes[.@i], 1; } } set @PlayersKilledStreak, @PlayersKilledStreak +1 ; set @dota_sql_kills, @dota_sql_kills +1 ; if ( @PlayersKilledStreak > @dota_sql_streaks ) { set @dota_sql_streaks, @PlayersKilledStreak; set @dota_sql_streaktime, gettimetick(2); } query_sql "replace into pvpladder values ( "+ getcharid(0) +", '"+ escape_sql(strcharinfo(0)) +"', "+ @dota_sql_streaks +", "+ @dota_sql_kills +", "+ @dota_sql_deaths +", from_unixtime("+ @dota_sql_streaktime +") )"; if ( @PlayersKilledStreak == .killingspree ) setarray .@streakname$,"killingspree.wav","is on a KILLING SPREE","!"; else if ( @PlayersKilledStreak == .dominating ) setarray .@streakname$,"dominating.wav","is DOMINATING","!"; else if ( @PlayersKilledStreak == .megakill ) setarray .@streakname$,"megakill.wav","has a MEGA KILL","!"; else if ( @PlayersKilledStreak == .unstoppable ) setarray .@streakname$,"unstoppable.wav","is UNSTOPPABLE","!!"; else if ( @PlayersKilledStreak == .wickedsick ) setarray .@streakname$,"wickedsick.wav","is WICKED SICK","!!"; else if ( @PlayersKilledStreak == .monsterkill ) setarray .@streakname$,"monsterkill.wav","has a MONSTER KILL","!!"; else if ( @PlayersKilledStreak == .godlike ) setarray .@streakname$,"godlike.wav","is GODLIKE","!!!"; else if ( @PlayersKilledStreak >= .holyshit && ( (@PlayersKilledStreak - .holyshit) % .continue == 0 ) ) setarray .@streakname$,"holyshit.wav","is BEYOND GODLIKE",". Someone KILL "+( (sex)?"HIM":"HER" ) +"!!!!!!"; if ( .@streakname$[1] != "" ) { announce strcharinfo(0) +" "+ .@streakname$[1] +"["+ @PlayersKilledStreak +"] "+( (.announcemap)?("at "+ .@map$):"") + .@streakname$[2],16|.announce; if ( .sound == 1 ) soundeffectall .@streakname$[0],0,.@map$; else if ( .sound == 2 ) soundeffectall .@streakname$[0],0; else if ( .sound == 3 ) soundeffect .@streakname$[0],0; } set @dota_multikills, @dota_multikills + 1; deltimer "DOTAPVP::OnStreakReset"; addtimer 18000,"DOTAPVP::OnStreakReset"; set .@killer_gid, getcharid(2); if ( .@killer_gid && .@killer_gid != .@killed_gid ) { setd ".dota_sql_"+ .@killer_gid +"_c", getd(".dota_sql_"+ .@killer_gid +"_c") +1 ; if ( getd(".dota_sql_"+ .@killer_gid +"_c") > getd(".dota_sql_"+ .@killer_gid +"_h") ) { setd ".dota_sql_"+ .@killer_gid +"_h", getd(".dota_sql_"+ .@killer_gid +"_c"); setd ".dota_sql_"+ .@killer_gid +"_t", gettimetick(2); } query_sql "replace into ownladder values ( "+ .@killer_gid +", '"+ escape_sql(getguildname(.@killer_gid)) +"', "+ getd(".dota_sql_"+ .@killer_gid +"_c") +", "+ getd(".dota_sql_"+ .@killer_gid +"_h") +", from_unixtime("+ getd(".dota_sql_"+ .@killer_gid +"_t") +") )"; } set .@dota_multikills, @dota_multikills; set .@origin, getcharid(3); sleep 1500; if ( .@killer_gid && .@killer_gid != .@killed_gid && getd(".dota_sql_"+ .@killer_gid +"_c") >= .owned && ( ( getd(".dota_sql_"+ .@killer_gid +"_c") - .owned ) % .owncontinue == 0 ) ) { if ( .announce ) mapannounce .@map$, "The guild ["+ getguildname(.@killer_gid) +"] is OWNING["+ getd(".dota_sql_"+ .@killer_gid +"_c") +"] !!!",16; else announce "The guild ["+ getguildname(.@killer_gid) +"] is OWNING["+ getd(".dota_sql_"+ .@killer_gid +"_c") +"] !!!",16; if ( .sound == 1 ) soundeffectall "ownage.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "ownage.wav",0; else if ( .sound == 3 && attachrid(.@origin) ) soundeffect "ownage.wav",0; } sleep 1250; if ( !attachrid(.@origin) ) end; if ( .@dota_multikills == 2 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Double Kill !",16; else announce strcharinfo(0) +" just got a Double Kill !",16; if ( .sound == 1 ) soundeffectall "doublekill.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "doublekill.wav",0; else if ( .sound == 3 ) soundeffect "doublekill.wav",0; } else if ( .@dota_multikills == 3 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Triple Kill !!!",16; else announce strcharinfo(0) +" just got a Triple Kill !!!",16; if ( .sound == 1 ) soundeffectall "triplekill.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "triplekill.wav",0; else if ( .sound == 3 ) soundeffect "triplekill.wav",0; } else if ( .@dota_multikills == 4 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Ultra Kill !!!",16; else announce strcharinfo(0) +" just got a Ultra Kill !!!",16; if ( .sound == 1 ) soundeffectall "ultrakill.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "ultrakill.wav",0; else if ( .sound == 3 ) soundeffect "ultrakill.wav",0; } else if ( .@dota_multikills >= 5 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" is on a Rampage !!!",16; else announce strcharinfo(0) +" is on a Rampage !!!",16; if ( .sound == 1 ) soundeffectall "rampage.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "rampage.wav",0; else if ( .sound == 3 ) soundeffect "rampage.wav",0; } end; OnStreakReset: set @dota_multikills, 0; end; OnWhisperGlobal: if ( @spam_dotapvp + 3 >= gettimetick(2) ) // 3 seconds interval so player don spam this command end; set @spam_dotapvp, gettimetick(2); if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) query_sql "select kills, deaths, streaks, unix_timestamp(streaktime) from pvpladder where char_id = "+ getcharid(0), @dota_sql_kills, @dota_sql_deaths, @dota_sql_streaks, @dota_sql_streaktime; if ( @dota_sql_kills || @dota_sql_deaths ) { dispbottom "Your current Streak : "+ @PlayersKilledStreak; dispbottom "Your total Kills : "+ @dota_sql_kills; dispbottom "Your total Deaths : "+ @dota_sql_deaths; dispbottom "Your highest Streak : "+ @dota_sql_streaks; query_sql "select date_format( from_unixtime("+ @dota_sql_streaktime +"),'%a %e/%c/%y %r')", .@time1$; dispbottom "Your highest Streak on : "+ .@time1$; } else dispbottom "You are not in the pvp ladder yet."; if ( getcharid(2) ) { if ( getd(".dota_sql_"+ getcharid(2) +"_h") == 0 ) { query_sql "select currentown, highestown, unix_timestamp(owntime) from ownladder where guild_id = "+ getcharid(2), .@c, .@h, .@t; setd ".dota_sql_"+ getcharid(2) +"_c", .@c; setd ".dota_sql_"+ getcharid(2) +"_h", .@h; setd ".dota_sql_"+ getcharid(2) +"_t", .@t; } if ( getd(".dota_sql_"+ getcharid(2) +"_h") ) { dispbottom "Your guild current Own : "+ getd(".dota_sql_"+ getcharid(2) +"_c"); dispbottom "Your guild highest Own : "+ getd(".dota_sql_"+ getcharid(2) +"_h"); query_sql "select date_format( from_unixtime("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_t"), "DOTAPVP" ) +"),'%a %e/%c/%y %r')", .@time2$; dispbottom "Your guild highest Own on : "+ .@time2$; } else dispbottom "Your guild is not in the ladder yet."; } end; OnPCLoginEvent: if ( .maptrigger$ != "all" ) end; OnPCLoadMapEvent: if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) { if ( .maptrigger$ != "all" ) { getmapxy .@map$, .@x, .@y, 0; for ( set .@i, 0; .@i < .maptriggersize; set .@i, .@i +1 ) { if ( .@map$ == .maptrigger$[.@i] ) break; } if ( .@i == .maptriggersize ) end; } query_sql "select kills, deaths, streaks, unix_timestamp(streaktime) from pvpladder where char_id = "+ getcharid(0), @dota_sql_kills, @dota_sql_deaths, @dota_sql_streaks, @dota_sql_streaktime; } if ( getcharid(2) && getd(".dota_sql_"+ getcharid(2) +"_h") == 0 ) { query_sql "select currentown, highestown, unix_timestamp(owntime) from ownladder where guild_id = "+ getcharid(2), .@c, .@h, .@t; setd ".dota_sql_"+ getcharid(2) +"_c", .@c; setd ".dota_sql_"+ getcharid(2) +"_h", .@h; setd ".dota_sql_"+ getcharid(2) +"_t", .@t; } end; } prontera,145,184,5 script PVP Ladder 837,{ set .@npcname$, strnpcinfo(0); while (1) { mes "["+ .@npcname$ +"]"; mes "Hello "+ strcharinfo(0) +"..."; mes "If you want to I can show you your PVP stats."; next; switch ( select ( "Most Kills:Highest Streak:Longest Ownage:Own Information:Explanation" + ((getgmlevel()>=.min_gm_menu)?":Reset Ladder":"") ) ) { case 1: set .@nb, query_sql("select name, kills, deaths from pvpladder order by kills desc limit "+ getvariableofnpc(.showtotal,"DOTAPVP"), .@name$, .@kills, .@deaths); if ( .@nb == 0 ) { mes "["+ .@npcname$ +"]"; mes "The ladder currently is empty."; next; } for ( set .@j,0; .@j < .@nb; set .@j, .@j + getvariableofnpc(.showpage,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; for ( set .@i, .@j; .@i < (getvariableofnpc(.showpage,"DOTAPVP") + .@j) && .@i < .@nb; set .@i, .@i + 1 ) { mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AA00["+ .@kills[.@i] +"] ^FF0000<"+ .@deaths[.@i] +">^000000"; } next; } break; case 2: set .@nb, query_sql("select name, streaks, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where streaks >= "+ getvariableofnpc(.loweststreak,"DOTAPVP") +" order by streaks desc limit "+ getvariableofnpc(.showtotal,"DOTAPVP"), .@name$, .@streak, .@time$); if ( .@nb == 0 ) { mes "["+ .@npcname$ +"]"; mes "The ladder currently is empty."; next; } for ( set .@j,0; .@j < .@nb; set .@j, .@j + getvariableofnpc(.showpage,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; for ( set .@i, .@j; .@i < (getvariableofnpc(.showpage,"DOTAPVP") + .@j) && .@i < .@nb; set .@i, .@i + 1 ) { mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^70AC11{"+ .@streak[.@i] +"} ^000000on :"; mes " ^EE8800"+ .@time$[.@i] +"^000000"; } next; } break; case 3: set .@nb, query_sql("select name, highestown, date_format(owntime,'%a %e/%c/%y %r') from ownladder where highestown >= "+ getvariableofnpc(.lowestownage,"DOTAPVP") +" order by highestown desc limit "+ getvariableofnpc(.showtotal,"DOTAPVP"), .@name$, .@owned, .@time$); if ( .@nb == 0 ) { mes "["+ .@npcname$ +"]"; mes "The ladder currently is empty."; next; } for ( set .@j,0; .@j < .@nb; set .@j, .@j + getvariableofnpc(.showpage,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; for ( set .@i, .@j; .@i < (getvariableofnpc(.showpage,"DOTAPVP") + .@j) && .@i < .@nb; set .@i, .@i + 1 ) { mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AAAA("+ .@owned[.@i] +") ^000000on :"; mes " ^EE8800"+ .@time$[.@i] +"^000000"; } next; } break; case 4: if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) query_sql "select kills, deaths, streaks, unix_timestamp(streaktime), date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where char_id = "+ getcharid(0), @dota_sql_kills, @dota_sql_deaths, @dota_sql_streaks, @dota_sql_streaktime, .@time1$; mes "["+ .@npcname$ +"]"; if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) mes "You not yet kill any player."; else { mes "Your Current Streak : ^70AC11{"+ @PlayersKilledStreak +"}^000000"; mes "Your Total Kills : ^00AA00["+ @dota_sql_kills +"]^000000"; mes "Your Death Counts : ^FF0000<"+ @dota_sql_deaths +">^000000"; if ( @dota_sql_kills || @dota_sql_streaks ) { mes "Highest Streak was ^70AC11{"+ @dota_sql_streaks +"}^000000 on :"; query_sql "select date_format( from_unixtime("+ @dota_sql_streaktime +"),'%a %e/%c/%y %r')", .@time1$; mes " ^EE8800"+ .@time1$ +"^000000"; } } next; if ( getcharid(2) ) { if ( getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ) == 0 ) { query_sql "select currentown, highestown, unix_timestamp(owntime) from ownladder where guild_id = "+ getcharid(2), .@c, .@h, .@t; set getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_c"), "DOTAPVP" ), .@c; set getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ), .@h; set getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_t"), "DOTAPVP" ), .@t; } mes "["+ .@npcname$ +"]"; if ( getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ) == 0 ) { mes "Your guild not yet kill any player."; } else { mes "Your guild name : ^006699"+ strcharinfo(2) +"^000000"; mes "Current Owning : ^00AAAA("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_c"), "DOTAPVP" ) +")^000000"; mes "Longest Ownage was ^00AAAA("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ) + ")^000000 on :"; query_sql "select date_format( from_unixtime("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_t"), "DOTAPVP" ) +"),'%a %e/%c/%y %r')", .@time2$; mes " ^EE8800"+ .@time2$ +"^000000"; } next; } break; case 5: mes "["+ .@npcname$ +"]"; mes "Explanation for Most Kills:"; mes " "; mes "^996600Rank. ^006699NAME ^00AA00[Total Kills] ^FF0000<Deaths>^000000"; mes " "; mes "--------------------------------"; mes " "; mes "The ^00AA00Kills^000000 added when a player kills another player."; mes " "; mes "^FF0000Deaths^000000 count increase when a player killed by another player, or suicide (eg: Grand Cross)."; mes " "; mes "A player killed by monsters, homunculus or pets will not add the kills or deaths count."; next; mes "["+ .@npcname$ +"]"; mes "Explanation for Highest Streak:"; mes " "; mes "^996600Rank. ^006699NAME ^70AC11{Highest Streak} ^000000on :"; mes " ^EE8800TIME^000000"; mes " "; mes "--------------------------------"; mes " "; mes "The ^70AC11Streak^000000 are added every time a player kills another player. It will reset upon log out, killed by another player, or suicide (eg: Sacrifice)."; mes " "; mes "Then it record in the server the ^EE8800TIME^000000 when that player got that highest streak."; mes " "; mes "A player killed by monsters, homunculus or pets will not reset the streak."; mes " "; mes "--------------------------------"; mes " "; mes "The numbers of straight kills to get these announcements are :"; mes "^70AC11"+ getvariableofnpc(.killingspree,"DOTAPVP") +"^000000 : Killing Spree"; mes "^70AC11"+ getvariableofnpc(.dominating,"DOTAPVP") +"^000000 : Dominating"; mes "^70AC11"+ getvariableofnpc(.megakill,"DOTAPVP") +"^000000 : Mega Kill"; mes "^70AC11"+ getvariableofnpc(.unstoppable,"DOTAPVP") +"^000000 : Unstoppable"; mes "^70AC11"+ getvariableofnpc(.wickedsick,"DOTAPVP") +"^000000 : Wicked Sick"; mes "^70AC11"+ getvariableofnpc(.monsterkill,"DOTAPVP") +"^000000 : Monster Kill"; mes "^70AC11"+ getvariableofnpc(.godlike,"DOTAPVP") +"^000000 : Godlike"; mes "^70AC11"+ getvariableofnpc(.holyshit,"DOTAPVP") +"^000000 : Beyond Godlike"; next; mes "["+ .@npcname$ +"]"; mes "Explanation for Longest Ownage:"; mes " "; mes "^996600Rank. ^006699NAME ^00AAAA(Longest Ownage) ^000000on :"; mes " ^EE8800TIME^000000"; mes " "; mes "--------------------------------"; mes " "; mes "The ^00AAAAOwnage^000000 added every time any guild members killed another player that doesn't belong to his/her guild. It will reset when any of the guild member was killed by ANY player, including his/her guild member."; mes " "; mes "Then it record in the server the ^EE8800TIME^000000 when the guild got that longest ownage."; mes " "; mes "If the server went under maintainance, the current ownage will survive after the server restart."; mes " "; mes "Any guild member killed by monster, homunculus or pets will not reset the ownage count."; next; if ( getvariableofnpc(.lvltokill,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; mes "You must kill another player with minimum base level of "+ getvariableofnpc(.lvltokill,"DOTAPVP") +", in order to get an announcement or get in the ladder."; mes " "; mes "It's possible for a base level 1 novice kills a base level 99 player and still can get in the ladder."; mes "However when a player level 99 kills a level 1 novice will get nothing."; next; } if ( getvariableofnpc(.counttopunish,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; mes "Some noob players try to kill the same person over and over again in hope of getting his/her name appear in the ladder."; mes "However if you trying to do the same thing on this ladder, your name will announce to the public, and your action will be recorded into the server to notify the GMs."; next; } if ( getvariableofnpc(.minlvlrange,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; mes "When you kill another player thats lower base level than you, the base level gap between you and that player must not more than "+ getvariableofnpc(.minlvlrange,"DOTAPVP") +"."; mes " "; if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 200) mes "In other words, if your base level is 500, the player you killed must be at least level "+( 500 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" then only you will get the announcement and in the ladder."; else if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 70) mes "In other words, if your base level is 255, the player you killed must be at least level "+( 255 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" then only you will get the announcement and in the ladder."; else mes "In other words, if your base level is 99, the player you killed must be at least level "+( 99 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" then only you will get the announcement and in the ladder."; mes "Higher base level kills lower level gets nothing, however lower level player kills higher level will get the announcement."; next; } break; case 6: truncate table `pvpladder`; truncate table `ownladder`; mes "DONE!"; break; } } }
  20. Hey myieee, how are you? I'm going to do your request, please wait a minute so I can edit this answer with your script. I'll be back soon! EDIT-- Here is your request, let me know if it works or not! C ya! // Author: _Okuz_ prontera,150,150,5 script Hourly Reward 84,{ if (hourly_reward < gettimetick(2) && !received) { set received, 1; // Rewards here! // getitem item_id, amount; // Zeny, Zeny + amount; } mes "[Samuel]"; mes "Hello buddy! Have you alredy registered to get your free hourly reward?"; next; if (select("I did it!:Not yet...") == 1) close; if (!received) { mes "[Samuel]"; mes "Hmmm... I think you already have a register for this, don't you?"; close; } else { set received, 0; set hourly_reward, gettimetick(2) + 3600; mes "[Samuel]"; mes "You have successfully registered to get your free hourly reward, don't forget to come back to register again once you get your reward."; close; } }
  21. Hey Kurofly, your script looks like awesome but we need to fix 2 issues related to the if (select) menus. When selecting an option that ends with the command end; the invoking character won't be able to proceed. To close the dialog window you need to use a command such as close; or close2; and I know that you already know that, but I'm just saying to people that doesn't know this yet x). // Author: Kurofly pallene,164,145,5 script Leveling Room 84,{ .@name$ = "[^0066ffLeveling Room^000000]"; mes .@name$,"Gnar Gnar Gnar..." ; next; mes .@name$,"I can bring you to a place where you can gain levels a easy way.."; mes "what do i get in return? well when choosing this way of levelling.. it shows that youre are weak!"; mes "and thats something I love!" ; next; mes .@name$,"In order to get you there, it will cost you:"; mes " ~ 300 <ITEMLINK>"+getitemname(7227)+"<INFO>"+7227+"</INFO></ITEMLINK>"; //mes " ~ 300 "+getitemname(7227); // in case the item link is not available in your client mes " ~ 500 000 zeny"; mes " Minimum Level required: 150"; next; if (select("Proceed:Leave") == 2) close; if (countitem(7227) < 300 || Zeny < 500000 || BaseLevel < 150) { mes .@name$,"come again when you decide to let the shadow realm inside youre head Muahahah~" ; close; } mes .@name$,"Goood... Let the ShadowRealm take you there so you can start leveling the weak way!"; mes "but remember.... if you die.... you will have to bring me the money and the cards all over..."; mes "Still want to go?"; next; if (select("Yes because I'm weak!:No leave me alone!") == 2) close; delitem 7227,300; Zeny -= 500000; warp "pvp_y_1-2",0,0; end; OnInit: monster "pvp_y_1-2",0,0,"Leveling Barricade",1905,50,"Leveling Room::OnLevelUp"; monster "pvp_y_1-2",0,0,"Leveling Barricade",1905,50,"Leveling Room::OnLevelUp"; monster "pvp_y_1-2",0,0,"Leveling Barricade",1905,50,"Leveling Room::OnLevelUp"; monster "pvp_y_1-2",0,0,"Leveling Barricade",1905,50,"Leveling Room::OnLevelUp"; monster "pvp_y_1-2",0,0,"Leveling Barricade",1905,50,"Leveling Room::OnLevelUp"; end; OnLevelUp: atcommand "@blvl 5"; atcommand "@jlvl 5"; } Good work, c ya!
  22. _Okuz_

    R>Healer

    hi thanks for the script btw im using eathena. okay when the player walk to healer npc they will be healed and when they want to heal be healed again they need to walk to heal npc again. so its not abuse on PK map . Alright then! This NPC will heal players when they came within 5 cells of distance from her (Female Sprite). To be healed again players will need to get out the touching area and then came back again. Besides that, they need to wait 5 minutes of cooldown to be healed again. If you want to remove that cooldown, please set the .delay variable to 0. Let me know if it works, please! Bye!
  23. Yeap buddy but that's what the first script you posted is intended to do. The function that we have just created will call the NPC that already have this feature. As I said before, you need to check the script validations because that might be your problem. However, if you just want to add 7 days without checking if players already have received it or not, just put this on your item script and forget all I said before. 670,Gold_Coin_Moneybag,Bag of Gold Coins,2,100000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ set #VIP_expire, gettimetick(2) + (7*86400); },{},{} C ya!
  24. Ok, here's what I got from the map-server console: The first debug printed is regarding your Login. The second is regarding the function that was invoked by using the item and the third is regarding the login event that was triggered by our function. So, there's nothing wrong with our script or logic! Try to use another account because as you can see in the script, if you are already a VIP or if you are a GM (getgroupid != 0) you won't be able to proceed and the results will be different from what you expect. C ya!
  25. Hello Dejavu, how are you? Please don't forget to use the Code quotation when posting codes to the forum, it's better to read and debug. prontera,194,146,5 script Changename 644,{ mes "Input new name"; input @NewName$; if(countitem(26080) < 5000 || Zeny < 500000000) { mes "Not enough requirements"; close; } next; mes "Please relog for the changes to take effect"; query_sql("UPDATE `name` FROM `char` SET `name`='"+@NewName$+"' WHERE `name`='"+strcharinfo(0)+"'"); delitem 26080,5000; set Zeny,Zeny-500000000; close; } Here are a few notes about your script: Line 6: Check if you have any item with id 26080 in your inventory and check if you have more than 500000000 zenys to proceed. Line 14: Delete 5000 items with id 26080 from your inventory. Line 15: Delete 500000000 Zenys. Change the item id if needed. I hope it works, good luck!
×
×
  • Create New...