actual freya branch
This commit is contained in:
+11
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry including="**/*.java" kind="src" path="dist/game/data/scripts" />
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" />
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/L2J_Server" />
|
||||
<classpathentry kind="lib" path="/L2J_Server/lib/javolution-5.5.1.jar" />
|
||||
<classpathentry kind="lib" path="/L2J_Server/lib/mmocore.jar" />
|
||||
<classpathentry kind="lib" path="/L2J_Server/lib/netcon.jar" />
|
||||
<classpathentry kind="lib" path="/L2J_Server/lib/trove-2.1.0.jar" />
|
||||
<classpathentry kind="output" path="bin" />
|
||||
</classpath>
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
.project
|
||||
.classpath
|
||||
.idea/
|
||||
*.iml
|
||||
target/
|
||||
logs/
|
||||
log/
|
||||
test-output/
|
||||
hexid.txt
|
||||
|
||||
.vscode/
|
||||
Vendored
BIN
Binary file not shown.
-4
@@ -1,4 +0,0 @@
|
||||
wrapperVersion=3.3.4
|
||||
distributionType=script
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
|
||||
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.4/maven-wrapper-3.3.4.jar
|
||||
@@ -1,6 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding//src/test/java=UTF-8
|
||||
encoding//src/test/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
||||
@@ -1,4 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.apt.aptEnabled=true
|
||||
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations
|
||||
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations
|
||||
@@ -1,525 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
|
||||
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
|
||||
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
|
||||
org.eclipse.jdt.core.compiler.annotation.notowning=org.eclipse.jdt.annotation.NotOwning
|
||||
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
|
||||
org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
|
||||
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
|
||||
org.eclipse.jdt.core.compiler.annotation.owning=org.eclipse.jdt.annotation.Owning
|
||||
org.eclipse.jdt.core.compiler.annotation.resourceanalysis=disabled
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=25
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=25
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.APILeak=warning
|
||||
org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
|
||||
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deadCode=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
|
||||
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
|
||||
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
|
||||
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.incompatibleOwningContract=warning
|
||||
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.insufficientResourceAnalysis=warning
|
||||
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
|
||||
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
|
||||
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
|
||||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
|
||||
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLambdaParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
|
||||
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
|
||||
org.eclipse.jdt.core.compiler.processAnnotations=enabled
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=25
|
||||
org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns=false
|
||||
org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
|
||||
org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
|
||||
org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true
|
||||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
|
||||
org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
|
||||
org.eclipse.jdt.core.formatter.align_with_spaces=false
|
||||
org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=48
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_assertion_message=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_assignment=4
|
||||
org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_record_components=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=85
|
||||
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=84
|
||||
org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=48
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
|
||||
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false
|
||||
org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
|
||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
|
||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
|
||||
org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
|
||||
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_header=false
|
||||
org.eclipse.jdt.core.formatter.comment.format_html=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_source_code=true
|
||||
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
|
||||
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
|
||||
org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
|
||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert
|
||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
|
||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
|
||||
org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags=false
|
||||
org.eclipse.jdt.core.formatter.comment.line_length=300
|
||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
|
||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
||||
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
|
||||
org.eclipse.jdt.core.formatter.compact_else_if=true
|
||||
org.eclipse.jdt.core.formatter.continuation_indentation=1
|
||||
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1
|
||||
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
|
||||
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
|
||||
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
|
||||
org.eclipse.jdt.core.formatter.indent_empty_lines=true
|
||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
|
||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
|
||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
|
||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
|
||||
org.eclipse.jdt.core.formatter.indentation.size=4
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_label=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.join_line_comments=false
|
||||
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
|
||||
org.eclipse.jdt.core.formatter.join_wrapped_lines=false
|
||||
org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true
|
||||
org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
|
||||
org.eclipse.jdt.core.formatter.lineSplit=320
|
||||
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
|
||||
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
|
||||
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
|
||||
org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
|
||||
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
|
||||
org.eclipse.jdt.core.formatter.tabulation.char=tab
|
||||
org.eclipse.jdt.core.formatter.tabulation.size=4
|
||||
org.eclipse.jdt.core.formatter.text_block_indentation=0
|
||||
org.eclipse.jdt.core.formatter.use_on_off_tags=true
|
||||
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
|
||||
org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
|
||||
org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false
|
||||
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
|
||||
org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
|
||||
@@ -1,147 +0,0 @@
|
||||
cleanup.add_all=true
|
||||
cleanup.add_default_serial_version_id=false
|
||||
cleanup.add_generated_serial_version_id=true
|
||||
cleanup.add_missing_annotations=true
|
||||
cleanup.add_missing_deprecated_annotations=true
|
||||
cleanup.add_missing_methods=true
|
||||
cleanup.add_missing_nls_tags=false
|
||||
cleanup.add_missing_override_annotations=true
|
||||
cleanup.add_missing_override_annotations_interface_methods=true
|
||||
cleanup.add_serial_version_id=true
|
||||
cleanup.also_simplify_lambda=true
|
||||
cleanup.always_use_blocks=true
|
||||
cleanup.always_use_parentheses_in_expressions=true
|
||||
cleanup.always_use_this_for_non_static_field_access=false
|
||||
cleanup.always_use_this_for_non_static_method_access=false
|
||||
cleanup.array_with_curly=false
|
||||
cleanup.arrays_fill=false
|
||||
cleanup.bitwise_conditional_expression=false
|
||||
cleanup.boolean_literal=true
|
||||
cleanup.boolean_value_rather_than_comparison=true
|
||||
cleanup.break_loop=false
|
||||
cleanup.collection_cloning=false
|
||||
cleanup.comparing_on_criteria=false
|
||||
cleanup.comparison_statement=true
|
||||
cleanup.controlflow_merge=false
|
||||
cleanup.convert_functional_interfaces=true
|
||||
cleanup.convert_to_enhanced_for_loop=true
|
||||
cleanup.convert_to_enhanced_for_loop_if_loop_var_used=true
|
||||
cleanup.convert_to_switch_expressions=true
|
||||
cleanup.correct_indentation=false
|
||||
cleanup.do_while_rather_than_while=true
|
||||
cleanup.double_negation=true
|
||||
cleanup.else_if=false
|
||||
cleanup.embedded_if=false
|
||||
cleanup.evaluate_nullable=false
|
||||
cleanup.extract_increment=false
|
||||
cleanup.format_source_code=true
|
||||
cleanup.format_source_code_changes_only=false
|
||||
cleanup.hash=false
|
||||
cleanup.if_condition=true
|
||||
cleanup.insert_inferred_type_arguments=false
|
||||
cleanup.instanceof=true
|
||||
cleanup.instanceof_keyword=true
|
||||
cleanup.invert_equals=false
|
||||
cleanup.join=true
|
||||
cleanup.lazy_logical_operator=true
|
||||
cleanup.make_local_variable_final=false
|
||||
cleanup.make_parameters_final=false
|
||||
cleanup.make_private_fields_final=true
|
||||
cleanup.make_type_abstract_if_missing_method=false
|
||||
cleanup.make_variable_declarations_final=true
|
||||
cleanup.map_cloning=false
|
||||
cleanup.merge_conditional_blocks=false
|
||||
cleanup.multi_catch=false
|
||||
cleanup.never_use_blocks=false
|
||||
cleanup.never_use_parentheses_in_expressions=false
|
||||
cleanup.no_string_creation=true
|
||||
cleanup.no_super=true
|
||||
cleanup.number_suffix=false
|
||||
cleanup.objects_equals=false
|
||||
cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=false
|
||||
cleanup.operand_factorization=false
|
||||
cleanup.organize_imports=true
|
||||
cleanup.overridden_assignment=false
|
||||
cleanup.overridden_assignment_move_decl=true
|
||||
cleanup.plain_replacement=true
|
||||
cleanup.precompile_regex=true
|
||||
cleanup.primitive_comparison=true
|
||||
cleanup.primitive_parsing=true
|
||||
cleanup.primitive_rather_than_wrapper=true
|
||||
cleanup.primitive_serialization=true
|
||||
cleanup.pull_out_if_from_if_else=true
|
||||
cleanup.pull_up_assignment=false
|
||||
cleanup.push_down_negation=false
|
||||
cleanup.qualify_static_field_accesses_with_declaring_class=false
|
||||
cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
|
||||
cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
|
||||
cleanup.qualify_static_member_accesses_with_declaring_class=true
|
||||
cleanup.qualify_static_method_accesses_with_declaring_class=false
|
||||
cleanup.reduce_indentation=false
|
||||
cleanup.redundant_comparator=true
|
||||
cleanup.redundant_falling_through_block_end=false
|
||||
cleanup.remove_private_constructors=true
|
||||
cleanup.remove_redundant_modifiers=true
|
||||
cleanup.remove_redundant_semicolons=true
|
||||
cleanup.remove_redundant_type_arguments=true
|
||||
cleanup.remove_trailing_whitespaces=false
|
||||
cleanup.remove_trailing_whitespaces_all=true
|
||||
cleanup.remove_trailing_whitespaces_ignore_empty=true
|
||||
cleanup.remove_unnecessary_array_creation=false
|
||||
cleanup.remove_unnecessary_casts=true
|
||||
cleanup.remove_unnecessary_nls_tags=true
|
||||
cleanup.remove_unused_imports=true
|
||||
cleanup.remove_unused_local_variables=true
|
||||
cleanup.remove_unused_method_parameters=false
|
||||
cleanup.remove_unused_private_fields=true
|
||||
cleanup.remove_unused_private_members=true
|
||||
cleanup.remove_unused_private_methods=true
|
||||
cleanup.remove_unused_private_types=true
|
||||
cleanup.return_expression=false
|
||||
cleanup.simplify_lambda_expression_and_method_ref=true
|
||||
cleanup.single_used_field=false
|
||||
cleanup.sort_members=false
|
||||
cleanup.sort_members_all=false
|
||||
cleanup.standard_comparison=false
|
||||
cleanup.static_inner_class=true
|
||||
cleanup.strictly_equal_or_different=false
|
||||
cleanup.stringbuffer_to_stringbuilder=true
|
||||
cleanup.stringbuilder=true
|
||||
cleanup.stringbuilder_for_local_vars=true
|
||||
cleanup.stringconcat_stringbuffer_stringbuilder=false
|
||||
cleanup.stringconcat_to_textblock=false
|
||||
cleanup.substring=true
|
||||
cleanup.switch=false
|
||||
cleanup.system_property=false
|
||||
cleanup.system_property_boolean=false
|
||||
cleanup.system_property_file_encoding=false
|
||||
cleanup.system_property_file_separator=false
|
||||
cleanup.system_property_line_separator=false
|
||||
cleanup.system_property_path_separator=false
|
||||
cleanup.ternary_operator=false
|
||||
cleanup.try_with_resource=false
|
||||
cleanup.unlooped_while=false
|
||||
cleanup.unreachable_block=false
|
||||
cleanup.use_anonymous_class_creation=false
|
||||
cleanup.use_autoboxing=false
|
||||
cleanup.use_blocks=true
|
||||
cleanup.use_blocks_only_for_return_and_throw=false
|
||||
cleanup.use_directly_map_method=true
|
||||
cleanup.use_lambda=true
|
||||
cleanup.use_parentheses_in_expressions=true
|
||||
cleanup.use_string_is_blank=true
|
||||
cleanup.use_this_for_non_static_field_access=true
|
||||
cleanup.use_this_for_non_static_field_access_only_if_necessary=true
|
||||
cleanup.use_this_for_non_static_method_access=true
|
||||
cleanup.use_this_for_non_static_method_access_only_if_necessary=true
|
||||
cleanup.use_unboxing=false
|
||||
cleanup.use_var=false
|
||||
cleanup.useless_continue=false
|
||||
cleanup.useless_return=false
|
||||
cleanup.valueof_rather_than_instantiation=true
|
||||
cleanup_profile=_L2J Clean Up v0.5
|
||||
cleanup_settings_version=2
|
||||
eclipse.preferences.version=1
|
||||
formatter_profile=_L2J Formatter v0.9
|
||||
formatter_settings_version=23
|
||||
org.eclipse.jdt.ui.text.custom_code_templates=
|
||||
@@ -1,4 +0,0 @@
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry excluding="**/.svn/*|.svn" kind="src" path="java" />
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" />
|
||||
<classpathentry kind="lib" path="lib/c3p0-0.9.2-pre1.jar" />
|
||||
<classpathentry kind="lib" path="lib/javolution-5.5.1.jar" />
|
||||
<classpathentry kind="lib" path="lib/jython.jar" />
|
||||
<classpathentry kind="lib" path="lib/jython-engine-2.2.1.jar" />
|
||||
<classpathentry kind="lib" path="lib/mchange-commons-0.2.jar" />
|
||||
<classpathentry kind="lib" path="lib/mmocore.jar" />
|
||||
<classpathentry kind="lib" path="lib/netcon.jar" />
|
||||
<classpathentry kind="lib" path="lib/trove-2.1.0.jar" />
|
||||
<classpathentry kind="output" path="bin" />
|
||||
</classpath>
|
||||
@@ -0,0 +1,2 @@
|
||||
/bin/
|
||||
/build/
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>L2J_Server</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
||||
@@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
line.separator=\r\n
|
||||
@@ -0,0 +1,390 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.codeComplete.argumentPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.argumentSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.fieldPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.fieldSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.localPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.localSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
|
||||
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
|
||||
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
|
||||
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deadCode=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
|
||||
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
|
||||
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
|
||||
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
|
||||
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
|
||||
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
|
||||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
|
||||
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
|
||||
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=48
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_assignment=4
|
||||
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=49
|
||||
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=85
|
||||
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=48
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
|
||||
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
|
||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
|
||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_header=false
|
||||
org.eclipse.jdt.core.formatter.comment.format_html=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_source_code=true
|
||||
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
|
||||
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
|
||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert
|
||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
|
||||
org.eclipse.jdt.core.formatter.comment.line_length=300
|
||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
|
||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
||||
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
|
||||
org.eclipse.jdt.core.formatter.compact_else_if=true
|
||||
org.eclipse.jdt.core.formatter.continuation_indentation=1
|
||||
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1
|
||||
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
|
||||
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
|
||||
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
|
||||
org.eclipse.jdt.core.formatter.indent_empty_lines=true
|
||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
|
||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
|
||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
|
||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
|
||||
org.eclipse.jdt.core.formatter.indentation.size=4
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
|
||||
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
|
||||
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true
|
||||
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.lineSplit=300
|
||||
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
|
||||
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
|
||||
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
|
||||
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
|
||||
org.eclipse.jdt.core.formatter.tabulation.char=tab
|
||||
org.eclipse.jdt.core.formatter.tabulation.size=4
|
||||
org.eclipse.jdt.core.formatter.use_on_off_tags=true
|
||||
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
|
||||
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
|
||||
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,3 @@
|
||||
eclipse.preferences.version=1
|
||||
task-tags/enabled=true
|
||||
task-tags/use-project-settings=true
|
||||
@@ -0,0 +1,12 @@
|
||||
DELEGATES_PREFERENCE=delegateValidatorList
|
||||
USER_BUILD_PREFERENCE=enabledBuildValidatorList
|
||||
USER_MANUAL_PREFERENCE=enabledManualValidatorList
|
||||
USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.400.v201204260100
|
||||
eclipse.preferences.version=1
|
||||
override=true
|
||||
suspend=false
|
||||
vals/org.eclipse.wst.dtd.core.dtdDTDValidator/global=FF01
|
||||
vals/org.eclipse.wst.html.core.HTMLValidator/global=FF01
|
||||
vals/org.eclipse.wst.html.ui.HTMLValidator/global=TF01
|
||||
vals/org.eclipse.wst.xml.core.xml/groups=0107include05111contentType128org.eclipse.core.runtime.xmlT111contentType134org.eclipse.wst.xml.core.xmlsourceT111contentType134org.eclipse.wst.xml.core.xslsourceT111contentType134org.eclipse.jst.jsp.core.tldsourceT07fileext03xmlF0107exclude08113projectNature134org.eclipse.jst.j2ee.ejb.EJBNature113projectNature130org.eclipse.jst.j2ee.EARNature04file08.projectT0104file110.classpathT0104file110.settings/T0204file03binF0204file05buildF0204file09build.xmlF01
|
||||
vf.version=3
|
||||
@@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="L2J_Server" default="dist" basedir=".">
|
||||
<description>
|
||||
This script will build the L2J Server.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
02111-1307, USA.
|
||||
|
||||
http://www.gnu.org/copyleft/gpl.html
|
||||
</description>
|
||||
|
||||
<property name="src" location="java" />
|
||||
<property name="lib" location="lib" />
|
||||
<property name="build" location="build" />
|
||||
<property name="build.classes" location="${build}/classes" />
|
||||
<property name="build.dist" location="${build}/dist" />
|
||||
<property name="build.dist.doc" location="${build.dist}/doc" />
|
||||
<property name="build.dist.game" location="${build.dist}/game" />
|
||||
<property name="build.dist.libs" location="${build.dist}/libs" />
|
||||
<property name="build.dist.login" location="${build.dist}/login" />
|
||||
|
||||
<path id="classpath">
|
||||
<fileset dir="${lib}">
|
||||
<include name="*.jar" />
|
||||
</fileset>
|
||||
</path>
|
||||
|
||||
<pathconvert property="manifest.libs" pathsep=" ">
|
||||
<path refid="classpath" />
|
||||
<mapper>
|
||||
<chainedmapper>
|
||||
<flattenmapper />
|
||||
<globmapper from="*.jar" to="../libs/*.jar" />
|
||||
</chainedmapper>
|
||||
</mapper>
|
||||
</pathconvert>
|
||||
|
||||
<target name="init" depends="clean,checkRequirements" description="Create the output directories.">
|
||||
<mkdir dir="${build}" />
|
||||
<mkdir dir="${build.classes}" />
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="init" description="Compile the source.">
|
||||
<javac destdir="${build.classes}" compiler="javac1.8" debug="true" debuglevel="lines,vars,source" includeantruntime="false" source="1.8" target="1.8">
|
||||
<src path="${src}" />
|
||||
<classpath refid="classpath" />
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<target name="jar" depends="compile" description="Create the jar files">
|
||||
<jar destfile="${build.dist.login}/l2jlogin.jar">
|
||||
<fileset dir="${build.classes}">
|
||||
<exclude name="**/gameserver/**" />
|
||||
</fileset>
|
||||
<manifest>
|
||||
<attribute name="Built-By" value="${user.name}" />
|
||||
<attribute name="Built-Date" value="${build.tstamp}" />
|
||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||
<attribute name="Implementation-URL" value="http://www.l2jserver.com/" />
|
||||
<attribute name="Implementation-Version" value="${l2j.version}" />
|
||||
<attribute name="Main-Class" value="com.l2jserver.loginserver.L2LoginServer" />
|
||||
</manifest>
|
||||
</jar>
|
||||
<jar destfile="${build.dist.game}/l2jserver.jar">
|
||||
<fileset dir="${build.classes}">
|
||||
<exclude name="**/loginserver/**" />
|
||||
<exclude name="**/accountmanager/**" />
|
||||
<exclude name="**/gsregistering/**" />
|
||||
</fileset>
|
||||
<manifest>
|
||||
<attribute name="Built-By" value="${user.name}" />
|
||||
<attribute name="Built-Date" value="${build.tstamp}" />
|
||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||
<attribute name="Implementation-URL" value="http://www.l2jserver.com/" />
|
||||
<attribute name="Implementation-Version" value="${l2j.version}" />
|
||||
<attribute name="Main-Class" value="com.l2jserver.gameserver.GameServer" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="dist" depends="jar">
|
||||
<copy todir="${build.dist}">
|
||||
<fileset dir="dist" />
|
||||
</copy>
|
||||
<concat destfile="${build.dist.doc}/L2J_Server_CHANGELOG.txt">${l2j.changelog}</concat>
|
||||
<copy todir="${build.dist.game}">
|
||||
<fileset dir="misc" />
|
||||
</copy>
|
||||
<concat destfile="${build.dist.game}/config/l2j-version.properties">version=${l2j.version}${line.separator}builddate=${build.tstamp}</concat>
|
||||
<copy todir="${build.dist.libs}">
|
||||
<fileset dir="lib" />
|
||||
</copy>
|
||||
<copy todir="${build.dist.login}">
|
||||
<fileset dir="misc" />
|
||||
</copy>
|
||||
<fixcrlf srcdir="${build.dist.game}" eol="crlf" eof="remove" includes="**/*.bat" />
|
||||
<fixcrlf srcdir="${build.dist.game}" eol="lf" eof="remove" includes="**/*.sh" />
|
||||
<fixcrlf srcdir="${build.dist.login}" eol="crlf" eof="remove" includes="**/*.bat" />
|
||||
<fixcrlf srcdir="${build.dist.login}" eol="lf" eof="remove" includes="**/*.sh" />
|
||||
|
||||
<tstamp>
|
||||
<format property="build.date" pattern="yyyy-MM-dd" />
|
||||
</tstamp>
|
||||
|
||||
<zip destfile="${build}/L2J_Server_${build.date}.zip" basedir="${build.dist}" />
|
||||
</target>
|
||||
|
||||
<target name="clean" description="Remove the output directories">
|
||||
<delete dir="${build}" />
|
||||
</target>
|
||||
|
||||
<target name="checkRequirements" description="Check Requirements">
|
||||
<fail message="Ant 1.8.2 is required. But your version is ${ant.version}">
|
||||
<condition>
|
||||
<not>
|
||||
<antversion atleast="1.8.2" />
|
||||
</not>
|
||||
</condition>
|
||||
</fail>
|
||||
<available classname="java.util.stream.Stream" property="JDK8.present" />
|
||||
<fail unless="JDK8.present" message="Java 1.8 is required. But your version is Java ${ant.java.version} and probably JDK is not installed." />
|
||||
</target>
|
||||
</project>
|
||||
+674
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
+292
@@ -0,0 +1,292 @@
|
||||
NOTE: This short guide is for a L2J Server. http://l2jserver.com
|
||||
|
||||
If you received this file as a part of a packaged or bundled build:
|
||||
|
||||
L2J only supports L2J software obtained directly from L2J sources.
|
||||
|
||||
What this means is, if you obtained L2J from a source other than our SVN or nightly distribution,
|
||||
you need to get support from where you got the files.
|
||||
We are unable to provide any technical assistance for unsupported software packages.
|
||||
The software may have viruses, cause security problems,
|
||||
or even send your personal information to remote servers without your express consent.
|
||||
We cannot recommend the use of any of these packages on a server.
|
||||
|
||||
WARNING: L2J Server is not a plug and play type of server.
|
||||
To setup the server and to run it successfully you need to do a lot of reading.
|
||||
If reading and learning are not something you like to do,
|
||||
Stop now.
|
||||
|
||||
====================
|
||||
L2J Server
|
||||
====================
|
||||
$Date: 2010/01/06 13:12:11 $
|
||||
|
||||
TOC:
|
||||
I. OVERVIEW
|
||||
II. LEGAL
|
||||
III. REQUIREMENTS
|
||||
IV. FIRST STARTUP
|
||||
V. ADMIN/GM's GUIDE
|
||||
VI. PLAYER's GUIDE
|
||||
VII. UPDATING
|
||||
VIII. TROUBLESHOOTING
|
||||
IX. CONTACT
|
||||
X. CONTRIBUTING
|
||||
XI. BUG REPORTING
|
||||
XII. CREDITS
|
||||
|
||||
|
||||
|
||||
====================
|
||||
I. OVERVIEW
|
||||
====================
|
||||
|
||||
L2J is an Alternative Lineage 2 Game Server written in pure Java for
|
||||
best compatibility. L2J gives you the possibility to legally host a game
|
||||
server for this popular Korean MMO created by NCSoft. It is still
|
||||
unfinished and many features are missing, but L2J Dev team is working
|
||||
hard on implementing them. L2J Server is distributed under the terms
|
||||
of GNU/GPL in a hope that open source model is the best for
|
||||
developing quality software giving everyone a possibility to
|
||||
participate on development by submitting the code.
|
||||
|
||||
|
||||
====================
|
||||
II. LEGAL
|
||||
====================
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA.
|
||||
|
||||
Full GNU/GPL License is included in LICENSE.TXT file.
|
||||
|
||||
Whereas L2J is distributed under the terms of GNU/GPL, we require you to:
|
||||
a) Preserve login notice. This gives us, L2J Developers, appropriate
|
||||
credit for our hard work done during our free time without any
|
||||
revenues.
|
||||
|
||||
b) Do not distribute any extended data files with the server files in
|
||||
the same archive. NO world content should be incorporated in L2J
|
||||
distribution.
|
||||
Server and Datapack may not be not be bundled or packaged.
|
||||
|
||||
====================
|
||||
III. REQUIREMENTS
|
||||
====================
|
||||
|
||||
OS:
|
||||
Any OS having Java JDK 1.6 installed and properly configured!
|
||||
We recommend using SUN JDK available at java.sun.com
|
||||
|
||||
Hardware:
|
||||
Decent CPU & RAM
|
||||
|
||||
Software:
|
||||
Java JDK 1.6
|
||||
MySql
|
||||
Datapack
|
||||
|
||||
We recommend:
|
||||
That you do not play and host the server from the same computer.
|
||||
Have a good Internet connection - dial up just won't cut it.
|
||||
Many low cost hosting options are available.
|
||||
|
||||
====================
|
||||
IV. FIRST STARTUP
|
||||
====================
|
||||
|
||||
Before you can start up the server it is extremely important to read
|
||||
and get to know the wiki sites.
|
||||
They contain all the info you need to setup and run a L2J Server.
|
||||
|
||||
L2J Server wiki: Server Guides, How-to's, bugtracker:
|
||||
https://www.l2jserver.com/trac/wiki
|
||||
|
||||
L2J-Datapack wiki: Datapack Guides, How-to's, bugtracker:
|
||||
http://www.l2jdp.com/trac/wiki
|
||||
|
||||
This Server distribution does not contain any spawn/drop data or any world
|
||||
content. (Datapack)
|
||||
|
||||
L2J Server has also a possibility to change exp/sp/drop rates relative
|
||||
to data in spawnlist/droplist files. To do that, just change the rates
|
||||
you need in server.properties file found in config folder.
|
||||
|
||||
You should also configure your IP address in server.properties.
|
||||
|
||||
Server uses ports 2106 (LoginServer) and 7777 (GameServer) by
|
||||
default. If your server runs behind NAT or firewall you will need to
|
||||
open and/or forward these ports.
|
||||
|
||||
|
||||
====================
|
||||
V. ADMIN/GM's GUIDE
|
||||
====================
|
||||
|
||||
To make someone an admin you need to edit, in the l2jdb database, the desired character in the
|
||||
characters table, while server is SHUT DOWN! Change the field, accesslevel from 0 to 100 or more.
|
||||
You may start server after that and the person will have admin privileges.
|
||||
Note that you must create the account and character before editing.
|
||||
|
||||
Possible access levels:
|
||||
-100 = banned
|
||||
0 = normal account/character
|
||||
51 or more = exempt from maximum connections limit (accounts table only)
|
||||
100 or more = admin
|
||||
|
||||
More info can be found in the community wiki.
|
||||
|
||||
Admin commands implemented:
|
||||
(Please see https://l2jserver.com/trac/wiki/GmCommands for more complete list.)
|
||||
//admin = main GM interface
|
||||
//gmchat = will send a message to all online GMs
|
||||
//invul = makes your character untouchable
|
||||
|
||||
====================
|
||||
VI. PLAYER's GUIDE
|
||||
====================
|
||||
|
||||
CLIENT COMPATIBILITY
|
||||
Our server is dependent on the official release of the North American lineage2 live client.
|
||||
http://www.lineage2.com
|
||||
All help and support will only be for the official client.
|
||||
Any clients obtained elsewhere, must obtain support from where it was obtained.
|
||||
|
||||
====================
|
||||
VI. UPDATING
|
||||
====================
|
||||
It may arrive that you want to update your server to new version while
|
||||
keeping old accounts. There are few steps you HAVE TO do in order to
|
||||
keep the data accurate.
|
||||
|
||||
- You should ALWAYS look at timelines before updating, sometimes a file
|
||||
format may change, so you will need to edit data manually to fit with
|
||||
new format.
|
||||
- You should ALWAYS Backup all MySql data.
|
||||
- You should ALWAYS Backup all Server and Datapack files.
|
||||
- back up all .properties files (don't forget to check if new server use same
|
||||
format for those files)
|
||||
- download & unzip new server code to the Server directory
|
||||
- download & unzip new datapack code to the Server directory
|
||||
- edit and run update in the tools folder
|
||||
- run newly installed server & enjoy ;)
|
||||
|
||||
|
||||
====================
|
||||
VIII. TROUBLESHOOTING
|
||||
====================
|
||||
|
||||
PROBLEM
|
||||
- Client outputs bunch of messages about missing templates.
|
||||
SOLUTION
|
||||
- Check that the datapack has been properly installed.
|
||||
|
||||
PROBLEM
|
||||
- Message similar to "java is not recognized as internal command",
|
||||
"java not found" or "unknown command: java" appears.
|
||||
SOLUTION
|
||||
- Install java, or, if java is already installed just add your java
|
||||
binary directory to system PATH setting. If you don't know how to do
|
||||
that, than DO NOT bother running your own server please.
|
||||
|
||||
PROBLEM
|
||||
- I can log in but ping is 9999s and I can't get past Server Select.
|
||||
SOLUTION
|
||||
- Set up your IP's properly, forward/open good ports if accessing from
|
||||
outside. (or find server with admin that knows how to do it)
|
||||
|
||||
PROBLEM
|
||||
- Skills/quests/whatever don't work.
|
||||
SOLUTION
|
||||
- Patience brings it's fruits :p
|
||||
|
||||
PROBLEM
|
||||
- I found a bug.
|
||||
SOLUTION
|
||||
- Please refer to BUG REPORTING section of this read-me.
|
||||
|
||||
Further help available at the wiki sites and the forums.
|
||||
|
||||
|
||||
====================
|
||||
IX. CONTACT
|
||||
====================
|
||||
|
||||
Website: http://www.l2jserver.com
|
||||
Forum: http://www.l2jserver.com/forum
|
||||
IRC: #l2j @ Freenode (irc.freenode.net)
|
||||
|
||||
Please note that L2J Devs can't help players with connecting issues or
|
||||
anything related to playing on private servers. If you can't connect,
|
||||
you should contact your server GM's. We can solve only L2J server
|
||||
~software~ related issues. We don't have any backdoors or anything
|
||||
that would enable us GM accounts on every server using L2J, so there's
|
||||
no point in coming to our channel if you need items/adena/whatever
|
||||
ingame.
|
||||
|
||||
|
||||
====================
|
||||
X. CONTRIBUTING
|
||||
====================
|
||||
|
||||
Anyone who wants to contribute to the project is encouraged to do so. Java
|
||||
programming skills are not always required as L2J needs much more than
|
||||
java code.
|
||||
|
||||
If you created any source code that may be helpful please use the User Contributions
|
||||
section on our forums. If you contributed good stuff that will be
|
||||
accepted, you might be invited to join L2J Dev Team.
|
||||
|
||||
People willing to hang on chat and respond to user questions are also
|
||||
ALWAYS welcome ;)
|
||||
|
||||
|
||||
====================
|
||||
XI. BUG REPORTING
|
||||
====================
|
||||
|
||||
Bugs can be reported on our wiki site.
|
||||
http://l2jserver.com/trac/newticket
|
||||
Basic rules for reporting are:
|
||||
Please report only one bug/issue per ticket!!
|
||||
You must include the revision (changeset) number when reporting a bug!
|
||||
"The latest" does not mean anything when 5 more updates have been done since you set up the server.
|
||||
If you are not sure if it should be reported here, make a post about it in the L2J forum.
|
||||
|
||||
Players should ALWAYS consult bugs with their Admin/GM's and have them report it
|
||||
on our wiki site. Some bugs may be caused by bad datapack, server
|
||||
installation or modifications server owner has made. We can't help you
|
||||
in that case.
|
||||
|
||||
Please use the datapacks bugtracker for reporting datapack bugs.
|
||||
Please do NOT report bugs related to unofficial add-ons to L2J. L2J
|
||||
bugtracker is NOT a place to fix that. Contact the person who made
|
||||
modification instead.
|
||||
|
||||
|
||||
====================
|
||||
XII. CREDITS
|
||||
====================
|
||||
|
||||
Dev team:
|
||||
http://www.l2jserver.com/forum/memberlist.php?mode=leaders
|
||||
|
||||
Have fun playing L2J ;)
|
||||
Dev Team
|
||||
|
||||
L2J Server, Copyright (C) 2006-2010
|
||||
L2J Server comes with ABSOLUTELY NO WARRANTY.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions.
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
Copyright (c) 2006, Sun Microsystems, Inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
- Neither the name of the Sun Microsystems, Inc. nor the names of
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
||||
Vendored
+502
@@ -0,0 +1,502 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
|
||||
<title>About</title>
|
||||
</head>
|
||||
<body lang="EN-US">
|
||||
<h2>About This Content</h2>
|
||||
|
||||
<p>June 2, 2006</p>
|
||||
<h3>License</h3>
|
||||
|
||||
<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
|
||||
indicated below, the Content is provided to you under the terms and conditions of the
|
||||
Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
|
||||
at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
|
||||
For purposes of the EPL, "Program" will mean the Content.</p>
|
||||
|
||||
<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
|
||||
being redistributed by another party ("Redistributor") and different terms and conditions may
|
||||
apply to your use of any object code in the Content. Check the Redistributor's license that was
|
||||
provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
|
||||
indicated below, the terms and conditions of the EPL still apply to any source code in the Content
|
||||
and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
Copyright (c) 2006, Sun Microsystems, Inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
- Neither the name of the Sun Microsystems, Inc. nor the names of
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Javolution - Java(tm) Solution for Real-Time and Embedded Systems
|
||||
* Copyright (c) 2005-2009, Javolution (http://javolution.org/)
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
Copyright (c) 2006, Sun Microsystems, Inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
- Neither the name of the Sun Microsystems, Inc. nor the names of
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
||||
+191
@@ -0,0 +1,191 @@
|
||||
====================================
|
||||
The Jython License
|
||||
====================================
|
||||
|
||||
|
||||
A. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING JYTHON
|
||||
==============================================================================================================
|
||||
|
||||
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||
----------------------------------------------------------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
||||
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
||||
otherwise using this software ("Jython") in source or binary form and
|
||||
its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, PSF
|
||||
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
||||
license to reproduce, analyze, test, perform and/or display publicly,
|
||||
prepare derivative works, distribute, and otherwise use Jython alone
|
||||
or in any derivative version, provided, however, that PSF's License
|
||||
Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2007
|
||||
Python Software Foundation; All Rights Reserved" are retained in
|
||||
Jython alone or in any derivative version prepared by Licensee.
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Jython or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Jython.
|
||||
|
||||
4. PSF is making Jython available to Licensee on an "AS IS"
|
||||
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF JYTHON WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF JYTHON
|
||||
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING JYTHON,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. Nothing in this License Agreement shall be deemed to create any
|
||||
relationship of agency, partnership, or joint venture between PSF and
|
||||
Licensee. This License Agreement does not grant permission to use PSF
|
||||
trademarks or trade name in a trademark sense to endorse or promote
|
||||
products or services of Licensee, or any third party.
|
||||
|
||||
8. By copying, installing or otherwise using Jython, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
Jython 2.0, 2.1 License
|
||||
--------------------------------------------
|
||||
|
||||
Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Jython Developers
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
|
||||
- Neither the name of the Jython Developers nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
|
||||
|
||||
JPython 1.1.x Software License.
|
||||
______________________________________________________________________
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Corporation for National Research
|
||||
Initiatives, having an office at 1895 Preston White Drive, Reston, VA
|
||||
20191 ("CNRI"), and the Individual or Organization ("Licensee")
|
||||
accessing and using JPython version 1.1.x in source or binary form and
|
||||
its associated documentation as provided herein ("Software").
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, CNRI
|
||||
hereby grants Licensee a non-exclusive, non-transferable, royalty-free,
|
||||
world-wide license to reproduce, analyze, test, perform and/or display
|
||||
publicly, prepare derivative works, distribute, and otherwise use the
|
||||
Software alone or in any derivative version, provided, however, that
|
||||
CNRI's License Agreement and CNRI's notice of copyright, i.e.,
|
||||
"Copyright ©1996-1999 Corporation for National Research Initiatives;
|
||||
All Rights Reserved" are both retained in the Software, alone or in any
|
||||
derivative version prepared by Licensee.
|
||||
|
||||
Alternatively, in lieu of CNRI's License Agreement, Licensee may
|
||||
substitute the following text (omitting the quotes), provided, however,
|
||||
that such text is displayed prominently in the Software alone or in any
|
||||
derivative version prepared by Licensee: "JPython (Version 1.1.x) is
|
||||
made available subject to the terms and conditions in CNRI's License
|
||||
Agreement. This Agreement may be located on the Internet using the
|
||||
following unique, persistent identifier (known as a handle):
|
||||
1895.22/1006. The License may also be obtained from a proxy server on
|
||||
the Web using the following URL: http://hdl.handle.net/1895.22/1006."
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on or
|
||||
incorporates the Software or any part thereof, and wants to make the
|
||||
derivative work available to the public as provided herein, then
|
||||
Licensee hereby agrees to indicate in any such work, in a prominently
|
||||
visible way, the nature of the modifications made to CNRI's Software.
|
||||
|
||||
4. Licensee may not use CNRI trademarks or trade name, including JPython
|
||||
or CNRI, in a trademark sense to endorse or promote products or
|
||||
services of Licensee, or any third party. Licensee may use the mark
|
||||
JPython in connection with Licensee's derivative versions that are
|
||||
based on or incorporate the Software, but only in the form
|
||||
"JPython-based ___________________," or equivalent.
|
||||
|
||||
5. CNRI is making the Software available to Licensee on an "AS IS" basis.
|
||||
CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY
|
||||
OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY
|
||||
REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY
|
||||
PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE
|
||||
ANY THIRD PARTY RIGHTS.
|
||||
|
||||
6. CNRI SHALL NOT BE LIABLE TO LICENSEE OR OTHER USERS OF THE SOFTWARE FOR
|
||||
ANY INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
|
||||
USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE
|
||||
THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME STATES DO NOT
|
||||
ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY SO THE ABOVE DISCLAIMER
|
||||
MAY NOT APPLY TO LICENSEE.
|
||||
|
||||
7. This License Agreement may be terminated by CNRI (i) immediately upon
|
||||
written notice from CNRI of any material breach by the Licensee, if the
|
||||
nature of the breach is such that it cannot be promptly remedied; or
|
||||
(ii) sixty (60) days following notice from CNRI to Licensee of a
|
||||
material remediable breach, if Licensee has not remedied such breach
|
||||
within that sixty-day period.
|
||||
|
||||
8. This License Agreement shall be governed by and interpreted in all
|
||||
respects by the law of the State of Virginia, excluding conflict of law
|
||||
provisions. Nothing in this Agreement shall be deemed to create any
|
||||
relationship of agency, partnership, or joint venture between CNRI and
|
||||
Licensee.
|
||||
|
||||
9. By clicking on the "ACCEPT" button where indicated, or by installing,
|
||||
copying or otherwise using the Software, Licensee agrees to be bound by
|
||||
the terms and conditions of this License Agreement.
|
||||
|
||||
[ACCEPT BUTTON]
|
||||
|
||||
B. HISTORY OF THE SOFTWARE
|
||||
=======================================================
|
||||
|
||||
JPython was created in late 1997 by Jim Hugunin. Jim was also the
|
||||
primary developer while he was at CNRI. In February 1999 Barry Warsaw
|
||||
took over as primary developer and released JPython version 1.1.
|
||||
|
||||
In October 2000 Barry helped move the software to SourceForge
|
||||
where it was renamed to Jython. Jython 2.0 and 2.1 were developed
|
||||
under the Jython specific license below.
|
||||
|
||||
From the 2.2 release on, Jython contributors have signed
|
||||
Python Software Foundation contributor agreements and releases are
|
||||
covered under the Python Software Foundation license version 2.
|
||||
|
||||
The standard library is covered by the Python Software Foundation
|
||||
license as well. See the Lib/LICENSE file for details.
|
||||
|
||||
The zxJDBC package was written by Brian Zimmer and originally licensed
|
||||
under the GNU Public License. The package is now covered by the Jython
|
||||
Software License.
|
||||
|
||||
The command line interpreter is covered by the Apache Software
|
||||
License. See the org/apache/LICENSE file for details.
|
||||
@@ -0,0 +1,43 @@
|
||||
MySQL Connector/J @MYSQL_CJ_VERSION@ (formerly MM.MySQL)
|
||||
Sun Microsystem's JDBC Driver for MySQL
|
||||
Copyright 2003-2008 MySQL AB, 2008 Sun Microsystems
|
||||
|
||||
CONTENTS
|
||||
|
||||
* License
|
||||
* Documentation Location
|
||||
|
||||
|
||||
LICENSE
|
||||
|
||||
MySQL Connector/J is licensed under the GPL or a commercial license
|
||||
from Sun Microsystems.
|
||||
|
||||
If you have licensed this product under the GPL, please see the COPYING
|
||||
file for more information.
|
||||
|
||||
There are special exceptions to the terms and conditions of the GPL
|
||||
as it is applied to this software. View the full text of the
|
||||
exception in file EXCEPTIONS-CONNECTOR-J in the directory of this
|
||||
software distribution.
|
||||
|
||||
If you have licensed this product under a commercial license from
|
||||
MySQL AB, please see the file "LICENSE.mysql" that comes with this
|
||||
distribution for the terms of the license.
|
||||
|
||||
If you need non-GPL licenses for commercial distribution please contact
|
||||
me <mark@mysql.com> or <sales@mysql.com>.
|
||||
|
||||
|
||||
DOCUMENTATION LOCATION
|
||||
|
||||
The documentation formerly contained in this file has moved into the
|
||||
'doc' directory, where it is available in HTML, PDF and plaintext
|
||||
forms.
|
||||
|
||||
You may also find the latest copy of the documentation on the MySQL
|
||||
website at http://dev.mysql.com/doc/refman/5.0/en/connector-j.html
|
||||
|
||||
--
|
||||
This software is OSI Certified Open Source Software.
|
||||
OSI Certified is a certification mark of the Open Source Initiative.
|
||||
+504
@@ -0,0 +1,504 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# exit codes of GameServer:
|
||||
# 0 normal shutdown
|
||||
# 2 reboot attempt
|
||||
|
||||
while :; do
|
||||
[ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
|
||||
[ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
|
||||
java -Djava.util.logging.manager=com.l2jserver.util.L2LogManager -Xms1024m -Xmx1024m -cp ./../libs/*:l2jserver.jar com.l2jserver.gameserver.GameServer > log/stdout.log 2>&1
|
||||
[ $? -ne 2 ] && break
|
||||
# /etc/init.d/mysql restart
|
||||
sleep 10
|
||||
done
|
||||
+707
@@ -0,0 +1,707 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Alternative Character Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# This properties file is solely for the purpose of Character modifications that directly influence them.
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# AccessLevel
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option will set the default AccessLevel for MasterAccess.
|
||||
# Please be careful with this setting. Characters set to this AccessLevel will have the right to execute every AdminCommand in game.
|
||||
# Default: 127 (Maximum value: 255)
|
||||
MasterAccessLevel = 127
|
||||
|
||||
# Name color for those matching the above MasterAccess AccessLevel.
|
||||
# Default: 00CCFF
|
||||
MasterNameColor = 00CCFF
|
||||
|
||||
# Title color for those matching the above MasterAccess AccessLevel.
|
||||
# Default: 00CCFF
|
||||
MasterTitleColor = 00CCFF
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Statistics
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option, if enabled, will force a character to de-level if the characters' experience is below their level after losing experience on death. If this is set to False, the character will not de-level even if their Experience is below their level after death.
|
||||
# Default: True
|
||||
Delevel = True
|
||||
|
||||
# This option enable check for all player skills for skill level.
|
||||
# If player level is lower than skill learn level - 9, skill level is decreased to next possible level.
|
||||
# If there is no possible level, skill is removed from player.
|
||||
DecreaseSkillOnDelevel = True
|
||||
|
||||
# Weight limit multiplier. Example: Setting this to 5 will give players 5x the normal weight limit.
|
||||
# Default: 1
|
||||
AltWeightLimit = 1
|
||||
|
||||
# Run speed modifier. Example: Setting this to 5 will give players +5 to their running speed.
|
||||
# Default: 0
|
||||
RunSpeedBoost = 0
|
||||
|
||||
# Chance of receiving the Death Penalty debuff when killed by a mob.
|
||||
# Default: 20
|
||||
DeathPenaltyChance = 20
|
||||
|
||||
# Percent of HP, MP, and CP which is restored on character revival.
|
||||
# Use 0 to disable restore
|
||||
# Default: 0, 65, 0
|
||||
RespawnRestoreCP = 0
|
||||
RespawnRestoreHP = 65
|
||||
RespawnRestoreMP = 0
|
||||
|
||||
# Percent of HP, MP, and CP regeneration for players.
|
||||
# Example: Setting HP to 10 will cause player HP to regenerate 90% slower than normal.
|
||||
# Default: 100, 100, 100
|
||||
HpRegenMultiplier = 100
|
||||
MpRegenMultiplier = 100
|
||||
CpRegenMultiplier = 100
|
||||
|
||||
# Decrease CP by 10 every normal hit a player do
|
||||
# Default: False
|
||||
AltGameTiredness = False
|
||||
|
||||
# Allow player to learn transformations without quest.
|
||||
# Default: False
|
||||
AltTransformationWithoutQuest = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Skills & Effects
|
||||
# ---------------------------------------------------------------------------
|
||||
# When this is enabled it will read the "SkillDurationList" option.
|
||||
# This will basically overlook the "time = x" in the skill XMLs so that you do not need to modify the L2J Datapack XMLs to increase skill duration.
|
||||
# Default: False
|
||||
EnableModifySkillDuration = False
|
||||
# Skill duration list
|
||||
# Format: skillid,newtime;skillid2,newtime2...
|
||||
# Example:
|
||||
# This enable 1h(3600) duration for songs, the "\"indicates new line,
|
||||
# and is only set for formating purposes.
|
||||
# SkillDurationList = 264,3600;265,3600;266,3600;267,3600;268,3600;\
|
||||
# 269,3600;270,3600;304,3600;305,1200;306,3600;308,3600;349,3600;\
|
||||
# 363,3600;364,3600
|
||||
SkillDurationList =
|
||||
|
||||
# When this is enabled it will read the "SkillReuseList" option.
|
||||
EnableModifySkillReuse = False
|
||||
# Format: skillid,newDelayTime;skillid,newDelayTime2 (See skillDuration for examples)
|
||||
SkillReuseList =
|
||||
|
||||
# If it's true all class skills will be delivered upon level up and login.
|
||||
# Default: False
|
||||
AutoLearnSkills = False
|
||||
|
||||
# If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills.
|
||||
# Default: False
|
||||
AutoLearnForgottenScrollSkills = False
|
||||
|
||||
# Default: False
|
||||
AutoLootHerbs = False
|
||||
|
||||
# Maximum number of buffs and songs/dances.
|
||||
# Remember that Divine Inspiration will give players 4 additional buff slots on top of the number specified in "maxbuffamount".
|
||||
# Default: 20, 12
|
||||
maxbuffamount = 20
|
||||
maxdanceamount = 12
|
||||
|
||||
# Allow players to cancel dances/songs via Alt+click on buff icon
|
||||
# Default: False
|
||||
DanceCancelBuff = False
|
||||
|
||||
# This option enables/disables additional MP consume for dances and songs.
|
||||
# Default: True
|
||||
DanceConsumeAdditionalMP = True
|
||||
|
||||
# This option allows a player to automatically learn Divine Inspiration.
|
||||
# This is not included in AutoLearnSkills above.
|
||||
# Default: False
|
||||
AutoLearnDivineInspiration = False
|
||||
|
||||
# This is to allow a character to be canceled during bow use, skill use, or both.
|
||||
# Available Options: bow, cast, all
|
||||
# Default: cast
|
||||
AltGameCancelByHit = cast
|
||||
|
||||
# If True, when effects of the same stack group are used, lesser effects will be canceled if stronger effects are used. Otherwise stacking of things like multiple levels of the same buff will be allowed.
|
||||
# Default: True
|
||||
CancelLesserEffect = True
|
||||
|
||||
# This option, if enabled, will allow magic to fail, and if disabled magic damage will always succeed with a 100% chance.
|
||||
# Default: True
|
||||
MagicFailures = True
|
||||
|
||||
# Protection from aggressive mobs after getting up from fake death.
|
||||
# The value is specified in seconds.
|
||||
# Default: 0
|
||||
PlayerFakeDeathUpProtection = 0
|
||||
|
||||
# This option is to enable or disable the storage of buffs/debuffs among other effects.
|
||||
# Default: True
|
||||
StoreSkillCooltime = True
|
||||
|
||||
# This option is to enable or disable the storage of buffs/debuffs among other effects during
|
||||
# a subclass change
|
||||
# Deault: False
|
||||
SubclassStoreSkillCooltime = False
|
||||
|
||||
# These are alternative rules for shields.
|
||||
# If True and they block:
|
||||
# The damage is powerAtk-shieldDef,
|
||||
# If False and they block:
|
||||
# The damage is powerAtk / (shieldDef + powerDef)
|
||||
# Default: False
|
||||
AltShieldBlocks = False
|
||||
|
||||
# This is the percentage for perfect shield block rate.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 10
|
||||
AltPerfectShieldBlockRate = 10
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Class, Sub-class and skill learning options
|
||||
# ---------------------------------------------------------------------------
|
||||
# Allow use of Event Managers for changing occupation without any quests.
|
||||
# Default: False
|
||||
AllowClassMasters = False
|
||||
|
||||
# ConfigClassMaster=1;[57(100000)];[];2;[57(1000000)];[];3;[57(10000000)],[5575(1000000)];[6622(1)]
|
||||
# 1st occupation change for 100.000 Adena (item id 57)
|
||||
# 2nd occupation change for 1.000.0000 Adena (item id 57)
|
||||
# 3rd occupation change for 10.000.0000 Adena (item id 57) and 1.000.000 Ancient Adena (item id 5575)
|
||||
# on 3rd occupation change player will be rewarded with 1 Book of Giants (item id 6622)
|
||||
# ConfigClassMaster=1;[];[];2;[];[];3;[];[]
|
||||
# 1st, 2nd, 3rd occupation change for free, without rewards.
|
||||
# ConfigClassMaster=1;[];[];2;[];[]
|
||||
# Allow only first and second change.
|
||||
ConfigClassMaster = 1;[];[];2;[];[];3;[];[]
|
||||
|
||||
# Class Masters will allow changing to any occupation on any level inside class tree
|
||||
# For example, Dwarven Fighter will be able to advance to:
|
||||
# Artisan, Scavenger, Warsmith, Bounty Hunter, Maestro, Fortune Seeker.
|
||||
# But Warsmith will be able to change only to Maestro.
|
||||
# Default = False
|
||||
AllowEntireTree = False
|
||||
|
||||
# When character reach levels 20,40,76 he will receive tutorial page
|
||||
# with list of the all possible variants, and can select and immediately
|
||||
# change to the new occupation, or decide to choose later (on next login).
|
||||
# Can be used with or without classic Class Masters.
|
||||
# Default = False
|
||||
AlternateClassMaster = False
|
||||
|
||||
# Require life crystal needed to learn clan skills.
|
||||
# Default: True
|
||||
LifeCrystalNeeded = True
|
||||
|
||||
# Require book needed to enchant skills.
|
||||
# Default: True
|
||||
EnchantSkillSpBookNeeded = True
|
||||
|
||||
# Require spell book needed to learn Divine Inspiration.
|
||||
# Default: True
|
||||
DivineInspirationSpBookNeeded = True
|
||||
|
||||
# When enabled, the following will be true:
|
||||
# All classes can learn all skills.
|
||||
# Skills of another class costs x2 SP to learn.
|
||||
# Skills of another race costs x2 SP to learn.
|
||||
# Skills of fighters/mages costs x3 SP to learn.
|
||||
# Default: False
|
||||
AltGameSkillLearn = False
|
||||
|
||||
# Allow player to sub-class without checking for unique quest items.
|
||||
# Default: False
|
||||
AltSubClassWithoutQuests = False
|
||||
|
||||
# Allow player to add/change subclass at all village master
|
||||
# Default: False
|
||||
AltSubclassEverywhere = False
|
||||
|
||||
# Fee to remove Transfer skills.
|
||||
# Default: 10000000
|
||||
FeeDeleteTransferSkills = 10000000
|
||||
|
||||
# Fee to remove Sub-Class skills.
|
||||
# Default: 10000000
|
||||
FeeDeleteSubClassSkills = 10000000
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Vitality configuration
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enables vitality system
|
||||
# Default: True
|
||||
EnableVitality = True
|
||||
|
||||
# Do you want players to recover their vitality when they reconnect?
|
||||
# This is calculated with the time they've been offline
|
||||
# Actual Time - Last Time Online / 1000 x rate recovery on reconnect
|
||||
# Notes:
|
||||
# Works only if EnableVitality = True
|
||||
# Default: True
|
||||
RecoverVitalityOnReconnect = True
|
||||
|
||||
# Option to set a lower vitality at character creation.
|
||||
# Vitality needs to be enabled, and startingpoints needs to be lower
|
||||
# than max-vitality points.
|
||||
# Default: 20000
|
||||
StartingVitalityPoints = 20000
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Limits
|
||||
# ---------------------------------------------------------------------------
|
||||
# Maximum character running speed.
|
||||
# Default: 250
|
||||
MaxRunSpeed = 250
|
||||
|
||||
# Maximum character Physical Critical Rate. (10 = 1%)
|
||||
# Default: 500
|
||||
MaxPCritRate = 500
|
||||
|
||||
# Maximum character Magic Critical Rate. (10 = 1%)
|
||||
# Default: 200
|
||||
MaxMCritRate = 200
|
||||
|
||||
# Maximum character Attack Speed.
|
||||
# Default: 1500
|
||||
MaxPAtkSpeed = 1500
|
||||
|
||||
# Maximum character Cast Speed.
|
||||
# Default: 1999
|
||||
MaxMAtkSpeed = 1999
|
||||
|
||||
# Maximum character Evasion.
|
||||
# Default: 250
|
||||
MaxEvasion = 250
|
||||
|
||||
# Maximum number of allowed subclasses for every player.
|
||||
# Default: 3
|
||||
MaxSubclass = 3
|
||||
|
||||
# Maximum subclass level.
|
||||
# Default: 80
|
||||
MaxSubclassLevel = 80
|
||||
|
||||
# Maximum number of allowed slots for Private Stores Sell.
|
||||
# Other means all the other races aside from Dwarf.
|
||||
# Default: 4, 3
|
||||
MaxPvtStoreSellSlotsDwarf = 4
|
||||
MaxPvtStoreSellSlotsOther = 3
|
||||
|
||||
# Maximum number of allowed slots for Private Stores Buy.
|
||||
# Other means all the other races aside from Dwarf.
|
||||
# Default: 5, 4
|
||||
MaxPvtStoreBuySlotsDwarf = 5
|
||||
MaxPvtStoreBuySlotsOther = 4
|
||||
|
||||
# This will control the inventory space limit (NOT WEIGHT LIMIT).
|
||||
# Default: 80, 100, 250
|
||||
MaximumSlotsForNoDwarf = 80
|
||||
MaximumSlotsForDwarf = 100
|
||||
MaximumSlotsForGMPlayer = 250
|
||||
MaximumSlotsForQuestItems = 100
|
||||
|
||||
# This will control a character's warehouse capacity.
|
||||
# Notes:
|
||||
# This must be LESS then 300 or the client will crash.
|
||||
# Default: 120, 100, 200, 20
|
||||
MaximumWarehouseSlotsForDwarf = 120
|
||||
MaximumWarehouseSlotsForNoDwarf = 100
|
||||
MaximumWarehouseSlotsForClan = 200
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enchanting
|
||||
# ---------------------------------------------------------------------------
|
||||
# This controls the chance an item has to break if it is enchanted.
|
||||
# This chance is in %, so if you set this to 100%, enchants will always succeed.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 66,66,66
|
||||
EnchantChanceWeapon = 66
|
||||
EnchantChanceArmor = 66
|
||||
EnchantChanceJewelry = 66
|
||||
EnchantChanceElementStone = 50
|
||||
EnchantChanceElementCrystal = 30
|
||||
EnchantChanceElementJewel = 20
|
||||
EnchantChanceElementEnergy = 10
|
||||
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 66,66,66
|
||||
BlessedEnchantChanceWeapon = 66
|
||||
BlessedEnchantChanceArmor = 66
|
||||
BlessedEnchantChanceJewelry = 66
|
||||
|
||||
# This is the enchant limit, if set to 0, there will be no limit.
|
||||
# Example: If this is set to 10, the maximum enchant will be 10.
|
||||
# Default: 0, 0, 0
|
||||
EnchantMaxWeapon = 0
|
||||
EnchantMaxArmor = 0
|
||||
EnchantMaxJewelry = 0
|
||||
|
||||
# This is the maximum safe enchant.
|
||||
# Notes:
|
||||
# If EnchantSafeMax is set to for 8 the item will be safely enchanted to 8 regardless of the max enchant value set above.
|
||||
# EnchantSafeMaxFull is for full body armor (upper and lower).
|
||||
# These values should always be greater than 0.
|
||||
# Default: 3, 4
|
||||
EnchantSafeMax = 3
|
||||
EnchantSafeMaxFull = 4
|
||||
|
||||
# List of non-enchantable items.
|
||||
# Currently apprentice, travelers weapons and Pailaka items
|
||||
# Default: 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
|
||||
EnchantBlackList = 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Augmenting
|
||||
# ---------------------------------------------------------------------------
|
||||
# These control the chance to get a skill in the augmentation process.
|
||||
# Default: 15, 30, 45, 60
|
||||
AugmentationNGSkillChance = 15
|
||||
AugmentationMidSkillChance = 30
|
||||
AugmentationHighSkillChance = 45
|
||||
AugmentationTopSkillChance = 60
|
||||
# Accessory augmentation skills currently disabled
|
||||
AugmentationAccSkillChance = 0
|
||||
|
||||
# This controls the chance to get a base stat modifier in the augmentation process.
|
||||
# Notes:
|
||||
# This has no dependancy on the grade of Life Stone.
|
||||
# Default: 1
|
||||
AugmentationBaseStatChance = 1
|
||||
|
||||
# These control the chance to get a glow effect in the augmentation process.
|
||||
# Notes:
|
||||
# No/Mid Grade Life Stone can not have glow effect if you do not get a skill or base stat modifier.
|
||||
# Default: 0, 40, 70, 100
|
||||
AugmentationNGGlowChance = 0
|
||||
AugmentationMidGlowChance = 40
|
||||
AugmentationHighGlowChance = 70
|
||||
AugmentationTopGlowChance = 100
|
||||
|
||||
# List of non-augmentable items, currently contains only Grand Boss jewels
|
||||
# Shadow, common, time-limited, hero, pvp, wear items are hardcoded, as well as all etcitems.
|
||||
# Rods can't be augmented too.
|
||||
# Default: 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314,13740,13741,13742,13743,13744,13745,13746,13747,13748,14592,14593,14594,14595,14596,14597,14598,14599,14600,14664,14665,14666,14667,14668,14669,14670,14671,14672,14801,14802,14803,14804,14805,14806,14807,14808,14809,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,16025,16026
|
||||
AugmentationBlackList = 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314,13740,13741,13742,13743,13744,13745,13746,13747,13748,14592,14593,14594,14595,14596,14597,14598,14599,14600,14664,14665,14666,14667,14668,14669,14670,14671,14672,14801,14802,14803,14804,14805,14806,14807,14808,14809,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,16025,16026
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Karma
|
||||
# ---------------------------------------------------------------------------
|
||||
# Karma player can be killed in Peace zone.
|
||||
# Default: False
|
||||
AltKarmaPlayerCanBeKilledInPeaceZone = False
|
||||
|
||||
# Karma player can use GateKeeper.
|
||||
# Default: False
|
||||
AltKarmaPlayerCanUseGK = False
|
||||
|
||||
# Karma player can use escape and recall skills.
|
||||
# Default: True
|
||||
AltKarmaPlayerCanTeleport = True
|
||||
|
||||
# Karma player can shop.
|
||||
# Default: True
|
||||
AltKarmaPlayerCanShop = True
|
||||
|
||||
# Karma player can trade.
|
||||
# Default: True
|
||||
AltKarmaPlayerCanTrade = True
|
||||
|
||||
# Karma player can use warehouse.
|
||||
# Default: True
|
||||
AltKarmaPlayerCanUseWareHouse = True
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fame
|
||||
# ---------------------------------------------------------------------------
|
||||
# The maximum number of Fame points a player can have
|
||||
# Default: 50000
|
||||
MaxPersonalFamePoints = 50000
|
||||
|
||||
# How frequently the player gets Fame points while in a Fortress Siege zone
|
||||
# Default: 300s (5 min)
|
||||
FortressZoneFameTaskFrequency = 300
|
||||
|
||||
# How much Fame aquired while in a Fortress Siege Zone
|
||||
# Default: 31
|
||||
FortressZoneFameAquirePoints = 31
|
||||
|
||||
# How frequently the player gets Fame points while in a Castle Siege zone
|
||||
# Default: 300s (5 min)
|
||||
CastleZoneFameTaskFrequency = 300
|
||||
|
||||
# How much Fame aquired while in a Castle Siege Zone
|
||||
# Default: 125
|
||||
CastleZoneFameAquirePoints = 125
|
||||
|
||||
# Dead players can receive fame.
|
||||
# Default: True
|
||||
FameForDeadPlayers = True
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Crafting
|
||||
# ---------------------------------------------------------------------------
|
||||
# Option to enable or disable crafting.
|
||||
# Default: True
|
||||
CraftingEnabled = True
|
||||
|
||||
# Enable/Disable crafting of Masterwork items (If set to true, masterwork items can be created when crafting).
|
||||
# Default: True
|
||||
CraftMasterwork = True
|
||||
|
||||
# Limits for recipes
|
||||
# Default: 50, 50
|
||||
DwarfRecipeLimit = 50
|
||||
CommonRecipeLimit = 50
|
||||
|
||||
# Alternative crafting rules. If enabled, the following will be true:
|
||||
# Crafting takes time.
|
||||
# Players get EXP/SP for crafting.
|
||||
# Default: False
|
||||
AltGameCreation = False
|
||||
|
||||
# Crafting Time multiplier.
|
||||
# The higher the number, the more time the crafting process takes. XP/SP reward increases with time.
|
||||
# Default: 1
|
||||
AltGameCreationSpeed = 1
|
||||
|
||||
# Additional crafting XP/SP rate multiplier.
|
||||
# Default: 1, 1
|
||||
AltGameCreationXpRate = 1
|
||||
AltGameCreationSpRate = 1
|
||||
|
||||
# Additional XP/SP rate multiplier when creating rare item.
|
||||
# Default: 2
|
||||
AltGameCreationRareXpSpRate = 2
|
||||
|
||||
# If set to False, blacksmiths don't take recipes from players inventory when crafting.
|
||||
# Default: True
|
||||
AltBlacksmithUseRecipes = True
|
||||
|
||||
# Store/Restore Dwarven Manufacture list
|
||||
# Keep manufacture shoplist after relog
|
||||
# Default: False
|
||||
StoreRecipeShopList = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Clan
|
||||
# ---------------------------------------------------------------------------
|
||||
# Number of days you have to wait before joining another clan.
|
||||
# Default: 1
|
||||
DaysBeforeJoinAClan = 1
|
||||
|
||||
# Number of days you have to wait before creating a new clan.
|
||||
# Default: 10
|
||||
DaysBeforeCreateAClan = 10
|
||||
|
||||
# Number of days it takes to dissolve a clan.
|
||||
# Default: 7
|
||||
DaysToPassToDissolveAClan = 7
|
||||
|
||||
# Number of days before joining a new alliance when clan voluntarily leave an alliance.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 1
|
||||
DaysBeforeJoinAllyWhenLeaved = 1
|
||||
|
||||
# Number of days before joining a new alliance when clan was dismissed from an alliance.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 1
|
||||
DaysBeforeJoinAllyWhenDismissed = 1
|
||||
|
||||
# Number of days before accepting a new clan for alliance when clan was dismissed from an alliance.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 1
|
||||
DaysBeforeAcceptNewClanWhenDismissed = 1
|
||||
|
||||
# Number of days before creating a new alliance after dissolving an old alliance.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 1
|
||||
DaysBeforeCreateNewAllyWhenDissolved = 1
|
||||
|
||||
# Maximum number of clans in alliance.
|
||||
# Default: 3
|
||||
AltMaxNumOfClansInAlly = 3
|
||||
|
||||
# Allow clan members to withdraw from the clan warehouse.
|
||||
# Default: False
|
||||
AltMembersCanWithdrawFromClanWH = False
|
||||
|
||||
# Remove castle circlets after a clan loses their castle or a player leaves a clan.
|
||||
# Default: True
|
||||
RemoveCastleCirclets = True
|
||||
|
||||
# Number of members needed to request a clan war.
|
||||
# Default: 15
|
||||
AltClanMembersForWar = 15
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Party
|
||||
# ---------------------------------------------------------------------------
|
||||
# CONFUSING(nothing todo with party) -> When you made damage to a mob
|
||||
# and are inside this range, you will be considered as player to reward.
|
||||
# Checks for party range to mob to calculate rewards(exp, items).
|
||||
# Default: 1600
|
||||
AltPartyRange = 1600
|
||||
|
||||
# 1. Used for adena distribution in party
|
||||
# 2. Used to handle random and by turn party loot
|
||||
# Default: 1400
|
||||
AltPartyRange2 = 1400
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Random
|
||||
# ---------------------------------------------------------------------------
|
||||
# This is the amount of adena that a new character starts their character with.
|
||||
# Default: 0
|
||||
StartingAdena = 0
|
||||
|
||||
# This is the starting level of the new character.
|
||||
# Default: 1
|
||||
StartingLevel = 1
|
||||
|
||||
# This is the amount of SP that a new character starts their character with.
|
||||
# Default: 0
|
||||
StartingSP = 0
|
||||
|
||||
# This option, when set to True, will enable automatically picking up items.
|
||||
# If set False it will force the player to pickup dropped items from mobs.
|
||||
# This excludes herbs mentioned above and items from Raid/GrandBosses with minions.
|
||||
# Default: False
|
||||
AutoLoot = False
|
||||
|
||||
# This option, when set to True, will enable automatically picking up items from Raid/GrandBosses with minions.
|
||||
# If set False it will force the player to pickup dropped items from bosses.
|
||||
# This excludes herbs mentioned above and items from mobs.
|
||||
# Default: False
|
||||
AutoLootRaids = False
|
||||
|
||||
# Delay for raid drop items loot privilege
|
||||
# Require Command Channel , check next option
|
||||
# Value is in seconds
|
||||
# Default: 900 (15min)
|
||||
RaidLootRightsInterval = 900
|
||||
|
||||
# Minimal size of Command Channel for apply raid loot privilege
|
||||
# Default: 45
|
||||
RaidLootRightsCCSize = 45
|
||||
|
||||
# This is the time in seconds that it will take for the player command "/unstuck" to activate.
|
||||
# Default: 300
|
||||
UnstuckInterval = 300
|
||||
|
||||
# Teleport Watchdog Timeout (seconds)
|
||||
# Player forced to appear if remain in teleported state longer than timeout
|
||||
# Does not set too low, recommended value 60s.
|
||||
# This time is in seconds, leave it at 0 if you want this feature disabled.
|
||||
# Default: 0
|
||||
TeleportWatchdogTimeout = 0
|
||||
|
||||
# After a player teleports, this is the time the player is protected.
|
||||
# This time is in seconds, leave it at 0 if you want this feature disabled.
|
||||
# Retail (Since GE): 600 (10 minutes)
|
||||
# Default: 600
|
||||
PlayerSpawnProtection = 600
|
||||
|
||||
# Spawn protection should disappear with any action with the exception
|
||||
# of the item usage from items in this list.
|
||||
# Format: itemId,itemId,itemId,....
|
||||
# Default: 0
|
||||
PlayerSpawnProtectionAllowedItems = 0
|
||||
|
||||
# Teleport spawn protection time. It will protect the player in the
|
||||
# teleport spawn for the given time. 0 to disable feature
|
||||
PlayerTeleportProtection = 0
|
||||
|
||||
# If enabled, players respawn in town on different locations defined in zone.xml for given town.
|
||||
# If disabled the first spawn location from zone.xml is used.
|
||||
# Default: True
|
||||
RandomRespawnInTownEnabled = True
|
||||
|
||||
# This will allow a random offset from the base teleport location coordinates based on a maximum offset.
|
||||
# Default: True
|
||||
OffsetOnTeleportEnabled = True
|
||||
|
||||
# Maximum offset for base teleport location when OffsetOnTeleportEnabled is enabled .
|
||||
# Default: 50
|
||||
MaxOffsetOnTeleport = 50
|
||||
|
||||
# Restores the player to their previous instance (ie. an instanced area/dungeon) on EnterWorld.
|
||||
# Default: False
|
||||
RestorePlayerInstance = False
|
||||
|
||||
# Set whether summon skills can be used to summon players inside an instance.
|
||||
# When enabled individual instances can have summoning disabled in instance xml's.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: ?
|
||||
AllowSummonToInstance = True
|
||||
|
||||
# This option is to enable or disable the use of in game petitions.
|
||||
# The MaxPetitionsPerPlayer is the amount of petitions a player can make.
|
||||
# The MaximumPendingPetitions is the total amount of petitions in the server.
|
||||
# Note:
|
||||
# Logically, MaximumPendingPetitions must be higher then MaxPetitionsPerPlayer.
|
||||
# Default: True, 5, 25
|
||||
PetitioningAllowed = True
|
||||
MaxPetitionsPerPlayer = 5
|
||||
MaxPetitionsPending = 25
|
||||
|
||||
# Free teleporting around the world.
|
||||
# Default: False
|
||||
AltFreeTeleporting = False
|
||||
|
||||
# Allow character deletion after days set below. To disallow character deletion, set this equal to 0.
|
||||
# Default: 7
|
||||
DeleteCharAfterDays = 7
|
||||
|
||||
# Alternative Xp/Sp rewards, if not 0, then calculated as 2^((mob.level-player.level) / coef). Coef are the 2 numbers set below.
|
||||
# A few examples for "AltGameExponentXp = 5." and "AltGameExponentSp = 3.":
|
||||
# diff = 0 (player and mob has the same level), XP bonus rate = 1, SP bonus rate = 1
|
||||
# diff = 3 (mob is 3 levels above), XP bonus rate = 1.52, SP bonus rate = 2
|
||||
# diff = 5 (mob is 5 levels above), XP bonus rate = 2, SP bonus rate = 3.17
|
||||
# diff = -8 (mob is 8 levels below), XP bonus rate = 0.4, SP bonus rate = 0.16
|
||||
# Default: 0, 0
|
||||
AltGameExponentXp = 0
|
||||
AltGameExponentSp = 0
|
||||
|
||||
|
||||
# PARTY XP DISTRIBUTION
|
||||
# With "auto method" member is cut from Exp/SP distribution when his share is lower than party bonus acquired for him (30% for 2 member party).
|
||||
# In that case he will not receive any Exp/SP from party and is not counted for party bonus.
|
||||
# If you don't want to have a cutoff point for party members' XP distribution, set the first option to "none".
|
||||
# Available Options: auto, level, percentage, none
|
||||
# Default: level
|
||||
PartyXpCutoffMethod = level
|
||||
|
||||
# This option takes effect when "percentage" method is chosen. Don't use high values for this!
|
||||
# Default: 3.0
|
||||
PartyXpCutoffPercent = 3.0
|
||||
|
||||
# This option takes effect when "level" method is chosen. Don't use low values for this!
|
||||
# Default: 20
|
||||
PartyXpCutoffLevel = 20
|
||||
|
||||
# Disable tutorial on new player enter into Game
|
||||
# Please remember its sometimes important to novice players
|
||||
# Default: False
|
||||
DisableTutorial = False
|
||||
|
||||
# Expertise penalty
|
||||
# If disabled, player will not receive penalty for equip higher grade items
|
||||
# Default: True
|
||||
ExpertisePenalty = True
|
||||
|
||||
# Player can in client define his own key mapping and for save it must be stored server side.
|
||||
# Disabled until confirmed as working.
|
||||
# Default: False
|
||||
StoreCharUiSettings = False
|
||||
|
||||
# Character name restriction
|
||||
# Disallow characters to have a name which contains the words.
|
||||
# Split them with ",". Example: announcements,announce...
|
||||
ForbiddenNames = annou,ammou,amnou,anmou,anou,amou
|
||||
@@ -0,0 +1,47 @@
|
||||
# This is the Community Board server configuration file.
|
||||
|
||||
EnableCommunityBoard = False
|
||||
CommunityServerHostname = localhost
|
||||
CommunityServerPort = 9013
|
||||
CommunityServerSqlDpId = 200
|
||||
CommunityServerHexId = 123456
|
||||
|
||||
# NetCon configurations
|
||||
# ================================================================
|
||||
# TCP Server start
|
||||
# ================================================================
|
||||
|
||||
# ExternalHostAddress: Use * bind all available IPs
|
||||
# Default: *
|
||||
ExternalHostAddress = *
|
||||
# ExternalPort: Use 0 bind all available Ports
|
||||
# Default: 0
|
||||
ExternalPort = 0
|
||||
# ConnectionQueue: Maximum connections.
|
||||
# Default: 50
|
||||
ConnectionQueue = 50
|
||||
|
||||
# Default: False
|
||||
FloodProtectionEnabled = False
|
||||
# Default: 15
|
||||
FastConnectionLimit = 15
|
||||
# Default: 350
|
||||
FastConnectionTime = 350
|
||||
# Default: 700
|
||||
NormalConnectionTime = 700
|
||||
# Default: 50
|
||||
MaxConnectionperIP = 50
|
||||
# Default: False
|
||||
IPBannEnabled = False
|
||||
# Default:
|
||||
IPBannList =
|
||||
|
||||
# ================================================================
|
||||
# TCP Client start
|
||||
# ================================================================
|
||||
# SendBufferSize: DO NOT TOUCH!
|
||||
# Default: 8192
|
||||
SendBufferSize = 8192
|
||||
# SendBufferSize: DO NOT TOUCH!
|
||||
# Default: 8192
|
||||
ReceiveBufferSize = 8192
|
||||
+360
@@ -0,0 +1,360 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Alternative Feature Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Castle
|
||||
# ---------------------------------------------------------------------------
|
||||
# Siege Time rules
|
||||
# Which values can change Castle Lords (day,hour,minute)
|
||||
# Default: hour
|
||||
CLSetSiegeTimeList = hour
|
||||
|
||||
# Which hours can change Castle Lords
|
||||
# Default: 16,20
|
||||
SiegeHourList = 16,20
|
||||
|
||||
# Teleport Function price
|
||||
# Price = 7 days
|
||||
CastleTeleportFunctionFeeRatio = 604800000
|
||||
CastleTeleportFunctionFeeLvl1 = 7000
|
||||
CastleTeleportFunctionFeeLvl2 = 14000
|
||||
|
||||
# Support magic buff price
|
||||
# Price = 1 day
|
||||
CastleSupportFunctionFeeRatio = 86400000
|
||||
CastleSupportFeeLvl1 = 7000
|
||||
CastleSupportFeeLvl2 = 21000
|
||||
CastleSupportFeeLvl3 = 37000
|
||||
CastleSupportFeeLvl4 = 52000
|
||||
|
||||
# MP Regeneration price
|
||||
# Price = 1 day
|
||||
CastleMpRegenerationFunctionFeeRatio = 86400000
|
||||
CastleMpRegenerationFeeLvl1 = 2000
|
||||
CastleMpRegenerationFeeLvl2 = 6500
|
||||
CastleMpRegenerationFeeLvl3 = 13750
|
||||
CastleMpRegenerationFeeLvl4 = 20000
|
||||
|
||||
# Hp Regeneration price
|
||||
# Price = 1 day
|
||||
CastleHpRegenerationFunctionFeeRatio = 86400000
|
||||
CastleHpRegenerationFeeLvl1 = 1000
|
||||
CastleHpRegenerationFeeLvl2 = 1500
|
||||
CastleHpRegenerationFeeLvl3 = 2250
|
||||
CastleHpRegenerationFeeLvl4 = 3270
|
||||
CastleHpRegenerationFeeLvl5 = 5166
|
||||
|
||||
# Exp Regeneration price
|
||||
# Price = 1 day
|
||||
CastleExpRegenerationFunctionFeeRatio = 86400000
|
||||
CastleExpRegenerationFeeLvl1 = 9000
|
||||
CastleExpRegenerationFeeLvl2 = 15000
|
||||
CastleExpRegenerationFeeLvl3 = 21000
|
||||
CastleExpRegenerationFeeLvl4 = 30000
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Clan Hall
|
||||
# ---------------------------------------------------------------------------
|
||||
# Teleport Function price
|
||||
# Price = 7 days
|
||||
ClanHallTeleportFunctionFeeRatio = 604800000
|
||||
ClanHallTeleportFunctionFeeLvl1 = 7000
|
||||
ClanHallTeleportFunctionFeeLvl2 = 14000
|
||||
|
||||
# Support magic buff price
|
||||
# Price = 1 day
|
||||
ClanHallSupportFunctionFeeRatio = 86400000
|
||||
ClanHallSupportFeeLvl1 = 2500
|
||||
ClanHallSupportFeeLvl2 = 5000
|
||||
ClanHallSupportFeeLvl3 = 7000
|
||||
ClanHallSupportFeeLvl4 = 11000
|
||||
ClanHallSupportFeeLvl5 = 21000
|
||||
ClanHallSupportFeeLvl6 = 36000
|
||||
ClanHallSupportFeeLvl7 = 37000
|
||||
ClanHallSupportFeeLvl8 = 364000
|
||||
|
||||
# MP Regeneration price
|
||||
# Price = 1 day
|
||||
ClanHallMpRegenerationFunctionFeeRatio = 86400000
|
||||
ClanHallMpRegenerationFeeLvl1 = 2000
|
||||
ClanHallMpRegenerationFeeLvl2 = 3750
|
||||
ClanHallMpRegenerationFeeLvl3 = 6500
|
||||
ClanHallMpRegenerationFeeLvl4 = 13750
|
||||
ClanHallMpRegenerationFeeLvl5 = 20000
|
||||
|
||||
# Hp Regeneration price
|
||||
# Price = 1 day
|
||||
ClanHallHpRegenerationFunctionFeeRatio = 86400000
|
||||
ClanHallHpRegenerationFeeLvl1 = 700
|
||||
ClanHallHpRegenerationFeeLvl2 = 800
|
||||
ClanHallHpRegenerationFeeLvl3 = 1000
|
||||
ClanHallHpRegenerationFeeLvl4 = 1166
|
||||
ClanHallHpRegenerationFeeLvl5 = 1500
|
||||
ClanHallHpRegenerationFeeLvl6 = 1750
|
||||
ClanHallHpRegenerationFeeLvl7 = 2000
|
||||
ClanHallHpRegenerationFeeLvl8 = 2250
|
||||
ClanHallHpRegenerationFeeLvl9 = 2500
|
||||
ClanHallHpRegenerationFeeLvl10 = 3250
|
||||
ClanHallHpRegenerationFeeLvl11 = 3750
|
||||
ClanHallHpRegenerationFeeLvl12 = 4250
|
||||
ClanHallHpRegenerationFeeLvl13 = 5166
|
||||
|
||||
# Exp Regeneration price
|
||||
# Price = 1 day
|
||||
ClanHallExpRegenerationFunctionFeeRatio = 86400000
|
||||
ClanHallExpRegenerationFeeLvl1 = 3000
|
||||
ClanHallExpRegenerationFeeLvl2 = 6000
|
||||
ClanHallExpRegenerationFeeLvl3 = 9000
|
||||
ClanHallExpRegenerationFeeLvl4 = 15000
|
||||
ClanHallExpRegenerationFeeLvl5 = 21000
|
||||
ClanHallExpRegenerationFeeLvl6 = 23330
|
||||
ClanHallExpRegenerationFeeLvl7 = 30000
|
||||
|
||||
# Creation item function
|
||||
# Price = 1 day
|
||||
ClanHallItemCreationFunctionFeeRatio = 86400000
|
||||
ClanHallItemCreationFunctionFeeLvl1 = 30000
|
||||
ClanHallItemCreationFunctionFeeLvl2 = 70000
|
||||
ClanHallItemCreationFunctionFeeLvl3 = 140000
|
||||
|
||||
# Curtains Decoration
|
||||
# Price = 7 days
|
||||
ClanHallCurtainFunctionFeeRatio = 604800000
|
||||
ClanHallCurtainFunctionFeeLvl1 = 2000
|
||||
ClanHallCurtainFunctionFeeLvl2 = 2500
|
||||
|
||||
# Fixtures Decoration
|
||||
# Price = 3 days
|
||||
ClanHallFrontPlatformFunctionFeeRatio = 259200000
|
||||
ClanHallFrontPlatformFunctionFeeLvl1 = 1300
|
||||
ClanHallFrontPlatformFunctionFeeLvl2 = 4000
|
||||
|
||||
# If true Clan Hall buff cost 0 mp.
|
||||
# Default: False
|
||||
AltClanHallMpBuffFree = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fortress
|
||||
# ---------------------------------------------------------------------------
|
||||
# Teleport Function price
|
||||
# Price = 7 days
|
||||
FortressTeleportFunctionFeeRatio = 604800000
|
||||
FortressTeleportFunctionFeeLvl1 = 1000
|
||||
FortressTeleportFunctionFeeLvl2 = 10000
|
||||
|
||||
# Support magic buff price
|
||||
# Price = 1 day
|
||||
FortressSupportFunctionFeeRatio = 86400000
|
||||
FortressSupportFeeLvl1 = 7000
|
||||
FortressSupportFeeLvl2 = 17000
|
||||
|
||||
# MP Regeneration price
|
||||
# Price = 1 day
|
||||
FortressMpRegenerationFunctionFeeRatio = 86400000
|
||||
FortressMpRegenerationFeeLvl1 = 6500
|
||||
FortressMpRegenerationFeeLvl2 = 9300
|
||||
|
||||
# Hp Regeneration price
|
||||
# Price = 1 day
|
||||
FortressHpRegenerationFunctionFeeRatio = 86400000
|
||||
FortressHpRegenerationFeeLvl1 = 2000
|
||||
FortressHpRegenerationFeeLvl2 = 3500
|
||||
|
||||
# Exp Regeneration price
|
||||
# Price = 1 day
|
||||
FortressExpRegenerationFunctionFeeRatio = 86400000
|
||||
FortressExpRegenerationFeeLvl1 = 9000
|
||||
FortressExpRegenerationFeeLvl2 = 10000
|
||||
|
||||
# This is the time frequently when Fort owner gets Blood Oath, supply level raised and Fort fee is payed
|
||||
# Default 360 mins
|
||||
FortressPeriodicUpdateFrequency = 360
|
||||
|
||||
# The number of Blood Oath which given to the Fort owner clan when Fort Updater runs
|
||||
# Default: 1
|
||||
FortressBloodOathCount = 1
|
||||
|
||||
# The maximum Fort supply level
|
||||
# Max lvl what you can define here is 21!
|
||||
# Default: 6
|
||||
FortressMaxSupplyLevel = 6
|
||||
|
||||
# Fort fee which payed to the Castle
|
||||
# Default: 25000
|
||||
FortressFeeForCastle = 25000
|
||||
|
||||
# The maximum time while a clan can own a fortress
|
||||
# Deafault: 168 hours
|
||||
FortressMaximumOwnTime = 168
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Seven Signs
|
||||
# ---------------------------------------------------------------------------
|
||||
# Determines whether castle ownership is determined by clan or by alliance.
|
||||
# Default is by alliance, as on official servers.
|
||||
AltRequireClanCastle = False
|
||||
|
||||
# Dawn:
|
||||
# True - Players not owning castle need pay participation fee
|
||||
# False - Anyone can join Dawn
|
||||
AltCastleForDawn = True
|
||||
|
||||
# Dusk:
|
||||
# True - Players owning castle can not join Dusk side
|
||||
# False - Anyone can join Dusk
|
||||
AltCastleForDusk = True
|
||||
|
||||
# Minimum Players for participate in SevenSigns Festival.
|
||||
# Default: 5
|
||||
AltFestivalMinPlayer = 5
|
||||
|
||||
# Maximum seal stone contribution per player during festival.
|
||||
# Default: 1000000
|
||||
AltMaxPlayerContrib = 1000000
|
||||
|
||||
# Festival Manager Start time (set in miliseconds; 1000 = 1 second).
|
||||
# Default: 2 minutes
|
||||
AltFestivalManagerStart = 120000
|
||||
|
||||
# Festival Length (set in miliseconds; 1000 = 1 second).
|
||||
# Default: 18 minutes
|
||||
AltFestivalLength = 1080000
|
||||
|
||||
# Festival Cycle Length.
|
||||
# Default: 38 Minutes (20 minutes wait time + Festival Length) (set in miliseconds; 1000 = 1 second).
|
||||
AltFestivalCycleLength = 2280000
|
||||
|
||||
# At what point the first festival spawn occurs.
|
||||
# Default: 2 minutes (set in miliseconds; 1000 = 1 second).
|
||||
AltFestivalFirstSpawn = 120000
|
||||
|
||||
# At what Point the first festival swarm occurs.
|
||||
# Default: 5 minutes (set in miliseconds; 1000 = 1 second).
|
||||
AltFestivalFirstSwarm = 300000
|
||||
|
||||
# At what Point the second festival spawn occurs.
|
||||
# Default: 9 minutes (set in miliseconds; 1000 = 1 second).
|
||||
AltFestivalSecondSpawn = 540000
|
||||
|
||||
# At what Point the second festival spawn occurs.
|
||||
# Default: 12 minutes (set in miliseconds; 1000 = 1 second).
|
||||
AltFestivalSecondSwarm = 720000
|
||||
|
||||
# At what point the chests spawn in.
|
||||
# Default: 15 minutes (set in miliseconds; 1000 = 1 second).
|
||||
AltFestivalChestSpawn = 900000
|
||||
|
||||
# This multipliers are used to change P.Def/M.Def of castle gates/walls while Seal of Strife is controlled by one of the sides.
|
||||
# Default: 1.1,0.8,1.1,0.8
|
||||
AltDawnGatesPdefMult = 1.1
|
||||
AltDuskGatesPdefMult = 0.8
|
||||
AltDawnGatesMdefMult = 1.1
|
||||
AltDuskGatesMdefMult = 0.8
|
||||
|
||||
# If this = true only cabal period owners can use merchant and blacksmith of mammon.
|
||||
# If false any player can use.
|
||||
# Default: True
|
||||
StrictSevenSigns = True
|
||||
|
||||
# Save SevenSigns status only each 30 mins and after period change.
|
||||
# Player info saved only during periodic data store (set by CharacterDataStoreInterval) and logout.
|
||||
# If False then save info and status immediately after changes.
|
||||
# Default: True
|
||||
AltSevenSignsLazyUpdate = True
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Clan Reputation Points
|
||||
# ---------------------------------------------------------------------------
|
||||
# Reputation score gained by taking Fortress.
|
||||
TakeFortPoints = 200
|
||||
|
||||
# Reputation score gained by taking Castle.
|
||||
TakeCastlePoints = 1500
|
||||
|
||||
# Reputation score gained by defended Castle.
|
||||
CastleDefendedPoints = 750
|
||||
|
||||
# Reputation score gained per clan members of festival winning party.
|
||||
FestivalOfDarknessWin = 200
|
||||
|
||||
# Reputation score gained for per hero clan members.
|
||||
HeroPoints = 1000
|
||||
|
||||
# Minimum Reputation score gained after completing 2nd class transfer under Academy.
|
||||
CompleteAcademyMinPoints = 190
|
||||
|
||||
# Maximum Reputation score gained after completing 2nd class transfer under Academy.
|
||||
CompleteAcademyMaxPoints = 650
|
||||
|
||||
# Reputation score gained per killed ballista.
|
||||
KillBallistaPoints = 30
|
||||
|
||||
# Reputation score gained for one Blood Alliance.
|
||||
BloodAlliancePoints = 500
|
||||
|
||||
# Reputation score gained for 10 Blood Oaths.
|
||||
BloodOathPoints = 200
|
||||
|
||||
# Reputation score gained for 100 Knight's Epaulettes.
|
||||
KnightsEpaulettePoints = 20
|
||||
|
||||
# Reputation score gained per clan member listed as top raid killers.
|
||||
1stRaidRankingPoints = 1250
|
||||
2ndRaidRankingPoints = 900
|
||||
3rdRaidRankingPoints = 700
|
||||
4thRaidRankingPoints = 600
|
||||
5thRaidRankingPoints = 450
|
||||
6thRaidRankingPoints = 350
|
||||
7thRaidRankingPoints = 300
|
||||
8thRaidRankingPoints = 200
|
||||
9thRaidRankingPoints = 150
|
||||
10thRaidRankingPoints = 100
|
||||
UpTo50thRaidRankingPoints = 25
|
||||
UpTo100thRaidRankingPoints = 12
|
||||
|
||||
# Reputation score gained/reduced per kill during a clan war or siege war.
|
||||
ReputationScorePerKill = 1
|
||||
|
||||
# Reputation score reduced by loosing Fortress in battle.
|
||||
LooseFortPoints = 0
|
||||
|
||||
# Reputation score reduced by loosing Castle in battle.
|
||||
LooseCastlePoints = 3000
|
||||
|
||||
# Reputation score reduced by creating Royal Guard.
|
||||
CreateRoyalGuardCost = 5000
|
||||
|
||||
# Reputation score reduced by creating Knight Unit.
|
||||
CreateKnightUnitCost = 10000
|
||||
|
||||
# Reputation score reduced by reinforcing Knight Unit (if clan level is 9 or more).
|
||||
ReinforceKnightUnitCost = 5000
|
||||
|
||||
# Reputation score reduced by increasing clan level.
|
||||
ClanLevel6Cost = 10000
|
||||
ClanLevel7Cost = 20000
|
||||
ClanLevel8Cost = 40000
|
||||
ClanLevel9Cost = 40000
|
||||
ClanLevel10Cost = 40000
|
||||
ClanLevel11Cost = 75000
|
||||
|
||||
# Number of clan members needed to increase clan level.
|
||||
ClanLevel6Requirement = 30
|
||||
ClanLevel7Requirement = 80
|
||||
ClanLevel8Requirement = 120
|
||||
ClanLevel9Requirement = 120
|
||||
ClanLevel10Requirement = 140
|
||||
ClanLevel11Requirement = 170
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Other
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Allow riding wyvern during Castle/Fort Siege
|
||||
# Default: True
|
||||
AllowRideWyvernDuringSiege = True
|
||||
+879
@@ -0,0 +1,879 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# General Server Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Administrator
|
||||
# ---------------------------------------------------------------------------
|
||||
# If this option is set to True every newly created character will have access level 127. This means that every character created will have Administrator Privileges.
|
||||
# Default: False
|
||||
EverybodyHasAdminRights = False
|
||||
|
||||
# Show server/DP revision when players enter the game
|
||||
# Default: True
|
||||
DisplayServerRevision = True
|
||||
|
||||
# Setting for serverList
|
||||
# Displays [] in front of server name on character selection
|
||||
# Default: False
|
||||
ServerListBrackets = False
|
||||
|
||||
# Displays server type next to the server name on character selection.
|
||||
# Notes:
|
||||
# Accepted Values: Normal, Relax, Test, NoLabel, Restricted, Event, Free
|
||||
# Default: Normal
|
||||
ServerListType = Normal
|
||||
|
||||
# Displays server min age to the server name on character selection.
|
||||
# Notes:
|
||||
# Accepted values: 0, 15, 18
|
||||
# Default: 0
|
||||
ServerListAge = 0
|
||||
|
||||
|
||||
# If True, only accounts with GM access can enter the server.
|
||||
# Default: False
|
||||
ServerGMOnly = False
|
||||
|
||||
# Enable GMs to have the glowing aura of a Hero character on login.
|
||||
# Notes:
|
||||
# GMs can do "///hero" on themselves and get this aura voluntarily.
|
||||
# It's advised to keep this off due to graphic lag.
|
||||
# Default: False
|
||||
GMHeroAura = False
|
||||
|
||||
# Auto set invulnerable status to a GM on login.
|
||||
# Default: False
|
||||
GMStartupInvulnerable = False
|
||||
|
||||
# Auto set invisible status to a GM on login.
|
||||
# Default: False
|
||||
GMStartupInvisible = False
|
||||
|
||||
# Auto block private messages to a GM on login.
|
||||
# Default: False
|
||||
GMStartupSilence = False
|
||||
|
||||
# Auto list GMs in GM list (/gmlist) on login.
|
||||
# Default: False
|
||||
GMStartupAutoList = False
|
||||
|
||||
# Auto set diet mode on to a GM on login (affects your weight penalty).
|
||||
# Default: False
|
||||
GMStartupDietMode = False
|
||||
|
||||
# The way //admin panel looks can be "modern" or "classic" (default is modern while classic provides more compatibility).
|
||||
# Default: modern
|
||||
GMAdminMenuStyle = modern
|
||||
|
||||
# Item restrictions apply to GMs aswell? (True = restricted usage)
|
||||
# Default: True
|
||||
GMItemRestriction = True
|
||||
|
||||
# Skill restrictions apply to GMs aswell? (True = restricted usage)
|
||||
# Default: True
|
||||
GMSkillRestriction = True
|
||||
|
||||
# Allow GMs to drop/trade non-tradeable and quest(drop only) items
|
||||
# Default: False
|
||||
GMTradeRestrictedItems = False
|
||||
|
||||
# Allow GMs to restart/exit while is fighting stance
|
||||
# Default: True
|
||||
GMRestartFighting = True
|
||||
|
||||
# Show the GM's name behind an announcement made by him
|
||||
# example: "Announce: hi [HanWik]"
|
||||
GMShowAnnouncerName = False
|
||||
|
||||
# Give special skills for every GM
|
||||
# 7041-7064 (Master's Blessing)
|
||||
# Default: False
|
||||
GMGiveSpecialSkills = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Server Security
|
||||
# ---------------------------------------------------------------------------
|
||||
# Bypass exploit protection. To ENABLE protection set to True.
|
||||
# Default: True
|
||||
BypassValidation = True
|
||||
|
||||
# Enforce gameguard for clients. Sends a gameguard query on character login.
|
||||
# Default: False
|
||||
GameGuardEnforce = False
|
||||
|
||||
# Don't allow player to perform trade, talk with npc, or move until gameguard reply is received.
|
||||
# Default: False
|
||||
GameGuardProhibitAction = False
|
||||
|
||||
#Logging settings. The following four settings, while enabled, will increase writing to your hard drive(s) considerably. Depending on the size of your server, the amount of players, and other factors, you may suffer a noticable performance hit.
|
||||
# Default: False
|
||||
LogChat = False
|
||||
|
||||
# Default: False
|
||||
LogItems = False
|
||||
|
||||
# Log only Adena and equipable items if LogItems is enabled
|
||||
LogItemsSmallLog = False
|
||||
|
||||
# Default: False
|
||||
LogItemEnchants = False
|
||||
|
||||
# Default: False
|
||||
LogSkillEnchants = False
|
||||
|
||||
# Default: False
|
||||
GMAudit = False
|
||||
|
||||
# Default: False
|
||||
LogGameDamage = False
|
||||
|
||||
# If damage greater than threshold then log it
|
||||
# Default: 5000
|
||||
LogGameDamageThreshold = 5000
|
||||
|
||||
# Check players for non-allowed skills
|
||||
# Default: False
|
||||
SkillCheckEnable = False
|
||||
|
||||
# If true, remove invalid skills from player and database.
|
||||
# Report only, if false.
|
||||
# Default: False
|
||||
SkillCheckRemove = False
|
||||
|
||||
# Check also GM characters (only if SkillCheckEnable = True)
|
||||
# Default: True
|
||||
SkillCheckGM = True
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Thread Configuration
|
||||
# ---------------------------------------------------------------------------
|
||||
# Extreme caution should be here, set to defaults if you do not know what you are doing.
|
||||
# These could possibly hurt your servers performance or improve it depending on your server's configuration, size, and other factors.
|
||||
# Default: 10
|
||||
ThreadPoolSizeEffects = 10
|
||||
|
||||
# Default: 13
|
||||
ThreadPoolSizeGeneral = 13
|
||||
|
||||
# Default: 2
|
||||
UrgentPacketThreadCoreSize = 2
|
||||
|
||||
# Default: 4
|
||||
GeneralPacketThreadCoreSize = 4
|
||||
|
||||
# Default: 4
|
||||
GeneralThreadCoreSize = 4
|
||||
|
||||
# Default: 6
|
||||
AiMaxThread = 6
|
||||
|
||||
# Dead Lock Detector (a separate thread for detecting deadlocks).
|
||||
# For improved crash logs and automatic restart in deadlock case if enabled.
|
||||
# Check interval is in seconds.
|
||||
# Default: False
|
||||
DeadLockDetector = False
|
||||
|
||||
# Default: 20
|
||||
DeadLockCheckInterval = 20
|
||||
|
||||
# Default: False
|
||||
RestartOnDeadlock = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Client packet queue tuning
|
||||
# ---------------------------------------------------------------------------
|
||||
# Queue size, do not set it too low !
|
||||
# 0 - use value MaxReadPerPass + 2 (from mmo.properties)
|
||||
# Default: 0
|
||||
ClientPacketQueueSize = 0
|
||||
|
||||
# Maximum number of packets in burst.
|
||||
# Execution will be aborted and thread released if more packets executed in raw.
|
||||
# 0 - use value MaxReadPerPass + 1 (from mmo.properties)
|
||||
# Default: 0
|
||||
ClientPacketQueueMaxBurstSize = 0
|
||||
|
||||
# Maximum number of packets per second.
|
||||
# Flood detector will be triggered if more packets received.
|
||||
# After triggering all incoming packets will be dropped until flooding stopped.
|
||||
# Default: 80
|
||||
ClientPacketQueueMaxPacketsPerSecond = 80
|
||||
|
||||
# Average number of packets per second calculated during this interval.
|
||||
# Using larger value decrease number of false kicks, but slower reaction to flood.
|
||||
# Avoid using too low or too high values, recommended between 3 and 10.
|
||||
# Default: 5
|
||||
ClientPacketQueueMeasureInterval = 5
|
||||
|
||||
# Maximum average number of packets per second during measure interval.
|
||||
# Flood detector will be triggered if more packets received.
|
||||
# After triggering all incoming packets will be dropped until flooding stopped.
|
||||
# Default: 40
|
||||
ClientPacketQueueMaxAveragePacketsPerSecond = 40
|
||||
|
||||
# Maximum number of flood triggers per minute.
|
||||
# Client will be kicked if more floods detected.
|
||||
# Default: 2
|
||||
ClientPacketQueueMaxFloodsPerMin = 2
|
||||
|
||||
# Maximum number of queue overflows per minute.
|
||||
# After overflow all incoming packets from client are dropped until queue is flushed.
|
||||
# Client will be kicked if more queue overflows detected.
|
||||
# Default: 1
|
||||
ClientPacketQueueMaxOverflowsPerMin = 1
|
||||
|
||||
# Maximum number of buffer underflows per minute.
|
||||
# Client will be kicked if more underflow exceptions detected.
|
||||
# Default: 1
|
||||
ClientPacketQueueMaxUnderflowsPerMin = 1
|
||||
|
||||
# Maximum number of unknown packets per minute.
|
||||
# Client will be kicked if more unknown packets received.
|
||||
# Default: 5
|
||||
ClientPacketQueueMaxUnknownPerMin = 5
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Optimization
|
||||
# ---------------------------------------------------------------------------
|
||||
# Items on ground management.
|
||||
# Allow players to drop items on the ground.
|
||||
# Default: True
|
||||
AllowDiscardItem = True
|
||||
|
||||
# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0.
|
||||
# Default: 600
|
||||
AutoDestroyDroppedItemAfter = 600
|
||||
|
||||
# Time in secs after which dropped herb will be auto-destroyed
|
||||
# Default: 60
|
||||
AutoDestroyHerbTime = 60
|
||||
|
||||
# List of item id that will not be destroyed (separated by "," like 57,5575,6673).
|
||||
# Notes:
|
||||
# Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
|
||||
# Items on this list will be protected regardless of the following options.
|
||||
# Default: 0
|
||||
ListOfProtectedItems = 0
|
||||
|
||||
# Cleans up the server database on startup.
|
||||
# The bigger the database is, the longer it will take to clean up the database(the slower the server will start).
|
||||
# Sometimes this ends up with 0 elements cleaned up, and a lot of wasted time on the server startup.
|
||||
# If you want a faster server startup, set this to 'false', but its recommended to clean up the database from time to time.
|
||||
# Default: True
|
||||
DatabaseCleanUp = True
|
||||
|
||||
# The time before a database connection closes (in miliseconds)
|
||||
# If a query takes longer to execute than the time defined here, the server will throw "Unclosed Connection!" error.
|
||||
# If you get often this error message, try increasing this.
|
||||
# Default: 60000ms
|
||||
ConnectionCloseTime = 60000
|
||||
|
||||
# This is the interval (in minutes), that the gameserver will update a players information such as location.
|
||||
# The higher you set this number, there will be less character information saving so you will have less accessessing of the database and your hard drive(s).
|
||||
# The lower you set this number, there will be more frequent character information saving so you will have more access to the database and your hard drive(s).
|
||||
# A value of 0 disables periodic saving.
|
||||
# Independent of this setting the character is always saved after leaving the world.
|
||||
# Default: 15
|
||||
CharacterDataStoreInterval = 15
|
||||
|
||||
# This enables the server to only update items when saving the character.
|
||||
# Enabling this greatly reduces DB usage and improves performance.
|
||||
# WARNING: This option causes item loss during crashes.
|
||||
# Default: False
|
||||
LazyItemsUpdate = False
|
||||
|
||||
# When enabled, this forces (even if using lazy item updates) the items owned by the character to be updated into DB when saving its character.
|
||||
# Default: False
|
||||
UpdateItemsOnCharStore = False
|
||||
|
||||
# Also delete from world misc. items dropped by players (all except equip-able items).
|
||||
# Notes:
|
||||
# Works only if AutoDestroyDroppedItemAfter is greater than 0.
|
||||
# Default: False
|
||||
DestroyPlayerDroppedItem = False
|
||||
|
||||
# Destroy dropped equipable items (armor, weapon, jewelry).
|
||||
# Notes:
|
||||
# Works only if DestroyPlayerDroppedItem = True
|
||||
# Default: False
|
||||
DestroyEquipableItem = False
|
||||
|
||||
# Save dropped items into the database for restoring after restart.
|
||||
# Default: False
|
||||
SaveDroppedItem = False
|
||||
|
||||
# Enable/Disable the emptying of the stored dropped items table after items are loaded into memory (safety setting).
|
||||
# If the server crashed before saving items, on next start old items will be restored and players may already have picked up some of them so this will prevent duplicates.
|
||||
# Default: False
|
||||
EmptyDroppedItemTableAfterLoad = False
|
||||
|
||||
# Time interval in minutes to save in DB items on ground. Disabled = 0.
|
||||
# Notes:
|
||||
# If SaveDroppedItemInterval is disabled, items will be saved into the database only at server shutdown.
|
||||
# Default: 60
|
||||
SaveDroppedItemInterval = 60
|
||||
|
||||
# Delete all saved items from the database on next restart?
|
||||
# Notes:
|
||||
# Works only if SaveDroppedItem = False.
|
||||
# Default: False
|
||||
ClearDroppedItemTable = False
|
||||
|
||||
# Delete invalid quest from players.
|
||||
# Default: False
|
||||
AutoDeleteInvalidQuestData = False
|
||||
|
||||
# Setting False can improve server performance on high rate/population servers.
|
||||
# Default: True
|
||||
PreciseDropCalculation = True
|
||||
|
||||
# Allow creating multiple non-stackable items at one time?
|
||||
# Default: True
|
||||
MultipleItemDrop = True
|
||||
|
||||
# Forces full item inventory packet to be sent for any item change.
|
||||
# Notes:
|
||||
# This can increase network traffic
|
||||
# Default: False
|
||||
ForceInventoryUpdate = False
|
||||
|
||||
# True = Load html's into cache only on first time html is requested.
|
||||
# False = Load all html's into cache on server startup.
|
||||
# Default: True
|
||||
LazyCache = True
|
||||
|
||||
# Cache all character names in to memory on server startup
|
||||
# False - names are loaded from Db when they are requested
|
||||
# True - decrease Db usage , increase memory consumption
|
||||
# Default: True
|
||||
CacheCharNames = True
|
||||
|
||||
# Minimum and maximum variables in seconds for npc animation delay.
|
||||
# You must keep MinNPCAnimation < = MaxNPCAnimation.
|
||||
# Default: 10
|
||||
MinNPCAnimation = 10
|
||||
|
||||
# Default: 20
|
||||
MaxNPCAnimation = 20
|
||||
|
||||
# Default: 5
|
||||
MinMonsterAnimation = 5
|
||||
|
||||
# Default: 20
|
||||
MaxMonsterAnimation = 20
|
||||
|
||||
# Knownlist (the list of things a character sees) update method. Default is currently time based updating, which also makes it possible to use config options for guards to see moving monsters. Alternatively move based update can be used but guards cannot track mobs with that option but otherwise it should work well.
|
||||
# Default: False
|
||||
MoveBasedKnownlist = False
|
||||
|
||||
# Interval (in miliseconds) in which the knownlist does full updates.
|
||||
# For move based updates its used for intermediate updates.
|
||||
# WARNING!
|
||||
# Useful interval is between 300 - 2000. Too small value may kill your CPU, too high value may not update knownlists properly. The default value is chosen experimentally.
|
||||
# Default: 1250
|
||||
KnownListUpdateInterval = 1250
|
||||
|
||||
# Grid options: Grids can turn themselves on and off. This also affects the loading and processing of all AI tasks and (in the future) geodata within this grid.
|
||||
# Turn on for a grid with a person in it is immediate, but it then turns on the 8 neighboring grids based on the specified number of seconds.
|
||||
# Turn off for a grid and neighbors occurs after the specified number of seconds have passed during which a grid has had no players in or in any of its neighbors.
|
||||
# The always on option allows to ignore all this and let all grids be active at all times (not suggested).
|
||||
# Default: False
|
||||
GridsAlwaysOn = False
|
||||
|
||||
# Default: 1
|
||||
GridNeighborTurnOnTime = 1
|
||||
|
||||
# Default: 90
|
||||
GridNeighborTurnOffTime = 90
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# World dimensions
|
||||
# ---------------------------------------------------------------------------
|
||||
# Min and max world regions (including)
|
||||
# Default: X:11-26, Y:10-26
|
||||
WorldXMin = 11
|
||||
WorldXMax = 26
|
||||
WorldYMin = 10
|
||||
WorldYMax = 26
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Geodata
|
||||
# ---------------------------------------------------------------------------
|
||||
# GeoData options:
|
||||
# 0 = GeoData and PathFinding OFF (default)
|
||||
# 1 = GeoData is used to check Line Of Sight (LOS) targeting and
|
||||
# L2Playable movement. You need to download files for data/geodata folder.
|
||||
# Monsters can pass walls but not aggro (no line of sight) through them.
|
||||
# 2 = Full GeoData enabled. Includes PathFinding (requires also /data/pathnode
|
||||
# files if CellPathFinding not enabled) and all character moves go through
|
||||
# geodata checks (if a mob passes a wall, pathfinding didn't find a route
|
||||
# but we allow attack and returning home).
|
||||
# Recommended server memory minimum 2 GB, rather 3 GB.
|
||||
# Default: 0
|
||||
GeoData = 0
|
||||
|
||||
# Cell-level pathfinding, produces more accurate routes but is (maybe 10x) heavier to calculate. Recommended for small servers at least.
|
||||
# If False, pathnode files are used. Uses a max number of nodes in calculation which can be adjusted in the algorithm if it needs to be faster.
|
||||
# Default: False
|
||||
CellPathFinding = False
|
||||
|
||||
# Pathfinding array buffers configuration
|
||||
PathFindBuffers = 100x6;128x6;192x6;256x4;320x4;384x4;500x2
|
||||
|
||||
# Weight for nodes without obstacles far from walls
|
||||
LowWeight = 0.5
|
||||
|
||||
# Weight for nodes near walls
|
||||
MediumWeight = 2
|
||||
|
||||
# Weight for nodes with obstacles
|
||||
HighWeight = 3
|
||||
|
||||
# Angle paths will be more "smart", but in cost of higher CPU utilization
|
||||
AdvancedDiagonalStrategy = True
|
||||
|
||||
# Weight for diagonal movement. Used only with AdvancedDiagonalStrategy = True
|
||||
# Default: LowWeight * sqrt(2)
|
||||
DiagonalWeight = 0.707
|
||||
|
||||
# Maximum number of LOS postfilter passes, 0 will disable postfilter.
|
||||
# Default: 3
|
||||
MaxPostfilterPasses = 3
|
||||
|
||||
# Path debug function.
|
||||
# Nodes known to pathfinder will be displayed as adena, constructed path as antidots.
|
||||
# Number of the items show node cost * 10
|
||||
# Potions display path after first stage filter
|
||||
# Red potions - actual waypoints. Green potions - nodes removed by LOS postfilter
|
||||
# This function FOR DEBUG PURPOSES ONLY, never use it on the live server !
|
||||
DebugPath = False
|
||||
|
||||
# True = Loads GeoData buffer's content into physical memory.
|
||||
# False = Does not necessarily imply that the GeoData buffer's content is not resident in physical memory.
|
||||
# Default: True
|
||||
ForceGeodata = True
|
||||
|
||||
# This setting controls Client <--> Server Player coordinates synchronization:
|
||||
# -1 - Will synchronize only Z from Client --> Server. Default when no geodata.
|
||||
# 1 - Synchronization Client --> Server only. Using this option (without geodata) makes it more difficult for players to bypass obstacles.
|
||||
# 2 - Intended for geodata (at least with cell-level pathfinding, otherwise can you try -1).
|
||||
# Server sends validation packet if client goes too far from server calculated coordinates.
|
||||
# Default: -1
|
||||
CoordSynchronize = -1
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Falling Damage
|
||||
# ---------------------------------------------------------------------------
|
||||
# Allow characters to receive damage from falling.
|
||||
# CoordSynchronize = 2 is recommended.
|
||||
# True - enabled.
|
||||
# False - disabled.
|
||||
# Auto - True if geodata enabled and False if disabled.
|
||||
# Default: Auto
|
||||
EnableFallingDamage = Auto
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Features
|
||||
# ---------------------------------------------------------------------------
|
||||
# Zone Setting Options:
|
||||
# 0 = Peace All the Time
|
||||
# 1 = PVP During Siege for siege participants
|
||||
# 2 = PVP All the Time
|
||||
# Default: 0
|
||||
ZoneTown = 0
|
||||
|
||||
# Global Chat.
|
||||
# Available Options: ON, OFF, GM, GLOBAL
|
||||
# Default: ON
|
||||
GlobalChat = ON
|
||||
|
||||
# Trade Chat.
|
||||
# Available Options: ON, OFF, GM, GLOBAL
|
||||
# Default: ON
|
||||
TradeChat = ON
|
||||
|
||||
# If you are experiencing problems with Warehouse transactions, feel free to disable them here.
|
||||
# Default: True
|
||||
AllowWarehouse = True
|
||||
|
||||
# Enable Warehouse Cache. If warehouse is not used will server clear memory used by this warehouse.
|
||||
# Default: False
|
||||
WarehouseCache = False
|
||||
|
||||
# How long warehouse should be stored in memory.
|
||||
# Default: 15
|
||||
WarehouseCacheTime = 15
|
||||
|
||||
# Default: True
|
||||
AllowRefund = True
|
||||
|
||||
# Default: True
|
||||
AllowMail = True
|
||||
|
||||
# Default: True
|
||||
AllowAttachments = True
|
||||
|
||||
# If True player can try on weapon and armor in shop.
|
||||
# Default: True
|
||||
AllowWear = True
|
||||
|
||||
# Default: 5
|
||||
WearDelay = 5
|
||||
|
||||
#Adena cost to try on an item.
|
||||
# Default: 10
|
||||
WearPrice = 10
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Misc Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: True
|
||||
AllowRace = True
|
||||
|
||||
# Default: True
|
||||
AllowWater = True
|
||||
|
||||
# Enable pets for rent (wyvern & strider) from pet managers.
|
||||
# Default: False
|
||||
AllowRentPet = False
|
||||
|
||||
# Default: True
|
||||
AllowFishing = True
|
||||
|
||||
# Default: True
|
||||
AllowBoat = True
|
||||
|
||||
# Boat broadcast radius.
|
||||
# If players getting annoyed by boat shouts then radius can be decreased.
|
||||
# Default: 20000
|
||||
BoatBroadcastRadius = 20000
|
||||
|
||||
# Default: True
|
||||
AllowCursedWeapons = True
|
||||
|
||||
# This controls whether or not NPCs (not mobs) will walk around from one point to another.
|
||||
# Default: True
|
||||
AllowNpcWalkers = True
|
||||
|
||||
#Allow Pet manager's pets to walk around.
|
||||
# Default: True
|
||||
AllowPetWalkers = True
|
||||
|
||||
# Show "data/html/servnews.htm" when a character enters world.
|
||||
# Default: False
|
||||
ShowServerNews = False
|
||||
|
||||
# Type of the Community board:
|
||||
# 0 = community is disabled
|
||||
# 1 = old community
|
||||
# 2 = full community (not fully implemented, experimental)
|
||||
# Default: 1
|
||||
CommunityType = 1
|
||||
|
||||
# Default: False
|
||||
BBSShowPlayerList = False
|
||||
|
||||
# Default: _bbshome
|
||||
BBSDefault = _bbshome
|
||||
|
||||
# show level of character to others in Community Board
|
||||
# Default: False
|
||||
ShowLevelOnCommunityBoard = False
|
||||
|
||||
# Default: True
|
||||
ShowStatusOnCommunityBoard = True
|
||||
|
||||
# Default: 50
|
||||
NamePageSizeOnCommunityBoard = 50
|
||||
|
||||
# Default: 5
|
||||
NamePerRowOnCommunityBoard = 5
|
||||
|
||||
# Enable chat filter
|
||||
# Default = False
|
||||
UseChatFilter = False
|
||||
|
||||
# Replace filter words with following chars
|
||||
ChatFilterChars = ^_^
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Manor
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: True
|
||||
AllowManor = True
|
||||
|
||||
# Manor refresh time in military hours.
|
||||
# Default: 20 (8pm)
|
||||
AltManorRefreshTime = 20
|
||||
|
||||
# Manor refresh time (minutes).
|
||||
# Default: 00 (start of the hour)
|
||||
AltManorRefreshMin = 00
|
||||
|
||||
# Manor period approve time in military hours.
|
||||
# Default: 6 (6am)
|
||||
AltManorApproveTime = 6
|
||||
|
||||
# Manor period approve time (minutes).
|
||||
# Default: 00 (start of the hour)
|
||||
AltManorApproveMin = 00
|
||||
|
||||
# Manor maintenance time.
|
||||
# Default: 360000 (6 minutes)
|
||||
AltManorMaintenancePeriod = 360000
|
||||
|
||||
# Manor Save Type.
|
||||
# True = Save data into the database after every action
|
||||
# Default: False
|
||||
AltManorSaveAllActions = False
|
||||
|
||||
# Manor Save Period (used only if AltManorSaveAllActions = False) Default very 2 hours
|
||||
# Default: 2
|
||||
AltManorSavePeriodRate = 2
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Lottery
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: True
|
||||
AllowLottery = True
|
||||
|
||||
# Initial Lottery prize.
|
||||
# Default: 50000
|
||||
AltLotteryPrize = 50000
|
||||
|
||||
# Lottery Ticket Price
|
||||
# Default: 2000
|
||||
AltLotteryTicketPrice = 2000
|
||||
|
||||
# What part of jackpot amount should receive characters who pick 5 wining numbers
|
||||
# Default: 0.6
|
||||
AltLottery5NumberRate = 0.6
|
||||
|
||||
# What part of jackpot amount should receive characters who pick 4 wining numbers
|
||||
# Default: 0.2
|
||||
AltLottery4NumberRate = 0.2
|
||||
|
||||
# What part of jackpot amount should receive characters who pick 3 wining numbers
|
||||
# Default: 0.2
|
||||
AltLottery3NumberRate = 0.2
|
||||
|
||||
# How much adena receive characters who pick two or less of the winning number
|
||||
# Default: 200
|
||||
AltLottery2and1NumberPrize = 200
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Item Auction
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
AltItemAuctionEnabled = False
|
||||
|
||||
# Number of days before auction cleared from database with all bids.
|
||||
# Default: 14
|
||||
AltItemAuctionExpiredAfter = 14
|
||||
|
||||
# Auction extends to specified amount of seconds if one or more new bids added.
|
||||
# By default auction extends only two times, by 5 and 3 minutes, this custom value used after it.
|
||||
# Values higher than 60s is not recommended.
|
||||
# Default: 0
|
||||
AltItemAuctionTimeExtendsOnBid = 0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Dimension Rift
|
||||
# ---------------------------------------------------------------------------
|
||||
# Minimal party size to enter rift. Min = 2, Max = 9.
|
||||
# If while inside the rift, the party becomes smaller, all members will be teleported back.
|
||||
# Default: 2
|
||||
RiftMinPartySize = 2
|
||||
|
||||
# Number of maximum jumps between rooms allowed, after this time party will be teleported back
|
||||
# Default: 4
|
||||
MaxRiftJumps = 4
|
||||
|
||||
# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s
|
||||
# Default: 10000
|
||||
RiftSpawnDelay = 10000
|
||||
|
||||
# Time between automatic jumps in seconds
|
||||
# Default: 480
|
||||
AutoJumpsDelayMin = 480
|
||||
|
||||
# Default: 600
|
||||
AutoJumpsDelayMax = 600
|
||||
|
||||
# Time Multiplier for stay in the boss room
|
||||
# Default: 1.5
|
||||
BossRoomTimeMultiply = 1.5
|
||||
|
||||
# Cost in dimension fragments to enter the rift, each party member must own this amount
|
||||
# Default: 18
|
||||
RecruitCost = 18
|
||||
|
||||
# Default: 21
|
||||
SoldierCost = 21
|
||||
|
||||
# Default: 24
|
||||
OfficerCost = 24
|
||||
|
||||
# Default: 27
|
||||
CaptainCost = 27
|
||||
|
||||
# Default: 30
|
||||
CommanderCost = 30
|
||||
|
||||
# Default: 33
|
||||
HeroCost = 33
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Four Sepulchers
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: 50
|
||||
TimeOfAttack = 50
|
||||
|
||||
# Default: 5
|
||||
TimeOfCoolDown = 5
|
||||
|
||||
# Default: 3
|
||||
TimeOfEntry = 3
|
||||
|
||||
# Default: 2
|
||||
TimeOfWarmUp = 2
|
||||
|
||||
# Default: 4
|
||||
NumberOfNecessaryPartyMembers = 4
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Punishment
|
||||
# ---------------------------------------------------------------------------
|
||||
# Player punishment for illegal actions:
|
||||
# 1 - broadcast warning to gms only
|
||||
# 2 - kick player(default)
|
||||
# 3 - kick & ban player
|
||||
# 4 - jail player (define minutes of jail with param: 0 = infinite)
|
||||
# Default: 2
|
||||
DefaultPunish = 2
|
||||
|
||||
# This setting typically specifies the duration of the above punishment.
|
||||
# Default: 0
|
||||
DefaultPunishParam = 0
|
||||
|
||||
# Apply default punish if player buy items for zero adena.
|
||||
# Default: True
|
||||
OnlyGMItemsFree = True
|
||||
|
||||
# Jail is a PvP zone.
|
||||
# Default: False
|
||||
JailIsPvp = False
|
||||
|
||||
# Disable all chat in jail (except normal one)
|
||||
# Default: True
|
||||
JailDisableChat = True
|
||||
|
||||
# Disable all transaction in jail
|
||||
# Trade/Store/Drop
|
||||
# Default: False
|
||||
JailDisableTransaction = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Database Custom Tables
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: False
|
||||
CustomSpawnlistTable = False
|
||||
|
||||
# Option to save GM spawn only in the custom table.
|
||||
# Default: False
|
||||
SaveGmSpawnOnCustom = False
|
||||
|
||||
# Option to delete spawn in alternate table.
|
||||
# Default: False
|
||||
DeleteGmSpawnOnCustom = False
|
||||
|
||||
# Default: False
|
||||
CustomNpcTable = False
|
||||
|
||||
# Default: False
|
||||
CustomNpcSkillsTable = False
|
||||
|
||||
# Default: False
|
||||
CustomArmorSetsTable = False
|
||||
|
||||
# Default: False
|
||||
CustomTeleportTable = False
|
||||
|
||||
# Default: False
|
||||
CustomDroplistTable = False
|
||||
|
||||
# Default: False
|
||||
CustomMerchantTables = False
|
||||
|
||||
# Default: False
|
||||
CustomNpcBufferTables = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Handy's Block Checker Event Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enable the event ?
|
||||
# Default: True
|
||||
EnableBlockCheckerEvent = True
|
||||
|
||||
# Minimun number of members on each team before
|
||||
# be able to start the event
|
||||
# Min: 1
|
||||
# Max: 6
|
||||
# Retail: 2
|
||||
BlockCheckerMinTeamMembers = 2
|
||||
|
||||
# Fair play
|
||||
# Players can choose what team to play. However, by
|
||||
# enabling this property to true, the teams will be
|
||||
# balanced in the teleport to the arena
|
||||
HBCEFairPlay = True
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Developer Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# Do not touch these if you do not know what you are doing.
|
||||
# These settings are for debugging servers ONLY. They are not meant for LIVE servers.
|
||||
|
||||
# Default: False
|
||||
Debug = False
|
||||
|
||||
# Packet handler debug output
|
||||
# Default: False
|
||||
PacketHandlerDebug = False
|
||||
|
||||
# Default: False
|
||||
Developer = False
|
||||
|
||||
# Default: False
|
||||
AcceptGeoeditorConn = False
|
||||
|
||||
# If True the server will be a test server (listed by test server clients only).
|
||||
# Default: False
|
||||
TestServer = False
|
||||
|
||||
# Don't load Handlers
|
||||
# Default: False
|
||||
AltDevNoHandlers = False
|
||||
|
||||
# Don't load quests.
|
||||
# Default: False
|
||||
AltDevNoQuests = False
|
||||
|
||||
# Don't load spawntable.
|
||||
# Default: False
|
||||
AltDevNoSpawns = False
|
||||
@@ -0,0 +1,17 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Gracia Seeds Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Seed of Destruction Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Count of Kills which needed for Stage 2
|
||||
# Default: 10
|
||||
TiatKillCountForNextState = 10
|
||||
|
||||
# Length of Stage 2 before the Defense state starts (in minutes).
|
||||
# Default: 720min (12h)
|
||||
Stage2Length = 720
|
||||
@@ -0,0 +1,77 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Antharas
|
||||
# ---------------------------------------------------------------------------
|
||||
# Delay of appearance time of Antharas. Value is minute. Range 3-60
|
||||
AntharasWaitTime = 30
|
||||
|
||||
# Interval time of Antharas. Value is hour. Range 1-480
|
||||
IntervalOfAntharasSpawn = 264
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfAntharasSpawn = 72
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Valakas
|
||||
# ---------------------------------------------------------------------------
|
||||
# Delay of appearance time of Valakas. Value is minute. Range 3-60
|
||||
ValakasWaitTime = 30
|
||||
|
||||
# Interval time of Valakas. Value is hour. Range 1-480
|
||||
IntervalOfValakasSpawn = 264
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfValakasSpawn = 72
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Baium
|
||||
# ---------------------------------------------------------------------------
|
||||
# Interval time of Baium. Value is hour. Range 1-480
|
||||
IntervalOfBaiumSpawn = 168
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfBaiumSpawn = 48
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Core
|
||||
# ---------------------------------------------------------------------------
|
||||
# Interval time of Core. Value is hour. Range 1-480
|
||||
IntervalOfCoreSpawn = 60
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfCoreSpawn = 24
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Orfen
|
||||
# ---------------------------------------------------------------------------
|
||||
# Interval time of Orfen. Value is hour. Range 1-480
|
||||
IntervalOfOrfenSpawn = 48
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfOrfenSpawn = 20
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Queen Ant
|
||||
# ---------------------------------------------------------------------------
|
||||
# Interval time of QueenAnt. Value is hour. Range 1-480
|
||||
IntervalOfQueenAntSpawn = 36
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfQueenAntSpawn = 17
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Zaken
|
||||
# ---------------------------------------------------------------------------
|
||||
# Interval time of Zaken. Value is hour. Range 1-480
|
||||
IntervalOfZakenSpawn = 19
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfZakenSpawn = 35
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Frintezza
|
||||
# ---------------------------------------------------------------------------
|
||||
# Interval time of Frintezza. Value is hour. Range 1-480
|
||||
IntervalOfFrintezzaSpawn = 48
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfFrintezzaSpawn = 8
|
||||
+173
@@ -0,0 +1,173 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# NPC Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# This properties file is solely for the purpose of NPC modifications and settings that directly influence them.
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# General
|
||||
# ---------------------------------------------------------------------------
|
||||
# Global announcements will be made indicating Blacksmith/Merchant of Mammon
|
||||
# Spawning points.
|
||||
# Default: False
|
||||
AnnounceMammonSpawn = False
|
||||
|
||||
# True - Mobs can be aggressive while in peace zones.
|
||||
# False - Mobs can NOT be aggressive while in peace zones.
|
||||
# Default: True
|
||||
AltMobAgroInPeaceZone = True
|
||||
|
||||
# Defines whether NPCs are attackable by default
|
||||
# Retail: True
|
||||
AltAttackableNpcs = True
|
||||
|
||||
# Allows non-GM players to view NPC stats via shift-click
|
||||
# Default: False
|
||||
AltGameViewNpc = False
|
||||
|
||||
# Maximum distance mobs can randomly go from spawn point.
|
||||
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
|
||||
# Default: 300
|
||||
MaxDriftRange = 300
|
||||
|
||||
# If True, the following deep blue mobs' drop penalties will be applied:
|
||||
# - When player's level is 9 or greater than mob's level, drops got divided by 3.
|
||||
# - After 9 levels of difference between player and mobs, drop chance is lowered by 9% each level that difference increases. (9lvls diff = -9%; 10lvls diff = -18%;)
|
||||
# Default: True
|
||||
UseDeepBlueDropRules = True
|
||||
|
||||
# If True, the following deep blue raid bosses drop penalties will be applied:
|
||||
# - When player's level is 9 or greater than raid's level, drops got divided by 3.
|
||||
# - After 9 levels of difference between player and raid, drop chance is lowered by 9% each level that difference increases. (9lvls diff = -9%; 10lvls diff = -18%;)
|
||||
# Default: True
|
||||
UseDeepBlueDropRulesRaid = True
|
||||
|
||||
# Default: False
|
||||
ShowNpcLevel = False
|
||||
|
||||
# Show clan, alliance crests for territory NPCs without quests
|
||||
# Default: False
|
||||
ShowCrestWithoutQuest = False
|
||||
|
||||
# Do you want mobs to drop Vitality resplenishing herbs?
|
||||
# Notes:
|
||||
# Works only if EnableVitality = True
|
||||
# Default: True
|
||||
EnableVitalityHerbs = True
|
||||
|
||||
# Custom random EnchantEffect
|
||||
# All npcs with weapons get random weapon enchanted value
|
||||
# Enchantment is only visual, range is 4-21
|
||||
# Default: False
|
||||
EnableRandomEnchantEffect = False
|
||||
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
# The penalty in percent for -2 till -5 level differences
|
||||
# default:
|
||||
# normal - 0.7, 0.6, 0.6, 0.55
|
||||
# critical - 0.75, 0.65, 0.6, 0.58
|
||||
# skill - 0.8, 0.7, 0.65, 0.62
|
||||
DmgPenaltyForLvLDifferences = 0.7, 0.6, 0.6, 0.55
|
||||
CritDmgPenaltyForLvLDifferences = 0.75, 0.65, 0.6, 0.58
|
||||
SkillDmgPenaltyForLvLDifferences = 0.8, 0.7, 0.65, 0.62
|
||||
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
# The penalty in percent for -3 till -6 level differences
|
||||
# Default: unknown
|
||||
SkillChancePenaltyForLvLDifferences = 2.5, 3.0, 3.25, 3.5
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Guards
|
||||
# ---------------------------------------------------------------------------
|
||||
# True - Allows guards to attack aggressive mobs within range.
|
||||
# Default: False
|
||||
GuardAttackAggroMob = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Pets
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option enables or disables the Wyvern manager located in every castle
|
||||
# to train Wyverns and Striders from Hatchlings.
|
||||
# Default: False
|
||||
AllowWyvernUpgrader = False
|
||||
|
||||
# Pets that can be rented.
|
||||
# Example: 30827, 32471, 34486, 36547
|
||||
# Default: 30827
|
||||
ListPetRentNpc = 30827
|
||||
|
||||
# This will control the inventory space limit for pets (NOT WEIGHT LIMIT).
|
||||
# Default: 12
|
||||
MaximumSlotsForPet = 12
|
||||
|
||||
# HP/MP Regen Multiplier for Pets
|
||||
# Default: 100, 100
|
||||
PetHpRegenMultiplier = 100
|
||||
PetMpRegenMultiplier = 100
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Raid Bosses
|
||||
# ---------------------------------------------------------------------------
|
||||
# Percent of HP and MP regeneration for raid bosses.
|
||||
# Example: Setting HP to 10 will cause raid boss HP to regenerate 90% slower than normal.
|
||||
# Default: 100, 100
|
||||
RaidHpRegenMultiplier = 100
|
||||
RaidMpRegenMultiplier = 100
|
||||
|
||||
# Percent of physical and magical defense for raid bosses.
|
||||
# Example: A setting of 10 will cause defense to be 90% lower than normal,
|
||||
# while 110 will cause defense to be 10% higher than normal.
|
||||
# Default: 100, 100
|
||||
RaidPDefenceMultiplier = 100
|
||||
RaidMDefenceMultiplier = 100
|
||||
|
||||
# Percent of physical and magical attack for raid bosses.
|
||||
# Example: A setting of 10 will cause attack to be 90% lower than normal,
|
||||
# while 110 will cause attack to be 10% higher than normal.
|
||||
# Default: 100, 100
|
||||
RaidPAttackMultiplier = 100
|
||||
RaidMAttackMultiplier = 100
|
||||
|
||||
# Configure Minimum and Maximum time multiplier between raid boss re-spawn.
|
||||
# By default 12Hours*1.0 for Minimum Time and 24Hours*1.0 for Maximum Time.
|
||||
# Example: Setting RaidMaxRespawnMultiplier to 2 will make the time between
|
||||
# re-spawn 24 hours to 48 hours.
|
||||
# Default: 1.0, 1.0
|
||||
RaidMinRespawnMultiplier = 1.0
|
||||
RaidMaxRespawnMultiplier = 1.0
|
||||
|
||||
# Configure the interval at which raid boss minions will re-spawn.
|
||||
# This time is in milliseconds, 1 minute is 60000 milliseconds.
|
||||
# Default: 300000
|
||||
RaidMinionRespawnTime = 300000
|
||||
|
||||
# Disable Raid Curse if raid more than 8 levels lower.
|
||||
# Caution: drop will be reduced or even absent if DeepBlue drop rules enabled.
|
||||
# Default: False
|
||||
DisableRaidCurse = False
|
||||
|
||||
# Configure the interval at which raid bosses and minions wont reconsider their target
|
||||
# This time is in seconds, 1 minute is 60 seconds.
|
||||
# Default: 10,10,10
|
||||
RaidChaosTime = 10
|
||||
GrandChaosTime = 10
|
||||
MinionChaosTime = 10
|
||||
|
||||
# A comma separated list of all NPCs who have no dialog, i.e. double-clicking on them doesn't open a chat window
|
||||
# Default: 18684,18685,18686,18687,18688,18689,18690,19691,18692,31557,31606,31671,31672,31673,31674,32026,32030,32031,32032,32306,32619,32620,32621
|
||||
NonTalkingNpcs = 18684,18685,18686,18687,18688,18689,18690,19691,18692,31557,31606,31671,31672,31673,31674,32026,32030,32031,32032,32306,32619,32620,32621
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
# Example for <cr> and <lf>
|
||||
# (not allow players to confuse others by writing from beginning of the line)
|
||||
# \\r
|
||||
# \\n
|
||||
#
|
||||
# These words will be replaced:
|
||||
suck
|
||||
gay
|
||||
rape
|
||||
fuck
|
||||
dick
|
||||
@@ -0,0 +1,121 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Floodprotector Options
|
||||
# ---------------------------------------------------------------------------
|
||||
# The following settings can be applied to each feature:
|
||||
# Interval - interval in gameserver ticks (1 tick = 100ms) in which only one request is allowed
|
||||
# LogFlooding - whether flooding should be logged (only first ocurrance of flooding and total count of flood requests is logged)
|
||||
# PunishmentLimit - if number of requests within single interval exceeds specified number then the specified punishment is applied (0 = disables punishment feature)
|
||||
# PunishmentType - type of the punishment ('none', 'kick', 'ban', 'jail'), valid only if PunishmentLimit is greater than 0
|
||||
# PunishmentTime - for how many minutes should the player(jail)/account(ban) be punished (0 = forever), valid only for PunishmentType 'jail' or 'ban'
|
||||
|
||||
# UseItem - item usage flooding
|
||||
FloodProtectorUseItemInterval = 4
|
||||
FloodProtectorUseItemLogFlooding = False
|
||||
FloodProtectorUseItemPunishmentLimit = 0
|
||||
FloodProtectorUseItemPunishmentType = none
|
||||
FloodProtectorUseItemPunishmentTime = 0
|
||||
|
||||
# RollDice - rolling dice flooding
|
||||
FloodProtectorRollDiceInterval = 42
|
||||
FloodProtectorRollDiceLogFlooding = False
|
||||
FloodProtectorRollDicePunishmentLimit = 0
|
||||
FloodProtectorRollDicePunishmentType = none
|
||||
FloodProtectorRollDicePunishmentTime = 0
|
||||
|
||||
# Firework - firework flooding
|
||||
FloodProtectorFireworkInterval = 42
|
||||
FloodProtectorFireworkLogFlooding = False
|
||||
FloodProtectorFireworkPunishmentLimit = 0
|
||||
FloodProtectorFireworkPunishmentType = none
|
||||
FloodProtectorFireworkPunishmentTime = 0
|
||||
|
||||
# ItemPetSummon - item summonning and pet mounting flooding
|
||||
FloodProtectorItemPetSummonInterval = 16
|
||||
FloodProtectorItemPetSummonLogFlooding = False
|
||||
FloodProtectorItemPetSummonPunishmentLimit = 0
|
||||
FloodProtectorItemPetSummonPunishmentType = none
|
||||
FloodProtectorItemPetSummonPunishmentTime = 0
|
||||
|
||||
# HeroVoice - hero voice flooding
|
||||
FloodProtectorHeroVoiceInterval = 100
|
||||
FloodProtectorHeroVoiceLogFlooding = False
|
||||
FloodProtectorHeroVoicePunishmentLimit = 0
|
||||
FloodProtectorHeroVoicePunishmentType = none
|
||||
FloodProtectorHeroVoicePunishmentTime = 0
|
||||
|
||||
# GlobalChat - global chat flooding
|
||||
FloodProtectorGlobalChatInterval = 5
|
||||
FloodProtectorGlobalChatLogFlooding = False
|
||||
FloodProtectorGlobalChatPunishmentLimit = 0
|
||||
FloodProtectorGlobalChatPunishmentType = none
|
||||
FloodProtectorGlobalChatPunishmentTime = 0
|
||||
|
||||
# Subclass - subclass flooding
|
||||
FloodProtectorSubclassInterval = 20
|
||||
FloodProtectorSubclassLogFlooding = False
|
||||
FloodProtectorSubclassPunishmentLimit = 0
|
||||
FloodProtectorSubclassPunishmentType = none
|
||||
FloodProtectorSubclassPunishmentTime = 0
|
||||
|
||||
# DropItem - drop item flooding
|
||||
FloodProtectorDropItemInterval = 10
|
||||
FloodProtectorDropItemLogFlooding = False
|
||||
FloodProtectorDropItemPunishmentLimit = 0
|
||||
FloodProtectorDropItemPunishmentType = none
|
||||
FloodProtectorDropItemPunishmentTime = 0
|
||||
|
||||
# ServerBypass - server bypass flooding
|
||||
FloodProtectorServerBypassInterval = 5
|
||||
FloodProtectorServerBypassLogFlooding = False
|
||||
FloodProtectorServerBypassPunishmentLimit = 0
|
||||
FloodProtectorServerBypassPunishmentType = none
|
||||
FloodProtectorServerBypassPunishmentTime = 0
|
||||
|
||||
# ServerBypass - multisell list request flooding
|
||||
FloodProtectorMultiSellInterval = 1
|
||||
FloodProtectorMultiSellLogFlooding = False
|
||||
FloodProtectorMultiSellPunishmentLimit = 0
|
||||
FloodProtectorMultiSellPunishmentType = none
|
||||
FloodProtectorMultiSellPunishmentTime = 0
|
||||
|
||||
# All kind of other transactions - to/from pet, private store, warehouse, destroy
|
||||
FloodProtectorTransactionInterval = 10
|
||||
FloodProtectorTransactionLogFlooding = False
|
||||
FloodProtectorTransactionPunishmentLimit = 0
|
||||
FloodProtectorTransactionPunishmentType = none
|
||||
FloodProtectorTransactionPunishmentTime = 0
|
||||
|
||||
# Manufacture
|
||||
FloodProtectorManufactureInterval = 3
|
||||
FloodProtectorManufactureLogFlooding = False
|
||||
FloodProtectorManufacturePunishmentLimit = 0
|
||||
FloodProtectorManufacturePunishmentType = none
|
||||
FloodProtectorManufacturePunishmentTime = 0
|
||||
|
||||
# Manor
|
||||
FloodProtectorManorInterval = 30
|
||||
FloodProtectorManorLogFlooding = False
|
||||
FloodProtectorManorPunishmentLimit = 0
|
||||
FloodProtectorManorPunishmentType = none
|
||||
FloodProtectorManorPunishmentTime = 0
|
||||
|
||||
# SendMail - sending mail interval, 10s on retail
|
||||
FloodProtectorSendMailInterval = 100
|
||||
FloodProtectorSendMailLogFlooding = False
|
||||
FloodProtectorSendMailPunishmentLimit = 0
|
||||
FloodProtectorSendMailPunishmentType = none
|
||||
FloodProtectorSendMailPunishmentTime = 0
|
||||
|
||||
# CharacterSelect - attempts to load character
|
||||
FloodProtectorCharacterSelectInterval = 30
|
||||
FloodProtectorCharacterSelectLogFlooding = False
|
||||
FloodProtectorCharacterSelectPunishmentLimit = 0
|
||||
FloodProtectorCharacterSelectPunishmentType = none
|
||||
FloodProtectorCharacterSelectPunishmentTime = 0
|
||||
|
||||
# Item Auction - Request for refresh
|
||||
FloodProtectorItemAuctionInterval = 9
|
||||
FloodProtectorItemAuctionLogFlooding = False
|
||||
FloodProtectorItemAuctionPunishmentLimit = 0
|
||||
FloodProtectorItemAuctionPunishmentType = none
|
||||
FloodProtectorItemAuctionPunishmentTime = 0
|
||||
Vendored
+8
-15
@@ -1,26 +1,22 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fort Siege Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like.
|
||||
# If you modify any of these settings, your server will deviate from being retail-like.
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything.
|
||||
# Also, please understand what you are changing before you do so on a live server.
|
||||
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Standard Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Length of siege before the count-down (in minutes).
|
||||
# Length of siege before the count down (in minutes).
|
||||
SiegeLength = 60
|
||||
|
||||
# This defines how long you need to wait until the suspicious merchant will spawn after the siege ends (in minutes).
|
||||
# Keep in mind when merchant spawns, the fort can be immediately siege.
|
||||
# This defines how long you need to wait until the suspicious merchant will spawn after siege ends (in minutes).
|
||||
# Keep in mind when merchant spawns, the fort can be immediately sieged.
|
||||
# Default: 180
|
||||
SuspiciousMerchantRespawnDelay = 180
|
||||
|
||||
# This defines how long you have to kill all commanders once you kill the first one (in minutes).
|
||||
# After that time (if all commanders are not killed), all commanders and doors get respawned.
|
||||
# After that time (if all commanders not killed) all commanders and doors get respawned.
|
||||
CountDownLength = 10
|
||||
|
||||
# Max number of flags per clan.
|
||||
@@ -32,16 +28,13 @@ SiegeClanMinLevel = 4
|
||||
#Max number of clans that can register on each side.
|
||||
AttackerMaxClans = 500
|
||||
|
||||
# This option, if enabled, will enable to register Fortress Siege to Castle owners just in territory.
|
||||
# Default: True
|
||||
JustToTerritory = True
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fortress Commander Spawns
|
||||
# ---------------------------------------------------------------------------
|
||||
# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
|
||||
# Name - fortress name
|
||||
# N - number - 1: Archer Commander
|
||||
# N - number - 1: Archer Comander
|
||||
# - 2: Guard Commander
|
||||
# - 3: Support Unit Commander
|
||||
# - 4: Main Machine - not supported yet, used General
|
||||
@@ -56,7 +49,7 @@ JustToTerritory = True
|
||||
# Name - fortress name
|
||||
# N - number
|
||||
# x,y,z - coords
|
||||
# flag_id - id of a combat flag
|
||||
# flag_id - id of combat flag
|
||||
|
||||
# Shanty Fortress
|
||||
# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
|
||||
@@ -0,0 +1,26 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# ID Factory Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Standard Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# Allows selection of new Classes for storage of World Objects.
|
||||
# This may help servers with large amounts of players receiving error messages related to the L2ObjectHashMap and L2ObejctHashSet classes.
|
||||
#
|
||||
# By default it uses the new method, to use the old classes add the comment tag at the front of each of the following two lines.
|
||||
L2Map = WorldObjectMap
|
||||
L2Set = WorldObjectSet
|
||||
|
||||
# Tell server which IDFactory Class to use:
|
||||
# Compaction = Original method
|
||||
# BitSet = One non compaction method
|
||||
# Stack = Another non compaction method
|
||||
# Default: BitSet
|
||||
IDFactory = BitSet
|
||||
|
||||
# Check for bad ids in the database on server boot up.
|
||||
# Much faster load time without it, but may cause problems.
|
||||
# Default: True
|
||||
BadIdChecking = True
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Externalhost here (Internet IP) or Localhost IP for local test -->
|
||||
<gameserver address="127.0.0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ipconfig.xsd">
|
||||
<!-- Localhost here -->
|
||||
<define subnet="127.0.0.0/8" address="127.0.0.1" />
|
||||
<!-- Internalhosts here (LANs IPs) -->
|
||||
<define subnet="10.0.0.0/8" address="10.0.0.0" />
|
||||
<define subnet="172.16.0.0/19" address="172.16.0.0" />
|
||||
<define subnet="192.168.0.0/16" address="192.168.0.0" />
|
||||
</gameserver>
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="gameserver">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="define" maxOccurs="unbounded">
|
||||
<xs:sequence minOccurs="1" maxOccurs="1">
|
||||
<xs:element name="define" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="address" use="required">
|
||||
<xs:simpleType>
|
||||
+428
@@ -0,0 +1,428 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# L2JMODS - non-retail-like systems that have been integrated into the L2J project.
|
||||
# Be warned that there may be no support for these mods beyond the original author's assistance.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Champion mobs - Turn random mobs into Champions
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enable/Disable Champion Mob System.
|
||||
ChampionEnable = False
|
||||
|
||||
# Force Champion mobs to be passive?
|
||||
# To leave champion mobs to default/Agressive, set to False.
|
||||
# To set all champion mobs to Passive, set True.
|
||||
ChampionPassive = False
|
||||
|
||||
# % chance for a mob to became champion (0 to disable).
|
||||
ChampionFrequency = 5
|
||||
|
||||
# Title of all Champion Mobs.
|
||||
ChampionTitle = Champion
|
||||
|
||||
# Min and max levels allowed for a mob to be a Champion mob.
|
||||
ChampionMinLevel = 20
|
||||
ChampionMaxLevel = 70
|
||||
|
||||
# Hp multiplier for Champion mobs.
|
||||
ChampionHp = 8
|
||||
|
||||
# Hp Regen Multiplier for Champion mobs.
|
||||
ChampionHpRegen = 1.0
|
||||
|
||||
# Standard rewards multiplier for Champion mobs.
|
||||
ChampionRewards = 8
|
||||
|
||||
# Adena & Seal Stone rewards multiplier for Champion mobs.
|
||||
ChampionAdenasRewards = 1.0
|
||||
|
||||
# P. Attack and M. Attack bonus for Champion mobs.
|
||||
ChampionAtk = 1.0
|
||||
|
||||
# Physical/Magical Attack Speed bonus for Champion mobs.
|
||||
ChampionSpdAtk = 1.0
|
||||
|
||||
# Specified reward item ID
|
||||
ChampionRewardItemID = 6393
|
||||
|
||||
# The amount of the specified reward a player will receive if they are awarded the item.
|
||||
ChampionRewardItemQty = 1
|
||||
|
||||
# % Chance to obtain a specified reward item from a HIGHER lvl Champion mob.
|
||||
ChampionRewardLowerLvlItemChance = 0
|
||||
|
||||
# % Chance to obtain a specified reward item from a LOWER lvl Champion mob.
|
||||
ChampionRewardHigherLvlItemChance = 0
|
||||
|
||||
# Do you want to enable the vitality calculation when killing champion mobs?
|
||||
# Be aware that it can lead to huge unbalance on your server, your rate for that mob would
|
||||
# then be "mobXP x serverRate x vitalityRate x championXpRate
|
||||
# Notes:
|
||||
# Works only if EnableVitality = True
|
||||
# Default: False
|
||||
ChampionEnableVitality = False
|
||||
|
||||
# Enable spawning of the champions in instances
|
||||
# Default = False
|
||||
ChampionEnableInInstances = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Wedding System (by evill33t)
|
||||
# ---------------------------------------------------------------------------
|
||||
# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
|
||||
# CustomNpcTable = True in General.properties
|
||||
# ---------------------------------------------------------------------------
|
||||
# Wedding Manager ID: 50007
|
||||
#
|
||||
# First part - "Engagement"
|
||||
# 1) Target the player that you want to make a couple with.
|
||||
# 2) Use the voice command ".engage nameofyourpartner" then press enter.
|
||||
# 3) If the target player has you on listed as a friend (ie. you are in each other's friends list) a popup will appear with an engagement request along with a system message that you want to be engaged with him/her.
|
||||
# 4) If the target player accepts the engagement invitation, you will be engaged.
|
||||
#
|
||||
# Second part - "Marriage"
|
||||
# 1) Once two players are engaged, they can speak to Andromeda, the Wedding Priest in the Hot Springs Guild House (Goddard Area).
|
||||
# (You may need Formal Wear and Adena to pay wedding fees!)
|
||||
# 2) Each player needs to speak to the NPC and make the request to be married.
|
||||
# 3) Once done, fireworks will display and the two players will be married.
|
||||
#
|
||||
# Afterwards you can use the voice command ".gotolove nameofyourpartner" to teleport to your partner if you're married (there may also be a fee which can be specified below)
|
||||
#
|
||||
# If you want to cancel your Engagement/Marriage, use the voice command ".divorce nameofyourpartner".
|
||||
#
|
||||
# If you're married you have to pay a specified % of your adena to your partner.
|
||||
#
|
||||
# If a player attempts to become engaged to another player while married they may suffer a penalty if it's enabled below.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enable/Disable Wedding System
|
||||
AllowWedding = False
|
||||
|
||||
# Amount of Adena required to get married
|
||||
WeddingPrice = 250000000
|
||||
|
||||
# Enable/Disable punishing of players who attempt to be engaged to other players while married.
|
||||
WeddingPunishInfidelity = True
|
||||
|
||||
# Enable/Disable teleport function for married couples.
|
||||
WeddingTeleport = True
|
||||
|
||||
# Amount of Adena required to teleport to spouse.
|
||||
WeddingTeleportPrice = 50000
|
||||
|
||||
# Time before character is teleported after using the skill.
|
||||
WeddingTeleportDuration = 60
|
||||
|
||||
# Enable/Disable same sex marriages.
|
||||
WeddingAllowSameSex = False
|
||||
|
||||
# Require players to wear formal wear to be married?
|
||||
WeddingFormalWear = True
|
||||
|
||||
# Amount of Adena (%) a player must pay to the other to get divorced.
|
||||
WeddingDivorceCosts = 20
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Team vs. Team Event Engine (by FBIagent)
|
||||
# ---------------------------------------------------------------------------
|
||||
# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
|
||||
# CustomNpcTable = True in General.properties
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enable/Disable TvTEvent System
|
||||
TvTEventEnabled = False
|
||||
|
||||
# TvT in instance
|
||||
TvTEventInInstance = False
|
||||
|
||||
# Name of the instance file for TvT
|
||||
TvTEventInstanceFile = coliseum.xml
|
||||
|
||||
# Times TvT will occur (24h format).
|
||||
TvTEventInterval = 9:00,15:00,21:00,3:00
|
||||
|
||||
# Registration timer from start of event (in minutes).
|
||||
TvTEventParticipationTime = 60
|
||||
|
||||
# Event running time (in minutes).
|
||||
TvTEventRunningTime = 20
|
||||
|
||||
# TvT Event NPC (create a custom npc of type L2TvTEventNpc).
|
||||
TvTEventParticipationNpcId = 70010
|
||||
|
||||
# TvT Event Participation Fee (itemId, number). Fee is not returned.
|
||||
# Example: 57,100000
|
||||
# Default = none
|
||||
TvTEventParticipationFee = 0,0
|
||||
|
||||
# Location for TvTEvent NPC to spawn in form x,y,z[,heading]
|
||||
TvTEventParticipationNpcCoordinates = 83425,148585,-3406
|
||||
|
||||
# Min/Max amount of players allowed in each team.
|
||||
TvTEventMinPlayersInTeams = 1
|
||||
TvTEventMaxPlayersInTeams = 20
|
||||
|
||||
# Min/Max level of players that may join the event.
|
||||
TvTEventMinPlayerLevel = 1
|
||||
TvTEventMaxPlayerLevel = 85
|
||||
|
||||
# Repsawn and exit delay timers (in seconds).
|
||||
TvTEventRespawnTeleportDelay = 10
|
||||
TvTEventStartLeaveTeleportDelay = 10
|
||||
|
||||
# First Team - Name, Start/Death x,y,z location.
|
||||
TvTEventTeam1Name = Team1
|
||||
TvTEventTeam1Coordinates = 148695,46725,-3414
|
||||
|
||||
# Second Team - Name, Start/Death x,y,z location.
|
||||
TvTEventTeam2Name = Team2
|
||||
TvTEventTeam2Coordinates = 149999,46728,-3414
|
||||
|
||||
# Reward for winning team.
|
||||
# Example: TvTEventReward = itemId,amount;itemId,amount;itemId,amount
|
||||
TvTEventReward = 57,100000
|
||||
|
||||
# TvTEvent Rules
|
||||
TvTEventTargetTeamMembersAllowed = True
|
||||
TvTEventScrollsAllowed = False
|
||||
TvTEventPotionsAllowed = False
|
||||
TvTEventSummonByItemAllowed = False
|
||||
|
||||
# Door ID's to open/close on start/end.
|
||||
# Not supported in instance, use xml template for defining doors.
|
||||
# Example: TvTDoorsToOpen = 1;2;3;4;5;6
|
||||
TvTDoorsToOpen =
|
||||
TvTDoorsToClose =
|
||||
|
||||
# Should both teams get reward if there's a tie?
|
||||
TvTRewardTeamTie = False
|
||||
|
||||
# Participant's effects handling on teleport/death.
|
||||
# Effects lasting through death never removed.
|
||||
# 0 - always remove all effects.
|
||||
# 1 - remove all effects only during port to event (noblesse blessing can be used)
|
||||
# 2 - never remove any effect
|
||||
# Default: 0
|
||||
TvTEventEffectsRemoval = 0
|
||||
|
||||
# Fighter-class participants will be buffed with those buffs each respawn
|
||||
# Format: skill1Id,skill1Level;skill2Id,skill2Level...
|
||||
# Example: 1504,1;1501,1;1502,1;1499,1
|
||||
TvTEventFighterBuffs =
|
||||
|
||||
# Mage-class participants will be buffed with those buffs each respawn
|
||||
# Format: skill1Id,skill1Level;skill2Id,skill2Level...
|
||||
# Example: 1504,1;1500,1;1501,1;1085,3
|
||||
TvTEventMageBuffs =
|
||||
|
||||
# Maximum number of allowed participants per IP address (dualbox check)
|
||||
# Default: 0 (no limits)
|
||||
TvTEventMaxParticipantsPerIP = 0
|
||||
|
||||
# Voiced command (.tvt) working during TVT event to get information about event status
|
||||
TvTAllowVoicedInfoCommand = false
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# L2J Banking System
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enable/Disable Banking System
|
||||
BankingEnabled = False
|
||||
|
||||
# Amount of Goldbars a player gets when they use the ".deposit" command. Also the same amount they will lose with ".withdraw".
|
||||
BankingGoldbarCount = 1
|
||||
|
||||
# Amount of Adena a player gets when they use the ".withdraw" command. Also the same amount they will lose with ".deposit".
|
||||
BankingAdenaCount = 500000000
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Warehouse Sorting
|
||||
# Shows Withdraw Window sorted by ItemType (Armor/Weapon/Spellbook....)
|
||||
# ---------------------------------------------------------------------------
|
||||
EnableWarehouseSortingClan = False
|
||||
EnableWarehouseSortingPrivate = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Offline trade/craft
|
||||
# ---------------------------------------------------------------------------
|
||||
# Option to enable or disable offline trade feature.
|
||||
# Enable -> true, Disable -> false
|
||||
OfflineTradeEnable = False
|
||||
|
||||
# Option to enable or disable offline craft feature.
|
||||
# Enable -> true, Disable -> false
|
||||
OfflineCraftEnable = False
|
||||
|
||||
# If set to True, name color will be changed then entering offline mode
|
||||
OfflineSetNameColor = False
|
||||
|
||||
# Color of the name in offline mode (if OfflineSetNameColor = True)
|
||||
OfflineNameColor = 808080
|
||||
|
||||
# Allow fame for characters in offline mode
|
||||
# Enable -> true, Disable -> false
|
||||
OfflineFame = True
|
||||
|
||||
#Restore offline traders/crafters after restart/shutdown. Default: false.
|
||||
RestoreOffliners = False
|
||||
|
||||
#Do not restore offline characters, after OfflineMaxDays days spent from first restore.
|
||||
#Require server restart to disconnect expired shops.
|
||||
#0 = disabled (always restore).
|
||||
#Default: 10
|
||||
OfflineMaxDays = 10
|
||||
|
||||
#Disconnect shop after finished selling, buying.
|
||||
#Default: True
|
||||
OfflineDisconnectFinished = True
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Mana Drugs/Potions
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option will enable core support for:
|
||||
# Mana Drug (item ID 726), using skill ID 10000.
|
||||
# Mana Potion (item ID 728), using skill ID 10001.
|
||||
EnableManaPotionSupport = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Display Server Time
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option will enable displaying of the local server time for /time command.
|
||||
DisplayServerTime = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Welcome message
|
||||
# ---------------------------------------------------------------------------
|
||||
# Show screen welcome message on character login
|
||||
# Default: False
|
||||
ScreenWelcomeMessageEnable = False
|
||||
|
||||
# Screen welcome message text to show on character login if enabled
|
||||
# ('#' for a new line, but message can have max 2 lines)
|
||||
ScreenWelcomeMessageText = Welcome to L2J server!
|
||||
|
||||
# Show screen welcome message for x seconds when character log in to game if enabled
|
||||
ScreenWelcomeMessageTime = 10
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# AntiFeed
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option will enable antifeed for pvp/pk/clanrep points.
|
||||
# Default: False
|
||||
AntiFeedEnable = False
|
||||
|
||||
# If set to True, kills from dualbox will not increase pvp/pk points
|
||||
# and clan reputation will not be transferred.
|
||||
# Default: True
|
||||
AntiFeedDualbox = True
|
||||
|
||||
# If set to True, server will count disconnected (unable to determine ip address)
|
||||
# as dualbox.
|
||||
# Default: True
|
||||
AntiFeedDisconnectedAsDualbox = True
|
||||
|
||||
# If character died faster than timeout - pvp/pk points for killer will not increase
|
||||
# and clan reputation will not be transferred.
|
||||
# Setting to 0 will disable this feature.
|
||||
# Default: 120 seconds.
|
||||
AntiFeedInterval = 120
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Pvp/pk Announce
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: False
|
||||
AnnouncePkPvP = False
|
||||
|
||||
# Announce this as normal system message
|
||||
# Default: True
|
||||
AnnouncePkPvPNormalMessage = True
|
||||
|
||||
# PK message template
|
||||
# variables: $killer, $target
|
||||
AnnouncePkMsg = $killer has slaughtered $target
|
||||
|
||||
# Pvp message template
|
||||
# variables: $killer, $target
|
||||
AnnouncePvpMsg = $killer has defeated $target
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Chat Moderation
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option will enable using of the voice commands .banchat and .unbanchat
|
||||
# for players with corresponding access level (default: 7).
|
||||
# Check access_levels.sql and admin_command_access_rights for details.
|
||||
# Default: False
|
||||
ChatAdmin = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Multilingual support
|
||||
# ---------------------------------------------------------------------------
|
||||
# Enable or disable multilingual support.
|
||||
# Default: False
|
||||
MultiLangEnable = False
|
||||
|
||||
# List of allowed languages, semicolon separated.
|
||||
# Default: en
|
||||
MultiLangAllowed = en;ru
|
||||
|
||||
# Default language, if not defined.
|
||||
# Default: en
|
||||
MultiLangDefault = en
|
||||
|
||||
# Enable or disable voice command .lang for changing languages on the fly.
|
||||
# Default: True
|
||||
MultiLangVoiceCommand = True
|
||||
|
||||
# Enable or disable multilingual SystemMessages support.
|
||||
# Default: False
|
||||
MultiLangSystemMessageEnable = False
|
||||
|
||||
# List of allowed languages for SystemMessages, semicolon separated.
|
||||
# Default:
|
||||
MultiLangSystemMessageAllowed =
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Walker/Bot protection
|
||||
# ---------------------------------------------------------------------------
|
||||
# Basic protection against L2Walker.
|
||||
# Default: False
|
||||
L2WalkerProtection = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Debug enable/disable voice command
|
||||
# ---------------------------------------------------------------------------
|
||||
# This option will enable voice command .debug allowing players
|
||||
# to turn on/off debugging on self only.
|
||||
# (admin command //debug can enable debugging on any character)
|
||||
# Use admin_command_access_rights table for defining access rights.
|
||||
# Default: False
|
||||
DebugVoiceCommand = False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Dualbox Check
|
||||
# ---------------------------------------------------------------------------
|
||||
# Maximum number of players per IP address allowed to enter game.
|
||||
# Default: 0 (unlimited)
|
||||
DualboxCheckMaxPlayersPerIP = 0
|
||||
|
||||
# Maximum number of players per IP address allowed to participate in olympiad.
|
||||
# Default: 0 (unlimited)
|
||||
DualboxCheckMaxOlympiadParticipantsPerIP = 0
|
||||
|
||||
# Whitelist of the addresses for dualbox checks.
|
||||
# Format: Address1,Number1;Address2,Number2...
|
||||
# Network address can be number (127.0.0.1) or symbolic (localhost) formats.
|
||||
# Additional connection number added to the global limits for this address.
|
||||
# For example, if number of TvT event participants per IP address set to the 1 (no dualbox)
|
||||
# and whitelist contains "l2jserver.com,2" then number of allowed participants from l2jserver.com
|
||||
# will be 1+2=3. Use 0 or negative value for unlimited number of connections.
|
||||
# Default: 127.0.0.1,0 (no limits from localhost)
|
||||
DualboxCheckWhitelist = 127.0.0.1,0
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Olympiad Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like.
|
||||
# If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything.
|
||||
# Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Olympiad Start Time in Military hours Default 6pm (18)
|
||||
# Default: 18
|
||||
AltOlyStartTime = 18
|
||||
|
||||
# Olympiad Start Time for Min's, Default 00 so at the start of the hour.
|
||||
# Default: 00
|
||||
AltOlyMin = 00
|
||||
|
||||
# Olympiad Competition Period, Default 6 hours.
|
||||
# (If set different, should be increment by 10mins)
|
||||
# Default: 21600000
|
||||
AltOlyCPeriod = 21600000
|
||||
|
||||
# Olympiad Battle Period, Default 6 minutes.
|
||||
# Default: 360000
|
||||
AltOlyBattle = 360000
|
||||
|
||||
# Olympiad Weekly Period, Default 1 week
|
||||
# Used for adding points to nobles
|
||||
# Default: 604800000
|
||||
AltOlyWPeriod = 604800000
|
||||
|
||||
# Olympiad Validation Period, Default 24 Hours.
|
||||
# Default: 86400000
|
||||
AltOlyVPeriod = 86400000
|
||||
|
||||
# Points for reaching Noblesse for the first time
|
||||
# Default: 18
|
||||
AltOlyStartPoints = 18
|
||||
|
||||
# Points every week
|
||||
# Default: 3
|
||||
AltOlyWeeklyPoints = 3
|
||||
|
||||
# Required number of participants for the class based games
|
||||
# Default: 5
|
||||
AltOlyClassedParticipants = 5
|
||||
|
||||
# Required number of participants for the non-class based games
|
||||
# Default: 9
|
||||
AltOlyNonClassedParticipants = 9
|
||||
|
||||
# Required number of participants for the 3x3 teams games
|
||||
# Default: 9
|
||||
AltOlyTeamsParticipants = 9
|
||||
|
||||
# Number used for displaying amount of registered participants, messages "Fewer than ..." or "More than ...".
|
||||
# 0 for displaying digits instead of text phrase (old style).
|
||||
# Default: 100
|
||||
AltOlyRegistrationDisplayNumber = 100
|
||||
|
||||
# Reward for the class based games
|
||||
# Format: itemId1,itemNum1;itemId2,itemNum2...
|
||||
# Default: 13722,50
|
||||
AltOlyClassedReward = 13722,50
|
||||
|
||||
# Reward for the non-class based games
|
||||
# Format: itemId1,itemNum1;itemId2,itemNum2...
|
||||
# Default: 13722,40
|
||||
AltOlyNonClassedReward = 13722,40
|
||||
|
||||
# Reward for the 3x3 teams games
|
||||
# Format: itemId1,itemNum1;itemId2,itemNum2...
|
||||
# Default: 13722,85
|
||||
AltOlyTeamReward = 13722,85
|
||||
|
||||
# ItemId used for exchanging to the points.
|
||||
# Default: 13722
|
||||
AltOlyCompRewItem = 13722
|
||||
|
||||
# The minimal matches you need to participate to receive point rewards
|
||||
# Default: 9
|
||||
AltOlyMinMatchesForPoints = 9
|
||||
|
||||
# Rate to exchange points to reward item.
|
||||
# Default: 1000
|
||||
AltOlyGPPerPoint = 1000
|
||||
|
||||
# Noblesse points awarded to Heros.
|
||||
# Default: 180
|
||||
AltOlyHeroPoints = 180
|
||||
|
||||
# Noblesse points awarded to Rank 1 members.
|
||||
# Default: 120
|
||||
AltOlyRank1Points = 120
|
||||
|
||||
# Noblesse points awarded to Rank 2 members.
|
||||
# Default: 80
|
||||
AltOlyRank2Points = 80
|
||||
|
||||
# Noblesse points awarded to Rank 3 members.
|
||||
# Default: 55
|
||||
AltOlyRank3Points = 55
|
||||
|
||||
# Noblesse points awarded to Rank 4 members.
|
||||
# Default: 35
|
||||
AltOlyRank4Points = 35
|
||||
|
||||
# Noblesse points awarded to Rank 5 members.
|
||||
# Default: 20
|
||||
AltOlyRank5Points = 20
|
||||
|
||||
# Maximum points that player can gain/lose on a match.
|
||||
# Default: 10
|
||||
AltOlyMaxPoints = 10
|
||||
|
||||
# Hero tables show last month's winners or current status.
|
||||
# Default: True
|
||||
AltOlyShowMonthlyWinners = True
|
||||
|
||||
# Olympiad Managers announce each start of fight.
|
||||
# Default: True
|
||||
AltOlyAnnounceGames = True
|
||||
|
||||
# Restrict specified items in Olympiad. ItemID's need to be separated with a comma (ex. 1,200,350)
|
||||
# Equipped items will be moved to inventory during port.
|
||||
# Default: 6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774
|
||||
AltOlyRestrictedItems = 6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774
|
||||
|
||||
# Enchant limit for items during Olympiad battles. Disabled = -1.
|
||||
# Default: -1
|
||||
AltOlyEnchantLimit = -1
|
||||
|
||||
# Log all Olympiad fights and outcome to olympiad.csv file.
|
||||
# Default: False
|
||||
AltOlyLogFights = False
|
||||
|
||||
# Time to wait before teleported to arena.
|
||||
# Default: 120
|
||||
AltOlyWaitTime = 120
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# PvP Related Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Karma Variables
|
||||
# ---------------------------------------------------------------------------
|
||||
# Karma gain/loss
|
||||
# Default: 240
|
||||
MinKarma = 240
|
||||
|
||||
# Default: 10000
|
||||
MaxKarma = 10000
|
||||
|
||||
# The number to divide the xp recieved by to calculate karma lost on xp gain/loss.
|
||||
# Default: 260
|
||||
XPDivider = 260
|
||||
|
||||
# The minimum karma lost if 0 karma is to be removed.
|
||||
# Default: 0
|
||||
BaseKarmaLost = 0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# PK'er Drop Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: False
|
||||
CanGMDropEquipment = False
|
||||
|
||||
# Warning: Make sure the lists do NOT CONTAIN
|
||||
# trailing spaces or spaces between the numbers!
|
||||
# List of pet items we cannot drop.
|
||||
# Default: 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
|
||||
ListOfPetItems = 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
|
||||
|
||||
# Lists of items which should NEVER be dropped (note, adena will
|
||||
# never be dropped) whether on this list or not
|
||||
# Default: 57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390
|
||||
ListOfNonDroppableItems = 57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390
|
||||
|
||||
# Default: 6
|
||||
MinimumPKRequiredToDrop = 6
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Misc.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Should we award a pvp point for killing a player with karma?
|
||||
# Default: False
|
||||
AwardPKKillPVPPoint = False
|
||||
|
||||
# How much time one stays in PvP mode after hitting an innocent (in ms)
|
||||
# Default: 120000
|
||||
PvPVsNormalTime = 120000
|
||||
|
||||
# Length one stays in PvP mode after hitting a purple player (in ms)
|
||||
# Default: 60000
|
||||
PvPVsPvPTime = 60000
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Rate Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Standard Settings (Retail value = 1)
|
||||
# ---------------------------------------------------------------------------
|
||||
# Experience multiplier
|
||||
RateXp = 1
|
||||
# Skill points multiplier
|
||||
RateSp = 1
|
||||
# Experience multiplier (Party)
|
||||
RatePartyXp = 1
|
||||
# Skill points multiplier (Party)
|
||||
RatePartySp = 1
|
||||
RateConsumableCost = 1
|
||||
RateDropItems = 1
|
||||
RateRaidDropItems = 1
|
||||
RateDropSpoil = 1
|
||||
RateDropManor = 1
|
||||
RateExtractFish = 1
|
||||
RateKarmaExpLost = 1
|
||||
RateSiegeGuardsPrice = 1
|
||||
|
||||
# Quest Multipliers
|
||||
# Warning: Many quests need to be rewritten
|
||||
# for this setting to work properly.
|
||||
|
||||
# Quest item drop multiplier
|
||||
RateQuestDrop = 1
|
||||
|
||||
# Exp/SP reward multipliers
|
||||
RateQuestRewardXP = 1
|
||||
RateQuestRewardSP = 1
|
||||
|
||||
# Adena reward multiplier
|
||||
RateQuestRewardAdena = 1
|
||||
|
||||
# Use additional item multipliers?
|
||||
# Default: False
|
||||
UseQuestRewardMultipliers = False
|
||||
|
||||
# Default reward multiplier
|
||||
# When UseRewardMultipliers=False - default multiplier is used for any reward
|
||||
# When UseRewardMultipliers=True - default multiplier is used for all items not affected by additional multipliers
|
||||
# Default: 1
|
||||
RateQuestReward = 1
|
||||
|
||||
# Additional quest-reward multipliers based on item type
|
||||
RateQuestRewardPotion = 1
|
||||
RateQuestRewardScroll = 1
|
||||
RateQuestRewardRecipe = 1
|
||||
RateQuestRewardMaterial = 1
|
||||
|
||||
# List of items affected by custom drop rate by id, used now for Adena rate too.
|
||||
# Usage: itemId1,dropChance1;itemId2,dropChance2;...
|
||||
# Note: Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
|
||||
# Example for Raid boss 1x jewelry: 6656,1;6657,1;6658,1;6659,1;6660,1;6661,1;6662,1;8191,1;10170,1;10314,1;
|
||||
# Default: 57,1
|
||||
RateDropItemsById = 57,1
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Vitality system rates. Works only if EnableVitality = True
|
||||
# ---------------------------------------------------------------------------
|
||||
# The following configures the xp multiplicator of each vitality level. Basically, you have
|
||||
# 5 levels, the first one being 0. Official rates are:
|
||||
# Level 1: 150%
|
||||
# Level 2: 200%
|
||||
# Level 3: 250%
|
||||
# Level 4: 300%
|
||||
# Take care setting these values according to your server rates, as the can lead to huge differences!
|
||||
# Example with a server rate 15x and a level 4 vitality = 3. => final server rate = 45 (15x3)!
|
||||
RateVitalityLevel1 = 1.5
|
||||
RateVitalityLevel2 = 2.
|
||||
RateVitalityLevel3 = 2.5
|
||||
RateVitalityLevel4 = 3.
|
||||
|
||||
# These options are to be used if you want to increase the vitality gain/lost for each mob you kills
|
||||
# Default values are 1.
|
||||
RateVitalityGain = 1.
|
||||
RateVitalityLost = 1.
|
||||
|
||||
# This defines how many times faster do the players regain their vitality when in peace zones
|
||||
RateRecoveryPeaceZone = 1.
|
||||
|
||||
# This defines how many times faster do the players regain their vitality when offline
|
||||
# Note that you need to turn on "RecoverVitalityOnReconnect" to have this option effective
|
||||
RateRecoveryOnReconnect = 4.
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Player Drops (values are set in PERCENTS)
|
||||
# ---------------------------------------------------------------------------
|
||||
PlayerDropLimit = 0
|
||||
# in %
|
||||
PlayerRateDrop = 0
|
||||
# in %
|
||||
PlayerRateDropItem = 0
|
||||
# in %
|
||||
PlayerRateDropEquip = 0
|
||||
# in %
|
||||
PlayerRateDropEquipWeapon = 0
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Player XP % lost on death.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Must be defined an interval per each % following this:
|
||||
# [limit1m,limit1M]-val1;[limit2m,limit2M]-val2;...
|
||||
# For undefined intervals, default value is 1.0 .
|
||||
# Example (Default settings):
|
||||
# 0,39-7.0;40,75-4.0;76,76-2.5;77,77-2.0;78,78-1.5
|
||||
# This will set 7.0 from 0 to 39 (included), 4.00 from 40 to 75 (included),
|
||||
# 2.5 to 76, 2.0 to 77 and 1.5 to 78
|
||||
# XP loss is affected by clan luck in core
|
||||
PlayerXPPercentLost = 0,39-7.0;40,75-4.0;76,76-2.5;77,77-2.0;78,78-1.5
|
||||
|
||||
# Default: 10
|
||||
KarmaDropLimit = 10
|
||||
|
||||
# Default: 40
|
||||
KarmaRateDrop = 40
|
||||
|
||||
# Default: 50
|
||||
KarmaRateDropItem = 50
|
||||
|
||||
# Default: 40
|
||||
KarmaRateDropEquip = 40
|
||||
|
||||
# Default: 10
|
||||
KarmaRateDropEquipWeapon = 10
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Pets (Default value = 1)
|
||||
# ---------------------------------------------------------------------------
|
||||
PetXpRate = 1
|
||||
PetFoodRate = 1
|
||||
SinEaterXpRate = 1
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Herbs
|
||||
# ---------------------------------------------------------------------------
|
||||
# Herb of Power, Herb of Magic, Herb of Attack Speed, Herb of Casting Speed, Herb of Critical Attack, Herb of Speed
|
||||
# Default: 1
|
||||
RateCommonHerbs = 1
|
||||
|
||||
# Herb of Life, Greater herb of Life, Superior Herb of Life
|
||||
# Default: 1
|
||||
RateHpHerbs = 1
|
||||
|
||||
# Herb of Mana, Greater herb of Mana, Superior Herb of Mana
|
||||
# Default: 1
|
||||
RateMpHerbs = 1
|
||||
|
||||
# Herb of Warrior, Herb of Mystic, Herb of Recovery
|
||||
# Default: 1
|
||||
RateSpecialHerbs = 1
|
||||
|
||||
# Rate to configure the chance in percent vitality resplenishing herbs are dropping.
|
||||
# Note you'll need to enable EnableVitalityHerbs
|
||||
# Notes:
|
||||
# Works only if EnableVitality = True
|
||||
RateVitalityHerbs = 1
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Game Server Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# This is the server configuration file. Here you can set up the connection information for your server.
|
||||
# This was written with the assumption that you are behind a router.
|
||||
# Dumbed Down Definitions...
|
||||
# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
|
||||
# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
|
||||
# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Networking
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Where's the Login server this gameserver should connect to
|
||||
# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
|
||||
# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
|
||||
# Default: 127.0.0.1
|
||||
LoginHost = 127.0.0.1
|
||||
|
||||
# TCP port the login server listen to for gameserver connection requests
|
||||
# Default: 9014
|
||||
LoginPort = 9014
|
||||
|
||||
# Bind address for gameserver. You should not need to change it in most cases.
|
||||
# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
|
||||
# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
|
||||
# Default: * (0.0.0.0)
|
||||
GameserverHostname = *
|
||||
|
||||
# Default: 7777
|
||||
GameserverPort = 7777
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Database
|
||||
# ---------------------------------------------------------------------------
|
||||
# Specify the appropriate driver and url for the database you're using.
|
||||
# Examples:
|
||||
# Driver = com.mysql.jdbc.Driver (default)
|
||||
# Driver = org.hsqldb.jdbcDriver
|
||||
# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||
Driver = com.mysql.jdbc.Driver
|
||||
# Database URL
|
||||
# URL = jdbc:mysql://localhost/l2jgs (default)
|
||||
# URL = jdbc:hsqldb:hsql://localhost/l2jgs
|
||||
# URL = jdbc:sqlserver://localhost/database = l2jgs/user = sa/password =
|
||||
URL = jdbc:mysql://localhost/l2jgs
|
||||
# Database user info (default is "root" but it's not recommended)
|
||||
Login = root
|
||||
# Database connection password
|
||||
Password =
|
||||
|
||||
# Default: 100
|
||||
MaximumDbConnections = 100
|
||||
|
||||
# Default: 0
|
||||
MaximumDbIdleTime = 0
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Misc Server Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# This is the server ID that the Game Server will request.
|
||||
# Example: 1 = Bartz
|
||||
# Default: 1
|
||||
RequestServerID = 1
|
||||
|
||||
# True = The Login Server will give an other ID to the server if the requested ID is already reserved.
|
||||
# Default: True
|
||||
AcceptAlternateID = True
|
||||
|
||||
# Datapack root directory.
|
||||
# Defaults to current directory from which the server is started.
|
||||
DatapackRoot = .
|
||||
|
||||
# Define how many players are allowed to play simultaneously on your server.
|
||||
# Default: 100
|
||||
MaximumOnlineUsers = 100
|
||||
|
||||
# Numbers of protocol revisions that server allows to connect.
|
||||
# Delimiter is ;
|
||||
# WARNING: <u><b><font color="red">Changing the protocol revision may result in incompatible communication and many errors in game!</font></b></u>
|
||||
# Default: 216
|
||||
AllowedProtocolRevisions = 216
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Misc Player Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Character name template.
|
||||
# Examples:
|
||||
# CnameTemplate = [A-Z][a-z]{3,3}[A-Za-z0-9]*
|
||||
# The above setting will allow names with first capital letter, next three small letters,
|
||||
# and any letter (case insensitive) or number, like OmfgWTF1
|
||||
# CnameTemplate = [A-Z][a-z]*
|
||||
# The above setting will allow names only of letters with first one capital, like Omfgwtf
|
||||
# Default .* (allows any symbol)
|
||||
CnameTemplate = .*
|
||||
|
||||
# This setting restricts names players can give to their pets.
|
||||
# See CnameTemplate for details
|
||||
PetNameTemplate = .*
|
||||
|
||||
# Maximum number of characters per account.
|
||||
# Default: 7 (client limit)
|
||||
CharMaxNumber = 7
|
||||
+146
@@ -0,0 +1,146 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Siege Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Standard Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Length of siege before the count down (in minutes).
|
||||
# Default: 120
|
||||
SiegeLength = 120
|
||||
|
||||
# Maximum number of flags per clan.
|
||||
# Default: 1
|
||||
MaxFlags = 1
|
||||
|
||||
# Minimum level to register.
|
||||
# Default: 5
|
||||
SiegeClanMinLevel = 5
|
||||
|
||||
# Max number of clans that can register on each side.
|
||||
# Default: 500
|
||||
AttackerMaxClans = 500
|
||||
|
||||
# Default: 500
|
||||
DefenderMaxClans = 500
|
||||
|
||||
# Respawn times (in miliseconds).
|
||||
# Default: 0
|
||||
AttackerRespawn = 0
|
||||
|
||||
# Reward successful siege defense with blood alliance in clan warehouse
|
||||
# Default: 0
|
||||
BloodAllianceReward = 0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Castle Control Tower Spawns
|
||||
# ---------------------------------------------------------------------------
|
||||
# Caste Artifacts and Control Towers spawns
|
||||
#
|
||||
# Control Towers syntax: NameControlTowerN=x,y,z,npc_id,hp
|
||||
# Name - castle name
|
||||
# N - number
|
||||
# x,y,z - coords
|
||||
# npc_id - id of template
|
||||
# hp - maximum health
|
||||
#
|
||||
# Flame Towers syntax: NameFlameTowerN=x,y,z,npc_id,hp
|
||||
# Name - castle name
|
||||
# N - number
|
||||
# x,y,z - coords
|
||||
# npc_id - id of template
|
||||
# hp - maximum health
|
||||
#
|
||||
# Artefacts syntax: NameArtefactN=x,y,z,heading,npc_id
|
||||
# Name - castle name
|
||||
# N - number
|
||||
# x,y,z - coords
|
||||
# heading
|
||||
# npc_id - id of template
|
||||
|
||||
# Gludio
|
||||
GludioArtefact1=-18113,107972,-2480,16384,35063
|
||||
GludioFlameTower1=-18154,107591,-2560,13004,10000
|
||||
GludioFlameTower2=-19329,108154,-2384,13004,10000
|
||||
GludioControlTower1=-18325,112811,-2377,13002,10000
|
||||
GludioControlTower2=-18048,107098,-2378,13002,10000
|
||||
GludioControlTower3=-18113,108597,-2343,13002,10000
|
||||
GludioMaxMercenaries = 100
|
||||
|
||||
# Giran
|
||||
GiranArtefact1=117950,145096,-2547,32768,35147
|
||||
GiranFlameTower1=118331,145055,-2627,13004,10000
|
||||
GiranFlameTower2=117768,143880,-2451,13004,10000
|
||||
GiranControlTower1=113115,144829,-2446,13002,10000
|
||||
GiranControlTower2=118828,145106,-2447,13002,10000
|
||||
GiranControlTower3=117329,145041,-2412,13002,10000
|
||||
GiranMaxMercenaries = 200
|
||||
|
||||
# Dion
|
||||
DionArtefact1=22073,161778,-2674,49152,35105
|
||||
DionFlameTower1=22114,162159,-2754,13004,10000
|
||||
DionFlameTower2=23289,161596,-2578,13004,10000
|
||||
DionControlTower1=22285,156939,-2571,13002,10000
|
||||
DionControlTower2=22008,162652,-2572,13002,10000
|
||||
DionControlTower3=22073,161153,-2537,13002,10000
|
||||
DionMaxMercenaries = 150
|
||||
|
||||
# Oren
|
||||
OrenArtefact1=8402,37191,-2274,32768,35189
|
||||
OrenFlameTower1=84407,37150,-2354,13004,10000
|
||||
OrenFlameTower2=83844,35975,-2178,13004,10000
|
||||
OrenControlTower1=79193,36977,-2167,13002,10000
|
||||
OrenControlTower2=84906,37254,-2168,13002,10000
|
||||
OrenControlTower3=83407,37189,-2133,13002,10000
|
||||
OrenMaxMercenaries = 300
|
||||
|
||||
# Aden
|
||||
AdenArtefact1=147463,1529,-373,16384,35233
|
||||
AdenFlameTower1=149976,1583,-450,13004,10000
|
||||
AdenFlameTower2=144955,1603,-450,13004,10000
|
||||
AdenControlTower1=148774,2351,-389,13002,10000
|
||||
AdenControlTower2=147456,5724,158,13002,10000
|
||||
AdenControlTower3=146137,2352,-389,13002,10000
|
||||
AdenMaxMercenaries = 400
|
||||
|
||||
# Innadril
|
||||
InnadrilArtefact1=116024,250557,-770,-16384,35279
|
||||
InnadrilFlameTower1=116065,250938,-850,13004,10000
|
||||
InnadrilFlameTower2=117240,250375,-674,13004,10000
|
||||
InnadrilControlTower1=116236,245718,-667,13002,10000
|
||||
InnadrilControlTower2=115959,251431,-667,13002,10000
|
||||
InnadrilControlTower3=116024,249932,-633,13002,10000
|
||||
InnadrilMaxMercenaries = 400
|
||||
|
||||
# Goddard
|
||||
GoddardArtefact1=146601,-50441,-1505,32768,35322
|
||||
GoddardArtefact2=148353,-50457,-1505,0,35323
|
||||
GoddardFlameTower1=148144,-46992,-1609,13004,10000
|
||||
GoddardFlameTower2=146784,-46992,-1609,13004,10000
|
||||
GoddardControlTower1=144672,-48832,-1742,13002,10000
|
||||
GoddardControlTower2=150240,-48832,-1742,13002,10000
|
||||
GoddardControlTower3=147456,-49200,-1619,13002,10000
|
||||
GoddardMaxMercenaries = 400
|
||||
|
||||
# Rune
|
||||
RuneArtefact1=9132,-49151,1095,0,35469
|
||||
RuneFlameTower1=12864,-47440,-1087,13004,10000
|
||||
RuneFlameTower2=12225,-50767,1248,13004,10000
|
||||
RuneControlTower1=16565,-50318,-641,13002,10000
|
||||
RuneControlTower2=16559,-48000,-641,13002,10000
|
||||
RuneControlTower3=10775,-48481,83,13002,10000
|
||||
RuneMaxMercenaries = 400
|
||||
|
||||
# Schuttgart
|
||||
SchuttgartArtefact1=76674,-154521,228,32768,35515
|
||||
SchuttgartArtefact2=78440,-154521,228,0,35514
|
||||
SchuttgartFlameTower1=78233,-151037,120,13004,10000
|
||||
SchuttgartFlameTower2=76872,-151043,120,13004,10000
|
||||
SchuttgartControlTower1=80334,-152898,-8,13002,10000
|
||||
SchuttgartControlTower2=74775,-152928,-8,13002,10000
|
||||
SchuttgartControlTower3=77547,-153246,112,13002,10000
|
||||
SchuttgartMaxMercenaries = 400
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Telnet Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Allows text based monitoring and administration of L2J GS/LS
|
||||
# by using a telnet client. Communication protocol is insecure
|
||||
# and you should use SSL tunnels, VPN, etc. if you plan to connect
|
||||
# over non-trusted channels.
|
||||
# Default: False
|
||||
EnableTelnet = False
|
||||
|
||||
# This is the port L2J should listen to for incoming telnet
|
||||
# requests.
|
||||
# Default: 54321
|
||||
StatusPort = 54321
|
||||
|
||||
# If the following is not set, a random password is generated on server startup.
|
||||
# Usage: StatusPW = somePass
|
||||
StatusPW =
|
||||
|
||||
# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
|
||||
# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
|
||||
# Default: 127.0.0.1,localhost,::1
|
||||
ListOfHosts = 127.0.0.1,localhost,::1
|
||||
+3
-6
@@ -1,17 +1,14 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# TerritoryWar Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like.
|
||||
# If you modify any of these settings, your server will deviate from being retail-like.
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything.
|
||||
# Also, please understand what you are changing before you do so on a live server.
|
||||
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Standard Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Length of siege before the count-down (in minutes).
|
||||
# Length of siege before the count down (in minutes).
|
||||
# Default: 120
|
||||
WarLength = 120
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
@echo off
|
||||
title Game Server Console
|
||||
:start
|
||||
echo Starting L2J Game Server.
|
||||
echo.
|
||||
REM -------------------------------------
|
||||
REM Default parameters for a basic server.
|
||||
java -Djava.util.logging.manager=com.l2jserver.util.L2LogManager -Xms1024m -Xmx1024m -cp ./../libs/*;l2jserver.jar com.l2jserver.gameserver.GameServer
|
||||
REM
|
||||
REM If you have a big server and lots of memory, you could experiment for example with
|
||||
REM java -server -Xmx1536m -Xms1024m -Xmn512m -XX:PermSize=256m -XX:SurvivorRatio=8 -Xnoclassgc -XX:+AggressiveOpts
|
||||
REM -------------------------------------
|
||||
if ERRORLEVEL 2 goto restart
|
||||
if ERRORLEVEL 1 goto error
|
||||
goto end
|
||||
:restart
|
||||
echo.
|
||||
echo Admin Restart ...
|
||||
echo.
|
||||
goto start
|
||||
:error
|
||||
echo.
|
||||
echo Server terminated abnormaly
|
||||
echo.
|
||||
:end
|
||||
echo.
|
||||
echo server terminated
|
||||
echo.
|
||||
pause
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
#! /bin/sh
|
||||
|
||||
./GameServer_loop.sh &
|
||||
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 733 B |
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 655 B |
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 620 B |
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 786 B |
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 446 B |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 8.7 KiB |
@@ -0,0 +1,23 @@
|
||||
language = English
|
||||
toolName = Server Configuration Tool
|
||||
|
||||
success = Configuration saved successfully
|
||||
error = Error
|
||||
errorReading = Error reading
|
||||
errorSaving = Error saving
|
||||
reason = Reason:
|
||||
yes = Yes
|
||||
no = No
|
||||
|
||||
fileMenu = File
|
||||
exitItem = Exit
|
||||
helpMenu = Help
|
||||
aboutItem = About
|
||||
|
||||
save = Save
|
||||
cancel = Cancel
|
||||
|
||||
credits = © 2008-2009 L2J Team. All rights reserved.
|
||||
language = Language: English
|
||||
icons = Icons by http://www.famfamfam.com
|
||||
translation = Translation: L2J Team
|
||||
@@ -0,0 +1,80 @@
|
||||
language = English
|
||||
toolName = GS Registering Tool
|
||||
|
||||
error = Error
|
||||
reason = Reason:
|
||||
yes = Yes
|
||||
no = No
|
||||
|
||||
fileMenu = File
|
||||
exitItem = Exit
|
||||
helpMenu = Help
|
||||
aboutItem = About
|
||||
|
||||
btnRemove = Remove
|
||||
btnRemoveAll = Remove All
|
||||
btnRegister = Register GameServer
|
||||
confirmRemoveTitle = Confirm Removal
|
||||
confirmRemoveText = Are you sure you want to remove GameServer %d - %s?
|
||||
confirmRemoveAllText = Are you sure you want to remove ALL GameServers?
|
||||
gsListRetrieveError = There was an error while attempting to retrieve the list of currently registered GameServers.
|
||||
|
||||
gsName = GameServer Name
|
||||
gsAction = Action
|
||||
|
||||
registerGS = Register GameServer
|
||||
serverName = Server name:
|
||||
save = Save
|
||||
cancel = Cancel
|
||||
saveHexId = The hexid.txt file should be saved on GameServer's 'configs' folder to properly complete this process.
|
||||
hexidDest = Choose hexid file destination folder...
|
||||
|
||||
purpose = Allows to register/remove GameServers from LoginServer.
|
||||
options = Options:
|
||||
fallbackOpt = If during the register operation the specified GameServer ID is in use, an attempt with the first available ID will be made.
|
||||
forceOpt = Forces GameServer register operation to overwrite a previous registration on the specified ID, if necessary.
|
||||
cmdOpt = Forces this application to run in console mode, even if GUI is supported.
|
||||
helpOpt = Shows this help message and exits.
|
||||
languageOpt = Attempts to use the language for the specified locale, on failure reverts to auto-detection.
|
||||
registerOpt1 = Registers a GameServer on ID <id> and saves the hexid.txt file on <hexid_dest_dir>.
|
||||
registerOpt2 = You can provide a negative value for <id> to register under the first available ID.
|
||||
registerOpt3 = Nothing is done if <id> is already in use, unless --force or --fallback is used.
|
||||
unregisterOpt = Removes the GameServer specified by <id>, use "all" to remove all currently registered GameServers.
|
||||
wrongUnregisterArg = wrong argument for GameServer removal, specify a numeric ID or "all" without quotes to remove all.
|
||||
noAction = No action to be taken.
|
||||
checkingIdInUse = Checking if GameServer ID %d is in use...
|
||||
removingGsId = Removing GameServer ID: %d
|
||||
forcingRegistration = Forcing registration on ID %d, an existing registration on this ID is being overwritten.
|
||||
fallingBack = Trying to register on the first available ID.
|
||||
registrationOk = GameServer successfully registered on LoginServer with ID %d.
|
||||
unregisterOk = GameServer ID: %d was successfully removed from LoginServer.
|
||||
unregisterAllOk = All GameServers were successfully removed.
|
||||
noFreeId = There was no free ID available to register.
|
||||
sqlErrorRegister = An SQL error occurred while trying to register the GameServer.
|
||||
ioErrorRegister = An error saving the hexid file occurred while trying to register the GameServer.
|
||||
errorRegister = An error occurred while trying to register the GameServer.
|
||||
errorUnregister = An error occurred while trying to remove the GameServer.
|
||||
sqlErrorUnregister = An SQL error occurred while trying to remove the GameServer.
|
||||
sqlErrorUnregisterAll = An SQL error occurred while trying to remove ALL GameServers.
|
||||
noServerNames = No available names for GameServer, verify servername.xml file exists in the LoginServer folder.
|
||||
noNameForId = No name for ID: %d
|
||||
idIsNotFree = This ID is not available.
|
||||
noServerForId = No GameServer is registered on ID: %d
|
||||
|
||||
|
||||
cmdMenuRegister = Register GameServer
|
||||
cmdMenuListNames = List GameServers Names and IDs
|
||||
cmdMenuRemoveGS = Remove GameServer
|
||||
cmdMenuRemoveAll = Remove ALL GameServers
|
||||
cmdMenuExit = Exit
|
||||
yourChoice = Choice:
|
||||
invalidChoice = Invalid Choice: %s
|
||||
gsInUse = In Use
|
||||
gsFree = Free
|
||||
enterDesiredId = Enter desired ID:
|
||||
|
||||
credits = © 2008-2009 L2J Team. All rights reserved.
|
||||
language = Language: English
|
||||
icons = Icons by http://www.famfamfam.com
|
||||
translation = Translation: L2J Team
|
||||
bugReports = Bug Reports:
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
err=1
|
||||
until [ $err == 0 ];
|
||||
do
|
||||
[ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
|
||||
[ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
|
||||
nice -n -2 java -Xms128m -Xmx128m -cp ./../libs/*:l2jlogin.jar com.l2jserver.loginserver.L2LoginServer > log/stdout.log 2>&1
|
||||
err=$?
|
||||
# /etc/init.d/mysql restart
|
||||
sleep 10;
|
||||
done
|
||||
@@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
color 17
|
||||
cls
|
||||
java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*;l2jlogin.jar com.l2jserver.gsregistering.BaseGameServerRegister -c
|
||||
exit
|
||||
BIN
Binary file not shown.
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jlogin.jar com.l2jserver.gsregistering.GameServerRegister -c
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
# Subnets can be defined like 123.45.0.0
|
||||
# Comments after # are ignored
|
||||
# Expiration timestamp can be added after IP for when to disable the ban
|
||||
# Example:
|
||||
# 192.168.0.0 1237618800000 # Bans all address starting with 192.168 and will expire on 21 Mar 2009 07:00:00 GMT
|
||||
10.255.255.255
|
||||
10.254.254.254
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Login Server Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# This is the server configuration file. Here you can set up the connection information for your server.
|
||||
# This was written with the assumption that you are behind a router.
|
||||
# Dumbed Down Definitions...
|
||||
# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
|
||||
# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
|
||||
# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Networking
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Bind ip of the LoginServer, use * to bind on all available IPs
|
||||
# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
|
||||
# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
|
||||
# Default: * (0.0.0.0)
|
||||
LoginserverHostname = *
|
||||
|
||||
# Default: 2106
|
||||
LoginserverPort = 2106
|
||||
|
||||
# The address on which login will listen for GameServers, use * to bind on all available IPs
|
||||
# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
|
||||
# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
|
||||
# Default: * (0.0.0.0)
|
||||
LoginHostname = *
|
||||
|
||||
# The port on which login will listen for GameServers
|
||||
# Default: 9014
|
||||
LoginPort = 9014
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Security
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: True
|
||||
LogLoginController = True
|
||||
|
||||
# How many times you can provide an invalid account/pass before the IP gets banned.
|
||||
# Default: 10
|
||||
LoginTryBeforeBan = 10
|
||||
|
||||
# Time you won't be able to login back again after LoginTryBeforeBan tries to login.
|
||||
# Default: 600 (10 minutes)
|
||||
LoginBlockAfterBan = 600
|
||||
|
||||
# If set to True any GameServer can register on your login's free slots
|
||||
# Default: False
|
||||
AcceptNewGameServer = False
|
||||
|
||||
# Flood Protection. All values are in MILISECONDS.
|
||||
# Default: True
|
||||
EnableFloodProtection = True
|
||||
|
||||
# Default: 15
|
||||
FastConnectionLimit = 15
|
||||
|
||||
# Default: 700
|
||||
NormalConnectionTime = 700
|
||||
|
||||
# Default: 350
|
||||
FastConnectionTime = 350
|
||||
|
||||
# Default: 50
|
||||
MaxConnectionPerIP = 50
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Database
|
||||
# ---------------------------------------------------------------------------
|
||||
# Specify the appropriate driver and url for the database you're using.
|
||||
# Examples:
|
||||
# Driver = com.mysql.jdbc.Driver (default)
|
||||
# Driver = org.hsqldb.jdbcDriver
|
||||
# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||
Driver = com.mysql.jdbc.Driver
|
||||
# Database URL
|
||||
# URL = jdbc:mysql://localhost/l2jls (default)
|
||||
# URL = jdbc:hsqldb:hsql://localhost/l2jls
|
||||
# URL = jdbc:sqlserver://localhost/database = l2jls/user = sa/password =
|
||||
URL = jdbc:mysql://localhost/l2jls
|
||||
# Database user info (default is "root" but it's not recommended)
|
||||
Login = root
|
||||
# Database connection password
|
||||
Password =
|
||||
|
||||
# Default: 10
|
||||
MaximumDbConnections = 10
|
||||
|
||||
# Default: 0
|
||||
MaximumDbIdleTime = 0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Misc.
|
||||
# ---------------------------------------------------------------------------
|
||||
# If False, the license (after the login) will not be shown.
|
||||
# Default: True
|
||||
ShowLicence = True
|
||||
|
||||
# Default: True
|
||||
AutoCreateAccounts = True
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Developer Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# Default: False
|
||||
Debug = False
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Telnet Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Allows text based monitoring and administration of L2J GS/LS
|
||||
# by using a telnet client. Communication protocol is insecure
|
||||
# and you should use SSL tunnels, VPN, etc. if you plan to connect
|
||||
# over non-trusted channels.
|
||||
# Default: False
|
||||
EnableTelnet = False
|
||||
|
||||
# This is the port L2J should listen to for incoming telnet
|
||||
# requests.
|
||||
# Default: 12345
|
||||
StatusPort = 12345
|
||||
|
||||
# If the following is not set, a random password is generated on server startup.
|
||||
# Usage: StatusPW = somePass
|
||||
StatusPW =
|
||||
|
||||
# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
|
||||
# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
|
||||
# Default: 127.0.0.1,localhost,::1
|
||||
ListOfHosts = 127.0.0.1,localhost,::1
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
@echo off
|
||||
title Login Server Console
|
||||
:start
|
||||
echo Starting L2J Login Server.
|
||||
echo.
|
||||
java -Xms128m -Xmx128m -cp ./../libs/*;l2jlogin.jar com.l2jserver.loginserver.L2LoginServer
|
||||
if ERRORLEVEL 2 goto restart
|
||||
if ERRORLEVEL 1 goto error
|
||||
goto end
|
||||
:restart
|
||||
echo.
|
||||
echo Admin Restart ...
|
||||
echo.
|
||||
goto start
|
||||
:error
|
||||
echo.
|
||||
echo Server terminated abnormaly
|
||||
echo.
|
||||
:end
|
||||
echo.
|
||||
echo server terminated
|
||||
echo.
|
||||
pause
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
./LoginServer_loop.sh &
|
||||
@@ -0,0 +1,23 @@
|
||||
@echo off
|
||||
cls
|
||||
title L2J - SQL Account Manager
|
||||
color 17
|
||||
java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*;l2jlogin.jar com.l2jserver.accountmanager.SQLAccountManager 2> NUL
|
||||
if %errorlevel% == 0 (
|
||||
echo.
|
||||
echo Execution succesful
|
||||
echo.
|
||||
) else (
|
||||
echo.
|
||||
echo An error has ocurred while running the L2J Account Manager!
|
||||
echo.
|
||||
echo Possible reasons for this to happen:
|
||||
echo.
|
||||
echo - Missing .jar files or ../libs directory.
|
||||
echo - MySQL server not running or incorrect MySQL settings:
|
||||
echo check ./config/loginserver.properties
|
||||
echo - Wrong data types or values out of range were provided:
|
||||
echo specify correct values for each required field
|
||||
echo.
|
||||
)
|
||||
pause
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jlogin.jar com.l2jserver.accountmanager.SQLAccountManager
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,336 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
||||
import com.mchange.v2.c3p0.ComboPooledDataSource;
|
||||
|
||||
public class L2DatabaseFactory
|
||||
{
|
||||
static Logger _log = Logger.getLogger(L2DatabaseFactory.class.getName());
|
||||
|
||||
public static enum ProviderType
|
||||
{
|
||||
MySql,
|
||||
MsSql
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// Data Field
|
||||
private static L2DatabaseFactory _instance;
|
||||
private static ScheduledExecutorService _executor;
|
||||
private ProviderType _providerType;
|
||||
private ComboPooledDataSource _source;
|
||||
|
||||
// =========================================================
|
||||
// Constructor
|
||||
public L2DatabaseFactory() throws SQLException
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Config.DATABASE_MAX_CONNECTIONS < 2)
|
||||
{
|
||||
Config.DATABASE_MAX_CONNECTIONS = 2;
|
||||
_log.warning("A minimum of " + Config.DATABASE_MAX_CONNECTIONS + " db connections are required.");
|
||||
}
|
||||
|
||||
_source = new ComboPooledDataSource();
|
||||
_source.setAutoCommitOnClose(true);
|
||||
|
||||
_source.setInitialPoolSize(10);
|
||||
_source.setMinPoolSize(10);
|
||||
_source.setMaxPoolSize(Math.max(10, Config.DATABASE_MAX_CONNECTIONS));
|
||||
|
||||
_source.setAcquireRetryAttempts(0); // try to obtain connections indefinitely (0 = never quit)
|
||||
_source.setAcquireRetryDelay(500); // 500 milliseconds wait before try to acquire connection again
|
||||
_source.setCheckoutTimeout(0); // 0 = wait indefinitely for new connection
|
||||
// if pool is exhausted
|
||||
_source.setAcquireIncrement(5); // if pool is exhausted, get 5 more connections at a time
|
||||
// cause there is a "long" delay on acquire connection
|
||||
// so taking more than one connection at once will make connection pooling
|
||||
// more effective.
|
||||
|
||||
// this "connection_test_table" is automatically created if not already there
|
||||
_source.setAutomaticTestTable("connection_test_table");
|
||||
_source.setTestConnectionOnCheckin(false);
|
||||
|
||||
// testing OnCheckin used with IdleConnectionTestPeriod is faster than testing on checkout
|
||||
|
||||
_source.setIdleConnectionTestPeriod(3600); // test idle connection every 60 sec
|
||||
_source.setMaxIdleTime(Config.DATABASE_MAX_IDLE_TIME); // 0 = idle connections never expire
|
||||
// *THANKS* to connection testing configured above
|
||||
// but I prefer to disconnect all connections not used
|
||||
// for more than 1 hour
|
||||
|
||||
// enables statement caching, there is a "semi-bug" in c3p0 0.9.0 but in 0.9.0.2 and later it's fixed
|
||||
_source.setMaxStatementsPerConnection(100);
|
||||
|
||||
_source.setBreakAfterAcquireFailure(false); // never fail if any way possible
|
||||
// setting this to true will make
|
||||
// c3p0 "crash" and refuse to work
|
||||
// till restart thus making acquire
|
||||
// errors "FATAL" ... we don't want that
|
||||
// it should be possible to recover
|
||||
_source.setDriverClass(Config.DATABASE_DRIVER);
|
||||
_source.setJdbcUrl(Config.DATABASE_URL);
|
||||
_source.setUser(Config.DATABASE_LOGIN);
|
||||
_source.setPassword(Config.DATABASE_PASSWORD);
|
||||
|
||||
/* Test the connection */
|
||||
_source.getConnection().close();
|
||||
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.fine("Database Connection Working");
|
||||
}
|
||||
|
||||
if (Config.DATABASE_DRIVER.toLowerCase().contains("microsoft"))
|
||||
{
|
||||
_providerType = ProviderType.MsSql;
|
||||
}
|
||||
else
|
||||
{
|
||||
_providerType = ProviderType.MySql;
|
||||
}
|
||||
}
|
||||
catch (SQLException x)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.fine("Database Connection FAILED");
|
||||
}
|
||||
// re-throw the exception
|
||||
throw x;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.fine("Database Connection FAILED");
|
||||
}
|
||||
throw new SQLException("Could not init DB connection:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// Method - Public
|
||||
public final String prepQuerySelect(String[] fields, String tableName, String whereClause, boolean returnOnlyTopRecord)
|
||||
{
|
||||
String msSqlTop1 = "";
|
||||
String mySqlTop1 = "";
|
||||
if (returnOnlyTopRecord)
|
||||
{
|
||||
if (getProviderType() == ProviderType.MsSql)
|
||||
{
|
||||
msSqlTop1 = " Top 1 ";
|
||||
}
|
||||
if (getProviderType() == ProviderType.MySql)
|
||||
{
|
||||
mySqlTop1 = " Limit 1 ";
|
||||
}
|
||||
}
|
||||
String query = "SELECT " + msSqlTop1 + safetyString(fields) + " FROM " + tableName + " WHERE " + whereClause + mySqlTop1;
|
||||
return query;
|
||||
}
|
||||
|
||||
public void shutdown()
|
||||
{
|
||||
try
|
||||
{
|
||||
_source.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.INFO, "", e);
|
||||
}
|
||||
try
|
||||
{
|
||||
_source = null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.INFO, "", e);
|
||||
}
|
||||
}
|
||||
|
||||
public final String safetyString(String... whatToCheck)
|
||||
{
|
||||
// NOTE: Use brace as a safty precaution just incase name is a reserved word
|
||||
final char braceLeft;
|
||||
final char braceRight;
|
||||
|
||||
if (getProviderType() == ProviderType.MsSql)
|
||||
{
|
||||
braceLeft = '[';
|
||||
braceRight = ']';
|
||||
}
|
||||
else
|
||||
{
|
||||
braceLeft = '`';
|
||||
braceRight = '`';
|
||||
}
|
||||
|
||||
int length = 0;
|
||||
|
||||
for (String word : whatToCheck)
|
||||
{
|
||||
length += word.length() + 4;
|
||||
}
|
||||
|
||||
final StringBuilder sbResult = new StringBuilder(length);
|
||||
|
||||
for (String word : whatToCheck)
|
||||
{
|
||||
if (sbResult.length() > 0)
|
||||
{
|
||||
sbResult.append(", ");
|
||||
}
|
||||
|
||||
sbResult.append(braceLeft);
|
||||
sbResult.append(word);
|
||||
sbResult.append(braceRight);
|
||||
}
|
||||
|
||||
return sbResult.toString();
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// Property - Public
|
||||
public static L2DatabaseFactory getInstance() throws SQLException
|
||||
{
|
||||
synchronized (L2DatabaseFactory.class)
|
||||
{
|
||||
if (_instance == null)
|
||||
{
|
||||
_instance = new L2DatabaseFactory();
|
||||
}
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
|
||||
public Connection getConnection() // throws SQLException
|
||||
{
|
||||
Connection con = null;
|
||||
|
||||
while (con == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
con = _source.getConnection();
|
||||
if (Server.serverMode == Server.MODE_GAMESERVER)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new ConnectionCloser(con, new RuntimeException()), Config.CONNECTION_CLOSE_TIME);
|
||||
}
|
||||
else
|
||||
{
|
||||
getExecutor().schedule(new ConnectionCloser(con, new RuntimeException()), 60, TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
_log.log(Level.WARNING, "L2DatabaseFactory: getConnection() failed, trying again " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
return con;
|
||||
}
|
||||
|
||||
private static class ConnectionCloser implements Runnable
|
||||
{
|
||||
private final Connection c;
|
||||
private final RuntimeException exp;
|
||||
|
||||
public ConnectionCloser(Connection con, RuntimeException e)
|
||||
{
|
||||
c = con;
|
||||
exp = e;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see java.lang.Runnable#run()
|
||||
*/
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!c.isClosed())
|
||||
{
|
||||
_log.log(Level.WARNING, "Unclosed connection! Trace: " + exp.getStackTrace()[1], exp);
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static void close(Connection con)
|
||||
{
|
||||
if (con == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
con.close();
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
_log.log(Level.WARNING, "Failed to close database connection!", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static ScheduledExecutorService getExecutor()
|
||||
{
|
||||
if (_executor == null)
|
||||
{
|
||||
synchronized (L2DatabaseFactory.class)
|
||||
{
|
||||
if (_executor == null)
|
||||
{
|
||||
_executor = Executors.newSingleThreadScheduledExecutor();
|
||||
}
|
||||
}
|
||||
}
|
||||
return _executor;
|
||||
}
|
||||
|
||||
public int getBusyConnectionCount() throws SQLException
|
||||
{
|
||||
return _source.getNumBusyConnectionsDefaultUser();
|
||||
}
|
||||
|
||||
public int getIdleConnectionCount() throws SQLException
|
||||
{
|
||||
return _source.getNumIdleConnectionsDefaultUser();
|
||||
}
|
||||
|
||||
public final ProviderType getProviderType()
|
||||
{
|
||||
return _providerType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver;
|
||||
|
||||
/**
|
||||
* This class used to be the starter class, since LS/GS split, it only retains server mode
|
||||
*/
|
||||
public class Server
|
||||
{
|
||||
// constants for the server mode
|
||||
public static final int MODE_NONE = 0;
|
||||
public static final int MODE_GAMESERVER = 1;
|
||||
public static final int MODE_LOGINSERVER = 2;
|
||||
|
||||
public static int serverMode = MODE_NONE;
|
||||
}
|
||||
@@ -0,0 +1,475 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.accountmanager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.LineNumberReader;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Base64;
|
||||
|
||||
import javolution.util.FastList;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.L2DatabaseFactory;
|
||||
import com.l2jserver.Server;
|
||||
|
||||
/**
|
||||
* This class SQL Account Manager
|
||||
* @author netimperia
|
||||
* @version $Revision: 2.3.2.1.2.3 $ $Date: 2005/08/08 22:47:12 $
|
||||
*/
|
||||
public class SQLAccountManager
|
||||
{
|
||||
private static String _uname = "";
|
||||
private static String _pass = "";
|
||||
private static String _level = "";
|
||||
private static String _mode = "";
|
||||
|
||||
public static void main(String[] args) throws SQLException, IOException, NoSuchAlgorithmException
|
||||
{
|
||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
||||
Config.load();
|
||||
while (true)
|
||||
{
|
||||
System.out.println("Please choose an option:");
|
||||
System.out.println("");
|
||||
System.out.println("1 - Create new account or update existing one (change pass and access level).");
|
||||
System.out.println("2 - Change access level.");
|
||||
System.out.println("3 - Delete existing account.");
|
||||
System.out.println("4 - List accounts & access levels.");
|
||||
System.out.println("5 - Exit.");
|
||||
LineNumberReader _in = new LineNumberReader(new InputStreamReader(System.in));
|
||||
while (!(_mode.equals("1") || _mode.equals("2") || _mode.equals("3") || _mode.equals("4") || _mode.equals("5")))
|
||||
{
|
||||
System.out.print("Your choice: ");
|
||||
_mode = _in.readLine();
|
||||
}
|
||||
|
||||
if (_mode.equals("1") || _mode.equals("2") || _mode.equals("3"))
|
||||
{
|
||||
if (_mode.equals("1") || _mode.equals("2"))
|
||||
{
|
||||
while (_uname.trim().length() == 0)
|
||||
{
|
||||
System.out.print("Username: ");
|
||||
_uname = _in.readLine().toLowerCase();
|
||||
}
|
||||
}
|
||||
else if (_mode.equals("3"))
|
||||
{
|
||||
while (_uname.trim().length() == 0)
|
||||
{
|
||||
System.out.print("Account name: ");
|
||||
_uname = _in.readLine().toLowerCase();
|
||||
}
|
||||
}
|
||||
if (_mode.equals("1"))
|
||||
{
|
||||
while (_pass.trim().length() == 0)
|
||||
{
|
||||
System.out.print("Password: ");
|
||||
_pass = _in.readLine();
|
||||
}
|
||||
}
|
||||
if (_mode.equals("1") || _mode.equals("2"))
|
||||
{
|
||||
while (_level.trim().length() == 0)
|
||||
{
|
||||
System.out.print("Access level: ");
|
||||
_level = _in.readLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_mode.equals("1"))
|
||||
{
|
||||
// Add or Update
|
||||
addOrUpdateAccount(_uname.trim(), _pass.trim(), _level.trim());
|
||||
}
|
||||
else if (_mode.equals("2"))
|
||||
{
|
||||
// Change Level
|
||||
changeAccountLevel(_uname.trim(), _level.trim());
|
||||
}
|
||||
else if (_mode.equals("3"))
|
||||
{
|
||||
// Delete
|
||||
System.out.print("Do you really want to delete this account ? Y/N : ");
|
||||
String yesno = _in.readLine();
|
||||
if (yesno.equalsIgnoreCase("Y"))
|
||||
{
|
||||
deleteAccount(_uname.trim());
|
||||
}
|
||||
else
|
||||
{
|
||||
System.out.println("Deletion cancelled");
|
||||
}
|
||||
}
|
||||
else if (_mode.equals("4"))
|
||||
{
|
||||
// List
|
||||
_mode = "";
|
||||
System.out.println("");
|
||||
System.out.println("Please choose a listing mode:");
|
||||
System.out.println("");
|
||||
System.out.println("1 - Banned accounts only (accessLevel < 0)");
|
||||
System.out.println("2 - GM/privileged accounts (accessLevel > 0)");
|
||||
System.out.println("3 - Regular accounts only (accessLevel = 0)");
|
||||
System.out.println("4 - List all");
|
||||
while (!(_mode.equals("1") || _mode.equals("2") || _mode.equals("3") || _mode.equals("4")))
|
||||
{
|
||||
System.out.print("Your choice: ");
|
||||
_mode = _in.readLine();
|
||||
}
|
||||
System.out.println("");
|
||||
printAccInfo(_mode);
|
||||
}
|
||||
else if (_mode.equals("5"))
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
_uname = "";
|
||||
_pass = "";
|
||||
_level = "";
|
||||
_mode = "";
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
|
||||
private static void printAccInfo(String m) throws SQLException
|
||||
{
|
||||
int count = 0;
|
||||
Connection con = null;
|
||||
con = L2DatabaseFactory.getInstance().getConnection();
|
||||
String q = "SELECT login, accessLevel FROM accounts ";
|
||||
if (m.equals("1"))
|
||||
{
|
||||
q = q.concat("WHERE accessLevel < 0");
|
||||
}
|
||||
else if (m.equals("2"))
|
||||
{
|
||||
q = q.concat("WHERE accessLevel > 0");
|
||||
}
|
||||
else if (m.equals("3"))
|
||||
{
|
||||
q = q.concat("WHERE accessLevel = 0");
|
||||
}
|
||||
q = q.concat(" ORDER BY login ASC");
|
||||
|
||||
PreparedStatement statement = con.prepareStatement(q);
|
||||
ResultSet rset = statement.executeQuery();
|
||||
while (rset.next())
|
||||
{
|
||||
System.out.println(rset.getString("login") + " -> " + rset.getInt("accessLevel"));
|
||||
count++;
|
||||
}
|
||||
rset.close();
|
||||
statement.close();
|
||||
L2DatabaseFactory.close(con);
|
||||
System.out.println("Displayed accounts: " + count + ".");
|
||||
}
|
||||
|
||||
private static void addOrUpdateAccount(String account, String password, String level) throws IOException, SQLException, NoSuchAlgorithmException
|
||||
{
|
||||
// Encode Password
|
||||
MessageDigest md = MessageDigest.getInstance("SHA");
|
||||
byte[] newpass;
|
||||
newpass = password.getBytes("UTF-8");
|
||||
newpass = md.digest(newpass);
|
||||
|
||||
// Add to Base
|
||||
Connection con = null;
|
||||
con = L2DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("REPLACE accounts (login, password, accessLevel) VALUES (?,?,?)");
|
||||
statement.setString(1, account);
|
||||
statement.setString(2, Base64.getEncoder().encodeToString(newpass));
|
||||
statement.setString(3, level);
|
||||
statement.executeUpdate();
|
||||
statement.close();
|
||||
L2DatabaseFactory.close(con);
|
||||
}
|
||||
|
||||
private static void changeAccountLevel(String account, String level) throws SQLException
|
||||
{
|
||||
Connection con = null;
|
||||
con = L2DatabaseFactory.getInstance().getConnection();
|
||||
|
||||
// Check Account Exist
|
||||
PreparedStatement statement = con.prepareStatement("SELECT COUNT(*) FROM accounts WHERE login=?;");
|
||||
statement.setString(1, account);
|
||||
ResultSet rset = statement.executeQuery();
|
||||
if (!rset.next())
|
||||
{
|
||||
System.out.println("False");
|
||||
}
|
||||
else if (rset.getInt(1) > 0)
|
||||
{
|
||||
// Exist
|
||||
// Update
|
||||
statement = con.prepareStatement("UPDATE accounts SET accessLevel=? WHERE login=?;");
|
||||
statement.setEscapeProcessing(true);
|
||||
statement.setString(1, level);
|
||||
statement.setString(2, account);
|
||||
statement.executeUpdate();
|
||||
|
||||
System.out.println("Account " + account + " has been updated.");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not Exist
|
||||
System.out.println("Account " + account + " does not exist.");
|
||||
}
|
||||
rset.close();
|
||||
statement.close();
|
||||
L2DatabaseFactory.close(con);
|
||||
}
|
||||
|
||||
private static void deleteAccount(String account) throws SQLException
|
||||
{
|
||||
Connection con = null;
|
||||
con = L2DatabaseFactory.getInstance().getConnection();
|
||||
|
||||
// Check Account Exist
|
||||
PreparedStatement statement = con.prepareStatement("SELECT COUNT(*) FROM accounts WHERE login=?;");
|
||||
statement.setString(1, account);
|
||||
ResultSet rset = statement.executeQuery();
|
||||
if (!rset.next())
|
||||
{
|
||||
System.out.println("False");
|
||||
rset.close();
|
||||
}
|
||||
else if (rset.getInt(1) > 0)
|
||||
{
|
||||
rset.close();
|
||||
// Account exist
|
||||
// Get Accounts ID
|
||||
ResultSet rcln;
|
||||
statement = con.prepareStatement("SELECT charId, char_name, clanid FROM characters WHERE account_name=?;");
|
||||
statement.setEscapeProcessing(true);
|
||||
statement.setString(1, account);
|
||||
rset = statement.executeQuery();
|
||||
|
||||
FastList<String> objIds = new FastList<>();
|
||||
FastList<String> charNames = new FastList<>();
|
||||
FastList<String> clanIds = new FastList<>();
|
||||
|
||||
while (rset.next())
|
||||
{
|
||||
objIds.add(rset.getString("charId"));
|
||||
charNames.add(rset.getString("char_name"));
|
||||
clanIds.add(rset.getString("clanid"));
|
||||
}
|
||||
rset.close();
|
||||
|
||||
for (int index = 0; index < objIds.size(); index++)
|
||||
{
|
||||
System.out.println("Deleting character " + charNames.get(index) + ".");
|
||||
|
||||
// Check If clan leader Remove Clan and remove all from it
|
||||
statement.close();
|
||||
statement = con.prepareStatement("SELECT COUNT(*) FROM clan_data WHERE leader_id=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
rcln = statement.executeQuery();
|
||||
rcln.next();
|
||||
if (rcln.getInt(1) > 0)
|
||||
{
|
||||
rcln.close();
|
||||
// Clan Leader
|
||||
|
||||
// Get Clan Name
|
||||
statement.close();
|
||||
statement = con.prepareStatement("SELECT clan_name FROM clan_data WHERE leader_id=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
rcln = statement.executeQuery();
|
||||
rcln.next();
|
||||
|
||||
String clanName = rcln.getString("clan_name");
|
||||
|
||||
System.out.println("Deleting clan " + clanName + ".");
|
||||
|
||||
// Delete Clan Wars
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM clan_wars WHERE clan1=? OR clan2=?;");
|
||||
statement.setEscapeProcessing(true);
|
||||
statement.setString(1, clanName);
|
||||
statement.setString(2, clanName);
|
||||
statement.executeUpdate();
|
||||
|
||||
rcln.close();
|
||||
|
||||
// Remove All From clan
|
||||
statement.close();
|
||||
statement = con.prepareStatement("UPDATE characters SET clanid=0 WHERE clanid=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
statement.executeUpdate();
|
||||
// Free Clan Halls
|
||||
statement.close();
|
||||
statement = con.prepareStatement("UPDATE clanhall SET ownerId=0, paidUntil=0, paid=0 WHERE ownerId=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
statement.executeUpdate();
|
||||
// Delete Clan
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM clan_data WHERE clan_id=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
statement.executeUpdate();
|
||||
// Clan privileges
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM clan_privs WHERE clan_id=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
statement.executeUpdate();
|
||||
// Clan subpledges
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM clan_subpledges WHERE clan_id=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
statement.executeUpdate();
|
||||
// Clan skills
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM clan_skills WHERE clan_id=?;");
|
||||
statement.setString(1, clanIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
rcln.close();
|
||||
}
|
||||
|
||||
// skills
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_skills WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// skills save
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_skills_save WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// subclasses
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_subclasses WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// shortcuts
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_shortcuts WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// items
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM items WHERE owner_id=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// recipebook
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_recipebook WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// quests
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_quests WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// macroses
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_macroses WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// friends
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_friends WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// merchant_lease
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM merchant_lease WHERE player_id=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// boxaccess
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM boxaccess WHERE charname=?;");
|
||||
statement.setString(1, charNames.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// hennas
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_hennas WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// recommends
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_reco_bonus WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// ui categories
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_ui_categories WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// ui keys
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM character_ui_keys WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// characters
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM characters WHERE charId=?;");
|
||||
statement.setString(1, objIds.get(index));
|
||||
statement.executeUpdate();
|
||||
|
||||
// TODO: delete pets, olympiad/noble/hero stuff
|
||||
}
|
||||
|
||||
// Delete Account
|
||||
statement.close();
|
||||
statement = con.prepareStatement("DELETE FROM accounts WHERE login=?;");
|
||||
statement.setEscapeProcessing(true);
|
||||
statement.setString(1, account);
|
||||
statement.executeUpdate();
|
||||
|
||||
System.out.println("Account " + account + " has been deleted.");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not Exist
|
||||
System.out.println("Account " + account + " does not exist.");
|
||||
}
|
||||
|
||||
// Close Connection
|
||||
statement.close();
|
||||
L2DatabaseFactory.close(con);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,771 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.configurator;
|
||||
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.LineNumberReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Writer;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTabbedPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JToolBar;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.ToolTipManager;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import javolution.util.FastList;
|
||||
|
||||
import com.l2jserver.configurator.ConfigUserInterface.ConfigFile.ConfigComment;
|
||||
import com.l2jserver.configurator.ConfigUserInterface.ConfigFile.ConfigProperty;
|
||||
import com.l2jserver.i18n.LanguageControl;
|
||||
import com.l2jserver.images.ImagesTable;
|
||||
|
||||
/**
|
||||
* @author KenM
|
||||
*/
|
||||
public class ConfigUserInterface extends JFrame implements ActionListener
|
||||
{
|
||||
|
||||
/**
|
||||
* Comment for <code>serialVersionUID</code>
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final JTabbedPane _tabPane = new JTabbedPane();
|
||||
|
||||
private List<ConfigFile> _configs = new FastList<>();
|
||||
|
||||
private ResourceBundle _bundle;
|
||||
|
||||
/**
|
||||
* @param args
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// couldn't care less
|
||||
}
|
||||
|
||||
final ResourceBundle bundle = ResourceBundle.getBundle("configurator.Configurator", Locale.getDefault(), LanguageControl.INSTANCE);
|
||||
|
||||
SwingUtilities.invokeLater(() ->
|
||||
{
|
||||
ConfigUserInterface cui = new ConfigUserInterface(bundle);
|
||||
cui.setVisible(true);
|
||||
});
|
||||
}
|
||||
|
||||
public ConfigUserInterface(ResourceBundle bundle)
|
||||
{
|
||||
setBundle(bundle);
|
||||
setTitle(bundle.getString("toolName"));
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.setSize(750, 500);
|
||||
setLayout(new GridBagLayout());
|
||||
|
||||
setDefaultLookAndFeelDecorated(true);
|
||||
setIconImage(ImagesTable.getImage("l2j.png").getImage());
|
||||
|
||||
GridBagConstraints cons = new GridBagConstraints();
|
||||
cons.fill = GridBagConstraints.HORIZONTAL;
|
||||
cons.gridx = 0;
|
||||
cons.gridy = 0;
|
||||
cons.weighty = 0;
|
||||
cons.weightx = 1;
|
||||
|
||||
JMenuBar menubar = new JMenuBar();
|
||||
|
||||
JMenu fileMenu = new JMenu(bundle.getString("fileMenu"));
|
||||
JMenu helpMenu = new JMenu(bundle.getString("helpMenu"));
|
||||
|
||||
JMenuItem exitItem = new JMenuItem(bundle.getString("exitItem"));
|
||||
exitItem.setActionCommand("exit");
|
||||
exitItem.addActionListener(this);
|
||||
fileMenu.add(exitItem);
|
||||
|
||||
JMenuItem aboutItem = new JMenuItem(bundle.getString("aboutItem"));
|
||||
aboutItem.setActionCommand("about");
|
||||
aboutItem.addActionListener(this);
|
||||
helpMenu.add(aboutItem);
|
||||
|
||||
menubar.add(fileMenu);
|
||||
menubar.add(helpMenu);
|
||||
|
||||
setJMenuBar(menubar);
|
||||
|
||||
JToolBar toolBar = new JToolBar();
|
||||
toolBar.setFloatable(false);
|
||||
toolBar.setRollover(true);
|
||||
toolBar.add(createToolButton("disk.png", bundle.getString("save"), "save"));
|
||||
this.add(toolBar, cons);
|
||||
|
||||
cons.gridy++;
|
||||
cons.fill = GridBagConstraints.BOTH;
|
||||
cons.weighty = 1;
|
||||
loadConfigs();
|
||||
buildInterface();
|
||||
this.add(_tabPane, cons);
|
||||
}
|
||||
|
||||
private JButton createToolButton(String image, String text, String action)
|
||||
{
|
||||
JButton button = new JButton(text, ImagesTable.getImage(image));
|
||||
button.setActionCommand(action);
|
||||
button.addActionListener(this);
|
||||
return button;
|
||||
}
|
||||
|
||||
private void buildInterface()
|
||||
{
|
||||
ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);
|
||||
ToolTipManager.sharedInstance().setInitialDelay(0);
|
||||
ToolTipManager.sharedInstance().setReshowDelay(0);
|
||||
|
||||
GridBagConstraints cons = new GridBagConstraints();
|
||||
cons.fill = GridBagConstraints.NONE;
|
||||
cons.anchor = GridBagConstraints.FIRST_LINE_START;
|
||||
cons.insets = new Insets(2, 2, 2, 2);
|
||||
for (ConfigFile cf : getConfigs())
|
||||
{
|
||||
JPanel panel = new JPanel()
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -6580868086294343672L;
|
||||
|
||||
@Override
|
||||
public void scrollRectToVisible(Rectangle r)
|
||||
{
|
||||
}
|
||||
};
|
||||
panel.setLayout(new GridBagLayout());
|
||||
|
||||
cons.gridy = 0;
|
||||
cons.weighty = 0;
|
||||
for (ConfigComment cc : cf.getConfigProperties())
|
||||
{
|
||||
if (!(cc instanceof ConfigProperty))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ConfigProperty cp = (ConfigProperty) cc;
|
||||
cons.gridx = 0;
|
||||
|
||||
JLabel keyLabel = new JLabel(cp.getDisplayName() + ':', ImagesTable.getImage("help.png"), SwingConstants.LEFT);
|
||||
String comments = "<b>" + cp.getName() + ":</b><br>" + cp.getComments();
|
||||
comments = comments.replace("\r\n", "<br>");
|
||||
comments = "<html>" + comments + "</html>";
|
||||
keyLabel.setToolTipText(comments);
|
||||
cons.weightx = 0;
|
||||
panel.add(keyLabel, cons);
|
||||
cons.gridx++;
|
||||
|
||||
JComponent valueComponent = cp.getValueComponent();
|
||||
valueComponent.setToolTipText(comments);
|
||||
cons.weightx = 1;
|
||||
panel.add(valueComponent, cons);
|
||||
cons.gridx++;
|
||||
cons.gridy++;
|
||||
}
|
||||
cons.gridy++;
|
||||
cons.weighty = 1;
|
||||
panel.add(new JLabel(), cons); // filler
|
||||
_tabPane.addTab(cf.getName(), new JScrollPane(panel));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void loadConfigs()
|
||||
{
|
||||
File configsDir = new File("config");
|
||||
for (File file : configsDir.listFiles())
|
||||
{
|
||||
if (file.getName().endsWith(".properties") && file.isFile() && file.canWrite())
|
||||
{
|
||||
try
|
||||
{
|
||||
parsePropertiesFile(file);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
JOptionPane.showMessageDialog(ConfigUserInterface.this, getBundle().getString("errorReading") + file.getName(), getBundle().getString("error"), JOptionPane.ERROR_MESSAGE);
|
||||
System.exit(3);
|
||||
// e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param file
|
||||
* @throws IOException
|
||||
*/
|
||||
private void parsePropertiesFile(File file) throws IOException
|
||||
{
|
||||
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(new FileInputStream(file)));
|
||||
|
||||
String line;
|
||||
StringBuilder commentBuffer = new StringBuilder();
|
||||
ConfigFile cf = new ConfigFile(file);
|
||||
while ((line = lnr.readLine()) != null)
|
||||
{
|
||||
line = line.trim();
|
||||
|
||||
if (line.startsWith("#"))
|
||||
{
|
||||
if (commentBuffer.length() > 0)
|
||||
{
|
||||
commentBuffer.append("\r\n");
|
||||
}
|
||||
commentBuffer.append(line.substring(1));
|
||||
}
|
||||
else if (line.length() == 0)
|
||||
{
|
||||
// blank line, reset comments
|
||||
if (commentBuffer.length() > 0)
|
||||
{
|
||||
cf.addConfigComment(commentBuffer.toString());
|
||||
}
|
||||
commentBuffer.setLength(0);
|
||||
}
|
||||
else if (line.indexOf('=') >= 0)
|
||||
{
|
||||
String[] kv = line.split("=");
|
||||
String key = kv[0].trim();
|
||||
String value = "";
|
||||
if (kv.length > 1)
|
||||
{
|
||||
value = kv[1].trim();
|
||||
}
|
||||
|
||||
if (line.indexOf('\\') >= 0)
|
||||
{
|
||||
while (((line = lnr.readLine()) != null) && (line.indexOf('\\') >= 0))
|
||||
{
|
||||
value += "\r\n" + line;
|
||||
}
|
||||
value += "\r\n" + line;
|
||||
}
|
||||
|
||||
String comments = commentBuffer.toString();
|
||||
commentBuffer.setLength(0); // reset
|
||||
|
||||
cf.addConfigProperty(key, parseValue(value), comments);
|
||||
}
|
||||
}
|
||||
getConfigs().add(cf);
|
||||
lnr.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param value
|
||||
*/
|
||||
private Object parseValue(String value)
|
||||
{
|
||||
if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("true"))
|
||||
{
|
||||
return Boolean.parseBoolean(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* try { double parseDouble = Double.parseDouble(value); return parseDouble; } catch (NumberFormatException e) { // not a double, ignore }
|
||||
*/
|
||||
|
||||
// localhost -> 127.0.0.1
|
||||
if (value.equals("localhost"))
|
||||
{
|
||||
value = "127.0.0.1";
|
||||
}
|
||||
|
||||
String[] parts = value.split("\\.");
|
||||
if (parts.length == 4)
|
||||
{
|
||||
boolean ok = true;
|
||||
for (int i = 0; (i < 4) && ok; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
int parseInt = Integer.parseInt(parts[i]);
|
||||
if ((parseInt < 0) || (parseInt > 255))
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (ok)
|
||||
{
|
||||
try
|
||||
{
|
||||
InetAddress address = InetAddress.getByName(value);
|
||||
return address;
|
||||
}
|
||||
catch (UnknownHostException e)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
static class ConfigFile
|
||||
{
|
||||
private final File _file;
|
||||
private String _name;
|
||||
private final List<ConfigComment> _configs = new FastList<>();
|
||||
|
||||
public ConfigFile(File file)
|
||||
{
|
||||
_file = file;
|
||||
int lastIndex = file.getName().lastIndexOf('.');
|
||||
setName(file.getName().substring(0, lastIndex));
|
||||
}
|
||||
|
||||
public void addConfigProperty(String name, Object value, ValueType type, String comments)
|
||||
{
|
||||
_configs.add(new ConfigProperty(name, value, type, comments));
|
||||
}
|
||||
|
||||
public void addConfigComment(String comment)
|
||||
{
|
||||
_configs.add(new ConfigComment(comment));
|
||||
}
|
||||
|
||||
public void addConfigProperty(String name, Object value, String comments)
|
||||
{
|
||||
this.addConfigProperty(name, value, ValueType.firstTypeMatch(value), comments);
|
||||
}
|
||||
|
||||
public List<ConfigComment> getConfigProperties()
|
||||
{
|
||||
return _configs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name The name to set.
|
||||
*/
|
||||
public void setName(String name)
|
||||
{
|
||||
_name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the name.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public void save() throws IOException
|
||||
{
|
||||
BufferedWriter bufWriter = null;
|
||||
try
|
||||
{
|
||||
bufWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(_file)));
|
||||
for (ConfigComment cc : _configs)
|
||||
{
|
||||
cc.save(bufWriter);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (bufWriter != null)
|
||||
{
|
||||
bufWriter.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ConfigComment
|
||||
{
|
||||
|
||||
private String _comments;
|
||||
|
||||
/**
|
||||
* @param comments
|
||||
*/
|
||||
public ConfigComment(String comments)
|
||||
{
|
||||
_comments = comments;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the comments.
|
||||
*/
|
||||
public String getComments()
|
||||
{
|
||||
return _comments;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param comments The comments to set.
|
||||
*/
|
||||
public void setComments(String comments)
|
||||
{
|
||||
_comments = comments;
|
||||
}
|
||||
|
||||
public void save(Writer writer) throws IOException
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append('#');
|
||||
sb.append(getComments().replace("\r\n", "\r\n#"));
|
||||
sb.append("\r\n\r\n");
|
||||
writer.write(sb.toString());
|
||||
}
|
||||
}
|
||||
|
||||
class ConfigProperty extends ConfigComment
|
||||
{
|
||||
private String _propname;
|
||||
private Object _value;
|
||||
private ValueType _type;
|
||||
private JComponent _component;
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* @param value
|
||||
* @param type
|
||||
* @param comments
|
||||
*/
|
||||
public ConfigProperty(String name, Object value, ValueType type, String comments)
|
||||
{
|
||||
super(comments);
|
||||
if (!type.getType().isAssignableFrom(value.getClass()))
|
||||
{
|
||||
throw new IllegalArgumentException("Value Instance Type doesn't match the type argument.");
|
||||
}
|
||||
_propname = name;
|
||||
_type = type;
|
||||
_value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the name.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return _propname;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the name.
|
||||
*/
|
||||
public String getDisplayName()
|
||||
{
|
||||
return unCamelize(_propname);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name The name to set.
|
||||
*/
|
||||
public void setName(String name)
|
||||
{
|
||||
_propname = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the value.
|
||||
*/
|
||||
public Object getValue()
|
||||
{
|
||||
return _value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param value The value to set.
|
||||
*/
|
||||
public void setValue(String value)
|
||||
{
|
||||
_value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the type.
|
||||
*/
|
||||
public ValueType getType()
|
||||
{
|
||||
return _type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type The type to set.
|
||||
*/
|
||||
public void setType(ValueType type)
|
||||
{
|
||||
_type = type;
|
||||
}
|
||||
|
||||
public JComponent getValueComponent()
|
||||
{
|
||||
if (_component == null)
|
||||
{
|
||||
_component = createValueComponent();
|
||||
}
|
||||
return _component;
|
||||
}
|
||||
|
||||
public JComponent createValueComponent()
|
||||
{
|
||||
switch (getType())
|
||||
{
|
||||
case BOOLEAN:
|
||||
boolean bool = (Boolean) getValue();
|
||||
JCheckBox checkBox = new JCheckBox();
|
||||
checkBox.setSelected(bool);
|
||||
return checkBox;
|
||||
case IPv4:
|
||||
return new JIPTextField((Inet4Address) getValue());
|
||||
case DOUBLE:
|
||||
case INTEGER:
|
||||
case STRING:
|
||||
default:
|
||||
String val = getValue().toString();
|
||||
JTextArea textArea = new JTextArea(val);
|
||||
textArea.setFont(UIManager.getFont("TextField.font"));
|
||||
int rows = 1;
|
||||
for (int i = 0; i < val.length(); i++)
|
||||
{
|
||||
if (val.charAt(i) == '\\')
|
||||
{
|
||||
rows++;
|
||||
}
|
||||
}
|
||||
textArea.setRows(rows);
|
||||
textArea.setColumns(Math.max(val.length() / rows, 20));
|
||||
return textArea;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(Writer writer) throws IOException
|
||||
{
|
||||
String value;
|
||||
if (getValueComponent() instanceof JCheckBox)
|
||||
{
|
||||
value = Boolean.toString(((JCheckBox) getValueComponent()).isSelected());
|
||||
value = value.substring(0, 1).toUpperCase() + value.substring(1);
|
||||
}
|
||||
else if (getValueComponent() instanceof JIPTextField)
|
||||
{
|
||||
value = ((JIPTextField) getValueComponent()).getText();
|
||||
}
|
||||
else if (getValueComponent() instanceof JTextArea)
|
||||
{
|
||||
value = ((JTextArea) getValueComponent()).getText();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IllegalStateException("Unhandled component value");
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append('#');
|
||||
sb.append(getComments().replace("\r\n", "\r\n#"));
|
||||
sb.append("\r\n");
|
||||
sb.append(getName());
|
||||
sb.append(" = ");
|
||||
sb.append(value);
|
||||
sb.append("\r\n");
|
||||
sb.append("\r\n");
|
||||
writer.write(sb.toString());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static enum ValueType
|
||||
{
|
||||
BOOLEAN(Boolean.class),
|
||||
DOUBLE(Double.class),
|
||||
INTEGER(Integer.class),
|
||||
IPv4(Inet4Address.class),
|
||||
STRING(String.class);
|
||||
|
||||
private final Class<?> _type;
|
||||
|
||||
private ValueType(Class<?> type)
|
||||
{
|
||||
_type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the type.
|
||||
*/
|
||||
public Class<?> getType()
|
||||
{
|
||||
return _type;
|
||||
}
|
||||
|
||||
public static ValueType firstTypeMatch(Object value)
|
||||
{
|
||||
for (ValueType vt : ValueType.values())
|
||||
{
|
||||
if (vt.getType() == value.getClass())
|
||||
{
|
||||
return vt;
|
||||
}
|
||||
}
|
||||
throw new NoSuchElementException("No match for: " + value.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
String cmd = e.getActionCommand();
|
||||
|
||||
StringBuilder errors = new StringBuilder();
|
||||
|
||||
if (cmd.equals("save"))
|
||||
{
|
||||
for (ConfigFile cf : ConfigUserInterface.this.getConfigs())
|
||||
{
|
||||
try
|
||||
{
|
||||
cf.save();
|
||||
}
|
||||
catch (Exception e1)
|
||||
{
|
||||
e1.printStackTrace();
|
||||
errors.append(getBundle().getString("errorSaving") + cf.getName() + ".properties. " + getBundle().getString("reason") + e1.getLocalizedMessage() + "\r\n");
|
||||
}
|
||||
}
|
||||
if (errors.length() == 0)
|
||||
{
|
||||
JOptionPane.showMessageDialog(ConfigUserInterface.this, getBundle().getString("success"), "OK", JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
else
|
||||
{
|
||||
JOptionPane.showMessageDialog(ConfigUserInterface.this, errors, getBundle().getString("error"), JOptionPane.ERROR_MESSAGE);
|
||||
System.exit(2);
|
||||
}
|
||||
}
|
||||
else if (cmd.equals("exit"))
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
else if (cmd.equals("about"))
|
||||
{
|
||||
JOptionPane.showMessageDialog(ConfigUserInterface.this, getBundle().getString("credits") + "\nhttp://www.l2jserver.com\n\n" + getBundle().getString("icons") + "\n\n" + getBundle().getString("language") + '\n' + getBundle().getString("translation"), getBundle().getString("aboutItem"), JOptionPane.INFORMATION_MESSAGE, ImagesTable.getImage("l2jserverlogo.png"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param configs The configuration to set.
|
||||
*/
|
||||
public void setConfigs(List<ConfigFile> configs)
|
||||
{
|
||||
_configs = configs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the configuration.
|
||||
*/
|
||||
public List<ConfigFile> getConfigs()
|
||||
{
|
||||
return _configs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the configuration setting name in a human readable form.
|
||||
*/
|
||||
|
||||
public static String unCamelize(final String keyName)
|
||||
{
|
||||
Pattern p = Pattern.compile("\\p{Lu}");
|
||||
Matcher m = p.matcher(keyName);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
int last = 0;
|
||||
while (m.find())
|
||||
{
|
||||
if (m.start() != (last + 1))
|
||||
{
|
||||
m.appendReplacement(sb, " " + m.group());
|
||||
}
|
||||
last = m.start();
|
||||
}
|
||||
m.appendTail(sb);
|
||||
return sb.toString().trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bundle The bundle to set.
|
||||
*/
|
||||
public void setBundle(ResourceBundle bundle)
|
||||
{
|
||||
_bundle = bundle;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the bundle.
|
||||
*/
|
||||
public ResourceBundle getBundle()
|
||||
{
|
||||
return _bundle;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.configurator;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.FocusEvent;
|
||||
import java.awt.event.FocusListener;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.text.AttributeSet;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.PlainDocument;
|
||||
|
||||
/**
|
||||
* @author KenM
|
||||
*/
|
||||
public class JIPTextField extends JPanel implements FocusListener
|
||||
{
|
||||
/**
|
||||
* Comment for <code>serialVersionUID</code>
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
private JTextField[] _textFields;
|
||||
private List<FocusListener> _focusListeners;
|
||||
|
||||
public JIPTextField(String textIp)
|
||||
{
|
||||
super.addFocusListener(this);
|
||||
|
||||
initIPTextField(textIp);
|
||||
|
||||
for (JTextField _textField : _textFields)
|
||||
{
|
||||
_textField.addFocusListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
public JIPTextField()
|
||||
{
|
||||
this("...");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param value
|
||||
*/
|
||||
public JIPTextField(Inet4Address value)
|
||||
{
|
||||
this(value.getHostAddress());
|
||||
}
|
||||
|
||||
private void initIPTextField(String textIp)
|
||||
{
|
||||
final ActionListener nextfocusaction = evt -> ((Component) evt.getSource()).transferFocus();
|
||||
|
||||
setLayout(new GridBagLayout());
|
||||
_textFields = new JTextField[4];
|
||||
|
||||
GridBagConstraints cons = new GridBagConstraints();
|
||||
cons.anchor = GridBagConstraints.PAGE_START;
|
||||
cons.fill = GridBagConstraints.HORIZONTAL;
|
||||
cons.insets = new Insets(1, 1, 1, 1);
|
||||
cons.gridx = 0;
|
||||
cons.gridy = 0;
|
||||
|
||||
MaxLengthDocument previous = null;
|
||||
String[] parts = textIp.split("\\.");
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
String str = parts[i];
|
||||
if (i > 0)
|
||||
{
|
||||
JLabel dot = new JLabel(".");
|
||||
cons.weightx = 0;
|
||||
add(dot, cons);
|
||||
cons.gridx++;
|
||||
}
|
||||
MaxLengthDocument maxDoc = new MaxLengthDocument(3);
|
||||
_textFields[i] = new JTextField(maxDoc, str, 3);
|
||||
if (previous != null)
|
||||
{
|
||||
previous.setNext(_textFields[i]);
|
||||
}
|
||||
previous = maxDoc;
|
||||
// ic.weightx = 1;
|
||||
add(_textFields[i], cons);
|
||||
_textFields[i].addActionListener(nextfocusaction);
|
||||
cons.gridx++;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFocusListener(FocusListener fl)
|
||||
{
|
||||
if (_focusListeners == null)
|
||||
{
|
||||
_focusListeners = new LinkedList<>();
|
||||
}
|
||||
|
||||
if ((fl != null) && !_focusListeners.contains(fl))
|
||||
{
|
||||
_focusListeners.add(fl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFocusListener(FocusListener fl)
|
||||
{
|
||||
if (_focusListeners != null)
|
||||
{
|
||||
_focusListeners.remove(fl);
|
||||
}
|
||||
}
|
||||
|
||||
public String getText()
|
||||
{
|
||||
String str = "";
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (_textFields[i].getText().length() == 0)
|
||||
{
|
||||
str += "0";
|
||||
}
|
||||
else
|
||||
{
|
||||
str += _textFields[i].getText();
|
||||
}
|
||||
if (i < 3)
|
||||
{
|
||||
str += ".";
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
public void setText(String str)
|
||||
{
|
||||
try
|
||||
{
|
||||
// make sure string is not null; throw a NullPointerException otherwise
|
||||
str.length();
|
||||
|
||||
InetAddress ip = InetAddress.getByName(str);
|
||||
byte b[] = ip.getAddress();
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
// byte always have a sign in Java, IP addresses aren't
|
||||
if (b[i] >= 0)
|
||||
{
|
||||
_textFields[i].setText(Byte.toString(b[i]));
|
||||
}
|
||||
else
|
||||
{
|
||||
_textFields[i].setText(Integer.toString(b[i] + 256));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
catch (UnknownHostException ex)
|
||||
{
|
||||
}
|
||||
catch (NullPointerException npe)
|
||||
{
|
||||
}
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
_textFields[i].setText("");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnabled(boolean enabled)
|
||||
{
|
||||
for (JTextField _textField : _textFields)
|
||||
{
|
||||
if (_textField != null)
|
||||
{
|
||||
_textField.setEnabled(enabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isEmpty()
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (_textFields[i].getText().length() != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isCorrect()
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (_textFields[i].getText().length() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void focusGained(FocusEvent event)
|
||||
{
|
||||
if (_focusListeners != null)
|
||||
{
|
||||
for (FocusListener fl : _focusListeners)
|
||||
{
|
||||
fl.focusGained(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void focusLost(FocusEvent event)
|
||||
{
|
||||
if (isCorrect() || isEmpty())
|
||||
{
|
||||
if (_focusListeners != null)
|
||||
{
|
||||
for (FocusListener fl : _focusListeners)
|
||||
{
|
||||
fl.focusLost(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class MaxLengthDocument extends PlainDocument
|
||||
{
|
||||
|
||||
/**
|
||||
* Comment for <code>serialVersionUID</code>
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final int _max;
|
||||
private JTextField _next;
|
||||
|
||||
public MaxLengthDocument(int maxLength)
|
||||
{
|
||||
this(maxLength, null);
|
||||
}
|
||||
|
||||
public MaxLengthDocument(int maxLength, JTextField next)
|
||||
{
|
||||
_max = maxLength;
|
||||
setNext(next);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertString(int offset, String str, AttributeSet a) throws BadLocationException
|
||||
{
|
||||
if ((getLength() + str.length()) > _max)
|
||||
{
|
||||
if (getNext() != null)
|
||||
{
|
||||
if (getNext().getText().length() > 0)
|
||||
{
|
||||
getNext().select(0, getNext().getText().length());
|
||||
}
|
||||
else
|
||||
{
|
||||
getNext().getDocument().insertString(0, str, a);
|
||||
}
|
||||
getNext().requestFocusInWindow();
|
||||
}
|
||||
else
|
||||
{
|
||||
Toolkit.getDefaultToolkit().beep();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
super.insertString(offset, str, a);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param next The next to set.
|
||||
*/
|
||||
public void setNext(JTextField next)
|
||||
{
|
||||
_next = next;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the next.
|
||||
*/
|
||||
public JTextField getNext()
|
||||
{
|
||||
return _next;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,237 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.LineNumberReader;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastList;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.cache.HtmCache;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
import com.l2jserver.gameserver.network.clientpackets.Say2;
|
||||
import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
|
||||
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
|
||||
import com.l2jserver.gameserver.script.DateRange;
|
||||
import com.l2jserver.gameserver.util.Broadcast;
|
||||
import com.l2jserver.util.StringUtil;
|
||||
|
||||
/**
|
||||
* This class ...
|
||||
* @version $Revision: 1.5.2.1.2.7 $ $Date: 2005/03/29 23:15:14 $
|
||||
*/
|
||||
public class Announcements
|
||||
{
|
||||
private static Logger _log = Logger.getLogger(Announcements.class.getName());
|
||||
|
||||
private final List<String> _announcements = new FastList<>();
|
||||
private final List<List<Object>> _eventAnnouncements = new FastList<>();
|
||||
|
||||
private Announcements()
|
||||
{
|
||||
loadAnnouncements();
|
||||
}
|
||||
|
||||
public static Announcements getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
public void loadAnnouncements()
|
||||
{
|
||||
_announcements.clear();
|
||||
File file = new File(Config.DATAPACK_ROOT, "data/announcements.txt");
|
||||
if (file.exists())
|
||||
{
|
||||
readFromDisk(file);
|
||||
}
|
||||
else
|
||||
{
|
||||
_log.warning("data/announcements.txt doesn't exist");
|
||||
}
|
||||
}
|
||||
|
||||
public void showAnnouncements(L2PcInstance activeChar)
|
||||
{
|
||||
for (int i = 0; i < _announcements.size(); i++)
|
||||
{
|
||||
CreatureSay cs = new CreatureSay(0, Say2.ANNOUNCEMENT, activeChar.getName(), _announcements.get(i));
|
||||
activeChar.sendPacket(cs);
|
||||
}
|
||||
|
||||
for (int i = 0; i < _eventAnnouncements.size(); i++)
|
||||
{
|
||||
List<Object> entry = _eventAnnouncements.get(i);
|
||||
|
||||
DateRange validDateRange = (DateRange) entry.get(0);
|
||||
String[] msg = (String[]) entry.get(1);
|
||||
Date currentDate = new Date();
|
||||
|
||||
if (!validDateRange.isValid() || validDateRange.isWithinRange(currentDate))
|
||||
{
|
||||
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1);
|
||||
for (String element : msg)
|
||||
{
|
||||
sm.addString(element);
|
||||
}
|
||||
activeChar.sendPacket(sm);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void addEventAnnouncement(DateRange validDateRange, String[] msg)
|
||||
{
|
||||
List<Object> entry = new FastList<>();
|
||||
entry.add(validDateRange);
|
||||
entry.add(msg);
|
||||
_eventAnnouncements.add(entry);
|
||||
}
|
||||
|
||||
public void listAnnouncements(L2PcInstance activeChar)
|
||||
{
|
||||
String content = HtmCache.getInstance().getHtmForce(activeChar.getHtmlPrefix(), "data/html/admin/announce.htm");
|
||||
NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
|
||||
adminReply.setHtml(content);
|
||||
final StringBuilder replyMSG = StringUtil.startAppend(500, "<br>");
|
||||
for (int i = 0; i < _announcements.size(); i++)
|
||||
{
|
||||
StringUtil.append(replyMSG, "<table width=260><tr><td width=220>", _announcements.get(i), "</td><td width=40>" + "<button value=\"Delete\" action=\"bypass -h admin_del_announcement ", String.valueOf(i), "\" width=60 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table>");
|
||||
}
|
||||
adminReply.replace("%announces%", replyMSG.toString());
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
|
||||
public void addAnnouncement(String text)
|
||||
{
|
||||
_announcements.add(text);
|
||||
saveToDisk();
|
||||
}
|
||||
|
||||
public void delAnnouncement(int line)
|
||||
{
|
||||
_announcements.remove(line);
|
||||
saveToDisk();
|
||||
}
|
||||
|
||||
private void readFromDisk(File file)
|
||||
{
|
||||
try (LineNumberReader lnr = new LineNumberReader(new FileReader(file));)
|
||||
{
|
||||
int i = 0;
|
||||
String line = null;
|
||||
|
||||
while ((line = lnr.readLine()) != null)
|
||||
{
|
||||
StringTokenizer st = new StringTokenizer(line, "\n\r");
|
||||
if (st.hasMoreTokens())
|
||||
{
|
||||
String announcement = st.nextToken();
|
||||
_announcements.add(announcement);
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("Announcements: Loaded " + i + " Announcements.");
|
||||
}
|
||||
}
|
||||
catch (IOException e1)
|
||||
{
|
||||
_log.log(Level.SEVERE, "Error reading announcements: ", e1);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveToDisk()
|
||||
{
|
||||
File file = new File("data/announcements.txt");
|
||||
FileWriter save = null;
|
||||
|
||||
try
|
||||
{
|
||||
save = new FileWriter(file);
|
||||
for (int i = 0; i < _announcements.size(); i++)
|
||||
{
|
||||
save.write(_announcements.get(i));
|
||||
save.write("\r\n");
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "Saving to the announcements file has failed: ", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
save.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void announceToAll(String text)
|
||||
{
|
||||
Broadcast.announceToOnlinePlayers(text);
|
||||
}
|
||||
|
||||
public void announceToAll(SystemMessage sm)
|
||||
{
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
}
|
||||
|
||||
public void announceToInstance(SystemMessage sm, int instanceId)
|
||||
{
|
||||
Broadcast.toPlayersInInstance(sm, instanceId);
|
||||
}
|
||||
|
||||
// Method for handling announcements from admin
|
||||
public void handleAnnounce(String command, int lengthToTrim)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Announce string to everyone on server
|
||||
String text = command.substring(lengthToTrim);
|
||||
SingletonHolder._instance.announceToAll(text);
|
||||
}
|
||||
|
||||
// No body cares!
|
||||
catch (StringIndexOutOfBoundsException e)
|
||||
{
|
||||
// empty message.. ignore
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final Announcements _instance = new Announcements();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.instancemanager.CastleManager;
|
||||
import com.l2jserver.gameserver.model.L2Clan;
|
||||
import com.l2jserver.gameserver.model.entity.Castle;
|
||||
import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
|
||||
|
||||
/**
|
||||
* Thorgrim - 2005 Class managing periodical events with castle
|
||||
*/
|
||||
public class CastleUpdater implements Runnable
|
||||
{
|
||||
protected static final Logger _log = Logger.getLogger(CastleUpdater.class.getName());
|
||||
private final L2Clan _clan;
|
||||
private int _runCount = 0;
|
||||
|
||||
public CastleUpdater(L2Clan clan, int runCount)
|
||||
{
|
||||
_clan = clan;
|
||||
_runCount = runCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Move current castle treasury to clan warehouse every 2 hour
|
||||
ItemContainer warehouse = _clan.getWarehouse();
|
||||
if ((warehouse != null) && (_clan.getHasCastle() > 0))
|
||||
{
|
||||
Castle castle = CastleManager.getInstance().getCastleById(_clan.getHasCastle());
|
||||
if (!Config.ALT_MANOR_SAVE_ALL_ACTIONS)
|
||||
{
|
||||
if ((_runCount % Config.ALT_MANOR_SAVE_PERIOD_RATE) == 0)
|
||||
{
|
||||
castle.saveSeedData();
|
||||
castle.saveCropData();
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("Manor System: all data for " + castle.getName() + " saved");
|
||||
}
|
||||
}
|
||||
}
|
||||
CastleUpdater cu = new CastleUpdater(_clan, ++_runCount);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(cu, 3600000);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.instancemanager.CastleManager;
|
||||
import com.l2jserver.gameserver.model.L2Clan;
|
||||
import com.l2jserver.gameserver.model.entity.Fort;
|
||||
|
||||
/**
|
||||
* Class managing periodical events with castle
|
||||
* @author Vice - 2008
|
||||
*/
|
||||
public class FortUpdater implements Runnable
|
||||
{
|
||||
protected static Logger _log = Logger.getLogger(FortUpdater.class.getName());
|
||||
private final L2Clan _clan;
|
||||
private final Fort _fort;
|
||||
private int _runCount;
|
||||
private final UpdaterType _updaterType;
|
||||
|
||||
public enum UpdaterType
|
||||
{
|
||||
MAX_OWN_TIME, // gives fort back to NPC clan
|
||||
PERIODIC_UPDATE // raise blood oath/supply level
|
||||
}
|
||||
|
||||
public FortUpdater(Fort fort, L2Clan clan, int runCount, UpdaterType ut)
|
||||
{
|
||||
_fort = fort;
|
||||
_clan = clan;
|
||||
_runCount = runCount;
|
||||
_updaterType = ut;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
switch (_updaterType)
|
||||
{
|
||||
case PERIODIC_UPDATE:
|
||||
_runCount++;
|
||||
if ((_fort.getOwnerClan() == null) || (_fort.getOwnerClan() != _clan))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_fort.setBloodOathReward(_fort.getBloodOathReward() + Config.FS_BLOOD_OATH_COUNT);
|
||||
if (_fort.getFortState() == 2)
|
||||
{
|
||||
if (_clan.getWarehouse().getAdena() >= Config.FS_FEE_FOR_CASTLE)
|
||||
{
|
||||
_clan.getWarehouse().destroyItemByItemId("FS_fee_for_Castle", 57, Config.FS_FEE_FOR_CASTLE, null, null);
|
||||
CastleManager.getInstance().getCastleById(_fort.getCastleId()).addToTreasuryNoTax(Config.FS_FEE_FOR_CASTLE);
|
||||
_fort.raiseSupplyLvL();
|
||||
}
|
||||
else
|
||||
{
|
||||
_fort.setFortState(1, 0);
|
||||
}
|
||||
}
|
||||
_fort.saveFortVariables();
|
||||
break;
|
||||
case MAX_OWN_TIME:
|
||||
if ((_fort.getOwnerClan() == null) || (_fort.getOwnerClan() != _clan))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (_fort.getOwnedTime() > (Config.FS_MAX_OWN_TIME * 3600))
|
||||
{
|
||||
_fort.removeOwner(true);
|
||||
_fort.setFortState(0, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
|
||||
public int getRunCount()
|
||||
{
|
||||
return _runCount;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,514 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Calendar;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.mmocore.network.SelectorConfig;
|
||||
import org.mmocore.network.SelectorThread;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.L2DatabaseFactory;
|
||||
import com.l2jserver.Server;
|
||||
import com.l2jserver.gameserver.cache.CrestCache;
|
||||
import com.l2jserver.gameserver.cache.HtmCache;
|
||||
import com.l2jserver.gameserver.datatables.AccessLevels;
|
||||
import com.l2jserver.gameserver.datatables.AdminCommandAccessRights;
|
||||
import com.l2jserver.gameserver.datatables.ArmorSetsTable;
|
||||
import com.l2jserver.gameserver.datatables.AugmentationData;
|
||||
import com.l2jserver.gameserver.datatables.CharNameTable;
|
||||
import com.l2jserver.gameserver.datatables.CharTemplateTable;
|
||||
import com.l2jserver.gameserver.datatables.ClanTable;
|
||||
import com.l2jserver.gameserver.datatables.DoorTable;
|
||||
import com.l2jserver.gameserver.datatables.EnchantGroupsTable;
|
||||
import com.l2jserver.gameserver.datatables.EnchantHPBonusData;
|
||||
import com.l2jserver.gameserver.datatables.EventDroplist;
|
||||
import com.l2jserver.gameserver.datatables.FishTable;
|
||||
import com.l2jserver.gameserver.datatables.GMSkillTable;
|
||||
import com.l2jserver.gameserver.datatables.HelperBuffTable;
|
||||
import com.l2jserver.gameserver.datatables.HennaTable;
|
||||
import com.l2jserver.gameserver.datatables.HennaTreeTable;
|
||||
import com.l2jserver.gameserver.datatables.HerbDropTable;
|
||||
import com.l2jserver.gameserver.datatables.HeroSkillTable;
|
||||
import com.l2jserver.gameserver.datatables.ItemTable;
|
||||
import com.l2jserver.gameserver.datatables.LevelUpData;
|
||||
import com.l2jserver.gameserver.datatables.MapRegionTable;
|
||||
import com.l2jserver.gameserver.datatables.MerchantPriceConfigTable;
|
||||
import com.l2jserver.gameserver.datatables.MultiSell;
|
||||
import com.l2jserver.gameserver.datatables.NobleSkillTable;
|
||||
import com.l2jserver.gameserver.datatables.NpcBufferTable;
|
||||
import com.l2jserver.gameserver.datatables.NpcTable;
|
||||
import com.l2jserver.gameserver.datatables.NpcWalkerRoutesTable;
|
||||
import com.l2jserver.gameserver.datatables.OfflineTradersTable;
|
||||
import com.l2jserver.gameserver.datatables.PetDataTable;
|
||||
import com.l2jserver.gameserver.datatables.SkillTable;
|
||||
import com.l2jserver.gameserver.datatables.SkillTreesData;
|
||||
import com.l2jserver.gameserver.datatables.SpawnTable;
|
||||
import com.l2jserver.gameserver.datatables.StaticObjects;
|
||||
import com.l2jserver.gameserver.datatables.SummonItemsData;
|
||||
import com.l2jserver.gameserver.datatables.SummonSkillsTable;
|
||||
import com.l2jserver.gameserver.datatables.TeleportLocationTable;
|
||||
import com.l2jserver.gameserver.datatables.UITable;
|
||||
import com.l2jserver.gameserver.geoeditorcon.GeoEditorListener;
|
||||
import com.l2jserver.gameserver.handler.AdminCommandHandler;
|
||||
import com.l2jserver.gameserver.handler.ChatHandler;
|
||||
import com.l2jserver.gameserver.handler.ItemHandler;
|
||||
import com.l2jserver.gameserver.handler.SkillHandler;
|
||||
import com.l2jserver.gameserver.handler.UserCommandHandler;
|
||||
import com.l2jserver.gameserver.handler.VoicedCommandHandler;
|
||||
import com.l2jserver.gameserver.idfactory.IdFactory;
|
||||
import com.l2jserver.gameserver.instancemanager.AirShipManager;
|
||||
import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
|
||||
import com.l2jserver.gameserver.instancemanager.AuctionManager;
|
||||
import com.l2jserver.gameserver.instancemanager.BoatManager;
|
||||
import com.l2jserver.gameserver.instancemanager.CastleManager;
|
||||
import com.l2jserver.gameserver.instancemanager.CastleManorManager;
|
||||
import com.l2jserver.gameserver.instancemanager.ClanHallManager;
|
||||
import com.l2jserver.gameserver.instancemanager.CoupleManager;
|
||||
import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jserver.gameserver.instancemanager.DayNightSpawnManager;
|
||||
import com.l2jserver.gameserver.instancemanager.DimensionalRiftManager;
|
||||
import com.l2jserver.gameserver.instancemanager.FortManager;
|
||||
import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
|
||||
import com.l2jserver.gameserver.instancemanager.FourSepulchersManager;
|
||||
import com.l2jserver.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jserver.gameserver.instancemanager.GraciaSeedsManager;
|
||||
import com.l2jserver.gameserver.instancemanager.GrandBossManager;
|
||||
import com.l2jserver.gameserver.instancemanager.HellboundManager;
|
||||
import com.l2jserver.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jserver.gameserver.instancemanager.ItemAuctionManager;
|
||||
import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jserver.gameserver.instancemanager.MailManager;
|
||||
import com.l2jserver.gameserver.instancemanager.MercTicketManager;
|
||||
import com.l2jserver.gameserver.instancemanager.PetitionManager;
|
||||
import com.l2jserver.gameserver.instancemanager.QuestManager;
|
||||
import com.l2jserver.gameserver.instancemanager.RaidBossPointsManager;
|
||||
import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
|
||||
import com.l2jserver.gameserver.instancemanager.SiegeManager;
|
||||
import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
|
||||
import com.l2jserver.gameserver.instancemanager.TransformationManager;
|
||||
import com.l2jserver.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jserver.gameserver.model.AutoChatHandler;
|
||||
import com.l2jserver.gameserver.model.AutoSpawnHandler;
|
||||
import com.l2jserver.gameserver.model.L2Manor;
|
||||
import com.l2jserver.gameserver.model.L2World;
|
||||
import com.l2jserver.gameserver.model.PartyMatchRoomList;
|
||||
import com.l2jserver.gameserver.model.PartyMatchWaitingList;
|
||||
import com.l2jserver.gameserver.model.entity.Hero;
|
||||
import com.l2jserver.gameserver.model.entity.TvTManager;
|
||||
import com.l2jserver.gameserver.model.olympiad.Olympiad;
|
||||
import com.l2jserver.gameserver.network.L2GameClient;
|
||||
import com.l2jserver.gameserver.network.L2GamePacketHandler;
|
||||
import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
|
||||
import com.l2jserver.gameserver.pathfinding.PathFinding;
|
||||
import com.l2jserver.gameserver.script.faenor.FaenorScriptEngine;
|
||||
import com.l2jserver.gameserver.scripting.CompiledScriptCache;
|
||||
import com.l2jserver.gameserver.scripting.L2ScriptEngineManager;
|
||||
import com.l2jserver.gameserver.taskmanager.AutoAnnounceTaskManager;
|
||||
import com.l2jserver.gameserver.taskmanager.KnownListUpdateTaskManager;
|
||||
import com.l2jserver.gameserver.taskmanager.TaskManager;
|
||||
import com.l2jserver.status.Status;
|
||||
import com.l2jserver.util.DeadLockDetector;
|
||||
import com.l2jserver.util.IPv4Filter;
|
||||
|
||||
/**
|
||||
* This class ...
|
||||
* @version $Revision: 1.29.2.15.2.19 $ $Date: 2005/04/05 19:41:23 $
|
||||
*/
|
||||
public class GameServer
|
||||
{
|
||||
private static final Logger _log = Logger.getLogger(GameServer.class.getName());
|
||||
|
||||
private final SelectorThread<L2GameClient> _selectorThread;
|
||||
private final L2GamePacketHandler _gamePacketHandler;
|
||||
private final DeadLockDetector _deadDetectThread;
|
||||
private final IdFactory _idFactory;
|
||||
public static GameServer gameServer;
|
||||
private final LoginServerThread _loginThread;
|
||||
private static Status _statusServer;
|
||||
public static final Calendar dateTimeServerStarted = Calendar.getInstance();
|
||||
|
||||
public long getUsedMemoryMB()
|
||||
{
|
||||
return (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576; // ;
|
||||
}
|
||||
|
||||
public SelectorThread<L2GameClient> getSelectorThread()
|
||||
{
|
||||
return _selectorThread;
|
||||
}
|
||||
|
||||
public L2GamePacketHandler getL2GamePacketHandler()
|
||||
{
|
||||
return _gamePacketHandler;
|
||||
}
|
||||
|
||||
public DeadLockDetector getDeadLockDetectorThread()
|
||||
{
|
||||
return _deadDetectThread;
|
||||
}
|
||||
|
||||
public GameServer() throws Exception
|
||||
{
|
||||
long serverLoadStart = System.currentTimeMillis();
|
||||
|
||||
gameServer = this;
|
||||
_log.finest("Used memory:" + getUsedMemoryMB() + "MB");
|
||||
|
||||
_idFactory = IdFactory.getInstance();
|
||||
|
||||
if (!_idFactory.isInitialized())
|
||||
{
|
||||
_log.severe("Could not read object IDs from DB. Please Check Your Data.");
|
||||
throw new Exception("Could not initialize the ID factory");
|
||||
}
|
||||
|
||||
ThreadPoolManager.getInstance();
|
||||
|
||||
new File(Config.DATAPACK_ROOT, "data/crests").mkdirs();
|
||||
new File("log/game").mkdirs();
|
||||
|
||||
// load script engines
|
||||
printSection("Engines");
|
||||
L2ScriptEngineManager.getInstance();
|
||||
|
||||
printSection("World");
|
||||
// start game time control early
|
||||
GameTimeController.getInstance();
|
||||
InstanceManager.getInstance();
|
||||
L2World.getInstance();
|
||||
MapRegionTable.getInstance();
|
||||
Announcements.getInstance();
|
||||
GlobalVariablesManager.getInstance();
|
||||
|
||||
printSection("Skills");
|
||||
EnchantGroupsTable.getInstance();
|
||||
SkillTable.getInstance();
|
||||
SkillTreesData.getInstance();
|
||||
NobleSkillTable.getInstance();
|
||||
GMSkillTable.getInstance();
|
||||
HeroSkillTable.getInstance();
|
||||
SummonSkillsTable.getInstance();
|
||||
|
||||
printSection("Items");
|
||||
ItemTable.getInstance();
|
||||
SummonItemsData.getInstance();
|
||||
EnchantHPBonusData.getInstance();
|
||||
MerchantPriceConfigTable.getInstance().loadInstances();
|
||||
TradeController.getInstance();
|
||||
MultiSell.getInstance();
|
||||
RecipeController.getInstance();
|
||||
ArmorSetsTable.getInstance();
|
||||
FishTable.getInstance();
|
||||
|
||||
printSection("Characters");
|
||||
CharTemplateTable.getInstance();
|
||||
CharNameTable.getInstance();
|
||||
LevelUpData.getInstance();
|
||||
AccessLevels.getInstance();
|
||||
AdminCommandAccessRights.getInstance();
|
||||
GmListTable.getInstance();
|
||||
RaidBossPointsManager.getInstance();
|
||||
PetDataTable.getInstance();
|
||||
|
||||
printSection("Clans");
|
||||
ClanTable.getInstance();
|
||||
ClanHallManager.getInstance();
|
||||
AuctionManager.getInstance();
|
||||
|
||||
printSection("Geodata");
|
||||
GeoData.getInstance();
|
||||
if (Config.GEODATA == 2)
|
||||
{
|
||||
PathFinding.getInstance();
|
||||
}
|
||||
|
||||
printSection("NPCs");
|
||||
HerbDropTable.getInstance();
|
||||
NpcTable.getInstance();
|
||||
NpcWalkerRoutesTable.getInstance();
|
||||
ZoneManager.getInstance();
|
||||
DoorTable.getInstance();
|
||||
StaticObjects.getInstance();
|
||||
ItemAuctionManager.getInstance();
|
||||
CastleManager.getInstance().loadInstances();
|
||||
FortManager.getInstance().loadInstances();
|
||||
NpcBufferTable.getInstance();
|
||||
SpawnTable.getInstance();
|
||||
RaidBossSpawnManager.getInstance();
|
||||
DayNightSpawnManager.getInstance().trim().notifyChangeMode();
|
||||
GrandBossManager.getInstance().initZones();
|
||||
FourSepulchersManager.getInstance().init();
|
||||
DimensionalRiftManager.getInstance();
|
||||
EventDroplist.getInstance();
|
||||
|
||||
printSection("Siege");
|
||||
SiegeManager.getInstance().getSieges();
|
||||
FortSiegeManager.getInstance();
|
||||
TerritoryWarManager.getInstance();
|
||||
CastleManorManager.getInstance();
|
||||
MercTicketManager.getInstance();
|
||||
L2Manor.getInstance();
|
||||
|
||||
printSection("Olympiad");
|
||||
Olympiad.getInstance();
|
||||
Hero.getInstance();
|
||||
|
||||
// Call to load caches
|
||||
printSection("Cache");
|
||||
HtmCache.getInstance();
|
||||
CrestCache.getInstance();
|
||||
TeleportLocationTable.getInstance();
|
||||
UITable.getInstance();
|
||||
PartyMatchWaitingList.getInstance();
|
||||
PartyMatchRoomList.getInstance();
|
||||
PetitionManager.getInstance();
|
||||
HennaTable.getInstance();
|
||||
HennaTreeTable.getInstance();
|
||||
HelperBuffTable.getInstance();
|
||||
AugmentationData.getInstance();
|
||||
CursedWeaponsManager.getInstance();
|
||||
|
||||
printSection("Scripts");
|
||||
QuestManager.getInstance();
|
||||
TransformationManager.getInstance();
|
||||
BoatManager.getInstance();
|
||||
AirShipManager.getInstance();
|
||||
GraciaSeedsManager.getInstance();
|
||||
|
||||
try
|
||||
{
|
||||
_log.info("Loading Server Scripts");
|
||||
File scripts = new File(Config.DATAPACK_ROOT + "/data/scripts.cfg");
|
||||
if (!Config.ALT_DEV_NO_HANDLERS || !Config.ALT_DEV_NO_QUESTS)
|
||||
{
|
||||
L2ScriptEngineManager.getInstance().executeScriptList(scripts);
|
||||
}
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
_log.severe("Failed loading scripts.cfg, no script going to be loaded");
|
||||
}
|
||||
try
|
||||
{
|
||||
CompiledScriptCache compiledScriptCache = L2ScriptEngineManager.getInstance().getCompiledScriptCache();
|
||||
if (compiledScriptCache == null)
|
||||
{
|
||||
_log.info("Compiled Scripts Cache is disabled.");
|
||||
}
|
||||
else
|
||||
{
|
||||
compiledScriptCache.purge();
|
||||
|
||||
if (compiledScriptCache.isModified())
|
||||
{
|
||||
compiledScriptCache.save();
|
||||
_log.info("Compiled Scripts Cache was saved.");
|
||||
}
|
||||
else
|
||||
{
|
||||
_log.info("Compiled Scripts Cache is up-to-date.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "Failed to store Compiled Scripts Cache.", e);
|
||||
}
|
||||
QuestManager.getInstance().report();
|
||||
TransformationManager.getInstance().report();
|
||||
|
||||
if (Config.SAVE_DROPPED_ITEM)
|
||||
{
|
||||
ItemsOnGroundManager.getInstance();
|
||||
}
|
||||
|
||||
if ((Config.AUTODESTROY_ITEM_AFTER > 0) || (Config.HERB_AUTO_DESTROY_TIME > 0))
|
||||
{
|
||||
ItemsAutoDestroy.getInstance();
|
||||
}
|
||||
|
||||
MonsterRace.getInstance();
|
||||
|
||||
SevenSigns.getInstance().spawnSevenSignsNPC();
|
||||
SevenSignsFestival.getInstance();
|
||||
AutoSpawnHandler.getInstance();
|
||||
AutoChatHandler.getInstance();
|
||||
|
||||
FaenorScriptEngine.getInstance();
|
||||
// Init of a cursed weapon manager
|
||||
|
||||
_log.info("AutoChatHandler: Loaded " + AutoChatHandler.getInstance().size() + " handlers in total.");
|
||||
_log.info("AutoSpawnHandler: Loaded " + AutoSpawnHandler.getInstance().size() + " handlers in total.");
|
||||
|
||||
AdminCommandHandler.getInstance();
|
||||
ChatHandler.getInstance();
|
||||
ItemHandler.getInstance();
|
||||
SkillHandler.getInstance();
|
||||
UserCommandHandler.getInstance();
|
||||
VoicedCommandHandler.getInstance();
|
||||
|
||||
if (Config.L2JMOD_ALLOW_WEDDING)
|
||||
{
|
||||
CoupleManager.getInstance();
|
||||
}
|
||||
|
||||
TaskManager.getInstance();
|
||||
|
||||
AntiFeedManager.getInstance().registerEvent(AntiFeedManager.GAME_ID);
|
||||
MerchantPriceConfigTable.getInstance().updateReferences();
|
||||
CastleManager.getInstance().activateInstances();
|
||||
FortManager.getInstance().activateInstances();
|
||||
HellboundManager.getInstance();
|
||||
|
||||
if (Config.ALLOW_MAIL)
|
||||
{
|
||||
MailManager.getInstance();
|
||||
}
|
||||
|
||||
if (Config.ACCEPT_GEOEDITOR_CONN)
|
||||
{
|
||||
GeoEditorListener.getInstance();
|
||||
}
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(Shutdown.getInstance());
|
||||
|
||||
_log.info("IdFactory: Free ObjectID's remaining: " + IdFactory.getInstance().size());
|
||||
|
||||
TvTManager.getInstance();
|
||||
KnownListUpdateTaskManager.getInstance();
|
||||
|
||||
if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
|
||||
{
|
||||
OfflineTradersTable.restoreOfflineTraders();
|
||||
}
|
||||
|
||||
if (Config.DEADLOCK_DETECTOR)
|
||||
{
|
||||
_deadDetectThread = new DeadLockDetector();
|
||||
_deadDetectThread.setDaemon(true);
|
||||
_deadDetectThread.start();
|
||||
}
|
||||
else
|
||||
{
|
||||
_deadDetectThread = null;
|
||||
}
|
||||
System.gc();
|
||||
// maxMemory is the upper limit the jvm can use, totalMemory the size of
|
||||
// the current allocation pool, freeMemory the unused memory in the
|
||||
// allocation pool
|
||||
long freeMem = ((Runtime.getRuntime().maxMemory() - Runtime.getRuntime().totalMemory()) + Runtime.getRuntime().freeMemory()) / 1048576;
|
||||
long totalMem = Runtime.getRuntime().maxMemory() / 1048576;
|
||||
_log.info("GameServer Started, free memory " + freeMem + " Mb of " + totalMem + " Mb");
|
||||
|
||||
_loginThread = LoginServerThread.getInstance();
|
||||
_loginThread.start();
|
||||
|
||||
CommunityServerThread.initialize();
|
||||
|
||||
final SelectorConfig sc = new SelectorConfig();
|
||||
sc.MAX_READ_PER_PASS = Config.MMO_MAX_READ_PER_PASS;
|
||||
sc.MAX_SEND_PER_PASS = Config.MMO_MAX_SEND_PER_PASS;
|
||||
sc.SLEEP_TIME = Config.MMO_SELECTOR_SLEEP_TIME;
|
||||
sc.HELPER_BUFFER_COUNT = Config.MMO_HELPER_BUFFER_COUNT;
|
||||
|
||||
_gamePacketHandler = new L2GamePacketHandler();
|
||||
_selectorThread = new SelectorThread<>(sc, _gamePacketHandler, _gamePacketHandler, _gamePacketHandler, new IPv4Filter());
|
||||
|
||||
InetAddress bindAddress = null;
|
||||
if (!Config.GAMESERVER_HOSTNAME.equals("*"))
|
||||
{
|
||||
try
|
||||
{
|
||||
bindAddress = InetAddress.getByName(Config.GAMESERVER_HOSTNAME);
|
||||
}
|
||||
catch (UnknownHostException e1)
|
||||
{
|
||||
_log.log(Level.SEVERE, "WARNING: The GameServer bind address is invalid, using all avaliable IPs. Reason: " + e1.getMessage(), e1);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
_selectorThread.openServerSocket(bindAddress, Config.PORT_GAME);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "FATAL: Failed to open server socket. Reason: " + e.getMessage(), e);
|
||||
System.exit(1);
|
||||
}
|
||||
_selectorThread.start();
|
||||
_log.info("Maximum Numbers of Connected Players: " + Config.MAXIMUM_ONLINE_USERS);
|
||||
long serverLoadEnd = System.currentTimeMillis();
|
||||
_log.info("Server Loaded in " + ((serverLoadEnd - serverLoadStart) / 1000) + " seconds");
|
||||
|
||||
AutoAnnounceTaskManager.getInstance();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server.serverMode = Server.MODE_GAMESERVER;
|
||||
// Local Constants
|
||||
final String LOG_FOLDER = "log"; // Name of folder for log file
|
||||
final String LOG_NAME = "./log.cfg"; // Name of log file
|
||||
|
||||
/*** Main ***/
|
||||
// Create log folder
|
||||
File logFolder = new File(Config.DATAPACK_ROOT, LOG_FOLDER);
|
||||
logFolder.mkdir();
|
||||
|
||||
// Create input stream for log file -- or store file data into memory
|
||||
InputStream is = new FileInputStream(new File(LOG_NAME));
|
||||
LogManager.getLogManager().readConfiguration(is);
|
||||
is.close();
|
||||
|
||||
// Initialize config
|
||||
Config.load();
|
||||
printSection("Database");
|
||||
L2DatabaseFactory.getInstance();
|
||||
gameServer = new GameServer();
|
||||
|
||||
if (Config.IS_TELNET_ENABLED)
|
||||
{
|
||||
_statusServer = new Status(Server.serverMode);
|
||||
_statusServer.start();
|
||||
}
|
||||
else
|
||||
{
|
||||
_log.info("Telnet server is currently disabled.");
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSection(String s)
|
||||
{
|
||||
s = "=[ " + s + " ]";
|
||||
while (s.length() < 78)
|
||||
{
|
||||
s = "-" + s;
|
||||
}
|
||||
_log.info(s);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,259 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastMap;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.ai.CtrlEvent;
|
||||
import com.l2jserver.gameserver.instancemanager.DayNightSpawnManager;
|
||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||
|
||||
/**
|
||||
* Removed TimerThread watcher [DrHouse]
|
||||
* @version $Date: 2010/02/02 22:43:00 $
|
||||
*/
|
||||
public class GameTimeController
|
||||
{
|
||||
protected static final Logger _log = Logger.getLogger(GameTimeController.class.getName());
|
||||
|
||||
public static final int TICKS_PER_SECOND = 10; // not able to change this without checking through code
|
||||
public static final int MILLIS_IN_TICK = 1000 / TICKS_PER_SECOND;
|
||||
|
||||
protected static int _gameTicks;
|
||||
protected static long _gameStartTime;
|
||||
protected static boolean _isNight = false;
|
||||
protected static boolean _interruptRequest = false;
|
||||
|
||||
private static final FastMap<Integer, L2Character> _movingObjects = new FastMap<Integer, L2Character>().shared();
|
||||
|
||||
protected static TimerThread _timer;
|
||||
|
||||
/**
|
||||
* one ingame day is 240 real minutes
|
||||
*/
|
||||
public static GameTimeController getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
private GameTimeController()
|
||||
{
|
||||
_gameStartTime = System.currentTimeMillis() - 3600000; // offset so that the server starts a day begin
|
||||
_gameTicks = 3600000 / MILLIS_IN_TICK; // offset so that the server starts a day begin
|
||||
|
||||
_timer = new TimerThread();
|
||||
_timer.start();
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new BroadcastSunState(), 0, 600000);
|
||||
|
||||
}
|
||||
|
||||
public boolean isNowNight()
|
||||
{
|
||||
return _isNight;
|
||||
}
|
||||
|
||||
public int getGameTime()
|
||||
{
|
||||
return (_gameTicks / (TICKS_PER_SECOND * 10));
|
||||
}
|
||||
|
||||
public static int getGameTicks()
|
||||
{
|
||||
return _gameTicks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a L2Character to movingObjects of GameTimeController.<BR>
|
||||
* <BR>
|
||||
* <B><U> Concept</U> :</B><BR>
|
||||
* <BR>
|
||||
* All L2Character in movement are identified in <B>movingObjects</B> of GameTimeController.<BR>
|
||||
* <BR>
|
||||
* @param cha The L2Character to add to movingObjects of GameTimeController
|
||||
*/
|
||||
public void registerMovingObject(L2Character cha)
|
||||
{
|
||||
if (cha == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_movingObjects.putIfAbsent(cha.getObjectId(), cha);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move all L2Characters contained in movingObjects of GameTimeController.<BR>
|
||||
* <BR>
|
||||
* <B><U> Concept</U> :</B><BR>
|
||||
* <BR>
|
||||
* All L2Character in movement are identified in <B>movingObjects</B> of GameTimeController.<BR>
|
||||
* <BR>
|
||||
* <B><U> Actions</U> :</B><BR>
|
||||
* <BR>
|
||||
* <li>Update the position of each L2Character</li> <li>If movement is finished, the L2Character is removed from movingObjects</li> <li>Create a task to update the _knownObject and _knowPlayers of each L2Character that finished its movement and of their already known L2Object then notify AI with
|
||||
* EVT_ARRIVED</li><BR>
|
||||
* <BR>
|
||||
*/
|
||||
protected void moveObjects()
|
||||
{
|
||||
// Go throw the table containing L2Character in movement
|
||||
Iterator<Map.Entry<Integer, L2Character>> it = _movingObjects.entrySet().iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
// If movement is finished, the L2Character is removed from
|
||||
// movingObjects and added to the ArrayList ended
|
||||
L2Character ch = it.next().getValue();
|
||||
if (ch.updatePosition(_gameTicks))
|
||||
{
|
||||
it.remove();
|
||||
ThreadPoolManager.getInstance().executeTask(new MovingObjectArrived(ch));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void stopTimer()
|
||||
{
|
||||
_interruptRequest = true;
|
||||
_timer.interrupt();
|
||||
}
|
||||
|
||||
class TimerThread extends Thread
|
||||
{
|
||||
public TimerThread()
|
||||
{
|
||||
super("GameTimeController");
|
||||
setDaemon(true);
|
||||
setPriority(MAX_PRIORITY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
int oldTicks;
|
||||
long runtime;
|
||||
int sleepTime;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
try
|
||||
{
|
||||
oldTicks = _gameTicks; // save old ticks value to avoid moving objects 2x in same tick
|
||||
runtime = System.currentTimeMillis() - _gameStartTime; // from server boot to now
|
||||
|
||||
_gameTicks = (int) (runtime / MILLIS_IN_TICK); // new ticks value (ticks now)
|
||||
|
||||
if (oldTicks != _gameTicks)
|
||||
{
|
||||
moveObjects(); // Runs possibly too often
|
||||
}
|
||||
|
||||
runtime = (System.currentTimeMillis() - _gameStartTime) - runtime;
|
||||
|
||||
// calculate sleep time... time needed to next tick minus time it takes to call moveObjects()
|
||||
sleepTime = (1 + MILLIS_IN_TICK) - (((int) runtime) % MILLIS_IN_TICK);
|
||||
|
||||
// _log.finest("TICK: "+_gameTicks);
|
||||
|
||||
if (sleepTime > 0)
|
||||
{
|
||||
Thread.sleep(sleepTime);
|
||||
}
|
||||
}
|
||||
catch (InterruptedException ie)
|
||||
{
|
||||
if (_interruptRequest)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_log.log(Level.WARNING, "", ie);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the _knownObject and _knowPlayers of each L2Character that finished its movement and of their already known L2Object then notify AI with EVT_ARRIVED.<BR>
|
||||
* <BR>
|
||||
*/
|
||||
private static class MovingObjectArrived implements Runnable
|
||||
{
|
||||
private final L2Character _ended;
|
||||
|
||||
MovingObjectArrived(L2Character ended)
|
||||
{
|
||||
_ended = ended;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_ended.hasAI()) // AI could be just disabled due to region turn off
|
||||
{
|
||||
if (Config.MOVE_BASED_KNOWNLIST)
|
||||
{
|
||||
_ended.getKnownList().findObjects();
|
||||
}
|
||||
_ended.getAI().notifyEvent(CtrlEvent.EVT_ARRIVED);
|
||||
}
|
||||
}
|
||||
catch (NullPointerException e)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param rise
|
||||
*/
|
||||
class BroadcastSunState implements Runnable
|
||||
{
|
||||
int h;
|
||||
boolean tempIsNight;
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
h = ((getGameTime() + 29) / 60) % 24; // Time in hour (+ 29 is to round 60)
|
||||
tempIsNight = (h < 6);
|
||||
|
||||
if (tempIsNight != _isNight)
|
||||
{ // If diff day/night state
|
||||
_isNight = tempIsNight; // Set current day/night varible to value of temp varible
|
||||
DayNightSpawnManager.getInstance().notifyChangeMode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final GameTimeController _instance = new GameTimeController();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.model.L2Object;
|
||||
import com.l2jserver.gameserver.model.L2Spawn;
|
||||
import com.l2jserver.gameserver.model.Location;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.util.Point3D;
|
||||
|
||||
/**
|
||||
* @author -Nemesiss-
|
||||
*/
|
||||
public class GeoData
|
||||
{
|
||||
private static Logger _log = Logger.getLogger(GeoData.class.getName());
|
||||
|
||||
protected GeoData()
|
||||
{
|
||||
}
|
||||
|
||||
private GeoData(final boolean disabled)
|
||||
{
|
||||
if (disabled)
|
||||
{
|
||||
_log.info("Geodata Engine: Disabled.");
|
||||
}
|
||||
}
|
||||
|
||||
public static GeoData getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
// Public Methods
|
||||
/**
|
||||
* @param x
|
||||
* @param y
|
||||
* @return Geo Block Type
|
||||
*/
|
||||
public short getType(int x, int y)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return Nearles Z
|
||||
*/
|
||||
public short getHeight(int x, int y, int z)
|
||||
{
|
||||
return (short) z;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x
|
||||
* @param y
|
||||
* @param zmin
|
||||
* @param zmax
|
||||
* @param spawnid
|
||||
* @return
|
||||
*/
|
||||
public short getSpawnHeight(int x, int y, int zmin, int zmax, L2Spawn spawn)
|
||||
{
|
||||
return (short) zmin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x
|
||||
* @param y
|
||||
* @return
|
||||
*/
|
||||
public String geoPosition(int x, int y)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param cha
|
||||
* @param target
|
||||
* @return True if cha can see target (LOS)
|
||||
*/
|
||||
public boolean canSeeTarget(L2Object cha, L2Object target)
|
||||
{
|
||||
// If geo is off do simple check :]
|
||||
// Don't allow casting on players on different dungeon lvls etc
|
||||
return (Math.abs(target.getZ() - cha.getZ()) < 1000);
|
||||
}
|
||||
|
||||
public boolean canSeeTarget(L2Object cha, Point3D worldPosition)
|
||||
{
|
||||
// If geo is off do simple check :]
|
||||
// Don't allow casting on players on different dungeon lvls etc
|
||||
return Math.abs(worldPosition.getZ() - cha.getZ()) < 1000;
|
||||
}
|
||||
|
||||
public boolean canSeeTarget(int x, int y, int z, int tx, int ty, int tz)
|
||||
{
|
||||
// If geo is off do simple check :]
|
||||
// Don't allow casting on players on different dungeon lvls etc
|
||||
return (Math.abs(z - tz) < 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param cha
|
||||
* @param target
|
||||
* @return True if cha can see target (LOS) and send usful info to PC
|
||||
*/
|
||||
public boolean canSeeTargetDebug(L2PcInstance gm, L2Object target)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return Geo NSWE (0-15)
|
||||
*/
|
||||
public short getNSWE(int x, int y, int z)
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
|
||||
public short getHeightAndNSWE(int x, int y, int z)
|
||||
{
|
||||
return (short) ((z << 1) | 15);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @param tx
|
||||
* @param ty
|
||||
* @param tz
|
||||
* @param instanceId
|
||||
* @return Last Location (x,y,z) where player can walk - just before wall
|
||||
*/
|
||||
public Location moveCheck(int x, int y, int z, int tx, int ty, int tz, int instanceId)
|
||||
{
|
||||
return new Location(tx, ty, tz);
|
||||
}
|
||||
|
||||
public boolean canMoveFromToTarget(int x, int y, int z, int tx, int ty, int tz, int instanceId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param gm
|
||||
* @param comment
|
||||
*/
|
||||
public void addGeoDataBug(L2PcInstance gm, String comment)
|
||||
{
|
||||
// Do Nothing
|
||||
}
|
||||
|
||||
public static void unloadGeodata(byte rx, byte ry)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static boolean loadGeodataFile(byte rx, byte ry)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean hasGeo(int x, int y)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final GeoData _instance = Config.GEODATA > 0 ? GeoEngine.getInstance() : new GeoData(true);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastList;
|
||||
import javolution.util.FastMap;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
|
||||
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
|
||||
|
||||
/**
|
||||
* This class stores references to all online game masters. (access level > 100)
|
||||
* @version $Revision: 1.2.2.1.2.7 $ $Date: 2005/04/05 19:41:24 $
|
||||
*/
|
||||
public class GmListTable
|
||||
{
|
||||
private static Logger _log = Logger.getLogger(GmListTable.class.getName());
|
||||
|
||||
/** Set(L2PcInstance>) containing all the GM in game */
|
||||
private final FastMap<L2PcInstance, Boolean> _gmList;
|
||||
|
||||
public static GmListTable getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
public FastList<L2PcInstance> getAllGms(boolean includeHidden)
|
||||
{
|
||||
FastList<L2PcInstance> tmpGmList = new FastList<>();
|
||||
|
||||
for (FastMap.Entry<L2PcInstance, Boolean> n = _gmList.head(), end = _gmList.tail(); (n = n.getNext()) != end;)
|
||||
{
|
||||
if (includeHidden || !n.getValue())
|
||||
{
|
||||
tmpGmList.add(n.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
return tmpGmList;
|
||||
}
|
||||
|
||||
public FastList<String> getAllGmNames(boolean includeHidden)
|
||||
{
|
||||
FastList<String> tmpGmList = new FastList<>();
|
||||
|
||||
for (FastMap.Entry<L2PcInstance, Boolean> n = _gmList.head(), end = _gmList.tail(); (n = n.getNext()) != end;)
|
||||
{
|
||||
if (!n.getValue())
|
||||
{
|
||||
tmpGmList.add(n.getKey().getName());
|
||||
}
|
||||
else if (includeHidden)
|
||||
{
|
||||
tmpGmList.add(n.getKey().getName() + " (invis)");
|
||||
}
|
||||
}
|
||||
|
||||
return tmpGmList;
|
||||
}
|
||||
|
||||
private GmListTable()
|
||||
{
|
||||
_gmList = new FastMap<L2PcInstance, Boolean>().shared();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a L2PcInstance player to the Set _gmList
|
||||
*/
|
||||
public void addGm(L2PcInstance player, boolean hidden)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.fine("added gm: " + player.getName());
|
||||
}
|
||||
_gmList.put(player, hidden);
|
||||
}
|
||||
|
||||
public void deleteGm(L2PcInstance player)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.fine("deleted gm: " + player.getName());
|
||||
}
|
||||
|
||||
_gmList.remove(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* GM will be displayed on clients gmlist
|
||||
* @param player
|
||||
*/
|
||||
public void showGm(L2PcInstance player)
|
||||
{
|
||||
FastMap.Entry<L2PcInstance, Boolean> gm = _gmList.getEntry(player);
|
||||
if (gm != null)
|
||||
{
|
||||
gm.setValue(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* GM will no longer be displayed on clients gmlist
|
||||
* @param player
|
||||
*/
|
||||
public void hideGm(L2PcInstance player)
|
||||
{
|
||||
FastMap.Entry<L2PcInstance, Boolean> gm = _gmList.getEntry(player);
|
||||
if (gm != null)
|
||||
{
|
||||
gm.setValue(true);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isGmOnline(boolean includeHidden)
|
||||
{
|
||||
for (FastMap.Entry<L2PcInstance, Boolean> n = _gmList.head(), end = _gmList.tail(); (n = n.getNext()) != end;)
|
||||
{
|
||||
if (includeHidden || !n.getValue())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void sendListToPlayer(L2PcInstance player)
|
||||
{
|
||||
if (isGmOnline(player.isGM()))
|
||||
{
|
||||
player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.GM_LIST));
|
||||
|
||||
for (String name : getAllGmNames(player.isGM()))
|
||||
{
|
||||
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.GM_C1);
|
||||
sm.addString(name);
|
||||
player.sendPacket(sm);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_GM_PROVIDING_SERVICE_NOW));
|
||||
}
|
||||
}
|
||||
|
||||
public static void broadcastToGMs(L2GameServerPacket packet)
|
||||
{
|
||||
for (L2PcInstance gm : getInstance().getAllGms(true))
|
||||
{
|
||||
gm.sendPacket(packet);
|
||||
}
|
||||
}
|
||||
|
||||
public static void broadcastMessageToGMs(String message)
|
||||
{
|
||||
for (L2PcInstance gm : getInstance().getAllGms(true))
|
||||
{
|
||||
gm.sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final GmListTable _instance = new GmListTable();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
/**
|
||||
* Interface for managers of list of instances.
|
||||
* @author fordfrog
|
||||
*/
|
||||
public interface InstanceListManager
|
||||
{
|
||||
|
||||
/**
|
||||
* Loads instances with their data from persistant format. This method has no side effect as calling methods of another instance manager.
|
||||
*/
|
||||
void loadInstances();
|
||||
|
||||
/**
|
||||
* For each loaded instance, updates references to related instances.
|
||||
*/
|
||||
void updateReferences();
|
||||
|
||||
/**
|
||||
* Activates instances so their setup is performed.
|
||||
*/
|
||||
void activateInstances();
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* $Header: Item.java, 2/08/2005 00:49:12 luisantonioa Exp $
|
||||
*
|
||||
* $Author: luisantonioa $ $Date: 2/08/2005 00:49:12 $ $Revision: 1 $ $Log:
|
||||
* Item.java,v $ Revision 1 2/08/2005 00:49:12 luisantonioa Added copyright
|
||||
* notice
|
||||
*
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import com.l2jserver.gameserver.templates.StatsSet;
|
||||
import com.l2jserver.gameserver.templates.item.L2Item;
|
||||
|
||||
/**
|
||||
* This class ...
|
||||
* @version $Revision: 1.2 $ $Date: 2004/06/27 08:12:59 $
|
||||
*/
|
||||
public class Item
|
||||
{
|
||||
public int id;
|
||||
|
||||
public String type;
|
||||
|
||||
public String name;
|
||||
|
||||
public StatsSet set;
|
||||
|
||||
public int currentLevel;
|
||||
|
||||
public L2Item item;
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastList;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jserver.gameserver.model.L2ItemInstance;
|
||||
import com.l2jserver.gameserver.model.L2World;
|
||||
import com.l2jserver.gameserver.templates.item.L2EtcItemType;
|
||||
|
||||
public class ItemsAutoDestroy
|
||||
{
|
||||
protected static final Logger _log = Logger.getLogger(ItemsAutoDestroy.class.getName());
|
||||
protected List<L2ItemInstance> _items = null;
|
||||
protected static long _sleep;
|
||||
|
||||
private ItemsAutoDestroy()
|
||||
{
|
||||
_log.info("Initializing ItemsAutoDestroy.");
|
||||
_items = new FastList<>();
|
||||
_sleep = Config.AUTODESTROY_ITEM_AFTER * 1000;
|
||||
if (_sleep == 0)
|
||||
{
|
||||
_sleep = 3600000;
|
||||
}
|
||||
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckItemsForDestroy(), 5000, 5000);
|
||||
}
|
||||
|
||||
public static ItemsAutoDestroy getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
public synchronized void addItem(L2ItemInstance item)
|
||||
{
|
||||
item.setDropTime(System.currentTimeMillis());
|
||||
_items.add(item);
|
||||
}
|
||||
|
||||
public synchronized void removeItems()
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("[ItemsAutoDestroy] : " + _items.size() + " items to check.");
|
||||
}
|
||||
|
||||
if (_items.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
long curtime = System.currentTimeMillis();
|
||||
for (L2ItemInstance item : _items)
|
||||
{
|
||||
if ((item == null) || (item.getDropTime() == 0) || (item.getLocation() != L2ItemInstance.ItemLocation.VOID))
|
||||
{
|
||||
_items.remove(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item.getItemType() == L2EtcItemType.HERB)
|
||||
{
|
||||
if ((curtime - item.getDropTime()) > Config.HERB_AUTO_DESTROY_TIME)
|
||||
{
|
||||
L2World.getInstance().removeVisibleObject(item, item.getWorldRegion());
|
||||
L2World.getInstance().removeObject(item);
|
||||
_items.remove(item);
|
||||
if (Config.SAVE_DROPPED_ITEM)
|
||||
{
|
||||
ItemsOnGroundManager.getInstance().removeObject(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((curtime - item.getDropTime()) > _sleep)
|
||||
{
|
||||
L2World.getInstance().removeVisibleObject(item, item.getWorldRegion());
|
||||
L2World.getInstance().removeObject(item);
|
||||
_items.remove(item);
|
||||
if (Config.SAVE_DROPPED_ITEM)
|
||||
{
|
||||
ItemsOnGroundManager.getInstance().removeObject(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("[ItemsAutoDestroy] : " + _items.size() + " items remaining.");
|
||||
}
|
||||
}
|
||||
|
||||
protected class CheckItemsForDestroy extends Thread
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
removeItems();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final ItemsAutoDestroy _instance = new ItemsAutoDestroy();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,702 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.math.BigInteger;
|
||||
import java.net.Socket;
|
||||
import java.net.UnknownHostException;
|
||||
import java.security.GeneralSecurityException;
|
||||
import java.security.KeyFactory;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
import java.security.spec.RSAKeyGenParameterSpec;
|
||||
import java.security.spec.RSAPublicKeySpec;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastList;
|
||||
import javolution.util.FastMap;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.model.L2World;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.network.L2GameClient;
|
||||
import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.AuthRequest;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.BlowFishKey;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.ChangeAccessLevel;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.PlayerAuthRequest;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.PlayerInGame;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.PlayerLogout;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.PlayerTracert;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.ServerStatus;
|
||||
import com.l2jserver.gameserver.network.loginserverpackets.AuthResponse;
|
||||
import com.l2jserver.gameserver.network.loginserverpackets.InitLS;
|
||||
import com.l2jserver.gameserver.network.loginserverpackets.KickPlayer;
|
||||
import com.l2jserver.gameserver.network.loginserverpackets.LoginServerFail;
|
||||
import com.l2jserver.gameserver.network.loginserverpackets.PlayerAuthResponse;
|
||||
import com.l2jserver.gameserver.network.serverpackets.CharSelectionInfo;
|
||||
import com.l2jserver.gameserver.network.serverpackets.LoginFail;
|
||||
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
|
||||
import com.l2jserver.util.Util;
|
||||
import com.l2jserver.util.crypt.NewCrypt;
|
||||
import com.l2jserver.util.network.BaseSendablePacket;
|
||||
|
||||
public class LoginServerThread extends Thread
|
||||
{
|
||||
protected static final Logger _log = Logger.getLogger(LoginServerThread.class.getName());
|
||||
protected static final Logger _logAccounting = Logger.getLogger("accounting");
|
||||
|
||||
/** {@see com.l2jserver.loginserver.LoginServer#PROTOCOL_REV } */
|
||||
private static final int REVISION = 0x0104;
|
||||
private RSAPublicKey _publicKey;
|
||||
private final String _hostname;
|
||||
private final int _port;
|
||||
private final int _gamePort;
|
||||
private Socket _loginSocket;
|
||||
private InputStream _in;
|
||||
private OutputStream _out;
|
||||
|
||||
/**
|
||||
* The BlowFish engine used to encrypt packets<br>
|
||||
* It is first initialized with a unified key:<br>
|
||||
* "_;v.]05-31!|+-%xT!^[$\00"<br>
|
||||
* <br>
|
||||
* and then after handshake, with a new key sent by<br>
|
||||
* loginserver during the handshake. This new key is stored<br>
|
||||
* in {@link #_blowfishKey}
|
||||
*/
|
||||
private NewCrypt _blowfish;
|
||||
private byte[] _blowfishKey;
|
||||
private byte[] _hexID;
|
||||
private final boolean _acceptAlternate;
|
||||
private int _requestID;
|
||||
private int _serverID;
|
||||
private final boolean _reserveHost;
|
||||
private int _maxPlayer;
|
||||
private final List<WaitingClient> _waitingClients;
|
||||
private final Map<String, L2GameClient> _accountsInGameServer;
|
||||
private int _status;
|
||||
private String _serverName;
|
||||
private final String[] _subnets;
|
||||
private final String[] _hosts;
|
||||
|
||||
private LoginServerThread()
|
||||
{
|
||||
super("LoginServerThread");
|
||||
_port = Config.GAME_SERVER_LOGIN_PORT;
|
||||
_gamePort = Config.PORT_GAME;
|
||||
_hostname = Config.GAME_SERVER_LOGIN_HOST;
|
||||
_hexID = Config.HEX_ID;
|
||||
if (_hexID == null)
|
||||
{
|
||||
_requestID = Config.REQUEST_ID;
|
||||
_hexID = Util.generateHex(16);
|
||||
}
|
||||
else
|
||||
{
|
||||
_requestID = Config.SERVER_ID;
|
||||
}
|
||||
_acceptAlternate = Config.ACCEPT_ALTERNATE_ID;
|
||||
_reserveHost = Config.RESERVE_HOST_ON_LOGIN;
|
||||
_subnets = Config.GAME_SERVER_SUBNETS;
|
||||
_hosts = Config.GAME_SERVER_HOSTS;
|
||||
_waitingClients = new FastList<>();
|
||||
_accountsInGameServer = new FastMap<String, L2GameClient>().shared();
|
||||
_maxPlayer = Config.MAXIMUM_ONLINE_USERS;
|
||||
}
|
||||
|
||||
public static LoginServerThread getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
while (!isInterrupted())
|
||||
{
|
||||
int lengthHi = 0;
|
||||
int lengthLo = 0;
|
||||
int length = 0;
|
||||
boolean checksumOk = false;
|
||||
try
|
||||
{
|
||||
// Connection
|
||||
_log.info("Connecting to login on " + _hostname + ":" + _port);
|
||||
_loginSocket = new Socket(_hostname, _port);
|
||||
_in = _loginSocket.getInputStream();
|
||||
_out = new BufferedOutputStream(_loginSocket.getOutputStream());
|
||||
|
||||
// init Blowfish
|
||||
_blowfishKey = Util.generateHex(40);
|
||||
_blowfish = new NewCrypt("_;v.]05-31!|+-%xT!^[$\00");
|
||||
while (!isInterrupted())
|
||||
{
|
||||
lengthLo = _in.read();
|
||||
lengthHi = _in.read();
|
||||
length = (lengthHi * 256) + lengthLo;
|
||||
|
||||
if (lengthHi < 0)
|
||||
{
|
||||
_log.finer("LoginServerThread: Login terminated the connection.");
|
||||
break;
|
||||
}
|
||||
|
||||
byte[] incoming = new byte[length - 2];
|
||||
|
||||
int receivedBytes = 0;
|
||||
int newBytes = 0;
|
||||
int left = length - 2;
|
||||
while ((newBytes != -1) && (receivedBytes < (length - 2)))
|
||||
{
|
||||
newBytes = _in.read(incoming, receivedBytes, left);
|
||||
receivedBytes = receivedBytes + newBytes;
|
||||
left -= newBytes;
|
||||
}
|
||||
|
||||
if (receivedBytes != (length - 2))
|
||||
{
|
||||
_log.warning("Incomplete Packet is sent to the server, closing connection.(LS)");
|
||||
break;
|
||||
}
|
||||
|
||||
// decrypt if we have a key
|
||||
byte[] decrypt = _blowfish.decrypt(incoming);
|
||||
checksumOk = NewCrypt.verifyChecksum(decrypt);
|
||||
|
||||
if (!checksumOk)
|
||||
{
|
||||
_log.warning("Incorrect packet checksum, ignoring packet (LS)");
|
||||
break;
|
||||
}
|
||||
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.warning("[C]\n" + Util.printData(decrypt));
|
||||
}
|
||||
|
||||
int packetType = decrypt[0] & 0xff;
|
||||
switch (packetType)
|
||||
{
|
||||
case 0x00:
|
||||
InitLS init = new InitLS(decrypt);
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("Init received");
|
||||
}
|
||||
if (init.getRevision() != REVISION)
|
||||
{
|
||||
// TODO: revision mismatch
|
||||
_log.warning("/!\\ Revision mismatch between LS and GS /!\\");
|
||||
break;
|
||||
}
|
||||
try
|
||||
{
|
||||
KeyFactory kfac = KeyFactory.getInstance("RSA");
|
||||
BigInteger modulus = new BigInteger(init.getRSAKey());
|
||||
RSAPublicKeySpec kspec1 = new RSAPublicKeySpec(modulus, RSAKeyGenParameterSpec.F4);
|
||||
_publicKey = (RSAPublicKey) kfac.generatePublic(kspec1);
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("RSA key set up");
|
||||
}
|
||||
}
|
||||
|
||||
catch (GeneralSecurityException e)
|
||||
{
|
||||
_log.warning("Troubles while init the public key send by login");
|
||||
break;
|
||||
}
|
||||
// send the blowfish key through the rsa encryption
|
||||
BlowFishKey bfk = new BlowFishKey(_blowfishKey, _publicKey);
|
||||
sendPacket(bfk);
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("Sent new blowfish key");
|
||||
}
|
||||
// now, only accept paket with the new encryption
|
||||
_blowfish = new NewCrypt(_blowfishKey);
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("Changed blowfish key");
|
||||
}
|
||||
AuthRequest ar = new AuthRequest(_requestID, _acceptAlternate, _hexID, _gamePort, _reserveHost, _maxPlayer, _subnets, _hosts);
|
||||
sendPacket(ar);
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("Sent AuthRequest to login");
|
||||
}
|
||||
break;
|
||||
case 0x01:
|
||||
LoginServerFail lsf = new LoginServerFail(decrypt);
|
||||
_log.info("Damn! Registeration Failed: " + lsf.getReasonString());
|
||||
// login will close the connection here
|
||||
break;
|
||||
case 0x02:
|
||||
AuthResponse aresp = new AuthResponse(decrypt);
|
||||
_serverID = aresp.getServerId();
|
||||
_serverName = aresp.getServerName();
|
||||
Config.saveHexid(_serverID, hexToString(_hexID));
|
||||
_log.info("Registered on login as Server " + _serverID + " : " + _serverName);
|
||||
ServerStatus st = new ServerStatus();
|
||||
if (Config.SERVER_LIST_BRACKET)
|
||||
{
|
||||
st.addAttribute(ServerStatus.SERVER_LIST_SQUARE_BRACKET, ServerStatus.ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
st.addAttribute(ServerStatus.SERVER_LIST_SQUARE_BRACKET, ServerStatus.OFF);
|
||||
}
|
||||
st.addAttribute(ServerStatus.SERVER_TYPE, Config.SERVER_LIST_TYPE);
|
||||
if (Config.SERVER_GMONLY)
|
||||
{
|
||||
st.addAttribute(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_GM_ONLY);
|
||||
}
|
||||
else
|
||||
{
|
||||
st.addAttribute(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
if (Config.SERVER_LIST_AGE == 15)
|
||||
{
|
||||
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_15);
|
||||
}
|
||||
else if (Config.SERVER_LIST_AGE == 18)
|
||||
{
|
||||
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_18);
|
||||
}
|
||||
else
|
||||
{
|
||||
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
|
||||
}
|
||||
sendPacket(st);
|
||||
if (L2World.getInstance().getAllPlayersCount() > 0)
|
||||
{
|
||||
FastList<String> playerList = new FastList<>();
|
||||
Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
|
||||
// synchronized (L2World.getInstance().getAllPlayers())
|
||||
{
|
||||
for (L2PcInstance player : pls)
|
||||
{
|
||||
playerList.add(player.getAccountName());
|
||||
}
|
||||
}
|
||||
PlayerInGame pig = new PlayerInGame(playerList);
|
||||
sendPacket(pig);
|
||||
}
|
||||
break;
|
||||
case 0x03:
|
||||
PlayerAuthResponse par = new PlayerAuthResponse(decrypt);
|
||||
String account = par.getAccount();
|
||||
WaitingClient wcToRemove = null;
|
||||
synchronized (_waitingClients)
|
||||
{
|
||||
for (WaitingClient wc : _waitingClients)
|
||||
{
|
||||
if (wc.account.equals(account))
|
||||
{
|
||||
wcToRemove = wc;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (wcToRemove != null)
|
||||
{
|
||||
if (par.isAuthed())
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info("Login accepted player " + wcToRemove.account + " waited(" + (GameTimeController.getGameTicks() - wcToRemove.timestamp) + "ms)");
|
||||
}
|
||||
PlayerInGame pig = new PlayerInGame(par.getAccount());
|
||||
sendPacket(pig);
|
||||
wcToRemove.gameClient.setState(GameClientState.AUTHED);
|
||||
wcToRemove.gameClient.setSessionId(wcToRemove.session);
|
||||
CharSelectionInfo cl = new CharSelectionInfo(wcToRemove.account, wcToRemove.gameClient.getSessionId().playOkID1);
|
||||
wcToRemove.gameClient.getConnection().sendPacket(cl);
|
||||
wcToRemove.gameClient.setCharSelection(cl.getCharInfo());
|
||||
}
|
||||
else
|
||||
{
|
||||
_log.warning("Session key is not correct. Closing connection for account " + wcToRemove.account + ".");
|
||||
// wcToRemove.gameClient.getConnection().sendPacket(new LoginFail(LoginFail.SYSTEM_ERROR_LOGIN_LATER));
|
||||
wcToRemove.gameClient.close(new LoginFail(LoginFail.SYSTEM_ERROR_LOGIN_LATER));
|
||||
_accountsInGameServer.remove(wcToRemove.account);
|
||||
}
|
||||
_waitingClients.remove(wcToRemove);
|
||||
}
|
||||
break;
|
||||
case 0x04:
|
||||
KickPlayer kp = new KickPlayer(decrypt);
|
||||
doKickPlayer(kp.getAccount());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (UnknownHostException e)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
_log.log(Level.WARNING, "Disconnected from Login, Trying to reconnect: " + e.getMessage(), e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
_loginSocket.close();
|
||||
if (isInterrupted())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Thread.sleep(5000); // 5 seconds tempo.
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
return; // never swallow an interrupt!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addWaitingClientAndSendRequest(String acc, L2GameClient client, SessionKey key)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.info(String.valueOf(key));
|
||||
}
|
||||
WaitingClient wc = new WaitingClient(acc, client, key);
|
||||
synchronized (_waitingClients)
|
||||
{
|
||||
_waitingClients.add(wc);
|
||||
}
|
||||
PlayerAuthRequest par = new PlayerAuthRequest(acc, key);
|
||||
try
|
||||
{
|
||||
sendPacket(par);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
_log.warning("Error while sending player auth request");
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void removeWaitingClient(L2GameClient client)
|
||||
{
|
||||
WaitingClient toRemove = null;
|
||||
synchronized (_waitingClients)
|
||||
{
|
||||
for (WaitingClient c : _waitingClients)
|
||||
{
|
||||
if (c.gameClient == client)
|
||||
{
|
||||
toRemove = c;
|
||||
}
|
||||
}
|
||||
if (toRemove != null)
|
||||
{
|
||||
_waitingClients.remove(toRemove);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void sendLogout(String account)
|
||||
{
|
||||
if (account == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerLogout pl = new PlayerLogout(account);
|
||||
try
|
||||
{
|
||||
sendPacket(pl);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
_log.warning("Error while sending logout packet to login");
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_accountsInGameServer.remove(account);
|
||||
}
|
||||
}
|
||||
|
||||
public void addGameServerLogin(String account, L2GameClient client)
|
||||
{
|
||||
_accountsInGameServer.put(account, client);
|
||||
}
|
||||
|
||||
public void sendAccessLevel(String account, int level)
|
||||
{
|
||||
ChangeAccessLevel cal = new ChangeAccessLevel(account, level);
|
||||
try
|
||||
{
|
||||
sendPacket(cal);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void sendClientTracert(String account, String[] adress)
|
||||
{
|
||||
PlayerTracert ptc = new PlayerTracert(account, adress[0], adress[1], adress[2], adress[3], adress[4]);
|
||||
try
|
||||
{
|
||||
sendPacket(ptc);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String hexToString(byte[] hex)
|
||||
{
|
||||
return new BigInteger(hex).toString(16);
|
||||
}
|
||||
|
||||
public void doKickPlayer(String account)
|
||||
{
|
||||
L2GameClient client = _accountsInGameServer.get(account);
|
||||
if (client != null)
|
||||
{
|
||||
LogRecord record = new LogRecord(Level.WARNING, "Kicked by login");
|
||||
record.setParameters(new Object[]
|
||||
{
|
||||
client
|
||||
});
|
||||
_logAccounting.log(record);
|
||||
client.setAditionalClosePacket(SystemMessage.getSystemMessage(SystemMessageId.ANOTHER_LOGIN_WITH_ACCOUNT));
|
||||
client.closeNow();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sl
|
||||
* @throws IOException
|
||||
*/
|
||||
private void sendPacket(BaseSendablePacket sl) throws IOException
|
||||
{
|
||||
byte[] data = sl.getContent();
|
||||
NewCrypt.appendChecksum(data);
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.finest("[S]\n" + Util.printData(data));
|
||||
}
|
||||
data = _blowfish.crypt(data);
|
||||
|
||||
int len = data.length + 2;
|
||||
synchronized (_out) // avoids tow threads writing in the mean time
|
||||
{
|
||||
_out.write(len & 0xff);
|
||||
_out.write((len >> 8) & 0xff);
|
||||
_out.write(data);
|
||||
_out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param maxPlayer The maxPlayer to set.
|
||||
*/
|
||||
public void setMaxPlayer(int maxPlayer)
|
||||
{
|
||||
sendServerStatus(ServerStatus.MAX_PLAYERS, maxPlayer);
|
||||
_maxPlayer = maxPlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the maxPlayer.
|
||||
*/
|
||||
public int getMaxPlayer()
|
||||
{
|
||||
return _maxPlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param server_gm_only
|
||||
*/
|
||||
public void sendServerStatus(int id, int value)
|
||||
{
|
||||
ServerStatus ss = new ServerStatus();
|
||||
ss.addAttribute(id, value);
|
||||
try
|
||||
{
|
||||
sendPacket(ss);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send Server Type Config to LS
|
||||
*/
|
||||
public void sendServerType()
|
||||
{
|
||||
ServerStatus ss = new ServerStatus();
|
||||
ss.addAttribute(ServerStatus.SERVER_TYPE, Config.SERVER_LIST_TYPE);
|
||||
try
|
||||
{
|
||||
sendPacket(ss);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public String getStatusString()
|
||||
{
|
||||
return ServerStatus.STATUS_STRING[_status];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public boolean isBracketShown()
|
||||
{
|
||||
return Config.SERVER_LIST_BRACKET;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the serverName.
|
||||
*/
|
||||
public String getServerName()
|
||||
{
|
||||
return _serverName;
|
||||
}
|
||||
|
||||
public void setServerStatus(int status)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case ServerStatus.STATUS_AUTO:
|
||||
sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_AUTO);
|
||||
_status = status;
|
||||
break;
|
||||
case ServerStatus.STATUS_DOWN:
|
||||
sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_DOWN);
|
||||
_status = status;
|
||||
break;
|
||||
case ServerStatus.STATUS_FULL:
|
||||
sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_FULL);
|
||||
_status = status;
|
||||
break;
|
||||
case ServerStatus.STATUS_GM_ONLY:
|
||||
sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_GM_ONLY);
|
||||
_status = status;
|
||||
break;
|
||||
case ServerStatus.STATUS_GOOD:
|
||||
sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_GOOD);
|
||||
_status = status;
|
||||
break;
|
||||
case ServerStatus.STATUS_NORMAL:
|
||||
sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_NORMAL);
|
||||
_status = status;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Status does not exists:" + status);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SessionKey
|
||||
{
|
||||
public int playOkID1;
|
||||
public int playOkID2;
|
||||
public int loginOkID1;
|
||||
public int loginOkID2;
|
||||
|
||||
public SessionKey(int loginOK1, int loginOK2, int playOK1, int playOK2)
|
||||
{
|
||||
playOkID1 = playOK1;
|
||||
playOkID2 = playOK2;
|
||||
loginOkID1 = loginOK1;
|
||||
loginOkID2 = loginOK2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "PlayOk: " + playOkID1 + " " + playOkID2 + " LoginOk:" + loginOkID1 + " " + loginOkID2;
|
||||
}
|
||||
}
|
||||
|
||||
private static class WaitingClient
|
||||
{
|
||||
public int timestamp;
|
||||
public String account;
|
||||
public L2GameClient gameClient;
|
||||
public SessionKey session;
|
||||
|
||||
public WaitingClient(String acc, L2GameClient client, SessionKey key)
|
||||
{
|
||||
account = acc;
|
||||
timestamp = GameTimeController.getGameTicks();
|
||||
gameClient = client;
|
||||
session = key;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final LoginServerThread _instance = new LoginServerThread();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.l2jserver.gameserver.datatables.NpcTable;
|
||||
import com.l2jserver.gameserver.idfactory.IdFactory;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
|
||||
import com.l2jserver.util.Rnd;
|
||||
|
||||
public class MonsterRace
|
||||
{
|
||||
protected static final Logger _log = Logger.getLogger(MonsterRace.class.getName());
|
||||
|
||||
private final L2Npc[] _monsters;
|
||||
private Constructor<?> _constructor;
|
||||
private int[][] _speeds;
|
||||
private final int[] _first, _second;
|
||||
|
||||
private MonsterRace()
|
||||
{
|
||||
_monsters = new L2Npc[8];
|
||||
_speeds = new int[8][20];
|
||||
_first = new int[2];
|
||||
_second = new int[2];
|
||||
}
|
||||
|
||||
public static MonsterRace getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
public void newRace()
|
||||
{
|
||||
int random = 0;
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
int id = 31003;
|
||||
random = Rnd.get(24);
|
||||
while (true)
|
||||
{
|
||||
for (int j = i - 1; j >= 0; j--)
|
||||
{
|
||||
if (_monsters[j].getTemplate().npcId == (id + random))
|
||||
{
|
||||
random = Rnd.get(24);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
try
|
||||
{
|
||||
L2NpcTemplate template = NpcTable.getInstance().getTemplate(id + random);
|
||||
_constructor = Class.forName("com.l2jserver.gameserver.model.actor.instance." + template.type + "Instance").getConstructors()[0];
|
||||
int objectId = IdFactory.getInstance().getNextId();
|
||||
_monsters[i] = (L2Npc) _constructor.newInstance(objectId, template);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
// _log.info("Monster "+i+" is id: "+(id+random));
|
||||
}
|
||||
newSpeeds();
|
||||
}
|
||||
|
||||
public void newSpeeds()
|
||||
{
|
||||
_speeds = new int[8][20];
|
||||
int total = 0;
|
||||
_first[1] = 0;
|
||||
_second[1] = 0;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
total = 0;
|
||||
for (int j = 0; j < 20; j++)
|
||||
{
|
||||
if (j == 19)
|
||||
{
|
||||
_speeds[i][j] = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
_speeds[i][j] = Rnd.get(60) + 65;
|
||||
}
|
||||
total += _speeds[i][j];
|
||||
}
|
||||
if (total >= _first[1])
|
||||
{
|
||||
_second[0] = _first[0];
|
||||
_second[1] = _first[1];
|
||||
_first[0] = 8 - i;
|
||||
_first[1] = total;
|
||||
}
|
||||
else if (total >= _second[1])
|
||||
{
|
||||
_second[0] = 8 - i;
|
||||
_second[1] = total;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the monsters.
|
||||
*/
|
||||
public L2Npc[] getMonsters()
|
||||
{
|
||||
return _monsters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the speeds.
|
||||
*/
|
||||
public int[][] getSpeeds()
|
||||
{
|
||||
return _speeds;
|
||||
}
|
||||
|
||||
public int getFirstPlace()
|
||||
{
|
||||
return _first[0];
|
||||
}
|
||||
|
||||
public int getSecondPlace()
|
||||
{
|
||||
return _second[0];
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final MonsterRace _instance = new MonsterRace();
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,594 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.L2DatabaseFactory;
|
||||
import com.l2jserver.gameserver.datatables.ClanTable;
|
||||
import com.l2jserver.gameserver.datatables.OfflineTradersTable;
|
||||
import com.l2jserver.gameserver.instancemanager.CastleManorManager;
|
||||
import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jserver.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jserver.gameserver.instancemanager.GrandBossManager;
|
||||
import com.l2jserver.gameserver.instancemanager.ItemAuctionManager;
|
||||
import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jserver.gameserver.instancemanager.QuestManager;
|
||||
import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
|
||||
import com.l2jserver.gameserver.model.L2World;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.entity.Hero;
|
||||
import com.l2jserver.gameserver.model.olympiad.Olympiad;
|
||||
import com.l2jserver.gameserver.network.L2GameClient;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
|
||||
import com.l2jserver.gameserver.network.gameserverpackets.ServerStatus;
|
||||
import com.l2jserver.gameserver.network.serverpackets.ServerClose;
|
||||
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
|
||||
import com.l2jserver.gameserver.util.Broadcast;
|
||||
|
||||
/**
|
||||
* This class provides the functions for shutting down and restarting the server It closes all open clientconnections and saves all data.
|
||||
* @version $Revision: 1.2.4.5 $ $Date: 2005/03/27 15:29:09 $
|
||||
*/
|
||||
public class Shutdown extends Thread
|
||||
{
|
||||
private static Logger _log = Logger.getLogger(Shutdown.class.getName());
|
||||
private static Shutdown _counterInstance = null;
|
||||
|
||||
private int _secondsShut;
|
||||
private int _shutdownMode;
|
||||
public static final int SIGTERM = 0;
|
||||
public static final int GM_SHUTDOWN = 1;
|
||||
public static final int GM_RESTART = 2;
|
||||
public static final int ABORT = 3;
|
||||
private static final String[] MODE_TEXT =
|
||||
{
|
||||
"SIGTERM",
|
||||
"shutting down",
|
||||
"restarting",
|
||||
"aborting"
|
||||
};
|
||||
|
||||
/**
|
||||
* This function starts a shutdown countdown from Telnet (Copied from Function startShutdown())
|
||||
* @param ip IP Which Issued shutdown command
|
||||
* @param seconds seconds untill shutdown
|
||||
* @param restart true if the server will restart after shutdown
|
||||
*/
|
||||
private void SendServerQuit(int seconds)
|
||||
{
|
||||
SystemMessage sysm = SystemMessage.getSystemMessage(SystemMessageId.THE_SERVER_WILL_BE_COMING_DOWN_IN_S1_SECONDS);
|
||||
sysm.addNumber(seconds);
|
||||
Broadcast.toAllOnlinePlayers(sysm);
|
||||
}
|
||||
|
||||
public void startTelnetShutdown(String IP, int seconds, boolean restart)
|
||||
{
|
||||
_log.warning("IP: " + IP + " issued shutdown command. " + MODE_TEXT[_shutdownMode] + " in " + seconds + " seconds!");
|
||||
// _an.announceToAll("Server is " + _modeText[shutdownMode] + " in "+seconds+ " seconds!");
|
||||
|
||||
if (restart)
|
||||
{
|
||||
_shutdownMode = GM_RESTART;
|
||||
}
|
||||
else
|
||||
{
|
||||
_shutdownMode = GM_SHUTDOWN;
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
{
|
||||
switch (seconds)
|
||||
{
|
||||
case 540:
|
||||
case 480:
|
||||
case 420:
|
||||
case 360:
|
||||
case 300:
|
||||
case 240:
|
||||
case 180:
|
||||
case 120:
|
||||
case 60:
|
||||
case 30:
|
||||
case 10:
|
||||
case 5:
|
||||
case 4:
|
||||
case 3:
|
||||
case 2:
|
||||
case 1:
|
||||
break;
|
||||
default:
|
||||
SendServerQuit(seconds);
|
||||
}
|
||||
}
|
||||
|
||||
if (_counterInstance != null)
|
||||
{
|
||||
_counterInstance._abort();
|
||||
}
|
||||
_counterInstance = new Shutdown(seconds, restart);
|
||||
_counterInstance.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* This function aborts a running countdown
|
||||
* @param IP IP Which Issued shutdown command
|
||||
*/
|
||||
public void telnetAbort(String IP)
|
||||
{
|
||||
_log.warning("IP: " + IP + " issued shutdown ABORT. " + MODE_TEXT[_shutdownMode] + " has been stopped!");
|
||||
|
||||
if (_counterInstance != null)
|
||||
{
|
||||
_counterInstance._abort();
|
||||
Announcements _an = Announcements.getInstance();
|
||||
_an.announceToAll("Server aborts " + MODE_TEXT[_shutdownMode] + " and continues normal operation!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default constucter is only used internal to create the shutdown-hook instance
|
||||
*/
|
||||
private Shutdown()
|
||||
{
|
||||
_secondsShut = -1;
|
||||
_shutdownMode = SIGTERM;
|
||||
}
|
||||
|
||||
/**
|
||||
* This creates a countdown instance of Shutdown.
|
||||
* @param seconds how many seconds until shutdown
|
||||
* @param restart true is the server shall restart after shutdown
|
||||
*/
|
||||
public Shutdown(int seconds, boolean restart)
|
||||
{
|
||||
if (seconds < 0)
|
||||
{
|
||||
seconds = 0;
|
||||
}
|
||||
_secondsShut = seconds;
|
||||
if (restart)
|
||||
{
|
||||
_shutdownMode = GM_RESTART;
|
||||
}
|
||||
else
|
||||
{
|
||||
_shutdownMode = GM_SHUTDOWN;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get the shutdown-hook instance the shutdown-hook instance is created by the first call of this function, but it has to be registrered externaly.
|
||||
* @return instance of Shutdown, to be used as shutdown hook
|
||||
*/
|
||||
public static Shutdown getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* this function is called, when a new thread starts if this thread is the thread of getInstance, then this is the shutdown hook and we save all data and disconnect all clients. after this thread ends, the server will completely exit if this is not the thread of getInstance, then this is a
|
||||
* countdown thread. we start the countdown, and when we finished it, and it was not aborted, we tell the shutdown-hook why we call exit, and then call exit when the exit status of the server is 1, startServer.sh / startServer.bat will restart the server.
|
||||
*/
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (this == SingletonHolder._instance)
|
||||
{
|
||||
try
|
||||
{
|
||||
if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
|
||||
{
|
||||
OfflineTradersTable.storeOffliners();
|
||||
}
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
_log.log(Level.WARNING, "Error saving offline shops.", t);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
disconnectAllCharacters();
|
||||
_log.info("All players disconnected.");
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
// ensure all services are stopped
|
||||
try
|
||||
{
|
||||
GameTimeController.getInstance().stopTimer();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
// stop all threadpolls
|
||||
try
|
||||
{
|
||||
ThreadPoolManager.getInstance().shutdown();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
CommunityServerThread.getInstance().interrupt();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
LoginServerThread.getInstance().interrupt();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
// last byebye, save all data and quit this server
|
||||
saveData();
|
||||
|
||||
// saveData sends messages to exit players, so shutdown selector after it
|
||||
try
|
||||
{
|
||||
GameServer.gameServer.getSelectorThread().shutdown();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
// commit data, last chance
|
||||
try
|
||||
{
|
||||
L2DatabaseFactory.getInstance().shutdown();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// server will quit, when this function ends.
|
||||
if (SingletonHolder._instance._shutdownMode == GM_RESTART)
|
||||
{
|
||||
Runtime.getRuntime().halt(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
Runtime.getRuntime().halt(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// gm shutdown: send warnings and then call exit to start shutdown sequence
|
||||
countdown();
|
||||
// last point where logging is operational :(
|
||||
_log.warning("GM shutdown countdown is over. " + MODE_TEXT[_shutdownMode] + " NOW!");
|
||||
switch (_shutdownMode)
|
||||
{
|
||||
case GM_SHUTDOWN:
|
||||
SingletonHolder._instance.setMode(GM_SHUTDOWN);
|
||||
System.exit(0);
|
||||
break;
|
||||
case GM_RESTART:
|
||||
SingletonHolder._instance.setMode(GM_RESTART);
|
||||
System.exit(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This functions starts a shutdown countdown
|
||||
* @param activeChar GM who issued the shutdown command
|
||||
* @param seconds seconds until shutdown
|
||||
* @param restart true if the server will restart after shutdown
|
||||
*/
|
||||
public void startShutdown(L2PcInstance activeChar, int seconds, boolean restart)
|
||||
{
|
||||
if (restart)
|
||||
{
|
||||
_shutdownMode = GM_RESTART;
|
||||
}
|
||||
else
|
||||
{
|
||||
_shutdownMode = GM_SHUTDOWN;
|
||||
}
|
||||
|
||||
_log.warning("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") issued shutdown command. " + MODE_TEXT[_shutdownMode] + " in " + seconds + " seconds!");
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
{
|
||||
switch (seconds)
|
||||
{
|
||||
case 540:
|
||||
case 480:
|
||||
case 420:
|
||||
case 360:
|
||||
case 300:
|
||||
case 240:
|
||||
case 180:
|
||||
case 120:
|
||||
case 60:
|
||||
case 30:
|
||||
case 10:
|
||||
case 5:
|
||||
case 4:
|
||||
case 3:
|
||||
case 2:
|
||||
case 1:
|
||||
break;
|
||||
default:
|
||||
SendServerQuit(seconds);
|
||||
}
|
||||
}
|
||||
|
||||
if (_counterInstance != null)
|
||||
{
|
||||
_counterInstance._abort();
|
||||
}
|
||||
|
||||
// the main instance should only run for shutdown hook, so we start a new instance
|
||||
_counterInstance = new Shutdown(seconds, restart);
|
||||
_counterInstance.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* This function aborts a running countdown
|
||||
* @param activeChar GM who issued the abort command
|
||||
*/
|
||||
public void abort(L2PcInstance activeChar)
|
||||
{
|
||||
_log.warning("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") issued shutdown ABORT. " + MODE_TEXT[_shutdownMode] + " has been stopped!");
|
||||
if (_counterInstance != null)
|
||||
{
|
||||
_counterInstance._abort();
|
||||
Announcements _an = Announcements.getInstance();
|
||||
_an.announceToAll("Server aborts " + MODE_TEXT[_shutdownMode] + " and continues normal operation!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set the shutdown mode
|
||||
* @param mode what mode shall be set
|
||||
*/
|
||||
private void setMode(int mode)
|
||||
{
|
||||
_shutdownMode = mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* set shutdown mode to ABORT
|
||||
*/
|
||||
private void _abort()
|
||||
{
|
||||
_shutdownMode = ABORT;
|
||||
}
|
||||
|
||||
/**
|
||||
* this counts the countdown and reports it to all players countdown is aborted if mode changes to ABORT
|
||||
*/
|
||||
private void countdown()
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
case 480:
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
case 420:
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
case 360:
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
case 300:
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
case 240:
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
case 180:
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
case 120:
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
case 60:
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
case 30:
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
case 10:
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
case 5:
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
case 4:
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
case 3:
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
case 2:
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
case 1:
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
// this will never happen
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* this sends a last byebye, disconnects all players and saves data
|
||||
*/
|
||||
private void saveData()
|
||||
{
|
||||
switch (_shutdownMode)
|
||||
{
|
||||
case SIGTERM:
|
||||
_log.info("SIGTERM received. Shutting down NOW!");
|
||||
break;
|
||||
case GM_SHUTDOWN:
|
||||
_log.info("GM shutdown received. Shutting down NOW!");
|
||||
break;
|
||||
case GM_RESTART:
|
||||
_log.info("GM restart received. Restarting NOW!");
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* if (Config.ACTIVATE_POSITION_RECORDER) Universe.getInstance().implode(true);
|
||||
*/
|
||||
|
||||
// Seven Signs data is now saved along with Festival data.
|
||||
if (!SevenSigns.getInstance().isSealValidationPeriod())
|
||||
{
|
||||
SevenSignsFestival.getInstance().saveFestivalData(false);
|
||||
}
|
||||
|
||||
// Save Seven Signs data before closing. :)
|
||||
SevenSigns.getInstance().saveSevenSignsData();
|
||||
SevenSigns.getInstance().saveSevenSignsStatus();
|
||||
|
||||
// Save all raidboss and GrandBoss status ^_^
|
||||
RaidBossSpawnManager.getInstance().cleanUp();
|
||||
_log.info("RaidBossSpawnManager: All raidboss info saved!!");
|
||||
GrandBossManager.getInstance().cleanUp();
|
||||
_log.info("GrandBossManager: All Grand Boss info saved!!");
|
||||
_log.info("TradeController saving data.. This action may take some minutes! Please wait until completed!");
|
||||
TradeController.getInstance().dataCountStore();
|
||||
_log.info("TradeController: All count Item Saved");
|
||||
ItemAuctionManager.getInstance().shutdown();
|
||||
Olympiad.getInstance().saveOlympiadStatus();
|
||||
_log.info("Olympiad System: Data saved!!");
|
||||
Hero.getInstance().shutdown();
|
||||
_log.info("Hero System: Data saved!!");
|
||||
ClanTable.getInstance().storeClanScore();
|
||||
_log.info("Clan System: Data saved!!");
|
||||
|
||||
// Save Cursed Weapons data before closing.
|
||||
CursedWeaponsManager.getInstance().saveData();
|
||||
|
||||
// Save all manor data
|
||||
CastleManorManager.getInstance().save();
|
||||
|
||||
// Save all global (non-player specific) Quest data that needs to persist after reboot
|
||||
QuestManager.getInstance().save();
|
||||
|
||||
// Save all global variables data
|
||||
GlobalVariablesManager.getInstance().saveVars();
|
||||
|
||||
// Save items on ground before closing
|
||||
if (Config.SAVE_DROPPED_ITEM)
|
||||
{
|
||||
ItemsOnGroundManager.getInstance().saveInDb();
|
||||
ItemsOnGroundManager.getInstance().cleanUp();
|
||||
_log.info("ItemsOnGroundManager: All items on ground saved!!");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
int delay = 5000;
|
||||
Thread.sleep(delay);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
// never happens :p
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* this disconnects all clients from the server
|
||||
*/
|
||||
private void disconnectAllCharacters()
|
||||
{
|
||||
Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
|
||||
// synchronized (L2World.getInstance().getAllPlayers())
|
||||
{
|
||||
for (L2PcInstance player : pls)
|
||||
{
|
||||
if (player == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// Logout Character
|
||||
try
|
||||
{
|
||||
L2GameClient client = player.getClient();
|
||||
if ((client != null) && !client.isDetached())
|
||||
{
|
||||
client.close(ServerClose.STATIC_PACKET);
|
||||
client.setActiveChar(null);
|
||||
player.setClient(null);
|
||||
}
|
||||
player.deleteMe();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
_log.log(Level.WARNING, "Failed logour char " + player, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final Shutdown _instance = new Shutdown();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
/**
|
||||
* @author mkizub
|
||||
*/
|
||||
public enum TaskPriority
|
||||
{
|
||||
PR_NORMAL,
|
||||
PR_HIGH,
|
||||
PR_URGENT;
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*
|
||||
coded by Balancer
|
||||
ported to L2JRU by Mr
|
||||
balancer@balancer.ru
|
||||
http://balancer.ru
|
||||
|
||||
version 0.1.1, 2005-06-07
|
||||
version 0.1, 2005-03-16
|
||||
*/
|
||||
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastMap;
|
||||
|
||||
import com.l2jserver.gameserver.model.L2Territory;
|
||||
import com.l2jserver.util.lib.SqlUtils;
|
||||
|
||||
public class Territory
|
||||
{
|
||||
private static Logger _log = Logger.getLogger(TradeController.class.getName());
|
||||
private static Map<Integer, L2Territory> _territory;
|
||||
|
||||
public static Territory getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
private Territory()
|
||||
{
|
||||
// load all data at server start
|
||||
reload_data();
|
||||
}
|
||||
|
||||
public int[] getRandomPoint(int terr)
|
||||
{
|
||||
return _territory.get(terr).getRandomPoint();
|
||||
}
|
||||
|
||||
public int getProcMax(int terr)
|
||||
{
|
||||
return _territory.get(terr).getProcMax();
|
||||
}
|
||||
|
||||
public void reload_data()
|
||||
{
|
||||
_territory = new FastMap<>();
|
||||
|
||||
Integer[][] point = SqlUtils.get2DIntArray(new String[]
|
||||
{
|
||||
"loc_id",
|
||||
"loc_x",
|
||||
"loc_y",
|
||||
"loc_zmin",
|
||||
"loc_zmax",
|
||||
"proc"
|
||||
}, "locations", "loc_id > 0");
|
||||
for (Integer[] row : point)
|
||||
{
|
||||
// _log.info("row = "+row[0]);
|
||||
Integer terr = row[0];
|
||||
if (terr == null)
|
||||
{
|
||||
_log.warning("Null territory!");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (_territory.get(terr) == null)
|
||||
{
|
||||
L2Territory t = new L2Territory(terr);
|
||||
_territory.put(terr, t);
|
||||
}
|
||||
_territory.get(terr).add(row[1], row[2], row[3], row[4], row[5]);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final Territory _instance = new Territory();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,510 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.lang.Thread.UncaughtExceptionHandler;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
import java.util.concurrent.RunnableScheduledFuture;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastList;
|
||||
import javolution.util.FastMap;
|
||||
import javolution.util.FastSet;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.util.StringUtil;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* This class is made to handle all the ThreadPools used in L2j.
|
||||
* </p>
|
||||
* <p>
|
||||
* Scheduled Tasks can either be sent to a {@link #_generalScheduledThreadPool "general"} or {@link #_effectsScheduledThreadPool "effects"} {@link ScheduledThreadPoolExecutor ScheduledThreadPool}: The "effects" one is used for every effects (skills, hp/mp regen ...) while the "general" one is used
|
||||
* for everything else that needs to be scheduled.<br>
|
||||
* There also is an {@link #_aiScheduledThreadPool "ai"} {@link ScheduledThreadPoolExecutor ScheduledThreadPool} used for AI Tasks.
|
||||
* </p>
|
||||
* <p>
|
||||
* Tasks can be sent to {@link ScheduledThreadPoolExecutor ScheduledThreadPool} either with:
|
||||
* <ul>
|
||||
* <li>{@link #scheduleEffect(Runnable, long)} : for effects Tasks that needs to be executed only once.</li>
|
||||
* <li>{@link #scheduleGeneral(Runnable, long)} : for scheduled Tasks that needs to be executed once.</li>
|
||||
* <li>{@link #scheduleAi(Runnable, long)} : for AI Tasks that needs to be executed once</li>
|
||||
* </ul>
|
||||
* or
|
||||
* <ul>
|
||||
* <li>{@link #scheduleEffectAtFixedRate(Runnable, long, long)(Runnable, long)} : for effects Tasks that needs to be executed periodicaly.</li>
|
||||
* <li>{@link #scheduleGeneralAtFixedRate(Runnable, long, long)(Runnable, long)} : for scheduled Tasks that needs to be executed periodicaly.</li>
|
||||
* <li>{@link #scheduleAiAtFixedRate(Runnable, long, long)(Runnable, long)} : for AI Tasks that needs to be executed periodicaly</li>
|
||||
* </ul>
|
||||
* </p>
|
||||
* <p>
|
||||
* For all Tasks that should be executed with no delay asynchronously in a ThreadPool there also are usual {@link ThreadPoolExecutor ThreadPools} that can grow/shrink according to their load.:
|
||||
* <ul>
|
||||
* <li>{@link #_generalPacketsThreadPool GeneralPackets} where most packets handler are executed.</li>
|
||||
* <li>{@link #_ioPacketsThreadPool I/O Packets} where all the i/o packets are executed.</li>
|
||||
* <li>There will be an AI ThreadPool where AI events should be executed</li>
|
||||
* <li>A general ThreadPool where everything else that needs to run asynchronously with no delay should be executed ({@link com.l2jserver.gameserver.model.actor.knownlist KnownList} updates, SQL updates/inserts...)?</li>
|
||||
* </ul>
|
||||
* </p>
|
||||
* @author -Wooden-
|
||||
*/
|
||||
public class ThreadPoolManager
|
||||
{
|
||||
protected static final Logger _log = Logger.getLogger(ThreadPoolManager.class.getName());
|
||||
|
||||
private static final class RunnableWrapper implements Runnable
|
||||
{
|
||||
private final Runnable _r;
|
||||
|
||||
public RunnableWrapper(final Runnable r)
|
||||
{
|
||||
_r = r;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
_r.run();
|
||||
}
|
||||
catch (final Throwable e)
|
||||
{
|
||||
final Thread t = Thread.currentThread();
|
||||
final UncaughtExceptionHandler h = t.getUncaughtExceptionHandler();
|
||||
if (h != null)
|
||||
{
|
||||
h.uncaughtException(t, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected final ScheduledThreadPoolExecutor _effectsScheduledThreadPool;
|
||||
protected final ScheduledThreadPoolExecutor _generalScheduledThreadPool;
|
||||
protected final ScheduledThreadPoolExecutor _aiScheduledThreadPool;
|
||||
private final ThreadPoolExecutor _generalPacketsThreadPool;
|
||||
private final ThreadPoolExecutor _ioPacketsThreadPool;
|
||||
private final ThreadPoolExecutor _generalThreadPool;
|
||||
|
||||
/** temp workaround for VM issue */
|
||||
private static final long MAX_DELAY = Long.MAX_VALUE / 1000000 / 2;
|
||||
|
||||
private boolean _shutdown;
|
||||
|
||||
public static ThreadPoolManager getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
private ThreadPoolManager()
|
||||
{
|
||||
_effectsScheduledThreadPool = new ScheduledThreadPoolExecutor(Config.THREAD_P_EFFECTS, new PriorityThreadFactory("EffectsSTPool", Thread.NORM_PRIORITY));
|
||||
_generalScheduledThreadPool = new ScheduledThreadPoolExecutor(Config.THREAD_P_GENERAL, new PriorityThreadFactory("GeneralSTPool", Thread.NORM_PRIORITY));
|
||||
_ioPacketsThreadPool = new ThreadPoolExecutor(Config.IO_PACKET_THREAD_CORE_SIZE, Integer.MAX_VALUE, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new PriorityThreadFactory("I/O Packet Pool", Thread.NORM_PRIORITY + 1));
|
||||
_generalPacketsThreadPool = new ThreadPoolExecutor(Config.GENERAL_PACKET_THREAD_CORE_SIZE, Config.GENERAL_PACKET_THREAD_CORE_SIZE + 2, 15L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new PriorityThreadFactory("Normal Packet Pool", Thread.NORM_PRIORITY + 1));
|
||||
_generalThreadPool = new ThreadPoolExecutor(Config.GENERAL_THREAD_CORE_SIZE, Config.GENERAL_THREAD_CORE_SIZE + 2, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new PriorityThreadFactory("General Pool", Thread.NORM_PRIORITY));
|
||||
_aiScheduledThreadPool = new ScheduledThreadPoolExecutor(Config.AI_MAX_THREAD, new PriorityThreadFactory("AISTPool", Thread.NORM_PRIORITY));
|
||||
|
||||
scheduleGeneralAtFixedRate(new PurgeTask(), 10 * 60 * 1000l, 5 * 60 * 1000l);
|
||||
}
|
||||
|
||||
public static long validateDelay(long delay)
|
||||
{
|
||||
if (delay < 0)
|
||||
{
|
||||
delay = 0;
|
||||
}
|
||||
else if (delay > MAX_DELAY)
|
||||
{
|
||||
delay = MAX_DELAY;
|
||||
}
|
||||
return delay;
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> scheduleEffect(Runnable r, long delay)
|
||||
{
|
||||
try
|
||||
{
|
||||
delay = ThreadPoolManager.validateDelay(delay);
|
||||
return _effectsScheduledThreadPool.schedule(new RunnableWrapper(r), delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
catch (RejectedExecutionException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> scheduleEffectAtFixedRate(Runnable r, long initial, long delay)
|
||||
{
|
||||
try
|
||||
{
|
||||
delay = ThreadPoolManager.validateDelay(delay);
|
||||
initial = ThreadPoolManager.validateDelay(initial);
|
||||
return _effectsScheduledThreadPool.scheduleAtFixedRate(new RunnableWrapper(r), initial, delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
catch (RejectedExecutionException e)
|
||||
{
|
||||
return null; /* shutdown, ignore */
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean removeEffect(RunnableScheduledFuture<?> r)
|
||||
{
|
||||
return _effectsScheduledThreadPool.remove(r);
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> scheduleGeneral(Runnable r, long delay)
|
||||
{
|
||||
try
|
||||
{
|
||||
delay = ThreadPoolManager.validateDelay(delay);
|
||||
return _generalScheduledThreadPool.schedule(new RunnableWrapper(r), delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
catch (RejectedExecutionException e)
|
||||
{
|
||||
return null; /* shutdown, ignore */
|
||||
}
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> scheduleGeneralAtFixedRate(Runnable r, long initial, long delay)
|
||||
{
|
||||
try
|
||||
{
|
||||
delay = ThreadPoolManager.validateDelay(delay);
|
||||
initial = ThreadPoolManager.validateDelay(initial);
|
||||
return _generalScheduledThreadPool.scheduleAtFixedRate(new RunnableWrapper(r), initial, delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
catch (RejectedExecutionException e)
|
||||
{
|
||||
return null; /* shutdown, ignore */
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean removeGeneral(RunnableScheduledFuture<?> r)
|
||||
{
|
||||
return _generalScheduledThreadPool.remove(r);
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> scheduleAi(Runnable r, long delay)
|
||||
{
|
||||
try
|
||||
{
|
||||
delay = ThreadPoolManager.validateDelay(delay);
|
||||
return _aiScheduledThreadPool.schedule(new RunnableWrapper(r), delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
catch (RejectedExecutionException e)
|
||||
{
|
||||
return null; /* shutdown, ignore */
|
||||
}
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> scheduleAiAtFixedRate(Runnable r, long initial, long delay)
|
||||
{
|
||||
try
|
||||
{
|
||||
delay = ThreadPoolManager.validateDelay(delay);
|
||||
initial = ThreadPoolManager.validateDelay(initial);
|
||||
return _aiScheduledThreadPool.scheduleAtFixedRate(new RunnableWrapper(r), initial, delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
catch (RejectedExecutionException e)
|
||||
{
|
||||
return null; /* shutdown, ignore */
|
||||
}
|
||||
}
|
||||
|
||||
public void executePacket(Runnable pkt)
|
||||
{
|
||||
_generalPacketsThreadPool.execute(pkt);
|
||||
}
|
||||
|
||||
public void executeCommunityPacket(Runnable r)
|
||||
{
|
||||
_generalPacketsThreadPool.execute(r);
|
||||
}
|
||||
|
||||
public void executeIOPacket(Runnable pkt)
|
||||
{
|
||||
_ioPacketsThreadPool.execute(pkt);
|
||||
}
|
||||
|
||||
public void executeTask(Runnable r)
|
||||
{
|
||||
_generalThreadPool.execute(r);
|
||||
}
|
||||
|
||||
public void executeAi(Runnable r)
|
||||
{
|
||||
_aiScheduledThreadPool.execute(new RunnableWrapper(r));
|
||||
}
|
||||
|
||||
public String[] getStats()
|
||||
{
|
||||
return new String[]
|
||||
{
|
||||
"STP:",
|
||||
" + Effects:",
|
||||
" |- ActiveThreads: " + _effectsScheduledThreadPool.getActiveCount(),
|
||||
" |- getCorePoolSize: " + _effectsScheduledThreadPool.getCorePoolSize(),
|
||||
" |- PoolSize: " + _effectsScheduledThreadPool.getPoolSize(),
|
||||
" |- MaximumPoolSize: " + _effectsScheduledThreadPool.getMaximumPoolSize(),
|
||||
" |- CompletedTasks: " + _effectsScheduledThreadPool.getCompletedTaskCount(),
|
||||
" |- ScheduledTasks: " + (_effectsScheduledThreadPool.getTaskCount() - _effectsScheduledThreadPool.getCompletedTaskCount()),
|
||||
" | -------",
|
||||
" + General:",
|
||||
" |- ActiveThreads: " + _generalScheduledThreadPool.getActiveCount(),
|
||||
" |- getCorePoolSize: " + _generalScheduledThreadPool.getCorePoolSize(),
|
||||
" |- PoolSize: " + _generalScheduledThreadPool.getPoolSize(),
|
||||
" |- MaximumPoolSize: " + _generalScheduledThreadPool.getMaximumPoolSize(),
|
||||
" |- CompletedTasks: " + _generalScheduledThreadPool.getCompletedTaskCount(),
|
||||
" |- ScheduledTasks: " + (_generalScheduledThreadPool.getTaskCount() - _generalScheduledThreadPool.getCompletedTaskCount()),
|
||||
" | -------",
|
||||
" + AI:",
|
||||
" |- ActiveThreads: " + _aiScheduledThreadPool.getActiveCount(),
|
||||
" |- getCorePoolSize: " + _aiScheduledThreadPool.getCorePoolSize(),
|
||||
" |- PoolSize: " + _aiScheduledThreadPool.getPoolSize(),
|
||||
" |- MaximumPoolSize: " + _aiScheduledThreadPool.getMaximumPoolSize(),
|
||||
" |- CompletedTasks: " + _aiScheduledThreadPool.getCompletedTaskCount(),
|
||||
" |- ScheduledTasks: " + (_aiScheduledThreadPool.getTaskCount() - _aiScheduledThreadPool.getCompletedTaskCount()),
|
||||
"TP:",
|
||||
" + Packets:",
|
||||
" |- ActiveThreads: " + _generalPacketsThreadPool.getActiveCount(),
|
||||
" |- getCorePoolSize: " + _generalPacketsThreadPool.getCorePoolSize(),
|
||||
" |- MaximumPoolSize: " + _generalPacketsThreadPool.getMaximumPoolSize(),
|
||||
" |- LargestPoolSize: " + _generalPacketsThreadPool.getLargestPoolSize(),
|
||||
" |- PoolSize: " + _generalPacketsThreadPool.getPoolSize(),
|
||||
" |- CompletedTasks: " + _generalPacketsThreadPool.getCompletedTaskCount(),
|
||||
" |- QueuedTasks: " + _generalPacketsThreadPool.getQueue().size(),
|
||||
" | -------",
|
||||
" + I/O Packets:",
|
||||
" |- ActiveThreads: " + _ioPacketsThreadPool.getActiveCount(),
|
||||
" |- getCorePoolSize: " + _ioPacketsThreadPool.getCorePoolSize(),
|
||||
" |- MaximumPoolSize: " + _ioPacketsThreadPool.getMaximumPoolSize(),
|
||||
" |- LargestPoolSize: " + _ioPacketsThreadPool.getLargestPoolSize(),
|
||||
" |- PoolSize: " + _ioPacketsThreadPool.getPoolSize(),
|
||||
" |- CompletedTasks: " + _ioPacketsThreadPool.getCompletedTaskCount(),
|
||||
" |- QueuedTasks: " + _ioPacketsThreadPool.getQueue().size(),
|
||||
" | -------",
|
||||
" + General Tasks:",
|
||||
" |- ActiveThreads: " + _generalThreadPool.getActiveCount(),
|
||||
" |- getCorePoolSize: " + _generalThreadPool.getCorePoolSize(),
|
||||
" |- MaximumPoolSize: " + _generalThreadPool.getMaximumPoolSize(),
|
||||
" |- LargestPoolSize: " + _generalThreadPool.getLargestPoolSize(),
|
||||
" |- PoolSize: " + _generalThreadPool.getPoolSize(),
|
||||
" |- CompletedTasks: " + _generalThreadPool.getCompletedTaskCount(),
|
||||
" |- QueuedTasks: " + _generalThreadPool.getQueue().size(),
|
||||
" | -------",
|
||||
" + Javolution stats:",
|
||||
" |- FastList: " + FastList.report(),
|
||||
" |- FastMap: " + FastMap.report(),
|
||||
" |- FastSet: " + FastSet.report(),
|
||||
" | -------"
|
||||
};
|
||||
}
|
||||
|
||||
private static class PriorityThreadFactory implements ThreadFactory
|
||||
{
|
||||
private final int _prio;
|
||||
private final String _name;
|
||||
private final AtomicInteger _threadNumber = new AtomicInteger(1);
|
||||
private final ThreadGroup _group;
|
||||
|
||||
public PriorityThreadFactory(String name, int prio)
|
||||
{
|
||||
_prio = prio;
|
||||
_name = name;
|
||||
_group = new ThreadGroup(_name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Thread newThread(Runnable r)
|
||||
{
|
||||
Thread t = new Thread(_group, r);
|
||||
t.setName(_name + "-" + _threadNumber.getAndIncrement());
|
||||
t.setPriority(_prio);
|
||||
return t;
|
||||
}
|
||||
|
||||
public ThreadGroup getGroup()
|
||||
{
|
||||
return _group;
|
||||
}
|
||||
}
|
||||
|
||||
public void shutdown()
|
||||
{
|
||||
_shutdown = true;
|
||||
try
|
||||
{
|
||||
_effectsScheduledThreadPool.awaitTermination(1, TimeUnit.SECONDS);
|
||||
_generalScheduledThreadPool.awaitTermination(1, TimeUnit.SECONDS);
|
||||
_generalPacketsThreadPool.awaitTermination(1, TimeUnit.SECONDS);
|
||||
_ioPacketsThreadPool.awaitTermination(1, TimeUnit.SECONDS);
|
||||
_generalThreadPool.awaitTermination(1, TimeUnit.SECONDS);
|
||||
_effectsScheduledThreadPool.shutdown();
|
||||
_generalScheduledThreadPool.shutdown();
|
||||
_generalPacketsThreadPool.shutdown();
|
||||
_ioPacketsThreadPool.shutdown();
|
||||
_generalThreadPool.shutdown();
|
||||
_log.info("All ThreadPools are now stopped");
|
||||
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
_log.log(Level.WARNING, "", e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isShutdown()
|
||||
{
|
||||
return _shutdown;
|
||||
}
|
||||
|
||||
public void purge()
|
||||
{
|
||||
_effectsScheduledThreadPool.purge();
|
||||
_generalScheduledThreadPool.purge();
|
||||
_aiScheduledThreadPool.purge();
|
||||
_ioPacketsThreadPool.purge();
|
||||
_generalPacketsThreadPool.purge();
|
||||
_generalThreadPool.purge();
|
||||
}
|
||||
|
||||
public String getPacketStats()
|
||||
{
|
||||
final StringBuilder sb = new StringBuilder(1000);
|
||||
ThreadFactory tf = _generalPacketsThreadPool.getThreadFactory();
|
||||
if (tf instanceof PriorityThreadFactory)
|
||||
{
|
||||
PriorityThreadFactory ptf = (PriorityThreadFactory) tf;
|
||||
int count = ptf.getGroup().activeCount();
|
||||
Thread[] threads = new Thread[count + 2];
|
||||
ptf.getGroup().enumerate(threads);
|
||||
StringUtil.append(sb, "General Packet Thread Pool:\r\n" + "Tasks in the queue: ", String.valueOf(_generalPacketsThreadPool.getQueue().size()), "\r\n" + "Showing threads stack trace:\r\n" + "There should be ", String.valueOf(count), " Threads\r\n");
|
||||
for (Thread t : threads)
|
||||
{
|
||||
if (t == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
StringUtil.append(sb, t.getName(), "\r\n");
|
||||
for (StackTraceElement ste : t.getStackTrace())
|
||||
{
|
||||
StringUtil.append(sb, ste.toString(), "\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sb.append("Packet Tp stack traces printed.\r\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String getIOPacketStats()
|
||||
{
|
||||
final StringBuilder sb = new StringBuilder(1000);
|
||||
ThreadFactory tf = _ioPacketsThreadPool.getThreadFactory();
|
||||
|
||||
if (tf instanceof PriorityThreadFactory)
|
||||
{
|
||||
PriorityThreadFactory ptf = (PriorityThreadFactory) tf;
|
||||
int count = ptf.getGroup().activeCount();
|
||||
Thread[] threads = new Thread[count + 2];
|
||||
ptf.getGroup().enumerate(threads);
|
||||
StringUtil.append(sb, "I/O Packet Thread Pool:\r\n" + "Tasks in the queue: ", String.valueOf(_ioPacketsThreadPool.getQueue().size()), "\r\n" + "Showing threads stack trace:\r\n" + "There should be ", String.valueOf(count), " Threads\r\n");
|
||||
|
||||
for (Thread t : threads)
|
||||
{
|
||||
if (t == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
StringUtil.append(sb, t.getName(), "\r\n");
|
||||
|
||||
for (StackTraceElement ste : t.getStackTrace())
|
||||
{
|
||||
StringUtil.append(sb, ste.toString(), "\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sb.append("Packet Tp stack traces printed.\r\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String getGeneralStats()
|
||||
{
|
||||
final StringBuilder sb = new StringBuilder(1000);
|
||||
ThreadFactory tf = _generalThreadPool.getThreadFactory();
|
||||
|
||||
if (tf instanceof PriorityThreadFactory)
|
||||
{
|
||||
PriorityThreadFactory ptf = (PriorityThreadFactory) tf;
|
||||
int count = ptf.getGroup().activeCount();
|
||||
Thread[] threads = new Thread[count + 2];
|
||||
ptf.getGroup().enumerate(threads);
|
||||
StringUtil.append(sb, "General Thread Pool:\r\n" + "Tasks in the queue: ", String.valueOf(_generalThreadPool.getQueue().size()), "\r\n" + "Showing threads stack trace:\r\n" + "There should be ", String.valueOf(count), " Threads\r\n");
|
||||
|
||||
for (Thread t : threads)
|
||||
{
|
||||
if (t == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
StringUtil.append(sb, t.getName(), "\r\n");
|
||||
|
||||
for (StackTraceElement ste : t.getStackTrace())
|
||||
{
|
||||
StringUtil.append(sb, ste.toString(), "\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sb.append("Packet Tp stack traces printed.\r\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
protected class PurgeTask implements Runnable
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
_effectsScheduledThreadPool.purge();
|
||||
_generalScheduledThreadPool.purge();
|
||||
_aiScheduledThreadPool.purge();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final ThreadPoolManager _instance = new ThreadPoolManager();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,330 @@
|
||||
/*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.gameserver;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javolution.util.FastList;
|
||||
import javolution.util.FastMap;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.L2DatabaseFactory;
|
||||
import com.l2jserver.gameserver.datatables.ItemTable;
|
||||
import com.l2jserver.gameserver.model.L2TradeList;
|
||||
import com.l2jserver.gameserver.model.L2TradeList.L2TradeItem;
|
||||
|
||||
/**
|
||||
* This class ...
|
||||
* @version $Revision: 1.5.4.13 $ $Date: 2005/04/06 16:13:38 $
|
||||
*/
|
||||
public class TradeController
|
||||
{
|
||||
private static Logger _log = Logger.getLogger(TradeController.class.getName());
|
||||
|
||||
private int _nextListId;
|
||||
private final Map<Integer, L2TradeList> _lists = new FastMap<>();
|
||||
|
||||
/** Task launching the function for restore count of Item (Clan Hall) */
|
||||
/*
|
||||
* public class RestoreCount implements Runnable { private int _timer; public RestoreCount(int time) { _timer = time; } public void run() { restoreCount(_timer); dataTimerSave(_timer); ThreadPoolManager.getInstance().scheduleGeneral(new RestoreCount(_timer), (long)_timer*60*60*1000); } }
|
||||
*/
|
||||
|
||||
public static TradeController getInstance()
|
||||
{
|
||||
return SingletonHolder._instance;
|
||||
}
|
||||
|
||||
private TradeController()
|
||||
{
|
||||
_lists.clear();
|
||||
Connection con = null;
|
||||
|
||||
/*
|
||||
* Initialize Shop buylist
|
||||
*/
|
||||
try
|
||||
{
|
||||
con = L2DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement1 = con.prepareStatement("SELECT shop_id, npc_id FROM merchant_shopids");
|
||||
ResultSet rset1 = statement1.executeQuery();
|
||||
|
||||
int itemId, price, maxCount, currentCount, time;
|
||||
long saveTimer;
|
||||
PreparedStatement statement = con.prepareStatement("SELECT item_id, price, shop_id, " + L2DatabaseFactory.getInstance().safetyString("order") + ", count, currentCount, time, savetimer FROM merchant_buylists WHERE shop_id=? ORDER BY " + L2DatabaseFactory.getInstance().safetyString("order") + " ASC");
|
||||
while (rset1.next())
|
||||
{
|
||||
statement.setString(1, String.valueOf(rset1.getInt("shop_id")));
|
||||
ResultSet rset = statement.executeQuery();
|
||||
statement.clearParameters();
|
||||
|
||||
int shopId = rset1.getInt("shop_id");
|
||||
L2TradeList buy1 = new L2TradeList(shopId);
|
||||
|
||||
while (rset.next())
|
||||
{
|
||||
itemId = rset.getInt("item_id");
|
||||
price = rset.getInt("price");
|
||||
maxCount = rset.getInt("count");
|
||||
currentCount = rset.getInt("currentCount");
|
||||
time = rset.getInt("time");
|
||||
saveTimer = rset.getLong("saveTimer");
|
||||
|
||||
L2TradeItem item = new L2TradeItem(shopId, itemId);
|
||||
if (ItemTable.getInstance().getTemplate(itemId) == null)
|
||||
{
|
||||
_log.warning("Skipping itemId: " + itemId + " on buylistId: " + buy1.getListId() + ", missing data for that item.");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (price <= -1)
|
||||
{
|
||||
price = ItemTable.getInstance().getTemplate(itemId).getReferencePrice();
|
||||
}
|
||||
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
// debug
|
||||
double diff = ((double) (price)) / ItemTable.getInstance().getTemplate(itemId).getReferencePrice();
|
||||
if ((diff < 0.8) || (diff > 1.2))
|
||||
{
|
||||
_log.severe("PRICING DEBUG: TradeListId: " + buy1.getListId() + " - ItemId: " + itemId + " (" + ItemTable.getInstance().getTemplate(itemId).getName() + ") diff: " + diff + " - Price: " + price + " - Reference: " + ItemTable.getInstance().getTemplate(itemId).getReferencePrice());
|
||||
}
|
||||
}
|
||||
|
||||
item.setPrice(price);
|
||||
|
||||
item.setRestoreDelay(time);
|
||||
item.setNextRestoreTime(saveTimer);
|
||||
item.setMaxCount(maxCount);
|
||||
|
||||
if (currentCount > -1)
|
||||
{
|
||||
item.setCurrentCount(currentCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.setCurrentCount(maxCount);
|
||||
}
|
||||
|
||||
buy1.addItem(item);
|
||||
}
|
||||
|
||||
buy1.setNpcId(rset1.getString("npc_id"));
|
||||
_lists.put(buy1.getListId(), buy1);
|
||||
_nextListId = Math.max(_nextListId, buy1.getListId() + 1);
|
||||
|
||||
rset.close();
|
||||
}
|
||||
statement.close();
|
||||
rset1.close();
|
||||
statement1.close();
|
||||
|
||||
_log.info("TradeController: Loaded " + _lists.size() + " Buylists.");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// problem with initializing spawn, go to next one
|
||||
_log.log(Level.WARNING, "TradeController: Buylists could not be initialized: " + e.getMessage(), e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
L2DatabaseFactory.close(con);
|
||||
}
|
||||
|
||||
/*
|
||||
* If enabled, initialize the custom buylist
|
||||
*/
|
||||
if (Config.CUSTOM_MERCHANT_TABLES)
|
||||
{
|
||||
try
|
||||
{
|
||||
int initialSize = _lists.size();
|
||||
con = L2DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement1 = con.prepareStatement("SELECT shop_id, npc_id FROM custom_merchant_shopids");
|
||||
ResultSet rset1 = statement1.executeQuery();
|
||||
|
||||
int itemId, price, maxCount, currentCount, time;
|
||||
long saveTimer;
|
||||
PreparedStatement statement = con.prepareStatement("SELECT item_id, price, shop_id, " + L2DatabaseFactory.getInstance().safetyString("order") + ", count, currentCount, time, savetimer FROM custom_merchant_buylists WHERE shop_id=? ORDER BY " + L2DatabaseFactory.getInstance().safetyString("order") + " ASC");
|
||||
while (rset1.next())
|
||||
{
|
||||
statement.setString(1, String.valueOf(rset1.getInt("shop_id")));
|
||||
ResultSet rset = statement.executeQuery();
|
||||
statement.clearParameters();
|
||||
|
||||
int shopId = rset1.getInt("shop_id");
|
||||
L2TradeList buy1 = new L2TradeList(shopId);
|
||||
|
||||
while (rset.next())
|
||||
{
|
||||
itemId = rset.getInt("item_id");
|
||||
price = rset.getInt("price");
|
||||
maxCount = rset.getInt("count");
|
||||
currentCount = rset.getInt("currentCount");
|
||||
time = rset.getInt("time");
|
||||
saveTimer = rset.getLong("saveTimer");
|
||||
|
||||
L2TradeItem item = new L2TradeItem(shopId, itemId);
|
||||
if (ItemTable.getInstance().getTemplate(itemId) == null)
|
||||
{
|
||||
_log.warning("Skipping itemId: " + itemId + " on buylistId: " + buy1.getListId() + ", missing data for that item.");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (price <= -1)
|
||||
{
|
||||
price = ItemTable.getInstance().getTemplate(itemId).getReferencePrice();
|
||||
}
|
||||
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
// debug
|
||||
double diff = ((double) (price)) / ItemTable.getInstance().getTemplate(itemId).getReferencePrice();
|
||||
if ((diff < 0.8) || (diff > 1.2))
|
||||
{
|
||||
_log.severe("PRICING DEBUG: TradeListId: " + buy1.getListId() + " - ItemId: " + itemId + " (" + ItemTable.getInstance().getTemplate(itemId).getName() + ") diff: " + diff + " - Price: " + price + " - Reference: " + ItemTable.getInstance().getTemplate(itemId).getReferencePrice());
|
||||
}
|
||||
}
|
||||
|
||||
item.setPrice(price);
|
||||
|
||||
item.setRestoreDelay(time);
|
||||
item.setNextRestoreTime(saveTimer);
|
||||
item.setMaxCount(maxCount);
|
||||
|
||||
if (currentCount > -1)
|
||||
{
|
||||
item.setCurrentCount(currentCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.setCurrentCount(maxCount);
|
||||
}
|
||||
|
||||
buy1.addItem(item);
|
||||
}
|
||||
|
||||
buy1.setNpcId(rset1.getString("npc_id"));
|
||||
_lists.put(buy1.getListId(), buy1);
|
||||
_nextListId = Math.max(_nextListId, buy1.getListId() + 1);
|
||||
|
||||
rset.close();
|
||||
}
|
||||
statement.close();
|
||||
rset1.close();
|
||||
statement1.close();
|
||||
|
||||
_log.info("TradeController: Loaded " + (_lists.size() - initialSize) + " Custom Buylists.");
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// problem with initializing spawn, go to next one
|
||||
_log.log(Level.WARNING, "TradeController: Buylists could not be initialized: " + e.getMessage(), e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
L2DatabaseFactory.close(con);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public L2TradeList getBuyList(int listId)
|
||||
{
|
||||
return _lists.get(listId);
|
||||
}
|
||||
|
||||
public List<L2TradeList> getBuyListByNpcId(int npcId)
|
||||
{
|
||||
List<L2TradeList> lists = new FastList<>();
|
||||
Collection<L2TradeList> values = _lists.values();
|
||||
|
||||
for (L2TradeList list : values)
|
||||
{
|
||||
String tradeNpcId = list.getNpcId();
|
||||
if (tradeNpcId.startsWith("gm"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (npcId == Integer.parseInt(tradeNpcId))
|
||||
{
|
||||
lists.add(list);
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
|
||||
public void dataCountStore()
|
||||
{
|
||||
Connection con = null;
|
||||
int listId;
|
||||
|
||||
try
|
||||
{
|
||||
con = L2DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("UPDATE merchant_buylists SET currentCount=? WHERE item_id=? AND shop_id=?");
|
||||
for (L2TradeList list : _lists.values())
|
||||
{
|
||||
if (list.hasLimitedStockItem())
|
||||
{
|
||||
listId = list.getListId();
|
||||
|
||||
for (L2TradeItem item : list.getItems())
|
||||
{
|
||||
long currentCount;
|
||||
if (item.hasLimitedStock() && ((currentCount = item.getCurrentCount()) < item.getMaxCount()))
|
||||
{
|
||||
statement.setLong(1, currentCount);
|
||||
statement.setInt(2, item.getItemId());
|
||||
statement.setInt(3, listId);
|
||||
statement.executeUpdate();
|
||||
statement.clearParameters();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
statement.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "TradeController: Could not store Count Item: " + e.getMessage(), e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
L2DatabaseFactory.close(con);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public synchronized int getNextId()
|
||||
{
|
||||
return _nextListId++;
|
||||
}
|
||||
|
||||
@SuppressWarnings("synthetic-access")
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final TradeController _instance = new TradeController();
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user