Jump to content

Hadeszeus

Members
  • Content Count

    651
  • Joined

  • Last visited

  • Days Won

    1

Reputation Activity

  1. Upvote
    Hadeszeus reacted to AnnieRuru in Instance System   
    I been supporting scripting question on both forums so I can compare
     
    rathena instance system is indeed easier to write
     
    both also can create new maps ...
    rathena is easier to do this ... they have instance_db.txt to make everything simple
     
    but hercules one can attach the map to the guild ... which allows for new ideas
    IOT_GUILD
    allows for whole new ideas ... like guild dungeon, guild castle ... etc etc
    for this, rathena can't even do this, because they default to party based, forcing the player to form a party
     
    2nd thing about rathena is they removed the instace_set_timeout
    which is kinda an outrages move
    it should be configure in npc scripting so I can make a map for the time limit to be rent dynamically
    eg : rathena time limit is configured at instance_db.txt,
    where as hercules can use instance_set_timeout script command to change the time to the *input script command
  2. Upvote
    Hadeszeus reacted to AnnieRuru in Suddenly missed AnnieRuru   
    just wondering ... how many people actually miss me ? XD
  3. Upvote
    Hadeszeus reacted to Dastgir in Windows 8 Problem of 2014 client?   
    either the user is having modified client or added a hook for empty mac.havent experiencing log out on windows 8, maybe its connection spike from your vps?
  4. Upvote
    Hadeszeus reacted to Mystery in July Digest 2014   
    July Digest 2014
    The following digest covers the month of July 1st - July 31st 2014.
     

    Development Highlights
    [*]Update rAthena-main-upgrade.sql (f5de504) [*]Update rAthena-logs-upgrade.sql (9a36b78) [*]Fixed some skill checks considering Super Novices the same as Novices (92a249) [*]Updated SR_FLASHCOMBO behaviour (17e414) [*]Mado Behaviour Changes (da190e0) [*]Corrected list of skills that can be used while using mado [*]Corrected list of supportive skills that can't be cast in users with mado [*]Fixed *setmadogear behaviour, it would set mado to any character
    [*]Updated warg skill check (cc4c87c) [*]Updated SQL-UPGRADE files (ef8700d) [*]Organized SQL-TOOLS (3213a3b) [*]SQL Reorganization (3ecf877) [*]Corrected some SC behaviour (9dd6ee) [*]Corrected compile errors in case DB_ENABLE_STATS is defined (222345) [*]Fixed an issue in the 'Invalid client hash' console message (8a1ad06) [*]Fixed issue with [AT]mount, it wasn't displaying the expected message (ec5117) [*]Fixed issue with mounts and jobchange, ranger and mechanic mounts (1eee0f) [*]Extracted method to obtain SYSTEM_INFO from functions in sysinfo.c (7cd967) [*]Minor script core fixes (2bbde24)
    [*]Removed useless calls in script.c, Removed nullpo calls in script.c, scripts shouldn't crash the server [*]Added checks in several functions in order to prevent possible crashes [*]*resetstatus, *resetskill, *skillpointcount, *changesex, *successremovecards, *failedremovecards, *getequipcardid, *skilleffect, *atcommand, *cardscnt, *equip, *useatcmd [*]Corrected *specialeffect2 behaviour, when no player was attached and another player name was supplied it would stop script execution instead of displaying the effect
    [*]Removed redundant data from guardian_data, saving up to 40 bytes per guardian (10240 bytes total) (d1d99a9) [*]Added support to show children of struct/union in Debug Help plugin (74c804) [*]Added sysinfo support to Debug Help plugin (23d696) [*]Fixed issue that when players used [at]fakename when disguised (1e492e3)


     
    Scripting Highlights
    [*]Removed duplicate code from the Cool Event NPCs (5955d8) [*]Moved common code to a function [*]Modified to use appropriate functions from function_kafras.txt [*]Modernized syntax/updated function documentation in both files [*]Fixed the Rachel NPC incorrectly stating it's warping you to Rachel, instead of Veins



     
    Documentation Highlights
    [*]Added documentation regarding hard coded constants (a10dd560)

     
    July Statistics
    [*]During the period there were 47 Commits. [*]Of these 47 commits, 11 included bug-fixes. [*]5 Commits from Pull Requests  [*]In this month, there were 1,929 Additions and 1,905 Deletions.

  5. Upvote
    Hadeszeus reacted to Angelmelody in About 1 Per Mac IP except vending or @AT   
    try the new one , after tested, it works for me- script Only1perMAC -1,{OnPCLoginEvent: if (getgmlevel() >= 99) end; if (query_sql("SELECT `char`.`name` FROM `char` LEFT JOIN login ON `char`.account_id=login.account_id WHERE login.last_mac=(SELECT last_mac FROM login WHERE account_id="+getcharid(3)+") AND `char`.online=1 AND `char`.char_id!="+getcharid(0), .@name$) >= 1) { for (set .@i,0; .@i<getarraysize(.@name$); set .@i,.@i+1) { if (!checkvending(.@name$[.@i])) set .@samemac, .@samemac +1; } if (.@samemac >= 1) { announce "Sorry, only 1 account per computer can be logged in at a time.", bc_self; sleep2 1000; atcommand "@kick "+strcharinfo(0); } } end;}
  6. Upvote
    Hadeszeus reacted to Mumbles in About 1 Per Mac IP except vending or @AT   
    Here's my own version, using temporary global vars for to allow for other uses of these MAC addresses (assuming you know what to do with them).
     
    - script dual_check -1,{ /*----------------------------------------------------- Determine MAC address [Harmony] -----------------------------------------------------*/ function getmacaddress { query_sql "SELECT `last_mac` FROM `login` WHERE `account_id` = '"+ getcharid(3) +"'", .@mac_address$; return .@mac_address$; } /*----------------------------------------------------- Log MAC address to array -----------------------------------------------------*/ OnPCLoginEvent: // Log MAC address .@user_mac$ = getmacaddress(); // Loop through all map exceptions (if enabled) for (.@i = 0; .@i < getarraysize(.allow_map$) && .map_exceptions; .@i++) { // Determine if player's map is excepted if (strcharinfo(3) == .allow_map$[.@i]) { // Bypass flag .@bypass = 1; break; } } // Loop through entire MAC address list if no bypass flag for (.@i = 0; .@i < getarraysize($@mac_list$) && !.@bypass; .@i++) { // Determine if user's MAC address is already logged if (.@user_mac$ == $@mac_list$[.@i]) { // Jail user for dual-clienting atcommand "@jailfor "+ .jail_time$ +" "+ strcharinfo(0); // Message delay sleep2 100; // Error message message strcharinfo(0), "Dual-clienting is not allowed."; break; } } // Add user's MAC address to log $@mac_list$[getarraysize($@mac_list$)] = .@user_mac$; end; /*----------------------------------------------------- Remove single MAC address entry -----------------------------------------------------*/ OnPCLogoutEvent: // Log MAC address .@user_mac$ = getmacaddress(); // Loop through entire MAC address list for (.@i = 0; .@i < getarraysize($@mac_list$); .@i++) { // Find matching MAC address if (.@user_mac$ == $@mac_list$[.@i]) { // Delete single entry deletearray $@mac_list$[.@i], 1; } } end; /*----------------------------------------------------- Configuration -----------------------------------------------------*/ OnInit: // Jail for 10 years .jail_time$ = "10y"; // Allow map exceptions? 1: yes, 0: no .map_exceptions = 1; // Map exceptions setarray .allow_map$[0], "poring_w01", "poring_w02"; end;}
  7. Upvote
    Hadeszeus reacted to Angelmelody in Rental item problem with cards   
    try this
    --- a/src/map/pc.c +++ b/src/map/pc.c @@ -496,6 +496,25 @@ void pc_rental_expire(struct map_session_data *sd, int i) { } clif->rental_expired(sd->fd, i, sd->status.inventory[i].nameid); + + { // expiration return card + int s,flag =0; + for (s = 0; s < MAX_SLOTS; s++) { + if( itemdb->exists(sd->status.inventory[i].card[s]) != NULL ){ + struct item card_it; + memset(&card_it,0,sizeof(card_it)); + card_it.nameid=sd->status.inventory[i].card[s]; + card_it.identify=itemdb->isidentified(card_it.nameid); + if ((flag = pc->additem(sd, &card_it, 1 ,LOG_TYPE_NONE))) + { + clif->additem(sd, 0, 0, flag); + storage->additem(sd,&card_it,1); + + } + } + } + } + pc->delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_OTHER); } void pc_inventory_rentals(struct map_session_data *sd)
  8. Upvote
    Hadeszeus reacted to jaBote in @unmute player on specific map onLogoutEvent   
    Yes, you can be creative ending it.
     
    According to source:
    /*========================================== * @unmute [Valaris] *------------------------------------------*/ACMD(unmute) { struct map_session_data *pl_sd = NULL; if (!message || !*message) { clif->message(fd, msg_txt(1234)); // Please enter a player name (usage: @unmute <char name>). return false; } if ( (pl_sd = map->nick2sd((char *)message)) == NULL ) { clif->message(fd, msg_txt(3)); // Character not found. return false; } if(!pl_sd->sc.data[SC_NOCHAT]) { clif->message(sd->fd,msg_txt(1235)); // Player is not muted. return false; } pl_sd->status.manner = 0; status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER); clif->message(sd->fd,msg_txt(1236)); // Player unmuted. return true;}  
    Since I suppose you already know your character is logged in and muted you can skip all the checks and go directly to what you want. Try this instead?
    OnPCLogoutEvent: if (strcharinfo(3) == "guild_vs1" ) { Manner = 0; // sc_end SC_NOCHAT; // Edit, not needed as of the documentation says? } end;  
    EDIT: You've also got some nice advice on the scripting documentation regarding that on our scripting documentation :
     
      I've just commented out the SC_NOCHAT line. If that doesn't work just edit the script and try with that uncommented again   P.S.: You sure you didn't get any warning or so from the console when trying to atcommand? O.o
  9. Upvote
    Hadeszeus reacted to kyeme in Masquerade Skill Chance   
    Latest Rev na ba gamit mo? Na fix na sya..
    Nareport ko na to noong March 25, pero hindi ko pa na try kung ok na..

    http://herc.ws/board/tracker/issue-8122-sc-groomy-sc-weakness-and-sc-ignorance/
  10. Upvote
    Hadeszeus reacted to malufett in [elements]   
    example...
     
    Archer                VS                 Neutral Monster
    Arrow                    --------->      100% damage
    Fire Arrow             --------->      100% damage
    Crystal Arrow        --------->      100% damage
    Arrow of Wind       --------->      100% damage
    Stone Arrow          --------->      100% damage
    Poison Arrow        --------->       100% damage
    Silver Arrow          --------->       100% damage
    Immaterial Arrow   --------->       70% damage
     
     
    Archer   VS Ghost Monster(lv1)
    Arrow   --------->       70% damage
    Fire Arrow --------->   100% damage
    Crystal Arrow   --------->   100% damage
    Arrow of Wind --------->   100% damage
    Stone Arrow   --------->   100% damage
    Poison Arrow   ---------> 100% damage
    Silver Arrow   ---------> 100% damage
    Immaterial Arrow ---------> 125% damage
     
    for more reference : http://ro.doddlercon.com/wiki/index.php?title=Renewal_Changes#Element_Table
     

  11. Upvote
    Hadeszeus reacted to jaBote in Need someone to confirm this problem   
    Rental items are supposed to be standalone equipments, this is why you're experiencing these issues.
     
    Just look at what your inventory table is (or another table that manages items, actually):
    CREATE TABLE IF NOT EXISTS `inventory` ( `id` int(11) unsigned NOT NULL auto_increment, `char_id` int(11) unsigned NOT NULL default '0', `nameid` int(11) unsigned NOT NULL default '0', `amount` int(11) unsigned NOT NULL default '0', `equip` int(11) unsigned NOT NULL default '0', `identify` smallint(6) NOT NULL default '0', `refine` tinyint(3) unsigned NOT NULL default '0', `attribute` tinyint(4) unsigned NOT NULL default '0', `card0` smallint(11) NOT NULL default '0', `card1` smallint(11) NOT NULL default '0', `card2` smallint(11) NOT NULL default '0', `card3` smallint(11) NOT NULL default '0', `expire_time` int(11) unsigned NOT NULL default '0', `favorite` tinyint(3) unsigned NOT NULL default '0', `bound` tinyint(1) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `char_id` (`char_id`)) ENGINE=MyISAM;  
    nameid is the item ID# of that particular item and expire_time is the time at which the item expires. So, if you compound a card onto an item, all the entry information for the card is deleted and the equipment info is updated with the card inserted on its correct slot, making the expire_time of the card nowhere to be found, thus rendering it permanent.
     
    A polite guess (not sure) is that if you rent slotted equipment and insert permanent cards on it, they should be lost once the rental time expires .
     
    P.S.: This is not a script concern, moving to General support section .
  12. Upvote
    Hadeszeus reacted to Dastgir in Mission Board updated by Annie   
    in rA, strcmp:
    *strcmp("<string>","<string>")This command compares two strings are returns a value: 1: string 1 > string 2 0: strings are equal -1: string 1 < string 2 and in the script, it checks for 0, so we can directly compare .
    and about getserverdef, we have it other way round, we directly define constant : https://github.com/HerculesWS/Hercules/commit/950e3ebcdbbde96b090fa681ce88ecf4069f2f64 (Implemented in this commit)
  13. Upvote
    Hadeszeus reacted to quesoph in How to disable kagero and obaro here?   
    //===== Hercules Script ======================================//= Job Master//===== By: ==================================================//= Euphy//===== Current Version: =====================================//= 1.3//===== Description: =========================================//= A fully functional job changer.//===== Additional Comments: =================================//= 1.1 Fixed reset on Baby job change. [Euphy]//= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. [Euphy]//= 1.3 Kagerou/Oboro added. [Euphy]//============================================================prontera,153,193,6  script  Job Master  2_F_MAGICMASTER,{function Job_Menu; function A_An;  mes "[Job Master]";  if (Class > 4049) {    mes "No more jobs are available.";    close;  }  if (checkfalcon() || checkcart() || checkriding() || ismounting()) {    mes "Please remove your "+((checkfalcon())?"falcon":"")+((checkcart())?"cart":"")+((checkriding())?"Peco":"")+((ismounting())?"mount":"")+" before proceeding.";    close;  }  if (.SkillPointCheck && SkillPoint) {    mes "Please use all your skill points before proceeding.";    close;  }  set .@eac, eaclass();  set .@i, ((.ThirdClass)?roclass(.@eac&EAJ_UPPERMASK):Class);  if (.@i > 6 && .@i < 22) {    if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) {      set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .Rebirth[1]-JobLevel;      mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue.";      close;    }    if (Class > 21) {      mes "Switch to third class?";      next;      Job_Menu(roclass(.@eac|EAJL_THIRD));      close;    }    while(1) {      mes "Select an option.";      next;      set .@i, select(" ~ ^0055FFRebirth^000000:"+((.ThirdClass)?" ~ ^FF0000Third Class^000000":"")+": ~ ^777777Cancel^000000");      if (.@i==3) close;      mes "[Job Master]";      mes "Are you sure?";      next;      Job_Menu(((.@i==1)?4001:roclass(.@eac|EAJL_THIRD)));      mes "[Job Master]";    }  }  set .@j1, roclass(.@eac|EAJL_2_1); set .@j2,roclass(.@eac|EAJL_2_2);  if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) setarray .@exp[0],roclass(.@eac|EAJL_THIRD),99;//  if (Class == Job_Ninja) setarray .@exp[0],.@j1,70;  if (.@exp[0] && .ThirdClass) {    if (BaseLevel < .Rebirth[0] || JobLevel < .@exp[1]) {      set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .@exp[1]-JobLevel;      mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue.";      close;    }    mes "Switch to "+jobname(.@exp[0])+"?";    next;    Job_Menu(.@exp[0]);    close;  }  if (.@eac&EAJL_2)    if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) {      mes "No more jobs are available.";      close;    }  if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) {    if (JobLevel < .JobReq[0])      mes "A job level of "+.JobReq[0]+" is required to change into the 1st Class.";    else if (Class == 4001 && .LastJob && lastJob) {      mes "Switch classes now?";      next;      Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER));    } else switch(Class) {      case 0: Job_Menu(1,2,3,4,5,6,23,4046,24,25,4023);      case 4001: Job_Menu(4002,4003,4004,4005,4006,4007);      case 4023: Job_Menu(4024,4025,4026,4027,4028,4029,4045);      default: mes "An error has occurred."; break;    }    close;  }  if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1)    mes "No more jobs are available.";  else if (!(.@eac&EAJL_2) && JobLevel < .JobReq[1])    mes "A job level of "+.JobReq[1]+" is required to change into the 2nd Class.";  else if (.LastJob && lastJob && (.@eac&EAJL_UPPER)) {    mes "Switch classes now?";    next;    Job_Menu(lastJob+4001);  } else    Job_Menu(.@j1,.@j2);  close;function Job_Menu {  while(1) {    if (getargcount() > 1) {      mes "Select a job.";      set .@menu$,"";      for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)        set .@menu$, .@menu$+" ~ "+jobname(getarg(.@i))+":";      set .@menu$, .@menu$+" ~ ^777777Cancel^000000";      next;      set .@i, getarg(select(.@menu$)-1,0);      if (!.@i) close;      if ((.@i == 23 || .@i == 4045) && BaseLevel < .SNovice) {        mes "[Job Master]";        mes "A base level of "+.SNovice+" is required to turn into a "+jobname(.@i)+".";        close;      }      mes "[Job Master]";      mes "Are you sure?";      next;    } else      set .@i, getarg(0);    if (select(" ~ Change into ^0055FF"+jobname(.@i)+"^000000 class: ~ ^777777"+((getargcount() > 1)?"Go back":"Cancel")+"^000000") == 1) {      mes "[Job Master]";      mes "You are now "+A_An(jobname(.@i))+"!";      if (.@i==4001 && .LastJob) set lastJob, Class;      jobchange .@i;      if (.@i==4001 || .@i==4023) resetlvl(1);      specialeffect2 338; specialeffect2 432;      if (.Platinum) callsub Get_Platinum;      close;    }    if (getargcount() == 1) return;    mes "[Job Master]";  }  end;}function A_An {  setarray .@A$[0],"a","e","i","o","u";  set .@B$, "_"+getarg(0);  for(set .@i,0; .@i<5; set .@i,.@i+1)    if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);  return "a "+getarg(0);}Get_Platinum:  skill 142,1,0;  switch(BaseClass) {    case 0: if (Class !=23) skill 143,1,0; break;    case 1: skill 144,1,0; skill 145,1,0; skill 146,1,0; break;    case 2: skill 157,1,0; break;    case 3: skill 147,1,0; skill 148,1,0; break;    case 4: skill 156,1,0; break;    case 5: skill 153,1,0; skill 154,1,0; skill 155,1,0; break;    case 6: skill 149,1,0; skill 150,1,0; skill 151,1,0; skill 152,1,0; break;    default: break;  }  switch(BaseJob) {    case 7: skill 1001,1,0; break;    case 8: skill 1014,1,0; break;    case 9: skill 1006,1,0; break;    case 10: skill 1012,1,0; skill 1013,1,0; break;    case 11: skill 1009,1,0; break;    case 12: skill 1003,1,0; skill 1004,1,0; break;    case 14: skill 1002,1,0; break;    case 15: skill 1015,1,0; skill 1016,1,0; break;    case 16: skill 1007,1,0; skill 1008,1,0; skill 1017,1,0; skill 1018,1,0; skill 1019,1,0; break;    case 17: skill 1005,1,0; break;    case 18: skill 238,1,0; break;    case 19: skill 1010,1,0; break;    case 20: skill 1011,1,0; break;    default: break;  }  return;OnInit:  setarray .Rebirth[0],99,50;  // Minimum base level, job level to rebirth OR change to third class  setarray .JobReq[0],10,40;  // Minimum job level to turn into 1st class, 2nd class  set .ThirdClass,1;    // Enable third classes? (1: yes / 0: no)  set .SNovice,45;    // Minimum base level to turn into Super Novice  set .LastJob,1;      // Enforce linear class changes? (1: yes / 0: no)  set .SkillPointCheck,1;    // Force player to use up all skill points? (1: yes / 0: no)  set .Platinum,1;    // Get platinum skills automatically? (1: yes / 0: no)  end;}
  14. Upvote
    Hadeszeus reacted to ぽろり in Where to find Full Throttle files?   
    data/texture/유저인터페이스/item/all_full_throttle data/sprite/아이템/all_full_throttle.spr data/sprite/아이템/all_full_throttle.act
  15. Upvote
    Hadeszeus reacted to Dastgir in Is it possible to downgrade my CLIENT 2yrs back?   
    You can use 2012 client with 2014 data.grf(Its yet, 2 years newer, so you can use it..) but you can't use 2014 Client with 2012 data.grf(Since, its 2 years old GRF)
     
     
    About using 2014 Clients: Its good until your players are updating, (or if they have some common error like replay interface, cart error, you can include those in your GRF), so it would work fine with Small Client Too..
  16. Upvote
    Hadeszeus reacted to malufett in How to Nerf this Formula?   
    make a ratio or only get a portion of the HP/SP something like this
     
    int hp = (status_get_max_hp(src) * 40 / 100) * (10 + 2 * skill_lv) / 100, // get only 40% of total max HP sp = (status_get_max_sp(src) * 40 / 100) * (6 + skill_lv) / 100; // get only 40% of total max SP  its a renewal feature added for some skill where char's current level affects the over all damage formula of a skill..example of its use is when a char is low level and using a skill with lvl mod skill formula is penalized but if your level is equal to it or more than to the level requirements the char will gain bonus damage...  
  17. Upvote
    Hadeszeus reacted to jaBote in HELP: How to see MAP CRASH error in linux?   
    Try launching both login and char servers by separate this way. Assuming you're on your Hercules folder:
    ./login-server && ./char-server  
    And launch map server so that all output is saved to a txt file:
    ./map-server > map_log.txt  
    All Map server output will now be saved to map_log.txt (you can specify the filename you want).
     
    Hope this helps.
  18. Upvote
    Hadeszeus reacted to evilpuncker in Less than 2GB Client Files?   
    remove rdata.grf and you are done
  19. Upvote
    Hadeszeus reacted to Angelmelody in get the CLASS name of killerrid OnPCDieEvent   
    attachrid(killerrid);
    set .@classname$, jobname( roclass( eaclass(class)));
  20. Upvote
    Hadeszeus reacted to jaBote in get the CLASS name of killerrid OnPCDieEvent   
    Or maybe:
    attachrid(killerrid);
    .@classname$ = jobname(Class);
     
    roclass and eaclass cancel each other, and the variable Class should start with uppercase as of scripting commands guide.
     
    @Topic Starter:
     
    Sources: jobname() script command documentation; character-based variable Class
  21. Upvote
    Hadeszeus got a reaction from kisuka in Hi. I need help.   
    FT is working fine in Hercules.
  22. Upvote
    Hadeszeus reacted to Dastgir in Can't fix this error please help   
    conf/battlegrounds.conf 
    You don't have that line(Red Underlined) in the arena's listed on map-server error.
  23. Upvote
    Hadeszeus reacted to KeyWorld in Web Grf Viewer   
    GRF Viewer
     


     
     
    Hi there !
     
    If you remember, in the past I released a buggy web grf viewer.
    It was slow, didn't work with big GRF because of memory issue, can't decode DES encryption, now time to present its new version.
     
    Basically this web tool allow you to select your own GRFs and display their contents directly in the browser. Nothing to download.
    As its name suggest, it can't write into the GRF, there are currently no API available (for security reason) to have write access to the user computer, so the only point of this tool is to display its content and search on it. There are no way to repack, add or modify files. Just view and extract files.
     
    This tool is built using only javascript, html5 and webgl, it is in my point of view a demonstration of what can be done in the web today with new technologies.
    It can view as thumbnail some sort of files : bmp, gif, jpeg, tga, spr, pal, and some tools are included to render models and maps or listening audio files.
     
    Two possibilities at the start up :
    Select a GRF (click on "select files", or drag drop your grfs in the box).
    Note: once the page quit or reloading you have to re-select the files, the browser do not remember them. Click on the data folder, in this case, it will show resources from my remote client.

     
    This tool is an application from roBrowser, it's using roBrowser's core. So if you ever find a bug, I'll be really happy to fix it !
     
    Note: it's possible the viewer stop rendering a directory content because it encounter a corrupted file in the GRF (wrong gzip encryption, or invalid file offset) or the file is encrypted.
     
    You can test this tool online here: http://www.robrowser.com/prototype/GRF-Viewer/
     
    Some preview:
     











     
    All feedback are welcome.
    Have fun~
  24. Upvote
    Hadeszeus reacted to Sanasol in Web Vending Database (Standalone and FluxCP Addon)   
    Note: actually I have not followed Hercules, so didnt knew   
     
    I will check new db stucture and will update asap
  25. Upvote
    Hadeszeus reacted to Patskie in Need this script applied to the party, not only the killer in the party   
    Replace : 
    for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) != .@map$ || checkidle() > 10 ) continue; if ( rand(4000) < 25 ) // .@rand_gc_drop ... 25/4000 = 1/160 getitem 512,1; if ( rand(2000) < 5 ) // .@rand_sc_drop .... 5/2000 = 1/400 getitem 513,1; if ( rand(1000) < 1 ) // .@rand_gc_drop .... 1/1000 getitem 511,1; }} by :
    for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) .c++;}for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) != .@map$ || checkidle() > 10 || .c < 2 ) continue; if ( rand(4000) < 25 ) // .@rand_gc_drop ... 25/4000 = 1/160 getitem 512,1; if ( rand(2000) < 5 ) // .@rand_sc_drop .... 5/2000 = 1/400 getitem 513,1; if ( rand(1000) < 1 ) // .@rand_gc_drop .... 1/1000 getitem 511,1; }}.c = 0;
×
×
  • Create New...

Important Information

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