MaxMagicProtection=10; // Maximum protection can be gived by jewelry (clamp value), de 0 à 100 (pourcentage)
MaxMagicProtection=10; // Maximum protection can be gived by jewelry (clamp value), de 0 à 100 (pourcentage)
HominBaseProtection=10; // Homin base protection in generic magic damage type
HominBaseProtection=10; // Homin base protection in generic magic damage type
HominRacialProtection=10; // Homin base protection in racial magic damage type
HominRacialProtection=10; // Homin base protection in racial magic damage type
MaxAbsorptionFactor=10; // Factor used for compute maximum absorption gived by all jewel (100 = 1.0 factor (100%)) (Max absorbtion = sum(equiped jewels recommandeds) * factor)
MaxAbsorptionFactor=10; // Factor used for compute maximum absorption gived by all jewel (100 = 1.0 factor (100%)) (Max absorbtion = sum(equipped jewels recommandeds) * factor)
MaxMagicProtection=10; // Maximum protection can be gived by jewelry (clamp value), de 0 à 100 (pourcentage)
MaxMagicProtection=10; // Maximum protection can be gived by jewelry (clamp value), de 0 à 100 (pourcentage)
HominBaseProtection=10; // Homin base protection in generic magic damage type
HominBaseProtection=10; // Homin base protection in generic magic damage type
HominRacialProtection=10; // Homin base protection in racial magic damage type
HominRacialProtection=10; // Homin base protection in racial magic damage type
MaxAbsorptionFactor=10; // Factor used for compute maximum absorption gived by all jewel (100 = 1.0 factor (100%)) (Max absorbtion = sum(equiped jewels recommandeds) * factor)
MaxAbsorptionFactor=10; // Factor used for compute maximum absorption gived by all jewel (100 = 1.0 factor (100%)) (Max absorbtion = sum(equipped jewels recommandeds) * factor)
@ -2513,10 +2513,10 @@ NLMISC_COMMAND(displayFightSheet,"display the sheet","<sheet name>")
log.displayNL("value means the number of attacker sensitivity of the bot, equals to zero means the bot never mind the number of attackers on the target");
log.displayNL("value means the number of attacker sensitivity of the bot, equals to zero means the bot never mind the number of attackers on the target");
@ -21,7 +21,7 @@ The parsing is in fact done in 2 steps, and is not done the same in all services
The first step is common although not being done at the same time. It load the primitive file as a DOM document and check its XML validity and its content according to the world_editor_classes.xml file. In the EGS, this step is done at loading for all files declared in the common.cfg file. On the AIS, this is done after the service initialization, even after the service starts to tick, in commands in the config file. Thus a file can be loaded well after shard initialization while it is already running for a while.
The first step is common although not being done at the same time. It load the primitive file as a DOM document and check its XML validity and its content according to the world_editor_classes.xml file. In the EGS, this step is done at loading for all files declared in the common.cfg file. On the AIS, this is done after the service initialization, even after the service starts to tick, in commands in the config file. Thus a file can be loaded well after shard initialization while it is already running for a while.
The second step consist in interpreting that DOM tree loaded by the first step. This step differs greatly from one service to another. In the EGS, each manager (an EGS manager is a singleton which manage an aspect of the game) parses all primive files and extract the primitive nodes it needs. In the AIS, a special function is called just after the first step. That function parses the DOM tree and reacts to the nodes it encounters almost like a SAX parser. It extracts the current node informations (including its type, name, and eventually some simple field subnodes like its alias) and generates some NeL like commands, and then parses the primitive children. The commands are interpreted in a kind of state machine which constructs objects roughly reflecting the primitives.
The second step consist in interpreting that DOM tree loaded by the first step. This step differs greatly from one service to another. In the EGS, each manager (an EGS manager is a singleton which manage an aspect of the game) parses all primive files and extract the primitive nodes it needs. In the AIS, a special function is called just after the first step. That function parses the DOM tree and reacts to the nodes it encounters almost like a SAX parser. It extracts the current node information (including its type, name, and eventually some simple field subnodes like its alias) and generates some NeL like commands, and then parses the primitive children. The commands are interpreted in a kind of state machine which constructs objects roughly reflecting the primitives.
The main advantage of that method is that it's possible to cache a binary representation of the commands to speedup the loading of the AIS. The drawback is the complexity involved by this dual parsing scheme and the difficulty to modify it and add new primitive types.
The main advantage of that method is that it's possible to cache a binary representation of the commands to speedup the loading of the AIS. The drawback is the complexity involved by this dual parsing scheme and the difficulty to modify it and add new primitive types.
nlwarning("<CCharacter sellItem> character %s try to sell an equiped item %s, must not permited by client",_Id.toString().c_str(),sheet.toString().c_str());
nlwarning("<CCharacter sellItem> character %s try to sell an equipped item %s, must not permited by client",_Id.toString().c_str(),sheet.toString().c_str());