-
Posts
9,746 -
Joined
-
Days Won
305
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Emistry
-
Guide: https://www.youtube.com/watch?v=4c50g_RXPZo Files https://github.com/rathena/rathena https://github.com/rathena/FluxCP
-
[Error]: buildin_announce: fatal error ! player not attached!
Emistry replied to DEsMOn's question in Scripting Support
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; -
check what you have added recently, missing client files, or spirte, or sound etc, could trigger the gravity error.
-
Efficient condition comparison. How to compare properly?
Emistry replied to Jannah's question in Scripting Support
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 -
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.
-
CopyFlags: Skill: Plagiarism: true add to each transclass skills
-
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];
-
you are probably connected to a wrong database, or you setup new database in a wrong server.
-
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';
-
Facing problem on adding custom npc Sprite/ID
Emistry replied to NoWayHome's question in Source Support
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. -
Need help on changing paypal donate function to buy now
Emistry replied to NoWayHome's question in Web Support
replace with your own image button, or go Paypal generate a new Buy Now codes instead? -
Choose one random player in the map every 10 seconds.
Emistry replied to Jannah's question in Script Requests
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: } -
script gm_is_online with warning and debug
Emistry replied to acaciomilk's question in Scripting Support
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; } -
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; } }
-
- 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.
-
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.
-
Choose one random player in the map every 10 seconds.
Emistry replied to Jannah's question in Script Requests
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: } -
the parameter for getmapxy has been changed long ago. https://github.com/rathena/rathena/commit/26720f041a3cd0edbaa975bfc70345a30e9bf706 change it into appropriate bl_type
-
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.
-
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.
-
- 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; }
-
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
-
- script sample -1,{ OnPCJobLvUpEvent: if (JobLevel >= 40) { // your codes. } end; }
-
yes