Jump to content

AnnieRuru

Script Developers
  • Content Count

    1677
  • Joined

  • Last visited

  • Days Won

    245

Everything posted by AnnieRuru

  1. I guess I have to reply something actually ... status change can only apply 1 at a time ... if you already have blessing lv5 buff, cast lv10 blessing on you, you will replaced by level10 blessing if already having PORING as the target, adding DROPS will overwrite PORING in this case so nope, only 1 at a time this idea about using status change should be scrap yes, using OnNPCKillEvent is stress, but it doesn't mean lag it just mean using more CPU resource to compute the code although in the past (year 2008) before I learn to touch the source code, I did make a low populated server (~30 players) lag ... lol seriously, you have to answer a few questions before we proceed 1. Why not just write this as a Quest NPC ? it make sense to anyone -> take the quest, kill the mobs, get status points as reward no need to go to your website to know which monster gives which stat, and the Quest can be given in just 1 single npc, everyone can understand easily and MOST OF ALL, even a 5 years old kid that knows how to type "@-r-e-l-o-a-d-s-c-r-i-p-t" can write a Quest NPC 2. what makes you obsessed with this feature ? SC_ADDSTATKILLMOB is just an idea I think of, and it is not available anywhere even I google search 'SC_ADDSTATKILLMOB', only 2 results came out there is no available code for it, until someone tries to make it out and like I said earlier, your idea that can be done with THAT MANY mobs, it is impossible using status change, means only 1 mob ID at a time, ok ? so please, write this feature as a Quest. Full Stop. 3. and if you still unsatisfied as a Quest, you have to explain properly where you get this idea from - a topic link to that game website which properly explain about this feature -> for example wow wiki, or irowiki - or a youtube video that shows how they did it
  2. cheap method without array if ( skill_id == SM_MAGNUM || skill_id == SM_BASH || skill_id == SM_ENDURE || skill_id == CH_PALMSTRIKE || skill_id == CH_TIGERFIST )clif->specialeffect(src, 722, AREA);this method allows to use constant which makes your code easy to read and the array int i;for ( i = 0; i < 5; ++i )if ( skilleffects[i] == skill_id ) {clif->specialeffect(src, 722, AREA);break;}.EDITING, there is 1 more, wait I dig it out OK int i;ARR_FIND( 0, 5, i, skilleffects[i] == skill_id );if ( i < 5 )clif->specialeffect(src, 722, AREA);
  3. impossible without source edits in that script, the emperium breaker room limit only 1 player at a time, so the player can kill the emperium alone without disrupted by other players if you put this in main town, it means other players can kill steal the emperium which defeat its purpose its possible if you want to touch the source to make that emperium only hit-able for 1 player, but there's no need to do that right ?
  4. hmm ? I don't have any problem prontera.gat, 155, 185, 5 script Dressing Girl 1_F_MARIA,{ addtimer 1, strnpcinfo(0)+"::OnChangeBack"; mes "do you want to try out the look of some awesome headgear?"; next; .@s = select( .menu$ ) -1; if ( getiteminfo( .headgear[.@s], 5 ) & 256 ) changelook LOOK_HEAD_TOP, getiteminfo( .headgear[.@s], 11 ); else if ( getiteminfo( .headgear[.@s], 5 ) & 512 ) changelook LOOK_HEAD_MID, getiteminfo( .headgear[.@s], 11 ); else if ( getiteminfo( .headgear[.@s], 5 ) & 1 ) changelook LOOK_HEAD_BOTTOM, getiteminfo( .headgear[.@s], 11 ); else { mes "this is not a headgear ..."; close; } mes "that look nice on you"; close;OnChangeBack: .@top = getequipid(EQI_HEAD_TOP); changelook LOOK_HEAD_TOP, ( .@top == -1 )? 0 : getiteminfo( .@top, 11 ); .@mid = getequipid(EQI_HEAD_MID); changelook LOOK_HEAD_MID, ( .@mid == -1 )? 0 : getiteminfo( .@mid, 11 ); .@low = getequipid(EQI_HEAD_LOW); changelook LOOK_HEAD_BOTTOM, ( .@low == -1 )? 0 : getiteminfo( .@low, 11 ); end;OnInit: setarray .headgear, // add as many as possible 5081, 5082, 5083, 5084, 5085, 5086, 5087; .headgearsize = getarraysize(.headgear); for ( .@i = 0; .@i < .headgearsize; .@i++ ) .menu$ = .menu$ + getitemname(.headgear[.@i]) +":"; end;}I did like your having space in the map name and coordinate, the script works just fine
  5. I think this plugin needs a little revamp now that plugin can also hook login server, its better to hook login->authok this time during that time plugin can only hook to map-server, but now all 3 can
  6. seriously ? have you test it ? my map-server gone crazy with errors my data.[Warning]: itemdb_search: Item ID 6086 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7194 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 997 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1830 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4513 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 955 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 910 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 938 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 993 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 601 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1002 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 757 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4043 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 603 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 617 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 644 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2404 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2506 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2417 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2610 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4387 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6247 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 937 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1455 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 926 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 936 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 508 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 756 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4062 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 991 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 946 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 910 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 935 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 601 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 757 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1002 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4032 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 705 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 520 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 905 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 711 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 521 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2269 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4515 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 912 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1099 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7003 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 608 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 756 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4252 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7054 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2518 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2626 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7047 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 12128 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 661 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2123 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4400 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7512 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7507 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2148 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6214 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1270 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 985 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2517 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4401 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1095 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2607 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7005 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 611 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 984 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7026 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 912 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4244 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7567 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2422 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7563 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2109 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 12183 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7563 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1061 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4409 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 505 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1035 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2890 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1036 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7446 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 996 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7446 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4379 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 505 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1035 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2890 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1036 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7446 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 996 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7446 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4379 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6067 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7406 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7407 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6065 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6066 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6067 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7406 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7407 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7406 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7407 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7406 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7407 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6065 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6066 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6067 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6067 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6067 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7410 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7411 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7410 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7411 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6067 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 535 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 12192 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7225 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6658 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6804 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6804 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6804 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2267 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1062 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 664 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 546 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 12192 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6805 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6805 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6805 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 2267 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1062 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 664 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 546 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 12192 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 12192 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6914 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 12192 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 6915 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 5083 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1950 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 1750 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 7539 does not exists in the item_db. Using dummy data.[Warning]: itemdb_search: Item ID 4526 does not exists in the item_db. Using dummy data.
  7. find this line if(bstatus->max_hp > (unsigned int)battle_config.max_hp) bstatus->max_hp = battle_config.max_hp;change into if ( pc->jobid2mapid(sd->status.class_) & (EAJL_UPPER|EAJL_THIRD) ) { // trans 3rd class if ( bstatus->max_hp > (amount) ) bstatus->max_hp = (amount); } else if ( pc->jobid2mapid(sd->status.class_) & EAJL_THIRD ) { // regular 3rd class if ( bstatus->max_hp > (amount) ) bstatus->max_hp = (amount); } else { // other jobs if ( bstatus->max_hp > (amount) ) bstatus->max_hp = (amount); }didn't test but you are developer so should at least able to debug this crap
  8. no wonder I found it strange for never getting type 2 ... I thought it was just low probability fixed
  9. this script gets in the way when I editing the wiki, so I have to dispose here ops, I mean, release here Download: script simple script, the npc announce the name of the card it wants if the player having this card, can give to this npc for a reward found this idea from rathena script request
  10. there is no need a list, that was call from map->foreachinrange https://github.com/HerculesWS/Hercules/blob/master/src/map/pet.c#L883 so all items runs separate functions just add if ( fitem->id == <item ID> || fitem->id == <item ID> ) return 0; will do I think note the the source name might not match, has to read from where it declare EDIT: Answer #include "common/hercules.h"#include <stdio.h>#include <string.h>#include <stdlib.h>#include "map/pet.h"#include "common/HPMDataCheck.h"HPExport struct hplugin_info pinfo = { "PetNoLootItemID", SERVER_TYPE_MAP, "0.1", HPM_VERSION,};int pet_ai_sub_hard_lootsearch_pre( struct block_list *bl, va_list *ap ) { struct flooritem_data *fitem = (struct flooritem_data *)bl; // pet will no loot these items if ( fitem->item_data.nameid == 501 || fitem->item_data.nameid == 502 || fitem->item_data.nameid == 503 || fitem->item_data.nameid == 504 || fitem->item_data.nameid == 505 ) hookStop(); return 0;}HPExport void plugin_init (void) { addHookPre( "pet->ai_sub_hard_lootsearch", pet_ai_sub_hard_lootsearch_pre );}
  11. OHHH ok I understand now src/map/itemdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/src/map/itemdb.c b/src/map/itemdb.cindex 34db4b7..eb57026 100644--- a/src/map/itemdb.c+++ b/src/map/itemdb.c@@ -537,7 +537,7 @@ int itemdb_isstackable2(struct item_data *data) * Trade Restriction functions [Skotlex] *------------------------------------------*/ int itemdb_isdropable_sub(struct item_data *item, int gmlv, int unused) {- return (item && (!(item->flag.trade_restriction&ITR_NODROP) || gmlv >= item->gm_lv_trade_override));+ return (item && (!(item->flag.trade_restriction&ITR_NODROP) || gmlv >= item->gm_lv_trade_override || gmlv >= 99)); } int itemdb_cantrade_sub(struct item_data* item, int gmlv, int gmlv2) {simple patch hmm ... wait this is a bug ... I think why the PC_PERM_TRADE shows up so little in the src folder ... oh its pc_can_give_items(sd) confirm this is a bug now ... it seems that can_trade only overwrites the nodrop/notrade mapflag, but doesn't overwrite the item restriction flag ... hmm ... I also dunno what to say about this
  12. nothing is impossibleif you willing to touch the source code, I move to source support I mean plugin request, since I only write plugins now https://github.com/HerculesWS/Hercules/blob/master/src/map/pet.c#L951 . there is no known way to automatically turn them into egg form, but there is a *getpetinfo script commandthe command will return 0 if no pet is found so can use this to check if the player having pet or not
  13. maybe should move to database request since this can be done with database alone Arch Bishop job_db.conf looks like this Arch_Bishop: { Weight: 30000 BaseASPD: { Fist: 45 Mace: 45 TwoHandMace: 45 Rod: 60 Knuckle: 50 Book: 44 TwoHandRod: 55 Shield: 5 } HPTable:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, // 1 - 10 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, // 11 - 20 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, // 21 - 30 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 31 - 40 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, // 41 - 50 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, // 51 - 60 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, // 61 - 70 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, // 71 - 80 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, // 81 - 90 91, 92, 93, 94, 95, 96, 97, 98, 4300, 4333, // 91 - 100 4412, 4491, 4570, 4649, 4728, 4807, 4886, 4965, 5044, 5123, // 101 - 110 5202, 5281, 5360, 5439, 5518, 5597, 5676, 5755, 5834, 5913, // 111 - 120 5992, 6071, 6150, 6229, 6308, 6387, 6466, 6545, 6624, 6703, // 121 - 130 6782, 6861, 6940, 7019, 7098, 7177, 7256, 7335, 7414, 7493, // 131 - 140 7572, 7651, 7730, 7809, 7888, 7967, 8046, 8125, 8204, 8283, // 141 - 150 8362, 8441, 8520, 8599, 8678, 8757, 8836, 8915, 8994, 9115, // 151 - 160 9276, 9438, 9601, 9765, 9930, 10096, 10263, 10431, 10600, 10770, // 161 - 170 10941, 11113, 11286, 11460, 11635] // 171 - 175 SPTable:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, // 1 - 10 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, // 11 - 20 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, // 21 - 30 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 31 - 40 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, // 41 - 50 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, // 51 - 60 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, // 61 - 70 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, // 71 - 80 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, // 81 - 90 91, 92, 93, 94, 95, 96, 97, 98, 800, 810, // 91 - 100 818, 826, 834, 842, 850, 858, 866, 874, 882, 890, // 101 - 110 898, 906, 914, 922, 930, 938, 946, 954, 962, 970, // 111 - 120 978, 986, 994, 1002, 1010, 1018, 1026, 1034, 1042, 1050, // 121 - 130 1058, 1066, 1074, 1082, 1090, 1098, 1106, 1114, 1122, 1130, // 131 - 140 1138, 1146, 1154, 1162, 1170, 1178, 1186, 1194, 1202, 1210, // 141 - 150 1258, 1286, 1334, 1372, 1410, 1458, 1466, 1474, 1482, 1490, // 151 - 160 1499, 1508, 1517, 1526, 1535, 1545, 1555, 1565, 1575, 1585, // 161 - 170 1596, 1607, 1618, 1629, 1640] // 171 - 175}and Arch Bishop Trans looks like thisArch_Bishop_Trans: { Inherit: ("Arch_Bishop")}means you know what to do right ? EDIT: so it seems like the hp/sp increase for trans job is calculated in the source code ... yeah https://github.com/HerculesWS/Hercules/blob/master/src/map/status.c#L2182
  14. read the wiki http://herc.ws/wiki/Timers_(Scripting)#Use_Number_3:_Deny_Usage Holy ... I need to rewrite them ok that page is outdated, forget that I ever post them
  15. I found that our plugin format keep changing, never consistent newer plugin cannot use on old hercules, and old plugin cannot use on new hercules hercules.h added on this commit, https://github.com/HerculesWS/Hercules/commit/51b7adcf4e5b2a347081ec9a6903102c4909a404 means ... if want to make that plugin compatible with your server, has to put all those GET_SYMBOL stuffs ... honestly without GET_SYMBOL is much better ...
  16. yup, currently look like this now #include "common/hercules.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include "map/pc.h" #include "map/clif.h" #include "map/party.h" #include "common/nullpo.h" #include "common/socket.h" #include "common/memmgr.h" #include "common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time) HPExport struct hplugin_info pinfo = { "test123", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "0.0", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; struct player_data { int buff; }; int status_change_start_post( int retVal, struct block_list *src, struct block_list *bl, enum sc_type *type, int *rate, int *val1, int *val2, int *val3, int *val4, int *tick, int *flag) { if ( bl->type == BL_PC && retVal > 0 ) { TBL_PC *sd = BL_CAST(BL_PC, bl); struct party_data *p; if ( p = party->search(sd->status.party_id )) { struct player_data *ssd = getFromMSD( sd, 0 ); int before_buff = ssd->buff; if ( *type == SC_BLESSING ) ssd->buff |= 0x1; if ( *type == SC_INC_AGI ) ssd->buff |= 0x2; if ( *type == SC_PROTECTWEAPON || *type == SC_PROTECTSHIELD || *type == SC_PROTECTARMOR || *type == SC_PROTECTHELM ) if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] ) ssd->buff |= 0x4; if ( *type == SC_SOULLINK ) ssd->buff |= 0x8; if ( *type == SC_DEVOTION ) ssd->buff |= 0x10; if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status clif->party_info( p, NULL ); } } return retVal; } int status_change_end_post( int retVal, struct block_list *bl, enum sc_type *type, int *tid, const char *file, int *line ) { if ( bl->type == BL_PC && retVal > 0 ) { TBL_PC *sd = BL_CAST(BL_PC, bl); struct party_data *p; if ( sd->state.active == 1 ) { // fix map-server crash when player logout if (( p = party->search(sd->status.party_id ))) { struct player_data *ssd = getFromMSD( sd, 0 ); int before_buff = ssd->buff; if ( *type == SC_BLESSING ) ssd->buff &= ~0x1; if ( *type == SC_INC_AGI ) ssd->buff &= ~0x2; if ( *type == SC_PROTECTWEAPON || *type == SC_PROTECTSHIELD || *type == SC_PROTECTARMOR || *type == SC_PROTECTHELM ) if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] ) ssd->buff &= ~0x4; if ( *type == SC_SOULLINK ) ssd->buff &= ~0x8; if ( *type == SC_DEVOTION ) ssd->buff &= ~0x10; if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status clif->party_info( p, NULL ); } } } return retVal; } void clif_party_info_overload( struct party_data* p, struct map_session_data *sd ) { unsigned char buf[2+2+NAME_LENGTH+(4+NAME_LENGTH+MAP_NAME_LENGTH_EXT+1+1)*MAX_PARTY]; struct map_session_data* party_sd = NULL; int i, c; nullpo_retv(p); WBUFW(buf,0) = 0xfb; memcpy( WBUFP(buf,4), p->party.name, NAME_LENGTH ); for ( i = 0, c = 0; i < MAX_PARTY; i++ ) { struct party_member* m = &p->party.member[i]; if(!m->account_id) continue; if(party_sd == NULL) party_sd = p->data[i].sd; WBUFL(buf,28+c*46) = m->account_id; if ( m->online && p->data[i].sd != NULL ) { struct player_data *ssd = getFromMSD( p->data[i].sd, 0 ); char temp[NAME_LENGTH]; safesnprintf( temp, NAME_LENGTH, "[%s%s%s%s%s]%s", ( ssd->buff & 0x1 )? "B" : "_", ( ssd->buff & 0x2 )? "A" : "_", ( ssd->buff & 0x4 )? "F" : "_", ( ssd->buff & 0x8 )? "S" : "_", ( ssd->buff & 0x10 )? "+" : "_", m->name ); memcpy(WBUFP(buf,28+c*46+4), temp, NAME_LENGTH); } else memcpy(WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH); mapindex->getmapname_ext(mapindex_id2name(m->map), (char*)WBUFP(buf,28+c*46+28)); WBUFB(buf,28+c*46+44) = (m->leader) ? 0 : 1; WBUFB(buf,28+c*46+45) = (m->online) ? 0 : 1; c++; } WBUFW(buf,2) = 28+c*46; if (sd) clif->send(buf, WBUFW(buf,2), &sd->bl, SELF); else if (party_sd) clif->send(buf, WBUFW(buf,2), &party_sd->bl, PARTY); return; } bool pc_authok_pre( struct map_session_data *sd, int *login_id2, time_t *expiration_time, int *group_id, struct mmo_charstatus *st, bool *changing_mapservers ) { struct player_data *ssd; CREATE( ssd, struct player_data, true ); ssd->buff = 0; addToMSD( sd, ssd, 0, true ); return 0; } int map_quit_post( int retVal, struct map_session_data *sd ) { struct player_data *ssd = getFromMSD( sd, 0 ); removeFromMSD( sd, 0 ); return retVal; } HPExport void plugin_init (void) { addHookPre( "pc->authok", pc_authok_pre ); addHookPost( "map->quit", map_quit_post ); clif->party_info = &clif_party_info_overload; addHookPost( "status->change_start", status_change_start_post ); addHookPost( "status->change_end_", status_change_end_post ); } there is a bug, when the player JUST login for the 1st time in that party ( party just loaded ) your name will appear twice in the party window but will disappear when apply a buff ... or another party member login and, when apply a buff, it really does show the [b____] for the party member name I guess, have to do something like @showbuff atcommand, to make this bug disappear it also has the advantage to show it or not to show it ... and this is harder to do than I thought try continue tomorrow, I have to sleep now =.=
  17. #include "common/hercules.h"#include <stdio.h>#include <string.h>#include <stdlib.h>#include "map/pc.h"#include "map/clif.h"#include "map/party.h"#include "common/nullpo.h"#include "common/socket.h"#include "common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time)HPExport struct hplugin_info pinfo = { "test123", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "0.0", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated)};struct player_data { int buff;};int status_change_start_post( int retVal, struct block_list *src, struct block_list *bl, enum sc_type *type, int *rate, int *val1, int *val2, int *val3, int *val4, int *tick, int *flag) { if ( bl->type == BL_PC && retVal > 0 ) { ShowDebug( "PC" ); if ( *type == SC_BLESSING ) ShowDebug( "Yes" ); } return retVal;} void clif_party_info_pre(struct party_data* p, struct map_session_data *sd) { unsigned char buf[2+2+NAME_LENGTH+(4+NAME_LENGTH+MAP_NAME_LENGTH_EXT+1+1)*MAX_PARTY]; struct map_session_data* party_sd = NULL; int i, c; char aaa[NAME_LENGTH]; nullpo_retv(p); WBUFW(buf,0) = 0xfb; memcpy(WBUFP(buf,4), p->party.name, NAME_LENGTH); for (i = 0, c = 0; i < MAX_PARTY; i++) { struct party_member* m = &p->party.member[i]; if(!m->account_id) continue; if(party_sd == NULL) party_sd = p->data[i].sd; WBUFL(buf,28+c*46) = m->account_id; safesnprintf( aaa, NAME_LENGTH, "[ASDF]%s", m->name ); memcpy(WBUFP(buf,28+c*46+4), aaa, NAME_LENGTH); mapindex->getmapname_ext(mapindex_id2name(m->map), (char*)WBUFP(buf,28+c*46+28)); WBUFB(buf,28+c*46+44) = (m->leader) ? 0 : 1; WBUFB(buf,28+c*46+45) = (m->online) ? 0 : 1; c++; } WBUFW(buf,2) = 28+c*46; if(sd) clif->send(buf, WBUFW(buf,2), &sd->bl, SELF); else if (party_sd) clif->send(buf, WBUFW(buf,2), &party_sd->bl, PARTY); hookStop(); return;} HPExport void plugin_init (void) { addHookPre( "clif->party_info", clif_party_info_pre ); addHookPost( "status->change_start", status_change_start_post );}@@cumbe11is it normal to show [ASDF]<name> in the chat log like this ? EDIT: @@Garr I thought about that, but Dastgir said just have to put clif_party_info function in status_change_start and status_change_end, and it will update itself
  18. [Warning]: pc_authok: AnnieRuru (AID:2000000) logged in with unknown group id (100)! kicking...nope, the server kick me{ Id: 501 AegisName: "Red_Potion" Name: "Red Potion" Type: 0 Buy: 50 Weight: 70 Trade: { override: 99 nodrop: true notrade: true } Script: <" itemheal rand(45,65),0; ">},weird, I tested my GM99 can drop and trade items, but normal player can't
  19. ok, let's analyze the packet clif_party_member_info /// Adds new member to a party. /// 0104 <account id>.L <role>.L <x>.W <y>.W <state>.B <party name>.24B <char name>.24B <map name>.16B (ZC_ADD_MEMBER_TO_GROUP) 23 characters for name, 23 characters for map name hmm ... if we replace the map name with buff ... hehe ... sounds fun clif_party_info /// Sends party information (ZC_GROUP_LIST). /// 00fb <packet len>.W <party name>.24B { <account id>.L <nick>.24B <map name>.16B <role>.B <state>.B }* /// role: /// 0 = leader /// 1 = normal /// state: /// 0 = connected /// 1 = disconnected clif_party_xy /// Updates the position of a party member on the minimap (ZC_NOTIFY_POSITION_TO_GROUPM). /// 0107 <account id>.L <x>.W <y>.W clif_party_hp /// Updates HP bar of a party member. /// 0106 <account id>.L <hp>.W <max hp>.W (ZC_NOTIFY_HP_TO_GROUPM) so ... there is no packet to update the party member's status in Alt+Z bar clif_parse_LeaveParty /// Request to leave party (CZ_REQ_LEAVE_GROUP). clif_parse_RemovePartyMember /// Request to expel a party member (CZ_REQ_EXPEL_GROUP_MEMBER). the one trick that I can think off, is sending a packet to leave player's party and invite back with a fake name but I wonder doing this will have message on the chat log ? ... hmm ... ask a client translation team, maybe they know where is the english file at
  20. @@Vlync now I'm very very interested, show meh ! EDIT: even a video is fine, I can guess how they did it
  21. this kind of topic always show up time to time ... http://herc.ws/board/topic/6817- http://herc.ws/board/topic/7933- btw they are up back
  22. even if this is possible, there is a client restriction which disallow to display player name longer than 23 characters ... and the color has to be client reverse engineer ... means, no, this also has to do client side modification but if not display in the Alt+Z, but with a message command then this can even done with scripting alone, with getstatus script command - script jsfkjsdf FAKE_NPC,{OnInit: bindatcmd "psc", strnpcinfo(0)+"::Onaaa"; end;Onaaa: .@pid = getcharid(1); if ( !.@pid ) { dispbottom "you don't have a party to use this command"; end; } getpartymember .@pid, 1; getpartymember .@pid, 2; .@origin = getcharid(3); for ( .@i = 0; .@i < $@partymembercount; ++.@i ) { if ( isloggedin( $@partymemberaid[.@i] , $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; .@buff$ = ""; if ( getstatus(SC_BLESSING) ) .@buff$ += "B"; if ( getstatus(SC_INC_AGI) ) .@buff$ += "A"; if ( getstatus(SC_PROTECTWEAPON) && getstatus(SC_PROTECTSHIELD) && getstatus(SC_PROTECTARMOR) && getstatus(SC_PROTECTHELM) ) .@buff$ += "F"; if ( getstatus(SC_SOULLINK) ) .@buff$ += "S"; if ( getstatus(SC_DEVOTION) ) .@buff$ += "+"; .@display$[.@c++] = "["+ .@buff$ +"] "+ strcharinfo(0); } } attachrid .@origin; for ( .@i = 0; .@i < .@c; ++.@i ) dispbottom .@display$[.@i]; end;}
  23. in rathena, emergency recall behave like that I think ? even some member here actually requested for this skill to behave like rathena did http://herc.ws/board/topic/11228-emergency-call-relog/
  24. AnnieRuru

    Area NoWarp

    the simplest way for doing this is just modify the (warp) command ACMD(mapmove) {... if( sd->bl.m == m && sd->bl.x => 100 && sd->bl.x =< 150 && sd->bl.y => 100 && sd->bl.y =< 150 ) { clif->message(fd, "You can't warp from this area"); return false; } if( !strcmp(map_name,"prontera") && x => 100 && x =< 150 && y => 100 && y =< 150 ) { clif->message(fd, "You can't warp to this area"); return false; }didn't test
  25. from the video and screenshot, that is depend on item slot I found this very very long time ago on eathena forum https://www.eathena.ws/board/index.php?showtopic=244678 I never see anyone actually reverse engineer to show different color name without modify the slot
×
×
  • Create New...

Important Information

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