-
Posts
444 -
Joined
-
Last visited
-
Days Won
3
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Lord Ganja
-
I was wondering why all of monsters in my server doesn't attack aggressively? Players need to attack them first before they attack the player.. I thought it was because of this: conf/battle/monster.conf // Allow monsters to be aggresive and attack first? (Note 1) monster_active_enable: yes I tried to set it to no and yes but all monsters are still not aggressive. Any idea why? thanks in advance!
-
How to exclude group_level higher than 0 in a source script ?
Lord Ganja posted a question in Source Support
I'm currently using this Extended PvP Cell. However, I need it not to count GM's (group id higher than 0) or not to increase the PLAYER COUNT inside the PVP CELL when the gm entered the pvp cell. I tried adding this in the code but it just won't work if(pc_get_group_level > 0 ) return 0; Here's the code: in map.c int map_pvp_area(struct map_session_data* sd, bool flag) { if(pc_get_group_level > 0 ) // Tried Adding This one return 0; switch(flag) { case 1: clif_map_property(sd, MAPPROPERTY_FREEPVPZONE); clif_maptypeproperty2(&sd->bl,SELF); if (sd->pvp_timer == INVALID_TIMER) { map[sd->bl.m].cell_pvpuser++; sd->pvp_timer = add_timer(gettick()+200, pc_calc_pvprank_timer, sd->bl.id, 0); sd->pvp_rank = 0; sd->pvp_lastusers = 0; sd->pvp_point = 5; sd->pvp_won = 0; sd->pvp_lost = 0; sd->state.pvp = 1; sd->pvpcan_walkout_tick = gettick(); } break; default: clif_pvpset(sd, 0, 0, 2); map[sd->bl.m].cell_pvpuser--; if( sd->pvp_timer != INVALID_TIMER ) delete_timer(sd->pvp_timer, pc_calc_pvprank_timer); sd->pvp_timer = INVALID_TIMER; sd->state.pvp = 0; break; } return 0; } Anybody help me? Thanks in advance! -
Map Server Crash (Clone usinng Gravitational Field Skill)
Lord Ganja replied to Lord Ganja's question in General Support
oh sorry, I didn't know where to post it. can you tell me? thanks. EDIT: Found it! Thanks nana! -
Map Server Crash (Clone usinng Gravitational Field Skill)
Lord Ganja posted a question in General Support
Can someone reproduce this one? Whenever a character clone casts Gravitational Field skill, it causes map server to crash.. I'm using the latest git.. Please fix this. Thank you! -
glad to hear that btw you used 3 same keys ? have you tried using wpe?
-
recompiled? maybe try to look for another working custom packet keys.. I also encountered something like this before. Well in my case, im using 2013-12-23 client. second and third packet key is the same. What I did is just used nkwz RO Toolkit, and look for the packet key that works, replaced 2nd packet with same packet as the 3rd (i think this is only for 2013-12-23 client). Just full of trial and errors but somehow it works now.
-
try this client diff mmo.h #ifndef PACKETVER #define PACKETVER 20130807 #endif core.h /// Comment to disable the official packet obfuscation support. /// When enabled, make sure there is value for 'packet_keys' of used packet version or /// defined 'packet_keys_use' in db/[import/]packet_db.txt. /// This requires PACKETVER 2011-08-17 or newer. #define PACKET_OBFUSCATION db/packet_db.txt packet_db_ver: 45 packet_keys_use: default packet_keys: 0x<yourcustomkey1>,0x<yourcustomkey2>,0x<yourcustomkey3> don't foget to recompile
-
Did you test your custom keys? You can test it here and see if it pass or a broken key EDIT: Did you enable Packet Obfuscation in core.h?
-
did you diff your client with packetkeys?
-
How can a sage/professor dispell a FCP when soul linked? I tried editing some codes in skill.c but it won't work. Any help please? Thanks in advance! Here's what I did: in skill.c under case SA_DISPELL: > First edit, I remove this: for(i=0;i<SC_MAX;i++) { if (!tsc->data[i]) continue; switch (i) { case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION: case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR: - case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD: - case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO: + case SC_STRIPHELM: case SC_COMBO: case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD: case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD: > Second edit, I added these lines: case SC_ASSUMPTIO: if( bl->type == BL_MOB ) continue; break; + if ( sd && tsc && sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 != SL_SAGE && rand()%100 < 99 && skill_id == SA_DISPELL + && + ( tsc->data[SC_CP_WEAPON] || + tsc->data[SC_CP_SHIELD] || + tsc->data[SC_CP_ARMOR] || + tsc->data[SC_CP_HELM] ) ) { + case SC_CP_WEAPON: + case SC_CP_SHIELD: + case SC_CP_ARMOR: + case SC_CP_HELM: + continue; + break; + } } if(i == SC_BERSERK) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. status_change_end(bl, (sc_type)i, INVALID_TIMER); } break; }
-
Professor/Mage Talisman Effect/ Soul link
Lord Ganja replied to GM Homies's question in General Support
Try this one. src/map/status.c Under: static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) Find This: //Bonus by SC if (sc) { if(sc->data[SC_INCMHP]) bonus += sc->data[SC_INCMHP]->val1; if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 2) bonus += 500; if(sc->data[SC_LERADSDEW]) bonus += sc->data[SC_LERADSDEW]->val3; if(sc->data[SC_INSPIRATION]) bonus += (600 * sc->data[SC_INSPIRATION]->val1); if(sc->data[SC_SOLID_SKIN_OPTION]) bonus += 2000; if(sc->data[SC_MTF_MHP]) bonus += sc->data[SC_MTF_MHP]->val1; if(sc->data[SC_MARIONETTE]) bonus -= 1000; Add these lines: if(sc->data[SC_SPIRIT] && (sc->data[SC_SPIRIT]->val2 == SL_WIZARD || sc->data[SC_SPIRIT]->val2 == SL_SAGE)) bonus += ((TBL_PC*)bl)->status.max_hp * 2; PS: Haven't tested it yet. Just see if it works. -
how to restrict party setup modification?
Lord Ganja replied to Lord Ganja's question in Source Support
This works perfectly!! Thanks a lot Cydh! -
Is there any way to cap max resistance and reduce damage? for example, equipping a 100% resistance to all elements or 100% resistance to demi-human.. or let's say, equipping multiple items that will result 100% resist or more.. instead of being immune(100% resist), the resistance will return back to 80%.
-
I applied this diff to the latest ra git.. and got this error: [Warning]: Value for setting 'atk_adjustment_map': 16 is invalid (min:4095 max:4095)! Defaulting to 1... any thoughts? thanks!
-
###### Guides on how to add custom job (Server side + Client Side)
Lord Ganja posted a question in General Support
Can anyone provide a guide here how to add custom jobs? Server side + client side guide. I can see some guides from wiki and neomind how to add custom job but it seems not updated. Idk if I put this on the right section. Please move this thread if it's not on the right one. Thanks in advance! -
how to restrict party setup modification?
Lord Ganja replied to Lord Ganja's question in Source Support
Hope you find it. It would be really helpful.I tried looking something like that in google but couldnt find one. -
Is it possible for mapflag partylock to restrict partysetup modification? As of now, mapflag partylock only restricts inviting and leaving a party. Anyone can help me about this? thanks in advance!
-
Autocreate party using waitingroom? HELP
Lord Ganja replied to Lord Ganja's question in Scripting Support
prontera,150,175,0 script testparty 521,{ npctalk "You're required to enter the waitingroom."; end; OnInit: waitingroom "test",11,"testparty::OnFull",3; end; OnFull: getmapxy .@map$, .@x, .@y, 1; warpwaitingpc .@map$, .@x, .@y; for ( .@i = 0; .@i < $@warpwaitingpcnum; .@i++ ) { .@name$ = rid2name($@warpwaitingpc[.@i]); .@char_id = getcharid( 0, .@name$ ); if ( getcharid( 1, .@name$ ) > 0 ) party_delmember( .@char_id ); sleep 100; if ( .@create == 0 ) { while( party_create( "party"+ rand(10000), .@char_id ) == -3 ); .@create = 1; } else if ( $@party_create_id ) party_addmember $@party_create_id, .@char_id; } end; OnPCLogoutEvent: .@logged = 1; OnPCStatCalcEvent: if ( strcharinfo(3) == "prontera" && !.@logged || strcharinfo(3) != "prontera" && .@logged || getcharid(1) == 0 ) end; .@party_id = getcharid(1); if ( getcharid(0) != getpartyleader( .@party_id, 2 ) ) party_delmember(); else { .i = 0; if ( instance_check_party(.@party_id,2) == 0 ) party_destroy(.@party_id); else { addrid( 2, 0, .@party_id ); if( !.i && !.@party_id ) { .i = 1; party_changeleader getcharid(1), getcharid(0); } else if( .@party_id ) party_delmember(); } } end; } Remember to set where it says "prontera" to your map. Thanks Skorm! This is working perfectly! -
Autocreate party using waitingroom? HELP
Lord Ganja replied to Lord Ganja's question in Scripting Support
Replace: while( party_create( "party"+ rand(10000), 1 ) == -3 ); With: while( party_create( "party"+ rand(10000), .@char_id ) == -3 ); About your other question; yes it does. Thanks skorm. Anyway I tried it and it successfully created a party, but the last one to enter the waitingroom is not included in the party. and when the party leader logout or changemap, it doesn't change the party leader. even for party members, when they logout or changemap, it doesn't kick them from party. -
Emistry thanks for this. Anyway I tried your script but it's the same. It always say Sorry but I can't replicate. . . . . . . EDIT: I tried to equip all those in the array. but only the first one (2383) can went thru.. the rest cannot.
-
How to check items based from a list in an array? Help please. I'm noob on using loops. I tried to make one but it doesn't detect the item from the list. I need to match the equipped item from any itemid on the list for the script to went thru. but my script always trigger != even the item equipped is in the list. for( .@i = 0; .@i < getarraysize(.list); .@i++ ){ if(getequipid(.@part) != .list[.@i]){ mes .npcname$; mes "Sorry but I can't replicate this item. Please pick one from the list."; emotion e_sry; close; } } mes .npcname$; mes "I can replicate this item."; List of items that can be replcated: setarray .list[0],2383,2541,2410,2629,2630; Thanks in advance!
-
addslot - slotted card cannot be removed by card remover
Lord Ganja posted a question in Source Support
Help please. I added the addslot src to mine. and encountered DUPING of cards when using the card remover. Example: An asprika[0] got slotted with addslot script and become asprika[1]. Then asprika is compounded with sinx card. after removing the card, I still have the asprika compounded with sinx card, and a new sinx card in my inventory. You got Assassin Cross Card (1). Asprika of Shadow is taken off. You got Asprika of Shadow(1) Here's the code for successremovecards: BUILDIN_FUNC(successremovecards) { int i=-1,c,cardflag=0; TBL_PC* sd = script_rid2sd(st); int num = script_getnum(st,2); if (num > 0 && num <= ARRAYLENGTH(equip)) i=pc_checkequip(sd,equip[num-1]); if (i < 0 || !sd->inventory_data[i]) { return 0; } if(itemdb_isspecial(sd->status.inventory[i].card[0])) return 0; for( c = MAX_SLOTS - 1; c >= 0; --c ) //add-removeslots { if( sd->status.inventory[i].card[c] && itemdb_type(sd->status.inventory[i].card[c]) == IT_CARD && sd->status.inventory[i].card[c] != CARD_SLOT_ID ) //add-removeslots {// extract this card from the item unsigned char flag = 0; struct item item_tmp; memset(&item_tmp,0,sizeof(item_tmp)); cardflag = 1; item_tmp.nameid = sd->status.inventory[i].card[c]; item_tmp.identify = 1; if((flag=pc_additem(sd,&item_tmp,1,LOG_TYPE_SCRIPT))){ // get back the cart in inventory clif_additem(sd,0,0,flag); //map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); if (c > sd->inventory_data[i]->slot-1) //addslot sd->status.inventory[i].card[c] = CARD_SLOT_ID; //addslot } } } if(cardflag == 1) {//if card was remove remplace item with no card unsigned char flag = 0, j; struct item item_tmp; memset(&item_tmp,0,sizeof(item_tmp)); item_tmp.nameid = sd->status.inventory[i].nameid; item_tmp.identify = 1; item_tmp.refine = sd->status.inventory[i].refine; item_tmp.attribute = sd->status.inventory[i].attribute; item_tmp.expire_time = sd->status.inventory[i].expire_time; item_tmp.bound = sd->status.inventory[i].bound; for (j = 0; j < MAX_SLOTS; j++) //addslot item_tmp.card[j]=0; //addslot for (j = sd->inventory_data[i]->slot; j < MAX_SLOTS; j++) item_tmp.card[j]=sd->status.inventory[i].card[j]; pc_delitem(sd,i,1,0,3,LOG_TYPE_SCRIPT); if((flag=pc_additem(sd,&item_tmp,1,LOG_TYPE_SCRIPT))){ //chk if can be spawn in inventory otherwise put on floor clif_additem(sd,0,0,flag); map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); } clif_misceffect(&sd->bl,3); } return SCRIPT_CMD_SUCCESS; } Thanks in advance! -
Autocreate party using waitingroom? HELP
Lord Ganja replied to Lord Ganja's question in Scripting Support
Hi Capuche. Sorry for the late response.. anyway I tried this one but i got this: [Debug]: Source (NPC): testparty at prontera (150,175) and it doesn't create any party. and does this script autoremake party when there's already an existing party name? Thanks Capuche!