Giter VIP home page Giter VIP logo

source's Introduction

SphereServer

Game server for Ultima Online

Coverity Scan Build Status Gitter

Download

Automatic builds

Building

Project can be compiled on Windows (Visual Studio) and Linux (GCC)

Windows (Visual Studio)

  • Open the project file SphereSvr.vcxproj using Visual Studio
  • On top menu, select the build configuration (Debug/Local/Nightly/Release), platform (x86/x64), and click on Build > Build Solution to compile

NOTES:

  • Required version: VS2015 or later (VS Code is not supported)
  • When using VS >= 2017:
    • When opening SphereSvr.vcxproj for the first time it will request an update on project file, just click OK to update (if update request doesn't get opened automatically, just open it on Project > Retarget solution)
    • Newest VS have an modular installation which comes with just basic components, and extra components must be installed as needed. To compile Sphere you must open Visual Studio Installer to install Desktop Development with C++ workload

Linux (Ubuntu)

Add architecture support

  • To compile 32bit build on 32bit OS or 64bit build on 64bit OS:
    # Skip this step (architecture is already supported by OS)
    
  • To compile 32bit build on 64bit OS:
    sudo dpkg --add-architecture i386
    sudo apt-get update
    sudo apt-get dist-upgrade
    

Install MySQL 5.7 client

  • Ubuntu 14.10 or older:

    • Default package repository only have support up to MySQL 5.6, so add MySQL 5.7 support
      sudo add-apt-repository 'deb http://repo.mysql.com/apt/ubuntu/ precise mysql-5.7'
      sudo apt-get update
      
    • Install MySQL
      • To compile 32bit build on 32bit OS or 64bit build on 64bit OS:
        sudo apt-get install libmysqlclient-dev
        
      • To compile 32bit build on 64bit OS:
        sudo apt-get install libmysqlclient-dev:i386
        
  • Ubuntu 15.04 to 19.04:

    • Install MySQL
      • To compile 32bit build on 32bit OS or 64bit build on 64bit OS:
        sudo apt-get install libmysqlclient-dev
        
      • To compile 32bit build on 64bit OS:
        sudo apt-get install libmysqlclient-dev:i386
        
  • Ubuntu 19.10 or later:

    • Default package repository dropped support for MySQL 5.7, so add it back
      sudo add-apt-repository 'deb http://repo.mysql.com/apt/ubuntu/ bionic mysql-5.7'
      sudo apt-get update --allow-insecure-repositories
      
    • Install MySQL
      • To compile 32bit build on 32bit OS or 64bit build on 64bit OS:
        sudo apt-get install libmysqlclient-dev=5.7*
        
      • To compile 32bit build on 64bit OS:
        sudo apt-get install libmysqlclient-dev:i386=5.7*
        

Install required packages

  • To compile 32bit build on 32bit OS or 64bit build on 64bit OS:
    sudo apt-get install git
    sudo apt-get install gcc
    sudo apt-get install g++
    sudo apt-get install make
    
  • To compile 32bit build on 64bit OS:
    sudo apt-get install git
    sudo apt-get install gcc-multilib
    sudo apt-get install g++-multilib
    sudo apt-get install make
    

Linux (CentOS / Red Hat)

Add MySQL 5.7 support

  • Add MySQL support on package repository

    • CentOS 6 / Red Hat 6:
      sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el6-9.noarch.rpm
      
    • CentOS 7 / Red Hat 7:
      sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-10.noarch.rpm
      
    • CentOS 8 / Red Hat 8:
      sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el8-8.noarch.rpm
      
    • CentOS 9 / Red Hat 9:
      sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm
      
  • Configure MySQL version on package repository

    sudo yum-config-manager --disable mysql80-community
    sudo yum-config-manager --enable mysql57-community
    

Install required packages

  • To compile 32bit build on 32bit OS or 64bit build on 64bit OS:
    sudo yum install git
    sudo yum install gcc-c++
    sudo yum install glibc-devel
    sudo yum install mysql-community-devel mysql-community-libs
    
  • To compile 32bit build on 64bit OS:
    sudo yum install git
    sudo yum install gcc-c++
    sudo yum install glibc-devel.i686
    sudo yum install mysql-community-devel.i686 mysql-community-libs.i686
    

Get the source code

git clone https://github.com/SphereServer/Source.git
cd Source

Compile the source code

  • To compile 32bit build:
make NIGHTLY=1 x86=1
  • To compile 64bit build:
make NIGHTLY=1

Coding notes for new contributors

  • Make sure you can compile and run the program before pushing a commit.
  • Rebasing instead of pulling the project is a better practice to avoid unnecessary "merge branch master" commits.
  • Adding/removing/changing anything that was working in one way for years should be followed by an ini setting when the changes can't be replicated on scripts to keep backwards compatibility.

Licensing

Copyright 2023 SphereServer development team

Licensed under the Apache License, Version 2.0 (the "License").
You may not use any file of this project except in compliance with the License.
You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0

source's People

Contributors

azmanomer avatar ben1028 avatar cbnolok avatar coruja747 avatar denizsokmen avatar dracoscript avatar drk84 avatar fernandomr88 avatar fjgo86 avatar furio avatar gokaygurcan avatar jfmu avatar lintax avatar nirad avatar roberpot avatar s0ckz avatar torbenf avatar torfo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

source's Issues

Asynchronious scipting in sphere

We want to support advanced scripting, especially multi-threaded.

PROBLEM.

  1. Current script engine is not bad, but event-driven and synchronous, so while processing a script event server is waiting the result, causing potential lags on heavy operations in a common places (like HitTry, etc).
  2. Moreover, complex AI (especially monster groups AI) requires complicated scripting being heavy on execution. Same does with several 'clever' spells admin would like to implement.
  3. Scripting language not bad but hand-crafted so it usually takes a quite a bunch of time to get with it right.

SOLUTION:

  1. Add a script processor no way connected to the current script engine with configurable amount of threads and execution queries. Expose Sphere objects to the script using usertypes.
  2. Use an game industry scripting standard - LUA that is a very high performance, standard and easy to learn language.
    This still leaves several questions, for example if async script will decide to execute "damage(victim, 10)" it should probably pass through the normal operational cycle including SCP event Damage to be triggered.

FLOATVAL error with ABS and issue with SQRT

.show eval ABS(-1) shows 1.
.show floatval ABS(-1) shows 0.000000 and error in console: Bad intrinsic function usage. missing ).

.show eval SQRT(030) shows 6.
.show eval SQRT(30) shows 5.
So with eval it appear to work properly.

.show floatval SQRT(030) shows 5.77...
.show floatval SQRT(30) shows 5.77...
It's like now it doesn't do the conversion from hex to decimal.

