Age | Commit message (Collapse) | Author | Files | Lines |
|
It seems like properly upgrading to Lua 5.3 would affect quite a few
small function calls, but fortunately compatibility can be achieved with
just a define for now.
|
|
- Deleted empty constructor rather than throwing, resulting in compiletime
errors rather than runtime errors.
- Removed some remainings of currentMana
- Fixed some compiler warnings regarding structs getting forward
declared as classes.
|
|
|
|
|
|
|
|
Was still checking for booleans and using the wrong stack indexes.
|
|
|
|
|
|
Allows to report access to removed entities instead of crashing.
|
|
We later need to check wether we still need this logic or whether we
rather want to remove it in favor of the quest system. But we need this
for sourceoftales for now.
|
|
I did this patch quite a while ago. Big thx to Stefan Beller for
"rebasing" it.
|
|
Now we do not have two character.cpp files in the repository.
|
|
Things done:
- Removed the equips table and added another column which keeps track about
whether the item is equipped or not
- Added a message to notify the client about failing equips instead of
hardcoding to chat notification
- Removed the move possibillity. It was a quite long function and our future
idea of the inventory does not need any moves
- Removed the inInventory and inEquipment parameters from chr_inv_count,
but added a equipped key to the table that chr_get_inventory returns
This change makes equipped items still being in the inventory. This means
in-inventory triggers are still active! However it makes no sense to disable
this triggers during equipping since it will appear as still in the inventory
to the client.
|
|
|
|
While on it I replaced the id usage in the server with the usage of the
AttributeInfo directly.
Next steps:
- Dehardcode the core attribute ids and store their
attributeinfos somewhere in AttributeManager (for now i simply
wrapped the ids with getAttributeInfo().
- Move AttributeInfo out of AttributeManager to shorten the usage + to
allow using a pointer in ModifierLocation without forward declaring
it.
|
|
|
|
|
|
I find this a lot more readable.
|
|
- Removed hardcoded using of attributes
- Simply introduced lua functions to set global and ability cooldowns
- Requires database update
- Bumps the protocol
|
|
Things done:
Wrote a entity:give_experience function (lua side only).
Renamed characterpoints to attributepoints (no db update. Did not want
to do one for a simple rename).
Temponary introduced a ATTR_LEVEL constant. TODO: dehardcode this.
Script binds for settings the correction and attribute points.
|
|
This removes support for skills. The plan is to allow to implement the skills
as they were implemented before via attributes. This adds a lot more
flexibility to the server creators while also removing the confusion about
skills and attributes.
So this change does:
- Remove the skillmanager with all its calls, the skill xml file, etc
- Move exp giving to the script engine:
--> Allows to implement the old behaviour (and more) in the scripts
- Remove the exp tag from the monster definition:
+ Since the server itself does not require it anymore it feels wrong to
require it for EVERY monster. TODO: Add a system to add properties to the
monsters/items.xml which allow defining things like the exp and allows to
read the value from the script engine.
+ Small drawback, but it should not be hard to implement this property
system.
- Drop the level networking and calculation.
+ level calculation will happen via the attribute system later but i would
prefer to do this in a seperate patch since this patch already got longer
than expected especially since this requires to make setting correction
points and available status points scriptable.
+ The level would be simply set as a attribute, the int number of it will be
the level, the remaining digits will be the % number till the next levelup.
- NOT remove any existing skill tables in the database update scripts.
+ There is no way to move them into the attribute table in a unified way
(there are too many different way they could have been used). So server
admins have to care about moving theirs skills to attributes themselves.
+ Keeping the old tables does not hurt for existing databases. So removing
does not give any advantage/is required anyway. The now obsolote info
about the EXP transaction is not removed for updated databases either.
(The update script basically only bumps the version number without doing
anything else.
- bump the network protocol version --> old clients won't be able to connect.
- bump the database version --> serveradmins need to update their db.
|
|
I did not adapt the scripts yet since we need some special handling for
the attributes which are required by the server directly. So you still
have to use the ids for those. I will change that later.
In the future I want to use the AttributeInfo class instead of the int
id everywhere possible. So I did a small start on that too.
|
|
|
|
|
|
|
|
It returns all monster classes in a id->monsterclass table.
|
|
Monsters can now either receive abilities at lifetime via scripts, or
via the <ability> node in the monsters node.
|
|
As a side effect i had to remove the monster attack AI for now. I will
readd this as next thing.
|
|
This allows to display hit messages in the client for abilities
|
|
Each ability can now define a cooldown that prevents the player from
using other abilities for a while. The time of this cooldown can be set
to any attribute. The modified value of the attribute is the value of
the cooldown in game ticks. The cooldown will be automatically started
if the ability has `autoconsume` set to true. Otherwise a script has to
call entity:cooldown_ability(ability).
|
|
This later allows monsters and characters to use this component.
|
|
This allows a lot more flexibility and makes stuff like magical items a
lot easier to implement. We will also use this for the attack system in
the future. So a attack (abilitiy) would simply depend on some value
like Agility (or a derived attribute from it). Which sets the recharge
speed.
The recharge speed is the modified value of the attribute per game tick.
|
|
On the one hand setSetName and setName could sound misleading in the qt
client patch i plan. On the otherhand i never really liked the name
"set". I think category is more general and obvious.
|
|
|
|
|
|
This way the scripts can add or replace existing member functions, which
can be useful. As demonstration chr_money and chr_money_change are now
added as Entity.money and Entity.change_money.
Also fixed the banker to use ask_number instead of ask_integer (I had
decided to rename this and apparently forgot the banker).
Mantis-issue: 503
Reviewed-by: Ablu
|
|
|
|
|
|
|
|
|
|
|
|
Thanks to Ablu for noticing.
|
|
It's not actually necessary.
|
|
Some functions were skipped for now because they may need a new name
or change of behavior. Changes:
chr_warp entity:warp
chr_get_inventory entity:inventory
chr_inv_change entity:inv_change
chr_inv_count entity:inv_count
chr_get_equipment entity:equipment
chr_equip_slot entity:equip_slot
chr_equip_item entity:equip_item
chr_unequip_slot entity:unequip_slot
chr_unequip_item entity:unequip_item
chr_get_level entity:level
chr_get_exp entity:xp
chr_give_exp entity:give_xp
chr_get_rights entity:rights
chr_set_hair_style entity:set_hair_style
chr_get_hair_style entity:hair_style
chr_set_hair_color entity:set_hair_color
chr_get_hair_color entity:hair_color
chr_get_kill_count entity:kill_count
chr_give_special entity:give_special
chr_has_special entity:has_special
chr_take_special entity:take_special
chr_set_special_recharge_speed entity:set_special_recharge_speed
chr_get_special_recharge_speed entity:special_recharge_speed
chr_set_special_mana entity:set_special_mana
chr_get_special_mana entity:special_mana
chr_kick entity:kick
exp_for_level xp_for_level
monster_get_id entity:monster_id
monster_change_anger entity:change_anger
monster_drop_anger entity:drop_anger
monster_get_angerlist entity:angerlist
being_apply_status entity:apply_status
being_remove_status entity:remove_status
being_has_status entity:has_status
being_set_status_time entity:set_status_time
being_get_status_time entity:status_time
being_get_gender entity:gender
being_set_gender entity:set_gender
being_type entity:type
being_walk entity:walk
being_say entity:say
being_damage entity:damage
being_heal entity:heal
being_get_name entity:name
being_get_action entity:action
being_set_action entity:set_action
being_get_direction entity:direction
being_set_direction entity:set_direction
being_apply_attribute_modifier entity:apply_attribute_modifier
being_remove_attribute_modifier entity:remove_attribute_modifier
being_set_base_attribute entity:set_base_attribute
being_get_modified_attribute entity:modified_attribute
being_get_base_attribute entity:base_attribute
being_set_walkmask entity:set_walkmask
being_get_walkmask entity:walkmask
being_get_mapid entity:mapid
chat_message entity:message
being_register entity:register
chr_shake_screen entity:shake_screen
chr_create_text_particle entity:show_text_particle
- entity:position
posX entity:x
posY entity:y
monster_get_name monsterclass:name
item_get_name itemclass:name
|
|
npc_message -> say
npc_choice -> ask
npc_ask_integer -> ask_number
npc_ask_string -> ask_string
npc_trade -> trade
|
|
These functions can only be used in the context of a character talking
to an NPC, so these parameters can be deduced from that context rather
than passing them explicitly all the time.
Simplifies NPC scripting.
|
|
Only moved a single script function to a member for now, will do others
in a separate commit.
|
|
|
|
This was the final step to remove the hierachy with Entity on the top.
|
|
I did not really care too much about staying consistent with the use of
static_casts to Actors since they are only temporary anyway until Actor
is a component too.
|