----------------------- Logged out: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /index_title.php:2) in /login32.php on line 4 Notice: Use of undefined constant username - assumed 'username' in /login32.php on line 88 -----------------------
Phase 1.5.0 [chat] Implement chat delimiters Implement autolinked urls Implement `,:,/ Implement FunctionKeys, CtrlKeys Implement Emoticons (Ctrl+#?) Implement settings panel: Font/Sound/Music/Animation Implement chat commands Implement worldwide whois /whois /who [id/name] Implement user logout /quit /logout /q Implement user refresh rate /refresh [rate] Implement user description change /desc [description] Implement user password change /password newpw Implement server time /time Implement bug reporting /bug description Implement player reporting /report player [reason] Implement worldwide whispers [/tell-whisper-w name/id or /name/id] message Implement worldwide ignores /ignore /ig /i [name/id] Implement chat commands overlay /commands Implement command shortcuts overlay /shortcuts [map] Implement locality-specific chat and commands Implement locality-specific emote /me /m /e : Implement groupwide tells /gsay /gtell /g Implement submap-specific shouts /shout /yell /y [map item] Implement local info overlays Implement local objects overlay /look /examine Implement local character overlay /l /ex [id/name] Implement local npc overlay /l /ex [-id/name] Implement local item overlay /l /ex [name] Implement basic admin commands Implement worldwide broadcasts /broad message Implement player name change /renick [id/name] name [map] Implement admin map commands Implement tile change /floor to-type [from-x/y] [to-x/y] [on map z] Implement portal creation /port [image] to-XY,Z [from-xy,z] Implement toggleable spectator mode /spec /unspec [playerid/name]/[xy,z] Implement weather change /weather type Implement GM visibility /viz /invisible /visible Implement player targetting /goto player Implement player summoning /summon player Implement player location randomizing /send player [z] Implement player zone banishing /banish player [z] (one zone at a time?) [map item] Implement admin gifts Implement player health /heal [id/name] percent Implement player gifts /give [id/name] item /pay [id/name] amount Implement player godmode /god /ungod [id/name] Implement mass healing /healall percent Implement mass gift /giveall item /payall amount Implement mass godmode /godall /ungodall Implement player relocate /push [id] xy,z [map item] Implement admin penalties Implement login standstill /lockserver /unlockserver Implement server clear /kickall (except for gm) Implement player health /hurt [id/name] percent Implement player penalties /take /charge [id/name] item Implement player standstill /freeze /unfreeze [id/name] Implement player ban /ban /unban [ip/name/id] Implement player equipment removal /disarm player Implement player money removal /bankrupt player Implement player de-voice /mute player Implement admin item and mob commands Implement item creation /make type [xy,z] Implement mob creation /spawn type xy,z Implement item relocate /move id [xy,z] Implement mob relocate /place id xy,z Implement item copying /rep id [xy,z] Implement mob copying /clone id xy,z Implement item destruct /erase id Implement mob destruct /kill id [Chat area] Done?
[tinyint1]int[varchar32]text[timestamp]float tinyint1{Sleep Stack WalkableTile PortalTile BuildingTile NpcExist ItemExist Read NPCAgro NPCKill NPCRez NPCIntel TakeorGive} int8{Species Appear1 Appear2 Class Stre Inte Stam Agil Ailment HealPercent Money} int10-uns{HP MP Level} int11{PlayerID AccountID Zone Server XLoc YLoc ItemID ItemCount ItemType ItemVar TerrainType Stat NPCNum NPCPic AIType Pathway Checkpoint ConverseID ThreadID Cost HealPercent} varchar15{ip} varchar32{Name Zonename NPCname Subject ChoiceText} text{message ItemDesc ConverSay} timestamp{Last Made Sent} float-uns{EXP Weight Worth Percent} Magic: Stop/Start-Slow/Fast-Return/Exit-Good/Bad-Free/Call-Raise/Lower Know/Find/Fear/Confuse/Make/Be/Burn/Imbue/Protect/Adorn Advoco(call) Argentum(money) Bene(good) Bestia(animal) Carpe(stop) Cubile(home) Decoro(adorn) Deus(god) Extollo(raise) Ego(self) Fiat(make) Fontes(source) Grassor(hurt) Gens(species) Hesito(confuse) Hospes(target) Imbuo(imbue) Ignis(fire) Jugiter(fast) Jaculum(dart) Libero(free) Lux(light) Malum(bad) Materia(stuff) Nosco(know) Nunc(time) Origo(start) Orbis(earth) Patronus(prot) Penetalia(inside) Quaero(find) Quietus(sleep) Repeto(return) Rem(place) Summissus(lowr) Spiritu(spirit) Torpeo(slow) Taceo(silence) Ustulo(burn) Usus(skill) Verto(exit) Venenum(poison) Ymber(shower) Ymber(water) Stats: asleep (or sleep): The character is asleep cannot act during battle. If the character is struck, there is a chance that the he will wake up. Asleep status is not usually carried from battle to battle and expires at the battle end. blind: The character suffers a severe penalty to attack rolls. confused: The character is confused. The character cannot be controlled by the player during battle and will attack both friend and foe randomly when he takes an action. Confusion usually goes away at the end of battle. dead: The character is dead. Dead status can be inflicted instantly or is automatic when the hit points of a character reaches 0 or below. While dead, the character cannot perform any action until he is raised. frozen: The frozen status is identical to the petrified status (see below) except that it usually expires at the end of battle. petrified: The petrified status is similar to the death status except that it does not require the character's hit points to reach zero. It usually does not expire. It must be cured. poisoned: The poisoned status state inflicts a set amount of damage after the character acts in battle and sometimes every time he takes a step outside of battle. In some RPGs, poison status does not expire and must be cured. In others, it naturally expires at the end of battle. zombie: The character has become a zombie. The zombie status causes healing spells and items to cause damage when used on the character. Also, attempts at bringing the character back to life by normal means could cause instant death or significant damage. Often damage is lessened when a character has the zombie status. DW Magus: Top left corner will be 0,0 of the viewscreen. S.A.M.: ok DW Magus: Viewscreen (top, left, width, height) will be your (0, 0, viewscreen_X, viewscreen_y) DW Magus: At least to start or similar. DW Magus: What this means is that whenever the char will move left, you only need to add 1 to the left var, when they move down, you add 1 to the top var. DW Magus: Since your height and width (for the moment, but can be done dynamically) are static, then we know pretty much the 'range' of tiles on screen at any given time. DW Magus: This works really well when the map is larger than the viewscreen and not wrapping. DW Magus: So, we now need to take into account the fact it wraps. DW Magus: I'm going to use concrete numbers for ease of use right now. DW Magus: Simple numbers as well. DW Magus: MapWidth = 100; MapHeight = 100; ViewWidth = 10; ViewHeight = 10; ViewX = 0, ViewY = 0; DW Magus: When the player clicks right, we add 1 to ViewX, or ViewX++; DW Magus: Wait, erase last line. DW Magus: We retrieve all tiles from ViewX to ViewX + ViewWidth. DW Magus: We retrieve all tiles from ViewY to ViewY + ViewHeight. DW Magus: Nested loop there (at least in C). DW Magus: Row by row, column by column. DW Magus: Then, when the player clicks right, we add 1 to ViewX. DW Magus: The same fetching algorithm now retrieves tiles from 1 to 1 + 10 (11) and same with height. DW Magus: When they click right, we add 1 to ViewX, when they click down, we add 1 to ViewY. A diagonal down left will add 1 to both, and opposite directions subtract one. DW Magus: Now, say we reach the edge of the map. DW Magus: We're sitting at 90,90 DW Magus: We currently have fetched 90 - 90 + 10 (100) in both directions. DW Magus: Now, the player clicks right again. DW Magus: We want to try and fetch 91 through 91 + 10 (101). DW Magus: This isn't possible. Out of bounds on the array. DW Magus: So inside our fetching algorithm, we need to check to see if we're at the edge. DW Magus: If ViewX + ViewWidth > MapWidth DW Magus: This tells us whether or not ANY tiles we're requesting are out of bounds on that array. DW Magus: If that is true, it means we are requesting tiles out of bounds. DW Magus: So now, we drop down into another part instead of the original. DW Magus: If (RequestedTile > MapX) then RequestedTile = RequestedTile - MapX DW Magus: This will force it to subtract the 100 from the 101, which leaves us with 1. DW Magus: So now, the requested tile is 1 instead of 101. DW Magus: This works fine until our ViewX moves out of the array boundary as well. DW Magus: We need to make sure whenever the person clicks right, that we check that first. DW Magus: If ViewX > MapX then ViewX = ViewX - MapX DW Magus: This resets our viewscreen back to the other side. DW Magus: Now, if you code this recursiveey, you should be able to get wrapping now matter how small the map is. DW Magus: If it's not recursive, you only get one extra instance of your original map. DW Magus: My suggestions? DW Magus: Don't do it recursively. Too many things can go wrong if you mess up one bit. DW Magus: Make sure the maps are at least a certain size when they need to wrap.