FLOATVAL doesn't show error in console if i put invalid code inside, like .show FLOATVAL arrraaa, where EVAL arrraaa does.

Also, is it possible to have as intrinsic functions also arcsin, arccos, arctan, arccotan? It should be easy to do since they are already in the c++ header <cmath.h> (http://www.cplusplus.com/reference/cmath/); cotan and arccotan appear to not be included, but cotan is 1/tan and arccotan is 90°-arctan (https://en.wikipedia.org/wiki/Inverse_trigonometric_functions).

Sphere 0.56c pre-release

This is an notice to devs and not really a issue, but since this thing automatically notify all devs on GIT it seems to be a nice place to post :P

some months ago we already tried to release 0.56c pre-release but devs had decided to postpone it until all current issues get fixed. Latest build (01 march 2016) seems to be stable, so maybe it's time to start the final tests

so if someone still have any pending commit, please commit it or wait until we move to 0.56d (just don't commit any buggy or non-tested changes, otherwise it will mess the final build). If also there's any bug left, just comment here or feel free to fix it

PS: there's no precise date to move, probably will take a few days or weeks, it will depend on how these latest builds will survive on final tests

Unused _DBPLUGIN

Randomly taking a look at some source files, I found many "#ifdef _DBPLUGIN" with huge codes. But _DBPLUGIN is not defined and not used as preprocessor def

Honestly I don't know the purpose of this disabled code but it seems to be an old SQL engine not used anymore. So is it safe to remove it?

CRASH Spheresvr.exe with exception.

Hi, i have a server with 70-100 players, and have a very random .exe crash.

I mentioned it to Xun, but I put the last log before crash, help please, players will surely be lost if you do not find solution, I compile my own sphere, if I can help tell me something.

The LOG:

`12:10:WARNING:c9:Bad Login 14 (Another character on this account is already ingame)
12:10:ERROR:Timer expired without DECAY flag 'Pergamino de Portal Magico' (UID=040012a97)?
12:10:DEBUG:__ thread (2392) __ | # | _____ function _____________ | ticks passed from previous function start ______
12:10:DEBUG:>> 2392 | 0 | CWorld::OnTick | +0
12:10:DEBUG:>> 2392 | 1 | CSector::OnTick | +0 <-- exception catch point (below is guessed and could be incorrect!)
12:10:DEBUG:>> 2392 | 2 | IPHistoryManager::getHistoryForIP | +0
12:10:CRITICAL:"Access Violation" (0x55252), in SUB: CSector::Sector::TickChar()
12:10:DEBUG:__ thread (2392) __ | # | _____ function _____________ | ticks passed from previous function start ______
12:10:DEBUG:>> 2392 | 0 | CWorld::OnTick | +0
12:10:DEBUG:>> 2392 | 1 | CSector::OnTick | +0
12:10:DEBUG:>> 2392 | 2 | CClient::r_LoadVal | +16 <-- exception catch point (below is guessed and could be incorrect!)
12:10:ERROR:Exception adding debug message on the exception.
12:10:DEBUG:char 0ecae48 ''
12:10:DEBUG:sector #1628 [5888,1024,0,0]
12:10:ERROR:Timer expired without DECAY flag 'Pergamino de Portal Magico' (UID=040012a99)?
12:10:ERROR:Timer expired without DECAY flag 'Pergamino de Portal Magico' (UID=040012aa5)?
12:10:DEBUG:__ thread (2392) __ | # | _____ function _____________ | ticks passed from previous function start ______
12:10:DEBUG:>> 2392 | 0 | CWorld::OnTick | +0
12:10:DEBUG:>> 2392 | 1 | CGObList::DeleteAll | +31
12:10:DEBUG:>> 2392 | 2 | CGObList::GetHead | +0

CRASH HERE

Relaunch Sphere...
12:10:Sphere Version 0.56d-Release [WIN32] by www.spherecommunity.net, compiled at Apr 26 2016 (23:03:59) [build 1 / GIT hash 82e4e89]
12:10:Expansion maps supported: Felucca (0), Malas (3)
12:10:Allocating map sectors: 0=6144 3=1280`

This:
12:10:DEBUG:char 0ecae48 '' <--- .gouid and DONT EXIST now.
12:10:DEBUG:sector #1628 [5888,1024,0,0] <--- Is a dungeon, none rare here.

Redundant data types

Is there a point to have, for example, LONG, INT32, DWORD to point a long?
This is valid also for INT, INT16, WORD. It's redundant and may be a bit confusing to anyone first approaching the code; aside this, is there a reason to keep it this way nowadays?

Problem with BUFF/DEBUFF with strenght and maxhits.

Cunning/Feeblemind alters MODINT and MAXMANA.
Agility/Clumsy alters MODDEX and MAXSTAM.

Strenght/Weaken alters MODDSTR but NOT MAXHITS. <--- This is the error.

This same issue with Bless/Curse/Mass Curse.

MagicFlags=010|040|0400|0800

Creating new char

When u creating new char some starting items not placing correctly and after save console removing them. For example if u give 5000gp to chars they take 4999gp and 1gp not placing world and after save server removing them.

Travis-CI support

@Ben1028 @torbenf someone can set this AppVeyor hook on github settings plz?
I can't set it because I don't have owner access on the project :P

Honestly I don't know how it works, but maybe we just need to add this url: https://ci.appveyor.com/api/github/webhook?id=ylox4u925cs260v9

and select the "push" and "pull request" buttons as it show on this screen: https://programmaticponderings.files.wordpress.com/2014/05/github-to-appveyor-webhook-configuration.png

this will make the GitHub automatically connect to AppVeyor to instantly test all commits that we send to github

Hue problems

Is someone having problems with items inside containers that have color set but the client load it without any color? (this thing only happer on some random items, and not on all container items)

This thing is really strange, because it happen only on newest clients (using an old client like 5.0.2 it works fine), so probably OSI had changed some packets. But on the other hand, maybe it's not a packet change, because using an old sphere build from mid-2015 it works fine even using newest clients

so things are really confusing about this hue mistery, and if someone have any info or want help fix this thing, just comment here

Proposal: Milestones for future releases

I think a set of milestones with real targets to develop is needed by the project. By the moment, we are all making war by our side. I propose this set:

Pay the technical debt

Source code has an insane technical debt. There is no organization, there is no doc and there is code inherited from more than 15 years that needs to be updated. I think we need to pay this debt to attract new devs.

Refactor

  1. Please no more files like graysvr.h or CObjBase.h.... so complex and do not help to the new developer.
  2. Function / Procedure / Method definition in .cpp please. Increase compilation performace and avoid the compiler to repeat a warning thousands of times.
  3. (This is personal) One class, one file.

Updating old code

There is tons of old code that now days has no sense (i my very very noob opinion, please correct me if i'm wrong).

  1. Standarize types like _karma propose in #34. I think is better to use uint8_t, int8_t, uint16_t, ..., const char *, char *, etc. than LPCSTR, BYTE, WORD.
  2. Use the STL! There is some classes redundant with the STL!

Documentation

I have asking XuN_ for 5 months every day for things about the source code because there is no doc! We need doc about basics like software architecture, initialization sequence, stop sequence, saves, resyncs, script execution, main loop... there is nothing!

  1. Refactor class declarations, putting together related methods.
  2. Doc all classes and maintain the doc update on every commit.
  3. Doc procedures and software architecture on the wiki (now, the wiki is like virgin princess waiting for her principe).

Future enhacements / functionality

Now, with technical deb payed, we can start speak about new functionality.

  1. Support new concrete versions of client.
  2. Add new type of items / chars.
  3. Improve AI.
  4. Improve tick performance by storing timers on DB.
  5. Support for LUA.

Resume

We need pay technical debt, or the interest will be unpayable, and new devs will love the doc.

Then, a set of real milestones is a nice way to continue the develop of this amazing project!

sigsegv - problems with memory

Hi,

I tried to move our server from 2009 version of sphere to the current version of sphere and encountered some sigsegv errors. I tried to debug it and ended up playing with Valgrind. I'll collect here some problems I found. Be aware that I haven't touched C++ in over 5 years so I'm quite rusty with it.

I'm on 64bit linux with 32bit compiled 1703a38

Proposal: Compiled functions / triggers.

Sphere core processing unit

The idea behind this doc is to speedup the execution of sphere scripted triggers and functions. We can create a virtual CPU with a custom instruction set and compile the triggers / functions to that bytecode.

Pros:

  • Trigger / function execution speed up.
  • Change old recursive descent parser to a new LALR parser generated with Flex/Bison tools.
  • Prevent “reparse” issue on loops, recursive calls, etc.

Cons:

  • Rewrite parser, executer and write a virtual cpu (Too much work!)
  • Some instructions from current implementation can not be reproduced and has to be reworked (Basically, parsing in runtime). Instructions like:
LOCAL.T = <SRC.STR> + 1
SERV.LOG = <EVAL <LOCAL.T>>

This has to change to:

SERV.LOG = <EVAL <SRC.STR> + 1>

We have to change:

  1. On startup time, scripted functions and triggers are compiled to a byte code like format. All are stored together (code and static data like strings, we will see in depth this later).
  2. On runtime, when a function or trigger is called, we call a scpu method, setting the arguments and call data and run it.
  3. The method that runs the routine returns the status code of execution.

Compilation process:

  1. Load scripted function to the parser (i recommend bison and flex generated parser).
  2. Parser generates a tree from the source code.
  3. Apply some optimizations to the tree (a visitor that constructs a new optimized tree).
  4. Generate the byte code from the tree.
  5. Add to the generated code an end instruction to return default value (for functions / triggers with no return).
  6. Generate the static data from the symbol table.
  7. When all the functions are compiled, we have to update call references to put the correct address.

All the functions / triggers are stored on the same memory, this allows us to do calls over other functions in a simple way.

SCPU Architecture

I recommend Harvard Architecture for simplicity.

User Registers:

  • A, General purpose, 32 bits.
  • B, General purpose, 32 bits.
  • PC, Program Counter, 32 bits.
  • FP, Frame Pointer, 32 bits.
  • SP, Stack Pointer, 32 bits.
  • COR, Current Object Reference, 32 bits. (UID from a Sphere object).
  • IR, Instruction Register, 32 bits.
  • F, Flags, 8 bits.

Internal Registers:

  • AC, Arg counter, 8 bits. (to prevent invalid memory access).
  • CC, Call Counter, 8 bits. (to preven infinite recursion).

Memory:

  • Program memory: fixed size 32 bits memory. Fixed to the total memory required by the compiled functions and triggers.
  • Data memory: 32 bits memory, 4096 bytes.
  • Const string memory: fixed size 32 bits memory. Fixed to the total memory required by the const strings from compiled functions and triggers.

Call procedure:

  1. Push FP to SP.
  2. Push AC to SP.
  3. Increment CC.
  4. Add parameters on reverse order to the stack.
  5. Add the return address to stack.
  6. Set FP = SP.
  7. Jump to the call address.

Ret procedure:

  1. Set A with the return value.
  2. Pop SP until local space is empty.
  3. Pop SP to PC..
  4. Pop parameters from SP.
  5. Decrement CC.
  6. Pop SP to AC.
  7. Pop SP to FP.

Init procedure:

  1. Search address from the called function / trigger and set PC to this address.
  2. Push 0 to SP (false FP).
  3. Push 0 to SP (false AC).
  4. Push args to SP.
  5. Set AC with argument count.
  6. Push 0 to SP (return address from the first call).
  7. Start.

Program Memory Organization:

  • Address 0x00: STOP.
  • Address 0x01: Start point of the first compiled function / trigger.
  • Address 0xAA: End of the first compiled function / trigger.
  • Address 0xAA+1: Start point of the next compiled function / trigger.

Const Memory Organization:

  • Address 0x00 - 0xAA: pointers to CGString constant values from first compiled function / trigger.
  • Address 0xAA+1 - 0xBB: pointers to CGString constant values from next compiled function / trigger.

Instruction Set

Waiting for community to continue work on this.

0x00000000 STOP

Stop execution. Get the A register value and transform to a valid return value and return it.

THIS IS A DRAFT

Explosion potion dont work.

The explosion potion does not work, you can not throw, and explodes in character after 3 seconds, says "The target has moved," the last changes I see in the source code are these:

34a2c9b

Thanks.

MessageLoc

MessageLoc is not in CClient_Functions.tbl or CChar_Functions.tbl. Checking CChar.cpp and CClient.cpp shows it does not exist either. This was an addition a long time ago that has become missing. Ruining a lot of older scripts and new ones.

This also needs additions of EmoteLoc and SayLoc (SayLoc parsing arguments for 0x00 (Say), 0x08 Whisper, 0x09 yell). As most of sphere speech is actually in the clilocs and would clean out the use of parsing those resource consuming strings.

EmoteLoc also should be considered 0x02.

All of the above are called in Packet C1. Providing a soft code fix is not going to be friendly with how much these get called in the game.

Replication will be easy using SysMessageLoc. Though EmoteLoc will take a bit more to parse and will need a nested EmoteLoc in it. One to parse to Parse to Src and one to Parse to Players around src.

Misc party issues

PARTY.CREATE 0/1, <UID_master>, _other gives in console:
ERROR:Undefined symbol 'CREATE' ['CREATE']
ERROR:Undefined keyword 'PARTY.CREATE'

IF (), if i am not in a party, gives in console:
ERROR:Can't resolve
ERROR:Undefined symbol ''
I know there's IsInParty, but i thought it was something to report.

Also, is it possible to add a parameter to ADDMEMBER and ADDMEMBERFORCED to request /accept or to force the joining? A syntax like PARTY.CREATE would be good -> msg,uid(s) where msg is 0/1 sending default sysmessages or not.
(i found PARTY.CREATE in the revisions changelog, but it isn't mentioned in the wiki)

FACE with more than 1 arguments makes sphere crash

As title, if you do "FACE 1,2" or "FACE 1 2" sphere will crash (i know it should work with an UID as argument, but returning an error would be more appropriate and you can make a living shard crash for a weird mistake). Notably, ".show face 1 1" or ".show 1,1" won't make sphere crash but shows DEFMSG.cmd_invalid.
Also, i suggest to make FACE work with coordinates, in case you want as example to turn to a ground target.

Critical errors (Sphere crash)

using latest build on my live server I'm getting some random errors making the sphere crash. I'm a bit busy this week and probably won't have some time to fix it, so I'll post these errors here if someone want take a look or even try to fix it

this error I got on random moments:

19:11:DEBUG:__ thread (15348) __ | # | _____ function _____________ | ticks passed from previous function start ______
19:11:DEBUG:>> 15348 | 0 | CWorld::OnTick | +0
19:11:DEBUG:>> 15348 | 1 | CSector::OnTick | +46
19:11:DEBUG:>> 15348 | 2 | CChar::OnTick | +0 <-- exception catch point (below is guessed and could be incorrect!)
19:11:DEBUG:>> 15348 | 3 | CChar::Skill_Done | +0
19:11:DEBUG:>> 15348 | 4 | CChar::Skill_Stage | +0
19:11:DEBUG:>> 15348 | 5 | CChar::Skill_Magery | +0
19:11:DEBUG:>> 15348 | 6 | CChar::Spell_CastDone | +0
19:11:DEBUG:>> 15348 | 7 | CVarDefMap::Empty | +32
19:11:CRITICAL:"Access Violation" (0xe79e7), in CChar::Tick() #2 "timer expired"


and this one is the critical error on CChar::Use_Item() that can make sphere crash. Probably the error is on CCharUse.cpp (the loop starting on line 1768). When the client click on a unknown item, the function Use_Item() call another Use_Item(), creating a infinite loop and making the server crash. This code already have a protection for infinite loop but probably it's not working

19:50:DEBUG:__ thread (15348) __ | # | _____ function _____________ | ticks passed from previous function start ______
19:50:DEBUG:>> 15348 | 0 | NetworkManager::processAllInput | +0
19:50:DEBUG:>> 15348 | 1 | NetworkInput::processInput | +0
19:50:DEBUG:>> 15348 | 2 | NetworkInput::processData | +0
19:50:DEBUG:>> 15348 | 3 | NetworkInput::processData | +0
19:50:DEBUG:>> 15348 | 4 | NetworkInput::processGameClientData | +0
19:50:DEBUG:>> 15348 | 5 | PacketDoubleClick::onReceive | +0
19:50:DEBUG:>> 15348 | 6 | CClient::Event_DoubleClick | +0
19:50:DEBUG:>> 15348 | 7 | CClient::Cmd_Use_Item | +0
19:50:DEBUG:>> 15348 | 8 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 9 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 10 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 11 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 12 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 13 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 14 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 15 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 16 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 17 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 18 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 19 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 20 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 21 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 22 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 23 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 24 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 25 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 26 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 27 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 28 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 29 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 30 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 31 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 32 | CChar::Use_Item | +0
19:50:DEBUG:>> 15348 | 33 | CChar::Use_Item | +0
[ ... ]

Specify a sphereserver licensing

We should choose from the following licenses
GPLv3
Apache 2.0
MIT

Please vote up for the one that is best. I personally back Apache as less restrictive, still a bit more protective than MIT is.

CMake as build environment

CMake is a build tool to generate platform and compiler independent makefiles which makes things much easier to configure. It's extremely useful in large projects with dependencies.

Console error with ATTACKER script.

The error:

15:48:DEBUG:__ thread (3904) __ |  # | _____ function _____________ | ticks passed from previous function start ______
15:48:DEBUG:>>         3904     |  0 |               CWorld::OnTick | +0 
15:48:DEBUG:>>         3904     |  1 |              CSector::OnTick | +0 
15:48:DEBUG:>>         3904     |  2 |                CChar::OnTick | +0 
15:48:DEBUG:>>         3904     |  3 |      CChar::NPC_OnTickAction | +0 
15:48:DEBUG:>>         3904     |  4 |         CChar::NPC_Act_Fight | +0 
15:48:DEBUG:>>         3904     |  5 |             CChar::OnTrigger | +0 
15:48:DEBUG:>>         3904     |  6 |  CScriptObj::OnTriggerScript | +0 
15:48:DEBUG:>>         3904     |  7 |  CScriptObj::OnTriggerRunVal | +0 
15:48:DEBUG:>>         3904     |  8 |     CScriptObj::OnTriggerRun | +0 
15:48:DEBUG:>>         3904     |  9 |     CScriptObj::OnTriggerRun | +0 
15:48:DEBUG:>>         3904     | 10 |     CScriptObj::OnTriggerRun | +0 
15:48:DEBUG:>>         3904     | 11 |     CScriptObj::OnTriggerRun | +0 
15:48:DEBUG:>>         3904     | 12 |                CChar::r_Verb | +0 
15:48:DEBUG:>>         3904     | 13 |             CObjBase::r_Verb | +0 
15:48:DEBUG:>>         3904     | 14 |           CScriptObj::r_Verb | +0 
15:48:DEBUG:>>         3904     | 15 |             CChar::r_LoadVal | +0 <-- exception catch point (below is guessed and could be incorrect!)
15:48:DEBUG:>>         3904     | 16 |       CChar::Attacker_GetUID | +0 
15:48:CRITICAL:(e_mascota.scp,137)Exception, in CChar::LoadVal()
15:48:DEBUG:command 'Attacker.-1.delete' args

The script:

ON=@NPCActFight
IF ((<MEMORYFINDTYPE.memory_ipet.LINK.ISPLAYER>) || (<FINDID.i_rune_summon_creature>) || (<FLAGS>&statf_conjured))
    IF ((<SRC.ISPLAYER>) && (<SRC.ISEVENT.e_novato>))
        IF !(<SRC.ISEVENT.e_entrenamiento>)
            Attacker.<attacker.id <src>>.delete
            ACTION = 065
            FLAGS = <FLAGS> & ~statf_war
            RETURN 1
        ENDIF
    ENDIF
ENDIF
RETURN 0

I put this IF for evade error and seems work fine.

ON=@NPCActFight
// Evita que los npcs mascotas de jugadores o invocados dañen a los novatos.
IF ((<MEMORYFINDTYPE.memory_ipet.LINK.ISPLAYER>) || (<FINDID.i_rune_summon_creature>) || (<FLAGS>&statf_conjured))
    IF ((<SRC.ISPLAYER>) && (<SRC.ISEVENT.e_novato>))
        IF !(<SRC.ISEVENT.e_entrenamiento>)
            **IF (<Attacker.id <src>>)**
                Attacker.<attacker.id <src>>.delete
                ACTION = 065
                FLAGS = <FLAGS> & ~statf_war
                RETURN 1
            **ENDIF**
        ENDIF
    ENDIF
ENDIF
RETURN 0

Unused files on project

I found this files and i think can be removed:

common/CScriptCompiler.cpp
common/CScriptCompiler.h
common/CMapCache.cpp
common/CMapCache.h
common/twofish/Makefile

Can be removed?

InitHiddenSkills problem

InitHiddenSkills on sphere.ini is used when the player create a new char, to add initial skills values even on skills that this client can't see

but I think it's wrong, we must set char skills based on server settings (if the skill is enabled/disabled on server) and not just checking for the client version

eg: the server client is 6.x.x.x but someone create an account and do the first login using client 4.x.x, this char will be created with 0.0 on all SE / ML / SA skills just because the player created the char using an old client

so I think InitHiddenSkills feature can be removed, because it doesn't work well and can cause some problems like this. I'm opening this issue to vote, if everyone agree I can remove it

Critical console exceptions

using latest build 2587 (24 nov 2015) on my live server I'm getting tons of console errors, already tried to take a look at these codes but I don't find nothing wrong. So I will copy/paste here in case if someone want help fix it

the error 1 seems to be the most critical, it keep hours spamming the console at each second, making my daily sphere log file jump from 1mb to 20mb. Errors 2, 3 and 4 just appear a few times and stop in a few seconds


ERROR 1:

04:51:DEBUG:__ thread (15848) __ | # | _____ function _____________ | ticks passed from previous function start ______
04:51:DEBUG:>> 15848 | 0 | CWorld::OnTick | +0
04:51:DEBUG:>> 15848 | 1 | CSector::OnTick | +78
04:51:DEBUG:>> 15848 | 2 | CChar::OnTick | +0 <-- exception catch point (below is guessed and could be incorrect!)
04:51:DEBUG:>> 15848 | 3 | CChar::OnTickEquip | +0
04:51:DEBUG:>> 15848 | 4 | CChar::Memory_OnTick | +0
04:51:DEBUG:>> 15848 | 5 | CChar::Memory_Fight_OnTick | +0
04:51:DEBUG:>> 15848 | 6 | CChar::Memory_Fight_Retreat | +0
04:51:DEBUG:>> 15848 | 7 | CVarDefMap::GetKey | +0
04:51:CRITICAL:Assert pri=2:'purecall' file 'unknown', line 1, in SUB: CChar::Char::Ticking items()


ERROR 2:

00:41:DEBUG:__ thread (15848) __ | # | _____ function _____________ | ticks passed from previous function start ______
00:41:DEBUG:>> 15848 | 0 | CWorld::OnTick | +0
00:41:DEBUG:>> 15848 | 1 | CSector::OnTick | +31
00:41:DEBUG:>> 15848 | 2 | CChar::OnTick | +0 <-- exception catch point (below is guessed and could be incorrect!)
00:41:DEBUG:>> 15848 | 3 | CChar::OnTickStatusUpdate | +0
00:41:DEBUG:>> 15848 | 4 | CClient::UpdateStats | +0
00:41:DEBUG:>> 15848 | 5 | CClient::addManaUpdate | +0
00:41:DEBUG:>> 15848 | 6 | CPartyDef::AddStatsUpdate | +0
00:41:CRITICAL:"Access Violation" (0xf5ec8), in CChar::Tick() #1 "update stats"


ERROR 3:

00:48:DEBUG:__ thread (15848) __ | # | _____ function _____________ | ticks passed from previous function start ______
00:48:DEBUG:>> 15848 | 0 | CWorld::OnTick | +0
00:48:DEBUG:>> 15848 | 1 | CSector::OnTick | +31
00:48:DEBUG:>> 15848 | 2 | CChar::OnTick | +16 <-- exception catch point (below is guessed and could be incorrect!)
00:48:DEBUG:>> 15848 | 3 | CChar::OnTickStatusUpdate | +0
00:48:DEBUG:>> 15848 | 4 | CClient::UpdateStats | +0
00:48:DEBUG:>> 15848 | 5 | CClient::addStamUpdate | +0
00:48:DEBUG:>> 15848 | 6 | CPartyDef::AddStatsUpdate | +0
00:48:DEBUG:>> 15848 | 7 | CChar::CanSee | +546
00:48:DEBUG:>> 15848 | 8 | CPointBase::GetDistSight | +0
00:48:CRITICAL:"Access Violation" (0xf5ec8), in CChar::Tick() #5 "update stats"


ERROR 4:

15:10:DEBUG:__ thread (30636) __ | # | _____ function _____________ | ticks passed from previous function start ______
15:10:DEBUG:>> 30636 | 0 | CWorld::OnTick | +0
15:10:DEBUG:>> 30636 | 1 | CSector::OnTick | +15
15:10:DEBUG:>> 30636 | 2 | CChar::OnTick | +0 <-- exception catch point (below is guessed an
d could be incorrect!)
15:10:DEBUG:>> 30636 | 3 | CChar::Skill_Done | +0
15:10:DEBUG:>> 30636 | 4 | CChar::Skill_Stage | +0
15:10:DEBUG:>> 30636 | 5 | CChar::Skill_Magery | +0
15:10:DEBUG:>> 30636 | 6 | CChar::Spell_CastDone | +0
15:10:DEBUG:>> 30636 | 7 | CVarDefMap::Empty | +0
15:10:CRITICAL:"Access Violation" (0xdad47), in CChar::Tick() #2 "timer expired"

BONUSHITS, BONUSSTAM, BONUSMANA

this item effect set a number much higher, i try to fix in CCharact here:

    short iHitpointIncrease = static_cast<short>(pItem->GetDefNum("BONUSHITS", true, true));
    if (iHitpointIncrease != 0)
        Stat_SetMax(STAT_STR, Stat_GetMax(STAT_STR) - iHitpointIncrease);

equip for iHitpointInscrease is short, and unequip is int.. but dont resolve nothing.

About the IDE

Really hate that VS change the code (my last commit has tons of style changes that vs do...). Any way to make vs stop touching the files? CLion licenses are ready? I think i'll switch to codeblocks or clion.

Party system error on console.

I have this error repeat alot of times on sphere console, seems if a fail on status update of party system.

I search revisions and found:
17-06-2015, Coruja
Fixed: Packet to update char hitpoints being sent twice to nearby party members.

06-08-2015, Coruja
Fixed: Client sending unnecessary mana/stam update to party members when opening the status menu.

31-01-2016, Coruja
Fixed: Character stats gump (hits/mana/stam) showing wrong info for players on same party.

The error:
00:26:DEBUG:__ thread (4764) __ | # | _____ function _____________ | ticks passed from previous function start ______
00:26:DEBUG:>> 4764 | 0 | CWorld::OnTick | +0
00:26:DEBUG:>> 4764 | 1 | CSector::OnTick | +157
00:26:DEBUG:>> 4764 | 2 | CChar::OnTick | +0 <-- exception catch point (below is guessed and could be incorrect!)
00:26:DEBUG:>> 4764 | 3 | CChar::OnTickStatusUpdate | +0
00:26:DEBUG:>> 4764 | 4 | CClient::UpdateStats | +0
00:26:DEBUG:>> 4764 | 5 | CClient::addManaUpdate | +0
00:26:DEBUG:>> 4764 | 6 | CPartyDef::AddStatsUpdate | +0
00:26:CRITICAL:"Access Violation" (0xf4b78), in CChar::Tick() #5 "update stats"

Multi Targeting Reticle

New changes in multis have made ships near impossible to place by default (Test with Gargoyle ship). Checks need to be done for Ships versus Housing. Other larger ships have slight issues with placement as well. Ships by EA standards I believe are centered, as sphere used to parse it.

Perma statf_war on NPCs

Last nightly have a bug with NPCs, when i hit a npc he put on war mode, but never never return to peace.

Prob the cause if this commit: dd71ad7

but i dont know.

Damage calculation

I just updated from 03 May 2011 nightly release, any meele or ranged weapon hits more than it's +15 (on 2011's build) now. I checked the damage calculation codes, it's nearly nothing matching the old lines. Is there any setting i can set to calculate damages as it was before?

Example def for a sword
[itemdef 0f5e]
defname i_sword_broad
resources 10 i_ingot_iron
type T_WEAPON_SWORD
flip 1
dam 13,21
skill Swordsmanship
reqstr 25
twohands N
weight 6.2
category Provisions - Weapons
subsection Swords
description Broadsword
skillmake blacksmithing 60.8
dupelist 0f5f

On=@create
hitpoints {31 100}

CombatFlags=0
CombatSpeedEra= 0
MagicFlags=0

Experimental=0
OptionFlags=020|0200|080

Console Excepcion with t_booze and "Drunk Effect"

When i drink 2 items with TYPE=t_booze, sphere show a error and the wine not consumed.

14:19:DEBUG:__ thread (4772) __ |  # | _____ function _____________ | ticks passed from previous function start ______
14:19:DEBUG:>>         4772     |  0 | NetworkManager::processAllInput | +0 
14:19:DEBUG:>>         4772     |  1 |   NetworkInput::processInput | +15 
14:19:DEBUG:>>         4772     |  2 |    NetworkInput::processData | +0 
14:19:DEBUG:>>         4772     |  3 |    NetworkInput::processData | +0 
14:19:DEBUG:>>         4772     |  4 | NetworkInput::processGameClientData | +0 <-- exception catch point (below is guessed and could be incorrect!)
14:19:DEBUG:>>         4772     |  5 | PacketDoubleClick::onReceive | +0 
14:19:DEBUG:>>         4772     |  6 |   CClient::Event_DoubleClick | +0 
14:19:DEBUG:>>         4772     |  7 |        CClient::Cmd_Use_Item | +0 
14:19:DEBUG:>>         4772     |  8 |              CChar::Use_Item | +0 
14:19:DEBUG:>>         4772     |  9 |           CChar::Do_Use_Item | +0 
14:19:DEBUG:>>         4772     | 10 |             CChar::Use_Drink | +0 
14:19:DEBUG:>>         4772     | 11 |   CChar::Spell_Effect_Remove | +0 
14:19:CRITICAL:"Access Violation" (0xe0027), in SUB: NetworkInput::Message::ProcessMessage()
14:19:DEBUG:b3:Parsing Packet len=5 id=0x06 [2016/03/05 14:19:23]
        0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
       -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- --
0000   06 40 00 56 4d                                    [email protected]
14:19:DEBUG:__ thread (4772) __ |  # | _____ function _____________ | ticks passed from previous function start ______
14:19:DEBUG:>>         4772     |  0 |               CWorld::OnTick | +0 
14:19:DEBUG:>>         4772     |  1 |              CSector::OnTick | +16 
14:19:DEBUG:>>         4772     |  2 |                CChar::OnTick | +0 <-- exception catch point (below is guessed and could be incorrect!)
14:19:DEBUG:>>         4772     |  3 |             CObjBase::Delete | +0 
14:19:DEBUG:>>         4772     |  4 |      CObjBase::DeletePrepare | +0 
14:19:DEBUG:>>         4772     |  5 |    CGObList::RemoveAtSpecial | +0 
14:19:DEBUG:>>         4772     |  6 |            CChar::OnRemoveOb | +0 
14:19:DEBUG:>>         4772     |  7 |   CChar::Spell_Effect_Remove | +0 
14:19:CRITICAL:"Access Violation" (0xe0027), in SUB: CChar::Char::Ticking items()

ERROR:UID=040001700, id=02053 'Drunk Effect', Invalid code=3101 (Object is totaly lost, no parent exists)

Proposal: Target Cancellation

Currently, the triggers @Targon_Cancel and @ItemTargon_Cancel ONLY fire if the TARGET is called from the item. If called from the SRC (on a DCLICK trigger, for example), these triggers never fire if the SRC presses ESC.

Proposal is to modify @Targon_Cancel OR create a new trigger (@Target_Cancel or something) that is actually fired any time the client has a target cursor present and hits ESC. This will give the the ability to run certain lines of code that need only be processed on a target cancellation. In addition, this trigger needs to be fired even if the client is placing an item from the ADD command, or any other function that opens the target cursor.

An example of when this should work, but does not currently:

[function f_blah]
events +e_target_example
add m_some_big_pretty_house

[events e_target_example]
on=@target_cancel // new trigger
sysmessage You canceled your targeting cursor.
events -e_target_example // don't need this anymore
return 1 // suppress default message

Centos7 Pre-release do NOT work - does not seem to read scripts properly?

In the pre-release build, on Centos7 I am getting these errors when Sphere starts. All permissions and structure are correct.

The below error happens for every file as it loads. It claims it cannot open 'input dir' but the user running sphere has required access (tested with root + custom user).

Sphere Version 0.56c-Nightly [Linux] by www.spherecommunity.net, compiled at Apr 10 2016 (16:30:41) [build 2807 / GIT hash 0dc0ebf]
WARNING:
This is a nightly build of SphereServer. This build is to be used
for testing and/or bug reporting ONLY. DO NOT run this build on a
live shard unless you know what you are doing!
Nightly builds are automatically made every night from source and
might contain errors, might be unstable or even destroy your
shard as they are mostly untested!
-----------------------------------------------------------------

Signal handlers UNinstalled.
Expansion maps supported: Felucca (0), Trammel (1)
ERROR:Can't open input dir [scripts/spheretables.scp]
ERROR:Can't get stats info for file 'scripts/spheretables.scp'
Allocating map sectors: 0=7168 1=7168
Indexing 35 scripts...
ERROR:Can't open input dir [scripts/sphere_admin.scp]
ERROR:Can't get stats info for file 'scripts/sphere_admin.scp'
Loading scripts/sphere_admin.scp
ERROR:Can't open input dir [scripts/sphere_backward_compatibility.scp]
ERROR:Can't get stats info for file 'scripts/sphere_backward_compatibility.scp'
Loading scripts/sphere_backward_compatibility.scp
...
ERROR:Can't open input dir [scripts/sphere_template.scp]
ERROR:Can't get stats info for file 'scripts/sphere_template.scp'
ERROR:Can't open input dir [scripts/sphere_template_loot.scp]
ERROR:Can't get stats info for file 'scripts/sphere_template_loot.scp'
ERROR:(sphere_template_loot.scp,69)Undefined symbol 'i_bag' ['i_bag']
ERROR:(sphere_template_loot.scp,78)Undefined symbol 'i_bag' ['i_bag']
ERROR:(sphere_template_loot.scp,87)Undefined symbol 'i_bag' ['i_bag']
ERROR:(sphere_template_loot.scp,96)Undefined symbol 'i_bag' ['i_bag']
ERROR:(sphere_template_loot.scp,105)Undefined symbol 'i_bag' ['i_bag']
ERROR:(sphere_template_loot.scp,124)Undefined symbol 'i_basket' ['i_basket 1 i_basket_bushel 1 i_basket_2 1 i_basin 1 i_basket_square 1 i_basket_square_small 1 i_basket_round_small 1 i_basket_round_tall 1 i_basket_square_deep 1 i_basket_square_tall 1 i_basket_round_flat 1 }']
ERROR:(sphere_template_loot.scp,124)Undefined symbol 'i_basket_bushel' ['i_basket_bushel 1 i_basket_2 1 i_basin 1 i_basket_square 1 i_basket_square_small 1 i_basket_round_small 1 i_basket_round_tall 1 i_basket_square_deep 1 i_basket_square_tall 1 i_basket_round_flat 1 }']
...
ERROR:Can't open input dir [scripts/maps/sphere_map_points3.scp]
ERROR:Can't get stats info for file 'scripts/maps/sphere_map_points3.scp'
Loading scripts/maps/sphere_map_points3.scp
ERROR:(sphere_map_points3.scp,15)Unsupported map #3 specified. Auto-fixing that to 0.
ERROR:(sphere_map_points3.scp,16)Unsupported map #3 specified. Auto-fixing that to 0.
ERROR:(sphere_map_points3.scp,19)Unsupported map #3 specified. Auto-fixing that to 0.

As you can see it seems to read the file, but then references seem to not ever exist, so everything fails. After loading sphere continues to pretend its up and running.

ERROR:(sphere_template_loot.scp,4107)Undefined symbol 'i_bag' ['i_bag']
ERROR:Can't open input dir [scripts/sphere_template_vend.scp]
ERROR:Can't get stats info for file 'scripts/sphere_template_vend.scp'
Loading scripts/sphere_template_vend.scp
Done loading scripts (33 of 199 triggers used).

Loaded 141 client encryption keys.
Server started on hostname 'server.bristol.digital'
Monitoring IP 88.150.141.98:2593
Loading save/spheredata...
Loading save/spherestatics...
Loading save/spheremultis...
Loading save/sphereworld...
Loading save/spherechars...
GC: 0 Objects accounted for
Option flags: ScaleDamageByDurability + CommandSysmessages + ItemsAutoName + NoHouseMuteSpeech + Buffs + NoPrefix
[email protected], URL=www.ultima.one, Lang=English, TZ=0
Startup complete. items=0, chars=0
12:40:ERROR:Can't open input dir [scripts/sphere_serv_triggers.scp]
12:40:ERROR:Can't get stats info for file 'scripts/sphere_serv_triggers.scp'

I have tried with a clean sphere.ini and custom, it does not change the issue. I have tried with the latest Nightly as well as the Debug version and nothing works any different.

Upon typing 'x' to quit I get the following:

x
12:40:FATAL:Immediate Shutdown initialized!
FATAL:Server terminated: Terminal closed by SIGHUP signal (code 1)
*** Error in `./spheresvr': munmap_chunk(): invalid pointer: 0x0bd1ef30 ***
======= Backtrace: =========
/lib/libc.so.6(+0x7429c)[0xf710029c]
/lib/libc.so.6(+0x17c56)[0xf70a3c56]
/lib/libstdc++.so.6(_ZdlPv+0x1f)[0xf72ee97f]
./spheresvr[0x81915d2]
./spheresvr[0x815c197]
./spheresvr[0x8151d5c]
/lib/libc.so.6(+0x31ad9)[0xf70bdad9]
/lib/libc.so.6(+0x31b3d)[0xf70bdb3d]
/lib/libc.so.6(__libc_start_main+0xfb)[0xf70a594b]
./spheresvr[0x804c873]
======= Memory map: ========
08048000-08384000 r-xp 00000000 08:02 2149465316                         /sphere/spheresvr
08384000-08385000 r--p 0033c000 08:02 2149465316                         /sphere/spheresvr
08385000-083ab000 rw-p 0033d000 08:02 2149465316                         /sphere/spheresvr
083ab000-09f0e000 rw-p 00000000 00:00 0 
0b5b9000-0bda9000 rw-p 00000000 00:00 0                                  [heap]
f6500000-f6521000 rw-p 00000000 00:00 0 
f6521000-f6600000 ---p 00000000 00:00 0 
f661b000-f661c000 ---p 00000000 00:00 0 
f661c000-f6e1c000 rw-p 00000000 00:00 0 
f6e1c000-f6e51000 r--s 00000000 08:02 2149467299                         /var/db/nscd/hosts
f7089000-f708c000 rw-p 00000000 00:00 0 
f708c000-f7243000 r-xp 00000000 08:02 4299942714                         /usr/lib/libc-2.17.so
f7243000-f7245000 r--p 001b7000 08:02 4299942714                         /usr/lib/libc-2.17.so
f7245000-f7246000 rw-p 001b9000 08:02 4299942714                         /usr/lib/libc-2.17.so
f7246000-f7249000 rw-p 00000000 00:00 0 
f7249000-f7262000 r-xp 00000000 08:02 4301779273                         /usr/lib/libgcc_s-4.8.5-20150702.so.1
f7262000-f7263000 r--p 00018000 08:02 4301779273                         /usr/lib/libgcc_s-4.8.5-20150702.so.1
f7263000-f7264000 rw-p 00019000 08:02 4301779273                         /usr/lib/libgcc_s-4.8.5-20150702.so.1
f7264000-f72a4000 r-xp 00000000 08:02 4299867648                         /usr/lib/libm-2.17.so
f72a4000-f72a5000 r--p 00040000 08:02 4299867648                         /usr/lib/libm-2.17.so
f72a5000-f72a6000 rw-p 00041000 08:02 4299867648                         /usr/lib/libm-2.17.so
f72a6000-f7385000 r-xp 00000000 08:02 4301779277                         /usr/lib/libstdc++.so.6.0.19
f7385000-f738a000 r--p 000de000 08:02 4301779277                         /usr/lib/libstdc++.so.6.0.19
f738a000-f738b000 rw-p 000e3000 08:02 4301779277                         /usr/lib/libstdc++.so.6.0.19
f738b000-f7393000 rw-p 00000000 00:00 0 
f7393000-f7396000 r-xp 00000000 08:02 4299420516                         /usr/lib/libdl-2.17.so
f7396000-f7397000 r--p 00002000 08:02 4299420516                         /usr/lib/libdl-2.17.so
f7397000-f7398000 rw-p 00003000 08:02 4299420516                         /usr/lib/libdl-2.17.so
f7398000-f739f000 r-xp 00000000 08:02 4300448205                         /usr/lib/librt-2.17.so
f739f000-f73a0000 r--p 00006000 08:02 4300448205                         /usr/lib/librt-2.17.so
f73a0000-f73a1000 rw-p 00007000 08:02 4300448205                         /usr/lib/librt-2.17.so
f73a1000-f7676000 r-xp 00000000 08:02 4300487956                         /usr/lib/libmysqlclient.so.18
f7676000-f7733000 rw-p 002d4000 08:02 4300487956                         /usr/lib/libmysqlclient.so.18
f7733000-f7736000 rw-p 00000000 00:00 0 
f7736000-f774c000 r-xp 00000000 08:02 4300352030                         /usr/lib/libpthread-2.17.so
f774c000-f774d000 r--p 00015000 08:02 4300352030                         /usr/lib/libpthread-2.17.so
f774d000-f774e000 rw-p 00016000 08:02 4300352030                         /usr/lib/libpthread-2.17.so
f774e000-f7750000 rw-p 00000000 00:00 0 
f7759000-f775c000 rw-p 00000000 00:00 0 
f775c000-f775d000 r-xp 00000000 00:00 0                                  [vdso]
f775d000-f777c000 r-xp 00000000 08:02 4299942707                         /usr/lib/ld-2.17.so
f777c000-f777d000 r--p 0001e000 08:02 4299942707                         /usr/lib/ld-2.17.so
f777d000-f777e000 rw-p 0001f000 08:02 4299942707                         /usr/lib/ld-2.17.so
ffc63000-ffc84000 rw-p 00000000 00:00 0                                  [stack]
Aborted (core dumped)

Resync simply throws all the startup errors again. Whats more confusing is that these 'symbols' do not exist in the mentioned file AT ALL.

ERROR:(sphere_template_loot.scp,583)Undefined symbol 'i_chest_pirate' ['i_chest_pirate 1 i_chest_gothic 1 }']
ERROR:(sphere_template_loot.scp,583)Undefined symbol 'i_chest_gothic' ['i_chest_gothic 1 }']

So where on earth is it getting that from?!

Protection spell does not raise armor rating

Not sure when it started to happen, just updated from 2012's. Tested with default script pack it doesn't seem to work on that too.

CombatFlags=0
CombatSpeedEra= 0
MagicFlags=0

Experimental=0
OptionFlags=020|0200|080

Script TRIGGER return value.

When you RETURN a value in a scripted trigger, you should be able to get that value with <Trigger @trig> but instead you get the TRIGRET_TYPE. Is there a reason to keep it as it is? It is more logical and useful to get the returned value.

Git services

If a service or webhook is needed, just give me the details and I can make it happen.
I see appveyor seems to be wanted for windows test and builds... Would we also need something else for linux? Travis CI possibly?

Broken web page status path?

Latest build gives this error:
WARNING:(sphere.ini,924)'scripts/spherestatusbase.html' not found... ERROR:(sphere.ini,924)Can't open web page input 'spherestatusbase1.htm' Sphere Version 0.56d-Nightly [Linux] by www.spherecommunity.net, compiled at May 24 2016 (17:01:07) [build 42 / GIT hash 43c45a0]

Line 924 in sphere.ini is:
WebPageSrc=scripts/web/spherestatusbase.html

Somehow its removing the 'web' from the path and saying its not found?
Works fine for the 10th April Pre-release

TOL New Trade System bugs

I've found 3 bugs on the new trade system:

1 - Current char name isn't showing properly on trade gump.

Example:
My char name: asd
Other char name: asdasd

Then I change the char names:
asd -> EXTREME
asdasd -> whatever

'EXTREME' open a trade with 'whatever' or vice-versa

Gump on 'EXTREME': 'asd' and 'whatever'
Gump on 'whatever': 'asdasd' and 'EXTREME'

2 - Suppose that I have 1 Platinum (in this case, I have exactly 1.000.000.000 gold). Then I try to give 50k of gold to the other char. Nothing happens.

3 - Suppose that I have 1 Platinum (exactly 1.000.000.000 gold) and I give 1 Platinum to other char: nothing happens.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.