Jump to content

All Activity

This stream auto-updates

  1. Past hour
  2. But why buy from resellers if it's free for the community here?
  3. Today
  4. That's right, sharing for free, but some people are selling them on their pages. It's really funny. It's good that @skylove repacked it, so nothing can be fixed.
  5. maybe the active grf is not read by DATA.INI but the data in the client GRF embedded
  6. Initial release of episode 19 - Walkthrough Conversion https://github.com/rathena/rathena/pull/8527
  7. Hello. Using NoNPC: true will block the copying of all NPCs on the map moc_fild17, including custom ones or those with the OnInstanceInit label (e.g., InstanceSpawner#DD). To enable your custom NPC inside the instance, you must duplicate them manually after the instance is created. *duplicate "<NPC name>","<map>",<x>,<y>{,"<Duplicate NPC name>"{,<sprite>{,<dir>{,<xs>{,<xy>}}}}}; This command will duplicate the NPC with the given <NPC name> on <map> at <x>/<y>. If <Duplicate NPC name>, <sprite>, <dir>, <xs> or <ys> is not provided the value of the original NPC will be used. The Unique name of the new duplicated NPC is returned on success. An empty string is returned on failure. NOTE: Duplicates will always have the same NPC variables as the original NPC. Editing a NPC variable in a duplicate or the original NPC will change it for the others. Example: .@md_name$ = "Phreeoni"; .@id = instance_create(.@md_name$); if (.@id < 0) { mes "Party Name: "+ getpartyname(.@party_id); mes "Party Leader: "+strcharinfo(0); mes "^0000ff"+.@md_name$+" ^000000- Reservation Failed!"; close; } //NPC to duplicate setarray .@npc_name$,"Phreeoni Helper#DD", "InstanceSpawner#DD"; .@m$ = instance_mapname(instance_info(.@md_name$,IIT_ENTER_MAP), .@id); for ( .@i = 0; .@i < getarraysize(.@npc_name$); .@i++ ) { if (getmapxy(.@mapname$, .@mapx, .@mapy, BL_NPC, .@npc_name$[.@i]) == 0) { if (duplicate(.@npc_name$[.@i], .@m$, .@mapx, .@mapy) == "") debugmes "NPC: " + .@npc_name$[.@i] + " not found for duplication."; } } // Instance Controller NPC (Triggers OnInstanceInit) moc_fild17,37,289,0 script InstanceSpawner#DD 1001,10,10,{ end; OnInit: // Hide if outside instance — needed due to NoNpc: true if (countstr(strnpcinfo(4), "#") == 0) disablenpc; end; OnTouch: // Do nothing if outside instance — needed due to NoNpc: true if (countstr(strnpcinfo(4), "#") == 0) end; disablenpc; //disable itself so that it triggers only once // Broadcast to the instance map mapannounce strnpcinfo(4), "[System]: The monsters have arrived!", bc_map; // Spawn mobs in the instance monster strnpcinfo(4), 75, 265, "Phreeoni Minion", 1002, 10; monster strnpcinfo(4), 78, 268, "Phreeoni", 1159, 1; end; } // Instance-Only NPC (initially hidden) moc_fild17,42,292,0 script Phreeoni Helper#DD 100,{ mes "Hello!"; mes "Welcome to the Phreeoni Instance."; close; OnInit: // Hide if not inside instance — needed due to NoNpc: true if (countstr(strnpcinfo(4), "#") == 0) disablenpc; end; } NPCs created using the duplicate command will not trigger OnInstanceInit. It's recommended to use strnpcinfo(3) instead of instance_npcname, and strnpcinfo(4) instead of instance_mapname.
  8. This auto attack is great but the problem is it consumes too much processing in your server that causes lag spikes everytime.
  9. For this issue already solve by transfer all files from my custom grf into en.grf don't know why my custom grf file can't be read for this client.
  10. that's guild storeage npc, are you using renewal mode?
  11. Yesterday
  12. Sorry that I took so long to answer. I've been trying to make WARP work on Windows 7, but I couldn't, so I resorted to using a modified version of Windows 10 without all the bloatware (called Tiny10 if anyone needs it in the future), and it worked
  13. bro did i missed somethin? i also rebuild the sln. where is that NPC located? i just saw the floating icon.
  14. Thank you very much for your beautiful explanation. Now I understand why even if I load in clif_parse_LoadEndAck, it still doesn't work properly. It's because of that. I understand it much better now thanks to your explanation. Thank you so much. The code you provided is a big help to me. I will just use it and add a confirmation so that the storage with ID: 2 will automatically open via a script for checking in order to initialize it.
  15. The main storage (ID 0) is the only one that's always loaded. Extra storages (IDs 1, 2, 3...) are only loaded when requested, and only one can be loaded at a time. When the code requests storage ID 2, it doesn't load fast enough, so the lines that add the item and close the storage are executed too early. That's why the storage remains open the first time. The same thing happens when the player opens another extra storage, since storage ID 2 gets switched to a different one.
  16. that means u didnt use the grf function at nemo. u need to insert the function name generated.
  17. Now can't hex any more hahahaha Share it for free, but some people sell it. Really bad. Now the file is encrypted. Lol.
  18. @Skylove Whoa, you even dropped the May version nice! Man, seriously appreciate all the work you’re putting in. Noticed the client’s a lot smaller this time any reason for that?
  19. This happened when opening the Client that was encrypted.
  20. Hello, it works, but there are some issues I can't figure out. Here's what's happening: On your first login, if you use AutoStore and pick up loot, Storage ID: 2 opens once but doesn't close. However, the item you picked up goes into your main storage instead of Storage ID: 2. After that, any new loot you pick up correctly goes into Storage ID: 2. But if you relog, the same issue happens again. However, if you open Storage ID: 2 first after relogging, everything works fine. So overall, the system works it’s just that the first opening of the storage causes the issue.
  21. Hello Everyone, I have created an instance with the setting NoNPC: true. This prevents copying NPCs from the source map. How can I enable my custom NPC inside the instance? Even though I have set NoNPC, the script I am using (see below) is not enabling the NPC inside the instance. // Instance Controller NPC (Triggers OnInstanceInit) moc_fild17,37,289,0 script InstanceSpawner#DD 1001,{ end; OnInstanceInit: // Broadcast to the instance map mapannounce instance_mapname("moc_fild17"), "[System]: The monsters have arrived!", bc_map; // Spawn mobs in the instance monster instance_mapname("moc_fild17"), 50, 50, "Phreeoni Minion", 1002, 10; monster instance_mapname("moc_fild17"), 53, 53, "Phreeoni", 1159, 1; // Enable the instance NPC enablenpc instance_npcname("PhreeoniHelper#DD"); end; } // Instance-Only NPC (initially hidden) moc_fild17,42,292,0 script PhreeoniHelper#DD 100,{ mes "Hello!"; mes "Welcome to the Phreeoni Instance."; close; OnInit: // Hide globally — needed due to NoNpc: true hideonnpc strnpcinfo(0); end; } Thank you!!
  22. Last week
  23. The NPC shouldn't have a location. Find: prontera,155,177,5 script MVP_vs_MVP 100,{ And replace: - script MVP_vs_MVP 100,{
  24. Hello, change storage to premiumStorage. You can try my changes. I can't test it with just the code provided. // @autostore [Cydh] if (autostoring && sd->state.autostore && !item->expire_time && !id->flag.autoequip && !sd->state.storage_flag && !sd->npc_id) { if ((!sd->autostore_weight || (sd->autostore_weight && get_percentage(sd->weight, sd->max_weight) >= sd->autostore_weight)) && ( (sd->autostore_type&1 && (id->type == IT_HEALING || id->type == IT_USABLE || id->type == IT_DELAYCONSUME || id->type == IT_CASH)) || (sd->autostore_type&2 && (id->type == IT_ARMOR || id->type == IT_WEAPON || id->type == IT_SHADOWGEAR || id->type == IT_PETEGG || id->type == IT_PETARMOR)) || (sd->autostore_type&4 && (id->type == IT_ETC || id->type == IT_AMMO || id->type == IT_UNKNOWN || id->type == IT_UNKNOWN2)) || (sd->autostore_type&8 && id->type == IT_CARD) ) ) { char output[CHAT_SIZE_MAX]; sd->weight += w; clif_updatestatus(*sd, SP_WEIGHT); int32 stor_id = 2; //Storage ID to autostore if (stor_id) storage_premiumStorage_load(sd, stor_id, STOR_MODE_PUT); if (sd->state.storage_flag == 3) { storage_storageadd(sd, &sd->premiumStorage, i, amount); storage_premiumStorage_close(sd); } else { storage_storageadd(sd, &sd->storage, i, amount); storage_storageclose(sd); clif_storageclose(*sd); } sprintf(output, "[ Autostore ] %dx %s", amount, id->ename.c_str()); clif_messagecolor(&sd->bl, color_table[COLOR_LIGHT_GREEN], output, false, SELF); achievement_update_objective(sd, AG_GET_ITEM, 1, id->value_sell); return ADDITEM_SUCCESS; } }
  25. Hi @jasonch35, im interested. i already dm you here and in discord. kindly check my message thank you
  26. Guys need some help i cant run this code properly it has some error. In Game Error when i use @mvpbet it will only show without selection MAP Server Warning [Warning]: npc_scriptcont: failed npc_checknear test. Here's the original code from patskie: https://rathena.org/board/topic/125697-r-monster-vs-monster/#comment-440718 prontera,155,177,5 script MVP_vs_MVP 100,{ OnMinute00: if (gettime(DT_HOUR) % 2 || .start) end; goto OnStart; end; OnStart: mapwarp "1@dth3", "prontera", 150, 150; killmonster "1@dth3", "All"; .start = 1; announce .npc$ + " We are going to have a MVP vs MVP Event.", bc_all; sleep 7000; announce .npc$ + " For those who want to join, you can participate by using @mvpjoin", bc_all; sleep 7000; announce .npc$ + " We will start the event after 1 minute", bc_all; sleep 60000; announce .npc$ + " The entry to the event is now closed", bc_all; .start = 2; sleep 7000; if (getmapusers("1@dth3") < 1) { announce .npc$ + " Not enough participants to continue the event", 0; .start = 0; end; } mapannounce "1@dth3", .npc$ + " The rules for this event is simple", bc_map; sleep 7000; mapannounce "1@dth3", .npc$ + " Two MVP's will spawn at the center of the map and will attack each other", bc_map; sleep 7000; mapannounce "1@dth3", .npc$ + " Before these MVP's spawn, I will give you 1 minute to make a bet", bc_map; sleep 7000; mapannounce "1@dth3", .npc$ + " The bet cost for this event is " + F_InsertComma(.bet_cost) + "z and when your chosen MVP wins you'll get as much as " + F_InsertComma(.bet_rewd) + "z !!!", bc_map; sleep 7000; mapannounce "1@dth3", .npc$ + " All good?? Let's start betting !!!", bc_map; sleep 7000; mapannounce "1@dth3", .npc$ + " To make a bet please use @mvpbet command, I will give 1 minute for you guys to make a bet", bc_map; .start = 3; sleep 55000; mapannounce "1@dth3", .npc$ + " Betting will close in 5...", bc_map; sleep 1000; mapannounce "1@dth3", .npc$ + " 4...", bc_map; sleep 1000; mapannounce "1@dth3", .npc$ + " 3...", bc_map; sleep 1000; mapannounce "1@dth3", .npc$ + " 2...", bc_map; sleep 1000; mapannounce "1@dth3", .npc$ + " 1...", bc_map; sleep 1000; .start = 4; mapannounce "1@dth3", .npc$ + " Betting is now closed !!!", bc_map; sleep 7000; mapannounce "1@dth3", .npc$ + " Let's get ready to RUMBLE !!!", bc_map; .@mid = .MVP[rand(.size)]; monster "1@dth3", 68, 68, "MVP A", .@mid, 1, strnpcinfo(1) + "::OnDie1", Size_Small, AI_NONE; .ma = $@mobid; monster "1@dth3", 71, 68, "MVP B", .@mid, 1, strnpcinfo(1) + "::OnDie2", Size_Small, AI_ATTACK; .mb = $@mobid; end; OnDie1: unittalk .mb, "[MVP B] Mwahaha!~ Such a weak opponent!"; sleep 7000; killmonster "1@dth3", "All"; .start = 0; addrid(5, 0, "1@dth3"); if (2 == @mvp_bet) { message strcharinfo(0),"Congratulations! You won the event, Good choice!"; Zeny += .bet_rewd; } @mvp_bet = 0; setpcblock PCBLOCK_ATTACK | PCBLOCK_IMMUNE, false; warp "SavePoint", 0, 0; end; OnDie2: unittalk .ma, "[MVP A] Mwahaha!~ Such a weak opponent!"; sleep 7000; killmonster "1@dth3", "All"; .start = 0; addrid(5, 0, "1@dth3"); if (1 == @mvp_bet) { message strcharinfo(0),"Congratulations! You won the event, Good choice!"; Zeny += .bet_rewd; } @mvp_bet = 0; setpcblock PCBLOCK_ATTACK | PCBLOCK_IMMUNE, false; warp "SavePoint", 0, 0; end; OnEventBet: mes .npc$; if (!.start) mes "The event is not active."; else if (.start != 3) mes "The event cannot accept bets at the moment."; else if (Zeny < .bet_cost) mes "You don't have enough zeny to make a bet."; else if (@mvp_bet) mes "You already placed your bet."; else if (strcharinfo(3) != "1@dth3") mes "Hmm~"; else { mes "Which mvp will you bet on this match???"; next; .@s = select("MVP A:MVP B"); mes .npc$; mes "Are you sure you want to bet " + F_InsertComma(.bet_cost) + " on " + (.@s == 1 ? "MVP A" : "MVP B") + "?"; next; if (select("Yes:No") & 2) end; if (.start != 3) { // in case they delay the select ??? setpcblock PCBLOCK_ATTACK | PCBLOCK_IMMUNE, false; warp "SavePoint", 0, 0; end; } mes .npc$; mes "Good luck and have fun!"; Zeny -= .bet_cost; @mvp_bet = .@s; } end; OnEventJoin: if (!.start) message strcharinfo(0), "The event is not active."; else if (.start != 1) message strcharinfo(0), "The event is not yet allowing participants to enter."; else { setpcblock PCBLOCK_ATTACK | PCBLOCK_IMMUNE, true; switch (rand(1,4)) { case 1: warp "1@dth3", 49, 50; break; case 2: warp "1@dth3", 49, 88; break; case 3: warp "1@dth3", 89, 88; break; case 4: warp "1@dth3", 89, 50; break; } } end; OnInit: bindatcmd "mvpjoin", strnpcinfo(1) + "::OnEventJoin"; bindatcmd "mvpbet", strnpcinfo(1) + "::OnEventBet"; bindatcmd "mvpstart", strnpcinfo(1) + "::OnStart", 99, 99; // List of MVP's setarray .MVP[0], 1112, 1115, 1147, 1150, 1157, 1159; .size = getarraysize(.MVP); .npc$ = "[MVP vs MVP Event]"; .bet_cost = 5000; // 5,000z to bet in the event .bet_rewd = 1000000; // 1,000,000z if bet wins end; } 1@dth3 mapflag monster_noteleport 1@dth3 mapflag noskill 1@dth3 mapflag noloot 1@dth3 mapflag noitemconsumption 1@dth3 mapflag nomemo 1@dth3 mapflag nosave SavePoint 1@dth3 mapflag nowarpto 1@dth3 mapflag nowarp 1@dth3 mapflag noteleport
  1. Load more activity
×
×
  • Create New...