From 195dffc20af1fb32c7e4119988911b72955aeabc Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@54d463be-8e91-2dee-dedb-b68131a5f0ec> Date: Thu, 4 Nov 2004 23:25:09 +0000 Subject: git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@2 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Dev/Dev-Folder-Notes.txt | 3 + Dev/TODO.txt | 684 +++++++++++++++++++++++++++++++++++++++++++++++ Dev/TODO_MOB_AI.txt | 134 ++++++++++ Dev/bugs.txt | 51 ++++ Dev/forSQLdev.txt | 146 ++++++++++ Dev/quotes.txt | 148 ++++++++++ Dev/resnametable.TXT | 64 +++++ 7 files changed, 1230 insertions(+) create mode 100644 Dev/Dev-Folder-Notes.txt create mode 100644 Dev/TODO.txt create mode 100644 Dev/TODO_MOB_AI.txt create mode 100644 Dev/bugs.txt create mode 100644 Dev/forSQLdev.txt create mode 100644 Dev/quotes.txt create mode 100644 Dev/resnametable.TXT (limited to 'Dev') diff --git a/Dev/Dev-Folder-Notes.txt b/Dev/Dev-Folder-Notes.txt new file mode 100644 index 000000000..ded4eb5e4 --- /dev/null +++ b/Dev/Dev-Folder-Notes.txt @@ -0,0 +1,3 @@ +- This folder and all files inside it must be deleted before any distribution +- This folder is meant for developers only +- Use this folder to contain notes, todo, testcases, problems, etc diff --git a/Dev/TODO.txt b/Dev/TODO.txt new file mode 100644 index 000000000..c43eddaf8 --- /dev/null +++ b/Dev/TODO.txt @@ -0,0 +1,684 @@ +The format of to-do list items is: + +Description - A description of the task +Status - The status of the task. The possible values are Pending and Completed +Assignee - The nickname of the person whom is assigned the task +Notes - Miscellaneous notes concerning the task + +********** + +Only the to-do list for the flat-file module should contain tasks concerning database corrections because databases changes for the SQL module are inherited from the flat-file module. + +********** +1. +Description: Fix the equip field values in item_db + +Status: Pending + +Assignee: NONE + +Notes: i know the equip values in item_db are ****ed not ****ed but supernovice equip is + + +********** +2. +Description: Change monster summoning commands so they summon 1 monster if a quantity isn't specified + +Status: 50% + +Assignee: NONE + +Notes: Will work with just mob_id/name specified (ie @monster poring) + need to make it work with mob_id and name (ie @monster poring test) - Valaris + + +********** +3. +Description: Fix Ghostring Card + +Status: Done + +Assignee: MouseJstr + +Notes: battle_config flag to disable ghosty armor + protecting you from mobs + +********** +4. +Description: Add nomagic mapflag/@skilloff/@skillon + +Status: Done + +Assignee: MouseJstr + +Notes: NONE + + +********** +5. +Description: Checking help.txt (main directory, conf directory, doc directory) with atcommand.c + +Status: Pending + +Assignee: None + +Notes: In doc directory, do a help.txt for explaination of all commands. + In conf directory, do a help.txt for displaying the resume of each command in chat windows of the client + (chat windows does support more than 200 lines). + In main directory, suggestion to delete it. + + +********** +6. +Description: Update produce_db + +Status: Pending + +Assignee: None + +Notes: The Alchemist Forging items were recently changed. The DB needs to be edited and if needed, source to be modified + + +********** +7. +Description: novice.txt: new_1-4.gat,60,149,4 script Helper 55 + This NPC gives infinite items and zenys. + +Status: Completed + +Assignee: Yor + +Notes: If you clicks on 'cancel' button or quits the game to come back, you can have infinite zenys and items. + So, we must save (in a variable) when the npc gives items/zenys and don't given them again. + + +********** +8. +Description: scripts, register variables and job 1 + When you become job 1, reset all variables of OTHER jobs too to save register memory. + +Status: Pending + +Assignee: None + +Notes: None + + +********** +9. +Description: @mapspy command + +Status: Pending + +Assignee: None + +Notes: to receive any messages of all characters on a specifical map. + don't send duplicate messages if already @guildspy ou @partyspy + + +********** +10. +Description: Pet Skills. + +Status: 90% + +Assignee: Valaris + +Notes: Don't touch pet.c, pet.h, or pet dbs. + + +********** +11. +Description: Add kRO server side friends list. + +Status: 80% + +Assignee: davidsiaw + +Notes: Got most of the packets. Except the ones that tell the client that a player is online and tell the client to give messages. + + +********** +12. +Description: Updating the 'gmcommands.html' with actual commands. + +Status: Pending + +Assignee: None + +Notes: NONE + + +********** +13. +Description: On PVP map, don't count a 'GM HIDE' GM (2 normal players + 1 HIDE GM: 2/2, not 3/3). + +Status: Pending + +Assignee: None + +Notes: NONE + + +********** +14. +Description: Add encrypted password option in login-server. + +Status: Blocked, no solution without limited client version. + +Assignee: Yor + +Notes: It's impossible to use encrypted password in the account file, if we want to authorise all client version. + Some clients use a (random) md5key and send a composed encrypted of the password. + So, these clients send a different encrypted password based on plain text password at every connection. + If the password is encrypted, we can not more compare with plain text. + The other solution can be to not authorise these clients. But, that will probably be the futur of ALL clients. + Reduce possibilities of client version isn't a good idea for the futur and for the compatibility (like use only plain text password client version). + Save in account the plain text and the encypted version use more memory for nothing, and don't add security. + Conclusion: + If you want protected your password, you must: + - protected you account file + - never send a password outside the server + - use only encypted client version (that send an encrypted password to server). + + +********** +15. +Description: Create all reloaddb command in ladmin. + +Status: Affected + +Assignee: Yor + +Notes: NONE + + +********** +16. +Description: Create a shutdown + time command in ladmin. + +Status: Affected + +Assignee: Yor + +Notes: NONE + + +********** +17. +Description: Create a kickall command in ladmin. + +Status: Affected + +Assignee: Yor + +Notes: NONE + + +********** +18. +Description: Create listban/listok command in ladmin. + +Status: Completed + +Assignee: Yor + +Notes: NONE + + +********** +19. +Description: Login-server: create a first anti-hack system versus multiple connections trying. + +Status: Affected + +Assignee: Yor + +Notes: Set on IP. + An option to set number of connections before to block (number_of_try_before_block) + An option to set number of second where the tries must be done (within_seconds_for tries) + An option to set the time of impossible connection after block (blocked_time_in_minutes) + About wrong password, add: + dynamic_pass_failure_ban_time: 5 (duration of ban, in minutes) + dynamic_pass_failure_ban_how_many: 3 (number of tries before to ban) + dynamic_pass_failure_ban_how_long: 60 (inside time where the tries must be done before to ban, in sec) + + +********** +20. +Description: Create @unban and @unblock GM command. + +Status: Completed + +Assignee: Yor + +Notes: NONE + + +********** +21. +Description: Fix @nuke GM command. + +Status: Completed + +Assignee: Valaris + +Notes: If you nuke a mounted Knight/Crusader they lose Peco but see it in the equip.window. + And can't get another one. + + +********** +22. +Description: Adding GM command @guildmaster + +Status: Pending + +Assignee: MC_Cameri + +Notes: Guild Master turns another member of his guild into Guild Master. + MC Cameri: It will now be called @swapgm, meaning swap of guild master. + + +********** +23. +Description: In Guilds folder change all checkcart -> checkcart(0) + +Status: Completed? + +Assignee: Aria + +Notes: All checkcart were in the old/ folder o_O? + Because just "checkcart" always returns 0. (All common Kafras&breeder have been already fixed) + + +********** +24. +Description: In script.c parser should be fixed to allow argumentless functions return value. + +Status: Pending + +Assignee: None + +Notes: Functions like "checkcart", "checkfalcon", "checkriding" don't return value if used without agruments or without "()". + Example: 'checkcart' always return Zero (because the parser doesn't recognize it as a function!) + Example: 'checkcart()' map server doesn't load (because argless funcs aren't in use) + As a temp fix Lupus added "*" in script.c in "checkcart", "checkfalcon", "checkriding" definitions. + To be able running them with any fake arg. i.e. checkcart(0) works fine! + + +********** +25. +Description: Create a LAN management, 1 by server + +Status: Affected + +Assignee: Yor + +Notes: 1 computer can be on multiple LAN. So, each server must have 1 LAN definition. + + +********** +26. +Description: @ban/@block must be usable when player is offline + +Status: Completed + +Assignee: Yor + +Notes: NONE + + +********** +27. +Description: When it's night, inscreasing spawn of undeads + +Status: Pending + +Assignee: None + +Notes: Variable 'night_flag' is 0 if it's day, or 1 if it's night. + + +********** +28. +Description: in ladmin, create a method for account with spaces + +Status: Completed + +Assignee: Yor + +Notes: use "" or ''. + + +********** +29. +Description: @(un)ban/@(un)block: reduction of number of packets + improvement of messages + +Status: Completed + +Assignee: Yor + +Notes: None. + + +********** +30. +Description: Create (un)ban/(un)block in ladmin to be similar with GM command + +Status: Completed + +Assignee: Yor + +Notes: None. + + +********** +31. +Description: Packet 0x3831 need too much size! IMPORTANT to found a solution! + It's cause of crashes or freeze of servers (char or map). + +Status: Pending + +Assignee: None + +Notes: When map-server do a connection to char-server, this packet is send (C->M). Example of display (1 connection!): + socket #5: + wdata (size: 131072 bytes) need to be expanded. + wdata is actually used for 111654 bytes (free bytes: 19418). + packet 0x3831 need mode space (size of the packet: 12332). + wdata expanded to 262144 bytes. + socket #5: + wdata (size: 262144 bytes) need to be expanded. + wdata is actually used for 234974 bytes (free bytes: 27170). + packet 0x3831 need mode space (size of the packet: 12332). + wdata expanded to 524288 bytes. + Additional note: there is only 63 guilds on this server... + + +********** +32. +Description: Management of PM ignore for wisps + +Status: Completed + +Assignee: Yor + +Notes: None. + + +********** +33. +Description: Add a GM info hacker minimum level parameter + +Status: Completed + +Assignee: Yor + +Notes: first use: spoof namer + + +********** +34. +Description: Create @makepet to create directly a pet + +Status: Pending + +Assignee: None + +Notes: NONE + + +********** +35. +Description: In dungeon, set night for people. In shop, set day for people. + +Status: Assigned + +Assignee: Yor + +Notes: work like variable 'night_flag' is 0 if it's day, or 1 if it's night. + + +********** +36 +Description: Create your limited time.... but an option can be good :)... + +Status: Completed + +Assignee: Yor + +Notes: NONE + +********** +37. +Description: @killer - enables a @gm to hit a player outside of pvp + +Status: Done + +Assignee: MouseJstr + +Notes: + +********** +38. +Description: atcommand scripts - script @atcommands` + +Status: Pending + +Assignee: MouseJstr + +Notes: + +********** +40. +Description: @addwarp - create a static warp to a target location + +Status: Done + +Assignee: MouseJstr + +Notes: +********** +41. +Description: @movenpc + - manipulate npc's at runtime + +Status: Done + +Assignee: MouseJstr + +Notes: handling npc's with the same name on multiple maps + requires thoughts +********** +42. +Description: @uptime - how long as the server been up? + +Status: Pending + +Assignee: MouseJstr, MC Cameri + +Notes: + MC Cameri: This is done already in OA, wait for merge. + Aria: I said that, but they told me it was BROKED! +********** +43. +Description: map aliases - + create virtual copies of maps but don't require + changes to the client to support it + +Status: 80% done + +Assignee: MouseJstr + +Notes +********** +44. +Description: Fix GTB card + +Status: Done + +Assignee: MouseJstr + +Notes: battle_config command that controls just how magic resistant + you raelly are +********** +45. +Description: gm @follow command + +Status: Done + +Assignee: MouseJstr + +Notes: follows players, including warping to them... lets you do + a gm hide and grab a cup of coffee while watching a player + do bad things.. +********** +47. +Description: different max aspd for players and GM's + +Status: Pending + +Assignee: MouseJstr + +Notes: +********** +48. +Description: Configurable max num castles for a guild + +Status: Done + +Assignee: MouseJstr + +Notes: We limit each guild to 3 castles on my server +********* +49 +Description: Add @chareffect - Done [MouseJstr] + set a persistant effect on another character + Add @chardisguise - done [MouseJstr] + set a persistant disguise effect on another character + Add @mobid + look up a monster by name - needed? + Add @petid + look up a pet by name + Add @chardye + Add @charhairstyle + Add @charhaircolor + Versions of dye hairstyle and haircolor fo other chars + Add @followme + make a character follow you.. including warps + Add @shuffle + re-arrange everybody on the map randomly + Add @dropall - done [MouseJstr] + takes all my possessions and throws them on the ground + Add @chardropall - done [MouseJstr] + takes all the players possessions and throws them on the ground.. + Add @storeall - done [MouseJstr] + takes all my possessions and puts them in storage, leaving 500 zeny to let you take it all back out again + Add @charstoreall - done [MouseJstr] + takes all the players possessions and puts them in storage, leaving 500 zeny to let you take it all back out again + Add @skillid - lookup a skill by name - done [MouseJstr + Add @useskill - use a skill given the number or name - done [MouseJstr] +********* +50. +Description: New Guild Skills + +Status: Pending + +Assignee: NONE + +Notes: use http://forums.emperium.org/viewtopic.php?t=43245 for a list +******** +51. +Description: Devilring + +Status: Pending + +Assignee: NONE + +Notes: New mini-boss; find as much about it as possible including stats and drops +********* +52. +Description: LV4 Weapon Quests + +Status: Pending + +Assignee: NONE + +Notes: Info here http://forums.emperium.org/viewtopic.php?t=39934 Use perm variables? +********* +53. +Description: Monster Pictures + +Status: Pending + +Assignee: NONE + +Notes: WTF! http://forums.emperium.org/viewtopic.php?t=32998 +********* +54. +Description: Wandering Singer + +Status: Pending + +Assignee: NONE + +Notes: May have to spy on kRO to get more info. http://forums.emperium.org/viewtopic.php?t=32998 +******** +55. +Description: Arena Points + +Status: Pending + +Assignee: NONE + +Notes: points->item system; http://forums.emperium.org/viewtopic.php?t=32998 +******** +56. +Description: kRO Account + +Status: Pending + +Assignee: NONE + +Notes: Give us a kRO account, gm or whatever so we can spy =OOOOOOOO +********* +57. +Description: Baby Skills + +Stats: Pending + +Assignee: NONE + +Notes: 1. Skills + - Come here, baby. + ( Summons the adoptee ) + - Mom, Dad, I love you. + ( For 5 minutes, the parent characters will not have EXP penalty upon death ) + - Mom, Dad, I want to see you. + ( Summons the parents ) + * For the summon skill, it works like wedding summon skill - it can only be done in areas where warps can be saved at. + + 2. EXP Sharing + - Only the parents and the child can EXP share; nobody else can be in the party. If any other person joins, the EXP share resets. + - If you move to a different map, the EXP share resets. + - The EXP returned is only 1/3rd of normal since both mother and father character has to be in the same party with the child. + + 3. Changes after adoption + - For the child character, the character becomes small. + + 4. What happens if parents divorce + - The parents can NEVER adopt another child ever again even after divorce + remarry. + - The character child continues to be as it is (meaning, even if the child no longer has a parent, he or she will continue to be the 'child'), and only 1 child can be obtained per character. + - Even if the child character is deleted, the parents can never get another child. + * This means, when you adopt a child character, DO IT CAREFULLY. For the entire history of your character, you can only, and I mean ONLY get one child character. + + - The Child Adoption system now changes as following, so please make note of this: + * The adopted child cannot raise any stat to beyond 80. + * The adopted child will have 70% of MaxHP and MaxSP of normal characters. + * The adopted child cannot marry. + * "Mom, Dad, I love you" skill will only last 2 minutes instead of 5. + * The parents must be both LV 70 or above in order to adopt. + * The parents must be both LV 70 or above in order to share EXP as family. + * "Mom, Dad, I love you" skill will now take 10% of MaxSP instead of taking 1 SP. + - The wedding skills will now depend on percentage of MaxHP/MaxSP. \ No newline at end of file diff --git a/Dev/TODO_MOB_AI.txt b/Dev/TODO_MOB_AI.txt new file mode 100644 index 000000000..3ea2bc0e2 --- /dev/null +++ b/Dev/TODO_MOB_AI.txt @@ -0,0 +1,134 @@ +// eAthena TODO for Monster AI +// ----------------------------------------- +// The idea of this file is to write a system to use for mob AI because +// to put it bluntly, our mobs are stupid. If we can pull off some sweet +// AI, we will own the other emulators. +// +// What we have here are 2 columns. I describe them below... +// - 'mode' : Mode is when the monster can attack, like, can it move? can it +// attack first? can it assist other monsters? +// +// - 'AI' : AI is the smart part of the monster. This is how the monster +// will actully go about attacking something. For example we +// could make archer skeletons fire an arrow or 2, then flee +// and fire a few more arrows. Or we could have them avoid other +// classes with range (archers, mages). We could also have mobs +// run when being sniped off cliffs by archers/mages (wont they +// hate that, but in reality, thats what they would do). +// +// The mode flags will be given an ID to the power of 2, (binary style, like +// job id's in the item_db) and added together to make the mode. But before +// the system can be written we need a nice file to explain it. That would be +// this file. So add away, when it looks done, begin the implementation. +// +// Also, if possible, new config file in /conf/. 'mob_ai_athena.conf'. This is +// where mob AI is enabled/disable. And options can be set to allow and dis- +// allow certin modes. Ex: People like the AI, but dont like one options, can +// simply disable THAT AI feature rather then rewriting mob_db to remove it. +// +// I wrote the first modes, C devs, move them around as you see fit for programming. +// +// -Ancyker +// +// (check bottom for more AI ideas) +// + + +'mode' +Immobile - Monster can not move, can not be moved (like by archers knockback skills) +Agressive - Monster can attack first (doesn't mean it will, decided in 'AI') +Detect cast - Monster will detect if someone is casting on it, and attack back +Assist - Monster will help other monsters (what monsters it will assist is decided in 'AI') +Looter - Monster will loot items (if 'Agressive' flag is set, it will attack before looting) +No Target Change - Monster will not start attacking another target until the first target is dead or out of range +Passive - Monster will not attack back (ever, unless 'Agressive' flag is also set?) +Detects Hidden - Monster can see hidden players + +'ai' +NoAI - Doesn't do anything (plants) +NoSnipe - Monster will run away if being 'sniped' from a clif by archer, mage, etc. +AttackFlee - Monster will attack, then flee, attack, then flee, etc (Archer Skels, run away, shoot arrow, etc) +AttackRange1 - Will only attack if player is in a set range [0-3] (It's like the player is close, its a threat now) +AttackRange2 - Will only attack if player is in a set range [4-6] +ClassFlee1 - Will run from any player with range (archers, mages, thiefs with bows) +NoviceNoFlee - Will not run if a player is a novice +LevelFlee - Wlll run if player is of a higher level (porings would run from level 99s, AHH DONT KILL ME!) +AvoidPlayer - Will run if it sees any player (So it cancels 'Agressive' flag) +AttackMostDamage - Will attack the player doing the overall most damage +AttackLessDamage - Will attack the player doing the overall least damage +AttackLowestLevel - Will attack the lowest level first +AttackHighestLevel - Will attack the highest level first +WarpLowHP - Will warp if HP is low (how low is low?) +NeverStop - Monster will always be on the move, never stop walking. (Is over-ridden by 'Immobile' flag) + + +// +// Again, more stuff... +// +// The monster spawns sripts need some more params. some examples... +// +// We have: map,x,y,offsetx,offsety, ... +// What if we added more? To only let the monster move so far off from +// where it was spawned. It could 'guard' an arena, an exit/enterance +// an npc, whatever =). +// +// .... ID,time,time,blah...,mode,WAP +// Have monsters walk a certin path. Waypoint files are your friend. +// If a monster has a WAP (optional) it will walk this path. +// Guardians on patrol? Could be interesting. +// +// Add more if you think of any =) +// +// If you don't like an idea, comment why, dont remove it. +// example: (using this one cuz not sure about it) +// +// // NeverStop - Will/Could cause lag, don't think its a good idea -name +// NeverStop - ... +// + +Lupus: (guys, rearrange my ideas or move them as u want) +Some memory - speed optimizations: + +There'a big "for cycle" when u look up for a place to mob spawn. +It could be made quite fast: +On server .GAT loading you should make an array with OFFSETS (not even X,Y) of right +places for future mob spawns. +If the waypoints aren't found for the loadied map then you should make at least 1-2 waypoints automatically. + +About AI: +EACH map has defined mobs. Your mob should have a flag "healer", "supporter" etc. "weak", "ranged attacker" +and each map should contain an attached list of mobs with their types +when one MVP is hurt it'd look for "helpers", "healers". +And if a mob is almost 0 HP it should look for helpers or look for other mobs ranged attackers +defence. Etc. + +Mobs AI should be WRITTEN IN SPECIAL SCRIPTS. +Some default mobs will use the same script. +And some advanced ones will use their own. + +MOB-scripts are quite interesting. (remember Robot-Wars game?) + +Gulid Wars: +I think guardians should be able to warp from room to room using WARPS like common Players. + + +Aria's Ideas: (do whatever u want) + +We can make aggressive monsters make ambushes, where one attacks and runs away to a huge group of the same monster + +instead of dropping 2 x1 items, just drop 1 x2 item + +make AI vary inside of a group of monsters (IE 1/2 porings do 1 thing, and the other half do another) + +aggressive monsters sould surround enemies, not just blindly attack them + +we should also make monsters look as player-like as possible. There should be groups traveling together, or 2 monsters +next to eachother, chatting. + +we shouldn't let mobs spawn right infront of people, like in anime or manga. they always walk towards you, or you walk +towards them. + +let mob stats vary a little bit - every mob shouldn't be the exact same. if it's stronger it gives more exp, and vice +versa. + +have a monster be able to use its drops, and not drop it. like a poring using an apple. \ No newline at end of file diff --git a/Dev/bugs.txt b/Dev/bugs.txt new file mode 100644 index 000000000..d18dce310 --- /dev/null +++ b/Dev/bugs.txt @@ -0,0 +1,51 @@ +Problem: Adding the new guild skills causes it to crash? +Assigned: N/A +Progess: 0% + +Problem: 2-2-1 classes are regarded as Novicies by the game server. NPCs aren't taking them as thier jobs but if you the the NPC to do something for a novice class it works with the 2-2-1 like renters. Also if some one becomes high novice, if they use jobra they can become first jobs like a swordsman. +Assigned: N/A +Progess: 0% + +Problem: Stats nor skills don't downgrade when your level gets reverted due to exp loss. +Assigned: N/A +Progess: 0% + +Problem: You can hit yourself with your own spider web. +Assigned: N/A +Progess: 0% + +Problem: Pre skill requirements for new skills are wrong it makes you use 49 skills points before you can get the newer skills. +Assigned: N/A +Progess: 0% + +Problem: Monster hp view only shows but does not go down with a hit. +Assigned: N/A +Progess: 0% + +Problem: Monsters always freeze, when hit they don't move but 2 mins later they move. +Assigned: N/A +Progess: 0% + +Problem: Mobs don't attack +Assigned: N/A +Progess: 0% + +Problem: When u spawn ~300 mobs (and more or less) then do @killmonster then some mobs freeze on the screen (have no names, don't move, etc) +Assigned: N/A +Progess: 0% + +Problem: With 1025 client, some NPC sprites look different (i.e. Black Jack's NPC sprite) +Assigned: N/A +Progess: 0% + +Problem: On any crash - servers don't free their ports. It doesn't let reload the same servers faster. +Assigned: N/A +Progess: 0% + +Problem: Thiefs can steal ZENY / items from TREASURE chests!!baaaah!! and Guardians! +Assigned: N/A +Progess: 0% + +Problem: Joker card 4139 lets anyone to steal money / zeny. Just like he's a thief. It shoul;d be revised - success rates lowered and "steal item" disabled +Assigned: N/A +Progess: 0% diff --git a/Dev/forSQLdev.txt b/Dev/forSQLdev.txt new file mode 100644 index 000000000..c54c531a6 --- /dev/null +++ b/Dev/forSQLdev.txt @@ -0,0 +1,146 @@ +// $Id: forSQLdev.txt,v 1.1 2004/09/19 09:18:32 Akaru Exp $ + +This file is to informe SQL dev about all modifications on TXT version. + +When a modification is done, TXT dev try to add it here with some explanations. +When a modification is added in SQL version, SQL dev remove it from this file. + + +********* 9th september +------------------------------------ +changed: + sd->newauth (map.h/clif.c) by sd->packet_ver (look all function where was newauth) + value become // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 30aug04 (by [Yor]) + instead of // 0: old 0x72 (19 b), 3: new 0x72 7july04 (22 b), 20: new 0x72 13july04 (39 b), 0: old 0x7E (6 b - not for auth), 27: new 0x7E 26july04 (33 b), 31: new 0x7E 30aug04 (37 b) (by [Yor]) + note: local variable 'newauth' not changed in clif_parse_WantToConnection + +------------------------------------ +Added + if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 30aug04 (by [Yor]) + clif_displaymessage(sd->fd, "This client version (of 26 jul 2004) is not actually supported by this server."); + } else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 30aug04 (by [Yor]) + clif_displaymessage(sd->fd, "This client version (of 30 august 2004) is not actually supported by this server."); + } +at end of 'pc_authok' function (pc.c) + +------------------------------------ +Changed + in 'atcommand_effect' function, set the correct message in back of: + clif_displaymessage(fd, msg_table[229]); // Your effect has changed. + +------------------------------------ +Changed + in 'atcommand_servertime' function, replace permanent message by msg_table and put them in msg_athena.conf + +------------------------------------ +Changed to reduce (a little) lag + in char.c, commented printf about auth: + case 0x2afc: + if (RFIFOREST(fd) < 22) + return 0; + //printf("auth_fifo search: account: %d, char: %d, secure: %08x-%08x\n", RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14)); + for(i = 0; i < AUTH_FIFO_SIZE; i++) { + - + case 0x2b02: + if (RFIFOREST(fd) < 18) + return 0; + if (auth_fifo_pos >= AUTH_FIFO_SIZE) + auth_fifo_pos = 0; + //printf("auth_fifo set (auth #%d) - account: %d, secure: %08x-%08x\n", auth_fifo_pos, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); + auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd,2); + - + case 0x2b05: + if (RFIFOREST(fd) < 49) + return 0; + if (auth_fifo_pos >= AUTH_FIFO_SIZE) + auth_fifo_pos = 0; + WFIFOW(fd,0) = 0x2b06; + memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 42); + //printf("auth_fifo set (auth#%d) - account: %d, secure: 0x%08x-0x%08x\n", auth_fifo_pos, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); + auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd,2); + - + in case 0x66: // ƒLƒƒƒ‰‘I‘ð + if (auth_fifo_pos >= AUTH_FIFO_SIZE) + auth_fifo_pos = 0; + //printf("auth_fifo set #%d - account %d, char: %d, secure: %08x-%08x\n", auth_fifo_pos, sd->account_id, char_dat[sd->found_char[ch]].char_id, sd->login_id1, sd->login_id2); + auth_fifo[auth_fifo_pos].account_id = sd->account_id; + - + commented printf about searching map server (in 'search_mapserver' function) + +------------------------------------ +Improved At_command about monsters spawn (atcommand_spawn and atcommand_monster): + modified message 39: + //39: All monster summoned! + Added message 240: + //240: %d monster(s) summoned! + Added variables (output, j and k): + char output[200]; + int i, j, k; + memset(output, '\0', sizeof(output)); + Changed loop to check at least 8 times (to try to spawn in closed area): + count = 0; + for (i = 0; i < number; i++) { + j = 0; + k = 0; + while(j++ < 8 && k == 0) { // try 8 times to spawn the monster (needed for close area) + if (x <= 0) + mx = sd->bl.x + (rand() % 11 - 5); + else + mx = x; + if (y <= 0) + my = sd->bl.y + (rand() % 11 - 5); + else + my = y; + k = mob_once_spawn((struct map_session_data*)sd, "this", mx, my, name, mob_id, 1, ""); + } + count += (k != 0) ? 1 : 0; + } + Changed last message display (to add number != count): + if (count != 0) + if (number == count) + clif_displaymessage(fd, msg_table[39]); // All monster summoned! + else { + sprintf(output, msg_table[240], count); // %d monster(s) summoned! + clif_displaymessage(fd, output); + } + else { + +********* 10th september +------------------------------------ +Correction of an error in char.c in 'char_config_read' function: + replace 'wisp_server_name' by 'w2' in the test of the lenght: + } else if (strcmpi(w1, "wisp_server_name") == 0) { + if (strlen(w2) >= 4) { + memcpy(wisp_server_name, w2, sizeof(wisp_server_name)); + wisp_server_name[sizeof(wisp_server_name) - 1] = '\0'; + } + +------------------------------------ +Added a better id control of monster id in @spawn/@monster... GM commands: + added in mob.h: + int mobdb_checkid(const int id); + Added in mob.c: + /*========================================== + * Id Mob is checked. + *------------------------------------------ + */ + int mobdb_checkid(const int id) { + if (id <= 0 || id >= (sizeof(mob_db) / sizeof(mob_db[0])) || mob_db[id].name[0] == '\0') + return 0; + + return id; + } + Changed in at_command.c ('atcommand_monster' and 'atcommand_spawn' functions) (only second line is modified): + if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number) + mob_id = atoi(monster); + by: + if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number) + mob_id = mobdb_checkid(atoi(monster)); + +********* 11th september +------------------------------------ +Changed @effect from level 60 to level 40. + +------------------------------------ +Added 3 new commands: @charitemlist, @charstoragelist, @charcarlist + modified file: atcommand.c/h, atcommand_athena.conf, all help.txt, and gmcommands.html diff --git a/Dev/quotes.txt b/Dev/quotes.txt new file mode 100644 index 000000000..463e7df9c --- /dev/null +++ b/Dev/quotes.txt @@ -0,0 +1,148 @@ +ADD UR QUOTES HERE FOR DEV EDITION NPCS! +Remember to add map, coords, and sprite number! + +NEW 10-21-04! +Add Biography areas +-Real name +-Age +-Where u live +-What u do here +-Why ur here +-and ur own small self intro. + +Completed people: MC Cameri, Aria, david, mouse + + +Also put some coords so that u walk around +//************************************\\ + +davidsiaw +- put me in payon next to kawaii no kafra with npc sprite no. 1002 +- [davidsiaw] +- Wud are you looking at? +- baka... +- next; +- [davidsiaw] +- *drops 100 Mjolnirs on the floor +- There ya go ;) + +Aria +prontera.gat,156,179,4 script Aria 805,{ +151,175-OMGWTFBBQ +152,182-So its u -> 0 +... That did not look right +158,177-OMGITSJEEBUS!#!@%! +164,176-Evera died. I guess. +147,176-I CLICK THE BUTTON AND THEY DON'T DIE! +155,172-RO? wtf? +Oh yeah. +165,171-omgnoob. DIE! +157,176-WooT! +[@Aria] is that why u bought windows +[@Aria] cuz bill has red hair +bio +Okay, I'm Evera's brother, Aria <- small sentence self-intro +^FF00FFAge^000000: 13 years <-age +^FF00FFWhat I do^000000: Graphics and NPCs <-wtf u do +^FF00FFWhy I'm here^000000: Cuz eAthena ROX <-y + +Anyway, here. I get to talk about myself now <-ur own bio +I'm from California, and I wub MMORPGS +So yeah that's it. GO EA! + +Shinigami +-imma n00b +-lol +-:P +-Shinigami stabs Azndragon +-there you go bitches +-watashi wa Shinigami desu +-huh?, wtf? + +Lord +-Me + ebil = bad me + ebil + power = omg .... +<@Wishy> me + you = you get owns +<@Lord> Me + Revenge = You Got owned +<@Wishy> Me > You +<@Lord> No i own you in bed :3 +<@Wishy> ... + +Codemaster +"Everything begins with Nu and everything ends with Nu. +This is the truth! This is my belief... at least for now." + - Mysteries of Life Volume 184. Chapter 26. + +MouseJstr + +"The only difference between a hurricane and skydiving is +which direction the tree's come at you from.." + +"Wanna be a GM? Write me a C routine that reverses a string + in place.." + +"Wanna be a GM? Write me a C routine that finds me the highest + bit set in a network order 32 bit integer..." + +"I am the dark angel of eAthena.. withen weeks of my arrival, + almost everybody was gone or dead.. fear me..." + +Lupus, I demand you rewrite yours.. + +MC Cameri +morroc.gat,160,97,4 script MC Cameri 706,{ +-I'm the @command guy from oa... +-Can't tell you my name. +-16 years +-Dominican Republic, in the caribbean. +-Mostly work on @commands for GMs... +-Because I like programming... +-I'm a senior student, programmer, body builder(yes, I lift weights), etc. +160,95-I owns you all, under my commands. *lol* +162,95-I forgot what my script, what do I have to say again? *_*U +164,95-¿Donde estoy? *wonders* (<-- Means, where am I?) +164,97-Are you guys my friends? +164,99-My mom told me not to talk to strangers. *stares* +162,99-How can you be SO ugly!? +160,99-I need a friend to play with =(. *sobs* +160,97-I've been kicking this rock for as long as I can remember. +160,95-My computer just broke, and I don't know how to format. *sobs* + +Darkchild + +// Place me Next to Valaris (ELSE I DO IT MYSELF :P) +- I think Aria Has A Lot To Do +- The Darkness Within +- Watch Out For Trucks, They Tend To Drive You Down +- Who Am I? Really? Shure! +- GAH! +- Everyone Lubs Me! (I Hope!) +- I Lub Everyone! + As Long As They Are Female + Hot.... + Goodlooking + Big Boobs + Nice Ass + And Workship Me! +- Wannabe GM? Host Your Own Server +- kRO is €20 A Month! Sick Bastards! + +Biography: + mes "Okay, So I'm Darkchild......."; + mes "^FF00FFAge^000000: 17 years"; + mes "^FF00FFWhat I do^000000: Writing Biography"; + mes "^FF00FFWhy I'm here^000000: I Have NO Idea"; + next; + mes "Ehm Well..... Whats There To Say About Me.......?"; + mes "I Dunno.... As Long As You Love Me........."; + mes "Well Okay, A Lil Bit Then:"; + mes "I'm From The Netherlands And Doing Some Wacko Collega Atm"; + mes "More? WTF? YOU WANT MORE? GO BLOW URSELF!"; + next; +// let it do an npc event on Valaris + +// His Npc Event: + npctalk "DARKCHILD, DON'T YOU SHOUT AT POOR LIL N00BIEZ!!!"; + +// Back 2 Me :P + npctalk "Sorry Valaris"; + npctalk "(He Is Da Man!)"; diff --git a/Dev/resnametable.TXT b/Dev/resnametable.TXT new file mode 100644 index 000000000..411bf6cd0 --- /dev/null +++ b/Dev/resnametable.TXT @@ -0,0 +1,64 @@ +Resnametable reading problem, testcases and description +by Akaru +------------------------------------------------------------------ +EDITED Resnametable, add at the end: +aaa.gnd#valkyrie.gnd# +aaa.gat#valkyrie.gat# +aaa.rsw#valkyrie.rsw# +À¯ÀúÀÎÅÍÆäÀ̽º\map\aaa.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\valkyrie.bmp# + +At map_athena.conf, add: +map: aaa.gat + +Case 1: +In data.grf there's the base resnametable without reference of aaa.gat +In sdata.grf there's no resnametable +In data folder there's an edited resnametable with aaa.gat reference +Results: Athena gives aaa.gat not found error +What this proves: Athena doesn't even use the values in the datafolder resnametable + +Case 2: +In data.grf there's the base resnametable without reference of aaa.gat +In sdata.grf there's the edited resnametable aaa.gat reference +In data folder there's an edited resnametable with aaa.gat reference +Results: Athena loads aaa.gat +What this proves: Athena only checks for the existance of the datafolder resnametable, but uses value from sdata.grf resnametable + +Case 3: +In data.grf there's the base resnametable without reference of aaa.gat +In sdata.grf there's the edited resnametable aaa.gat reference +In data folder there's no resnametable +BEFORE MY CHANGE: Athena exits, "data/resnametable.txt not found" +AFTER MY CHANGE: Athena loads aaa.gat +What this proves: Athena do not need the datafolder resnametable at all and it still runs from the resnametable in the GRFs + +Case 4: +In data.grf there's no resnametable +In sdata.grf there's no resnametable +In data folder there's no resnametable +BEFORE MY CHANGE: Athena exits, "data/resnametable.txt not found" +AFTER MY CHANGE: Athena exits, "data/resnametable.txt not found" + +How it is now: +- It searches for the datafolder resnametable: + - If it exist, it continues but only use the resnametable from the GRF + - If it does not exist, + - If resnametable isn't found in data.grf/sdata.grf/adata.grf, it errors "resnametable not found" and exits + - If resnametable is found in data.grf/sdata.grf/adata.grf, it errors "resnametable not found" and exits + +What is should do: +- Check if data_folder in grf-files is enabled: + - If it is, search for the datafolder resnametable: + - If it exist: + - If resnametable isn't found in data.grf/sdata.grf/adata.grf, it continues and uses this resnametable + - If resnametable is found in data.grf/sdata.grf/adata.grf, it continues and overwrites the GRF resnametable with this one from the datafolder + - If it does not exist: + - If resnametable isn't found in data.grf/sdata.grf/adata.grf, it errors "resnametable not found" and exits + - If resnametable is found in data.grf/sdata.grf/adata.grf, it continues and use the GRF resnametable + - If it isn't, then: + - If resnametable isn't found in data.grf/sdata.grf/adata.grf, it errors "resnametable not found" and exits + - If resnametable is found in data.grf/sdata.grf/adata.grf, it continues and use the GRF resnametable + +------------------------------------------------------------------ +Fixes, comments, discussions, etc goes below here: +------------------------------------------------------------------ \ No newline at end of file -- cgit v1.2.3-70-g09d2