Jump to content

Emistry

Forum Moderator
  • Posts

    9,746
  • Joined

  • Days Won

    305

Everything posted by Emistry

  1. Guide: https://www.youtube.com/watch?v=4c50g_RXPZo Files https://github.com/rathena/rathena https://github.com/rathena/FluxCP
  2. remove the mail command from them, why would they need it if they aren't allow to trade anything. If these is a need to transfer items to player, just use an NPC script that allow GM to send item to players (or previously also known as itemizer script) or enable to log to trace them.
  3. announce "Alon Event Employee: Well done. All the monster are dead!",bc_map; change to mapannounce "pvp_n_7-5", "Alon Event Employee: Well done. All the monster are dead!", bc_map;
  4. check what you have added recently, missing client files, or spirte, or sound etc, could trigger the gravity error.
  5. perhaps consider to use db/re/produce_db.txt ? there are also other tricks like .... 1. sum all ingredient's item id, use that as an identifier to search which items to craft. (as long as the number you sum up doesn't repeat, everything should be fine) 2. or sort the numbers, then store into a variables and use it to compare the item list. (you probably need to write a sorting method) etc
  6. a simple google search would have solved your questions. https://sqlyogkb.webyog.com/article/46-executing-sql-queries https://sqlyogkb.webyog.com/article/117-execute-sql-script it stored as account variable, so its the acc_reg_num table.
  7. CopyFlags: Skill: Plagiarism: true add to each transclass skills
  8. if (checkweight(969,gold) == 0) goto L_OverWeight; getitem 969, gold;x set gold, 0; change to input [email protected], 0, gold; if ([email protected]) close; if (checkweight(969,[email protected]) == 0) goto L_OverWeight; gold -= [email protected]; getitem 969, [email protected];
  9. you are probably connected to a wrong database, or you setup new database in a wrong server.
  10. shutdown the server and run the SQL script. UPDATE `char` SET `zeny` = 0; UPDATE `mail` SET `zeny` = 0; UPDATE `acc_reg_num` SET `value` = 0 WHERE `key` LIKE '#BANKVAULT';
  11. your value shouldn't exceed NPC_RANGE3_END JT_NEW_NPC_3RD_END = 19999, JT_gprecruit = 20100, NPC_RANGE3_END, // Officia: JT_NEW_NPC_3RD_END=20101 now you have set the NPC ID at 20100, and you have 100 free slot in front to cater official server adding more NPC in future. its not recommend to jump to a high number since it wasting your server memory or ... just adjust this if you are confident. //Checks if a given id is a valid npc id. [Skotlex] //Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001) #define npcdb_checkid(id) ( ( (id) > NPC_RANGE1_START && (id) < NPC_RANGE1_END ) || (id) == JT_HIDDEN_WARP_NPC || ( (id) > NPC_RANGE2_START && (id) < NPC_RANGE2_END ) || (id) == JT_INVISIBLE || ( (id) > NPC_RANGE3_START && (id) < NPC_RANGE3_END ) || ( (id) >= 30000 && (id) <= 31000)) then you can use id between 30000 ~ 31000.
  12. replace with your own image button, or go Paypal generate a new Buy Now codes instead?
  13. you can also try something like this. - script atcmd_example -1,{ OnInit: bindatcmd "start", strnpcinfo(3) + "::OnAtcommand", 99; end; OnAtcommand: if (.running) { dispbottom "event currently running at '"+.map$+"' by '"+.gm_name$+"'."; end; } [email protected] = getmapusers(strcharinfo(3)); if ([email protected] < 0) { dispbottom "invalid map '"+.map$+"', event stopped."; } else if ([email protected] <= 2) { dispbottom "this map lack of user to start event, required at least another 2 users (excluding yourself)."; } else { deletearray .player_aid_pool; .player_aid_pool_size = 0; .running = 1; .current_round = 0; .map$ = strcharinfo(3); .gm_name$ = strcharinfo(0); initnpctimer; dispbottom "event started at '"+.map$+"' by '"+.gm_name$+"'. "; mapannounce .map$, "event started at '"+.map$+"' by '"+.gm_name$+"'.", bc_all; if (getmapflag(.map$, MF_LOADEVENT)) setmapflag(.map$, MF_LOADEVENT); mapwarp .map$, .map$, 0, 0; } end; OnPCLoadMapEvent: if (.running && !getgmlevel()) { .player_aid_pool[.player_aid_pool_size] = getcharid(3); .player_aid_pool_size++; dispbottom "You are registered as "+.player_aid_pool_size+"th in this event."; } end; OnTimer10000: if (!.running) { stopnpctimer; end; } .current_round++; if (.player_aid_pool_size <= 0) { mapannounce .map$, "Round "+.current_round+": no more player, event stopped...", bc_map; donpcevent strnpcinfo(3)+"::OnStop"; } else if (.player_aid_pool_size <= 1) { mapannounce .map$, "Round "+.current_round+": we have a winner "[email protected]_name$+"!", bc_map; donpcevent strnpcinfo(3)+"::OnStop"; } else { [email protected] = rand(.player_aid_pool_size); mapannounce .map$, "Round "+.current_round+": we killed "+rid2name(.player_aid_pool[[email protected]])+" out of "+.player_aid_pool_size+" players in this map.", bc_map; unitkill .player_aid_pool[[email protected]]; specialeffect2 EF_GROUND_EXPLOSION, AREA, [email protected]_name$[[email protected]]; initnpctimer; deletearray .player_aid_pool[[email protected]], 1; .player_aid_pool_size--; } end; OnStop: stopnpctimer; .running = 0; .current_round = 0; .map$ = ""; .gm_name$ = ""; deletearray .player_aid_pool; .player_aid_pool_size = 0; if (getmapflag(.map$, MF_LOADEVENT)) removemapflag(.map$, MF_LOADEVENT); end: }
  14. a simplified version. - script gm_is_online -1,{ OnPCLoginEvent: [email protected]_level = getgmlevel(); if ([email protected]_level == 99) callsub(L_GM, "Admin"); else if ([email protected]_level >= 90) callsub(L_GM, "Co-Admin"); else if ([email protected]_level >= 10) callsub(L_GM, "Head GM"); else if ([email protected]_level >= 4) callsub(L_GM, "Event GM"); else if ([email protected]_level >= 3) callsub(L_GM, "Support GM"); else if ([email protected]_level >= 2) callsub(L_GM, "Helper GM"); if (readparam(bStr) > 99 || readparam(bAgi) > 99 || readparam(bVit) > 99 || readparam(bInt) > 99 || readparam(Dex) > 99 || readparam(bLuk) > 99){ mes "[^FF0000Anti Cheat System^000000]"; mes "We have detected you having stats over the limit. You will be disconnected shortly. If this is an error please contact the Game Master immediately."; setpcblock PCBLOCK_ALL, true; close2; atcommand "@kick "+strcharinfo(0); end; } end; L_GM: atcommand "@speed 1"; announce "[ "+getarg(0)+" ] "+strcharinfo(0)+" is online",bc_all,0x00ff66; specialeffect2 377; specialeffect2 381; end; }
  15. use delitemidx(...) script command instead. getinventorylist; for ([email protected] = 0; [email protected] < @inventorylist_count; [email protected]++) { if (@inventorylist_id[[email protected]] == 31000 && [email protected]_equip[[email protected]]) { delitemidx @inventorylist_idx[[email protected]], 1; getitem 30001,5; } }
  16. - script sample -1,{ OnInit: setarray .map$, "prontera", "izlude"; .map_size = getarraysize(.map$); end; OnHour00: for ([email protected] = 0; [email protected] < .map_size; [email protected]++) { [email protected] = instance_list(.map$[[email protected]]); for ([email protected] = 0; [email protected] < [email protected]; [email protected]++) { instance_announce [email protected]_list[[email protected]], "<SYSTEM> Instance are destroyed upon reached 12AM everyday.", bc_map; instance_destroy [email protected]_list[[email protected]]); } } end; } required the Pull: 5112 mentioned above.
  17. perhaps you should check what kind of items you are trying to loot using the autoloot. autoloot only cover items that dropped by monsters, it exclude item that is generated by npc script or certain npc event etc.
  18. something like this - script atcmd_example -1,{ OnInit: bindatcmd "start", strnpcinfo(3) + "::OnAtcommand", 99; end; OnAtcommand: if (.running) { dispbottom "event currently running at '"+.map$+"' by '"+.gm_name$+"'."; end; } [email protected] = getmapusers(strcharinfo(3)); if ([email protected] < 0) { dispbottom "invalid map '"+.map$+"', event stopped."; } else if ([email protected] <= 2) { dispbottom "this map lack of user to start event, required at least another 2 users (excluding yourself)."; } else { .running = 1; .current_round = 0; .map$ = strcharinfo(3); .gm_name$ = strcharinfo(0); initnpctimer; dispbottom "event started at '"+.map$+"' by '"+.gm_name$+"'."; mapannounce .map$, "event started at '"+.map$+"' by '"+.gm_name$+"'.", bc_map; } end; OnTimer10000: if (!.running) { stopnpctimer; end; } [email protected]_count = getmapunits(BL_PC, .map$, [email protected]_name$); [email protected]_index = inarray([email protected]_name$, .gm_name$); if ([email protected]_index != -1) { // offset GM himself deletearray [email protected]_name$[[email protected]], 1; [email protected]_count--; } .current_round++; if ([email protected]_count <= 0) { mapannounce .map$, "Round "+.current_round+": no more player, event stopped...", bc_map; donpcevent strnpcinfo(3)+"::OnStop"; } else if ([email protected]_count <= 1) { mapannounce .map$, "Round "+.current_round+": we have a winner "[email protected]_name$+"!", bc_map; donpcevent strnpcinfo(3)+"::OnStop"; } else { [email protected] = rand([email protected]_count); mapannounce .map$, "Round "+.current_round+": we killed "[email protected]_name$[[email protected]]+" out of "[email protected]_count+" players in this map.", bc_map; unitkill convertpcinfo([email protected]_name$[[email protected]], CPC_ACCOUNT); specialeffect2 EF_GROUND_EXPLOSION, AREA, [email protected]_name$[[email protected]]; initnpctimer; } end; OnStop: stopnpctimer; .running = 0; .current_round = 0; .map$ = ""; .gm_name$ = ""; end: }
  19. the parameter for getmapxy has been changed long ago. https://github.com/rathena/rathena/commit/26720f041a3cd0edbaa975bfc70345a30e9bf706 change it into appropriate bl_type
  20. you can also override the whole part here https://github.com/rathena/rathena/blob/df65d5ddfc5d10e1834875cc7a1c1f543e404c74/src/map/itemdb.cpp#L192-L218 with item->value_sell = 1; item->value_buy = 2; buy price shouldn't be lower than sell price.
  21. Emistry

    PvP Area

    implement the cell_pvp source mod, then set the area to be PVP area. Search the forum for cell_pvp source mod, probably you have to update it to be compatible with your hosted version.
  22. - script atcmd_example -1,{ OnInit: .max_slot = 5; bindatcmd "killcount", strnpcinfo(3) + "::OnAtcommand"; end; OnAtcommand: if (compare([email protected]_parameters$[0], "reset")) { if ([email protected]_parameters$[1] == "all") { for ([email protected] = 0; [email protected] < .max_slot; [email protected]++) dispbottom [email protected]_command$+" removed "+getmonsterinfo(#killcount_mob_id[[email protected]], MOB_NAME)+" from slot "[email protected]+" successfully."; deletearray #killcount_mob_id; deletearray #killcount_amount; } else if ([email protected]_parameters$[1] != "") { [email protected] = atoi([email protected]_parameters$[1]); if ([email protected] < 0 || [email protected] >= .max_slot) { dispbottom [email protected]_command$+" invalid slot #"[email protected]+" (min = 0, max = "+.max_slot+")."; end; } } else { dispbottom [email protected]_command$+" removed "+getmonsterinfo(#killcount_mob_id[[email protected]], MOB_NAME)+" from slot "[email protected]+" successfully."; #killcount_mob_id[[email protected]] = 0; #killcount_amount[[email protected]] = 0; } #killcount_mob_id$ = "#"; for ([email protected] = 0; [email protected] < .max_slot; [email protected]++) #killcount_mob_id$ = #killcount_mob_id$ + #killcount_mob_id[[email protected]] + "#"; } else if (getmonsterinfo(atoi([email protected]_parameters$[0]), MOB_NAME) != "null") { [email protected]_mob_id = atoi([email protected]_parameters$[0]); if ([email protected]_parameters$[1] != "") { [email protected] = atoi([email protected]_parameters$[1]); if ([email protected] < 0 || [email protected] >= .max_slot) { dispbottom [email protected]_command$+" invalid slot #"[email protected]+" (min = 0, max = "+.max_slot+")."; end; } } [email protected]_index = inarray(#killcount_mob_id, [email protected]_mob_id); if ([email protected]_index != -1) { dispbottom [email protected]_command$+" already registerd "+getmonsterinfo(#killcount_mob_id[[email protected]_index], MOB_NAME)+" at slot "[email protected]_index+" with current "+F_InsertComma(#killcount_amount[[email protected]])+" kills."; end; } if ([email protected]_mob_id != #killcount_mob_id) { #killcount_mob_id[[email protected]] = [email protected]_mob_id; #killcount_amount[[email protected]] = 0; dispbottom [email protected]_command$+" registered "+getmonsterinfo(#killcount_mob_id[[email protected]], MOB_NAME)+" at slot "[email protected]_index+", will start counting."; } #killcount_mob_id$ = "#"; for ([email protected] = 0; [email protected] < .max_slot; [email protected]++) #killcount_mob_id$ = #killcount_mob_id$ + #killcount_mob_id[[email protected]] + "#"; } else if (compare([email protected]_parameters$[0], "list")) { for ([email protected] = 0; [email protected] < .max_slot; [email protected]++) dispbottom getmonsterinfo(#killcount_mob_id[[email protected]], MOB_NAME)+" Kill: "+F_InsertComma(#killcount_amount[[email protected]]); } else { dispbottom [email protected]_command$+" failed. Usage: "[email protected]_command$+" <list|reset|mob_id> {slot}"; } end; OnNPCKillEvent: [email protected] = killedrid; if (compare(#killcount_mob_id$, "#"[email protected]+"#")) { [email protected] = inarray(#killcount_mob_id, [email protected]); #killcount_amount[[email protected]]++; dispbottom getmonsterinfo([email protected], MOB_NAME)+" Kill: "+F_InsertComma(#killcount_amount[[email protected]]); } end; }
  23. 1. save the current appearance data into a variable then change the appearance to new appearance based on item when unequipped, load the appearance from the stored variable data 2. retrieve and store existing cards or enchantment into a temporary variable, then use script command items like getitem2, getitem3....etc to create the new items along with old and new enchantments
  24. - script sample -1,{ OnPCJobLvUpEvent: if (JobLevel >= 40) { // your codes. } end; }
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.